Da ich Angst habe, langsam das (Bash-)Programmieren zu verlernen, habe ich mir mal ein kleines Skript geschrieben um Pakete in einer frischen Chroot zu erstellen. Ja, ich weiß, gibt es alles....
Ich wollte nur mal schauen, wie "kurz" man das lösen kann.

Hat jemand Verbesserungsvorschläge? Habe ich etwas übersehen?

Wie gesagt, nur zur Inübungshaltung! ;-)

https://wiki.archlinux.de/title/Benutzer:Drcux
Moin!

Ich habe mal ein paar Anpassungen vorgenommen:
  • $buildroot sollte IMHO unterhalb von /var/abs liegen; auch wenn es das altbekannte abs-Skript nicht mehr gibt, verwende ich z.B. dieses Verzeichnis weiterhin, um dort AUR-Paket-Repos zu klonen.
  • Da das Skript nur als root funktioniert, sollte vor dem ersten mount-Befehl bei einer UID ungleich 0 mit einer entsprechenden Fehlermeldung abgebrochen werden
  • Nach erfolgreichem Erstellen des Pakets wird es in das aktuelle Verzeichnis kopiert
malte70/pbuild.sh @gist.github.com

mfg
Malte
  • [gelöscht]

Also ich denke, dass es eher zweitrangig ist, wo das Build System liegt.
Bei mir liegt es auf einem Debian Server in /home/abs. Darunter befindet sich eine extrem minimalistische Arch Linux Installation, innerhalb welcher ich per chroot Pakete baue.

Zum Skript: Mir fällt nichts groß negatives auf.
Wenn es funktioniert, gut.
Zum Thema sich im bash Skripten fit zu halten gab es vor ein paar Tagen einen interessanten Artikel zu Arrays auf pro-linux.de.

http://www.pro-linux.de/artikel/2/1914/shellskripte-mit-aha-effekt-bash-arrays.html
Danke für eure Rückmeldungen!

- Tja, wohin er baut war bei mir halt in /home weil ich dort genug Platz habe. ;-)
- Das mit "auf root testen" hatte ich total vergessen, danke.
- Mit dem Kopieren war ich mir noch nicht sicher, ob ich sogar in $repodir ein Repository erstelle.
- Der Link ist gut, mit Arrays in der bash habe ich mich noch nie wirklich tiefer beschäftigt, immer nur gerade so, das es funktioniert.
  • [gelöscht]

Die ifs sind teilweise etwas verstaubt 😉

Hier für /bin/bash:
$ buildroot='p r o b l e m'
$ if [ $buildroot"x" != "x" ] ; then echo ok ; fi
bash: [: too many arguments
$ if [ "${buildroot}x" != "x" ] ; then echo ok ; fi
ok
$ if [ -n "$buildroot" ] ; then echo ok ; fi
ok
$ if [[ -n $buildroot ]] ; then echo ok ; fi
ok
Da könntest du aber auch -d verwenden?
Es geht dort nur um den Test, ob die Variable $buildroot überhaupt schon gesetzt ist, nicht ob das Verzeichnis existiert. Ich möchte halt nicht umount auf "nix" loslassen. "-d" passt also nicht, aber "-n" ist gut!

PS:

Hallo? Verstaubt? Bin doch nicht soooo alt..... 😉
  • [gelöscht]

Wenn $buildroot mal einen Pfad mit Whitespace enthält, dann tut das Skript nicht mehr was es soll. Besser also beispielsweise:
mkdir -p "${buildroot}/dev"
Die geschweiften Klammern sind nicht immer erforderlich, jedoch "guter Stil". Weitere "Stil"-Empfehlungen bietet Shell Style Guide. Zum Bleistift statt Backticks die Variante mit $() verwenden (bessere Lesbarkeit und kann im Bedarfsfall verschachtelt werden [bei gleichzeitig verwirrungsfreiem Quoting]):
echo -e "# START:\t\t $(date)"