summaryrefslogtreecommitdiff
path: root/archiso/build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'archiso/build.sh')
-rwxr-xr-xarchiso/build.sh113
1 files changed, 113 insertions, 0 deletions
diff --git a/archiso/build.sh b/archiso/build.sh
new file mode 100755
index 0000000..e99d42e
--- /dev/null
+++ b/archiso/build.sh
@@ -0,0 +1,113 @@
+#!/bin/bash
+
+set -e -u
+
+name=parabola-radio
+iso_label="PARABOLA_$(date +%Y%m)"
+version=$(date +%Y.%m.%d)
+install_dir=radio
+arch=$(uname -m)
+work_dir=work
+verbose="n"
+
+# Base installation (root-image)
+make_basefs() {
+ mkarchiso ${verbose} -D "${install_dir}" -p "base" create "${work_dir}"
+ mkarchiso ${verbose} -D "${install_dir}" -p "syslinux" create "${work_dir}"
+}
+
+# Additional packages (root-image)
+make_packages() {
+ mkarchiso ${verbose} -D "${install_dir}" -p "$(grep -v ^# packages.${arch})" create "${work_dir}"
+}
+
+# Customize installation (root-image)
+make_customize_root_image() {
+ if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
+ cp -af root-image ${work_dir}
+ cp -Rf overlay/* ${work_dir}/root-image/
+
+ chroot ${work_dir}/root-image /usr/sbin/useradd -m -p "" -g users -G "audio,disk,optical,wheel,storage" radio
+ : > ${work_dir}/build.${FUNCNAME}
+ fi
+}
+
+# Copy mkinitcpio archiso hooks (root-image)
+make_setup_mkinitcpio() {
+ if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
+ cp /lib/initcpio/hooks/archiso ${work_dir}/root-image/lib/initcpio/hooks
+ cp /lib/initcpio/install/archiso ${work_dir}/root-image/lib/initcpio/install
+ : > ${work_dir}/build.${FUNCNAME}
+ fi
+}
+
+# Prepare ${install_dir}/boot/
+make_boot() {
+ if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
+ mkdir -p ${work_dir}/iso/${install_dir}/boot/${arch}
+ mkinitcpio \
+ -c ./mkinitcpio.conf \
+ -b ${work_dir}/root-image \
+ -k /boot/vmlinuz26 \
+ -g ${work_dir}/iso/${install_dir}/boot/${arch}/libreiso.img
+ cp ${work_dir}/root-image/boot/vmlinuz26 ${work_dir}/iso/${install_dir}/boot/${arch}
+ : > ${work_dir}/build.${FUNCNAME}
+ fi
+}
+
+# Prepare /${install_dir}/boot/syslinux
+make_syslinux() {
+ if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
+ mkdir -p ${work_dir}/iso/${install_dir}/boot/syslinux
+ sed "s|%ARCHISO_LABEL%|${iso_label}|g;
+ s|%INSTALL_DIR%|${install_dir}|g;
+ s|%ARCH%|${arch}|g" syslinux/syslinux.cfg > ${work_dir}/iso/${install_dir}/boot/syslinux/syslinux.cfg
+ cp ${work_dir}/root-image/usr/lib/syslinux/menu.c32 ${work_dir}/iso/${install_dir}/boot/syslinux/
+ : > ${work_dir}/build.${FUNCNAME}
+ fi
+}
+
+# Prepare /isolinux
+make_isolinux() {
+ if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
+ mkdir -p ${work_dir}/iso/isolinux
+ sed "s|%INSTALL_DIR%|${install_dir}|g" isolinux/isolinux.cfg > ${work_dir}/iso/isolinux/isolinux.cfg
+ cp ${work_dir}/root-image/usr/lib/syslinux/isolinux.bin ${work_dir}/iso/isolinux/
+ : > ${work_dir}/build.${FUNCNAME}
+ fi
+}
+
+# Process aitab
+make_aitab() {
+ if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then
+ sed "s|%ARCH%|${arch}|g" aitab > ${work_dir}/iso/${install_dir}/aitab
+ : > ${work_dir}/build.${FUNCNAME}
+ fi
+}
+
+# Build all filesystem images specified in aitab (.fs .fs.sfs .sfs)
+make_prepare() {
+ mkarchiso ${verbose} -D "${install_dir}" prepare "${work_dir}"
+}
+
+# Build ISO
+make_iso() {
+ mkarchiso ${verbose} -D "${install_dir}" -L "${iso_label}" iso "${work_dir}" "${name}-${version}-${arch}.iso"
+}
+
+if [[ $verbose == "y" ]]; then
+ verbose="-v"
+else
+ verbose=""
+fi
+
+make_basefs
+make_packages
+make_customize_root_image
+make_setup_mkinitcpio
+make_boot
+make_syslinux
+make_isolinux
+make_aitab
+make_prepare
+make_iso