您如何找到系统上安装的所有产品的许可证?


18

我想编写一个脚本,为我的系统上安装的每个软件包输出许可证。

使用 dpkg --get-selections我能够获取所有安装清单。但是,我看不到获取每个软件包的许可证信息的方法。例如,我可以aptitude show用来获取每个软件包的属性,但其中不包括许可证:

$ 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/

是否存在将许可证与每个软件包相关联的第三方存储库?

下载每个源程序包并检查其许可信息听起来很痛苦,但这也许是最好的方法。


在这一点上,这似乎并不平凡。可能是askubuntu.com/questions/88403/…的重复副本。 请参见:serverfault.com/questions/334189/…–
Kevin Bowen


Answers:


14

这就是我最终要做的。(结果为中~/licenses.txt存在的所有许可证/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
这是非常round的。如果您不希望每一行都有文件名前缀grep '^' /usr/share/doc/*/copyrighttail -n 10000 /usr/share/doc/*/copyright那么简单地将为您提供相同的信息。
三胞胎

12

2012年,Debian发布了文档“ 机器可读的debian /版权”,该文件将使许可证在未来具有可读性。当前,并非所有软件包都使用此格式。命令

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

仍然会返回很多垃圾。为了获得更好的输出,您可能需要一个工具来解析每个文件,具体取决于Format:字段值。

完全不同的方式是/usr/share/common-licenses//programming/1884753/license-info-of-a-deb-package#1884785中的文件结构)。它列出了基于debian的发行版中使用的主要许可证(并包含其许可证文本)。该列表由软件包提供,base-files并且链接到已安装软件包的列表,但是对于普通的上司/客户来说,这可能是足够的信息。

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

更新 我刚刚发布了一个简单的命令行解决方案,该解决方案具有很多启发式功能,可以从版权文件中提取许可证信息。https://github.com/daald/dpkg-licenses。随时尝试。欢迎任何建议。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.