Bienvenue - Willkommen - Wellcome !
SUR LE C et bientôt sur le C++
Je propose des articles et des exercices pour montrer ce qu'on peut faire face à des questions simples, généralement posées par...
-> divers - how to...
à retenir:
-> exercices sur le C
Je propose des articles et des exercices pour montrer ce qu'on peut faire face à des questions simples, généralement posées par...
-> divers - how to...
à retenir:
* convertir un entier en chaine
* coder un tableau en C
* chronométrer le code
* problèmes lors de la compilation avec make
* coder un tableau en C
* chronométrer le code
* problèmes lors de la compilation avec make
-> exercices sur le C
* exo 1 scanf (correction)
* exo 2 tableaux (correction)
* exo 3 Gestion Entree-Sortie (correction)
* exo 4 Passage d'arguments à main(...) (correction)
* exo 5 Conditions && compilation
* exo 2 tableaux (correction)
* exo 3 Gestion Entree-Sortie (correction)
* exo 4 Passage d'arguments à main(...) (correction)
* exo 5 Conditions && compilation
SUR LES RESEAUX
Je vais recentrer mon activité sur le code. Je laisse les messages sur le serveur.. mais bon, je ne me suis pas convaincu.
Je vais recentrer mon activité sur le code. Je laisse les messages sur le serveur.. mais bon, je ne me suis pas convaincu.
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
par JJ
publié dans :
Ubuntu