[arch-projects] [mkinitcpio] [PATCH] Add sd-vconsole hook.

Thomas Bächler thomas at archlinux.org
Sat Sep 28 17:35:55 EDT 2013


This hook works together with the systemd hook from the systemd
package and requires the add_systemd_unit function.

It launches systemd-vconsole-setup.service in initramfs
and is especially useful to unlock encrypted volumes in
initramfs.
---
 install/sd-vconsole | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)
 create mode 100644 install/sd-vconsole

diff --git a/install/sd-vconsole b/install/sd-vconsole
new file mode 100644
index 0000000..46c3b1e
--- /dev/null
+++ b/install/sd-vconsole
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+get_decompressor() {
+    case "$1" in
+        *.gz)
+            cat=zcat
+            of=${f%.gz}
+            ;;
+        *.bz2)
+            cat=bzcat
+            of=${f%.bz2}
+            ;;
+        *)
+            cat=cat
+            of=$f
+            ;;
+    esac
+}
+
+add_keymap_file() {
+    local cat cmd file rest f of
+
+    while read f; do
+        get_decompressor "$f"
+        while read -r cmd rest; do
+            if [[ $cmd == include ]]; then
+                eval set $rest
+                add_keymap_file "$1"
+            fi
+        done < <($cat "$f")
+        add_dir "${of%/*}"
+        $cat "$f" > "$BUILDROOT/$of"
+    done < <(find /usr/share/kbd/keymaps/ -type f -regex ".*/$1\(\.inc\)?\(\.gz\|\.bz2\)?")
+}
+
+build() {
+    add_systemd_unit systemd-vconsole-setup.service
+    add_binary loadkeys
+    add_binary setfont
+    add_file /etc/vconsole.conf
+
+    # subshell to avoid namespace pollution
+    (
+        shopt -s nullglob
+
+        [[ -s /etc/vconsole.conf ]] && . /etc/vconsole.conf
+
+        [[ $KEYMAP ]] && add_keymap_file $KEYMAP.map
+        [[ $KEYMAP_TOGGLE ]] && add_keymap_file $KEYMAP_TOGGLE.map
+
+        if [[ $FONT ]]; then
+            for file in "/usr/share/kbd/consolefonts/$FONT".@(fnt|psf?(u))?(.gz); do
+                get_decompressor "$file"
+                add_dir "${of%/*}"
+                $cat "$file" > "$BUILDROOT/$of"
+            done
+        fi
+    )
+}
+
+help() {
+    cat <<HELPEOF
+This hook loads keymap(s) specified in vconsole.conf during early userspace.
+HELPEOF
+}
+
+# vim: set ft=sh ts=4 sw=4 et:
-- 
1.8.4



More information about the arch-projects mailing list