Se avete problemi con l'installazione e la configurazione di Slackware64 postate qui. Non usate questo forum per argomenti che trattano la Slackware32 o generali... per quelli usate rispettivamente il forum Slackware e Gnu/Linux in genere.
Regole del forum
1) Citare sempre la versione di Slackware64 usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware64, se l'argomento è Slackware32 o generale usate rispettivamente il forum Slackware o Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
#!/bin/sh
echo "Avvio dell'aggiornamento del kernel ..."
cd /packages/current/kernel
VERSION=$( uname -r 2>/dev/null)
MAJOR=${VERSION%\.*\.*}
MINOR=${VERSION#*.}
MINOR=${MINOR%\.*}
PATCH=${VERSION##*.}
BUILD="0"
OLD=$MAJOR.$MINOR.$PATCH
MAJOR=$((MAJOR - 3))
MINOR="0"
PATCH="0"
echo ""
echo "Rilevamento della versione corrente del kernel: "$OLD
echo ""
echo "Rilevamento della versione da installare ..."
until [ -f ./kernel-generic-$MAJOR*txz ]; do
if [ -f ./kernel-generic-$MAJOR*txz ]; then
echo "pirla"
else
MAJOR=$((MAJOR + 1))
fi
done
until [ -f ./kernel-generic-$MAJOR.$MINOR.*txz ]; do
if [ -f ./kernel-generic-$MAJOR.$MINOR.*txz ]; then
echo "pirla"
else
MINOR=$((MINOR + 1))
fi
done
until [ -f ./kernel-generic-$MAJOR.$MINOR.$PATCH-*txz ]; do
if [ -f ./kernel-generic-$MAJOR.$MINOR.$PATCH-*txz ]; then
echo "pirla"
else
PATCH=$((PATCH + 1))
fi
done
until [ -f ./kernel-generic-$MAJOR.$MINOR.$PATCH-x86_64-$BUILD.txz ]; do
if [ -f ./kernel-generic-$MAJOR.$MINOR.$PATCH-x86_64-$BUILD.txz ]; then
echo "pirla"
else
BUILD=$((BUILD + 1))
fi
done
echo ""
echo "Il kernel $OLD sarà aggiornato alla versione $MAJOR.$MINOR.$PATCH-$BUILD"
upgradepkg kernel-generic-$MAJOR.$MINOR.$PATCH-x86_64-$BUILD.txz
upgradepkg kernel-huge-$MAJOR.$MINOR.$PATCH-x86_64-$BUILD.txz
upgradepkg kernel-modules-$MAJOR.$MINOR.$PATCH-x86_64-$BUILD.txz
upgradepkg kernel-headers-$MAJOR.$MINOR.$PATCH-x86-$BUILD.txz
upgradepkg kernel-source-$MAJOR.$MINOR.$PATCH-noarch-$BUILD.txz
VERSION=$MAJOR.$MINOR.$PATCH
echo "Installazione dei nuovi pacchetti completata"
mv -v kernel *.txz ../done
echo "Uscita dalla directory /packages/current/kernel"
echo "Ingresso nella directory /boot"
cd /boot
echo ""
echo "Esecuzione di mkinitrd ..."
mkinitrd -c -k $VERSION -m ext4 -l it -o /boot/initrd-generic-$VERSION.gz
echo ""
echo "Rimozione del vecchio initial ramdisk ..."
rm -v /boot/initrd-generic-$OLD.gz
echo "Aggiornamento dei link simbolici"
rm initrd-generic
ln -s initrd-generic-$VERSION.gz initrd-generic
rm vmlinuz-generic
ln -s vmlinuz-generic-$VERSION vmlinuz-generic
echo "Aggiornamento del kernel completato"
echo ""
echo "Uscita dalla directory /boot"
echo "Ingresso nella directory /packages/sbo/sistema/sbo/nvidia-kernel"
cd /packages/sbo/sistema/sbo/nvidia-kernel
echo ""
echo "Aggiornamento dei moduli del driver nvidia ..."
echo "Avvio dello slackbuild nvidia-kernel.SlackBuild"
KERNEL=$VERSION ./nvidia-kernel.SlackBuild
echo ""
echo "Aggiornamento del pacchetto nvidia-kernel ..."
upgradepkg /tmp/nvidia-kernel*tgz
echo ""
echo "Uscita dalla directory /packages/sbo/sistema/sbo/nvidia-kernel"
echo "Ingresso nella directory /packages/sbo/sistema/sbo/virtualbox-kernel"
cd ../virtualbox-kernel
echo ""
echo "Aggiornamento dei moduli di virtualbox ..."
echo "Avvio dello slackbuild virtualbox-kernel.SlackBuild"
KERNEL=$VERSION ./virtualbox-kernel.SlackBuild
echo ""
echo "Aggiornamento del pacchetto virtualbox-kernel ..."
upgradepkg /tmp/virtualbox-kernel*tgz
echo ""
echo "Rimozione dei pacchetti generati dalla directory /tmp ..."
rm -v /tmp/*kernel*tgz
echo ""
echo "Aggiornamento della configurazione del sistema completata"
echo "ATTENZIONE! Se il kernel è stato aggiornato ad una nuova MAJOR release o una nuova MINOR release"
echo "prima di riavviare il sistema aggiorna i template in /etc/grub.d, poi esegui grub-mkconfig "
echo "e grub-install per aggiornare la configurazione del bootloader."
echo "Al termine puoi riavviare il sistema."
stendi un velo pietoso sulle righe "echo pirla". Di solito uso quell'output per intercettare degli errori nei debug, poi mi sono dimenticato di rimuoverli
I percorsi che fanno capo alle directory /packages/current/kernel /packages/sbo/sistema/sbo/nvidia-kernel e /packages/sbo/sistema/sbo/virtualbox-kernel si devono al fatto che pacchetti e slackbuild li gestico e li conservo in una partizione dedicata che monto in una directory /packages
Le varie reiterate righe di output (echo) sono finalizzate a individuare agevolmente la fase in cui si verifica un eventuale intoppo imprevisto. In ogni caso lo sto usando ormai da parecchi mesi e ormai è ben collaudato. L'unico imprevisto che ho incontrato relativamente recente si è verificato in un caso in cui il nuovo kernel scaricato era in realtà una ricompilazione del kernel già installato. Si trattava di un'eventualità che non avevo previsto. Se non ricordo male l'avevo corretto, ma non sono sicuro. In ogni caso l'imprevisto portava alla rimozione del initial ramdisk appena installato
Se posso permettermi di dare un suggerimento, meglio non fare upgradepkg del kernel, se quello nuovo per qualche motivo non va ti ritrovi senza kernel funzionante.
Io faccio installpkg e mi ritrovo così anche il vecchio kernel installato. Faccio il boot con il nuovo, e se tutto è ok allora rimuovo il vecchio.
Io ho preso un'altra strada.
In /boot ho messo un vmlinuz sicuramente funzionante così se mi dimentico qualsiasi pezzo su lilo o altro o se non funge il pacchetto o il penultimo kernel è fallato, comunque ho una release certificata (da me stesso)
Così non devo gestire duplicati in /var/log/packages
Facevo anche io così, ma ora ho smesso di ricompilarmi i kernel, mi bastano quelli di Pat, quindi faccio in quel modo. L'importante è avere sempre un kernel sicuramente funzionante
In verità qui abbiamo tutti le competenze per fare ognuno il suo in attesa che Pat si decida a fare qualcosa. (per esempio, da tanti anni sul readme della distribuzione c'è scritto "usa il kernel-generic e fatti un initrd e non usare l'huge" ma di fatto l'installer mette l'huge; solo recentemente l'installer ha uno script per creare un initrd in automatico e fa puntare vmlinuz a generic sotto alcune condizioni; tuttavia un upgradepkg kernel* fa ripuntare vmlinuz ad huge e se non fai azioni manuali con quello ti ritrovi)
Personalmente ho passato diverse fasi. Una di queste prevedeva la modifica di mkinitrd.conf per l'iniezione di roba custom.
Da un po' di tempo mi affido al plugin zlookkernel di slackpkg+ per manutenere l'initrd.
Il vmlinuz certificato altro non è che una versione huge di quello di Pat rinominato in vmlinuz-funzionante con relativa entry statica in lilo.conf che non varia nel tempo così se faccio qualche upgrade fallato quello c'è. In lilo ho una sezione con kernel-generic (default), una con kernel-huge e una con kernel-funzionante
#!/bin/bash
#
# Script to automate kernel compilation
#
# Place this script in /usr/src, chmod +x it to make it executable
# This script must be run as root
#
set -eu
if [ ${1:-""} ]; then
KERNELVERSION=$1
else
KERNELVERSION=$(ls -l /boot/vmlinuz-generic | cut -d">" -f2 | cut -d- -f3)
fi
if [ -x /usr/sbin/iucode_tool ]; then
if ! [ -e /boot/intel-ucode.cpio ]; then
iucode_tool -v --write-earlyfw=/boot/intel-ucode.cpio /lib/firmware/intel-ucode{,-with-caveats}
fi
fi
mkinitrd -F -k $KERNELVERSION
mv /boot/initrd.gz /boot/initrd-$KERNELVERSION.gz
ln -s /boot/initrd-$KERNELVERSION.gz /boot/initrd.gz
grub-mkconfig -o /boot/grub/grub.cfg
Per la cronaca sono in fase di fixing / improvements di slackpkg+, quindi ogni suggerimento è ben accetto.
Mi è balzata pure in testa l'idea di supportare pacchetti duplicati in lista proprio per gestire un multikernel o cose così senza dover blacklistare e fare a mano.
Da capire - prima della fattibilità - se può essere utile.
Poi zlookkernel ora gestisce lilo ed elilo e nella prossima release sarà abilitabile in configurazione. Potrebbe essere utile metterci pure grub ma non me lo sono mai studiato