def get_preseed( xml ): pack_dir = elbepack.__path__[0] def_xml = etree( os.path.join( pack_dir, "default-preseed.xml" ) ) preseed = {} for c in def_xml.node("/preseed"): k = (c.et.attrib["owner"], c.et.attrib["key"]) v = (c.et.attrib["type"], c.et.attrib["value"]) preseed[k] = v if not xml.has("./project/preseed"): return preseed for c in xml.node("/project/preseed"): k = (c.et.attrib["owner"], c.et.attrib["key"]) v = (c.et.attrib["type"], c.et.attrib["value"]) preseed[k] = v return preseed
def run_command( argv ): oparser = OptionParser(usage="usage: %prog adjustpkgs [options] <xmlfile>") oparser.add_option( "-o", "--output", dest="output", help="name of logfile" ) oparser.add_option( "-n", "--name", dest="name", help="name of the project (included in the report)" ) (opt,args) = oparser.parse_args(argv) if len(args) != 1: print "Wrong number of arguments" oparser.print_help() sys.exit(20) if not opt.output: return 0 outf = asccidoclog(opt.output) if opt.name: outf.h1( "ELBE Report for Project "+opt.name ) else: outf.h1( "ELBE Report" ) xml = etree( args[0] ) pkgs = xml.node("/target/pkg-list") cache = apt.Cache() cache.update() cache.open(None) errors = 0 pkglist = ["parted", "mtd-utils", "dpkg-dev", "dosfstools", "apt-rdepends", "python-apt", "rsync", "genisoimage", "reprepro", "python-parted", "grub-pc"] if xml.has("./project/buildimage/pkg-list"): build_pkglist = [p.et.text for p in xml.node("project/buildimage/pkg-list")] else: build_pkglist = [] with cache.actiongroup(): want_pkgs = [p.et.text for p in pkgs] + pkglist + build_pkglist for p in cache: if not p.is_installed: continue if p.essential or p.is_auto_installed or (p.name in want_pkgs) or p.installed.priority == "important" or p.installed.priority == "required": continue p.mark_delete( auto_fix=False, purge=True ) for name in want_pkgs: if not name in cache: outf.printo( "- package %s does not exist" % name ) errors += 1 continue cp = cache[name] cp.mark_install() for p in cache: if not p.is_installed: continue if p.is_auto_removable: p.mark_delete( purge=True ) cache.commit(apt.progress.base.AcquireProgress(), apt.progress.base.InstallProgress())
def run_command( argv ): oparser = OptionParser(usage="usage: %prog dump [options] <xmlfile>") oparser.add_option( "-f", "--finetuning", dest="finetuning", help="filename of finetuning script" ) oparser.add_option( "-t", "--target", dest="target", help="directoryname of target" ) oparser.add_option( "-a", "--archive", dest="archive", help="filename of archive" ) oparser.add_option( "-o", "--output", dest="output", help="name of logfile" ) oparser.add_option( "-n", "--name", dest="name", help="name of the project (included in the report)" ) oparser.add_option( "-v", "--validation", dest="validation", help="name of the validation logfile" ) oparser.add_option( "-k", "--kinitrd", dest="kinitrd", help="name of the kinitrd package" ) (opt,args) = oparser.parse_args(argv) if len(args) != 1: print "Wrong number of arguments" oparser.print_help() sys.exit(20) xml = etree( args[0] ) if opt.validation: pkgs = xml.node("/target/pkg-list") if xml.has("fullpkgs"): check_full_pkgs(pkgs, xml.node("/fullpkgs"), opt.validation, opt.kinitrd) else: check_full_pkgs(pkgs, None, opt.validation, opt.kinitrd) paktree = xml.ensure_child( 'fullpkgs' ) paktree.clear() curr_pkgs = get_pkgs( opt.kinitrd ) for p in curr_pkgs: append_pkg_elem( paktree, p[0], p[1], p[2], p[3] ) sources_list = xml.ensure_child( 'sources_list' ) slist = read_file("/etc/apt/sources.list") sources_list.set_text( slist ) try: preferences = xml.ensure_child( 'apt_prefs' ) prefs = read_file("/etc/apt/preferences") preferences.set_text(prefs) except: print "no /etc/apt/preferences on system" prefs = "" buildv = xml.ensure_child( 'elbe_version' ) buildv.set_text(elbe_version) xml.write( args[0] ) if not opt.output: return 0 if not opt.target: return 0 outf = asccidoclog(opt.output) if opt.name: outf.h1( "ELBE Report for Project "+opt.name ) else: outf.h1( "ELBE Report" ) outf.printo( "report timestamp: "+datetime.datetime.now().strftime("%Y%m%d-%H%M%S") ) outf.h2( "Apt Sources dump" ) outf.verbatim_start() outf.print_raw(slist) outf.verbatim_end() outf.h2( "Apt Preferences dump" ) outf.verbatim_start() outf.print_raw(prefs) outf.verbatim_end() outf.h2( "Installed Packages List" ) outf.table() cache = apt.Cache(memonly=True) for p in cache: if p.is_installed: orig = p.installed.origins[0].site outf.printo( "|%s|%s|%s" % (p.name, p.installed.version, orig) ) outf.table() # archive extraction is done before and after finetuning the first # extraction is needed that the files can be used (copied/moved to the # buildenv in finetuning # the second extraction is done to ensure that files from the archive # can't be modified/removed in finetuning outf.h2( "archive extract before finetuning" ) if opt.archive: outf.verbatim_start() outf.print_raw( do_command( 'tar xvfj "%s" -C "%s"' % (opt.archive, opt.target) ) ) outf.verbatim_end() outf.h2( "finetuning log" ) outf.verbatim_start() index = get_fileindex() mt_index = mtime_snap( opt.target ) if opt.finetuning: outf.print_raw( do_command( opt.finetuning ) ) mt_index_post_fine = mtime_snap( opt.target ) else: mt_index_post_fine = mt_index outf.verbatim_end() outf.h2( "archive extract after finetuning" ) outf.verbatim_start() if opt.archive: outf.print_raw( do_command( 'tar xvfj "%s" -C "%s"' % (opt.archive, opt.target) ) ) mt_index_post_arch = mtime_snap( opt.target ) else: mt_index_post_arch = mt_index_post_fine outf.verbatim_end() outf.h2( "fileslist" ) outf.table() tgt_pkg_list = Set() for fpath, realpath in walk_files(opt.target): if index.has_key(fpath): pkg = index[fpath] tgt_pkg_list.add(pkg) else: pkg = "postinst generated" if mt_index_post_fine.has_key(fpath) and mt_index.has_key(fpath): if mt_index_post_fine[fpath] > mt_index[fpath]: pkg = "modified finetuning" if mt_index_post_fine.has_key(fpath): if mt_index_post_arch[fpath] > mt_index_post_fine[fpath]: pkg = "from archive" elif not mt_index.has_key(fpath): pkg = "added in finetuning" else: pkg = "added in archive" outf.printo( "|+%s+|%s" % (fpath,pkg) ) outf.table() outf.h2( "Deleted Files" ) outf.table() for fpath in mt_index.keys(): if not mt_index_post_arch.has_key(fpath): if index.has_key(fpath): pkg = index[fpath] else: pkg = "postinst generated" outf.printo( "|+%s+|%s" % (fpath,pkg) ) outf.table() outf.h2( "Target Package List" ) outf.table() cache = apt.Cache(memonly=True) if xml.has("target/pkgversionlist"): os.remove('/target/etc/elbe_pkglist') f = open('/target/etc/elbe_pkglist', 'w') for pkg in tgt_pkg_list: p = cache[pkg] outf.printo( "|%s|%s|%s|%s" % (p.name, p.installed.version, p.is_auto_installed, p.installed.md5) ) if xml.has("target/pkgversionlist"): f.write ("%s %s %s\n" % (p.name, p.installed.version, p.installed.md5)) outf.table() if xml.has("target/pkgversionlist"): f.close ()
def run_command( argv ): oparser = OptionParser(usage="usage: %prog buildchroot [options] <xmlfile>") oparser.add_option( "-t", "--target", dest="target", help="directoryname of target" ) oparser.add_option( "-o", "--output", dest="output", help="name of logfile" ) oparser.add_option( "-n", "--name", dest="name", help="name of the project (included in the report)" ) oparser.add_option( "--skip-validation", action="store_true", dest="skip_validation", default=False, help="Skip xml schema validation" ) oparser.add_option( "--skip-debootstrap", action="store_true", dest="skip_debootstrap", default=False, help="Skip debootstrap" ) oparser.add_option( "--skip-cdrom", action="store_true", dest="skip_cdrom", default=False, help="Skip cdrom iso generation" ) oparser.add_option( "--build-sources", action="store_true", dest="buildsources", default=False, help="Build Source CD" ) oparser.add_option( "--debug", action="store_true", dest="debug", default=False, help="Enable various features to debug the build" ) oparser.add_option( "--buildtype", dest="buildtype", help="Override the buildtype" ) oparser.add_option( "--proxy", dest="proxy", help="Override the http proxy" ) (opt,args) = oparser.parse_args(argv) if len(args) != 1: print "wrong number of arguments" oparser.print_help() sys.exit(20) if not opt.skip_validation: if not validate_xml( args[0] ): print "xml validation failed. Bailing out" sys.exit(20) xml = etree( args[0] ) prj = xml.node("/project") tgt = xml.node("/target") if not opt.output: return 0 if not opt.target: return 0 if opt.buildtype: buildtype = opt.buildtype elif xml.has( "project/buildtype" ): buildtype = xml.text( "/project/buildtype" ) else: buildtype = "nodefaults" defs = ElbeDefaults( buildtype ) chroot = os.path.join(opt.target, "chroot") os.system( 'mkdir -p "%s"' % chroot ) outf = asccidoclog(opt.output) if opt.name: outf.h1( "ELBE Report for Project "+opt.name ) else: outf.h1( "ELBE Report" ) outf.printo( "report timestamp: "+datetime.datetime.now().strftime("%Y%m%d-%H%M%S") ) suite = prj.text("suite") target_arch = prj.text("buildimage/arch", default=defs, key="arch") slist = "" mirror = "Error" if prj.has("mirror/primary_host"): mirror = "%s://%s/%s" % ( prj.text("mirror/primary_proto"), prj.text("mirror/primary_host"), prj.text("mirror/primary_path") ) slist += "deb %s %s main\n" % (mirror, suite) slist += "deb-src %s %s main\n" % (mirror, suite) if prj.has("mirror/cdrom"): cdrompath = os.path.join( opt.target, "cdrom" ) mirror = "file://%s/debian" % cdrompath os.system( 'mkdir -p "%s"' % cdrompath ) os.system( 'mount -o loop "%s" "%s"' % (prj.text("mirror/cdrom"), cdrompath ) ) slist += "deb copy:///mnt %s main\n" % (suite) #slist += "deb-src file:///mnt %s main\n" % (suite) if opt.proxy: os.environ["http_proxy"] = opt.proxy elif prj.has("mirror/primary_proxy"): os.environ["http_proxy"] = prj.text("mirror/primary_proxy") os.environ["LANG"] = "C" os.environ["LANGUAGE"] = "C" os.environ["LC_ALL"] = "C" os.environ["DEBIAN_FRONTEND"]="noninteractive" os.environ["DEBONF_NONINTERACTIVE_SEEN"]="true" try: if prj.node("mirror/url-list"): for n in prj.node("mirror/url-list"): slist += "deb %s\n" % n.text("binary").strip() serial_con, serial_baud = tgt.text( "console" ).split(',') if not opt.skip_debootstrap: debootstrap( outf, chroot, mirror, suite, target_arch, defs ) seed_files( outf, chroot, slist, xml, args[0], opt, defs ) finally: if prj.has("mirror/cdrom"): os.system( 'umount "%s"' % cdrompath ) mount_stuff( outf, chroot ) if prj.has("mirror/cdrom"): os.system( 'mount -o loop "%s" "%s"' % (prj.text("mirror/cdrom"), os.path.join(chroot, "mnt")) ) pkglist = ["parted", "mtd-utils", "dpkg-dev", "dosfstools", "apt-rdepends", "python-apt", "rsync", "genisoimage", "reprepro", "python-parted"] try: do_chroot( outf, chroot, "apt-get update" ) do_chroot( outf, chroot, """/bin/sh -c 'debconf-set-selections < /opt/elbe/custom-preseed.cfg'""" ) if not opt.skip_debootstrap: do_chroot( outf, chroot, "apt-get install -y --force-yes " + string.join( pkglist ) ) do_chroot( outf, chroot, "python /opt/elbe/adjustpkgs.py -o /opt/elbe/bla.log /opt/elbe/source.xml" ) do_chroot( outf, chroot, """/bin/sh -c 'echo "%s\\n%s\\n" | passwd'""" % (tgt.text("passwd"), tgt.text("passwd")) ) do_chroot( outf, chroot, """/bin/sh -c 'echo "127.0.0.1 %s %s.%s" >> /etc/hosts'""" % (tgt.text("hostname"), tgt.text("hostname"), tgt.text("domain")) ) do_chroot( outf, chroot, """/bin/sh -c 'echo "%s" > /etc/hostname'""" % tgt.text("hostname") ) do_chroot( outf, chroot, """/bin/sh -c 'echo "%s.%s" > /etc/mailname'""" % (tgt.text("hostname"), tgt.text("domain")) ) do_chroot( outf, chroot, """/bin/sh -c 'echo "T0:23:respawn:/sbin/getty -L %s %s vt100" >> /etc/inittab'""" % (serial_con, serial_baud) ) do_chroot( outf, chroot, "rm /usr/sbin/policy-rc.d" ) do_chroot( outf, chroot, "/opt/elbe/create-target-rfs.sh" ) if not opt.skip_cdrom: do_chroot( outf, chroot, "/opt/elbe/mkcdrom.sh" ) finally: if prj.has("mirror/cdrom"): os.system( 'umount "%s"' % os.path.join(chroot, "mnt") ) umount_stuff( outf, chroot ) extract = open( os.path.join(chroot, "opt/elbe/files-to-extract"), "r" ) for fname in extract.readlines(): outf.do_command( 'cp "%s" "%s"' % (chroot+fname.strip(), opt.target) ) extract.close()
def run_command( argv ): oparser = OptionParser( usage="usage: %prog hdimg <xmlfile>") oparser.add_option( "--directory", dest="dir", help="mount the loop file here", metavar="FILE" ) (opt,args) = oparser.parse_args(argv) if len(args) != 1: print "Wrong number of arguments" oparser.print_help() sys.exit(20) if not opt.dir: print "No mount directory specified!" oparser.print_help() sys.exit(20) try: xml = etree( args[0] ) except: print "Error reading xml file!" sys.exit(20) tgt = xml.node("target") if not tgt.has("images"): print "no images defined" sys.exit(20) if not tgt.has("fstab"): print "no fstab defined" sys.exit(20) outf = asccidoclog() outf.h2( "Formatting Disks" ) # Build a dictonary of mount points fslabel = {} for fs in tgt.node("fstab"): if fs.tag != "bylabel": continue fslabel[fs.text("label")] = fstabentry(fs) # Build a sorted list of mountpoints fslist = fslabel.values() fslist.sort( key = lambda x: x.mountdepth() ) # now move all mountpoints into own directories # begin from deepest mountpoints outf.do_command( 'mkdir -p /opt/elbe/filesystems' ) for l in reversed(fslist): outf.do_command( 'mkdir -p "%s"' % os.path.join( '/opt/elbe/filesystems', l.label ) ) outf.do_command( 'mkdir -p "%s"' % '/target' + l.mountpoint ) if len(os.listdir( '/target' + l.mountpoint )) > 0: outf.do_command( 'mv "%s"/* "%s"' % ( '/target' + l.mountpoint, os.path.join( '/opt/elbe/filesystems', l.label ) ) ) try: # Now iterate over all images and create filesystems and partitions for i in tgt.node("images"): if i.tag == "msdoshd": do_image_hd( outf, i, fslabel, opt ) if i.tag == "gpthd": do_image_hd( outf, i, fslabel, opt ) if i.tag == "mtd": mkfs_mtd( outf, i, fslabel ) finally: # Put back the filesystems into /target # most shallow fs first... for i in fslist: if len(os.listdir(os.path.join( '/opt/elbe/filesystems', i.label ))) > 0: outf.do_command( 'mv "%s"/* "%s"' % ( os.path.join( '/opt/elbe/filesystems', i.label ), '/target' + i.mountpoint ) ) # Files are now moved back. ubinize needs files in place, so we run it now. for i in tgt.node("images"): if i.tag == "mtd": build_image_mtd( outf, i, fslabel )
def run_command(argv): oparser = OptionParser(usage="usage: %prog dump [options] <xmlfile>") oparser.add_option("-f", "--finetuning", dest="finetuning", help="filename of finetuning script") oparser.add_option("-t", "--target", dest="target", help="directoryname of target") oparser.add_option("-a", "--archive", dest="archive", help="filename of archive") oparser.add_option("-o", "--output", dest="output", help="name of logfile") oparser.add_option("-n", "--name", dest="name", help="name of the project (included in the report)") oparser.add_option("-v", "--validation", dest="validation", help="name of the validation logfile") oparser.add_option("-k", "--kinitrd", dest="kinitrd", help="name of the kinitrd package") (opt, args) = oparser.parse_args(argv) if len(args) != 1: print "Wrong number of arguments" oparser.print_help() sys.exit(20) xml = etree(args[0]) if opt.validation: pkgs = xml.node("/target/pkg-list") if xml.has("fullpkgs"): check_full_pkgs(pkgs, xml.node("/fullpkgs"), opt.validation, opt.kinitrd) else: check_full_pkgs(pkgs, None, opt.validation, opt.kinitrd) paktree = xml.ensure_child('fullpkgs') paktree.clear() curr_pkgs = get_pkgs(opt.kinitrd) for p in curr_pkgs: append_pkg_elem(paktree, p[0], p[1], p[2], p[3]) sources_list = xml.ensure_child('sources_list') slist = read_file("/etc/apt/sources.list") sources_list.set_text(slist) try: preferences = xml.ensure_child('apt_prefs') prefs = read_file("/etc/apt/preferences") preferences.set_text(prefs) except: print "no /etc/apt/preferences on system" prefs = "" buildv = xml.ensure_child('elbe_version') buildv.set_text(elbe_version) xml.write(args[0]) if not opt.output: return 0 if not opt.target: return 0 outf = asccidoclog(opt.output) if opt.name: outf.h1("ELBE Report for Project " + opt.name) else: outf.h1("ELBE Report") outf.printo("report timestamp: " + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")) outf.h2("Apt Sources dump") outf.verbatim_start() outf.print_raw(slist) outf.verbatim_end() outf.h2("Apt Preferences dump") outf.verbatim_start() outf.print_raw(prefs) outf.verbatim_end() outf.h2("Installed Packages List") outf.table() cache = apt.Cache(memonly=True) for p in cache: if p.is_installed: orig = p.installed.origins[0].site outf.printo("|%s|%s|%s" % (p.name, p.installed.version, orig)) outf.table() # archive extraction is done before and after finetuning the first # extraction is needed that the files can be used (copied/moved to the # buildenv in finetuning # the second extraction is done to ensure that files from the archive # can't be modified/removed in finetuning outf.h2("archive extract before finetuning") if opt.archive: outf.verbatim_start() outf.print_raw( do_command('tar xvfj "%s" -C "%s"' % (opt.archive, opt.target))) outf.verbatim_end() outf.h2("finetuning log") outf.verbatim_start() index = get_fileindex() mt_index = mtime_snap(opt.target) if opt.finetuning: outf.print_raw(do_command(opt.finetuning)) mt_index_post_fine = mtime_snap(opt.target) else: mt_index_post_fine = mt_index outf.verbatim_end() outf.h2("archive extract after finetuning") outf.verbatim_start() if opt.archive: outf.print_raw( do_command('tar xvfj "%s" -C "%s"' % (opt.archive, opt.target))) mt_index_post_arch = mtime_snap(opt.target) else: mt_index_post_arch = mt_index_post_fine outf.verbatim_end() outf.h2("fileslist") outf.table() tgt_pkg_list = Set() for fpath, realpath in walk_files(opt.target): if index.has_key(fpath): pkg = index[fpath] tgt_pkg_list.add(pkg) else: pkg = "postinst generated" if mt_index_post_fine.has_key(fpath) and mt_index.has_key(fpath): if mt_index_post_fine[fpath] > mt_index[fpath]: pkg = "modified finetuning" if mt_index_post_fine.has_key(fpath): if mt_index_post_arch[fpath] > mt_index_post_fine[fpath]: pkg = "from archive" elif not mt_index.has_key(fpath): pkg = "added in finetuning" else: pkg = "added in archive" outf.printo("|+%s+|%s" % (fpath, pkg)) outf.table() outf.h2("Deleted Files") outf.table() for fpath in mt_index.keys(): if not mt_index_post_arch.has_key(fpath): if index.has_key(fpath): pkg = index[fpath] else: pkg = "postinst generated" outf.printo("|+%s+|%s" % (fpath, pkg)) outf.table() outf.h2("Target Package List") outf.table() cache = apt.Cache(memonly=True) if xml.has("target/pkgversionlist"): os.remove('/target/etc/elbe_pkglist') f = open('/target/etc/elbe_pkglist', 'w') for pkg in tgt_pkg_list: p = cache[pkg] outf.printo("|%s|%s|%s|%s" % (p.name, p.installed.version, p.is_auto_installed, p.installed.md5)) if xml.has("target/pkgversionlist"): f.write("%s %s %s\n" % (p.name, p.installed.version, p.installed.md5)) outf.table() if xml.has("target/pkgversionlist"): f.close()
def run_command( argv ): oparser = OptionParser(usage="usage: %prog buildchroot [options] <xmlfile>") oparser.add_option( "-t", "--target", dest="target", help="directoryname of target" ) oparser.add_option( "-o", "--output", dest="output", help="name of logfile" ) oparser.add_option( "-n", "--name", dest="name", help="name of the project (included in the report)" ) oparser.add_option( "--skip-validation", action="store_true", dest="skip_validation", default=False, help="Skip xml schema validation" ) oparser.add_option( "--skip-debootstrap", action="store_true", dest="skip_debootstrap", default=False, help="Skip debootstrap" ) oparser.add_option( "--skip-cdrom", action="store_true", dest="skip_cdrom", default=False, help="Skip cdrom iso generation" ) oparser.add_option( "--build-sources", action="store_true", dest="buildsources", default=False, help="Build Source CD" ) oparser.add_option( "--debug", action="store_true", dest="debug", default=False, help="Enable various features to debug the build" ) oparser.add_option( "--buildtype", dest="buildtype", help="Override the buildtype" ) oparser.add_option( "--proxy", dest="proxy", help="Override the http proxy" ) (opt,args) = oparser.parse_args(argv) if len(args) != 1: print "wrong number of arguments" oparser.print_help() sys.exit(20) if not opt.skip_validation: if not validate_xml( args[0] ): print "xml validation failed. Bailing out" sys.exit(20) xml = etree( args[0] ) prj = xml.node("/project") tgt = xml.node("/target") if not opt.output: return 0 if not opt.target: return 0 if opt.buildtype: buildtype = opt.buildtype elif xml.has( "project/buildtype" ): buildtype = xml.text( "/project/buildtype" ) else: buildtype = "nodefaults" defs = ElbeDefaults( buildtype ) chroot = os.path.join(opt.target, "chroot") os.system( 'mkdir -p "%s"' % chroot ) outf = asccidoclog(opt.output) if opt.name: outf.h1( "ELBE Report for Project "+opt.name ) else: outf.h1( "ELBE Report" ) outf.printo( "report timestamp: "+datetime.datetime.now().strftime("%Y%m%d-%H%M%S") ) suite = prj.text("suite") target_arch = prj.text("buildimage/arch", default=defs, key="arch") slist = "" mirror = "Error" if prj.has("mirror/primary_host"): mirror = "%s://%s/%s" % ( prj.text("mirror/primary_proto"), prj.text("mirror/primary_host"), prj.text("mirror/primary_path") ) slist += "deb %s %s main\n" % (mirror, suite) slist += "deb-src %s %s main\n" % (mirror, suite) if prj.has("mirror/cdrom"): cdrompath = os.path.join( opt.target, "cdrom" ) mirror = "file://%s/debian" % cdrompath os.system( 'mkdir -p "%s"' % cdrompath ) os.system( 'mount -o loop "%s" "%s"' % (prj.text("mirror/cdrom"), cdrompath ) ) slist += "deb copy:///mnt %s main\n" % (suite) #slist += "deb-src file:///mnt %s main\n" % (suite) if opt.proxy: os.environ["http_proxy"] = opt.proxy elif prj.has("mirror/primary_proxy"): os.environ["http_proxy"] = prj.text("mirror/primary_proxy") os.environ["LANG"] = "C" os.environ["LANGUAGE"] = "C" os.environ["LC_ALL"] = "C" os.environ["DEBIAN_FRONTEND"]="noninteractive" os.environ["DEBONF_NONINTERACTIVE_SEEN"]="true" try: if prj.node("mirror/url-list"): for n in prj.node("mirror/url-list"): if n.has("binary"): tmp = n.text("binary").replace("LOCALMACHINE", "localhost") slist += "deb %s\n" % tmp.strip() if n.has("source"): tmp = n.text("source").replace("LOCALMACHINE", "localhost") slist += "deb-src %s\n" % tmp.strip() serial_con, serial_baud = tgt.text( "console" ).split(',') if not opt.skip_debootstrap: debootstrap( outf, chroot, mirror, suite, target_arch, defs ) seed_files( outf, chroot, slist, xml, args[0], opt, defs ) finally: if prj.has("mirror/cdrom"): os.system( 'umount "%s"' % cdrompath ) mount_stuff( outf, chroot ) if prj.has("mirror/cdrom"): os.system( 'mount -o loop "%s" "%s"' % (prj.text("mirror/cdrom"), os.path.join(chroot, "mnt")) ) pkglist = ["parted", "mtd-utils", "dpkg-dev", "dosfstools", "apt-rdepends", "python-apt", "rsync", "genisoimage", "reprepro", "python-parted"] try: do_chroot( outf, chroot, "apt-get update" ) do_chroot( outf, chroot, """/bin/sh -c 'debconf-set-selections < /opt/elbe/custom-preseed.cfg'""" ) if not opt.skip_debootstrap: do_chroot( outf, chroot, "apt-get install -y --force-yes " + string.join( pkglist ) ) do_chroot( outf, chroot, "python /opt/elbe/adjustpkgs.py -o /opt/elbe/bla.log /opt/elbe/source.xml" ) do_chroot( outf, chroot, """/bin/sh -c 'echo "%s\\n%s\\n" | passwd'""" % (tgt.text("passwd"), tgt.text("passwd")) ) do_chroot( outf, chroot, """/bin/sh -c 'echo "127.0.0.1 %s %s.%s" >> /etc/hosts'""" % (tgt.text("hostname"), tgt.text("hostname"), tgt.text("domain")) ) do_chroot( outf, chroot, """/bin/sh -c 'echo "%s" > /etc/hostname'""" % tgt.text("hostname") ) do_chroot( outf, chroot, """/bin/sh -c 'echo "%s.%s" > /etc/mailname'""" % (tgt.text("hostname"), tgt.text("domain")) ) do_chroot( outf, chroot, """/bin/sh -c 'echo "T0:23:respawn:/sbin/getty -L %s %s vt100" >> /etc/inittab'""" % (serial_con, serial_baud) ) do_chroot( outf, chroot, "rm /usr/sbin/policy-rc.d" ) do_chroot( outf, chroot, "/opt/elbe/create-target-rfs.sh" ) if not opt.skip_cdrom: do_chroot( outf, chroot, "/opt/elbe/mkcdrom.sh" ) finally: if prj.has("mirror/cdrom"): os.system( 'umount "%s"' % os.path.join(chroot, "mnt") ) umount_stuff( outf, chroot ) extract = open( os.path.join(chroot, "opt/elbe/files-to-extract"), "r" ) for fname in extract.readlines(): outf.do_command( 'cp "%s" "%s"' % (chroot+fname.strip(), opt.target) ) extract.close()