From 6235e900c8a52b17f0ac6e733203c83874374477 Mon Sep 17 00:00:00 2001 From: Zach Dykstra Date: Tue, 12 Sep 2023 21:18:39 -0500 Subject: [PATCH] zfsbootmenu: make zbm.autosize a system hook Vendor a subset of Terminus console fonts and add a basic installation routine to Dracut/mkinitcpio modules. --- LICENSE.fonts | 94 ++++++++++++++++++ dracut/module-setup.sh | 4 + etc/zfsbootmenu/release.conf.d/common.conf | 2 - initcpio/install/zfsbootmenu | 4 + testing/run.sh | 7 -- zfsbootmenu/fonts/ter-v14b.psf | Bin 0 -> 9450 bytes zfsbootmenu/fonts/ter-v16b.psf | Bin 0 -> 10474 bytes zfsbootmenu/fonts/ter-v18b.psf | Bin 0 -> 20221 bytes zfsbootmenu/fonts/ter-v20b.psf | Bin 0 -> 22269 bytes zfsbootmenu/fonts/ter-v22b.psf | Bin 0 -> 24317 bytes zfsbootmenu/fonts/ter-v24b.psf | Bin 0 -> 26365 bytes zfsbootmenu/fonts/ter-v28b.psf | Bin 0 -> 30461 bytes zfsbootmenu/fonts/ter-v32b.psf | Bin 0 -> 34557 bytes .../early-setup.d/20-console-autosize.sh | 35 +++++++ zfsbootmenu/install-helpers.sh | 10 ++ 15 files changed, 147 insertions(+), 9 deletions(-) create mode 100644 LICENSE.fonts create mode 100644 zfsbootmenu/fonts/ter-v14b.psf create mode 100644 zfsbootmenu/fonts/ter-v16b.psf create mode 100644 zfsbootmenu/fonts/ter-v18b.psf create mode 100644 zfsbootmenu/fonts/ter-v20b.psf create mode 100644 zfsbootmenu/fonts/ter-v22b.psf create mode 100644 zfsbootmenu/fonts/ter-v24b.psf create mode 100644 zfsbootmenu/fonts/ter-v28b.psf create mode 100644 zfsbootmenu/fonts/ter-v32b.psf create mode 100755 zfsbootmenu/hooks/early-setup.d/20-console-autosize.sh diff --git a/LICENSE.fonts b/LICENSE.fonts new file mode 100644 index 000000000..516837218 --- /dev/null +++ b/LICENSE.fonts @@ -0,0 +1,94 @@ +Copyright (C) 2020 Dimitar Toshkov Zhekov, +with Reserved Font Name "Terminus Font". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/dracut/module-setup.sh b/dracut/module-setup.sh index 90fcba02c..c1a148638 100644 --- a/dracut/module-setup.sh +++ b/dracut/module-setup.sh @@ -179,4 +179,8 @@ install() { create_zbm_conf create_zbm_profiles create_zbm_traceconf + + if command -v setfont >/dev/null 2>&1; then + install_zbm_fonts && dracut_install setfont + fi } diff --git a/etc/zfsbootmenu/release.conf.d/common.conf b/etc/zfsbootmenu/release.conf.d/common.conf index 1dedaad15..15ce8334f 100644 --- a/etc/zfsbootmenu/release.conf.d/common.conf +++ b/etc/zfsbootmenu/release.conf.d/common.conf @@ -1,5 +1,3 @@ -zfsbootmenu_early_setup+=" /zbm/contrib/20-console-autosize.sh " - # zbm-kcl install_optional_items+=" /zbm/bin/zbm-kcl " diff --git a/initcpio/install/zfsbootmenu b/initcpio/install/zfsbootmenu index b0cb927bc..2a77b49d8 100644 --- a/initcpio/install/zfsbootmenu +++ b/initcpio/install/zfsbootmenu @@ -198,6 +198,10 @@ build() { create_zbm_traceconf create_zbm_entrypoint + if command -v setfont >/dev/null 2>&1; then + install_zbm_fonts && add_binary setfont + fi + add_runscript } diff --git a/testing/run.sh b/testing/run.sh index e592eae25..d269d1c78 100755 --- a/testing/run.sh +++ b/testing/run.sh @@ -238,13 +238,6 @@ fi if [ -n "${DISPLAY_TYPE}" ]; then # Use the indicated graphical display DISPLAY_ARGS=( "-display" "${DISPLAY_TYPE}" ) - - # Add release hooks, supported only under Dracut - if ((DRACUT)); then - cat <<-EOF >> "${TESTDIR}/dracut.conf.d/testing.conf" - zfsbootmenu_early_setup+=" $( realpath -e ../contrib )/20-console-autosize.sh " - EOF - fi else # Suppress graphical display (implies serial mode) DISPLAY_ARGS=( "-nographic" ) diff --git a/zfsbootmenu/fonts/ter-v14b.psf b/zfsbootmenu/fonts/ter-v14b.psf new file mode 100644 index 0000000000000000000000000000000000000000..2eb15ec5b04dd83f9f4f87f54e073b69fa5fcd27 GIT binary patch literal 9450 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 literal 0 HcmV?d00001 diff --git a/zfsbootmenu/fonts/ter-v16b.psf b/zfsbootmenu/fonts/ter-v16b.psf new file mode 100644 index 0000000000000000000000000000000000000000..11e507eb80579c9664888ba1995a629d95706a82 GIT binary patch literal 10474 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 literal 0 HcmV?d00001 diff --git a/zfsbootmenu/fonts/ter-v32b.psf b/zfsbootmenu/fonts/ter-v32b.psf new file mode 100644 index 0000000000000000000000000000000000000000..455875b45598da78833ad5b0d3d6e2b220e2b98e GIT binary patch literal 34557 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/dev/null 2>&1 + if [ "${COLUMNS}" -ge 100 ]; then + zdebug "set font to ${font}, screen is ${COLUMNS}x${LINES}" + break + fi + done +fi diff --git a/zfsbootmenu/install-helpers.sh b/zfsbootmenu/install-helpers.sh index e15936d15..7a4e2ee28 100644 --- a/zfsbootmenu/install-helpers.sh +++ b/zfsbootmenu/install-helpers.sh @@ -234,6 +234,16 @@ install_zbm_docs() { return $ret } +install_zbm_fonts() { + + [ -d "${zfsbootmenu_module_root}/fonts" ] || return 1 + + # Install into a non-standard path so that the Dracut i18n module doesn't stomp over our custom fonts + + for font in "${zfsbootmenu_module_root}/fonts"/*.psf; do + zbm_install_file "${font}" "/usr/share/zfsbootmenu/fonts/${font##*/}" + done +} populate_hook_dir() { local hfile ret hlev