diff options
author | Anas Nashif <anas.nashif@intel.com> | 2010-05-06 23:56:28 -0400 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2010-05-06 23:56:28 -0400 |
commit | b3f23061abe8b08e51522ec8e2b5cad0b8571f02 (patch) | |
tree | c46ad210415fff79b4bad9b5b6f7498ddce93675 | |
download | kickstarter-b3f23061abe8b08e51522ec8e2b5cad0b8571f02.tar.gz kickstarter-b3f23061abe8b08e51522ec8e2b5cad0b8571f02.tar.bz2 kickstarter-b3f23061abe8b08e51522ec8e2b5cad0b8571f02.zip |
Initial import
-rw-r--r-- | Makefile | 21 | ||||
-rw-r--r-- | README | 16 | ||||
-rw-r--r-- | TODO | 6 | ||||
-rw-r--r-- | configurations.yaml | 68 | ||||
-rw-r--r-- | custom/part/custom | 2 | ||||
-rw-r--r-- | custom/scripts/buildname.nochroot | 3 | ||||
-rw-r--r-- | custom/scripts/cleanup.post | 6 | ||||
-rw-r--r-- | custom/scripts/flash.post | 5 | ||||
-rw-r--r-- | custom/scripts/prelink.post | 4 | ||||
-rw-r--r-- | custom/scripts/rpm.post | 9 | ||||
-rw-r--r-- | custom/scripts/serial.post | 2 | ||||
-rw-r--r-- | kickstart.py | 255 | ||||
-rw-r--r-- | kickstart.pyc | bin | 0 -> 8105 bytes | |||
-rw-r--r-- | kickstart.tmpl | 61 | ||||
-rw-r--r-- | kickstarter.py | 111 | ||||
-rw-r--r-- | repos.yaml | 7 |
16 files changed, 576 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..404738b --- /dev/null +++ b/Makefile @@ -0,0 +1,21 @@ +# ex: set tabstop=4 noexpandtab: +PYTHON=python +CHEETAH=cheetah +TEMPLATES=$(wildcard *.tmpl) +TEMPLATE_MODS=$(patsubst %.tmpl,%.py,$(TEMPLATES)) +.SECONDARY: $(TEMPLATE_MODS) +KS=$(wildcard *.ks) + +all: $(TEMPLATE_MODS) + +%.py: %.tmpl + $(CHEETAH) compile --settings='useStackFrames=False' $< + + +ks: $(TEMPLATES) ../images.yaml + python kickstarter.py -m ../images.yaml + +clean: + rm -f $(TEMPLATE_MODS) + rm -f $(addsuffix .bak,$(TEMPLATE_MODS)) + rm -f *.pyc *.pyo @@ -0,0 +1,16 @@ +Install cheetah (http://www.cheetahtemplate.org/) templating system, PyYAML. + +run make +then run: +python kickstarter.py -c <images.yaml> -r <repos.yaml> + +Example: + python kickstarter.py --configs configurations.yaml --repos repos.yaml + +Repo file: +This file contains a list of repositories to be used in the kickstart files + +Configurations file: +This file has the definition of configurations. The Configurations inherit +from platforms first then from the DEFAULT section. The image configurations +override the all other settings (in DEFAULT and platform sections). @@ -0,0 +1,6 @@ + +List of things to do: + + - Add support for build IDs + - Multi arch repos + - .. diff --git a/configurations.yaml b/configurations.yaml new file mode 100644 index 0000000..cd94271 --- /dev/null +++ b/configurations.yaml @@ -0,0 +1,68 @@ +Default: + Active: True + Language: en_US.UTF-8 + Keyboard: us + PackageArgs: + SaveRepos: False + Timezone: America/New_York + RootPass: meego + DefaultUser: meego + DefaultUserPass: meego + PartSize: 1900 + PostScripts: + - rpm + Groups: + - MeeGo Core + - X Window System + +CORE: + PartSize: 1000 + BootloaderAppend: "quiet" + BootloaderTimeout: 0 + PostScripts: + - cleanup + Repos: + - meego-core-1.0 + Kernel: kernel-netbook + +NETBOOK: + PartSize: 1900 + BootloaderAppend: "quiet" + BootloaderTimeout: 0 + PostScripts: + - cleanup + - flash + Groups: + - X for Netbooks + - Virtual Machine Support + - Printing + - Games + Kernel: kernel-netbook + Repos: + - adobe + - meego-core-1.0 + - meego-netbook-1.0 + PostScripts: + - prelink + ExtraPackages: + - gdb + - flash-plugin + - adobe-release +Configurations: + - Name: MeeGo Core 1.0 + Active: True + Baseline: 1.0 + Platform: CORE + FileName: core + Desktop: + - Name: MeeGo Netbook/Nettop 1.0 + Active: True + Baseline: 1.0 + Platform: NETBOOK + Desktop: meego + FileName: netbook + Groups: + - MeeGo Netbook Desktop + Repos: + - meego-core-1.0 + - meego-netbook-1.0 diff --git a/custom/part/custom b/custom/part/custom new file mode 100644 index 0000000..d6c8b6b --- /dev/null +++ b/custom/part/custom @@ -0,0 +1,2 @@ +part / --size 1300 --ondisk sda --grow --maxsize=1450 --fstype=ext3 +#part /home --size 1000 --grow --maxsize=1450 --ondisk sdb --fstype=ext3 diff --git a/custom/scripts/buildname.nochroot b/custom/scripts/buildname.nochroot new file mode 100644 index 0000000..edd20a7 --- /dev/null +++ b/custom/scripts/buildname.nochroot @@ -0,0 +1,3 @@ +if [ -n "$IMG_NAME" ]; then + echo "BUILD: $IMG_NAME" >> $INSTALL_ROOT/etc/meego-release +fi diff --git a/custom/scripts/cleanup.post b/custom/scripts/cleanup.post new file mode 100644 index 0000000..c36c2e4 --- /dev/null +++ b/custom/scripts/cleanup.post @@ -0,0 +1,6 @@ + +# save a little bit of space at least... +rm -f /boot/initrd* + +# make sure there aren't core files lying around +rm -f /core* diff --git a/custom/scripts/flash.post b/custom/scripts/flash.post new file mode 100644 index 0000000..fe062d3 --- /dev/null +++ b/custom/scripts/flash.post @@ -0,0 +1,5 @@ +# verify link of flash plugin +if [ -f /usr/lib/flash-plugin/setup ]; then + sh /usr/lib/flash-plugin/setup install + rm -f /root/oldflashplugins.tar.gz +fi diff --git a/custom/scripts/prelink.post b/custom/scripts/prelink.post new file mode 100644 index 0000000..527548c --- /dev/null +++ b/custom/scripts/prelink.post @@ -0,0 +1,4 @@ +# Prelink can reduce boot time +if [ -x /usr/sbin/prelink ]; then + /usr/sbin/prelink -aRqm +fi diff --git a/custom/scripts/rpm.post b/custom/scripts/rpm.post new file mode 100644 index 0000000..1e4049e --- /dev/null +++ b/custom/scripts/rpm.post @@ -0,0 +1,9 @@ +# work around for poor key import UI in PackageKit +rm -f /var/lib/rpm/__db* +rpm --rebuilddb +if [ -f /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux ]; then + rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux +fi +if [ -f /etc/pki/rpm-gpg/RPM-GPG-KEY-meego ]; then + rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-meego +fi diff --git a/custom/scripts/serial.post b/custom/scripts/serial.post new file mode 100644 index 0000000..5961379 --- /dev/null +++ b/custom/scripts/serial.post @@ -0,0 +1,2 @@ +# open serial line console for embedded system +echo "s0:235:respawn:/sbin/agetty -L 115200 ttyS0 vt100" >> /etc/inittab diff --git a/kickstart.py b/kickstart.py new file mode 100644 index 0000000..a9af541 --- /dev/null +++ b/kickstart.py @@ -0,0 +1,255 @@ +#!/usr/bin/env python + + + + +################################################## +## DEPENDENCIES +import sys +import os +import os.path +import __builtin__ +from os.path import getmtime, exists +import time +import types +from Cheetah.Version import MinCompatibleVersion as RequiredCheetahVersion +from Cheetah.Version import MinCompatibleVersionTuple as RequiredCheetahVersionTuple +from Cheetah.Template import Template +from Cheetah.DummyTransaction import * +from Cheetah.NameMapper import NotFound, valueForName, valueFromSearchList, valueFromFrameOrSearchList +from Cheetah.CacheRegion import CacheRegion +import Cheetah.Filters as Filters +import Cheetah.ErrorCatchers as ErrorCatchers + +################################################## +## MODULE CONSTANTS +VFFSL=valueFromFrameOrSearchList +VFSL=valueFromSearchList +VFN=valueForName +currentTime=time.time +__CHEETAH_version__ = '2.2.2' +__CHEETAH_versionTuple__ = (2, 2, 2, 'final', 0) +__CHEETAH_genTime__ = 1273202421.2641661 +__CHEETAH_genTimestamp__ = 'Thu May 6 23:20:21 2010' +__CHEETAH_src__ = 'kickstart.tmpl' +__CHEETAH_srcLastModified__ = 'Thu May 6 22:51:32 2010' +__CHEETAH_docstring__ = 'Autogenerated by Cheetah: The Python-Powered Template Engine' + +if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple: + raise AssertionError( + 'This template was compiled with Cheetah version' + ' %s. Templates compiled before version %s must be recompiled.'%( + __CHEETAH_version__, RequiredCheetahVersion)) + +################################################## +## CLASSES + +class kickstart(Template): + + ################################################## + ## CHEETAH GENERATED METHODS + + + def __init__(self, *args, **KWs): + + super(kickstart, self).__init__(*args, **KWs) + if not self._CHEETAH__instanceInitialized: + cheetahKWArgs = {} + allowedKWs = 'searchList namespaces filter filtersLib errorCatcher'.split() + for k,v in KWs.items(): + if k in allowedKWs: cheetahKWArgs[k] = v + self._initCheetahInstance(**cheetahKWArgs) + + + def respond(self, trans=None): + + + + ## CHEETAH: main method generated for this template + if (not trans and not self._CHEETAH__isBuffering and not callable(self.transaction)): + trans = self.transaction # is None unless self.awake() was called + if not trans: + trans = DummyTransaction() + _dummyTrans = True + else: _dummyTrans = False + write = trans.response().write + SL = self._CHEETAH__searchList + _filter = self._CHEETAH__currentFilter + + ######################################## + ## START - generated method body + + write(u'''# +# Do not Edit! Generated by: +# kickstarter.py +# + +lang ''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Language",True) # u'${metadata.Language}' on line 6, col 6 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.Language}')) # from line 6, col 6. + write(u''' +keyboard ''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Keyboard",True) # u'${metadata.Keyboard}' on line 7, col 10 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.Keyboard}')) # from line 7, col 10. + write(u''' +timezone --utc ''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Timezone",True) # u'${metadata.Timezone}' on line 8, col 16 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.Timezone}')) # from line 8, col 16. + write(u''' +auth --useshadow --enablemd5 +''') + if VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Part",True) == "": # generated from line 10, col 1 + write(u'''part / --size ''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.PartSize",True) # u'${metadata.PartSize}' on line 11, col 15 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.PartSize}')) # from line 11, col 15. + write(u''' --ondisk sda --fstype=ext3 +''') + else: # generated from line 12, col 1 + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Part",True) # u'${metadata.Part}' on line 13, col 1 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.Part}')) # from line 13, col 1. + write(u''' +''') + write(u'''rootpw ''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.RootPass",True) # u'${metadata.RootPass}' on line 15, col 8 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.RootPass}')) # from line 15, col 8. + write(u''' +xconfig --startxonboot +bootloader --timeout=''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.BootloaderTimeout",True) # u'${metadata.BootloaderTimeout}' on line 17, col 22 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.BootloaderTimeout}')) # from line 17, col 22. + write(u''' --append="''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.BootloaderAppend",True) # u'${metadata.BootloaderAppend}' on line 17, col 62 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.BootloaderAppend}')) # from line 17, col 62. + write(u'''" +desktop --autologinuser=''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.DefaultUser",True) # u'${metadata.DefaultUser}' on line 18, col 25 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.DefaultUser}')) # from line 18, col 25. + write(u''' --defaultdesktop=''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Desktop",True) # u'${metadata.Desktop}' on line 18, col 67 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.Desktop}')) # from line 18, col 67. + write(u''' +user --name ''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.DefaultUser",True) # u'${metadata.DefaultUser}' on line 19, col 13 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.DefaultUser}')) # from line 19, col 13. + write(u''' --groups audio,video --password ''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.DefaultUserPass",True) # u'${metadata.DefaultUserPass}' on line 19, col 70 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.DefaultUserPass}')) # from line 19, col 70. + write(u''' + +''') + save = "" + if VFSL([locals()]+SL+[globals(), __builtin__],"metadata.SaveRepos",True): # generated from line 22, col 1 + save = "--save" + for r in VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Repos",True): # generated from line 25, col 1 + for rr in VFSL([locals()]+SL+[globals(), __builtin__],"repos",True): # generated from line 26, col 1 + if VFSL([locals()]+SL+[globals(), __builtin__],"rr.Name",True) == VFSL([locals()]+SL+[globals(), __builtin__],"r",True): # generated from line 27, col 1 + write(u'''repo --name=''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"r",True) # u'${r}' on line 28, col 15 + if _v is not None: write(_filter(_v, rawExpr=u'${r}')) # from line 28, col 15. + write(u''' --baseurl=''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"rr.Url",True) # u'${rr.Url}' on line 28, col 30 + if _v is not None: write(_filter(_v, rawExpr=u'${rr.Url}')) # from line 28, col 30. + write(u''' ''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"save",True) # u'${save}' on line 28, col 40 + if _v is not None: write(_filter(_v, rawExpr=u'${save}')) # from line 28, col 40. + write(u''' +''') + write(u''' + +''') + if VFSL([locals()]+SL+[globals(), __builtin__],"metadata.PackageArgs",True) != "": # generated from line 34, col 1 + write(u'''%packages ''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.PackageArgs",True) # u'${metadata.PackageArgs}' on line 35, col 11 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.PackageArgs}')) # from line 35, col 11. + write(u''' +''') + else: # generated from line 36, col 1 + write(u'''%packages +''') + write(u''' +''') + for g in VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Groups",True): # generated from line 40, col 1 + write(u'''@''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"g",True) # u'${g}' on line 41, col 2 + if _v is not None: write(_filter(_v, rawExpr=u'${g}')) # from line 41, col 2. + write(u''' +''') + write(u''' + +''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Kernel",True) # u'$metadata.Kernel' on line 45, col 1 + if _v is not None: write(_filter(_v, rawExpr=u'$metadata.Kernel')) # from line 45, col 1. + write(u''' + +''') + for e in VFSL([locals()]+SL+[globals(), __builtin__],"metadata.ExtraPackages",True): # generated from line 47, col 1 + _v = VFSL([locals()]+SL+[globals(), __builtin__],"e",True) # u'${e}' on line 48, col 1 + if _v is not None: write(_filter(_v, rawExpr=u'${e}')) # from line 48, col 1. + write(u''' +''') + for e in VFSL([locals()]+SL+[globals(), __builtin__],"metadata.RemovePackages",True): # generated from line 50, col 1 + write(u'''-''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"e",True) # u'${e}' on line 51, col 2 + if _v is not None: write(_filter(_v, rawExpr=u'${e}')) # from line 51, col 2. + write(u''' +''') + write(u'''%end + +%post +''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.Post",True) # u'${metadata.Post}' on line 56, col 1 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.Post}')) # from line 56, col 1. + write(u''' +%end + +%post --nochroot +''') + _v = VFSL([locals()]+SL+[globals(), __builtin__],"metadata.NoChroot",True) # u'${metadata.NoChroot}' on line 60, col 1 + if _v is not None: write(_filter(_v, rawExpr=u'${metadata.NoChroot}')) # from line 60, col 1. + write(u''' +%end +''') + + ######################################## + ## END - generated method body + + return _dummyTrans and trans.response().getvalue() or "" + + ################################################## + ## CHEETAH GENERATED ATTRIBUTES + + + _CHEETAH__instanceInitialized = False + + _CHEETAH_version = __CHEETAH_version__ + + _CHEETAH_versionTuple = __CHEETAH_versionTuple__ + + _CHEETAH_genTime = __CHEETAH_genTime__ + + _CHEETAH_genTimestamp = __CHEETAH_genTimestamp__ + + _CHEETAH_src = __CHEETAH_src__ + + _CHEETAH_srcLastModified = __CHEETAH_srcLastModified__ + + _mainCheetahMethod_for_kickstart= 'respond' + +## END CLASS DEFINITION + +if not hasattr(kickstart, '_initCheetahAttributes'): + templateAPIClass = getattr(kickstart, '_CHEETAH_templateClass', Template) + templateAPIClass._addCheetahPlumbingCodeToClass(kickstart) + + +# CHEETAH was developed by Tavis Rudd and Mike Orr +# with code, advice and input from many other volunteers. +# For more information visit http://www.CheetahTemplate.org/ + +################################################## +## if run from command line: +if __name__ == '__main__': + from Cheetah.TemplateCmdLineIface import CmdLineIface + CmdLineIface(templateObj=kickstart()).run() + + diff --git a/kickstart.pyc b/kickstart.pyc Binary files differnew file mode 100644 index 0000000..1d36785 --- /dev/null +++ b/kickstart.pyc diff --git a/kickstart.tmpl b/kickstart.tmpl new file mode 100644 index 0000000..8a6fed3 --- /dev/null +++ b/kickstart.tmpl @@ -0,0 +1,61 @@ +# ############################################## +# Do not Edit! Generated by: +# kickstarter.py +# ############################################### + +lang ${metadata.Language} +keyboard ${metadata.Keyboard} +timezone --utc ${metadata.Timezone} +auth --useshadow --enablemd5 +#if $metadata.Part == "" +part / --size ${metadata.PartSize} --ondisk sda --fstype=ext3 +#else +${metadata.Part} +#end if +rootpw ${metadata.RootPass} +xconfig --startxonboot +bootloader --timeout=${metadata.BootloaderTimeout} --append="${metadata.BootloaderAppend}" +desktop --autologinuser=${metadata.DefaultUser} --defaultdesktop=${metadata.Desktop} +user --name ${metadata.DefaultUser} --groups audio,video --password ${metadata.DefaultUserPass} + +#set $save = "" +#if $metadata.SaveRepos +#set $save = "--save" +#end if +#for $r in $metadata.Repos +#for $rr in $repos +#if $rr.Name == $r +repo --name=${r} --baseurl=${rr.Url} ${save} +#end if +#end for +#end for + + +#if $metadata.PackageArgs != "" +%packages ${metadata.PackageArgs} +#else +%packages +#end if + +#for $g in $metadata.Groups +@${g} +#end for + + +$metadata.Kernel + +#for $e in $metadata.ExtraPackages +${e} +#end for +#for $e in $metadata.RemovePackages +-${e} +#end for +%end + +%post +${metadata.Post} +%end + +%post --nochroot +${metadata.NoChroot} +%end diff --git a/kickstarter.py b/kickstarter.py new file mode 100644 index 0000000..b1cad01 --- /dev/null +++ b/kickstarter.py @@ -0,0 +1,111 @@ +#!/usr/bin/python +# Anas Nashif <anas.nashif@intel.com> +import yaml, sys + +import re, os +from kickstart import kickstart + +import copy +import time +import optparse +from time import gmtime, strftime + +class KSWriter(): + def __init__(self, im, rep, out): + self.image_filename = im + self.repo_filename = rep + self.outdir = out + self.image_stream = file(self.image_filename, 'r') + self.repo_stream = file(self.repo_filename, 'r') + self.extra = {} + pass + def merge(*input): + return list(reduce(set.union, input, set())) + + def dump(self): + print yaml.dump(yaml.load(self.stream)) + + + def parse(self, img): + print "Creating %s (%s.ks)" %(img['Name'], img['FileName'] ) + conf = copy.copy(image_meta['Default']) + plat = copy.copy(image_meta[img['Platform']]) + conf.update(plat) + conf.update(img) + lval = ['Repos', 'Groups', 'PostScripts', 'NoChrootScripts', 'RemovePackages', 'ExtraPackages'] + lvald = {} + for l in lval: + full = [] + if image_meta['Default'].has_key(l) and image_meta['Default'][l]: + full = full + image_meta['Default'][l] + if plat.has_key(l) and plat[l]: + full = full + plat[l] + if img.has_key(l) and img[l]: + full = full + img[l] + lvald[l] = set(full) + #print full + conf.update(lvald) + #print conf + postscript = "" + for scr in conf['PostScripts']: + f = open('./custom/scripts/%s.post' %scr, 'r') + postscript += f.read() + postscript += "\n\n" + f.close() + + nochrootscript = "" + for scr in conf['NoChrootScripts']: + f = open('./custom/scripts/%s.nochroot' %scr, 'r') + nochrootscript += f.read() + nochrootscript += "\n\n" + f.close() + + ptab = "" + if img.has_key("Part"): + f = open("./custom/part/%s" %img['Part'] ) + ptab = f.read() + f.close() + + conf['Part'] = ptab + conf['Post'] = postscript + conf['NoChroot'] = nochrootscript + return conf + + def process_files(self, meta, r): + nameSpace = {'metadata': meta, 'repos': r} + t = kickstart(searchList=[nameSpace]) + a = str(t) + if meta.has_key('FileName') and meta['FileName']: + f = open("%s/%s.ks" %( self.outdir, meta['FileName'] ), 'w') + f.write(a) + f.close() + +if __name__ == '__main__': + parser = optparse.OptionParser() + + parser.add_option("-c", "--configs", type="string", dest="configsfile", + help="configuration meta file") + parser.add_option("-o", "--outdir", type="string", dest="outdir", + help="outdir") + parser.add_option("-r", "--repos", type="string", dest="repofile", + help="repo meta file") + + (options, args) = parser.parse_args() + + if options.configsfile is None or options.repofile is None: + print "you need to provide meta files with --configs and --repos" + sys.exit(1) + + outdir = "" + if options.outdir is None: + outdir = "." + else: + outdir = options.outdir + + ks = KSWriter(options.configsfile, options.repofile, outdir) + repo_meta = yaml.load(ks.repo_stream) + image_meta = yaml.load(ks.image_stream) + r = repo_meta['Repositories'] + for img in image_meta['Configurations']: + conf = ks.parse(img) + ks.process_files(conf, r) diff --git a/repos.yaml b/repos.yaml new file mode 100644 index 0000000..4627c50 --- /dev/null +++ b/repos.yaml @@ -0,0 +1,7 @@ +Repositories: + - Name: meego-core-1.0 + Url: http://repo.meego.com/MeeGo/release/1.0/core/repo/ia32/os/ + - Name: meego-netbook-1.0 + Url: http://repo.meego.com + - Name: adobe + Url: http://linuxdownload.adobe.com/linux/i386/ |