ubuntuusers.de

Live-USB Script

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

MrKanister

Anmeldungsdatum:
13. Oktober 2007

Beiträge: 2105

Ok...scheinbar bin ich jetzt der erste, der richtig an deinem Code rummeckern wird 😉

yes_no_question () {
	i=0
	while [ $i = 0 ]; do

	echo -n "[j/n]: "
	read SAVE

		case "$SAVE" in
			[jJ]|[jJ][aA])		ANTWORT="JA" ;;
			[nN]|[nN][eE][iI][nN])	ANTWORT="NEIN" ;;
			*)			echo "Frage bitte mit [ja] oder [nein] beantworten." && continue ;;
		esac
		i=1
	done
} 


Das ist unschön. Mach's so:

proceed() {
    if (( $# > 0 ))
    then
        read -p "$*"
    else
        read -p "Möchten Sie fortfahren [J/n]? "
    fi

    if [[ "$REPLY" =~ ^[jJ][aA]?$|^$ ]]
    then
        return 0
    else
        return 1
    fi
} 


Statt dem

	i=0
	while [ $i = 0 ]; do


könntest du übrigens auch

while true


schreiben.

Grundsätzlich solltest du vermeiden, dass der Benutzer durch ein Skript zu interaktiv miteinbezogen wird. Deshalb sollte die Funktion nicht solange fragen, bis sie "ja" oder "nein" erhält, sondern besser bei allem, außer einem "ja" oder einem einfachen Enter, den Fehlercode 1 returnen. Dieser kann dann außerhalb der Funktion ausgewertet werden.
Beispiel:

if ! proceed "Möchten Sie fortfahren [J/n]? "
then
    echo "Abbruch"
    exit
fi

Verwende der Übersicht halber statt den Backticks `` lieber die Schreibweise $() (Oder kann die Sh das nicht?)

...
	eval stick_size=`fdisk -l | grep " $USBDEV" | cut -d" " -f3`
...


Warum "eval" ?

read_save_file () {
	n=1
	while read line ; do
	eval "line$n=\"$line\""
	n=`expr $n + 1`
	done < $SAVE_FILE
	
	USBDEV=$line1
	SOURCEDIR=$line2
	PERSISTENT=$line3
} 


Nimm lieber ein array anstatt den Code mit solchen Sachen zu verhunzen 😉

install_pak () {
	echo "${CG}\nInstalliere nun fehlende Pakete.${CN}"
	apt-get -y install mbr syslinux mtools
}

makeboot () {

echo "${CB}\nDer gesamte Vorgang kann einige Zeit in Anspruch nehmen und sollte keines Falls unterbrochen werden. \nBeginne...\n\n\n${CN}"
sleep $long_time

if dpkg-query -s syslinux 2>/dev/null|grep installed >/dev/null; then
    echo "${CG}Das Paket syslinux ist installiert.${CN}"
else
    echo "${CR}Fehler: syslinux ist nicht installiert. Starte APT.${CN}"
	install_pak
fi
sleep $one_second
if dpkg-query -s mtools 2>/dev/null|grep installed >/dev/null; then
    echo "${CG}Das Paket mtools ist installiert.${CN}"
else
    echo "${CR}Fehler: mtools ist nicht installiert.. Starte APT.${CN}"
	install_pak
fi
sleep $one_second
if dpkg-query -s mbr 2>/dev/null|grep installed >/dev/null; then
	echo "${CG}Das Paket mbr ist installiert.${CN}"
	sleep $one_second
    echo "${CB}Alle benötigten Pakete sind installiert.\n${CN}"
else
    echo "${CR}Fehler: mbr ist nicht installiert. Starte APT.${CN}"
	install_pak
fi
sleep $one_second


Ich frag mich, was du machen würdest, wenn das Skript 10 Programme zur Ausführung benötigt 😲
Nimm die hier:

software_requirements() {
	for i in $@
	do
		if ! which $i > /dev/null
		then
			required_software=$(echo ${required_software:-""} $i)
		fi
	done

	if [[ -n $required_software ]]
	then
		echo "Folgende Programme werden zur Ausführung des Skriptes benötigt:"
		for i in $required_software
		do
			echo "  "$i
		done

		echo "Diese können nun installiert werden."

		if ! proceed
		then
			echo "Abbruch."
			exit 0
		fi

		sudo apt-get install $required_software
	fi
} 


(Die Funktion "proceed()" ist hier direkt auch vorhanden)
Ausgerufen wird's dann zum Beispiel so:

software_requirements "vlc firefox epiphany"

Sooo...ich hoffe ich war nicht zu streng und hab nix übersehen 😉

Gruß Martin

Christian1000

Avatar von Christian1000

Anmeldungsdatum:
17. Juni 2007

Beiträge: 459

Hallo,

ich habe meinen USB Stick mit Eurem Skript bespielt.

Das System startet auf meinem LAPTOP zwar im Live Modus, aber im persistenten Modus endet der Bootprozess in der Busybox.

Wie geht es weiter?

Newur

(Themenstarter)
Avatar von Newur

Anmeldungsdatum:
3. September 2006

Beiträge: 500

Hi Christian,
das Problem mit dem persistent Modus ist ein Bug in Hardy. Hier findest du naeheres dazu.

http://forum.ubuntuusers.de/topic/135496/75/

Falls der dort beschriebene Fix funktioniert melde dich bitte nochmal. Evtl. kann man ihn ins Script einfliessen lassen.

@Mr. Kanister
Vielen Dank, dass du dir die Muehe gemacht hast den Code anzusehen und gleich Verbesserungen gepostet hast. ☺
Ich werd mir das in den naechsten Tagen mal im Detail ansehen und soweit moeglich anpassen. Beim druebersehen ist mir allerdings aufgefallen, dass die Syntax nicht den ueblichen Shellscripts entspricht, zB "((" anstatt "[" bei if Bedingungen. Was ist das? C?! Ich habe mal proceed() getestet und das hat nicht funktioniert mit der Bash. Mit den Arrays usw hast du Recht, wobei ich zugeben muss, dass ich die Bash bzw. Korn Shell spezifischen Artikel immer uebersprunge habe und im Moment nicht nacharbeiten will.

Mittelfristig moechte ich testen, in wie weit sich das ganze auch mit einer richtigen Programmiersprache umsetzen laesst. Ich habe gesehen, dass du im Moment auch am Python lernen bist Mr Kanister. Vill ergibt sich da ja mal was. 😉

mfg
newur

Madeddy

Avatar von Madeddy

Anmeldungsdatum:
18. Januar 2007

Beiträge: 508

Wohnort: E-Gebirge

Newur hat geschrieben:

Evtl. kann man ihn ins Script einfliessen lassen.

Jetz isses Tatsache. Du bist besessen von diesem Script! 😀

Wäre Unfug zu versuchen das ins Script zu nehmen, da dies zum einen hoffentlich gefixt sein wird im Juni (v8.04.1) und zum anderen wohl viel zu aufwendig wäre. Da kann man auch glei die evtl. unterschiedlichen initrd.gz zum DL anbieten.

MfG

papasmoky

Avatar von papasmoky

Anmeldungsdatum:
31. März 2008

Beiträge: 64

Wohnort: Saarbrücken

hi,

hier sind noch zwei Bugs:

1) Wenn ich das Script benutzte, kommen irgendwie zwei fat16 Partitionen raus, statt eine ext2 und eine fat16 Partition.
2) Außerdem braucht mein Stick sehr lange um den Kernel zu starten. Wenn ich alles manuell mache, geht alles viel schneller...

Gruß papa

der_Beueler

Avatar von der_Beueler

Anmeldungsdatum:
22. Juni 2006

Beiträge: 485

Wohnort: Bonn

Guten Tag miteinander,

ich habe das gleiche Problem:

Der Stick funktioniert im "life"-Modus, aber leider nicht im persistenten Modus. Er bleibt in der Busybox hängen.

das Problem mit dem persistent Modus ist ein Bug in Hardy. Hier findest du naeheres dazu.

http://forum.ubuntuusers.de/topic/135496/75/

Falls der dort beschriebene Fix funktioniert melde dich bitte nochmal. Evtl. kann man ihn ins Script einfliessen lassen.

Da ich mit der Konsole nicht gut zurecht komme, frage ich hier an der Stelle einmal: Kann ich diese verflixte initrd.gz (Caspar) nicht irgendwie in der grafischen Oberfläche editieren? Ich versuche es seit Stunden, bekomme es aber einfach nicht hin. Ich habe mir schon hier: https://bugs.launchpad.net/ubuntu/+source/casper/+bug/219192 eine neue initrd.gz heruntergeladen und ausgetauscht, es funktioniert aber leider nicht.

Grüße
Klaus

ubuntuhannes

Anmeldungsdatum:
29. November 2007

Beiträge: Zähle...

Hallo miteinander,

Ich hätte mal eine absolute Anfängerfrage:
Was muss ich bei dem Presistant-Skript für den Pfad zur Live-CD eingeben, bzw. wie bekomme ich das raus?

Gruß
Johannes

melodie

Anmeldungsdatum:
22. Februar 2007

Beiträge: 78

Wohnort: Düsseldorf

papasmoky hat geschrieben:

1) Wenn ich das Script benutzte, kommen irgendwie zwei fat16 Partitionen raus, statt eine ext2 und eine fat16 Partition.
2) Außerdem braucht mein Stick sehr lange um den Kernel zu starten. Wenn ich alles manuell mache, geht alles viel schneller...

