Jak znaleźć licencje na wszystko zainstalowane w systemie?


18

Chcę napisać skrypt, który wyświetli licencję dla każdego pakietu oprogramowania zainstalowanego w moim systemie.

Korzystanie dpkg --get-selectionsJestem w stanie uzyskać listę wszystkich zainstalowanych. Nie widzę jednak sposobu na uzyskanie informacji o licencji dla każdego pakietu. Na przykład mogę użyć, aptitude showaby uzyskać właściwości każdego pakietu, ale nie obejmuje to licencji:

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

Czy istnieje repozytorium innej firmy, które koreluje licencję z każdym pakietem?

Pobieranie każdego pakietu źródłowego i sprawdzanie go pod kątem informacji licencyjnych wydaje się bolesne, ale może to najlepszy sposób.


W tym momencie wydaje się to nietrywialne. Możliwy duplikat askubuntu.com/questions/88403/… Zobacz także: serverfault.com/questions/334189/…
Kevin Bowen


Odpowiedzi:


14

Oto co skończyłem. (skutkuje ~/licenses.txtwszystkimi istniejącymi licencjami /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
To jest bardzo okrągłe. Po prostu grep '^' /usr/share/doc/*/copyrightotrzymasz te same informacje lub tail -n 10000 /usr/share/doc/*/copyrightjeśli nie chcesz prefiksu nazwy pliku w każdej linii.
tripleee

12

W 2012 roku Debian wydał dokument Debian / copyright do odczytu maszynowego, dzięki któremu licencje będą czytelne w przyszłości. Obecnie nie wszystkie pakiety używają tego formatu. Komenda

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

wciąż zwraca dużo śmieci. Aby uzyskać lepszy wynik, prawdopodobnie potrzebujesz narzędzia, które analizuje każdy plik w zależności od Format:wartości pola.

Zupełnie innym sposobem jest struktura plików w /usr/share/common-licenses/(dzięki /programming/1884753/license-info-of-a-deb-package#1884785 ). Zawiera listę głównych licencji używanych w dystrybucjach opartych na Debianie (i zawiera ich teksty licencji). Ta lista jest dostarczana przez pakiet base-filesi nie jest powiązana z listą zainstalowanych pakietów, ale prawdopodobnie jest to wystarczająca informacja dla przeciętnego szefa / klienta.

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

Aktualizacja Właśnie opublikowałem proste rozwiązanie wiersza polecenia, które wyodrębnia informacje o licencji z plików praw autorskich z dużą ilością heurystyk. https://github.com/daald/dpkg-licenses . Spróbuj tego. Wszelkie sugestie są mile widziane.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.