SIDUS est l'acronyme de Single Instance Distributing Universal System et se propose de simplifier à l'extrême l'administration de machines.
Son origine latine d'ensemble de corps stellaires est une allégorie : nous vous laissons trouver celle qui vous convient le mieux .
SIDUS a deux principales propriétés :
SIDUS n'est donc :
CQQCOQP est une démarche analytique simple vous permettant, simplement en lisant les réponses aux questions élémentaires Pourquoi ? Quoi ? Qui ? Où ? Quand ? Combien ? et Comment ? les tenants et les aboutissants de SIDUS.
Le temps d'administration système des équipements informatiques (noeud de calcul, poste personnel ou station de travail, machine virtuelle d'expérimentation) augmente avec leur nombre et leur diversité. Ainsi, tous ces matériels partagent essentiellement les mêmes fichiers, mais chacun sur son propre disque. Comment limiter le temps d'installation et d'administration des machines tout en conservant la flexibilité liée à leur destination ?
C'est le défi relevé par SIDUS (pour Single Instance Distributing Universal System), développée au Centre Blaise Pascal à l'origine essentiellement pour simplifier la tâche de l'unique administrateur système face à la gestion de centaines de machines de toutes natures pour toutes destinations (plateaux techniques multi-noeuds, multi-coeurs, GPU, etc).
Une approche permettant le démarrage en réseau et l'offre d'un système parfaitement générique pour toutes les machines.
La première version de Sidus date de février 2010, elle était à l'origine sur Debian Etch. Elle a suivi toutes les évolutions de la distribution Debian, socle essentiel (voire exclusif) du Centre Blaise Pascal.
Mi 2015, SIDUS sert 76 noeuds permanents de cluster au CBP (jusqu'à 120 simultanés en fonction des prêts), des serveurs de GPGPU, des stations de travail multi-coeurs et des postes COMOD (pour Compute On My Own Device).
SIDUS s'adresse à tous ceux qui veulent se simplifier la tâche et qui :
Le Centre Blaise Pascal, hôtel à projets de l'ENS-Lyon dans le domaine du calcul et de l'informatique scientifiques, utilise SIDUS pour tous ses équipements dont l'uniformité doit être conservée le plus possible : un simple redémarrage doit suffire à replacer le système dans son état d'origine.
Le Pôle Scientifique de Modélisation Numérique (PSMN), centre de calcul de l'ENS-Lyon, utilise maintenant SIDUS sur une centaine de noeuds et prépare sa généralisation pour la mise en place de Equip@Meso (près de 200 noeuds supplémentaires).
Le laboratoire de Chimie utilise “COMOD” pour quelques postes de travail “à la demande”.
Les laboratoires de l'IGFL, du LBMC et du LJC utilisent “COMOD” : un cluster de 5 stations de travail gavées de GPU au LBMC, des stations graphiques à l'IGFL et au LJC.
L'université Joseph Fourier, dans le cadre de ses écoles thématiques sur le calcul scientifique, utilise depuis 2011 SIDUS pour l'infrastructure de travaux pratiques des auditeurs.
De 8 clients légers Neoware gonflés en CPU et mémoire et détournés début 2010 de leur vocation originelle, nous approchons les 120 machines au CBP utilisant ce système.
De quelques machines déployées à des fins expérimentales, le Pôle Scientifique de Modélisation Numérique utilise également SIDUS en production pour 480 noeuds. L'équipement informatique Equip@Meso d'environ 200 noeuds à lui tout seul, utilise également SIDUS comme socle.
Quelques chercheurs du laboratoire de chimie utilisent SIDUS via COMOD : la disponibilité en offrant la possibilité de déployer une machine complète et opérationnelle sur son poste de travail en quelques secondes.
Lors des école thématiques des Houches sur le calcul scientifique, SIDUS était servi à près d'une cinquantaine de machines simultanément.
Quant au prix du logiciel (question posée au dernier Scipy 2013), tous les composants qu'il utilise étant Open Source, SIDUS l'est aussi, ainsi que toutes les documentations associées ! SIDUS est donc sous licence CeCILL.
Si vous utilisez SIDUS, informez l'auteur et faites en la promotion !
Si vous voulez déployer SIDUS sur vos installations et vous faire aider, vous pouvez contacter l'auteur.
SIDUS se base sur une majorité de composants simples et éprouvés, disponible sur la majorité des distributions GNU/Linux.
Nous allons maintenant détailler comment installer le sien !
Nous devons préparer un peu notre système pour accueillir SIDUS. Pour cela, nous devons avoir la main sur plusieurs services pour déployer nos clients : serveurs DHCP, TFTP, NFS. Vous devez donc entretenir de très bonnes relations avec votre service IT ou vous êtes assez libres pour accéder sans contraintes aux serveurs Ldap et DNS bien définis :
next-server
et le nom du binaire PXE, souvent nommé pxelinux.0
.pxelinux.0
, le noyau et le démarrage du système du client. Si nous avons besoin d'offrir des paramètres à tel ou tel client, nous contruisons un document spécifique dont le nom sera contruit à partir de son adresse MAC (préfixé de 01 et dont les : sont remplacés par des -)./srv/nfsroot/sidus
que nous allons installer notre système client.Dans l'éventualité où vous n'avez pas la main sur les services DNS, TFTP, DHCP et NFS, de manière à installer notre première instance SIDUS de manière complètement autonome, nous avons besoin de configurer ces différents services. Dans nos configurations suivantes, nous exploiterons respectivement isc-dhcp-server, bind9, tftpd-hpa et nfs-kernel-server comme implémentations logicielles des serveurs DHCP, DNS, TFTP et NFS.
Le “domaine” SIDUS dont nous allons présenter l'installation aura les spécifications suivantes :
Debootstrap permet l'installation d'un système dans une racine. Il exige plusieurs paramètres comme la racine d'installation, l'architecture matérielle, la distribution et l'archive FTP ou HTTP Debian à solliciter pour le téléchargement.
Warning : là commence la “spécialisation” de notre installation, à l'origine construite autour d'une distribution Debian. Cet outil est familier de toutes les distributions Debian-like : il sera donc disponible chez les dérivées du système à la spirale (à commencer par Ubuntu). Il sera cependant assez facile de réaliser cela sur les Redhat-like, Fedora intégrant par exemple un clone, Febootstrap, mais que nous n'avons pas testé.
Debootstrap accepte aussi en entrée une liste d'archives (vous savez que Debian est très tatillon sur les licences en séparant les archives en main, contrib et non-free), une liste de paquets à inclure et une liste de paquets à exclure. Nous aurions été ravi de pouvoir, ici, préciser la liste complète des paquets à inclure ou exclure, mais, malheureusement, cette approche est une voie sans issue : nous installerons donc, dès cette commande debootstrap
, un ensemble d'outils qu'il nous semble indispensable d'inclure dès le début (par exemple le noyau, des firmwares pour un support étendu de tous les matériels et un ensemble d'outils d'audit).
Nous avons par commodité défini des variables d'environnement correspondant à la racine de notre système $SIDUS
et une commande permettant l'exécution d'une commande par chroot
avec une option particulière d'installation de paquet.
Configuration de la variable HTTP
:
export HTTP=http://www.cbp.ens-lyon.fr/sidus/bullseye
Installation de debootstrap
apt-get install debootstrap
Pour une architecture x84_64 ou AMD64
export SIDUS=/srv/nfsroot/bullseye64nfs alias sidus="DEBIAN_FRONTEND=noninteractive chroot ${SIDUS} $@" ARCH=amd64
Pour une architecture i386
export SIDUS=/srv/nfsroot/bullseye32nfs alias sidus="DEBIAN_FRONTEND=noninteractive setarch i686 chroot ${SIDUS} $@" ARCH=i386
• Lancement de l'installation
debootstrap --arch $ARCH --components='main,contrib,non-free' bullseye $SIDUS http://ftp.de.debian.org/debian
A la suite de cette commande, nous devons prendre quelques précautions :
* normalement, si le paquet Debian est un service, ce dernier démarre après son installation. Nous devons donc inhiber le lancement de ce service par la définition d'un hook (/usr/sbin/policy-rc.d
) :
#!/bin/sh exit 101
Ou sous forme de commande :
printf '#!/bin/sh\nexit 101\n' > ${SIDUS}/usr/sbin/policy-rc.d chmod +x ${SIDUS}/usr/sbin/policy-rc.d
* des paquets exigent l'accès à la liste des processus, du système, des périphériques, de la mémoire virtuelle, des pointeurs de périphériques. Nous devons donc “binder” le montage de ces dossiers du système hôte au système SIDUS :
sidus mount -t proc none /proc sidus mount -t sysfs sys /sys mount --bind /dev/pts ${SIDUS}/dev/pts
• Définition du mot de passe root
(à changer ensuite)…
echo "root:MyStrongPassword" | sidus chpasswd
• Installation de paquets jugés nécessaires
(les 2 principaux à ne surtout pas oublier étant dracut
et aufs-dkms
! )
sidus apt-get update sidus apt-get -y install aptitude dselect dracut dracut-core dracut-network isc-dhcp-common isc-dhcp-client openssh-server locales firmware-linux-nonfree bridge-utils firmware-linux firmware-bnx2 dstat sysstat iftop htop iotop emacs lsof tshark mbw strace memtest86 dbench iozone3 psmisc console-setup less vim nscd nfs-common stressapptest mlocate net-tools hwloc time ssh sidus apt-get -y install linux-image-${ARCH} linux-headers-${ARCH} # pour architectures 32 bits Intel sidus apt-get -y install linux-image-686-pae linux-headers-686-pae linux-image-586 linux-headers-586
Sous architectures 32 bits, 2 noyaux sont à intégrer
• Paramétrage de la localisation, la langue, le fuseau horaire à partir du serveur lui même :
mv ${SIDUS}/etc/locale.gen ${SIDUS}/etc/locale.gen.orig mv ${SIDUS}/etc/timezone ${SIDUS}/etc/timezone.orig mv ${SIDUS}/etc/default/keyboard ${SIDUS}/etc/default/keyboard.orig cp /etc/locale.gen ${SIDUS}/etc/locale.gen cp /etc/timezone ${SIDUS}/etc/timezone cp /etc/default/keyboard ${SIDUS}/etc/default/keyboard sidus locale-gen sidus dpkg-reconfigure tzdata sidus dpkg-reconfigure locales
• Installation de l'environnement graphique de poste de travail et d'un environnement plus léger
sidus tasksel install desktop sidus tasksel install xfce-desktop
• Purge des paquets qui foutent le bronx pour une utilisation dans XFCE
sidus apt-get purge -y network-manager modemmanager gdm3 gnome-session gnome-terminal nano vim-tiny sidus apt-get clean
• Paramétrage d'un boot par NFS utilisant Dracut
mkdir ${SIDUS}/usr/lib/dracut/modules.d/90sidus wget -O ${SIDUS}/usr/lib/dracut/modules.d/90sidus/module-setup.sh ${HTTP}/module-setup.sh wget -O ${SIDUS}/usr/lib/dracut/modules.d/90sidus/sidus-mount.sh ${HTTP}/sidus-mount.sh chmod 755 ${SIDUS}/usr/lib/dracut/modules.d/90sidus/*.sh
• Modification du bail DHCP (sinon ça coupe l'accès au client au bout de quelques minutes)…
sed -i "s/=\$new_dhcp_lease_time/=forever/" ${SIDUS}/usr/lib/dracut/modules.d/35network-legacy/dhclient-script.sh
• Création du démarreur à partir de Dracut
Attention : il faut générer l'initrd
en chroot uniquement !
Sinon il ne prend pas en compte les modules overlay
et aufs
, même lorsque que l'on charge les modules à l'aide de modprobe
…
sidus dpkg-reconfigure dracut
• Vérification que le démarreur comprend bien les composants demandés
sidus ls /boot/ | grep initrd | tail -1 | while read INITRD ; do sidus lsinitrd /boot/$INITRD | egrep '(sidus|overlay|aufs)'; done
Normalement apparaissent au moins les sorties : <code> -rwxr-xr-x 1 root root 946 Jul 1 09:50 usr/lib/dracut/hooks/pre-pivot/10-overlay-mount.sh -rwxr-xr-x 1 root root 1695 Oct 3 2017 usr/lib/dracut/hooks/pre-pivot/10-sidus-mount.sh drwxr-xr-x 1 root root 0 Nov 18 14:25 usr/lib/modules/5.9.0-1-amd64/kernel/fs/overlayfs -rw-r–r– 1 root root 282436 Oct 17 13:14 usr/lib/modules/5.9.0-1-amd64/kernel/fs/overlayfs/overlay.ko </code>
• Suppression du hostname pour le paramétrage automatique du HOST
sidus rm /etc/hostname
• Définition de l'interface de loopback
tee ${SIDUS}/etc/network/interfaces <<EOF auto lo iface lo inet loopback EOF
Pour la résolution DNS
wget -O ${SIDUS}/etc/resolv.conf $HTTP/resolv.conf.sidus
• Pour le tuning système associé aux interfaces réseau
wget -O ${SIDUS}/etc/sysctl.d/gc.conf $HTTP/gc.conf
• Pour dépasser les limitations d'exploitation :
mv ${SIDUS}/etc/security/limits.conf ${SIDUS}/etc/security/limits.conf.orig wget -O ${SIDUS}/etc/security/limits.conf $HTTP/limits.conf
sidus apt-get install nfs-common mv ${SIDUS}/etc/default/nfs-common ${SIDUS}/etc/default/nfs-common.orig mv ${SIDUS}/etc/idmapd.conf ${SIDUS}/etc/idmapd.conf.orig cp /etc/default/nfs-common ${SIDUS}/etc/default/nfs-common cp /etc/idmapd.conf ${SIDUS}/etc/idmapd.conf wget -O ${SIDUS}/etc/fstab $HTTP/fstab echo -e '#!/bin/bash\n\n# Mount /home folder\nmount /home\n\nexit 0' > ${SIDUS}/etc/rc.local chmod 755 ${SIDUS}/etc/rc.local
• Démontage du cordon ombilical avec le système
sidus umount -l /proc sidus umount -l /sys sidus umount -l /dev/pts sidus dpkg-reconfigure dracut
• Rajout de AUFS dans /etc/updatedb.conf
sidus mv /etc/updatedb.conf /etc/updatedb.conf.orig wget -O ${SIDUS}/etc/updatedb.conf $HTTP/updatedb.conf
• Rajout dans /etc/security/group.conf
cp ${SIDUS}/etc/security/group.conf ${SIDUS}/etc/security/group.conf.orig sed -i "s/\#\ End/\*;\*;\*;Al0000-2400;plugdev,fuse,scanner,dialout,video,audio,floppy,cdrom,disk,docker\n\#\ End/g" ${SIDUS}/etc/security/group.conf
• Copier l'initrd et le vmlinuz sur votre serveur tftp
ls ${SIDUS}/boot/initrd* | while read INITRD; do EXTENSION=$(echo ${SIDUS} | awk -F'/' '{ print $NF }'); NEWINITRD=$(echo $INITRD | awk -F'/' '{ print $NF}')@$EXTENSION; cp $INITRD /srv/tftp/$NEWINITRD ; chmod 644 /srv/tftp/$NEWINITRD ; cd /srv/tftp/efi64 ; ln -s ../$NEWINITRD $NEWINITRD ; done ls ${SIDUS}/boot/vmlinuz* | while read KERNEL; do EXTENSION=$(echo ${SIDUS} | awk -F'/' '{ print $NF }'); NEWKERNEL=$(echo $KERNEL | awk -F'/' '{ print $NF}')@$EXTENSION; cp $KERNEL /srv/tftp/$NEWKERNEL ; chmod 755 /srv/tftp/$NEWKERNEL ; cd /srv/tftp/efi64 ; ln -s ../$NEWKERNEL $NEWKERNEL ; done
ls ${SIDUS}/boot/initrd* | while read INITRD; do EXTENSION=$(echo ${SIDUS} | awk -F'/' '{ print $NF }'); NEWINITRD=$(echo $INITRD | awk -F'/' '{ print $NF}')@$EXTENSION; cp $INITRD /srv/tftp/$NEWINITRD ; chmod 644 /srv/tftp/$NEWINITRD ; cd /srv/tftp/efi32 ; ln -s ../$NEWINITRD $NEWINITRD ; done ls ${SIDUS}/boot/vmlinuz* | while read KERNEL; do EXTENSION=$(echo ${SIDUS} | awk -F'/' '{ print $NF }'); NEWKERNEL=$(echo $KERNEL | awk -F'/' '{ print $NF}')@$EXTENSION; cp $KERNEL /srv/tftp/$NEWKERNEL ; chmod 755 /srv/tftp/$NEWKERNEL ; cd /srv/tftp/efi32 ; ln -s ../$NEWKERNEL $NEWKERNEL ; done
• Vérifiez que vous avez bien créé votre menu de démarrage sur le serveur PXE pour pouvoir démarrer votre image sidus, sinon veuillez exécuter l'étape décrite ici.
• Création (optionnelle) des comptes utilisateurs : les comptes créés sont les 24 lettres grecques, et les UID créés le sont des UID 1001 à 1024 :
mkdir /etc/scripts wget -O ${SIDUS}/etc/scripts/CreateUsers.sh $HTTP/CreateUsers.sh chmod 755 ${SIDUS}/etc/scripts/CreateUsers.sh /etc/scripts/CreateUsers.sh ${SIDUS}
Il y a 3 approches pour maintenir une instance SIDUS :
Pour une architecture x84_64 ou AMD64
export SIDUS=/srv/nfsroot/jessie64nfs alias sidus="DEBIAN_FRONTEND=noninteractive chroot ${SIDUS} $@" ARCH=amd64
Pour une architecture i386
export SIDUS=/srv/nfsroot/jessie32nfs alias sidus="DEBIAN_FRONTEND=noninteractive setarch i686 chroot ${SIDUS} $@" ARCH=i386
Il suffit d'exploiter la commande sidus
:
sidus <MaCommandeAMoi>
L'alias utilisé dans l'installation peut-être défini réglée dans son shell.
sidus mount -t proc none /proc sidus mount -t sysfs sys /sys mount --bind /dev/pts ${SIDUS}/dev/pts
sidus <MaCommandeAMoi>
sidus umount -l /proc sidus umount -l /sys sidus umount -l /dev/pts
Le /etc/exports
comprend l'adresse 10.20.15.253
laquelle permet le montage de la racine en Read/Write. Il faut donc permettre le montage d'un machine et une seule en Read/Write.
/srv/nfsroot/buster64nfs 10.20.15.253/255.255.255.255(rw,no_subtree_check,async,no_root_squash) 10.20.15.0/255.255.255.0(ro,no_subtree_check,async,no_root_squash) /srv/nfsroot/buster32nfs 10.20.15.253/255.255.255.255(rw,no_subtree_check,async,no_root_squash) 10.20.15.0/255.255.255.0(ro,no_subtree_check,async,no_root_squash)
Le fichier /etc/dhcp/dhcpd.conf
comprend la définition de cette machine master
host master { fixed-address 10.20.15.253; hardware ethernet 08:00:aa:bb:cc:dd; }
Il faut maintenant associer cette adresse MAC dans la configuration du serveur TFTP à un menu de démarrage spécifique.
wget -O /srv/tftp/pxelinux.cfg/master ${HTTP}/master cd /srv/tftp/pxelinux.cfg ln -s master 01-08-00-aa-bb-cc-dd
En regardant dans le menu, nous avons /srv/tftp/pxelinux.cfg/master
, pour le lancement en
LABEL master64 MENU LABEL SIDUS based on Debian Jessie on x86_64 : Read/Write mode KERNEL vmlinuz-3.16.0-4-amd64.sidus MENU default APPEND console=tty1 initrd=initrd.img-3.16.0-4-amd64.sidus rd.shell ip=dhcp root=nfs:10.20.15.254:/srv/nfsroot/jessie64nfs:vers=3,rw,rsize=32768,wsize=32768,tcp,nolock,noatime,actimeo=1,nocto,hard,intr bridge=sidus:eth0 ipv6.disable=1 bnx2.disable_msi=1 intel_pstate=disable
Les seules différences avec le démarrage par défaut sont :
aufs
dans les optionsrw
dans les options de montage du NFSROOT
Il est aussi possible de démarrer l'instance sur une autre machine en sélectionnant dans la configuration de la machine virtuelle l'interface réseau que vous comptez utiliser (généralement eth0
),
Dans les deux cas, le forwarding doit être activé : /proc/sys/net/ipv4/ip_forward
mis à 1
.