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

18

Je veux écrire un script qui génère la licence pour chaque progiciel installé sur mon système.

En utilisant dpkg --get-selectionsje peux obtenir la liste de tout installé. Cependant, je ne vois pas de moyen d'obtenir les informations de licence pour chaque package. Par exemple, je peux utiliser aptitude showpour obtenir les propriétés de chaque package, 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 package source et de l'inspecter pour obtenir des informations sur les licences, mais c'est peut-être la meilleure façon.

mpontillo
la source

Réponses:

14

Voici ce que j'ai fini par faire. (entraîne ~/licenses.txttoutes les licences existantes /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
la source
3
C'est très rond. grep '^' /usr/share/doc/*/copyrightVous obtiendrez simplement les mêmes informations, ou tail -n 10000 /usr/share/doc/*/copyrightsi vous ne voulez pas le préfixe du nom de fichier sur chaque ligne.
tripleee
12

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 Format:valeur du champ.

Une manière complètement différente est la structure du fichier /usr/share/common-licenses/(merci à /programming/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-fileset n'est pas liée à la liste des packages installés, mais c'est probablement suffisamment d'informations pour le patron / client 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

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

Daniel Alder
la source
4

Je tombe juste sur des licences dpkg ( https://github.com/daald/dpkg-licenses ).

Clonez simplement le dépôt

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

alors

./dpkg-licenses> licenses.txt

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

Richard
la source
@Daniel Alder a déjà fait référence au même lien dans une autre réponse askubuntu.com/a/620069/24203 et il semble être l'auteur de l'outil :)
IsaacS