I’m following Lucas Nussbaum’s notes on bootstrapping a CentOS system on Debian.

I am using /var/tmp instead of /tmp, and I’m planning on using this as an OpenVZ container.

My abridged procedure:

apt-get install yum rpm python-m2crypto
apt-get install -t experimental rpm
mkdir -p /var/tmp/centos/var/lib/rpm
rpm --root /var/tmp/centos --initdb
# http://rpm.pbone.net/index.php3/stat/4/idpl/12379189/com/centos-release-5-3.el5.centos.1.i386.rpm.html
wget ftp://ftp.muug.mb.ca/mirror/centos/5.3/os/i386/CentOS/centos-release-5-3.el5.centos.1.i386.rpm
rpm -ivh --force-debian --nodeps --root /tmp/centos centos-release*rpm
yum --installroot /var/tmp/centos/ install yum
ln -s /var/tmp/centos/etc/pki /etc/pki
yum --installroot /var/tmp/centos/ install yum
mount -t proc foo /var/tmp/centos/proc
mount -t sysfs foo /var/tmp/centos/sys
chroot /var/tmp/centos /bin/bash --login
cd /var/lib/rpm && rm *
echo "nameserver 4.2.2.1" > /etc/resolv.conf
rpm --initdb
yum install yum
yum install vim-minimal less
yum clean all
exit

After that, I followed the instructions on the OpenVZ wiki for creating a CentOS 5 template.

With my own manual version of localepurge (and worse) thrown in for good measure.

cd /var/tmp/centos
umount proc/
umount sys/
cd usr/lib
mkdir locale_keep
mv locale/en_US* locale_keep
rm -rf locale/
mv locale_keep locale
cd ../share
mkdir locale_keep
mv locale/en_US locale_keep/
rm -rf locale
mv locale_keep locale
rm info/*
rm -rf man/*
rm -rf doc/*
cd ..
cat etc/rc.sysinit | sed "s/\/sbin\/start_udev/#\/sbin\/start_udev/" > /tmp/rc.sysinit && mv /tmp/rc.sysinit etc/rc.sysinit
mknod dev/ptmx c 5 2
mkdir dev/pts
/sbin/MAKEDEV -d dev ttyp ptyp
mknod dev/null c 1 3
mknod -m 644 dev/random c 1 8
mknod dev/urandom c 1 9
tar -czvf /vz/template/cache/centos-5.3-i386-minimal.tar.gz ./

I’ll probably add some of the procedures I developed from mindeb to this process, like clearing out unused locales.

That produces a 120MB container, and a 40MB compressed template cache. It could get smaller.

I love this type of stuff! I’m definitely going to add this as a build target for NODOWS!

If I mess up in this process, I do this:

rm /vz/template/cache/centos-5.3-i386-minimal.tar.gz
tar -czvf /vz/template/cache/centos-5.3-i386-minimal.tar.gz ./

NOTE: I still can’t get this working right. Seems to be a problem with udev and ptys.

UPDATE: Thanks to some follow-up comments on the original post by Lucas, I learned about mach. Time to give that a try.