reimplement gentoo init style + prepare distrib/gentoo for baselayout-1.13
authorBenedikt Boehm <hollow@gentoo.org>
Wed, 1 Nov 2006 19:23:24 +0000 (19:23 +0000)
committerBenedikt Boehm <hollow@gentoo.org>
Wed, 1 Nov 2006 19:23:24 +0000 (19:23 +0000)
git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2360 94cd875c-1c1d-0410-91d2-eb244daf1a30

distrib/Makefile.am
distrib/gentoo/init-vserver.sh [new file with mode: 0644]
distrib/gentoo/initpost
distrib/gentoo/initpre [new file with mode: 0755]
scripts/vserver.functions

index 391a15f..c83f344 100644 (file)
@@ -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 (file)
index 0000000..2fb60b3
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/bash
+#
+# Copyright (C) 2006 Benedikt Boehm <hollow@gentoo.org>
+#  
+# 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
index 66e0f20..f8bef51 100755 (executable)
@@ -1,6 +1,6 @@
-#! /bin/bash
+#!/bin/bash
 
-# Copyright (C) 2005 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# Copyright (C) 2006 Benedikt Boehm <hollow@gentoo.org>
 #  
 # 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
 
 ## Called as: initpost <cfgdir> <path of util-vserver-vars>
 
+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 <<EOF >> "$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 (executable)
index 0000000..24ffd80
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+# Copyright (C) 2006 Benedikt Boehm <hollow@gentoo.org>
+#  
+# 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 <cfgdir> <path of util-vserver-vars>
+
+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
index cd0cccd..be6e813 100644 (file)
@@ -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";;