Projet

Général

Profil

Fat Client without desktop » Historique » Version 17

Laurent Flori, 22/12/2017 11:22

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 12 Laurent Flori
On crée trois 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 16 Laurent Flori
    commandline)
164 16 Laurent Flori
            add_option "push-toram" "`eval_gettext "push squashfs to ram"`" "advanced" "false"
165 16 Laurent Flori
            ;;
166 16 Laurent Flori
    configure)
167 16 Laurent Flori
            if [ -n "$option_push_toram_value" ]; then
168 16 Laurent Flori
                PUSH_TORAM=true
169 16 Laurent Flori
            fi
170 16 Laurent Flori
            ;;
171 1 Laurent Flori
    after-install)
172 16 Laurent Flori
        #CMDLINE_LINUX_DEFAULT
173 16 Laurent Flori
        if [ $PUSH_TORAM ];then
174 16 Laurent Flori
                sed -i 's?CMDLINE_LINUX_DEFAULT="init=/sbin/init-ltsp forcepae"?CMDLINE_LINUX_DEFAULT="init=/sbin/init ltsp LTSP_NBD_TO_RAM=true"?' $BASE/$CHROOT/etc/ltsp/update-kernels.conf
175 16 Laurent Flori
        fi
176 1 Laurent Flori
        sed -i 's?CMDLINE_NBD.*$?CMDLINE_NBD="root=/dev/nbd0 nbdroot='$NBDSERVER${BASE%/}/$CHROOT'"?' $BASE/$CHROOT/etc/ltsp/update-kernels.conf
177 1 Laurent Flori
        ;;
178 1 Laurent Flori
esac
179 1 Laurent Flori
180 10 Laurent Flori
EndPlugin
181 10 Laurent Flori
182 1 Laurent Flori
</pre>
183 1 Laurent Flori
184 1 Laurent Flori
- Paramétrer le serveur ssh
185 1 Laurent Flori
186 1 Laurent Flori
<pre>
187 10 Laurent Flori
cat > 050-ssh-custom << 'EndPlugin'
188 1 Laurent Flori
#Gestion du serveur ssh:
189 1 Laurent Flori
# - activation
190 1 Laurent Flori
# - connexion du root par clef
191 1 Laurent Flori
# - copie de la clef du root
192 1 Laurent Flori
case "$MODE" in
193 10 Laurent Flori
    commandline)
194 10 Laurent Flori
            add_option "root-ssh-pubkey" "`eval_gettext "enable root access pubkey"`" "advanced" "true"
195 10 Laurent Flori
            ;;
196 10 Laurent Flori
    configure)
197 10 Laurent Flori
            if [ -n "$option_root_ssh_pubkey_value" ]; then
198 10 Laurent Flori
                ROOT_SSH_PUBKEY="$option_root_ssh_pubkey_value"
199 10 Laurent Flori
            fi
200 10 Laurent Flori
            ;;
201 1 Laurent Flori
    finalization)
202 10 Laurent Flori
            if [ $ROOT_SSH_PUBKEY ];then
203 10 Laurent Flori
                    echo "Enabling SSH server"
204 10 Laurent Flori
                    sed -i 's/^ssh/#ssh/' $BASE/$CHROOT/usr/share/ltsp/init-ltsp.d/50-rm-system-services
205 10 Laurent Flori
                    sed -i 's/^#PermitRootLogin/PermitRootLogin/' $BASE/$CHROOT/etc/ssh/sshd_config
206 10 Laurent Flori
                    mkdir $BASE/$CHROOT/root/.ssh
207 10 Laurent Flori
                    cat $ROOT_SSH_PUBKEY > $BASE/$CHROOT/root/.ssh/authorized_keys
208 10 Laurent Flori
                    sed -i 's?^etc/ssh/?#etc/ssh/?' /etc/ltsp/ltsp-update-image.excludes
209 15 Laurent Flori
                    sed -i 's?^root?#root?' /etc/ltsp/ltsp-update-image.excludes
210 10 Laurent Flori
            fi
211 1 Laurent Flori
        ;;
212 1 Laurent Flori
esac
213 10 Laurent Flori
214 10 Laurent Flori
EndPlugin
215 10 Laurent Flori
216 1 Laurent Flori
</pre>
217 1 Laurent Flori
218 11 Laurent Flori
- Paramétrer le remote logging
219 1 Laurent Flori
220 11 Laurent Flori
<pre>
221 11 Laurent Flori
cat > 060-systemd-journal-upload << 'EndPlugin'
222 11 Laurent Flori
case "$MODE" in
223 11 Laurent Flori
    commandline)
