[6] | 1 | #! /usr/share/bin/busybox ash |
---|
| 2 | |
---|
| 3 | die () { |
---|
| 4 | echo "Erreur: $*" >&2 |
---|
| 5 | exit 1 |
---|
| 6 | } |
---|
| 7 | |
---|
| 8 | # Initialisation de commandes utilisées dans ce script |
---|
| 9 | BB='/usr/share/bin/busybox' |
---|
| 10 | LS="$BB ls" |
---|
| 11 | CUT="$BB cut" |
---|
| 12 | SED="$BB sed" |
---|
| 13 | STRIP="$SED -r -e 's/^[\\t ]+//' -e 's/[\[ ]+/ /g'" |
---|
| 14 | TR="$BB tr" |
---|
| 15 | GREP="$BB grep" |
---|
| 16 | RM="$BB rm -f" |
---|
| 17 | MV="$BB mv -f" |
---|
| 18 | CHMOD="$BB chmod" |
---|
| 19 | DROPBEARKEY="/usr/share/bin/dropbearkey -t dss" |
---|
| 20 | |
---|
| 21 | cd /usr/share/bin || die "Binaires tt-tools non disponible" |
---|
| 22 | [ -x busybox ] || die "Binaire busybox non disponible" |
---|
| 23 | [ -x dropbearmulti ] || die "Binaire dropbear non disponible" |
---|
| 24 | |
---|
| 25 | # A. Création des liens vers busybox |
---|
| 26 | echo "Mise à jour des liens pour Busybox" |
---|
| 27 | |
---|
| 28 | # Le cas des lien pour '[' & '[[' ne passe pas dans la moulinette automatique |
---|
| 29 | ln -sf busybox [ |
---|
| 30 | ln -sf busybox [[ |
---|
| 31 | |
---|
| 32 | # On récupère l'i-node de busybox pour simplifier le filtrage |
---|
| 33 | bbi="$($LS -i busybox | eval $STRIP | $CUT -d ' ' -f1)" |
---|
| 34 | bbloGREP="$GREP -E \"^[ ]+$bbi \"" |
---|
| 35 | |
---|
| 36 | # On récupère la liste des liens existants en gardant des espaces aux extrémités |
---|
| 37 | # de la chaine pour faciliter la suppression des liens utiles en exploitant |
---|
| 38 | # les propriétés d'extractions de 'chemin' dans les variables |
---|
| 39 | bblo="$($LS -iLw0 | eval $bbloGREP | $GREP -v busybox | eval $STRIP | $CUT -d ' ' -f2)" |
---|
| 40 | bblo=" $(echo -n $bblo) " |
---|
| 41 | |
---|
| 42 | # On récupère la liste des liens à avoir |
---|
| 43 | bbll="$($BB | $GREP ',' | $GREP -v Copyright | $TR ',' ' ' | eval $STRIP)" |
---|
| 44 | |
---|
| 45 | let lmax=40 lf=lmax |
---|
| 46 | for lien in $bbll |
---|
| 47 | do |
---|
| 48 | l=$lien |
---|
| 49 | [ "$l" == '[' ] && l='\[' || [ "$l" == '[[' ] && l='\[\[' |
---|
| 50 | loA="${bblo% $l *}" |
---|
| 51 | if [ "$bblo" != "$loA" ]; then |
---|
| 52 | echo -n . |
---|
| 53 | # Le lien existe, on le supprime de la liste locale |
---|
| 54 | bblo="$loA ${bblo#* $l }" |
---|
| 55 | else |
---|
| 56 | echo -n '*' |
---|
| 57 | # On crée le lien nécessaire |
---|
| 58 | ln -sf busybox $lien |
---|
| 59 | fi |
---|
| 60 | let lf=--lf?lf:lmax ; [ "$lf" -eq "$lmax" ] && echo |
---|
| 61 | done |
---|
| 62 | echo |
---|
| 63 | |
---|
| 64 | # Enfin, on supprime les liens qui ne sont plus à utiliser s'il en existe |
---|
| 65 | if [ -n "$(echo -n $bblo)" ]; then |
---|
| 66 | echo "Supression des liens inutiles: $(echo $bblo)" |
---|
| 67 | $RM -f $bblo |
---|
| 68 | fi |
---|
| 69 | |
---|
| 70 | echo "Installation de busybox terminée" |
---|
| 71 | echo |
---|
| 72 | |
---|
| 73 | # B. On installe dropbear si nécessaire |
---|
| 74 | # B.1. On installe les liens |
---|
| 75 | for lien in dropbear dbclient dropbearkey scp |
---|
| 76 | do |
---|
| 77 | ln -sf dropbearmulti $lien |
---|
| 78 | done |
---|
| 79 | |
---|
| 80 | # B.2. On contrôle s'il faut installer la configuration par défaut |
---|
| 81 | cd /usr/share/config/dropbear || die "Configuration de dropbear non disponible" |
---|
| 82 | for conf in authorized_keys motd shell |
---|
| 83 | do |
---|
| 84 | # On supprime si la conf est déjà installée, sinon on l'installe |
---|
| 85 | [ -e "$conf" ] && $RM "$conf.majtmp" || $MV "$conf.majtmp" "$conf" |
---|
| 86 | done |
---|
| 87 | |
---|
| 88 | # B.3. On crée une clé privée si elle n'existe pas |
---|
| 89 | [ -e dropbear_dss_host_key ] || $DROPBEARKEY dropbear_dss_host_key |
---|
| 90 | |
---|
| 91 | # B.4. On mets à jour les droits |
---|
| 92 | $CHMOD 600 authorized_keys dropbear_dss_host_key |
---|
| 93 | $CHMOD 755 shell |
---|
| 94 | |
---|
| 95 | echo "Installation de dropbear terminée" |
---|
| 96 | echo |
---|