Admin Stuff

I've recently setup a simple UML instance on debian. What I find truly great is, that utilizing rootstrap and slirp, I can create, configure and run a user-mode-linux instance without once needing root access (that is, after the required packages are installed).

First we need some additional debian packages:

 $ sudo aptitude install user-mode-linux uml-utilities slirp rootstrap

Then edit /etc/rootstrap/rootstrap.conf and remove the comments for the 'slirp' paragraph in the '[network]' section.

After this, a new debian-etch filesystem can easily be build using rootstrap:

 $ dd if=/dev/zero of=root bs=1 count=0 seek=256M
 $ /sbin/mke2fs -F root
 $ dd if=/dev/zero of=swap bs=1M count=128
 $ /sbin/mkswap swap
 $ rootstrap root

Now we can boot into the new instance and configure the system. Since I don't like logging in using xterms or whatever, I want to login on the terminal where I started the uml instance. To do this, we need to change '/etc/inittab' within the uml. We boot UML into single user mode

 $ linux.uml con=nul con0=fd:0,fd:1 ubda=root ubdb=swap \
       root=/dev/ubda eth0=slirp,,slirp-fullbolt s

in single user mode within the UML we edit /etc/inittab:

 UML# vi /etc/inittab

We comment out all '/sbin/getty' lines except the first and replace the terminal 'tty1' in the first '/sbin/getty' line with 'tty0'. We exit vi and add 'tty0' as a valid secure terminal and reload the inittab.

 UML# echo 'tty0' >>/etc/securetty
 UML# init q

Next we add the swap partition:

 UML# echo '/dev/ubdb swap swap defaults 0 0' >>/etc/fstab
 UML# swapon -a

Then change the hostname to something meaningful:

 UML# echo 'myuml' >/etc/hostname
 UML# hostname -F /etc/hostname
 UML# echo " localhost.localdomain localhost `hostname`" >/etc/hosts

That's it. We can exit single user mode and continue to boot into runlevel 2. There we can then login as root (no password).

 UML# <Ctrl-D>

Use 'shutdown' to exit the UML.

 UML# shutdown -h now

Resizing the filesystem

A 256M partition is large enough to install a minimal etch system but not much more. To resize the filesystem, use resize2fs:

 $ /sbin/e2fsck -f root
 $ dd if=/dev/zero of=var/root bs=1 seek=1G count=0
 $ /sbin/resize2fs root 1G

Will resize the root filesystem to 1G (sparsely). The same procedure may be used to shrink a filesystem. Shrinking and then re-enlarging a filesystem can help save space since it will recreate unused space in the image as sparse regions.