L'ho sperimentato e mi sono ritrovato nei problemi del recentissimo topic "Dopo l'aggiornamento mi ha incasinato tutto".
Si, l'aggiornamento andrebbe fatto con upgradepkg --install-new, ma questo approccio ha il problema di dover scaricare a mano tutti i pacchetti nuovi o scaricarli in automatico con rsync, ma in questo caso però va scaricata l'intera distribuzione.
Il vantaggio di slapt-get e swaret è proprio il fatto che se la sbrigano loro a scaricare i file necessari. Io pensavo che slapt-get --dist-upgrade scaricasse anche i nuovi pacchetti, ma evidentemente mi sbagliavo.
Alla fine mi sono fatto uno script mio che vorrei porre alla vostra attenzione. Ancora c'è qualche bug e forse non è completo, ma il funzionamento è questo:
- scarica FILELIST.TXT PACKAGES.TXT ecc..
- determina i pacchetti da installare (consente di specificare una blacklist)
- installa il kernel nuovo e dai lilo -v
- installa glibc-solibs
- installa pkgtools
- installa il resto
- elimina tutti i pacchetti vecchi. Li determina da /var/log/packages, prendendo solo quelli che terminano per un numero. Si presume che quelli scaricati altrove abbiano un suffisso, tipo 'sl', 'as'... Comunque mostra la lista di cosa cancellerà e chiede uno per uno quali cancellare
- cerca i file .new e mostra la lista
- controlla se il file CHANGES_AND_HINTS.TXT è modificato dall'ultimo aggiornamento che è stato fatto e invita caldamente a leggerlo.
Ovviamente si può fare di meglio.
Ecco il codice:
Codice: Seleziona tutto
#!/bin/bash
#decommentare se si usa un proxy
#if [ -z $http_proxy ];then export http_proxy=192.168.0.1:8080;else export http_proxy;fi
#if [ -z $ftp_proxy ];then export ftp_proxy=192.168.0.1:8080;else export ftp_proxy;fi
# scegliere UNA SOLA sorgente
#SOURCE=ftp://ftp.slackware.com/pub/slackware/slackware-current/
SOURCE=ftp://ftp.eutelia.it/pub/Slackware_Mirror/slackware-current/
#SOURCE=http://ftp.eutelia.it/Slackware_Mirror/slackware-current/
SKIP="kde-i18n-[^i] koffice-l10n-[^i] aaa"
WORKPATH=/root/upgrade
function upgrade () {
for PKG in $*;do
echo
PK=$(cat CURR|grep ^$PKG-[0-9])
echo $PK
PKPATH=$(cat FILELIST.TXT|grep /$PK.tgz$|awk '{print $8}')
MD5=$(cat CHECKSUMS.md5|grep $PK.tgz$|awk '{print $1}')
if [ -e $PK.tgz ];then
SUM=$(md5sum $PK.tgz 2>/dev/null|awk '{print $1}')
if [ "$MD5" != "$SUM" ];then
rm -f $PK.tgz
fi
fi
[ ! -e $PK.tgz ]&&wget $SOURCE/$PKPATH
SUM=$(md5sum $PK.tgz 2>/dev/null|awk '{print $1}')
if [ "$MD5" != "$SUM" ];then
echo "errore in md5 checksum (expecting $MD5 instead $SUM)"
echo "Aborting"
exit 1
fi
upgradepkg --install-new $PK.tgz
done
}
mkdir -p $WORKPATH
cd $WORKPATH
GET="ChangeLog.txt CURRENT.WARNING CHANGES_AND_HINTS.TXT UPGRADE.TXT PACKAGES.TXT FILELIST.TXT CHECKSUMS.md5"
rm -f $GET
for FILE in $GET;do
echo -n
wget $SOURCE/$FILE
done
cat PACKAGES.TXT|grep "^PACKAGE NAME: "|awk '{print $3}'|sed s/.tgz$// > CURR
ls /var/log/packages > INST1
ls /var/log/packages|sed -e 's/-\([0-9][^-]*\)-\([^-]*\)-\([^-]*\)/\1 \2 \3/'|awk '{print $1 $2 $3 $4}' > INST2
cat INST2|grep [0-9]$ > SLACK
cat INST2|grep -v [0-9]$ > OTHER
>SKIP
for x in $SKIP;do echo $x >>SKIP;done
diff INST1 CURR|grep ^\>|grep -v -f SKIP|awk '{print $2}'>NEW
cat NEW|sed 's/-[0-9].*//'>NEWP
diff INST1 CURR|grep ^\<|grep -v -f SKIP|awk '{print $2}'|grep [0-9]$ >DELE
echo "Installing kernel"
KERN=$(cat NEWP|grep ^kernel-)
if [ -z "$KERN" ];then echo "no new kernel";else
echo $KERN
upgrade $KERN
lilo -v
fi
echo
echo "Installing libraries"
LIBS=$(cat NEWP|grep ^glibc-solibs)
if [ -z "$LIBS" ];then echo "no new libraries";else
echo $LIBS
upgrade $LIBS
fi
echo
echo "Installing pkgtools"
TOOL=$(cat NEWP|grep ^pkgtools)
if [ -z "$TOOL" ];then echo "no new pkgtools";else
echo $TOOL
upgrade $TOOL
fi
echo
echo "Installing new packages"
NEWP=$(cat NEWP|egrep -v ^'kernel-|glibc-solibs|pkgtools')
if [ -z "$NEWP" ];then echo "no new packages remaining";else
echo $NEWP
upgrade $NEWP
fi
echo
echo
echo "Removing old Slackware Packages"
DELETMP=$(cat DELE)
DELE=""
for PKG in $DELE;do
if [ -e /var/log/packages/$PKG ];then
DELE="$DELE $PKG"
fi
done
if [ -z "$DELE" ];then echo "no old packwages are installed";else
echo $DELE
ASK=""
for PKG in $DELE;do
if [ "$ASK" != "A" ];then
echo -n "Remove $PKG? (Yes/[N]o/All)"
read ASK
fi
if [ "$ASK" == "A" ];then
removepkg $PKG
fi
if [ "$ASK" == "Y" ];then
removepkg $PKG
fi
done
fi
echo
echo "Searching for new config files"
cat /var/log/packages/*|grep '\.new'$ >FCONF
for CONF in $(cat FCONF|sort -u);do
CNF=$(echo $CONF|sed s/.new$//)
if [ -e /$CONF -a -e /$CNF ];then
echo /$CONF
fi
done
rm CURR DELE FCONF INST1 INST2 NEW NEWP OTHER SKIP SLACK
echo
LAST=$(ls CHANGES_AND_HINTS.TXT*|tail -1)
TODAY=$(date +%Y-%m-%d)
diff CHANGES_AND_HINTS.TXT $LAST >/dev/null 2>&1
OUT=$?
if [ $OUT -eq 0 ];then
exit
fi
echo "PLEASE READ 'CHANGES_AND_HINTS.TXT' FILE FOR SPECIAL POSTINSTALLATIONS PROCEDURE!!!!"
if [ $OUT -eq 1 ];then
echo "AND COMPARE IT WITH $LAST"
fi
echo
cp CHANGES_AND_HINTS.TXT CHANGES_AND_HINTS.TXT-$TODAY
Ciao,
01
