[virt-tools-list] perform_initrd_injections does not work
Claus Rosenberger
claus.rosenberger at rocnet.de
Thu Dec 21 14:32:19 UTC 2017
Changing the code from
cpio_proc.wait()
find_proc.wait()
gzip_proc.wait()
to
find_proc.wait()
cpio_proc.wait()
gzip_proc.wait()
did it, the file is injected now. But the VM still prevents to start,
because of the concatted gzip files?
Am 21.12.2017 um 12:09 schrieb Claus Rosenberger:
> Hi,
>
> i figured out the function perform_initrd_injections does extend the
> existing initrd with a few bytes, but the file to be injected is not
> inside
> of the new generated initrd. Further it's not possible to boot the VM
> with
> the new generated initrd. But both files are still a gzipped ASCII cpio
> archive (SVR4 with no CRC). I can deflate the new generated file
> manually.
>
> Do you have any clue what could be the issue? virt-install is working
> without injecting the preseed.cfg file.
>
> -rw------- 1 root root 133426176 Dec 19 18:29 initrd-new
> -rw------- 1 root root 133425664 Dec 19 18:29 initrd-old
>
> root@ /tmp # hexdump -s 133425664 -C initrd-new
> 07f3ea00 30 37 30 37 30 31 30 30 30 30 30 30 30 30 30 30
> |0707010000000000|
> 07f3ea10 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
> |0000000000000000|
> 07f3ea20 30 30 30 30 30 30 30 30 30 30 30 30 30 31 30 30
> |0000000000000100|
> 07f3ea30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
> |0000000000000000|
> *
> 07f3ea60 30 30 30 30 30 42 30 30 30 30 30 30 30 30 54 52
> |00000B00000000TR|
> 07f3ea70 41 49 4c 45 52 21 21 21 00 00 00 00 00 00 00 00
> |AILER!!!........|
> 07f3ea80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> |................|
> *
> 07f3ec00
>
>
> Kind regards
> Claus
>
>
> def perform_initrd_injections(initrd, injections, scratchdir):
> """
> Insert files into the root directory of the initial ram disk
> """
> if not injections:
> return
>
> if _rhel4_initrd_inject(initrd, injections):
> return
>
> tempdir = tempfile.mkdtemp(dir=scratchdir)
> os.chmod(tempdir, 0775)
> shutil.copy(initrd, '/tmp/initrd-old.gz') # <------ this file
> works to boot the VM
>
> for filename in injections:
> logging.debug("Copying %s to the initrd.", filename)
> shutil.copy(filename, tempdir)
>
> logging.debug("Appending to the initrd.")
> find_proc = subprocess.Popen(['find', '.', '-print0'],
> stdout=subprocess.PIPE,
> stderr=subprocess.PIPE,
> cwd=tempdir)
> logging.debug("Found file %s with find_proc.",
> find_proc.stdout.read())
> cpio_proc = subprocess.Popen(['cpio', '-o', '--null',
> '-Hnewc','--quiet'],
> stdin=find_proc.stdout,
> stdout=subprocess.PIPE,
> stderr=subprocess.PIPE,
> cwd=tempdir)
> f = open(initrd, 'ab')
> gzip_proc = subprocess.Popen(['gzip'], stdin=cpio_proc.stdout,
> stdout=f, stderr=subprocess.PIPE)
> cpio_proc.wait()
> find_proc.wait()
> gzip_proc.wait()
> f.close()
> shutil.rmtree(tempdir)
> # copy injected initrd
> shutil.copy(initrd, '/tmp/initrd-new.gz') # <------ this file
> doesn't work to boot the VM
>
>
> finderr = find_proc.stderr.read()
> cpioerr = cpio_proc.stderr.read()
> gziperr = gzip_proc.stderr.read()
> if finderr:
> logging.debug("find stderr=%s", finderr)
> if cpioerr:
> logging.debug("cpio stderr=%s", cpioerr)
> if gziperr:
> logging.debug("gzip stderr=%s", gziperr)
>
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
More information about the virt-tools-list
mailing list