debdepot: depot local pour Ubuntu avec apt-get
Bonjour !
Voilà un script destiné à ceux qui n'ont pas de connexion internet chez eux. Ce petit programme permet de mettre à jour , ou d'installer une nouvelle application sur une machine dépourvue de connexion internet.
Il existe des solutions de cache réseau pour les administrateurs qui ont la chance d'avoir un réseau: c'est quand même plus pratique pour mettre à jour une multitude de machine.
Il y a des tas de défauts a ce scripts. Cependant ça à l'air de fonctionner correctement, alors...
RESUME
Ce programme télécharge des paquets sur les dépots Internet (apt repository) depuis une machine A sous debian. Ensuite il n'y a qu'a copier le repertoire cible sur une clef usb par exemple (si ya assez de place) et copier sur une autre machine B dans un nouveau repertoire. On édite le fichier /etc/apt/sources.list, pour ajouter le repertoire comme source, et on lance la même commande normale d'installation comme si on avait été sur internet. Le depot local que l'on a copié masque le détail qui manque.
MODE D'EMPLOI DETAILLE
(step by step comme on dit)
convention : les lignes de commandes sont présentées en gras italique comme l'exemple suivant: echo "Hello JerikoJerk"
1 - on se connecte sur la machine A !!!
2 - on colle le script ci dessous dans un fichier texte (gedit...) que l'on nommera par exemple "debdepot.sh" (le nom est arbitraire)
3 - on rend le script executable chmod +x debdepot.sh, ou avec l'interface graphique
4 - on installe le paquet dpkg-dev au besoin (droit super-utilisateur nécessaire). apt-get dpkg-dev.On est toujours sur la machine A. Si ce n'est pas fait le script ne fonctionne pas.
5 - on ammène le terminal dans le repertoire est enregistré le script à l'aide de "cd " et de "ls" pour vérifier.
6 - on crée le dépot dans un répertoire, arbitrairement /home/user_A/depot/ : sh debdepot.sh creer /home/user_A/depot/
7 - on selectionne les paquets, au choix
* par une entree manuelle: sh debdepot.sh actualiser /home/user_A/depot/ * par une liste passee en argument: sh debdepot.sh actualiser /home/user_A/depot/ ~/liste * par un tube (attention cette methode donne l'impression d'un bug, avec un affichage qui s'affole mais tout va bien, il peut y avoir 1500 affichages) : dpkg --get-selections | sh debdepot.sh actualiser /home/user_A/depot/ le téléchargement débute automatiquement ainsi que la gestion des dépendances. Il y a rarement un conflit à arbitrer, donc vous pouvez prendre une pause pendant que ma cuisine fonctionne.
8 - on copie le répertoire /home/user_A/depot/ sur un media amovible.
9 - on se déconnecte de la machine A
10 - on se connecte sur la machine B
11 - on connecte le média amovible et on transfère le contenu du média amovible vers un répertoire arbitrairement nommé /home/user_B/depot/ (allez savoir pourquoi)
12 - dans un terminal on lance sudo -s avoir la console root (be carefull !!!!). Lorsqu'on n'est pas sous ubuntu, su devrai faire l'affaire.
13 - dans le terminal root on tape gedit /etc/apt/sources.list et on ajoute la ligne à la fin du fichier :
14 - on sauvegarde et on ferme gedit
15 - dans le même terminal on lance:
16 - ensuite celon ce qu'on veut faire:
A l'étape 16 et 17, il y a des warnings pour signaler que le dépot n'est pas authentifié. Cet avertissement est normal, je n'ai pas réussi à intégrer une signature qui n'apporte pas grand chose, puisque au moment ou les paquets ont été téléchargés, la signature du site dépot à été vérifiée.
LE SCRIPT
Voilà un script destiné à ceux qui n'ont pas de connexion internet chez eux. Ce petit programme permet de mettre à jour , ou d'installer une nouvelle application sur une machine dépourvue de connexion internet.
Il existe des solutions de cache réseau pour les administrateurs qui ont la chance d'avoir un réseau: c'est quand même plus pratique pour mettre à jour une multitude de machine.
Il y a des tas de défauts a ce scripts. Cependant ça à l'air de fonctionner correctement, alors...
RESUME
Ce programme télécharge des paquets sur les dépots Internet (apt repository) depuis une machine A sous debian. Ensuite il n'y a qu'a copier le repertoire cible sur une clef usb par exemple (si ya assez de place) et copier sur une autre machine B dans un nouveau repertoire. On édite le fichier /etc/apt/sources.list, pour ajouter le repertoire comme source, et on lance la même commande normale d'installation comme si on avait été sur internet. Le depot local que l'on a copié masque le détail qui manque.
MODE D'EMPLOI DETAILLE
(step by step comme on dit)
convention : les lignes de commandes sont présentées en gras italique comme l'exemple suivant: echo "Hello JerikoJerk"
1 - on se connecte sur la machine A !!!
2 - on colle le script ci dessous dans un fichier texte (gedit...) que l'on nommera par exemple "debdepot.sh" (le nom est arbitraire)
3 - on rend le script executable chmod +x debdepot.sh, ou avec l'interface graphique
4 - on installe le paquet dpkg-dev au besoin (droit super-utilisateur nécessaire). apt-get dpkg-dev.On est toujours sur la machine A. Si ce n'est pas fait le script ne fonctionne pas.
5 - on ammène le terminal dans le repertoire est enregistré le script à l'aide de "cd " et de "ls" pour vérifier.
6 - on crée le dépot dans un répertoire, arbitrairement /home/user_A/depot/ : sh debdepot.sh creer /home/user_A/depot/
7 - on selectionne les paquets, au choix
8 - on copie le répertoire /home/user_A/depot/ sur un media amovible.
9 - on se déconnecte de la machine A
10 - on se connecte sur la machine B
11 - on connecte le média amovible et on transfère le contenu du média amovible vers un répertoire arbitrairement nommé /home/user_B/depot/ (allez savoir pourquoi)
12 - dans un terminal on lance sudo -s avoir la console root (be carefull !!!!). Lorsqu'on n'est pas sous ubuntu, su devrai faire l'affaire.
13 - dans le terminal root on tape gedit /etc/apt/sources.list et on ajoute la ligne à la fin du fichier :
deb file: /home/user_B/depot ./ #depot local
14 - on sauvegarde et on ferme gedit
15 - dans le même terminal on lance:
apt-get update pour prendre en compte le nouveau dépot.
16 - ensuite celon ce qu'on veut faire:
* apt-get upgrade pour mettre a jour les logiciels,
* apt-get install gnagna pour installer "gnagna"
17 - enfin exit pour quitter la console root, (sudo -k pour faire expirer le bail de sudo ) * apt-get install gnagna pour installer "gnagna"
A l'étape 16 et 17, il y a des warnings pour signaler que le dépot n'est pas authentifié. Cet avertissement est normal, je n'ai pas réussi à intégrer une signature qui n'apporte pas grand chose, puisque au moment ou les paquets ont été téléchargés, la signature du site dépot à été vérifiée.
LE SCRIPT
#!/bin/sh
# Autor : jerikojerk (jerikojerk.over-blog.net)
# Copyright : some rights reserved
back="`pwd`"
repertoire="`dirname $0`"
cd "$repertoire"
repertoire="`pwd`"
################################################################################
W_BINAIRE="warnig_packages.log" # you may custom this
W_SOURCE="warnig_sources.log" # you may custom this
# this some of this variables are true const.
LISTS="lists"
ARCHIVES="archives"
APT_CONF_D="apt.conf.d"
BINAIRE="Packages.gz"
SOURCE="Sources.gz"
SOURCES_LIST="sources.list"
APT_CONF="apt.conf"
PREFERENCES="preferences"
PAQUETS_DEPOT="paquets.lst"
STATUS="status"
DEPOT_CREATE="creer_depot.sh"
DEPOT_UPDATE="actualiser_depot.sh"
OVERRIDE="/dev/null"
#if you want to change color of help to fit your shell.
C_VERT="33[1;32m" #green
C_NORMAL="33[0;39m" # defaut
C_ROUGE="33[1;31m" #red
C_ROSE="33[1;35m" #pink
C_BLEU="33[1;34m" #blue
C_BLANC="33[0;02m" #white
C_BLANCLAIR="33[1;08m" #white strong
C_JAUNE="33[1;33m" #yellow
C_CYAN="33[1;36m" #cyan
################################################################################
function aide(){
echo "usages:"
echo -e " `basename $0` $C_ROSE actualiser $C_NORMAL [depot local] [liste de paquets | ]"
echo -e " met à jour un depot."
echo -e " `basename $0` $C_ROSE comparer $C_NORMAL [depot local] [liste de paquets]"
echo -e " verifie si les deux listes sont identiques, retourne 0 si oui"
echo -e " `basename $0` $C_ROSE creer $C_NORMAL [depot local] "
echo -e " cree un depot."
echo -e " `basename $0` $C_ROSE effacer $C_NORMAL [depot local]"
echo -e " efface le depot."
echo -e " `basename $0` $C_ROSE enlever $C_NORMAL [depot local]"
echo -e " enlève le paquet du depot."
echo -e " `basename $0` $C_ROSE index $C_NORMAL [depot local]"
echo -e " regenère l'index du depot."
echo -e " `basename $0` $C_ROSE liste $C_NORMAL [depot local] [liste]"
echo -e " positionne une liste de reference pour le depot local"
echo -e " `basename $0` $C_ROSE montrer $C_NORMAL [depot local] [ nom du paquet] "
echo -e " enlève un paquet sans ses dependances"
echo -e " `basename $0` $C_ROSE stats $C_NORMAL [depot local]"
echo -e " some nice stuff"
echo
echo " [depot local] signifie le repertoire qui contient le depot local, preferez les repertoires absolus"
echo
echo "$0 was design by Jerikojerk, some rights reserved."
echo -e "Please visit $C_BLEU jerikojerk.over-blog.net $C_NORMAL"
echo -e "email: $C_BLEU jerikojerk $C_NORMAL*$C_BLEU hotmail $C_NORMAL*$C_BLEU fr $C_NORMAL"
echo
}
################################################################################
function analyser(){
local repertoire;repertoire="$1//";repertoire="${repertoire%%//*}"
apt-cache -c "$repertoire/$APT_CONF" stats
}
################################################################################
function actualiser() {
local cpt
local i
local liste
local mode
local paire
local paquet
local repertoire
local tmp
tmp="/tmp/modifier_depot$(date +%s)"
repertoire="$1//";repertoire="${repertoire%%//*}" # enlever les "/" finaux.
liste=""
cpt=0
# basis directory is $repertoire
echo "repertoire de base du depot: $repertoire"
if [ ! -d "$repertoire" ];then
if ! mkdir -p "$repertoire";then
# unable to create directory
echo "impossible de creer le répertoire"
aide
exit 1
fi
fi
# accepte le mode interactif ou le mode pas interactif
if [ -z "$2" ]; then
mode="i" #script interactif
elif [ -f "$2" ] ;then
mode="n" # script non interactif
else
#faillure file $2 not found
echo "erreur: fichier '$2' introuvable"
aide
exit 2
fi
test -f "$repertoire/$PAQUETS_DEPOT" && mv "$repertoire/$PAQUETS_DEPOT" "$repertoire/$PAQUETS_DEPOT.bak"
if [ "_$mode" != "_n" ];then
#read standard input, one *.deb per line please
echo "Lecture de l'entree standart, un paquet par ligne"
# stop reading with EOF or #. word
echo
while echo -n "fin: '#.' ?" && read ligne
do
if [ "_$ligne" == "_#." ];then
break
else
paire="${ligne%%#*}" #on elimine les commentaires
paire="${paire%% *}" # on filtre tout ce qui est à droite d'une tabulation
paquet="${paire%% *}" # ici on vire les espaces
liste="$liste $paquet"
cpt=$((cpt + 1))
fi
done
else
# to be factorized
#read file $2
echo "Lecture du fichier $2"
while echo -n "fin: '#.' ?" && read ligne< "$2"
do
# useless
if [ "_$ligne" == "_#." ];then
break
else
paire="${ligne%%#*}" #on elimine les commentaires
paire="${paire%% *}" # ici on enleve une ligne à partir de sa première tabulation
paquet="${paire%% *}" # ici on vire les espaces, si jamais les tab on été remplacée par des espaces
liste="$liste $paquet"
cpt=$((cpt + 1))
fi
done
#retrier le fichier de sortie
sort --unique --field-separator=n "$repertoire/$PAQUETS_DEPOT" "$2" 1> "$tmp"
cat "$tmp" > "$repertoire/$PAQUETS_DEPOT"
rm "$tmp"
fi
# files to download
echo "paquets a rendre disponible:"
echo "$liste"
# total: $cpt files
echo "total: $cpt fichiers"
# download
if [ -n "$liste" ]; then
# apt-get + fichier de configuration
echo "mise a jour de la base de donnees"
apt-get update -c "$repertoire/$APT_CONF" --quiet
echo
echo "debut du telechargement"
echo
if ! apt-get install -c "$repertoire/$APT_CONF" --quiet --assume-yes $liste ; then
wait
echo
echo "un des paquets n'a pu etre telecharge, essai de telecharger les paquets un par un"
echo
for i in $liste
do
echo
echo
if ! apt-get install -c "$repertoire/$APT_CONF" --quiet --assume-yes $i; then # pas de guillemets pour liste
wait
echo "erreur de recuperation du paquet:"
echo "$i"
echo "> validez pour tenter de continuer ou Ctrl + C pour annuler"
read ligne
fi
done
fi
else
echo "Pas de paquet en entree"
aide
exit 2
fi
generer_index "$repertoire"
return 0
}
################################################################################
# generer apt.conf
function creer(){
local repertoire
repertoire="$1//";repertoire="${repertoire%%//*}"
# creating directories
echo "creation de l'arborescence "
creer_arborescence "$repertoire"
wait
# creating config files
echo "creation des fichiers de configuration"
creer_sourceslist "$repertoire"
creer_aptconf "$repertoire"
creer_preferences "$repertoire"
creer_status "$repertoire"
wait
echo "Fin de configuration du depot, vous pouvez maintenant ajouter des paquets."
echo "Pour ajouter des paquets faites:"
echo "sh `basename $0` actualiser $repertoire [ liste de paquet | ]"
}
################################################################################
# generer apt.conf
function creer_aptconf(){ # repertoire #arch #cible
local repertoire
local fichier_cible
local achitecture
repertoire="$1//";repertoire="${repertoire%%//*}"
if [ -z "$2" ]; then
achitecture="i386"
else
# other archtecture selected
achitecture="$2";echo "architecture definie par l'utilisateur:$achitecture"
fi
fichier_cible="$repertoire/$APT_CONF"
echo "// apt.conf" > $fichier_cible
echo "APT" >> $fichier_cible
echo "{" >> $fichier_cible
echo " Architecture "$achitecture";" >> $fichier_cible
echo " Get::Download-Only "true";" >> $fichier_cible
echo " Get::Upgrade "true";" >> $fichier_cible
echo " Clean-Installed "false";" >> $fichier_cible
echo " Cache-Limit "134217728";" >> $fichier_cible # pretty cache
echo " Assume-Yes "true";" >> $fichier_cible
echo " Fix-Broken "true";" >> $fichier_cible
# echo " Recommends-Important "true";" >> $fichier_cible
echo "};" >> $fichier_cible
echo "" >> $fichier_cible
echo "Dir" >> $fichier_cible
echo "{" >> $fichier_cible
echo " State "$repertoire/";" >> $fichier_cible
echo " State::status "$STATUS";" >> $fichier_cible
echo " State::Lists "$LISTS";" >> $fichier_cible
echo " Cache "/$repertoire/";" >> $fichier_cible
echo " Cache::archives "$ARCHIVES/";" >> $fichier_cible
echo " Etc "$repertoire/";" >> $fichier_cible
echo " Etc::SourceList "$SOURCES_LIST";" >> $fichier_cible
echo " Etc::Main "$APT_CONF";" >> $fichier_cible
echo " Etc::Preferences "$PREFERENCES";" >> $fichier_cible
echo " Etc::Parts "$APT_CONF_D/";" >> $fichier_cible
echo "};" >> $fichier_cible
echo "Acquire::Retries "3";" >> $fichier_cible
return 0
}
################################################################################
# apt
# sur que c'est peu pratique si on ajouter un depot par defaut.
# pour ajouter un depot il faut inserer une ligne du style
# echo "ligne du depot" >> $fichier_cible
# sinon on peut appeler le script avec l'action creer, puis éditer le sources.list à la mains
function creer_sourceslist(){ #repertoire #distribution name #cible
local repertoire
local distribution
local fichier_cible
repertoire="$1//";repertoire="${repertoire%%//*}"
if [ -z "$2" ]; then
distribution="dapper"
else
distribution="$2";echo "distribution definie par l'utilisateur:$distribution"
fi
fichier_cible="$repertoire/$SOURCES_LIST"
# eventuellement tester si le depot est actif avant de l'inscrire dans le fichier.
adresse="fr.archive.ubuntu.com"
tester_serveur "$adresse"
echo "####### SOURCES.LIST DEPOT LOCAL $distribution#######" > $fichier_cible
echo -e "n## 'main'" >> $fichier_cible
echo "deb http://$adresse/ubuntu/ $distribution main" >> $fichier_cible
echo "deb-src http://$adresse/ubuntu/ $distribution main" >> $fichier_cible
echo -e "n## 'restricted'" >> $fichier_cible
echo "deb http://$adresse/ubuntu/ $distribution restricted" >> $fichier_cible
echo "deb-src http://$adresse/ubuntu/ $distribution restricted" >> $fichier_cible
echo -e "n## 'universe' repository." >> $fichier_cible
echo "deb http://$adresse/ubuntu/ $distribution universe" >> $fichier_cible
echo "deb-src http://$adresse/ubuntu/ $distribution universe" >> $fichier_cible
echo -e "n## 'multiverse'" >> $fichier_cible
echo "deb http://$adresse/ubuntu/ $distribution multiverse" >> $fichier_cible
echo "deb-src http://$adresse/ubuntu/ $distribution multiverse" >> $fichier_cible
echo -e "n## 'bug fix'" >> $fichier_cible
echo "deb http://$adresse/ubuntu/ $distribution-updates main restricted" >> $fichier_cible
echo "deb-src http://$adresse/ubuntu/ $distribution-updates main restricted" >> $fichier_cible
echo -e "n## 'backports'" >> $fichier_cible
echo "deb http://$adresse/ubuntu/ $distribution-backports main restricted" >> $fichier_cible
echo "deb-src http://$adresse/ubuntu/ $distribution-backports main restricted" >> $fichier_cible
echo "deb http://$adresse/ubuntu/ $distribution-backports universe multiverse" >> $fichier_cible
echo "deb-src http://$adresse/ubuntu/ $distribution-backports universe multiverse" >> $fichier_cible
adresse="security.ubuntu.com"
tester_serveur "$adresse"
echo -e "n## ''securite'" >> $fichier_cible
echo "deb http://$adresse/ubuntu $distribution-security main restricted" >> $fichier_cible
echo "deb-src http://$adresse/ubuntu $distribution-security main restricted" >> $fichier_cible
echo "deb http://$adresse/ubuntu $distribution-security universe multiverse" >> $fichier_cible
echo "deb-src http://$adresse/ubuntu $distribution-security universe multiverse">> $fichier_cible
return 0
}
################################################################################
function creer_preferences(){
# on ne souhaite pas améliorer ça
local repertoire
local fichier_cible
repertoire="$1//";repertoire="${repertoire%%//*}"
fichier_cible="$repertoire/$PREFERENCES"
touch "$fichier_cible"
rm "$fichier_cible"
touch "$fichier_cible"
return 0
}
################################################################################
function creer_status(){
local repertoire
local fichier_cible
# on ne souhaite pas améliorer ça
repertoire="$1//";repertoire="${repertoire%%//*}"
fichier_cible="$repertoire/$STATUS"
touch "$fichier_cible"
rm "$fichier_cible"
touch "$fichier_cible"
return 0
}
#################################################################################
function creer_arborescence(){
local repertoire
repertoire="$1//";repertoire="${repertoire%%//*}"
if [ ! -d "$repertoire" ]; then
mkdir -p "$repertoire"
else
if [ ! -r "$repertoire" ]; then
if ! chmod +r "$repertoire"; then
echo "Vous ne pouvez pas lire le repertoire"
fi
fi
if [ ! -w "$repertoire" ]; then
if ! chmod +w "$repertoire"; then
echo "Vous ne pouvez pas modifier le repertoire"
fi
fi
if [ ! -x "$repertoire" ]; then
if ! chmod +x "$repertoire"; then
echo "Vous ne pouvez pas executer dans le repertoire"
fi
fi
fi
if [ ! -d "$repertoire/$ARCHIVES/partial" ] ; then
mkdir -p "$repertoire/$ARCHIVES/partial"
fi
if [ ! -d "$repertoire/$LISTS/partial" ]; then
mkdir -p "$repertoire/$LISTS/partial"
fi
touch "$repertoire/$BINAIRE"
#ln -sv "$repertoire/$ARCHIVES/$BINAIRE" "$repertoire/$BINAIRE"
return 0
}
################################################################################
function effacer(){
local repertoire;
if [ -d "$1" ];then
repertoire="$1//";repertoire="${repertoire%%//*}"
else
echo "repertoire introuvable"
exit 1
fi
analyser "$repertoire"
echo " ********************************************************* "
echo " Confimer l'effacement complet du repertoire? [ oui / non] "
read reponse
if [ "_$reponse" == "_oui" ];then
rm -vR "$repertoire"
elif [ "_$reponse" == "_non" ];then
echo "annule !"
else
echo "il faut repondre oui ou non."
fi
return 0
}
################################################################################
function enlever(){
local repertoire
local paquet
local ligne
repertoire="$1//";repertoire="${repertoire%%//*}"
cd "$repertoire/$ARCHIVES"
# positif answer is yes
echo "N'enleve pas les dependances... pour confirmer: 'y' 'yes' 'o' 'oui'"
echo
while echo -n "fin: '#.' ?" && read ligne
do
if [ "_$ligne" == "_#." ];then
break
else
if basename "$ligne"*; then
paquet=`basename $ligne*`
paquet="$repertoire/$ARCHIVES/$paquet"
rm -i "$paquet"
else
echo "non trouvé, ou trop de possibilité"
ls "$ligne"*
fi
fi
done
echo "reconstruction de l'index"
generer_index "$repertoire"
return 0
}
################################################################################
# regenere le fichier Packages.gz ($BINAIRE) en fonction des fichiers deb présent dans le répertoire passé en paramettre
function generer_index(){
local repertoire
repertoire="$1//";repertoire="${repertoire%%//*}"
tester_install || exit 127 # necessaire parce qu'on redirige le flux d'erreur pour virer le warning
if cd "$repertoire"; then
echo "attendez pendant la generation de l'index..."
if [ -e "$repertoire/$BINAIRE" ];then
rm "$repertoire/$BINAIRE"
fi
dpkg-scanpackages "$ARCHIVES" "$OVERRIDE" 2> "$W_BINAIRE" | gzip -9c > "$BINAIRE"
#ln -sv "$repertoire/$ARCHIVES/$BINAIRE" "$repertoire/$BINAIRE"
echo -n "..."
#dpkg-scansources "$ARCHIVES" "$OVERRIDE" 2> "$W_SOURCE" | gzip -9c > "$SOURCE"
echo "ok!"
#echo "inserez les lignes suivantes a votre fichier /etc/apt/sources.list:"
#add the following line to your sources.list
echo "inserez la ligne suivante a votre fichier /etc/apt/sources.list:"
echo "deb file:$repertoire ./"
#echo "deb-src file:$repertoire/ ./"
return 0
else
echo "erreur: Arg 1"
exit 1
fi
}
################################################################################
function lister(){
local repertoire;
if [ -d "$1" ];then
repertoire="$1//";repertoire="${repertoire%%//*}"
else
echo "repertoire introuvable"
exit 1
fi
if [ -f "$2" ];then
echo -e "Fichier selectionne:n"
cat "$2"
if [ $? -eq 0 ]; then
echo -e "nncopie simple du fichier"
cp -v "$2" "$repertoire/$PAQUETS_DEPOT"
echo "n'oubliez pas d'actualiser le depot maintenant"
echo "votre depot contiendra au moins les paquets de la nouvelle liste"
else
echo "fichier source non lisible"
aide
exit 2
fi
else
echo "la liste n'existe pas"
aide
exit 2
fi
return 0
}
################################################################################
function verifier(){
local repertoire;
if [ -d "$1" ];then
repertoire="$1//";repertoire="${repertoire%%//*}"
else
echo "repertoire introuvable"
exit 1
fi
if [ -f "$repertoire/$PAQUETS_DEPOT" ];then
echo "test de similitude des fichiers de listes de paquets"
if diff --suppress-common-lines "$repertoire/$PAQUETS_DEPOT" "$2"; then
echo "les listes de paquets concordent."
return 0
else
echo "les listes de paquets sont differentes"
echo "Veuillez à mettre à jour votre depot et votre kit de securite".
fi
else
echo "il n'y a pas de listes de paquets preenregistree dans le depot."
echo "pour activer faites:"
echo "`basename $0` liste [depot local] [nom de la liste]"
fi
return 1
}
################################################################################
function montrer(){
local repertoire;repertoire="$1//";repertoire="${repertoire%%//*}"
apt-cache -c "$repertoire/$APT_CONF" show "$2"
return 0
}
################################################################################
function tester_install(){
dpkg-scanpackages &> /dev/null
if [ $? -eq 127 ];then
echo
echo "le paquet dpkg-dev (dpkg-scanpackages) semble ne pas etre installe sur ce systeme"
echo "vous devez fixer ce probleme imperativement"
echo
echo "apt-get install dpkg-dev "
echo
return 127
fi
gzip --version &> /dev/null #celui ci ne devrai pas poser de problèmes.
if [ $? -eq 127 ];then
echo
echo "le paquet gzip semble ne pas etre installe sur ce systeme"
echo "vous devez fixer ce probleme imperativement"
echo
echo "apt-get install gzip "
echo
return 127
fi
apt-cache &> /dev/null #celui ci ne devrai pas poser de problèmes.
if [ $? -eq 127 ];then
echo
echo "le paquet gzip semble ne pas etre installe sur ce systeme"
echo "vous devez fixer ce probleme imperativement"
echo
echo "apt-get install apt-cache "
echo
return 127
fi
return 0
}
################################################################################
# test si un serveur est fonctionnel. ce test est indicatif, parfois les serveurs bloquent les ping
function tester_serveur(){
if ping -Aq -c 3 "$1" &> /dev/null ; then
#marche mieux avec un résultat positif qu avec un résultat non négatif
return 0
else
echo "Le serveur '$1' ne repond pas"
return 1
fi
}
################################################################################
################################################################################
case "$1" in
"remove" | "enlever")
tester_install || exit 1
if [ -z "$4" ];then
enlever "$2" "$3"
else
aide;exit 2
fi
;;
"erase" | "effacer")
if [ -z "$3" ];then
effacer "$2"
else
aide;exit 2
fi
;;
"lister"|"list")
if [ -z "$4" ];then
lister "$2" "$3"
else
aide;exit 2
fi
;;
"show" | "montrer")
if [ -z "$4" ];then
montrer "$2" "$3"
else
aide;exit 2
fi
;;
"stats")
if [ -z "$3" ];then
analyser "$2"
else
aide;exit 2
fi
;;
"comparer" | "comparer")
if [ -z "$4" ];then
verifier "$2" "$3"
else
aide;exit 2
fi
;;
"index")
if [ -z "$3" ];then
generer_index "$2"
else
aide;exit 2
fi
;;
"update" | "actualiser")
tester_install || exit 1
if [ -z "$3" ];then
actualiser "$2"
else
aide;exit 2
fi
;;
"create" | "creer")
if [ -z "$3" ];then
creer "$2"
else
aide;exit 2
fi
;;
*)# defaut
aide;exit 1
;;
esac
exit 0