SDB:KIWI Kochbuch Startbildschirm

(Weitergeleitet von SDB:KIWI Cookbook Splash Screen)
Wechseln zu: Navigation, Suche


Dieses Rezept beschreibt den Prozess, wie man einen individuellen Startbildschirm für den Boot-Prozess einrichtet.
Getestet mit openSUSE Empfohlene Artikel Verwandte Artikel
Icon-checked.png

Icon-manual.png Icon-help.png


Ein individuelles Bild für GRUB und den Startbildschirm

Dieses Beispiel zeigt auf, wie man den Startbildschirm während des Bootens einer SUSE-Distribution, die Grafik des Bootsplash Projekts verwenden (alle gegenwärtigen Distributionen) individuell anpasst.

GECKO

Individuelle Anpassung des Bildes für GRUB und den Startbildschirm

Vorbereitungszeit:

  • 20 min + die Zeit zur Herstellung Ihrer grafischen Bilder

Kochzeit:

  • 20 min

Zutaten:

  • eines laufendes openSUSE System
  • ein openSUSE Repository
  • die neueste Ausgabe des KIWI-Werkzeugkastens installiert (mindestens Version 3.25)
  • ein installiertes Paket kiwi-doc
  • ein Hintergrundbild
  • Logo Bild im Skalierbaren Vektor Grafik Format
  • einen installierten PHP Interpreter
  • GraphicsMagick installiert
  • Inkscape installiert
  • etwa 1 GB freien Speicherplatz


Bevor wir anfangen ein kurzer Erklärungshinweis. Es gibt Begrenzungen in Bezug auf die Bildgröße und die Anzahl der Farben für Ihr Bild. Seien Sie sich daher bewusst, wenn Ihr Bild nicht angezeigt wird, kann es gut möglich sein, dass diese Begrenzungen eher eine Ursache sein können als ein Fehler an irgend einer Stelle.

Einführungen

Standardmäßig wird das Markenzeichen von SUSE-Distributionen von den Paketen bootsplash-branding* und gfxboot-branding- gesteuert. Das Paket gfxboot-branding- enthält die Informationen über das Bild, das hinter dem GRUB Menü angezeigt wird, das Menü, in dem Sie Ihren kernel aussuchen. Das Paket bootsplash-branding* enthält die Informationen über das Bild, das während des aktuellen Boot-Prozesses angezeigt wird.

Die individuelle Anpassung des Hintergrundbildes für den Startbildschirm und das GRUB-Menü erfordert die Vervielfältigung der Verzeichnisstrukturen der Pakete bootsplash-branding* und gfxboot-branding-. Um die Strukturen sehen zu können, geben Sie die folgenden Kommandos ein:

rpm -qa


Das erstellt eine Liste von Paketen. In dieser Liste können Sie die exakte Bezeichnung des Paketes finden, an dem wir interessiert sind. Dann geben Sie ein:

rpm -ql <PACKAGE_NAME>


um die Liste der Verzeichnisse und Dateien zu sehen, die vom Paket unterstützt werden. Ja, die Liste für beide Pakete ist ziemlich lang. Aber keine Angst, wir werden ein Script verwenden, um das Bild zu generieren, das für den Boot-Bildschirm benötigt wird. Für das GRUB-Menü wird nur ein Bild benötigt.

Bevor wir mit der Bildererstellung beginnen, lassen Sie uns ein Arbeitsverzeichnis erstellen.

mkdir $HOME/splashCustom
cd $HOME/splashCustom


Individuelle Gestaltung der Boot-Startbildschirm-Bilder

Bilder für den Boot-Startbildschirm

Das Script, das wir später verwenden wollen, um einen geeigneten Verzeichnis-Baum für das Boot-Hintergrund-Bild zu erstellen, erwartet PNG-Bilder für den Hintergrund und SVG-Bilder für das Logo, mit speziellen Bezeichnungen, um das Ausführungsverzeichnis zu repräsentieren. Die erwarteten Datei-Bezeichnungen sind wie folgt:

  1. background.png - Der Bildhintergrund, der während des stillen Starts angezeigt wird.
  2. background-verbose.png - Der Bildhintergrund, der angezeigt wird, während des ausführlichen Starts.
  3. logo.svg - Das Logo, das während des stillen Starts verwendet wird.
  4. logov.svg - Das Logo, das während des ausführlichen Starts gezeigt wird.

