[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 #!/bin/bash 2 3 4 set -e 5 6 7 NOM_PAQUET="se3-clients-linux" 8 REPERTOIRE_INSTALLATION="/home/netlogon/clients-linux" 9 REPERTOIRE_DISTRIBS="$REPERTOIRE_INSTALLATION/distribs" 10 REPERTOIRE_BIN="$REPERTOIRE_INSTALLATION/bin" 11 REPERTOIRE_DEFAUT="$REPERTOIRE_INSTALLATION/.defaut" 12 REPERTOIRE_DIVERS="$REPERTOIRE_INSTALLATION/divers" 13 REPERTOIRE_DIVERS_DEFAUT="$REPERTOIRE_DEFAUT/divers" 14 REPERTOIRE_UNEFOIS="$REPERTOIRE_INSTALLATION/unefois" 15 REPERTOIRE_UNEFOIS_DEFAUT="$REPERTOIRE_DEFAUT/unefois" 16 REPERTOIRE_SSHKEY="$REPERTOIRE_INSTALLATION/install" 17 LOGON="$REPERTOIRE_INSTALLATION/bin/logon" 18 LOGON_DEFAUT="$REPERTOIRE_DEFAUT/logon" 19 LOGON_PERSO="$REPERTOIRE_INSTALLATION/bin/logon_perso" 20 LOGON_PERSO_DEFAUT="$REPERTOIRE_DEFAUT/logon_perso" 21 LOGON_PARAM_FOND_ECRAN="$REPERTOIRE_INSTALLATION/bin/logon_param_fond_ecran" 22 GENERE_PARAM_FOND_ECRAN="$REPERTOIRE_INSTALLATION/bin/genere_param_fonds_clients_linux.sh" 23 CONNEXION_SSH_SERVEUR="$REPERTOIRE_INSTALLATION/bin/connexion_ssh_serveur.bash" 24 RECONFIGURE_SSH="$REPERTOIRE_INSTALLATION/bin/reconfigure.bash" 25 SMB_CIFSFS="/etc/samba/smb_CIFSFS.conf" 26 VERSION_PAQUET=$(LC_ALL="C" dpkg -s "$NOM_PAQUET" | grep -i '^version:' | cut -d' ' -f 2) 27 FICHIER_LISEZMOI="$REPERTOIRE_INSTALLATION/doc/LISEZMOI.TXT" 28 URL_DOC_PDF="http://francois-lafont.ac-versailles.fr/sedu-linux/doc_v$VERSION_PAQUET.pdf" 29 URL_DOC_ZIP="http://francois-lafont.ac-versailles.fr/sedu-linux/doc_v$VERSION_PAQUET.zip" 30 31 32 # Le programme awk injectera le contenu du fichier LOGON_PERSO 33 # qui devra exister en amont. 34 PROG_AWK_INSERTION='{ 35 if ($0 ~ /^### LOGON_PERSO ###/) { 36 system("cat \"'"$LOGON_PERSO"'\"") 37 } 38 else if ($0 ~ /^### LOGON_PARAM_FOND_ECRAN ###/) { 39 system("cat \"'"$LOGON_PARAM_FOND_ECRAN"'\"") 40 } else { 41 print $0 42 } 43 }' 44 45 46 47 # Pour afficher des messages. 48 function afficher () 49 { 50 echo "$@" 51 } 52 53 54 55 # Fonction qui configure correctement les droits sur les 56 # fichiers du répertoire d'installation. 57 function restaurer_droits () 58 { 59 # On met en place des droits cohérents sur les répertoires 60 # et sur les fichiers. 61 chown -R "admin:admins" "$REPERTOIRE_INSTALLATION" 62 chmod -R "u=rwx,g=rx,o=rx,u-s,g-s,o-t" "$REPERTOIRE_INSTALLATION" 63 # Pour les fichiers, on enlève le droit x pour tout le monde. 64 find "$REPERTOIRE_INSTALLATION" -type f -exec chmod "a-x" "{}" \; 65 setfacl -m u:www-data:rx "$REPERTOIRE_INSTALLATION" 66 setfacl -m d:u:www-data:rx "$REPERTOIRE_INSTALLATION" 67 68 69 # Le répertoire bin/ contient des exécutables. 70 for f in "$REPERTOIRE_BIN/"*; do 71 [ "$f" = "$REPERTOIRE_BIN/*" ] && continue 72 chmod u+x "$f" 73 done 74 75 # Pour rendre le contenu du répertoire inaccessible sur les clients 76 # sauf par admin et root. 77 chmod 750 "$REPERTOIRE_INSTALLATION" 78 79 # Le fichier SMB_CIFSFS. 80 chown "root:root" "$SMB_CIFSFS" 81 chmod 644 "$SMB_CIFSFS" 82 83 rm -rf /var/www/install 84 chmod 755 "$REPERTOIRE_SSHKEY" 85 chown root "$REPERTOIRE_SSHKEY" 86 ln -s "$REPERTOIRE_SSHKEY" /var/www/install 87 } 88 89 # Fonction qui adapte les scripts à l'environnement via des 90 # substitutions de lignes. 91 function adapter_scripts () 92 { 93 local fichier IP_SE3 BASE_DN SERVEUR_NTP 94 95 afficher "Récupération de paramètres sur le serveur." 96 97 fichier="/etc/se3/config_m.cache.sh" 98 IP_SE3=$(grep -E '^se3ip=' "$fichier" | cut -d'=' -f'2-' | tr -d '"') 99 # On vérifie que l'on a bien récupéré une IP. 100 local octet 101 octet="[0-9]{1,3}" 102 if ! echo "$IP_SE3" | grep -qE "^$octet\.$octet\.$octet\.$octet$"; then 103 afficher "Désolé, l'IP du Se3 trouvée dans le ficher \"$fichier\"" \ 104 "n'a pas une syntaxe correcte." 105 exit 1 106 else 107 # C'est bien une adresse IP. 108 if ! ping -q -c4 -W2 "$IP_SE3" > /dev/null 2>&1; then 109 afficher "Désolé, l'IP du Se3 trouvée dans le ficher \"$fichier\"" \ 110 "ne répond pas à un ping." 111 exit 1 112 fi 113 fi 114 afficher "IP du Se3 \"$IP_SE3\"." 115 116 117 fichier="/etc/se3/config_l.cache.sh" 118 BASE_DN=$(grep -E '^ldap_base_dn=' "$fichier" | cut -d'=' -f'2-' | tr -d '"') 119 if [ -z "$BASE_DN" ]; then 120 afficher "Désolé, la base DN de l'annuaire récupérée dans le fichier" \ 121 "\"$fichier\" est vide." 122 exit 1 123 else 124 # On teste le DN de base via une petite requête LDAP. 125 if ! ldapsearch -LLLx -b "$BASE_DN" -s "base" "dn" > /dev/null 2>&1; then 126 afficher "Désolé, la base DN de l'annuaire récupérée dans le" \ 127 "fichier \"$fichier\" ne fonctionne pas dans" \ 128 "une requête LDAP." 129 exit 1 130 fi 131 fi 132 afficher "Base DN LDAP \"$BASE_DN\"." 133 134 135 fichier="/etc/se3/config_c.cache.sh" 136 SERVEUR_NTP=$(grep -E '^ntpserv=' "$fichier" | cut -d'=' -f'2-' | tr -d '"') 137 if [ -z "$SERVEUR_NTP" ]; then 138 afficher "Désolé, le nom du serveur NTP récupéré dans le" \ 139 "fichier \"$fichier\" est vide." 140 exit 1 141 else 142 if ! ntpdate "$SERVEUR_NTP" > /dev/null 2>&1; then 143 echo "" # C'est juste pour mettre l'avertissement en valeur. 144 afficher "ATTENTION !!!" 145 afficher "Attention, le serveur NTP dont le nom a été récupéré" \ 146 "dans le fichier \"$fichier\" ne semble pas fonctionner." \ 147 "Il est peut-être nécessaire de modifier l'adresse de ce serveur NTP" \ 148 "puis de reconfigurer la paquet avec la commande dpkg-reconfigure." 149 echo "" # C'est juste pour mettre l'avertissement en valeur. 150 # Trop rude de sortir avec une erreur ici. 151 ###exit 1 152 fi 153 fi 154 afficher "Nom du serveur NTP \"$SERVEUR_NTP\"." 155 156 157 afficher "Adaptation des scripts à l'environnement du serveur." 158 159 for f in "$REPERTOIRE_DISTRIBS/"*"/integration/integration_"*; do 160 [ "$f" = "$REPERTOIRE_DISTRIBS/*/integration/integration_*" ] && continue 161 sed -r -i -e "s/^SE3=\".+$/SE3=\"$IP_SE3\"/g" \ 162 -e "s/^BASE_DN=\".+$/BASE_DN=\"$BASE_DN\"/g" \ 163 -e "s/^SERVEUR_NTP=\".+$/SERVEUR_NTP=\"$SERVEUR_NTP\"/g" \ 164 "$f" 165 verifier_adaptation "$f" "$IP_SE3" "$BASE_DN" "$SERVEUR_NTP" 166 done 167 168 # On adapte le fichier permettant la connexion ssh au serveur 169 # ainsi que celui permettant de restaurer les droits à distance. 170 sed -r -i -e "s/^SE3=\".+$/SE3=\"$IP_SE3\"/g" "$CONNEXION_SSH_SERVEUR" 171 sed -r -i -e "s/^SE3=\".+$/SE3=\"$IP_SE3\"/g" "$RECONFIGURE_SSH" 172 173 # Adaptation de LOGON_DEFAUT. 174 # Seul LOGON_DEFAUT est à adapter, c'est inutile pour LOGON 175 # car il va être réécrit complètement à partir de LOGON_DEFAUT. 176 sed -r -i -e "s/^SE3=\".+$/SE3=\"$IP_SE3\"/g" \ 177 -e "s/^BASE_DN=\".+$/BASE_DN=\"$BASE_DN\"/g" \ 178 -e "s/^SERVEUR_NTP=\".+$/SERVEUR_NTP=\"$SERVEUR_NTP\"/g" \ 179 "$LOGON_DEFAUT" 180 verifier_adaptation "$LOGON_DEFAUT" "$IP_SE3" "$BASE_DN" "$SERVEUR_NTP" 181 } 182 183 184 185 # Fonction qui vérifie que l'adaptation des scripts est bien effective. 186 # Sa syntaxe est : 187 # verifier_adaptation "le-script" "IP_SE3" "BASE_DN" "SERVEUR_NTP" 188 function verifier_adaptation () 189 { 190 local script IP_SE3 BASE_DN SERVEUR_NTP fichier 191 script="$1" 192 fichier=$(basename "$1") 193 IP_SE3="$2" 194 BASE_DN="$3" 195 SERVEUR_NTP="$4" 196 197 local n 198 199 # Il faut que la valeur de retour soit 0 à tous les coups, sinon 200 # le script s'arrête brusquement à cause de « set -e », d'où 201 # les « || true » un peu curieux. 202 n=$(grep -c "^SE3=\"$IP_SE3\"$" "$script" || true) 203 if [ "$n" != "1" ]; then 204 afficher "Désolé, mais le script \"$fichier\" n'a pas été adapté" \ 205 "correctement, l'adresse IP du Se3 y est manquante." 206 exit 1 207 fi 208 209 n=$(grep -c "^BASE_DN=\"$BASE_DN\"$" "$script" || true) 210 if [ "$n" != "1" ]; then 211 afficher "Désolé, mais le script \"$fichier\" n'a pas été adapté" \ 212 "correctement, la base DN de l'annuaire y est manquante." 213 exit 1 214 fi 215 216 n=$(grep -c "^SERVEUR_NTP=\"$SERVEUR_NTP\"$" "$script" || true) 217 if [ "$n" != "1" ]; then 218 afficher "Désolé, mais le script \"$fichier\" n'a pas été adapté" \ 219 "correctement, le nom du serveur NTP est y manquant." 220 exit 1 221 fi 222 } 223 224 225 226 # Fonction qui réécrit totalement le fichier LOGON, à partir de LOGON_DEFAUT, 227 # et en y injectant la partie de LOGON_PERSO 228 # et en y injectant LOGON_PARAM_FOND_ECRAN si un tel fichier peut etre généré 229 # (si les fonds d'écran sont paramétrés dans l'interface SE3). 230 function maj_logon () 231 { 232 if [ -e "$GENERE_PARAM_FOND_ECRAN" ]; then 233 chmod +x "$GENERE_PARAM_FOND_ECRAN" 234 $GENERE_PARAM_FOND_ECRAN 235 fi 236 237 awk "$PROG_AWK_INSERTION" "$LOGON_DEFAUT" > "$LOGON" 238 } 239 240 241 242 # Fonction qui génère le fichier de doc, qui n'est qu'un simple 243 # fichier texte contenant un lien vers la doc sur mon site perso. 244 function ecrire_doc () 245 { 246 # Création du fichier LISEZMOI.TXT dans le répertoire doc/. 247 echo "La documentation en ligne de cette version du paquet $NOM_PAQUET se trouve ici : 248 249 $URL_DOC_PDF 250 251 Les sources au format LaTeX (compilables avec pdflatex) sont ici : 252 253 $URL_DOC_ZIP 254 " > "$FICHIER_LISEZMOI" 255 } 256 257 258 259 case "$1" in 260 261 "configure") 262 # Argument utilisé lors de l'installation du paquet, une 263 # fois que les fichiers sont copiés dans l'arborescence. 264 265 adapter_scripts 266 267 268 269 # En principe ce bricolage est maintenant de l'histoire ancienne, 270 # mais bon pour l'instant je le laisse au cas où (ce bricolage 271 # dans le pire des cas ne fera rien du tout)... 272 #----------------------------------------- 273 # Bricolage temporaire. 274 # Comme le fichier smb_CIFSFS.conf est actuellement inclus 275 # dans un autre paquet se3, l'installation du paquet ajoute 276 # l'extension ".divert" dans le nom de ce fichier. 277 if [ -f "$SMB_CIFSFS.divert" ]; then 278 [ -e "$SMB_CIFSFS" ] && rm -rf "$SMB_CIFSFS" 279 mv "$SMB_CIFSFS.divert" "$SMB_CIFSFS" 280 fi 281 #----------------------------------------- 282 283 284 285 286 # Mise en place du contenu par défaut des répertoires personnalisables, 287 # si toutefois ces répertoires n'existent pas déjà. 288 289 # Le répertoire divers/. 290 if [ ! -e "$REPERTOIRE_DIVERS" ]; then 291 afficher "Mise en place du contenu par défaut du répertoire divers/." 292 cp -r "$REPERTOIRE_DIVERS_DEFAUT" "$REPERTOIRE_INSTALLATION" 293 fi 294 295 # Le répertoire unefois/. 296 if [ ! -e "$REPERTOIRE_UNEFOIS" ]; then 297 afficher "Mise en place du contenu par défaut du répertoire unefois/." 298 cp -r "$REPERTOIRE_UNEFOIS_DEFAUT" "$REPERTOIRE_INSTALLATION" 299 fi 300 301 # Les profils par défaut des distributions. 302 for f in "$REPERTOIRE_DEFAUT/skel_"*; do 303 [ "$f" = "$REPERTOIRE_DEFAUT/skel_*" ] && continue 304 n=$(basename "$f") 305 nom_de_code="$n#skel_}" 306 if [ ! -e "$REPERTOIRE_DISTRIBS/$nom_de_code/skel" ]; then 307 afficher "Mise en place du profil par défaut de la distribution $nom_de_code." 308 cp -r "$f" "$REPERTOIRE_DISTRIBS/$nom_de_code/skel" 309 fi 310 done 311 312 if [ ! -e "$REPERTOIRE_SSHKEY/id_rsa.pub" ]; then 313 cp /var/remote_adm/.ssh/id_rsa.pub $REPERTOIRE_SSHKEY 314 fi 315 316 # Si le fichier LOGON_PERSO n'existe pas, le crée en se 317 # basant sur une copie de LOGON_PERSO_DEFAUT 318 if [ ! -f "$LOGON_PERSO" ]; then 319 afficher "Mise en place du contenu par défaut du fichier logon_perso." 320 cp "$LOGON_PERSO_DEFAUT" "$LOGON_PERSO" 321 fi 322 323 afficher "Insertion du contenu de logon_perso dans le fichier logon." 324 maj_logon 325 326 afficher "Écriture du fichier de documentation." 327 ecrire_doc 328 329 afficher "Restauration des droits sur tous les fichiers du paquet." 330 restaurer_droits 331 332 afficher "La configuration du paquet $NOM_PAQUET est terminée." 333 exit 0 334 ;; 335 336 *) 337 # Argument non pris en charge. On ne fait rien avec 0 comme 338 # valeur de retour pour ne pas stopper les processus dpkg. 339 exit 0 340 ;; 341 342 esac 343 344
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |