About this list Date view Thread view Subject view Author view Attachment view

From: Konrad Korzeniowski (konrad_at_pandur.net)
Date: Wed 04 Aug 2004 - 09:12:35 BST


Lucas Albers napisaƂ(a):

> Could you post all your conf files:
> drbd.conf, haresource and any changes you made to your vserver pre startup
> or post shutdown script?
> Your vserver.conf or vserver.sh files if you made any big changes.
> Thanks.
> Between the two of you I'll get enough information to write it up in english.

Description of my configuration (poor English):

-. two PCs with 2 NICs each (one 100Mbit, one 1000Mbit).

-. I've used Debian (unstable).

-. partitioned HDD: 8GB node OS, swap, 14GB for vserver #1(V1),
    14GB for vserver #2 (V2)

-. configured NICs:
    on external (100Mbit) public IP - connected through switch to router,
    on internal (1000Mbit) private IPs
      - crossover cabel connecting nodes.

-. installed:
http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.bz2
http://www.13thfloor.at/vserver/s_release/v1.27/patch-2.4.26-vs1.27.diff
http://www.13thfloor.at/vserver/s_release/v1.27/util-vserver-0.29.4.tar.bz2
and from debian packages (apt-get):

apt-get install ssh gcc g++ less wget tar bzip2 patch make autoconf \
automake libtool flex bison gdb kernel-package \
libncurses5-dev debhelper initrd-tools genromfs e2fslibs-dev \
debootstrap heartbeat drbd drbd-source

-. compiled kernel with vserver patch applied
    with option: "Virtual Root device support (NEW)" checked.

-. compiled drbd module using: make-kpkg modules_image

-. compiled & installed util-vserver
    cd /usr/src/util-vserver-0.29.4
    ./configure --prefix=
    make; make install

-. configured drbd on both nodes (D1 and D2) (attached file drbd.conf)
    and made ext3 partition on top of two devices (drbd0/nb0 & drbd1/nb1)

-. two folders created (on both nodes): /vservers/V1 and /vservers/V2

-. changed /etc/fstab (both nodes)
    /dev/nb0 /vserver/V1 ext3 noauto 0 0
    /dev/nb1 /vserver/V1 ext2 noauto 0 0

-. mounted (D1) drbd0 on /vservers/V1,
    mounted (D2) drbd1 on /vservers/V2

-. installed vservers using slightly modified newserver.sh script
    for debian (attached)

-. set up /etc/heartbeat/ha.cf (attached)

-. added hacluster user - missed during deb package installation:
    adduser --system --shell /bin/false --no-create-home hacluster

-. created links:
    ln -s /etc/init.d/drbd /etc/heartbeat/resource.d/datadisk
    (this is for HA - 'datadisk' is a must)
    ln -s /sbin/vserver /etc/init.d/vserver
    (for HA too)
    ln -s /sbin/util-vserver-vars /etc/init.d/util-vserver-vars
    (for /etc/init.d/vserver above)

-. after 3 days of digging: changed every 'not running' in /sbin/vserver
    to 'down'. 'not running' was confusing heartbeat while its grepping
    'vserver name status' for 'running' 8-O.

-. configured /etc/heartbeat/haresources (attached)

    where:
    d1 - is a node name of cluster
    193.x.x.2/28/eth0 - is a public IP of V1
    IPaddr::10.10.10.100/24/eth1 - is a private IP used by v1 daemons
              as loopback, it can't be lo because when d1 is hosting both
              vservers it can be occupied only by one of them. I had to
              reconfigure each daeomon (postfix, amavis, etc) to use
              this as loopback.
    datadisk::drbd0 - to mount drbd0 as 'primary'
    vserver::V1 - to start vserver after all previous...

-. removed some stop scripts in /etc/init.d/rc6.d
    rm -f !K25hwclock.sh
    rm -f S90reboot

