Package: vserver-debiantools Version: 0.1.10 Severity: normal Tags: patch Hi,
this is more an inconsistency than a bug, but I file it here anyway. Recently, the alpha branch of util-vserver was introduced to Debian which has a different configuration scheme and other differences compared to the stable branch. In addition, the "vserver" command now has support for building Debian vservers using debootstrap. The newvserver command in vserver-debiantools creates a new vserver of old style (stable branch). These vservers can still be handled by util-vserver in legacy mode, but IMHO it would be better if new vservers were of the new alpha branch style. This would avoid several legacy problems (security, documentation, ...). I adjusted the newvserver script so that it creates a new vserver using "vserver ... build" with the "debootstrap" method instead of using "debootstrap" directly. Some parts of "newvserver" could be removed because "vserver ... build" handles them already (care about devices, check if vserver already exists, ...), other parts were only relevant for old style vservers (vreboot, rebootmgr, ...). The adjusted script reproduces the same package selection and the same /dev tree in the new vserver. I send a patch as well as the complete newvserver script. regards Daniel -- System Information: Debian Release: 3.1 APT prefers testing APT policy: (500, 'testing'), (200, 'unstable') Architecture: i386 (i686) Kernel: Linux 2.4.26-ath64.ws Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) Versions of packages vserver-debiantools depends on: ii binutils 2.15-5 The GNU assembler, linker and bina ii debootstrap 0.2.45-0.2 Bootstrap a basic Debian system ii rsync 2.6.3-2 fast remote file copy program (lik ii util-vserver 0.30.204-4 tools for Virtual private servers -- debconf-show failed
--- newvserver.orig 2005-04-17 17:46:11.000000000 +0200 +++ newvserver 2005-04-17 18:54:08.000000000 +0200 @@ -62,9 +62,6 @@ # Default network interface for vservers: INTERFACE="eth0" -# Copy vreboot/vhalt/vshutdown utility into /usr/local/sbin/ -COPY_VREBOOT="true" - if [ -r /etc/vservers/util-vserver-vars ] ; then . /etc/vservers/util-vserver-vars fi @@ -96,15 +93,13 @@ { cat << EOF Usage: ${0##*/} [OPTIONS] --hostname x --domain y.z --ip 1.2.3.4 -Creates a new Debian vserver by downloading packages via HTTP/FTP +Creates a new Debian vserver by calling "vserver ... build" Options: -h, --help this help -V, --version copyright and version information --arch set target architecture (eg. --arch "i386") (autodetected on Debian host if dpkg available) - --copy-vreboot install "vreboot/vshutdown/vhalt" - --no-copy-vreboot don't install "vreboot/vshutdown/vhalt" --dist defaults to "sarge", passed to debootstrap. --fakeinit use "/sbin/init" to boot vserver --conffile extra configuration file to load. @@ -184,14 +179,6 @@ fi shift 2 ;; - --copy-vreboot) - COPY_VREBOOT="true" - shift - ;; - --no-copy-vreboot) - COPY_VREBOOT="" - shift - ;; --dist) case "$2" in [a-z]*) @@ -341,16 +328,6 @@ ############################################################################## -# Check we've got debootstrap available -if [ ! -x /usr/sbin/debootstrap ]; then - cat << EOF 1>&2 -${0##*/}: Requires the debootstrap package to bootstrap Debian - Debian Host: apt-get install debootstrap - RPM Host: rpm -i http://people.debian.org/~blade/install/debootstrap/debootstrap-0.1.17.3-2.i386.rpm -EOF - exit 1 -fi - if ! cat /proc/self/status | grep '^s_context:[^0-9]0$'; then echo "${0##*/} error:" echo " Must be run from the host server (security context 0)" 1>&2 @@ -364,33 +341,19 @@ exit 1 fi -# check for /vserver/$VHOST/etc/ incase we are on pre-mounted LVM partition -# (used to just check for "/vserver/$VHOST/" existing -if [ -d "$VROOTDIR/$VHOST/etc/" -o -f "/etc/vservers/$VHOST.conf" ] ; then - cat << EOF 1>&2 -${0##*/} error: Virtual Server "$VHOST" appears to already exist - check "/etc/vservers/$VHOST.conf" or "/vservers/$VHOST/etc/"; -EOF - exit 1 -fi - -# This is used to keep a cache of the downloaded .deb packges for next install -if [ -d "$VROOTDIR/ARCHIVES/$DIST" ]; then - mkdir -p "$VROOTDIR/$VHOST/var/cache/apt/archives" - cp -a "$VROOTDIR/ARCHIVES/$DIST/"*.deb "$VROOTDIR/$VHOST/var/cache/apt/archives" > /dev/null 2>&1 -fi - # We only want to pass the Architecture if we need to (autodectected otherwise) if [ -n "$ARCH" ]; then ARCH_ARGUMENT="--arch $ARCH" fi -# Fire off `debootstrap' to do all the hard work -# like downloading and installing -if ! /usr/sbin/debootstrap $ARCH_ARGUMENT \ - "--include=$INSTALL_PACKAGES" "--exclude=$REMOVE_PACKAGES" \ - "$DIST" "$VROOTDIR/$VHOST" "$MIRROR" ; then - echo "${0##*/}: error: debootstrap failure. Cannot continue." +## use "vserver ... build" to build the new vserver +if ! /usr/sbin/vserver "$VHOST" build -m debootstrap \ + --rootdir "$VROOTDIR" --hostname "$VHOST" --interface "$INTERFACE:$IP" \ + -- -d "$DIST" -m "$MIRROR" \ + -- $ARCH_ARGUMENT \ + --include="$INSTALL_PACKAGES" --exclude="$REMOVE_PACKAGES" + then + echo "${0##*/}: error: vserver-build failure. Cannot continue." exit 1 fi @@ -406,15 +369,8 @@ EOF -# Fix up the available device nodes, for security +# Fix up the available device nodes (mostly done by vserver-build above) if cd "$VROOTDIR/$VHOST/dev"; then - mkdir -p /var/lib/vserver-debiantools - tar cfp /var/lib/vserver-debiantools/dev.tar.$$ full null ptmx random tty urandom zero - rm -rf * - tar xfp /var/lib/vserver-debiantools/dev.tar.$$ - rm -f /var/lib/vserver-debiantools/dev.tar.$$ - mkdir pts - mkdir shm ln -s /proc/self/fd fd ln -s fd/2 stderr ln -s fd/0 stdin @@ -467,14 +423,6 @@ proc /proc proc defaults 0 0 EOF -# The new vserver patch now automatically mounts /proc -# Debian needs /dev/pts mounting "gid=5,mode=620" by vserver -cat << EOF > "$VROOTDIR/$VHOST/etc/mtab" -/dev/hdv1 / vfs none 0 0 -proc /proc proc rw 0 0 -devpts /dev/pts devpts rw,gid=5,mode=620 0 0 -EOF - # Create a reduced inittab that doesn't start getty on the consoles cat << EOF > "$VROOTDIR/$VHOST/etc/inittab" # /etc/inittab: init(8) configuration. @@ -549,22 +497,6 @@ EOF -# Create default /etc/vservers entry -cat << EOF > /etc/vservers/$VHOST.conf -S_HOSTNAME="$VHOST" -IPROOT="$IP" -IPROOTDEV="$INTERFACE" -ONBOOT="yes" -S_NICE="" -S_FLAGS="lock nproc$FAKEINIT" -ULIMIT="-H -n 1024" -S_CAPS="CAP_NET_RAW" - -# *NOT* DNS domain name, for NIS only -S_DOMAINNAME="" - -EOF - if [ -n "$EXTRA_PACKAGES" ]; then EXTRA_PACKAGES_INSTALL="apt-get --assume-yes install ${EXTRA_PACKAGES//,/ }" fi @@ -601,6 +533,9 @@ EOF +## start vserver before we can exec anything inside it +vserver $VHOST start + # Run the above commands from within the server chmod 755 $VROOTDIR/$VHOST/vserver-config.sh vserver $VHOST exec /vserver-config.sh @@ -622,30 +557,12 @@ chmod 600 "$VROOTDIR/$VHOST/root/.ssh/authorized_keys" fi -# Install the vreboot/rebootmgr utility--hopefully this will disappear soon -VREBOOT_LOCATION="/usr/lib/util-vserver/vreboot" -if [ "$COPY_VREBOOT" == "true" -a -x "$VREBOOT_LOCATION" ]; then - cp -a "$VREBOOT_LOCATION" "$VROOTDIR/$VHOST/usr/local/sbin/" - chmod 750 "$VROOTDIR/$VHOST/usr/local/sbin/vreboot" - # ln -s "$VROOTDIR/$VHOST/usr/local/sbin/"{vshutdown,vreboot} - # ln -s "$VROOTDIR/$VHOST/usr/local/sbin/"{vhalt,vreboot} -fi - -# Stop all the processes that were started inside the server -export PREVLEVEL=2 -vserver $VHOST exec /etc/init.d/rc 0 +## stop the vserver vserver $VHOST stop -# Populate the archive for future virtual servers -if [ ! -d $VROOTDIR/ARCHIVES/$DIST ]; then - mkdir -p $VROOTDIR/ARCHIVES/$DIST -fi -cp $VROOTDIR/$VHOST/var/cache/apt/archives/*.deb $VROOTDIR/ARCHIVES/$DIST - -echo "Restarting rebootmgr." -invoke-rc.d rebootmgr restart echo -echo "You should now adjust /etc/vservers/$VHOST.conf to suit your needs," +echo "You should now adjust the configuration in /etc/vservers/$VHOST/" +echo "to suit your needs," echo "or else just go ahead and type \`vserver $VHOST start' to start" echo "your new virtual server. debian/rules!" echo
newvserver
Description: application/shellscript