Sie können das Script verändern, um diese Bezeichnungen zu ändern, wenn Sie wollen. In diesem Fall werden wir die Namen die wir oben vorgestellt haben beibehalten.

Im Arbeitsverzeichnis starten Sie Ihr bevorzugtes Grafikwerkzeug und erstellen die Bilder für den Hintergrund und das Logo Ihrer Wahl. Behalten Sie die Erklärung am Beginn des Rezepts im Kopf. So können Sie nicht zu verrückt dabei werden. Wenn Sie bereits Bilder haben, brauchen Sie diese nur in das Arbeitsverzeichnis mit den geeigneten Bezeichnungen zu kopieren. Wenn Sie dieses Rezept nur ausprobieren wollen, ohne ein Bild erstellen zu müssen, mögen Sie die Bilder unten verwenden.

  1. background.png KCBB
  2. background-verbose.png KCBBV
  3. logo.svg
  4. logov.svg

Wie Sie sehen können, benötigen Sie dafür kein künstlerisches Können.

Erstellung einer Struktur für das Bootsplash-Verzeichnis

Erstellen Sie ein Script (bootsplash.php) mit dem folgenden Inhalt im Arbeitsverzeichnis.

#!/usr/bin/php
<?php
//depends on graphicsmagic and rsvg

$distro = "openSUSE 11.2";
$themename = "myTheme";
$themepath = "./bootsplash/$themename";
$imagepath = "/etc/bootsplash/themes/$themename/images";
//resolution, jpeg export quality pairs
$resolutions = array("640x480"=>"95", "800x600"=>"95", "1024x600"=>"94", 
		"1024x768"=>"94", "1152x768"=>"94", "1152x864"=>"93", 
		"1280x768"=>"93", "1366x768"=>"93", "1280x800"=>"93", 
		"1280x854"=>"93", 
		"1280x960"=>"92", "1280x1024"=>"92", "1400x1050"=>"91",
		"1440x900"=>"91", "1600x1024"=>"90", "1600x1200"=>"89", 
		"1680x1050"=>"89", "1920x1200"=>"80", "3200x1200"=>"70");
/*
$resolutions = array("800x600"=>"95");
*/
//create dirs
if (!is_dir($themepath)) {
	//print "removing old theme $themename\n\n";
	//exec("rm -rf ./theme/$themename");
	mkdir ("./bootsplash");
	mkdir ("$themepath");
	mkdir ("$themepath/config");
	mkdir ("$themepath/images");
} 
//create logos
if (!is_dir('./temp')) {
	mkdir ("./temp");
}
$cmd = "inkscape -w 180 -e ./temp/logo.png logo.svg"; //silent logo
exec($cmd);
$cmd = "inkscape -w 90 -e ./temp/logov.png logo.svg"; //verbose logo
exec($cmd);
$cmd = "gm convert -comment \"id logo deltabg stop\" ./temp/logo.png ./temp/logo.png ./temp/logo.mng";
exec($cmd);
$cmd = "gm convert -colorspace gray -comment \"id logov deltabg stop\" ./temp/logov.png ./temp/logov.png ./temp/logov.mng";
exec($cmd);

#exec("/usr/local/bin/convert ./building-blocks/logo.png $themepath/images/logo.mng");
copy("./temp/logo.mng", "$themepath/images/logo.mng");
copy("./temp/logov.mng", "$themepath/images/logov.mng");

