Ceci est une ancienne révision du document !


Under construction… This page is being translated !

SIDUS

Tous les éléments présents dans cette documentation, les morceaux de code, etc entrent dans le cadre de la licence CeCILL. Il est donc nécessaire de respecter les 4 libertés fondamentales des logiciels libres pour exploiter SIDUS dans sa propre infrastructure. Si vous comptez utiliser SIDUS dans votre infrastructure, faites le savoir à son auteur, Centre Blaise Pascal ou citez le !

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 :

  • l'unicité de configuration : deux machines démarrant sous Sidus ont exactement le même système d'exploitation
  • l'usage des ressources locales : les processeurs et mémoire vive sollicités sont ceux de la machine locale

SIDUS n'est donc :

  • ni LTSP pour Linux Terminal Server Project : LTSP propose une gestion simplifiée de terminaux légers en offrant un accès X11 ou RDP à un serveur : ce dernier supporte ainsi toute la charge de traitement. A contrario, SIDUS exploite entièrement (ou à discrétion de l'utilisateur) toute la machine qui s'y raccroche. Seul le stockage du système d'exploitation est déporté sur des machines tierces.
  • ni FAI pour Fully Automatic Installation : FAI ou Kickstart proposent une installation complète simplifiée permettant de limiter voire d'éliminer toute action de l'administrateur. A contrario, SIDUS propose un système unique dans un arbre intégrant à la fois le système de base et toutes les applications installées manuellement.
  • ni un LiveCD sur réseau : un LiveCD démarre un système minimaliste, nécessairement figé. Il est toujours possible de créer son propre LiveCD mais c'est une opération assez lourde. Avec SIDUS, il est possible d'installer à la volée sur tous ses clients un logiciel instantanément, de le reconfigurer.

CQQCOQP

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.

Pourquoi ?

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).

Quoi ?

Une approche permettant le démarrage en réseau et l'offre d'un système parfaitement générique pour toutes les machines.

Quand ?

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).

Pour Qui ?

SIDUS s'adresse à tous ceux qui veulent se simplifier la tâche et qui :

  • disposent de groupes de machines ayant toute la même destination :
    • des noeuds de cluster de calcul
    • des machines de salle libre service
    • des machines virtuelles dans le cadre de formations
  • veulent analyser des équipements sans jamais toucher au système

Où ?

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.

Combien ?

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.

Comment ?

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 !

Installation

Préparation du système

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 :

  • le service DHCP fournit à notre client une adresse IP mais diffuse deux informations complémentaires : l'adresse du serveur TFTP via la variable next-server et le nom du binaire PXE, souvent nommé pxelinux.0.
  • le service TFTP entre alors en scène. Il offre par TFTP tout le nécessaire permettant le démarrage du système : le binaire 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 -).
  • le serveur NFS s'invite alors dans la boucle : il va offrir la racine du système par son protocole (donc NFSroot). C'est donc dans cette racine, par exemple /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 :

  • réseau IP SIDUS de domaine 'sidus.zone' sur des IP '10.20.15.0' à '10.20.17.254'
  • adresse de passerelle, également serveur DNS, DHCP, TFTP, NFS sur '10.20.17.254'
  • adresse IP externe réglée par DHCP sur 'eth0'
  • adresse IP interne sur réseau SIDUS définie statiquement sur l'interface 'eth1' en '10.20.17.254'

Installation de la passerelle

De manière à ne pas avoir à trop détailler les fichiers de configuration de chaque service, nous fournissons les fichiers définissant les services avec les paramètres ci-dessus. Ces fichiers seront téléchargés à partir d'une archive HTTP que nous définissons sous forme d'une variable d'environnement $HTTP :

export HTTP=http://www.cbp.ens-lyon.fr/sidus/stretch

Paramétrage des interfaces réseau

mv /etc/network/interfaces /etc/network/interfaces.orig
wget -O /etc/network/interfaces ${HTTP}/interfaces
mv /etc/sysctl.conf /etc/sysctl.conf.orig
wget -O /etc/sysctl.conf ${HTTP}/sysctl.conf

Montage de l'interface interne

ifup eth1

Installation du serveur DNS

Installation du serveur DNS Bind9 :

apt-get install bind9

Configuration du serveur DNS :

# Sauvegarde de la configuration initiale (reflexe g33k)
cp -a /etc/bind /etc/bind.orig
# Copie des descriptions de resolutions directes et inverses pour les zones
wget -O /etc/bind/db.sidus.zone ${HTTP}/db.sidus.zone
wget -O /etc/bind/db.17.20.10 ${HTTP}/db.17.20.10
# Renommage des fichiers de configuration initiaux
mv /etc/bind/named.conf.local /etc/bind/named.conf.local.orig
mv /etc/bind/named.conf.options /etc/bind/named.conf.options.orig
# Telechargement des fichiers de configurations
wget -O /etc/bind/named.conf.local ${HTTP}/named.conf.local
wget -O /etc/bind/named.conf.options ${HTTP}/named.conf.options
# Relance du serveur
systemctl restart bind9.service 

