summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnas Nashif <anas.nashif@intel.com>2010-05-06 23:56:28 -0400
committerAnas Nashif <anas.nashif@intel.com>2010-05-06 23:56:28 -0400
commitb3f23061abe8b08e51522ec8e2b5cad0b8571f02 (patch)
treec46ad210415fff79b4bad9b5b6f7498ddce93675
downloadkickstarter-b3f23061abe8b08e51522ec8e2b5cad0b8571f02.tar.gz
kickstarter-b3f23061abe8b08e51522ec8e2b5cad0b8571f02.tar.bz2
kickstarter-b3f23061abe8b08e51522ec8e2b5cad0b8571f02.zip
Initial import
-rw-r--r--Makefile21
-rw-r--r--README16
-rw-r--r--TODO6
-rw-r--r--configurations.yaml68
-rw-r--r--custom/part/custom2
-rw-r--r--custom/scripts/buildname.nochroot3
-rw-r--r--custom/scripts/cleanup.post6
-rw-r--r--custom/scripts/flash.post5
-rw-r--r--custom/scripts/prelink.post4
-rw-r--r--custom/scripts/rpm.post9
-rw-r--r--custom/scripts/serial.post2
-rw-r--r--kickstart.py255
-rw-r--r--kickstart.pycbin0 -> 8105 bytes
-rw-r--r--kickstart.tmpl61
-rw-r--r--kickstarter.py111
-rw-r--r--repos.yaml7
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
diff --git a/README b/README
new file mode 100644
index 0000000..10ebc2b
--- /dev/null
+++ b/README
@@ -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).
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..031d3ee
--- /dev/null
+++ b/TODO
@@ -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
new file mode 100644
index 0000000..1d36785
--- /dev/null
+++ b/kickstart.pyc
Binary files differ
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/