#!/bin/bash set -e # # bootstrap netbsd on ext2fs # # XEN -- without DOS partitions # KVM -- with DOS partitions (losetup) # # TODO # - enable bare-metal (change hypervisor var name) # function usage { echo "${0##*/} " exit 1 } [[ -z $2 ]] && usage guest=$1 vdisk=$2 [[ ! -f network.conf ]] && echo network.conf missing && exit 1 source network.conf [[ -z $kernel ]] && echo \$kernel not defined -- tune network.conf first && exit 1 [[ -z $sets ]] && echo \$sets not defined -- tune network.conf first && exit 1 [[ ! -f $kernel ]] && echo cannot find $kernel && exit 1 [[ ! -f $sets/base.tar.xz ]] && echo cannot find $sets/base.tar.xz not found && exit 1 if [[ -x `which xl 2>/dev/null` ]]; then [[ -n `xl li | grep $guest` ]] && echo $guest is already running && exti 1 fi [[ -n `mount | grep lala` ]] && echo lala/ already mounted && exit 1 # checking against vdisk allows to have other loops alive [[ -n `losetup --all | grep $vdisk` ]] && echo loop device for $vdisk already exists && exit 1 echo echo VDISK SETUP echo if [[ $hypervisor = kvm ]]; then [[ ! `which sfdisk` ]] && echo install sfdisk first && exit 1 [[ ! `which partprobe` ]] && echo install partprobe first && exit 1 # backup vdisk filename for kvm guest xml config vdisk_file=$vdisk # e.g. /dev/loop0 echo -n kvm -- prepare looped vdisk ... vdisk_loop=`losetup --find --partscan --show $vdisk` && echo $vdisk_loop # e.g. /dev/loop0p1 echo -n kvm -- vdisk partition ... vdisk_partition=${vdisk_loop}p1 && echo $vdisk_partition echo -n kvm -- define overall space available ... total=`fdisk -l $disk | head -1 | awk '{print $7}'` [[ -z $total ]] && echo error: could not define total && exit 1 echo $total echo -n kvm -- prepare DOS partition table ... cat > $guest.sfdisk < MAKEDEV.linux #diff grep exists non-zero #diff -bu MAKEDEV MAKEDEV.linux #grep ' -F netbsd' MAKEDEV.linux #grep ' -R"' MAKEDEV.linux #grep ' -r"' MAKEDEV.linux #grep ' -g ' MAKEDEV.linux chmod +x MAKEDEV.linux ./MAKEDEV.linux all 2>/dev/null ./MAKEDEV.linux opty && echo done cd $OWD/ unset OWD # no executable bit required on netbsd mv lala/etc/rc.local lala/etc/rc.local.dist cat > lala/etc/rc.local < /.makedev_done && echo done echo -n MAKEDEV opty ... ./MAKEDEV opty && echo done cd / echo OWNERSHIP FIXED E.G. ls -lF /dev/cgd0 ls -lF /dev/altq/altq fi EOF mv -i lala/etc/passwd lala/etc/passwd.dist sed '1s@/bin/sh@/bin/ksh@' lala/etc/passwd.dist > lala/etc/passwd #diff -u lala/etc/passwd.dist lala/etc/passwd mv -i lala/etc/master.passwd lala/etc/master.passwd.dist sed '1s@/bin/sh@/bin/ksh@' lala/etc/master.passwd.dist > lala/etc/master.passwd #diff -u lala/etc/master.passwd.dist lala/etc/master.passwd if [[ $hypervisor = xen ]]; then echo -n xen -- writing fstab ... echo /dev/xbd0a / ffs rw 0 1 > lala/etc/fstab && echo done elif [[ $hypervisor = kvm ]]; then echo -n kvm -- writing fstab ... echo /dev/ld0e / ext2fs rw 0 1 > lala/etc/fstab && echo done else echo warning: cannot setup fstab properly without hypervisor variable defined fi echo -n adding more fstab entries ... cat >> lala/etc/fstab < lala/etc/rc.conf <> lala/etc/rc.conf && echo done || echo unused echo echo NETWORK SETUP echo echo -n hostname ... echo $host > lala/etc/myname && echo done echo -n $netif ... echo inet $cidr up > lala/etc/ifconfig.$netif && echo done echo -n hosts ... cat > lala/etc/hosts < lala/etc/mygate && echo done echo -n hosts/gw ... cat >> lala/etc/hosts <<-EOF && echo done $gw gw EOF else echo no gateway fi rm -f lala/etc/resolv.conf for ip in $dns; do echo -n nameserver $ip ... cat >> lala/etc/resolv.conf < lala/root/.ssh/authorized_keys < lala/etc/ssh/sshd_config cat >> lala/etc/ssh/sshd_config <> lala/etc/rc.conf && echo done echo echo GUEST SETUP echo if [[ $hypervisor = xen ]]; then echo xen -- TODO enable TMEM? fi if [[ $hypervisor = kvm ]]; then [[ -f lala/netbsd ]] && error: found lala/netbsd -- why is there a kernel in there already? && exit 1 echo -n kvm -- deploy kernel $kernel ... cp $kernel lala/netbsd && echo done echo kvm -- write grub2 boot-code to $vdisk_file grub-install --version grub-install --target=i386-pc --boot-directory=lala/boot $vdisk_file echo -n kvm -- write grub2.cfg ... cat > lala/boot/grub/grub.cfg < $guest < $guest.xml < $guest 1 3 hvm /usr/bin/qemu-system-x86_64 EOF cat <