Lizenz per Befehl ausgeben lassen, wie?

Warum Debian? Was muss ich vorher wissen? Wo geht's nach der Installation weiter?
Antworten
caue
Beiträge: 89
Registriert: 18.07.2008 10:38:59

Lizenz per Befehl ausgeben lassen, wie?

Beitrag von caue » 16.03.2021 01:13:17

Hallo,

manchmal möchte ich die Lizenz eines Paketes rasch ermitteln, doch fehlt mir einen Befehl dazu. Mit apt-cache search, apt-cache policy usw. kann einiges über die Herkunft des Paketes herausgefunden werden, doch nicht die spezifische Lizenz des Paketes.
Mit welchem Befehl kann sie ausgegeben werden?

Unter synaptic kann man nach Bereich oder Herkunft zum Beispiel nicht-freie Pakete bei anklicken auflisten lassen. Beim durchstöbern der Bereiche könnte man jedoch etwas übersehen, jedenfalls wäre ich manchmal schon froh gewesen, wenn ich einen Befehl wüsste, womit die installierten unfreien Pakete aufgelistet werden würden.

Das Ziel, nichts freien auf dem Rechner zu haben ist mir wichtig, und es würde auch nützlich sein, rasch vorweisen zu können, dann nur noch ein unfreis firmware oder vielleicht sogar null unfreie Pakete drauf sind. Gibt es einen solchen Befehl?

Vielen Dank und viele Grüße
caue

tobo
Beiträge: 1027
Registriert: 10.12.2008 10:51:41

Re: Lizens per Befehl ausgeben lassen, wie?

Beitrag von tobo » 16.03.2021 01:35:53

Debianvrms könnte deine Wünsche erfüllen!?

Benutzeravatar
willy4711
Beiträge: 5283
Registriert: 08.09.2018 16:51:16

Re: Lizens per Befehl ausgeben lassen, wie?

Beitrag von willy4711 » 16.03.2021 07:13:39

Soweit sich das auf die Debian Repos bezieht, funktioniert Debianvrms sehr gut.
Hat man Fremd Repos eingebunden, werden die Programme "unterschlagen" , bzw. nicht erkannt.

Benutzeravatar
Meillo
Moderator
Beiträge: 6556
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Lizenz per Befehl ausgeben lassen, wie?

Beitrag von Meillo » 16.03.2021 08:56:01

Btw: RMS hat heute Geburtstag. ;-)
Use ed(1) once in a while!

Benutzeravatar
willy4711
Beiträge: 5283
Registriert: 08.09.2018 16:51:16

Re: Lizenz per Befehl ausgeben lassen, wie?

Beitrag von willy4711 » 16.03.2021 17:39:09

In Ergänzung zu vrms könnte man sich noch Pakete anzeigen lassen die veraltet bzw.
an der Paketverwaltung vorbei installiert sind,
Sagt aber nichts über die Lizenz aus:

Code: Alles auswählen

apt-show-versions|grep 'No available version in archive'

eggy
Beiträge: 2690
Registriert: 10.05.2008 11:23:50

Re: Lizenz per Befehl ausgeben lassen, wie?

Beitrag von eggy » 16.03.2021 20:19:46

Zum sicheren Nachweis taugt keine der Methoden: Du kannst damit zwar zeigen, dass auf dem Rechner vermutlich irgendwas unfreies drauf ist, das Gegenteil lässt sich aber nur beweisen, wenn alle Daten bekannt sind und eindeutig als "frei" deklariert sind (und auch das schließt nicht aus, dass Fehler passiert sind)
Vielleicht helfen die da verlinkten Diskussionen: https://wiki.debian.org/Debtags/FAQ#Any ... debtags.3F

Die Einteilung in "das ist in main" "das in contrib/nonfree" ist schonmal nen guter Startpunkt. Bei dem Rest müsstest Du eh Datei für Datei durchgehen. Manchmal hast Du ja auch Doppel/Mehrfachlizensierung. Da gilt dann je nach Kontext/Verträgen, das kriegst Du vermutlich auch nicht abgebildet. Und dass in einigen Paketen Dateien unterschiedlichster Lizenzen zusammengeschnürt sind, macht's auch nicht einfacher.

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

Re: Lizenz per Befehl ausgeben lassen, wie?

