We currently migrate to MediaWiki from our old installation, but not all content has been migrated yet. Take a look at the Wiki Team page for instructions how to help or browse through our new wiki at wiki.linux-vserver.org to find the information already migrated.
WARNING: You will need knowledge of Arch Linux's pacman, abs and init system. This is not an Arch tutorial
[Arch Linux] is ideal for running as the host and for VServers.
What makes it ideal for the host server is its low foot print and simplicity. On the downside, Arch Linux does not include a VServer kernel or utilities. However, if you are confident building your own kernel and using ABS (the Arch Build System), it is excellent.
Arch is ideal for VServers because it is trivial to install an instance of Arch Linux into a target directory and does not require Arch on the host system.
First for more secure chroots and compatibility you need dietlibc
pkgname=dietlibc pkgver=0.29 pkgrel=1 pkgdesc="A libc that is optimized for small size" url="http://www.fefe.de/dietlibc/" depends=() makedepends=() conflicts=() replaces=() install=dietlibc.install source=(http://www.kernel.org/pub/linux/libs/dietlibc/$pkgname-$pkgver.tar.gz) md5sums=('84059c71d6f559f8c4ca4df03a7a541f') build() { mkdir -p $startdir/pkg/usr/bin $startdir/pkg/usr/man/man1 cd $startdir/src/$pkgname-$pkgver make || return 1 make prefix=$startdir/pkg/usr/lib/dietlibc install || return 1 mv $startdir/pkg/usr/lib/dietlibc/bin/* $startdir/pkg/usr/bin rm -r $startdir/pkg/usr/lib/dietlibc/{man,bin} #install bin-i386/diet $startdir/pkg/usr/bin cp diet.1 $startdir/pkg/usr/man/man1 find $startdir/pkg -name '*.la' -exec rm {} \; }
After you have compiled the dietlibc package and added it, make a soft link to /opt like this: ln -s /usr/lib/dietlibc /opt/diet
This is needed later by the util-vserver package.
pkgname=beecrypt pkgver=4.1.2 pkgrel=1 pkgdesc="A general purpose cryptography library" url="http://beecrypt.sourceforge.net/" depends=('gcc') makedepends=() source=(http://puzzle.dl.sourceforge.net/sourceforge/beecrypt/$pkgname-$pkgver.tar.gz) md5sums=('820d26437843ab0a6a8a5151a73a657c') build() { cd $startdir/src/$pkgname-$pkgver ./configure --prefix=/usr make || return 1 make DESTDIR=$startdir/pkg install find $startdir/pkg -name '*.la' -exec rm {} \; }
The following PKGBUILD will download, package and install util-vserver version 0.30.208. It should be only a matter of changing the version number to make it work with later versions, assuming nothing major changes in the build process.
pkgname=util-vserver pkgver=0.30.208 pkgrel=2 pkgdesc="The util-vserver project provides tools for kernels with the security context patch." url="http://savannah.nongnu.org/projects/util-vserver/" source=(http://www.13thfloor.at/~ensc/util-vserver/files/alpha/${pkgname}-${pkgver}.tar.bz2) makedepends=(vconfig iproute) md5sums=('4453ad0ae7f351fec651d6904e00521f') build() { cd $startdir/src/$pkgname-$pkgver ./configure --prefix=/usr --sysconfdir=/etc --with-initrddir=/etc/rc.d --localstatedir=/var --enable-dietlibc --enable-beecrypt make || return 1 make DESTDIR=$startdir/pkg install || return 1 # Move the v_* scripts out of the init dir, as Arch does not support SYSV style init scripts install -m755 -d $startdir/pkg/usr/libexec/vserver mv $startdir/pkg/etc/rc.d/v_* $startdir/pkg/usr/libexec/vserver find $startdir/pkg -name '*.la' -exec rm {} \; }
Once built and installed, add vprocunhide and vservers-default to DAEMONS in /etc/rc.conf.
Download [archbootstrap] (this script will run on any GNU/Linux host system with wget), choose appropriate values for name, interface and {{context}, pick some vserver flags (or just use the ones below) then use the following shell commands to create your vserver:
(choose a mirror close to you, as archbootstrap will download all base packages)
# name=test # interface=eth0:72.36.180.187/29 # context=5 # vserver ${name} build -m skeleton --context ${context} --interface ${interface} \ --flags lock,virt_mem,virt_uptime,virt_cpu,virt_load,sched_hard,hide_netif --initstyle plain # echo default > /etc/vservers/${name}/apps/init/mark # archbootstrap /vservers/${name} ftp://ftp.archlinux.de/pub/archlinux ...
If you don't have a public ip to spare for your vserver guest, then you must create guest with private ip, like 192.168.103 for example. Then in order to allow guest to access the Internet, you will have to set up proper NAT rule for your host's iptables. Assuming that you are using addresses like in previous example, a working NAT rule is this:
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SNAT --to x.x.x.x
where the last one is your host's public ip, assuming that it can access the Internet directly. You can now test if NAT rule succeeded by using this command: iptables -t nat -L
It should display an output like this:
Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 192.168.0.0/24 anywhere to:x.x.x.x
Remeber to copy /etc/resolv.conf to /vservers/${name}/etc to be able to use domain names instead of just ip addresses.
If you plan to set up servers to your guest, it would also be useful to have localhost in there. This can be achieved by creating a new folder in /etc/vservers/name/interfaces/ - name the folder 1, for example, if the previous one that exists there is 0. Then create there files named ip, dev and prefix.
To ip write 127.0.0.1, to dev write lo and to prefix write 32.
Start your vserver:
# vserver ${name} start
Check it has started
# vserver-stat
Then enter the guest (vserver name enter) and at first create iproute package (it is at /var/abs/network/iproute) - you will need it to see ip addresses and other needful information. Add the package and now to see how networking is working use this command ip addr show and try to ping the world.
That is pretty much it. You will probably want to edit /vservers/test/etc/rc.conf to remove interface configuration and set your hostname.
All the usual vserver commands should work as you would expect, but don't forget to modify host service config files so they don't bind to INADDR_ANY.
Note: the value in /etc/vservers/${name}/apps/init/mark must be default if you wish your vservers to start at boot using the vservers-default init script.
Note2: if on starting up a vserver the keyboard control is lost on host, remove console from /dev of vserver