* Re: [gentoo-user] Automated "emerge -e world"
@ 2007-09-12 0:52 99% ` Albert Hopkins
0 siblings, 0 replies; 1+ results
From: Albert Hopkins @ 2007-09-12 0:52 UTC (permalink / raw
To: gentoo-user
On Wed, 2007-09-12 at 03:04 +0300, Daniel Iliev wrote:
> Hi, list
>
> I'd like to automate a full re-emerging and to get a record of all
> packages that failed. Something like:
>
> ##
>
> emerge -e world || {
>
> echo "$CATEGORY/$PN" >>failed.txt
>
> while ! emerge --resume --skipfirst
> do
> echo "$CATEGORY/$PN" >> failed.txt
> done
> }
>
> ##
>
>
> Any ideas how to achieve this?
>
>
> --
> Best regards,
> Daniel
Here's a script that I use. I use it to build all my packages at the
end of the month. Works ok for me. YMMV:
---- CUT HERE 8<-----
#!/usr/bin/python
"""
Like my emptytree bash script, but more reliable and written in Python.
"""
import datetime
import os
import sys
import time
import portage
LOGDIR = '/var/log/emptytree'
PKGLIST = LOGDIR + '/packages'
FAILED = LOGDIR + '/failed'
EMERGE_FLAGS = '--oneshot --nodeps'
TCOLS = 80
def get_list_of_packages(args=None):
"""Get list of packages to emerge, in order"""
packages = []
if args is None:
command = "emerge --nospinner --pretend --emptytree world"
else:
command = "emerge --nospinner --pretend " + args
pipe = os.popen(command, 'r')
for line in pipe:
if line.startswith('[ebuild'):
try:
right_bracket = line.index(']')
ebuild_start = right_bracket + 2
space = line.index(' ', ebuild_start)
except ValueError:
continue
ebuild = line[ebuild_start:space]
packages.append(ebuild)
return packages
class PackageList(list):
"""List of packages read/written to a flat file"""
def __init__(self, filename):
list.__init__(self)
self.filename = filename
def write_to_file(self):
"""Write package list file"""
package_file = open(self.filename, 'w')
for package in self:
package_file.write(package + '\n')
package_file.close()
def read_from_file(self):
"""Load packages from file"""
del self[0:-1] # clear
try:
package_file = open(self.filename, 'r')
except OSError:
return
for line in package_file:
package = line.strip()
if package:
self.append(package)
def set_links(current):
"""Create current.out current.err symlinks"""
current_out = LOGDIR + '/current.stdout'
current_err = LOGDIR + '/current.stderr'
if os.path.exists(current_out):
os.remove(current_out)
if os.path.exists(current_err):
os.remove(current_err)
os.symlink('%s.stdout' % current, current_out)
os.symlink('%s.stderr' % current, current_err)
def main(argv):
"""Main program entry point"""
if len(argv) > 1:
args = ' '.join(argv[1:])
else:
args = None
packages = PackageList(PKGLIST)
packages.extend(get_list_of_packages(args))
failed = PackageList(FAILED)
total = len(packages)
packages.write_to_file()
failed.write_to_file()
start_time = time.gmtime()
pkg_num = 0
while len(packages) > 0:
package = packages.pop(0)
pkg_num = pkg_num + 1
print '[%03d/%03d] %s' % (pkg_num, total, package),
sys.stdout.flush()
split = portage.pkgsplit(package)
pname = split[0].split('/')[1] + '-' + split[1] + '-' + split[1]
command = ('emerge %s =%s '
'> %s/%s.stdout 2> %s/%s.stderr'
% (EMERGE_FLAGS, package, LOGDIR, pname, LOGDIR, pname))
#command = 'echo %s' % package
set_links(pname)
status = os.system(command)
plen = len(package)
if status == 0:
print '[SUCCESS]'.rjust(TCOLS - 11 - plen)
else:
# emerge failed
print '[FAILURE]'.rjust(TCOLS - 11 - plen)
failed.append(package)
failed.write_to_file()
packages.write_to_file()
end_time = time.gmtime()
time_diff = datetime.datetime(*end_time[:6]) - \
datetime.datetime(*start_time[:6])
print 'Finished!'
print 'Total: %d packages. %d failed' % (total, len(failed))
print 'Completed in %s' % time_diff
if __name__ == '__main__':
sys.exit(main(sys.argv))
# 2007-07-10 marduk Took out "resume" and "failed" command-line
# arguments, since "resume" can be accomplished by
# "emptytree `cat /var/log/emptytree/packages`" and failed by
# "emptytree `cat /var/log/emptytree/failed`".
# Removed "empty" contructor parameter from PackageList since it
# was only used by "resume" and "failed"
------------------------------
--
raise SystemExit
--
gentoo-user@gentoo.org mailing list
^ permalink raw reply [relevance 99%]
Results 1-1 of 1 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2007-09-12 0:04 [gentoo-user] Automated "emerge -e world" Daniel Iliev
2007-09-12 0:52 99% ` Albert Hopkins
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox