Compare commits
No commits in common. "5bf806eea0ac6cea8c8a62e2b004cabc22322a2f" and "ac44379453c75bd3141f72996211a59d8248b07c" have entirely different histories.
5bf806eea0
...
ac44379453
2 changed files with 31 additions and 80 deletions
97
akshara
Normal file → Executable file
97
akshara
Normal file → Executable file
|
@ -103,8 +103,7 @@ def error(err):
|
||||||
|
|
||||||
|
|
||||||
def interpret_track(blend_release):
|
def interpret_track(blend_release):
|
||||||
result = yaml.safe_load(requests.get(blend_release.get(
|
result = yaml.safe_load(requests.get(blend_release.get('impl') + '/' + blend_release.get('track') + '.yaml', allow_redirects=True).content.decode())
|
||||||
'impl') + '/' + blend_release.get('track') + '.yaml', allow_redirects=True).content.decode())
|
|
||||||
|
|
||||||
if (type(result.get('impl')) == str and
|
if (type(result.get('impl')) == str and
|
||||||
type(result.get('track')) != 'custom'):
|
type(result.get('track')) != 'custom'):
|
||||||
|
@ -138,60 +137,33 @@ def update_system():
|
||||||
blend_release = yaml.load(
|
blend_release = yaml.load(
|
||||||
blend_release_file, Loader=yaml.FullLoader)
|
blend_release_file, Loader=yaml.FullLoader)
|
||||||
|
|
||||||
# TODO: Add check that all packages actually exist
|
|
||||||
|
|
||||||
info('downloading Arch tarball...')
|
info('downloading Arch tarball...')
|
||||||
|
|
||||||
# The mirror to use for downloading the bootstrap image
|
|
||||||
# For example, for the Arch mirror at mirrors.acm.wpi.edu, you'd use https://mirrors.acm.wpi.edu/archlinux
|
|
||||||
arch_repo = blend_release.get("arch-repo")
|
|
||||||
if type(arch_repo) != str:
|
|
||||||
# default arch and bootstrap repo
|
|
||||||
arch_repo = "geo.mirror.pkgbuild.com"
|
|
||||||
|
|
||||||
bootstrap_repo = blend_release.get("bootstrap-repo")
|
|
||||||
if type(bootstrap_repo) != str:
|
|
||||||
bootstrap_repo = arch_repo
|
|
||||||
|
|
||||||
# TODO: default to https if http/https isn't listed
|
|
||||||
# keeping disabled for consistency because i can't find `repo` to add it (and to add a fallback)
|
|
||||||
if not (arch_repo.startswith("https://") or arch_repo.startswith("http://")):
|
|
||||||
arch_repo = "https://" + arch_repo
|
|
||||||
if not (bootstrap_repo.startswith("https://") or bootstrap_repo.startswith("http://")):
|
|
||||||
bootstrap_repo = "https://" + bootstrap_repo
|
|
||||||
|
|
||||||
# same (fallback and https) for repo
|
|
||||||
repo = blend_release.get("repo")
|
|
||||||
if type(repo) != str:
|
|
||||||
repo = "https://pkg-repo.blendos.co"
|
|
||||||
elif not (repo.startswith("https://") or repo.startswith("http://")):
|
|
||||||
repo = "https://" + repo
|
|
||||||
|
|
||||||
if not os.path.isfile('/.update.tar.zst'):
|
if not os.path.isfile('/.update.tar.zst'):
|
||||||
if exec('wget', '-q', '--show-progress', f'{bootstrap_repo}/iso/latest/archlinux-bootstrap-x86_64.tar.zst', '-O', '/.update.tar.zst') != 0:
|
if exec('wget', '-q', '--show-progress', 'https://geo.mirror.pkgbuild.com/iso/latest/archlinux-bootstrap-x86_64.tar.zst', '-O', '/.update.tar.zst') != 0:
|
||||||
warn('failed download')
|
warn('failed download')
|
||||||
print()
|
print()
|
||||||
info('trying download again...')
|
info('trying download again...')
|
||||||
print()
|
print()
|
||||||
exec('rm', '-f', '/.update.tar.zst')
|
exec('rm', '-f', '/.update.tar.zst')
|
||||||
if exec('wget', '-q', '--show-progress', f'{bootstrap_repo}/iso/latest/archlinux-bootstrap-x86_64.tar.zst', '-O', '/.update.tar.zst') != 0:
|
if exec('wget', '-q', '--show-progress', 'https://geo.mirror.pkgbuild.com/iso/latest/archlinux-bootstrap-x86_64.tar.zst', '-O', '/.update.tar.zst') != 0:
|
||||||
error('failed download')
|
error('failed download')
|
||||||
print()
|
print()
|
||||||
error('update failed')
|
error('update failed')
|
||||||
sys.exit(50)
|
sys.exit(50)
|
||||||
|
|
||||||
if exec('bash', '-c', f'sha256sum -c --ignore-missing <(wget -qO- {bootstrap_repo}/iso/latest/sha256sums.txt | sed "s/archlinux-bootstrap-x86_64\\.tar\\.zst/.update.tar.zst/g") 2>/dev/null') != 0:
|
if exec('bash', '-c', 'sha256sum -c --ignore-missing <(wget -qO- https://geo.mirror.pkgbuild.com/iso/latest/sha256sums.txt | sed "s/archlinux-bootstrap-x86_64\\.tar\\.zst/.update.tar.zst/g") 2>/dev/null') != 0:
|
||||||
error('failed checksum verification')
|
error('failed checksum verification')
|
||||||
print()
|
print()
|
||||||
info('trying download again...')
|
info('trying download again...')
|
||||||
exec('rm', '-f', '/.update.tar.zst')
|
exec('rm', '-f', '/.update.tar.zst')
|
||||||
if exec('wget', '-q', '--show-progress', f'{bootstrap_repo}/iso/latest/archlinux-bootstrap-x86_64.tar.zst', '-O', '/.update.tar.zst') != 0:
|
if exec('wget', '-q', '--show-progress', 'https://geo.mirror.pkgbuild.com/iso/latest/archlinux-bootstrap-x86_64.tar.zst', '-O', '/.update.tar.zst') != 0:
|
||||||
error('failed download')
|
error('failed download')
|
||||||
print()
|
print()
|
||||||
error('update failed')
|
error('update failed')
|
||||||
sys.exit(50)
|
sys.exit(50)
|
||||||
return
|
return
|
||||||
if exec('bash', '-c', f'sha256sum -c --ignore-missing <(wget -qO- {bootstrap_repo}/iso/latest/sha256sums.txt | sed "s/archlinux-bootstrap-x86_64\\.tar\\.zst/.update.tar.zst/g") 2>/dev/null') != 0:
|
if exec('bash', '-c', 'sha256sum -c --ignore-missing <(wget -qO- https://geo.mirror.pkgbuild.com/iso/latest/sha256sums.txt | sed "s/archlinux-bootstrap-x86_64\\.tar\\.zst/.update.tar.zst/g") 2>/dev/null') != 0:
|
||||||
error('failed checksum verification')
|
error('failed checksum verification')
|
||||||
print()
|
print()
|
||||||
error('update failed')
|
error('update failed')
|
||||||
|
@ -258,13 +230,14 @@ def update_system():
|
||||||
pacman_mirrorlist_conf.write('nameserver 1.1.1.1\n')
|
pacman_mirrorlist_conf.write('nameserver 1.1.1.1\n')
|
||||||
|
|
||||||
with open('/.new_rootfs/etc/pacman.d/mirrorlist', 'w') as pacman_mirrorlist_conf:
|
with open('/.new_rootfs/etc/pacman.d/mirrorlist', 'w') as pacman_mirrorlist_conf:
|
||||||
pacman_mirrorlist_conf.write(
|
if type(blend_release.get('arch-repo')) == str:
|
||||||
f'Server = {arch_repo}/$repo/os/$arch\n')
|
pacman_mirrorlist_conf.write(f'Server = {blend_release.get("arch-repo")}/$repo/os/$arch\n')
|
||||||
|
else:
|
||||||
|
pacman_mirrorlist_conf.write('Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch\n')
|
||||||
|
|
||||||
exec_chroot('mkdir', '-p', '/var/cache/pacman/pkg')
|
exec_chroot('mkdir', '-p', '/var/cache/pacman/pkg')
|
||||||
exec_chroot('rm', '-rf', '/var/cache/pacman/pkg')
|
exec_chroot('rm', '-rf', '/var/cache/pacman/pkg')
|
||||||
exec('cp', '-r', '/var/cache/pacman/pkg',
|
exec('cp', '-r', '/var/cache/pacman/pkg', '/.new_rootfs/var/cache/pacman')
|
||||||
'/.new_rootfs/var/cache/pacman')
|
|
||||||
|
|
||||||
# update packages
|
# update packages
|
||||||
exec_chroot('pacman-key', '--init')
|
exec_chroot('pacman-key', '--init')
|
||||||
|
@ -280,26 +253,20 @@ def update_system():
|
||||||
if return_val == 0:
|
if return_val == 0:
|
||||||
break
|
break
|
||||||
|
|
||||||
exec_chroot('reflector', '--latest', '5', '--protocol', 'https',
|
exec_chroot('reflector', '--latest', '5', '--protocol', 'https', '--sort', 'rate', '--save', '/etc/pacman.d/mirrorlist')
|
||||||
'--sort', 'rate', '--save', '/etc/pacman.d/mirrorlist')
|
|
||||||
|
|
||||||
# exec_chroot('sed', 's/#//g', '-i', '/etc/pacman.d/mirrorlist')
|
#exec_chroot('sed', 's/#//g', '-i', '/etc/pacman.d/mirrorlist')
|
||||||
# exec_chroot('bash', '-c', 'grep "^Server =" /etc/pacman.d/mirrorlist > /etc/pacman.d/mirrorlist.tmp; mv /etc/pacman.d/mirrorlist.tmp /etc/pacman.d/mirrorlist')
|
#exec_chroot('bash', '-c', 'grep "^Server =" /etc/pacman.d/mirrorlist > /etc/pacman.d/mirrorlist.tmp; mv /etc/pacman.d/mirrorlist.tmp /etc/pacman.d/mirrorlist')
|
||||||
|
|
||||||
with open('/.new_rootfs/etc/pacman.conf', 'r') as original:
|
with open('/.new_rootfs/etc/pacman.conf', 'r') as original: data = original.read()
|
||||||
data = original.read()
|
with open('/.new_rootfs/etc/pacman.conf', 'w') as modified: modified.write(data.replace("[options]", "[options]\nParallelDownloads = 32\n"))
|
||||||
with open('/.new_rootfs/etc/pacman.conf', 'w') as modified:
|
with open('/.new_rootfs/etc/pacman.conf', 'w') as modified: modified.write(data.replace("#[multilib]\n#Include = /etc/pacman.d/mirrorlist", "[multilib]\nInclude = /etc/pacman.d/mirrorlist"))
|
||||||
modified.write(data.replace(
|
|
||||||
"[options]", "[options]\nParallelDownloads = 32\n"))
|
|
||||||
with open('/.new_rootfs/etc/pacman.conf', 'w') as modified:
|
|
||||||
modified.write(data.replace(
|
|
||||||
"#[multilib]\n#Include = /etc/pacman.d/mirrorlist", "[multilib]\nInclude = /etc/pacman.d/mirrorlist"))
|
|
||||||
|
|
||||||
with open('/.new_rootfs/etc/pacman.conf', 'a') as pacman_conf:
|
with open('/.new_rootfs/etc/pacman.conf', 'a') as pacman_conf:
|
||||||
pacman_conf.write(f'''
|
pacman_conf.write(f'''
|
||||||
[breakfast]
|
[breakfast]
|
||||||
SigLevel = Never
|
SigLevel = Never
|
||||||
Server = {repo}
|
Server = {blend_release['repo']}
|
||||||
''')
|
''')
|
||||||
|
|
||||||
if type(blend_release.get('package-repos')) == list:
|
if type(blend_release.get('package-repos')) == list:
|
||||||
|
@ -337,10 +304,8 @@ Server = {package_repo["repo-url"]}
|
||||||
counter = 0
|
counter = 0
|
||||||
if aur_packages != []:
|
if aur_packages != []:
|
||||||
while True:
|
while True:
|
||||||
exec_chroot('useradd', '-m', '-G', 'wheel',
|
exec_chroot('useradd', '-m', '-G', 'wheel', '-s', '/bin/bash', 'aur')
|
||||||
'-s', '/bin/bash', 'aur')
|
exec_chroot('bash', '-c', 'echo "aur ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/aur')
|
||||||
exec_chroot(
|
|
||||||
'bash', '-c', 'echo "aur ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/aur')
|
|
||||||
return_val = exec_chroot(
|
return_val = exec_chroot(
|
||||||
'runuser', '-u', 'aur', '--', 'paru', '-Sy', '--noconfirm', '--needed',
|
'runuser', '-u', 'aur', '--', 'paru', '-Sy', '--noconfirm', '--needed',
|
||||||
'--noprogressbar', '--skipreview', '--removemake', '--cleanafter', '--ask=4',
|
'--noprogressbar', '--skipreview', '--removemake', '--cleanafter', '--ask=4',
|
||||||
|
@ -412,8 +377,7 @@ Server = {package_repo["repo-url"]}
|
||||||
|
|
||||||
exec('cp', '-ax', '/var/lib', '/.new.var.lib')
|
exec('cp', '-ax', '/var/lib', '/.new.var.lib')
|
||||||
|
|
||||||
var_lib_diff = filecmp.dircmp(
|
var_lib_diff = filecmp.dircmp('/.new_rootfs/var/lib/', '/.new.var.lib/')
|
||||||
'/.new_rootfs/var/lib/', '/.new.var.lib/')
|
|
||||||
|
|
||||||
dir_name = '/.new.var.lib/'
|
dir_name = '/.new.var.lib/'
|
||||||
for name in var_lib_diff.left_only:
|
for name in var_lib_diff.left_only:
|
||||||
|
@ -494,8 +458,10 @@ command_map = {'help': 'help',
|
||||||
'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('--keep-files-on-error',
|
parser.add_argument('pkg', action='store', type=str,
|
||||||
action='store_true', help="keep working files on error")
|
nargs='*', 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)
|
||||||
|
|
||||||
|
@ -518,20 +484,11 @@ try:
|
||||||
parser.parse_args(['--version'])
|
parser.parse_args(['--version'])
|
||||||
elif command == update_system:
|
elif command == update_system:
|
||||||
exec('touch', '/var/lib/.akshara-system-lock')
|
exec('touch', '/var/lib/.akshara-system-lock')
|
||||||
system_lock = fasteners.InterProcessLock(
|
system_lock = fasteners.InterProcessLock('/var/lib/.akshara-system-lock')
|
||||||
'/var/lib/.akshara-system-lock')
|
|
||||||
info('attempting to acquire system lock')
|
info('attempting to acquire system lock')
|
||||||
with system_lock:
|
with system_lock:
|
||||||
command()
|
command()
|
||||||
else:
|
else:
|
||||||
command()
|
command()
|
||||||
except:
|
except KeyboardInterrupt:
|
||||||
error('aborting')
|
error('aborting')
|
||||||
# remove update and akshara stuff if the program errors (either exited by the user or an error) and is updating
|
|
||||||
if command == update_system and not args.keep_files_on_error:
|
|
||||||
exec('umount', '-rf', '/.new_rootfs/')
|
|
||||||
exec('rmdir', '/.new_rootfs/')
|
|
||||||
exec('rm', '-rf', '/.update_rootfs')
|
|
||||||
exec('rm', '-f', '/.update')
|
|
||||||
else:
|
|
||||||
print("--keep-files-on-error specified, not deleting files (/.new_rootfs/, /.update_rootfs/, /.update)")
|
|
||||||
|
|
|
@ -23,12 +23,6 @@ run_latehook() {
|
||||||
mv /new_root/.new.etc /new_root/etc
|
mv /new_root/.new.etc /new_root/etc
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Same for /opt
|
|
||||||
if [[ -d /new_root/.update_rootfs/opt ]]; then
|
|
||||||
mv /new_root/opt /new_root/.old.opt
|
|
||||||
mv /new_root/.update_rootfs/opt /new_root/opt
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Same for /var.
|
# Same for /var.
|
||||||
if [[ -d /new_root/.new.var.lib ]]; then
|
if [[ -d /new_root/.new.var.lib ]]; then
|
||||||
mv /new_root/var/lib /new_root/.old.var.lib
|
mv /new_root/var/lib /new_root/.old.var.lib
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue