[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-clients-linux/DEBIAN/ -> postinst (source)

   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  


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1