[ Srđan Pavlović @ 25.08.2009. 01:19 ] @
Hocu da napisem sebi jednu malu skripticu za automatizaciju
kompajliranja kernela (na Archu), i jedan od koraka u skripti je
skidanje najnovijeg kernela sa ftp://ftp.kernel.org/pub/linux/kernel/v2.6/testing/
direktorijuma na serveru. Skidam tar.gz, znaci trenutno je najnoviji ovaj:

linux-2.6.31-rc7.tar.gz

a ja bih hteo da moja skripta uzme naziv svih
fajlova koji pocinju sa "linux-2.6.32" i da dalje nadje string koji ima
najvecu rc vrednost recimo ako u direktorijumu postoje 2.6.32-rc2 i rc3,
da mi vrati ceo taj "linux-2.6.32-rc3.tar.gz" string da onda mogu da ga
prosledim wget komandi.

googlao sam malo "wget wildacrd", ali wget nema to, ima samo rekurzivnu
opciju (-r switch) koja skida rekurzivno vise fajlova, koliko sam skontao,
to zavisi da li servar ima directory-index, ali ne kontam se u to mnogo
te ne znam kako bih konkretno to iskoristio da izvucem najnoviji string.

Kako ovo da odradim - nije neka frka da sam promenim rc-najnoviji_broj u skripti
to je 10 sec, ali onako cisto me zanima jel ima neko resenje da skinem automatski
najnoviji 2.6.32.rc-x (kad izadje 2.6.32, a uskoro ce).

Pozz ;)
[ Srđan Pavlović @ 26.08.2009. 06:59 ] @
Hahaha, nasao workaround da ovo odradim :)))

Otprilike algoritam je ovaj:

wget -c ftp://ftp.kernel.org/pub/linux...l/v2.6/testing/linux-2.6.32-rc10.tar.gz

Naravno, posto veceg od rc10 sigurno nema (nema ni 9, al ajd), za pocetak krecem od 10 :)
Dalje samo proveravam jel skinuo (jel ima fajl u direktorijumu), ako nije
smanjujem rc za 1 ... i tako dok ne vidi da ima nesto skinuto u diru, cim ima
prelazim na seldeci korak - raspakivanje :)

[Ovu poruku je menjao Srđan Pavlović dana 26.08.2009. u 08:18 GMT+1]
[ combuster @ 26.08.2009. 07:04 ] @
Sweet! N1!
[ Srđan Pavlović @ 26.08.2009. 09:49 ] @
Evo, ako neko zna da ovo izvede elegantnije
(pogotovo ova if redaljka), slab sam jako u bash
skriptingu, pa sam sklepao ovo tako... :D

[ Jbyn4e @ 26.08.2009. 19:59 ] @
Citat:

wget -c ftp://ftp.kernel.org/pub/linux...sting/linux-2.6.32-rc10.tar.gz &> skriptlog.txt
if [ -r linux-2.6.32-rc10.tar.gz ]; then
idemodalje
exit
fi


Mali hint:
Code:

for i in `seq 10 -1 1`; do echo linux-2.6.32-rc$i.tar.gz; done


Pa ti vidi kako da to upotrebis....

[ Srđan Pavlović @ 27.08.2009. 08:09 ] @
ma da, mislio sam da upotrebim for petlju, ali nesto me mrzelo da
gledam sintaksu po man stranicama... mislis ovako nesto:

for i in `seq 10 -1 1`; do wget -c ftp://ftp.kernel.org/pub/linux...sting/linux-2.6.32-rc$i.tar.gz &> skriptlog.txt;
if [ -r linux-2.6.32-rc$i.tar.gz ]; then idemodalje;
done
[ Jbyn4e @ 27.08.2009. 11:28 ] @
Tako nesto...

JEsi probao da li radi?
[ Srđan Pavlović @ 27.08.2009. 12:32 ] @
Niisam, probacu kad izadje 2.6.32-rc1 ;) Zato sam i pravio ovu skriptu
posto 31 prelazi u final za koji dan, pa kad krenu 32-rc da se ne zezam
posto cu svaki za redom da stavljam kako izadje :)


Al ne vidim sto ne bi radilo ovo...

Planirao sam da dodam i deo da skripta upise sama i odgovarajucu
sekciju u menu.lst - ali za sada sam ostavio bez toga dok ne budem
siguran da sam to uradio na pametan nacin, tj. da ne zeznem nesto.
[ niceness @ 27.08.2009. 15:27 ] @
Ako ti treba samo najnovija verzija onda mozes da iskoristis http://www.kernel.org/kdist/finger_banner.
Nesto kao:
Code:
wget http://www.eu.kernel.org/pub/linux/kernel/v2.6/testing/linux-$(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/').tar.gz