Beitrag von JTH » 17.03.2021 10:35:20

caue hat geschrieben: ↑ zum Beitrag ↑
16.03.2021 01:13:17
Mit welchem Befehl kann sie ausgegeben werden?
Ergänzend zu dem was eggy verlinkt hat: Es gibt da bisher nicht den einen, auch „maschinenlesbaren“ Weg, über den die Lizenzen in den Paketen angegeben sind.

Jedes Paket aus den offiziellen Debian-Repos muss zwar eine Datei /usr/share/doc/PAKET/copyright enthalten, deren Format ist aber (noch) nicht einheitlich. Außerdem lässt sich nicht jedes Paket auf eine Lizenz reduzieren, z.B. Debianperl-base:

Code: Alles auswählen

$ grep ^License: /usr/share/doc/perl-base/copyright
License: GPL-1+ or Artistic
[…]
License: Expat
License: REGCOMP, and GPL-1+ or Artistic
License: GPL-3+-WITH-BISON-EXCEPTION
[…]
License: BSD-3-clause-with-weird-numbering
[…]

Code: Alles auswählen

$ grep ^License: /usr/share/doc/perl-base/copyright | sort -u | wc -l
33
In perl-base stehen, da aus main, natürlich alle Dateien unter einer freien Lizenz. Bei Pakete aus non-free sieht das dann anders aus, da kann es aber auch eine Mischung aus freien und unfreien Lizenzen sein.

caue
Beiträge: 89
Registriert: 18.07.2008 10:38:59

Re: Lizenz per Befehl ausgeben lassen, wie?

Beitrag von caue » 27.03.2021 08:10:26

Es ist wirklich eine erstaunlich schöne Antwortkonstellation, die Ihr hier geliefert hab. Ich bin Euch sehr dankbar!

Das Programm vrms habe ich installiert und als normaler Nutzer aufgerufen:

Code: Alles auswählen

vrms
               Non-free packages installed on debian

firmware-iwlwifi                    Binary firmware for Intel Wireless cards
skypeforlinux                       Skype keeps the world talking, for free.

   Non-free packages with status other than installed on debian

amd64-microcode                     ( dei)  Processor microcode firmware for AMD CPUs
intel-microcode                     ( dei)  Processor microcode firmware for Intel CPUs

  4 non-free packages, 0.1% of 3506 installed packages.
- Skype von Microsoft ist dabei abzusterben und erscheint hier noch als ein Dorn im Auge.
- firmware-iwiwifi: das kommt häufig vor, auch auf den Rechner meiner Großfamilie. Welche Möglichkeiten gibt es, von dem Unfreien zu befreien? Freie Treiber gibt es dafür vermutlich nicht. Dann bliebe die Option, einen freien WLAN-Adapter zu kaufen? Danach habe ich schon ein wenig geschaut, aber die vielen Bäume in diesem Wald machen es mir immer schwer, den benötigten zu erkennen.
- firmware for AMD CPUs? Meine Maschine hat doch einen Inten i3 verbaut. Ob das wirklich benötigt wird?
- firmware for Intel CPUs: hat das hier mit dem nachträglich installierten firmware-iwlwifi zu tun oder ist das eine andere paar Schuhen?

Nächster Befehl - "Pakete anzeigen lassen die veraltet bzw.
an der Paketverwaltung vorbei installiert sind":

Code: Alles auswählen

apt-show-versions|grep 'No available version in archive'
digimend-dkms:all 9 installed: No available version in archive
linux-headers-4.19.0-6-amd64:amd64 4.19.67-2+deb10u2 installed: No available version in archive
linux-headers-4.19.0-6-common:all 4.19.67-2+deb10u2 installed: No available version in archive
net.downloadhelper.coapp:amd64 1.3.0 installed: No available version in archive
pgadmin4:amd64 4.25-1.pgdg100+1 installed: No available version in archive
pgadmin4-apache2:all 4.25-1.pgdg100+1 installed: No available version in archive
pgadmin4-common:all 4.25-1.pgdg100+1 installed: No available version in archive
pgadmin4-doc:all 4.25-1.pgdg100+1 installed: No available version in archive
"Jedes Paket aus den offiziellen Debian-Repos muss zwar eine Datei /usr/share/doc/PAKET/copyright enthalten" - gut zu wissen!
So, das Format ist noch nicht einheitlich und die Vielfalt der Lizenzen und modularisierten Programme machen es nicht immer leicht. Mal sehen, was der folgende Befehl zeigen kann:

Code: Alles auswählen

$ grep ^License: /usr/share/doc/bashtop/copyright
License: Apache-2.0
License: Apache-2.0
License: Apache-2.0

$ grep ^License: /usr/share/doc/htop/copyright
License: GPL-2+
License: GPL-2+
License: GPL-2+

$ grep ^License: /usr/share/doc/bash/copyright

$ grep ^License: /usr/share/doc/epiphany/copyrightgrep: /usr/share/doc/epiphany/copyright: Arquivo ou diretório inexistente

$ grep ^License: /usr/share/doc/emacs/copyright
License: GPL-3+
License:
License:
License: GPL plus Ian
License: manpage license
License: manpage license
License: manpage license
License: efaq.texi license
License: efaq-w32.texi license
License: LGPL-2+
License: GPL-2+
License: same as corresponding file in /etc/images
License: GPL-2+
License: GPL-2+
License: MPL-2.0
License:
License: meese.el license
License: gnulib-comp.m4 license
License: pkg.m4 license
License: m4 license
License: sedadmin.inp license
License: nt/inc/dirent.h license
License:
License:
License:
License: MPL-2.0
License: manpage license

$ grep ^License: /usr/share/doc/emacs/copyright | sort -u | wc -l
16
Ja, mit diesen Werkzeugen kann man viel Klarheit schaffen.

Diese Befehle beleuchten bereits installierte Pakete. Was nicht installiert ist, das kann nicht in /usr/share/doc/PAKET/copyright vorhanden sein.

Frage: gibt es eine Möglichkeit, die Lizenz eines noch nicht installiertes Paketes per Befehl abzufragen? So kann man rechzeitig Klarheit schaffen, und auf Unfreies bewusst verziechten.

Viele Grüße
Caue

Benutzeravatar
smutbert
Moderator
Beiträge: 7782
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Lizenz per Befehl ausgeben lassen, wie?

Beitrag von smutbert » 27.03.2021 10:36:59

caue hat geschrieben: ↑ zum Beitrag ↑
27.03.2021 08:10:26
[...]
- firmware-iwiwifi: das kommt häufig vor, auch auf den Rechner meiner Großfamilie. Welche Möglichkeiten gibt es, von dem Unfreien zu befreien? Freie Treiber gibt es dafür vermutlich nicht. Dann bliebe die Option, einen freien WLAN-Adapter zu kaufen? Danach habe ich schon ein wenig geschaut, aber die vielen Bäume in diesem Wald machen es mir immer schwer, den benötigten zu erkennen.
Die Treiber sind frei und Teil des Kernels. firmware-iwlwifi ist die unfreie Firmware, die auf die WLAN-/Bluetoothadapter von Intel geladen werden muss, damit sie funktionieren.

Mir ist keine aktueller WLAN-Adapter bekannt auf dem keine unfreie Firmware laufen würde, vielleicht gibt es welche bei denen die unfreie Firmware in einem nichtflüchtigen Speicher gespeichert ist und daher nicht erst auf das Gerät geladen werden muss, aber das ändert natürlich nichts daran, dass trotzdem eine unfreie Firmware darauf läuft.
Die Firmware älterer WLAN-Adapter von Atheros war bzw. ist frei, aber bei aktuellen atheros-Chips ist die Firmware genauso unfrei (Debianfirmware-atheros) wie bei allen anderen.
caue hat geschrieben: ↑ zum Beitrag ↑
27.03.2021 08:10:26
- firmware for AMD CPUs? Meine Maschine hat doch einen Inten i3 verbaut. Ob das wirklich benötigt wird?
Nein, das sind wie in der Beschreibung steht, die Microcode-Updates für CPUs von AMD. Wenn man die auf einem PC mit Intel CPU installiert, werden die einfach ignoriert.
caue hat geschrieben: ↑ zum Beitrag ↑
27.03.2021 08:10:26
- firmware for Intel CPUs: hat das hier mit dem nachträglich installierten firmware-iwlwifi zu tun oder ist das eine andere paar Schuhen?
Das sind wie beim obigen AMD-Pendant die Microcode-Updates für Intel Prozessoren. Das hat nichts mit WLAN oder Bluetooth zu tun.
Microcode-Updates beheben/umgehen oder mildern Fehler in CPUs, prominentes Beispiel wären die Sammlung an Sicherheitslücken, die unter dem Namen Spectre/Meltdown bekannt geworden ist und die zum Teil mit Microcode-Updates gemildert wird.