Paramétrage des interfaces réseau

mv /etc/resolv.conf /etc/resolv.conf.orig
wget -O /etc/resolv.conf ${HTTP}/resolv.conf.server

Vérification du serveur DNS

  • A la commande host filer.sidus.zone localhost le serveur doit répondre
filer.sidus.zone is an alias for gateway.sidus.zone. 
gateway.sidus.zone has address 10.20.17.254
  • A la commande host 10.20.17.254 127.0.0.1
254.17.20.10.in-addr.arpa domain name pointer gateway.sidus.zone.

Le serveur DNS effectue les résolutions de noms en direct ou en inverse pour toutes les machines de la classe IP 10.20.17.0/24 ou zone sidus.zone. La machine dhcp-35 aura comme IP 10.20.15.37.

Installation du serveur DHCP

Installation du serveur DHCP

apt-get install isc-dhcp-server

Configuration du serveur DHCP

cp -a /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.orig
cp -a /etc/dhcp /etc/dhcp.orig
cp -a /etc/dhcp/dhclient.conf /etc/dhclient.conf.orig
cp -a /etc/dhcp/dhcpd.conf /etc/dhcpd.conf.orig
# Telechargement des fichiers de configurations
wget -O /etc/default/isc-dhcp-server ${HTTP}/isc-dhcp-server
wget -O /etc/dhcp/dhclient.conf ${HTTP}/dhclient.conf
wget -O /etc/dhcp/dhcpd.conf ${HTTP}/dhcpd.conf
# Redemarrage du serveur DHCP
systemctl restart isc-dhcp-server.service

Pour le serveur DHCP, dans le fichier de configuration /etc/dhcp/dhcpd.conf nous avons :

  • le pointage vers pxelinux.0 pour toutes les versions de démarrage : BIOS, UEFI 32 bits et UEFI 64 bits :
    if option architecture-type = 00:00 {
     filename "pxelinux.0";
     } elsif option architecture-type = 00:09 {
     filename "efi64/syslinux.efi";
     } elsif option architecture-type = 00:07 {
     filename "efi64/syslinux.efi";
     } elsif option architecture-type = 00:06 {
     filename "efi32/syslinux.efi";
     } else {
     filename "pxelinux.0"; 
    }
  • la definition sur serveur TFTP à pointer :
    next-server 10.20.17.254;
    allow booting;

Installation du serveur TFTP

• Installation du paquet serveur TFTP

apt-get install tftpd-hpa
apt-get install pxelinux syslinux-common syslinux-efi memtest86 memtest86+

• Installation des arborescences et des menus

mkdir /srv/tftp/pxelinux.cfg /srv/tftp/efi32 /srv/tftp/efi64
# Importation des composants pour le boot BIOS
cd /usr/lib/syslinux/modules/bios
cp ldlinux.c32 libcom32.c32 libutil.c32 vesamenu.c32 /srv/tftp/
cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftp
cd /srv/tftp
wget -O /srv/tftp/Sidus_Landscape.png ${HTTP}/Sidus_Landscape.png
cp /boot/memtest86.bin memtest86
cp /boot/memtest86+.bin memtest86+
# Importation des composants pour le boot EFI 32 bits
cd /usr/lib/syslinux/modules/efi32
cp ldlinux.e32 libcom32.c32 libutil.c32 vesamenu.c32 /srv/tftp/efi32
cd /srv/tftp/efi32
ln -s ../Sidus_Landscape.png Sidus_Landscape.png
ln -s ../pxelinux.cfg pxelinux.cfg
ln -s ../memtest86 memtest86
ln -s ../memtest86+ memtest86+
# Importation des composants pour le boot EFI 64 bits
cd /usr/lib/syslinux/modules/efi64
cp ldlinux.e64 libcom32.c32 libutil.c32 vesamenu.c32 /srv/tftp/efi64
cd /srv/tftp/efi64
ln -s ../Sidus_Landscape.png Sidus_Landscape.png
ln -s ../pxelinux.cfg pxelinux.cfg
ln -s ../memtest86 memtest86
ln -s ../memtest86+ memtest86+

• Paramétrage du serveur

cp -a /etc/default/tftpd-hpa /etc/default/tftpd-hpa.orig
# Telechargement des fichiers de configurations
wget -O /etc/default/tftpd-hpa ${HTTP}/tftpd-hpa

Configuration menu de démarrage

▶ Paramétrage des menu des démarrages possibles ◀

wget -O /srv/tftp/pxelinux.cfg/default ${HTTP}/default

