Paravirtualized Gentoo 2009 domU Using Debian Lenny
This guide will help you to create gentoo paravirtualized xen guest under Debian Lenny. Since Gentoo 2008.0 release is deprecated, so we will use current gentoo stage.
Base
dd if=/dev/zero of=gentoo.img count=4096 bs=1M
mkfs.ext3 gentoo.img
mount -o loop gentoo /mnt/gentoo
Gentoo Stage
wget http://mirrors.kernel.org/gentoo/releases/amd64/current/stage3-amd64-20090702.tar.bz2
tar jxvf stage3-amd64-20090702.tar.bz2 -C /mnt/gentoo
Modules
mkdir /mnt/gentoo/lib/modules
cp -R /lib/modules/2.6.26-2-xen-amd64 /mnt/gentoo/lib/modules
Chroot Base
mount -t proc none /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev
cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
chroot /mnt/gentoo /bin/bash
env-update
source /etc/profile
emerge --sync
emerge dhcp
emerge syslog-ng
rc-update add syslog-ng default
emerge dcron
rc-update add dcron default
nano -w /etc/conf.d/hostname
nano /etc/conf.d/net
config_eth0=( "192.168.1.100 netmask 255.255.255.0" ) routes_eth0=( "default gw 192.168.1.254" ) #config_eth0=( "dhcp" )
nano /etc/fstab
/dev/sda1 / ext3 noatime 0 1 proc /proc proc defaults 0 0 shm /dev/shm tmpfs nodev,nosuid,noexec 0 0
passwd
exit
Configuration
kernel = '/boot/vmlinuz-2.6.26-2-xen-amd64' ramdisk = '/boot/initrd.img-2.6.26-2-xen-amd64' memory = '256' root = '/dev/sda1 ro' disk = ['file:/xen/gentoo.img,sda1,w',] name = 'Gentoo 2009' dhcp = 'dhcp' vif = [ '' ] extra = 'xencons=tty' on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
Problems with /proc
Fixing this is just a matter of commenting out the section of /sbin/rc that attempts to mount /proc begining at around line 217 like this:
# check_statedir /proc # # ebegin "Mounting proc at /proc" # if [[ ${RC_USE_FSTAB} = "yes" ]] ; then # mntcmd=$(get_mount_fstab /proc) # else # unset mntcmd # fi # try mount -n ${mntcmd:--t proc proc /proc -o noexec,nosuid,nodev} # eend $?
You’ll also need to comment the section attempting to mount /sys as well, or the next time you boot, you’ll get the same error with a different mount point failing.
# if [ "$(get_KV)" -ge "$(KV_to_int '2.6.0')" ] ; then # if [[ -d /sys ]] ; then # ebegin "Mounting sysfs at /sys" # if [[ ${RC_USE_FSTAB} = "yes" ]] ; then # mntcmd=$(get_mount_fstab /sys) # else # unset mntcmd # fi # try mount -n ${mntcmd:--t sysfs sysfs /sys -o noexec,nosuid,nodev} # eend $? # else # ewarn "No /sys to mount sysfs needed in 2.6 and later kernels!" # fi # fi