如何找到系统上安装的所有内容的许可证?

如何找到系统上安装的所有内容的许可证?

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

使用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 <[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/

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

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

答案1

这是我最终做的事情。(结果是~/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

答案2

2012 年,Debian 发布了文档机器可读的 debian/copyright这将使许可证在将来可读。目前,并非所有软件包都使用这种格式。命令

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

仍然会返回大量垃圾。为了获得更好的输出,您可能需要一个根据Format:字段值解析每个文件的工具。

一个完全不同的方式是文件结构/usr/share/common-licenses/(感谢https://stackoverflow.com/questions/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。请随意尝试。欢迎提出任何建议。

答案3

我刚刚偶然发现了 dpkg-licenses (https://github.com/daald/dpkg-licenses)。

只需克隆 repo

git 克隆https://github.com/daald/dpkg-licenses.git

然后

./dpkg-licenses > licenses.txt

并且您拥有当今安装的最佳软件、版本和许可证表格列表,这些都是您梦寐以求的……

相关内容