Come trovi le licenze per tutto ciò che è installato sul tuo sistema?


18

Voglio scrivere uno script che produca la licenza per ogni pacchetto software installato sul mio sistema.

Usando dpkg --get-selectionssono in grado di ottenere l'elenco di tutto ciò che è installato. Tuttavia, non vedo un modo per ottenere le informazioni sulla licenza per ciascun pacchetto. Ad esempio, posso usare aptitude showper ottenere le proprietà di ciascun pacchetto, ma ciò non include la licenza:

$ aptitude show apache2
Package: apache2
State: installed
Automatically installed: no
Version: 2.2.14-5ubuntu8.6
Priority: optional
Section: httpd
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Uncompressed Size: 36.9k
Depends: apache2-mpm-worker (= 2.2.14-5ubuntu8.6) | apache2-mpm-prefork (= 2.2.14-5ubuntu8.6) | apache2-mpm-event (= 2.2.14-5ubuntu8.6) | apache2-mpm-itk (= 2.2.14-5ubuntu8.6),
         apache2.2-common (= 2.2.14-5ubuntu8.6)
Provided by: apache2-mpm-event, apache2-mpm-itk, apache2-mpm-prefork, apache2-mpm-worker
Description: Apache HTTP Server metapackage
 The Apache Software Foundation's goal is to build a secure, efficient and extensible HTTP server as standards-compliant open source software. The result has long been the
 number one web server on the Internet. 

 It features support for HTTPS, virtual hosting, CGI, SSI, IPv6, easy scripting and database integration, request/response filtering, many flexible authentication schemes, and
 more.
Homepage: http://httpd.apache.org/

Esiste un repository di terze parti che correla la licenza per ciascun pacchetto?

Sembra doloroso scaricare ogni pacchetto sorgente e ispezionarlo per informazioni sulla licenza, ma forse è il modo migliore.


Questo sembra non banale a questo punto. Possibile duplicato di askubuntu.com/questions/88403/… Vedi anche: serverfault.com/questions/334189/…
Kevin Bowen,


Risposte:


14

Ecco cosa ho finito per fare. (risulta ~/licenses.txtcon tutte le licenze esistenti in /usr/share/doc)

$ packages=`dpkg --get-selections | awk '{ print $1 }'`
$ for package in $packages; do echo "$package: "; cat /usr/share/doc/$package/copyright; echo ""; echo ""; done > ~/licenses.txt

3
Questo è molto roundabount. Riceverai semplicemente grep '^' /usr/share/doc/*/copyrightle stesse informazioni o tail -n 10000 /usr/share/doc/*/copyrightse non vuoi il prefisso del nome file su ogni riga.
triplo il

12

Nel 2012, Debian ha rilasciato il documento debian / copyright leggibile da una macchina che renderà le licenze leggibili in futuro. Attualmente, non tutti i pacchetti utilizzano questo formato. Il comando

grep -h '^License:' /usr/share/doc/*/copyright | sort -i | uniq -ic | sort -n

restituisce ancora molta spazzatura. Per un output migliore è probabilmente necessario uno strumento che analizza ciascun file in base al Format:valore del campo.

Un modo completamente diverso è la struttura dei file in /usr/share/common-licenses/(grazie a /programming/1884753/license-info-of-a-deb-package#1884785 ). Elenca le principali licenze utilizzate nelle distribuzioni basate su debian (e contiene i relativi testi delle licenze). Questo elenco è fornito dal pacchetto base-filese non è collegato all'elenco dei pacchetti installati, ma è probabilmente un'informazione sufficiente per il capo / cliente medio.

ls /usr/share/common-licenses/
Apache-2.0  BSD   GFDL-1.2  GPL    GPL-2  LGPL    LGPL-2.1
Artistic    GFDL  GFDL-1.3  GPL-1  GPL-3  LGPL-2  LGPL-3

Aggiornamento Ho appena pubblicato una semplice soluzione da riga di comando che estrae le informazioni sulla licenza dai file di copyright con molta euristica. https://github.com/daald/dpkg-licenses . Sentiti libero di provarlo. Eventuali suggerimenti sono ben accetti


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.