You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
5.7 KiB
163 lines
5.7 KiB
import re, sys, os, collections |
|
|
|
buildroot = sys.argv[1] |
|
known_files = sys.stdin.read().splitlines() |
|
known_files = {line.split()[-1]:line for line in known_files} |
|
|
|
def files(root): |
|
os.chdir(root) |
|
todo = collections.deque(['.']) |
|
while todo: |
|
n = todo.pop() |
|
files = os.scandir(n) |
|
for file in files: |
|
yield file |
|
if file.is_dir() and not file.is_symlink(): |
|
todo.append(file) |
|
|
|
o_libs = open('.file-list-libs', 'w') |
|
o_udev = open('.file-list-udev', 'w') |
|
o_pam = open('.file-list-pam', 'w') |
|
o_rpm_macros = open('.file-list-rpm-macros', 'w') |
|
o_devel = open('.file-list-devel', 'w') |
|
o_container = open('.file-list-container', 'w') |
|
o_networkd = open('.file-list-networkd', 'w') |
|
o_resolved = open('.file-list-resolved', 'w') |
|
o_oomd = open('.file-list-oomd', 'w') |
|
o_remote = open('.file-list-remote', 'w') |
|
o_tests = open('.file-list-tests', 'w') |
|
o_standalone_tmpfiles = open('.file-list-standalone-tmpfiles', 'w') |
|
o_standalone_sysusers = open('.file-list-standalone-sysusers', 'w') |
|
o_rest = open('.file-list-rest', 'w') |
|
for file in files(buildroot): |
|
n = file.path[1:] |
|
if re.match(r'''/usr/(share|include)$| |
|
/usr/share/man(/man.|)$| |
|
/usr/share/zsh(/site-functions|)$| |
|
/usr/share/dbus-1$| |
|
/usr/share/dbus-1/system.d$| |
|
/usr/share/dbus-1/(system-|)services$| |
|
/usr/share/polkit-1(/actions|/rules.d|)$| |
|
/usr/share/pkgconfig$| |
|
/usr/share/bash-completion(/completions|)$| |
|
/usr(/lib|/lib64|/bin|/sbin|)$| |
|
/usr/lib.*/(security|pkgconfig)$| |
|
/usr/lib/rpm(/macros.d|)$| |
|
/usr/lib/firewalld(/services|)$| |
|
/usr/share/(locale|licenses|doc)| # no $ |
|
/etc(/pam\.d|/xdg|/X11|/X11/xinit|/X11.*\.d|)$| |
|
/etc/(dnf|dnf/protected.d)$| |
|
/usr/(src|lib/debug)| # no $ |
|
/run$| |
|
/var(/cache|/log|/lib|/run|)$ |
|
''', n, re.X): |
|
continue |
|
if '/security/pam_' in n or '/man8/pam_' in n: |
|
o = o_pam |
|
elif '/rpm/' in n: |
|
o = o_rpm_macros |
|
elif '/usr/lib/systemd/tests' in n: |
|
o = o_tests |
|
elif re.search(r'/lib.*\.pc|/man3/|/usr/include|(?<!/libsystemd-shared-...).so$', n): |
|
o = o_devel |
|
elif re.search(r'''journal-(remote|gateway|upload)| |
|
systemd-remote\.conf| |
|
/usr/share/systemd/gatewayd| |
|
/var/log/journal/remote |
|
''', n, re.X): |
|
o = o_remote |
|
elif re.search(r'''mymachines| |
|
machinectl| |
|
systemd-nspawn| |
|
import-pubring.gpg| |
|
systemd-(machined|import|pull)| |
|
/machine.slice| |
|
/machines.target| |
|
var-lib-machines.mount| |
|
org.freedesktop.(import|machine)1 |
|
''', n, re.X): |
|
o = o_container |
|
elif re.search(r'''/usr/lib/systemd/network/80-| |
|
networkd| |
|
networkctl| |
|
org.freedesktop.network1 |
|
''', n, re.X): |
|
o = o_networkd |
|
elif re.search(r'''resolved| |
|
resolvectl| |
|
resolvconf| |
|
org.freedesktop.resolve1| |
|
systemd-resolve| |
|
nss-resolve |
|
''', n, re.X): |
|
o = o_resolved |
|
elif '.so.' in n: |
|
o = o_libs |
|
elif re.search(r'''udev(?!\.pc)| |
|
hwdb| |
|
bootctl| |
|
sd-boot|systemd-boot\.|loader.conf| |
|
bless-boot| |
|
boot-system-token| |
|
kernel-install| |
|
vconsole| |
|
backlight| |
|
rfkill| |
|
random-seed| |
|
modules-load| |
|
timesync| |
|
cryptenroll| |
|
cryptsetup| |
|
kmod| |
|
quota| |
|
pstore| |
|
sleep|suspend|hibernate| |
|
systemd-tmpfiles-setup-dev| |
|
network/99-default.link| |
|
growfs|makefs|makeswap|mkswap| |
|
fsck| |
|
repart| |
|
gpt-auto| |
|
volatile-root| |
|
verity-setup| |
|
remount-fs| |
|
/boot$| |
|
/boot/efi| |
|
/kernel/| |
|
/kernel$| |
|
/modprobe.d |
|
''', n, re.X): |
|
o = o_udev |
|
elif re.search(r'''10-oomd-.*defaults\.conf| |
|
oomd\.conf| |
|
oomctl| |
|
org.freedesktop.oom1| |
|
systemd-oomd |
|
''', n, re.X): |
|
o = o_oomd |
|
elif n.endswith('.standalone'): |
|
if 'tmpfiles' in n: |
|
o = o_standalone_tmpfiles |
|
elif 'sysusers' in n: |
|
o = o_standalone_sysusers |
|
else: |
|
assert False, 'Found .standalone not belonging to known packages' |
|
else: |
|
o = o_rest |
|
|
|
if n in known_files: |
|
prefix = ' '.join(known_files[n].split()[:-1]) |
|
if prefix: |
|
prefix += ' ' |
|
elif file.is_dir() and not file.is_symlink(): |
|
prefix = '%dir ' |
|
elif 'README' in n: |
|
prefix = '%doc ' |
|
elif n.startswith('/etc'): |
|
prefix = '%config(noreplace) ' |
|
else: |
|
prefix = '' |
|
|
|
suffix = '*' if '/man/' in n else '' |
|
|
|
print(f'{prefix}{n}{suffix}', file=o)
|
|
|