Projet

Général

Profil

Fat Client without desktop » Historique » Version 2

« Précédent - Version 2/19 (diff) - Suivant » - Version actuelle
Laurent Flori, 19/12/2017 15:48


Client lourd sans bureau graphique et log centralisés sur le serveur

Démarrer une lame depuis le réseau avec un système complet

  • Démarrer une machine en pxe
  • Monter le root filesystem depuis ndb
  • Installer et configurer ssh-server
  • Gestion des logs centralisés

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

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 << 'EOF'
#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

EOF

- Paramétrer le serveur ssh

cat > 050-ssh-custom << 'EOF'
#Gestion du serveur ssh:
# - activation
# - connexion du root par clef
# - copie de la clef du root
case "$MODE" in
    finalization)
        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/id_rsa.pub > $BASE/$CHROOT/root/.ssh/authorized_keys
        ;;
esac
EOF

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-update-image --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

ltsp-chroot -a Eole -m
systemctl enable systemd-journal-upload

On peut supprimer rsyslog de l'image

apt-get remove rsyslog

On peut reconstuire l'image

exit
ltsp-update-image Eole