Fat Client without desktop » Historique » Version 14
Laurent Flori, 21/12/2017 10:40
| 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 | 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 | 11 | Laurent Flori | - Paramétrer le remote logging |
| 206 | 1 | Laurent Flori | |
| 207 | 11 | Laurent Flori | <pre> |
| 208 | 11 | Laurent Flori | cat > 060-systemd-journal-upload << 'EndPlugin' |
| 209 | 11 | Laurent Flori | case "$MODE" in |
| 210 | 11 | Laurent Flori | commandline) |
| 211 | 11 | Laurent Flori | add_option "remote-journald" "`eval_gettext "send logs to server"`" "advanced" "true" |
| 212 | 11 | Laurent Flori | ;; |
| 213 | 11 | Laurent Flori | configure) |
| 214 | 11 | Laurent Flori | if [ -n "$option_remote_journald_value" ]; then |
| 215 | 11 | Laurent Flori | REMOTE_JOURNALD="$option_remote_journald_value" |
| 216 | 11 | Laurent Flori | fi |
| 217 | 11 | Laurent Flori | ;; |
| 218 | 11 | Laurent Flori | after-install) |
| 219 | 11 | Laurent Flori | if [ $REMOTE_JOURNALD ];then |
| 220 | 11 | Laurent Flori | mkdir -p $ROOT/etc/ssl/journal/ |
| 221 | 11 | Laurent Flori | cp /root/certs/ca.pem $ROOT/etc/ssl/journal/ |
| 222 | 11 | Laurent Flori | cp /root/certs/client/client{.pem,.key} $ROOT/etc/ssl/journal/ |
| 223 | 11 | Laurent Flori | cat > $ROOT/etc/systemd/journal-upload.conf << EOF |
| 224 | 11 | Laurent Flori | [Upload] |
| 225 | 11 | Laurent Flori | URL=$REMOTE_JOURNALD |
| 226 | 11 | Laurent Flori | ServerKeyFile=/etc/ssl/journal/client.key |
| 227 | 11 | Laurent Flori | ServerCertificateFile=/etc/ssl/journal/client.pem |
| 228 | 11 | Laurent Flori | TrustedCertificateFile=/etc/ssl/journal/ca.pem |
| 229 | 11 | Laurent Flori | EOF |
| 230 | 11 | Laurent Flori | chroot $ROOT systemctl enable systemd-journal-upload |
| 231 | 11 | Laurent Flori | fi |
| 232 | 11 | Laurent Flori | ;; |
| 233 | 11 | Laurent Flori | esac |
| 234 | 11 | Laurent Flori | |
| 235 | 11 | Laurent Flori | EndPlugin |
| 236 | 11 | Laurent Flori | |
| 237 | 13 | Laurent Flori | </pre> |
| 238 | 1 | Laurent Flori | Préparer un fichier de construction pour le client: |
| 239 | 1 | Laurent Flori | |
| 240 | 6 | Laurent Flori | <pre> |
| 241 | 1 | Laurent Flori | cat > /etc/ltsp/ltsp-build-client.conf << 'EOF' |
| 242 | 1 | Laurent Flori | VENDOR=Eole |
| 243 | 1 | Laurent Flori | ARCH=amd64 |
| 244 | 1 | Laurent Flori | BASE=/opt/ltsp |
| 245 | 6 | Laurent Flori | CHROOT=${VENDOR} |
| 246 | 1 | Laurent Flori | MIRROR="http://test-eole.ac-dijon.fr/ubuntu/" |
| 247 | 1 | Laurent Flori | EXTRA_MIRROR="http://eole.ac-dijon.fr/eole eole-2.6.2 main cloud" |
| 248 | 1 | Laurent Flori | APT_KEYS="/etc/apt/trusted.gpg.d/eole-archive-keyring.gpg" |
| 249 | 1 | Laurent Flori | DIST=artful |
| 250 | 1 | Laurent Flori | APT_GET_OPTS="-y --no-install-recommends" |
| 251 | 1 | Laurent Flori | FAT_CLIENT_DESKTOPS="tmux" |
| 252 | 14 | Laurent Flori | EARLY_PACKAGES="ltsp-client-core systemd-journal-remote" |
| 253 | 14 | Laurent Flori | LATE_PACKAGES="openssh-server libvirt-bin bridge-utils iproute2 ebtables dnsmasq" |
| 254 | 1 | Laurent Flori | EOF |
| 255 | 1 | Laurent Flori | </pre> |
| 256 | 1 | Laurent Flori | |
| 257 | 1 | Laurent Flori | Lancer la génération de l'image |
| 258 | 1 | Laurent Flori | |
| 259 | 5 | Laurent Flori | <pre> |
| 260 | 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 |
| 261 | 5 | Laurent Flori | </pre> |
| 262 | 5 | Laurent Flori | |
| 263 | 5 | Laurent Flori | |
| 264 | 5 | Laurent Flori | Lancer la consultation des logs sur le le serveur |
| 265 | 5 | Laurent Flori | <pre> |
| 266 | 1 | Laurent Flori | journalctl -D /var/log/journal/remote/ -f |
| 267 | 1 | Laurent Flori | </pre> |
| 268 | 1 | Laurent Flori | |
| 269 | 1 | Laurent Flori | Démarrer une machine en PXE et regarder les logs arriver sur le serveur |