#!/bin/bash # runuml # Note that we use `"$@"' to let each command-line parameter expand to a # separate word. The quotes around `$@' are essential! # We need TEMP as the `eval set --' would nuke the return value of getopt. NOCOW="" NOJAIL="" LINUX="linux" TEMP=`getopt -o mf --long maintainance,nocow,nojail,free,skas -- "$@"` if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi # Note the quotes around `$TEMP': they are essential! eval set -- "$TEMP" while true ; do case "$1" in -m|--nocow|--maintainance) NOCOW="true"; shift ;; -f|--nojail|--free) NOJAIL="true"; shift ;; --skas) LINUX="linux-skas"; shift ;; --) shift ; break ;; *) echo "Internal error!" ; exit 1 ;; esac done UML_PORT=${1} UML_USER=${2} UML_RAM=${3} UML_BIN=/opt/uml/bin UML_DISK=/var/uml/${UML_PORT} UML_LINUX=${UML_BIN}/${LINUX} UBD0COW="${UML_DISK}/root_fs.cow," UBD1COW="" UBD2COW="${UML_DISK}/home_fs.cow," UBD3COW="" UBD4COW="" UBD0FS="${UML_DISK}/root_fs" UBD1FS="${UML_DISK}/var_fs" UBD2FS="${UML_DISK}/home_fs" UBD3FS="${UML_DISK}/tmp_fs" UBD4FS="${UML_DISK}/swap" let "TAP0=${UML_PORT}*2" let "TAP1=${TAP0}+1" ETH0="eth0=tuntap,tap${TAP0}" ETH1="eth1=tuntap,tap${TAP1}" MEM="mem=${UML_RAM}" OPTS="jail fakehd fake_ide" if [ "m$NOCOW" != "m" ] then rm ${UML_DISK}/*.cow UBD0COW="" UBD1COW="" UBD2COW="" UBD3COW="" UBD4COW="" chown ${UML_USER}.${UML_USER} ${UBD0FS} ${UBD2FS} chmod 666 ${UBD0FS} ${UBD2FS} NOJAIL="true" fi if [ "m$NOJAIL" != "m" ] then OPTS="" fi OPTS="${OPTS} con0=fd:0,fd:1 con=pts umid=${UML_USER} uml_dir=${UML_DISK}/tmp" UBD0="ubd0=${UBD0COW}${UBD0FS}" UBD1="ubd1=${UBD1COW}${UBD1FS}" UBD2="ubd2=${UBD2COW}${UBD2FS}" UBD3="ubd3=${UBD3COW}${UBD3FS}" UBD4="ubd4=${UBD4COW}${UBD4FS}" echo "cd ${UML_DISK}/tmp;${UML_LINUX} ${OPTS} ${MEM} ${UBD0} ${UBD1} ${UBD2} ${UBD3} ${UBD4} ${ETH0} ${ETH1}" screen -S uml-${UML_USER} -d -m \ su - ${UML_USER} -c \ "cd ${UML_DISK}/tmp;${UML_LINUX} ${OPTS} ${MEM} ${UBD0} ${UBD1} ${UBD2} ${UBD3} ${UBD4} ${ETH0} ${ETH1};chmod 444 ${UBD0FS} ${UBD2FS};chown root.root ${UBD0FS} ${UBD2FS}"