You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
484 lines
11 KiB
484 lines
11 KiB
#!/usr/bin/env bash
|
|
|
|
#set -x
|
|
|
|
MULTIPLE=1
|
|
|
|
RUN_SINGULARITY=0
|
|
|
|
export VDN_PATH=$(readlink -f $(dirname $0)/..); . $VDN_PATH/bin/functions.sh
|
|
|
|
FIRST_REQUEST=1
|
|
ACCEPT_CHROOT=0
|
|
USE_SUDO=0
|
|
NO_HOST_KVM_TEST=0
|
|
FORCE_CHROOT=0 # for test
|
|
TEST_ONLY=0 # test host and quit.
|
|
NETWORK=""
|
|
|
|
set +u
|
|
[ -z "$RUN_IN_CHROOT" ] && RUN_IN_CHROOT=0 || :
|
|
set -u
|
|
export RUN_IN_CHROOT
|
|
|
|
set -a
|
|
NO_MOZ=0
|
|
set +a
|
|
|
|
quit() {
|
|
echo "quit..."
|
|
|
|
|
|
#sendToGui "gui"
|
|
#sleep 1
|
|
|
|
pid=$(ps auwx | grep 'ruby' | grep 'vdn-gui' | tr -s " " | cut -d ' ' -f 2)
|
|
if [ -n "$pid" ]; then
|
|
echo "kill : $pid" >&2
|
|
kill $pid
|
|
sleep 1
|
|
fi
|
|
echo
|
|
}
|
|
|
|
synopsis() {
|
|
cat << EOF
|
|
Usage : $(basename $0) [-h] [-v]
|
|
EOF
|
|
}
|
|
|
|
help() {
|
|
cat << EOF
|
|
|
|
$(basename $0) démarre l'interface graphique de Vdn.
|
|
|
|
$(synopsis)
|
|
|
|
-h : affiche cette aide.
|
|
-v : affiche la version.
|
|
|
|
EOF
|
|
}
|
|
|
|
usage() {
|
|
synopsis
|
|
exit 1
|
|
}
|
|
|
|
args() {
|
|
local opt
|
|
while getopts "cdfhsmntv" opt; do
|
|
case $opt in
|
|
h) help; exit 0;;
|
|
v) cat $VDN_PATH/release; exit 0;;
|
|
c) ACCEPT_CHROOT=1;;
|
|
d) export VDN_DEBUG=1; vdn-set-var VDN_DEBUG 1; set -x;;
|
|
m) MULTIPLE=1;;
|
|
n) NO_HOST_KVM_TEST=1;;
|
|
s) USE_SUDO=1;;
|
|
f) FORCE_CHROOT=1;;
|
|
t) TEST_ONLY=1;;
|
|
?) usage;;
|
|
esac
|
|
done
|
|
shift $(($OPTIND - 1))
|
|
[ $# -eq 1 ] && NETWORK="$1"
|
|
}
|
|
|
|
|
|
request() {
|
|
|
|
if [ $FIRST_REQUEST = 1 ]; then
|
|
FIRST_REQUEST=0
|
|
request "Une ou plusieurs questions vont vous être posées. Sauf bonne raison, acceptez\nles choix par défaut en appuyant sur \"Entrée\"."
|
|
if [ $? -ne 0 ]; then
|
|
echo "Bye !"
|
|
exit 0
|
|
fi
|
|
fi
|
|
echo
|
|
echo -e "$@"
|
|
echo
|
|
echo -n "Confirmez (O/n) : "
|
|
read
|
|
if [ -z "$REPLY" -o "$REPLY" = "o" -o "$REPLY" = "O" ]; then
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
testHost() {
|
|
|
|
if [ "$(uname -m)" != "x86_64" ]; then
|
|
echo "Désolé, cette version de VDN ne fonctionne que sur architecture x86_64 !" >&2
|
|
exit 1
|
|
fi
|
|
|
|
#if [ "$DISPLAY" = "" ]; then
|
|
# echo "Désolé, cette version de VDN nécessite un serveur graphique compatible X11 !" >&2
|
|
# exit 1
|
|
#fi
|
|
|
|
if [ $NO_HOST_KVM_TEST = 0 ]; then
|
|
grep -Eq '(vmx|svm)' /proc/cpuinfo
|
|
virtproc=$?
|
|
[ -w /dev/kvm ]
|
|
kvmwrite=$?
|
|
lsmod | grep -q 'kvm_'
|
|
kvmproc=$?
|
|
lsmod | grep -q 'kvm[^_]'
|
|
|
|
kvm=0
|
|
|
|
if [ $virtproc -ne 0 ]; then
|
|
echo "Votre processeur ne dispose pas d'instructions de virtualisation :-( !"
|
|
#else
|
|
# echo "Votre processeur dispose d'instructions de virtualisation ;-)"
|
|
fi
|
|
if [ $virtproc -eq 0 -a $kvmwrite -ne 0 ]; then
|
|
echo
|
|
echo "Votre processeur dispose d'instructions de virtualisation."
|
|
echo "Cependant vous ne pouvez pas les utiliser :-( !"
|
|
echo
|
|
|
|
if [ -e /dev/kvm ]; then
|
|
msg=" Vous n'avez pas les droits de lecture/écriture sur /dev/kvm !\n L'administrateur (root) doit, au choix, effectuer les actions suivantes :\n 1. chmod 666 /dev/kvm.\n 2. Vous ajouter au groupe $(stat -c %G /dev/kvm) (commande \"addgroup $USER $(stat -c %G /dev/kvm)\" par exemple).\n\n Si la deuxième solution est choisie, vous devrez vous déconnecter de votre\n session graphique et vous reconnecter ou, plus simplement, ouvrir un nouveau\n shell de connexion via par exemple la commande \"su - $USER\"."
|
|
|
|
elif lsmod | grep -q kvm; then
|
|
msg=" Les instructions de virtualisation de votre processeur ne sont pas activées dans votre BIOS/UEFI.\n
|
|
Redémarrez et configurez le BIOS/UEFI pour bénéficier de la virtualisation."
|
|
else
|
|
proc="intel"
|
|
if cat /proc/cpuinfo | grep -i -q amd; then
|
|
proc="amd"
|
|
fi
|
|
msg=" Le module noyau \"kvm-$proc\" n'est pas chargé !\n L'administrateur du système doit exécuter : modprobe kvm-$proc ."
|
|
fi
|
|
echo "Il semblerait que la raison soit :"
|
|
echo -e "$msg"
|
|
echo
|
|
|
|
request "Continuer en mode \"sans instructions de virtualisation\" ?"
|
|
|
|
[ $? -ne 0 ] && exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
runInChrootOld() {
|
|
#[ $RUN_IN_CHROOT = 1 ] && good=1 || :
|
|
if [ $ACCEPT_CHROOT = 0 ]; then
|
|
if [ $good = 0 -o \( $FORCE_CHROOT = 1 -a $RUN_IN_CHROOT = 0 \) ]; then
|
|
request "Le sytème hôte n'est pas une Debian 10 (buster).\nBasculer dans un environnement chroot ? (accès root nécessaire)"
|
|
|
|
[ $? -ne 0 ] && exit 0
|
|
fi
|
|
fi
|
|
|
|
if [ $good = 0 -o \( $FORCE_CHROOT = 1 -a $RUN_IN_CHROOT = 0 \) ]; then
|
|
RUN_IN_CHROOT=1
|
|
|
|
export VDN_DISK_ENV="DebianBuster-amd64-env.disk"
|
|
export VDN_DISK_NAME="DebianBuster-amd64.disk"
|
|
|
|
[ ! -e $VDN_PATH/files/$VDN_DISK_ENV ] && VDN_DISK_ENV=$VDN_DISK_NAME || :
|
|
|
|
DISK=$VDN_PATH/files/$VDN_DISK_ENV
|
|
|
|
|
|
DISK_SIZE=0
|
|
if [ -e $DISK ]; then
|
|
DISK_SIZE=$(ls -l $DISK | tr -s ' ' | cut -d ' ' -f 5)
|
|
fi
|
|
if [ $DISK_SIZE -lt $REMOTE_DISK_SIZE ]; then
|
|
|
|
request "Télécharger du disque virtuel de VDN (6 Go) ?"
|
|
|
|
[ $? -ne 0 ] && exit 0
|
|
|
|
local notFound=0
|
|
local bin="bzip2 wget"
|
|
|
|
for i in $bin; do
|
|
if ! whereis $i | grep -q bin; then
|
|
echo "Impossible de trouver l'exécutable : $i !"
|
|
notFound=1
|
|
fi
|
|
done
|
|
|
|
if [ $notFound = 1 ]; then
|
|
error "Programme(s) manquant(s) !\nL'administrateur doit installer ces programmes !"
|
|
fi
|
|
|
|
vdn-download-disks -t DebianBuster-amd64.disk.gz
|
|
fi
|
|
|
|
echo
|
|
echo "Running in chroot."
|
|
|
|
if [ $USE_SUDO = 1 ]; then
|
|
vdn-mount-chroot -s
|
|
else
|
|
vdn-mount-chroot
|
|
fi
|
|
|
|
exit $?
|
|
fi
|
|
|
|
}
|
|
|
|
runInChrootIfNecessary() {
|
|
|
|
local good=0
|
|
|
|
# chroot ?
|
|
|
|
if [ -e /etc/debian_version ]; then
|
|
if grep -q '^10\.' /etc/debian_version ; then
|
|
good=1
|
|
fi
|
|
fi
|
|
|
|
[ $RUN_IN_CHROOT = 1 ] && good=1 || :
|
|
|
|
#runInChrootOld
|
|
|
|
# Not in chroot
|
|
|
|
|
|
}
|
|
|
|
runWithSingularityIfNecessary() {
|
|
|
|
local good=0
|
|
|
|
# chroot ?
|
|
|
|
if [ -e /etc/debian_version ]; then
|
|
if grep -q '^10\.' /etc/debian_version ; then
|
|
good=1
|
|
fi
|
|
fi
|
|
|
|
|
|
if [ $good = 0 ]; then
|
|
RUN_SINGULARITY=1
|
|
fi
|
|
|
|
}
|
|
|
|
updateVdnrc() {
|
|
if [ -e ~/.vdnrc ]; then
|
|
|
|
request "Lors d'un changement de version de VDN, il est conseillé de mettre à jour\nle fichier ~/.vdnrc (la version courante sera enregistrée sous ~/.vdnrc.old).\nVoulez-vous mettre à jour ~/.vdnrc ?"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
mv ~/.vdnrc ~/.vdnrc.old
|
|
fi
|
|
fi
|
|
}
|
|
|
|
pathWarning() {
|
|
echo
|
|
echo "*******************************************************************************"
|
|
echo "Le chemin de l'exécutable de VDN sera connu uniquement des NOUVEAUX shells !"
|
|
echo "*******************************************************************************"
|
|
}
|
|
|
|
### main
|
|
|
|
export VDN_DEBUG=0; vdn-set-var VDN_DEBUG 0
|
|
|
|
args "$@"
|
|
|
|
if [ -n "$NETWORK" -a "$NETWORK" = "stop" ]; then
|
|
quit
|
|
exit 0
|
|
fi
|
|
|
|
if [ -n "$NETWORK" ]; then
|
|
if [ ! -d $NETWORK ]; then
|
|
if [ -d $NETWORK_DIR/../$NETWORK ]; then
|
|
NETWORK=$(readlink -f $NETWORK_DIR/../$NETWORK)
|
|
fi
|
|
fi
|
|
|
|
if [ ! -d $NETWORK ]; then
|
|
error "Can' find network $NETWORK !"
|
|
fi
|
|
|
|
# set and reload
|
|
vdn-set-var NETWORK_DIR "$NETWORK"
|
|
export NETWORK_DIR="$NETWORK"
|
|
. $VDN_PATH/bin/functions.sh
|
|
fi
|
|
|
|
#for i in 1 2 3 4 5; do
|
|
# if ! ps auwx | grep -v grep | grep -q 'ruby.*vdn-gui' ; then
|
|
# break
|
|
# fi
|
|
# sleep 0.1
|
|
#done
|
|
|
|
if [ $MULTIPLE = 0 ]; then
|
|
if ps auwx | grep -v grep | grep -q 'ruby.*vdn-gui' ; then
|
|
error "Une instance de l'interface graphique de VDN est déjà active"
|
|
fi
|
|
else
|
|
#echo "Multiple..."
|
|
if ps auwx | grep -v grep | grep -q 'ruby.*vdn-gui' ; then
|
|
export NETWORK_DIR=""
|
|
vdn-set-var NETWORK_DIR ""
|
|
fi
|
|
fi
|
|
|
|
#clear
|
|
|
|
#if ! /sbin/route -n | grep -q '0.0.0.0' ; then
|
|
#/sbin/ip route
|
|
|
|
if ! /sbin/ip route | grep -q default; then
|
|
cat << EOF >&2
|
|
|
|
Pas de route par défaut !
|
|
|
|
Si le système hôte ne dispose pas d'interface réseau, vous pouvez
|
|
autoriser la diffusion sur l'interface lo (loopback) via les commandes
|
|
(il faut être root) :
|
|
|
|
Avec ifconfig :
|
|
|
|
ifconfig lo multicast
|
|
route add default gw 127.0.0.1
|
|
|
|
avec ip :
|
|
|
|
ip link set dev lo multicast on
|
|
ip route add default via 127.0.0.1
|
|
|
|
EOF
|
|
error "Pas de route par défaut ! Voir ci-dessus ou consultez la FAQ !"
|
|
fi
|
|
|
|
|
|
|
|
testHost # chroot if necessary
|
|
|
|
runInChrootIfNecessary
|
|
|
|
# Not in chroot
|
|
|
|
# download extras
|
|
#if [ -e $VDN_PATH/distribs/hosts/$HOST_RELEASE/download-extras.sh ]; then
|
|
# . $VDN_PATH/distribs/hosts/$HOST_RELEASE/download-extras.sh
|
|
# if ! testDownloadExtras; then
|
|
# downloadExtras
|
|
# fi
|
|
#fi
|
|
|
|
testInstallDebian
|
|
|
|
testVersionOld() {
|
|
|
|
while :; do
|
|
version="$VDN_PATH"
|
|
current=$(cat ~/.bashrc |sed -nre 's/^[^#]*PATH.*:([^:]*vdn[^:]*)\/bin.*$/\1/p')
|
|
|
|
[ "$current" = "$version" ] && break;
|
|
|
|
# La version courante diffère de la version lancée
|
|
if [ -n "$current" ] && [ "$version" != "$current" ]; then
|
|
request "Votre fichier ~/.bashrc définit la version $current comme étant la version à utiliser. Cependant vous exécutez $version.\nVotre fichier ~/.bashrc doit être adapté !\nVoulez-vous que ce programme l'adapte pour vous ?"
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Adaptez votre fichier ~/.bashrc puis relancez $0.";
|
|
exit 1;
|
|
|
|
else
|
|
cp ~/.bashrc ~/.bashrc.vdn.old
|
|
|
|
echo "Ancien fichier ~/.bashrc copié sous ~/.bashrc.vdn.old"
|
|
|
|
cat ~/.bashrc |sed -re 's,[^:]*'$current','$VDN_PATH',g'> \
|
|
~/.bashrc-vdn
|
|
mv ~/.bashrc-vdn ~/.bashrc
|
|
|
|
echo
|
|
|
|
pathWarning
|
|
|
|
updateVdnrc
|
|
|
|
fi
|
|
|
|
elif [ -z "$current" ]; then
|
|
line="PATH=\"\$PATH:$VDN_PATH/bin\""
|
|
request "Votre fichier ~/.bashrc ne définit pas le chemin des exécutables de $version.\nLa ligne suivante doit être ajoutée :\n$line\nVoulez vous que ce programme adapte votre fichier ~/.bashrc pour vous ?"
|
|
if [ $? -eq 0 ]; then
|
|
echo "Adaptation de ~/.bashrc"
|
|
echo "PATH=\"\$PATH:$VDN_PATH/bin\"" >> ~/.bashrc
|
|
|
|
pathWarning
|
|
|
|
updateVdnrc
|
|
else
|
|
break
|
|
fi
|
|
|
|
# echo "Ajoutez une ligne PATH=\"\$PATH:$VDN_PATH/bin\" à votre fichier ~/.bashrc puis relancez $0."
|
|
# exit 1;
|
|
|
|
fi
|
|
done
|
|
|
|
|
|
if [ ! -e ~/.ssh/id_dsa.pub -a ! -e ~/.ssh/id_rsa.pub ]; then
|
|
request "Vous ne disposez pas d'un couple de clé SSH RSA nécessaire au fonctionnement de Vdn.\nVoulez vous que ce programme vous génère un couple de clé RSA ?"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo
|
|
echo "Create ssh keys..."
|
|
ssh-keygen -q -N '' -f ~/.ssh/id_rsa -t rsa
|
|
else
|
|
echo "Exécutez la commde ci-dessous pour générer un couple de
|
|
clé SSH RSA puis relancez $0 :"
|
|
echo "ssh-keygen -q -N '' -f ~/.ssh/id_rsa -t rsa"
|
|
exit 1
|
|
fi
|
|
set +x
|
|
fi
|
|
}
|
|
|
|
|
|
export VDN_RELEASE="$(cat $VDN_PATH/release)"
|
|
export PATH="$VDN_PATH/bin:$PATH"
|
|
|
|
[ $TEST_ONLY = 1 ] && exit 0 || :
|
|
|
|
setEnv
|
|
|
|
rm -f $HOME/.tmuxinator/vdn-tmuxinator*
|
|
|
|
trap 'quit' SIGINT
|
|
|
|
if [ ! -e /usr/bin/tmuxinator ]; then
|
|
$VDN_PATH/bin/vdn-set-var RUN_PARALLEL 0
|
|
echo "/usr/bin/tmuxinator not found ! RUN_PARALLEL disable..." >&2
|
|
sleep 1
|
|
fi
|
|
|
|
rm -f $TMPDIR/vdn-$USER-gui-log
|
|
mkfifo $TMPDIR/vdn-$USER-gui-log
|
|
chmod 600 $TMPDIR/vdn-$USER-gui-log
|
|
|
|
export GUI=1
|
|
export VDN_GUI=1
|
|
|
|
export LANG=fr_FR.UTF-8
|
|
|
|
$VDN_PATH/bin/vdn-gui.rb 2>&1 # | tee $TMPDIR/vdn-$USER-gui-log
|
|
|
|
#$VDN_PATH/bin/vdn-gui.rb #2>&1 > $TMPDIR/vdn-$USER-gui-log &
|
|
#echo
|
|
|