diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2013-09-13 15:47:54 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2013-09-13 15:47:54 +0400 |
commit | d185d3e9cf50711e2f39b9b7acd1eb82ce443f02 (patch) | |
tree | 41f6df75cdfeb319935c897eab804733a010f1c1 /install | |
parent | c42938aff0ddf226bf5c2e45030e247fadb83e89 (diff) | |
download | live-d185d3e9cf50711e2f39b9b7acd1eb82ce443f02.tar.gz |
Run apt-get install
Diffstat (limited to 'install')
-rwxr-xr-x | install | 42 |
1 files changed, 41 insertions, 1 deletions
@@ -805,14 +805,54 @@ def apt_get_update(log): return os.WEXITSTATUS(status) +def apt_get_install(log, packages): + progress = ProgressBar(screen, title='Installing packages', 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 install', rootdir, + '/usr/bin/apt-get', '-y', '-o', 'APT::Status-Fd=' + str(write), + 'install', *packages) + 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(':') + percent = float(percent) + except: + os.write(log, 'Installer failed to parse line "{}"'.format(line)) + continue + if status == 'dlstatus': + percent = percent / 2.0 + elif status == 'pmstatus': + percent = 50.0 + percent / 2.0 + else: + continue + progress.progress = math.ceil(percent) + progress.text = text - + status = os.wait()[1] + # apt-get sometimes reports less than 100% at the end + progress.progress = 100 + return os.WEXITSTATUS(status) def install_profile(): logfile = rootdir + '/root/apt-get.log' log = os.open(logfile, os.O_WRONLY + os.O_CREAT) code = apt_get_update(log) + code = apt_get_install(log, ['abiword', 'sylpheed']) os.close(log) |