UML on UoG Labs
After waiting 6 hours for apt-get install ubuntu-desktop, this screen cap was taken.
UoG's FC5 Labs can run UML!
UoG's FC5 Labs can run UML!

The image was created using Ubuntu plus the following Makefile:

# Ubuntu Net Installer for UML
# Author:  Brett Foster <fosterb@uoguelph.ca>
# Version: 1.0
#
# Major Dependencies:
#    debootstrap
#    ext2fs utils (mke2fs)
#
# Options:
#    PREFIX=/usr/local/uml
#      The path to create images, and scripts.
#    VM_NAME=uml_default
#      The name of the UML instance, also the name of the launch script.
#    MEM=192M
#      Amount of memory to provide the VM.
#    SWAP=512
#      Amount of disk space to allocate for swap. (Megabytes)
#    ROOTSIZE=2048
#      Amount of disk space to provide the root filesystem. (Megabytes)
#    MIRROR=http://archive.ubuntu.com/ubuntu/
#      For debootstrap -- the mirror.
#      (See man debootstrap for further info.)
#    DIST=edgy
#      The distribution to install.
#      (See man debootstrap for further info.)
#    UML_KERNEL=...
#      The kernel to use. If this is set, this is the path
#      to the kernel's base directory.
#      $(UML_KERNEL)/vmlinux -- The kernel
#      $(UML_KERNEL)/lib -- Directory containing modules to be copied.
#      ---> http://www.user-mode-linux.org/~blaisorblade/binaries/
#    ALSO_SLIRP=y
#      If defined: downloads, installs SLIRP 1.0.16 in to the PREFIX_ABS.
#      ---> http://superb-west.dl.sourceforge.net/sourceforge/slirp/slirp-1.0.16.tar.gz
#    SLIRP=path
#      Uses the pre-installed SLIRP deamon. (Not needed if auto installing.)
#    KERNEL_OPTIONS=
#      Options to pass to the kernel. (Automatically appended if networking was enabled.)
#    INSTALL_PACKAGES=...
#      Packages to install separated by spaces.
#    DISABLE_DEFAULT_PACKAGES=y
#      If defined, the following packages won't be installed:
#        (none)
#      If networking is enabled:
#        dhcp-client iproute ppp ifupdown telnet
#    DISABLE_DEFAULT_CONSOLE_SETTINGS=y
#      Stops xterm from being loaded. (good for CLI)
#    HOSTNAME=uml
#      If networking enabled, sets the hostname.
 
 
# Auto Initialize Defaults
ifndef VM_NAME
    VM_NAME=uml_default
endif
ifndef UML_KERNEL
    UML_KERNEL=um-linux-release-2.6.18-mod
    UML_AUTO=http://www.user-mode-linux.org/~blaisorblade/binaries/2.6.18.1-bb2/uml-release-2.6.18.1-bb2.tar.bz2
endif
ifndef PREFIX
    $(error Please define a PREFIX_ABS!)
endif
PREFIX_ABS=$(shell cd $(PREFIX) && pwd)/
 
ifndef MIRROR
    MIRROR=http://archive.ubuntu.com/ubuntu/
endif
ifndef DIST
    DIST=edgy
endif
ifndef MEM
    MEM=192M
endif
ifndef SWAP
    SWAP=512
endif
ifndef ROOTSIZE
    ROOTSIZE=2048
endif
ifdef ALSO_SLIRP
    SLIRP_VERSION=slirp-1.0.16
    SLIRP_PATCH=fix17.patch
    SLIRP_MIRROR_A=http://superb-west.dl.sourceforge.net/sourceforge/slirp/slirp-1.0.16.tar.gz
    SLIRP_MIRROR_B=http://superb-west.dl.sourceforge.net/sourceforge/slirp/slirp_1_0_17_patch.tar.gz
    SLIRP=$(PREFIX_ABS)/bin/slirp
    ENABLE_NETWORKING=y
endif
ifdef SLIRP
    ENABLE_NETWORKING=y
endif
 
ifdef ENABLE_NETWORKING
    KERNEL_OPTIONS+=eth0=slirp,,"$(SLIRP)"
endif
ifndef DISABLE_DEFAULT_CONSOLE_SETTINGS
    KERNEL_OPTIONS+=con=/dev/null con0=null,fd:2 con1=fd:0,fd:1 #con0=fd:2, con1=fd:0,fd:1
#xterm
endif
 
