master
parent
b0ca9e8fa5
commit
e9dcf7e9c5
@ -1,993 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
set -m # Jobs control
|
|
||||||
|
|
||||||
# Script pour l'exécution d'un système virtuel
|
|
||||||
# --------------------------------------------
|
|
||||||
|
|
||||||
NICE=10
|
|
||||||
EXPR=""
|
|
||||||
READ_ON_ERROR=0
|
|
||||||
GUI=0;
|
|
||||||
VDN_TERM=0
|
|
||||||
BG=0
|
|
||||||
|
|
||||||
EXCLUDE_SERVICES=""
|
|
||||||
|
|
||||||
set -a
|
|
||||||
|
|
||||||
# Dans le cas où une redirection (cf. REDIRS ci-dessus) échoue,
|
|
||||||
# attendre que le port se libère (0) ou chercher le premier port libre
|
|
||||||
# suivant (1).
|
|
||||||
|
|
||||||
PORT_INC_ALLOWED=1
|
|
||||||
|
|
||||||
set +a
|
|
||||||
|
|
||||||
# début des fonctions
|
|
||||||
|
|
||||||
synopsis() {
|
|
||||||
cat << EOF
|
|
||||||
Usage : `basename $0` [-h] [-f] [-g] [-e] [-t] [-v expr] system
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
help() {
|
|
||||||
cat << EOF
|
|
||||||
|
|
||||||
`basename $0` démarre un système virtuel.
|
|
||||||
|
|
||||||
`synopsis`
|
|
||||||
|
|
||||||
Un nom de système correspond au nom d'un répertoire situé dans le
|
|
||||||
sous répertoire "systems" de Vdn.
|
|
||||||
|
|
||||||
-h : affiche cette aide
|
|
||||||
-b : execute le système en arrière plan.
|
|
||||||
-d : mode DEBUG.
|
|
||||||
-g : si l'interface graphique est démarrée, lui délègue le démarrage.
|
|
||||||
-t : le terminal courant est utilisé en console.
|
|
||||||
-e : Attendre "Entrée" si erreur.
|
|
||||||
-v exp : évalue une expression. Pratique pour la surcharge de variables.
|
|
||||||
exemple : -v "MEMORY=32; SWAP_SIZE=32"
|
|
||||||
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
synopsis
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
args() {
|
|
||||||
local opt
|
|
||||||
while getopts "hebdgtv:" opt; do
|
|
||||||
case $opt in
|
|
||||||
h) help; exit 0;;
|
|
||||||
b) BG=1;;
|
|
||||||
d) export VDN_DEBUG=1;;
|
|
||||||
e) READ_ON_ERROR=1;;
|
|
||||||
g) GUI=1;;
|
|
||||||
t) VDN_TERM=1;;
|
|
||||||
v) export EXPR="$OPTARG";;
|
|
||||||
?) usage;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
shift $(($OPTIND - 1))
|
|
||||||
[ $# -ne 1 ] && usage
|
|
||||||
|
|
||||||
GUEST_NAME="$1"
|
|
||||||
if echo $GUEST_NAME | grep -q '/'; then
|
|
||||||
error "$GUEST_NAME est un nom de système invalide"
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$GUEST_NAME" in
|
|
||||||
sae103)
|
|
||||||
|
|
||||||
VDN_TERM=1
|
|
||||||
|
|
||||||
net=$(vdn-get-network)
|
|
||||||
if [ "$net" != "/home/ia/vdn/sae103" ]; then
|
|
||||||
vdn-set-network-dir /home/ia/vdn/sae103
|
|
||||||
export NETWORK_DIR=/home/ia/vdn/sae103
|
|
||||||
SAVE_DIR="$SAVE_PATH/$(basename $NETWORK_DIR)"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
testIfAlreadyStarted() {
|
|
||||||
set +e
|
|
||||||
vdn-alive $GUEST_NAME
|
|
||||||
r=$?
|
|
||||||
|
|
||||||
[ $r -eq 0 ] && error "Le système virtuel $GUEST_NAME est déjà lancé"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
testVariables() {
|
|
||||||
[ -z "$AUFS_SIZE" ] && error "AUFS_SIZE not set"
|
|
||||||
}
|
|
||||||
|
|
||||||
createConfigFile() {
|
|
||||||
local dir=$TMPDIR/vdn-$GUEST_NAME-$GUEST_OWNER-config/etc/vdn
|
|
||||||
set +u
|
|
||||||
[ -z "$http_proxy" ] && export http_proxy=""
|
|
||||||
[ -z "$https_proxy" ] && export https_proxy=""
|
|
||||||
[ -z "$POST_BOOT" ] && POST_BOOT=""
|
|
||||||
set -u
|
|
||||||
|
|
||||||
NB_ETH=$(echo $NETWORKS | wc -w)
|
|
||||||
|
|
||||||
|
|
||||||
echo -n "Compute network vars... "
|
|
||||||
#PUBLICS_IP=$(for i in $(vdn-list); do ip=$(vdn-infos $i | grep PUB | sed -re 's/^.*"([0-9.]+)" .*$/\1/'); echo -n "$i:$ip "; done)
|
|
||||||
PUBLICS_IP=$(for i in $(vdn-list); do ip=$(vdn-query PUBLIC_IP $i); echo -n "$i:$ip "; done)
|
|
||||||
|
|
||||||
PUBLIC_IP=$(vdn-query PUBLIC_IP 0 $GUEST_NAME.$NETWORK_NAME)
|
|
||||||
|
|
||||||
echo "done"
|
|
||||||
|
|
||||||
echo >&2
|
|
||||||
echo "NETWORKS : $NETWORKS" >&2
|
|
||||||
echo "NB_ETH : $NB_ETH" >&2
|
|
||||||
echo "PUBLICS_IP: $PUBLICS_IP" >&2
|
|
||||||
|
|
||||||
cat <<EOF > $dir/config
|
|
||||||
|
|
||||||
PUBLICS_IP="$PUBLICS_IP"
|
|
||||||
HOSTS="$HOSTS"
|
|
||||||
NETWORKS="$NETWORKS"
|
|
||||||
NETWORK_DIR="$NETWORK_DIR"
|
|
||||||
|
|
||||||
VDN_RESOLV="$VDN_RESOLV"
|
|
||||||
|
|
||||||
VDN_RESOURCES_ALLOCATOR="$VDN_RESOURCES_ALLOCATOR"
|
|
||||||
|
|
||||||
|
|
||||||
VDN_PATH="$VDN_PATH"
|
|
||||||
GUEST_SYS="$GUEST_SYS"
|
|
||||||
MOUNT_ROOT_PATH="$MOUNT_ROOT_PATH"
|
|
||||||
EMULATOR="$EMULATOR"
|
|
||||||
|
|
||||||
MODE="$MODE"
|
|
||||||
|
|
||||||
HDA="$HDA"
|
|
||||||
HDB="$HDB"
|
|
||||||
HDB_PART_FORMAT="$HDB_PART_FORMAT"
|
|
||||||
HDB_DIRS="$HDB_DIRS"
|
|
||||||
|
|
||||||
GUEST_PATH="$GUEST_PATH"
|
|
||||||
GUEST_NAME="$GUEST_NAME"
|
|
||||||
GUEST_OWNER="$GUEST_OWNER"
|
|
||||||
|
|
||||||
NB_ETH="$NB_ETH"
|
|
||||||
NB_DISK="$NB_DISK"
|
|
||||||
PUBLIC_IP="$PUBLIC_IP"
|
|
||||||
|
|
||||||
ON_BOOT="$ON_BOOT" # deprecié
|
|
||||||
POST_BOOT="$POST_BOOT"
|
|
||||||
SET_HOSTNAME="$SET_HOSTNAME"
|
|
||||||
|
|
||||||
EXTRA_ETH="$EXTRA_ETH"
|
|
||||||
EXTRA_ETH_DEFAULT_ROUTE="$EXTRA_ETH_DEFAULT_ROUTE"
|
|
||||||
EXTRA_ETH_MASQUERADING="$EXTRA_ETH_MASQUERADING"
|
|
||||||
SET_PROXY="$SET_PROXY"
|
|
||||||
|
|
||||||
AUFS_FILE="$AUFS_FILE"
|
|
||||||
AUFS_SIZE="$AUFS_SIZE"
|
|
||||||
|
|
||||||
SAVE_EXCLUDE="$SAVE_EXCLUDE"
|
|
||||||
CLEAR_LOG_WHEN_SAVE="$CLEAR_LOG_WHEN_SAVE"
|
|
||||||
DELETE_LOG_GZ="$DELETE_LOG_GZ"
|
|
||||||
|
|
||||||
SWAP_FILE="$SWAP_FILE"
|
|
||||||
SWAP_SIZE="$SWAP_SIZE"
|
|
||||||
|
|
||||||
SSH_IDENTITY="$SSH_IDENTITY"
|
|
||||||
|
|
||||||
EXTRA_SERVICES="$EXTRA_SERVICES"
|
|
||||||
EXCLUDE_SERVICES="$EXCLUDE_SERVICES"
|
|
||||||
|
|
||||||
RUNLEVEL="$RUNLEVEL"
|
|
||||||
|
|
||||||
DATE=`date +%Y.%m.%d-%T`
|
|
||||||
|
|
||||||
if [ "\$SET_PROXY" = 1 ]; then
|
|
||||||
|
|
||||||
HTTP_PROXY="$http_proxy"
|
|
||||||
HTTPS_PROXY="$https_proxy"
|
|
||||||
|
|
||||||
echo "export http_proxy=\"\$HTTP_PROXY\"" >> /etc/bash.bashrc
|
|
||||||
echo "export https_proxy=\"\$HTTPS_PROXY\"" >> /etc/bash.bashrc
|
|
||||||
fi
|
|
||||||
|
|
||||||
DEFAULT_LANG="$DEFAULT_LANG"
|
|
||||||
|
|
||||||
TIMEZONE="$TIMEZONE"
|
|
||||||
|
|
||||||
XKBMODEL="$XKBMODEL"
|
|
||||||
XKBLAYOUT="$XKBLAYOUT"
|
|
||||||
XKBVARIANT="$XKBVARIANT"
|
|
||||||
XKBOPTIONS="$XKBOPTIONS"
|
|
||||||
BACKSPACE="$BACKSPACE"
|
|
||||||
|
|
||||||
VDN_DEBUG="$VDN_DEBUG"
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
waitEndOfRedirsOld() {
|
|
||||||
local n=0
|
|
||||||
#while netstat -A inet -a -n | grep TIME_WAIT | \
|
|
||||||
while ss -a -f inet -n -i state time-wait | \
|
|
||||||
grep -q "^$1[[:space:]].*:$2[[:space:]]"; do
|
|
||||||
if [ $n = 0 ]; then
|
|
||||||
echo "Attente de la libération du port $2 (1 minute environ...)">&2
|
|
||||||
fi
|
|
||||||
n=1
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Create partition for union
|
|
||||||
|
|
||||||
createUnionPart() {
|
|
||||||
echo "Create overlayfs ($AUFS_SIZE Mo). "
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if [ -n "$AUFS_FILE" ]; then
|
|
||||||
|
|
||||||
[ ! -d $(dirname $AUFS_FILE) ] && mkdir -p $(dirname $AUFS_FILE)
|
|
||||||
|
|
||||||
[ -e $AUFS_FILE ] && rm $AUFS_FILE
|
|
||||||
dd of=$AUFS_FILE bs=1k seek=$(($AUFS_SIZE*1024)) count=0 &> /dev/null
|
|
||||||
/sbin/mke2fs -q -F -t ext4 $AUFS_FILE
|
|
||||||
fi
|
|
||||||
|
|
||||||
#rm -f $OUT_FILE
|
|
||||||
#dd of=$OUT_FILE bs=1k seek=$(($AUFS_SIZE*1024)) count=0
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
prepareSwap() {
|
|
||||||
if [ -n "$SWAP_FILE" ]; then
|
|
||||||
[ -e $SWAP_FILE ] && rm $SWAP_FILE
|
|
||||||
if [ -z "$SWAP_SIZE" ]; then
|
|
||||||
echo -e "SWAP_SIZE not set !" >&2
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
echo "Create swap ($SWAP_SIZE Mo). "
|
|
||||||
dd of=$SWAP_FILE bs=1k seek=$(($SWAP_SIZE*1024)) count=0 &> /dev/null
|
|
||||||
chmod 600 $SWAP_FILE
|
|
||||||
/sbin/mkswap $SWAP_FILE > /dev/null
|
|
||||||
#echo " done."
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
tgzPrepare() {
|
|
||||||
createUnionPart
|
|
||||||
}
|
|
||||||
|
|
||||||
injectScriptsInConfigDir() {
|
|
||||||
local srcDir=$1
|
|
||||||
local dstDir=$2
|
|
||||||
|
|
||||||
if [ -d $srcDir ]; then
|
|
||||||
local list=$(cd $srcDir; ls | grep -v prepare.sh*)
|
|
||||||
if [ -n "$list" ]; then
|
|
||||||
( cd $srcDir; cp -a $list $dir/etc/vdn )
|
|
||||||
if [ -e $dir/etc/vdn/rc.local ]; then
|
|
||||||
mv $dir/etc/vdn/rc.local $dir/etc
|
|
||||||
chmod 755 $dir/etc/rc.local
|
|
||||||
#echo "SET FILE : $dir/etc/rc.local"
|
|
||||||
#echo "=== EXTRA === : "
|
|
||||||
#cat $dir/etc/rc.local | grep EXTRA
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
createConfigDir() {
|
|
||||||
local dir=$TMPDIR/vdn-$GUEST_NAME-$GUEST_OWNER-config
|
|
||||||
local tgz="$dir.tgz"
|
|
||||||
|
|
||||||
|
|
||||||
#echo "Create config dir..."
|
|
||||||
|
|
||||||
rm -Rf $dir
|
|
||||||
|
|
||||||
mkdir -m 700 $dir
|
|
||||||
|
|
||||||
mkdir -p $dir/etc/vdn
|
|
||||||
|
|
||||||
# Copie des fichiers d'initialisation (/etc/rc.local et autres
|
|
||||||
# du répertoire direct
|
|
||||||
|
|
||||||
injectScriptsInConfigDir $VDN_PATH/distribs/guests/direct/$GUEST_SYS $dir
|
|
||||||
|
|
||||||
# idem mais spécialise les fichiers (COW, OVERLAY, TGZ)
|
|
||||||
|
|
||||||
if [ $MODE != direct ]; then
|
|
||||||
injectScriptsInConfigDir $VDN_PATH/distribs/guests/$MODE/$GUEST_SYS $dir
|
|
||||||
fi
|
|
||||||
|
|
||||||
createConfigFile
|
|
||||||
|
|
||||||
local cp=0
|
|
||||||
|
|
||||||
for i in $SSH_IDENTITY; do
|
|
||||||
[ ! -d $dir/etc/vdn/.ssh ] && {
|
|
||||||
mkdir -p $dir/etc/vdn/.ssh
|
|
||||||
chmod 700 $dir/etc/vdn/.ssh
|
|
||||||
}
|
|
||||||
if [ -e $i ]; then
|
|
||||||
cp $i $dir/etc/vdn/.ssh/
|
|
||||||
cp=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
[ $cp = 0 ] && error "Aucune clé SSH !"
|
|
||||||
|
|
||||||
[ -e $NETWORK_DIR/authorized-root.txt ] && \
|
|
||||||
cp $NETWORK_DIR/authorized-root.txt $dir/etc/vdn
|
|
||||||
|
|
||||||
# Add host files
|
|
||||||
|
|
||||||
for i in $HOST_FILES; do
|
|
||||||
[ ! -d $dir/etc/vdn/host/$(dirname $i) ] && mkdir -p $dir/etc/vdn/host/$(dirname $i) || :
|
|
||||||
cp -a $i $dir/etc/vdn/host/$(dirname $i)
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -d $NETWORK_DIR/all ]; then
|
|
||||||
[ ! -d $dir/etc/vdn/all ] && mkdir -p $dir/etc/vdn/all
|
|
||||||
( cd $NETWORK_DIR/all && tar czf - . ) | ( cd $dir/etc/vdn/all && tar -xpzf -)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d $NETWORK_DIR/$GUEST_NAME ]; then
|
|
||||||
[ ! -d $dir/etc/vdn/guest ] && mkdir -p $dir/etc/vdn/guest
|
|
||||||
( cd $NETWORK_DIR/$GUEST_NAME && tar czf - . ) | ( cd $dir/etc/vdn/guest && tar -xpzf - )
|
|
||||||
fi
|
|
||||||
|
|
||||||
# note used
|
|
||||||
#cp /etc/hosts $dir/etc/vdn
|
|
||||||
#cp /etc/resolv.conf $dir/etc/vdn
|
|
||||||
|
|
||||||
if [ -d $VDN_PATH/scripts ]; then
|
|
||||||
cp -a $VDN_PATH/scripts/* $dir/etc/vdn
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add allocator
|
|
||||||
[ -d $dir/etc/vdn/allocators ] && rm -Rf $dir/etc/vdn/allocators
|
|
||||||
cp -a $VDN_PATH/allocators $dir/etc/vdn
|
|
||||||
|
|
||||||
# Add vdn resolv
|
|
||||||
cp $VDN_PATH/tools/libnss_vdn.so $dir/etc/vdn
|
|
||||||
|
|
||||||
# Build disk
|
|
||||||
|
|
||||||
( cd $dir; tar -czf $tgz .; chmod 600 $tgz)
|
|
||||||
#echo -n "Create config disk... "
|
|
||||||
dd if=/dev/zero bs=512 count=1 >> $tgz 2> /dev/null
|
|
||||||
#echo "done."
|
|
||||||
|
|
||||||
#echo "done."
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
### KVM (Kernel Virtual Machine)
|
|
||||||
|
|
||||||
|
|
||||||
kvm_query_networks() {
|
|
||||||
|
|
||||||
. $VDN_PATH/allocators/$VDN_RESOURCES_ALLOCATOR
|
|
||||||
|
|
||||||
|
|
||||||
# 1. redirections
|
|
||||||
|
|
||||||
#if [ $EXTRA_ETH = 1 ]; then
|
|
||||||
|
|
||||||
rm -f $TMPDIR/vdn-$GUEST_NAME-$GUEST_OWNER-redirs
|
|
||||||
REDIRS=$(echo "$REDIRS" | sed -re 's/[[:space:]]+/ /g')
|
|
||||||
REDIRS=$(echo "$REDIRS" | sed -re 's/^[[:space:]]+//g')
|
|
||||||
REDIRS=$(echo "$REDIRS" | sed -re 's/[[:space:]]+$//g')
|
|
||||||
REDIRS=$(echo "$REDIRS" | sed -re 's/[[:space:]]/\n/g')
|
|
||||||
|
|
||||||
|
|
||||||
#echo "REDIRS:$REDIRS" >&2
|
|
||||||
|
|
||||||
redirs=`
|
|
||||||
redirsOpt=""
|
|
||||||
[ -n "$REDIRS" ] || error "REDIRS empty !"
|
|
||||||
echo "$REDIRS" | (
|
|
||||||
export IFS=":"
|
|
||||||
i=0
|
|
||||||
while read proto dstPort com; do
|
|
||||||
[ -z "$dstPort" ] && continue
|
|
||||||
|
|
||||||
|
|
||||||
#echo "dstPort:$dstPort" >&2
|
|
||||||
#srcPort=$(vdn_redir $dstPort)
|
|
||||||
[ -z "$proto" ] && continue
|
|
||||||
|
|
||||||
#set -x
|
|
||||||
|
|
||||||
srcPort=$(computeRedir $GUEST_NAME $proto $dstPort)
|
|
||||||
|
|
||||||
echo "port:$srcPort" >&2
|
|
||||||
#set +x
|
|
||||||
|
|
||||||
#if [ "$PORT_INC_ALLOWED" = 1 ]; then
|
|
||||||
# srcPort=$(findUnusedPort $proto $srcPort $dstPort)
|
|
||||||
#fi
|
|
||||||
#waitEndOfRedirs $proto $srcPort
|
|
||||||
redirsOpt="$redirsOpt -redir $proto:$srcPort::$dstPort"
|
|
||||||
|
|
||||||
echo "Add to : $TMPDIR/vdn-$GUEST_NAME-$GUEST_OWNER-redirs" >&2
|
|
||||||
echo "$proto:$srcPort:$dstPort:$com">>$TMPDIR/vdn-$GUEST_NAME-$GUEST_OWNER-redirs
|
|
||||||
done
|
|
||||||
echo "$redirsOpt"
|
|
||||||
)
|
|
||||||
`
|
|
||||||
#fi
|
|
||||||
|
|
||||||
# 2. cartes Ethernet
|
|
||||||
|
|
||||||
set - $NETWORKS
|
|
||||||
|
|
||||||
#echo -n "-net user "
|
|
||||||
|
|
||||||
#for i in `seq 0 $(($NB_ETH-1))`; do
|
|
||||||
|
|
||||||
ETH=0
|
|
||||||
|
|
||||||
for i; do
|
|
||||||
#set -x
|
|
||||||
net="$i"
|
|
||||||
|
|
||||||
comment=$(echo $net | cut -d '#' -f 2)
|
|
||||||
net=$(echo $net | cut -d '#' -f 1)
|
|
||||||
[ "$net" = "$comment" ] && comment=""
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[ "$net" = "NET_G" ] && net="NET_0"
|
|
||||||
|
|
||||||
[ "$net" = "$comment" ] && comment=""
|
|
||||||
|
|
||||||
netNum=$(echo $net | sed -re 's/^ *NET_([0-9]+).*$/\1/')
|
|
||||||
|
|
||||||
mac=$(computeMacAddr $GUEST_NAME $ETH)
|
|
||||||
|
|
||||||
if [ "$net" = "none" ]; then
|
|
||||||
local qemuVersion=$(qemu-system-x86_64 --version | grep version | sed -re 's/^.*version ([0-9.]+).*$/\1/')
|
|
||||||
if [ "$qemuVersion" \< "3.0.0" ]; then
|
|
||||||
echo -n "-device virtio-net-pci,mac=$mac "
|
|
||||||
else
|
|
||||||
echo -n "-device virtio-net-pci,mac=$mac -nic none "
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [ $netNum = 0 ]; then
|
|
||||||
group=$MCAST_COMMON_ADDR
|
|
||||||
port=$MCAST_BASE_PORT
|
|
||||||
else
|
|
||||||
mcast=$(computeEthLink $GUEST_NAME $netNum)
|
|
||||||
echo "inetNum:$netNum mcast:$mcast" >&2
|
|
||||||
group=`echo $mcast | cut -d : -f 1`
|
|
||||||
port=`echo $mcast | cut -d : -f 2`
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -n "-device virtio-net-pci,netdev=n$(($netNum)),mac=$mac -netdev socket,id=n$(($netNum)),mcast=$group:$port "
|
|
||||||
fi
|
|
||||||
|
|
||||||
ETH=$(($ETH+1))
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
[ $EXTRA_ETH = 1 ] && {
|
|
||||||
mac=$(computeMacAddr $GUEST_NAME $NB_ETH)
|
|
||||||
redirs=$(echo $redirs | sed -re 's/^ *//')
|
|
||||||
|
|
||||||
echo -n "-device virtio-net-pci,netdev=e0,mac=$mac -netdev user,id=e0$redirs"
|
|
||||||
#echo -n "-net nic,vlan=0,model=$NET_MODEL -net user,vlan=0$redirs"
|
|
||||||
|
|
||||||
} || :
|
|
||||||
}
|
|
||||||
|
|
||||||
kvm_graphic() {
|
|
||||||
GRAPHICAL_OPTS=""
|
|
||||||
|
|
||||||
if [ $KVM_VIEWER = "vnc" ]; then
|
|
||||||
set +e
|
|
||||||
ps auwx | grep -v grep |grep -q 'ruby.*vdn-gui'
|
|
||||||
GUI_RUNNING=$?
|
|
||||||
set -e
|
|
||||||
if [ $KVM_VIEWER_AUTOSTART = 1 ]; then
|
|
||||||
if [ $KVM_VIEWER_EMBEDDED = 1 -a $GUI_RUNNING = 0 ]; then
|
|
||||||
( sleep 3; sendToGui "vnc-viewer $GUEST_NAME" ) &
|
|
||||||
else
|
|
||||||
(sleep 3; vdn-vnc-viewer $GUEST_NAME ) &
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
GRAPHICAL_OPTS="-serial mon:stdio -monitor null -vnc unix:$TMPDIR/vdn-vnc-$USER-$GUEST_NAME-socket -spice unix,disable-ticketing,addr=$TMPDIR/vdn-spice-$USER-$GUEST_NAME-socket"
|
|
||||||
#GRAPHICAL_OPTS="$GRAPHICAL_OPTS -device virtio-serial -chardev spicevmc,id=vdagent,debug=0,name=vdagent -device virtserialport,chardev=vdagent,name=com.redhat.spice.0"
|
|
||||||
|
|
||||||
elif [ $KVM_VIEWER = "spice" ]; then
|
|
||||||
set +e
|
|
||||||
ps auwx | grep -v grep |grep -q 'ruby.*vdn-gui'
|
|
||||||
GUI_RUNNING=$?
|
|
||||||
set -e
|
|
||||||
if [ $KVM_VIEWER_AUTOSTART = 1 ]; then
|
|
||||||
#if [ $KVM_VIEWER_EMBEDDED = 1 -a $GUI_RUNNING = 0 ]; then
|
|
||||||
# ( sleep 3; sendToGui "spice-viewer $GUEST_NAME" ) &
|
|
||||||
#else
|
|
||||||
(sleep 1; vdn-spice-viewer -b $GUEST_NAME ) &
|
|
||||||
#fi
|
|
||||||
fi
|
|
||||||
GRAPHICAL_OPTS="-serial mon:stdio -monitor null -vnc unix:$TMPDIR/vdn-vnc-$USER-$GUEST_NAME-socket -spice unix,disable-ticketing,addr=$TMPDIR/vdn-spice-$USER-$GUEST_NAME-socket"
|
|
||||||
GRAPHICAL_OPTS="$GRAPHICAL_OPTS -device virtio-serial -chardev spicevmc,id=vdagent,debug=0,name=vdagent -device virtserialport,chardev=vdagent,name=com.redhat.spice.0"
|
|
||||||
#GRAPHICAL_OPTS="$GRAPHICAL_OPTS -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel1,id=channel1,name=org.spice-space.stream.0 -chardev spiceport,name=org.spice-space.stream.0,id=charchannel1"
|
|
||||||
|
|
||||||
elif [ $KVM_VIEWER = "sdl" ]; then
|
|
||||||
GRAPHICAL_OPTS="-serial mon:stdio -monitor null"
|
|
||||||
|
|
||||||
else
|
|
||||||
GRAPHICAL_OPTS="-serial mon:stdio -monitor null -nographic"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
startKvmTgz() {
|
|
||||||
|
|
||||||
# Config
|
|
||||||
|
|
||||||
local r=0
|
|
||||||
|
|
||||||
[ ! -d $(dirname $SAVE_FILE) ] && mkdir -p $(dirname $SAVE_FILE)
|
|
||||||
|
|
||||||
case "$MODE" in
|
|
||||||
tgz)
|
|
||||||
# Sauvegarde
|
|
||||||
[ ! -e $SAVE_FILE ] && {
|
|
||||||
#echo -n "Create minimal save file. "
|
|
||||||
dd if=/dev/zero of=$SAVE_FILE count=1 bs=1 &> /dev/null
|
|
||||||
#echo "done."
|
|
||||||
}
|
|
||||||
DISK_OPTS="$DISK_OPTS -drive file=$SAVE_FILE,if=$KVM_DISK_MODEL,media=disk,format=raw"
|
|
||||||
|
|
||||||
# aufs part
|
|
||||||
DISK_OPTS="$DISK_OPTS -drive file=$AUFS_FILE,if=$KVM_DISK_MODEL,media=disk,format=raw"
|
|
||||||
|
|
||||||
# swap
|
|
||||||
[ -n "$SWAP_FILE" ] &&
|
|
||||||
DISK_OPTS="$DISK_OPTS -drive file=$SWAP_FILE,if=$KVM_DISK_MODEL,media=disk,format=raw"
|
|
||||||
|
|
||||||
#DISK_OPTS="$DISK_OPTS -drive file=$OUT_FILE,if=$KVM_DISK_MODEL,media=disk,format=raw"
|
|
||||||
;;
|
|
||||||
tgz2)
|
|
||||||
# Sauvegarde
|
|
||||||
[ ! -e $SAVE_FILE ] && {
|
|
||||||
#echo -n "Create minimal save file. "
|
|
||||||
dd if=/dev/zero of=$SAVE_FILE count=1 bs=1 &> /dev/null
|
|
||||||
#echo "done."
|
|
||||||
}
|
|
||||||
DISK_OPTS="$DISK_OPTS -drive file=$SAVE_FILE,if=$KVM_DISK_MODEL,media=disk,format=raw"
|
|
||||||
|
|
||||||
# aufs part
|
|
||||||
DISK_OPTS="$DISK_OPTS -drive file=$AUFS_FILE,if=$KVM_DISK_MODEL,media=disk,format=raw"
|
|
||||||
|
|
||||||
# swap
|
|
||||||
[ -n "$SWAP_FILE" ] &&
|
|
||||||
DISK_OPTS="$DISK_OPTS -drive file=$SWAP_FILE,if=$KVM_DISK_MODEL,media=disk,format=raw"
|
|
||||||
|
|
||||||
|
|
||||||
;;
|
|
||||||
overlay)
|
|
||||||
# Sauvegarde
|
|
||||||
[ ! -e $SAVE_FILE ] && {
|
|
||||||
#echo -n "Create minimal save file. "
|
|
||||||
dd of=$SAVE_FILE bs=1k seek=$(($AUFS_SIZE*1024)) count=0 &> /dev/null
|
|
||||||
/sbin/mke2fs -q -F -t ext4 $SAVE_FILE
|
|
||||||
#echo "done."
|
|
||||||
}
|
|
||||||
DISK_OPTS="$DISK_OPTS -drive file=$SAVE_FILE,if=$KVM_DISK_MODEL,media=disk,format=raw"
|
|
||||||
|
|
||||||
# aufs part
|
|
||||||
# none, is $SAVE_FILE
|
|
||||||
|
|
||||||
# swap
|
|
||||||
|
|
||||||
[ -n "$SWAP_FILE" ] &&
|
|
||||||
DISK_OPTS="$DISK_OPTS -drive file=$SWAP_FILE,if=$KVM_DISK_MODEL,media=disk,format=raw"
|
|
||||||
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
KVM_NETWORKS_OPTS="$networks"
|
|
||||||
|
|
||||||
# Options passées au noyau
|
|
||||||
|
|
||||||
case "$MODE" in
|
|
||||||
tgz2) KOPTS="";;
|
|
||||||
*) KOPTS="root=/dev/vda1 ro console=ttyS0,115200n8"
|
|
||||||
KOPTS="$KOPTS vdn-emulator=kvm vdn-mode=$MODE"
|
|
||||||
KOPTS="$KOPTS net.ifnames=0 noresume" # fastboot quiet"
|
|
||||||
|
|
||||||
KOPTS="root=/dev/vda1 ro console=ttyS0,115200n8"
|
|
||||||
KOPTS="$KOPTS vdn-emulator=kvm vdn-mode=$MODE"
|
|
||||||
KOPTS="$KOPTS net.ifnames=0 noresume" # fastboot quiet"
|
|
||||||
esac
|
|
||||||
|
|
||||||
createConfigDir
|
|
||||||
|
|
||||||
# config disk (last disk)
|
|
||||||
configTgz=$TMPDIR/vdn-$GUEST_NAME-$GUEST_OWNER-config.tgz
|
|
||||||
DISK_OPTS="$DISK_OPTS -drive file=$configTgz,if=$KVM_DISK_MODEL,media=disk,format=raw"
|
|
||||||
|
|
||||||
kvm_graphic
|
|
||||||
|
|
||||||
echo "Start begin (EMULATOR=$EMULATOR, SAVE_FILE=$SAVE_FILE)"
|
|
||||||
|
|
||||||
case "$MODE" in
|
|
||||||
tgz2) cmd="ionice -c 3 nice -$NICE $EMULATOR \
|
|
||||||
$KVM_OPTS $GRAPHICAL_OPTS \
|
|
||||||
$DISK_OPTS \
|
|
||||||
$KVM_NETWORKS_OPTS \
|
|
||||||
"
|
|
||||||
|
|
||||||
echo "==> CMD: $cmd"
|
|
||||||
|
|
||||||
;;
|
|
||||||
|
|
||||||
*) cmd="ionice -c 3 nice -$NICE $EMULATOR \
|
|
||||||
$KVM_OPTS $GRAPHICAL_OPTS \
|
|
||||||
-initrd $VDN_PATH/files/$INITRAMFS \
|
|
||||||
-kernel $VDN_PATH/files/$KERNEL \
|
|
||||||
-append '$KOPTS' \
|
|
||||||
$DISK_OPTS \
|
|
||||||
$KVM_NETWORKS_OPTS \
|
|
||||||
"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
set +u
|
|
||||||
[ -z "$FORCE_BG" ] && export FORCE_BG=0 || :
|
|
||||||
|
|
||||||
set -u
|
|
||||||
|
|
||||||
#echo $cmd | tr ' ' '\n'
|
|
||||||
|
|
||||||
if [ $BG = 1 -o \( $FORCE_BG = 1 -a $WITH_GUI = 0 \) ]; then
|
|
||||||
eval $cmd < /dev/null &> /dev/null &
|
|
||||||
#r=$?
|
|
||||||
#trap - 0
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
#if [ $FORCE_BG = 1 ]; then
|
|
||||||
# eval $cmd &
|
|
||||||
#fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ "$VDN_TERM" = 0 ]; then
|
|
||||||
set -e
|
|
||||||
|
|
||||||
$VDN_PATH/bin/vdn-terminal "$cmd"
|
|
||||||
|
|
||||||
r=$?
|
|
||||||
set +e
|
|
||||||
else
|
|
||||||
set +e
|
|
||||||
eval $cmd
|
|
||||||
r=$?
|
|
||||||
stty sane
|
|
||||||
set -e
|
|
||||||
fi
|
|
||||||
return $r
|
|
||||||
}
|
|
||||||
|
|
||||||
startKvmDirectOrCow() {
|
|
||||||
|
|
||||||
local r=0
|
|
||||||
|
|
||||||
set +u
|
|
||||||
if [ "$HDA" = "$VDN_DISK_ENV" ]; then
|
|
||||||
error "Impossible de monter en écriture le disque $VDN_DISK_ENV \nservant à l'environnement chroot.\nAbandon"
|
|
||||||
fi
|
|
||||||
set -u
|
|
||||||
|
|
||||||
if [ ! -e "$VDN_PATH/files/$HDA" ]; then
|
|
||||||
[ -z "$HDA_SIZE" ] && error "Need HDA_SIZE (in Mo)"
|
|
||||||
echo "Create $HDA. Size=$HDA_SIZE (Mo)"
|
|
||||||
dd if=/dev/zero of=$VDN_PATH/files/$HDA count=1 bs=512
|
|
||||||
dd of=$VDN_PATH/files/$HDA count=0 bs=1M seek=$HDA_SIZE
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ $MODE = direct -a ! -w $VDN_PATH/files/$HDA ] && \
|
|
||||||
error "No write permission on $VDN_PATH/files/$HDA"
|
|
||||||
|
|
||||||
KVM_NETWORKS_OPTS="$networks"
|
|
||||||
#KVM_NETWORKS_OPTS="$(eval echo $networks)"
|
|
||||||
|
|
||||||
[ -n "$SWAP_FILE" ] &&
|
|
||||||
DISK_OPTS="$DISK_OPTS -drive file=$SWAP_FILE,if=$KVM_DISK_MODEL,media=disk,format=raw"
|
|
||||||
|
|
||||||
createConfigDir
|
|
||||||
configTgz=$TMPDIR/vdn-$GUEST_NAME-$GUEST_OWNER-config.tgz
|
|
||||||
|
|
||||||
set +u
|
|
||||||
[ -z "$DISK_OPTS" ] && DISK_OPTS=""
|
|
||||||
set -u
|
|
||||||
|
|
||||||
DISK_OPTS="$DISK_OPTS -drive file=$configTgz,if=$KVM_DISK_MODEL,media=disk,format=raw"
|
|
||||||
|
|
||||||
kvm_graphic
|
|
||||||
|
|
||||||
echo "Start startKvmDirect begin (EMULATOR=$EMULATOR)"
|
|
||||||
|
|
||||||
cmd="ionice -c 3 nice -$NICE $EMULATOR \
|
|
||||||
$KVM_OPTS $GRAPHICAL_OPTS \
|
|
||||||
$DISK_OPTS \
|
|
||||||
$KVM_NETWORKS_OPTS \
|
|
||||||
"
|
|
||||||
|
|
||||||
if [ $BG = 1 ]; then
|
|
||||||
eval $cmd < /dev/null &> /dev/null &
|
|
||||||
r=$?
|
|
||||||
trap - 0
|
|
||||||
return $r
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$VDN_TERM" = 0 ]; then
|
|
||||||
set -e
|
|
||||||
$VDN_PATH/bin/vdn-terminal "$cmd"
|
|
||||||
r=$?
|
|
||||||
set +e
|
|
||||||
else
|
|
||||||
set +e
|
|
||||||
eval $cmd
|
|
||||||
r=$?
|
|
||||||
stty sane
|
|
||||||
set -e
|
|
||||||
fi
|
|
||||||
|
|
||||||
return $r
|
|
||||||
}
|
|
||||||
|
|
||||||
startKvm() {
|
|
||||||
|
|
||||||
local r=0
|
|
||||||
|
|
||||||
echo "Start KVM"
|
|
||||||
|
|
||||||
networks=`kvm_query_networks`
|
|
||||||
|
|
||||||
# for last QEMU versions ( -redir -> hostfwd )
|
|
||||||
if echo "$networks" | grep -q -- -redir; then
|
|
||||||
n=$(echo "$networks" | sed -re 's/-redir +(tcp|udp):([^:]+)::([0-9]+)( |$)/,hostfwd=\1::\2-:\3/g')
|
|
||||||
networks=$(echo "$n" | sed -re 's/-net user /-net user/g')
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "networks : $NETWORKS" >&2
|
|
||||||
|
|
||||||
NB_DISK=0
|
|
||||||
DISK_OPTS=""
|
|
||||||
|
|
||||||
#echo "MODE 1:$MODE"
|
|
||||||
case "$MODE" in
|
|
||||||
tgz|overlay|tgz2)
|
|
||||||
[ $BOOT_CDROM = 1 ] && error "BOOT_CDROM=1 : Can't boot on cdrom !"
|
|
||||||
#[ -n "$CDROM" ] && warning "CDROM not allowed in tgz mode"
|
|
||||||
#CDROM=""
|
|
||||||
tgzPrepare
|
|
||||||
;;
|
|
||||||
cow)
|
|
||||||
[ -z "$HDA" ] && error "Mode COW : Need HDA Disk" || :
|
|
||||||
[ -z "$SAVE_FILE" ] && error "Mode COW : Need SAVE_FILE" || :
|
|
||||||
[ ! -d $(dirname $SAVE_FILE) ] && mkdir -p $(dirname $SAVE_FILE)
|
|
||||||
[ ! -e "$SAVE_FILE" ] && {
|
|
||||||
#echo "Create $SAVE_FILE"
|
|
||||||
|
|
||||||
[ $VDN_DEBUG = 1 ] && set -x || :
|
|
||||||
( umask 077; qemu-img create -b $VDN_PATH/files/$HDA -f qcow2 $SAVE_FILE )
|
|
||||||
set +x
|
|
||||||
}
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
local boot_hda=on
|
|
||||||
local boot_cdrom=off
|
|
||||||
local boot_drive=c
|
|
||||||
local boot_order=c
|
|
||||||
|
|
||||||
[ $BOOT_CDROM = 1 ] && {
|
|
||||||
boot_hda=off
|
|
||||||
boot_cdrom=on
|
|
||||||
local boot_drive=d
|
|
||||||
local boot_order=d
|
|
||||||
}
|
|
||||||
|
|
||||||
#set +x
|
|
||||||
|
|
||||||
case "$MODE" in
|
|
||||||
tgz|overlay|tgz2)
|
|
||||||
DISK_OPTS="-boot order=$boot_order -drive file=$VDN_PATH/files/$HDA,if=$KVM_DISK_MODEL,snapshot=on,format=raw"
|
|
||||||
;;
|
|
||||||
cow)
|
|
||||||
DISK_OPTS="-boot order=$boot_order -drive file=$SAVE_FILE,if=$KVM_DISK_MODEL"
|
|
||||||
;;
|
|
||||||
direct)
|
|
||||||
DISK_OPTS="-boot order=$boot_order -drive file=$VDN_PATH/files/$HDA,if=$KVM_DISK_MODEL,format=raw"
|
|
||||||
;;
|
|
||||||
*) error "Invalide mode : $MODE"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
NB_DISK=$(($NB_DISK+1))
|
|
||||||
|
|
||||||
set +u
|
|
||||||
[ -z "$SAVE_DIR_HDB" ] && SAVE_DIR_HDB=$SAVE_DIR || :
|
|
||||||
set -u
|
|
||||||
|
|
||||||
[ ! -d $SAVE_DIR_HDB ] && mkdir -p $SAVE_DIR_HDB || :
|
|
||||||
|
|
||||||
[ -n "$HDB" ] && {
|
|
||||||
[ ! -e "$SAVE_DIR_HDB/$HDB" ] && {
|
|
||||||
[ -n "$HDB_SIZE" ] && {
|
|
||||||
#echo -n "Create HDB ($HDB_SIZE) : $SAVE_DIR_HDB/$HDB... "
|
|
||||||
dd of=$SAVE_DIR_HDB/$HDB count=0 bs=1M seek=$HDB_SIZE
|
|
||||||
#echo "done."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DISK_OPTS="$DISK_OPTS -drive file=$SAVE_DIR_HDB/$HDB,if=$KVM_DISK_MODEL,format=raw"
|
|
||||||
NB_DISK=$(($NB_DISK+1))
|
|
||||||
}
|
|
||||||
|
|
||||||
[ -n "$CDROM" ] && {
|
|
||||||
[ ! -e "$VDN_PATH/files/$CDROM" ] && {
|
|
||||||
warning "Cdrom \"$CDROM\" not found !"
|
|
||||||
} || {
|
|
||||||
DISK_OPTS="-boot order=$boot_order $DISK_OPTS -drive file=$VDN_PATH/files/$CDROM,media=cdrom"
|
|
||||||
#NB_DISK=$(($NB_DISK+1)) # /dev/cdrom -> /dev/sr0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
prepareSwap
|
|
||||||
|
|
||||||
if [ $KVM_USB_DEVICE_TABLET = 1 ]; then
|
|
||||||
KVM_OPTS="$KVM_OPTS -usbdevice tablet"
|
|
||||||
fi
|
|
||||||
|
|
||||||
case $KVM_VIEWER in
|
|
||||||
no) KVM_OPTS="$KVM_OPTS -nographic";;
|
|
||||||
sdl) ;;
|
|
||||||
vnc) ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "$EMULATOR" in
|
|
||||||
kvm) [ -w /dev/kvm ] && {
|
|
||||||
KVM_OPTS="-enable-kvm -cpu host $KVM_OPTS"
|
|
||||||
cpu=$(getconf _NPROCESSORS_ONLN)
|
|
||||||
KVM_OPTS="-smp $cpu $KVM_OPTS"
|
|
||||||
}
|
|
||||||
EMULATOR=qemu-system-x86_64
|
|
||||||
|
|
||||||
;;
|
|
||||||
qemu) KVM_OPTS="-smp 1 $KVM_OPTS"
|
|
||||||
EMULATOR=qemu-system-x86_64
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
#echo "MODE: beforeStart : $MODE"
|
|
||||||
case $MODE in
|
|
||||||
tgz|overlay|tgz2) startKvmTgz; r=$?;;
|
|
||||||
direct|cow) startKvmDirectOrCow; r=$?;;
|
|
||||||
*) error "Mode $MODE not available"
|
|
||||||
esac
|
|
||||||
|
|
||||||
return $r
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
quit() {
|
|
||||||
echo ""
|
|
||||||
#echo "*** $GUEST_NAME stopped !"
|
|
||||||
#echo "Wait return before rm files !"
|
|
||||||
#read
|
|
||||||
#rm -Rf $TMPDIR/vdn-$GUEST_NAME-$GUEST_OWNER-*
|
|
||||||
}
|
|
||||||
|
|
||||||
# Programme principal
|
|
||||||
|
|
||||||
echo "vdn-start $@"
|
|
||||||
|
|
||||||
VDN_PATH=$(readlink -f $(dirname $0)/..); . $VDN_PATH/bin/functions.sh
|
|
||||||
|
|
||||||
args "$@"
|
|
||||||
|
|
||||||
myLocalHostname=$(hostname)
|
|
||||||
|
|
||||||
if [ "$myLocalHostname" = "tokyo" -o "$myLocalHostname" = "iutclinfvm01l" ]; then
|
|
||||||
echo "Lancer des VM sur $myLocalHostname n'est ni autorisé ni judicieux !" >&2
|
|
||||||
echo "Allez sur une machine de TP (commande scan-dept pour lister celles allumées) !" >&2
|
|
||||||
exit 9
|
|
||||||
fi
|
|
||||||
|
|
||||||
set +u
|
|
||||||
[ "$VDN_DEBUG" = "1" ] && set -x || :
|
|
||||||
set -u
|
|
||||||
|
|
||||||
#verifIdent || exit 2
|
|
||||||
|
|
||||||
export HOSTS=""
|
|
||||||
|
|
||||||
setGuestVars $GUEST_NAME
|
|
||||||
|
|
||||||
GUEST_OWNER=$USER
|
|
||||||
|
|
||||||
DIRECT=0
|
|
||||||
|
|
||||||
loadGuestVars $GUEST_NAME
|
|
||||||
|
|
||||||
#if ! /sbin/route -n | grep -q '0.0.0.0' ; then
|
|
||||||
if ! /sbin/ip route | grep -q default; then
|
|
||||||
error "Pas de route par défaut ! Consultez la FAQ"
|
|
||||||
fi
|
|
||||||
|
|
||||||
AUFS_OPTS=""
|
|
||||||
|
|
||||||
NB_ETH=`echo $NETWORKS | wc -w`
|
|
||||||
|
|
||||||
|
|
||||||
testIfAlreadyStarted
|
|
||||||
|
|
||||||
|
|
||||||
# Délègue à interface graphique
|
|
||||||
|
|
||||||
set +u
|
|
||||||
[ -z "$WITH_GUI" ] && export WITH_GUI=0
|
|
||||||
[ -z "$VDN_GUI" ] && export VDN_GUI=0
|
|
||||||
set -u
|
|
||||||
|
|
||||||
if [ $GUI = 1 ]; then
|
|
||||||
if ps auwx | grep -v grep | grep -q 'ruby.*vdn-gui' ; then
|
|
||||||
sendToGui "start $GUEST_NAME $EXPR"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
set +u
|
|
||||||
if [ ! -e $VDN_PATH/files/$INITRAMFS_PATH ]; then
|
|
||||||
if [ $MODE = "tgz" -o $MODE = "overlay" -o $MODE = "tgz2"]; then
|
|
||||||
error "Impossible de trouver : $INITRAMFS_PATH"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
set -u
|
|
||||||
|
|
||||||
|
|
||||||
export MOUNT_ROOT_PATH="$VDN_PATH/distribs/guests/$GUEST_SYS/mount-root"
|
|
||||||
|
|
||||||
#echo
|
|
||||||
#echo "*** Start $GUEST_NAME ($EMULATOR)"
|
|
||||||
#echo
|
|
||||||
|
|
||||||
|
|
||||||
trap quit 0
|
|
||||||
|
|
||||||
[ -z "$EMULATOR" ] && EMULATOR="kvm"
|
|
||||||
|
|
||||||
case "$EMULATOR" in
|
|
||||||
kvm|qemu*)
|
|
||||||
#EXCLUDE_SERVICES=""
|
|
||||||
#echo "Start kvm..."
|
|
||||||
startKvm
|
|
||||||
r=$?;;
|
|
||||||
|
|
||||||
*) echo "L'émulateur $EMULATOR n'est pas supporté !" >&2; exit 2;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
exit $r
|
|
||||||
|
|
Loading…
Reference in new issue