114 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
#!/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 <<EOF
 | 
						|
#!/bin/sh
 | 
						|
 | 
						|
set -o errexit
 | 
						|
 | 
						|
[ -d /ext ] || mkdir /ext
 | 
						|
mount /dev/c0d1 /ext
 | 
						|
 | 
						|
if [ -f /ext/etc/rc ]; then
 | 
						|
    sh /ext/etc/rc
 | 
						|
fi
 | 
						|
 | 
						|
EOF
 | 
						|
}
 | 
						|
 | 
						|
function rc_ext_default_create {
 | 
						|
    cat <<EOF
 | 
						|
#!/bin/sh
 | 
						|
 | 
						|
echo "/ext/etc/rc: /ext mounted correctly."
 | 
						|
 | 
						|
EOF
 | 
						|
}
 | 
						|
 | 
						|
function disk_mount {
 | 
						|
    local mnt=$1
 | 
						|
    echo "* Mounting ${DISK} to $mnt..."
 | 
						|
    [ -d $mnt ] || sudo mkdir -p $mnt
 | 
						|
    umountdisk &> /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
 |