llvm: Add clientctl actions for external disk support.
This commit is contained in:
parent
3bfef65a9a
commit
5c95bc4d9f
1 changed files with 83 additions and 8 deletions
|
@ -1,24 +1,99 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
|
||||||
mode=$1
|
mode=$1
|
||||||
shift || mode="no_action"
|
shift || mode="no_action"
|
||||||
|
|
||||||
ROOT=../..
|
ROOT=../..
|
||||||
IMAGE=$( readlink -f $ROOT/minix_x86.img)
|
IMAGE=$( readlink -f $ROOT/minix_x86.img )
|
||||||
|
DISK=$( readlink -f $ROOT/minix_x86.disk )
|
||||||
|
RC=$( readlink -f $ROOT/minix_x86.rc )
|
||||||
|
|
||||||
|
HYPER=${HYPER:-}
|
||||||
|
DISK_SIZE=${DISK_SIZE:-1024}
|
||||||
|
DISK_MNT=${DISK_MNT:-/media/minix-disk}
|
||||||
|
|
||||||
|
function rc_create {
|
||||||
|
cat <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
|
||||||
|
mkdir /ext
|
||||||
|
mount -t ext2 /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 -t ext2 -i 4096 -b 4096 -F $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
|
case "$mode" in
|
||||||
'buildimage')
|
'buildimage')
|
||||||
(cd $ROOT && CREATE_IMAGE_ONLY=1 releasetools/x86_hdimage.sh)
|
(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')
|
'run')
|
||||||
if which kvm > /dev/null; then
|
if [ "$HYPER" == "" ]; then
|
||||||
hypervisor=kvm
|
if which kvm2 > /dev/null; then
|
||||||
|
HYPER=kvm
|
||||||
elif [ -e /dev/kvm ]; then
|
elif [ -e /dev/kvm ]; then
|
||||||
hypervisor="qemu-system-i386 --enable-kvm"
|
HYPER="qemu-system-i386 --enable-kvm"
|
||||||
else
|
else
|
||||||
hypervisor=qemu-system-i386
|
HYPER=qemu-system-i386
|
||||||
fi
|
fi
|
||||||
(cd ../../../obj.i386/destdir.i386/multiboot && $hypervisor -nographic -kernel kernel -append "console=tty00 rootdevname=c0d0p1" -initrd "mod01_ds,mod02_rs,mod03_pm,mod04_sched,mod05_vfs,mod06_memory,mod07_tty,mod08_mfs,mod09_vm,mod10_pfs,mod11_init" -hda $IMAGE)
|
fi
|
||||||
|
opts="-hda $IMAGE"
|
||||||
|
[ ! -f $DISK ] || opts="$opts -hdb $DISK"
|
||||||
|
(cd ../../../obj.i386/destdir.i386/multiboot && $HYPER -nographic -kernel kernel -append "console=tty00 rootdevname=c0d0p1" -initrd "mod01_ds,mod02_rs,mod03_pm,mod04_sched,mod05_vfs,mod06_memory,mod07_tty,mod08_mfs,mod09_vm,mod10_pfs,mod11_init" $opts)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Invalid action: $mode"
|
echo "Invalid action: $mode"
|
||||||
|
|
Loading…
Reference in a new issue