Aggancia questa barra allo schermo |  Disattiva gli effetti grafici


Aggiornare Slackware


 

Automatizzare l'aggiornamento di Slackware current

Questo script provvede ad aggiornare Slackware o Slackware64 all'ultima current in maniera del tutto autonoma, dalla ricerca di aggiornamenti all'aggiornamento del bootloader.

script

Scarica la lista dei pacchetti e la confronta con quelli installati, dopodiché controlla se i nuovi pacchetti sono presenti in un eventuale DVD già montato altrimenti li scarica da internet.

Lo script può gestire anche un sistema multilib, infatti se trova già installati i pacchetti gcc e glibc multilib di Alien, provvede ad aggiornare questi invece di quelli ufficiali che non sono multilib.

Se sono presenti determinati pacchetti tra quelli da aggiornare, lo script mostra un avviso in cui dice di cambiare runlevel e di far ripartire l'aggiornamento, quindi si interrompe. Questo per evitare problemi con l'aggiornamento di pacchetti critici.

Poi esegue l'aggiornamento vero e proprio nell'ordine così come descritto sul file UPGRADE.TXT di Slackware e provvede a rimuovere eventuali pacchetti non più presenti sulla distribuzione.

A seguire abbiamo la sostituzione dei file di configurazione, non tutti quelli presenti in /etc, ma solo gli script di avvio in /etc/rc.d e se rileva che il kernel in uso non è personalizzato e allo stesso tempo tra i nuovi pacchetti ci sono anche quelli di un nuovo kernel, viene aggiornato il bootloader. Se si tratta di un kernel generic viene creato anche il file initrd.

slackup

#!/bin/sh
# Copyright (C) 2015-2017, Andrea Peluso <sya54m@gmail.com>
# Tutti i diritti riservati.
#
# ___ changelog ___
#
# 2.1.0 (01/02/2017)
# aggiunta controllo delle istanze in esecuzione
# aggiunta pulizia file temporanei in caso di interruzione
#
# 2.0.0 (30/01/2017)
# aggiunta gestione dei pacchetti KDE di alien
#
# 1.3.3 (25/01/2017)
# escluso glibc-zoneinfo dai pacchetti multilib
#
# 1.3.2 (21/05/2016)
# non disinstalla i pacchetti rimossi in current se presenti in whitelist
# aggiunto commento di esempio per KDE5
#
# 1.3.1 (10/03/2016)
# aggiunto whitelist
#
# 1.3.0 (09/03/2016)
# modificato separatore blacklist
# modificata selezione pacchetti kdei
# bugfix
#
# 1.2.2 (23/12/2015)
# migliorata rimozione vecchi pacchetti
#
# 1.2.1 (19/12/2015)
# bugfix
#
# 1.2.0 (15/12/2015)
# aggiunto supporto elilo
# bugfix
#
# 1.1.0 (22/11/2015)
# download separati nelle directory
# bugfix
#
# 1.0.0 (05/11/2015)
# prima versione

############################### Configurazione ################################
lng="it"  #codice lingua
MIRROR="http://ftp.slackware.com/pub/slackware"
DVD="/media/SlackDVD"
tmp="/root/current"
KDE_alien="si"  # si o no
# separare con pipe: |
blacklist="kernel-source|bsd-games"
whitelist=""
###############################################################################

aiuto(){
	echo "Uso: $(basename $0)"
	echo "Procedura automatizzata per l'aggiornamento di Slackware current."
	echo "Copyright (C) 2015-2017, Andrea Peluso."
	echo -e "\n  -v\tstampa le informazioni sulla versione ed esce"
	echo -e "  -h\tmostra questo aiuto ed esce"
	echo -e "\nSegnalare i bug di SlackUp a <sya54m@gmail.com>"
	echo -e "Sito web di SlackUp: <http://www.sya54m.eu/>\n"
}
if [ "$(whoami)" != "root" ]; then
	echo -e "Permesso negato: eseguire come root.\n"
	exit 1
fi
if [ -d /usr/lib64 ]; then
	bit="64"
else
	bit=""
