Fat Client without desktop » Historique » Version 10
« Précédent -
Version 10/19
(diff) -
Suivant » -
Version actuelle
Laurent Flori, 21/12/2017 10:25
Client lourd sans bureau graphique et log centralisés sur le serveur¶
- Démarrer une machine en pxe
- Monter le root filesystem depuis ndb
- Installer et configurer ssh-server
- Gestion des logs centralisés
Pour reproduire instancier une machine aca eolebase 2.6.2 (NON instanciée) avec une seconde interface sur le réseau pédago1
cat >> /etc/network/interfaces << EOF auto ens5 iface ens5 inet static address 10.1.2.254 netmask 255.255.255.0 EOF ifup ens5 Query-Auto
Préparer le serveur¶
Génrérer une pare de clefs ssh pour root
ssh-keygen -t rsa
Installer les paquets nécessaires
apt-get install dnsmasq pxelinux squashfs-tools nbd-server ltsp-server debootstrap systemd-journal-remote
Configuration du serveur de log
- Créer et donner les droits adéquats au répertoire de destination pour les logs des hôtes distants:
mkdir -p /var/log/journal/remote chown -R systemd-journal-remote /var/log/journal/remote/
Créer un fichier /root/make_certs avec le contenu suivant
#!/bin/bash SERVER=10.1.2.254 CLIENT=client mkdir -p certs/{server,client} && cd certs openssl req -newkey rsa:2048 -days 3650 -x509 -nodes -out ca.pem -keyout ca.key -subj '/CN=Certificate authority/' cat >ca.conf <<EOF [ ca ] default_ca = this [ this ] new_certs_dir = . certificate = ca.pem database = ./index private_key = ca.key serial = ./serial default_days = 3650 default_md = default policy = policy_anything [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional EOF touch index echo 0001 >serial #Server openssl req -newkey rsa:1024 -nodes -out ./server/$SERVER.csr -keyout ./server/$SERVER.key -subj "/CN=$SERVER/" openssl ca -batch -config ca.conf -notext -in ./server/$SERVER.csr -out ./server/$SERVER.pem #Client openssl req -newkey rsa:1024 -nodes -out ./client/$CLIENT.csr -keyout ./client/$CLIENT.key -subj "/CN=$CLIENT/" openssl ca -batch -config ca.conf -notext -in ./client/$CLIENT.csr -out ./client/$CLIENT.pem
Générer les certficats
chmod +x make_certs && ./make_certs
Mettre en place les clefs pour le serveur
mkdir /etc/ssl/journal cp /root/certs/ca.pem /etc/ssl/journal/ cp /root/certs/server/10.1.2.254{.key,.pem} /etc/ssl/journal/
Editer la configuration du service systemd-journal-remote:
cat > /etc/systemd/journal-remote.conf << EOF [Remote] Seal=false SplitMode=host ServerKeyFile=/etc/ssl/journal/10.1.2.254.key ServerCertificateFile=/etc/ssl/journal/10.1.2.254.pem TrustedCertificateFile=/etc/ssl/journal/ca.pem EOF
Redémarrer le serveur systemd-journal-remote
systemctl restart systemd-journal-remote
Configuration (très minimale) du serveur dnsmasq
cp /etc/dnsmaq.conf /etc/dnsmasq.conf.orig cat > /etc/dnsmasq.conf << EOF dhcp-boot=pxelinux.0 dhcp-range=10.1.2.10,10.1.2.50,12h enable-tftp interface=ens5 tftp-root=/var/lib/tftpboot/ltsp/Eole EOF
Créer les répertoires tftp
mkdir -p /var/lib/tftpboot/ltsp/Eole
Redémarrer le server dnsmasq
systemctl restart dnsmasq
Configuration de l'environement de construction des images lstp¶
Se rendre dans le répertoire /usr/share/ltsp/plugins/ltsp-build-client/:
cd /usr/share/ltsp/plugins/ltsp-build-client/ cp -a Ubuntu Eole && cd Eole
Supprimer un plugin (on ne veut jamais de serveur graphique)
rm 030-artwork
On crée deux plugins:
- Gérer correctement le path nbdroot au boot
cat > 031-nbd-root << 'EndPlugin' #Gestion du path nbd pour l'image embarquée case "$MODE" in after-install) sed -i 's?CMDLINE_NBD.*$?CMDLINE_NBD="root=/dev/nbd0 nbdroot='$NBDSERVER${BASE%/}/$CHROOT'"?' $BASE/$CHROOT/etc/ltsp/update-kernels.conf ;; esac EndPlugin
- Paramétrer le serveur ssh
cat > 050-ssh-custom << 'EndPlugin' #Gestion du serveur ssh: # - activation # - connexion du root par clef # - copie de la clef du root case "$MODE" in commandline) add_option "root-ssh-pubkey" "`eval_gettext "enable root access pubkey"`" "advanced" "true" ;; configure) if [ -n "$option_root_ssh_pubkey_value" ]; then ROOT_SSH_PUBKEY="$option_root_ssh_pubkey_value" fi ;; finalization) if [ $ROOT_SSH_PUBKEY ];then echo "Enabling SSH server" sed -i 's/^ssh/#ssh/' $BASE/$CHROOT/usr/share/ltsp/init-ltsp.d/50-rm-system-services sed -i 's/^#PermitRootLogin/PermitRootLogin/' $BASE/$CHROOT/etc/ssh/sshd_config mkdir $BASE/$CHROOT/root/.ssh cat $ROOT_SSH_PUBKEY > $BASE/$CHROOT/root/.ssh/authorized_keys sed -i 's?^etc/ssh/?#etc/ssh/?' /etc/ltsp/ltsp-update-image.excludes fi ;; esac EndPlugin
Préparer un fichier de construction pour le client:
cat > /etc/ltsp/ltsp-build-client.conf << 'EOF' VENDOR=Eole ARCH=amd64 BASE=/opt/ltsp CHROOT=${VENDOR} MIRROR="http://test-eole.ac-dijon.fr/ubuntu/" EXTRA_MIRROR="http://eole.ac-dijon.fr/eole eole-2.6.2 main cloud" APT_KEYS="/etc/apt/trusted.gpg.d/eole-archive-keyring.gpg" DIST=artful APT_GET_OPTS="-y --no-install-recommends" FAT_CLIENT_DESKTOPS="tmux" EARLY_PACKAGES="ltsp-client-core" LATE_PACKAGES="openssh-server systemd-journal-remote" EOF
Commenter les lignes pour les clefs ssh et pour .root dans le fichier /etc/ltsp/ltsp-update-image.excludes
Lancer la génération de l'image
ltsp-build-client --config /etc/ltsp/ltsp-build-client.conf --prompt-rootpass --skipimage
Installer les clefs pour systemd-journal-upload
mkdir /opt/ltsp/Eole/etc/ssl/journal/ cp /root/certs/ca.pem /opt/ltsp/Eole/etc/ssl/journal/ cp /root/certs/client/client{.pem,.key} /opt/ltsp/Eole/etc/ssl/journal/
Configurer systemd-journal-upload dans l'image
cat > /opt/ltsp/Eole/etc/systemd/journal-upload.conf << EOF [Upload] URL=10.1.2.254 ServerKeyFile=/etc/ssl/journal/client.key ServerCertificateFile=/etc/ssl/journal/client.pem TrustedCertificateFile=/etc/ssl/journal/ca.pem EOF
Activer systemd-journal-upload au démarrage et ssh
ltsp-chroot -a Eole -m systemctl enable systemd-journal-upload systemctl enable ssh
On peut supprimer rsyslog de l'image
apt-get remove rsyslog
On peut reconstuire l'image
exit ltsp-update-image Eole
Lancer la consultation des logs sur le le serveur
journalctl -D /var/log/journal/remote/ -f
Démarrer une machine en PXE et regarder les logs arriver sur le serveur