Projet

Général

Profil

Fat Client without desktop » Historique » Version 6

Laurent Flori, 19/12/2017 16:05

1 1 Laurent Flori
h1. Client lourd sans bureau graphique et log centralisés sur le serveur
2 1 Laurent Flori
3 1 Laurent Flori
Démarrer une lame depuis le réseau avec un système complet
4 1 Laurent Flori
5 1 Laurent Flori
    * Démarrer une machine en pxe
6 1 Laurent Flori
    * Monter le root filesystem depuis ndb
7 1 Laurent Flori
    * Installer et configurer ssh-server
8 1 Laurent Flori
    * Gestion des logs centralisés
9 1 Laurent Flori
10 1 Laurent Flori
h3. Préparer le serveur
11 1 Laurent Flori
12 1 Laurent Flori
Génrérer une pare de clefs ssh pour root
13 1 Laurent Flori
14 1 Laurent Flori
<pre>
15 1 Laurent Flori
ssh-keygen -t rsa
16 1 Laurent Flori
</pre>
17 1 Laurent Flori
18 1 Laurent Flori
Installer les paquets nécessaires
19 1 Laurent Flori
20 1 Laurent Flori
<pre>
21 1 Laurent Flori
apt-get install dnsmasq pxelinux squashfs-tools nbd-server ltsp-server debootstrap systemd-journal-remote
22 1 Laurent Flori
</pre>
23 1 Laurent Flori
24 1 Laurent Flori
Configuration du serveur de log
25 1 Laurent Flori
26 1 Laurent Flori
- Créer et donner les droits adéquats au répertoire de destination pour les logs des hôtes distants:
27 1 Laurent Flori
<pre>
28 1 Laurent Flori
mkdir -p /var/log/journal/remote
29 1 Laurent Flori
chown -R systemd-journal-remote /var/log/journal/remote/
30 1 Laurent Flori
</pre>
31 1 Laurent Flori
32 1 Laurent Flori
33 1 Laurent Flori
34 1 Laurent Flori
Créer un fichier /root/make_certs avec le contenu suivant
35 1 Laurent Flori
<pre>
36 1 Laurent Flori
#!/bin/bash
37 1 Laurent Flori
38 1 Laurent Flori
SERVER=10.1.2.254
39 1 Laurent Flori
CLIENT=client
40 1 Laurent Flori
41 1 Laurent Flori
mkdir -p certs/{server,client} && cd certs
42 1 Laurent Flori
43 1 Laurent Flori
openssl req -newkey rsa:2048 -days 3650 -x509 -nodes -out ca.pem -keyout ca.key -subj '/CN=Certificate authority/'
44 1 Laurent Flori
45 1 Laurent Flori
cat >ca.conf <<EOF
46 1 Laurent Flori
[ ca ]
47 1 Laurent Flori
default_ca = this
48 1 Laurent Flori
49 1 Laurent Flori
[ this ]
50 1 Laurent Flori
new_certs_dir = .
51 1 Laurent Flori
certificate = ca.pem
52 1 Laurent Flori
database = ./index
53 1 Laurent Flori
private_key = ca.key
54 1 Laurent Flori
serial = ./serial
55 1 Laurent Flori
default_days = 3650
56 1 Laurent Flori
default_md = default
57 1 Laurent Flori
policy = policy_anything
58 1 Laurent Flori
59 1 Laurent Flori
[ policy_anything ]
60 1 Laurent Flori
countryName             = optional
61 1 Laurent Flori
stateOrProvinceName     = optional
62 1 Laurent Flori
localityName            = optional
63 1 Laurent Flori
organizationName        = optional
64 1 Laurent Flori
organizationalUnitName  = optional
65 1 Laurent Flori
commonName              = supplied
66 1 Laurent Flori
emailAddress            = optional
67 1 Laurent Flori
EOF
68 1 Laurent Flori
69 1 Laurent Flori
touch index
70 1 Laurent Flori
echo 0001 >serial
71 1 Laurent Flori
72 1 Laurent Flori
#Server
73 1 Laurent Flori
openssl req -newkey rsa:1024 -nodes -out ./server/$SERVER.csr -keyout ./server/$SERVER.key -subj "/CN=$SERVER/"
74 1 Laurent Flori
openssl ca -batch -config ca.conf -notext -in ./server/$SERVER.csr -out ./server/$SERVER.pem
75 1 Laurent Flori
76 1 Laurent Flori
#Client
77 1 Laurent Flori
openssl req -newkey rsa:1024 -nodes -out ./client/$CLIENT.csr -keyout ./client/$CLIENT.key -subj "/CN=$CLIENT/"
78 1 Laurent Flori
openssl ca -batch -config ca.conf -notext -in ./client/$CLIENT.csr -out ./client/$CLIENT.pem
79 1 Laurent Flori
</pre>
80 1 Laurent Flori
81 2 Laurent Flori
Générer les certficats
82 2 Laurent Flori
<pre>
83 2 Laurent Flori
chmod +x make_certs && ./make_certs
84 2 Laurent Flori
</pre>
85 2 Laurent Flori
86 1 Laurent Flori
Mettre en place les clefs pour le serveur
87 1 Laurent Flori
88 1 Laurent Flori
<pre>
89 1 Laurent Flori
mkdir /etc/ssl/journal
90 1 Laurent Flori
cp /root/certs/ca.pem /etc/ssl/journal/
91 1 Laurent Flori
cp /root/certs/server/10.1.2.254{.key,.pem} /etc/ssl/journal/
92 1 Laurent Flori
</pre>
93 1 Laurent Flori
94 1 Laurent Flori
Editer la configuration du service systemd-journal-remote:
95 1 Laurent Flori
<pre>
96 1 Laurent Flori
cat > /etc/systemd/journal-remote.conf << EOF
97 1 Laurent Flori
[Remote]
98 1 Laurent Flori
 Seal=false
