Finished converting UFD sections, testing next

This commit is contained in:
2Shirt 2020-01-07 23:53:55 -07:00
parent 8b9672313a
commit 7702cdcf0a
Signed by: 2Shirt
GPG key ID: 152FAC923B0E132C
2 changed files with 119 additions and 149 deletions

View file

@ -1,149 +1,14 @@
#!/bin/env python3 #!/usr/bin/env python3
# """Wizard Kit: Build UFD Tool"""
# pylint: disable=no-name-in-module,wildcard-import,wrong-import-position
# vim: sts=2 sw=2 ts=2 # vim: sts=2 sw=2 ts=2
"""Wizard Kit: UFD build tool"""
import os import wk
import sys
# Init
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
from docopt import docopt
from functions.common import *
from functions.ufd import *
from settings.ufd import *
init_global_vars(silent=True)
# Main section
if __name__ == '__main__': if __name__ == '__main__':
# pylint: disable=invalid-name
# Set log
try: try:
global_vars['LogDir'] = '{}/Logs'.format( wk.kit.ufd.build_ufd()
get_user_home(get_user_name())) except SystemExit:
set_log_file('Build UFD ({Date-Time}).log'.format(**global_vars)) raise
except: # pylint: disable=bare-except except: #pylint: disable=bare-except
major_exception() wk.std.major_exception()
# Header
print_success(KIT_NAME_FULL)
print_standard('UFD Build Tool')
print_standard(' ')
# Check if running as root
if not running_as_root():
print_error('ERROR: This script is meant to be run as root.')
abort(False)
# Docopt
try:
args = docopt(DOCSTRING)
except SystemExit as sys_exit:
# Catch docopt exits
exit_script(sys_exit.code)
except: # pylint: disable=bare-except
major_exception()
try:
# Verify selections
ufd_dev = verify_ufd(args['--ufd-device'])
sources = verify_sources(args, UFD_SOURCES)
show_selections(args, sources, ufd_dev, UFD_SOURCES)
if not args['--force']:
confirm_selections(update=args['--update'])
# Prep UFD
if not args['--update']:
print_info('Prep UFD')
prep_device(ufd_dev, UFD_LABEL, use_mbr=args['--use-mbr'])
# Mount UFD
try_and_print(
indent=2,
message='Mounting UFD...',
function=mount,
mount_source=find_first_partition(ufd_dev),
mount_point='/mnt/UFD',
read_write=True,
)
# Remove Arch folder
if args['--update']:
try_and_print(
indent=2,
message='Removing Linux...',
function=remove_arch,
)
# Copy sources
print_standard(' ')
print_info('Copy Sources')
for s_label, s_path in sources.items():
try_and_print(
indent=2,
message='Copying {}...'.format(s_label),
function=copy_source,
source=s_path,
items=ITEMS[s_label],
overwrite=True,
)
# Update boot entries
print_standard(' ')
print_info('Boot Setup')
try_and_print(
indent=2,
message='Updating boot entries...',
function=update_boot_entries,
boot_entries=BOOT_ENTRIES,
boot_files=BOOT_FILES,
iso_label=ISO_LABEL,
ufd_label=UFD_LABEL,
)
# Install syslinux (to partition)
try_and_print(
indent=2,
message='Syslinux (partition)...',
function=install_syslinux_to_partition,
partition=find_first_partition(ufd_dev),
)
# Unmount UFD
try_and_print(
indent=2,
message='Unmounting UFD...',
function=unmount,
mount_point='/mnt/UFD',
)
# Install syslinux (to device)
try_and_print(
indent=2,
message='Syslinux (device)...',
function=install_syslinux_to_dev,
ufd_dev=ufd_dev,
use_mbr=args['--use-mbr'],
)
# Hide items
print_standard(' ')
print_info('Final Touches')
try_and_print(
indent=2,
message='Hiding items...',
function=hide_items,
ufd_dev=ufd_dev,
items=ITEMS_HIDDEN,
)
# Done
if not args['--force']:
print_standard('\nDone.')
pause('Press Enter to exit...')
exit_script()
except SystemExit as sys_exit:
exit_script(sys_exit.code)
except: # pylint: disable=bare-except
major_exception()

View file

