From: Frederic Crozat <fcro...@suse.com> This adaptation of systemd. We also add network configuration support.
Jiri Slaby: cleanups, rebase --- templates/lxc-opensuse.in | 121 +++++++++++++++++++++++----------------------- 1 file changed, 61 insertions(+), 60 deletions(-) diff --git a/templates/lxc-opensuse.in b/templates/lxc-opensuse.in index 56e93d7..32ff4ec 100644 --- a/templates/lxc-opensuse.in +++ b/templates/lxc-opensuse.in @@ -25,7 +25,7 @@ # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -DISTRO=12.1 +DISTRO=12.2 configure_opensuse() { @@ -34,39 +34,13 @@ configure_opensuse() # set network as static, but everything is done by LXC outside the container cat <<EOF > $rootfs/etc/sysconfig/network/ifcfg-eth0 -STARTMODE='manual' +STARTMODE='auto' BOOTPROTO='none' EOF - # set default route - IP=$(/sbin/ip route | awk '/default/ { print $3 }') - echo "default $IP - -" > $rootfs/etc/sysconfig/network/routes - # create empty fstab touch $rootfs/etc/fstab - # create minimal /dev - mknod -m 666 $rootfs/dev/random c 1 8 - mknod -m 666 $rootfs/dev/urandom c 1 9 - mkdir -m 755 $rootfs/dev/pts - mkdir -m 1777 $rootfs/dev/shm - mknod -m 666 $rootfs/dev/tty c 5 0 - mknod -m 600 $rootfs/dev/console c 5 1 - mknod -m 666 $rootfs/dev/tty0 c 4 0 - mknod -m 666 $rootfs/dev/tty1 c 4 1 - mknod -m 666 $rootfs/dev/tty2 c 4 2 - mknod -m 666 $rootfs/dev/tty3 c 4 3 - mknod -m 666 $rootfs/dev/tty4 c 4 4 - ln -s null $rootfs/dev/tty10 - mknod -m 666 $rootfs/dev/full c 1 7 - mknod -m 666 $rootfs/dev/ptmx c 5 2 - ln -s /proc/self/fd $rootfs/dev/fd - ln -s /proc/kcore $rootfs/dev/core - mkdir -m 755 $rootfs/dev/mapper - mknod -m 600 $rootfs/dev/mapper/control c 10 60 - mkdir -m 755 $rootfs/dev/net - mknod -m 666 $rootfs/dev/net/tun c 10 200 - # set the hostname cat <<EOF > $rootfs/etc/HOSTNAME $hostname @@ -91,23 +65,6 @@ LOADER_TYPE=none LOADER_LOCATION=none EOF - # cut down inittab - cat <<EOF > $rootfs/etc/inittab -id:3:initdefault: -si::bootwait:/etc/init.d/boot -l0:0:wait:/etc/init.d/rc 0 -l1:1:wait:/etc/init.d/rc 1 -l2:2:wait:/etc/init.d/rc 2 -l3:3:wait:/etc/init.d/rc 3 -l6:6:wait:/etc/init.d/rc 6 -ls:S:wait:/etc/init.d/rc S -~~:S:respawn:/sbin/sulogin -p6::ctrlaltdel:/sbin/init 6 -p0::powerfail:/sbin/init 0 -cons:2345:respawn:/sbin/mingetty --noclear console screen -c1:2345:respawn:/sbin/mingetty --noclear tty1 screen -EOF - # set /dev/console as securetty cat << EOF >> $rootfs/etc/securetty console @@ -121,10 +78,15 @@ EOF # remove pointless services in a container - chroot $rootfs /sbin/insserv -r -f boot.udev boot.loadmodules boot.device-mapper boot.clock boot.swap boot.klog kbd + ln -s /dev/null $rootfs/etc/systemd/system/proc-sys-fs-binfmt_misc.automount + ln -s /dev/null $rootfs/etc/systemd/system/console-shell.service + ln -s /dev/null $rootfs/etc/systemd/system/systemd-vconsole-setup.service + ln -s /lib/systemd/system/getty@.service $rootfs/etc/systemd/system/getty.target.wants/getty@console.service + + touch $rootfs/etc/sysconfig/kernel echo "Please change root-password !" - echo "root:root" | chroot $rootfs chpasswd + echo "root:root" | chpasswd -R $rootfs return 0 } @@ -154,30 +116,45 @@ download_opensuse() zypper --quiet --root $cache/partial-$arch-packages --non-interactive ar http://download.opensuse.org/distribution/$DISTRO/repo/oss/ repo-oss zypper --quiet --root $cache/partial-$arch-packages --non-interactive ar http://download.opensuse.org/update/$DISTRO/ update zypper --quiet --root $cache/partial-$arch-packages --non-interactive --gpg-auto-import-keys update - zypper --root $cache/partial-$arch-packages --non-interactive in --auto-agree-with-licenses --download-only zypper lxc patterns-openSUSE-base sysvinit-init + zypper --root $cache/partial-$arch-packages --non-interactive in --auto-agree-with-licenses --download-only zypper lxc patterns-openSUSE-base iputils cat > $cache/partial-$arch-packages/opensuse.conf << EOF Preinstall: aaa_base bash coreutils diffutils -Preinstall: filesystem fillup glibc grep insserv libacl1 libattr1 -Preinstall: libbz2-1 libgcc46 libxcrypt libncurses5 pam +Preinstall: filesystem fillup glibc grep insserv +Preinstall: libbz2-1 libgcc47 libncurses5 pam Preinstall: permissions libreadline6 rpm sed tar zlib libselinux1 -Preinstall: liblzma5 libcap2 libpcre0 +Preinstall: liblzma5 libcap2 libacl1 libattr1 Preinstall: libpopt0 libelf1 liblua5_1 +Preinstall: libpcre1 RunScripts: aaa_base Support: zypper Support: patterns-openSUSE-base Support: lxc -Prefer: sysvinit-init - -Ignore: patterns-openSUSE-base:patterns-openSUSE-yast2_install_wf +Support: ncurses-utils +Support: iputils +Support: udev +Support: netcfg +Support: dhcpcd hwinfo insserv module-init-tools openSUSE-release openssh +Support: pwdutils rpcbind sysconfig rsyslog + +Ignore: rpm:suse-build-key,build-key +Ignore: systemd:systemd-presets-branding EOF + if [ "$arch" == "i686" ]; then + mkdir -p $cache/partial-$arch-packages/var/cache/zypp/packages/repo-oss/suse/i686/ + for i in "$cache/partial-$arch-packages/var/cache/zypp/packages/repo-oss/suse/i586/*" ; do + ln -s $i $cache/partial-$arch-packages/var/cache/zypp/packages/repo-oss/suse/i686/ + done + mkdir -p $cache/partial-$arch-packages/var/cache/zypp/packages/update/i686 + for i in "$cache/partial-$arch-packages/var/cache/zypp/packages/update/i586/*" ; do + ln -s $i $cache/partial-$arch-packages/var/cache/zypp/packages/update/i686/ + done + fi - CLEAN_BUILD=1 BUILD_ROOT="$cache/partial-$arch" BUILD_DIST="$cache/partial-$arch-packages/opensuse.conf" /usr/lib/build/init_buildsystem --clean --cachedir $cache/partial-$arch-cache --repository $cache/partial-$arch-packages/var/cache/zypp/packages/repo-oss/suse/$arch --repository $cache/partial-$arch-packages/var/cache/zypp/packages/repo-oss/suse/noarch + CLEAN_BUILD=1 BUILD_ARCH="$arch" BUILD_ROOT="$cache/partial-$arch" BUILD_DIST="$cache/partial-$arch-packages/opensuse.conf" PATH="$PATH:/usr/lib/build" /usr/lib/build/init_buildsystem --clean --configdir /usr/lib/build/configs --cachedir $cache/partial-$arch-cache --repository $cache/partial-$arch-packages/var/cache/zypp/packages/repo-oss/suse/$arch --repository $cache/partial-$arch-packages/var/cache/zypp/packages/repo-oss/suse/noarch --repository $cache/partial-$arch-packages/var/cache/zypp/packages/update/$arch --repository $cache/partial-$arch-packages/var/cache/zypp/packages/update/noarch chroot $cache/partial-$arch /usr/bin/zypper --quiet --non-interactive ar http://download.opensuse.org/distribution/$DISTRO/repo/oss repo-oss chroot $cache/partial-$arch /usr/bin/zypper --quiet --non-interactive ar http://download.opensuse.org/update/$DISTRO/ update - chroot $cache/partial-$arch rpm -e patterns-openSUSE-base - umount $cache/partial-$arch/proc # really clean the image rm -fr $cache/partial-$arch/{.build,.guessed_dist,.srcfiles*,installed-pkg} rm -fr $cache/partial-$arch/dev @@ -259,16 +236,40 @@ copy_configuration() rootfs=$2 name=$3 - # only disable network if no network configuration was passed - grep -q "^lxc.network.type" $path/config || echo 'lxc.network.type = empty' >> $path/config + if grep -q "^lxc.network.type" $path/config; then + TYPE=$(sed '/^#/d; /lxc.network.type/!d; s/.*=[ \t]*//' $path/config) + grep -q "^lxc.network.ipv4" $path/config + IPV4_NOT_CONFIGURED=$? + + if [ ! grep -q "^lxc.network.*.gateway" $path/config ]; then + [ $IPV4_NOT_CONFIGURED -eq 0 ] && IPV4=$(sed '/^#/d; /lxc.network.ipv4/!d; /gateway/d; s/.*=[ \t]*//; s/\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*/\1/' $path/config) + if [ "$TYPE" = "veth" -o "$TYPE" = "macvlan" ]; then + if [ $IPV4_NOT_CONFIGURED -eq 0 -a "$IPV4" != "0.0.0.0" ]; then + # set default route + IP=$(/sbin/ip route | awk '/default/ { print $3 }') + echo "lxc.network.ipv4.gateway = $IP " >> $path/config + else + # set network as dhcp + sed -i -e 's/BOOTPROTO=.*/BOOTPROTO=dhcp/' $rootfs/etc/sysconfig/network/ifcfg-eth0 + fi + fi + fi + if [ "$TYPE" != "empty" ]; then + echo "#remove next line if host DNS configuration should not be available to container" >> $path/config + echo "lxc.mount.entry = /etc/resolv.conf etc/resolv.conf none bind,ro 0 0" >> $path/config + fi + else + echo 'lxc.network.type = empty' >> $path/config + fi grep -q "^lxc.rootfs" $path/config 2>/dev/null || echo "lxc.rootfs = $rootfs" >> $path/config cat <<EOF >> $path/config lxc.utsname = $name - +lxc.autodev=1 lxc.tty = 4 lxc.pts = 1024 lxc.mount = $path/fstab +lxc.cap.drop = sys_module mac_admin mac_override mknod # When using LXC with apparmor, uncomment the next line to run unconfined: #lxc.aa_profile = unconfined -- 1.8.1.2 ------------------------------------------------------------------------------ Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the endpoint security space. For insight on selecting the right partner to tackle endpoint security challenges, access the full report. http://p.sf.net/sfu/symantec-dev2dev _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel