Auflisten welche Pakete aus Sourcepaket gebaut werden

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Auflisten welche Pakete aus Sourcepaket gebaut werden

Beitrag von inne » 08.10.2023 12:50:00

Hallo,

ich überwache das Debianarchive auf Quellpakete (apt-cache dumpavail | ... ), und erhalte eine Liste der neu hinzugekommenen Quellpakete.
GIbt es nun eine Möglichkeit abzufragen, welche Pakete daraus gebaut werden? Manchmal will ich das gerne wissen.

uname
Beiträge: 12076
Registriert: 03.06.2008 09:33:02

Re: Auflisten welche Pakete aus Sourcepaket gebaut werden

Beitrag von uname » 08.10.2023 14:32:36

Mag einen Befehl geben. Ich kenn nur Internetadressen z.B. https://packages.debian.org/source/bullseye/coreutils für Debiancoreutils.

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Auflisten welche Pakete aus Sourcepaket gebaut werden

Beitrag von inne » 08.10.2023 15:46:40

Das ist eine Möglichkeit.
Wenn man dies aber lokal in der Shell machen möchte, bleibt nur die Iteration über alle Pakete und dann prüfen, welche als Quelle das Sourcepaket haben?

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Auflisten welche Pakete aus Sourcepaket gebaut werden

Beitrag von JTH » 08.10.2023 18:18:38

apt-cache showsrc SRCPKG zeigt dir unter Package-List:, welche Binärpakete aus einem Quellpaket gebaut werden:

Code: Alles auswählen

$ apt-cache showsrc fish
Package: fish
Binary: fish, fish-common
Version: 3.6.0-3.1
[…]
Package-List: 
 fish deb shells optional arch=any
 fish-common deb shells optional arch=all
[…]
Dass dieselben Pakete nochmal in kurzer Form unter Binary: gelistet sind, hab ich gerade jetzt erst beim Schreiben entdeckt :oops: :lol: Die Binary-Zeile lässt sich natürlich leicht mit einem grep, awk oder sonstwas herausfiltern.

Falls du doch mal was anderes benutzen möchtest, hatte ich gerade was mit Perl zusammengebastelt (bevor ich Binary: gesehen hab). Braucht Debianlibapt-pkg-perl:

Code: Alles auswählen

#!/usr/bin/perl

use strict;
use warnings;

use AptPkg::Source;

my $apt_srcs = AptPkg::Source->new();
foreach ( $apt_srcs->get( $ARGV[0], 1 ) ) {
    print $_->{Version}, ": ", join( " ", $_->{Binaries}->@* ), "\n";
}

Code: Alles auswählen

$ ./bin-pkgs-from-src fish
3.6.0-3.1: fish fish-common

Wenn ein Paket in mehreren verschiedenen Versionen verfügbar ist (z.B. Debianfirefox-esr in stable und stable-security), geben sowohl apt-cache showsrc als auch das Perl-Skript die resultierenden Binärpakete für alle Versionen aus.
Manchmal bekannt als Just (another) Terminal Hacker.

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Auflisten welche Pakete aus Sourcepaket gebaut werden

Beitrag von inne » 09.10.2023 16:23:22

Cool, danke. :THX:

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Auflisten welche Pakete aus Sourcepaket gebaut werden

Beitrag von inne » 12.11.2023 08:21:43

Hallo @JTH, hallo @all,

kann mit der libapt-pkg-perl/AptPkg auch eine Liste aller Quellpakete im Cache abgefragt werden, ich finde da den Anfang nicht? Dann könnte ich mein doch sehr langsames Shellscript (s. NoPaste) in Perl neu-schreiben.
Den ersten Teil mit den Binärpaketen und der Paketbeschreibung (s.o.) habe ich ja schon von dir erklärt bekommen.

NP: NoPaste-Eintrag42014 (PS: Dateien werden als gegeben angenommen)

LG,
Inne

// Wobei eine Liste der Binärpakete genauer wäre, aber auch länger.

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Auflisten welche Pakete aus Sourcepaket gebaut werden

Beitrag von JTH » 12.11.2023 12:44:20

inne hat geschrieben: ↑ zum Beitrag ↑
12.11.2023 08:21:43
Hallo @JTH, hallo @all,
Stand da heut morgen nicht noch ein anderer Name, TRex oder so? :P :twisted:

Alle bekannten Source- mit dazugehörigen Binärpaketen auflisten ginge sogar noch kürzer:

Code: Alles auswählen