99 1 Laurent Flori
 SplitMode=host
100 1 Laurent Flori
 ServerKeyFile=/etc/ssl/journal/10.1.2.254.key
101 1 Laurent Flori
 ServerCertificateFile=/etc/ssl/journal/10.1.2.254.pem
102 1 Laurent Flori
 TrustedCertificateFile=/etc/ssl/journal/ca.pem
103 1 Laurent Flori
EOF
104 1 Laurent Flori
</pre>
105 1 Laurent Flori
106 3 Laurent Flori
Redémarrer le serveur systemd-journal-remote
107 3 Laurent Flori
<pre>
108 3 Laurent Flori
systemctl restart systemd-journal-remote
109 3 Laurent Flori
</pre>
110 3 Laurent Flori
111 1 Laurent Flori
Configuration (très minimale) du serveur dnsmasq
112 1 Laurent Flori
113 1 Laurent Flori
<pre>
114 1 Laurent Flori
cp /etc/dnsmaq.conf /etc/dnsmasq.conf.orig
115 1 Laurent Flori
cat > /etc/dnsmasq.conf << EOF
116 1 Laurent Flori
dhcp-boot=pxelinux.0
117 1 Laurent Flori
dhcp-range=10.1.2.10,10.1.2.50,12h
118 1 Laurent Flori
enable-tftp
119 1 Laurent Flori
interface=ens5
120 1 Laurent Flori
tftp-root=/var/lib/tftpboot/ltsp/Eole
121 1 Laurent Flori
EOF
122 1 Laurent Flori
</pre>
123 1 Laurent Flori
124 1 Laurent Flori
Créer les répertoires tftp
125 1 Laurent Flori
<pre>
126 1 Laurent Flori
mkdir -p /var/lib/tftpboot/ltsp/Eole
127 1 Laurent Flori
</pre>
128 1 Laurent Flori
Redémarrer le server dnsmasq
129 1 Laurent Flori
<pre>
130 1 Laurent Flori
systemctl restart dnsmasq
131 1 Laurent Flori
</pre>
132 1 Laurent Flori
133 1 Laurent Flori
h4. Configuration de l'environement de construction des images lstp
134 1 Laurent Flori
135 1 Laurent Flori
Se rendre dans le répertoire /usr/share/ltsp/plugins/ltsp-build-client/:
136 1 Laurent Flori
<pre>
137 1 Laurent Flori
cd /usr/share/ltsp/plugins/ltsp-build-client/
138 1 Laurent Flori
cp -a Ubuntu Eole && cd Eole
139 1 Laurent Flori
</pre>
140 1 Laurent Flori
141 1 Laurent Flori
Supprimer un plugin (on ne veut jamais de serveur graphique)
142 1 Laurent Flori
<pre>
143 1 Laurent Flori
rm 030-artwork
144 1 Laurent Flori
</pre>
145 1 Laurent Flori
On crée deux plugins:
146 1 Laurent Flori
147 1 Laurent Flori
- Gérer correctement le path nbdroot au boot
148 1 Laurent Flori
149 1 Laurent Flori
<pre>
150 1 Laurent Flori
cat > 031-nbd-root << 'EOF'
151 1 Laurent Flori
#Gestion du path nbd pour l'image embarquée
152 1 Laurent Flori
case "$MODE" in
153 1 Laurent Flori
    after-install)
