Projet

Général

Profil

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