¿Cómo encuentra las licencias para todo lo instalado en su sistema?

18

Quiero escribir un script que genere la licencia para cada paquete de software instalado en mi sistema.

Utilizando dpkg --get-selectionspuedo obtener una lista de todo lo instalado. Sin embargo, no veo una manera de obtener la información de licencia para cada paquete. Por ejemplo, puedo usar aptitude showpara obtener las propiedades de cada paquete, pero eso no incluye la licencia:

$ aptitude show apache2
Package: apache2
State: installed
Automatically installed: no
Version: 2.2.14-5ubuntu8.6
Priority: optional
Section: httpd
Maintainer: Ubuntu Developers <[email protected]>
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/

¿Existe un repositorio externo que correlacione la licencia con cada paquete?

Parece doloroso descargar cada paquete fuente e inspeccionarlo para obtener información sobre licencias, pero tal vez esa sea la mejor manera.

mpontillo
fuente

Respuestas:

14

Esto es lo que terminé haciendo. (da como resultado ~/licenses.txttodas las licencias que existen /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
mpontillo
fuente
3
Esto es muy indirecto. Simplemente grep '^' /usr/share/doc/*/copyrightobtendrá la misma información, o tail -n 10000 /usr/share/doc/*/copyrightsi no desea el prefijo del nombre del archivo en cada línea.
tripleee
12

En 2012, Debian lanzó el documento debian / copyright legible por máquina que hará que las licencias sean legibles en el futuro. Actualmente, no todos los paquetes usan este formato. El comando

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

Todavía devuelve mucha basura. Para una mejor salida, probablemente necesite una herramienta que analice cada archivo según el Format:valor del campo.

Una forma completamente diferente es la estructura del archivo en /usr/share/common-licenses/(thx a /programming/1884753/license-info-of-a-deb-package#1884785 ). Enumera las principales licencias utilizadas en distribuciones basadas en Debian (y contiene sus textos de licencia). El paquete proporciona esta lista base-filesy no está vinculada a la lista de paquetes instalados, pero probablemente sea información suficiente para el jefe / cliente promedio.

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

Actualización Acabo de publicar una solución simple de línea de comandos que extrae la información de la licencia de los archivos de copyright con mucha heurística. https://github.com/daald/dpkg-licenses . Siéntase libre de probarlo. Cualquier sugerencia es bienvenida.

Daniel Alder
fuente