awk -F: '$1=="Package" { printf "%s:", substr($2, 2) } $1=="Binary" { print $2 }' /var/lib/apt/lists/*Sources | sort
Mir ist so, dass das auch irgendwie in Verbindung mit apt-cache möglich sein könnte, aber bin nicht weiter fündig geworden. Hier direkt auf die Dateien mit Paketlisten zuzugreifen ist vermutlich aber eh etwas schneller.

Das oben ist nur eine erste, triviale Lösung. Manche Sourcepakete kommen in der Auflistung doppelt vor (in verschiedenen Versionen, „linux“ z.B.). Und die zugeordneten Binärpakete sind in ihrer Zeile nicht sortiert, sondern beliebig angeordnet, nämlich so wie sie ein Mensch irgendwo eingetragen hat. Eine einheitliche, „maschinelle“ Sortierung wär da aber evtl. sinnvoll, wenn du Änderungen der Listen erkennen willst, die nicht nur die Folge von menschlicher Beliebigkeit sind.

Ob es sinnvoll ist, die mehrfach auftretenden Sourcepakete zu einem Eintrag zusammenzufügen oder andersrum zur Unterscheidung noch die Quellversion hinter den Quellnamen zu hängen, müsstest du für deine Anwendung entscheiden.
Manchmal bekannt als Just (another) Terminal Hacker.

inne
Beiträge: 3281
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Auflisten welche Pakete aus Sourcepaket gebaut werden

Beitrag von inne » 12.11.2023 13:06:18

JTH hat geschrieben: ↑ zum Beitrag ↑
12.11.2023 12:44:20
inne hat geschrieben: ↑ zum Beitrag ↑
12.11.2023 08:21:43
Hallo @JTH, hallo @all,
Stand da heut morgen nicht noch ein anderer Name, TRex oder so? :P :twisted:
Ja, ich hatte mich vertan.
Warum ich TRex getippt hatte weiss ich nicht... :oops: Aber ich vergesse z.B. manchmal auch Wörter im Satz zu scheiben, das ist damals schon meinem Berufsschulleher aufgefallen. :facepalm:

--

Also scheint es nicht zu gehen.

Kann man denn an diesem Shell-Script noch was verbessern (bestimmt)?
Ich habe es nun nur geändert das es Binärpakete nimmt - das scheint mir doch besser als Sourcepakete. Das lässt sich ja schnell ändern (ist jetzt nun ungetestet).

Code: Alles auswählen

#!/usr/bin/env bash
# Den APT-Cache über Versionen hinweg verfolgen

set -e

show_desc () {
	while read REPLY; do
		echo -n "$REPLY - "; apt-cache show "$REPLY" | sed -n -E "/^Description.*: /{s///;p}" | head -1
	done
}

temp="`mktemp`"

apt-cache dumpavail | sed -n -E '/^Package: /{s///;p}' | sort -u >"$temp"

comm -2 -3 "$temp" "old" | tee "diff" | show_desc

mv "$temp" "old"
Was anderes fertiges gibt es im Debian-Archive wohl nicht, dann würde ich das nutzen? Da mach ich mal demnächst ein neues Thema für auf, wie andere das machen und sich da auf dem laufenden halten.

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Auflisten welche Pakete aus Sourcepaket gebaut werden

Beitrag von JTH » 12.11.2023 13:18:48

inne hat geschrieben: ↑ zum Beitrag ↑
12.11.2023 13:06:18
Also scheint es nicht zu gehen.
(Fast) alles geht auf irgendeinem Weg :wink:

inne hat geschrieben: ↑ zum Beitrag ↑
12.11.2023 13:06:18
Kann man denn an diesem Shell-Script noch was verbessern (bestimmt)?
Ich habe es nun nur geändert das es Binärpakete nimmt - das scheint mir doch besser als Sourcepakete.
Mit den Binärpaketen könnte das hier leichter sein, ja. An die kommt man bei den verschiedenen Möglichkeiten zum Auflisten meist leichter ran.

Aber die Frage wär erstmal nochmal: Was genau möchtest du denn erreichen? Bemerken, wenn ein Source- und/oder Binärpaket einfach nur dazugekommen ist? Oder zusätzlich auch erkennen, wenn sich eine Version geändert hat? (Ich frag nur, weil es manchmal bei der Auswahl der besten Lösung hilft, das Ziel nochmal klar zu beschreiben ;) )

inne hat geschrieben: ↑ zum Beitrag ↑
12.11.2023 13:06:18
Was anderes fertiges gibt es im Debian-Archive wohl nicht, dann würde ich das nutzen? Da mach ich mal demnächst ein neues Thema für auf, wie andere das machen und sich da auf dem laufenden halten.
Da kann ich dir nicht weiterhelfen. Ich vermute mal, dass es z.B. eine Mailingliste gäbe, die für dich hier interessant sein könnte?
Manchmal bekannt als Just (another) Terminal Hacker.

Antworten