-. creaded dir (I can't remember why - but for vservers):
    mkdir -p /var/lock/subsys/

-. entered vserver V1 & V2 ... configured as mail servers
    (postfix, amavisd, courier-pop3, clamav, sals, mysql...)

I think thats all.
Hope will help someone,
once again sorry for poor English,
rgrds.,
Konrad

BTW. Someone knows why and in what situation are created
      /proc, /dev folders inside of vseerver folder...
      while it is not mounted? How to prevent this creation?

resource drbd0 {
  inittimeout = -1
  protocol = C
  fsckcmd = /bin/true

  disk {
    do-panic
    disk-size = 14000000k
  }

  net {
                        # -max has to be larger than -min, obviously
    sync-min = 500k
    sync-max = 1M # maximal average syncer bandwidth
    tl-size = 5000 # transfer log size, ensures strict write ordering
    timeout = 60 # unit: 0.1 seconds
    connect-int = 10 # unit: seconds
    ping-int = 10 # unit: seconds
    ko-count = 4 # if some block send times out this many times,
                        # the peer is considered dead, even if it still
                        # answeres ping requests
  }

  on d1 {
    device = /dev/nb0
    disk = /dev/hda3
    address = 192.168.0.101
    port = 7788
  }

  on d2 {
    device = /dev/nb0
    disk = /dev/hda3
    address = 192.168.0.102
    port = 7788
  }
}

resource drbd1 {
  inittimeout = -1
  protocol = C
  fsckcmd = /bin/true

  disk {
    do-panic
    disk-size = 14000000k
  }

  net {
                        # -max has to be larger than -min, obviously
    sync-min = 500k
    sync-max = 1M # maximal average syncer bandwidth
    tl-size = 5000 # transfer log size, ensures strict write ordering
    timeout = 60 # unit: 0.1 seconds
    connect-int = 10 # unit: seconds
    ping-int = 10 # unit: seconds
    ko-count = 4 # if some block send times out this many times,
                        # the peer is considered dead, even if it still
                        # answeres ping requests
  }

  on d1 {
    device = /dev/nb1
    disk = /dev/hda4
    address = 192.168.0.101
    port = 7789
  }

  on d2 {
    device = /dev/nb1
    disk = /dev/hda4
    address = 192.168.0.102
    port = 7789
  }
}

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility daemon
keepalive 2
deadtime 15
warntime 20
initdead 20
udpport 694
auto_failback on

bcast eth1

node d1
node d2

d1 193.x.x.2/28/eth0 IPaddr::10.10.10.100/24/eth1 datadisk::drbd0 vserver::v1
d2 193.x.x.3/28/eth0 IPaddr::10.10.10.101/24/eth1 datadisk::drbd1 vserver::v2

#!/bin/sh
VERSION='0.3.3'
#
# Copyright (C) 2002, Mark Lawrence <nomad_at_null.net>
# Copyright (C) 2002, Paul Sladen <vserver_at_paul.sladen.org>
#
# Install a virtual debian server (vserver) from a debian HTTP/FTP archive
#
# ----------------------------------------------------------------
# Configurable items:

# Root directory of your virtual servers (probably shouldn't change this)
VSERVER_ROOT="/virtual"

# Packages to install in addition to the base defaults
# MUST INCLUDE ALL DEPENDENCIES (seperated by "," commas)
INSTALL_PACKAGES="host,less,dnsutils,wget,bzip2,ssh,rsync,libssl0.9.6,liblwres1,zlib1g,libbz2-1.0,traceroute,libdns11,libisc7"

# Packages installed from within the vserver after it has
# been setup (seperated by "," commas)
EXTRA_PACKAGES=""

# Packages to remove from the base defaults (seperated by "," commas)
REMOVE_PACKAGES="dhcp-client,lilo,makedev,pcmcia-cs,ppp,pppconfig,pppoe,pppoeconf,setserial,syslinux,nano,fdutils,iptables,libpcap0,pciutils,libpci1,libpci2"

# sysvinit services relating to hardware access to remove
REMOVE_LINKS="klogd hwclock.sh setserial urandom networking umountfs halt reboot"

# Architecture: overide on non-Debian host such as Redhat
# otherwise dpkg will detect whether we are i386/powerpc/sparc/etc
ARCH=""

# Which debian distribution (warning: this has only been tested with woody)
DIST="sid"

# Local or nearest location of a debian mirror (must include the `/debian')
MIRROR="http://ftp.pl.debian.org/debian"

# Default network interface for vservers:
INTERFACE="eth0"

# Copy vreboot/vhalt/vshutdown utility into /usr/local/sbin/
COPY_VREBOOT="true"

# ----------------------------------------------------------------
# Nothing from here on should need changing.
# ----------------------------------------------------------------

# NOTE: debootstrap handles multiple MIRRORs, so there is no reason why
# we shouldn't too--that way we could just let it build /etc/apt/sources.list

usage ()
{
    cat << EOF 1>&2
usage: ${0##*/} [OPTIONS] --hostname x --domain y.z --ip 1.2.3.4
    (see --help for more information)
EOF
}
full_usage ()
{
    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

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 "woody", passed to debootstrap.
    --fakeinit use "/sbin/init" to boot vserver
    --interface interface for IP addresses (if not "eth0")
    --mirror Debian HTTP/FTP mirror (including the /debian)
    --sshkeys copy pub-keys to "/root/.ssh/authorized_keys"
    -v, --verbose show extra output during setup
    --vsroot location of "/vserver/" directory
Required:
    --hostname hostname for new vserver (eg. "alpha")
    --domain dns domain for new vserver (eg. "example.com")
    --ip IPv4 address for new vserver

EOF
}
full_version ()
{
    cat << EOF
${0##*/} version $VERSION
Copyright (c) 2002 Mark Lawrence <nomad_at_null.net>
Copyright (c) 2002 Paul Sladen <vserver_at_paul.sladen.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; either version 2 of the License, or (at
your option) any later version.

EOF
}
parse_args ()
{
    while [ $# -gt 0 ] ; do
        #echo "parse_args() doing :$#: :$1: :$*:"
        case "$1" in
            --help|-h)
            full_usage
            shift
            exit 0
            ;;
            --version|-V)
            full_version
            shift
            exit 0
            ;;
            --arch)
            case "$2" in
                [a-z]*)
                ARCH="$2"
                ;;
                *)
                echo "${0##*/} error: $1 overrides dpkg autodetect on non-Debian host-servers" 1>&2
                echo 'e.g. "i386"' 1>&2
                exit 1
                ;;
            esac
            shift 2
            ;;
            --copy-vreboot)
            COPY_VREBOOT="true"
            shift
            ;;
            --no-copy-vreboot)
            COPY_VREBOOT=""
            shift
            ;;
            --dist)
            case "$2" in
                [a-z]*)
                DIST="$2"
                if [ "woody" != "$2" ]; then
                    echo "${0##*/} warning: I only know how to do \"woody\", be careful!" 1>&2
                fi
                ;;
                *)
                echo "${0##*/} error: $1 requires a Debian distribution" 1>&2
                echo 'e.g. "woody"' 1>&2
                exit 1
                ;;
            esac
            shift 2
            ;;
            --domain)
            case "$2" in
                [a-z]*[a-z])
                VDOMAIN="$2"
                ;;
                *)
                echo "${0##*/} error: $1 requires a dns domain-name" 1>&2
                echo 'e.g. "example.com"' 1>&2
                exit 1
                ;;
            esac
            shift 2
            ;;
            --fakeinit)
                # Note space at beginning--this gets tagged straight on
            FAKEINIT=" fakeinit"
            shift
            ;;
            --hostname)
            case "$2" in
                [a-z]*[a-z0-9])
                VHOST="$2"
                ;;
                *)
                echo "${0##*/} error: $1 must be a hostname for the vserver" 1>&2
                echo 'e.g. "alpha"' 1>&2
                exit 1
                ;;
            esac
            shift 2
            ;;
            --interface)
            case "$2" in
                [a-z]*)
                INTERFACE="$2"
                ;;
                *)
                echo "${0##*/} error: $1 must be followed by a network interface" 1>&2
                echo 'e.g. "eth1"' 1>&2
                exit 1
                ;;
            esac
            shift 2
            ;;
            --ip)
            # This does for an octet: ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]) ;-)
            case "$2" in
                [0-9]*.[0-9]*.[0-9]*.[0-9]*)
                IP="$2"
                ;;
                *)
                echo "${0##*/} error: $1 requires a single IPv4 e.g. \"192.168.100.1\"" 1>&2
                exit 1
                ;;
            esac
            shift 2
            ;;
            --mirror)
            case "$2" in
                [hf]*://*)
                MIRROR="$2"
                ;;
                *)
                echo "${0##*/} error: $1 requires a debian mirror" 1>&2
                echo 'e.g. "http://ftp.uk.debian.org/debian"' 1>&2
                exit 1
                ;;
            esac
            shift 2
            ;;
            --verbose|-v)
            export verbose="true"
            shift
            ;;
            --sshkeys)
            if [ -f "$2" ]; then
                SSH_KEYS="$2"
            else
                echo "${0##*/} error: $1 must be followed by a valid public-key-file!" 1>&2
                echo 'e.g. "/root/.ssh/id_dsa.pub"' 1>&2
                exit 1
            fi
            shift 2
            ;;
            --vsroot)
            case "$2" in
                /*)
                if [ -d "$2" ]; then
                    VSERVER_ROOT="$2"
                else
                    echo "${0##*/} error: $1 needs a valid absolute directory" 1>&2
                    echo 'e.g. "/vservers"' 1>&2
                    exit 1
                fi
                ;;
                *)
                echo "${0##*/} error: $1 needs a valid absolute directory" 1>&2
                echo 'e.g. "/vservers"' 1>&2
                exit 1
                ;;
            esac
            shift 2
            ;;
            -*)
            usage
            exit 1
            ;;
            ?*)
            usage
            exit 1
            ;;
        esac
    done
}

