mrrl-system-config

system configuration on top of MRRL
git clone https://ccx.te2000.cz/git/mrrl-system-config
Log | Files | Refs

commit 746b4a30195dc0088030faa4580ec84d5c2b2cd7
parent 13d257c0a8eacfb19427ff92a2d4cf115c0c156b
Author: ccx <ccx@te2000.cz>
Date:   Wed,  6 Mar 2024 21:39:29 +0000

Convert to being built during install

Diffstat:
M.gitignore | 1+
MMakefile | 66++++++++++++++++++++++++++++++++++++++++++++----------------------
Mconfig.aat | 10+++++-----
Aconfig/console_keymap/keymap | 225+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aconfig/console_keymap/vimcompose-latin1 | 97+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aconfig/console_keymap/vimcompose-multibyte | 457+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aconfig/console_keymap/vimcompose-utf8 | 98+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dconfig/etc/fstab | 13-------------
Dconfig/etc/mkinitfs/mkinitfs.conf | 1-
Aconfig/etc/profile.d/run_current_command.sh | 8++++++++
Dconfig/etc/profile.d/slashcommand.sh | 8--------
Aconfig/etc/skel/.config/zsh/.zshenv | 25+++++++++++++++++++++++++
Aconfig/etc/skel/.config/zsh/.zshrc | 93+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dconfig/etc/update-extlinux.conf | 74--------------------------------------------------------------------------
Dconfig/etc/zsh/zshrc.d/90_warn_deploy_ssh_key.zsh | 9---------
Rconfig/etc/hostname -> config/hostname | 0
Dinstall | 52----------------------------------------------------
Mparse_fs.include.awk | 30+++++++++++++++++-------------
Mpostinstall | 177++++++++++++++++++++++++++++++++++---------------------------------------------
Mpostinstall.aat | 35+++++++----------------------------
Dpostinstall.fileset | 164-------------------------------------------------------------------------------
Dpostinstall.rsfilter | 8--------
Mrc-builder.include.awk | 2+-
Mrc-common.aat | 24++++++++++++------------
Ms6-rc-mount.aat | 10+++++-----
Ms6-rc.aat | 69++++++++++++++++++++++++++++++++++++---------------------------------
Ds6-rc.fileset | 990-------------------------------------------------------------------------------
Aversion_path.awk | 43+++++++++++++++++++++++++++++++++++++++++++
28 files changed, 1249 insertions(+), 1540 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,2 +1,3 @@ build +out *.sw[po] diff --git a/Makefile b/Makefile @@ -1,6 +1,7 @@ .PHONY: all clean -ALL_TARGETS:= s6-rc.fileset postinstall.fileset postinstall.rsfilter config/etc/fstab +ALL_TARGETS:= out/s6-rc.fileset out/postinstall.fileset out/postinstall.rsfilter out/etc/fstab +CURRENT:=/run/current AWK:=awk SED:=sed #FILESET_BIN_DIR:=$(dir $(realpath $(shell which fileset.awk))) @@ -14,36 +15,57 @@ clean: build/%.awk: %.aat common.aat mkdir -p build - $(AWK) -f $(AAT_BIN_DIR)/aat.awk "$<" >"$@.new" - $(SED) -f $(AAT_BIN_DIR)/aat_macros.sed -i "$@.new" - mv "$@.new" "$@" + $(AWK) -f $(AAT_BIN_DIR)/aat.awk '$<' >'$@.new' + $(SED) -f $(AAT_BIN_DIR)/aat_macros.sed -i '$@.new' + mv '$@.new' '$@' -%.qawk: %.awk $(DATA_AWK) - cat $(DATA_AWK) >"$@.new" - $(AWK) -f $(AAT_BIN_DIR)/query.awk "$<" >>"$@.new" - mv "$@.new" "$@" +%.qawk: %.awk $(DATA_AWK) version_path.awk + cat $(DATA_AWK) version_path.awk >'$@.new' + $(AWK) -f $(AAT_BIN_DIR)/query.awk '$<' >>'$@.new' + mv '$@.new' '$@' %.rsfilter: %.fileset - RSFILTER="$@.new" fileset "$<" >/dev/null - mv "$@.new" "$@" + RSFILTER='$@.new' fileset '$<' >/dev/null + mv '$@.new' '$@' build/s6-rc-mount.awk: s6-rc-mount.aat parse_fs.include.awk rc-common.aat build/s6-rc.awk: s6-rc.aat parse_fs.include.awk rc-common.aat rc-builder.include.awk build/fstab.awk: fstab.aat parse_fs.include.awk rc-common.aat -s6-rc.fileset: build/s6-rc.qawk build/s6-rc-mount.awk fs build/config - $(AWK) -v sort_tmpfile="./build/s6-rc-mount.awk.tmp_sort" -f build/s6-rc-mount.awk fs >"$@.new" - $(AWK) -v sort_tmpfile="./build/s6-rc.qawk.tmp_sort" -f build/s6-rc.qawk build/config >>"$@.new" - mv "$@.new" "$@" +out/s6-rc.fileset: build/s6-rc.qawk build/s6-rc-mount.awk fs build/config + mkdir -p out + rm -f ./build/execfile + $(AWK) -v sort_tmpfile=./build/s6-rc-mount.awk.tmp_sort -v execfile=./build/execfile -f version_path.awk -f build/s6-rc-mount.awk fs >'$@.new' + $(AWK) -v sort_tmpfile=./build/s6-rc.qawk.tmp_sort -v execfile=./build/execfile -f build/s6-rc.qawk build/config >>'$@.new' + if test -d out/s6-rc-source; then rm -r out/s6-rc-source; fi + mkdir ./out/s6-rc-source + fsapply ./out/s6-rc-source "$$PWD/"'$@.new' + mv '$@.new' '$@' -config/etc/fstab: build/fstab.awk fs - $(AWK) -f build/fstab.awk fs >"$@.new" - mv "$@.new" "$@" +out/etc/fstab: build/fstab.awk fs + mkdir -p out/etc + $(AWK) -f build/fstab.awk fs >'$@.new' + mv '$@.new' '$@' build/config: build/config.awk - $(AWK) -f "$<" </dev/null >"$@.new" - mv "$@.new" "$@" + $(AWK) -f '$<' </dev/null >'$@.new' + mv '$@.new' '$@' -postinstall.fileset: build/config build/postinstall.qawk - $(AWK) -f build/postinstall.qawk build/config >"$@.new" - mv "$@.new" "$@" +.PHONY: build/postinstall.gen.fileset +build/postinstall.gen.fileset: + (cd config && find etc -type d) >build/config.dirs + (cd config && find etc -type f) >build/config.files + printf '%s\n' >>build/config.files \ + etc/fstab + sed <build/config.dirs >'$@.new' -Ee \ + 's|.*|/&\t+\td|' + sed <build/config.files >'$@.new' -Ee \ + 's|.*|/&\t+\tlf!\t$(CURRENT)/conf/&|' + rm build/config.dirs build/config.files + mv '$@.new' '$@' + +out/postinstall.fileset: build/config build/postinstall.qawk build/postinstall.gen.fileset + mkdir -p out + $(AWK) -f build/postinstall.qawk build/config >'$@.new' + cat build/postinstall.gen.fileset >>'$@.new' + mv '$@.new' '$@' diff --git a/config.aat b/config.aat @@ -9,7 +9,7 @@ tty_max=4 # Number of gettys to spawn (should be less 9 to not overlap with rescue getty) getty_max=4 -tty_setfont=ter-v14n +tty_setfont=ter-v16n dev_manager=mdevd @@ -88,9 +88,9 @@ id name 1000 ccx ] -|#tinc_networks=[ -|#name -|#ccx -|#] +#tinc_networks=[ +#name +#ccx +#] |} diff --git a/config/console_keymap/keymap b/config/console_keymap/keymap @@ -0,0 +1,225 @@ +!include "/usr/share/keymaps/legacy/i386/qwerty/us.map.gz" + +!keymaps 0-6,8-9,12 +!keycode 29 = AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr AltGr +!keycode 42 = Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift +!keycode 54 = Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift Uncaps_Shift +!keycode 56 = Alt Alt Alt Alt Alt Alt Alt Alt Alt Alt +!keycode 58 = Control Control Control Control Control Control Control Control Control Control +!keycode 100 = Compose Compose Compose Compose Compose Compose Compose Compose Compose Compose + + +!! former lctrl +keycode 29 = AltGr + shift keycode 29 = AltGr + altgr keycode 29 = AltGr + altgr shift keycode 29 = AltGr + control keycode 29 = AltGr + control shift keycode 29 = AltGr + control altgr keycode 29 = AltGr + control altgr shift keycode 29 = AltGr + alt keycode 29 = AltGr + alt shift keycode 29 = AltGr + alt altgr keycode 29 = AltGr + alt altgr shift keycode 29 = AltGr + alt control keycode 29 = AltGr + alt control shift keycode 29 = AltGr + alt control altgr keycode 29 = AltGr + alt control altgr shift keycode 29 = AltGr + +!! shift +keycode 42 = Uncaps_Shift + shift keycode 42 = Uncaps_Shift + altgr keycode 42 = Uncaps_Shift + altgr shift keycode 42 = Uncaps_Shift + control keycode 42 = Uncaps_Shift + control shift keycode 42 = Uncaps_Shift + control altgr keycode 42 = Uncaps_Shift + control altgr shift keycode 42 = Uncaps_Shift + alt keycode 42 = Uncaps_Shift + alt shift keycode 42 = Uncaps_Shift + alt altgr keycode 42 = Uncaps_Shift + alt altgr shift keycode 42 = Uncaps_Shift + alt control keycode 42 = Uncaps_Shift + alt control shift keycode 42 = Uncaps_Shift + alt control altgr keycode 42 = Uncaps_Shift + alt control altgr shift keycode 42 = Uncaps_Shift + +!! shift +keycode 54 = Uncaps_Shift + shift keycode 54 = Uncaps_Shift + altgr keycode 54 = Uncaps_Shift + altgr shift keycode 54 = Uncaps_Shift + control keycode 54 = Uncaps_Shift + control shift keycode 54 = Uncaps_Shift + control altgr keycode 54 = Uncaps_Shift + control altgr shift keycode 54 = Uncaps_Shift + alt keycode 54 = Uncaps_Shift + alt shift keycode 54 = Uncaps_Shift + alt altgr keycode 54 = Uncaps_Shift + alt altgr shift keycode 54 = Uncaps_Shift + alt control keycode 54 = Uncaps_Shift + alt control shift keycode 54 = Uncaps_Shift + alt control altgr keycode 54 = Uncaps_Shift + alt control altgr shift keycode 54 = Uncaps_Shift + +!! former capslock +keycode 58 = Control + shift keycode 58 = Control + altgr keycode 58 = Control + altgr shift keycode 58 = Control + control keycode 58 = Control + control shift keycode 58 = Control + control altgr keycode 58 = Control + control altgr shift keycode 58 = Control + alt keycode 58 = Control + alt shift keycode 58 = Control + alt altgr keycode 58 = Control + alt altgr shift keycode 58 = Control + alt control keycode 58 = Control + alt control shift keycode 58 = Control + alt control altgr keycode 58 = Control + alt control altgr shift keycode 58 = Control + +!! former altgr +keycode 100 = Compose + shift keycode 100 = Compose + altgr keycode 100 = Compose + altgr shift keycode 100 = Compose + control keycode 100 = Compose + control shift keycode 100 = Compose + control altgr keycode 100 = Compose + control altgr shift keycode 100 = Compose + alt keycode 100 = Compose + alt shift keycode 100 = Compose + alt altgr keycode 100 = Compose + alt altgr shift keycode 100 = Compose + alt control keycode 100 = Compose + alt control shift keycode 100 = Compose + alt control altgr keycode 100 = Compose + alt control altgr shift keycode 100 = Compose + + +!keymaps 0-3 + +! keycode 16 = +q +Q adiaeresis Adiaeresis +! keycode 17 = +w +W ecaron Ecaron +! keycode 18 = +e +E eacute Eacute +! keycode 19 = +r +R rcaron Rcaron +! keycode 20 = +t +T dead_acute dead_doubleacute +! keycode 21 = +y +Y yacute Yacute +! keycode 22 = +u +U uacute Uacute +! keycode 23 = +i +I iacute Iacute +! keycode 24 = +o +O oacute Oacute +! keycode 25 = +p +P oslash Ooblique +! +! keycode 30 = +a +A aacute Aacute +! keycode 31 = +s +S scaron Scaron +! keycode 32 = +d +D dead_diaeresis degree +! keycode 33 = +f +F atilde Atilde +! keycode 34 = +g +G dead_ogonek G +! keycode 35 = +h +H dead_caron copyright +! keycode 36 = +j +J dstroke Dstroke +! !keycode 37 = +k +K dead_abovering asciitilde +! keycode 38 = +l +L lstroke Lstroke +! keycode 39 = semicolon colon uring Uring +! +! keycode 44 = +z +Z zcaron Zcaron +! keycode 45 = +x +X dead_circumflex asciitilde +! keycode 46 = +c +C ccaron Ccaron +! keycode 47 = +v +V dead_grave registered +! keycode 48 = +b +B dead_breve asciitilde +! keycode 49 = +n +N ncaron Ncaron +! keycode 50 = +m +M dead_macron mu + + +!! per-modifier version + +altgr keycode 16 = adiaeresis +altgr shift keycode 16 = Adiaeresis +altgr keycode 17 = ecaron +altgr shift keycode 17 = Ecaron +altgr keycode 18 = eacute +altgr shift keycode 18 = Eacute +altgr keycode 19 = rcaron +altgr shift keycode 19 = Rcaron +altgr keycode 20 = dead_acute +altgr shift keycode 20 = dead_doubleacute +altgr keycode 21 = yacute +altgr shift keycode 21 = Yacute +altgr keycode 22 = uacute +altgr shift keycode 22 = Uacute +altgr keycode 23 = iacute +altgr shift keycode 23 = Iacute +altgr keycode 24 = oacute +altgr shift keycode 24 = Oacute +altgr keycode 25 = oslash +altgr shift keycode 25 = Ooblique + +altgr keycode 30 = aacute +altgr shift keycode 30 = Aacute +altgr keycode 31 = scaron +altgr shift keycode 31 = Scaron +altgr keycode 32 = dead_diaeresis +altgr shift keycode 32 = degree +altgr keycode 33 = atilde +altgr shift keycode 33 = Atilde +altgr keycode 34 = dead_ogonek +altgr shift keycode 34 = G +altgr keycode 35 = dead_caron +altgr shift keycode 35 = copyright +altgr keycode 36 = dstroke +altgr shift keycode 36 = Dstroke +!keycode 37 = +k +K dead_abovering asciitilde +altgr keycode 38 = lstroke +altgr shift keycode 38 = Lstroke +altgr keycode 39 = uring +altgr shift keycode 39 = Uring + +altgr keycode 44 = zcaron +altgr shift keycode 44 = Zcaron +altgr keycode 45 = dead_circumflex +altgr shift keycode 45 = asciitilde +altgr keycode 46 = ccaron +altgr shift keycode 46 = Ccaron +altgr keycode 47 = dead_grave +altgr shift keycode 47 = registered +altgr keycode 48 = dead_breve +altgr shift keycode 48 = asciitilde +altgr keycode 49 = ncaron +altgr shift keycode 49 = Ncaron +altgr keycode 50 = dead_macron +altgr shift keycode 50 = mu + +! ctrl+shift+hex numbers +!include "/usr/share/keymaps/legacy/i386/include/unicode.map.gz" +# Most people will prefer the default Unicode hex input +# sequences (that use the keypad, with A-F represented +# by the keys around the digits in natural order). +# However, ISO-14755 suggests to use Ctrl-Shift and +# the ordinary letters and digits. That is also possible +# (but then Ctrl-Shift-2 will no longer be Ctrl-@). +control shift keycode 11 = Hex_0 +control shift keycode 2 = Hex_1 +control shift keycode 3 = Hex_2 +control shift keycode 4 = Hex_3 +control shift keycode 5 = Hex_4 +control shift keycode 6 = Hex_5 +control shift keycode 7 = Hex_6 +control shift keycode 8 = Hex_7 +control shift keycode 9 = Hex_8 +control shift keycode 10 = Hex_9 +control shift keycode 30 = Hex_A +control shift keycode 48 = Hex_B +control shift keycode 46 = Hex_C +control shift keycode 32 = Hex_D +control shift keycode 18 = Hex_E +control shift keycode 33 = Hex_F +# +# If the keyboard is in Unicode mode, then pressing +# Ctrl-Shift, typing 4 hex digits and releasing Ctrl-Shift +# will produce the unicode character with the given code. +# + +include "./vimcompose-latin1" +include "./vimcompose-multibyte" diff --git a/config/console_keymap/vimcompose-latin1 b/config/console_keymap/vimcompose-latin1 @@ -0,0 +1,97 @@ +charset "iso-8859-1" +!! extracted from vim help files, covers wider range to above vim-compose.latin1 file +compose '!' 'I' to '¡' # 0xa1 161 INVERTED EXCLAMATION MARK +compose 'C' 't' to '¢' # 0xa2 162 CENT SIGN +compose 'P' 'd' to '£' # 0xa3 163 POUND SIGN +compose 'C' 'u' to '¤' # 0xa4 164 CURRENCY SIGN +compose 'Y' 'e' to '¥' # 0xa5 165 YEN SIGN +compose 'B' 'B' to '¦' # 0xa6 166 BROKEN BAR +compose 'S' 'E' to '§' # 0xa7 167 SECTION SIGN +compose ''' ':' to '¨' # 0xa8 168 DIAERESIS +compose 'C' 'o' to '©' # 0xa9 169 COPYRIGHT SIGN +compose '-' 'a' to 'ª' # 0xaa 170 FEMININE ORDINAL INDICATOR +compose '<' '<' to '«' # 0xab 171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +compose 'N' 'O' to '¬' # 0xac 172 NOT SIGN +compose '-' '-' to '­' # 0xad 173 SOFT HYPHEN +compose 'R' 'g' to '®' # 0xae 174 REGISTERED SIGN +compose ''' 'm' to '¯' # 0xaf 175 MACRON +compose 'D' 'G' to '°' # 0xb0 176 DEGREE SIGN +compose '+' '-' to '±' # 0xb1 177 PLUS-MINUS SIGN +compose '2' 'S' to '²' # 0xb2 178 SUPERSCRIPT TWO +compose '3' 'S' to '³' # 0xb3 179 SUPERSCRIPT THREE +compose ''' ''' to '´' # 0xb4 180 ACUTE ACCENT +compose 'M' 'y' to 'µ' # 0xb5 181 MICRO SIGN +compose 'P' 'I' to '¶' # 0xb6 182 PILCROW SIGN +compose '.' 'M' to '·' # 0xb7 183 MIDDLE DOT +compose ''' ',' to '¸' # 0xb8 184 CEDILLA +compose '1' 'S' to '¹' # 0xb9 185 SUPERSCRIPT ONE +compose '-' 'o' to 'º' # 0xba 186 MASCULINE ORDINAL INDICATOR +compose '>' '>' to '»' # 0xbb 187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +compose '1' '4' to '¼' # 0xbc 188 VULGAR FRACTION ONE QUARTER +compose '1' '2' to '½' # 0xbd 189 VULGAR FRACTION ONE HALF +compose '3' '4' to '¾' # 0xbe 190 VULGAR FRACTION THREE QUARTERS +compose '?' 'I' to '¿' # 0xbf 191 INVERTED QUESTION MARK +compose 'A' '!' to 'À' # 0xc0 192 LATIN CAPITAL LETTER A WITH GRAVE +compose 'A' ''' to 'Á' # 0xc1 193 LATIN CAPITAL LETTER A WITH ACUTE +compose 'A' '>' to 'Â' # 0xc2 194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX +compose 'A' '?' to 'Ã' # 0xc3 195 LATIN CAPITAL LETTER A WITH TILDE +compose 'A' ':' to 'Ä' # 0xc4 196 LATIN CAPITAL LETTER A WITH DIAERESIS +compose 'A' 'A' to 'Å' # 0xc5 197 LATIN CAPITAL LETTER A WITH RING ABOVE +compose 'A' 'E' to 'Æ' # 0xc6 198 LATIN CAPITAL LETTER AE +compose 'C' ',' to 'Ç' # 0xc7 199 LATIN CAPITAL LETTER C WITH CEDILLA +compose 'E' '!' to 'È' # 0xc8 200 LATIN CAPITAL LETTER E WITH GRAVE +compose 'E' ''' to 'É' # 0xc9 201 LATIN CAPITAL LETTER E WITH ACUTE +compose 'E' '>' to 'Ê' # 0xca 202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX +compose 'E' ':' to 'Ë' # 0xcb 203 LATIN CAPITAL LETTER E WITH DIAERESIS +compose 'I' '!' to 'Ì' # 0xcc 204 LATIN CAPITAL LETTER I WITH GRAVE +compose 'I' ''' to 'Í' # 0xcd 205 LATIN CAPITAL LETTER I WITH ACUTE +compose 'I' '>' to 'Î' # 0xce 206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX +compose 'I' ':' to 'Ï' # 0xcf 207 LATIN CAPITAL LETTER I WITH DIAERESIS +compose 'D' '-' to 'Ð' # 0xd0 208 LATIN CAPITAL LETTER ETH (Icelandic) +compose 'N' '?' to 'Ñ' # 0xd1 209 LATIN CAPITAL LETTER N WITH TILDE +compose 'O' '!' to 'Ò' # 0xd2 210 LATIN CAPITAL LETTER O WITH GRAVE +compose 'O' ''' to 'Ó' # 0xd3 211 LATIN CAPITAL LETTER O WITH ACUTE +compose 'O' '>' to 'Ô' # 0xd4 212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX +compose 'O' '?' to 'Õ' # 0xd5 213 LATIN CAPITAL LETTER O WITH TILDE +compose 'O' ':' to 'Ö' # 0xd6 214 LATIN CAPITAL LETTER O WITH DIAERESIS +compose '*' 'X' to '×' # 0xd7 215 MULTIPLICATION SIGN +compose 'O' '/' to 'Ø' # 0xd8 216 LATIN CAPITAL LETTER O WITH STROKE +compose 'U' '!' to 'Ù' # 0xd9 217 LATIN CAPITAL LETTER U WITH GRAVE +compose 'U' ''' to 'Ú' # 0xda 218 LATIN CAPITAL LETTER U WITH ACUTE +compose 'U' '>' to 'Û' # 0xdb 219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX +compose 'U' ':' to 'Ü' # 0xdc 220 LATIN CAPITAL LETTER U WITH DIAERESIS +compose 'Y' ''' to 'Ý' # 0xdd 221 LATIN CAPITAL LETTER Y WITH ACUTE +compose 'T' 'H' to 'Þ' # 0xde 222 LATIN CAPITAL LETTER THORN (Icelandic) +compose 's' 's' to 'ß' # 0xdf 223 LATIN SMALL LETTER SHARP S (German) +compose 'a' '!' to 'à' # 0xe0 224 LATIN SMALL LETTER A WITH GRAVE +compose 'a' ''' to 'á' # 0xe1 225 LATIN SMALL LETTER A WITH ACUTE +compose 'a' '>' to 'â' # 0xe2 226 LATIN SMALL LETTER A WITH CIRCUMFLEX +compose 'a' '?' to 'ã' # 0xe3 227 LATIN SMALL LETTER A WITH TILDE +compose 'a' ':' to 'ä' # 0xe4 228 LATIN SMALL LETTER A WITH DIAERESIS +compose 'a' 'a' to 'å' # 0xe5 229 LATIN SMALL LETTER A WITH RING ABOVE +compose 'a' 'e' to 'æ' # 0xe6 230 LATIN SMALL LETTER AE +compose 'c' ',' to 'ç' # 0xe7 231 LATIN SMALL LETTER C WITH CEDILLA +compose 'e' '!' to 'è' # 0xe8 232 LATIN SMALL LETTER E WITH GRAVE +compose 'e' ''' to 'é' # 0xe9 233 LATIN SMALL LETTER E WITH ACUTE +compose 'e' '>' to 'ê' # 0xea 234 LATIN SMALL LETTER E WITH CIRCUMFLEX +compose 'e' ':' to 'ë' # 0xeb 235 LATIN SMALL LETTER E WITH DIAERESIS +compose 'i' '!' to 'ì' # 0xec 236 LATIN SMALL LETTER I WITH GRAVE +compose 'i' ''' to 'í' # 0xed 237 LATIN SMALL LETTER I WITH ACUTE +compose 'i' '>' to 'î' # 0xee 238 LATIN SMALL LETTER I WITH CIRCUMFLEX +compose 'i' ':' to 'ï' # 0xef 239 LATIN SMALL LETTER I WITH DIAERESIS +compose 'd' '-' to 'ð' # 0xf0 240 LATIN SMALL LETTER ETH (Icelandic) +compose 'n' '?' to 'ñ' # 0xf1 241 LATIN SMALL LETTER N WITH TILDE +compose 'o' '!' to 'ò' # 0xf2 242 LATIN SMALL LETTER O WITH GRAVE +compose 'o' ''' to 'ó' # 0xf3 243 LATIN SMALL LETTER O WITH ACUTE +compose 'o' '>' to 'ô' # 0xf4 244 LATIN SMALL LETTER O WITH CIRCUMFLEX +compose 'o' '?' to 'õ' # 0xf5 245 LATIN SMALL LETTER O WITH TILDE +compose 'o' ':' to 'ö' # 0xf6 246 LATIN SMALL LETTER O WITH DIAERESIS +compose '-' ':' to '÷' # 0xf7 247 DIVISION SIGN +compose 'o' '/' to 'ø' # 0xf8 248 LATIN SMALL LETTER O WITH STROKE +compose 'u' '!' to 'ù' # 0xf9 249 LATIN SMALL LETTER U WITH GRAVE +compose 'u' ''' to 'ú' # 0xfa 250 LATIN SMALL LETTER U WITH ACUTE +compose 'u' '>' to 'û' # 0xfb 251 LATIN SMALL LETTER U WITH CIRCUMFLEX +compose 'u' ':' to 'ü' # 0xfc 252 LATIN SMALL LETTER U WITH DIAERESIS +compose 'y' ''' to 'ý' # 0xfd 253 LATIN SMALL LETTER Y WITH ACUTE +compose 't' 'h' to 'þ' # 0xfe 254 LATIN SMALL LETTER THORN (Icelandic) +compose 'y' ':' to 'ÿ' # 0xff 255 LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/config/console_keymap/vimcompose-multibyte b/config/console_keymap/vimcompose-multibyte @@ -0,0 +1,457 @@ + +charset "iso-8859-2" +compose 'A' '(' to 'Ã' # 0102 0258 LATIN CAPITAL LETTER A WITH BREVE +compose 'a' '(' to 'ã' # 0103 0259 LATIN SMALL LETTER A WITH BREVE +compose 'A' ';' to '¡' # 0104 0260 LATIN CAPITAL LETTER A WITH OGONEK +compose 'a' ';' to '±' # 0105 0261 LATIN SMALL LETTER A WITH OGONEK +compose 'C' ''' to 'Æ' # 0106 0262 LATIN CAPITAL LETTER C WITH ACUTE +compose 'c' ''' to 'æ' # 0107 0263 LATIN SMALL LETTER C WITH ACUTE +compose 'C' '<' to 'È' # 010C 0268 LATIN CAPITAL LETTER C WITH CARON +compose 'c' '<' to 'è' # 010D 0269 LATIN SMALL LETTER C WITH CARON +compose 'D' '<' to 'Ï' # 010E 0270 LATIN CAPITAL LETTER D WITH CARON +compose 'd' '<' to 'ï' # 010F 0271 LATIN SMALL LETTER D WITH CARON +compose 'D' '/' to 'Ð' # 0110 0272 LATIN CAPITAL LETTER D WITH STROKE +compose 'd' '/' to 'ð' # 0111 0273 LATIN SMALL LETTER D WITH STROKE +compose 'E' ';' to 'Ê' # 0118 0280 LATIN CAPITAL LETTER E WITH OGONEK +compose 'e' ';' to 'ê' # 0119 0281 LATIN SMALL LETTER E WITH OGONEK +compose 'E' '<' to 'Ì' # 011A 0282 LATIN CAPITAL LETTER E WITH CARON +compose 'e' '<' to 'ì' # 011B 0283 LATIN SMALL LETTER E WITH CARON +compose 'L' ''' to 'Å' # 0139 0313 LATIN CAPITAL LETTER L WITH ACUTE +compose 'l' ''' to 'å' # 013A 0314 LATIN SMALL LETTER L WITH ACUTE +compose 'L' '<' to '¥' # 013D 0317 LATIN CAPITAL LETTER L WITH CARON +compose 'l' '<' to 'µ' # 013E 0318 LATIN SMALL LETTER L WITH CARON +compose 'L' '/' to '£' # 0141 0321 LATIN CAPITAL LETTER L WITH STROKE +compose 'l' '/' to '³' # 0142 0322 LATIN SMALL LETTER L WITH STROKE +compose 'N' ''' to 'Ñ' # 0143 0323 LATIN CAPITAL LETTER N WITH ACUTE ` +compose 'n' ''' to 'ñ' # 0144 0324 LATIN SMALL LETTER N WITH ACUTE ` +compose 'N' '<' to 'Ò' # 0147 0327 LATIN CAPITAL LETTER N WITH CARON ` +compose 'n' '<' to 'ò' # 0148 0328 LATIN SMALL LETTER N WITH CARON ` +compose 'O' '"' to 'Õ' # 0150 0336 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +compose 'o' '"' to 'õ' # 0151 0337 LATIN SMALL LETTER O WITH DOUBLE ACUTE +compose 'R' ''' to 'À' # 0154 0340 LATIN CAPITAL LETTER R WITH ACUTE +compose 'r' ''' to 'à' # 0155 0341 LATIN SMALL LETTER R WITH ACUTE +compose 'R' '<' to 'Ø' # 0158 0344 LATIN CAPITAL LETTER R WITH CARON +compose 'r' '<' to 'ø' # 0159 0345 LATIN SMALL LETTER R WITH CARON +compose 'S' ''' to '¦' # 015A 0346 LATIN CAPITAL LETTER S WITH ACUTE +compose 's' ''' to '¶' # 015B 0347 LATIN SMALL LETTER S WITH ACUTE +compose 'S' ',' to 'ª' # 015E 0350 LATIN CAPITAL LETTER S WITH CEDILLA +compose 's' ',' to 'º' # 015F 0351 LATIN SMALL LETTER S WITH CEDILLA +compose 'S' '<' to '©' # 0160 0352 LATIN CAPITAL LETTER S WITH CARON +compose 's' '<' to '¹' # 0161 0353 LATIN SMALL LETTER S WITH CARON +compose 'T' ',' to 'Þ' # 0162 0354 LATIN CAPITAL LETTER T WITH CEDILLA +compose 't' ',' to 'þ' # 0163 0355 LATIN SMALL LETTER T WITH CEDILLA +compose 'T' '<' to '«' # 0164 0356 LATIN CAPITAL LETTER T WITH CARON +compose 't' '<' to '»' # 0165 0357 LATIN SMALL LETTER T WITH CARON +compose 'U' '0' to 'Ù' # 016E 0366 LATIN CAPITAL LETTER U WITH RING ABOVE +compose 'u' '0' to 'ù' # 016F 0367 LATIN SMALL LETTER U WITH RING ABOVE +compose 'U' '"' to 'Û' # 0170 0368 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +compose 'u' '"' to 'û' # 0171 0369 LATIN SMALL LETTER U WITH DOUBLE ACUTE +compose 'Z' ''' to '¬' # 0179 0377 LATIN CAPITAL LETTER Z WITH ACUTE +compose 'z' ''' to '¼' # 017A 0378 LATIN SMALL LETTER Z WITH ACUTE +compose 'Z' '.' to '¯' # 017B 0379 LATIN CAPITAL LETTER Z WITH DOT ABOVE +compose 'z' '.' to '¿' # 017C 0380 LATIN SMALL LETTER Z WITH DOT ABOVE +compose 'Z' '<' to '®' # 017D 0381 LATIN CAPITAL LETTER Z WITH CARON +compose 'z' '<' to '¾' # 017E 0382 LATIN SMALL LETTER Z WITH CARON +compose ''' '<' to '·' # 02C7 0711 CARON +compose ''' '(' to '¢' # 02D8 0728 BREVE +compose ''' '.' to 'ÿ' # 02D9 0729 DOT ABOVE +compose ''' ';' to '²' # 02DB 0731 OGONEK +compose ''' '"' to '½' # 02DD 0733 DOUBLE ACUTE ACCENT + +charset "iso-8859-3" +compose 'C' '>' to 'Æ' # 0108 0264 LATIN CAPITAL LETTER C WITH CIRCUMFLEX +compose 'c' '>' to 'æ' # 0109 0265 LATIN SMALL LETTER C WITH CIRCUMFLEX +compose 'C' '.' to 'Å' # 010A 0266 LATIN CAPITAL LETTER C WITH DOT ABOVE +compose 'c' '.' to 'å' # 010B 0267 LATIN SMALL LETTER C WITH DOT ABOVE +compose 'G' '>' to 'Ø' # 011C 0284 LATIN CAPITAL LETTER G WITH CIRCUMFLEX +compose 'g' '>' to 'ø' # 011D 0285 LATIN SMALL LETTER G WITH CIRCUMFLEX +compose 'G' '(' to '«' # 011E 0286 LATIN CAPITAL LETTER G WITH BREVE +compose 'g' '(' to '»' # 011F 0287 LATIN SMALL LETTER G WITH BREVE +compose 'G' '.' to 'Õ' # 0120 0288 LATIN CAPITAL LETTER G WITH DOT ABOVE +compose 'g' '.' to 'õ' # 0121 0289 LATIN SMALL LETTER G WITH DOT ABOVE +compose 'H' '>' to '¦' # 0124 0292 LATIN CAPITAL LETTER H WITH CIRCUMFLEX +compose 'h' '>' to '¶' # 0125 0293 LATIN SMALL LETTER H WITH CIRCUMFLEX +compose 'H' '/' to '¡' # 0126 0294 LATIN CAPITAL LETTER H WITH STROKE +compose 'h' '/' to '±' # 0127 0295 LATIN SMALL LETTER H WITH STROKE +compose 'I' '.' to '©' # 0130 0304 LATIN CAPITAL LETTER I WITH DOT ABOVE +compose 'i' '.' to '¹' # 0131 0305 LATIN SMALL LETTER DOTLESS I +compose 'J' '>' to '¬' # 0134 0308 LATIN CAPITAL LETTER J WITH CIRCUMFLEX +compose 'j' '>' to '¼' # 0135 0309 LATIN SMALL LETTER J WITH CIRCUMFLEX +compose 'S' '>' to 'Þ' # 015C 0348 LATIN CAPITAL LETTER S WITH CIRCUMFLEX +compose 's' '>' to 'þ' # 015D 0349 LATIN SMALL LETTER S WITH CIRCUMFLEX +!compose 'S' ',' to 'ª' # 015E 0350 LATIN CAPITAL LETTER S WITH CEDILLA +!compose 's' ',' to 'º' # 015F 0351 LATIN SMALL LETTER S WITH CEDILLA +compose 'U' '(' to 'Ý' # 016C 0364 LATIN CAPITAL LETTER U WITH BREVE +compose 'u' '(' to 'ý' # 016D 0365 LATIN SMALL LETTER U WITH BREVE +!compose 'Z' '.' to '¯' # 017B 0379 LATIN CAPITAL LETTER Z WITH DOT ABOVE +!compose 'z' '.' to '¿' # 017C 0380 LATIN SMALL LETTER Z WITH DOT ABOVE +!compose ''' '(' to '¢' # 02D8 0728 BREVE +!compose ''' '.' to 'ÿ' # 02D9 0729 DOT ABOVE + +charset "iso-8859-4" +compose 'A' '-' to 'À' # 0100 0256 LATIN CAPITAL LETTER A WITH MACRON +compose 'a' '-' to 'à' # 0101 0257 LATIN SMALL LETTER A WITH MACRON +!compose 'A' ';' to '¡' # 0104 0260 LATIN CAPITAL LETTER A WITH OGONEK +!compose 'a' ';' to '±' # 0105 0261 LATIN SMALL LETTER A WITH OGONEK +!compose 'C' '<' to 'È' # 010C 0268 LATIN CAPITAL LETTER C WITH CARON +!compose 'c' '<' to 'è' # 010D 0269 LATIN SMALL LETTER C WITH CARON +!compose 'D' '/' to 'Ð' # 0110 0272 LATIN CAPITAL LETTER D WITH STROKE +!compose 'd' '/' to 'ð' # 0111 0273 LATIN SMALL LETTER D WITH STROKE +compose 'E' '-' to 'ª' # 0112 0274 LATIN CAPITAL LETTER E WITH MACRON +compose 'e' '-' to 'º' # 0113 0275 LATIN SMALL LETTER E WITH MACRON +compose 'E' '.' to 'Ì' # 0116 0278 LATIN CAPITAL LETTER E WITH DOT ABOVE +compose 'e' '.' to 'ì' # 0117 0279 LATIN SMALL LETTER E WITH DOT ABOVE +!compose 'E' ';' to 'Ê' # 0118 0280 LATIN CAPITAL LETTER E WITH OGONEK +!compose 'e' ';' to 'ê' # 0119 0281 LATIN SMALL LETTER E WITH OGONEK +compose 'G' ',' to '«' # 0122 0290 LATIN CAPITAL LETTER G WITH CEDILLA +compose 'g' ',' to '»' # 0123 0291 LATIN SMALL LETTER G WITH CEDILLA +compose 'I' '?' to '¥' # 0128 0296 LATIN CAPITAL LETTER I WITH TILDE +compose 'i' '?' to 'µ' # 0129 0297 LATIN SMALL LETTER I WITH TILDE +compose 'I' '-' to 'Ï' # 012A 0298 LATIN CAPITAL LETTER I WITH MACRON +compose 'i' '-' to 'ï' # 012B 0299 LATIN SMALL LETTER I WITH MACRON +compose 'I' ';' to 'Ç' # 012E 0302 LATIN CAPITAL LETTER I WITH OGONEK +compose 'i' ';' to 'ç' # 012F 0303 LATIN SMALL LETTER I WITH OGONEK +compose 'K' ',' to 'Ó' # 0136 0310 LATIN CAPITAL LETTER K WITH CEDILLA +compose 'k' ',' to 'ó' # 0137 0311 LATIN SMALL LETTER K WITH CEDILLA +compose 'k' 'k' to '¢' # 0138 0312 LATIN SMALL LETTER KRA +compose 'L' ',' to '¦' # 013B 0315 LATIN CAPITAL LETTER L WITH CEDILLA +compose 'l' ',' to '¶' # 013C 0316 LATIN SMALL LETTER L WITH CEDILLA +compose 'N' ',' to 'Ñ' # 0145 0325 LATIN CAPITAL LETTER N WITH CEDILLA ` +compose 'n' ',' to 'ñ' # 0146 0326 LATIN SMALL LETTER N WITH CEDILLA ` +compose 'N' 'G' to '½' # 014A 0330 LATIN CAPITAL LETTER ENG +compose 'n' 'g' to '¿' # 014B 0331 LATIN SMALL LETTER ENG +compose 'O' '-' to 'Ò' # 014C 0332 LATIN CAPITAL LETTER O WITH MACRON +compose 'o' '-' to 'ò' # 014D 0333 LATIN SMALL LETTER O WITH MACRON +compose 'R' ',' to '£' # 0156 0342 LATIN CAPITAL LETTER R WITH CEDILLA +compose 'r' ',' to '³' # 0157 0343 LATIN SMALL LETTER R WITH CEDILLA +!compose 'S' '<' to '©' # 0160 0352 LATIN CAPITAL LETTER S WITH CARON +!compose 's' '<' to '¹' # 0161 0353 LATIN SMALL LETTER S WITH CARON +compose 'T' '/' to '¬' # 0166 0358 LATIN CAPITAL LETTER T WITH STROKE +compose 't' '/' to '¼' # 0167 0359 LATIN SMALL LETTER T WITH STROKE +compose 'U' '?' to 'Ý' # 0168 0360 LATIN CAPITAL LETTER U WITH TILDE +compose 'u' '?' to 'ý' # 0169 0361 LATIN SMALL LETTER U WITH TILDE +compose 'U' '-' to 'Þ' # 016A 0362 LATIN CAPITAL LETTER U WITH MACRON +compose 'u' '-' to 'þ' # 016B 0363 LATIN SMALL LETTER U WITH MACRON +compose 'U' ';' to 'Ù' # 0172 0370 LATIN CAPITAL LETTER U WITH OGONEK +compose 'u' ';' to 'ù' # 0173 0371 LATIN SMALL LETTER U WITH OGONEK +!compose 'Z' '<' to '®' # 017D 0381 LATIN CAPITAL LETTER Z WITH CARON +!compose 'z' '<' to '¾' # 017E 0382 LATIN SMALL LETTER Z WITH CARON +!compose ''' '<' to '·' # 02C7 0711 CARON +!compose ''' '.' to 'ÿ' # 02D9 0729 DOT ABOVE +!compose ''' ';' to '²' # 02DB 0731 OGONEK + +!charset "iso-8859-5" +!compose 'I' 'O' to '¡' # 0401 1025 CYRILLIC CAPITAL LETTER IO +!compose 'D' '%' to '¢' # 0402 1026 CYRILLIC CAPITAL LETTER DJE +!compose 'G' '%' to '£' # 0403 1027 CYRILLIC CAPITAL LETTER GJE +!compose 'I' 'E' to '¤' # 0404 1028 CYRILLIC CAPITAL LETTER UKRAINIAN IE +!compose 'D' 'S' to '¥' # 0405 1029 CYRILLIC CAPITAL LETTER DZE +!compose 'I' 'I' to '¦' # 0406 1030 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +!compose 'Y' 'I' to '§' # 0407 1031 CYRILLIC CAPITAL LETTER YI +!compose 'J' '%' to '¨' # 0408 1032 CYRILLIC CAPITAL LETTER JE +!compose 'L' 'J' to '©' # 0409 1033 CYRILLIC CAPITAL LETTER LJE +!compose 'N' 'J' to 'ª' # 040A 1034 CYRILLIC CAPITAL LETTER NJE +!compose 'T' 's' to '«' # 040B 1035 CYRILLIC CAPITAL LETTER TSHE +!compose 'K' 'J' to '¬' # 040C 1036 CYRILLIC CAPITAL LETTER KJE +!compose 'V' '%' to '®' # 040E 1038 CYRILLIC CAPITAL LETTER SHORT U +!compose 'D' 'Z' to '¯' # 040F 1039 CYRILLIC CAPITAL LETTER DZHE +!compose 'A' '=' to '°' # 0410 1040 CYRILLIC CAPITAL LETTER A +!compose 'B' '=' to '±' # 0411 1041 CYRILLIC CAPITAL LETTER BE +!compose 'V' '=' to '²' # 0412 1042 CYRILLIC CAPITAL LETTER VE +!compose 'G' '=' to '³' # 0413 1043 CYRILLIC CAPITAL LETTER GHE +!compose 'D' '=' to '´' # 0414 1044 CYRILLIC CAPITAL LETTER DE +!compose 'E' '=' to 'µ' # 0415 1045 CYRILLIC CAPITAL LETTER IE +!compose 'Z' '%' to '¶' # 0416 1046 CYRILLIC CAPITAL LETTER ZHE +!compose 'Z' '=' to '·' # 0417 1047 CYRILLIC CAPITAL LETTER ZE +!compose 'I' '=' to '¸' # 0418 1048 CYRILLIC CAPITAL LETTER I +!compose 'J' '=' to '¹' # 0419 1049 CYRILLIC CAPITAL LETTER SHORT I +!compose 'K' '=' to 'º' # 041A 1050 CYRILLIC CAPITAL LETTER KA +!compose 'L' '=' to '»' # 041B 1051 CYRILLIC CAPITAL LETTER EL +!compose 'M' '=' to '¼' # 041C 1052 CYRILLIC CAPITAL LETTER EM +!compose 'N' '=' to '½' # 041D 1053 CYRILLIC CAPITAL LETTER EN +!compose 'O' '=' to '¾' # 041E 1054 CYRILLIC CAPITAL LETTER O +!compose 'P' '=' to '¿' # 041F 1055 CYRILLIC CAPITAL LETTER PE +!compose 'R' '=' to 'À' # 0420 1056 CYRILLIC CAPITAL LETTER ER +!compose 'S' '=' to 'Á' # 0421 1057 CYRILLIC CAPITAL LETTER ES +!compose 'T' '=' to 'Â' # 0422 1058 CYRILLIC CAPITAL LETTER TE +!compose 'U' '=' to 'Ã' # 0423 1059 CYRILLIC CAPITAL LETTER U +!compose 'F' '=' to 'Ä' # 0424 1060 CYRILLIC CAPITAL LETTER EF +!compose 'H' '=' to 'Å' # 0425 1061 CYRILLIC CAPITAL LETTER HA +!compose 'C' '=' to 'Æ' # 0426 1062 CYRILLIC CAPITAL LETTER TSE +!compose 'C' '%' to 'Ç' # 0427 1063 CYRILLIC CAPITAL LETTER CHE +!compose 'S' '%' to 'È' # 0428 1064 CYRILLIC CAPITAL LETTER SHA +!compose 'S' 'c' to 'É' # 0429 1065 CYRILLIC CAPITAL LETTER SHCHA +!compose '=' '"' to 'Ê' # 042A 1066 CYRILLIC CAPITAL LETTER HARD SIGN +!compose 'Y' '=' to 'Ë' # 042B 1067 CYRILLIC CAPITAL LETTER YERU +!compose '%' '"' to 'Ì' # 042C 1068 CYRILLIC CAPITAL LETTER SOFT SIGN +!compose 'J' 'E' to 'Í' # 042D 1069 CYRILLIC CAPITAL LETTER E +!compose 'J' 'U' to 'Î' # 042E 1070 CYRILLIC CAPITAL LETTER YU +!compose 'J' 'A' to 'Ï' # 042F 1071 CYRILLIC CAPITAL LETTER YA +!compose 'a' '=' to 'Ð' # 0430 1072 CYRILLIC SMALL LETTER A +!compose 'b' '=' to 'Ñ' # 0431 1073 CYRILLIC SMALL LETTER BE +!compose 'v' '=' to 'Ò' # 0432 1074 CYRILLIC SMALL LETTER VE +!compose 'g' '=' to 'Ó' # 0433 1075 CYRILLIC SMALL LETTER GHE +!compose 'd' '=' to 'Ô' # 0434 1076 CYRILLIC SMALL LETTER DE +!compose 'e' '=' to 'Õ' # 0435 1077 CYRILLIC SMALL LETTER IE +!compose 'z' '%' to 'Ö' # 0436 1078 CYRILLIC SMALL LETTER ZHE +!compose 'z' '=' to '×' # 0437 1079 CYRILLIC SMALL LETTER ZE +!compose 'i' '=' to 'Ø' # 0438 1080 CYRILLIC SMALL LETTER I +!compose 'j' '=' to 'Ù' # 0439 1081 CYRILLIC SMALL LETTER SHORT I +!compose 'k' '=' to 'Ú' # 043A 1082 CYRILLIC SMALL LETTER KA +!compose 'l' '=' to 'Û' # 043B 1083 CYRILLIC SMALL LETTER EL +!compose 'm' '=' to 'Ü' # 043C 1084 CYRILLIC SMALL LETTER EM +!compose 'n' '=' to 'Ý' # 043D 1085 CYRILLIC SMALL LETTER EN +!compose 'o' '=' to 'Þ' # 043E 1086 CYRILLIC SMALL LETTER O +!compose 'p' '=' to 'ß' # 043F 1087 CYRILLIC SMALL LETTER PE +!compose 'r' '=' to 'à' # 0440 1088 CYRILLIC SMALL LETTER ER +!compose 's' '=' to 'á' # 0441 1089 CYRILLIC SMALL LETTER ES +!compose 't' '=' to 'â' # 0442 1090 CYRILLIC SMALL LETTER TE +!compose 'u' '=' to 'ã' # 0443 1091 CYRILLIC SMALL LETTER U +!compose 'f' '=' to 'ä' # 0444 1092 CYRILLIC SMALL LETTER EF +!compose 'h' '=' to 'å' # 0445 1093 CYRILLIC SMALL LETTER HA +!compose 'c' '=' to 'æ' # 0446 1094 CYRILLIC SMALL LETTER TSE +!compose 'c' '%' to 'ç' # 0447 1095 CYRILLIC SMALL LETTER CHE +!compose 's' '%' to 'è' # 0448 1096 CYRILLIC SMALL LETTER SHA +!compose 's' 'c' to 'é' # 0449 1097 CYRILLIC SMALL LETTER SHCHA +!compose '=' ''' to 'ê' # 044A 1098 CYRILLIC SMALL LETTER HARD SIGN +!compose 'y' '=' to 'ë' # 044B 1099 CYRILLIC SMALL LETTER YERU +!compose '%' ''' to 'ì' # 044C 1100 CYRILLIC SMALL LETTER SOFT SIGN +!compose 'j' 'e' to 'í' # 044D 1101 CYRILLIC SMALL LETTER E +!compose 'j' 'u' to 'î' # 044E 1102 CYRILLIC SMALL LETTER YU +!compose 'j' 'a' to 'ï' # 044F 1103 CYRILLIC SMALL LETTER YA +!compose 'i' 'o' to 'ñ' # 0451 1105 CYRILLIC SMALL LETTER IO +!compose 'd' '%' to 'ò' # 0452 1106 CYRILLIC SMALL LETTER DJE +!compose 'g' '%' to 'ó' # 0453 1107 CYRILLIC SMALL LETTER GJE +!compose 'i' 'e' to 'ô' # 0454 1108 CYRILLIC SMALL LETTER UKRAINIAN IE +!compose 'd' 's' to 'õ' # 0455 1109 CYRILLIC SMALL LETTER DZE +!compose 'i' 'i' to 'ö' # 0456 1110 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +!compose 'y' 'i' to '÷' # 0457 1111 CYRILLIC SMALL LETTER YI +!compose 'j' '%' to 'ø' # 0458 1112 CYRILLIC SMALL LETTER JE +!compose 'l' 'j' to 'ù' # 0459 1113 CYRILLIC SMALL LETTER LJE +!compose 'n' 'j' to 'ú' # 045A 1114 CYRILLIC SMALL LETTER NJE +!compose 't' 's' to 'û' # 045B 1115 CYRILLIC SMALL LETTER TSHE +!compose 'k' 'j' to 'ü' # 045C 1116 CYRILLIC SMALL LETTER KJE +!compose 'v' '%' to 'þ' # 045E 1118 CYRILLIC SMALL LETTER SHORT U +!compose 'd' 'z' to 'ÿ' # 045F 1119 CYRILLIC SMALL LETTER DZHE +!compose 'N' '0' to 'ð' #0 2116 8470 NUMERO SIGN +! +!charset "iso-8859-6" +!compose ',' '+' to '¬' # 060C 1548 ARABIC COMMA +!compose ';' '+' to '»' # 061B 1563 ARABIC SEMICOLON +!compose '?' '+' to '¿' # 061F 1567 ARABIC QUESTION MARK +!compose 'H' ''' to 'Á' # 0621 1569 ARABIC LETTER HAMZA +!compose 'a' 'M' to 'Â' # 0622 1570 ARABIC LETTER ALEF WITH MADDA ABOVE +!compose 'a' 'H' to 'Ã' # 0623 1571 ARABIC LETTER ALEF WITH HAMZA ABOVE +!compose 'w' 'H' to 'Ä' # 0624 1572 ARABIC LETTER WAW WITH HAMZA ABOVE +!compose 'a' 'h' to 'Å' # 0625 1573 ARABIC LETTER ALEF WITH HAMZA BELOW +!compose 'y' 'H' to 'Æ' # 0626 1574 ARABIC LETTER YEH WITH HAMZA ABOVE +!compose 'a' '+' to 'Ç' # 0627 1575 ARABIC LETTER ALEF +!compose 'b' '+' to 'È' # 0628 1576 ARABIC LETTER BEH +!compose 't' 'm' to 'É' # 0629 1577 ARABIC LETTER TEH MARBUTA +!compose 't' '+' to 'Ê' # 062A 1578 ARABIC LETTER TEH +!compose 't' 'k' to 'Ë' # 062B 1579 ARABIC LETTER THEH +!compose 'g' '+' to 'Ì' # 062C 1580 ARABIC LETTER JEEM +!compose 'h' 'k' to 'Í' # 062D 1581 ARABIC LETTER HAH +!compose 'x' '+' to 'Î' # 062E 1582 ARABIC LETTER KHAH +!compose 'd' '+' to 'Ï' # 062F 1583 ARABIC LETTER DAL +!compose 'd' 'k' to 'Ð' # 0630 1584 ARABIC LETTER THAL +!compose 'r' '+' to 'Ñ' # 0631 1585 ARABIC LETTER REH +!compose 'z' '+' to 'Ò' # 0632 1586 ARABIC LETTER ZAIN +!compose 's' '+' to 'Ó' # 0633 1587 ARABIC LETTER SEEN +!compose 's' 'n' to 'Ô' # 0634 1588 ARABIC LETTER SHEEN +!compose 'c' '+' to 'Õ' # 0635 1589 ARABIC LETTER SAD +!compose 'd' 'd' to 'Ö' # 0636 1590 ARABIC LETTER DAD +!compose 't' 'j' to '×' # 0637 1591 ARABIC LETTER TAH +!compose 'z' 'H' to 'Ø' # 0638 1592 ARABIC LETTER ZAH +!compose 'e' '+' to 'Ù' # 0639 1593 ARABIC LETTER AIN +!compose 'i' '+' to 'Ú' # 063A 1594 ARABIC LETTER GHAIN +!compose '+' '+' to 'à' # 0640 1600 ARABIC TATWEEL +!compose 'f' '+' to 'á' # 0641 1601 ARABIC LETTER FEH +!compose 'q' '+' to 'â' # 0642 1602 ARABIC LETTER QAF +!compose 'k' '+' to 'ã' # 0643 1603 ARABIC LETTER KAF +!compose 'l' '+' to 'ä' # 0644 1604 ARABIC LETTER LAM +!compose 'm' '+' to 'å' # 0645 1605 ARABIC LETTER MEEM +!compose 'n' '+' to 'æ' # 0646 1606 ARABIC LETTER NOON +!compose 'h' '+' to 'ç' # 0647 1607 ARABIC LETTER HEH +!compose 'w' '+' to 'è' # 0648 1608 ARABIC LETTER WAW +!compose 'j' '+' to 'é' # 0649 1609 ARABIC LETTER ALEF MAKSURA +!compose 'y' '+' to 'ê' # 064A 1610 ARABIC LETTER YEH +!compose ':' '+' to 'ë' # 064B 1611 ARABIC FATHATAN +!compose '"' '+' to 'ì' # 064C 1612 ARABIC DAMMATAN +!compose '=' '+' to 'í' # 064D 1613 ARABIC KASRATAN +!compose '/' '+' to 'î' # 064E 1614 ARABIC FATHA +!compose ''' '+' to 'ï' # 064F 1615 ARABIC DAMMA +!compose '1' '+' to 'ð' # 0650 1616 ARABIC KASRA +!compose '3' '+' to 'ñ' # 0651 1617 ARABIC SHADDA +!compose '0' '+' to 'ò' # 0652 1618 ARABIC SUKUN +! +!charset "iso-8859-7" +!compose 'A' '%' to '¶' # 0386 0902 GREEK CAPITAL LETTER ALPHA WITH TONOS +!compose 'E' '%' to '¸' # 0388 0904 GREEK CAPITAL LETTER EPSILON WITH TONOS +!compose 'Y' '%' to '¹' # 0389 0905 GREEK CAPITAL LETTER ETA WITH TONOS +!compose 'I' '%' to 'º' # 038A 0906 GREEK CAPITAL LETTER IOTA WITH TONOS +!compose 'O' '%' to '¼' # 038C 0908 GREEK CAPITAL LETTER OMICRON WITH TONOS +!compose 'U' '%' to '¾' # 038E 0910 GREEK CAPITAL LETTER UPSILON WITH TONOS +!compose 'W' '%' to '¿' # 038F 0911 GREEK CAPITAL LETTER OMEGA WITH TONOS +!compose 'i' '3' to 'À' # 0390 0912 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +!compose 'A' '*' to 'Á' # 0391 0913 GREEK CAPITAL LETTER ALPHA +!compose 'B' '*' to 'Â' # 0392 0914 GREEK CAPITAL LETTER BETA +!compose 'G' '*' to 'Ã' # 0393 0915 GREEK CAPITAL LETTER GAMMA +!compose 'D' '*' to 'Ä' # 0394 0916 GREEK CAPITAL LETTER DELTA +!compose 'E' '*' to 'Å' # 0395 0917 GREEK CAPITAL LETTER EPSILON +!compose 'Z' '*' to 'Æ' # 0396 0918 GREEK CAPITAL LETTER ZETA +!compose 'Y' '*' to 'Ç' # 0397 0919 GREEK CAPITAL LETTER ETA +!compose 'H' '*' to 'È' # 0398 0920 GREEK CAPITAL LETTER THETA +!compose 'I' '*' to 'É' # 0399 0921 GREEK CAPITAL LETTER IOTA +!compose 'K' '*' to 'Ê' # 039A 0922 GREEK CAPITAL LETTER KAPPA +!compose 'L' '*' to 'Ë' # 039B 0923 GREEK CAPITAL LETTER LAMDA +!compose 'M' '*' to 'Ì' # 039C 0924 GREEK CAPITAL LETTER MU +!compose 'N' '*' to 'Í' # 039D 0925 GREEK CAPITAL LETTER NU +!compose 'C' '*' to 'Î' # 039E 0926 GREEK CAPITAL LETTER XI +!compose 'O' '*' to 'Ï' # 039F 0927 GREEK CAPITAL LETTER OMICRON +!compose 'P' '*' to 'Ð' # 03A0 0928 GREEK CAPITAL LETTER PI +!compose 'R' '*' to 'Ñ' # 03A1 0929 GREEK CAPITAL LETTER RHO +!compose 'S' '*' to 'Ó' # 03A3 0931 GREEK CAPITAL LETTER SIGMA +!compose 'T' '*' to 'Ô' # 03A4 0932 GREEK CAPITAL LETTER TAU +!compose 'U' '*' to 'Õ' # 03A5 0933 GREEK CAPITAL LETTER UPSILON +!compose 'F' '*' to 'Ö' # 03A6 0934 GREEK CAPITAL LETTER PHI +!compose 'X' '*' to '×' # 03A7 0935 GREEK CAPITAL LETTER CHI +!compose 'Q' '*' to 'Ø' # 03A8 0936 GREEK CAPITAL LETTER PSI +!compose 'W' '*' to 'Ù' # 03A9 0937 GREEK CAPITAL LETTER OMEGA +!compose 'J' '*' to 'Ú' # 03AA 0938 GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +!compose 'V' '*' to 'Û' # 03AB 0939 GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +!compose 'a' '%' to 'Ü' # 03AC 0940 GREEK SMALL LETTER ALPHA WITH TONOS +!compose 'e' '%' to 'Ý' # 03AD 0941 GREEK SMALL LETTER EPSILON WITH TONOS +!compose 'y' '%' to 'Þ' # 03AE 0942 GREEK SMALL LETTER ETA WITH TONOS +!compose 'i' '%' to 'ß' # 03AF 0943 GREEK SMALL LETTER IOTA WITH TONOS +!compose 'u' '3' to 'à' # 03B0 0944 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +!compose 'a' '*' to 'á' # 03B1 0945 GREEK SMALL LETTER ALPHA +!compose 'b' '*' to 'â' # 03B2 0946 GREEK SMALL LETTER BETA +!compose 'g' '*' to 'ã' # 03B3 0947 GREEK SMALL LETTER GAMMA +!compose 'd' '*' to 'ä' # 03B4 0948 GREEK SMALL LETTER DELTA +!compose 'e' '*' to 'å' # 03B5 0949 GREEK SMALL LETTER EPSILON +!compose 'z' '*' to 'æ' # 03B6 0950 GREEK SMALL LETTER ZETA +!compose 'y' '*' to 'ç' # 03B7 0951 GREEK SMALL LETTER ETA +!compose 'h' '*' to 'è' # 03B8 0952 GREEK SMALL LETTER THETA +!compose 'i' '*' to 'é' # 03B9 0953 GREEK SMALL LETTER IOTA +!compose 'k' '*' to 'ê' # 03BA 0954 GREEK SMALL LETTER KAPPA +!compose 'l' '*' to 'ë' # 03BB 0955 GREEK SMALL LETTER LAMDA +!compose 'm' '*' to 'ì' # 03BC 0956 GREEK SMALL LETTER MU +!compose 'n' '*' to 'í' # 03BD 0957 GREEK SMALL LETTER NU +!compose 'c' '*' to 'î' # 03BE 0958 GREEK SMALL LETTER XI +!compose 'o' '*' to 'ï' # 03BF 0959 GREEK SMALL LETTER OMICRON +!compose 'p' '*' to 'ð' # 03C0 0960 GREEK SMALL LETTER PI +!compose 'r' '*' to 'ñ' # 03C1 0961 GREEK SMALL LETTER RHO +!compose '*' 's' to 'ò' # 03C2 0962 GREEK SMALL LETTER FINAL SIGMA +!compose 's' '*' to 'ó' # 03C3 0963 GREEK SMALL LETTER SIGMA +!compose 't' '*' to 'ô' # 03C4 0964 GREEK SMALL LETTER TAU +!compose 'u' '*' to 'õ' # 03C5 0965 GREEK SMALL LETTER UPSILON +!compose 'f' '*' to 'ö' # 03C6 0966 GREEK SMALL LETTER PHI +!compose 'x' '*' to '÷' # 03C7 0967 GREEK SMALL LETTER CHI +!compose 'q' '*' to 'ø' # 03C8 0968 GREEK SMALL LETTER PSI +!compose 'w' '*' to 'ù' # 03C9 0969 GREEK SMALL LETTER OMEGA +!compose 'j' '*' to 'ú' # 03CA 0970 GREEK SMALL LETTER IOTA WITH DIALYTIKA +!compose 'v' '*' to 'û' # 03CB 0971 GREEK SMALL LETTER UPSILON WITH DIALYTIKA +!compose 'o' '%' to 'ü' # 03CC 0972 GREEK SMALL LETTER OMICRON WITH TONOS +!compose 'u' '%' to 'ý' # 03CD 0973 GREEK SMALL LETTER UPSILON WITH TONOS +!compose 'w' '%' to 'þ' # 03CE 0974 GREEK SMALL LETTER OMEGA WITH TONOS +!compose '-' '3' to '¯' #3 2015 8213 HORIZONTAL BAR +!compose ''' '6' to '¡' #6 2018 8216 LEFT SINGLE QUOTATION MARK +!compose ''' '9' to '¢' #9 2019 8217 RIGHT SINGLE QUOTATION MARK +!compose 'E' 'u' to '¤' #u 20AC 8364 EURO SIGN +! +!charset "iso-8859-8" +!compose 'A' '+' to 'à' # 05D0 1488 HEBREW LETTER ALEF +!compose 'B' '+' to 'á' # 05D1 1489 HEBREW LETTER BET +!compose 'G' '+' to 'â' # 05D2 1490 HEBREW LETTER GIMEL +!compose 'D' '+' to 'ã' # 05D3 1491 HEBREW LETTER DALET +!compose 'H' '+' to 'ä' # 05D4 1492 HEBREW LETTER HE +!compose 'W' '+' to 'å' # 05D5 1493 HEBREW LETTER VAV +!compose 'Z' '+' to 'æ' # 05D6 1494 HEBREW LETTER ZAYIN +!compose 'X' '+' to 'ç' # 05D7 1495 HEBREW LETTER HET +!compose 'T' 'j' to 'è' # 05D8 1496 HEBREW LETTER TET +!compose 'J' '+' to 'é' # 05D9 1497 HEBREW LETTER YOD +!compose 'K' '%' to 'ê' # 05DA 1498 HEBREW LETTER FINAL KAF +!compose 'K' '+' to 'ë' # 05DB 1499 HEBREW LETTER KAF +!compose 'L' '+' to 'ì' # 05DC 1500 HEBREW LETTER LAMED +!compose 'M' '%' to 'í' # 05DD 1501 HEBREW LETTER FINAL MEM +!compose 'M' '+' to 'î' # 05DE 1502 HEBREW LETTER MEM +!compose 'N' '%' to 'ï' # 05DF 1503 HEBREW LETTER FINAL NUN ` +!compose 'N' '+' to 'ð' # 05E0 1504 HEBREW LETTER NUN ` +!compose 'S' '+' to 'ñ' # 05E1 1505 HEBREW LETTER SAMEKH +!compose 'E' '+' to 'ò' # 05E2 1506 HEBREW LETTER AYIN +!compose 'P' '%' to 'ó' # 05E3 1507 HEBREW LETTER FINAL PE +!compose 'P' '+' to 'ô' # 05E4 1508 HEBREW LETTER PE +!compose 'Z' 'j' to 'õ' # 05E5 1509 HEBREW LETTER FINAL TSADI +!compose 'Z' 'J' to 'ö' # 05E6 1510 HEBREW LETTER TSADI +!compose 'Q' '+' to '÷' # 05E7 1511 HEBREW LETTER QOF +!compose 'R' '+' to 'ø' # 05E8 1512 HEBREW LETTER RESH +!compose 'S' 'h' to 'ù' # 05E9 1513 HEBREW LETTER SHIN +!compose 'T' '+' to 'ú' # 05EA 1514 HEBREW LETTER TAV +!compose '=' '2' to 'ß' #2 2017 8215 DOUBLE LOW LINE +! +!charset "iso-8859-9" +!compose 'G' '(' to 'Ð' # 011E 0286 LATIN CAPITAL LETTER G WITH BREVE +!compose 'g' '(' to 'ð' # 011F 0287 LATIN SMALL LETTER G WITH BREVE +!compose 'I' '.' to 'Ý' # 0130 0304 LATIN CAPITAL LETTER I WITH DOT ABOVE +!compose 'i' '.' to 'ý' # 0131 0305 LATIN SMALL LETTER DOTLESS I +!!compose 'S' ',' to 'Þ' # 015E 0350 LATIN CAPITAL LETTER S WITH CEDILLA +!!compose 's' ',' to 'þ' # 015F 0351 LATIN SMALL LETTER S WITH CEDILLA +! +!charset "iso-8859-10" +!compose 'A' '-' to 'À' # 0100 0256 LATIN CAPITAL LETTER A WITH MACRON +!compose 'a' '-' to 'à' # 0101 0257 LATIN SMALL LETTER A WITH MACRON +!!compose 'A' ';' to '¡' # 0104 0260 LATIN CAPITAL LETTER A WITH OGONEK +!!compose 'a' ';' to '±' # 0105 0261 LATIN SMALL LETTER A WITH OGONEK +!!compose 'C' '<' to 'È' # 010C 0268 LATIN CAPITAL LETTER C WITH CARON +!!compose 'c' '<' to 'è' # 010D 0269 LATIN SMALL LETTER C WITH CARON +!!compose 'D' '/' to '©' # 0110 0272 LATIN CAPITAL LETTER D WITH STROKE +!!compose 'd' '/' to '¹' # 0111 0273 LATIN SMALL LETTER D WITH STROKE +!compose 'E' '-' to '¢' # 0112 0274 LATIN CAPITAL LETTER E WITH MACRON +!compose 'e' '-' to '²' # 0113 0275 LATIN SMALL LETTER E WITH MACRON +!compose 'E' '.' to 'Ì' # 0116 0278 LATIN CAPITAL LETTER E WITH DOT ABOVE +!compose 'e' '.' to 'ì' # 0117 0279 LATIN SMALL LETTER E WITH DOT ABOVE +!!compose 'E' ';' to 'Ê' # 0118 0280 LATIN CAPITAL LETTER E WITH OGONEK +!!compose 'e' ';' to 'ê' # 0119 0281 LATIN SMALL LETTER E WITH OGONEK +!compose 'G' ',' to '£' # 0122 0290 LATIN CAPITAL LETTER G WITH CEDILLA +!compose 'g' ',' to '³' # 0123 0291 LATIN SMALL LETTER G WITH CEDILLA +!compose 'I' '?' to '¥' # 0128 0296 LATIN CAPITAL LETTER I WITH TILDE +!compose 'i' '?' to 'µ' # 0129 0297 LATIN SMALL LETTER I WITH TILDE +!compose 'I' '-' to '¤' # 012A 0298 LATIN CAPITAL LETTER I WITH MACRON +!compose 'i' '-' to '´' # 012B 0299 LATIN SMALL LETTER I WITH MACRON +!compose 'I' ';' to 'Ç' # 012E 0302 LATIN CAPITAL LETTER I WITH OGONEK +!compose 'i' ';' to 'ç' # 012F 0303 LATIN SMALL LETTER I WITH OGONEK +!compose 'K' ',' to '¦' # 0136 0310 LATIN CAPITAL LETTER K WITH CEDILLA +!compose 'k' ',' to '¶' # 0137 0311 LATIN SMALL LETTER K WITH CEDILLA +!compose 'k' 'k' to 'ÿ' # 0138 0312 LATIN SMALL LETTER KRA +!compose 'L' ',' to '¨' # 013B 0315 LATIN CAPITAL LETTER L WITH CEDILLA +!compose 'l' ',' to '¸' # 013C 0316 LATIN SMALL LETTER L WITH CEDILLA +!compose 'N' ',' to 'Ñ' # 0145 0325 LATIN CAPITAL LETTER N WITH CEDILLA ` +!compose 'n' ',' to 'ñ' # 0146 0326 LATIN SMALL LETTER N WITH CEDILLA ` +!compose 'N' 'G' to '¯' # 014A 0330 LATIN CAPITAL LETTER ENG +!compose 'n' 'g' to '¿' # 014B 0331 LATIN SMALL LETTER ENG +!compose 'O' '-' to 'Ò' # 014C 0332 LATIN CAPITAL LETTER O WITH MACRON +!compose 'o' '-' to 'ò' # 014D 0333 LATIN SMALL LETTER O WITH MACRON +!!compose 'S' '<' to 'ª' # 0160 0352 LATIN CAPITAL LETTER S WITH CARON +!!compose 's' '<' to 'º' # 0161 0353 LATIN SMALL LETTER S WITH CARON +!compose 'T' '/' to '«' # 0166 0358 LATIN CAPITAL LETTER T WITH STROKE +!compose 't' '/' to '»' # 0167 0359 LATIN SMALL LETTER T WITH STROKE +!compose 'U' '?' to '×' # 0168 0360 LATIN CAPITAL LETTER U WITH TILDE +!compose 'u' '?' to '÷' # 0169 0361 LATIN SMALL LETTER U WITH TILDE +!compose 'U' '-' to '®' # 016A 0362 LATIN CAPITAL LETTER U WITH MACRON +!compose 'u' '-' to '¾' # 016B 0363 LATIN SMALL LETTER U WITH MACRON +!compose 'U' ';' to 'Ù' # 0172 0370 LATIN CAPITAL LETTER U WITH OGONEK +!compose 'u' ';' to 'ù' # 0173 0371 LATIN SMALL LETTER U WITH OGONEK +!!compose 'Z' '<' to '¬' # 017D 0381 LATIN CAPITAL LETTER Z WITH CARON +!!compose 'z' '<' to '¼' # 017E 0382 LATIN SMALL LETTER Z WITH CARON +!compose '-' '3' to '½' #3 2015 8213 HORIZONTAL BAR +! +!charset "iso-8859-15" +!compose 'O' 'E' to '¼' # 0152 0338 LATIN CAPITAL LIGATURE OE +!compose 'o' 'e' to '½' # 0153 0339 LATIN SMALL LIGATURE OE +!!compose 'S' '<' to '¦' # 0160 0352 LATIN CAPITAL LETTER S WITH CARON +!!compose 's' '<' to '¨' # 0161 0353 LATIN SMALL LETTER S WITH CARON +!compose 'Y' ':' to '¾' # 0178 0376 LATIN CAPITAL LETTER Y WITH DIAERESIS +!!compose 'Z' '<' to '´' # 017D 0381 LATIN CAPITAL LETTER Z WITH CARON +!!compose 'z' '<' to '¸' # 017E 0382 LATIN SMALL LETTER Z WITH CARON +!compose 'E' 'u' to '¤' #u 20AC 8364 EURO SIGN diff --git a/config/console_keymap/vimcompose-utf8 b/config/console_keymap/vimcompose-utf8 @@ -0,0 +1,98 @@ +charset "iso-8859-1" +!! extracted from vim help files, covers wider range to above vim-compose.latin1 file +compose '!' 'I' to '¡' + # 0xa1 161 INVERTED EXCLAMATION MARK +compose 'C' 't' to '¢' # 0xa2 162 CENT SIGN +compose 'P' 'd' to '£' # 0xa3 163 POUND SIGN +compose 'C' 'u' to '¤' # 0xa4 164 CURRENCY SIGN +compose 'Y' 'e' to 'Â¥' # 0xa5 165 YEN SIGN +compose 'B' 'B' to '¦' # 0xa6 166 BROKEN BAR +compose 'S' 'E' to '§' # 0xa7 167 SECTION SIGN +compose ''' ':' to '¨' # 0xa8 168 DIAERESIS +compose 'C' 'o' to '©' # 0xa9 169 COPYRIGHT SIGN +compose '-' 'a' to 'ª' # 0xaa 170 FEMININE ORDINAL INDICATOR +compose '<' '<' to '«' # 0xab 171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +compose 'N' 'O' to '¬' # 0xac 172 NOT SIGN +compose '-' '-' to '­' # 0xad 173 SOFT HYPHEN +compose 'R' 'g' to '®' # 0xae 174 REGISTERED SIGN +compose ''' 'm' to '¯' # 0xaf 175 MACRON +compose 'D' 'G' to '°' # 0xb0 176 DEGREE SIGN +compose '+' '-' to '±' # 0xb1 177 PLUS-MINUS SIGN +compose '2' 'S' to '²' # 0xb2 178 SUPERSCRIPT TWO +compose '3' 'S' to '³' # 0xb3 179 SUPERSCRIPT THREE +compose ''' ''' to '´' # 0xb4 180 ACUTE ACCENT +compose 'M' 'y' to 'µ' # 0xb5 181 MICRO SIGN +compose 'P' 'I' to '¶' # 0xb6 182 PILCROW SIGN +compose '.' 'M' to '·' # 0xb7 183 MIDDLE DOT +compose ''' ',' to '¸' # 0xb8 184 CEDILLA +compose '1' 'S' to '¹' # 0xb9 185 SUPERSCRIPT ONE +compose '-' 'o' to 'º' # 0xba 186 MASCULINE ORDINAL INDICATOR +compose '>' '>' to '»' # 0xbb 187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +compose '1' '4' to '¼' # 0xbc 188 VULGAR FRACTION ONE QUARTER +compose '1' '2' to '½' # 0xbd 189 VULGAR FRACTION ONE HALF +compose '3' '4' to '¾' # 0xbe 190 VULGAR FRACTION THREE QUARTERS +compose '?' 'I' to '¿' # 0xbf 191 INVERTED QUESTION MARK +compose 'A' '!' to 'À' # 0xc0 192 LATIN CAPITAL LETTER A WITH GRAVE +compose 'A' ''' to 'Ã' # 0xc1 193 LATIN CAPITAL LETTER A WITH ACUTE +compose 'A' '>' to 'Â' # 0xc2 194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX +compose 'A' '?' to 'Ã' # 0xc3 195 LATIN CAPITAL LETTER A WITH TILDE +compose 'A' ':' to 'Ä' # 0xc4 196 LATIN CAPITAL LETTER A WITH DIAERESIS +compose 'A' 'A' to 'Ã…' # 0xc5 197 LATIN CAPITAL LETTER A WITH RING ABOVE +compose 'A' 'E' to 'Æ' # 0xc6 198 LATIN CAPITAL LETTER AE +compose 'C' ',' to 'Ç' # 0xc7 199 LATIN CAPITAL LETTER C WITH CEDILLA +compose 'E' '!' to 'È' # 0xc8 200 LATIN CAPITAL LETTER E WITH GRAVE +compose 'E' ''' to 'É' # 0xc9 201 LATIN CAPITAL LETTER E WITH ACUTE +compose 'E' '>' to 'Ê' # 0xca 202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX +compose 'E' ':' to 'Ë' # 0xcb 203 LATIN CAPITAL LETTER E WITH DIAERESIS +compose 'I' '!' to 'ÃŒ' # 0xcc 204 LATIN CAPITAL LETTER I WITH GRAVE +compose 'I' ''' to 'Ã' # 0xcd 205 LATIN CAPITAL LETTER I WITH ACUTE +compose 'I' '>' to 'ÃŽ' # 0xce 206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX +compose 'I' ':' to 'Ã' # 0xcf 207 LATIN CAPITAL LETTER I WITH DIAERESIS +compose 'D' '-' to 'Ã' # 0xd0 208 LATIN CAPITAL LETTER ETH (Icelandic) +compose 'N' '?' to 'Ñ' # 0xd1 209 LATIN CAPITAL LETTER N WITH TILDE +compose 'O' '!' to 'Ã’' # 0xd2 210 LATIN CAPITAL LETTER O WITH GRAVE +compose 'O' ''' to 'Ó' # 0xd3 211 LATIN CAPITAL LETTER O WITH ACUTE +compose 'O' '>' to 'Ô' # 0xd4 212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX +compose 'O' '?' to 'Õ' # 0xd5 213 LATIN CAPITAL LETTER O WITH TILDE +compose 'O' ':' to 'Ö' # 0xd6 214 LATIN CAPITAL LETTER O WITH DIAERESIS +compose '*' 'X' to '×' # 0xd7 215 MULTIPLICATION SIGN +compose 'O' '/' to 'Ø' # 0xd8 216 LATIN CAPITAL LETTER O WITH STROKE +compose 'U' '!' to 'Ù' # 0xd9 217 LATIN CAPITAL LETTER U WITH GRAVE +compose 'U' ''' to 'Ú' # 0xda 218 LATIN CAPITAL LETTER U WITH ACUTE +compose 'U' '>' to 'Û' # 0xdb 219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX +compose 'U' ':' to 'Ü' # 0xdc 220 LATIN CAPITAL LETTER U WITH DIAERESIS +compose 'Y' ''' to 'Ã' # 0xdd 221 LATIN CAPITAL LETTER Y WITH ACUTE +compose 'T' 'H' to 'Þ' # 0xde 222 LATIN CAPITAL LETTER THORN (Icelandic) +compose 's' 's' to 'ß' # 0xdf 223 LATIN SMALL LETTER SHARP S (German) +compose 'a' '!' to 'à' # 0xe0 224 LATIN SMALL LETTER A WITH GRAVE +compose 'a' ''' to 'á' # 0xe1 225 LATIN SMALL LETTER A WITH ACUTE +compose 'a' '>' to 'â' # 0xe2 226 LATIN SMALL LETTER A WITH CIRCUMFLEX +compose 'a' '?' to 'ã' # 0xe3 227 LATIN SMALL LETTER A WITH TILDE +compose 'a' ':' to 'ä' # 0xe4 228 LATIN SMALL LETTER A WITH DIAERESIS +compose 'a' 'a' to 'Ã¥' # 0xe5 229 LATIN SMALL LETTER A WITH RING ABOVE +compose 'a' 'e' to 'æ' # 0xe6 230 LATIN SMALL LETTER AE +compose 'c' ',' to 'ç' # 0xe7 231 LATIN SMALL LETTER C WITH CEDILLA +compose 'e' '!' to 'è' # 0xe8 232 LATIN SMALL LETTER E WITH GRAVE +compose 'e' ''' to 'é' # 0xe9 233 LATIN SMALL LETTER E WITH ACUTE +compose 'e' '>' to 'ê' # 0xea 234 LATIN SMALL LETTER E WITH CIRCUMFLEX +compose 'e' ':' to 'ë' # 0xeb 235 LATIN SMALL LETTER E WITH DIAERESIS +compose 'i' '!' to 'ì' # 0xec 236 LATIN SMALL LETTER I WITH GRAVE +compose 'i' ''' to 'í' # 0xed 237 LATIN SMALL LETTER I WITH ACUTE +compose 'i' '>' to 'î' # 0xee 238 LATIN SMALL LETTER I WITH CIRCUMFLEX +compose 'i' ':' to 'ï' # 0xef 239 LATIN SMALL LETTER I WITH DIAERESIS +compose 'd' '-' to 'ð' # 0xf0 240 LATIN SMALL LETTER ETH (Icelandic) +compose 'n' '?' to 'ñ' # 0xf1 241 LATIN SMALL LETTER N WITH TILDE +compose 'o' '!' to 'ò' # 0xf2 242 LATIN SMALL LETTER O WITH GRAVE +compose 'o' ''' to 'ó' # 0xf3 243 LATIN SMALL LETTER O WITH ACUTE +compose 'o' '>' to 'ô' # 0xf4 244 LATIN SMALL LETTER O WITH CIRCUMFLEX +compose 'o' '?' to 'õ' # 0xf5 245 LATIN SMALL LETTER O WITH TILDE +compose 'o' ':' to 'ö' # 0xf6 246 LATIN SMALL LETTER O WITH DIAERESIS +compose '-' ':' to '÷' # 0xf7 247 DIVISION SIGN +compose 'o' '/' to 'ø' # 0xf8 248 LATIN SMALL LETTER O WITH STROKE +compose 'u' '!' to 'ù' # 0xf9 249 LATIN SMALL LETTER U WITH GRAVE +compose 'u' ''' to 'ú' # 0xfa 250 LATIN SMALL LETTER U WITH ACUTE +compose 'u' '>' to 'û' # 0xfb 251 LATIN SMALL LETTER U WITH CIRCUMFLEX +compose 'u' ':' to 'ü' # 0xfc 252 LATIN SMALL LETTER U WITH DIAERESIS +compose 'y' ''' to 'ý' # 0xfd 253 LATIN SMALL LETTER Y WITH ACUTE +compose 't' 'h' to 'þ' # 0xfe 254 LATIN SMALL LETTER THORN (Icelandic) +compose 'y' ':' to 'ÿ' # 0xff 255 LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/config/etc/fstab b/config/etc/fstab @@ -1,13 +0,0 @@ -/dev/mapper/vg-alpine_root / xfs noatime,nosuid 0 0 -sysfs /sys sysfs rw 0 0 -proc /proc proc rw 0 0 -devtmpfs /dev devtmpfs rw,nosuid 0 0 -devpts /dev/pts devpts rw,relatime,mode=600,ptmxmode=000 0 0 -shm /dev/shm tmpfs rw,nosuid,nodev,relatime 0 0 -mqueue /dev/mqueue mqueue rw,nosuid,nodev,noexec 0 0 -none /run/cgroup cgroup2 rw 0 0 -/dev/sda1 /boot ext4 ro,nosuid 0 0 -/dev/mapper/vg-home /home xfs noatime,nosuid 0 0 -/dev/mmcblk0p1 /mnt/sd f2fs ro,nosuid,nodev 0 0 -/dev/mapper/vg-containers /mnt/volumes/containers xfs nosuid,noatime 0 0 -/dev/mapper/vg-containers_user /mnt/volumes/containers/user xfs nosuid,noatime 0 0 diff --git a/config/etc/mkinitfs/mkinitfs.conf b/config/etc/mkinitfs/mkinitfs.conf @@ -1 +0,0 @@ -features="ata base ext4 keymap kms mmc nvme raid scsi virtio xfs lvm" diff --git a/config/etc/profile.d/run_current_command.sh b/config/etc/profile.d/run_current_command.sh @@ -0,0 +1,8 @@ +# prepend /command to $PATH if not already present +case ":$PATH:" in + *:"/run/current/command":*) + ;; + *) + PATH="/run/current/command${PATH:+:$PATH}" + ;; +esac diff --git a/config/etc/profile.d/slashcommand.sh b/config/etc/profile.d/slashcommand.sh @@ -1,8 +0,0 @@ -# prepend /command to $PATH if not already present -case ":$PATH:" in - *:"/command":*) - ;; - *) - PATH="/command${PATH:+:$PATH}" - ;; -esac diff --git a/config/etc/skel/.config/zsh/.zshenv b/config/etc/skel/.config/zsh/.zshenv @@ -0,0 +1,25 @@ +# nice PS4 with elapsed seconds (to two decimal places) and subshell indication +if zmodload zsh/system; then # to get actual pid + setopt PROMPT_SUBST + if [[ $TERM == (xterm|rxvt|screen|linux|console|Eterm|putty)* ]]; then + # first color is for main shell process, second is subshell + PS4_PID_COLORS=(cyan magenta) + PS4='+%B${SECONDS} %F{${PS4_PID_COLORS[1+($$ != ${sysparams[pid]})]}}%N%f:%F{yellow}%i%f>%b ' + else + PS4='+%B${SECONDS} ${sysparams[pid]} %N:%i>%b ' + fi + + # two digits after the decimal point + typeset -g -F 2 SECONDS + # typeset -F 2 SECONDS # do it twice, some bug I don't understand +fi + +if [[ -o login ]]; then + # Set default XDG directories so apps (and /etc/zsh/*) will make use of them + : ${XDG_DATA_HOME:=$HOME/.local/share} + : ${XDG_CONFIG_HOME:=$HOME/.config} + : ${XDG_STATE_HOME:=$HOME/.local/state} + : ${XDG_CACHE_HOME:=$HOME/.cache} + export XDG_DATA_HOME XDG_CONFIG_HOME XDG_STATE_HOME XDG_CACHE_HOME +fi +# vim: ft=zsh noet ts=4 sts=4 sw=4 diff --git a/config/etc/skel/.config/zsh/.zshrc b/config/etc/skel/.config/zsh/.zshrc @@ -0,0 +1,93 @@ +setopt extended_history inc_append_history hist_find_no_dups hist_expire_dups_first +HISTFILE=${XDG_DATA_HOME:-$HOME/.local/share}/zsh/history +HISTSIZE=2000 +SAVEHIST=1000 + +alias ll='ls -lh --full-time' +alias ns='netstat -ltup' + +setopt warn_create_global +prompt_hash_color_zshrc() { + local h c + # djbhash, simple string hash function to generate distinct numbers for similar strings + h=5381 + for c in ${(s::)1}; do + h=$(( ( (h << 5) + h + #c ) % 0xffffffff )) + done + + local -a color_list + # List of colors bright enough to be readable against dark background + if (($+FG_COLOR_NUMBERS)); then + color_list=( $=FG_COLOR_NUMBERS ) + elif [[ $terminfo[colors] == 256 ]]; then + color_list=( + 23 24 25 26 27 28 29 + 30 31 32 33 34 35 36 37 38 39 + 40 41 42 43 44 45 46 47 48 49 + 50 51 + 61 62 63 64 65 66 67 68 69 + 70 71 72 73 74 75 76 77 78 79 + 80 81 82 83 84 85 86 87 + 94 95 96 97 98 99 + 100 101 102 103 104 105 106 107 108 109 + 110 111 112 113 114 115 116 117 118 119 + 120 121 122 123 126 127 128 129 + 130 131 132 133 134 135 136 137 138 139 + 140 141 142 143 144 145 146 147 148 149 + 150 151 152 153 154 155 156 157 158 159 + 160 161 162 163 164 165 166 167 168 169 + 170 171 172 173 174 175 176 177 178 179 + 180 181 182 183 184 185 186 187 188 189 + 190 191 192 193 194 195 196 197 198 199 + 200 201 + ) + else + color_list=( 1 2 3 5 6 7 9 10 11 13 14 15 ) + fi + printf '%%F{%d}' $color_list[$h%$#color_list+1] +} + +(){ # prompt + local prompt_char prompt_color_host prompt_color_jobs prompt_color_errno prompt_color_dir prompt_color_user prompt_base + + if [[ ${LC_ALL:-${LC_MESSAGES:-$LANG}} == *.UTF-8 ]]; then + if (($UID)); then + prompt_char='â–·' + else + prompt_char='â–¶' + fi + else + if (($UID)); then + prompt_char='%%' + else + prompt_char='#' + fi + fi + + prompt_color_host="%b%F{green}" + prompt_color_jobs="%b%F{cyan}" + prompt_color_errno="%B%F{yellow}" + prompt_color_dir="%B%F{yellow}" + + if [[ $terminfo[colors] == 256 ]]; then + autoload string_hash_color + prompt_color_host="%b$(prompt_hash_color_zshrc $HOST)" + prompt_color_errno="%b%F{214}" + prompt_color_dir="%b%F{214}" + fi + + prompt_color_user=$prompt_color_host + + if [[ $UID -eq 0 ]]; then + prompt_color_dir="%B%F{red}" + fi + + prompt_base="${prompt_color_user}%n${prompt_color_host}@%m%k ${prompt_color_dir}%1~" + PS1="%(?..${prompt_color_errno}<%?>)%(1j.${prompt_color_jobs}{%j}.)$prompt_base ${prompt_char}%b%f%k " + PS2="$prompt_base %_> %b%f%k" + PS3="$prompt_base ?# %b%f%k" +} +unset -f prompt_hash_color_zshrc + +autoload -Uz compinit +compinit diff --git a/config/etc/update-extlinux.conf b/config/etc/update-extlinux.conf @@ -1,74 +0,0 @@ -# configuration for extlinux config builder - -# overwrite -# Overwrite current /boot/extlinux.conf. If this is not '1' we will only -# write to /boot/extlinux.conf.new -overwrite=0 - -# vesa_menu -# use fancy vesa menu (vesamenu.c32) menus, won't work with serial -vesa_menu=0 - -# default_kernel_opts -# default kernel options -default_kernel_opts=init=/current/init/bin/init rootflags=noatime - -# modules -# modules which should be loaded before pivot_root -modules=sd-mod,usb-storage,ext4,xfs,lvm - -# root -# root device - if not specified, will be guessed using -# blkid -o export /dev/root -root=/dev/mapper/vg-spark_root - -# verbose -# if set to non-zero, update-extlinux will be a lot more verbose. -verbose=1 - -# hidden -# if set to non-zero, the boot menu will be hidden by default. -hidden=0 - -# timeout -# number of seconds to wait before booting default -timeout=3 - -# default -# default kernel to boot -default=virt - -# serial_port -# serial port number - if not specified, serial console will be disabled -serial_port= - -# serial_baud -# the baudrate for the serial port. Will use 115200 if unset -serial_baud=115200 - -# xen_opts -# options to hand to xen hypervisor, useful ones are: -# dom0_mem=384M (give domain-0 environment 384M ram) -xen_opts=dom0_mem=384M - -# if you copy /usr/share/syslinux/reboot.c32 to /boot/, a menu entry -# will be auto-generated for it - -# if you copy hdt.c32, libgpl.c32, and libmenu.c32 from /usr/share/syslinux/ -# to /boot/, a menu entry will be auto-generated for HDT - -# if you download and install /boot/memtest, then if HDT is present it -# will use it, else a separate menu entry will be auto-generated for -# memtest - -# optional password -# you can generate a SHA512 password using: mkpasswd -# -# if you assign a password, you should make this file world-unreadable -# -# if a password is assigned, the menu entries can't be edited at boot -# time, and HDT if present is password-protected -# -# you can also include "MENU PASSWD" in any custom entries you have in -# /etc/update-extlinux.d/ -password='' diff --git a/config/etc/zsh/zshrc.d/90_warn_deploy_ssh_key.zsh b/config/etc/zsh/zshrc.d/90_warn_deploy_ssh_key.zsh @@ -1,9 +0,0 @@ -[[ $UID == 0 && -o login ]] && () { - setopt local_options extended_glob - local files warn='%K{yellow}%F{black}WARNING%k%f' - local -a pubkeys=( /etc/ssh/ssh_host_*_key.pub(N) ) - (($#pubkeys)) || return 0 - files=$(grep -l change_me@deploy $pubkeys) || return 0 - printf >&2 "%s\n" "${(%)warn} There are shared deployment ssh host keys in $files; please remove them and create fresh set of keys." -} -# vim: set ft=zsh ts=4: diff --git a/config/etc/hostname b/config/hostname diff --git a/install b/install @@ -1,52 +0,0 @@ -#!/bin/zsh -setopt no_unset warn_create_global extended_glob -zmodload -F zsh/stat b:zstat || exit $? -zmodload -m -F zsh/files b:zf_\* || exit $? -#zmodload zsh/zutil || exit $? # for zparseopts -#zmodload zsh/datetime || exit $? # for $EPOCHREALTIME - -die_ret() { - local ret - ret=$1 - shift - printf >&2 '%s\n' "$@" - exit $ret -} -die() { - die_ret 1 "$@" -} -die100() { # 100: wrong usage - die_ret 100 "$@" -} -die111() { # 111: system call failed - die_ret 111 "$@" -} - -install_to_all() { - local orig_cwd=$PWD - cd $ALL_DIR || exit $? - mkdir s6-rc-source || exit $? - ./command/fsapply ./s6-rc-source $PWD/conf/s6-rc.fileset || exit $? - [[ -f ./s6-rc-source/ok-all/type ]] || die111 \ - "Failed to generate s6-rc source directory" - ./command/s6-rc-compile ./s6-rc-db ./s6-rc-source || exit $? - ./init-maker/install $PWD || exit $? - local cmd - for cmd in init/bin/*; do - s6-ln -s ../$cmd ./command/$cmd:t || exit $? - done - cat >motd <<EOF -Welcome to $(<conf/static/etc/hostname)! -This system has configuration managed in $orig_cwd (last change on $(GIT_DIR=$orig_cwd/.git git show -s --pretty='format:%ai by %an')) -EOF -} -typeset -f -t install_to_all - -typeset -g ALL_DIR=$0:h:h -if [[ $ALL_DIR == /versions/all.* ]]; then - path=( $ALL_DIR/command "$path[@]" ) - #fpath=( $ALL_DIR/zsh-functions "$fpath[@]" ) - install_to_all || exit $? -else - die100 "Fatal: ${(qqq)0}: This script needs to be run from versioned directory as a part of installation procedure." -fi diff --git a/parse_fs.include.awk b/parse_fs.include.awk @@ -12,12 +12,12 @@ BEGIN{ fail = 0 } -function q(s) { # quote string for execline - gsub(/\\/, "\\\\", s) - gsub(/\n/, "\\n", s) - gsub(/\"/, "\\\"", s) - return "\"" s "\"" -} +#function q(s) { # quote string for execline +# gsub(/\\/, "\\\\", s) +# gsub(/\n/, "\\n", s) +# gsub(/\"/, "\\\"", s) +# return "\"" s "\"" +#} function fatal_mtp(s){ print mountpoints[mtp] ": Error: " s " [" mtp "]" >"/dev/stderr" @@ -71,6 +71,17 @@ function get(name) { return mtp_get(mtp, name) } +# execline quoted get function +function qget(name) { + if(name == "") { + return q(mtp) + } + if(name == "remount_options") { + return get("options") == "defaults" ? "remount" : q("remount," get("options")) + } + return q(get(name)) +} + function set(name, value) { if(name in param_validator) { if(value !~ ("^" param_validator[name] "$")) { @@ -203,13 +214,6 @@ function process_record( name, i, mtp2) { } } - - q_file = q(mtp) - q_spec = q(get("source")) - q_vfstype = q(get("type")) - q_remount_options = get("options") == "defaults" ? "remount" : q("remount," get("options")) - q_options = q(get("options")) - write_oneshot() if((mtp,"bundles") in params) { diff --git a/postinstall b/postinstall @@ -1,15 +1,18 @@ #!/bin/zsh setopt no_unset warn_create_global extended_glob -zmodload -F zsh/stat b:zstat || exit $? -zmodload -m -F zsh/files b:zf_\* || exit $? -#zmodload zsh/zutil || exit $? # for zparseopts -zmodload zsh/datetime || exit $? # for $EPOCHREALTIME + +# error handling +typeset -ga revert die_ret() { - local ret + local ret step ret=$1 shift printf >&2 '%s\n' "$@" + for step in $revert; do + printf >&2 '* Running revert step: %s\n' $step + $step + done exit $ret } die() { @@ -21,88 +24,30 @@ die100() { # 100: wrong usage die111() { # 111: system call failed die_ret 111 "$@" } - -ensure_symlink() { - local target - if ! [[ -e $1 ]]; then - s6-ln -s $2 $1 || return $? - fi - - if [[ $2 == /* ]]; then - target=$2:A - else - target=$1:h/$2 - target=$target:A - fi - - if ! [[ -h $1 ]]; then - echo >&2 "Error: not a symlink: ${(qqq)1}" - return 1 - elif [[ $1:A != $target ]]; then - echo >&2 "Error: ${(qqq)1} points to ${(qqq)1:A} instead of ${(qqq)target}" - return 1 - fi +-() { + "$@" || die_ret $? "Command failed: $*" } -symlink_static_file() { - [[ $1 == /* ]] || die "symlink_static_file: requires absolute path" - local relative_base up rel1 rel2 - rel1=./conf/static$1 - [[ -f $rel1 ]] || die111 "Cannot symlink: file does not exist: ${(qqq)rel1}" - relative_base=$1:h - until [[ ${${:-$relative_base/$up}:P} == / ]] ; do - up=../$up - done - rel2=$relative_base/$up/current/conf/static$1 - [[ $rel1:P == $rel2:P ]] || die "Directory mismatch" - - if [[ ! -L $1 && -f $1 ]]; then - mv $1 $1.orig.$EPOCHSECONDS || exit $? - fi - ensure_symlink $1 ${up}current/conf/static$1 || return $? -} +# modules +- zmodload -F zsh/stat b:zstat +- zmodload -m -F zsh/files b:zf_\* +- zmodload zsh/datetime # for $EPOCHREALTIME +# functions link_changed() { - local pre post - if (($+preinstall_current)); then - pre=${${:-$preinstall_current_p/$1}:P} - else - pre= - fi - post=${${:-/current/$1}:P} + local prev cur + prev=${${:-$prev_version/$1}:P} + post=${${:-$current/$1}:P} [[ "$pre" != "$post" ]] } -setup_static_symlinks() { - symlink_static_file /etc/hostname || return $? - symlink_static_file /etc/fstab || return $? - symlink_static_file /etc/profile.d/slashcommand.sh || return $? - symlink_static_file /etc/mkinitfs/mkinitfs.conf || return $? - symlink_static_file /etc/ssh/sshd_config || return $? - symlink_static_file /etc/update-extlinux.conf || return $? - symlink_static_file /etc/zsh/zshrc.d/90_warn_deploy_ssh_key.zsh || return $? - - # Not static, generated in ./install - if [[ ! -L /etc/motd && -f /etc/motd ]]; then - mv /etc/motd /etc/motd.orig.$EPOCHSECONDS || exit $? - fi - ensure_symlink /etc/motd ../current/motd || return $? -} - -setup_skel() { - ./command/link-skel || return $? -} - -setup_storage() { -} - setup_rc() { local diff_ret # Check if s6-rc definition changed - diff --recursive --unified $preinstall_current_p/s6-rc-source ./s6-rc-source; diff_ret=$? + diff --recursive --unified $prev_version/config/s6-rc-source ./config/s6-rc-source; diff_ret=$? (( $diff_ret == 0 || $diff_ret == 1 )) || \ die111 "Could not diff s6-rc-source directories; exitcode $diff_ret" - if link_changed package; then + if link_changed command/s6-rc; then if (( $diff_ret == 1 )); then # Both s6-rc DB source and installed software changed. # s6-rc-format-upgrade to tmpdir, then s6-rc-update @@ -111,7 +56,7 @@ setup_rc() { s6-rc-compile $tmp_db $preinstall_current_p/s6-rc-source || return $? s6-rc-format-upgrade -v2 $tmp_db || return $? s6-rc-update -v2 /current/s6-rc-db/ || return $? - rm -r $tmp_db || return $? + zf_rm -r $tmp_db || return $? else # Installed software changed but s6-rc DB source is the same. # s6-rc-format-upgrade to new compiled DB directly @@ -122,6 +67,8 @@ setup_rc() { # s6-rc-update to new compiled DB directly s6-rc-update -v2 /current/s6-rc-db/ || return $? fi + s6-rc -v2 -u -t 30000 change ok-all + true } setup_containers() { @@ -154,43 +101,69 @@ setup_fileset() { $rsync --delete-excluded --log-file $SETUP_DIR/rsync.log.get / $SETUP_DIR/files.pre/ || return $? cp -a --reflink=auto $SETUP_DIR/files.pre $SETUP_DIR/files.post || return $? ./command/fsapply $SETUP_DIR/files.post $PWD/conf/postinstall.fileset || exit $? - mkdir $SETUP_DIR/files.bak || return $? + zf_mkdir $SETUP_DIR/files.bak || return $? + revert+=( revert_fileset ) $rsync --log-file $SETUP_DIR/rsync.log.put $SETUP_DIR/files.post/ / --backup --backup-dir=$SETUP_DIR/files.bak || return $? } -postinstall() { - typeset -g SETUP_DIR=/versions/postinstall/$EPOCHSECONDS.$ALL_DIR:t - cd $ALL_DIR || exit $? - mkdir -p $SETUP_DIR - - ensure_symlink /command current/command || return $? +revert_fileset() { + $rsync --log-file $SETUP_DIR/rsync.log.revert $SETUP_DIR/files.bak/ / +} - setup_static_symlinks || return $? +setup_containers() { + execlineb -P ./conf/s6-rc-source/containers/up || return $? +} - if [[ -d /run/s6-rc/ ]]; then - # TODO: determine mountpoint changes - setup_storage || return $? - mount -a || return $? +# main function +postinstall() { + - cd $current + typeset -g SETUP_DIR + if (( $# )); then + SETUP_DIR=$versions/postinstall/$EPOCHSECONDS.$this_version + else + SETUP_DIR=$versions/postinstall/$EPOCHSECONDS.$this_version..$prev_version:t fi + - zf_mkdir -p $SETUP_DIR - setup_fileset || return $? + - setup_fileset - if [[ -d /run/s6-rc/ ]]; then - setup_rc || return $? + if (( $# )); then + - setup_rc + - setup_containers fi - - setup_skel || return $? - setup_containers || return $? - exit 0 } typeset -ft postinstall -typeset -g ALL_DIR=$0:h:h -if [[ $ALL_DIR != /versions/all.* ]]; then - die100 "Fatal: ${(qqq)0}: This script needs to be run from versioned directory as a part of installation procedure." -fi +typeset -g versions current this_version +current=/run/current # @@current@@ +versions=/versions # @@versions@@ +this_version=$0:A:h:h:t + +# arguments and validation +() { + local linked_path=$current/command/install-as-current-environment.postinstall + if (( $# > 1 )); then + die100 "Fatal: ${(qqq)0}: Too many arguments" + fi + if [[ $0:A != $versions/* ]]; then + die100 "Fatal: ${(qqq)0}: This script expects to be installed under ${(qqq)versions}." + fi + if [[ $0:A != $linked_path ]]; then + die111 "Fatal: ${(qqq)0}: This script needs to be run after installing the given environment as ${(qqq)current}." + fi + if (( $# )); then + if [[ $1:P != $versions/* ]]; then + die111 "Fatal: ${(qqq)0}: Old version doesn't seem to be inside ${(qqq)versions}: ${(qqq)1}." + fi + typeset -g prev_version=$1:P + if ! [[ $prev_version:t == env.* ]]; then + die111 "Unexpected previous environment name: ${(qqq)prev_version}" + fi + fi + if ! [[ $this_version == env.* ]]; then + die111 "Unexpected current environment name: ${(qqq)this_version}" + fi +} -path=( $ALL_DIR/command "$path[@]" ) -#fpath=( $ALL_DIR/zsh-functions "$fpath[@]" ) -postinstall || exit $? +- postinstall "$@" diff --git a/postinstall.aat b/postinstall.aat @@ -61,34 +61,6 @@ |} |### postinstall.fileset ### |END{ -|#/boot + -|#/boot/extlinux.conf + -|#CN # Managed by /usr/src/core-system -|# DEFAULT menu.c32 -|# PROMPT 0 -|# MENU TITLE Alpine/Linux Boot Menu -|# #MENU HIDDEN -|# #MENU AUTOBOOT Alpine will be booted automatically in # seconds. -|# TIMEOUT 30 -|# -|# LABEL virt -|# MENU LABEL Current linux-virt -|# LINUX vmlinuz-virt -|# INITRD initramfs-virt -|# APPEND root=/dev/mapper/vg-spark_root init=/current/init/bin/init modules=sd-mod,usb-storage,ext4,xfs,lvm rootflags=noatime -|# -|# LABEL virt-previous -|# MENU LABEL Previous linux-virt -|# LINUX vmlinuz-virt -|# INITRD initramfs-virt -|# APPEND root=/dev/mapper/vg-spark_root init=/previous/init/bin/init modules=sd-mod,usb-storage,ext4,xfs,lvm rootflags=noatime -|#|split("libutil.c32 libcom32.c32 mboot.c32 menu.c32 vesamenu.c32", extlinux_modules, " ") -|#|for(n in extlinux_modules) { -|#| mod = extlinux_modules[n] -|#/boot/{{mod}} + -|#? cmp "$fname" '/usr/share/syslinux/{{mod}}' -|#! cp -va '/usr/share/syslinux/{{mod}}' "$fname" -|#|} /etc + /etc/group + @@ -113,4 +85,11 @@ |passwd_user("ccx:x:1000:1000:Jan Pobrislo:/home/ccx:/bin/zsh") |#shadow_user("ccx:*:10000::::::") +/etc/skel + +/etc/skel/.config + d m750 +/etc/skel/.cache + d m750 +/etc/skel/.local + d m755 +/etc/skel/.local/state + d m750 +/etc/skel/.local/share + d m755 +/etc/skel/.local/share/zsh + d m750 |} diff --git a/postinstall.fileset b/postinstall.fileset @@ -1,164 +0,0 @@ - -/etc + -/etc/group + -? grep -qEe '^sshd:x:22:$' "$fname" -! if grep -qEe '^[^:]*:[^:]*:22:' "$fname"; then - sed -ire 's|^[^:]*:[^:]*:22:|sshd:x:22:|' "$fname" - else - printf '%s\n' 'sshd:x:22:' >> "$fname" - fi -? grep -qEe '^dhcpcd:x:546:$' "$fname" -! if grep -qEe '^[^:]*:[^:]*:546:' "$fname"; then - sed -ire 's|^[^:]*:[^:]*:546:|dhcpcd:x:546:|' "$fname" - else - printf '%s\n' 'dhcpcd:x:546:' >> "$fname" - fi -? grep -qEe '^ccx:x:1000:$' "$fname" -! if grep -qEe '^[^:]*:[^:]*:1000:' "$fname"; then - sed -ire 's|^[^:]*:[^:]*:1000:|ccx:x:1000:|' "$fname" - else - printf '%s\n' 'ccx:x:1000:' >> "$fname" - fi -# Groups for /dev permissions (mdevd.conf): disk, input, uucp -? grep -qEe '^disk:x:6:root,adm$' "$fname" -! if grep -qEe '^[^:]*:[^:]*:6:' "$fname"; then - sed -ire 's|^[^:]*:[^:]*:6:|disk:x:6:root,adm|' "$fname" - else - printf '%s\n' 'disk:x:6:root,adm' >> "$fname" - fi -? grep -qEe '^input:x:966:xorg$' "$fname" -! if grep -qEe '^[^:]*:[^:]*:966:' "$fname"; then - sed -ire 's|^[^:]*:[^:]*:966:|input:x:966:xorg|' "$fname" - else - printf '%s\n' 'input:x:966:xorg' >> "$fname" - fi -? grep -qEe '^uucp:x:14:ccx$' "$fname" -! if grep -qEe '^[^:]*:[^:]*:14:' "$fname"; then - sed -ire 's|^[^:]*:[^:]*:14:|uucp:x:14:ccx|' "$fname" - else - printf '%s\n' 'uucp:x:14:ccx' >> "$fname" - fi - -/etc/passwd f + -?i grep -q '^root:.*:/bin/zsh$' -!f sed -Ee 's|^(root:.*:)[^:]*$|\1/bin/zsh|' - -/etc/passwd f + -!f awk 'BEGIN { FS=OFS=":"; seen=0; line="sshd:x:22:22:sshd:/dev/null:/sbin/nologin"; split(line, a) } - { uids[$3] = $0 } - $1 == a[1] { - for(n in a) { - if(a[n] != $n) { - print "error: differing present and requested lines" >>"/dev/stderr" - print "requested: " line >>"/dev/stderr" - print "present: " $0 >>"/dev/stderr" - exit 1 - } - } - seen = 1 - } - { print $0 } - END { - if(seen == 0) { - if(a[3] in uids) { - print "error: user record with requested UID already present" >>"/dev/stderr" - print "requested: " line >>"/dev/stderr" - print "present: " uids[a[3]] >>"/dev/stderr" - exit 1 - } - print line - } - }' -/etc/shadow f + -!f awk 'BEGIN { FS=OFS=":"; seen=0; line="sshd:!::0:::::"; split(line, a) } - $1 == a[1] { - for(n in a) { - if(a[n] != $n) { - print "error: differing present and requested lines" >>"/dev/stderr" - print "requested: " line >>"/dev/stderr" - print "present: " $0 >>"/dev/stderr" - exit 1 - } - } - seen = 1 - } - { print $0 } - END { - if(seen == 0) { - print line - } - }' - -/etc/passwd f + -!f awk 'BEGIN { FS=OFS=":"; seen=0; line="dhcpcd:x:546:546:sshd:/dev/null:/sbin/nologin"; split(line, a) } - { uids[$3] = $0 } - $1 == a[1] { - for(n in a) { - if(a[n] != $n) { - print "error: differing present and requested lines" >>"/dev/stderr" - print "requested: " line >>"/dev/stderr" - print "present: " $0 >>"/dev/stderr" - exit 1 - } - } - seen = 1 - } - { print $0 } - END { - if(seen == 0) { - if(a[3] in uids) { - print "error: user record with requested UID already present" >>"/dev/stderr" - print "requested: " line >>"/dev/stderr" - print "present: " uids[a[3]] >>"/dev/stderr" - exit 1 - } - print line - } - }' -/etc/shadow f + -!f awk 'BEGIN { FS=OFS=":"; seen=0; line="dhcpcd:!::0:::::"; split(line, a) } - $1 == a[1] { - for(n in a) { - if(a[n] != $n) { - print "error: differing present and requested lines" >>"/dev/stderr" - print "requested: " line >>"/dev/stderr" - print "present: " $0 >>"/dev/stderr" - exit 1 - } - } - seen = 1 - } - { print $0 } - END { - if(seen == 0) { - print line - } - }' - -/etc/passwd f + -!f awk 'BEGIN { FS=OFS=":"; seen=0; line="ccx:x:1000:1000:Jan Pobrislo:/home/ccx:/bin/zsh"; split(line, a) } - { uids[$3] = $0 } - $1 == a[1] { - for(n in a) { - if(a[n] != $n) { - print "error: differing present and requested lines" >>"/dev/stderr" - print "requested: " line >>"/dev/stderr" - print "present: " $0 >>"/dev/stderr" - exit 1 - } - } - seen = 1 - } - { print $0 } - END { - if(seen == 0) { - if(a[3] in uids) { - print "error: user record with requested UID already present" >>"/dev/stderr" - print "requested: " line >>"/dev/stderr" - print "present: " uids[a[3]] >>"/dev/stderr" - exit 1 - } - print line - } - }' - diff --git a/postinstall.rsfilter b/postinstall.rsfilter @@ -1,8 +0,0 @@ -+ /etc -+ /etc/group -+ /etc/passwd -+ /etc/passwd -+ /etc/shadow -+ /etc/passwd -+ /etc/shadow -+ /etc/passwd diff --git a/rc-builder.include.awk b/rc-builder.include.awk @@ -150,7 +150,7 @@ function finish(){ } function finish_el(){ finish() - print "\t#!/command/execlineb -P" + print "\t#!"exec_path("execlineb")" -P" } function run_arg(cmd){ assert_service_type("longrun", "run_arg(\"" cmd "\")") diff --git a/rc-common.aat b/rc-common.aat @@ -22,20 +22,20 @@ |} |function runscript_el_cgroup_v2(svc_name) { /{{svc_name}}/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/{{svc_name}} } - redirfd -w 1 /run/cgroup/s6-rc/{{svc_name}}/cgroup.procs - printf "%s" ${SERVICE_PID} +CN #!{{exec_path("execlineb")}} -P + {{qconfig("getpid")}} SERVICE_PID + {{qconfig("foreground")}} { + {{qconfig("importas")}} -i SERVICE_PID SERVICE_PID + {{qconfig("if")}} { {{qconfig("test")}} -d /run/cgroup } + {{qconfig("if")}} { {{qconfig("mkdir")}} -p /run/cgroup/s6-rc/{{svc_name}} } + {{qconfig("redirfd")}} -w 1 /run/cgroup/s6-rc/{{svc_name}}/cgroup.procs + {{qconfig("printf")}} "%s" ${SERVICE_PID} } - unexport SERVICE_PID + {{qconfig("unexport")}} SERVICE_PID |} |function runscript_simple(svc_name, cmd) { |runscript_el_cgroup_v2(svc_name) - fdmove -c 2 1 + {{qconfig("fdmove")}} -c 2 1 {{cmd}} m755 |} @@ -43,8 +43,8 @@ m755 | longrun(name "-log", "mount-run-cgroup\nrootfs") /{{name}}-log/consumer-for cN {{name}} m640 |runscript_el_cgroup_v2(name "-log") - if { mkdir -p /var/log/{{name}} } - s6-log -b -- n10 s10240000 t /var/log/{{name}} + {{qconfig("if")}} { {{qconfig("mkdir")}} -p /var/log/{{name}} } + {{qconfig("s6-log")}} -b -- n10 s10240000 t /var/log/{{name}} m755 | longrun(name, deps) /{{name}}/producer-for cN {{name}}-log m640 diff --git a/s6-rc-mount.aat b/s6-rc-mount.aat @@ -4,17 +4,17 @@ |function write_oneshot() { |oneshot(svc_name, dependencies()) |if(down_umount()) { -/{{svc_name}}/down cN s6-umount {{q_file}} m644 +/{{svc_name}}/down cN {{qconfig("s6-umount")}} {{qget()}} m644 |} else if (down_readonly()) { -/{{svc_name}}/down cN mount -o remount,ro {{q_file}} m644 +/{{svc_name}}/down cN {{qconfig("mount")}} -o remount,ro {{qget()}} m644 |} /{{svc_name}}/up CN # mount {{get("source")}} on {{mtp}} |if(boolean("mkdir")) { - if { mkdir -p {{q_file}} } + {{qconfig("if")}} { {{qconfig("mkdir")}} -p {{qget()}} } |} - if -n -t { mount -t {{q_vfstype}} -o {{q_remount_options}} {{q_spec}} {{q_file}} } - mount -t {{q_vfstype}} -o {{q_options}} {{q_spec}} {{q_file}} + {{qconfig("if")}} -n -t { {{qconfig("mount")}} -t {{qget("type")}} -o {{qget("remount_options")}} {{qget("source")}} {{qget()}} } + {{qconfig("mount")}} -t {{qget("type")}} -o {{qget("options")}} {{qget("source")}} {{qget()}} |} |### include main loop / parsing code ### @awk parse_fs.include.awk diff --git a/s6-rc.aat b/s6-rc.aat @@ -18,9 +18,9 @@ |start_oneshot("loopback") |enabled_bundle("net-all") |up() - if { ip link set lo up } - if -nt { ip addr add 127.0.0.1/8 dev lo brd + } - pipeline { ip addr show dev lo } grep -q "inet 127\\.0\\.0\\.1" + {{qexec("if")}} { {{qexec("ip")}} link set lo up } + {{qexec("if")}} -nt { {{qexec("ip")}} addr add 127.0.0.1/8 dev lo brd + } + {{qexec("pipeline")}} { {{qexec("ip")}} ip addr show dev lo } {{qexec("grep")}} -q "inet 127\\.0\\.0\\.1" |end() |if(find("static_ip.rows")) { @@ -29,11 +29,11 @@ |in_bundle("net-" get("i.iface")) |add_to_bundle("net-all", "net-" get("i.iface")) |up() - if { ip link set {<i.iface>} up } - if -nt { ip addr add {<i.ip>}/{<i.prefix>} dev {<i.iface>} } - pipeline { ip addr show dev {<i.iface>} } grep -F -q -e "inet {<i.ip>}/{<i.prefix>} " + {{qexec("if")}} { {{qexec("ip")}} link set {<i.iface>} up } + {{qexec("if")}} -nt { {{qexec("ip")}} addr add {<i.ip>}/{<i.prefix>} dev {<i.iface>} } + {{qexec("pipeline")}} { {{qexec("ip")}} ip addr show dev {<i.iface>} } {{qexec("grep")}} -F -q -e "inet {<i.ip>}/{<i.prefix>} " |down() - ip addr del {<i.ip>} dev {<i.iface>} + {{qexec("ip")}} addr del {<i.ip>} dev {<i.iface>} |end() @endfor |} @@ -43,11 +43,11 @@ |start_oneshot(with_counter("net-" get("i.iface") "-route"), list_services_with_counter("net-" get("i.iface") "-ip")) |in_bundle("net-" get("i.iface")) |up() - if { ip link set {<i.iface>} up } - if -nt { ip route add dev {<i.iface>} {<i.spec>} } - pipeline { ip route show dev {<i.iface>} {<i.spec>} } grep -q . + {{qexec("if")}} { {{qexec("ip")}} link set {<i.iface>} up } + {{qexec("if")}} -nt { {{qexec("ip")}} route add dev {<i.iface>} {<i.spec>} } + {{qexec("pipeline")}} { {{qexec("ip")}} route show dev {<i.iface>} {<i.spec>} } grep -q . |down() - ip route del dev {<i.iface>} {<i.spec>} + {{qexec("ip")}} route del dev {<i.iface>} {<i.spec>} |end() @endfor |} @@ -65,13 +65,13 @@ |start_oneshot("hostname") |in_bundle("ok-all-but-tty") |up() - hostname -F /etc/hostname + {{qexec("hostname")}} -F {{qconfig("hostname")}} |end() |start_oneshot("loadkeys", "kbd_mode") |enabled_bundle("ok-all-but-tty") |up() - loadkeys --unicode /root/keymap + {{qexec("cd")}} {{qconfig("config/console_keymap")}} {{qexec("loadkeys")}} --unicode keymap |end() |### per-TTY services ### @@ -80,13 +80,13 @@ |start_longrun("tty" tty, "ok-sysinit") |in_bundle("gettys") |run_el() - foreground { /command/issue-gen } - env LOGIN_TTY=/dev/tty{{tty}} /sbin/getty -l login-keepenv 38400 tty{{tty}} linux + {{qexec("foreground")}} { {{qconfig("issue-gen")}} } + {{qconfig("env")}} LOGIN_TTY=/dev/tty{{tty}} {{qconfig("getty")}} -l {{qconfig("login-keepenv")}} 38400 tty{{tty}} linux |finish_el() - redirfd -w 1 /dev/tty{{tty}} - fdmove -c 2 1 - foreground { s6-echo "\nwaiting for session cleanup" } - flock /run/ttylock/tty{{tty}} true + {{qexec("redirfd")}} -w 1 /dev/tty{{tty}} + {{qexec("fdmove")}} -c 2 1 + {{qexec("foreground")}} { {{qexec("s6-echo")}} "\nwaiting for session cleanup" } + {{qexec("flock")}} /run/ttylock/tty{{tty}} {{qexec("true")}} |end() |} @@ -114,14 +114,14 @@ |up() # description="Set the dmesg level for a cleaner boot" # dmesg_level=1 - dmesg -n1 + {{qexec("dmesg")}} -n1 |end() |start_oneshot("modules", "dmesg") |in_bundle("ok-all-but-tty") |up() @for i in modprobe_modules - foreground { modprobe {<i.module>} } + {{qexec("foreground")}} { {{qexec("modprobe")}} {<i.module>} } @endfor |end() @@ -133,7 +133,7 @@ |start_oneshot("mdevd-coldplug", "mount-dev mount-sys modules mdevd") |up() - mdevd-coldplug + {{qexec("mdevd-coldplug")}} |end() |start_oneshot("udev-coldplug", "mount-dev mount-sys modules udev") @@ -149,8 +149,8 @@ |start_longrun("mdevd", "mount-dev") # TODO add "mount-proc mount-sys", add logger |notification_fd(3) |run() # TODO use run_el() or run_arg() - #!/command/execlineb -P - mdevd -D 3 -f /current/conf/etc/mdevd.conf + #!{{exec_path("execlineb")}} -P + {{qexec("mdevd")}} -D 3 -f {{qconfig("mdevd.conf")}} |end() |start_longrun("udev", "mount-sys mount-proc mount-dev") # TODO add logger @@ -169,20 +169,20 @@ |start_oneshot("swapon-vg-swap", "dev-coldplug") |in_bundle("ok-all-but-tty") |up() - swapon /dev/vg/swap + {{qexec("swapon")}} /dev/vg/swap |down() - swapoff /dev/vg/swap + {{qexec("swapoff")}} /dev/vg/swap |end() |start_oneshot("mount-tmp-X11", "ok-sysinit") |in_bundle("ok-mount") |up() - if { mkdir -p /tmp/.X11-unix /run/X11 } - if { chmod 771 /run/X11 } - if { chown root:xorg /run/X11 } - mount --bind /run/X11 /tmp/.X11-unix + {{qexec("if")}} { {{qexec("mkdir")}} -p /tmp/.X11-unix /run/X11 } + {{qexec("if")}} { {{qexec("chmod")}} 771 /run/X11 } + {{qexec("if")}} { {{qexec("chown")}} root:xorg /run/X11 } + {{qexec("mount")}} --bind /run/X11 /tmp/.X11-unix |down() - foreground { umount /tmp/.X11-unix } + {{qexec("foreground")}} { {{qexec("umount")}} /tmp/.X11-unix } |end() |start_oneshot("openrc", "ok-sysinit ok-mount modules") @@ -258,9 +258,11 @@ |start_oneshot("containers", "ok-mount") |enabled_bundle("ok-all-but-tty") |up() + {{qenv("containers")}} export TERM "linux" if { - zsh -lc "quiet=1 confz site_container_services" + export quiet 1 + confz site_container_services } s6-svscanctl -a /run/service |end() @@ -324,7 +326,8 @@ |if(find("X_servers.rows")) { /.scripts d m755 /.scripts/X.run -CN #!/command/execlineb -P +CN #!{{exec_path("execlineb")}} -P + {{qenv("containers")}} fdmove -c 2 1 s6-envdir env importas vtN vtN diff --git a/s6-rc.fileset b/s6-rc.fileset @@ -1,990 +0,0 @@ -/rootfs d m755 -/rootfs/type cN oneshot m644 -/rootfs/dependencies r -/rootfs/down cN mount -o remount,ro "/" m644 -/rootfs/up -CN # mount /dev/mapper/vg-alpine_root on / - if -n -t { mount -t "xfs" -o "remount,noatime,nosuid" "/dev/mapper/vg-alpine_root" "/" } - mount -t "xfs" -o "noatime,nosuid" "/dev/mapper/vg-alpine_root" "/" -/mount-sys d m755 -/mount-sys/type cN oneshot m644 -/mount-sys/dependencies -C - rootfs - -m644 -/mount-sys/up -CN # mount sysfs on /sys - if { mkdir -p "/sys" } - if -n -t { mount -t "sysfs" -o "remount,rw" "sysfs" "/sys" } - mount -t "sysfs" -o "rw" "sysfs" "/sys" -/mount-proc d m755 -/mount-proc/type cN oneshot m644 -/mount-proc/dependencies -C - rootfs - -m644 -/mount-proc/up -CN # mount proc on /proc - if { mkdir -p "/proc" } - if -n -t { mount -t "proc" -o "remount,rw" "proc" "/proc" } - mount -t "proc" -o "rw" "proc" "/proc" -/mount-dev d m755 -/mount-dev/type cN oneshot m644 -/mount-dev/dependencies -C - rootfs - -m644 -/mount-dev/up -CN # mount devtmpfs on /dev - if { mkdir -p "/dev" } - if -n -t { mount -t "devtmpfs" -o "remount,rw,nosuid" "devtmpfs" "/dev" } - mount -t "devtmpfs" -o "rw,nosuid" "devtmpfs" "/dev" -/mount-dev-pts d m755 -/mount-dev-pts/type cN oneshot m644 -/mount-dev-pts/dependencies -C - mount-dev - -m644 -/mount-dev-pts/up -CN # mount devpts on /dev/pts - if { mkdir -p "/dev/pts" } - if -n -t { mount -t "devpts" -o "remount,rw,relatime,mode=600,ptmxmode=000" "devpts" "/dev/pts" } - mount -t "devpts" -o "rw,relatime,mode=600,ptmxmode=000" "devpts" "/dev/pts" -/mount-dev-shm d m755 -/mount-dev-shm/type cN oneshot m644 -/mount-dev-shm/dependencies -C - mount-dev - -m644 -/mount-dev-shm/up -CN # mount shm on /dev/shm - if { mkdir -p "/dev/shm" } - if -n -t { mount -t "tmpfs" -o "remount,rw,nosuid,nodev,relatime" "shm" "/dev/shm" } - mount -t "tmpfs" -o "rw,nosuid,nodev,relatime" "shm" "/dev/shm" -/mount-dev-mqueue d m755 -/mount-dev-mqueue/type cN oneshot m644 -/mount-dev-mqueue/dependencies -C - mount-dev - -m644 -/mount-dev-mqueue/up -CN # mount mqueue on /dev/mqueue - if { mkdir -p "/dev/mqueue" } - if -n -t { mount -t "mqueue" -o "remount,rw,nosuid,nodev,noexec" "mqueue" "/dev/mqueue" } - mount -t "mqueue" -o "rw,nosuid,nodev,noexec" "mqueue" "/dev/mqueue" -/mount-run-cgroup d m755 -/mount-run-cgroup/type cN oneshot m644 -/mount-run-cgroup/dependencies r -/mount-run-cgroup/down cN s6-umount "/run/cgroup" m644 -/mount-run-cgroup/up -CN # mount none on /run/cgroup - if { mkdir -p "/run/cgroup" } - if -n -t { mount -t "cgroup2" -o "remount,rw" "none" "/run/cgroup" } - mount -t "cgroup2" -o "rw" "none" "/run/cgroup" -/mount-boot d m755 -/mount-boot/type cN oneshot m644 -/mount-boot/dependencies -C - rootfs - -m644 -/mount-boot/down cN s6-umount "/boot" m644 -/mount-boot/up -CN # mount /dev/sda1 on /boot - if { mkdir -p "/boot" } - if -n -t { mount -t "ext4" -o "remount,ro,nosuid" "/dev/sda1" "/boot" } - mount -t "ext4" -o "ro,nosuid" "/dev/sda1" "/boot" -/mount-home d m755 -/mount-home/type cN oneshot m644 -/mount-home/dependencies -C - rootfs - -m644 -/mount-home/down cN s6-umount "/home" m644 -/mount-home/up -CN # mount /dev/mapper/vg-home on /home - if { mkdir -p "/home" } - if -n -t { mount -t "xfs" -o "remount,noatime,nosuid" "/dev/mapper/vg-home" "/home" } - mount -t "xfs" -o "noatime,nosuid" "/dev/mapper/vg-home" "/home" -/mount-mnt-sd d m755 -/mount-mnt-sd/type cN oneshot m644 -/mount-mnt-sd/dependencies -C - rootfs - -m644 -/mount-mnt-sd/down cN s6-umount "/mnt/sd" m644 -/mount-mnt-sd/up -CN # mount /dev/mmcblk0p1 on /mnt/sd - if { mkdir -p "/mnt/sd" } - if -n -t { mount -t "f2fs" -o "remount,ro,nosuid,nodev" "/dev/mmcblk0p1" "/mnt/sd" } - mount -t "f2fs" -o "ro,nosuid,nodev" "/dev/mmcblk0p1" "/mnt/sd" -/mount-mnt-volumes-containers d m755 -/mount-mnt-volumes-containers/type cN oneshot m644 -/mount-mnt-volumes-containers/dependencies -C - rootfs - -m644 -/mount-mnt-volumes-containers/down cN s6-umount "/mnt/volumes/containers" m644 -/mount-mnt-volumes-containers/up -CN # mount /dev/mapper/vg-containers on /mnt/volumes/containers - if { mkdir -p "/mnt/volumes/containers" } - if -n -t { mount -t "xfs" -o "remount,nosuid,noatime" "/dev/mapper/vg-containers" "/mnt/volumes/containers" } - mount -t "xfs" -o "nosuid,noatime" "/dev/mapper/vg-containers" "/mnt/volumes/containers" -/mount-mnt-volumes-containers-user d m755 -/mount-mnt-volumes-containers-user/type cN oneshot m644 -/mount-mnt-volumes-containers-user/dependencies -C - mount-mnt-volumes-containers - -m644 -/mount-mnt-volumes-containers-user/down cN s6-umount "/mnt/volumes/containers/user" m644 -/mount-mnt-volumes-containers-user/up -CN # mount /dev/mapper/vg-containers_user on /mnt/volumes/containers/user - if { mkdir -p "/mnt/volumes/containers/user" } - if -n -t { mount -t "xfs" -o "remount,nosuid,noatime" "/dev/mapper/vg-containers_user" "/mnt/volumes/containers/user" } - mount -t "xfs" -o "nosuid,noatime" "/dev/mapper/vg-containers_user" "/mnt/volumes/containers/user" -/mount-sysinit d m755 -/mount-sysinit/type cN bundle m644 -/mount-sysinit/contents -C mount-sys - mount-proc - mount-dev - mount-dev-pts - mount-dev-shm - mount-dev-mqueue - mount-run-cgroup -m644 - -/ok-localmount d m755 -/ok-localmount/type cN bundle m644 -/ok-localmount/contents -C rootfs - mount-boot - mount-home - mount-mnt-sd - mount-mnt-volumes-containers - mount-mnt-volumes-containers-user -m644 - -/ d m755 - - - - - - - -/loopback d m755 -/loopback/type cN oneshot m644 -/loopback/dependencies r -/loopback/up -CN if { ip link set lo up } - if -nt { ip addr add 127.0.0.1/8 dev lo brd + } - pipeline { ip addr show dev lo } grep -q "inet 127\\.0\\.0\\.1" -m644 - - - -/dhcpcd-log d m755 -/dhcpcd-log/type cN longrun m644 -/dhcpcd-log/dependencies -C mount-run-cgroup - rootfs -m644 -/dhcpcd-log/consumer-for cN dhcpcd m640 -/dhcpcd-log/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/dhcpcd-log } - redirfd -w 1 /run/cgroup/s6-rc/dhcpcd-log/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - if { mkdir -p /var/log/dhcpcd } - s6-log -b -- n10 s10240000 t /var/log/dhcpcd -m755 -/dhcpcd d m755 -/dhcpcd/type cN longrun m644 -/dhcpcd/dependencies -C modules - ok-mount - ok-sysinit -m644 -/dhcpcd/producer-for cN dhcpcd-log m640 -/dhcpcd/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/dhcpcd } - redirfd -w 1 /run/cgroup/s6-rc/dhcpcd/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - fdmove -c 2 1 - dhcpcd --nobackground -m755 - -/unbound-log d m755 -/unbound-log/type cN longrun m644 -/unbound-log/dependencies -C mount-run-cgroup - rootfs -m644 -/unbound-log/consumer-for cN unbound m640 -/unbound-log/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/unbound-log } - redirfd -w 1 /run/cgroup/s6-rc/unbound-log/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - if { mkdir -p /var/log/unbound } - s6-log -b -- n10 s10240000 t /var/log/unbound -m755 -/unbound d m755 -/unbound/type cN longrun m644 -/unbound/dependencies -C loopback - ok-mount - ok-sysinit -m644 -/unbound/producer-for cN unbound-log m640 -/unbound/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/unbound } - redirfd -w 1 /run/cgroup/s6-rc/unbound/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - fdmove -c 2 1 - unbound -ddp -m755 - -/hostname d m755 -/hostname/type cN oneshot m644 -/hostname/dependencies r -/hostname/up -CN hostname -F /etc/hostname -m644 - -/loadkeys d m755 -/loadkeys/type cN oneshot m644 -/loadkeys/dependencies -C kbd_mode -m644 -/loadkeys/up -CN loadkeys --unicode /root/keymap -m644 - - -/tty1 d m755 -/tty1/type cN longrun m644 -/tty1/dependencies -C ok-sysinit -m644 -/tty1/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/tty1 } - redirfd -w 1 /run/cgroup/s6-rc/tty1/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - foreground { /command/issue-gen } - env LOGIN_TTY=/dev/tty1 /sbin/getty -l login-keepenv 38400 tty1 linux -m755 -/tty1/finish -CN #!/command/execlineb -P - redirfd -w 1 /dev/tty1 - fdmove -c 2 1 - foreground { s6-echo "\nwaiting for session cleanup" } - flock /run/ttylock/tty1 true -m755 -/tty2 d m755 -/tty2/type cN longrun m644 -/tty2/dependencies -C ok-sysinit -m644 -/tty2/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/tty2 } - redirfd -w 1 /run/cgroup/s6-rc/tty2/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - foreground { /command/issue-gen } - env LOGIN_TTY=/dev/tty2 /sbin/getty -l login-keepenv 38400 tty2 linux -m755 -/tty2/finish -CN #!/command/execlineb -P - redirfd -w 1 /dev/tty2 - fdmove -c 2 1 - foreground { s6-echo "\nwaiting for session cleanup" } - flock /run/ttylock/tty2 true -m755 -/tty3 d m755 -/tty3/type cN longrun m644 -/tty3/dependencies -C ok-sysinit -m644 -/tty3/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/tty3 } - redirfd -w 1 /run/cgroup/s6-rc/tty3/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - foreground { /command/issue-gen } - env LOGIN_TTY=/dev/tty3 /sbin/getty -l login-keepenv 38400 tty3 linux -m755 -/tty3/finish -CN #!/command/execlineb -P - redirfd -w 1 /dev/tty3 - fdmove -c 2 1 - foreground { s6-echo "\nwaiting for session cleanup" } - flock /run/ttylock/tty3 true -m755 -/tty4 d m755 -/tty4/type cN longrun m644 -/tty4/dependencies -C ok-sysinit -m644 -/tty4/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/tty4 } - redirfd -w 1 /run/cgroup/s6-rc/tty4/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - foreground { /command/issue-gen } - env LOGIN_TTY=/dev/tty4 /sbin/getty -l login-keepenv 38400 tty4 linux -m755 -/tty4/finish -CN #!/command/execlineb -P - redirfd -w 1 /dev/tty4 - fdmove -c 2 1 - foreground { s6-echo "\nwaiting for session cleanup" } - flock /run/ttylock/tty4 true -m755 - -/kbd_mode-tty1 d m755 -/kbd_mode-tty1/type cN oneshot m644 -/kbd_mode-tty1/dependencies r -/kbd_mode-tty1/up -CN kbd_mode -u -C /dev/tty1 -m644 -/kbd_mode-tty2 d m755 -/kbd_mode-tty2/type cN oneshot m644 -/kbd_mode-tty2/dependencies r -/kbd_mode-tty2/up -CN kbd_mode -u -C /dev/tty2 -m644 -/kbd_mode-tty3 d m755 -/kbd_mode-tty3/type cN oneshot m644 -/kbd_mode-tty3/dependencies r -/kbd_mode-tty3/up -CN kbd_mode -u -C /dev/tty3 -m644 -/kbd_mode-tty4 d m755 -/kbd_mode-tty4/type cN oneshot m644 -/kbd_mode-tty4/dependencies r -/kbd_mode-tty4/up -CN kbd_mode -u -C /dev/tty4 -m644 - -/setfont-tty1 d m755 -/setfont-tty1/type cN oneshot m644 -/setfont-tty1/dependencies r -/setfont-tty1/up -CN redirfd -r 0 /dev/tty1 setfont ter-v14n -m644 -/setfont-tty2 d m755 -/setfont-tty2/type cN oneshot m644 -/setfont-tty2/dependencies r -/setfont-tty2/up -CN redirfd -r 0 /dev/tty2 setfont ter-v14n -m644 -/setfont-tty3 d m755 -/setfont-tty3/type cN oneshot m644 -/setfont-tty3/dependencies r -/setfont-tty3/up -CN redirfd -r 0 /dev/tty3 setfont ter-v14n -m644 -/setfont-tty4 d m755 -/setfont-tty4/type cN oneshot m644 -/setfont-tty4/dependencies r -/setfont-tty4/up -CN redirfd -r 0 /dev/tty4 setfont ter-v14n -m644 - -/dmesg d m755 -/dmesg/type cN oneshot m644 -/dmesg/dependencies r -/dmesg/up -CN # description="Set the dmesg level for a cleaner boot" - # dmesg_level=1 - dmesg -n1 -m644 - -/modules d m755 -/modules/type cN oneshot m644 -/modules/dependencies -C dmesg -m644 -/modules/up -CN foreground { modprobe mt7921e } - foreground { modprobe usb_storage } - foreground { modprobe xhci_pci } - foreground { modprobe kvm-amd } - foreground { modprobe ccp } - foreground { modprobe snd-hda-intel } - foreground { modprobe snd_pci_acp3x } - foreground { modprobe r8153_ecm } -m644 - -/cgroups d m755 -/cgroups/type cN oneshot m644 -/cgroups/dependencies -C mount-run-cgroup -m644 -/cgroups/up -CN cgconfigparser -l /current/conf/etc/cgconfig.conf -m644 - -/mdevd-coldplug d m755 -/mdevd-coldplug/type cN oneshot m644 -/mdevd-coldplug/dependencies -C mount-dev - mount-sys - modules - mdevd -m644 -/mdevd-coldplug/up -CN mdevd-coldplug -m644 - -/udev-coldplug d m755 -/udev-coldplug/type cN oneshot m644 -/udev-coldplug/dependencies -C mount-dev - mount-sys - modules - udev -m644 -/udev-coldplug/up -CN udevadm settle -m644 - -/dev-coldplug d m755 -/dev-coldplug/type cN bundle m644 -/dev-coldplug/contents -C mdevd-coldplug -m644 - -/mdevd d m755 -/mdevd/type cN longrun m644 -/mdevd/dependencies -C mount-dev -m644 -/mdevd/notification-fd cN 3 m644 -/mdevd/run -CN #!/command/execlineb -P - mdevd -D 3 -f /current/conf/etc/mdevd.conf -m755 - -/udev d m755 -/udev/type cN longrun m644 -/udev/dependencies -C mount-sys - mount-proc - mount-dev -m644 -/udev/notification-fd cN 3 m644 -/udev/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/udev } - redirfd -w 1 /run/cgroup/s6-rc/udev/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - background { - sh -xc "until /sbin/udevadm settle --timeout=120; do sleep 0.5; done; echo >&3 settled" - #foreground { loopwhilex -x 0 if -nt { /sbin/udevadm settle --timeout=120 } foreground { sleep 0.1 } exit 1 } - #fdmove -c 3 1 - #echo - } - fdclose 3 - /sbin/udevd -m755 - -/swapon-vg-swap d m755 -/swapon-vg-swap/type cN oneshot m644 -/swapon-vg-swap/dependencies -C dev-coldplug -m644 -/swapon-vg-swap/up -CN swapon /dev/vg/swap -m644 -/swapon-vg-swap/down -CN swapoff /dev/vg/swap -m644 - -/mount-tmp-X11 d m755 -/mount-tmp-X11/type cN oneshot m644 -/mount-tmp-X11/dependencies -C ok-sysinit -m644 -/mount-tmp-X11/up -CN if { mkdir -p /tmp/.X11-unix /run/X11 } - if { chmod 771 /run/X11 } - if { chown root:xorg /run/X11 } - mount --bind /run/X11 /tmp/.X11-unix -m644 -/mount-tmp-X11/down -CN foreground { umount /tmp/.X11-unix } -m644 - -/openrc d m755 -/openrc/type cN oneshot m644 -/openrc/dependencies -C ok-sysinit - ok-mount - modules -m644 -/openrc/up -CN export TERM "linux" - foreground { /sbin/openrc boot } - /sbin/openrc default -m644 -/openrc/down -CN export TERM "linux" - /sbin/openrc shutdown -m644 - -/sshd-log d m755 -/sshd-log/type cN longrun m644 -/sshd-log/dependencies -C mount-run-cgroup - rootfs -m644 -/sshd-log/consumer-for cN sshd m640 -/sshd-log/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/sshd-log } - redirfd -w 1 /run/cgroup/s6-rc/sshd-log/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - if { mkdir -p /var/log/sshd } - s6-log -b -- n10 s10240000 t /var/log/sshd -m755 -/sshd d m755 -/sshd/type cN longrun m644 -/sshd/dependencies -C ssh_host_ed25519_key - ssh_host_rsa_key - ok-sysinit -m644 -/sshd/producer-for cN sshd-log m640 -/sshd/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/sshd } - redirfd -w 1 /run/cgroup/s6-rc/sshd/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - fdmove -c 2 1 - /usr/sbin/sshd -D -e -f /etc/ssh/sshd_config -m755 - -/ssh_host_ed25519_key d m755 -/ssh_host_ed25519_key/type cN oneshot m644 -/ssh_host_ed25519_key/dependencies -C hostname - rootfs -m644 -/ssh_host_ed25519_key/up -CN if -n -t { s6-test -f /etc/ssh/ssh_host_ed25519_key } - ssh-keygen -N "" -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -m644 - -/ssh_host_rsa_key d m755 -/ssh_host_rsa_key/type cN oneshot m644 -/ssh_host_rsa_key/dependencies -C hostname - rootfs -m644 -/ssh_host_rsa_key/up -CN if -n -t { s6-test -f /etc/ssh/ssh_host_rsa_key } - ssh-keygen -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -m644 - - -/alsa-devices d m755 -/alsa-devices/type cN oneshot m644 -/alsa-devices/dependencies -C modules - udev -m644 -/alsa-devices/up -CN sh -c " - retry=true - while $retry; do - retry=false - for card in $(sed -n -e '/^ \\?[0-9]/{s/ *\\([0-9]*\\).*/\\1/;p}' /proc/asound/cards); do - $retry && sleep 0.5 - test -e /dev/snd/controlC${card} || retry=true - done - $retry && sleep 0.5 - done - : - " -m644 - -/alsactl-rdaemon-log d m755 -/alsactl-rdaemon-log/type cN longrun m644 -/alsactl-rdaemon-log/dependencies -C mount-run-cgroup - rootfs -m644 -/alsactl-rdaemon-log/consumer-for cN alsactl-rdaemon m640 -/alsactl-rdaemon-log/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/alsactl-rdaemon-log } - redirfd -w 1 /run/cgroup/s6-rc/alsactl-rdaemon-log/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - if { mkdir -p /var/log/alsactl-rdaemon } - s6-log -b -- n10 s10240000 t /var/log/alsactl-rdaemon -m755 -/alsactl-rdaemon d m755 -/alsactl-rdaemon/type cN longrun m644 -/alsactl-rdaemon/dependencies -C alsa-devices -m644 -/alsactl-rdaemon/producer-for cN alsactl-rdaemon-log m640 -/alsactl-rdaemon/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/alsactl-rdaemon } - redirfd -w 1 /run/cgroup/s6-rc/alsactl-rdaemon/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - fdmove -c 2 1 - alsactl rdaemon -m755 - -/brightness d m755 -/brightness/type cN oneshot m644 -/brightness/dependencies -C ok-sysinit -m644 -/brightness/up -CN foreground { redirfd -w 1 /sys/class/backlight/intel_backlight/brightness echo 800 } - if { chgrp users /sys/class/backlight/intel_backlight/brightness } - chmod g+w /sys/class/backlight/intel_backlight/brightness -m644 - -/tlp d m755 -/tlp/type cN oneshot m644 -/tlp/dependencies -C ok-sysinit -m644 -/tlp/up -CN tlp init start -m644 -/tlp/down -CN tlp init stop -m644 - -/containers d m755 -/containers/type cN oneshot m644 -/containers/dependencies -C ok-mount -m644 -/containers/up -CN export TERM "linux" - if { - zsh -lc "quiet=1 confz site_container_services" - } - s6-svscanctl -a /run/service -m644 - -/svscan-ccx-log d m755 -/svscan-ccx-log/type cN longrun m644 -/svscan-ccx-log/dependencies -C ok-sysinit - rootfs -m644 -/svscan-ccx-log/consumer-for cN svscan-ccx m644 -/svscan-ccx-log/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/svscan-ccx-log } - redirfd -w 1 /run/cgroup/s6-rc/svscan-ccx-log/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - if { mkdir -p /run/user/1000.logs } - if { ln -sf 1000.logs /run/user/ccx.logs } - if { chown ccx: /run/user/1000.logs } - if { chmod 700 /run/user/1000.logs } - s6-setuidgid ccx - s6-log -- t /run/user/1000.logs -m755 - -/svscan-ccx d m755 -/svscan-ccx/type cN longrun m644 -/svscan-ccx/dependencies -C ok-sysinit - rootfs -m644 -/svscan-ccx/notification-fd cN 3 m644 -/svscan-ccx/producer-for cN svscan-ccx-log m644 -/svscan-ccx/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/svscan-ccx } - redirfd -w 1 /run/cgroup/s6-rc/svscan-ccx/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - if { mkdir -p /run/user/1000 } - if { ln -sf 1000 /run/user/ccx } - if { chown ccx: /run/user/1000 } - if { chmod 700 /run/user/1000 } - s6-setuidgid ccx - if { mkdir -p /run/user/1000/service } - s6-svscan -d 3 /run/user/1000/service -m755 - -/syncthing-log d m755 -/syncthing-log/type cN longrun m644 -/syncthing-log/dependencies -C mount-run-cgroup - rootfs -m644 -/syncthing-log/consumer-for cN syncthing m640 -/syncthing-log/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/syncthing-log } - redirfd -w 1 /run/cgroup/s6-rc/syncthing-log/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - if { mkdir -p /var/log/syncthing } - s6-log -b -- n10 s10240000 t /var/log/syncthing -m755 -/syncthing d m755 -/syncthing/type cN longrun m644 -/syncthing/dependencies -C ok-mount -m644 -/syncthing/producer-for cN syncthing-log m640 -/syncthing/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/syncthing } - redirfd -w 1 /run/cgroup/s6-rc/syncthing/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - /usr/bin/env HOME=/var/lib/syncthing - s6-setuidgid syncthing - syncthing -logflags 0 -m755 - - -/wpa_supplicant-log d m755 -/wpa_supplicant-log/type cN longrun m644 -/wpa_supplicant-log/dependencies -C mount-run-cgroup - rootfs -m644 -/wpa_supplicant-log/consumer-for cN wpa_supplicant m640 -/wpa_supplicant-log/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/wpa_supplicant-log } - redirfd -w 1 /run/cgroup/s6-rc/wpa_supplicant-log/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - if { mkdir -p /var/log/wpa_supplicant } - s6-log -b -- n10 s10240000 t /var/log/wpa_supplicant -m755 -/wpa_supplicant d m755 -/wpa_supplicant/type cN longrun m644 -/wpa_supplicant/dependencies -C modules - ok-sysinit -m644 -/wpa_supplicant/producer-for cN wpa_supplicant-log m640 -/wpa_supplicant/run -CN #!/command/execlineb -P - getpid SERVICE_PID - foreground { - importas -i SERVICE_PID SERVICE_PID - if { test -d /run/cgroup } - if { mkdir -p /run/cgroup/s6-rc/wpa_supplicant } - redirfd -w 1 /run/cgroup/s6-rc/wpa_supplicant/cgroup.procs - printf "%s" ${SERVICE_PID} - } - unexport SERVICE_PID - /sbin/wpa_supplicant - -iwlan0 - -c/etc/wpa_supplicant/wpa_supplicant.conf -m755 - - - -/gettys d m755 -/gettys/type cN bundle m644 -/gettys/contents -C tty1 - tty2 - tty3 - tty4 -m644 - -/kbd_mode d m755 -/kbd_mode/type cN bundle m644 -/kbd_mode/contents -C kbd_mode-tty1 - kbd_mode-tty2 - kbd_mode-tty3 - kbd_mode-tty4 -m644 - -/net-all d m755 -/net-all/type cN bundle m644 -/net-all/contents -C loopback - dhcpcd - unbound - wpa_supplicant -m644 - -/ok-all d m755 -/ok-all/type cN bundle m644 -/ok-all/contents -C ok-all-but-tty - gettys -m644 - -/ok-all-but-tty d m755 -/ok-all-but-tty/type cN bundle m644 -/ok-all-but-tty/contents -C net-all - ok-mount - hostname - loadkeys - setfont - dmesg - modules - swapon-vg-swap - sshd - containers - svscan-ccx -m644 - -/ok-mount d m755 -/ok-mount/type cN bundle m644 -/ok-mount/contents -C ok-sysinit - ok-localmount - mount-tmp-X11 -m644 - -/ok-sysinit d m755 -/ok-sysinit/type cN bundle m644 -/ok-sysinit/contents -C mount-sysinit - dev-coldplug - cgroups - mdevd -m644 - -/setfont d m755 -/setfont/type cN bundle m644 -/setfont/contents -C setfont-tty1 - setfont-tty2 - setfont-tty3 - setfont-tty4 -m644 - diff --git a/version_path.awk b/version_path.awk @@ -0,0 +1,43 @@ +function get_package_path(name) { + if(!("pthbs_path_"name in ENVIRON)) { + print "version_path.awk: Fatal: path for package '"name"' not specified" >"/dev/stderr" + exit 2 + } + return ENVIRON["pthbs_path_"name] +} + +function exec_path(name) { + if(!length(execfile)) { + print "version_path.awk: Fatal: 'execfile' variable not specified" >"/dev/stderr" + exit 2 + } + print name >>execfile + return get_package_path("core-system-conf") "/deps/command/" name +} + +function q(s) { # quote string for execline + gsub(/\\/, "\\\\", s) + gsub(/\n/, "\\n", s) + gsub(/\"/, "\\\"", s) + return "\"" s "\"" +} + +function qexec(s) { + return q(exec_path(s)) +} + +function config_path(name) { + return get_package_path("core-system-conf") "/config/" name +} + +function qconfig(s) { + return q(config_path(s)) +} + +function env_enter(name) { + return get_package_path(name)"/command/pthbs-enter" +} + +function qenv(s) { + return q(env_enter(s)) +}