ifndef DISABLE_DEFAULT_PACKAGES
#    INSTALL_PACKAGES += ubuntu-desktop
ifdef ENABLE_NETWORKING 
    INSTALL_PACKAGES += iproute ifupdown telnet 
endif
endif
 
ifndef HOSTNAME
HOSTNAME=uml
endif
 
 
# Compute Sizes (in K)
RROOTSIZE:=$(shell expr 1024 "*" $(ROOTSIZE))
RSWAP    :=$(shell expr 1024 "*" $(SWAP))
 
$(warning **** UML Installer)
$(warning      Kernel:   $(UML_KERNEL))
$(warning      Mirror:   $(MIRROR))
$(warning      Dist:     $(DIST))
$(warning      Prefix:   $(PREFIX_ABS))
$(warning      Memory:   $(MEM))
$(warning      Swap:     $(SWAP)M)
$(warning      Root:     $(ROOTSIZE)M)
$(warning      Install:  $(INSTALL_PACKAGES))
ifdef ENABLE_NETWORKING
ifdef SLIRP
$(warning      Net:      $(SLIRP))
$(warning      Hostname: $(HOSTNAME))
ifdef ALSO_SLIRP
$(warning      Making:   (SLIRP only))
endif
else
$(warning      Net:      (unsupported))
endif
else
 
endif
 
ifneq ($(shell whoami),root)
$(error You must be root to make this work.)
endif
 
.PHONY: all rootfs scripts test clean networking kernel
 
all: "$(PREFIX_ABS)" networking kernel rootfs test scripts
	@echo "*********************************************"
	@echo "*********************************************"
	@echo "* UML Installed: $(PREFIX_ABS)"
	@echo "* Loading script: $(PREFIX_ABS)/bin/$(VM_NAME)"
	@echo "*********************************************"
	@echo "*********************************************"
 
 
rootfs: "$(PREFIX_ABS)/images/rootfs" "$(PREFIX_ABS)/images/swap" 
	@echo "**** Installing ROOTFS:"
	mkdir -p "$(PREFIX_ABS)/local"
	# unmount if already mounted! (Silently discard if not!)
	$(shell umount "$(PREFIX_ABS)/local")
	mount -o loop "$(PREFIX_ABS)/images/rootfs" "$(PREFIX_ABS)/local"
	debootstrap $(DIST) "$(PREFIX_ABS)/local" $(MIRROR)
	cp -r "$(PREFIX_ABS)/$(UML_KERNEL)/lib/modules/" "$(PREFIX_ABS)/local/lib/"
	chmod -R 0755 "$(PREFIX_ABS)/local/lib/modules/"
	chown -R root:root "$(PREFIX_ABS)/local/lib/modules/"
	#Create a new FSTAB
	echo -n > "$(PREFIX_ABS)/local/etc/fstab"
	echo "# /etc/fstab: static file system information." >> "$(PREFIX_ABS)/local/etc/fstab"
	echo "#" >> "$(PREFIX_ABS)/local/etc/fstab"
	echo "# <file system> <mount point>   <type>  <options>       <dump>  <pass>" >> "$(PREFIX_ABS)/local/etc/fstab"
	echo "proc            /proc           proc    defaults        0       0" >> "$(PREFIX_ABS)/local/etc/fstab"
	echo "/dev/ubda       /               ext3    defaults,errors=remount-ro 0       1" >> "$(PREFIX_ABS)/local/etc/fstab"
	echo "/dev/ubdb       none            swap    sw              0       0" >> "$(PREFIX_ABS)/local/etc/fstab"
	echo "none            /media/host     hostfs  defaults        0       0" >> "$(PREFIX_ABS)/local/etc/fstab"
	mkdir -p "$(PREFIX_ABS)/local/media/host"
 
 
 
 
	chroot "$(PREFIX_ABS)/local" \
	  /usr/bin/env -i \
	  HOME=/root \
	  TERM=$TERM \
	  PS1='\u:\w\$ ' \
	  PATH=/bin:/usr/bin:/sbin:/usr/sbin \
	  /bin/bash -c "apt-get update"
 
	chroot "$(PREFIX_ABS)/local" \
	  /usr/bin/env -i \
	  HOME=/root \
	  TERM=$TERM \
	  PS1='\u:\w\$ ' \
	  PATH=/bin:/usr/bin:/sbin:/usr/sbin \
	  /bin/bash -c "apt-get dist-upgrade"
 
	chroot "$(PREFIX_ABS)/local" \
	  /usr/bin/env -i \
	  HOME=/root \
	  TERM=$TERM \
	  PS1='\u:\w\$ ' \
	  PATH=/bin:/usr/bin:/sbin:/usr/sbin \
	  /bin/bash -c "apt-get install $(INSTALL_PACKAGES)"
 
	#Create networking Config
