Я хочу написать скрипт, который выводит лицензию для каждого программного пакета, установленного в моей системе.
Используя 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/
Существует ли сторонний репозиторий, который соотносит лицензию с каждым пакетом? [ 115]
Звучит больно загружать каждый пакет с исходным кодом и проверять его на предмет лицензионной информации, но, возможно, это лучший способ.
Вот что я в итоге сделал. (приводит к ~/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
Я просто наткнулся на dpkg-licenses ( https://github.com/daald/dpkg-licenses ).
Просто клонируйте репо
git clone https://github.com/daald/dpkg-licenses.git
blockquote>Тогда
./ dpkg-licenses> licenses.txt
blockquote>И у вас есть лучшее из установленного списка программного обеспечения, версий и лицензий, о котором вы можете мечтать ...
В 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 . Не стесняйтесь попробовать это. Любые предложения приветствуются.
grep '^' /usr/share/doc/*/copyright
получит Вас почти такая же информация, илиtail -n 10000 /usr/share/doc/*/copyright
если Вы don' t хотят префикс имени файла на каждой строке. – Adam Nofsinger 18.05.2020, 06:06