From 0354f47ecfbec80639d132b2405140874654abf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= Date: Tue, 2 Dec 2025 17:20:28 +0100 Subject: [PATCH] Make console keymaps configurable through `localectl` (#4424) For users having non-English, and especially non-qwerty layouts, using the host shell can be very awkward. There was no option to change the keymaps as they haven't been installed in the OS, and the persistence couldn't have been achieved because of read-only /etc. With upstream patch merged in #4224, we have an option to put /etc/vconsole.conf to a writable location and use the same approach as in the timezone PR. This is needed because even if we only bind-mounted the file from the overlay directory, the Systemd services which start early will still refer to the inode on the read-only FS. Also, gzip is required as current version of kbd in Buildroot (v2.6.4) always compresses the keymaps using gzip. We can get rid of this after we bump to kbd v2.9.0 [1] or newer. The overall bloat in local build of the OS is slightly over 1 MiB, so it is acceptable. With these changes, the `localectl set-keymap` command can be used to use any available keymap from the installed `kbd` package (refer to `localectl list-keymaps` for complete lists) and persist it between reboots. [1] https://github.com/legionus/kbd/releases/tag/v2.9.0 Fixes #1775 --- buildroot-external/configs/generic_aarch64_defconfig | 3 ++- buildroot-external/configs/generic_x86_64_defconfig | 3 ++- buildroot-external/configs/green_defconfig | 3 ++- buildroot-external/configs/khadas_vim3_defconfig | 3 ++- buildroot-external/configs/odroid_c2_defconfig | 3 ++- buildroot-external/configs/odroid_c4_defconfig | 3 ++- buildroot-external/configs/odroid_m1_defconfig | 3 ++- buildroot-external/configs/odroid_m1s_defconfig | 3 ++- buildroot-external/configs/odroid_n2_defconfig | 3 ++- buildroot-external/configs/ova_defconfig | 3 ++- buildroot-external/configs/rpi3_64_defconfig | 3 ++- buildroot-external/configs/rpi4_64_defconfig | 3 ++- buildroot-external/configs/rpi5_64_defconfig | 3 ++- buildroot-external/configs/yellow_defconfig | 3 ++- .../{localtime.conf => etc-environment-overrides.conf} | 1 + .../systemd/system/systemd-localed.service.d/vconsole.conf | 3 +++ .../system/systemd-vconsole-setup.service.d/vconsole.conf | 2 ++ buildroot-external/rootfs-overlay/usr/libexec/hassos-overlay | 5 +++++ buildroot-external/scripts/post-build.sh | 1 + buildroot-external/scripts/rootfs-layer.sh | 5 +++++ 20 files changed, 45 insertions(+), 14 deletions(-) rename buildroot-external/rootfs-overlay/usr/lib/systemd/system.conf.d/{localtime.conf => etc-environment-overrides.conf} (50%) create mode 100644 buildroot-external/rootfs-overlay/usr/lib/systemd/system/systemd-localed.service.d/vconsole.conf create mode 100644 buildroot-external/rootfs-overlay/usr/lib/systemd/system/systemd-vconsole-setup.service.d/vconsole.conf diff --git a/buildroot-external/configs/generic_aarch64_defconfig b/buildroot-external/configs/generic_aarch64_defconfig index 3c5506382..f4b42b330 100644 --- a/buildroot-external/configs/generic_aarch64_defconfig +++ b/buildroot-external/configs/generic_aarch64_defconfig @@ -27,6 +27,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_JQ=y BR2_PACKAGE_CIFS_UTILS=y @@ -148,10 +149,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/generic_x86_64_defconfig b/buildroot-external/configs/generic_x86_64_defconfig index 105e11644..5fc031ff6 100644 --- a/buildroot-external/configs/generic_x86_64_defconfig +++ b/buildroot-external/configs/generic_x86_64_defconfig @@ -27,6 +27,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_JQ=y BR2_PACKAGE_CIFS_UTILS=y @@ -150,10 +151,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/green_defconfig b/buildroot-external/configs/green_defconfig index 67903e59a..066dbd781 100644 --- a/buildroot-external/configs/green_defconfig +++ b/buildroot-external/configs/green_defconfig @@ -31,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_JQ=y BR2_PACKAGE_CIFS_UTILS=y @@ -126,10 +127,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/khadas_vim3_defconfig b/buildroot-external/configs/khadas_vim3_defconfig index 409d3b100..8884b7f66 100644 --- a/buildroot-external/configs/khadas_vim3_defconfig +++ b/buildroot-external/configs/khadas_vim3_defconfig @@ -31,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_JQ=y BR2_PACKAGE_CIFS_UTILS=y @@ -121,10 +122,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/odroid_c2_defconfig b/buildroot-external/configs/odroid_c2_defconfig index 79308035e..d5d3ee7b0 100644 --- a/buildroot-external/configs/odroid_c2_defconfig +++ b/buildroot-external/configs/odroid_c2_defconfig @@ -31,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_JQ=y BR2_PACKAGE_CIFS_UTILS=y @@ -121,10 +122,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/odroid_c4_defconfig b/buildroot-external/configs/odroid_c4_defconfig index 56b9bf149..06f184f97 100644 --- a/buildroot-external/configs/odroid_c4_defconfig +++ b/buildroot-external/configs/odroid_c4_defconfig @@ -31,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_JQ=y BR2_PACKAGE_CIFS_UTILS=y @@ -119,10 +120,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/odroid_m1_defconfig b/buildroot-external/configs/odroid_m1_defconfig index 2e726ec7f..03efc87ea 100644 --- a/buildroot-external/configs/odroid_m1_defconfig +++ b/buildroot-external/configs/odroid_m1_defconfig @@ -31,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_JQ=y BR2_PACKAGE_CIFS_UTILS=y @@ -121,10 +122,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/odroid_m1s_defconfig b/buildroot-external/configs/odroid_m1s_defconfig index 8d537a68c..e8b513bb6 100644 --- a/buildroot-external/configs/odroid_m1s_defconfig +++ b/buildroot-external/configs/odroid_m1s_defconfig @@ -31,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_JQ=y BR2_PACKAGE_CIFS_UTILS=y @@ -121,10 +122,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/odroid_n2_defconfig b/buildroot-external/configs/odroid_n2_defconfig index c4b224938..8427639fd 100644 --- a/buildroot-external/configs/odroid_n2_defconfig +++ b/buildroot-external/configs/odroid_n2_defconfig @@ -31,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_JQ=y BR2_PACKAGE_CIFS_UTILS=y @@ -121,10 +122,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/ova_defconfig b/buildroot-external/configs/ova_defconfig index b01c774e2..71010e51e 100644 --- a/buildroot-external/configs/ova_defconfig +++ b/buildroot-external/configs/ova_defconfig @@ -30,6 +30,7 @@ BR2_PACKAGE_LINUX_TOOLS_HV_VSS_DAEMON=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_JQ=y BR2_PACKAGE_CIFS_UTILS=y @@ -151,10 +152,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/rpi3_64_defconfig b/buildroot-external/configs/rpi3_64_defconfig index 8e6ec4664..213b8cbc2 100644 --- a/buildroot-external/configs/rpi3_64_defconfig +++ b/buildroot-external/configs/rpi3_64_defconfig @@ -30,6 +30,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_JQ=y BR2_PACKAGE_CIFS_UTILS=y @@ -125,10 +126,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/rpi4_64_defconfig b/buildroot-external/configs/rpi4_64_defconfig index ee25b85f3..83c82c58f 100644 --- a/buildroot-external/configs/rpi4_64_defconfig +++ b/buildroot-external/configs/rpi4_64_defconfig @@ -30,6 +30,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_STRESS_NG=y BR2_PACKAGE_JQ=y @@ -126,10 +127,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/rpi5_64_defconfig b/buildroot-external/configs/rpi5_64_defconfig index 50c773ce1..901bed01a 100644 --- a/buildroot-external/configs/rpi5_64_defconfig +++ b/buildroot-external/configs/rpi5_64_defconfig @@ -32,6 +32,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_STRESS_NG=y BR2_PACKAGE_JQ=y @@ -125,10 +126,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/configs/yellow_defconfig b/buildroot-external/configs/yellow_defconfig index cd5c272da..fdf890bc6 100644 --- a/buildroot-external/configs/yellow_defconfig +++ b/buildroot-external/configs/yellow_defconfig @@ -31,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y BR2_PACKAGE_V4L2LOOPBACK=y +BR2_PACKAGE_GZIP=y BR2_PACKAGE_PIGZ=y BR2_PACKAGE_STRESS_NG=y BR2_PACKAGE_JQ=y @@ -129,10 +130,10 @@ BR2_PACKAGE_RAUC_NETWORK=y BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE=y BR2_PACKAGE_SYSTEMD_COREDUMP=y # BR2_PACKAGE_SYSTEMD_HWDB is not set +BR2_PACKAGE_SYSTEMD_LOCALED=y BR2_PACKAGE_SYSTEMD_LOGIND=y # BR2_PACKAGE_SYSTEMD_NETWORKD is not set BR2_PACKAGE_SYSTEMD_RANDOMSEED=y -BR2_PACKAGE_SYSTEMD_VCONSOLE_DEFAULT_KEYMAP="" BR2_PACKAGE_UTIL_LINUX_LOGIN=y BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y BR2_PACKAGE_UTIL_LINUX_PARTX=y diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system.conf.d/localtime.conf b/buildroot-external/rootfs-overlay/usr/lib/systemd/system.conf.d/etc-environment-overrides.conf similarity index 50% rename from buildroot-external/rootfs-overlay/usr/lib/systemd/system.conf.d/localtime.conf rename to buildroot-external/rootfs-overlay/usr/lib/systemd/system.conf.d/etc-environment-overrides.conf index 3b2719a78..ead6a0273 100644 --- a/buildroot-external/rootfs-overlay/usr/lib/systemd/system.conf.d/localtime.conf +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system.conf.d/etc-environment-overrides.conf @@ -1,2 +1,3 @@ [Manager] ManagerEnvironment=SYSTEMD_ETC_LOCALTIME=/mnt/overlay/etc/localtime +ManagerEnvironment=SYSTEMD_ETC_VCONSOLE_CONF=/mnt/overlay/etc/vconsole.conf diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/systemd-localed.service.d/vconsole.conf b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/systemd-localed.service.d/vconsole.conf new file mode 100644 index 000000000..5b1975a94 --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/systemd-localed.service.d/vconsole.conf @@ -0,0 +1,3 @@ +[Service] +Environment=SYSTEMD_ETC_VCONSOLE_CONF=/mnt/overlay/etc/vconsole.conf +ReadWritePaths=/etc /mnt/overlay/etc diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/systemd-vconsole-setup.service.d/vconsole.conf b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/systemd-vconsole-setup.service.d/vconsole.conf new file mode 100644 index 000000000..3f2881238 --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/systemd-vconsole-setup.service.d/vconsole.conf @@ -0,0 +1,2 @@ +[Service] +Environment=SYSTEMD_ETC_VCONSOLE_CONF=/mnt/overlay/etc/vconsole.conf diff --git a/buildroot-external/rootfs-overlay/usr/libexec/hassos-overlay b/buildroot-external/rootfs-overlay/usr/libexec/hassos-overlay index ded11ea1c..d5343e015 100755 --- a/buildroot-external/rootfs-overlay/usr/libexec/hassos-overlay +++ b/buildroot-external/rootfs-overlay/usr/libexec/hassos-overlay @@ -22,3 +22,8 @@ fi if [ ! -L /mnt/overlay/etc/localtime ]; then ln -sf /usr/share/zoneinfo/Etc/UTC /mnt/overlay/etc/localtime fi + +# Console +if [ ! -f /mnt/overlay/etc/vconsole.conf ]; then + echo "KEYMAP=us" > /mnt/overlay/etc/vconsole.conf +fi diff --git a/buildroot-external/scripts/post-build.sh b/buildroot-external/scripts/post-build.sh index 8346b5272..cb6e1f21d 100755 --- a/buildroot-external/scripts/post-build.sh +++ b/buildroot-external/scripts/post-build.sh @@ -17,6 +17,7 @@ BOARD_DIR=${2} fix_rootfs install_tini_docker setup_localtime +setup_vconsole # Write os-release # shellcheck disable=SC2153 diff --git a/buildroot-external/scripts/rootfs-layer.sh b/buildroot-external/scripts/rootfs-layer.sh index 8dd927e6c..c2c552644 100755 --- a/buildroot-external/scripts/rootfs-layer.sh +++ b/buildroot-external/scripts/rootfs-layer.sh @@ -50,3 +50,8 @@ function setup_localtime() { # localtime is writable through SYSTEMD_ETC_LOCALTIME ln -fs /mnt/overlay/etc/localtime "${TARGET_DIR}/etc/localtime" } + +function setup_vconsole() { + # vconsole.conf is writable through SYSTEMD_ETC_VCONSOLE_CONF + ln -fs /mnt/overlay/etc/vconsole.conf "${TARGET_DIR}/etc/vconsole.conf" +}