Preliminary support for overlayed packages

This commit is contained in:
Rudra Saraswat 2023-05-08 22:55:14 +05:30
parent 6ef4c3e197
commit eb2eef08e5

60
akshara
View file

@ -207,7 +207,7 @@ def update_system():
exec('umount', '-l', '/mnt/iso-update/squashfs-root/proc') exec('umount', '-l', '/mnt/iso-update/squashfs-root/proc')
def install_system_package(): def handle_system_packages(install):
if is_running(): if is_running():
error('already running') error('already running')
exit(1) exit(1)
@ -237,6 +237,54 @@ def install_system_package():
exec('mount', '-t', 'overlay', 'overlay', '-o', f'lowerdir=/usr,upperdir={usr_overlay},workdir={usr_overlay_workdir}', '/.blendrw/usr') exec('mount', '-t', 'overlay', 'overlay', '-o', f'lowerdir=/usr,upperdir={usr_overlay},workdir={usr_overlay_workdir}', '/.blendrw/usr')
exec('mount', '-t', 'overlay', 'overlay', '-o', f'lowerdir=/var/lib/pacman,upperdir={varlibpacman_overlay},workdir={varlibpacman_overlay_workdir}', '/.blendrw/var/lib/pacman') exec('mount', '-t', 'overlay', 'overlay', '-o', f'lowerdir=/var/lib/pacman,upperdir={varlibpacman_overlay},workdir={varlibpacman_overlay_workdir}', '/.blendrw/var/lib/pacman')
if install == 'install':
operation = ['-Sy']
if args.noconfirm:
operation.append('--noconfirm')
elif install == 'remove':
operation = '-Rn'
if args.noconfirm:
operation.append('--noconfirm')
if exec('systemd-nspawn', 'pacman', *operation, '--', *args.pkg) != 0:
error('error occurred during installation, abandoning changes')
while exec('umount', '-l', '/.blendrw/usr', stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) != 0:
pass
while exec('umount', '-l', '/.blendrw/var/lib/pacman', stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) != 0:
pass
while exec('umount', '-l', '/.blendrw', stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) != 0:
pass
for old_overlay in os.listdir('/mnt'):
if old_overlay.startswith('.blend-tmp-overlay-'):
exec('rm', '-rf', f'/mnt/{old_overlay}')
elif args.headless:
while exec('umount', '-l', '/.blendrw/usr', stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) != 0:
pass
while exec('umount', '-l', '/.blendrw/var/lib/pacman', stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) != 0:
pass
while exec('umount', '-l', '/.blendrw', stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) != 0:
pass
exec('mv', usr_overlay, '/.blend-overlays/future-usr')
exec('mv', varlibpacman_overlay, '/.blend-overlays/future-varlibpacman')
exec('rm', '-rf', usr_overlay_workdir, varlibpacman_overlay_workdir)
else:
info("you are requested to review the operation's output")
info("press ENTER to proceed with making overlay permanent, or ^C to abort")
try:
input()
except EOFError:
exit()
while exec('umount', '-l', '/.blendrw/usr', stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) != 0:
pass
while exec('umount', '-l', '/.blendrw/var/lib/pacman', stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) != 0:
pass
while exec('umount', '-l', '/.blendrw', stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) != 0:
pass
exec('mv', usr_overlay, '/.blend-overlays/future-usr')
exec('mv', varlibpacman_overlay, '/.blend-overlays/future-varlibpacman')
exec('rm', '-rf', usr_overlay_workdir, varlibpacman_overlay_workdir)
def daemon(): def daemon():
exec('mkinitcpio', '-P') exec('mkinitcpio', '-P')
@ -272,12 +320,15 @@ parser = argparse.ArgumentParser(description=description, usage=argparse.SUPPRES
epilog=epilog, formatter_class=argparse.RawTextHelpFormatter) epilog=epilog, formatter_class=argparse.RawTextHelpFormatter)
command_map = {'help': 'help', command_map = {'help': 'help',
'version': 'version', 'version': 'version',
'install': install_system_package, 'install': handle_system_packages,
'remove': handle_system_packages,
'daemon': daemon} 'daemon': daemon}
parser.add_argument('command', choices=command_map.keys(), parser.add_argument('command', choices=command_map.keys(),
help=argparse.SUPPRESS) help=argparse.SUPPRESS)
parser.add_argument('-y', '--noconfirm', parser.add_argument('-y', '--noconfirm',
action='store_true', help=argparse.SUPPRESS) action='store_true', help=argparse.SUPPRESS)
parser.add_argument('--headless',
action='store_true', help=argparse.SUPPRESS)
parser.add_argument('-v', '--version', action='version', parser.add_argument('-v', '--version', action='version',
version=f'%(prog)s {__version}', help=argparse.SUPPRESS) version=f'%(prog)s {__version}', help=argparse.SUPPRESS)
@ -293,9 +344,14 @@ args = parser.parse_intermixed_args()
command = command_map[args.command] command = command_map[args.command]
try:
if command == 'help': if command == 'help':
parser.print_help() parser.print_help()
elif command == 'version': elif command == 'version':
parser.parse_args(['--version']) parser.parse_args(['--version'])
elif command == handle_system_packages:
command(args.command)
else: else:
command() command()
except:
error('aborting')