| 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 -f" |
|---|
| 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 |
|---|