livemedia-creator: Mount iso if rootfs is LiveOS
In the latest method for booting the rootfs is in the LiveOS directory of the media, not appended to the initrd. Detect this and mount the iso and pass the CDLABEL to virt-install.
This commit is contained in:
parent
681f67f954
commit
befdc218ac
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# Live Media Creator
|
# Live Media Creator
|
||||||
#
|
#
|
||||||
# Copyright (C) 2011 Red Hat, Inc.
|
# Copyright (C) 2011-2012 Red Hat, Inc.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -44,7 +44,7 @@ from pykickstart.version import makeVersion
|
|||||||
|
|
||||||
# Use the Lorax treebuilder branch for iso creation
|
# Use the Lorax treebuilder branch for iso creation
|
||||||
from pylorax.base import DataHolder
|
from pylorax.base import DataHolder
|
||||||
from pylorax.treebuilder import TreeBuilder, RuntimeBuilder
|
from pylorax.treebuilder import TreeBuilder, RuntimeBuilder, udev_escape
|
||||||
from pylorax.sysutils import joinpaths, remove, linktree
|
from pylorax.sysutils import joinpaths, remove, linktree
|
||||||
from pylorax.imgutils import PartitionMount, mksparse
|
from pylorax.imgutils import PartitionMount, mksparse
|
||||||
from pylorax.executils import execWithRedirect, execWithCapture
|
from pylorax.executils import execWithRedirect, execWithCapture
|
||||||
@ -158,8 +158,11 @@ class IsoMountpoint(object):
|
|||||||
"""
|
"""
|
||||||
Mount the iso on a temporary directory and check to make sure the
|
Mount the iso on a temporary directory and check to make sure the
|
||||||
vmlinuz and initrd.img files exist
|
vmlinuz and initrd.img files exist
|
||||||
|
Check the iso for a LiveOS directory and set a flag.
|
||||||
|
Extract the iso's label.
|
||||||
"""
|
"""
|
||||||
def __init__( self, iso_path ):
|
def __init__( self, iso_path ):
|
||||||
|
self.label = None
|
||||||
self.iso_path = iso_path
|
self.iso_path = iso_path
|
||||||
self.mount_dir = tempfile.mkdtemp()
|
self.mount_dir = tempfile.mkdtemp()
|
||||||
if not self.mount_dir:
|
if not self.mount_dir:
|
||||||
@ -176,6 +179,7 @@ class IsoMountpoint(object):
|
|||||||
self.repo = self.mount_dir
|
self.repo = self.mount_dir
|
||||||
else:
|
else:
|
||||||
self.repo = None
|
self.repo = None
|
||||||
|
self.liveos = os.path.isdir( self.mount_dir+"/LiveOS" )
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for f in [self.kernel, self.initrd]:
|
for f in [self.kernel, self.initrd]:
|
||||||
@ -185,12 +189,27 @@ class IsoMountpoint(object):
|
|||||||
self.umount()
|
self.umount()
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
self.get_iso_label()
|
||||||
|
|
||||||
def umount( self ):
|
def umount( self ):
|
||||||
cmd = ["umount", self.mount_dir]
|
cmd = ["umount", self.mount_dir]
|
||||||
log.debug( cmd )
|
log.debug( cmd )
|
||||||
execWithRedirect( cmd[0], cmd[1:] )
|
execWithRedirect( cmd[0], cmd[1:] )
|
||||||
os.rmdir( self.mount_dir )
|
os.rmdir( self.mount_dir )
|
||||||
|
|
||||||
|
def get_iso_label( self ):
|
||||||
|
"""
|
||||||
|
Get the iso's label using isoinfo
|
||||||
|
"""
|
||||||
|
cmd = [ "isoinfo", "-d", "-i", self.iso_path ]
|
||||||
|
log.debug( cmd )
|
||||||
|
isoinfo_output = execWithCapture( cmd[0], cmd[1:] )
|
||||||
|
log.debug( isoinfo_output )
|
||||||
|
for line in isoinfo_output.splitlines():
|
||||||
|
if line.startswith("Volume id: "):
|
||||||
|
self.label = line[11:]
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
class ImageMount(object):
|
class ImageMount(object):
|
||||||
"""
|
"""
|
||||||
@ -297,22 +316,38 @@ class VirtualInstall( object ):
|
|||||||
for ks in ks_paths:
|
for ks in ks_paths:
|
||||||
cmd.append("--initrd-inject")
|
cmd.append("--initrd-inject")
|
||||||
cmd.append(ks)
|
cmd.append(ks)
|
||||||
|
|
||||||
disk_opts = "path={0}".format(disk_img)
|
disk_opts = "path={0}".format(disk_img)
|
||||||
disk_opts += ",format=raw"
|
disk_opts += ",format=raw"
|
||||||
if not os.path.isfile(disk_img):
|
if not os.path.isfile(disk_img):
|
||||||
disk_opts += ",size={0}".format(img_size)
|
disk_opts += ",size={0}".format(img_size)
|
||||||
|
cmd.append("--disk")
|
||||||
|
cmd.append(disk_opts)
|
||||||
|
|
||||||
|
if iso.liveos:
|
||||||
|
disk_opts = "path={0},device=cdrom".format(iso.iso_path)
|
||||||
|
cmd.append("--disk")
|
||||||
|
cmd.append(disk_opts)
|
||||||
|
|
||||||
extra_args = "ks=file:/{0}".format(os.path.basename(ks_paths[0]))
|
extra_args = "ks=file:/{0}".format(os.path.basename(ks_paths[0]))
|
||||||
if kernel_args:
|
if kernel_args:
|
||||||
extra_args += " "+kernel_args
|
extra_args += " "+kernel_args
|
||||||
if not vnc:
|
if not vnc:
|
||||||
extra_args += " console=/dev/ttyS0"
|
extra_args += " console=/dev/ttyS0"
|
||||||
|
if iso.liveos:
|
||||||
|
extra_args += " root=live:CDLABEL={0}".format(udev_escape(iso.label))
|
||||||
|
cmd.append("--extra-args")
|
||||||
|
cmd.append(extra_args)
|
||||||
|
|
||||||
|
cmd.append("--location")
|
||||||
|
cmd.append(iso.mount_dir)
|
||||||
|
|
||||||
channel_args = "tcp,host={0}:{1},mode=connect,target_type=virtio" \
|
channel_args = "tcp,host={0}:{1},mode=connect,target_type=virtio" \
|
||||||
",name=org.fedoraproject.anaconda.log.0".format(
|
",name=org.fedoraproject.anaconda.log.0".format(
|
||||||
virtio_host, virtio_port)
|
virtio_host, virtio_port)
|
||||||
[cmd.append(o) for o in ["--disk", disk_opts,
|
cmd.append("--channel")
|
||||||
"--extra-args", extra_args,
|
cmd.append(channel_args)
|
||||||
"--location", iso.mount_dir,
|
|
||||||
"--channel", channel_args]]
|
|
||||||
log.debug( cmd )
|
log.debug( cmd )
|
||||||
|
|
||||||
rc = execWithRedirect( cmd[0], cmd[1:] )
|
rc = execWithRedirect( cmd[0], cmd[1:] )
|
||||||
|
Loading…
Reference in New Issue
Block a user