web-dev-qa-db-fra.com

Comment trouvez-vous les licences pour tout installé sur votre système?

Je souhaite rédiger un script contenant la licence de chaque progiciel installé sur mon système.

En utilisant dpkg --get-selections, je peux obtenir la liste de tout ce qui est installé. Cependant, je ne vois pas comment obtenir les informations de licence pour chaque package. Par exemple, je peux utiliser aptitude show pour obtenir les propriétés de chaque paquet, mais cela n'inclut pas la licence:

$ 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-t-il un référentiel tiers qui corrèle la licence à chaque package?

Il semble difficile de télécharger chaque paquet source et de l'inspecter pour obtenir des informations sur les licences, mais c'est peut-être la meilleure solution.

18
mpontillo

Voici ce que j'ai fini par faire. (donne ~/licenses.txt avec toutes les licences existantes dans /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
14
mpontillo

En 2012, Debian a publié le document debian/copyright lisible par machine qui rendra les licences lisibles à l'avenir. Actuellement, tous les packages n'utilisent pas ce format. La commande

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

retourne toujours beaucoup de déchets. Pour une meilleure sortie, vous avez probablement besoin d’un outil qui analyse chaque fichier en fonction de la valeur du champ Format:.

Une structure complètement différente est la structure de fichier dans /usr/share/common-licenses/ (merci à https://stackoverflow.com/questions/1884753/license-info-of-a-deb-package#1884785 ). Il répertorie les principales licences utilisées dans les distributions basées sur Debian (et contient leurs textes de licence). Cette liste est fournie par le package base-files et est non liée à la liste des packages installés, mais elle contient probablement suffisamment d'informations pour le client/patron moyen.

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

Update Je viens de publier une solution de ligne de commande simple qui extrait les informations de licence des fichiers de droits d'auteur avec beaucoup d'heuristiques. https://github.com/daald/dpkg-licenses . N'hésitez pas à l'essayer. Toutes les suggestions sont les bienvenues.

12
Daniel Alder

Je viens de tomber sur dpkg-licences ( https://github.com/daald/dpkg-licenses ).

Il suffit de cloner le repo

clone de git https://github.com/daald/dpkg-licenses.git

Ensuite

./dpkg-licenses> licences.txt

Et vous avez le meilleur des logiciels actuels installés, la liste tabulaire des versions et des licences dont vous pouvez rêver ...

4
Richard