HOSTNAME=gstable RAW_IMAGE=$(HOSTNAME).img QCOW_IMAGE=$(HOSTNAME).qcow VMDK_IMAGE=$(HOSTNAME).vmdk VIRTIO=NO TIMEZONE=UTC DISK_SIZE=6.0G SWAP_SIZE=30 CHROOT=chroot ARCH=amd64 MAKEOPTS=-j4 PRUNE_CRITICAL=NO INSTALL=install M4=m4 M4_DEFS=-D HOSTNAME=$(HOSTNAME) M4C=$(M4) $(M4_DEFS) USEPKG=--usepkg --binpkg-respect-use=y PARTED=/usr/sbin/parted PORTAGE=/portage DISTFILES=/var/portage/distfiles STAGE3=ftp://ftp.osuosl.org/pub/gentoo/releases/$(ARCH)/autobuilds/current-stage3/stage3-$(ARCH)-*.tar.bz2 KERNEL=gentoo-sources all: image $(RAW_IMAGE): qemu-img create -f raw $(RAW_IMAGE) $(DISK_SIZE) partitions: parted $(RAW_IMAGE) $(PARTED) -s -a optimal $(RAW_IMAGE) mklabel msdos $(PARTED) -s -a optimal $(RAW_IMAGE) mkpart primary ext4 0 $(DISK_SIZE) $(PARTED) -s -a optimal $(RAW_IMAGE) set 1 boot on touch partitions parted: emerge -n1 $(USEPKG) parted touch parted preproot: stage3 cp -L /etc/resolv.conf $(CHROOT)/etc/ mkdir -p $(CHROOT)/usr/portage if [ ! -e preproot ] ; then \ mount -t proc none $(CHROOT)/proc; \ mount -o bind /dev $(CHROOT)/dev; \ mount -o bind /var/tmp $(CHROOT)/var/tmp; \ mount -o bind $(PORTAGE) $(CHROOT)/usr/portage; \ mkdir -p $(CHROOT)/usr/portage/distfiles; \ mount -o bind $(DISTFILES) $(CHROOT)/usr/portage/distfiles; \ fi chroot $(CHROOT) locale-gen touch preproot stage3: make.conf package.use package.keywords locale.gen mkdir -p $(CHROOT) if [ ! -e stage3 ] ; then \ wget -c -q -nc $(STAGE3); \ tar xvjpf stage3-*.tar.bz2 -C $(CHROOT); \ fi cp make.conf $(CHROOT)/etc/make.conf cp locale.gen $(CHROOT)/etc/locale.gen mkdir -p $(CHROOT)/etc/portage cp package.use $(CHROOT)/etc/portage/package.use cp package.keywords $(CHROOT)/etc/portage/package.keywords touch stage3 kernel: preproot kernel.config chroot $(CHROOT) cp /usr/share/zoneinfo/GMT /etc/localtime chroot $(CHROOT) emerge -N sys-kernel/$(KERNEL) cp kernel.config $(CHROOT)/usr/src/linux/.config chroot $(CHROOT) gcc-config 1 chroot $(CHROOT) make $(MAKEOPTS) -C /usr/src/linux oldconfig chroot $(CHROOT) make $(MAKEOPTS) -C /usr/src/linux chroot $(CHROOT) make $(MAKEOPTS) -C /usr/src/linux modules_install chroot $(CHROOT) make $(MAKEOPTS) -C /usr/src/linux install cd $(CHROOT)/boot ; \ k=`/bin/ls -1 --sort=time vmlinuz-*|head -n 1` ; \ ln -nsf $$k vmlinuz touch kernel sysconfig: preproot fstab cp fstab $(CHROOT)/etc/fstab if [ "$(VIRTIO)" == "YES" ] ; then \ sed -i 's/sda/vda/' $(CHROOT)/etc/fstab; \ fi dd if=/dev/zero of=$(CHROOT)/.swap bs=1M count=$(SWAP_SIZE) /sbin/mkswap $(CHROOT)/.swap echo HOSTNAME=$(HOSTNAME) > $(CHROOT)/etc/conf.d/hostname sed -i 's/^#TIMEZONE=.*/TIMEZONE="$(TIMEZONE)"/' $(CHROOT)/etc/conf.d/clock echo 'config_eth0=( "dhcp" )' > $(CHROOT)/etc/conf.d/net chroot $(CHROOT) rc-update add net.eth0 default echo "127.0.0.1 $(HOSTNAME) localhost" > $(CHROOT)/etc/hosts touch sysconfig systools: sysconfig world etc-update.conf chroot $(CHROOT) emerge -n $(USEPKG) syslog-ng chroot $(CHROOT) rc-update add syslog-ng default chroot $(CHROOT) emerge -DN $(USEPKG) system chroot $(CHROOT) emerge -Nn $(USEPKG) `cat world` #chroot $(CHROOT) emerge -DuN $(USEPKG) world chroot $(CHROOT) emerge --depclean --with-bdeps=n chroot $(CHROOT) emerge -1n app-portage/gentoolkit cp etc-update.conf $(CHROOT)/etc/ chroot $(CHROOT) revdep-rebuild -i chroot $(CHROOT) etc-update chroot $(CHROOT) emerge -C gentoolkit touch systools grub: preproot grub.conf kernel chroot $(CHROOT) emerge -nN $(USEPKG) sys-boot/grub cp grub.conf $(CHROOT)/boot/grub/grub.conf if [ "$(VIRTIO)" == "YES" ] ; then \ sed -i 's/sda/vda/' $(CHROOT)/boot/grub/grub.conf ; \ fi touch grub software: systools issue critical cp issue $(CHROOT)/etc/issue chroot $(CHROOT) emerge --depclean --with-bdeps=n chroot $(CHROOT) gcc-config 1 chroot $(CHROOT) passwd -d root chroot $(CHROOT) passwd -e root if [ "$(PRUNE_CRITICAL)" = "YES" ] ; then \ chroot $(CHROOT) emerge -C `cat critical` ; \ fi touch software device-map: $(RAW_IMAGE) echo '(hd0) ' $(RAW_IMAGE) > device-map image: $(RAW_IMAGE) partitions systools grub software device-map grub.shell mkdir -p loop qemu-nbd -c /dev/nbd1 $(RAW_IMAGE) sleep 3 mkfs.ext4 /dev/nbd1p1 mount /dev/nbd1p1 loop/ mkdir -p gentoo mount -o bind $(CHROOT) gentoo rm -rf gentoo/usr/src/linux-* rm -rf gentoo/tmp/* rm -rf gentoo/var/tmp/* if [ "$(PRUNE_CRITICAL)" = "YES" ] ; then \ rm -rf gentoo/usr/lib/python*/test ; \ rm -rf gentoo/usr/share/gtk-doc ; \ rm -rf gentoo/var/db/pkg ; \ rm -rf gentoo/usr/lib/perl* ; \ fi rsync -ax gentoo/ loop/ loop/sbin/grub --device-map=device-map --no-floppy --batch < grub.shell umount loop umount gentoo sleep 3 rmdir loop rm -rf gentoo qemu-nbd -d /dev/nbd1 touch image $(QCOW_IMAGE): $(RAW_IMAGE) image qemu-img convert -f raw -O qcow2 -c $(RAW_IMAGE) $(QCOW_IMAGE) qcow: $(QCOW_IMAGE) $(VMDK_IMAGE): $(RAW_IMAGE) image qemu-img convert -f raw -O vmdk $(RAW_IMAGE) $(VMDK_IMAGE) vmdk: $(VMDK_IMAGE) .PHONY: qcow vmdk clean clean: umount $(CHROOT)/usr/portage/distfiles $(CHROOT)/usr/portage $(CHROOT)/var/tmp $(CHROOT)/dev $(CHROOT)/proc || true rm -f parted grub stage3 software preproot sysconfig systools image kernel partitions device-map rm -rf loop rm -rf gentoo rm -rf $(CHROOT) realclean: clean rm -f $(RAW_IMAGE) $(QCOW_IMAGE) $(VMDK_IMAGE)