Fat Client without desktop » Historique » Version 5
Laurent Flori, 19/12/2017 16:03
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 | 1 | Laurent Flori | Activer systemd-journal-upload au démarrage |
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 | 1 | Laurent Flori | </pre> |
233 | 1 | Laurent Flori | |
234 | 1 | Laurent Flori | On peut supprimer rsyslog de l'image |
235 | 1 | Laurent Flori | <pre> |
236 | 1 | Laurent Flori | apt-get remove rsyslog |
237 | 1 | Laurent Flori | </pre> |
238 | 1 | Laurent Flori | |
239 | 1 | Laurent Flori | On peut reconstuire l'image |
240 | 1 | Laurent Flori | <pre> |
241 | 1 | Laurent Flori | exit |
242 | 1 | Laurent Flori | ltsp-update-image Eole |
243 | 1 | Laurent Flori | </pre> |
244 | 5 | Laurent Flori | |
245 | 5 | Laurent Flori | Lancer la consultation des logs sur le le serveur |
246 | 5 | Laurent Flori | <pre> |
247 | 5 | Laurent Flori | journalctl -D /var/log/journal/remote/ -f |
248 | 5 | Laurent Flori | </pre> |
249 | 5 | Laurent Flori | |
250 | 5 | Laurent Flori | Démarrer une machine en PXE et regarder les logs arriver sur le serveur |