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