Il est déjà possible de démarrer une machine par le réseau pour tester le serveur. Dans le menu présenté, il est possible de choisir les memtest86 pour, par exemple, tester sa mémoire.

Dans le dossier pxelinux.cfg, nous avons le fichier default. Voici un exemple de fichier de démarrage précisant au client tout ce qu'il faut pour démarrer.

PROMPT 0
TIMEOUT 30
DEFAULT menu.c32
 
LABEL stretch64overlay
      MENU LABEL SIDUS based on Debian Stretch on x86_64 : OverlayFS mode
      MENU default
      KERNEL vmlinuz-4.9.0-3-amd64@stretch64nfs
      APPEND console=tty1 initrd=initrd.img-4.9.0-3-amd64@stretch64nfs rd.shell sidus=overlay ip=dhcp root=nfs:10.20.17.254:/srv/nfsroot/stretch64nfs:vers=3,rsize=1048576,wsize=1048576,tcp,nolock,noatime,nocto,actimeo=1,intr,hard net.ifnames=0 modprobe.blacklist=nouveau ipv6.disable=1 sky2.disable_msi=1 bnx2.disable_msi=1 intel_pstate=disable kernel.dmesg_restrict=0
 
LABEL stretch64aufs
      MENU LABEL SIDUS based on Debian Stretch on x86_64 : AUFS mode
      #MENU default
      KERNEL vmlinuz-4.9.0-3-amd64@stretch64nfs
      APPEND console=tty1 initrd=initrd.img-4.9.0-3-amd64@stretch64nfs rd.shell sidus=aufs ip=dhcp root=nfs:10.20.17.254:/srv/nfsroot/stretch64nfs:vers=3,rsize=1048576,wsize=1048576,tcp,nolock,noatime,nocto,actimeo=1,intr,hard net.ifnames=0 modprobe.blacklist=nouveau ipv6.disable=1 sky2.disable_msi=1 bnx2.disable_msi=1 intel_pstate=disable kernel.dmesg_restrict=0

Installation du serveur NFS

Le serveur NFS va servir à offrir deux partages :

  • le partage de SIDUS
  • le partage des comptes utilisateurs
apt-get install nfs-common nfs-kernel-server
cp -a /etc/default/nfs-common /etc/default/nfs-common.orig
cp -a /etc/default/nfs-kernel-server /etc/default/nfs-kernel-server.orig
cp -a /etc/idmapd.conf /etc/default/idmapd.conf.orig
cp -a /etc/exports /etc/exports.orig
cp -a /etc/fstab /etc/fstab.orig
# Telechargement des fichiers de configurations
wget -O /etc/default/nfs-common ${HTTP}/nfs-common
wget -O /etc/default/nfs-kernel-server ${HTTP}/nfs-kernel-server
wget -O /etc/idmapd.conf ${HTTP}/idmapd.conf
wget -O /etc/exports ${HTTP}/exports

Paramétrage du dossier des comptes utilisateurs

mkdir -p /export/home
echo "/home /export/home none bind 0 0" >> /etc/fstab
mount -a

Création des racines des instances SIDUS

mkdir -p /srv/nfsroot/stretch64nfs /srv/nfsroot/stretch32nfs

Si le volume racine est en BTRFS, il peut être judicieux de créer un sous-volume pour chaque instance :

btrfs subvolume create /srv/nfsroot/stretch64nfs
btrfs subvolume create /srv/nfsroot/stretch32nfs
/etc/init.d/nfs-common restart
/etc/init.d/nfs-kernel-server restart

La configuration proposée dans le /etc/exports

  • les deux lignes permettant l'offre de la partition utilisateur /home
    • /export 10.20.17.0/255.255.255.0(rw,fsid=0,async,no_subtree_check)
    • /export/home 10.20.17.0/255.255.255.0(rw,async,nohide,insecure,no_subtree_check)
  • deux lignes correspondant à l'offre de deux instances SIDUS :
    • Instance pour système 64 bits : un partage en lecture pour les clients, un partage en lecture/écriture pour le précurseur
      • /srv/nfsroot/stretch64nfs 10.20.17.0/255.255.255.0(ro,no_subtree_check,async,no_root_squash)
      • /srv/nfsroot/stretch64nfs 10.20.17.253/255.255.255.255(rw,no_subtree_check,async,no_root_squash)
    • Instance pour système 32 bits : un partage en lecture pour les clients, un partage en lecture/écriture pour le précurseur
      • /srv/nfsroot/stretch32nfs 10.20.17.0/255.255.255.0(ro,no_subtree_check,async,no_root_squash)
      • /srv/nfsroot/stretch32nfs 10.20.17.253/255.255.255.255(rw,no_subtree_check,async,no_root_squash)

Les machines du réseau 10.20.17.0/24 auront un accès en lecture seule, la machine 10.20.17.253 un accès en lecture/écriture, laquelle sera très utile pour l'administration de l'instance.