fi
PRGVER="2.1.0"
DVD="$DVD/slackware$bit"
LOCKFILE="/tmp/slackup.lock"
N=1
while [ $N -le 1 ]; do
	if [ ! -f $LOCKFILE.$N ]; then
		touch $LOCKFILE.$N
		break
	fi
	N=$[$N+1]
done
trap "{ rm -f $LOCKFILE.$N ; exit 255; }" EXIT
trap "{ rm -rf $tmp ; exit 255; }" SIGINT SIGTERM
if [ $N -gt 1 ]; then
	echo -e "Il programma è già in esecuzione.\nTermino."
	exit 1
fi
while :
do
	case "$1" in
	-v)
		echo -e "$(basename $0) $PRGVER\nCopyright (C) 2015-2017, Andrea Peluso."
		exit 0
	;;
	-h)
		aiuto
		exit 0
	;;
	-*)
		aiuto
		exit 1
	;;
	*)
		break
	;;
	esac
	shift
done
mkdir -p $tmp/a $tmp/ap $tmp/d $tmp/e $tmp/f $tmp/k $tmp/kde $tmp/kdei $tmp/l $tmp/n $tmp/t $tmp/tcl $tmp/x $tmp/xap $tmp/xfce $tmp/y
cd $tmp
utente=$(who |grep ":0" |cut -d" " -f1 |uniq)
if [ "$utente" != "root" -a -n "$DISPLAY" -a -n "`ls /var/log/packages/kde-base* 2> /dev/null`" ]; then
	cp /home/$utente/.Xauthority /root/.Xauthority
	export $(dbus-launch)