ifdef ENABLE_NETWORKING
	mkdir -p "$(PREFIX_ABS)/local/etc/network/"
	echo -n > "$(PREFIX_ABS)/local/etc/network/interfaces"
 
	echo "auto lo" >> "$(PREFIX_ABS)/local/etc/network/interfaces"
	echo "iface lo inet loopback" >> "$(PREFIX_ABS)/local/etc/network/interfaces"
	echo "" >> "$(PREFIX_ABS)/local/etc/network/interfaces"
	echo "auto eth0" >> "$(PREFIX_ABS)/local/etc/network/interfaces"
	echo "iface eth0 inet static" >> "$(PREFIX_ABS)/local/etc/network/interfaces"
	echo "    address 10.0.2.15" >> "$(PREFIX_ABS)/local/etc/network/interfaces"
	echo "    netmask 255.0.0.0" >> "$(PREFIX_ABS)/local/etc/network/interfaces"
	echo "    gateway 10.0.2.15" >> "$(PREFIX_ABS)/local/etc/network/interfaces"
 
	echo -n > "$(PREFIX_ABS)/local/etc/resolv.conf"
	echo "domain localhost" >> "$(PREFIX_ABS)/local/etc/resolv.conf"
	echo "nameserver 10.0.2.3" >> "$(PREFIX_ABS)/local/etc/resolv.conf"
 
 
	echo -n > "$(PREFIX_ABS)/local/etc/hosts"
	echo "127.0.0.1       localhost" >> "$(PREFIX_ABS)/local/etc/hosts"
	echo "127.0.1.1       $(HOSTNAME)" >> "$(PREFIX_ABS)/local/etc/hosts"
 
	echo -n > "$(PREFIX_ABS)/local/etc/hostname"
	echo "$(HOSTNAME)" >> "$(PREFIX_ABS)/local/etc/hostname"
 
endif
 
	umount "$(PREFIX_ABS)/local"
	sync
	sleep 1
	rm -rf "$(PREFIX_ABS)/local"
scripts:
	echo -n > "$(PREFIX_ABS)/bin/$(VM_NAME)"
	echo "#!/bin/sh" >> "$(PREFIX_ABS)/bin/$(VM_NAME)"
	echo "# Startup Script for $(VM_NAME) " >> "$(PREFIX_ABS)/bin/$(VM_NAME)"
	echo "\"$(PREFIX_ABS)/$(UML_KERNEL)/vmlinux\"\\" >> "$(PREFIX_ABS)/bin/$(VM_NAME)"
	echo "  root=/dev/ubda \\" >> "$(PREFIX_ABS)/bin/$(VM_NAME)"
	echo "  ubda=\"$(PREFIX_ABS)/images/rootfs\" \\" >> "$(PREFIX_ABS)/bin/$(VM_NAME)"
	echo "  ubdb=\"$(PREFIX_ABS)/images/swap\" \\" >> "$(PREFIX_ABS)/bin/$(VM_NAME)"
	echo "  mem=$(MEM) $(KERNEL_OPTIONS) \\" >> "$(PREFIX_ABS)/bin/$(VM_NAME)"
	echo "  umid=\"$(VM_NAME)\"" >> "$(PREFIX_ABS)/bin/$(VM_NAME)"
	chmod +x "$(PREFIX_ABS)/bin/$(VM_NAME)"
 
test: 
	cd $(PREFIX_ABS) && \
           "$(PREFIX_ABS)/$(UML_KERNEL)/vmlinux" root=/dev/ubda \
           ubda="$(PREFIX_ABS)/images/rootfs" \
           ubdb="$(PREFIX_ABS)/images/swap" \
           mem=$(MEM) $(KERNEL_OPTIONS)
clean:
	rm -rf "$(PREFIX_ABS)/images/swap" "$(PREFIX_ABS)/images/rootfs" "$(PREFIX_ABS)/images/" "$(PREFIX_ABS)/local/" "$(PREFIX_ABS)/$(UML_KERNEL)"
 
ifdef ALSO_SLIRP
networking: "$(PREFIX_ABS)/bin/slirp"
 