parse_args $@

if ! [ -n "$VHOST" -a -n "$VDOMAIN" -a -n "$IP" ]; then
    echo "${0##*/} error: --hostname, --domain and --ip are required" 1>&2
    usage
    exit 1
fi

# Strip final slashes off a couple of things
MIRROR="${MIRROR%/}"
VSERVER_ROOT="${VSERVER_ROOT%/}"

# 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
    echo ' on a "vserver/ctx-patch" enabled kernel' 1>&2
    echo ' See: http://www.solucorp.qc.ca/miscprj/s_context.hc' 1>&2
    exit 1
fi

if [ -x /usr/bin/id ] && [ `id -u` -ne 0 ]; then
  echo "${0##*/} error: Must be run as root!" 1>&2
  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 "$VSERVER_ROOT/$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 "$VSERVER_ROOT/ARCHIVES" ]; then
    mkdir -p "$VSERVER_ROOT/$VHOST/var/cache/apt/archives"
    cp -a "$VSERVER_ROOT/ARCHIVES/"*.deb "$VSERVER_ROOT/$VHOST/var/cache/apt/archives"
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" "$VSERVER_ROOT/$VHOST" "$MIRROR" ; then
    echo "${0##*/}: error: debootstrap failure. Cannot continue."
    exit 1
