Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Archlinux: Paketierung

7 views
Skip to first unread message

Peter Blancke

unread,
Feb 10, 2024, 7:22:01 AMFeb 10
to
Erbitte einen kleinen Denkanstoß.

Gegeben sei ein Skript:

,----[ meldung.sh ]
| #!bin/sh
| gxmessage "Ein Text"
`----

Wenn Pacman "gxmessage" löscht, kann das Skript natürlich nicht mehr
ausgeführt werden. Sicherlich kann ich die Existenz von "gxmessage"
im Skript prüfen ("test -x"), aber das Skript wird NICHT erfolgreich
ausgeführt.

Da mir das in einem anderen Skript dieser Tage böse auf die Füße
fiel, wäre es doch das einfachste, aus o. a. Skript ein Paket zu
bauen, welches mit pacman dann installiert wird.

Wird dann versucht, "gxmessage" zu löschen, sollte sich pacman über
die Abhängigkeit beschweren und das Löschen verweigern.

Tja, da stehe ich vor einer neuen Aufgabe: Wir paketiere ich das o.
a. Skript?

Kann mir jemand einen Denkanstoß geben? Die Vielzahl von
Beschreibungen zur Paktierungen kompletter Programme überfordert
mich vermutlich -- Neuland für mich.

Danke.

Gruß,

Peter Blancke

--
Hoc est enim verbum meum!

Marc Haber

unread,
Feb 10, 2024, 9:49:50 AMFeb 10
to
Peter Blancke <bla...@gmx.de> wrote:
>Wird dann versucht, "gxmessage" zu löschen, sollte sich pacman über
>die Abhängigkeit beschweren und das Löschen verweigern.

Die Lösung für Debian war zwar nicht gefragt, aber vielleicht hilft es
jemand anderem: In Debian gibt es das Paket "equivs", mit dem man ein
(leeres¹) Paket schnüren kann, das auf gxmessage dependet. Auf diese
Weise wird bei der Dinstallation von gxmessage immerhin gemeckert.

Grüe
marc

¹ wenn es wirklich nur _ein_ Skript ist, kann man mit einem geeigneten
equivs-Konfigurationsfile auch dieses Skript mit in das Dummypaket
packen, aber das wäre nach meiner Wahrnehmung schon Overkill und ein
Grund ein "richtges" Paket zu machen. Und diese Lernkurve ist auch für
Debian hoch

--
----------------------------------------------------------------------------
Marc Haber | " Questions are the | Mailadresse im Header
Rhein-Neckar, DE | Beginning of Wisdom " |
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 6224 1600402

Peter J. Holzer

unread,
Feb 10, 2024, 10:30:46 AMFeb 10
to
On 2024-02-10 14:49, Marc Haber <mh+usene...@zugschl.us> wrote:
> ¹ wenn es wirklich nur _ein_ Skript ist, kann man mit einem geeigneten
> equivs-Konfigurationsfile auch dieses Skript mit in das Dummypaket
> packen, aber das wäre nach meiner Wahrnehmung schon Overkill und ein
> Grund ein "richtges" Paket zu machen. Und diese Lernkurve ist auch für
> Debian hoch

Wobei allerdings das bauen von Paketen, die nur aus ein paar Files
bestehen, die nicht extra erzeugt werden müssen (also z.B. Scripts)
recht einfach ist - die muss man nur in das File debian/*.install
eintragen.

hp

Peter Blancke

unread,
Feb 10, 2024, 12:54:50 PMFeb 10
to
Am 2024-02-10, Martin Schnitkemper <news.trash...@spamgourmet.com> schrieb:
> Am Sa, 10.02.2024 um 12:21 schrieb Peter Blancke:

>> Tja, da stehe ich vor einer neuen Aufgabe: Wir paketiere ich das
>> o. a. Skript?

>| # Maintainer: P#### B###### <b######@gmx.de>
>| pkgname=meldung
>| pkgver=0.1
>| pkgrel=1
>| pkgdesc="Meldungsskript"
>| arch=(any)
>| depends=(bash gxmessage)
>| source=($pkgname.sh)
>| sha256sums=('bdf883df5218289ee3691cca34d7d3bb5453676251f5d30a7f986e7baabfc9ef')
>|
>| package() {
>| install -Dm 0755 $pkgname.sh $pkgdir/usr/bin/$pkgname.sh
>| }

Danke für so schnelle Hilfe!

Und schon etwas, womit man morgen den Sonntag füllen kann. Ich werde
das ausgiebig studieren.

Peter Blancke

unread,
Feb 10, 2024, 1:22:48 PMFeb 10
to
Erbitte einen kleinen Denkanstoß.

Gegeben sei ein Skript:

,----[ meldung.sh ]
| #!/bin/sh
| gxmessage "Ein Text"
`----

