From 4111ebf86b56722baa166a59394334732ae111a7 Mon Sep 17 00:00:00 2001 From: Benedikt Boehm Date: Wed, 1 Nov 2006 19:23:24 +0000 Subject: [PATCH] reimplement gentoo init style + prepare distrib/gentoo for baselayout-1.13 git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2360 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- distrib/Makefile.am | 4 +- distrib/gentoo/init-vserver.sh | 29 ++++++++++++++ distrib/gentoo/initpost | 91 ++++++++++++++++++++++++++++++++++++++---- distrib/gentoo/initpre | 48 ++++++++++++++++++++++ scripts/vserver.functions | 19 ++++++++- 5 files changed, 181 insertions(+), 10 deletions(-) create mode 100644 distrib/gentoo/init-vserver.sh create mode 100755 distrib/gentoo/initpre diff --git a/distrib/Makefile.am b/distrib/Makefile.am index 391a15f..c83f344 100644 --- a/distrib/Makefile.am +++ b/distrib/Makefile.am @@ -31,7 +31,9 @@ defaults_DATA = misc/debootstrap.uri \ nobase_distrib_SCRIPTS = redhat/initpost \ redhat/initpre \ redhat/rc.sysinit \ - gentoo/initpost + gentoo/initpost \ + gentoo/initpre \ + gentoo/init-vserver.sh nobase_distrib_DATA = defaults/devs \ defaults/apt.conf \ diff --git a/distrib/gentoo/init-vserver.sh b/distrib/gentoo/init-vserver.sh new file mode 100644 index 0000000..2fb60b3 --- /dev/null +++ b/distrib/gentoo/init-vserver.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# +# Copyright (C) 2006 Benedikt Boehm +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# +# BIG FAT WARNING: +# +# Do not remove this file if you are using gentoo init style! +# Your vserver will not boot anymore! +# +# You have been warned... +# + +RUNLEVEL=1 /sbin/rc sysinit +/sbin/rc boot +/sbin/rc default diff --git a/distrib/gentoo/initpost b/distrib/gentoo/initpost index 66e0f20..f8bef51 100755 --- a/distrib/gentoo/initpost +++ b/distrib/gentoo/initpost @@ -1,6 +1,6 @@ -#! /bin/bash +#!/bin/bash -# Copyright (C) 2005 Enrico Scholz +# Copyright (C) 2006 Benedikt Boehm # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,12 +17,87 @@ ## Called as: initpost +vdir="$1"/vdir . "$2" -$_MKDIR -p "$1"/vdir/usr/portage +# portage stuff +pushd "$vdir" &>/dev/null +$_CHROOT_SH mkdir /usr 2>/dev/null || : +$_CHROOT_SH mkdir /usr/portage 2>/dev/null || : +popd &>/dev/null -$_CAT <> "$1"/fstab -# shared portage tree -/usr/portage /usr/portage none bind,ro 0 0 -/usr/portage/distfiles /usr/portage/distfiles none bind,rw 0 0 -EOF + +# check for baselayout >= 1.13 +pushd "$vdir" &>/dev/null +basever=$($_CHROOT_SH cat /etc/gentoo-release | $_AWK '{print $5}') +popd &>/dev/null + +echo ">>> Found baselayout-$basever" + +basemaj=${basever/.*} +basemin=${basever#*.} +basemin=${basemin/.*} + +if test "$basemaj" -lt 1 -o "$basemin" -lt 13; then + echo "!!! Will not do automagic changes to baselayout < 1.13" + echo "!!! You have to take care for yourself ..." + exit 0 +fi + + +# fix gettys in inittab +pushd "$vdir" &>/dev/null + +if $_CHROOT_SH testfile /etc/inittab; then + echo ">>> Fixing inittab ... " + inittabtmp=$($_MKTEMP inittab.XXXXXX) + + $_CHROOT_SH cat /etc/inittab | \ + $_SED 's/\(^[^#].*getty.*$\)/#\1/' > $inittabtmp + $_CHROOT_SH truncate /etc/inittab < $inittabtmp + + $_RM -f $inittabtmp +fi + +popd &>/dev/null + + +# unneeded runlevel scripts +pushd "$vdir" &>/dev/null +echo ">>> Fixing default runlevel scripts ... " +$_CHROOT_SH rm /etc/runlevels/boot/{clock,consolefont,keymaps,modules,net.lo} 2>/dev/null || : +$_CHROOT_SH rm /etc/runlevels/default/{hdparm,netmount} 2>/dev/null || : +popd &>/dev/null + + +# fix fstab for checkfs/localmount +pushd "$vdir" &>/dev/null +echo ">>> Fixing fstab ... " +echo "/dev/hdv1 / ufs 0 0" | $_CHROOT_SH truncate /etc/fstab +popd &>/dev/null + + +# gentoo initstyle magic +initstyle=sysv +test -e "$1"/apps/init/style && initstyle=$(<"$1"/apps/init/style) + +if test "$initstyle" == "gentoo"; then + pushd "$vdir" &>/dev/null + + echo ">>> Installing special init-style magic ... " + + $_CAT "$__DISTRIBDIR"/gentoo/init-vserver.sh | \ + $_CHROOT_SH truncate /lib/rcscripts/sh/init-vserver.sh + $_CHROOT_SH chmod 0755 /lib/rcscripts/sh/init-vserver.sh + + popd &>/dev/null + + echo "!!!" + echo "!!! You have to install a service (e.g. syslog-ng) and add it to the" + echo "!!! default runlevel before you start the guest the first time!" + echo "!!! Otherwise the guest will die as soon as it has finished booting." + echo "!!!" + echo "!!! Consult the Gentoo Handbook on how to chroot and install" + echo "!!! packages into the guest environment." + echo "!!!" +fi diff --git a/distrib/gentoo/initpre b/distrib/gentoo/initpre new file mode 100755 index 0000000..24ffd80 --- /dev/null +++ b/distrib/gentoo/initpre @@ -0,0 +1,48 @@ +#!/bin/bash + +# Copyright (C) 2006 Benedikt Boehm +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +## Called as: initpost + +vdir="$1"/vdir +. "$2" + +# portage stuff + +echo ">>> Adding shared /usr/portage to fstab ... " + +if test -d /usr/portage; then + ( echo + echo "# shared portage tree" + echo "/usr/portage /usr/portage none bind,ro 0 0" + echo "/usr/portage/distfiles /usr/portage/distfiles none bind,rw 0 0" + ) >> "$1"/fstab +else + echo "!!! Cannot find /usr/portage! You should definitely use a" + echo "!!! shared portage tree if you have multiple Gentoo guests!" +fi + + +# initstyle sanity +initstyle=sysv +test -e "$1"/apps/init/style && initstyle=$(<"$1"/apps/init/style) + +echo ">>> Checking init-style ... $initstyle" + +if test "$initstyle" != "gentoo" -a "$initstyle" != "plain"; then + echo "!!! The init-style you specified is not supported for Gentoo" + echo "!!! Please use one of: plain, gentoo" +fi diff --git a/scripts/vserver.functions b/scripts/vserver.functions index cd0cccd..be6e813 100644 --- a/scripts/vserver.functions +++ b/scripts/vserver.functions @@ -299,7 +299,24 @@ function _generateInitOptions ;; (xgentoo) - panic "init-style '$INITSTYLE' is no longer supported; please use plain instead; aborting";; + INITCMD_START=( /lib/rcscripts/sh/init-vserver.sh ) + INITCMD_STOP=( /sbin/rc shutdown ) + + pushd "$vdir"/vdir &>/dev/null + basever=$($_CHROOT_SH cat /etc/gentoo-release | $_AWK '{print $5}') + popd &>/dev/null + + basemaj=${basever/.*} + basemin=${basever#*.} + basemin=${basemin/.*} + + test "$basemaj" -lt 1 -o "$basemin" -lt 13 && \ + panic "\ +Using init-style 'gentoo' requires >=baselayout-1.13 inside the vserver! + +Your vserver ($(basename "$vdir")) seems to have baselayout-$basever, +please use 'plain' init-style instead!" + ;; (x) ;; (*) panic "Unknown init-style '$INITSTYLE'; aborting";; -- 1.8.1.5