From d185d3e9cf50711e2f39b9b7acd1eb82ce443f02 Mon Sep 17 00:00:00 2001 From: Igor Pashev Date: Fri, 13 Sep 2013 15:47:54 +0400 Subject: Run apt-get install --- install | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'install') diff --git a/install b/install index caba4e1..f02362b 100755 --- a/install +++ b/install @@ -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) -- cgit v1.2.3