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.
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
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.
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 ...