Sziasztok!
Hosszú lesz, fájni fog :D
Nem mindenhol a legszebb megoldást választottam, de talán kedvet kap más is fejlesztgetni...
Mivel jelenleg én már aktívan a Karmic Koala verziót használom és ebben lehetőség adódik a Grub2 háttérkép cseréjére így gondoltam összeütök egy kis alkalmazást.
Lássuk, hogy is álltam neki, hogyan csináltam meg.
Először is itt találhatunk egy kis leírást arról, hogy hogyan cserélhetjük ki a Grub2 hátterét.
Nagyvonalakban leírom:
Ugyebár rendelkeznünk kell a Grub2 telepítésével (ez megoldott, hiszen a Karmic -ban már alapértelmezett)
Fel kell? telepíteni a
grub2-splashimages
csomagot, tehát feltelepítettem:
sudo apt-get update && sudo apt-get install grub2-splashimages
Ez többek közt telepít nekünk néhány példa-háttérképet amit a
ls /usr/share/images/grub/
parancs kiadásával ellenőrizhetünk...
A Grub2 alapértelmezetten az
/boot/grub,/usr/share/images/desktop-base
útvonalakon keresi a háttérképet... ezt illik felbővíteni a
/usr/share/images/grub/
mappával is.
Tehát nyissuk meg szerkesztésre a
/etc/grub.d/05_debian_theme
fájlt:
sudo nano /etc/grub.d/05_debian_theme
Keressük meg a következő sort:
for i in {/boot/grub,/usr/share/images/desktop-base}/moreblue-orbit-grub.{png,tga}
cseréljük le erre:
for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub}/moreblue-orbit-grub.{png,tga}
Mentsük el..[Ctrl+O]
Ezáltal a Grub2 a következő helyeken fogja keresni a háttérképünk:
/boot/grub
/usr/share/images/desktop-base
/usr/share/images/grub
figyeljük meg, hogy a módosított sorban ott az aktuálisan kiválasztott kép neve:
moreblue-orbit-grub.{png,tga}
azaz png vagy tga kiterjesztéssel..
Amennyiben módosítjuk - az oldal példájánál maradva - a
Plasma-lamp.{png,tga}
képre akkor a
for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub}/moreblue-orbit-grub.{png,tga}
sort le kell cserélni a kép nevének megfelelően:
for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub}/Plasma-lamp.{png,tga}
Ezek után már csak ki kell adni a
sudo update-grub
parancsot, aminek hatására frissül a grub:
Updating /boot/grub/grub.cfg ...
Found Debian background: Plasma-lamp.tga
Found linux image: /boot/vmlinuz-2.6.26-rt1-rt
Found initrd image: /boot/initrd.img-2.6.26-rt1-rt
Found linux image: /boot/vmlinuz-2.6.26-1-686
Found initrd image: /boot/initrd.img-2.6.26-1-686
Found linux image: /boot/vmlinuz-2.6.25-2-686
Found initrd image: /boot/initrd.img-2.6.25-2-686
done
Yep.
Na most lássuk milyen feladatra is van szükség...
Tudjon a saját mappánkból letölteni, illetve esetleg a netről is..
Ne kelljen vele foglalkozni, milyen méretű a kép, azaz méretezze át nekünk automatikusan...
Nagyjából ennyi; megoldásnak: bash szkript + imagemagick párost választottam.
Az Imagemagick-ot fel kell telepíteni:
sudo apt-get install imagemagick
Imagemagick átméretezési példák
Mivel nekünk mindig a 640x480 -as felbontásra és lehetőleg png, vagy tga kiterjesztésű képre van szükség ezért:
convert forráskép[png|jpg|gif|jpeg] -resize 640x480! kimeteni_kép[png]
Megoldás jónak tűnik... na de a kimeneti képnek illik png nek lenni, na majd erről később..
Belevágtam:
gedit grub2screen.sh
#!/bin/bash
#2 paraméterünk lesz
#1 - a kép amit akarunk
#2 - ilyen néven használjuk
file=$1
new=$2
ext=${file#*.} #kiderítjük mi a forráskép kiterjesztése azaz az utolsó pont után mi szerepel
echo $ext #irjuk ki mi is a kiterjesztés..
Elmentjük, majd adjunk neki futattási jogot:
chmod +x grub2screen.sh
Teszteljük egy képpel:
./grub2screen.sh kek.png
png
Szuper!
Még egy teszt:
cp kek.png k.k.k.k.png
mintha a neten lenne...
./grub2screen.sh k.k.k.k.png
k.k.k.png
ajjaj, csak az első pont utáni rész lesz a kiterjesztés, nem jó ez így..
Nyissuk meg újra szerkesztésre:
nano grub2screen.sh
szúrjunk be pár sort ez után:
ext=${file#*.}
ezeket:
for i in {1..10}
do
ext=${ext#*.}
done
Azaz 10 pontot tudunk kezelni. Nem szép, de hatékony.
Jelenlegi kódunk:
#!/bin/bash
file=$1
new=$2
ext=${file#*.}
for i in {1..10}
do
ext=${ext#*.}
done
echo $ext
Teszteljük újra:
./grub2screen.sh k.k.k.k.png
png
Yeah, ezt akartuk...
nyissuk meg újra szerkesztésre és folytassuk:
nano grub2screen.sh
a végén folytassuk:
cp $1 ~/$new.$ext
azaz bárhol van a kép, másuljuk a saját mappánkba..
figyeljük meg hogy a kép új neve a szkript 2. paramétere lesz, a megadott kép kiterjesztésével..
convert ~/$new.$ext -resize 640x480! ~/$new.png
kovertáljuk át bármilyen formátumról png re és 640x480 as felbontásba, ugyanazon a néven..
sudo cp ~/$new.png /usr/share/images/desktop-base/
másoljuk be a fent említett helyek egyikére..
sudo sed -i -e 's/moreblue-orbit-grub/'$new'/g' /etc/grub.d/05_debian_theme
Azaz, az alapértelmezett képet (moreblue-orbit-grub) cseréljük le a mi általunk megadott, átméretezett, megfelelő helyre másolt képpel.
sudo update-grub
echo "Done."
Azaz frissítse a grub-ot, majd írja ki laza angollal, hogy végzett.
Na lássuk egyben a jelenlegi kódot:
#!/bin/bash
#2 paraméterünk lesz
#1 - a kép amit akarunk
#2 - ilyen néven használjuk
file=$1
new=$2
ext=${file#*.}
for i in {1..10}
do
ext=${ext#*.}
done
echo $ext
cp $1 ~/$new.$ext
convert ~/$new.$ext -resize 640x480! ~/$new.png
sudo cp ~/$new.png /usr/share/images/desktop-base/
sudo sed -i -e 's/moreblue-orbit-grub/'$new'/g' /etc/grub.d/05_debian_theme
sudo update-grub
echo "Done."
Futtassuk le:
./grub2screen.sh k.k.k.k.png kepee
png
[sudo] password for sevoir:
Generating grub.cfg ...
Found Debian background: kepp22ee.png
Found Debian background: mezo.png
Found linux image: /boot/vmlinuz-2.6.31-5-generic
Found initrd image: /boot/initrd.img-2.6.31-5-generic
Found linux image: /boot/vmlinuz-2.6.31-3-generic
Found initrd image: /boot/initrd.img-2.6.31-3-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows Vista (loader) on /dev/sda2
done
Done.
Oh, ez az megy ám.. Nézzük meg a
/etc/grub.d/05_debian_theme
tartalmát, hogy valóban változott-e:
nano /etc/grub.d/05_debian_theme
és voilá:
for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub}/kepp22ee.{png,tga} ; do
tehát eddig ok..
Alaphelyzetből kiindulva működik. De ha megint futtatnánk, akkor nem menne, és pláne nem jó még a netes képekre..
Először foglalkozzunk a többszörös futtathatósággal.
Az elv legyen így:
Ha alaphelyzet van, akkor legyen egy fájlunk amiben tároljuk, hogy még nem volt futtatva egyszer sem és az alapértelmezett (moreblue-orbit-grub) kép van beállítva. Ezt nem árt ha leellenőrizzük. Mivel mi előbb módosítottuk, állítsuk vissza:
sudo nano /etc/grub.d/05_debian_theme
Keressük meg:
for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub}/kepp22ee.{png,tga} ; do
Állítsuk vissza:
for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub}/moreblue-orbit-grub.{png,tga} ; do
Mentsük el, majd lépjünk be az
/usr/share/
mappába, és hozzunk létre egy újat:
sudo mkdir grub2conf
Lépjünk bele:
cd grub2conf
Hozzunk létre egy fájlt:
sudo nano grub2conf.dat.first
írjunk bele egy 1 est:
1
Mentsük el, majd adjunk minden jogot:
sudo chmod 777 grub2conf.dat.first
Hozzunk létre egy üres fájlt, későbbi alkalomra:
sudo nano grub2conf.dat
mentés egyből.. ide fogjuk tárolni a legutoljára beállított fájlnevet, mit keressünk a
/etc/grub.d/05_debian_theme
fájlban..
Erre is adjuk meg a jogokat:
sudo chmod 777 grub2conf.dat
Lépjünk vissza a saját mappánkba:
cd ~
Nyissuk meg újra szerkesztésre a szkriptet:
nano grub2screen.sh
A konvertálás alá rakjunk be egy ellenőrzést:
old=`cat /usr/share/grub2conf/grub2conf.dat`
first=`cat /usr/share/grub2conf/grub2conf.dat.first`
if [ $first -eq "1" ]; then
old="moreblue-orbit-grub"
wget http://www.sevoir.hu/05_debian_theme -O ~/
sudo cp /etc/grub.d/05_debian_theme /etc/grub.d/05_debian_theme.orig
sudo cp ~/05_debian_theme /etc/grub.d/
fi
Azaz megadjuk a "régi" fájlnevet, amennyiben van (nekünk jelenleg üres)..
a "first" értéke pedig 1 lesz mivel ezt állítottuk be, azaz első futtatás..és így az "old" értéke a "moreblue-orbit-grub" lesz. Beszerezzük biztonságképpen az eredeti
05_debian_theme
fájlt és a helyére másoljuk.
A
sudo sed -i -e 's/moreblue-orbit-grub/'$new'/g' /etc/grub.d/05_debian_theme
sort ezáltal módosíthatjuk erre:
sudo sed -i -e 's/'$old'/'$new'/g' /etc/grub.d/05_debian_theme
Folytassuk a módosítást;
A
sudo update-grub
sor elé illesszük be:
echo 0 > /usr/share/grub2conf/grub2conf.dat.first
echo $new > /usr/share/grub2conf/grub2conf.dat
Azaz: a
/usr/share/grub2conf/grub2conf.dat.first
fájlban az 1 -es értékét kinullázzuk és a
/usr/share/grub2conf/grub2conf.dat
fájlba beletesszük az új kép nevét kiterjesztés nélkül.
Lássuk a teljes szkriptet most hol tartunk:
cat grub2screen.sh
#!/bin/bash
#2 paraméterünk lesz
#1 - a kép amit akarunk
#2 - ilyen néven használjuk
file=$1
new=$2
ext=${file#*.}
for i in {1..10}
do
ext=${ext#*.}
done
echo $ext
cp $1 ~/$new.$ext
convert ~/$new.$ext -resize 640x480! ~/$new.png
old=`cat /usr/share/grub2conf/grub2conf.dat`
first=`cat /usr/share/grub2conf/grub2conf.dat.first`
if [ $first -eq "1" ]; then
old="moreblue-orbit-grub"
wget http://www.sevoir.hu/05_debian_theme -O ~/
sudo cp /etc/grub.d/05_debian_theme /etc/grub.d/05_debian_theme.orig
sudo cp ~/05_debian_theme /etc/grub.d/
fi
sudo cp ~/$new.png /usr/share/images/desktop-base/
sudo sed -i -e 's/'$old'/'$new'/g' /etc/grub.d/05_debian_theme
echo 0 > /usr/share/grub2conf/grub2conf.dat.first
echo $new > /usr/share/grub2conf/grub2conf.dat
sudo update-grub
echo "Done."
Mostmár bármennyiszer futatjuk, minden esetben frissíteni fogja az új képpel.
Persze netes képeket még mindig nem kezel...ezzel folytassuk:
Nyissuk meg újra szerkesztésre a szkriptet:
nano grub2screen.sh
Az
cp $1 ~/$new.$ext
sor helyett szúrjuk be a következő sorokat:
if [ ${file:0:4} = "http" ]; then
wget -O ~/$new.$ext $1
else
cp $1 ~/$new.$ext
fi
Azaz, ha az első 4 karakter "http" akkor letöltést hajt végre a netről a saját mappánkba. És ugyanúgy végrehajt minden parancsot.
Netes dolog is ok.
Rakjunk bele egy, egyszerű help menüt:
Közvetlenül a
#!/bin/bash
sor után szúrjuk be:
if [ $1 = "--help" ]; then
echo "usage: grub2screen.sh [imagefile]|[imagelink] [namewhatdoyouwant]"
else
de figyelem! le kell zárni a feltételt, azaz a szkript legvégére írjuk be:
fi
Mentsük el...
Nézzük meg jelenleg hol tartunk:
cat grub2screen.sh
#!/bin/bash
if [ $1 = "--help" ]; then
echo "usage: grub2screen.sh [imagefile]|[imagelink] [namewhatdoyouwant]"
else
file=$1
new=$2
ext=${file#*.}
for i in {1..10}
do
ext=${ext#*.}
done
echo $ext
if [ ${file:0:4} = "http" ]; then
wget -O ~/$new.$ext $1
else
cp $1 ~/$new.$ext
fi
convert ~/$new.$ext -resize 640x480! ~/$new.png
old=`cat /usr/share/grub2conf/grub2conf.dat`
first=`cat /usr/share/grub2conf/grub2conf.dat.first`
if [ $first -eq "1" ]; then
old="moreblue-orbit-grub"
wget http://www.sevoir.hu/05_debian_theme -O ~/
sudo cp /etc/grub.d/05_debian_theme /etc/grub.d/05_debian_theme.orig
sudo cp ~/05_debian_theme /etc/grub.d/
fi
sudo cp ~/$new.png /usr/share/images/desktop-base/
sudo sed -i -e 's/'$old'/'$new'/g' /etc/grub.d/05_debian_theme
echo 0 > /usr/share/grub2conf/grub2conf.dat.first
echo $new > /usr/share/grub2conf/grub2conf.dat
sudo update-grub
echo "Done."
fi
Ennek mennie kell...
Az a baj, hogy jelenleg még csak a saját mappánkban működik.
Másoljuk át az
/usr/bin/
mappába, hogy bárhonnan elérjük.
sudo cp grub2screen.sh /usr/bin/
Na szuper minden.. Csináljunk deb csomagot belőle a későbbi támogatáshoz:
Hozzunk létre egy mappát:
mkdir teszt
Lépjünk bele:
cd teszt
Gondoljuk át milyen mappákban is működik jelenleg a szkriptünk:
/usr/share/
mappában van 2 konfig fájlunk
/usr/bin/
mappában van a szkriptünk
Hozzuk létre ezeket a mappaszerkezeteket:
mkdir usr
cd usr
mkdir share
cd share
mkdir grub2conf
cd ..
mkdir bin
cd ..
Másoljuk bele az alapértelmezett!! dolgokat - bizonyára emlékszünk, hogy a
/usr/share/grub2conf/grub2conf.dat.first
fájlban 1-es van -.
cp /usr/share/grub2conf/grub2conf.dat.first ~/teszt/usr/share/grubconf/
cp /usr/share/grub2conf/grub2conf.dat ~/teszt/usr/share/grubconf/
cp /usr/bin/grub2screen.sh ~/teszt/usr/bin/
Hozzuk létre a
DEBIAN
mappát a
control
fájlnak:
mkdir DEBIAN
Lépjünk bele:
cd DEBIAN
Hozzuk létre a fájlt:
nano control
A tartalma:
Package: grub2screen
Priority: optional
Section: misc
Maintainer: te@szerver.hu
Architecture: all
Version: 1.0
Depends: grub2-splashimages, grub2
Description: Grub2 background changer
Igazán ebben a fájlban nincs mit elemezni...
Mentsük el..lépjünk ki a
teszt
mappából:
cd ~
Hozzuk létre a deb csomagot:
dpkg -b flurry grub2conf.deb
Eredménye:
dpkg-deb: `grub2screen' csomag építése itt: `grub2conf.deb'.
Ha van saját szerverünk akkor feltölthetjük oda egy mappába, majd adjuk ki a következő parancsot:
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
Ez létrehozza a csomagok listáját a csomagkezelő részére.
Majd a csomagkezelő forrásaihoz adjuk hozzá:
sudo su
echo "deb http://szervered/mappád ./" >> /etc/apt/sources.list
Majd telepíthetjük:
sudo apt-get update && sudo apt-get install grub2screen
Welcome :P
___________
..:: Sevoir ::..