[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