2022-08-11 17:42:36 +00:00
|
|
|
import subprocess
|
|
|
|
import sys
|
|
|
|
import shlex
|
|
|
|
|
|
|
|
def runcmd(cmd):
|
|
|
|
return subprocess.check_output(shlex.split(cmd)).decode('utf8').split('\n')
|
|
|
|
|
|
|
|
def getsrpm(rpm):
|
|
|
|
rpminfo = runcmd(f'rpm -qi {rpm}')
|
|
|
|
for inf in rpminfo:
|
|
|
|
if inf.startswith('Source RPM'):
|
|
|
|
srpm = inf.split(':', 1)[1].strip()
|
|
|
|
return srpm
|
|
|
|
|
|
|
|
srpmtorpm = {}
|
|
|
|
rpmtosrpm = {}
|
|
|
|
allrpmlist = runcmd('rpm -qa')
|
|
|
|
for rpm in allrpmlist:
|
|
|
|
if not rpm:
|
|
|
|
continue
|
|
|
|
srpm = getsrpm(rpm)
|
|
|
|
rpmtosrpm[rpm] = srpm
|
|
|
|
if srpm in srpmtorpm:
|
|
|
|
srpmtorpm[srpm].add(rpm)
|
|
|
|
else:
|
|
|
|
srpmtorpm[srpm] = {rpm}
|
|
|
|
|
|
|
|
with open(sys.argv[1]) as rpmlist:
|
|
|
|
rpmlist = rpmlist.read().split('\n')
|
|
|
|
licenses = set([])
|
2023-01-31 13:52:32 +00:00
|
|
|
licensesbyrpm = {}
|
2022-08-11 17:42:36 +00:00
|
|
|
for rpm in rpmlist:
|
|
|
|
if not rpm:
|
|
|
|
continue
|
|
|
|
srpm = rpmtosrpm[rpm]
|
2022-11-15 16:46:52 +00:00
|
|
|
if srpm.startswith('linux-firmware'):
|
|
|
|
continue
|
2022-08-11 17:42:36 +00:00
|
|
|
for relrpm in srpmtorpm[srpm]:
|
|
|
|
liclist = runcmd(f'rpm -qL {relrpm}')
|
|
|
|
for lic in liclist:
|
2023-01-31 13:52:32 +00:00
|
|
|
if not lic:
|
|
|
|
continue
|
2022-08-11 18:09:55 +00:00
|
|
|
if lic == '(contains no files)':
|
|
|
|
continue
|
2023-01-31 13:52:32 +00:00
|
|
|
licensesbyrpm[rpm] = lic
|
2022-08-11 17:42:36 +00:00
|
|
|
licenses.add(lic)
|
|
|
|
for lic in sorted(licenses):
|
|
|
|
print(lic)
|
2023-01-31 13:52:32 +00:00
|
|
|
manualrpms = [
|
|
|
|
'ipmitool',
|
|
|
|
'almalinux-release',
|
|
|
|
'libaio',
|
|
|
|
'hwdata',
|
|
|
|
'snmp',
|
|
|
|
'libnl3',
|
|
|
|
'libbpf', # this is covered by kernel
|
|
|
|
'sqlite', # public domain
|
|
|
|
'linux-firmware', #all pertinent licenses are stripped out
|
|
|
|
'xfsprogs', # manually added by hand below (not in rpm)
|
|
|
|
'tmux', # use the extracttmuxlicenses on the source to generate NOTICE below
|
|
|
|
]
|
|
|
|
manuallicenses = [
|
2023-03-28 21:02:53 +00:00
|
|
|
'/usr/share/doc/hostname/COPYRIGHT',
|
|
|
|
'/usr/share/doc/hwdata/COPYING',
|
|
|
|
'/usr/share/doc/hwdata/LICENSE',
|
2023-01-31 13:52:32 +00:00
|
|
|
'/usr/share/doc/ipmitool/COPYING',
|
|
|
|
'/usr/share/doc/libaio/COPYING',
|
|
|
|
'/usr/share/doc/net-snmp/COPYING',
|
|
|
|
'/usr/share/doc/libnl3/COPYING',
|
|
|
|
'/usr/share/licenses/xfsprogs/GPL-2.0',
|
|
|
|
'/usr/share/licenses/xfsprogs/LGPL-2.1',
|
|
|
|
'/usr/share/licenses/tmux/NOTICE',
|
2023-03-28 21:02:53 +00:00
|
|
|
'/usr/share/licenses/kernel-extra/exceptions/Linux-syscall-note',
|
|
|
|
'/usr/share/licenses/kernel-extra/other/Apache-2.0',
|
|
|
|
'/usr/share/licenses/kernel-extra/other/CC-BY-SA-4.0',
|
|
|
|
'/usr/share/licenses/kernel-extra/other/CDDL-1.0',
|
|
|
|
'/usr/share/licenses/kernel-extra/other/GPL-1.0',
|
|
|
|
'/usr/share/licenses/kernel-extra/other/Linux-OpenIB',
|
|
|
|
'/usr/share/licenses/kernel-extra/other/MPL-1.1',
|
|
|
|
'/usr/share/licenses/kernel-extra/other/X11',
|
|
|
|
'/usr/share/licenses/kernel-extra/preferred/BSD-2-Clause',
|
|
|
|
'/usr/share/licenses/kernel-extra/preferred/BSD-3-Clause',
|
|
|
|
'/usr/share/licenses/kernel-extra/preferred/BSD-3-Clause-Clear',
|
|
|
|
'/usr/share/licenses/kernel-extra/preferred/GPL-2.0',
|
|
|
|
'/usr/share/licenses/kernel-extra/preferred/LGPL-2.0',
|
|
|
|
'/usr/share/licenses/kernel-extra/preferred/LGPL-2.1',
|
|
|
|
'/usr/share/licenses/kernel-extra/preferred/MIT',
|
2023-01-31 13:52:32 +00:00
|
|
|
]
|
|
|
|
for lic in manuallicenses:
|
|
|
|
print(lic)
|
|
|
|
for rpm in rpmlist:
|
|
|
|
if not rpm:
|
|
|
|
continue
|
|
|
|
for manualrpm in manualrpms:
|
|
|
|
if manualrpm in rpm:
|
|
|
|
break
|
|
|
|
else:
|
|
|
|
if rpm not in licensesbyrpm:
|
|
|
|
raise Exception('Unresolved license info for ' + rpm)
|
|
|
|
print("UH OH: " + rpm)
|
2022-08-11 17:42:36 +00:00
|
|
|
|
|
|
|
|