224 11 Laurent Flori
            add_option "remote-journald" "`eval_gettext "send logs to server"`" "advanced" "true"
225 11 Laurent Flori
            ;;
226 11 Laurent Flori
    configure)
227 11 Laurent Flori
            if [ -n "$option_remote_journald_value" ]; then
228 11 Laurent Flori
                REMOTE_JOURNALD="$option_remote_journald_value"
229 11 Laurent Flori
            fi
230 11 Laurent Flori
            ;;
231 11 Laurent Flori
    after-install)
232 11 Laurent Flori
        if [ $REMOTE_JOURNALD ];then
233 11 Laurent Flori
                mkdir -p $ROOT/etc/ssl/journal/
234 11 Laurent Flori
                cp /root/certs/ca.pem $ROOT/etc/ssl/journal/
235 11 Laurent Flori
                cp /root/certs/client/client{.pem,.key} $ROOT/etc/ssl/journal/
236 11 Laurent Flori
                cat > $ROOT/etc/systemd/journal-upload.conf << EOF
237 11 Laurent Flori
[Upload]
238 11 Laurent Flori
 URL=$REMOTE_JOURNALD
239 11 Laurent Flori
 ServerKeyFile=/etc/ssl/journal/client.key
240 11 Laurent Flori
 ServerCertificateFile=/etc/ssl/journal/client.pem
241 11 Laurent Flori
 TrustedCertificateFile=/etc/ssl/journal/ca.pem
242 11 Laurent Flori
EOF
243 11 Laurent Flori
                chroot $ROOT systemctl enable systemd-journal-upload
244 11 Laurent Flori
        fi
245 11 Laurent Flori
        ;;
246 11 Laurent Flori
esac
247 11 Laurent Flori
248 11 Laurent Flori
EndPlugin
249 11 Laurent Flori
250 13 Laurent Flori
</pre>
251 1 Laurent Flori
Préparer un fichier de construction pour le client:
252 1 Laurent Flori
253 6 Laurent Flori
<pre>
254 1 Laurent Flori
cat > /etc/ltsp/ltsp-build-client.conf << 'EOF'
255 1 Laurent Flori
VENDOR=Eole
256 1 Laurent Flori
ARCH=amd64
257 1 Laurent Flori
BASE=/opt/ltsp
258 6 Laurent Flori
CHROOT=${VENDOR}
259 1 Laurent Flori
MIRROR="http://test-eole.ac-dijon.fr/ubuntu/"
260 1 Laurent Flori
EXTRA_MIRROR="http://eole.ac-dijon.fr/eole eole-2.6.2 main cloud"
261 1 Laurent Flori
APT_KEYS="/etc/apt/trusted.gpg.d/eole-archive-keyring.gpg"
262 1 Laurent Flori
DIST=artful
263 1 Laurent Flori
APT_GET_OPTS="-y --no-install-recommends"
264 1 Laurent Flori
FAT_CLIENT_DESKTOPS="tmux"
265 14 Laurent Flori
EARLY_PACKAGES="ltsp-client-core systemd-journal-remote"
266 14 Laurent Flori
LATE_PACKAGES="openssh-server libvirt-bin bridge-utils iproute2 ebtables dnsmasq"
267 1 Laurent Flori
EOF
268 1 Laurent Flori
</pre>
269 1 Laurent Flori
270 1 Laurent Flori
Lancer la génération de l'image
271 1 Laurent Flori
272 5 Laurent Flori
<pre>
273 11 Laurent Flori
ltsp-build-client --config /etc/ltsp/ltsp-build-client.conf --remote-journald=10.1.2.254 --root-ssh-pubkey=/tmp/id_rsa.pub
274 5 Laurent Flori
</pre>
275 5 Laurent Flori
276 5 Laurent Flori
277 5 Laurent Flori
Lancer la consultation des logs sur le le serveur
278 5 Laurent Flori
<pre>
279 1 Laurent Flori
journalctl -D /var/log/journal/remote/ -f
280 1 Laurent Flori
</pre>
281 1 Laurent Flori
282 1 Laurent Flori
Démarrer une machine en PXE et regarder les logs arriver sur le serveur