mkarchiso: add version information

To date the iso version was used for iso volume information and iso file name.
In my custom builds I do use it a lot more:

* Inside the root fs: The system knows about its own version. I use this to:
  -> report the version to a server (poor man's inventory)
  -> let the system update itself

* On the iso fs: The files are served via rsync, running systems transfer
  version file first to check for available update.

* A grub environment file on the iso fs: Booting the iso from grub allows
  to create cow directory per version:

    loopback loop archlinux.iso
    load_env -f (loop)/arch/grubenv
    linux (loop)/arch/boot/x86_64/vmlinuz-linux ... \
        cow_directory=archlinux/${VERSION} ...

So let's just create these files.
This commit is contained in:
Christian Hesse 2021-01-06 11:59:53 +01:00
parent d153b48613
commit b30d1cad9b
2 changed files with 23 additions and 1 deletions

View File

@ -118,6 +118,19 @@ Optionally install archiso's mkinitcpio hooks:
make install-initcpio
Optional Features
=================
The iso image contains a grub environment block holding the iso version. This allows to boot the iso image from grub
with a version specific cow directory to mitigate overlay clashes.
.. code:: grub
loopback loop archlinux.iso
load_env -f (loop)/arch/grubenv
linux (loop)/arch/boot/x86_64/vmlinuz-linux ... \
cow_directory=archlinux/${VERSION} ...
initrd (loop)/arch/boot/x86_64/initramfs-linux-lts.img
Contribute
==========

View File

@ -834,11 +834,19 @@ _set_overrides() {
_msg_info "Done!"
}
_export_gpg_publickey() {
gpg --batch --output "${work_dir}/pubkey.gpg" --export "${gpg_key}"
}
_make_version() {
install -d -m 0755 -- "${isofs_dir}/${install_dir}"
_msg_info "Creating files with iso version..."
printf '%s\n' "${iso_version}" > "${airootfs_dir}/version"
printf '%s\n' "${iso_version}" > "${isofs_dir}/${install_dir}/version"
printf '%.1024s' "$(printf '# GRUB Environment Block\nVERSION=%s\n%s' "${iso_version}" \
"$(printf '%0.1s' "#"{1..1024})")" > "${isofs_dir}/${install_dir}/grubenv"
_msg_info "Done!"
}
_make_pkglist() {
install -d -m 0755 -- "${isofs_dir}/${install_dir}"
@ -867,6 +875,7 @@ _build_profile() {
[[ -n "${gpg_key}" ]] && _run_once _export_gpg_publickey
_run_once _make_custom_airootfs
_run_once _make_packages
_run_once _make_version
_run_once _make_customize_airootfs
_run_once _make_pkglist
_make_bootmodes