From 6b6fa4be810fb109abc1003546197660767387dc Mon Sep 17 00:00:00 2001 From: Martin Gracik Date: Wed, 2 Mar 2011 17:12:09 +0100 Subject: [PATCH] Added ppc pseudo code --- pseudo/ppc.pseudo.py | 217 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 pseudo/ppc.pseudo.py diff --git a/pseudo/ppc.pseudo.py b/pseudo/ppc.pseudo.py new file mode 100644 index 00000000..f0711b97 --- /dev/null +++ b/pseudo/ppc.pseudo.py @@ -0,0 +1,217 @@ +# ppc.pseudo.py + + +##### constants ##### + +ANABOOTDIR = "usr/share/anaconda/boot" + +ETCDIR = "etc" +PPCPARENT = "ppc" +CHRPDIR = "ppc/chrp" +IMAGESDIR = "images" + +PPC32DIR = "ppc/ppc32" +PPC64DIR = "ppc/ppc64" +MACDIR = "ppc/mac" +NETBOOTDIR = "images/netboot" + +MKZIMAGE = "usr/bin/mkzimage" +ZIMAGE_STUB = "usr/share/ppc64-utils/zImage.stub" +ZIMAGE_LDS = "usr/share/ppc64-utils/zImage.lds" +WRAPPER = "usr/sbin/wrapper" +# XXX variable constant :/ +WRAPPER_A = "usr/%s/kernel-wrapper/wrapper.a" % libdir + +ISOPATHDIR = "isopath" + +MKISOFS = "mkisofs" +MAPPING = joinpaths(ANABOOTDIR, "mapping") +MAGIC = joinpaths(ANABOOTDIR, "magic") +IMPLANTISOMD5 = "implantisomd5" + + +##### main() ##### + +""" kernellist, installroot, outputroot, product, version, treeinfo, bootiso + +""" + +# create directories +makedirs(joinpaths(outputroot, ETCDIR)) +makedirs(joinpaths(outputroot, PPCPARENT) +makedirs(joinpaths(outputroot, CHRPDIR)) +makedirs(joinpaths(outputroot, IMAGESDIR)) + +# set up biarch test +biarch = lambda: (exists(joinpaths(outputroot, PPC32DIR)) and + exists(joinpaths(outputroot, PPC64DIR))) + +# create images +for kernel in kernellist: + + # set up bits + if (kernel.arch == "ppc"): + bits = 32 + ppcdir = PPC32DIR + fakearch = "ppc" + elif (kernel.arch == "ppc64"): + bits = 64 + ppcdir = PPC64DIR + fakearch = "" + else: + raise Exception("unknown kernel arch %s" % kernel.arch) + + # create ppc dir + makedirs(joinpaths(outputroot, ppcdir)) + + if (kernel.arch == "ppc"): + # create mac dir + makedirs(joinpaths(outputroot, MACDIR)) + + # create netboot dir + makedirs(joinpaths(outputroot, NETBOOTDIR)) + + # copy kernel + kernel.fname = "vmlinuz" + kernel.fpath = copy(kernel.fpath, + joinpaths(outputroot, ppcdir, kernel.fname)) + + # create and copy initrd + initrd_fname = "ramdisk.image.gz" + initrd_fpath = copy(create_initrd(kernel), + joinpaths(outputroot, ppcdir, initrd_fname)) + + # copy yaboot.conf + yabootconf = copy(joinpaths(installroot, ANABOOTDIR, "yaboot.conf.in"), + joinpaths(outputroot, ppcdir, "yaboot.conf")) + + replace(yabootconf, "%BITS%", "%d" % bits) + replace(yabootconf, "%PRODUCT%", product) + replace(yabootconf, "%VERSION%", version) + + # add kernel and initrd to .treeinfo + with open(treeinfo, "a") as f: + f.write("[images-%s]\n" % kernel.arch) + f.write("kernel = %s\n" % joinpaths(ppcdir, kernel.fname)) + f.write("initrd = %s\n" % joinpaths(ppcdir, initrd_fname)) + + mkzimage = joinpaths(installroot, MKZIMAGE) + zimage_stub = joinpaths(installroot, ZIMAGE_STUB) + wrapper = joinpaths(installroot, WRAPPER) + wrapper_a = joinpaths(installroot, WRAPPER_A) + + ppc_img_fname = "ppc%d.img" % bits + ppc_img_fpath = joinpaths(outputroot, NETBOOTDIR, ppc_img_fname) + + if (exists(mkzimage) and exists(zimage_stub)): + # copy zImage.lds + zimage_lds = joinpaths(installroot, ZIMAGE_LDS) + zimage_lds = copy(zimage_lds, + joinpaths(outputroot, ppcdir)) + + # change current working dir + cwd = os.getcwd() + os.chdir(joinpaths(outputroot, ppcdir)) + + # run mkzimage + rc = exec([mkzimage, kernel.fpath, "no", "no", initrd_fpath, + zimage_stub, ppc_img_fpath]) + + # remove zImage.lds + remove(zimage_lds) + + # return to former working dir + os.chdir(cwd) + + elif (exists(wrapper) and exists(wrapper_a)): + # run wrapper + rc = exec([wrapper, "-o", ppc_img_fpath, "-i", initrd_fpath, + "-D", dirname(wrapper_a), kernel.fpath]) + + if (exists(ppc_img_fpath)): + # add ppc image to .treeinfo + with open(treeinfo, "a") as f: + f.write("zimage = %s\n" % joinpaths(NETBOOTDIR, ppc_img_fname)) + + if (bits == 32): + # set up prepboot + prepboot = "-prep-boot %s" % joinpaths(NETBOOTDIR, ppc_img_fname) + + if (empty(joinpaths(outputroot, NETBOOTDIR))): + remove(joinpaths(outputroot, NETBOOTDIR)) + +# copy bootinfo.txt +copy(joinpaths(installroot, ANABOOTDIR, "bootinfo.txt"), + joinpaths(outputroot, PPCPARENT)) + +# copy efika.forth +copy(joinpaths(installroot, ANABOOTDIR, "efika.forth"), + joinpaths(outputroot, PPCPARENT)) + +# copy yaboot to chrp dir +yaboot = joinpaths(installroot, "usr/lib/yaboot/yaboot") +yaboot = copy(yaboot, joinpaths(outputroot, CHRPDIR)) + +if (exists(joinpaths(outputroot, MACDIR))): + # copy yaboot and ofboot.b to mac dir + copy(yaboot, joinpaths(outputroot, MACDIR)) + copy(joinpaths(installroot, ANABOOTDIR, "ofboot.b"), + joinpaths(outputroot, MACDIR)) + + # set up macboot + p = joinpaths(outputroot, ISOPATHDIR, MACDIR) + macboot = "-hfs-volid %s -hfs-bless %s" % (version, p) + +# add note to yaboot +rc = exec([joinpaths(installroot, "usr/lib/yaboot/addnote"), yaboot]) + +# copy yaboot.conf to etc dir +if (biarch): + yabootconf = copy(joinpaths(installroot, ANABOOTDIR, "yaboot.conf.3264"), + joinpaths(outputroot, ETCDIR, "yaboot.conf")) + + replace(yabootconf, "%BITS%", "32") + replace(yabootconf, "%PRODUCT%", product) + replace(yabootconf, "%VERSION%", version) + +else: + copy(joinpaths(outputroot, ppcdir, "yaboot.conf"), + joinpaths(outputroot, ETCDIR)) + +if (bootiso): + # create isopath dir + isopathdir = joinpaths(outputroot, ISOPATHDIR) + makedirs(isopathdir) + + # copy etc dir and ppc dir to isopath dir + copytree(joinpaths(outputroot, ETCDIR), isopathdir) + copytree(joinpaths(outputroot, PPCPARENT), isopathdir) + + if (exists(joinpaths(outputroot, NETBOOTDIR))): + # if we have ppc images, create images dir in isopath dir + imagesdir = joinpaths(isopathdir, IMAGESDIR) + makedirs(imagesdir) + + # copy netboot dir to images dir + copytree(joinpaths(outputroot, NETBOOTDIR), imagesdir) + + # define prepboot and macboot + prepboot = "" if "prepboot" not in locals() else locals()["prepboot"] + macboot = "" if "macboot" not in locals() else locals()["macboot"] + + # create boot.iso + bootiso_fpath = joinpaths(outputroot, IMAGESDIR, bootiso) + + # run mkisofs + rc = exec([MKISOFS, "-o", bootiso_fpath, "-chrp-boot", "-U", prepboot, + "-part", "-hfs", "-T", "-r", "-l", "-J", "-A", + '"%s %s"' % (product, version), "-sysid", "PPC", "-V", '"PBOOT"', + "-volset", '"%s"' % version, "-volset-size", "1", + "-volset-seqno", "1", macboot, "-map", MAPPING, "-magic", MAGIC, + "-no-desktop", "-allow-multidot", "-graft-points", isopathdir]) + + # run implantisomd5 + rc = exec([IMPLANTISOMD5, bootiso_fpath]) + + # remove isopath dir + remove(isopathdir)