Wenn Pacman "gxmessage" löscht, kann das Skript natürlich nicht mehr
ausgeführt werden. Sicherlich kann ich die Existenz von "gxmessage"
im Skript prüfen ("test -x"), aber das Skript wird NICHT erfolgreich
ausgeführt.

Da mir das in einem anderen Skript dieser Tage böse auf die Füße
fiel, wäre es doch das einfachste, aus o. a. Skript ein Paket zu
bauen, welches mit pacman dann installiert wird.

Wird dann versucht, "gxmessage" zu löschen, sollte sich pacman über
die Abhängigkeit beschweren und das Löschen verweigern.

Tja, da stehe ich vor einer neuen Aufgabe: Wir paketiere ich das o.
a. Skript?

Kann mir jemand einen Denkanstoß geben? Die Vielzahl von
Beschreibungen zur Paktierungen kompletter Programme überfordert
mich vermutlich -- Neuland für mich.

Danke.

Peter Blancke

unread,
Feb 10, 2024, 2:57:15 PMFeb 10
to
Am 2024-02-10, Martin Schnitkemper <news.trash...@spamgourmet.com> schrieb:
> Am Sa, 10.02.2024 um 12:21 schrieb Peter Blancke:

>> Tja, da stehe ich vor einer neuen Aufgabe: Wir paketiere ich das
>> o. a. Skript?

>| # Maintainer: P#### Blancke <b######@###.##>
>| pkgname=meldung
>| pkgver=0.1
>| pkgrel=1
>| pkgdesc="Meldungsskript"
>| arch=(any)
>| depends=(bash gxmessage)
>| source=($pkgname.sh)
>| sha256sums=('bdf883df5218289ee3691cca34d7d3bb5453676251f5d30a7f986e7baabfc9ef')
>|
>| package() {
>| install -Dm 0755 $pkgname.sh $pkgdir/usr/bin/$pkgname.sh
>| }

Mit diesen Denkanstößen findet man plötzlich alles, was erforderlich
ist. Danke.

Eine gute Beschreibung nebst Lösung _exakt_ meiner Frage findet sich
unter

https://itsfoss.com/create-pkgbuild/#arch

Dann halfen mir:

- https://wiki.archlinux.org/title/PKGBUILD

sowie die manpages zu "namcap" und "makepkg".

Es ist alles einfacher, als ich befürchtete.

Ich tendiere dazu, alles, was meine eigenen lokalen Arbeitsskripte
anbelangt, unter /usr/local installieren zu lassen, vor allem dort
unter ./bin und ./etc -- mehr brauche ich nicht. Irgendwie will ich
das aus dem sonstigen System raushalten. Außerdem ist /usr/local
hier auch ein eigenes ZFS-Dataset. Mache ich das richtig so?

Peter Blancke

unread,
Feb 11, 2024, 8:07:48 AMFeb 11
to
Am 2024-02-10, Martin Schnitkemper <news.trash...@spamgourmet.com> schrieb:
> Am Sa, 10.02.2024 um 19:57 schrieb Peter Blancke:

>> Es ist alles einfacher, als ich befürchtete.

> Das ist eben die Arch-Philosophie, nach dem KISS-Prinzip eine
> Aufgabe möglichst einfach zu lösen. Dazu gehört dann
> konsequenterweise auch das Erstellen von Installationspaketen.

Nochmals tausend Dank für alle geduldigen Erklärungen. Jetzt ist mir
alles sonnenklar und alles funktioniert gem. KISS auf Anhieb und
einwandfrei.

