[Linux-Biella] find, exec e script

Andrea Ferraris andrea.ferraris a gmail.com
Ven 21 Apr 2006 22:39:05 CEST


Paolo Ciarrocchi ha scritto:

>>>> La parte appassionante sarebbe quella che ti modifica grub.conf o
>>>> menu.lst in automatico. Anzi, partendo dal parsing del file di
>>>> configurazione del boot loader potresti gia` sapere dov'e` il kernel e
>>>> quindi agire di conseguenza. Il problema, oltre a capire automaticamente
>>>> qual e` il boot loader impiegato dal sistema, sempre in gentoo, e` che
>>>> normalmente grub.conf o menu.lst e` in /boot/grub e quindi non e`
>>>> montato nemmeno lui, mentre quello in /etc e` un simlink a quello.
>>> Ci ho ovviamente pensato ma credo sia fuori dalla mia portata.
>> Ma, non credo. Sia lilo che grub hanno delle parole chiave nei file di
>> configurazione che ti permettono di identificare il nome del kernel e il
>> suo percorso (sara` vero? credo di si`, ma non vorrei finire come Muzio
>> Scevola).

Sono decisamente convinto che sia abbastanza semplice, soprattutto
usando uno strumento come awk, p.es. tipo (per grub):

# contatore
n=0

# array kfp (kernel full path), i cui elementi sono separati da ":"
kfp=""

# array kn (kernel name), i cui elementi sono separati da ":"
kn=""

for i in `awk '{if($1=="kernel") print $2}' grub.conf`
do
	if [ "$n" -gt "0" ]
	then
		kfp="$kfp":"$i"
		kn="kn":`basename "$i"`
	else
		kfp="$i"
		kn=`basename "$i"`
	fi
	n=$(($n+1))
done

A questo punto (non e` che abbia testato molto, per cui potrebbe non
essere cosi`) avrai in $kfp tutti i full path dei vari kernel installati
in grub.conf (separati da ":"; quindi e` decisamente facile farne il
parsing) e in $kn tutti i nomi dei vari kernel installati in grub.conf e
in $n il loro numero. Probabilmente fa abbastanza schifo, nel senso che
puo` darsi che bash gestisca nativamente i vettori, ma non mi ricordo
ne' se, ne' se si` come e non ho voglia di andarmelo a rivedere adesso.
Molto probabilmente si puo` fare meglio, questa e` solo un'idea.

>> Per vedere quale boot loader e` installato credo che entrambi abbiano
>> delle modalita` di query o listing della configurazione e da
>> quell'output o dalla sua assenza dovresti poter capire quale e` usato.
>> Poi comunque se qualcuno usasse isolinux o syslinux o magari
>> qualcos'altro ... La questione diventa complessa e lo script uno
>> scriptone e quindi si ritorna al punto: chi te lo fa fare? Se ti
>> diverti, come credo, fai bene, ma come esercizio.
>>
> 
> E' assolutamente un esercizio, utile per impare un po' di scripting e di zenity.
> Sulla mia macchina funziona, percio' perche' non condiverlo?

Certo, fai bene, ci possiamo divertire un po' tutti ed e` certamente
interessante anche quanto sotto.

> Cmq, ho implementato quanto mi hai suggerito, il modo in cui distinguo
> tra file e symlink è un hack, ma non ho trovato di meglio.
> 
> #!/bin/bash
> 
> #		This script is distribuited under
> #		GNU GENERAL PUBLIC LICENSE
> #		       Version 2, June 1991
> #               http://www.gnu.org/licenses/gpl.txt
> 
> 
> ls -lt /boot/vmlinuz*|grep "\->"| cut -d " " -f 13,14,15|zenity
> --text-info --title "Symbolic links found" --width=400 &
> running_kernel=$(uname -r)
> 
> kernel=$(ls -lt /boot/vmlinuz*|grep -v "\->" | cut -d " " -f 8| zenity
>  --list --title "Finding all installed kernels..." --text "You are
> currently running "$running_kernel --column "kernels found")
> 
> 
> case $? in
>   0)
> 	# Check whether the script is running as root
> 	if [ `id -u` != "0" ]; then
> 		echo "Sorry, you are not root."
> 		zenity --error --text="Sorry, you are not root" --title "Error message"
> 		exit 1
> 	fi
> 
> 	
> 	if [ "$kernel" = "" ]
> 		then
> 	       	zenity --error --text="You didn't select any kernel"
>        		exit
> 	fi
> 	echo "I'm going to delete" $kernel
> 	vmlinuz=$(echo $kernel| cut -d "/" -f 3)
> 	ver_linux=${vmlinuz/vmlinuz-/}
> 
> 	rm -f /boot/vmlinuz-$ver_linux
> 	rm -f /boot/config-$ver_linux
> 	rm -f /boot/System.map-$ver_linux
> 	rm -f /boot/initrd.img-$ver_linux
> 	rm -rf /lib/modules/$ver_linux
> 	zenity --info --text="grub/lilo configuration might need to be updated"
> 	;;
> 
>   1)
>         exit ;;
>   -1)
>         exit ;;
> esac
> 
> 
> --
> Paolo
> http://paolociarrocchi.googlepages.com
> _______________________________________________
> Linux mailing list
> Linux a ml.bilug.linux.it
> http://hobbit.bmm.it/mailman/listinfo/linux
> 



Maggiori informazioni sulla lista Linux