github.com/Shopify/docker@v1.13.1/contrib/mkimage/solaris (about)

     1  #!/usr/bin/env bash
     2  #
     3  # Solaris 12 base image build script. 
     4  #
     5  set -e
     6  
     7  # TODO add optional package publisher origin
     8  
     9  rootfsDir="$1"
    10  shift
    11  
    12  # base install
    13  (
    14  	set -x
    15  
    16  	pkg image-create --full --zone \
    17  		--facet facet.locale.*=false \
    18  		--facet facet.locale.POSIX=true \
    19  		--facet facet.doc=false \
    20  		--facet facet.doc.*=false \
    21  		"$rootfsDir"
    22  
    23  	pkg -R "$rootfsDir" set-property use-system-repo true
    24  
    25  	pkg -R "$rootfsDir" set-property flush-content-cache-on-success true
    26  
    27  	pkg -R "$rootfsDir" install core-os
    28  )
    29  
    30  # Lay in stock configuration, set up milestone
    31  # XXX This all may become optional in a base image
    32  (
    33  	# faster to build repository database on tmpfs
    34  	REPO_DB=/system/volatile/repository.$$
    35  	export SVCCFG_REPOSITORY=${REPO_DB}
    36  	export SVCCFG_DOOR_PATH=$rootfsDir/system/volatile/tmp_repo_door
    37  
    38  	# Import base manifests. NOTE These are a combination of basic requirement
    39  	# and gleaned from container milestone manifest. They may change.
    40  	for m in $rootfsDir/lib/svc/manifest/system/environment.xml \
    41  		$rootfsDir/lib/svc/manifest/system/svc/global.xml \
    42  		$rootfsDir/lib/svc/manifest/system/svc/restarter.xml \
    43  		$rootfsDir/lib/svc/manifest/network/dns/client.xml \
    44  		$rootfsDir/lib/svc/manifest/system/name-service/switch.xml \
    45  		$rootfsDir/lib/svc/manifest/system/name-service/cache.xml \
    46  		$rootfsDir/lib/svc/manifest/milestone/container.xml ; do
    47  		svccfg import $m
    48  	done
    49  
    50  	# Apply system layer profile, deleting unnecessary dependencies
    51  	svccfg apply $rootfsDir/etc/svc/profile/generic_container.xml 
    52  
    53  	# XXX Even if we keep a repo in the base image, this is definitely optional
    54  	svccfg apply $rootfsDir/etc/svc/profile/sysconfig/container_sc.xml
    55  
    56  	for s in svc:/system/svc/restarter \
    57  		svc:/system/environment \
    58  		svc:/network/dns/client \
    59  		svc:/system/name-service/switch \
    60  		svc:/system/name-service/cache \
    61  		svc:/system/svc/global \
    62  		svc:/milestone/container ;do
    63  		svccfg -s $s refresh
    64  	done
    65  
    66  	# now copy the built up repository into the base rootfs
    67  	mv $REPO_DB $rootfsDir/etc/svc/repository.db
    68  )
    69  
    70  # pkg(1) needs the zoneproxy-client running in the container.
    71  # use a simple wrapper to run it as needed.
    72  # XXX maybe we go back to running this in SMF?
    73  mv "$rootfsDir/usr/bin/pkg" "$rootfsDir/usr/bin/wrapped_pkg"
    74  cat > "$rootfsDir/usr/bin/pkg" <<-'EOF'
    75  #!/bin/sh
    76  #
    77  # THIS FILE CREATED DURING DOCKER BASE IMAGE CREATION
    78  # 
    79  # The Solaris base image uses the sysrepo proxy mechanism. The
    80  # IPS client pkg(1) requires the zoneproxy-client to reach the
    81  # remote publisher origins through the host. This wrapper script
    82  # enables and disables the proxy client as needed. This is a
    83  # temporary solution.
    84  
    85  /usr/lib/zones/zoneproxy-client -s localhost:1008
    86  PKG_SYSREPO_URL=http://localhost:1008 /usr/bin/wrapped_pkg "$@"
    87  pkill -9 zoneproxy-client
    88  EOF
    89  chmod +x "$rootfsDir/usr/bin/pkg"