diff --git a/FUNDING.yml b/FUNDING.yml new file mode 100644 index 0000000..e828143 --- /dev/null +++ b/FUNDING.yml @@ -0,0 +1,2 @@ +custom: ['http://cash.app/$nchevsky', 'http://paypal.me/nchevsky', 'https://account.venmo.com/u/nchevsky'] +github: nchevsky diff --git a/README.md b/README.md index 472d113..6550243 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,75 @@ -# SystemRescue - -## Project website -Homepage: https://www.system-rescue.org/ - -## Project sources -This git repository contains SystemRescue sources files. This is based on -https://gitlab.archlinux.org/archlinux/archiso/ - -## Building SystemRescue -SystemRescue can be built for x86_64 or i686 architectures. It must be built -on archlinux if you want to build a 64bit edition, or archlinux32 if you want -to create a 32bit edition. The following packages must be installed on the -build system: archiso, grub, isomd5sum, mtools, edk2-shell, hugo. - -You need to use a modified version of archiso for the build to work. This -version is provided in the custom `sysrescuerepo` repository. See the -`pacman.conf` file in the source. Either copy the `sysrescuerepo` section -into your `/etc/pacman.conf` or replace the whole `/etc/pacman.conf` file with -the one from the source. Install archiso afterwards. - -The package list contains packages which are not part of the official binary -package repositories from Arch Linux. These packages are also provided in the -`sysrescuerepo` repository. If you want to rebuild them, see -[systemrescue-custompkg](https://gitlab.com/systemrescue/systemrescue-custompkg). -Create a local repository out of them with `repo-add`, host it on a webserver -and then adapt pacman.conf. - -The build process requires the systemrescue-website repository which is included -as git submodule. So when checking out this repository, make sure to check out -the submodule too. This can be done for example with -`git clone --recurse-submodules https://gitlab.com/systemrescue/systemrescue-sources.git` - -The build process can be started by running the build.sh script. It will create -a large "work" sub-directory and the ISO file will be written in the "out" -sub-directory. - -## Building SystemRescue with docker -If you are not running archlinux, you can run the build process in docker -containers. You need to have a Linux system running with docker installed -and configured. You can use the scripts provided in the `docker` folder of -this repository. - -You must export the environment variable named `sysrescuearch` before you -run the two helper scripts. It should be set as either `x86_64` or `i686` -depending on the target architecture for which you want to build the ISO image. - -After this, you need to run the script which builds a new docker image, and -then the script which uses this docker image to builds the ISO image. The second -script will pass the arguments it receives to the main `build.sh` script. - -For example you can build a 64bit version of SystemRescue in docker using these commands: -``` -export sysrescuearch="x86_64" -./docker/build-docker-image.sh -./docker/build-iso-image.sh -v +# Overview + +**SystemRescue+ZFS** is a fork of the [SystemRescue](http://www.system-rescue.org/) distribution (based on [Arch Linux](https://archlinux.org/)) with the following improvements: + +- [ZFS](https://github.com/archzfs/archzfs/) supported out of the box +- [Serial console](#serial-console) enabled for all boot options, including [Memtest86+](https://www.memtest.org/) +- EFI boot progress indicators for the kernel/initramfs/system stages +- [ISO image](https://github.com/nchevsky/systemrescue-zfs/releases) below 1 GiB in size + +# Serial console + +A serial terminal is enabled out of the box on `ttyS0`/`COM1` at 115,200 baud. If these settings are unsuitable, adjust the configuration of the appropriate bootloader and the [kernel](https://www.kernel.org/doc/html/latest/admin-guide/serial-console.html), then [build](#building) a new image. + +## Bootloader + +| [GRUB](https://www.gnu.org/software/grub/manual/grub/grub.html) (EFI boot) | [SYSLINUX](https://wiki.syslinux.org/wiki/index.php?title=SYSLINUX) (legacy boot) | +| --- | --- | +| 📍 [`efiboot/grub/grubsrcd.cfg`](efiboot/grub/grubsrcd.cfg)
`serial --unit=0 --speed=115200 …` | 📍 [`syslinux/sysresccd_head.cfg`](syslinux/sysresccd_head.cfg)
`SERIAL 0 115200` | + +## Kernel + +📍 [`build.sh`](build.sh)
`consoles='console=ttyS0,115200 …'` + +# Building + +```sh +$ sudo ./build.sh [-d] [-v] ``` -## Including your SystemRescueModules -If you want to include your own [SystemRescueModules][srm], place their srm files -in the [srm](./srm) directory of the repository before running the build script. +- `-d`: Use fast compression, significantly speeding up development builds. +- `-v`: Print more information while building (strongly recommended). + +## Dependencies -[srm]: https://www.system-rescue.org/Modules/ +[Arch Linux](https://archlinux.org/download/) with the following packages installed: +- `arch-install-scripts` +- `archiso` from the custom [SystemRescue repository](https://sysrescuerepo.system-rescue.org/) ⚠️ +- `base-devel` +- `edk2-shell` +- `grub` +- `hugo` +- `isomd5sum` +- `mtools` -## Project sponsors +## Rebuilds -Infrastructure for SystemRescue is sponsored by: +The state of successful [build steps](#steps) is persisted in `work/build.make_*` files. If such a file exists for a given build step, `build.sh` skips that step indefinitely. State files must be manually deleted for any steps that one wants reexecuted. + +### Full rebuild + +```sh +$ sudo rm work/build.make_* +``` -|    [fastly](https://www.fastly.com)    |    [netcup](https://www.netcup.eu)    | +### Partial rebuild + +Delete the state file for the desired step **and any downstream steps**. For example, if you have customized the GRUB configuration, you must remove `build.make_efi` and its successors `build.make_efiboot` and `build.make_iso`. + +## Steps + +1. `make_pacman_conf` +2. `make_basefs` +3. `make_documentation` +4. `make_packages` +5. `make_customize_airootfs` +6. `make_setup_mkinitcpio` +7. `make_boot` +8. `make_boot_extra` +9. `make_syslinux` +10. `make_isolinux` +11. `make_efi` +12. `make_efiboot` +13. `make_prepare` +14. `make_imageinfo` +15. `make_iso` diff --git a/VERSION b/VERSION index 6dbdb95..9ed52ec 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.02 +11.02+2.2.6 diff --git a/airootfs/etc/issue b/airootfs/etc/issue index feed99a..376a504 100644 --- a/airootfs/etc/issue +++ b/airootfs/etc/issue @@ -1,14 +1,14 @@ -\e[01;31m ========= \e[01;37mSystemRescue %ISO_VERSION% (%ISO_ARCH%)\e[01;31m ======== \e[01;37m\l\e[00;37m/6\e[01;31m ========= - \e[00;31mhttps://www.system-rescue.org/ +\e[01;31m============== \e[01;37m%ISO_APPLICATION% %ISO_VERSION%\e[01;31m --- \e[01;37m\l \e[01;31m============== + \e[01;31m%ISO_URL% -\e[00;31m*\e[01;31m Console environment\e[00;37m : - Run \e[01;37msetkmap\e[00;37m to choose the keyboard layout (also accessible with the arrow up key) - Run \e[01;37mmanual\e[00;37m to read the documentation of SystemRescue +\e[00;31m*\e[01;31m Console environment:\e[00;37m + Run \e[01;37msetkmap\e[00;37m or press ↑ to choose the keyboard layout. + Run \e[01;37mmanual\e[00;37m to read the SystemRescue documentation. -\e[00;31m*\e[01;31m Graphical environment\e[00;37m : - Type \e[01;37mstartx\e[00;37m to run the graphical environment - X.Org comes with the XFCE environment and several graphical tools: - \e[00;31m-\e[00;37m Partition manager: .. \e[01;37mgparted\e[00;37m - \e[00;31m-\e[00;37m Web browser: ........ \e[01;37mfirefox\e[00;37m - \e[00;31m-\e[00;37m Text editor: ........ \e[01;37mfeatherpad\e[00;37m +\e[00;31m*\e[01;31m Graphical environment:\e[00;37m + Run \e[01;37mstartx\e[00;37m to start the graphical environment. + X.Org comes with the XFCE environment and several graphical tools: + \e[00;31m-\e[00;37m Partition manager: \e[01;37mgparted\e[00;37m + \e[00;31m-\e[00;37m Web browser: \e[01;37mfirefox\e[00;37m + \e[00;31m-\e[00;37m Text editor: \e[01;37mfeatherpad\e[00;37m diff --git a/airootfs/root/.config/xfce4/panel/launcher-5/15552316104.desktop b/airootfs/root/.config/xfce4/panel/launcher-5/15552316104.desktop index 9c8ba6f..bf1f34e 100644 --- a/airootfs/root/.config/xfce4/panel/launcher-5/15552316104.desktop +++ b/airootfs/root/.config/xfce4/panel/launcher-5/15552316104.desktop @@ -1,18 +1,12 @@ [Desktop Entry] -Name=FeatherPad +Name=Mousepad GenericName=Text Editor -Comment=Lightweight Qt5 text editor -Exec=featherpad %F -Icon=featherpad +Comment=Simple Text Editor +Exec=mousepad +Icon=org.xfce.mousepad Terminal=false Type=Application MimeType=text/plain; -Categories=Qt;Utility;TextEditor; +Categories=Utility;TextEditor; X-KDE-StartupNotify=false; Keywords=Text;Editor;Plaintext; -Actions=new-window; -X-XFCE-Source=file:///usr/share/applications/featherpad.desktop - -[Desktop Action new-window] -Name=New Window -Exec=featherpad --win diff --git a/airootfs/root/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml b/airootfs/root/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml index 3b70200..0f6535a 100644 --- a/airootfs/root/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml +++ b/airootfs/root/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml @@ -59,9 +59,6 @@ - - - diff --git a/airootfs/root/customize_airootfs.sh b/airootfs/root/customize_airootfs.sh index 05832bf..3ec083d 100755 --- a/airootfs/root/customize_airootfs.sh +++ b/airootfs/root/customize_airootfs.sh @@ -26,11 +26,8 @@ sed -i 's/#\(HandleSuspendKey=\)suspend/\1ignore/' /etc/systemd/logind.conf sed -i 's/#\(HandleHibernateKey=\)hibernate/\1ignore/' /etc/systemd/logind.conf sed -i 's/#\(HandleLidSwitch=\)suspend/\1ignore/' /etc/systemd/logind.conf -# PulseAudio takes care of volume restore -ln -sf /dev/null /etc/udev/rules.d/90-alsa-restore.rules - # config symlink -mkdir /etc/sysrescue/ +mkdir -p /etc/sysrescue/ ln -sf /run/archiso/config/sysrescue-effective-config.json /etc/sysrescue/sysrescue-effective-config.json # Services @@ -60,8 +57,17 @@ systemctl mask ldconfig.service mkdir -p /etc/systemd/system-generators/ ln -sf /dev/null /etc/systemd/system-generators/systemd-gpt-auto-generator +# remove kernel headers (no longer needed once zfs-dkms has been installed) +mkdir -p /etc/pacman.d/hooks +ln -s /dev/null /etc/pacman.d/hooks/71-dkms-remove.hook # suppress automatic removal of zfs-dkms +pacman --noconfirm -Rs linux-lts-headers +rm /etc/pacman.d/hooks/71-dkms-remove.hook + # setup pacman signing key storage /usr/bin/pacman-key --init +pacman-key --recv-keys 3A9917BF0DED5C13F69AC68FABEC0A1208037BE9 DDF7DB817396A49B2A2723F7403BD972F75D9D76 # archzfs (experimental, stable) +pacman-key --lsign-key 3A9917BF0DED5C13F69AC68FABEC0A1208037BE9 # archzfs (experimental) +pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76 # archzfs (stable) /usr/bin/pacman-key --populate rm -f /etc/pacman.d/gnupg/*~ diff --git a/airootfs/usr/share/sysrescue/bin/build-zfs-srm b/airootfs/usr/share/sysrescue/bin/build-zfs-srm deleted file mode 100755 index 6b5a4a2..0000000 --- a/airootfs/usr/share/sysrescue/bin/build-zfs-srm +++ /dev/null @@ -1,248 +0,0 @@ -#! /usr/bin/env bash -# -# build-zfs-srm - build ZFS support for SystemRescue -# -# This script builds a SystemRescue Module (SRM) file that adds support -# for the ZFS file system to a running instance of SystemRescue. -# -# Author: Daniel Richard G. -# SPDX-License-Identifier: GPL-3.0-or-later -# -# SystemRescue cannot be distributed with ZFS support due to licensing -# issues, but users are free to build ZFS for SystemRescue themselves. -# As the build process is non-trivial, it has been elaborated in this -# script as a service to the SystemRescue community. -# -# Usage: -# ./build-zfs-srm [--latest] -# -# By default, this script will build the version of ZFS that was current -# (in the AUR repo) at the time of the host system's release. If the -# --latest option is given, then it will instead build the latest version -# available now (when the script is run). -# -# Note that the build is performed reproducibly; i.e. re-running the -# build in the same environment should yield exactly the same output -# file. Thus, builds performed with --latest will produce different -# output as new ZFS versions become available, whereas builds performed -# without should (in theory) remain unchanged in perpetuity. -# -# For more information, refer to -# https://www.system-rescue.org/scripts/build-zfs-srm/ -# - -use_latest_zfs=no - -while [ -n "$1" ] -do - case "$1" in - --latest) use_latest_zfs=yes ;; - -h|--help) echo "$0: see comment header of script for usage info"; exit 0 ;; - -*) echo "$0: error: unrecognized option \"$1\""; exit 1 ;; - *) echo "$0: error: unrecognized argument \"$1\""; exit 1 ;; - esac - shift -done - -# Sanity checks -if [ ! -f /etc/arch-release ] || ! /usr/bin/pacman --version >/dev/null 2>&1 -then - echo "$0: error: this script must be run on SystemRescue / Arch Linux" - exit 1 -fi -if [ $(id -u) -ne 0 ] -then - echo "$0: error: this script must be run as root" - exit 1 -fi -if [ $(awk '$1=="MemAvailable:"{print $2}' /proc/meminfo) -lt 3500000 ] && \ - ! make --version >/dev/null 2>&1 -then - echo "$0: error: not enough RAM available for build, ~4 GB needed" - exit 1 -fi - -set -e -u - -# Use this timestamp for reproducibility -t_epoch=$(stat -c '%Y' /etc/os-release) -t_date=$(date -d @${t_epoch} -R) - -# Are we in an actual live running instance of SystemRescue? -# (The expected alternative is an "archlinux" Docker container) -in_live_system=$(test "_$(findmnt -n -o SOURCE /)" = _airootfs && echo true || echo false) - -srm_file=/tmp/$(. /etc/os-release && echo ${ID}-${VERSION_ID}-zfs.srm) -srm_info=${srm_file%.srm}.txt - -cat <&2 - env "$@" -} - -# Install some prerequisites -run_command pacman -Sy --needed --noconfirm base-devel git - -reinstall_if_missing() -{ - local pkg="$1" - local file="$2" - test -f ${file} || run_command pacman -S --noconfirm ${pkg} -} - -# Many packages in the SystemRescue ISO have had files removed to save on -# space, but we will need to restore some of them to build ZFS. Reinstall -# the following packages as needed: -reinstall_if_missing curl /usr/include/curl/curl.h -reinstall_if_missing glibc /usr/lib/libc_nonshared.a -reinstall_if_missing libtirpc /usr/include/tirpc/rpc/xdr.h -reinstall_if_missing linux-api-headers /usr/include/linux/limits.h -reinstall_if_missing openssl /usr/include/openssl/evp.h -reinstall_if_missing pam /usr/include/security/pam_modules.h -reinstall_if_missing systemd-libs /usr/include/libudev.h -reinstall_if_missing util-linux-libs /usr/include/uuid/uuid.h -reinstall_if_missing zlib /usr/include/zlib.h - -if ${in_live_system} -then - # More disk space is available in a tmpfs - work_dir=/tmp/zfsbuild -else - work_dir=/home/zfsbuild -fi -if [ ! -d ${work_dir} ] -then - run_command useradd --create-home --home-dir ${work_dir} zfsbuild -fi - -run_as_user() -{ - local cmd="$1" - setpriv \ - --reuid=zfsbuild \ - --regid=zfsbuild \ - --init-groups \ - --no-new-privs \ - --reset-env \ - bash -e -x -c "${cmd}" -} - -cd ${work_dir} - -# Build these two essential ZFS packages from the AUR -for aur_pkg in \ - zfs-dkms \ - zfs-utils -do - if [ ! -d ${aur_pkg} ] - then - run_as_user "git clone https://aur.archlinux.org/${aur_pkg}.git" - fi - if [ ! -f ${aur_pkg}.repro.stamp -a ${use_latest_zfs} = no ] - then - run_as_user "cd ${aur_pkg} && rev=\$(git rev-list -n 1 --first-parent --before=@${t_epoch} HEAD) && git checkout \${rev}" - touch ${aur_pkg}.repro.stamp - fi - if [ ! -f ${aur_pkg}.pgp.stamp ] - then - run_as_user ". ${aur_pkg}/PKGBUILD && gpg --recv-keys \${validpgpkeys[*]}" - touch ${aur_pkg}.pgp.stamp - fi - if [ ! -f ${aur_pkg}.build.stamp ] - then - run_as_user "cd ${aur_pkg} && makepkg --clean" - run_as_user "cd ${aur_pkg} && git rev-parse HEAD" > ${aur_pkg}.commit.txt - touch ${aur_pkg}.build.stamp - fi -done - -# Install more prerequisites -run_command pacman -S --needed --noconfirm \ - dkms linux-lts linux-lts-headers squashfs-tools - -# Tweak DKMS configuration -x=/etc/dkms/framework.conf -if ! grep -q '^dkms_tree=' $x && ${in_live_system} -then - # More disk space is available in a tmpfs - mkdir -p /tmp/dkms - (echo; echo 'dkms_tree="/tmp/dkms"') >> $x -fi -if ! grep -q '^sign_file=' $x -then - # Do not sign the kernel modules as this breaks reproducibility - (echo; echo 'sign_file="/nope"') >> $x -fi - -if ! ${in_live_system} -then - # The Docker container does not extract/install man pages from - # packages, but we want the SRM to include those - perl -pi -e '/^NoExtract\s*=/ && m! usr/share/man/! and s/^/#/' \ - /etc/pacman.conf -fi - -# Kernel module builds need the kernel file in the standard location -x=/run/archiso/bootmnt/sysresccd/boot/x86_64/vmlinuz -y=/boot/vmlinuz-linux-lts -if [ -f $x -a ! -f $y ] -then - run_command ln -s $x $y -fi - -# Do not pass the -j option to pahole(1) as it breaks reproducibility -# https://github.com/acmel/dwarves/issues/42 -perl -pi -e 's/^(\s*)(extra_paholeopt=".* -j")/${1}true $2/' \ - /lib/modules/*-lts/build/scripts/pahole-flags.sh - -# Install the newly-built ZFS packages, and let DKMS do its thing -run_command pacman -U --needed --noconfirm \ - zfs-utils/zfs-utils-*.pkg.tar.zst \ - zfs-dkms/zfs-dkms-*.pkg.tar.zst - -# Generate list of files in the zfs-utils package -pacman -Ql zfs-utils \ -| sed 's!^zfs-utils /!!' \ -| grep -v '/$' \ -> zfs-utils.files.txt - -# mksquashfs(1) uses this -export SOURCE_DATE_EPOCH=${t_epoch} - -# Create the SRM file -rm -f ${srm_file} -(cd / && tar cf - --sort=name \ - usr/lib/modules/*-lts/updates/dkms/* \ - usr/lib/modules/*-lts/modules.* \ - -T ${work_dir}/zfs-utils.files.txt) \ -| run_command mksquashfs - ${srm_file} -comp xz -tar -exports - -tee ${srm_info} </dev/null || echo unknown) -zfs-utils version: $(. zfs-utils/PKGBUILD && echo ${pkgver}-${pkgrel}) -* AUR Git commit : $(cat zfs-utils.commit.txt 2>/dev/null || echo unknown) -SRM file location: ${srm_file} -SRM file size : $(stat -c '%s' ${srm_file}) bytes -SRM file SHA-1 : $(sha1sum < ${srm_file} | awk '{print $1}') -SRM file SHA-512 : $(sha512sum < ${srm_file} | awk '{print $1}') - -Please visit https://www.system-rescue.org/Modules/ for instructions on -loading the SRM file into a running instance of SystemRescue. - -END - -# EOF diff --git a/build.sh b/build.sh index 26428dc..e590683 100755 --- a/build.sh +++ b/build.sh @@ -5,12 +5,13 @@ set -e -u script_path=$(readlink -f ${0%/*}) version_file="${script_path}/VERSION" -iso_name=systemrescue +consoles='console=ttyS0,115200 console=tty0' +iso_application="SystemRescue+ZFS" iso_version="$(<${version_file})" -iso_mainver="${iso_version%-*}" -iso_label="RESCUE${iso_mainver//.}" -iso_publisher="SystemRescue " -iso_application="SystemRescue" +iso_name=$(echo "$iso_application" | tr '[:upper:]' '[:lower:]') +iso_label="${iso_application}_${iso_version}" +iso_url="https://github.com/nchevsky/systemrescue-zfs" +iso_publisher="Nick Chevsky <${iso_url}>" install_dir=sysresccd image_info_file="${install_dir}/.imageinfo" work_dir=work @@ -26,7 +27,7 @@ snapshot_date="" default_kernel_param="iomem=relaxed" documentation_dir="/usr/share/sysrescue/html" mkinitcpio_comp_algo="xz" -mkinitcpio_comp_opts="--threads=0 --verbose" +mkinitcpio_comp_opts="-9e --threads=0 --verbose" mkinitcpio_comp_algo_devel="zstd" mkinitcpio_comp_opts_devel="--threads=0 --fast --verbose" @@ -42,7 +43,6 @@ case ${arch} in mirrorlist_url='https://archlinux.org/mirrorlist/?country=all&protocol=http&use_mirror_status=on' archive_prefix='https://archive.archlinux.org/repos/' archive_mirrorlist_file='mirrorlist-snapshot-x86_64' - mkinitcpio_comp_opts="--threads=0 --lzma2=preset=9e,dict=128MiB --verbose" ;; i686) efiarch="i386-efi" @@ -51,7 +51,6 @@ case ${arch} in mirrorlist_url='https://archlinux32.org/mirrorlist/?country=all&protocol=http&use_mirror_status=on' archive_prefix='https://archive.archlinux32.org/repos/' archive_mirrorlist_file='mirrorlist-snapshot-i686' - mkinitcpio_comp_opts="--threads=0 --verbose" ;; *) echo "ERROR: Unsupported architecture: '${arch}'" @@ -129,9 +128,14 @@ determine_snapshot_date() { # Helper function to run make_*() only one time per architecture. run_once() { + echo -e "\n================================================================================" + echo -e "$1\n================================================================================" if [[ ! -e ${work_dir}/build.${1} ]]; then $1 touch ${work_dir}/build.${1} + echo -e "\nDone." + else + echo -e "\nSkipped. To rebuild this step, delete ${work_dir}/build.${1}." fi } @@ -161,8 +165,8 @@ make_documentation() { fi # is the documentation up to date? ignore for beta and test versions - if ! echo "${iso_version}" | grep -i -q "beta\|test" && \ - ! grep -q "${iso_version}" website/content/Changes-x86/_index.md; then + if ! echo "${iso_version%+*}" | grep -i -q "beta\|test" && \ + ! grep -q "${iso_version%+*}" website/content/Changes-x86/_index.md; then echo "ERROR: current version not in changelog. Did you update the website submodule?" exit 1 fi @@ -173,7 +177,7 @@ make_documentation() { rm -rf website/content/Download # parameters are all relative to --source dir - /usr/bin/hugo --source "website/" --config "config-offline.toml" --gc --verbose \ + /usr/bin/hugo --source "website/" --config "config-offline.toml" --gc --logLevel info \ --destination "../${work_dir}/${arch}/airootfs/${documentation_dir}" RET=$? @@ -201,7 +205,8 @@ make_customize_airootfs() { cp ${version_file} ${work_dir}/${arch}/airootfs/root/version - sed "s|%ARCHISO_LABEL%|${iso_label}|g; + sed "s|%ISO_APPLICATION%|${iso_application}|g; + s|%ISO_URL%|${iso_url}|g; s|%ISO_VERSION%|${iso_version}|g; s|%ISO_ARCH%|${arch}|g; s|%INSTALL_DIR%|${install_dir}|g" \ @@ -304,6 +309,8 @@ make_syslinux() { mkdir -p ${work_dir}/iso/${install_dir}/boot/syslinux for _cfg in ${script_path}/syslinux/*.cfg; do sed "s|%ARCHISO_LABEL%|${iso_label}|g; + s|%CONSOLES%|${consoles}|g; + s|%ISO_APPLICATION%|${iso_application}|g; s|%ISO_VERSION%|${iso_version}|g; s|%ISO_ARCH%|${arch}|g; s|%DEFAULT_KERNEL_PARAM%|${default_kernel_param}|g; @@ -335,6 +342,8 @@ make_efi() { cp -a /usr/lib/grub/${efiarch} ${work_dir}/iso/boot/grub/ cp ${script_path}/efiboot/grub/font.pf2 ${work_dir}/iso/boot/grub/ sed "s|%ARCHISO_LABEL%|${iso_label}|g; + s|%CONSOLES%|${consoles}|g; + s|%ISO_APPLICATION%|${iso_application}|g; s|%ISO_VERSION%|${iso_version}|g; s|%ISO_ARCH%|${arch}|g; s|%DEFAULT_KERNEL_PARAM%|${default_kernel_param}|g; @@ -394,7 +403,7 @@ make_imageinfo() { echo "# SystemRescue imageinfo - used by systemrescue-usbwriter to check compatibility" >"${work_dir}/iso/${image_info_file}" echo "NAME=SystemRescue" >>"${work_dir}/iso/${image_info_file}" - echo "VERSION=${iso_version}" >>"${work_dir}/iso/${image_info_file}" + echo "VERSION=${iso_version%+*}" >>"${work_dir}/iso/${image_info_file}" echo "ARCH=${arch}" >>"${work_dir}/iso/${image_info_file}" echo "SYSLINUX_VERSION=${syslinux_ver}" >>"${work_dir}/iso/${image_info_file}" echo "" >>"${work_dir}/iso/${image_info_file}" diff --git a/efiboot/grub/grubsrcd.cfg b/efiboot/grub/grubsrcd.cfg index 9435c30..b9d3811 100644 --- a/efiboot/grub/grubsrcd.cfg +++ b/efiboot/grub/grubsrcd.cfg @@ -10,7 +10,7 @@ if [ -z "$srcd_skip_init" ]; then # Display settings if loadfont /boot/grub/font.pf2 ; then - set gfxmode=640x480 + set gfxmode=800x600,auto set color_normal=black/cyan set color_highlight=black/light-gray set menu_color_normal=black/cyan @@ -39,60 +39,75 @@ fi # like $archiso_param to be visible in the GRUB editor eval " -menuentry 'Boot SystemRescue using default options' { +menuentry 'Boot %ISO_APPLICATION% %ISO_VERSION% using default options' { set gfxpayload=keep - linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% + echo 'Loading kernel...' + linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% %CONSOLES% + echo 'Loading initramfs...' initrd /%INSTALL_DIR%/boot/intel_ucode.img /%INSTALL_DIR%/boot/amd_ucode.img /%INSTALL_DIR%/boot/%ISO_ARCH%/sysresccd.img + echo 'Booting...' } -menuentry 'Boot SystemRescue and copy system to RAM (copytoram)' { +menuentry 'Boot %ISO_APPLICATION% %ISO_VERSION% and copy system to RAM (copytoram)' { set gfxpayload=keep - linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% copytoram + echo 'Loading kernel...' + linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% %CONSOLES% copytoram + echo 'Loading initramfs...' initrd /%INSTALL_DIR%/boot/intel_ucode.img /%INSTALL_DIR%/boot/amd_ucode.img /%INSTALL_DIR%/boot/%ISO_ARCH%/sysresccd.img + echo 'Booting...' } -menuentry 'Boot SystemRescue and verify integrity of the medium (checksum)' { +menuentry 'Boot %ISO_APPLICATION% %ISO_VERSION% and verify integrity of the medium (checksum)' { set gfxpayload=keep - linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% checksum + echo 'Loading kernel...' + linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% %CONSOLES% checksum + echo 'Loading initramfs...' initrd /%INSTALL_DIR%/boot/intel_ucode.img /%INSTALL_DIR%/boot/amd_ucode.img /%INSTALL_DIR%/boot/%ISO_ARCH%/sysresccd.img + echo 'Booting...' } -menuentry 'Boot SystemRescue using basic display drivers (nomodeset)' { +menuentry 'Boot %ISO_APPLICATION% %ISO_VERSION% using basic display drivers (nomodeset)' { set gfxpayload=keep - linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% nomodeset + echo 'Loading kernel...' + linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% %CONSOLES% nomodeset + echo 'Loading initramfs...' initrd /%INSTALL_DIR%/boot/intel_ucode.img /%INSTALL_DIR%/boot/amd_ucode.img /%INSTALL_DIR%/boot/%ISO_ARCH%/sysresccd.img + echo 'Booting...' } -menuentry 'Boot SystemRescue with serial console (ttyS0,115200n8)' { +menuentry 'Boot %ISO_APPLICATION% %ISO_VERSION% without activating md raid or lvm (nomdlvm)' { set gfxpayload=keep - linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% console=tty0 console=ttyS0,115200n8 - initrd /%INSTALL_DIR%/boot/intel_ucode.img /%INSTALL_DIR%/boot/amd_ucode.img /%INSTALL_DIR%/boot/%ISO_ARCH%/sysresccd.img -} - -menuentry 'Boot SystemRescue, do not activate md raid or lvm (nomdlvm)' { - set gfxpayload=keep - linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% nomdlvm + echo 'Loading kernel...' + linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% %CONSOLES% nomdlvm + echo 'Loading initramfs...' initrd /%INSTALL_DIR%/boot/intel_ucode.img /%INSTALL_DIR%/boot/amd_ucode.img /%INSTALL_DIR%/boot/%ISO_ARCH%/sysresccd.img + echo 'Booting...' } menuentry 'Boot a Linux operating system installed on the disk (findroot)' { set gfxpayload=keep - linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% findroot + echo 'Loading kernel...' + linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% %CONSOLES% findroot + echo 'Loading initramfs...' initrd /%INSTALL_DIR%/boot/intel_ucode.img /%INSTALL_DIR%/boot/amd_ucode.img /%INSTALL_DIR%/boot/%ISO_ARCH%/sysresccd.img + echo 'Booting...' } menuentry 'Stop during the boot process before mounting the root filesystem' { set gfxpayload=keep - linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% break + echo 'Loading kernel...' + linux /%INSTALL_DIR%/boot/%ISO_ARCH%/vmlinuz archisobasedir=%INSTALL_DIR% $archiso_param %DEFAULT_KERNEL_PARAM% %CONSOLES% break + echo 'Loading initramfs...' initrd /%INSTALL_DIR%/boot/intel_ucode.img /%INSTALL_DIR%/boot/amd_ucode.img /%INSTALL_DIR%/boot/%ISO_ARCH%/sysresccd.img + echo 'Booting...' } source /boot/grub/custom.cfg menuentry 'Memtest86+ memory tester for UEFI' { insmod fat - set gfxpayload=800x600,1024x768 - linux /EFI/memtest.efi keyboard=both + set gfxpayload=640x480,800x600,1024x768,auto + linux /EFI/memtest.efi keyboard=both %CONSOLES% } menuentry 'Start EFI Shell' { diff --git a/packages b/packages index b771be0..92b2c1f 100644 --- a/packages +++ b/packages @@ -1,5 +1,4 @@ acpi -alsa-utils amd-ucode archinstall arch-install-scripts @@ -57,7 +56,6 @@ expac ext4magic f2fs-tools fatresize -featherpad file findutils firefox-esr-bin @@ -67,7 +65,7 @@ fsarchiver galculator gawk geany -ghex +systemrescue+zfs/ghex git gnu-netcat gnupg @@ -110,11 +108,12 @@ libisoburn libldm libvncserver linux-atm -linux-firmware +systemrescue+zfs/linux-firmware linux-firmware-bnx2x linux-firmware-qlogic linux-firmware-marvell linux-lts +linux-lts-headers lm_sensors localepurge lshw @@ -142,6 +141,7 @@ mkinitcpio mkinitcpio-nfs-utils mlocate moreutils +mousepad ms-sys mtools mtr @@ -179,7 +179,6 @@ parted partimage pass patch -pavucontrol pciutils pcre perl @@ -194,7 +193,6 @@ ppp pptpclient procps-ng psmisc -pulseaudio-alsa pv python python-llfuse @@ -203,7 +201,7 @@ python-pythondialog python-yaml qemu-guest-agent qemu-img -qtpass +systemrescue+zfs/qtpass rclone rdesktop rdiff-backup @@ -239,12 +237,10 @@ sudo syslinux sysstat tar -tcl tcpdump testdisk thunar-archive-plugin timeshift -tk tmux traceroute tree @@ -253,7 +249,6 @@ udftools udpcast unrar unzip -usb_modeswitch usbutils util-linux vi @@ -273,9 +268,7 @@ wqy-microhei wvdial x11vnc xarchiver -xfburn xfce4 -xfce4-pulseaudio-plugin xfce4-screenshooter xfce4-taskmanager xfsdump @@ -292,6 +285,7 @@ yay yubikey-manager yubikey-personalization-gui zerofree +zfs-dkms zip zsh zstd diff --git a/pacman.conf b/pacman.conf index e147c94..633357d 100644 --- a/pacman.conf +++ b/pacman.conf @@ -76,6 +76,13 @@ Server = https://sysrescuerepo.system-rescue.org/$arch SigLevel = Optional TrustAll # ==== END sysrescuerepo ==== +[archzfs] +Server = https://github.com/archzfs/archzfs/releases/download/experimental +SigLevel = TrustAll + +[systemrescue+zfs] +Server = http://oss.blazis.com/pacman/$repo/$arch + [core] Include = /etc/pacman.d/mirrorlist diff --git a/syslinux/sysresccd_head.cfg b/syslinux/sysresccd_head.cfg index 231f348..18c609c 100644 --- a/syslinux/sysresccd_head.cfg +++ b/syslinux/sysresccd_head.cfg @@ -1,6 +1,6 @@ SERIAL 0 115200 UI boot/syslinux/vesamenu.c32 -MENU TITLE SYSTEM-RESCUE %ISO_VERSION% %ISO_ARCH% (www.system-rescue.org) +MENU TITLE %ISO_APPLICATION% %ISO_VERSION% MENU BACKGROUND #c000a8a8 TIMEOUT 300 diff --git a/syslinux/sysresccd_pxe.cfg b/syslinux/sysresccd_pxe.cfg index f9f3187..f99049f 100644 --- a/syslinux/sysresccd_pxe.cfg +++ b/syslinux/sysresccd_pxe.cfg @@ -8,7 +8,7 @@ ENDTEXT MENU LABEL Boot SystemRescue (NBD) LINUX boot/%ISO_ARCH%/vmlinuz INITRD boot/intel_ucode.img,boot/amd_ucode.img,boot/%ISO_ARCH%/sysresccd.img -APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% archiso_nbd_srv=${pxeserver} %DEFAULT_KERNEL_PARAM% +APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% archiso_nbd_srv=${pxeserver} %DEFAULT_KERNEL_PARAM% %CONSOLES% SYSAPPEND 3 LABEL sysresccd_nfs @@ -19,7 +19,7 @@ ENDTEXT MENU LABEL Boot SystemRescue (NFS) LINUX boot/%ISO_ARCH%/vmlinuz INITRD boot/intel_ucode.img,boot/amd_ucode.img,boot/%ISO_ARCH%/sysresccd.img -APPEND archisobasedir=%INSTALL_DIR% archiso_nfs_srv=${pxeserver}:/run/sysresccd/bootmnt %DEFAULT_KERNEL_PARAM% +APPEND archisobasedir=%INSTALL_DIR% archiso_nfs_srv=${pxeserver}:/run/sysresccd/bootmnt %DEFAULT_KERNEL_PARAM% %CONSOLES% SYSAPPEND 3 LABEL sysresccd_http @@ -30,7 +30,7 @@ ENDTEXT MENU LABEL Boot SystemRescue (HTTP) LINUX boot/%ISO_ARCH%/vmlinuz INITRD boot/intel_ucode.img,boot/amd_ucode.img,boot/%ISO_ARCH%/sysresccd.img -APPEND archisobasedir=%INSTALL_DIR% archiso_http_srv=http://${pxeserver}/ %DEFAULT_KERNEL_PARAM% +APPEND archisobasedir=%INSTALL_DIR% archiso_http_srv=http://${pxeserver}/ %DEFAULT_KERNEL_PARAM% %CONSOLES% SYSAPPEND 3 INCLUDE boot/syslinux/sysresccd_tail.cfg diff --git a/syslinux/sysresccd_sys.cfg b/syslinux/sysresccd_sys.cfg index 146b9cc..80e1e50 100644 --- a/syslinux/sysresccd_sys.cfg +++ b/syslinux/sysresccd_sys.cfg @@ -7,7 +7,7 @@ ENDTEXT MENU LABEL Boot SystemRescue using default options LINUX boot/%ISO_ARCH%/vmlinuz INITRD boot/intel_ucode.img,boot/amd_ucode.img,boot/%ISO_ARCH%/sysresccd.img -APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% +APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% %CONSOLES% LABEL sysresccd_copytoram TEXT HELP @@ -16,7 +16,7 @@ ENDTEXT MENU LABEL Boot SystemRescue and copy system to RAM (copytoram) LINUX boot/%ISO_ARCH%/vmlinuz INITRD boot/intel_ucode.img,boot/amd_ucode.img,boot/%ISO_ARCH%/sysresccd.img -APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% copytoram +APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% %CONSOLES% copytoram LABEL sysresccd_checksum TEXT HELP @@ -25,7 +25,7 @@ ENDTEXT MENU LABEL Boot SystemRescue and verify integrity of the medium (checksum) LINUX boot/%ISO_ARCH%/vmlinuz INITRD boot/intel_ucode.img,boot/amd_ucode.img,boot/%ISO_ARCH%/sysresccd.img -APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% checksum +APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% %CONSOLES% checksum LABEL sysresccd_nomodeset TEXT HELP @@ -34,16 +34,7 @@ ENDTEXT MENU LABEL Boot SystemRescue using basic display drivers (nomodeset) LINUX boot/%ISO_ARCH%/vmlinuz INITRD boot/intel_ucode.img,boot/amd_ucode.img,boot/%ISO_ARCH%/sysresccd.img -APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% nomodeset - -LABEL sysresccd-serial -TEXT HELP -Use a serial console. -ENDTEXT -MENU LABEL Boot SystemRescue with serial console (ttyS0,115200n8) -LINUX boot/%ISO_ARCH%/vmlinuz -INITRD boot/intel_ucode.img,boot/amd_ucode.img,boot/%ISO_ARCH%/sysresccd.img -APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% console=tty0 console=ttyS0,115200n8 +APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% %CONSOLES% nomodeset LABEL sysresccd-nomdlvm TEXT HELP @@ -53,7 +44,7 @@ ENDTEXT MENU LABEL Boot SystemRescue, do not activate md raid or lvm (nomdlvm) LINUX boot/%ISO_ARCH%/vmlinuz INITRD boot/intel_ucode.img,boot/amd_ucode.img,boot/%ISO_ARCH%/sysresccd.img -APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% nomdlvm +APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% %CONSOLES% nomdlvm LABEL sysresccd_findroot TEXT HELP @@ -62,7 +53,7 @@ ENDTEXT MENU LABEL Boot a Linux operating system installed on the disk (findroot) LINUX boot/%ISO_ARCH%/vmlinuz INITRD boot/intel_ucode.img,boot/amd_ucode.img,boot/%ISO_ARCH%/sysresccd.img -APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% findroot +APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% %CONSOLES% findroot LABEL sysresccd_break TEXT HELP @@ -71,7 +62,7 @@ ENDTEXT MENU LABEL Stop during the boot process before mounting the root filesystem LINUX boot/%ISO_ARCH%/vmlinuz INITRD boot/intel_ucode.img,boot/amd_ucode.img,boot/%ISO_ARCH%/sysresccd.img -APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% break +APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% %DEFAULT_KERNEL_PARAM% %CONSOLES% break INCLUDE boot/syslinux/sysresccd_custom.cfg diff --git a/syslinux/sysresccd_tail.cfg b/syslinux/sysresccd_tail.cfg index 605c2e6..4ec9e14 100644 --- a/syslinux/sysresccd_tail.cfg +++ b/syslinux/sysresccd_tail.cfg @@ -11,6 +11,7 @@ APPEND hd0 0 LABEL memtest MENU LABEL Run Memtest86+ (RAM test) LINUX boot/memtest +APPEND %CONSOLES% # http://hdt-project.org/ #LABEL hdt