while (list($res,$q) = each($resolutions)) {
//scale backgrounds

	print "creating $res resolution images\n";
	$in = "./background.png";
	$inverb = "./background-verbose.png";
	$silent = "$themepath/images/silent-$res.jpg";
	$verbose = "$themepath/images/bootsplash-$res.jpg";
	$cmd = "gm convert $in -geometry $res\! -quality $q -interlace None -colorspace YCbCr ";
	$cmd .= " -sampling-factor 2x2 $silent"; 
	exec($cmd);
	$cmd = "gm convert $inverb -geometry $res\! -quality $q -interlace None -colorspace YCbCr ";
	$cmd .= " -sampling-factor 2x2 $verbose"; 
	#$cmd = "gm convert $in -colorspace gray -geometry $res\! -quality $q -interlace None ";
	#$cmd .= "-colorspace YCbCr -sampling-factor 2x2 $verbose";
	exec($cmd);

//generate config files
	print "Generating config file for $res\n";
	$fp = fopen("$themepath/config/bootsplash-$res.cfg", "w");
	
	fwrite($fp, "# This is a bootsplash configuration file for\n");
	fwrite($fp, "# $distro, resolution $res.\n");
	fwrite($fp, "#\n");
	fwrite($fp, "# See www.bootsplash.org for more information.\n");
	fwrite($fp, "# created by SUSE Image Builder\n");
	fwrite($fp, "#\n");
	fwrite($fp, "version=3\n"); //config file version
	fwrite($fp, "state=1\n"); //picture is diplayed
	fwrite($fp, "progress_enable=0\n"); //no progress
	fwrite($fp, "overpaintok=1\n"); //no clue what this is
	fwrite($fp, "\n\n");
	//colors
	fwrite($fp, "fgcolor=7\n");
	fwrite($fp, "bgcolor=0\n\n");
	//text window frame
	ereg("([0-9]+)x([0-9]+)", $res, $dimensions);
	$x = $dimensions[1];
	$y = $dimensions[2];
	$tx = 20;
	$ty = 60;
	$tw = $x - $tx - 10;
	$th = $y - $ty;
	fwrite($fp, "tx=$tx\n");
	fwrite($fp, "ty=$ty\n");
	fwrite($fp, "tw=$tw\n");
	fwrite($fp, "th=$th\n");
	//background
	fwrite($fp, "\n\njpeg=$imagepath/bootsplash-$res.jpg\n");
	fwrite($fp, "silentjpeg=$imagepath/silent-$res.jpg\n");
	fwrite($fp, "\n\n");
	$lx = round($x/2); 
	$ly = round($y/2)-20; 
	fwrite($fp, "mnganim logo $imagepath/logo.mng initframe logo silent center $lx $ly\n");
	
	//overlay title (verbose)
	$vlx = 2;
	$vly = 2;
	fwrite($fp, "mnganim logov $imagepath/logov.mng initframe logov origin 0 $vlx $vly\n");
	
	//animation triggers
	fwrite($fp, "trigger \"isdown\" quit\n");
	fwrite($fp, "trigger \"rlreached 5\" toverbose\n");
	fwrite($fp, "trigger \"rlchange 0\" tosilent\n");
	fwrite($fp, "trigger \"rlchange 6\" tosilent\n");

	$verticalpcnt = 0.8;
	$width = 160; //width of the progress bar
	$voffset = 30; //vertical offset from the title (defined by verticalpcnt above)
	$x1 = $lx - round($width/2) - 4;
	$x2 = $x1 + $width;
	//$y1 = round($verticalpcnt*$y);
	$y1 = round($ly+$voffset);
	$y2 = $y1+1; //let's try a 2 pixel line
	fwrite($fp, "\n\n");
	fwrite($fp, "progress_enable=1\n"); //enable progress
	fwrite($fp, "box silent noover $x1 $y1 $x2 $y2 #ffffff10\n"); //progress background
	$wl = "box silent inter " . $x1 . " " . ($y1 - 1) . " " . $x1 . " " . ($y1 + 1) . " #ffffff80\n";
	fwrite($fp, $wl); //starting point ...
	$wl = "box silent " . $x1 . " " . ($y1 - 1) . " " . $x2 . " " . ($y2 + 1) . " #ffffff80\n";
	fwrite($fp, $wl); //..iterated to this

	fclose($fp);
}

?>

Danke an Jakub für dieses Script.

Dann führen Sie das Script aus.

php bootsplash.php


Ist das Script komplett, werden Sie ein Bootsplash-Verzeichnis in Ihrem Arbeitsverzeichnis haben. Das enthält alles, was Sie brauchen, um den Boot-Startbildschirm individuell anzupassen.