Microcode-Updates werden übrigens auch schon vom BIOS eingespielt, aber nachdem es selten ein BIOS mit den neuesten Microcode-Updates gibt, kann man die Microcode-Updates eben auch mit diesem Paket installieren.
caue hat geschrieben: ↑ zum Beitrag ↑
27.03.2021 08:10:26
[...]
Frage: gibt es eine Möglichkeit, die Lizenz eines noch nicht installiertes Paketes per Befehl abzufragen? So kann man rechzeitig Klarheit schaffen, und auf Unfreies bewusst verziechten.
Mit apt könnte man zumindest einmal ganz einfach nachsehen in welcher Sektion das Paket ist, zB bedeutet contrib

Code: Alles auswählen

$ apt show libdvd-pkg
Package: libdvd-pkg
Version: 1.4.2-1-1
Priority: optional
Section: contrib/utils
....
dass das Paket selbst zwar frei ist, aber auch unfreie oder lizenztechnisch anderweitig problematische Software benötigt wird, entweder direkt als Abhängigkeit oder wie in dem Fall aus dem Internet heruntergeladen wird.
Sonst glaube ich bleibt dir nichts anderes übrig als das fragliche Paket herunterzuladen, zu entpacken und nach einer Datei »/usr/share/doc/*/copyright« zu suchen.

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

Re: Lizenz per Befehl ausgeben lassen, wie?

Beitrag von JTH » 27.03.2021 12:20:34

smutbert hat geschrieben: ↑ zum Beitrag ↑
27.03.2021 10:36:59
Sonst glaube ich bleibt dir nichts anderes übrig als das fragliche Paket herunterzuladen, zu entpacken und nach einer Datei »/usr/share/doc/*/copyright« zu suchen.
Ich hab da spaßeshalber grad mal was zusammengebastelt :)

Code: Alles auswählen

~/bin$ cat apt-peak-copyright 
#!/bin/sh
set -eu

tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
cd "$tmpdir"

for pkg in "$@"; do
	apt-get download -- "$pkg" >/dev/null
	dpkg-deb --fsys-tarfile -- *.deb | tar --wildcards -Ox "./usr/share/doc/*/copyright"
	rm -f -- *.deb
done
(Die ganzen Wildcards, damits auch mit versionierten Paketangaben funktioniert.)

Code: Alles auswählen

~$ apt-peak-copyright bash dash
This is Debian GNU/Linux's prepackaged version of the FSF's GNU Bash,
the Bourne Again SHell.
[…]
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: dash
Upstream-Contact: dash@vger.kernel.org
Source: http://gondor.apana.org.au/~herbert/dash/
[…]

caue
Beiträge: 89
Registriert: 18.07.2008 10:38:59

Re: Lizenz per Befehl ausgeben lassen, wie?

Beitrag von caue » 06.04.2021 00:31:29

Ich brauchte ein wenig Zeit, um dein Bastelwerk nachzuvollziehen, weil mir die Erfahrung mit Skripts fehlt. Nachdem ich dann das Skript als Datei unter der Bezeichnung apt-peak-copyright ins Verzeichnis /bin gespeichert und mit chmod +x Ausführungsrechte vergeben habe, war ich stolz, dass sich was beim Aufruf bewegte.

Die Lizenz, etc. von noch nicht installierten Paketen kann tatsächlich somit, bei bestehender Internetverbindung, abgerufen werden:

Code: Alles auswählen

apt-peak-copyright xsensors
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: xsensors
Upstream-Contact: Kris Kersey <augustus@linuxhardware.org>
Source: http://www.linuxhardware.org/xsensors/

Files: *
Copyright:
 2002-2010 Kris Kersey
License: GPL-2+
[...]
Schön, dass sogar eine Reihe von Paketen gleichzeitig angegeben werden kann "bash dash xtel xsensors". Bestimmte Programme, wie z.B. emacs, haben so viele Informationen, dass das Terminalfenster überläuft.

Viele Grüße
caue

Antworten