diff --git a/README.product b/README.product new file mode 100644 index 00000000..ec6e516f --- /dev/null +++ b/README.product @@ -0,0 +1,18 @@ +Lorax now supports creation of product.img and updates.img as part of the build +process. This is implemented using the installimg command which will take the +contents of a directory and create a compressed archive from it. The x86, ppc, +ppc64le and aarch64 templates all look for /usr/share/lorax/product/ and +/usr/share/lorax/updates/ directories while creating the final install tree. If +there are files in those directories lorax will create images/product.img +and/or images/updates.img + +These archives are just like an anaconda updates image -- they are copied over +the top of the filesystem at boot time so that you can drop in files to add to +or replace anything on the filesystem. + +Anaconda has several places that it looks for updates, the one for product.img +is in /run/install/product. For example, to add an installclass to Anaconda +you would put your custom class here: + +/usr/share/lorax/product/run/install/product/pyanaconda/installclasses/custom.py + diff --git a/lorax.spec b/lorax.spec index f0cc8f94..e291403f 100644 --- a/lorax.spec +++ b/lorax.spec @@ -86,7 +86,7 @@ make DESTDIR=$RPM_BUILD_ROOT mandir=%{_mandir} install %files %defattr(-,root,root,-) -%doc COPYING AUTHORS README.livemedia-creator +%doc COPYING AUTHORS README.livemedia-creator README.product %doc docs/*ks %{python_sitelib}/pylorax %{python_sitelib}/*.egg-info diff --git a/share/aarch64.tmpl b/share/aarch64.tmpl index 66af43f7..c073b101 100644 --- a/share/aarch64.tmpl +++ b/share/aarch64.tmpl @@ -4,6 +4,7 @@ configdir="tmp/config_files/aarch64" PXEBOOTDIR="images/pxeboot" KERNELDIR=PXEBOOTDIR LIVEDIR="LiveOS" +LORAXDIR="usr/share/lorax/" %> mkdir ${LIVEDIR} @@ -37,3 +38,12 @@ mkdir ${KERNELDIR} <%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch=efiarch, isolabel=isolabel"/> %endif +# Create optional product.img and updates.img +<% imggraft=""; images=["product", "updates"] %> +%for img in images: + %if exists("%s/%s/" % (LORAXDIR, img)): + installimg ${LORAXDIR}/${img}/ images/${img}.img + <% imggraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %> + %endif +%endfor + diff --git a/share/live/ppc.tmpl b/share/live/ppc.tmpl index 80c0383d..af6373e7 100644 --- a/share/live/ppc.tmpl +++ b/share/live/ppc.tmpl @@ -6,6 +6,7 @@ GRUBDIR="boot/grub" LIVEDIR="LiveOS" MACDIR=BOOTDIR+"/mac" NETBOOTDIR="images/netboot" +LORAXDIR="usr/share/lorax/" WRAPPER="usr/sbin/wrapper" WRAPPER_DATA="usr/"+libdir+"/kernel-wrapper" @@ -80,6 +81,15 @@ install ${configdir}/magic ${BOOTDIR} %endif %endfor +# Create optional product.img and updates.img +<% imggraft=""; images=["product", "updates"] %> +%for img in images: + %if exists("%s/%s/" % (LORAXDIR, img)): + installimg ${LORAXDIR}/${img}/ images/${img}.img + <% imggraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %> + %endif +%endfor + ## make boot.iso runcmd mkisofs -o ${outroot}/images/boot.iso -chrp-boot -U \ ${prepboot} -part -hfs -T -r -l -J \ @@ -91,7 +101,7 @@ runcmd mkisofs -o ${outroot}/images/boot.iso -chrp-boot -U \ ${BOOTDIR}=${outroot}/${BOOTDIR} \ ${GRUBDIR}=${outroot}/${GRUBDIR} \ ${NETBOOTDIR}=${outroot}/${NETBOOTDIR} \ - ${LIVEDIR}=${outroot}/${LIVEDIR} + ${LIVEDIR}=${outroot}/${LIVEDIR} ${imggraft} %for kernel in kernels: treeinfo images-${kernel.arch} boot.iso images/boot.iso diff --git a/share/live/x86.tmpl b/share/live/x86.tmpl index 3d5b2c5d..f60b80d5 100644 --- a/share/live/x86.tmpl +++ b/share/live/x86.tmpl @@ -6,6 +6,7 @@ PXEBOOTDIR="images/pxeboot" BOOTDIR="isolinux" KERNELDIR=PXEBOOTDIR LIVEDIR="LiveOS" +LORAXDIR="usr/share/lorax/" ## Don't allow spaces or escape characters in the iso label def valid_label(ch): @@ -73,6 +74,15 @@ hardlink ${KERNELDIR}/initrd.img ${BOOTDIR} <%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch=efiarch, isolabel=isolabel"/> %endif +# Create optional product.img and updates.img +<% imggraft=""; images=["product", "updates"] %> +%for img in images: + %if exists("%s/%s/" % (LORAXDIR, img)): + installimg ${LORAXDIR}/${img}/ images/${img}.img + <% imggraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %> + %endif +%endfor + ## make boot.iso runcmd mkisofs -o ${outroot}/images/boot.iso \ -b ${BOOTDIR}/isolinux.bin -c ${BOOTDIR}/boot.cat \ @@ -81,6 +91,6 @@ runcmd mkisofs -o ${outroot}/images/boot.iso \ ${BOOTDIR}=${outroot}/${BOOTDIR} \ ${KERNELDIR}=${outroot}/${KERNELDIR} \ ${LIVEDIR}=${outroot}/${LIVEDIR} \ - ${efigraft} + ${efigraft} ${imggraft} runcmd isohybrid ${efihybrid} ${outroot}/images/boot.iso treeinfo images-${basearch} boot.iso images/boot.iso diff --git a/share/ppc.tmpl b/share/ppc.tmpl index 6deb6e87..ddc368a9 100644 --- a/share/ppc.tmpl +++ b/share/ppc.tmpl @@ -6,6 +6,7 @@ GRUBDIR="boot/grub" LIVEDIR="LiveOS" MACDIR=GRUBDIR+"/powerpc-ieee1275" NETBOOTDIR="images/netboot" +LORAXDIR="usr/share/lorax/" WRAPPER="usr/sbin/wrapper" WRAPPER_DATA="usr/"+libdir+"/kernel-wrapper" @@ -88,6 +89,15 @@ install ${configdir}/magic ${BOOTDIR} %endif %endfor +# Create optional product.img and updates.img +<% imggraft=""; images=["product", "updates"] %> +%for img in images: + %if exists("%s/%s/" % (LORAXDIR, img)): + installimg ${LORAXDIR}/${img}/ images/${img}.img + <% imggraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %> + %endif +%endfor + ## make boot.iso runcmd mkisofs -o ${outroot}/images/boot.iso -chrp-boot -U \ ${prepboot} -part -hfs -T -r -l -J \ @@ -99,7 +109,8 @@ runcmd mkisofs -o ${outroot}/images/boot.iso -chrp-boot -U \ ${BOOTDIR}=${outroot}/${BOOTDIR} \ ${GRUBDIR}=${outroot}/${GRUBDIR} \ ${NETBOOTDIR}=${outroot}/${NETBOOTDIR} \ - ${LIVEDIR}=${outroot}/${LIVEDIR} + ${LIVEDIR}=${outroot}/${LIVEDIR} ${imggraft} + %for kernel in kernels: treeinfo images-${kernel.arch} boot.iso images/boot.iso diff --git a/share/ppc64le.tmpl b/share/ppc64le.tmpl index 8fa15b00..c1618892 100644 --- a/share/ppc64le.tmpl +++ b/share/ppc64le.tmpl @@ -4,6 +4,7 @@ configdir="tmp/config_files/ppc" BOOTDIR="ppc" GRUBDIR="boot/grub" LIVEDIR="LiveOS" +LORAXDIR="usr/share/lorax/" ## NOTE: yaboot freaks out and stops parsing its config if it sees a '\', ## so we can't use the udev escape sequences in the root arg. @@ -63,8 +64,17 @@ install ${configdir}/magic ${BOOTDIR} treeinfo images-${kernel.arch} zimage %endfor -## make boot.iso mkdir images/ +# Create optional product.img and updates.img +<% imggraft=""; images=["product", "updates"] %> +%for img in images: + %if exists("%s/%s/" % (LORAXDIR, img)): + installimg ${LORAXDIR}/${img}/ images/${img}.img + <% imggraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %> + %endif +%endfor + +## make boot.iso runcmd mkisofs -v -U -J -R -T \ -o ${outroot}/images/boot.iso \ -part -hfs -r -l -sysid PPC \ @@ -75,7 +85,7 @@ runcmd mkisofs -v -U -J -R -T \ -no-desktop -allow-multidot -graft-points \ ${BOOTDIR}=${outroot}/${BOOTDIR} \ ${GRUBDIR}=${outroot}/${GRUBDIR} \ - ${LIVEDIR}=${outroot}/${LIVEDIR} + ${LIVEDIR}=${outroot}/${LIVEDIR} ${imggraft} %for kernel in kernels: treeinfo images-${kernel.arch} boot.iso images/boot.iso diff --git a/share/runtime-postinstall.tmpl b/share/runtime-postinstall.tmpl index 217cca68..5bf98f69 100644 --- a/share/runtime-postinstall.tmpl +++ b/share/runtime-postinstall.tmpl @@ -119,4 +119,7 @@ append etc/lvm/lvm.conf "global {\n\tuse_lvmetad = 1\n}\n" ## Record the package versions used to create the image runcmd chroot ${root} /bin/rpm -qa --pipe "tee /root/lorax-packages.log" +mkdir usr/share/lorax/product/run/install/product/pyanaconda/installclasses/ +append usr/share/lorax/product/run/install/product/pyanaconda/installclasses/custom.py "import logging\nlog = logging.getLogger('anaconda')\nlog.info('bcl was here')\n" + ## TODO: we could run prelink here if we wanted? diff --git a/share/x86.tmpl b/share/x86.tmpl index 02117cd0..145e2093 100644 --- a/share/x86.tmpl +++ b/share/x86.tmpl @@ -6,6 +6,7 @@ PXEBOOTDIR="images/pxeboot" BOOTDIR="isolinux" KERNELDIR=PXEBOOTDIR LIVEDIR="LiveOS" +LORAXDIR="usr/share/lorax/" ## Don't allow spaces or escape characters in the iso label def valid_label(ch): @@ -87,6 +88,15 @@ hardlink ${KERNELDIR}/initrd.img ${BOOTDIR} <%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch=efiarch, isolabel=isolabel"/> %endif +# Create optional product.img and updates.img +<% imggraft=""; images=["product", "updates"] %> +%for img in images: + %if exists("%s/%s/" % (LORAXDIR, img)): + installimg ${LORAXDIR}/${img}/ images/${img}.img + <% imggraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %> + %endif +%endfor + ## make boot.iso runcmd mkisofs -o ${outroot}/images/boot.iso \ -b ${BOOTDIR}/isolinux.bin -c ${BOOTDIR}/boot.cat \ @@ -95,6 +105,6 @@ runcmd mkisofs -o ${outroot}/images/boot.iso \ ${BOOTDIR}=${outroot}/${BOOTDIR} \ ${KERNELDIR}=${outroot}/${KERNELDIR} \ ${LIVEDIR}=${outroot}/${LIVEDIR} \ - ${efigraft} + ${efigraft} ${imggraft} runcmd isohybrid ${efihybrid} ${outroot}/images/boot.iso treeinfo images-${basearch} boot.iso images/boot.iso