Das Script zur Erstellung des Abbild-Baums

Einige Notizen zum obigen Script.

  1. Der Wert der Variablen $themename ist willkührlich gewählt. So könnten Sie etwas kreativeres als myTheme verwenden. Dieser Wert wird später in der Datei config.xml verwendet. Die Forderung ist, dass diese Bezeichnung und die Bezeichnung, die in der Datei config.xml verwendet wird, übereinstimmen müssen. So passen Sie auch auf Tippfehler auf.
  2. Die Zahlen im Verzeichnis oder das Rautenzeichen nach der gegebenen Lösung zeigt die Qualität für die Zwecke der Bild-Umwandlung an. Höhere Qualitätszahlen bedeuten einen größeren Dateiumfang. So ist es eher möglich, dass Sie eher an die Grenze des Bootsplash-Systems kommen. Eine ungefähre Abschätzung ist, dass keine Datei größer als 70K sein sollte. Sie können die Größe des Bildes beeinflussen, indem Sie diese Zahlen verändern. Das ist keine exakte Größe, aber Versuch und Irrtum ist unvermeidlich.

Das sind die einzigen Änderungen, die Sie im Script ändern müssen. Das Script erzeugt ebenso die Konfigurationsdatei. Und Sie können damit nach Herzenslust rumspielen bis Sie die Farbeinstellung haben, die Sie wünschen.

Tackling the GRUB background

Die Hintergrundbilder

Starten Sie Ihr favorisiertes Bildbearbeitungswerkzeug und erstellen Sie ein Hintergrundbild, dass Sie gerne im GRUB-Menü verwenden würden. Eine Datei sollte mit back.jpg und die andere mit pback.jpg bezeichnet werden. Die Verwendung dieser Dateinamen wird es Ihnen erlauben, es zu vermeiden, die Konfigurationsdatei zu hacken. Wenn Sie bereits das Bild haben, kopieren Sie es in das Arbeitsverzeichnis mit diesem Namen. Wenn Sie nur der Beschreibung mit dem Beispiel folgen wollen, können Sie gern die vorbereiteten Bilder unten verwenden.

  • back.jpg KGRB
  • pback.jpg KGRPB

Einrichtung der Verzeichnisstruktur

Das Bild ist erstellt. Nun müssen wir die Verzeichnisstruktur einrichten. Die Bilder für den GRUB-Hintergrund müssen unter /usr/share/gfxboot/themes/THEME_NAME/{data-boot,data-install} abgelegt werden. Zusätzlich zu den Bildern benötigen wir Konfigurationsdateien und eine Verknüpfung zu einem Makefile.

Statt die Infrastruktur von Grund auf zu erstellen, ist es leichter sich an eine vorhandene Arbeit anzuhängen. Installieren Sie das Paket gfx-devel und verwenden Sie vorkonfigurierten Konfigurationsdateien usw.

zypper in gfxboot-devel


Ist es installiert, können Sie eins der abgeleiteten Themen kopieren und es einen eigenen Namen geben.

cp -r /usr/share/gfxboot/themes/SLED .
mv SLED myTheme


Die Bezeichnung Ihres Themas (myTHeme) muss mit der Bezeichnung in der Variablen $themename im bootsplash.php Script oben übereinstimmen. Dann ersetzen Sie das Bild durch Ihr eigenes.

cp back.jpg pback.jpg myTheme/data-boot
cp back.jpg pback.jpg myTheme/data-install


Fühlen Sie sich frei, die verschiedenen Konfigurationsdateien zu erkunden und sie so zu modifizieren, wie sie für Sie geeignet erscheinen. Die Seite Gfxboot unterstützt all die mörderischen Details, an denen Sie interessiert sein könnten.

Integration der spetifischen Anpassung

Da nun das Bild erstellt und eingerichtet wurde, können wir nun mit der Integration unserer Anpassungen in ein KIWI-Abbild-Bau fortfahren. Für dieses Beispiel werden wir das Live-ISO-Beispiel verwenden, unterstützt vom Paket kiwi-doc.

  • Kopieren Sie die Beispiel-Konfiguration in das Arbeitsverzeichnis.
