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