Projet

Général

Profil

Fat Client without desktop » Historique » Version 3

Version 2 (Laurent Flori, 19/12/2017 15:48) → Version 3/19 (Laurent Flori, 19/12/2017 15:53)

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

h3. Préparer le serveur

Génrérer une pare de clefs ssh pour root

<pre>
ssh-keygen -t rsa
</pre>

Installer les paquets nécessaires

<pre>
apt-get install dnsmasq pxelinux squashfs-tools nbd-server ltsp-server debootstrap systemd-journal-remote
</pre>

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:
<pre>
mkdir -p /var/log/journal/remote
chown -R systemd-journal-remote /var/log/journal/remote/
</pre>

Créer un fichier /root/make_certs avec le contenu suivant
<pre>
#!/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
</pre>

Générer les certficats
<pre>
chmod +x make_certs && ./make_certs
</pre>

Mettre en place les clefs pour le serveur

<pre>
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/
</pre>

Editer la configuration du service systemd-journal-remote:
<pre>
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
</pre>

Redémarrer le serveur systemd-journal-remote
<pre>
systemctl restart systemd-journal-remote
</pre>

Configuration (très minimale) du serveur dnsmasq

<pre>
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
</pre>

Créer les répertoires tftp
<pre>
mkdir -p /var/lib/tftpboot/ltsp/Eole
</pre>
Redémarrer le server dnsmasq
<pre>
systemctl restart dnsmasq
</pre>

h4. Configuration de l'environement de construction des images lstp

Se rendre dans le répertoire /usr/share/ltsp/plugins/ltsp-build-client/:
<pre>
cd /usr/share/ltsp/plugins/ltsp-build-client/
cp -a Ubuntu Eole && cd Eole
</pre>

Supprimer un plugin (on ne veut jamais de serveur graphique)
<pre>
rm 030-artwork
</pre>
On crée deux plugins:

- Gérer correctement le path nbdroot au boot

<pre>
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
</pre>

- Paramétrer le serveur ssh

<pre>
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
</pre>

Préparer un fichier de construction pour le client:

<pre>
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
</pre>

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

<pre>
ltsp-update-image --config /etc/ltsp/ltsp-build-client.conf --prompt-rootpass --skipimage
</pre>

Installer les clefs pour systemd-journal-upload
<pre>
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/
</pre>

Configurer systemd-journal-upload dans l'image
<pre>
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
</pre>

Activer systemd-journal-upload au démarrage

<pre>
ltsp-chroot -a Eole -m
systemctl enable systemd-journal-upload
</pre>

On peut supprimer rsyslog de l'image
<pre>
apt-get remove rsyslog
</pre>

On peut reconstuire l'image
<pre>
exit
ltsp-update-image Eole
</pre>