@ -9,9 +9,10 @@ import os
import shutil import shutil
from collections import OrderedDict from collections import OrderedDict
from docopt import docopt
from wk import io, std from wk import io, log, std
from wk.cfg.main import KIT_NAME_SHORT from wk.cfg.main import KIT_NAME_FULL, KIT_NAME_SHORT
from wk.cfg.ufd import BOOT_ENTRIES, BOOT_FILES, ITEMS, ITEMS_HIDDEN, SOURCES from wk.cfg.ufd import BOOT_ENTRIES, BOOT_FILES, ITEMS, ITEMS_HIDDEN, SOURCES
from wk.exe import run_program from wk.exe import run_program
from wk.os import linux from wk.os import linux
@ -47,6 +48,109 @@ UFD_LABEL = f'{KIT_NAME_SHORT}_UFD'
# Functions # Functions
def build_ufd():
"""Build UFD using selected sources."""
args = docopt(DOCSTRING)
log.update_log_path(dest_name='build-ufd', timestamp=True)
try_print = std.TryAndPrint()
try_print.indent = 2
# Check if running with root permissions
if not linux.running_as_root():
std.print_error('This script is meant to be run as root')
std.abort()
# Show header
std.print_success(KIT_NAME_FULL)
std.print_warning('UFD Build Tool')
std.print_warning(' ')
# Verify selections
ufd_dev = verify_ufd(args['--ufd-device'])
sources = verify_sources(args, SOURCES)
show_selections(args, sources, ufd_dev, SOURCES)
if not args['--force']:
confirm_selections(update=args['--update'])
# Prep UFD
if not args['--update']:
std.print_info('Prep UFD')
prep_device(ufd_dev, UFD_LABEL, use_mbr=args['--use-mbr'])
# Mount UFD
try_print.run(
message='Mounting UFD...',
function=linux.mount,
mount_source=find_first_partition(ufd_dev),
mount_point='/mnt/UFD',
read_write=True,
)
# Remove Arch folder
if args['--update']:
try_print.run(
message='Removing Linux...',
function=remove_arch,
)
# Copy sources
std.print_standard(' ')
std.print_info('Copy Sources')
for s_label, s_path in sources.items():
try_print.run(
message='Copying {}...'.format(s_label),
function=copy_source,
source=s_path,
items=ITEMS[s_label],
overwrite=True,
)
# Update boot entries
std.print_standard(' ')
std.print_info('Boot Setup')
try_print.run(
message='Updating boot entries...',
function=update_boot_entries,
)
# Install syslinux (to partition)
try_print.run(
message='Syslinux (partition)...',
function=install_syslinux_to_partition,
partition=find_first_partition(ufd_dev),
)
# Unmount UFD
try_print.run(
message='Unmounting UFD...',
function=linux.unmount,
mount_point='/mnt/UFD',
)
# Install syslinux (to device)
try_print.run(
message='Syslinux (device)...',
function=install_syslinux_to_dev,
ufd_dev=ufd_dev,
use_mbr=args['--use-mbr'],
)
# Hide items
std.print_standard(' ')
std.print_info('Final Touches')
try_print.run(
message='Hiding items...',
function=hide_items,
ufd_dev=ufd_dev,
items=ITEMS_HIDDEN,
)
# Done
std.print_standard('\nDone.')
if not args['--force']:
std.pause('Press Enter to exit...')
def confirm_selections(update=False): def confirm_selections(update=False):
"""Ask tech to confirm selections, twice if necessary.""" """Ask tech to confirm selections, twice if necessary."""
if not std.ask('Is the above information correct?'): if not std.ask('Is the above information correct?'):
@ -178,6 +282,7 @@ def prep_device(dev_path, label, use_mbr=False):
4. Format partition (FAT32, 4K aligned) 4. Format partition (FAT32, 4K aligned)
""" """
try_print = std.TryAndPrint() try_print = std.TryAndPrint()
try_print.indent = 2
# Zero-out first 64MB # Zero-out first 64MB
cmd = [ cmd = [
@ -283,12 +388,12 @@ def show_selections(args, sources, ufd_dev, ufd_sources):
std.print_standard(' ') std.print_standard(' ')
def update_boot_entries(boot_entries, boot_files, iso_label, ufd_label): def update_boot_entries():
"""Update boot files for UFD usage""" """Update boot files for UFD usage"""
configs = [] configs = []
# Find config files # Find config files
for c_path, c_ext in boot_files.items(): for c_path, c_ext in BOOT_FILES.items():
c_path = io.case_insensitive_path('/mnt/UFD{c_path}') c_path = io.case_insensitive_path('/mnt/UFD{c_path}')
for item in os.scandir(c_path): for item in os.scandir(c_path):
if item.name.lower().endswith(c_ext.lower()): if item.name.lower().endswith(c_ext.lower()):
@ -299,13 +404,13 @@ def update_boot_entries(boot_entries, boot_files, iso_label, ufd_label):
'sed', 'sed',
'--in-place', '--in-place',
'--regexp-extended', '--regexp-extended',
f's/{iso_label}/{ufd_label}/', f's/{ISO_LABEL}/{UFD_LABEL}/',
*configs, *configs,
] ]
run_program(cmd) run_program(cmd)
# Uncomment extra entries if present # Uncomment extra entries if present
for b_path, b_comment in boot_entries.items(): for b_path, b_comment in BOOT_ENTRIES.items():
try: try:
io.case_insensitive_path(f'/mnt/UFD{b_path}') io.case_insensitive_path(f'/mnt/UFD{b_path}')
except (FileNotFoundError, NotADirectoryError): except (FileNotFoundError, NotADirectoryError):