Das würde mich auch mal interresieren.

Newur

(Themenstarter)
Avatar von Newur

Anmeldungsdatum:
3. September 2006

Beiträge: 500

Punkt eins ist ein missverstaendnis meinerseits. Zu Punkt 2 kann ich nichts sagen, vill haengt das ja mit dem Filesystem zusammen.

Im Anhang mal die korrigiert Version. Habs nur kurz getestet, scheint zu funktionieren, war aber etwas traeger bei mir. Muss aber nix heissen, da ich ne Hardy Alpha zum testen genommen habe. Hf

mfg
newur

live_usb.tar.gz (3.8 KiB)
Download live_usb.tar.gz

MrKanister

Anmeldungsdatum:
13. Oktober 2007

Beiträge: 2105

Hallo Newur,

aus irgendeinem Grund wurde ich nicht per Mail über den Fortschritt dieses Threads informiert :/

Also dann...

Beim druebersehen ist mir allerdings aufgefallen, dass die Syntax nicht den ueblichen Shellscripts entspricht, zB "((" anstatt "[" bei if Bedingungen. Was ist das? C?![/quote]
Nein...kein C 😉
Die doppelten runden Klammern sind ein Builtin der bash. Sie sind für numerische Vergleiche gedacht. Äquivalent dazu gibt es als Builtin auch die doppelten eckigen Klammern, die für Stringvergleiche zu gebraucht werden. Der Unterschied zu den einfachen eckigen Klammern besteht darin, dass man zB. auch testen kann, ob ein regulärer Ausdruck auf einen String zutrifft.

