[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