218 lines
6.6 KiB
Python
218 lines
6.6 KiB
Python
|
# 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)
|