Projet

Général

Profil

Fat Client without desktop » Historique » Version 7

Laurent Flori, 19/12/2017 16:24

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