154 1 Laurent Flori
        sed -i 's?CMDLINE_NBD.*$?CMDLINE_NBD="root=/dev/nbd0 nbdroot='$NBDSERVER${BASE%/}/$CHROOT'"?' $BASE/$CHROOT/etc/ltsp/update-kernels.conf
155 1 Laurent Flori
        ;;
156 1 Laurent Flori
esac
157 1 Laurent Flori
158 1 Laurent Flori
EOF
159 1 Laurent Flori
</pre>
160 1 Laurent Flori
161 1 Laurent Flori
- Paramétrer le serveur ssh
162 1 Laurent Flori
163 1 Laurent Flori
<pre>
164 1 Laurent Flori
cat > 050-ssh-custom << 'EOF'
165 1 Laurent Flori
#Gestion du serveur ssh:
166 1 Laurent Flori
# - activation
167 1 Laurent Flori
# - connexion du root par clef
168 1 Laurent Flori
# - copie de la clef du root
169 1 Laurent Flori
case "$MODE" in
170 1 Laurent Flori
    finalization)
171 1 Laurent Flori
        echo "Enabling SSH server"
172 1 Laurent Flori
        sed -i 's/^ssh/#ssh/' $BASE/$CHROOT/usr/share/ltsp/init-ltsp.d/50-rm-system-services
173 1 Laurent Flori
        sed -i 's/^#PermitRootLogin/PermitRootLogin/' $BASE/$CHROOT/etc/ssh/sshd_config
174 1 Laurent Flori
        mkdir $BASE/$CHROOT/root/.ssh
175 1 Laurent Flori
        cat /root/.ssh/id_rsa.pub > $BASE/$CHROOT/root/.ssh/authorized_keys
176 1 Laurent Flori
        ;;