fi

# Make it so that apt and friends work
cat << EOF > "$VSERVER_ROOT/$VHOST/etc/apt/sources.list"
deb $MIRROR/ stable main non-free contrib
deb-src $MIRROR/ stable main non-free contrib

deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free
deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib non-free

deb http://security.debian.org stable/updates main contrib non-free

EOF

# Fix up the available device nodes, for security
if cd "$VSERVER_ROOT/$VHOST/dev"; then
    tar cfp /tmp/dev.tar.$$ full null ptmx random tty urandom zero
    rm -rf $VSERVER_ROOT/$VHOST/dev/*
    tar xfp /tmp/dev.tar.$$
    rm /tmp/dev.tar.$$
    mkdir pts
    mkdir shm
fi

# Give the new host a hostname
echo "$VHOST" > "$VSERVER_ROOT/$VHOST/etc/hostname"

# Set up the /etc/hosts file (needed for some parts of the base-config)
cat << EOF > "$VSERVER_ROOT/$VHOST/etc/hosts"
# /etc/hosts

127.0.0.1 localhost
$IP $VHOST.$VDOMAIN $VHOST

# The following lines are desirable for IPv6 capable hosts
# (added automatically by netbase upgrade)

::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

EOF

# grab DNS servers from the host-server for `resolv.conf'
(echo search $VDOMAIN ; grep '^nameserver' /etc/resolv.conf) \
> "$VSERVER_ROOT/$VHOST/etc/resolv.conf"

# If there is a proxy server statement in-use in the Host server, copy it across
if [ -f /etc/apt/apt.conf ]; then
    cp /etc/apt/apt.conf $VSERVER_ROOT/$VHOST/etc/apt/apt.conf
fi

# This old uname was putting the name of the *host* into the vserver motd
# uname -a > $VSERVER_ROOT/$VHOST/etc/motd

# Create a shorter motd (uname -a would give name of host-server)
echo "Debian GNU/Linux ($DIST/$(uname -m)) $VHOST.$VDOMAIN" \
> "$VSERVER_ROOT/$VHOST/etc/motd"

# Create a dummy fstab
cat << EOF > "$VSERVER_ROOT/$VHOST/etc/fstab"
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
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 > "$VSERVER_ROOT/$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 > "$VSERVER_ROOT/$VHOST/etc/inittab"
# /etc/inittab: init(8) configuration.

# The default runlevel.
id:2:initdefault:

# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS

# What to do in single-user mode.
~~:S:wait:/sbin/sulogin

# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

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
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

EOF

# By default the Debian Install script runs zillions of cron jobs at
# 0625 every morning. On a system with lots of vservers all trying to
# scan the disk at the same time this causes $MAJOR disk-thrash. So
# we randomize it a bit so that they run evenly between 1am and 7am,
# avoiding the 5minutes either side of the hour when other stuff tends
# to be scheduled. (BTW, this solution is Overkill!)

# This looks over complicated--and it probably is...:
#
# a) We want the DAILY jobs to run between :05 and :55 minutes past
# b) We want the WEEKLY job 3-5 minutes after the DAILY.
# c) And the MONTHLY job 3-5 minutes after that.
# d) Make sure all three jobs are started by 55minutes past (five-to)
# ...if they were ever to all run on the same day!

d1=$(($RANDOM % 3 + 3)); # between 3 and 5
d2=$(($RANDOM % 3 + 3)); # between 3 and 5
dt=$((50 - $d1 - $d2)); # between 0 and 44

DAILY=$(($RANDOM % $dt + 5)) # between 5 and 49
WEEKLY=$(($DAILY + $d1)) # between 8 and 52
MONTHLY=$(($WEEKLY + $d2)) # between 11 and 55

HOUR=$(($RANDOM % 6 + 1)) # between 1 and 7 (AM localtime)

# Create replacement /etc/crontab with randomized times above
cat << EOF > "$VSERVER_ROOT/$VHOST/etc/crontab"
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the \`crontab\'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
$DAILY $HOUR * * * root test -e /usr/sbin/anacron || run-parts --report /etc/cron.daily
$WEEKLY $HOUR * * 7 root test -e /usr/sbin/anacron || run-parts --report /etc/cron.weekly
$MONTHLY $HOUR 1 * * root test -e /usr/sbin/anacron || run-parts --report /etc/cron.monthly

EOF

# Create default /etc/vservers entry
cat << EOF > /etc/vservers/$VHOST.conf
S_HOSTNAME="$VHOST"
IPROOT="$IP"
IPROOTDEV="eth0"
ONBOOT="yes"
S_NICE=""
S_FLAGS="lock nproc$FAKEINIT"
ULIMIT="-H -u 256 -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

# ------------------------------------------------------------
# From here on we do things live in the server
# Generate the script that runs the rest of the setup from within the
# virtual server.
cat << EOF > $VSERVER_ROOT/$VHOST/vserver-config.sh
#!/bin/sh

dselect update

tzsetup -y

dpkg-reconfigure passwd

tasksel

rm -f /etc/exim/exim.conf
eximconfig

# because the --exclude flag doesn\'t seem to work on debootstrap
apt-get --assume-yes --purge remove `echo $REMOVE_PACKAGES | sed -e 's/,/ /g'`

for link in $REMOVE_LINKS
do
    update-rc.d -f \$link remove
done

$EXTRA_PACKAGES_INSTALL

EOF

# Run the above commands from within the server
chmod 755 $VSERVER_ROOT/$VHOST/vserver-config.sh
vserver $VHOST exec /vserver-config.sh
rm -f $VSERVER_ROOT/$VHOST/vserver-config.sh

# If you need to install your SSH management keys into the vserver
if [ -f "$SSH_KEYS" ]; then
    mkdir -p "$VSERVER_ROOT/$VHOST/root/.ssh"
    chmod 700 "$VSERVER_ROOT/$VHOST/root/.ssh/"
    cat "$SSH_KEYS" >> "$VSERVER_ROOT/$VHOST/root/.ssh/authorized_keys"
    chmod 600 "$VSERVER_ROOT/$VHOST/root/.ssh/authorized_keys"
fi

# Install the vreboot/rebootmgr utility--hopefully this will disappear soon
VREBOOT_LOCATION="/usr/lib/vserver/vreboot"
if [ "$COPY_VREBOOT" == "true" -a -x "$VREBOOT_LOCATION" ]; then
    cp -a "$VREBOOT_LOCATION" "$VSERVER_ROOT/$VHOST/usr/local/sbin/"
    chmod 750 "$VSERVER_ROOT/$VHOST/usr/local/sbin/vreboot"
    # ln -s "$VSERVER_ROOT/$VHOST/usr/local/sbin/"{vshutdown,vreboot}
    # ln -s "$VSERVER_ROOT/$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
vserver $VHOST stop

# Populate the archive for future virtual servers
if [ ! -d $VSERVER_ROOT/ARCHIVES ]; then
    mkdir $VSERVER_ROOT/ARCHIVES
fi
cp $VSERVER_ROOT/$VHOST/var/cache/apt/archives/*.deb $VSERVER_ROOT/ARCHIVES

echo
echo "You should now adjust /etc/vservers/$VHOST.conf 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

_______________________________________________
Vserver mailing list
Vserver_at_list.linux-vserver.org
http://list.linux-vserver.org/mailman/listinfo/vserver


About this list Date view Thread view Subject view Author view Attachment view
[Next/Previous Months] [Main vserver Project Homepage] [Howto Subscribe/Unsubscribe] [Paul Sladen's vserver stuff]
Generated on Wed 04 Aug 2004 - 09:13:19 BST by hypermail 2.1.3