#!/bin/bash set -o errexit mode=$1 shift || mode="no_action" ROOT=../.. MYPWD=$( pwd ) IMAGE=$( readlink -f $ROOT/minix_x86.img ) DISK=$( readlink -f $ROOT/minix_x86.disk ) RC=$( readlink -f $ROOT/minix_x86.rc ) MKFS=$( readlink -f $ROOT/../obj.i386/tooldir*/bin/nbmkfs.mfs ) HYPER=${HYPER:-} DISK_SIZE=${DISK_SIZE:-1024} DISK_MNT=${DISK_MNT:-/media/minix-disk} SERIALOUT=${SERIALOUT:-0} function rc_create { cat < /dev/null || true sudo mount -o loop $DISK $mnt } function disk_umount { echo "* Unmounting ${DISK}..." sudo umount $DISK } function disk_build { local size=$1 local tmp_mnt=$( mktemp -d /tmp/clientctl-XXXXX ) echo "* Building ${size} MB disk image..." dd if=/dev/zero of=$DISK bs=1M count=$size $MKFS $DISK echo "* Setting up /ext/etc/rc file executed at startup..." rc_create > $RC disk_mount $tmp_mnt [ -d $tmp_mnt/etc ] || mkdir -p $tmp_mnt/etc rc_ext_default_create > $tmp_mnt/etc/rc disk_umount rm -rf $tmp_mnt } case "$mode" in 'buildimage') (cd $ROOT && CREATE_IMAGE_ONLY=1 releasetools/x86_hdimage.sh) ;; 'builddisk') rm -f $DISK disk_build $DISK_SIZE ;; 'mountdisk') disk_mount $DISK_MNT ;; 'umountdisk') disk_umount ;; 'run') if [ "$HYPER" == "" ]; then if which kvm2 > /dev/null; then HYPER=kvm elif [ -e /dev/kvm ]; then HYPER="qemu-system-i386 --enable-kvm" else HYPER=qemu-system-i386 fi fi opts="-hda $IMAGE" append="rootdevname=c0d0p1" [ ! -f $DISK ] || opts="$opts -hdb $DISK" if [ $SERIALOUT -eq 1 ]; then opts="$opts -curses -serial file:$MYPWD/serial.out" append="$append cttyline=0" else opts="$opts -nographic" append="$append console=tty00" fi (cd ../../../obj.i386/destdir.i386/boot/minix/.temp && $HYPER -kernel kernel -append "$append" $opts -initrd "mod01_ds,mod02_rs,mod03_pm,mod04_sched,mod05_vfs,mod06_memory,mod07_tty,mod08_mfs,mod09_vm,mod10_pfs,mod11_init") ;; *) echo "Invalid action: $mode" exit 1 ;; esac