177 1 Laurent Flori
esac
178 1 Laurent Flori
EOF
179 1 Laurent Flori
</pre>
180 1 Laurent Flori
181 1 Laurent Flori
182 1 Laurent Flori
Préparer un fichier de construction pour le client:
183 1 Laurent Flori
184 1 Laurent Flori
<pre>
185 1 Laurent Flori
cat > /etc/ltsp/ltsp-build-client.conf << 'EOF'
186 1 Laurent Flori
VENDOR=Eole
187 1 Laurent Flori
ARCH=amd64
188 1 Laurent Flori
BASE=/opt/ltsp
189 1 Laurent Flori
CHROOT=${VENDOR}
190 1 Laurent Flori
MIRROR="http://test-eole.ac-dijon.fr/ubuntu/"
191 1 Laurent Flori
EXTRA_MIRROR="http://eole.ac-dijon.fr/eole eole-2.6.2 main cloud"
192 1 Laurent Flori
APT_KEYS="/etc/apt/trusted.gpg.d/eole-archive-keyring.gpg"
193 1 Laurent Flori
DIST=artful
194 1 Laurent Flori
APT_GET_OPTS="-y --no-install-recommends"
195 1 Laurent Flori
FAT_CLIENT_DESKTOPS="tmux"
196 1 Laurent Flori
EARLY_PACKAGES="ltsp-client-core"
197 1 Laurent Flori
LATE_PACKAGES="openssh-server systemd-journal-remote"
198 1 Laurent Flori
EOF
199 1 Laurent Flori
</pre>
200 1 Laurent Flori
201 1 Laurent Flori
Commenter les lignes pour les clefs ssh et pour .root dans le fichier /etc/ltsp/ltsp-update-image.excludes
202 1 Laurent Flori
203 1 Laurent Flori
Lancer la génération de l'image
204 1 Laurent Flori
205 1 Laurent Flori
<pre>
206 4 Laurent Flori
ltsp-build-client --config /etc/ltsp/ltsp-build-client.conf --prompt-rootpass --skipimage
207 1 Laurent Flori
</pre>
208 1 Laurent Flori
209 1 Laurent Flori
Installer les clefs pour systemd-journal-upload
210 1 Laurent Flori
<pre>
211 1 Laurent Flori
mkdir /opt/ltsp/Eole/etc/ssl/journal/
212 1 Laurent Flori
cp /root/certs/ca.pem /opt/ltsp/Eole/etc/ssl/journal/
213 1 Laurent Flori
cp /root/certs/client/client{.pem,.key} /opt/ltsp/Eole/etc/ssl/journal/
214 1 Laurent Flori
</pre>
215 1 Laurent Flori
216 1 Laurent Flori
Configurer systemd-journal-upload dans l'image
217 1 Laurent Flori
<pre>
218 1 Laurent Flori
cat > /opt/ltsp/Eole/etc/systemd/journal-upload.conf << EOF
219 1 Laurent Flori
[Upload]
220 1 Laurent Flori
 URL=10.1.2.254
221 1 Laurent Flori
 ServerKeyFile=/etc/ssl/journal/client.key
222 1 Laurent Flori
 ServerCertificateFile=/etc/ssl/journal/client.pem
223 1 Laurent Flori
 TrustedCertificateFile=/etc/ssl/journal/ca.pem
224 1 Laurent Flori
EOF
225 1 Laurent Flori
</pre>
226 1 Laurent Flori
227 6 Laurent Flori
Activer systemd-journal-upload au démarrage et ssh
228 1 Laurent Flori
229 1 Laurent Flori
<pre>
230 1 Laurent Flori
ltsp-chroot -a Eole -m
231 1 Laurent Flori
systemctl enable systemd-journal-upload
232 6 Laurent Flori
systemctl enable ssh
233 1 Laurent Flori
</pre>
234 1 Laurent Flori
235 1 Laurent Flori
On peut supprimer rsyslog de l'image
236 1 Laurent Flori
<pre>
237 1 Laurent Flori
apt-get remove rsyslog
238 1 Laurent Flori
</pre>
239 1 Laurent Flori
240 1 Laurent Flori
On peut reconstuire l'image
241 1 Laurent Flori
<pre>
242 1 Laurent Flori
exit
243 1 Laurent Flori
ltsp-update-image Eole
244 1 Laurent Flori
</pre>
245 5 Laurent Flori
246 5 Laurent Flori
Lancer la consultation des logs sur le le serveur
247 5 Laurent Flori
<pre>
248 5 Laurent Flori
journalctl -D /var/log/journal/remote/ -f
249 5 Laurent Flori
</pre>
250 5 Laurent Flori
251 5 Laurent Flori
Démarrer une machine en PXE et regarder les logs arriver sur le serveur