diff options
-rwxr-xr-x | install | 43 |
1 files changed, 42 insertions, 1 deletions
@@ -771,8 +771,49 @@ def install_minimal(): umount_in_bootenv() # debootstrap mounts required FS for us call(['zfs', 'rollback', '-r', bootenv + '@empty']) + +def apt_get_update(log): + progress = ProgressBar(screen, title='Updating APT cache', text='Please wait ...') + read, write = os.pipe() + pid = os.fork() + if pid == 0: + os.close(read) + os.dup2(log, 1) + os.dup2(log, 2) + try: + os.execl('/usr/sbin/chroot', 'chroot apt-get update', rootdir, + '/usr/bin/apt-get', '-o', 'APT::Status-Fd=' + str(write), 'update') + except EnvironmentError as e: + os.write(log, str(e)) + sys.exit(e.errno) + else: # Parent + os.close(write) + pr = os.fdopen(read, 'r', 1) + while True: + line = pr.readline() + if not line: + break + try: + (status, f, percent, text) = line.split(':') + except: + os.write(log, 'Installer failed to parse line "{}"'.format(line)) + continue + progress.progress = float(percent) + progress.text = text + + status = os.wait()[1] + return os.WEXITSTATUS(status) + + + + + + def install_profile(): - pass + logfile = rootdir + '/root/apt-get.log' + log = os.open(logfile, os.O_WRONLY + os.O_CREAT) + code = apt_get_update(log) + os.close(log) def umount_in_bootenv(): |