if [[ "$REPLY" =~ ^[jJ][aA]?$|^$ ]] 

Ich habe mal proceed() getestet und das hat nicht funktioniert mit der Bash.

Kann ich jetzt so nicht nachvollziehen...

#!/bin/bash

### Name: example

proceed() {
    if (( $# > 0 ))
    then
        read -p "$*"
    else
        read -p "Möchten Sie fortfahren [J/n]? "
    fi

    if [[ "$REPLY" =~ ^[jJ][aA]?$|^$ ]]
    then
        return 0
    else
        return 1
    fi
}

if ! proceed "Möchten sie etwas kaufen? [J/n]: "
then
    echo "Dann eben nicht."
else
    echo "Was darf es denn sein?"
fi
martin@martin-desktop:~$ example
Möchten sie etwas kaufen? [J/n]: j
Was darf es denn sein?
martin@martin-desktop:~$ example
Möchten sie etwas kaufen? [J/n]: f
Dann eben nicht.

Mittelfristig moechte ich testen, in wie weit sich das ganze auch mit einer richtigen Programmiersprache umsetzen laesst. Ich habe gesehen, dass du im Moment auch am Python lernen bist Mr Kanister. Vill ergibt sich da ja mal was. 😉

Hört sich interessant an...ich werd mal schauen, was ich schon grob umsetzen lässt ☺

Gruß Martin

MrKanister

Anmeldungsdatum:
13. Oktober 2007

Beiträge: 2105

Jetzt weiß ich auch, warum du mit manchen Tipps von mier Probleme hast...du benutzt ja die Sh und nicht die Bash 😛

Hat sich eigentlich an den anderen Dateien, die sonst immer in dem Archiv mit dabei waren was geändert? Eventuell könntest du ja noch mal den gesamten Inhalt hochladen.

Gruß Martin

narrowtux

Anmeldungsdatum:
17. März 2008

Beiträge: 203

Wohnort: Spangenberg

bei mir kommt immer:

root@tux-desktop:~/MyDownloads# ./live_usb.sh -b /dev/sdc -d /home/tux/MyDownloads/ubuntu-8.04-desktop-i386.iso -z 700

Keine "syslinux.cfg" gefunden. Sie muessen sich im Script Ordner befinden wenn es ausgefuehrt wird.
root@tux-desktop:~/MyDownloads# 

wo gibt es diese syslinux.cfg??

MrKanister

Anmeldungsdatum:
13. Oktober 2007

Beiträge: 2105

@narrowtux: Das ist das, worauf ich im vorherigen Post schon angesprochen hatte...er hat jetzt nämlich immer nur das Shell-Skript selbst hochgeladen 😉.

Du kannst das gesamte Archiv aber auch im Wiki runterladen (Live-USB_-_persistente_Installation#head-d3a3e604f43f1605d7743ffb854d327eb1590427), wobei du dann natürlich das bash-Skript austauschen müsstest.

Gruß Martin

narrowtux

Anmeldungsdatum:
17. März 2008

Beiträge: 203

Wohnort: Spangenberg

ach so, danke

PS: Die Datei auf der Wiki seite ist eine *.x-tar datei.
Mit file-roller kann ich diese nicht öffnen

MrKanister

Anmeldungsdatum:
13. Oktober 2007

Beiträge: 2105

Einfach das "x-" aus dem Dateinamen löschen 😉