summaryrefslogtreecommitdiff
path: root/nodes/desktop.yml
blob: c5b463e10cd73d948e80c22edaf3b1eed1c62786 (plain)
  1. # minimal desktop on LIME2 box
  2. # Targets: Debian 9 (Stretch) or newer
  3. # Depends: boxer-data (>= 10.5.14)
  4. classes:
  5.   - Console
  6.   - Console.mouse
  7.   - Console.editor.vim
  8.   - Admin.etc.functions
  9.   - Admin
  10.   - Admin.apt.auto
  11.   - Admin.apt.auto.upgrade
  12.   - Admin.apt.auto.all
  13.   - Desktop
  14.   - Desktop.chat
  15.   - Desktop.terminal.lxde
  16.   - Service.scheduler.systemd
  17.   - Hardware.motherboard.olimex.lime2
  18.   - Hardware.harden
  19.   - Framework.localization.limit
  20.   - Framework.media.gstreamer.avoid
  21.   - Framework.pkg.apt.autoremove-suggests
  22.   - Framework.pkg.apt.avoid-removals
  23.   - Framework.pkg.apt.aptitude.advance-on-action
  24.   - Framework.pkg.apt.aptitude.list-suite
  25.   - Framework.pkg.apt.proxy.reset
  26.   - Framework.pkg.apt.source.reset
  27. parameters:
  28.   doc:
  29.     gateway:
  30.       pkg:
  31.         - include network management service NetworkManager
  32.         - include Network Time (NTPservice Chrony
  33.         - include bandwidth-saving remote shell service MoSH
  34.         - include Pidgin plugin for Matrix protocol
  35.         - include chat client Gajim
  36.         - include font Terminus
  37.         - include font Hack
  38.         - include font Notohinted families
  39.         - include emoji font SymbolA
  40.       tweak:
  41.         - limit video buffers (freeing memory for general use)
  42.         - use HDMI (not serial portas initial boot console
  43.         - (re)set ethernet devices to use dhcpand mDNS
  44.         - enable Domain name (DNSservice systemd-resolved
  45.         - use Cloudflare (not Googlefallback DNS resolvers
  46.         - enable multicast DNS
  47.         - use static IPs as fallback with NTP to avoid DNSSEC deadlock
  48.         - tell urxvt to use 24pt fontsTerminus 32pt or indic Noto Sans
  49.         - tell urxvt to omit scrollbar
  50.         - adapt default settings for console file manager Midnight Commander
  51.         - create local systemd service to create SSH host keys if missing
  52.         - clear content of /etc/machine-id
  53.         - remove SSH host keys
  54.   pkg:
  55.     - chrony
  56.     - iproute2
  57.     - iw
  58.     - wpasupplicant
  59.     - modemmanager
  60.     - wifi-radar
  61.     - mosh
  62.     - debconf-utils
  63.     - iftop
  64.     - locales
  65.     - sudo
  66.     - gajim
  67.     - purple-matrix
  68.     - xfonts-terminus
  69.     - fonts-hack-otf
  70.     - fonts-noto-hinted
  71.     - fonts-symbola
  72.     - rxvt-unicode
  73.   tweak:
  74.     - >
  75.       _setappendvar /target/etc/default/flash-kernel \
  76.        LINUX_KERNEL_CMDLINE_DEFAULTS \
  77.        '"sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_fb_mem_reserve=16"'
  78.     - >
  79.       file=/target/etc/flash-kernel/bootscript/bootscr.sunxi;\
  80.        _backup "$file";\
  81.        sed -i -r -e '2asetenv console tty0\''n' "$file"
  82.     - >
  83.       file=/target/etc/systemd/network/90-dhcp.network;\
  84.        _backup "$file";\
  85.        echo '[Match]' > "$file";\
  86.        echo 'Name=ethenwl*' >> "$file";\
  87.        echo '' >> "$file";\
  88.        echo '[Network]' >> "$file";\
  89.        echo 'DHCP=yes' >> "$file";\
  90.        echo 'IPv6PrivacyExtensions=' >> "$file"
  91.     - systemctl enable systemd-networkd
  92.     - >
  93.       dir=/target/etc/systemd/resolved.conf.d;\
  94.        mkdir -p "$dir";\
  95.         file="$dir/local.conf";\
  96.         echo '[Resolve]' > "$file";\
  97.         echo 'FallbackDNS=1.1.1.1 1.0.0.1 2606:4700:4700::1111,2606:4700:4700::1001' >> "$file";\
  98.         echo 'MulticastDNS=yes' >> "$file"
  99.     - systemctl enable systemd-resolved
  100.     - >
  101.       ln -sfT ../run/systemd/resolve/stub-resolv.conf \
  102.        /target/etc/resolv.conf
  103.     - >
  104.       file=/target/etc/chrony/chrony.conf;\
  105.        _backup "$file";\
  106.        echo 'pool 2.debian.pool.ntp.org iburst' > "$file";\
  107.        echo '# include static IPs (once expanded from above) to avoid DNSSEC deadlock' >> "$file";\
  108.        echo 'server 195.137.195.251 iburst' >> "$file";\
  109.        echo 'server 158.248.189.11 iburst' >> "$file";\
  110.        echo 'server 193.104.228.123 iburst' >> "$file";\
  111.        echo 'server 195.137.195.252 iburst' >> "$file";\
  112.        echo 'server 2001:ac8:37::40 iburst' >> "$file";\
  113.        echo 'server 2001:67c:28c8:12::123 iburst' >> "$file";\
  114.        echo 'server 2a00:1b70:1200:1::123 iburst' >> "$file";\
  115.        echo 'server 2001:67c:564::12 iburst' >> "$file"
  116.     - >
  117.       _setappendline /target/etc/X11/Xresources/local-font-terminus \
  118.        'Rxvt*font: terminus-32,xft:Noto Sans Devanagari:pixelsize=32:Noto Sans Malayalam:pixelsize=32:Noto Sans Kannada:pixelsize=32:'
  119.     - >
  120.       _setappendline /target/etc/X11/Xresources/local-font-terminus \
  121.        'Rxvt*boldFont: terminus-bold-32,xft:Noto Sans Devanagari:bold:pixelsize=32:Noto Sans Malayalam:bold:pixelsize=32:Noto Sans Kannada:bold:pixelsize=32:'
  122.     - >
  123.       _setappendline /target/etc/X11/Xresources/local-font-terminus \
  124.        'Rxvt*italicFont: xft:Hack:italic:pixelsize=32,xft:Noto Sans Devanagari:italic:pixelsize=32:Noto Sans Malayalam:italic:pixelsize=32:Noto Sans Kannada:italic:pixelsize=32:'
  125.     - >
  126.       _setappendline /target/etc/X11/Xresources/local-font-terminus \
  127.        'Rxvt*boldItalicFont: xft:Hack:bold:italic:pixelsize=32,xft:Noto Sans Devanagari:bold:italic:pixelsize=32:Noto Sans Malayalam:bold:italic:pixelsize=32:Noto Sans Kannada:bold:italic:pixelsize=32:'
  128.     - >
  129.       _setappendline /target/etc/X11/Xresources/local-tweaks \
  130.        'Rxvt*scrollBar: False'
  131.     - >
  132.       file=/target/etc/mc/mc.ini;\
  133.        _backup "$file";\
  134.        echo '[Midnight-Commander]' "$file";\
  135.        echo 'auto_save_setup=false' >> "$file";\
  136.        echo 'use_internal_view=true' >> "$file";\
  137.        echo 'use_internal_edit=true' >> "$file";\
  138.        echo 'num_history_items_recorded=200' >> "$file";\
  139.        echo 'editor_option_save_mode=false' >> "$file";\
  140.        echo 'editor_show_right_margin=false' >> "$file";\
  141.        echo 'skin=dark' >> "$file";\
  142.        echo '' >> "$file";\
  143.        echo '[Panels]' >> "$file";\
  144.        echo 'navigate_with_arrows=true' >> "$file";\
  145.        echo '' >> "$file";\
  146.        echo '[Layout]' >> "$file";\
  147.        echo 'message_visible=false' >> "$file";\
  148.        echo 'menubar_visible=false' >> "$file"
  149.     - >
  150.       file=/target/usr/local/sbin/gen-sshd-host-keys;\
  151.        echo '#!/bin/sh' "$file";\
  152.        echo '#' >> "$file";\
  153.        echo '# Generate missing ssh host keys' >> "$file";\
  154.        echo '# code copied from openssh-server postinst to address' >> "$file";\
  155.        echo '# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=594175' >> "$file";\
  156.        echo '' >> "$file";\
  157.        echo '# Copyright: 2018 Purism SPC' >> "$file";\
  158.        echo '# License: BSD-2-clause' >> "$file";\
  159.        echo '#  Redistribution and use in source and binary forms, with or without' >> "$file";\
  160.        echo '#  modification, are permitted provided that the following conditions' >> "$file";\
  161.        echo '#  are met:' >> "$file";\
  162.        echo '#  1. Redistributions of source code must retain the above copyright' >> "$file";\
  163.        echo '#     notice, this list of conditions and the following disclaimer.' >> "$file";\
  164.        echo '#  2. Redistributions in binary form must reproduce the above copyright' >> "$file";\
  165.        echo '#     notice, this list of conditions and the following disclaimer in the' >> "$file";\
  166.        echo '#     documentation and/or other materials provided with the distribution.' >> "$file";\
  167.        echo '#  .' >> "$file";\
  168.        echo '#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR' >> "$file";\
  169.        echo '#  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES' >> "$file";\
  170.        echo '#  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.' >> "$file";\
  171.        echo '#  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,' >> "$file";\
  172.        echo '#  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT' >> "$file";\
  173.        echo '#  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,' >> "$file";\
  174.        echo '#  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY' >> "$file";\
  175.        echo '#  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT' >> "$file";\
  176.        echo '#  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF' >> "$file";\
  177.        echo '#  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.' >> "$file";\
  178.        echo '' >> "$file";\
  179.        echo 'set -e' >> "$file";\
  180.        echo '' >> "$file";\
  181.        echo 'export LC_ALL=C.UTF-8' >> "$file";\
  182.        echo '' >> "$file";\
  183.        echo 'get_config_option() {' >> "$file";\
  184.        echo '        option="$1"' >> "$file";\
  185.        echo '' >> "$file";\
  186.        echo '        [ -f /etc/ssh/sshd_config ] || return' >> "$file";\
  187.        echo '' >> "$file";\
  188.        echo '        # TODO: actually only one '"'='"' allowed after option' >> "$file";\
  189.        echo '        perl -lne '"'" >> "$file";\
  190.        echo '                s/[[:space:]]+/ /g; s/[[:space:]]+$//;' >> "$file";\
  191.        echo '                print if s/^[[:space:]]*'"'"'"$option"'"'"'[[:space:]=]+//i'"'"\' >> "$file";\
  192.        echo '           /etc/ssh/sshd_config' >> "$file";\
  193.        echo '}' >> "$file";\
  194.        echo '' >> "$file";\
  195.        echo '' >> "$file";\
  196.        echo 'host_keys_required() {' >> "$file";\
  197.        echo '        hostkeys="$(get_config_option HostKey)"' >> "$file";\
  198.        echo '        if "$hostkeys" ]; then' >> "$file";\
  199.        echo '                echo "$hostkeys"' >> "$file";\
  200.        echo '        else' >> "$file";\
  201.        echo '                # No HostKey directives at all, so the server picks some' >> "$file";\
  202.        echo '                # defaults.' >> "$file";\
  203.        echo '                echo /etc/ssh/ssh_host_rsa_key' >> "$file";\
  204.        echo '                echo /etc/ssh/ssh_host_ecdsa_key' >> "$file";\
  205.        echo '                echo /etc/ssh/ssh_host_ed25519_key' >> "$file";\
  206.        echo '        fi' >> "$file";\
  207.        echo '}' >> "$file";\
  208.        echo '' >> "$file";\
  209.        echo 'create_key() {' >> "$file";\
  210.        echo '   msg="$1"' >> "$file";\
  211.        echo '   shift' >> "$file";\
  212.        echo '   hostkeys="$1"' >> "$file";\
  213.        echo '   shift' >> "$file";\
  214.        echo '   file="$1"' >> "$file";\
  215.        echo '   shift' >> "$file";\
  216.        echo '' >> "$file";\
  217.        echo '   if echo "$hostkeys" | grep -x "$file" >/dev/null && \' >> "$file";\
  218.        echo '      [ ! -f "$file" ; then' >> "$file";\
  219.        echo '       printf "%s" "$msg"' >> "$file";\
  220.        echo '       ssh-keygen -q -f "$file" -N "" "$@"' >> "$file";\
  221.        echo '       echo' >> "$file";\
  222.        echo '       if which restorecon >/dev/null 2>&1; then' >> "$file";\
  223.        echo '           restorecon "$file" "$file.pub"' >> "$file";\
  224.        echo '       fi' >> "$file";\
  225.        echo '       ssh-keygen -l -f "$file.pub"' >> "$file";\
  226.        echo '   fi' >> "$file";\
  227.        echo '}' >> "$file";\
  228.        echo '' >> "$file";\
  229.        echo '' >> "$file";\
  230.        echo 'create_keys() {' >> "$file";\
  231.        echo '   hostkeys="$(host_keys_required)"' >> "$file";\
  232.        echo '' >> "$file";\
  233.        echo '   create_key "Creating SSH2 RSA key; this may take some time ..." \' >> "$file";\
  234.        echo '       "$hostkeys" /etc/ssh/ssh_host_rsa_key -t rsa' >> "$file";\
  235.        echo '   create_key "Creating SSH2 DSA key; this may take some time ..." \' >> "$file";\
  236.        echo '       "$hostkeys" /etc/ssh/ssh_host_dsa_key -t dsa' >> "$file";\
  237.        echo '   create_key "Creating SSH2 ECDSA key; this may take some time ..." \' >> "$file";\
  238.        echo '       "$hostkeys" /etc/ssh/ssh_host_ecdsa_key -t ecdsa' >> "$file";\
  239.        echo '   create_key "Creating SSH2 ED25519 key; this may take some time ..." \' >> "$file";\
  240.        echo '       "$hostkeys" /etc/ssh/ssh_host_ed25519_key -t ed25519' >> "$file";\
  241.        echo '}' >> "$file";\
  242.        echo '' >> "$file";\
  243.        echo 'create_keys' >> "$file";\
  244.        echo 'service ssh force-reload' >> "$file";\
  245.        chmod a+x "$file"
  246.     - >
  247.       file=/target/etc/systemd/system/gen-sshd-host-keys.service;\
  248.        echo '[Unit]' > "$file";\
  249.        echo 'Description=Generate OpenSSH daemon host keys service' >> "$file";\
  250.        echo 'ConditionPathExists=/usr/sbin/sshd' >> "$file";\
  251.        echo 'ConditionPathExists=!/etc/ssh/sshd_not_to_be_run' >> "$file";\
  252.        echo 'Before=ssh.service' >> "$file";\
  253.        echo 'Before=ssh.socket' >> "$file";\
  254.        echo 'Documentation=https://source.puri.sm/Librem5/gen-ssd-host-keys/README.md' >> "$file";\
  255.        echo '' >> "$file";\
  256.        echo '[Service]' >> "$file";\
  257.        echo 'Type=oneshot' >> "$file";\
  258.        echo 'ExecStart=/usr/local/sbin/gen-sshd-host-keys' >> "$file";\
  259.        echo 'ExecStop=/bin/true' >> "$file";\
  260.        echo '' >> "$file";\
  261.        echo '[Install]' >> "$file";\
  262.        echo 'WantedBy=ssh.service' >> "$file";\
  263.        echo 'WantedBy=ssh.socket' >> "$file"
  264.     - systemctl enable gen-sshd-host-keys
  265.     - echo > /target/etc/machine-id
  266.     - ln -sfT ../../../etc/machine-id /target/var/lib/dbus/machine-id
  267.     - find /target/etc/ssh -maxdepth 1 -type f -name "ssh_host_*_key*" -delete