Bon l'idée est de récupérer la liste d'urls des fichiers pour: la mise à jour comme l'installation de nouveau paquets la réponse: mon script Le seul problème : il faut encore faire un apt-get update
Comment ca marche: On met à jour la liste de paquets
apt-get update
Puis on choisit si on veut la liste des urls des paquets à mettre à jour
./get_urls update
Ou bien la liste des paquets pour installer un paquet (les dépendances seront aussi dans les urls) ainsi que ceux du update.
./get_urls install paquet
#!/bin/bash
rm -f urls_install.txt
touch urls_install.txt
unset package_list
ftp="ftp:''"
function catch_package_list( ) {
apt-get -d -s install $1 | grep Inst | cut -d' ' -f2 > temp
#if [ $? -eq 0 ]
#then
#echo "Erreur"
#return 1
#fi
while read ligne
do
package_list=$package_list" "$ligne
done < temp
rm -f temp
}
function save_urls(){
#for package in $package_list
while [ -n "$1" ]
do
package=$1
shift
addr=`apt-cache showpkg $package | grep /var/lib/apt/lists | cut -d '/' -f6 | cut -d '_' -f1`
rep=`apt-cache showpkg $package | grep /var/lib/apt/lists | cut -d '/' -f6 | cut -d '_' -f2`
filename=`apt-cache show $package | grep Filename: | cut -d ' ' -f2`
echo -e "$ftp$addr/$rep/$filename\r" >> urls_install.txt
done
}
catch_update(){
echo catching all packages names
package_list=`apt-get -s dist-upgrade | grep Inst | cut -d ' ' -f2`
}
catch_install(){
#if arg are not ""
if [ -z $1 ]
then
echo "Error: no packages for install"
exit 0
fi
#while args
while [ -n "$1" ]
do
echo "Catching package list for package "$1
catch_package_list $1
shift
done
}
#checking first arg
uori=$1
shift
#Update or install new package?
if [ "$uori" ! "" ]
then
uori="update"
elif [ "$uori" "update" ]
then
catch_update
elif [ "$uori" ! "install" ]
then
catch_install $*
elif [ "$uori" "all" ]
then
catch_update
catch_install $*
else
echo "syntax error"
exit 1
fi
echo "Saving urls of packages"
save_urls $package_list
echo done!
Donc il marche quelque soit votre sources.list mailez moi si y'a un pb, _ricardinho_ at _worldonline.fr_
Voici le script bash que mon crontab effectue tous les jours afin de mettre à jour mon système.
Principe :
#!/bin/bash
#
# Auteur ... : thialme (thialme at smhteam.info)
# Date ..... : 27/11/2006
# Version .. : 1.01
#
# Description :
# Script de mise à jour des paquets présents sur le système. Dans un premier temps, une mise à jour
# des dépôts est effectuée. Ensuite, la liste des paquets installés est comparée avec la liste des paquets
# nécessitant une mise à jour. La mise à jour est effectuée avec l'option -y et --force-yes afin de ne pas
# bloquer l'installation.
# Déclaration des constantes locales au module
# --------------------------------------------
RELEASE='1.01'
# Initialisation des variables
# ----------------------------
pkg_list=''
# Vérifier que l'utilisateur est bien root
if (( `/usr/bin/id -u` != 0 )); then { echo "Désolé, Vous devez être root..."; exit 1; } fi
# Mettre à jour la liste des paquets
apt-get update
# Obtenir la liste des anciens paquets pour une mise a jour et les nouveaux paquets a installer
pkg_list_u=`apt-get -s dist-upgrade | grep Inst | cut -d' ' -f2`
# Obtenir la liste des paquets installés sur le système
pkg_list_i=`dpkg -l | cut -d' ' -f3`
# Effectuer la comparaison
for pkg_i in $pkg_list_i;do
for pkg_u in $pkg_list_u;do
if [ "$pkg_i" = "$pkg_u" ]
then
pkg_list=$pkg_list" "$pkg_i
fi
done
done
# Faire une mise à jour des paquets installés
if [ -n "$pkg_list" ]; then apt-get -y --force-yes install $pkg_list; fi
# Supprimer les paquets orphelins
apt-get -y remove --purge $(deborphan)
# Supprimer les fichiers téléchargés présent dans /var/cache/apt/archives
apt-get clean
exit 0
Remarque : On m'a fait remarquer, et à juste titre, qu'il existait dejà un soft qui faisait ca sous Ubuntu, et il en est de même sur la Debian (en mode graphique). Voici le lien sur le wiki pour ce qui est de la Debian : NotificationDeMiseAJourDisponible