qubes-installer-qubes-os/anaconda/tests/lib/mkdud.py
M. Vefa Bicakci 38f3e28d77
anaconda: Update to 23.19.10
Use the output of

  git diff --full-index --binary anaconda-22.20.13-1..anaconda-23.19.10-1

from anaconda's git repository and fix-up merge conflicts.
2016-04-10 00:00:00 -04:00

124 lines
4.3 KiB
Python
Executable File

#!/usr/bin/python3
# mkdud.py - test helper that makes driverdisk images
#
# Copyright (c) 2015 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Author: Will Woods <wwoods@redhat.com>
# Ignore any interruptible calls
# pylint: disable=interruptible-system-call
import os
import rpmfluff
import subprocess
import argparse
import tempfile
import shutil
from contextlib import contextmanager
@contextmanager
def in_tempdir(prefix='tmp'):
oldcwd = os.getcwd()
tmpdir = tempfile.mkdtemp(prefix=prefix)
os.chdir(tmpdir)
yield
os.chdir(oldcwd)
shutil.rmtree(tmpdir)
def parse_args():
p = argparse.ArgumentParser(
description="make fake driver disk images for testing",
epilog="ex: %(prog)s dd.iso",
)
p.add_argument("filename",
help="image filename to write")
p.add_argument("--label", "-L", default="OEMDRV",
help="disk image label (default: %(default)s)")
p.add_argument("--description", "-d", default="fake driverdisk",
help="driverdisk description (default: %(default)r)")
p.add_argument("--arch", "-a", default=rpmfluff.expectedArch,
help="arch to create RPMs for (default: host arch [%(default)s])")
p.add_argument("--kmod", "-k", action="store_true", default=False,
help="add a fake kmod to the driverdisk")
p.add_argument("--binary", "-b", action="store_true", default=False,
help="add a fake binary to the driverdisk")
p.add_argument("--createrepo", "-c", action="store_true", default=False,
help="run createrepo to add repodata to the driverdisk")
return p.parse_args()
def write_description(desc):
with open("rhdd3",'w') as rhdd3:
rhdd3.write(desc+'\n')
def make_rpm(pkg, outdir=".", arch=None):
outdir = os.path.abspath(outdir)
with in_tempdir(prefix='mkdud.rpmfluff.'):
pkg.make()
rpmfile = pkg.get_built_rpm(arch or rpmfluff.expectedArch)
outfile = os.path.join(outdir, os.path.basename(rpmfile))
shutil.move(rpmfile, outfile)
return outfile
def write_kmod_rpm(outdir, for_kernel_ver=None, arch=None):
pkg = rpmfluff.SimpleRpmBuild('fake_kmod', '1.0', '1')
pkg.add_provides('kernel-modules >= %s' % for_kernel_ver)
pkg.add_installed_file("/lib/modules/%s/extra/fake-dd.ko" % for_kernel_ver,
rpmfluff.SourceFile("fake-dd.ko", "this is a fake kernel module"),
)
pkg.add_installed_file("/root/fake-dd-2.ko",
rpmfluff.SourceFile("fake-dd-2.ko", "another fake kernel module"),
)
return make_rpm(pkg, outdir, arch)
def write_installer_enhancement_rpm(outdir, for_anaconda_ver=None, arch=None):
pkg = rpmfluff.SimpleRpmBuild('fake_bin', '1.0', '1')
pkg.add_provides('installer-enhancement = %s' % for_anaconda_ver)
pkg.add_installed_file("/usr/bin/fake-dd-bin",
rpmfluff.SourceFile("fake-dd-bin", "#!/bin/sh\necho FAKE BINARY OK"),
mode='755',
)
return make_rpm(pkg, outdir, arch)
def createrepo(repodir):
return subprocess.check_call(["createrepo", repodir])
def mkisofs(outfile, cd_dir, label=None):
cmd = ["mkisofs", "-o", outfile, "-r", "-input-charset", "utf-8"]
if label:
cmd += ["-V", label]
cmd.append(cd_dir)
subprocess.check_call(cmd)
def main():
opts = parse_args()
outfile = os.path.abspath(opts.filename)
with in_tempdir(prefix='mkdud.'):
write_description(opts.description)
rpmdir = os.path.join("rpms", opts.arch)
os.makedirs(rpmdir)
if opts.kmod:
write_kmod_rpm(rpmdir, "3.0.0")
if opts.binary:
write_installer_enhancement_rpm(rpmdir, "19.0")
if opts.createrepo:
createrepo(rpmdir)
mkisofs(outfile, cd_dir=".", label=opts.label)
if __name__ == '__main__':
main()