fi
multilib3=()
if [ "$bit" == "64" -a -n "`ls /var/log/packages/*_multilib-x86_64-* 2> /dev/null`" ]; then
	if [ ! -r FILELIST-multilib.TXT ] || [ -r FILELIST-multilib.TXT -a $(expr `date +%s` - `stat -c %Z FILELIST-multilib.TXT`) -gt 43200 ]; then
		wget http://www.slackware.com/~alien/multilib/current/FILELIST.TXT -O FILELIST-multilib.TXT || exit 1
	fi
	multilib=(`cat FILELIST-multilib.TXT |egrep "./gcc-|./glibc-" |egrep ".tgz|.txz" |egrep -v ".asc|.md5|debug" |cut -d / -f2`)
	multilib2=(`cat FILELIST-multilib.TXT |egrep "./gcc-|./glibc-" |egrep ".tgz|.txz" |egrep -v ".asc|.md5|debug" |cut -d / -f2 |rev |cut -f2- -d. |rev`)
	NUM=0
	NUM2=0
	while [ "$NUM" -lt "${#multilib2[*]}" ]; do
		if [ ! -f /var/log/packages/${multilib2[$NUM]} ]; then
			multilib3[$NUM2]=${multilib[$NUM]}
			NUM2=`expr $NUM2 + 1`
		fi
		NUM=`expr $NUM + 1`
	done
	if [ "${#multilib3[*]}" -gt "0" ]; then
		echo -e "\E[031;1mDownload dei pacchetti multilib di Alien...\E[031;0m"
	fi
	POS=$(kdialog --progressbar "File totali: ${#multilib3[*]}" --caption "SlackUp - Multilib Download" 2> /dev/null)
	NUM=0
	while [ "$NUM" -lt "${#multilib3[*]}" ]; do
		if [ ! -f $tmp/?/${multilib3[$NUM]} ]; then
			if [ -n "`echo ${multilib3[$NUM]} |grep "solibs" 2> /dev/null`" ]; then
				dir="a"
			elif [ -n "`echo ${multilib3[$NUM]} |grep "glibc" 2> /dev/null`" ]; then
				dir="l"
			elif [ -n "`echo ${multilib3[$NUM]} |grep "gcc" 2> /dev/null`" ]; then
				dir="d"
			fi
			echo "+=============================================================================="
			echo "| Download del file `expr $NUM + 1` di ${#multilib3[*]}: $dir/${multilib3[$NUM]}"
			echo "+=============================================================================="
			percentuale=$(expr $NUM \* 100 / ${#multilib3[*]})
			qdbus $POS Set "" value $percentuale &> /dev/null
			qdbus $POS setLabelText "Download del file `expr $NUM + 1` di ${#multilib3[*]}: $dir/${multilib3[$NUM]}" &> /dev/null
			dcop $POS setProgress $percentuale &> /dev/null
			dcop $POS setLabel "Download del file `expr $NUM + 1` di ${#multilib3[*]}: $dir/${multilib3[$NUM]}" &> /dev/null
			wget http://www.slackware.com/~alien/multilib/current/${multilib3[$NUM]} -O $tmp/$dir/${multilib3[$NUM]} || rm $tmp/$dir/${multilib3[$NUM]}
		fi
		NUM=`expr $NUM + 1`
	done
	qdbus $POS close &> /dev/null
	dcop $POS close &> /dev/null
fi
kdealien3=()
if [ "$KDE_alien" == "si" ]; then
	blacklist2="kde|akonadi|gpgme|grantlee|phonon|qt-gstreamer|PyQt-|poppler|sip-"
	if [ -z "$blacklist" ]; then
		blacklist="$blacklist2"
	else
		blacklist="$blacklist|$blacklist2"
	fi
	whitelist2="kwallet-|calligra-l10n-$lng"
	if [ -z "$whitelist" ]; then
		whitelist="$whitelist2"
	else
		whitelist="$whitelist|$whitelist2"
	fi
	if [ "$bit" == "64" ]; then
		bit2="_64"
	else
		bit2=""
	fi
	if [ ! -r FILELIST-kdealien.TXT ] || [ -r FILELIST-kdealien.TXT -a $(expr `date +%s` - `stat -c %Z FILELIST-kdealien.TXT`) -gt 43200 ]; then
		wget http://alien.slackbook.org/slackware/ktown/current/latest/x86$bit2/FILELIST.TXT -O FILELIST-kdealien.TXT || exit 1
	fi
	kdealien=(`cat FILELIST-kdealien.TXT |egrep ".tgz|.txz" |egrep -v ".asc|.md5" |awk '!(/.\/kdei\// && !/l10n-'$lng'-/)' |cut -d / -f2,3,4`)
	kdealien2=(`cat FILELIST-kdealien.TXT |egrep ".tgz|.txz" |egrep -v ".asc|.md5" |awk '!(/.\/kdei\// && !/l10n-'$lng'-/)' |rev |cut -d / -f1 |cut -f2- -d. |rev`)
	NUM=0
	NUM2=0
	while [ "$NUM" -lt "${#kdealien2[*]}" ]; do
		if [ ! -f /var/log/packages/${kdealien2[$NUM]} ]; then
			kdealien3[$NUM2]=${kdealien[$NUM]}
			NUM2=`expr $NUM2 + 1`
		fi
		NUM=`expr $NUM + 1`
	done
	if [ "${#kdealien3[*]}" -gt "0" ]; then
		echo -e "\E[031;1mDownload dei pacchetti KDE di Alien...\E[031;0m"
	fi
	POS=$(kdialog --progressbar "File totali: ${#kdealien3[*]}" --caption "SlackUp - KDE Alien Download" 2> /dev/null)
	NUM=0
	mkdir -p $tmp/kde_alien/deps/telepathy $tmp/kde_alien/kde/applications $tmp/kde_alien/kde/applications-extra $tmp/kde_alien/kde/frameworks $tmp/kde_alien/kde/kde4 $tmp/kde_alien/kde/kde4-extragear $tmp/kde_alien/kde/kdepim $tmp/kde_alien/kde/plasma $tmp/kde_alien/kde/plasma-extra $tmp/kde_alien/kde/telepathy $tmp/kde_alien/kdei
	while [ "$NUM" -lt "${#kdealien3[*]}" ]; do
		if [ ! -f $tmp/kde_alien/${kdealien3[$NUM]} ]; then
			echo "+=============================================================================="
			echo "| Download del file `expr $NUM + 1` di ${#kdealien3[*]}: ${kdealien3[$NUM]}"
			echo "+=============================================================================="
			percentuale=$(expr $NUM \* 100 / ${#kdealien3[*]})
			qdbus $POS Set "" value $percentuale &> /dev/null
			qdbus $POS setLabelText "Download del file `expr $NUM + 1` di ${#kdealien3[*]}: ${kdealien3[$NUM]}" &> /dev/null
			dcop $POS setProgress $percentuale &> /dev/null
			dcop $POS setLabel "Download del file `expr $NUM + 1` di ${#kdealien3[*]}: ${kdealien3[$NUM]}" &> /dev/null
			wget http://alien.slackbook.org/slackware/ktown/current/latest/x86$bit2/${kdealien3[$NUM]} -O $tmp/kde_alien/${kdealien3[$NUM]} || rm $tmp/kde_alien/${kdealien3[$NUM]}
		fi
		NUM=`expr $NUM + 1`
	done
	qdbus $POS close &> /dev/null
	dcop $POS close &> /dev/null
fi
if [ -z "$blacklist" ]; then
	blacklist="riempitorechenonpuoesistere"
fi
if [ -z "$whitelist" ]; then
	whitelist="riempitorechenonpuoesistere"
fi
if [ ! -r FILE_LIST ] || [ -r FILE_LIST -a $(expr `date +%s` - `stat -c %Z FILE_LIST`) -gt 43200 ]; then
	wget $MIRROR/slackware$bit-current/slackware$bit/FILE_LIST -O FILE_LIST || exit 1
fi
if [ ! -r CHANGES_AND_HINTS.TXT ] || [ -r CHANGES_AND_HINTS.TXT -a $(expr `date +%s` - `stat -c %Z CHANGES_AND_HINTS.TXT`) -gt 43200 ]; then
	wget $MIRROR/slackware$bit-current/CHANGES_AND_HINTS.TXT -O CHANGES_AND_HINTS.TXT || exit 1
fi
FILE=(`cat FILE_LIST |egrep ".tgz|.txz" |egrep -v ".asc|.md5" |awk '!(/.\/kdei\// && !/l10n-'$lng'-/)' |egrep -v "$blacklist" |cut -d / -f2,3` `cat FILE_LIST |egrep ".tgz|.txz" |egrep -v ".asc|.md5" |egrep "$whitelist" |cut -d / -f2,3`)
FILE2=(`cat FILE_LIST |egrep ".tgz|.txz" |egrep -v ".asc|.md5" |awk '!(/.\/kdei\// && !/l10n-'$lng'-/)' |egrep -v "$blacklist" |cut -d / -f3 |rev |cut -f2- -d. |rev` `cat FILE_LIST |egrep ".tgz|.txz" |egrep -v ".asc|.md5" |egrep "$whitelist" |cut -d / -f3 |rev |cut -f2- -d. |rev`)
echo -e "\E[031;1mControllo gli aggiornamenti...\E[031;0m"
NUM=0
NUM2=0
while [ "$NUM" -lt "${#FILE2[*]}" ]; do
	if [ ! -f /var/log/packages/${FILE2[$NUM]} ]; then
		if [ ! -f FILELIST-multilib.TXT ] || [[ -f FILELIST-multilib.TXT && ${FILE2[$NUM]} != "gcc-"* && ${FILE2[$NUM]} != "glibc-"* ]] || [[ ${FILE2[$NUM]} == "glibc-zoneinfo-"* ]]; then
			FILE3[$NUM2]=${FILE[$NUM]}
			NUM2=`expr $NUM2 + 1`
		fi
	fi
	NUM=`expr $NUM + 1`
done
if [ "${#FILE3[*]}" -eq "0" -a "${#multilib3[*]}" -eq "0" -a "${#kdealien3[*]}" -eq "0" ]; then
	rm -rf $tmp
	echo -e "\E[031;1mIl sistema è già aggiornato.\E[031;0m"
	exit 0
fi
if [ "${#FILE3[*]}" -eq "0" ]; then
	echo -e "\E[031;1mDownload dei pacchetti ufficiali...\E[031;0m"
fi
POS=$(kdialog --progressbar "File totali: ${#FILE3[*]}" --caption "SlackUp - PKG Ufficiali Download" 2> /dev/null)
NUM=0
while [ "$NUM" -lt "${#FILE3[*]}" ]; do
	if [ ! -f $tmp/${FILE3[$NUM]} ]; then
		percentuale=$(expr $NUM \* 100 / ${#FILE3[*]})
		qdbus $POS Set "" value $percentuale &> /dev/null
		dcop $POS setProgress $percentuale &> /dev/null
		if [ -r $DVD/${FILE3[$NUM]} ]; then
			echo "+=============================================================================="
			echo "| Copia del file `expr $NUM + 1` di ${#FILE3[*]}"
			echo "+=============================================================================="
			qdbus $POS setLabelText "Copia del file `expr $NUM + 1` di ${#FILE3[*]}: ${FILE3[$NUM]}" &> /dev/null
			dcop $POS setLabel "Copia del file `expr $NUM + 1` di ${#FILE3[*]}: ${FILE3[$NUM]}" &> /dev/null
			cp $DVD/${FILE3[$NUM]} $tmp/${FILE3[$NUM]} || rm $tmp/${FILE3[$NUM]}
		else
			echo "+=============================================================================="
			echo "| Download del file `expr $NUM + 1` di ${#FILE3[*]}: ${FILE3[$NUM]}"
			echo "+=============================================================================="
			qdbus $POS setLabelText "Download del file `expr $NUM + 1` di ${#FILE3[*]}: ${FILE3[$NUM]}" &> /dev/null
			dcop $POS setLabel "Download del file `expr $NUM + 1` di ${#FILE3[*]}: ${FILE3[$NUM]}" &> /dev/null
			wget $MIRROR/slackware$bit-current/slackware$bit/${FILE3[$NUM]} -O $tmp/${FILE3[$NUM]} || rm $tmp/${FILE3[$NUM]}
		fi
	fi
	NUM=`expr $NUM + 1`
done
qdbus $POS close &> /dev/null
dcop $POS close &> /dev/null
echo -e "\E[031;1mDownload completato. Aggiornamento in corso...\E[031;0m"
kdialog --passivepopup "Download completato. Aggiornamento in corso..." --caption SlackUp 2> /dev/null &
runlevel=$(runlevel |cut -d" " -f2)
if [ "$runlevel" -gt "1" ] && [ -n "`ls $tmp/a/glibc-solibs-*.t?z 2> /dev/null`" ]; then
	echo -e "\E[031;1mRieseguire in runlevel 1.\E[031;0m"
	kdialog --msgbox "Rieseguire in runlevel 1." --caption SlackUp 2> /dev/null
	exit 1
fi
if [ "$runlevel" -gt "3" ] && [ -n "`ls $tmp/x/xorg-server-*.t?z 2> /dev/null`" -o -n "`ls $tmp/x/mesa-*.t?z 2> /dev/null`" ]; then
	echo -e "\E[031;1mRieseguire in runlevel 3.\E[031;0m"
	kdialog --msgbox "Rieseguire in runlevel 3." --caption SlackUp 2> /dev/null
	exit 1
fi
if [ -n "`ls $tmp/a/glibc-solibs-*.t?z 2> /dev/null`" ]; then
	upgradepkg $tmp/a/glibc-solibs-*.t?z
fi
if [ -n "`ls $tmp/a/pkgtools-*.t?z 2> /dev/null`" ]; then
	upgradepkg $tmp/a/pkgtools-*.t?z
fi
if [ -n "`ls $tmp/a/tar-*.t?z 2> /dev/null`" ]; then
	upgradepkg $tmp/a/tar-*.t?z
fi
if [ -n "`ls $tmp/a/xz-*.t?z 2> /dev/null`" ]; then
	upgradepkg $tmp/a/xz-*.t?z
fi
if [ -n "`ls $tmp/a/findutils-*.t?z 2> /dev/null`" ]; then
	upgradepkg $tmp/a/findutils-*.t?z
fi
if [ "${#FILE3[*]}" -gt "0" -o "${#multilib3[*]}" -gt "0" ]; then
	upgradepkg --install-new $tmp/*/*.t?z
fi
if [ "$KDE_alien" == "si" -a "${#kdealien3[*]}" -gt "0" ]; then
	upgradepkg --install-new $tmp/kde_alien/*/*.t?z $tmp/kde_alien/*/*/*.t?z
fi
rimossi=(`awk '/*** OTHER NOTABLE CHANGES AND HINTS ***/{found=0} {if(found) print} /*** PACKAGE REMOVALS SINCE/{found=1}' CHANGES_AND_HINTS.TXT | cut -d/ -f2 |cut -d" " -f1 |tr -d "\r" |grep -v "^$"`)
NUM=0
while [ "$NUM" -lt "${#rimossi[*]}" ]; do
	if [ -n "`ls /var/log/packages/${rimossi[$NUM]}-[0-9]*-[i-x]*-[1-9]* 2> /dev/null`" -a -z "`echo ${rimossi[$NUM]}- |egrep "$whitelist"`" ]; then
		removepkg ${rimossi[$NUM]}
	fi
	NUM=`expr $NUM + 1`
done
cd /etc/rc.d
find . -name "*.new" | while read configfile ; do
	if [ ! "$configfile" = "./rc.inet1.conf.new" \
		-a ! "$configfile" = "./rc.local.new" \
		-a ! "$configfile" = "./rc.M.new" ]; then
		cp -a $(echo $configfile | rev | cut -f 2- -d . | rev) \
		$(echo $configfile | rev | cut -f 2- -d . | rev).bak 2> /dev/null
		mv $configfile $(echo $configfile | rev | cut -f 2- -d . | rev)
	fi
done
mv /usr/share/vim/vimrc.new /usr/share/vim/vimrc 2> /dev/null
if [ -n "`ls $tmp/a/kernel-huge-*.t?z 2> /dev/null`" -a -z "`ls /boot/vmlinuz-* |egrep -v "huge|generic" 2> /dev/null`" ]; then
	DIS=$(cat /etc/mtab |grep " / " |cut -d" " -f1 |sed s/.$//)
	MBR=$(dd if=$DIS bs=446 count=1 2> /dev/null |strings)
	CURVER=$(uname -r |cut -d- -f1)
	VER=$(ls $tmp/a/kernel-huge-?.*.t?z |cut -d- -f3)
	if [ "`zcat /proc/config.gz |grep "CONFIG_EXT4_FS=" |cut -d= -f2`" == "m" ]; then
		if [ "`zcat /proc/config.gz |grep "CONFIG_LOCALVERSION=" |cut -d= -f2`" == "\"-smp\"" -a -z "$bit" ]; then
			/usr/share/mkinitrd/mkinitrd_command_generator.sh -k $VER-smp
		else
			/usr/share/mkinitrd/mkinitrd_command_generator.sh -k $VER
		fi
	fi
	controllo="0"
	if [ -n "`echo $MBR |grep -i grub`" ]; then
		sed -i "s|$CURVER|$VER|g" /boot/grub/grub.cfg
	elif [ -n "`echo $MBR |grep -i elilo`" ]; then
		sed -i "s|$CURVER|$VER|g" /etc/elilo.conf
		/sbin/elilo --efiboot
	elif [ -n "`echo $MBR |grep -i lilo`" ]; then
		sed -i "s|$CURVER|$VER|g" /etc/lilo.conf
		/sbin/lilo
	else
		controllo="1"
		echo -e "\E[031;1mErrore: Bootloader non aggiornato.\E[031;0m"
		kdialog --error "Errore: Bootloader non aggiornato." --caption SlackUp 2> /dev/null
	fi
	if [ "$controllo" -eq "0" ]; then
		echo -e "\E[031;1mBootloader aggiornato.\E[031;0m"
		kdialog --passivepopup "Bootloader aggiornato." --caption SlackUp 2> /dev/null
	fi
fi
rm -rf $tmp $LOCKFILE.$N
echo -e "\E[031;1mAggiornamento completato.\E[031;0m"
kdialog --passivepopup "Aggiornamento completato." --caption SlackUp 2> /dev/null &
Scarica [.sh]    ...scaricato 44 volte, dimensione: 15 KB

È sufficiente eseguirlo da root in questo modo:

# ./slackup
Scritto da: Andrea Peluso (sya54M), . Ultimo aggiornamento: .

Commenti

3 commenti

Indecifrabilmente comodo!!!!!!!!! sei unico!!!!

alessio

http://www.h2o812.it

Verdamende Gomodissimo! Grazie

Andonio

-

Poteva avvisare che "kernel-source" è blacklistato!

Arturo Scagliozzi

http://www.borgodio.it

I campi contrassegnati con * sono obbligatori.

Condividi sui tuoi social preferiti!

Facebook Linkedin Twitter Google+
.