> Idealerweise erstellt man die Pakete in einem clean chroot, dazu
> gibt es auch eine gute Beschreibung:
> https://wiki.archlinux.org/title/DeveloperWiki:Building_in_a_clean_chroot

Das habe ich auch studiert und sofort verstanden und umgesetzt.

Es verwunderte mich schon, daß in dem gebauten Paket die Datei
".BUILDINFO" meine gesamte Intimität durch Verweis aller meiner
installierter Pakete offenlegte. Der Spuk war im chroot latürnich
sofort vorbei. Gut zu wissen, auch wenn ich hier erst mal nur für
mich alleine paketiere.

>> Ich tendiere dazu, alles, was meine eigenen lokalen
>> Arbeitsskripte anbelangt, unter /usr/local installieren zu
>> lassen,

> Eine Trennung ist eigentlich nicht nötig.
> [...]

Ja, auch das leuchtet mir ein.

Die strikte Trennung von Distribution und eigenem Kram stammt
eigentlich aus der Zeit, da ich noch nicht Archlinux nutzte, ergo
also noch kein Rolling-System.

"namcap" beschwert sich bei mir im übrigen NICHT, wenn ich als
Installationspfade auf /usr/local verweise.

Vielen Dank für die Geduld!

Markus Schaaf

unread,
Feb 13, 2024, 3:06:05 PMFeb 13
to
Am 10.02.24 um 19:22 schrieb Peter Blancke:

> Tja, da stehe ich vor einer neuen Aufgabe: Wir paketiere ich das o.
> a. Skript?
>
> Kann mir jemand einen Denkanstoß geben? Die Vielzahl von
> Beschreibungen zur Paktierungen kompletter Programme überfordert
> mich vermutlich -- Neuland für mich.

$ ls
example.sh PKGBUILD

$ grep -v '^sha256sums=' PKGBUILD > PKGBUILD.new
$ makepkg -g >> PKGBUILD.new
==> Empfange Quellen...
-> example.sh gefunden
==> Erstelle Prüfsummen für Quell-Dateien...
$ mv PKGBUILD.new PKGBUILD
$ cat PKGBUILD
# Maintainer: Peter Blancke <bla...@gmx.de>
pkgname=example-scripts
pkgver=0.1
pkgrel=1
pkgdesc='Example packaging a script.'
arch=(any)
license=('GPL')
depends=()
scripts_=(example.sh)
source=("${scripts_[@]}")

package() {
install -m0755 -Dt "$pkgdir"/usr/bin "${scripts_[@]}"
}

sha256sums=('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855')

$ makepkg -si
==> Erstelle Paket: example-scripts 0.1-1 (Di 13 Feb 2024 21:03:46 CET)
==> Prüfe Laufzeit-Abhängigkeiten...
==> Prüfe Buildtime-Abhängigkeiten...
==> Empfange Quellen...
-> example.sh gefunden
==> Überprüfe source Dateien mit sha256sums...
example.sh ... Erfolg
==> Entpacke Quellen...
==> Betrete fakeroot Umgebung...
==> Beginne package()...
==> Säubere Installation...
-> Entferne libtool Dateien...
-> Bereinige ungewollte Dateien...
-> Entferne statische Bibliotheken...
-> Entferne unnötige Symbole aus Binär-Dateien und Bibliotheken...
-> Komprimiere Man-Pages und Info-Seiten...
==> Prüfe auf Paketierungsprobleme...
==> Erstelle Paket "example-scripts"...
-> Erstelle .PKGINFO Datei...
-> Erstelle .BUILDINFO Datei...
-> Erstelle .MTREE-Datei...
-> Komprimiere Paket...
==> Verlasse fakeroot Umgebung.
==> Signiere Paket(e)
-> Signaturdatei example-scripts-0.1-1-any.pkg.tar.xz.sig erstellt.
==> Beendete Erstellung: example-scripts 0.1-1 (Di 13 Feb 2024 21:04:03 CET)
==> Installiere Paket example-scripts mit pacman -U...

Markus Schaaf

unread,
Feb 13, 2024, 3:11:39 PMFeb 13
to
Hab die anderen Antworten wegen des Supersedes erst später
gesehen, sorry.

Am 13.02.24 um 21:06 schrieb Markus Schaaf:
0 new messages