Une fois ces 4 services DNS, DHCP, TFTP et NFS configurés, nous pouvons installer notre Sidus complet.

Debootstrap

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.

Installation de debootstrap

apt-get install debootstrap

Pour une architecture x84_64 ou AMD64

export SIDUS=/srv/nfsroot/stretch64nfs
alias sidus="DEBIAN_FRONTEND=noninteractive chroot ${SIDUS} $@"
ARCH=amd64

Pour une architecture i386

export SIDUS=/srv/nfsroot/stretch32nfs
alias sidus="DEBIAN_FRONTEND=noninteractive setarch i686 chroot ${SIDUS} $@"
ARCH=i386

• Lancement de l'installation

debootstrap --arch $ARCH --components='main,contrib,non-free' stretch $SIDUS http://ftp.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 aufs-dkms aufs-tools 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 unscd nfs-common stressapptest mlocate hwloc time net-tools linux-image-${ARCH} linux-headers-${ARCH}

• 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/40network/dhclient-script.sh

• Création du démarreur à partir de Dracut

sidus dpkg-reconfigure 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

• Vérification que le démarreur comprend bien les composants demandés

ls ${SIDUS}/boot/initrd.img-*-$(echo ${ARCH} | sed 's/i386/686/g') | xargs -I '{}' ${SIDUS}/usr/bin/lsinitrd '{}' | egrep '(overlay.ko|aufs.ko|sidus)'

Normalement apparaissent au moins les sorties:

-rwxr-xr-x   1 root     root         1695 Oct  3 11:46 lib/dracut/hooks/pre-pivot/10-sidus-mount.sh
-rw-r--r--   1 root     root        60300 Nov 28 16:22 lib/modules/4.9.0-4-686/kernel/fs/overlayfs/overlay.ko
-rw-r--r--   1 root     root       449800 Nov 28 16:22 lib/modules/4.9.0-4-686/updates/dkms/aufs.ko

• 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

cp /etc/resolv.conf ${SIDUS}/etc/resolv.conf

• 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

• 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\n\#\ End/g" ${SIDUS}/etc/security/group.conf

• Copier l'initrd et le vmlinuz sur votre serveur tftp

  • Pour une architecture amd64
cp ${SIDUS}/boot/initrd.img-*-${ARCH} /srv/tftp
cp ${SIDUS}/boot/vmlinuz-*-${ARCH} /srv/tftp
chmod 644 /srv/tftp/initrd.img-*-${ARCH}
rename "s/amd64/amd64.sidus/g" /srv/tftp/*${ARCH}
cd /srv/tftp/efi64
ls ../*${ARCH}.sidus | xargs -I {} sh -c 'export NAME=$(echo "{}" | sed -e "s/\.\.\///g") ; ln -s ../$NAME $NAME'
  • Pour une architecture i386
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}

Administration d'une session

Il y a 3 approches pour maintenir une instance SIDUS :

  1. utiliser un chroot sur la racine directement
  2. utiliser un chroot avec mise en place du cordon ombilical
  3. utiliser une machine (virtuelle ou pas) comme “maître” de configuration

Pour une architecture x84_64 ou AMD64

export SIDUS=/srv/nfsroot/stretch64nfs
alias sidus="DEBIAN_FRONTEND=noninteractive chroot ${SIDUS} $@"
ARCH=amd64

Pour une architecture i386

export SIDUS=/srv/nfsroot/stretch32nfs
alias sidus="DEBIAN_FRONTEND=noninteractive setarch i686 chroot ${SIDUS} $@"
ARCH=i386

Approche chroot simple

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.

Approche chroot élaborée

  • établissement du cordon ombilical :
    sidus mount -t proc none /proc
    sidus mount -t sysfs sys /sys
    mount --bind /dev/pts ${SIDUS}/dev/pts
  • opérations de maintenance :
    sidus <MaCommandeAMoi>
  • coupure du cordon ombilical :
    sidus umount -l /proc
    sidus umount -l /sys
    sidus umount -l /dev/pts

Approche ''master''

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/stretch64nfs 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/stretch32nfs 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 :

  • suppression de aufs dans les options
  • présence de rw dans les options de montage du NFSROOT

Emmanuel Quemener 2015/07/06 17:09

Démarrage sur une machine tierce

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),

  • soit en connectant directement la machine à une autre via le port Ethernet, une condition est nécessaire
    • un port RJ45 supportant l'autoconfiguration en port croisé
  • soit en connectant la machine hôte et la machine cliente sur un commutateur externe

Dans les deux cas, le forwarding doit être activé : /proc/sys/net/ipv4/ip_forward mis à 1.

en/developpement/productions/sidus4stretch.1511892698.txt.gz · Dernière modification: 2017/11/28 19:11 par equemene