我想编写一个脚本,输出安装在我系统上的每个软件包的许可证。
使用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/
Run Code Online (Sandbox Code Playgroud)
是否有第三方存储库将许可证与每个包相关联?
下载每个源包并检查它的许可信息听起来很痛苦,但这也许是最好的方法。
mpo*_*llo 15
这就是我最终做的。(导致 中~/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
Run Code Online (Sandbox Code Playgroud)
Dan*_*der 14
2012 年,Debian 发布了机器可读的 debian/copyright 文件,这将使许可证在未来具有可读性。目前,并非所有软件包都使用这种格式。命令
grep -h '^License:' /usr/share/doc/*/copyright | sort -i | uniq -ic | sort -n
Run Code Online (Sandbox Code Playgroud)
仍然返回大量垃圾。为了获得更好的输出,您可能需要一个根据Format:字段值解析每个文件的工具。
一种完全不同的方式是/usr/share/common-licenses/(thx to /sf/ask/131932741/#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
Run Code Online (Sandbox Code Playgroud)
更新 我刚刚发布了一个简单的命令行解决方案,它通过大量启发式方法从版权文件中提取许可证信息。https://github.com/daald/dpkg-licenses。随意尝试一下。欢迎任何建议。
小智 5
我只是偶然发现了 dpkg-licenses(https://github.com/daald/dpkg-licenses)。
只需克隆 repo
然后
./dpkg-licenses > licenses.txt
您已经安装了当今最好的软件、版本和许可证表格列表,这是您梦寐以求的……
| 归档时间: |
|
| 查看次数: |
20343 次 |
| 最近记录: |