ali zar ne bi bilo bolje skidati zakrpe izmedju -rc verzija, a ne ceo source (ili mozda koristiti git)?
[ combuster @ 27.08.2009. 15:33 ] @
Sa zakrpama stedi bandwith a rekompajliranje kernel-a svaki dan sa patch-evima izmedju rc-a je vec sick :D
[ Srđan Pavlović @ 27.08.2009. 16:00 ] @
Pa svaka sledeca RC verzija ne izlazi bas tako cesto, nije mi neki problem
da svucem 70-ak mb kad izadje, a starije sourceve, kernele, i module brisem ako novi radi OK.

niceness bravo za post, to mi je trebalo! :)

Sad moze sve sa if-ovima i for petljama out :)
[ Srđan Pavlović @ 28.08.2009. 17:58 ] @
Evo, probao sam ovo (malo sam napravio "pametniju skriptu", nadam se), i sve prolazi
ok samo zadnji deo (mkinitcpio) ne prolazi. Testriao sam sa ovim sad rc8 sto je izasao.

Medjutim, i kada sam probao rucno da odradim i prodjem mkinitcpio, pravio je neke
probleme, moze biti da su nesto zeznuli u rc8, sa istim config-om sam iskompajlirao rc7 lepo.

Ako je neko kompajlirao rc8 moze da mi potvrdi da nije do kernel-a.

Dakle u ovoj dole sve radi, samo mkinitcpio nihe hteo.

Code:

#!/bin/bash

# PROCITAJ PRVO (!):
# 1. Custom kernel string mora da bude prazan string u .config-u kernel-a!
# 2. fajl config.moj se mora nalaziti u /home/user/ direktorijumu
# 3. (recimo /home/srdjan/config.moj)
# 4. startovati kao root!

clear
echo "------------------------------------------------"
echo "Pokrenut je skript za automatsko dovlacenje,"
echo "kompajliranje, i instaliranje novog kernel-a."
echo "------------------------------------------------"

echo "1. Dovlacenje najnovije rc verzije sa servera..."
 wget http://www.eu.kernel.org/pub/linux/kernel/v2.6/testing/linux-$(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/').tar.gz
clear
echo "2. Premestanje dovucene kernel arhive u /usr/src..."
 mv linux-$(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/').tar.gz /usr/src/linux-$(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/').tar.gz
clear
echo "3. Pozicioniranje u /usr/src direktorijum..."
 cd /usr/src/ 
clear
echo "4. Raspakivanje arhive sa kernelom..."
 tar xvf linux-$(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/').tar.gz
clear
echo "5. Promena imena raspakovanog dira..."
 mv linux-$(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/') linux-$(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/')-TESTING
clear
echo "6. Pozicioniranje u direktorijum sa izvornim kodom..."
 cd /usr/src/linux-$(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/')-TESTING   
clear
echo "7. Priprema za kompajliranje..."
 make clean
clear
echo "8. Kopiranje sacuvane konfiguracije kernela..."
 cp /home/srdjan/config.moj /usr/src/linux-$(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/')-TESTING/.config
clear
echo "9. Kompajliranje modula...."
  make modules
clear
echo "10. Kompajliranje kernela..."
 make bzImage
clear
echo "11. Instalacija kernel modula..."
 make modules_install
clear
echo "12. Instaliranje kernela..."
 cp -v arch/x86/boot/bzImage /boot/vmlinuz-$(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/')-TESTING
clear
echo "13. Pravljenje mkinitcpio..."
 mkinitcpio -k $(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/')-TESTING -g /boot/kernel$(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/').img
clear
 echo "--------------------------------------------------------"
 echo "Kraj. Ubacite sekciju sa novim kernelom u menu.lst."
 echo "Deo skripte sa ubacivanjem u menu.lst u planu ;)"
 echo "--------------------------------------------------------"
[ niceness @ 29.08.2009. 18:58 ] @
Mala napomena. Umesto da svaki put pokreces wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/' sacuvaj izlaz te komande u promenjivu..
Code:
LINUX_KERN_VER="$(wget -q http://www.eu.kernel.org/kdist/finger_banner -O - | sed '/mainline/!d;s/.* \(.*\)$/\1/')"

i onda koristi tu promenjivu gde ti treba verzija. Bice malo efikasnije :)

Takodje, posle svake naredbe bi trebao staviti proveru da li se naredba uspesno izvrsila.
[ Srđan Pavlović @ 29.08.2009. 19:03 ] @
Da, to sam i ja pomislio da na pocetku to stavim u promenljivu, da
ne ceka svaki put da se wget nakaci, vec samo prvi put ;)

Thanks ;)