[RISOLTO] tutorial kernel upgrade + initrd
sperando di far cosa gradita senza annoiare alcuno, ecco un tutorial per cercare di comprendere insieme a voi qualcosa di piu' su initrd in slackware.
dopo aver letto e attinto dai piu' recenti tutorials per la compilazione del kernel (README.initrd, wikislack di loris su slacky.eu, alienbob etc etc), ho deciso di buttarmi e provare. a tanti non piace initrd, vabbe' pero' a volte serve

ovvio, ai piu' bravi non serve e non piace. il tutto e' rivolto a quelli (niubbi ^_^) come me sempre work-in-progress e appassionati della slack* in tutte le sue sfumature.
e ce ne sono, credetemi! per tutte le correzioni o consigli di chi vuole contribuire, son sempre ben accette, grazie a voi.
in questa guida son partito con i driver nouveau. ho messo i driver proprietari nvidia alla fine di tutto col kernel nuovo. pat consiglia per la loro stabilita' i 3.4.* e io preso il piu' recente da kernel.org.
vi posto un semplicissimo /etc/fstab
Codice: Seleziona tutto
/dev/sda1 swap swap defaults 0 0
/dev/sda2 / ext4 defaults,noatime 1 1
#/dev/cdrom /mnt/cdrom auto noauto,owner,ro,comment=x-gvfs-show 0 0
/dev/fd0 /mnt/floppy auto noauto,owner 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
proc /proc proc defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
tmpfs /tmp tmpfs defaults,noatime,size=4G 0 0
tmpfs /home/utente/.cache/ tmpfs defaults,noatime,size=4G 0 0
questo e' ora il mio /etc/lilo.conf di una installazione di slackware 14.0 x86 dopo il kernel upgrade utilizzando initrd, e' il punto di arrivo di questa guida:
Codice: Seleziona tutto
image = /boot/vmlinuz-generic-smp-3.2.29-smp # per il generic-smp ci vuole d'obbligo initrd, ho sostituito vmlinuz e rilanciato lo script mkinitrd
initrd = /boot/initrd.gz
root = /dev/sda2
label = 3.2.29-smp
read-only
# Linux bootable partition config ends
image = /boot/vmlinuz-generic-smp-3.4.42-smp
initrd = /boot/initrd-3.4.42-smp.gz
label = 3.4.42-smp
read-only
dopo la classica installazione di slackware e arbitraria configurazione che fan tutti, questa e' la procedura per iniziare il kernel upgrade from source:
Codice: Seleziona tutto
$ su -
Codice: Seleziona tutto
# cd /home/utente # entrate nella vostra home personale che di sicuro dovreste aver creato gia'
Codice: Seleziona tutto
# mkdir -p packaging-x86 # creo gia' una directory per lo slackbuild per pacchettizzare dopo i kernel-modules. lo trovate per esempio in http://slackware.org.uk/slackware/slackware-current/source/k/packaging-x86/kernel-modules-smp/
Codice: Seleziona tutto
# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.42.bz2 # scarico il kernel
Codice: Seleziona tutto
# cd packaging-x86
Codice: Seleziona tutto
# wget ftp://ftp.slackware.org.uk/slackware/slackware-14.0/source/k/packaging-x86/kernel-modules-smp/kernel-modules-smp.SlackBuild # scarico lo slackbuild kernel-modules-smp
Codice: Seleziona tutto
# wget ftp://ftp.slackware.org.uk/slackware/slackware-14.0/source/k/packaging-x86/kernel-modules-smp/rc.modules.new
Codice: Seleziona tutto
# wget ftp://ftp.slackware.org.uk/slackware/slackware-14.0/source/k/packaging-x86/kernel-modules-smp/slack-desc
Codice: Seleziona tutto
# cd /home/utente
Codice: Seleziona tutto
# tar -C /usr/src/ -jxf linux-3.4.42 # scompatto il kernel in /usr/src
Codice: Seleziona tutto
# cd /usr/src
Codice: Seleziona tutto
# rm linux
Codice: Seleziona tutto
# ln -s linux-3.4.42/ linux # si ricrea il link al kernel nuovo dopo aver eliminato il precedente
Codice: Seleziona tutto
# cd linux
Codice: Seleziona tutto
# make mrproper # spazziamo via la precedente configurazione
Codice: Seleziona tutto
# wget http://slackware.mirrors.tds.net/pub/slackware/slackware-14.0/testing/source/config-testing-3.4.11/config-generic-smp-3.4.11-smp # questa e' una configurazione proposta dallo stesso pat che io utilizzero'
Codice: Seleziona tutto
# cp config-generic-smp-3.4.11-smp /usr/src/linux/.config # copio la configurazione del kernel generic-smp
Codice: Seleziona tutto
# make menuconfig # io uso sempre menuconfig, se vi garba tutto (io non ho toccato niente) quando avete finito si va a selezionare save an alternate .config, date enter ed exit
Codice: Seleziona tutto
# make -j* # se avete un processore dualcore mettete -j3, per un quadcore -j5, -j2 per un singolo core # compiliamo il kernel nuovo
Codice: Seleziona tutto
# cp arch/x86/boot/bzImage /boot/vmlinuz-generic-smp-3.4.42-smp # si copia l'immagine del kernel in /boot
Codice: Seleziona tutto
# cp System.map /boot/System.map-generic-smp-3.4.42-smp
Codice: Seleziona tutto
# cp .config /boot/config-generic-smp-3.4.42-smp
adesso si puo' procedere in due maniere: la prima e' continuare col tutorial e dare modules_install come ho messo piu' avanti, oppure si puo' installare il kernel ora dopo averlo pacchettizzato evitando di dare make install come ho fatto in seguito. quindi si scarica lo slackbuild e lo mettete dove volete. io l'ho messo nella mia /home
Codice: Seleziona tutto
# mkdir -p /home/utente/kernel-generic-smp
Codice: Seleziona tutto
# cd /home/utente/kernel-generic-smp
Codice: Seleziona tutto
# wget http://slackware.org.uk/slackware/slackware-14.0/source/k/packaging-x86/kernel-generic-smp/kernel-generic-smp.SlackBuild
Codice: Seleziona tutto
# wget http://slackware.org.uk/slackware/slackware-14.0/source/k/packaging-x86/kernel-generic-smp/slack-desc
modificate lo slackbuild con la versione -3.4.42 o quella che volete, indicate come kernel=generic-smp. trovate tutto subito sotto le prime righe
Codice: Seleziona tutto
# chmod +x kernel-generic-smp.SlackBuild
Codice: Seleziona tutto
# ./kernel-generic-smp.SlackBuild
Codice: Seleziona tutto
# cd /tmp
Codice: Seleziona tutto
# installpkg kernel-generic-smp-3.4.42-smp.txz
Codice: Seleziona tutto
# make modules_install # installiamo i moduli del kernel nuovo ma non compariranno in /etc/rc.d/ (alienbob dice di ricopiare quelli vecchi, io ho voluto pacchettizzare i nuovi. non sapevo che esisteva uno slackbuild per questo)
Codice: Seleziona tutto
# chmod +x /home/utente/packaging-x86/kernel-modules-smp.SlackBuild # rendete eseguibile lo slackbuild
Codice: Seleziona tutto
# nano /home/utente/packaging-x86/kernel-modules-smp.SlackBuild # n.b. dovete cambiare la versione del kernel nello slackbuild perche' io preso quello della 14; va bene anche quello -current quindi il kernel che trovate sara' il 3.2.29 o il 3.8.8)
editare con VERSION=${VERSION:-3.4.42} e salvare con ctrl+o, enter e ctrl+x
Codice: Seleziona tutto
# cd /home/utente/packaging-x86 && ls # spostiamoci nella directory dello slackbuild
Codice: Seleziona tutto
# ./kernel-modules-smp.SlackBuild # e si crea il pacchetto dei kernel-modules necessari per initrd
Codice: Seleziona tutto
# cd /tmp && installpkg kernel-modules-smp*.t?z # installiamo i moduli -non usare mai upgradepkg- che compariranno finalmente in /etc/rc.d come rc.modules-3.4.42-smp
Codice: Seleziona tutto
# cp /usr/share/mkinitrd/mkinitrd_command_generator.sh /boot # io son solito ricopiare lo script mkinitrd nella directory /boot
qui riprende la guida se vogliamo installare il kernel senza pacchettizzarlo (prima lo abbiamo infatti diventare un pacchetto che poi abbiamo installato)
Codice: Seleziona tutto
# cd /usr/src/linux && make install # non dimentichiamoci di installare il kernel (utilissima la guida del nostro loris su http://www.slacky.eu/wikislack/index.php?title=Compilazione_e_ricompilazione_Kernel_su_Slackware#Compilazione_Kernel_Serie_3.x.x)
Codice: Seleziona tutto
# cd /boot # andiamo nella directory /boot
Codice: Seleziona tutto
# chmod +x mkinitrd_command_generator.sh # se non lo avete gia' fatto, rendete eseguibile lo script mkinitrd. e' eseguibile quando cambia in verde la colorazione e si aggiunge *, per chi non lo sa ;)
Codice: Seleziona tutto
# ./mkinitrd_command_generator.sh # di sicuro riconoscerete nella restituzione del comando il kernel vecchio 3.2.29-smp quindi
modificare il kernel 3.2.9-smp con 3.4.42-smp e cosi' anche modificare /boot/initrd.gz in /boot/initrd-3.4.42-smp.gz. dopo le correzioni rilanciate lo script, vedrete che si prende i kernel-modules 3.4.42-smp che avete installato prima. li deve prendere pena kernel panic al riavvio!
Codice: Seleziona tutto
# nano /etc/lilo.conf # modifichiamo lilo
e lo modificate come il mio
Codice: Seleziona tutto
# lilo -c -v
Codice: Seleziona tutto
# reboot
se volete, potete aggiungere su /etc/lilo.conf in alto sotto boot = /dev/sda il seguente
Codice: Seleziona tutto
default = 3.4.42-smp
in modo da far partire in automatico il boot col kernel nuovo (come dice alienbob) e cio' lo vedete alla schermata del prompt cioe' la scelta del sistema operativo da avviare
ho installato poi da slackbuilds.org i driver nvidia con le varie dipendenze e funzia tutto. gia' che ci siamo, spendiamoci due paroline a riguardo:
prima di tutto mettete i nouveau in blacklist installando il seguente pacchetto xf86-video-nouveau-blacklist-noarch-1.txz (lo trovate nel dvd di installazione nella directory /extra oppure lo prendete con slackpkg install.
installate sbopkg. con esso e' piu' facile dopo il reboot installare il kernel nvidia e il suo driver piu' le sue dipendenze. le dipendenze sono elencate in slackbuilds.org. quindi dopo il reboot, vi loggate come root in init 3
Codice: Seleziona tutto
# su -
Codice: Seleziona tutto
# sbopkg
Codice: Seleziona tutto
# sbopkg -i nvidia-kernel
Codice: Seleziona tutto
# sbopkg -i nvidia-driver
per ritornare ai nouveau date
Codice: Seleziona tutto
# removepkg xf86-video-nouveau-blacklist-noarch-1.txz
Codice: Seleziona tutto
# nvidia-switch --remove
dato che ho installato oggi un kernel piu' aggiornato per prova, sempre dopo aver messo in blacklist i nouveau e poi reboot, con sbopkg ho reinstallato nvidia-kernel indicando come opzione KERNEL=3.4.43-smp e poi nvidia-driver.
aggiungo ancora che se riscontrate questo errore al boot:
Codice: Seleziona tutto
/usr/sbin/alsactl: set_control:1328:failed to obtain info for control#12
basta dare
Codice: Seleziona tutto
# alsactl -f /var/lib/alsa/asound.state store
ok, spero di non essere stato noioso...ciao a tutti!