diff --git a/build-image.sh b/build-image.sh index dbcac0dbc..9c52f8c6b 100755 --- a/build-image.sh +++ b/build-image.sh @@ -94,6 +94,9 @@ sed -i '/CheckSpace/s/^/#/g' /etc/pacman.conf # update package databases pacman --noconfirm -Syy +# Avoid mkintcpio being auto-installed while installing the kernel (we want dracut) +pacman -S --noconfirm dracut + # install kernel package if [ "$KERNEL_PACKAGE_ORIGIN" == "local" ] ; then pacman --noconfirm -U --overwrite '*' \ @@ -193,7 +196,6 @@ cp -r /var/lib/pacman/local /usr/var/lib/pacman/ if [ ${KERNEL_PACKAGE} != 'linux' ] ; then mv /boot/vmlinuz-${KERNEL_PACKAGE} /boot/vmlinuz-linux mv /boot/initramfs-${KERNEL_PACKAGE}.img /boot/initramfs-linux.img - mv /boot/initramfs-${KERNEL_PACKAGE}-fallback.img /boot/initramfs-linux-fallback.img fi # clean up/remove unnecessary files diff --git a/manifest b/manifest index 737cad967..c71a87dd1 100644 --- a/manifest +++ b/manifest @@ -263,7 +263,6 @@ export USER_SERVICES="\ " export FILES_TO_DELETE="\ - /boot/initramfs-linux-fallback.img \ /usr/share/SFML \ /usr/share/doc \ /usr/share/gtk-doc \ diff --git a/pkgs/chimeraos-dracut-cfg/00-chimeraos.conf b/pkgs/chimeraos-dracut-cfg/00-chimeraos.conf new file mode 100644 index 000000000..5161f4889 --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/00-chimeraos.conf @@ -0,0 +1,4 @@ +early_microcode="yes" +compress="xz -9e --check=crc32 -v" + +omit_dracutmodules+=" squash " \ No newline at end of file diff --git a/pkgs/chimeraos-dracut-cfg/10-chimeraos_use-fstab.conf b/pkgs/chimeraos-dracut-cfg/10-chimeraos_use-fstab.conf new file mode 100644 index 000000000..8d27cd7f0 --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/10-chimeraos_use-fstab.conf @@ -0,0 +1,4 @@ +add_dracutmodules+=" rootfs-block " + +# Use the fstab file in the initramfs +use_fstab="yes" \ No newline at end of file diff --git a/pkgs/chimeraos-dracut-cfg/20-chimeraos_plymouth.conf b/pkgs/chimeraos-dracut-cfg/20-chimeraos_plymouth.conf new file mode 100644 index 000000000..86ca5bc92 --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/20-chimeraos_plymouth.conf @@ -0,0 +1 @@ +omit_dracutmodules+=" plymouth " \ No newline at end of file diff --git a/pkgs/chimeraos-dracut-cfg/30-chimeraos_include-filesystems.conf b/pkgs/chimeraos-dracut-cfg/30-chimeraos_include-filesystems.conf new file mode 100644 index 000000000..0b5e6f601 --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/30-chimeraos_include-filesystems.conf @@ -0,0 +1,3 @@ +add_dracutmodules+=" overlayfs " +add_dracutmodules+=" btrfs " +add_drivers+=" nvme vfat " \ No newline at end of file diff --git a/pkgs/chimeraos-dracut-cfg/40-chimeraos_exclude-encryption.conf b/pkgs/chimeraos-dracut-cfg/40-chimeraos_exclude-encryption.conf new file mode 100644 index 000000000..7c8821fba --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/40-chimeraos_exclude-encryption.conf @@ -0,0 +1 @@ +omit_dracutmodules+=" systemd-pcrphase systemd-cryptsetup crypt tpm2-tss " \ No newline at end of file diff --git a/pkgs/chimeraos-dracut-cfg/50-chimeraos_exclude-mdraid.conf b/pkgs/chimeraos-dracut-cfg/50-chimeraos_exclude-mdraid.conf new file mode 100644 index 000000000..005023b38 --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/50-chimeraos_exclude-mdraid.conf @@ -0,0 +1 @@ +omit_dracutmodules+=" mdraid " \ No newline at end of file diff --git a/pkgs/chimeraos-dracut-cfg/60-chimeraos_exclude-networking.conf b/pkgs/chimeraos-dracut-cfg/60-chimeraos_exclude-networking.conf new file mode 100644 index 000000000..31d886880 --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/60-chimeraos_exclude-networking.conf @@ -0,0 +1,7 @@ +omit_dracutmodules+=" cifs " +omit_dracutmodules+=" nfs " +omit_dracutmodules+=" network " +omit_dracutmodules+=" network-manager " +omit_dracutmodules+=" connman " +omit_dracutmodules+=" network-legacy " +omit_dracutmodules+=" network-wicked " \ No newline at end of file diff --git a/pkgs/chimeraos-dracut-cfg/60-dracut-remove.hook b/pkgs/chimeraos-dracut-cfg/60-dracut-remove.hook new file mode 100644 index 000000000..f2b1271bd --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/60-dracut-remove.hook @@ -0,0 +1,10 @@ +[Trigger] +Type = Path +Operation = Remove +Target = usr/lib/modules/*/pkgbase + +[Action] +Description = Removing linux initcpios... +When = PreTransaction +Exec = /usr/local/bin/dracut-remove.sh +NeedsTargets diff --git a/pkgs/chimeraos-dracut-cfg/70-chimeraos_exclude-nvdimm.conf b/pkgs/chimeraos-dracut-cfg/70-chimeraos_exclude-nvdimm.conf new file mode 100644 index 000000000..f43be9e75 --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/70-chimeraos_exclude-nvdimm.conf @@ -0,0 +1 @@ +omit_dracutmodules+=" nvdimm " \ No newline at end of file diff --git a/pkgs/chimeraos-dracut-cfg/80-chimeraos_exclude-qemu.conf b/pkgs/chimeraos-dracut-cfg/80-chimeraos_exclude-qemu.conf new file mode 100644 index 000000000..2c81c924f --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/80-chimeraos_exclude-qemu.conf @@ -0,0 +1,3 @@ +omit_dracutmodules+=" qemu " +omit_dracutmodules+=" qemu-net " +omit_dracutmodules+=" virtiofs " \ No newline at end of file diff --git a/pkgs/chimeraos-dracut-cfg/90-chimeraos_exclude-bluetooth.conf b/pkgs/chimeraos-dracut-cfg/90-chimeraos_exclude-bluetooth.conf new file mode 100644 index 000000000..6d2871ce3 --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/90-chimeraos_exclude-bluetooth.conf @@ -0,0 +1 @@ +omit_dracutmodules+=" bluetooth " \ No newline at end of file diff --git a/pkgs/chimeraos-dracut-cfg/90-dracut-install.hook b/pkgs/chimeraos-dracut-cfg/90-dracut-install.hook new file mode 100644 index 000000000..d96895b68 --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/90-dracut-install.hook @@ -0,0 +1,12 @@ +[Trigger] +Type = Path +Operation = Install +Operation = Upgrade +Target = usr/lib/modules/*/pkgbase + +[Action] +Description = Updating linux initcpios (with dracut!)... +When = PostTransaction +Exec = /usr/local/bin/dracut-install.sh +Depends = dracut +NeedsTargets diff --git a/pkgs/chimeraos-dracut-cfg/PKGBUILD b/pkgs/chimeraos-dracut-cfg/PKGBUILD new file mode 100644 index 000000000..f1126c615 --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/PKGBUILD @@ -0,0 +1,73 @@ +# Maintainer: Denis Benato + +pkgname=chimeraos-dracut-cfg +pkgver=0.0.1 +pkgrel=1 +pkgdesc="Dracut-specific configuration for chimeraos" +arch=('any') +url="https://github.com/ChimeraOS/chimeraos" +license=('MIT') +depends=( + 'dracut' # regenerate the initramfs + #'plymouth' # support for boot animations + 'binutils' # allow usage of --strip +) +source=( + "dracut-install.sh" + "dracut-remove.sh" + "00-chimeraos.conf" + "10-chimeraos_use-fstab.conf" + "20-chimeraos_plymouth.conf" + "30-chimeraos_include-filesystems.conf" + "40-chimeraos_exclude-encryption.conf" + "50-chimeraos_exclude-mdraid.conf" + "60-chimeraos_exclude-networking.conf" + "70-chimeraos_exclude-nvdimm.conf" + "80-chimeraos_exclude-qemu.conf" + "90-chimeraos_exclude-bluetooth.conf" + "60-dracut-remove.hook" + "90-dracut-install.hook" +) +sha256sums=( + '827d59e8fda5c16b3fc45eb89ce7cd5be6c40d35dd8fe9a8d5ea825a63d3a089' # dracut-install.sh + 'daefb58a0bf6df48cceaf4f7a898c17ca1f24e18cd7981b19f5f2034499592ed' # dracut-remove.sh + '1f356cc895156064cec63f589ea49acc59a4faab94b7ebe99dc904893da85907' # 00-chimeraos.conf + '7886062a7293d2e6bd6e975c4a8aaae63342af366479db8adf1b75860081cf53' # 10-chimeraos_use-fstab.conf + '103cf3322954202c3f0f740cd9079546d059f919c8b1b07ac703ec6f94cf17fb' # 20-chimeraos_plymouth.conf + '676b4a216cd3787882edf2e5bdaebce4577a11dbae176f81bab1c1b72917fc09' # 30-chimeraos_include-filesystems.conf + '8b4247161bb9158bf382517bb061360c184315e71fea244420d8db99d2730129' # 40-chimeraos_exclude-encryption.conf + '84cccef9706590795b37b4d949c0a34e6ee7ba34ee7ff01a8c808a2fe3ff7f89' # 50-chimeraos_exclude-mdraid.conf + 'e1f9caf3878e65ca28951642ad02c1b167eacba777b4ccc893f6b8702a6d474e' # 60-chimeraos_exclude-networking.conf + '5822aa5a698577937820ab2565a203492b6af81434bf1423664ef68bba8c1617' # 70-chimeraos_exclude-nvdimm.conf + 'b126149ca9f79bb1deb7ec640f4452dd61f4214558f954b7bc9196c5e9ca6ef0' # 80-chimeraos_exclude-qemu.conf + 'e983493fe3e7d9395dd8d1c8949150144c8d4318ff17ff2aca004235734c8299' # 90-chimeraos_exclude-bluetooth.conf + '41c996bf7ef90e6a81690c4a06cbef89167882a036699834fe22637a1a184982' # 60-dracut-remove.hook + 'df94baaf97d110f65f1443dd7063fe0e8ec1f73b5baf142c6ff08c260e571fcb' # 90-dracut-install.hook +) + +package() { + mkdir -p "$pkgdir/etc/dracut.conf.d/" + mkdir -p "$pkgdir/usr/local/bin/" + mkdir -p "$pkgdir/usr/share/libalpm/hooks" + + install -m 755 "$srcdir/dracut-install.sh" "$pkgdir/usr/local/bin" + install -m 755 "$srcdir/dracut-remove.sh" "$pkgdir/usr/local/bin" + + install -m 644 "$srcdir/60-dracut-remove.hook" "$pkgdir/usr/share/libalpm/hooks" + install -m 644 "$srcdir/90-dracut-install.hook" "$pkgdir/usr/share/libalpm/hooks" + + install -m 644 "$srcdir/00-chimeraos.conf" "$pkgdir/etc/dracut.conf.d" + install -m 644 "$srcdir/10-chimeraos_use-fstab.conf" "$pkgdir/etc/dracut.conf.d" + install -m 644 "$srcdir/20-chimeraos_plymouth.conf" "$pkgdir/etc/dracut.conf.d" + install -m 644 "$srcdir/30-chimeraos_include-filesystems.conf" "$pkgdir/etc/dracut.conf.d" + install -m 644 "$srcdir/40-chimeraos_exclude-encryption.conf" "$pkgdir/etc/dracut.conf.d" + install -m 644 "$srcdir/50-chimeraos_exclude-mdraid.conf" "$pkgdir/etc/dracut.conf.d" + install -m 644 "$srcdir/60-chimeraos_exclude-networking.conf" "$pkgdir/etc/dracut.conf.d" + install -m 644 "$srcdir/70-chimeraos_exclude-nvdimm.conf" "$pkgdir/etc/dracut.conf.d" + install -m 644 "$srcdir/80-chimeraos_exclude-qemu.conf" "$pkgdir/etc/dracut.conf.d" + install -m 644 "$srcdir/90-chimeraos_exclude-bluetooth.conf" "$pkgdir/etc/dracut.conf.d" + + install -m 644 "$srcdir/60-dracut-remove.hook" "$pkgdir/etc/dracut.conf.d" + install -m 644 "$srcdir/90-dracut-install.hook" "$pkgdir/etc/dracut.conf.d" +} + diff --git a/pkgs/chimeraos-dracut-cfg/dracut-install.sh b/pkgs/chimeraos-dracut-cfg/dracut-install.sh new file mode 100644 index 000000000..9ea9e4325 --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/dracut-install.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +args=('--force' '--strip' '--aggressive-strip' '--reproducible') + +while read -r line; do + if [[ "$line" == 'usr/lib/modules/'+([^/])'/pkgbase' ]]; then + read -r pkgbase < "/${line}" + kver="${line#'usr/lib/modules/'}" + kver="${kver%'/pkgbase'}" + + install -Dm0644 "/${line%'/pkgbase'}/vmlinuz" "/boot/vmlinuz-${pkgbase}" + dracut --no-hostonly --no-hostonly-cmdline "${args[@]}" "/boot/initramfs-${pkgbase}.img" --kver "$kver" + #dracut --no-hostonly "${args[@]}" "/boot/initramfs-${pkgbase}-fallback.img" --kver "$kver" + fi +done \ No newline at end of file diff --git a/pkgs/chimeraos-dracut-cfg/dracut-remove.sh b/pkgs/chimeraos-dracut-cfg/dracut-remove.sh new file mode 100644 index 000000000..789f7a259 --- /dev/null +++ b/pkgs/chimeraos-dracut-cfg/dracut-remove.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +while read -r line; do + if [[ "$line" == 'usr/lib/modules/'+([^/])'/pkgbase' ]]; then + read -r pkgbase < "/${line}" + rm -f "/boot/vmlinuz-${pkgbase}" + rm -f "/boot/initramfs-${pkgbase}.img" + #rm -f "/boot/initramfs-${pkgbase}-fallback.img" + fi +done diff --git a/pkgs/chimeraos-fake-mkinitcpio/PKGBUILD b/pkgs/chimeraos-fake-mkinitcpio/PKGBUILD new file mode 100644 index 000000000..34a112296 --- /dev/null +++ b/pkgs/chimeraos-fake-mkinitcpio/PKGBUILD @@ -0,0 +1,18 @@ +pkgname=chimeraos-fake-mkinitcpio +pkgver=39.2 +pkgrel=2 +pkgdesc="A stub implementation of mkinitcpio that does nothing except providing the executable that does nothing" +arch=('any') +url='https://gitlab.archlinux.org/archlinux/mkinitcpio/mkinitcpio' +license=('GPL-2.0-only') +depends=() +provides=('initramfs') +conflicts=('mkinitcpio') +source=('mkinitcpio') +b2sums=('4b40ab2908ab1ad57e72e22f6f74f4d22d3bb09a42d64956a64c48cf0dadb645da4c4e3edb31fa3068c909a1f03c0fa9fd534cb7159d6d56526d5dbb3104b9b0') + +package() { + mkdir -p "$pkgdir/usr/bin" + install -m 755 "$srcdir/mkinitcpio" "$pkgdir/usr/bin" +} + diff --git a/pkgs/chimeraos-fake-mkinitcpio/mkinitcpio b/pkgs/chimeraos-fake-mkinitcpio/mkinitcpio new file mode 100644 index 000000000..5c7ed9888 --- /dev/null +++ b/pkgs/chimeraos-fake-mkinitcpio/mkinitcpio @@ -0,0 +1,6 @@ +#!/bin/sh + +# The pre-refactor frzr will call the target image mkinitcpio. +# We want to avoid generating an error, yet we want this tool to do nothing as +# device-quirks is now installed in a deployment migration. +echo "[WARNING] Fake mkinitcpio called." \ No newline at end of file diff --git a/rootfs/etc/initcpio/hooks/frzr-etc b/rootfs/etc/initcpio/hooks/frzr-etc deleted file mode 100644 index c06e3a805..000000000 --- a/rootfs/etc/initcpio/hooks/frzr-etc +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/ash -run_latehook() { - local rootfs realtab frzropts frzrsrc - rootfs="/new_root" - realtab="${rootfs}/etc/fstab" - - if [ -f "${realtab}" ]; then - # read values from fstab - frzrsrc=$(findmnt -snero source --tab-file="$realtab" -T /frzr_root) - frzropts=$(findmnt -snero options --tab-file="$realtab" -T /frzr_root) - - if [ -z "${frzropts}" ]; then - mount "${frzrsrc}" ${rootfs}/frzr_root - else - mount -o "${frzropts}" "${frzrsrc}" ${rootfs}/frzr_root - fi - else - # fallback, when not found in fstab - mount /dev/disk/by-label/frzr_root \${rootfs}/frzr_root - fi - - # mount etc from frzr_root as overlay - mount -t overlay overlay -o lowerdir=${rootfs}/etc,upperdir=${rootfs}/frzr_root/etc,workdir=${rootfs}/frzr_root/.etc,index=off ${rootfs}/etc -} \ No newline at end of file diff --git a/rootfs/etc/initcpio/install/frzr-etc b/rootfs/etc/initcpio/install/frzr-etc deleted file mode 100644 index 3de4d3ae6..000000000 --- a/rootfs/etc/initcpio/install/frzr-etc +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -build() { - add_binary findmnt - add_runscript -} -help() { - cat <