Bagaimana Anda menemukan lisensi untuk semua yang diinstal pada sistem Anda?

18

Saya ingin menulis skrip yang mengeluarkan lisensi untuk setiap paket perangkat lunak yang diinstal pada sistem saya.

Dengan menggunakan dpkg --get-selectionssaya bisa mendapatkan daftar semua yang diinstal. Namun, saya tidak melihat cara untuk mendapatkan informasi lisensi untuk setiap paket. Misalnya, saya bisa menggunakan aptitude showuntuk mendapatkan properti dari setiap paket, tetapi itu tidak termasuk lisensi:

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

Apakah ada repositori pihak ketiga yang mengkorelasikan lisensi ke setiap paket?

Kedengarannya menyakitkan untuk mengunduh setiap paket sumber dan memeriksanya untuk informasi lisensi, tetapi mungkin itu cara terbaik.

mpontillo
sumber
Ini tampak tidak sepele pada saat ini. Kemungkinan duplikat askubuntu.com/questions/88403/… Lihat juga: serverfault.com/questions/334189/…
Kevin Bowen
Lihat juga sekarang stackoverflow.com/questions/35044841/…
tripleee

Jawaban:

14

Inilah yang akhirnya saya lakukan. (hasil ~/licenses.txtdengan semua lisensi yang ada di /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
sumber
3
Ini sangat bundaran. Cukup grep '^' /usr/share/doc/*/copyrightakan memberi Anda banyak informasi yang sama, atau tail -n 10000 /usr/share/doc/*/copyrightjika Anda tidak ingin awalan nama file di setiap baris.
tripleee
12

Pada tahun 2012, Debian merilis dokumen yang dapat dibaca Mesin debian / hak cipta yang akan membuat lisensi dapat dibaca di masa depan. Saat ini, tidak semua paket menggunakan format ini. Perintah

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

masih mengembalikan banyak sampah. Untuk hasil yang lebih baik Anda mungkin perlu alat yang mem-parsing setiap file tergantung pada nilai Format:bidang.

Cara yang sama sekali berbeda adalah struktur file di /usr/share/common-licenses/(thx to /programming/1884753/license-info-of-a-deb-package#1884785 ). Itu daftar lisensi utama yang digunakan dalam distribusi berbasis debian (dan berisi teks lisensi mereka). Daftar ini disediakan oleh paket base-filesdan tidak ditautkan ke daftar paket yang diinstal, tetapi itu mungkin informasi yang cukup untuk bos / pelanggan rata-rata.

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

Pembaruan Saya baru saja menerbitkan solusi baris perintah sederhana yang mengekstrak informasi lisensi dari file hak cipta dengan banyak heuristik. https://github.com/daald/dpkg-licenses . Jangan ragu untuk mencobanya. Setiap saran dipersilahkan.

Daniel Alder
sumber