Como você encontra as licenças para tudo instalado no seu sistema?

18

Quero escrever um script que produza a licença para cada pacote de software instalado no meu sistema.

Usando dpkg --get-selectionseu sou capaz de obter a lista de tudo instalado. No entanto, não vejo uma maneira de obter as informações de licença de cada pacote. Por exemplo, eu posso usar aptitude showpara obter as propriedades de cada pacote, mas isso não inclui a licença:

$ 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 um repositório de terceiros que correlaciona a licença a cada pacote?

Parece doloroso fazer o download de todos os pacotes de origem e inspecioná-los para obter informações de licenciamento, mas talvez seja a melhor maneira.

mpontillo
fonte
Isso parece não trivial neste momento. Possível duplicata de askubuntu.com/questions/88403/… Veja também: serverfault.com/questions/334189/…
Kevin Bowen
Veja também agora stackoverflow.com/questions/35044841/…
tripleee

Respostas:

14

Aqui está o que eu acabei fazendo. (resulta em ~/licenses.txttodas as licenças existentes /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
mpontillo
fonte
3
Isso é muito rotativo. Simplesmente grep '^' /usr/share/doc/*/copyrightvocê obterá as mesmas informações ou tail -n 10000 /usr/share/doc/*/copyrightse não desejar o prefixo do nome do arquivo em todas as linhas.
Tripleee
12

Em 2012, o Debian lançou o documento debian / copyright legível por máquina, que tornará as licenças legíveis no futuro. Atualmente, nem todos os pacotes usam esse formato. O comando

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

ainda devolve muito lixo. Para uma saída melhor, você provavelmente precisará de uma ferramenta que analise cada arquivo, dependendo do Format:valor do campo.

Uma maneira completamente diferente é a estrutura do arquivo em /usr/share/common-licenses/(thx para /programming/1884753/license-info-of-a-deb-package#1884785 ). Ele lista as principais licenças usadas nas distribuições baseadas no debian (e contém seus textos de licença). Esta lista é fornecida pelo pacote base-filese não está vinculada à lista de pacotes instalados, mas provavelmente são informações suficientes para o chefe / cliente médio.

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

Atualização Acabei de publicar uma solução simples de linha de comando que extrai as informações de licença dos arquivos de direitos autorais com muitas heurísticas. https://github.com/daald/dpkg-licenses . Sinta-se livre para experimentar. Todas as sugestões são bem-vindas.

Daniel Alder
fonte