#!/usr/libexec/platform-python import os import subprocess import sys import osbuild.api def ldconfig(): # ld.so.conf must exist, or `ldconfig` throws a warning subprocess.run(["touch", "/etc/ld.so.conf"], check=True) subprocess.run(["ldconfig"], check=True) def sysusers(): try: subprocess.run(["systemd-sysusers"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, check=True) except subprocess.CalledProcessError as error: sys.stderr.write(error.stdout) sys.exit(1) def tmpfiles(): # Allow systemd-tmpfiles to return non-0. Some packages want to create # directories owned by users that are not set up with systemd-sysusers. subprocess.run(["systemd-tmpfiles", "--create"], check=False) def nsswitch(): # the default behavior is fine, but using nss-resolve does not # necessarily work in a non-booted container, so make sure that # is not configured. try: os.remove("/etc/nsswitch.conf") except FileNotFoundError: pass def os_release(): """/usr/lib/os-release doesn't exist. The `redhat-release` package generates `/etc/os-release directly. To work around this, do the same here. https://bugzilla.redhat.com/show_bug.cgi?id=1766754 """ # remove the symlink that systemd-nspawn creates os.remove("/etc/os-release") with open("/etc/os-release", "w") as f: f.write('NAME="Red Hat Enterprise Linux"\n') f.write('VERSION="8.1 (Ootpa)"\n') f.write('ID="rhel"\n') f.write('ID_LIKE="fedora"\n') f.write('VERSION_ID="8.1"\n') f.write('PLATFORM_ID="platform:el8"\n') f.write('PRETTY_NAME="Red Hat Enterprise Linux 8.1 (Ootpa)"\n') f.write('ANSI_COLOR="0;31"\n') f.write('CPE_NAME="cpe:/o:redhat:enterprise_linux:8.1:GA"\n') f.write('HOME_URL="https://www.redhat.com/"\n') f.write('BUG_REPORT_URL="https://bugzilla.redhat.com/"\n') def python_alternatives(): """/usr/bin/python3 is a symlink to /etc/alternatives/python3, which points to /usr/bin/python3.6 by default. Recreate the link in /etc, so that shebang lines in stages and assemblers work. """ os.makedirs("/etc/alternatives", exist_ok=True) try: os.symlink("/usr/bin/python3.6", "/etc/alternatives/python3") except FileExistsError: pass if __name__ == "__main__": with osbuild.api.exception_handler(): ldconfig() sysusers() tmpfiles() nsswitch() os_release() python_alternatives() r = subprocess.run(sys.argv[1:], check=False) sys.exit(r.returncode)