"$(PREFIX_ABS)/bin/slirp": "$(PREFIX_ABS)/$(SLIRP_VERSION)" "$(PREFIX_ABS)/$(SLIRP_VERSION)/src/$(SLIRP_PATCH)"
	# Fix bugs!
	cd "$(PREFIX_ABS)/$(SLIRP_VERSION)/src/" && patch -p1 < "$(PREFIX_ABS)/$(SLIRP_VERSION)/src/$(SLIRP_PATCH)"
	# Configure SLiRP
	cd "$(PREFIX_ABS)/$(SLIRP_VERSION)/src/" && ./configure --prefix="$(PREFIX_ABS)/" 
	echo "#define FULL_BOLT" >> "$(PREFIX_ABS)/$(SLIRP_VERSION)/src/config.h"
	# Make SLiRP
	cd "$(PREFIX_ABS)/$(SLIRP_VERSION)/src/" && make
	# hack -- doesn't install right, unless I do this first!
	mkdir -p "$(PREFIX_ABS)/man/man1/slirp.1"
	mkdir -p "$(PREFIX_ABS)/bin"
	# Install it
	cd "$(PREFIX_ABS)/$(SLIRP_VERSION)/src/" && make install
 
"$(PREFIX_ABS)/$(SLIRP_VERSION)": "$(PREFIX_ABS)/slirp.tgz"
	tar  -C "$(PREFIX_ABS)" -zxvf "$(PREFIX_ABS)/slirp.tgz"
"$(PREFIX_ABS)/$(SLIRP_VERSION)/src/$(SLIRP_PATCH)": "$(PREFIX_ABS)/slirp_patch.tgz"
	tar  -C "$(PREFIX_ABS)/$(SLIRP_VERSION)/src" -zxvf "$(PREFIX_ABS)/slirp_patch.tgz"
 
"$(PREFIX_ABS)/slirp.tgz":
	wget -O "$(PREFIX_ABS)/slirp.tgz" "$(SLIRP_MIRROR_A)"
"$(PREFIX_ABS)/slirp_patch.tgz":
	wget -O "$(PREFIX_ABS)/slirp_patch.tgz" "$(SLIRP_MIRROR_B)"
 
 
else
networking:
	@echo Nothing to do for networking.
endif
 
 
 
"$(PREFIX_ABS)":
	mkdir -p "$(PREFIX_ABS)"
"$(PREFIX_ABS)/images": 
	mkdir -p "$(PREFIX_ABS)/images"
"$(PREFIX_ABS)/images/rootfs": "$(PREFIX_ABS)/images"
	@echo "**** Creating ROOTFS:"
	dd if=/dev/zero of="$(PREFIX_ABS)/images/rootfs" count=1 bs=1K seek=$(RROOTSIZE)
	mkfs.ext3 -F "$(PREFIX_ABS)/images/rootfs"
"$(PREFIX_ABS)/images/swap": "$(PREFIX_ABS)/images"
	@echo "**** Creating SWAP:"
	dd if=/dev/zero of="$(PREFIX_ABS)/images/swap" count=1 bs=1K seek=$(RSWAP)
	mkswap "$(PREFIX_ABS)/images/swap"
kernel: "$(PREFIX_ABS)/$(UML_KERNEL)"
 
ifdef UML_AUTO
"$(PREFIX_ABS)/$(UML_KERNEL)": "$(PREFIX_ABS)/$(UML_KERNEL).tar"
	tar -C "$(PREFIX_ABS)" -xvf "$(PREFIX_ABS)/$(UML_KERNEL).tar"
"$(PREFIX_ABS)/$(UML_KERNEL).tar": "$(PREFIX_ABS)/$(UML_KERNEL).tar.bz2"
	bzip2 -f -d "$(PREFIX_ABS)/$(UML_KERNEL).tar.bz2"
"$(PREFIX_ABS)/$(UML_KERNEL).tar.bz2":
	wget -O "$(PREFIX_ABS)/$(UML_KERNEL).tar.bz2" "$(UML_AUTO)"
else
# Copy the kernel from the local directory to the PREFIX_ABS.
"$(PREFIX_ABS)/$(UML_KERNEL)": "$(UML_KERNEL)"
	cp -r "$(UML_KERNEL)" "$(PREFIX_ABS)/"
"$(UML_KERNEL)":
	$(error Please install the custom kernel in the current directory.)
endif
 
archive/user_mode_linux/testing.txt · Last modified: 2006/11/03 03:44 (external edit)
 
RSS Feedfosterb+www@edgeandvertex.org