diff options
-rw-r--r-- | manifest | 1 | ||||
-rw-r--r-- | usr/src/lib/brand/lx/zone/Makefile | 2 | ||||
-rw-r--r-- | usr/src/lib/brand/lx/zone/lx_boot.ksh | 52 | ||||
-rw-r--r-- | usr/src/lib/brand/lx/zone/lx_boot_zone_ubuntu.ksh | 217 | ||||
-rw-r--r-- | usr/src/lib/brand/lx/zone/lx_init_zone_ubuntu.ksh | 178 |
5 files changed, 257 insertions, 193 deletions
@@ -5041,6 +5041,7 @@ f usr/lib/brand/lx/amd64/lx_thunk.so.1 0755 root root f usr/lib/brand/lx/etc_default_nfs 0444 root root f usr/lib/brand/lx/etc_netconfig 0444 root root f usr/lib/brand/lx/lx_boot 0755 root root +f usr/lib/brand/lx/lx_boot_zone_ubuntu 0755 root root f usr/lib/brand/lx/lx_init_zone 0755 root root f usr/lib/brand/lx/lx_init_zone_debian 0755 root root f usr/lib/brand/lx/lx_init_zone_redhat 0755 root root diff --git a/usr/src/lib/brand/lx/zone/Makefile b/usr/src/lib/brand/lx/zone/Makefile index 92695fba65..6e820bd506 100644 --- a/usr/src/lib/brand/lx/zone/Makefile +++ b/usr/src/lib/brand/lx/zone/Makefile @@ -27,7 +27,7 @@ PROGS = lx_install lx_distro_install lx_init_zone lx_boot PROGS += lx_init_zone_debian lx_init_zone_redhat lx_init_zone_ubuntu -PROGS += lx_networking +PROGS += lx_networking lx_boot_zone_ubuntu SUBDIRS = distros XMLDOCS = config.xml platform.xml TEMPLATES = SUNWlx.xml SUNWlx26.xml diff --git a/usr/src/lib/brand/lx/zone/lx_boot.ksh b/usr/src/lib/brand/lx/zone/lx_boot.ksh index df9c89881e..3c46e056dd 100644 --- a/usr/src/lib/brand/lx/zone/lx_boot.ksh +++ b/usr/src/lib/brand/lx/zone/lx_boot.ksh @@ -105,21 +105,39 @@ wrap_with_native() { # # Before we boot we validate and fix, if necessary, the required files within -# the zone. These modifications can be lost if a patch is applied within the -# zone, so we validate and fix the zone every time it boots. +# the zone. These modifications can be lost if a patch or upgrade is applied +# within the zone, so we validate and fix the zone every time it boots. # # +# Determine the distro. +# +distro="" +if [[ -f $ZONEROOT/etc/redhat-release ]]; then + distro="redhat" +elif [[ -f $ZONEROOT/etc/lsb-release ]]; then + if egrep -s Ubuntu $ZONEROOT/etc/lsb-release; then + distro="ubuntu" + elif [[ -f $ZONEROOT/etc/debian_version ]]; then + distro="debian" + fi +elif [[ -f $ZONEROOT/etc/debian_version ]]; then + distro="debian" +fi + +[[ -z $distro ]] && fatal "Unsupported distribution!" + +# # BINARY REPLACEMENT # -# This section of the boot script is responsible for replacing Solaris 10 -# binaries within the booting zone with Nevada binaries. This is a two-step +# This section of the boot script is responsible for replacing Linux +# binaries within the booting zone with native binaries. This is a two-step # process: First, the directory structure of the zone is validated to ensure -# that binary replacement will proceed safely. Second, Solaris 10 binaries -# are replaced with Nevada binaries. +# that binary replacement will proceed safely. Second, the Linux binaries +# are replaced with native binaries. # # Here's an example. Suppose that you want to replace /usr/bin/zcat with the -# Nevada /usr/bin/zcat binary. Then you should do the following: +# native /usr/bin/zcat binary. Then you should do the following: # # 1. Go to the section below labeled "STEP ONE" and add the following # two lines: @@ -142,24 +160,30 @@ wrap_with_native() { # Validate that the zone filesystem looks like we expect it to. # safe_dir /sbin +safe_dir /etc +safe_dir /etc/init +safe_dir /etc/update-motd.d # # STEP TWO # # Replace Linux binaries with native binaries. # +replace_with_native /sbin/ifconfig 0555 root:bin # -# Replace various network-related programs with native wrappers. +# STEP THREE # -replace_with_native /sbin/ifconfig 0555 root:bin - -# Create native wrapper for illumos-only commands -wrap_with_native /sbin/dladm 0555 root:bin -wrap_with_native /sbin/ipmgmtd 0555 root:bin +# Perform distro-specific customization. +# +. $(dirname $0)/lx_boot_zone_${distro} # -# END OF STEP TWO +# STEP FOUR # +# Create native wrappers for illumos-only commands +# +wrap_with_native /sbin/dladm 0555 root:bin +wrap_with_native /sbin/ipmgmtd 0555 root:bin exit 0 diff --git a/usr/src/lib/brand/lx/zone/lx_boot_zone_ubuntu.ksh b/usr/src/lib/brand/lx/zone/lx_boot_zone_ubuntu.ksh new file mode 100644 index 0000000000..f72d6356f7 --- /dev/null +++ b/usr/src/lib/brand/lx/zone/lx_boot_zone_ubuntu.ksh @@ -0,0 +1,217 @@ +#!/bin/ksh -p +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright 2014 Joyent, Inc. All rights reserved. +# + +# +# Customisation for Ubuntu-based distributions. Assumes to have been +# sourced from lx_boot. +# + +RMSVCS="acpid.conf + control-alt-delete.conf + console-setup.conf + dmesg.conf + hwclock.conf + hwclock-save.conf + irqbalance.conf + module-init-tools.conf + mounted-dev.conf + mounted-debugfs.conf + network-interface-security.conf + plymouth.conf + plymouth-log.conf + plymouth-splash.conf + plymouth-stop.conf + plymouth-upstart-bridge.conf + setvtrgb.conf + tty1.conf + tty2.conf + tty3.conf + tty4.conf + tty5.conf + tty6.conf + upstart-udev-bridge.conf + udev.conf + udevmonitor.conf + udevtrigger.conf + udev-fallback-graphics.conf + udev-finish.conf + ureadahead-other.conf + ureadahead.conf + whoopsie.conf" + + +# +# Now customize upstart +# + +for f in $RMSVCS +do + fnm=$ZONEROOT/etc/init/$f + [[ ! -h $fnm && -f $fnm ]] && rm -f $fnm +done + +fnm=$ZONEROOT/etc/init/console.conf +if [[ ! -h $fnm && -f $fnm ]] then + sed -e 's/lxc/zones/' $fnm > /tmp/console.conf.$$ + mv /tmp/console.conf.$$ $fnm +fi + +fnm=$ZONEROOT/etc/init/container-detect.conf +if [[ ! -h $fnm && -f $fnm ]] then + cat <<'DONE' > $fnm +description "Track if upstart is running in a container" + +start on mounted MOUNTPOINT=/run + +env container +env LIBVIRT_LXC_UUID + +emits container + +pre-start script + container=zones + echo "$container" > /run/container_type || true + initctl emit --no-wait container CONTAINER=$container + exit 0 +end script +DONE +fi + +# XXX use original dbus.conf once /run is mounted as a tmpfs mount and we +# don't need to cleanup the pid + +fnm=$ZONEROOT/etc/init/dbus.conf +if [[ ! -h $fnm && -f $fnm ]] then + cat <<'DONE' > $fnm +description "D-Bus system message bus" + +start on local-filesystems +stop on deconfiguring-networking + +expect fork +respawn + +pre-start script + rm -f /run/dbus/pid + + mkdir -p /var/run/dbus + chown messagebus:messagebus /var/run/dbus + + exec dbus-uuidgen --ensure +end script + +exec dbus-daemon --system --fork --activation=upstart + +post-start exec kill -USR1 1 + +post-stop exec rm -f /var/run/dbus/pid +DONE +fi + +# XXX need to add real mounting into this svc definition + +fnm=$ZONEROOT/etc/init/mountall.conf +if [[ ! -h $fnm && -f $fnm ]] then + cat <<'DONE' > $fnm +description "Mount filesystems on boot" + +start on startup + +task + +emits virtual-filesystems +emits local-filesystems +emits remote-filesystems +emits all-swaps +emits filesystem +emits mounted + +script + /sbin/initctl emit --no-wait virtual-filesystems +# mount -F tmpfs swap /run || true + /sbin/initctl emit --no-wait mounted MOUNTPOINT=/run + /sbin/initctl emit --no-wait local-filesystems + /sbin/initctl emit --no-wait all-swaps + /sbin/initctl emit --no-wait filesystem +end script +DONE +fi + +# XXX fix up IP handling and multiple net definitions + +iptype=`/usr/sbin/zonecfg -z $ZONENAME info ip-type | cut -f2 -d' '` + +if [[ "$iptype" == "exclusive" ]]; then + ipaddr=`/usr/sbin/zonecfg -z $ZONENAME info net | \ + nawk -F, '/name=ip/{print substr($2, 8, length($2) - 9)}'` + netmask=`/usr/sbin/zonecfg -z $ZONENAME info net | \ + nawk -F, '/name=netmask/{print substr($2,8,length($2)-9)}'` + + fnm=$ZONEROOT/etc/init/networking.conf + if [[ ! -h $fnm && -f $fnm ]] then + cat <<-DONE > $fnm + description "configure virtual network devices" + + emits static-network-up + emits net-device-up + + start on local-filesystems + + task + + pre-start exec mkdir -p /run/network + + script + /sbin/ipmgmtd || true + /sbin/ifconfig lo0 plumb + /sbin/initctl emit --no-wait net-device-up IFACE=lo LOGICAL=lo ADDRFAM=inet METHOD=loopback || true + /sbin/ifconfig net0 plumb || true + /sbin/ifconfig net0 $ipaddr netmask $netmask up || true + /sbin/initctl emit --no-wait net-device-up IFACE=net0 + /sbin/initctl emit --no-wait static-network-up + end script + DONE + fi +fi + +fnm=$ZONEROOT/etc/init/plymouth-ready.conf +if [[ ! -h $fnm && -f $fnm ]] then + cat <<'DONE' > $fnm +description "Send an event to indicate plymouth is up" + +task +start on startup +instance $UPSTART_EVENTS + +emits plymouth-ready + +script + initctl emit --no-wait plymouth-ready +end script +DONE +fi + +# +# upstart modifications are complete +# + +# XXX remove this since it blocks login until we can root cause and fix, might +# be the rtnetlink issue + +fnm=$ZONEROOT/etc/update-motd.d/50-landscape-sysinfo +[[ -h $fnm ]] && rm -f $fnm + +# Hand control back to lx_boot diff --git a/usr/src/lib/brand/lx/zone/lx_init_zone_ubuntu.ksh b/usr/src/lib/brand/lx/zone/lx_init_zone_ubuntu.ksh index c1020b0c6b..e46c536ea3 100644 --- a/usr/src/lib/brand/lx/zone/lx_init_zone_ubuntu.ksh +++ b/usr/src/lib/brand/lx/zone/lx_init_zone_ubuntu.ksh @@ -19,185 +19,7 @@ # sourced from lx_init_zone. # -RMSVCS="acpid.conf - control-alt-delete.conf - console-setup.conf - dmesg.conf - hwclock.conf - hwclock-save.conf - irqbalance.conf - module-init-tools.conf - mounted-dev.conf - mounted-debugfs.conf - network-interface-security.conf - plymouth.conf - plymouth-log.conf - plymouth-splash.conf - plymouth-stop.conf - plymouth-upstart-bridge.conf - setvtrgb.conf - tty1.conf - tty2.conf - tty3.conf - tty4.conf - tty5.conf - tty6.conf - upstart-udev-bridge.conf - udev.conf - udevmonitor.conf - udevtrigger.conf - udev-fallback-graphics.conf - udev-finish.conf - ureadahead-other.conf - ureadahead.conf - whoopsie.conf" - - # Use the debian script to begin with . $(dirname $0)/lx_init_zone_debian -# -# Now customize upstart -# - -for f in $RMSVCS -do - rm -f etc/init/$f -done - -sed -e 's/lxc/zones/' /zones/$zonename/root/etc/init/console.conf \ - >/zones/$zonename/root/etc/init/console.conf.new -mv /zones/$zonename/root/etc/init/console.conf.new \ - /zones/$zonename/root/etc/init/console.conf - -cat <<'DONE' > etc/init/container-detect.conf -description "Track if upstart is running in a container" - -start on mounted MOUNTPOINT=/run - -env container -env LIBVIRT_LXC_UUID - -emits container - -pre-start script - container=zones - echo "$container" > /run/container_type || true - initctl emit --no-wait container CONTAINER=$container - exit 0 -end script -DONE - -# XXX use original dbus.conf once /run is mounted as a tmpfs mount and we -# don't need to cleanup the pid - -cat <<'DONE' > etc/init/dbus.conf -description "D-Bus system message bus" - -start on local-filesystems -stop on deconfiguring-networking - -expect fork -respawn - -pre-start script - rm -f /run/dbus/pid - - mkdir -p /var/run/dbus - chown messagebus:messagebus /var/run/dbus - - exec dbus-uuidgen --ensure -end script - -exec dbus-daemon --system --fork --activation=upstart - -post-start exec kill -USR1 1 - -post-stop exec rm -f /var/run/dbus/pid -DONE - -# XXX need to add real mounting into this svc definition - -cat <<'DONE' > etc/init/mountall.conf -description "Mount filesystems on boot" - -start on startup - -task - -emits virtual-filesystems -emits local-filesystems -emits remote-filesystems -emits all-swaps -emits filesystem -emits mounted - -script - /sbin/initctl emit --no-wait virtual-filesystems -# mount -F tmpfs swap /run || true - /sbin/initctl emit --no-wait mounted MOUNTPOINT=/run - /sbin/initctl emit --no-wait local-filesystems - /sbin/initctl emit --no-wait all-swaps - /sbin/initctl emit --no-wait filesystem -end script -DONE - -# XXX fix up IP handling and multiple net definitions - -iptype=`/usr/sbin/zonecfg -z $zonename info ip-type | cut -f2 -d' '` - -if [[ "$iptype" == "exclusive" ]]; then - ipaddr=`/usr/sbin/zonecfg -z $zonename info net | \ - nawk -F, '/name=ip/{print substr($2, 8, length($2) - 9)}'` - netmask=`/usr/sbin/zonecfg -z $zonename info net | \ - nawk -F, '/name=netmask/{print substr($2,8,length($2)-9)}'` - - cat <<-DONE > etc/init/networking.conf - description "configure virtual network devices" - - emits static-network-up - emits net-device-up - - start on local-filesystems - - task - - pre-start exec mkdir -p /run/network - - script - /sbin/ipmgmtd || true - /sbin/ifconfig lo0 plumb - /sbin/initctl emit --no-wait net-device-up IFACE=lo LOGICAL=lo ADDRFAM=inet METHOD=loopback || true - /sbin/ifconfig net0 plumb || true - /sbin/ifconfig net0 $ipaddr netmask $netmask up || true - /sbin/initctl emit --no-wait net-device-up IFACE=net0 - /sbin/initctl emit --no-wait static-network-up - end script - DONE -fi - -cat <<'DONE' > etc/init/plymouth-ready.conf -description "Send an event to indicate plymouth is up" - -task -start on startup -instance $UPSTART_EVENTS - -emits plymouth-ready - -script - initctl emit --no-wait plymouth-ready -end script -DONE - -# -# upstart modifications are complete -# - -# XXX remove this since it blocks login until we can root cause and fix, might -# be the rtnetlink issue - -rm -f /zones/$zonename/root/etc/update-motd.d/50-landscape-sysinfo - # Hand control back to lx_init_zone -# |