Merge pull request #309 from shinji-s/devel

Fix bug in a ConfigTweaker method & Add CentOS 7 Installer DVD support
pull/307/merge
multibootusb 6 years ago committed by GitHub
commit 6ba656d51b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -65,6 +65,9 @@ def distro(iso_cfg_ext_dir, iso_link, expose_exception=False):
return "solydx"
elif re.search(r'knoppix', string, re.I):
return "knoppix"
elif re.search(r'root=live:CDLABEL=CentOS',
string, re.I):
return 'centos' # centos-live
elif re.search(r'root=live:CDLABEL=', string, re.I) or re.search(r'root=live:LABEL=', string, re.I):
return "fedora"
elif re.search(r'redcore', string, re.I):
@ -115,6 +118,8 @@ def distro(iso_cfg_ext_dir, iso_link, expose_exception=False):
return "zenwalk"
elif re.search(r'ubuntu server', string, re.I):
return "ubuntu-server"
elif re.search(r'Install CentOS', string, re.I):
return "centos-install"
elif re.search(r'CentOS', string, re.I):
return "centos"
elif re.search(r'Trinity Rescue Kit', string, re.I):

@ -27,20 +27,30 @@ def install_distro():
:return:
"""
usb_mount = config.usb_mount
install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path))
install_dir = os.path.join(config.usb_mount, "multibootusb",
iso_basename(config.image_path))
if not os.path.exists(os.path.join(usb_mount, "multibootusb")):
log("Copying multibootusb directory to " + usb_mount)
shutil.copytree(resource_path(os.path.join("data", "tools", "multibootusb")),
os.path.join(config.usb_mount, "multibootusb"))
shutil.copytree(
resource_path(os.path.join("data", "tools", "multibootusb")),
os.path.join(config.usb_mount, "multibootusb"))
if not os.path.exists(install_dir):
_iso_file_list = iso.iso_file_list(config.image_path)
os.makedirs(install_dir)
with open(os.path.join(install_dir, "multibootusb.cfg"), "w") as f:
f.write(config.distro)
with open(os.path.join(install_dir, "iso_file_list.cfg"), 'w') as f:
for file_path in iso.iso_file_list(config.image_path):
for file_path in _iso_file_list:
f.write(file_path + "\n")
else:
# This path is usually not taken.
with open(os.path.join(install_dir, "multibootusb.cfg"), "r") as f:
assert config.distro == f.read()
with open(os.path.join(install_dir, "iso_file_list.cfg"), 'r') as f:
_iso_file_list = [s.strip() for s in f.readlines()]
log("Installing " + iso_name(config.image_path) + " on " + install_dir)
# Some distros requires certain directories be at the root.
@ -105,6 +115,12 @@ def install_distro():
elif config.distro == 'insert':
iso_extract_full(config.image_path, install_dir)
relocator.move(('INSERT',))
elif config.distro == 'centos-install' and \
any(f=='.treeinfo' for f in _iso_file_list):
# DVD installer
iso.iso_extract_file(config.image_path, install_dir, '-xr-!Packages')
log("Copying the source iso file as is.")
copy_iso(config.image_path, install_dir)
else:
iso.iso_extract_full(config.image_path, install_dir)

@ -77,6 +77,7 @@ def contains_any_token(*tokens):
def contains_key(key):
assert type(key)==str
assert key[-1:] == '='
return lambda starter, params: any(x.startswith(key) for x in params)
def contains_all_keys(*keys):

@ -48,7 +48,7 @@ def persistence_distro(distro, iso_link):
# iso_size = iso.iso_size(iso_link)
if distro in ["ubuntu", "debian", "debian-install", "fedora"]:
if distro in ["ubuntu", "debian", "debian-install", "fedora", "centos"]:
gen.log("Persistence option is available.")
return distro
else:
@ -162,6 +162,10 @@ creator_dict = {
create_persistence_using_mkfs,
lambda C: (os.path.join(
'LiveOS', 'overlay-%s-%s' % (C.usb_label, C.usb_uuid)),)),
'centos' : (
create_persistence_using_mkfs,
lambda C: (os.path.join(
'LiveOS', 'overlay-%s-%s' % (C.usb_label, C.usb_uuid)),)),
}
def detect_missing_tools(distro):

@ -138,13 +138,15 @@ def update_distro_cfg_files(iso_link, usb_disk, distro, persistence=0):
log('Updating distro specific config files...')
tweaker_params = ConfigTweakerParam(
distro, '/multibootusb/%s' % iso_basename(iso_link),
_iso_name, install_dir_for_grub,
persistence, usb_uuid, usb_mount, usb_disk)
tweaker_class_dict = {
'ubuntu' : UbuntuConfigTweaker,
'debian' : DebianConfigTweaker,
'debian-install' : DebianConfigTweaker,
'gentoo' : GentooConfigTweaker,
'centos' : CentosConfigTweaker,
'centos-install' : CentosConfigTweaker,
}
tweaker_class = tweaker_class_dict.get(distro)
@ -163,7 +165,7 @@ def update_distro_cfg_files(iso_link, usb_disk, distro, persistence=0):
string = re.sub(r'linuxefi', 'linux', string)
string = re.sub(r'initrdefi', 'initrd', string)
if tweaker_class:
tweaker = tweaker_class(tweaker_params)
tweaker = tweaker_class(distro, tweaker_params)
string = tweaker.tweak(string)
elif distro == 'grml':
@ -608,26 +610,22 @@ class ConfigTweakerParam:
def __init__(self, distro_name, distro_path, persistence_size,
usb_uuid, usb_mount, usb_disk):
self.distro_name = distro_name
assert distro_path[0] == '/'
self.distro_path = distro_path # drive relative
self.persistence_size = persistence_size
self.usb_uuid = usb_uuid
self.usb_mount = usb_mount
self.usb_disk = usb_disk
class ConfigTweaker:
BOOT_PARAMS_STARTER = 'kernel|append|linux'
def __init__(self, setup_params):
def __init__(self, distro_type, setup_params):
self.disto_type = distro_type
self.setup_params = setup_params
def config_is_persistence_aware(self, content):
""" Used to restrict update of boot parameters to persistent-aware
menu entries if the distribution provides any.
"""
return self.persistence_awareness_checking_re.search(content) \
is not None
def tweak_first_match(self, content, kernel_param_line_pattern,
apply_persistence_to_all_lines,
param_operations,
@ -643,13 +641,16 @@ class ConfigTweaker:
start, end = m.span()
upto_match, rest_of_content = content[:start], content[end:]
starter_part, starter_token, params_part = [m.group(i) for i in [1,2,3]]
starter_part, starter_token, params_part = [
m.group(i) for i in [1,2,3]]
params = params_part.split(' ')
if apply_persistence_to_all_lines or self.has_persistency_param(params):
param_operations = param_operations + \
param_operations_for_persistence
for op_or_op_list, precondition in param_operations:
if apply_persistence_to_all_lines or \
self.has_persistency_param(params):
ops_to_apply = param_operations + \
param_operations_for_persistence
else:
ops_to_apply = param_operations
for op_or_op_list, precondition in ops_to_apply:
if not precondition(starter_token, params):
continue
try:
@ -698,23 +699,42 @@ class ConfigTweaker:
def add_op_if_file_exists(self, op_list, op_creator_func, key,
candidate_relative_path_list, predicate):
for candidate in candidate_relative_path_list:
relpath = os.path.join(self.setup_params.distro_path, candidate)
relpath = os.path.join(self.setup_params.distro_path[1:],
candidate)
if os.path.exists(os.path.join(
self.setup_params.usb_mount, relpath)):
normalized_relpath = relpath.replace('\\','/')
normalized_relpath = '/' + relpath.replace('\\','/')
op_list.append((op_creator_func(key, normalized_relpath),
predicate))
break
def file_is_installed(self, path):
p = self.setup_params
fullpath = os.path.join(p.usb_mount, p.distro_path[1:], path)
return os.path.exists(fullpath)
class PersistenceConfigTweaker(ConfigTweaker):
def __init__(self, pac_re, *args, **kw):
self.persistence_awareness_checking_re = pac_re
super(PersistenceConfigTweaker, self).__init__(*args, **kw)
def config_is_persistence_aware(self, content):
""" Used to restrict update of boot parameters to persistent-aware
menu entries if the distribution provides any.
"""
return self.persistence_awareness_checking_re.search(content) \
is not None
class ConfigTweakerWithDebianStylePersistenceParam(ConfigTweaker):
class ConfigTweakerWithDebianStylePersistenceParam(PersistenceConfigTweaker):
def __init__(self, *args, **kw):
super(ConfigTweakerWithDebianStylePersistenceParam,
self).__init__(*args, **kw)
self.persistence_awareness_checking_re = re.compile(
persistence_awareness_checking_re = re.compile(
r'^\s*(%s).*?\s%s(\s.*|)$' % \
(self.BOOT_PARAMS_STARTER, self.PERSISTENCY_TOKEN),
flags=re.I|re.MULTILINE)
super(ConfigTweakerWithDebianStylePersistenceParam,
self).__init__(persistence_awareness_checking_re, *args, **kw)
def has_persistency_param(self, params):
return self.PERSISTENCY_TOKEN in params
@ -793,8 +813,6 @@ class GentooConfigTweaker(NoPersistenceTweaker):
],
starter_is_either('append', 'linux')),
]
sfs_path = os.path.join(self.setup_params.distro_path,
'liberte','boot', 'root-x86.sfs')
self.add_op_if_file_exists(
ops, add_or_replace_kv,
'loop=', ['liberte/boot/root-x86.sfs', 'image.squashfs'],
@ -802,13 +820,86 @@ class GentooConfigTweaker(NoPersistenceTweaker):
return ops
class CentosConfigTweaker(PersistenceConfigTweaker):
def __init__(self, *args, **kw):
persistence_awareness_checking_re = re.compile(
r'^\s*(%s).*?\s(rd.live.overlay|overlay)=.+?' %
self.BOOT_PARAMS_STARTER, flags=re.I|re.MULTILINE)
super(CentosConfigTweaker, self).__init__(
persistence_awareness_checking_re, *args, **kw)
def has_persistency_param(self, params):
return any(p.startswith(('overlay=', 'rd.live.overlay='))
for p in params)
def param_operations(self):
uuid_spec = 'UUID=%s' % self.setup_params.usb_uuid
escaped_distro_path = self.setup_params.distro_path \
.replace(' ', '\\0x20')
live_path = escaped_distro_path + '/LiveOS'
ops = [(replace_kv('inst.stage2=', 'hd:%s:%s' %
(uuid_spec, escaped_distro_path)), always),
(add_or_replace_kv('inst.repo=',
'http://mirror.centos.org'
'/centos/7/os/x86_64/'),
contains_key('inst.stage2=')),
(replace_kv('root=', 'live:' + uuid_spec), always),
(add_or_replace_kv('rd.live.dir=', live_path),
contains_any_token('rd.live.image', 'Solus')),
(add_or_replace_kv('live_dir=', live_path),
contains_token('liveimage')), ]
if self.file_is_installed('.treeinfo'):
# Add or replace value of 'inst.repo=' with reference
# to the copied iso.
ops.append(
(add_or_replace_kv(
'inst.repo=',
'hd:UUID=%s:%s' % (
self.setup_params.usb_uuid,
self.setup_params.distro_path + '/'
+ self.setup_params.distro_name + '.iso')),
starter_is_either('append', 'linux')))
return ops
def param_operations_for_persistence(self):
uuid_spec = 'UUID=%s' % self.setup_params.usb_uuid
return [
(remove_tokens('ro'), always),
(add_or_replace_kv('overlay=', uuid_spec),
contains_token('liveimage')),
([add_tokens('rw'),
add_or_replace_kv('rd.live.overlay=', uuid_spec)],
contains_token('rd.live.image'))
]
def test_tweak_objects():
def os_path_exists(f):
if f.endswith('liberte/boot/root-x86.sfs'):
return False
if f.endswith('image.squashfs'):
return True
return False
saved = os.path.exists
os.path.exists = os_path_exists
try:
_test_tweak_objects()
finally:
os.path.exists = saved
def _test_tweak_objects():
usb_mount = 'L:'
usb_disk = 'L:'
setup_params_no_persistence = ConfigTweakerParam(
'debian', '/multibootusb/debian', 0, '{usb-uuid}', usb_mount, usb_disk)
debian_tweaker = DebianConfigTweaker(setup_params_no_persistence)
ubuntu_tweaker = UbuntuConfigTweaker(setup_params_no_persistence)
'{iso-name}', '/multibootusb/{iso-name}', 0,
'{usb-uuid}', usb_mount, usb_disk)
debian_tweaker = DebianConfigTweaker('debian', setup_params_no_persistence)
ubuntu_tweaker = UbuntuConfigTweaker('ubuntu', setup_params_no_persistence)
centos_tweaker = CentosConfigTweaker('centos', setup_params_no_persistence)
# Test awareness on 'persistent'
content = """
@ -825,20 +916,40 @@ def test_tweak_objects():
print ("Testing awareness on 'persistence' of debian tweaker.")
assert debian_tweaker.config_is_persistence_aware(content)
print ("Testing awareness on 'overlay=' of centos tweaker.")
content = """
append boot=live foo baz=1 overlay=UUID:2234-1224 double-spaced ignore_bootid persistence more stuff""".lstrip()
assert centos_tweaker.config_is_persistence_aware(content)
print ("Testing awareness on 'rd.live.overlay=' of centos tweaker.")
content = """
append boot=live foo baz=1 rd.live.overlay=UUID:2234-1224 double-spaced ignore_bootid persistence more stuff""".lstrip()
assert centos_tweaker.config_is_persistence_aware(content)
print ("Testing indefference on persistence keys of centos tweaker.")
content = """
append boot=live foo baz=1 double-spaced ignore_bootid persistence more stuff""".lstrip()
assert not centos_tweaker.config_is_persistence_aware(content)
print ("Testing awareness on 'overlay=' of centos tweaker.")
content = """
append boot=live foo baz=1 double-spaced ignore_bootid persistence more stuff""".lstrip()
assert not centos_tweaker.config_is_persistence_aware(content)
print ("Testing if 'persistence' token is left at the original place.")
content = "\tlinux\tfoo persistence boot=live in the middle"
assert debian_tweaker.tweak(content) == "\tlinux\tfoo persistence boot=live in the middle ignore_bootid live-media-path=/multibootusb/debian/live persistence-path=/multibootusb/debian"""
assert debian_tweaker.tweak(content) == "\tlinux\tfoo persistence boot=live in the middle ignore_bootid live-media-path=/multibootusb/{iso-name}/live persistence-path=/multibootusb/{iso-name}"""
print ("Testing if 'boot=live' at the very end is recognized.")
content = "menu\n\tlinux\tfoo persistence in the middle boot=live"
assert debian_tweaker.tweak(content) == "menu\n\tlinux\tfoo persistence in the middle boot=live ignore_bootid live-media-path=/multibootusb/debian/live persistence-path=/multibootusb/debian"""
assert debian_tweaker.tweak(content) == "menu\n\tlinux\tfoo persistence in the middle boot=live ignore_bootid live-media-path=/multibootusb/{iso-name}/live persistence-path=/multibootusb/{iso-name}"""
print ("Testing if 'boot=live' at a line end is recognized.")
content = """append zoo
\tappend\tfoo persistence in the middle boot=live
append foo"""
assert debian_tweaker.tweak(content) == """append zoo
\tappend\tfoo persistence in the middle boot=live ignore_bootid live-media-path=/multibootusb/debian/live persistence-path=/multibootusb/debian
\tappend\tfoo persistence in the middle boot=live ignore_bootid live-media-path=/multibootusb/{iso-name}/live persistence-path=/multibootusb/{iso-name}
append foo"""
print ("Testing if replacement of 'live-media=' happens on non-boot lines.")
@ -848,26 +959,28 @@ append foo"""
print ("Testing if \\tappend is recognized as a starter.")
content = """\tappend foo boot=live ignore_bootid persistence in the middle live-media-path=/foo/bar"""
assert debian_tweaker.tweak(content) == """\tappend foo boot=live ignore_bootid persistence in the middle live-media-path=/multibootusb/debian/live persistence-path=/multibootusb/debian"""
assert debian_tweaker.tweak(content) == """\tappend foo boot=live ignore_bootid persistence in the middle live-media-path=/multibootusb/{iso-name}/live persistence-path=/multibootusb/{iso-name}"""
print ("Testing if debian tweaker does not get tickled by 'persistent'.")
content = """\tappend boot=live foo ignore_bootid persistent in the middle live-media-path=/foo/bar"""
assert debian_tweaker.tweak(content) == """\tappend boot=live foo ignore_bootid persistent in the middle live-media-path=/multibootusb/debian/live"""
assert debian_tweaker.tweak(content) == """\tappend boot=live foo ignore_bootid persistent in the middle live-media-path=/multibootusb/{iso-name}/live"""
print ("Testing replacement of 'live-media-path' value.")
content = " append boot=live foo live-media-path=/foo/bar more"
assert debian_tweaker.tweak(content) == """ append boot=live foo live-media-path=/multibootusb/debian/live more ignore_bootid"""
assert debian_tweaker.tweak(content) == """ append boot=live foo live-media-path=/multibootusb/{iso-name}/live more ignore_bootid"""
print ("Testing rewriting of 'file=' param by debian_tweaker.")
content = " kernel file=/cdrom/preseed/ubuntu.seed boot=live"
setup_params_persistent = ConfigTweakerParam(
'debian', '/multibootusb/debian', 128*1024*1024, '{usb-uuid}',
'debian', '/multibootusb/{iso-name}', 128*1024*1024, '{usb-uuid}',
usb_mount, usb_disk)
debian_persistence_tweaker = DebianConfigTweaker(
setup_params_persistent)
'debian', setup_params_persistent)
ubuntu_persistence_tweaker = UbuntuConfigTweaker(
setup_params_persistent)
'ubuntu', setup_params_persistent)
centos_persistence_tweaker = CentosConfigTweaker(
'centos', setup_params_persistent)
print ("Testing if debian tweaker appends persistence parameters.")
content = """label foo
@ -876,7 +989,7 @@ append foo"""
"""
assert debian_persistence_tweaker.tweak(content) == """label foo
kernel foo bar
append boot=live foo live-media-path=/multibootusb/debian/live more ignore_bootid persistence persistence-path=/multibootusb/debian
append boot=live foo live-media-path=/multibootusb/{iso-name}/live more ignore_bootid persistence persistence-path=/multibootusb/{iso-name}
"""
print ("Testing if ubuntu tweaker selectively appends persistence params.")
@ -886,7 +999,7 @@ append foo"""
"""
assert ubuntu_persistence_tweaker.tweak(content) == """label foo
kernel foo bar
append boot=casper foo live-media-path=/multibootusb/debian/casper more ignore_bootid cdrom-detect/try-usb=true floppy.allowed_drive_mask=0 ignore_uuid root=UUID={usb-uuid} persistent persistent-path=/multibootusb/debian
append boot=casper foo live-media-path=/multibootusb/{iso-name}/casper more ignore_bootid cdrom-detect/try-usb=true floppy.allowed_drive_mask=0 ignore_uuid root=UUID={usb-uuid} persistent persistent-path=/multibootusb/{iso-name}
"""
# Test rewrite of persistence-aware configuration.
@ -910,50 +1023,115 @@ label live-persistence
menu label Live (^forensic mode)
linux /live/vmlinuz
initrd /live/initrd.img
append boot=live noconfig=sudo username=root hostname=kali noswap noautomount ignore_bootid live-media-path=/multibootusb/debian/live
append boot=live noconfig=sudo username=root hostname=kali noswap noautomount ignore_bootid live-media-path=/multibootusb/{iso-name}/live
label live-persistence
menu label ^Live USB Persistence (check kali.org/prst)
linux /live/vmlinuz
initrd /live/initrd.img
append boot=live noconfig=sudo username=root hostname=kali persistence ignore_bootid live-media-path=/multibootusb/debian/live persistence-path=/multibootusb/debian
append boot=live noconfig=sudo username=root hostname=kali persistence ignore_bootid live-media-path=/multibootusb/{iso-name}/live persistence-path=/multibootusb/{iso-name}
"""
setup_params = ConfigTweakerParam(
'debian', '/multibootusb/pentoo-amd64-hardened-2018.0_RC5.8_pre20180305/', 0, '{usb-uuid}', usb_mount, usb_disk)
gentoo_tweaker = GentooConfigTweaker(setup_params)
'{iso-name}', '/multibootusb/{iso-name}',
0, '{usb-uuid}', usb_mount, usb_disk)
gentoo_tweaker = GentooConfigTweaker('gentoo', setup_params)
print ("Testing Gentoo-tweaker on syslinux config.")
content = """label pentoo
menu label Pentoo Defaults (verify) 
menu label Pentoo Defaults (verify)
kernel /isolinux/pentoo
append initrd=/isolinux/pentoo.igz root=/dev/ram0 init=/linuxrc nox nodhcp overlayfs max_loop=256 dokeymap looptype=squashfs loop=/image.squashfs cdroot video=uvesafb:mtrr:3,ywrap,1024x768-16 usbcore.autosuspend=1 console=tty0 net.ifnames=0 scsi_mod.use_blk_mq=1 ipv6.autoconf=0 verify
"""
# Note that you'll have pentoo installed on the flash drive
# for this test to succeed.
assert gentoo_tweaker.tweak(content)=="""label pentoo
menu label Pentoo Defaults (verify) 
menu label Pentoo Defaults (verify)
kernel /isolinux/pentoo
append initrd=/isolinux/pentoo.igz root=/dev/ram0 init=/linuxrc nox nodhcp overlayfs max_loop=256 dokeymap looptype=squashfs loop=/multibootusb/pentoo-amd64-hardened-2018.0_RC5.8_pre20180305/image.squashfs cdroot video=uvesafb:mtrr:3,ywrap,1024x768-16 usbcore.autosuspend=1 console=tty0 net.ifnames=0 scsi_mod.use_blk_mq=1 ipv6.autoconf=0 verify real_root=%s slowusb subdir=/multibootusb/pentoo-amd64-hardened-2018.0_RC5.8_pre20180305/
append initrd=/isolinux/pentoo.igz root=/dev/ram0 init=/linuxrc nox nodhcp overlayfs max_loop=256 dokeymap looptype=squashfs loop=/multibootusb/{iso-name}/image.squashfs cdroot video=uvesafb:mtrr:3,ywrap,1024x768-16 usbcore.autosuspend=1 console=tty0 net.ifnames=0 scsi_mod.use_blk_mq=1 ipv6.autoconf=0 verify real_root=%s slowusb subdir=/multibootusb/{iso-name}
""" % usb_disk
print ("Testing Gentoo-tweaker on grub config.")
content = """insmod all_video
menuentry 'Boot LiveCD (kernel: pentoo)' --class gnu-linux --class os {
linux /isolinux/pentoo root=/dev/ram0 init=/linuxrc nox aufs max_loop=256 dokeymap looptype=squashfs loop=/image.squashfs cdroot cdroot_hash=xxx
initrd /isolinux/pentoo.igz
linux /isolinux/pentoo root=/dev/ram0 init=/linuxrc nox aufs max_loop=256 dokeymap looptype=squashfs loop=/image.squashfs cdroot cdroot_hash=xxx
initrd /isolinux/pentoo.igz
}
"""
assert gentoo_tweaker.tweak(content)=="""insmod all_video
menuentry 'Boot LiveCD (kernel: pentoo)' --class gnu-linux --class os {
linux /isolinux/pentoo root=/dev/ram0 init=/linuxrc nox max_loop=256 dokeymap looptype=squashfs loop=/multibootusb/pentoo-amd64-hardened-2018.0_RC5.8_pre20180305/image.squashfs cdroot real_root=%s slowusb subdir=/multibootusb/pentoo-amd64-hardened-2018.0_RC5.8_pre20180305/ overlayfs
initrd /isolinux/pentoo.igz
linux /isolinux/pentoo root=/dev/ram0 init=/linuxrc nox max_loop=256 dokeymap looptype=squashfs loop=/multibootusb/{iso-name}/image.squashfs cdroot real_root=%s slowusb subdir=/multibootusb/{iso-name} overlayfs
initrd /isolinux/pentoo.igz
}
""" % usb_disk
print ("Testing centos tweaker on DVD-installer")
saved = os.path.exists
os.path.exists = lambda f: f.endswith('/.treeinfo') or saved(f)
try:
content = r"""label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet
"""
assert centos_tweaker.tweak(content)=="""label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:UUID={usb-uuid}:/multibootusb/{iso-name} quiet inst.repo=hd:UUID={usb-uuid}:/multibootusb/{iso-name}/{iso-name}.iso
"""
finally:
os.path.exists = saved
print ("Testing centos tweaker on Net-installer")
assert centos_tweaker.tweak(content)=="""label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:UUID={usb-uuid}:/multibootusb/{iso-name} quiet inst.repo=http://mirror.centos.org/centos/7/os/x86_64/
"""
content = r"""label linux0
menu label ^Start CentOS
kernel vmlinuz0
append initrd=initrd0.img root=live:CDLABEL=CentOS-7-x86_64-LiveGNOME-1708 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0
menu default
"""
print ("Testing centos tweaker on Live")
assert centos_tweaker.tweak(content)=="""label linux0
menu label ^Start CentOS
kernel vmlinuz0
append initrd=initrd0.img root=live:UUID={usb-uuid} rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 rd.live.dir=/multibootusb/{iso-name}/LiveOS
menu default
"""
print ("Testing persistent centos tweaker on non-persistence config.")
content = r"""label linux0
menu label ^Start CentOS
kernel vmlinuz0
append initrd=initrd0.img root=live:CDLABEL=CentOS-7-x86_64-LiveGNOME-1708 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0
menu default
"""
assert centos_persistence_tweaker.tweak(content)=="""label linux0
menu label ^Start CentOS
kernel vmlinuz0
append initrd=initrd0.img root=live:UUID={usb-uuid} rootfstype=auto rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 rd.live.dir=/multibootusb/{iso-name}/LiveOS rw rd.live.overlay=UUID={usb-uuid}
menu default
"""
print ("Testing persistent centos tweaker not touching "
"non-persistent line")
content = r"""label linux0
menu label ^Start CentOS
append kenel=vmlinuz0
append rd.live.overlay=UUID:2234-2223 ro rd.live.image
append initrd=initrd0.img root=live:CDLABEL=CentOS-7-x86_64-LiveGNOME-1708 rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0
menu default
"""
assert centos_persistence_tweaker.tweak(content)=="""label linux0
menu label ^Start CentOS
append kenel=vmlinuz0
append rd.live.overlay=UUID={usb-uuid} rd.live.image rd.live.dir=/multibootusb/{iso-name}/LiveOS rw
append initrd=initrd0.img root=live:UUID={usb-uuid} rootfstype=auto ro rd.live.image quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 rd.live.dir=/multibootusb/{iso-name}/LiveOS
menu default
"""
def do_test_abspath_rewrite():
@ -976,7 +1154,8 @@ def test_abspath_rewrite():
path = path.replace('\\', '/')
if path.endswith('.efi'):
return False
if path.startswith('g:/multibootusb/ubuntu-14.04.5-desktop-amd64/boot'):
if path.startswith('g:/multibootusb/ubuntu-14.04.5-desktop-amd64'
'/boot'):
return True
if path.endswith('/boot/grub/grub.cfg'):
return True

Loading…
Cancel
Save