1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #!/usr/bin/env bash
- #
- # Solaris 12 base image build script.
- #
- set -e
- # TODO add optional package publisher origin
- rootfsDir="$1"
- shift
- # base install
- (
- set -x
- pkg image-create --full --zone \
- --facet facet.locale.*=false \
- --facet facet.locale.POSIX=true \
- --facet facet.doc=false \
- --facet facet.doc.*=false \
- "$rootfsDir"
- pkg -R "$rootfsDir" set-property use-system-repo true
- pkg -R "$rootfsDir" set-property flush-content-cache-on-success true
- pkg -R "$rootfsDir" install core-os
- )
- # Lay in stock configuration, set up milestone
- # XXX This all may become optional in a base image
- (
- # faster to build repository database on tmpfs
- REPO_DB=/system/volatile/repository.$$
- export SVCCFG_REPOSITORY=${REPO_DB}
- export SVCCFG_DOOR_PATH=$rootfsDir/system/volatile/tmp_repo_door
- # Import base manifests. NOTE These are a combination of basic requirement
- # and gleaned from container milestone manifest. They may change.
- for m in $rootfsDir/lib/svc/manifest/system/environment.xml \
- $rootfsDir/lib/svc/manifest/system/svc/global.xml \
- $rootfsDir/lib/svc/manifest/system/svc/restarter.xml \
- $rootfsDir/lib/svc/manifest/network/dns/client.xml \
- $rootfsDir/lib/svc/manifest/system/name-service/switch.xml \
- $rootfsDir/lib/svc/manifest/system/name-service/cache.xml \
- $rootfsDir/lib/svc/manifest/milestone/container.xml ; do
- svccfg import $m
- done
- # Apply system layer profile, deleting unnecessary dependencies
- svccfg apply $rootfsDir/etc/svc/profile/generic_container.xml
- # XXX Even if we keep a repo in the base image, this is definitely optional
- svccfg apply $rootfsDir/etc/svc/profile/sysconfig/container_sc.xml
- for s in svc:/system/svc/restarter \
- svc:/system/environment \
- svc:/network/dns/client \
- svc:/system/name-service/switch \
- svc:/system/name-service/cache \
- svc:/system/svc/global \
- svc:/milestone/container ;do
- svccfg -s $s refresh
- done
- # now copy the built up repository into the base rootfs
- mv $REPO_DB $rootfsDir/etc/svc/repository.db
- )
- # pkg(1) needs the zoneproxy-client running in the container.
- # use a simple wrapper to run it as needed.
- # XXX maybe we go back to running this in SMF?
- mv "$rootfsDir/usr/bin/pkg" "$rootfsDir/usr/bin/wrapped_pkg"
- cat > "$rootfsDir/usr/bin/pkg" <<-'EOF'
- #!/bin/sh
- #
- # THIS FILE CREATED DURING DOCKER BASE IMAGE CREATION
- #
- # The Solaris base image uses the sysrepo proxy mechanism. The
- # IPS client pkg(1) requires the zoneproxy-client to reach the
- # remote publisher origins through the host. This wrapper script
- # enables and disables the proxy client as needed. This is a
- # temporary solution.
- /usr/lib/zones/zoneproxy-client -s localhost:1008
- PKG_SYSREPO_URL=http://localhost:1008 /usr/bin/wrapped_pkg "$@"
- pkill -9 zoneproxy-client
- EOF
- chmod +x "$rootfsDir/usr/bin/pkg"
|