Subject: Re: [vserver] Vservers on Slackware
From: Herbert Poetzl <herbert@13thfloor.at>
Date: Fri, 22 Aug 2008 04:35:07 +0200

On Thu, Aug 21, 2008 at 08:13:20PM +0200, Laurens Vets wrote:
> Hi list,
> 
> I wrote a document a while back on how to install vservers on Slackware 
> and was wondering whether the procedure I used is correct or whether I 
> forgot something or ...  Anyways, it's a rather large mail so hopefully 
> you won't get bored :)

not reading the mail in deep detail, just skimming 
over and dropping a few comments :)

> You will need a kernel which has been patched to work with Linux-VServer 
> and the util-vserver software. I?ve created a couple of simple scripts 
> to aid in setting up minimal Slackware guests: 
> http://www.cilinder.be/slackware/svs-0.1.tar.gz.
> 
> Next, you will need the util-vserver tools which are the Linux-VServer 
> userland tools. You can download my Slackware 12 package here: 
> util-vserver-0.30.214-i486-1tfx.tgz. Install via the normal Slackware 
> method ("installpkg util-vserver-0.30.214-i486-1tfx.tgz").
> 
> We start by creating a template. I?ve based my list of installed 
> packages on the Linux from Slack and Minimal System pages on 
> Slackwiki.org. You can find the list of packages that will be installed 

sounds good, can they be installed via network?

> in the template VServer in the svs scripts above (look for the 
> "vserver.list" file). Download the above scripts and extract them to a 
> local directory:
> 
> $ wget http://www.cilinder.be/slackware/svs-0.1.tar.gz
> $ tar zxpvf svs-0.1.tar.gz
> 
> The files get.sh, inst.sh and vserver.list should now be available in 
> your current working directory. Get.sh will fetch the necessary packages 
> from a Slackware mirror. Inst.sh will install the downloaded packages to 
> /vservers/template. The file vserver.list contains the necessary 
> packages for a minimal Slackware VServer. It?s probably a good idea to 
> change the Slackware mirror in the get.sh to something that?s closer to 
> your location.

you might want to integrate that as a new build
method (-m slackware) into util-vserver, and 
I'm sure, if that can be done in a clean way,
Daniel will happily add that to the next release

> We?ll begin by fetching the necessary Slackware 12.0 packages with get.sh:
> $ ./get.sh
> 
> When this is done, there will be a new directory "slackware" in your 
> current working directory with a bunch of packages. For the next part, 
> you?ll have to become root. When you are, run inst.sh:
> # ./inst.sh
> 
> This will install the above downloaded packages in /vservers/template 
> which will become our template directory for future Slackware VServers. 
> Next, descent in the directory /vservers/template/dev and remove the 
> devices listed there:
> # cd /vservers/template/dev/
> # rm -Rf *
> 
> We will also have to create a System V initialization script in 
> /vservers/template/etc/init.d/:

does it use something different than sysv?
if so, is it kind-of runlevel based?
if not, does the 'plain' style work for it?

> # vi /vservers/template/etc/init.d/rc
> 
> Add the following in the above file:
> if [ $1 -eq 3 ]; then
>   echo "entering runlevel 3: multi";
>   /etc/rc.d/rc.M
> fi
> if [ $1 -eq 6 ]; then
>   echo "entering runlevel 6: reboot";
>   /etc/rc.d/rc.6
> fi
> if [ $1 -eq 0 ]; then
>   echo "entering runlevel 0: shutdown";
>   /etc/rc.d/rc.0
> fi
> if [ $1 -eq 4 ]; then
>   echo "entering runlevel 4";
> fi
> if [ $1 -eq 5 ]; then
>   echo "entering runlevel 5";
> fi
> if [ $1 -eq 1 ]; then
>   echo "entering runlevel 1:single";
>   /etc/rc.d/rc.K
> fi
> if [ $1 -eq 2 ]; then
>   echo "entering runlevel 2:multi";
>   /etc/rc.d/rc.M
> fi
> 
> Don?t forget to give that file execution permissions otherwise it won?t 
> run when we start our VServer:
> # chmod u+x /vservers/template/etc/init.d/rc
> 
> After this is done, we will need to apply a patch (found here: 
> slack12.diff) which will disable the Slackware hardware related startup 
> scripts:
> # cd /vservers/template
> # wget http://www.cilinder.be/slackware/slack12.diff
> # patch -p1 < slack12.diff
> 
> We will also have to disable "/etc/rc.d/rc.inet1" from being run on startup:
> # chmod -x /vservers/template/etc/rc.d/rc.inet1
> 
> The next command will create a new skeleton vserver under 
> /vservers/vserver1 with the necessary devices:
> 
> # NAME=vserver1
> # INTERFACE=eth0:10.0.0.1/24
> # CONTEXT=1000
> # vserver ${NAME} build -m skeleton --context ${CONTEXT} --interface
> ${INTERFACE} --flags 
> lock,virt_mem,virt_uptime,virt_cpu,virt_load,sched_hard,hide_netif
> --initstyle sysv

you don't want to give all those flags, as
some of them are default anyway, and others
are left-overs from ancient times :)

> In the above example, change the NAME, INTERFACE and CONTEXT fiels to 
> whatever it needs to be on your machine. After that, you will have a new 
> directory /vserver/vserver1. Now we will copy our template directory 
> that newly created directory:
> 
> # cd /vservers/
> # cp -a template/. vserver1/.
> 
> At this point, our VServer should already be able to boot. We can test 
> this with:
> # /usr/sbin/vserver vserver1 start
> 
> You?ll probably see a lot of error messages, this is due to the 
> Slackware startup scripts that are executed in the VServer related to 
> configuring and starting hardware devices. I?m still working on a diff 
> to patch the template directory to remove those. When the VServer has 
> been booted, you can access it with:
> # /usr/sbin/vserver vserver1 enter
> 
> At this point you can start "netconfig" and start configuring your newly 
> created Slackware 12.0 VServer. It?s probably a good idea to have a 
> 'localhost' in your vserver. This can be achieved by creating a new 
> folder in /etc/vservers/${NAME}/interfaces/. Name the folder 1, if the 
> previous one that exists there is 0. Then create files named ?ip?, ?dev? 
> and ?prefix? and write 127.0.0.1 to ip, lo to dev and 32 to prefix:

don't do that, it will break a lot of things
(and make your guest insecure)

if you are with vs2.0-vs2.2, you want to change
/etc/hosts to contain something like

 <guest-ip> localhost localhost.localdomain

if you are with vs2.3, enable the lback feature
and you'll get a private 127.0.0.1 for your guest

> # mkdir /etc/vservers/${NAME}/interfaces/1/
> # echo 127.0.0.1 > /etc/vservers/${NAME}/interfaces/1/ip
> # echo 32 > /etc/vservers/${NAME}/interfaces/1/prefix
> # echo lo > /etc/vservers/${NAME}/interfaces/1/dev

again, don't do that if you do not exactly know
the implications

> Vservers created this way work, but start with some bootup related 
> errors, probably related to Slackware startup scripts which are not yet 
> full corrected...

you should probably remove _any_ network setup
from the guest's scripts, as they are not needed
anyway

same gies for hardware related setups, like
hwclock, special drivers, etc

> Did I miss something?  Does this all sound sane?
> 
> Thanks for checking and making it this far :)

HTH,
Herbert

>