cp -r /usr/share/doc/packages/kiwi/examples/suse-11.2/suse-live-iso .


  • Erstellen Sie die Verzeichnisstruktur für das Bootsplash-Thema und verschieben oder kopieren Sie Ihr Thema hinein.
mkdir -p etc/bootsplash/themes
mv bootsplash/myTheme etc/bootsplash/themes


  • Erstellen Sie eine Verzeichnisstruktur für das gfxboot Thema und verschieben oder kopieren Sie es hinein.
mkdir -p usr/share/gfxboot/themes
mv myTheme usr/share/gfxboot/themes


  • Verpacken Sie die Themen in einen Tarball und verschieben oder kopieren Sie es in den KIWI-Konfigurations-Baum.
tar -czvf myTheme.tgz usr etc
mv myTheme.tgz suse-live-iso


  • Bearbeiten Sie die Datei config.xml mit Ihrem bevorzugten Editor
    • Ersetzen Sie die Repository-Definition, wenn Sie nicht die Pakete über das Internet ziehen wollen.
    • In des Elements <preferences> fügen Sie ein Kind-Element mit der Bezeichnung <boot-theme> und den Wert Ihres Themen-Namens hinzu. In diesem Beispiel hat der Konfigurationseintrag die folgende Form:
 <boot-theme>myTheme</boot-theme>
    • In des Elements <packages> fügen Sie ein Kind-Element mit der Bezeichnung <archive> hinzu, setzen den Attribut-Wert name auf den Namen des Tarballs, den wir kürzlich erstellt haben und setzen das bootinclude auf true. In diesem Beispiel hat der Konfigurationseintrag die folgende Form:
 <archive name="myTheme.tgz" bootinclude="true"/>
    • Fügen Sie das Paket gfx-devel als Stapel zu include und beziehen es in das Boot-Bild wie folgt ein:
 <package name="gfxboot-devel" bootinclude="true" bootdelete="true"/>
    • Löschen Sie die Zeilen, die das SUSE-Markenzeichen enthalten.

Mit diesen Änderungen angewendet, sollte das Element <packages> ähnlich dem unten aussehen.

<packages type="image" patternType="plusRecommended" patternPackageType="plusRecommended">
    <archive name="myTheme.tgz" bootinclude="true"/>
    <package name="gfxboot-devel" bootinclude="true" bootdelete="true"/>
    <package name="kernel-default"/>
    <package name="bootsplash"/>
    <package name="ifplugd"/>
    <package name="vim"/>
    <namedCollection name="default"/>
    <namedCollection name="kde4"/>
</packages>
Wenn Sie das mit der Distribution gelieferte Markenzeichen drin lassen, werden diese Pakete gegen Ihr persönliches Bild bevorzugt. Darum ist es wichtig, dass Sie die Markenzeichen-Pakete der Distribution entfernen.

Das vervollständigt die Integration der persönlichen Bilder. Was übrig bleibt, ist, das Bild zu bauen und zu testen.

kiwi --prepare ./suse-live-iso --root /tmp/customBoot_unpacked
kiwi --create /tmp/customBoot_unpacked -d /tmp/customBoot_image


Der Bau eines Live-Abbildes zieht ein grafisches Bild namens welcome.jpg. Diese Bild-Datei lebt in /usr/share/gfxboot/themes/THEME_NAME/data-install oder in unserem Fall in usr/share/gfxboot/themes/myTheme/data-install. Da dieses Bild in diesem Beispiel nicht verändert wurde, werden wir das SLED-Willkommen-Bild während des Tests sehen. Wir werden das SLED-Willkommen-Bild so sehen, da wir unser gfxboot Thema auf einer Kopie des SLED-Themas aufbauten. Wenn Sie das ändern wollen, schauen Sie sich die Datei welcome.svg an. Sie befindet sich auf http://gitorious.org/opensuse/art/trees/master/cdboot

Ist das ISO-Abbild mit KIWI gebaut, können Sie es mit Qemu wie folgt testen:

 qemu-kvm -cdrom=/tmp/customBoot_image/IMAGE_NAME.iso
Beachten Sie bitte die vorher notierten Warnungen zur Anwendung von 64 bit Abbildern