various fixes
authorIan Kelling <ian@iankelling.org>
Sun, 8 May 2016 17:46:46 +0000 (10:46 -0700)
committerIan Kelling <ian@iankelling.org>
Sun, 19 Jun 2016 01:00:24 +0000 (18:00 -0700)
distro-begin
distro-end
rootsshsync [new file with mode: 0755]

index fee2249fcbf3146d824bcfc8db489a7e8683adba..07b19b39023486e8ffb30116906b0965b45b494a 100755 (executable)
@@ -38,6 +38,9 @@ fi
 set -E
 trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?"' ERR
 
+exec &> >(sudo tee -a /var/log/distro-begin)
+echo "$0: $(date): starting now)"
+
 # headless=false # unused atm
 recompile=true
 # for copying to a new data fs
@@ -250,12 +253,12 @@ if isarch; then
     }
     aurpi cower pacaur
 
-    # this creates ~/.gnupg. addgnupghome is broken on arch.
-    gpg -k
     # for aur, automatically dl & add gpg keys.
     # Just the keyserver-options line goes in dirmngr.conf once
     # this bug is fixed: https://bugs.gnupg.org/gnupg/issue2147
     for homedir in /home/*; do
+        # this creates ~/.gnupg. addgnupghome is kinda broken on arch.
+        HOME=$homedir gpg -k
         teeu $homedir/.gnupg/gpg.conf <<EOF
 $(grep -o '^ *keyserver .*' $homedir/.gnupg/dirmngr.conf)
 keyserver-options auto-key-retrieve
@@ -299,11 +302,11 @@ if has_p; then
     lnf -T /p/News ~/News
     # don't use /* because I don't want to require it to be mounted
     s lnf /q/root/.editor-backups /q/root/.undo-tree-history \
-      /q/root/.ssh /a/opt \
-      /a/c/.emacs.d ~/.unison /root
-
+      /a/opt /a/c/.emacs.d ~/.unison /root
 fi
 
+/a/bin/rootsshsync
+
 s lnf /a/c/.inputrc /a/c/.vim /a/c/.vimrc /a/c/.gvimrc /root
 
 # machine is going away
@@ -359,7 +362,134 @@ case $(distro-name) in
         ;;&
 esac
 
-pi xbindkeys xkbset cryptsetup
+# background:
+# https://aur.archlinux.org/packages/xkbset/#comment-545419
+cert=$(mktemp)
+cat >$cert <<'EOF'
+-----BEGIN CERTIFICATE-----
+MIIJADCCB+igAwIBAgIRAIVAhZ0TMbQ5jTm0koI8X6YwDQYJKoZIhvcNAQELBQAw
+djELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAk1JMRIwEAYDVQQHEwlBbm4gQXJib3Ix
+EjAQBgNVBAoTCUludGVybmV0MjERMA8GA1UECxMISW5Db21tb24xHzAdBgNVBAMT
+FkluQ29tbW9uIFJTQSBTZXJ2ZXIgQ0EwHhcNMTUxMjA4MDAwMDAwWhcNMTgxMjA3
+MjM1OTU5WjCBsTELMAkGA1UEBhMCVVMxDjAMBgNVBBETBTY1MjExMREwDwYDVQQI
+EwhNaXNzb3VyaTERMA8GA1UEBxMIQ29sdW1iaWExHzAdBgNVBAkTFjExMDAgQ2Fy
+cmllIEZyYW5ja2UgRHIxHzAdBgNVBAoTFlVuaXZlcnNpdHkgb2YgTWlzc291cmkx
+CzAJBgNVBAsTAk1VMR0wGwYDVQQDExRmYWN1bHR5Lm1pc3NvdXJpLmVkdTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN8Kap8hASpxQeqjHibGsCR1PBkh
+nW9p5FkuhGpMW/3ko8QfxH0W1Hq2y2DTFUmq17kH3GfT3h9a7HcmUrC3q15PciOB
+WR3j8u0bDfVppyAZXiHJzYGN7xHiPrZtFEGgwZd28+sW80WXTbGl+zKkmeZguGdH
+AVGeWJEFK44ctLbpjHWCy+xNuhxJuL4olwPoV7WX9IUhceC0rxYQANhLGOJhbchj
+Z76MA8dc2K3CZI5m7VqQwl09QSnCfz00afUr88ny9vj1S5k2ADS46gaE9O0lM6EY
+z/uZvMizXN/4ko+hFBjCSt0Vhxjx0kYDSP15btiwh700ywBEubpvLROmd48CAwEA
+AaOCBUswggVHMB8GA1UdIwQYMBaAFB4Fo3ePbJbiW4dLprSGrHEADOc4MB0GA1Ud
+DgQWBBTTNWrSb+V/Ayy0i8W2LExMUisQMzAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0T
+AQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwZwYDVR0gBGAw
+XjBSBgwrBgEEAa4jAQQDAQEwQjBABggrBgEFBQcCARY0aHR0cHM6Ly93d3cuaW5j
+b21tb24ub3JnL2NlcnQvcmVwb3NpdG9yeS9jcHNfc3NsLnBkZjAIBgZngQwBAgIw
+RAYDVR0fBD0wOzA5oDegNYYzaHR0cDovL2NybC5pbmNvbW1vbi1yc2Eub3JnL0lu
+Q29tbW9uUlNBU2VydmVyQ0EuY3JsMHUGCCsGAQUFBwEBBGkwZzA+BggrBgEFBQcw
+AoYyaHR0cDovL2NydC51c2VydHJ1c3QuY29tL0luQ29tbW9uUlNBU2VydmVyQ0Ff
+Mi5jcnQwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wggOg
+BgNVHREEggOXMIIDk4IUZmFjdWx0eS5taXNzb3VyaS5lZHWCGmFkdmlzaW5nLmNv
+YXMubWlzc291cmkuZWR1ghBhaGEubWlzc291cmkuZWR1ghZhbGwtY3JhZnQubWlz
+c291cmkuZWR1gh1hbWVyaWNhbmJhc2tldHJ5Lm1pc3NvdXJpLmVkdYIXYW5kcmVh
+cmlldy5taXNzb3VyaS5lZHWCFWFydGdyYWRzLm1pc3NvdXJpLmVkdYIYYmFja3Vw
+LmNvYXMubWlzc291cmkuZWR1ghBiaWMubWlzc291cmkuZWR1ghZibG9nLmNvYXMu
+bWlzc291cmkuZWR1ghVjb3dhbmxhYi5taXNzb3VyaS5lZHWCFWRhZS5zdGF0Lm1p
+c3NvdXJpLmVkdYIRZGljZS5taXNzb3VyaS5lZHWCIGRpZ2l0YWxzdG9yeXRlbGxp
+bmcubWlzc291cmkuZWR1gg9lYS5taXNzb3VyaS5lZHWCG2Vib29rLWRldi5tYXRo
+Lm1pc3NvdXJpLmVkdYIXZWJvb2suZWNvbi5taXNzb3VyaS5lZHWCGGVuZ2xpc2g4
+MDA2Lm1pc3NvdXJpLmVkdYIZZXVnZW5lZml0c2NoLm1pc3NvdXJpLmVkdYIYZXVy
+b2t1bHR1cmUubWlzc291cmkuZWR1ghNmY2RsYWIubWlzc291cmkuZWR1ghZnZW9t
+dXNldW0ubWlzc291cmkuZWR1ghRoYXJzdGFkLm1pc3NvdXJpLmVkdYITbHVkd2ln
+Lm1pc3NvdXJpLmVkdYIYbWFjaGluZXNob3AubWlzc291cmkuZWR1ghNtYWpvcnMu
+bWlzc291cmkuZWR1ghBtZ2EubWlzc291cmkuZWR1ghdvcmdhbnByaW50Lm1pc3Nv
+dXJpLmVkdYIUcGh5c2ljcy5taXNzb3VyaS5lZHWCFHBtLmNoZW0ubWlzc291cmku
+ZWR1ghxyZWNydWl0aW5nLmVjb24ubWlzc291cmkuZWR1ghdyZXBlYy5lY29uLm1p
+c3NvdXJpLmVkdYIUc2NhbmxhYi5taXNzb3VyaS5lZHWCFnNzc2MuY29hcy5taXNz
+b3VyaS5lZHWCF3RlYWNoLmNvYXMubWlzc291cmkuZWR1ghd0b3B0ZWFjaGVyLm1p
+c3NvdXJpLmVkdYIQdnNmLm1pc3NvdXJpLmVkdYIid2hpdGVwYXBlci5ncmFkc2No
+b29sLm1pc3NvdXJpLmVkdTANBgkqhkiG9w0BAQsFAAOCAQEAQutYVAqG7MpmG2Nu
+Z/UypjYkN4JvwRbKBpTrce2IT/Sy29x6chBbyD+0WE6QORBtaUHuzE1KoXqpnF4M
+QrkKw0oBAC6x9dISoomq0DkIndtoBYYLaxSoII6F4OGWgF7pQ/7MiCBYzsKQpn9t
+aofMcTfvnCjq+MCIaeYnUKBVww0lOJlUxZGKxFJvRpf78HfbBauojjRO2zXLZD/u
+KMspbTfDaj5etIgWGShY2eml3N/SjAENmZYkcgDBYFyi8CckcEBAVzpH1+D+7Anz
+txHSYDNHAYLv83MwbegApa1FwPqlG/4SdEU8G6e6Xf5GLC/6GPGVTUpr7o348OOO
+lzGQzw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIF+TCCA+GgAwIBAgIQRyDQ+oVGGn4XoWQCkYRjdDANBgkqhkiG9w0BAQwFADCB
+iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
+cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
+BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQx
+MDA2MDAwMDAwWhcNMjQxMDA1MjM1OTU5WjB2MQswCQYDVQQGEwJVUzELMAkGA1UE
+CBMCTUkxEjAQBgNVBAcTCUFubiBBcmJvcjESMBAGA1UEChMJSW50ZXJuZXQyMREw
+DwYDVQQLEwhJbkNvbW1vbjEfMB0GA1UEAxMWSW5Db21tb24gUlNBIFNlcnZlciBD
+QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJwb8bsvf2MYFVFRVA+e
+xU5NEFj6MJsXKZDmMwysE1N8VJG06thum4ltuzM+j9INpun5uukNDBqeso7JcC7v
+HgV9lestjaKpTbOc5/MZNrun8XzmCB5hJ0R6lvSoNNviQsil2zfVtefkQnI/tBPP
+iwckRR6MkYNGuQmm/BijBgLsNI0yZpUn6uGX6Ns1oytW61fo8BBZ321wDGZq0GTl
+qKOYMa0dYtX6kuOaQ80tNfvZnjNbRX3EhigsZhLI2w8ZMA0/6fDqSl5AB8f2IHpT
+eIFken5FahZv9JNYyWL7KSd9oX8hzudPR9aKVuDjZvjs3YncJowZaDuNi+L7RyML
+fzcCAwEAAaOCAW4wggFqMB8GA1UdIwQYMBaAFFN5v1qqK0rPVIDh2JvAnfKyA2bL
+MB0GA1UdDgQWBBQeBaN3j2yW4luHS6a0hqxxAAznODAOBgNVHQ8BAf8EBAMCAYYw
+EgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH
+AwIwGwYDVR0gBBQwEjAGBgRVHSAAMAgGBmeBDAECAjBQBgNVHR8ESTBHMEWgQ6BB
+hj9odHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVNFUlRydXN0UlNBQ2VydGlmaWNh
+dGlvbkF1dGhvcml0eS5jcmwwdgYIKwYBBQUHAQEEajBoMD8GCCsGAQUFBzAChjNo
+dHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20vVVNFUlRydXN0UlNBQWRkVHJ1c3RDQS5j
+cnQwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZI
+hvcNAQEMBQADggIBAC0RBjjW29dYaK+qOGcXjeIT16MUJNkGE+vrkS/fT2ctyNMU
+11ZlUp5uH5gIjppIG8GLWZqjV5vbhvhZQPwZsHURKsISNrqOcooGTie3jVgU0W+0
++Wj8mN2knCVANt69F2YrA394gbGAdJ5fOrQmL2pIhDY0jqco74fzYefbZ/VS29fR
+5jBxu4uj1P+5ZImem4Gbj1e4ZEzVBhmO55GFfBjRidj26h1oFBHZ7heDH1Bjzw72
+hipu47Gkyfr2NEx3KoCGMLCj3Btx7ASn5Ji8FoU+hCazwOU1VX55mKPU1I2250Lo
+RCASN18JyfsD5PVldJbtyrmz9gn/TKbRXTr80U2q5JhyvjhLf4lOJo/UzL5WCXED
+Smyj4jWG3R7Z8TED9xNNCxGBMXnMete+3PvzdhssvbORDwBZByogQ9xL2LUZFI/i
+eoQp0UM/L8zfP527vWjEzuDN5xwxMnhi+vCToh7J159o5ah29mP+aJnvujbXEnGa
+nrNxHzu+AGOePV8hwrGGG7hOIcPDQwkuYwzN/xT29iLp/cqf9ZhEtkGcQcIImH3b
+oJ8ifsCnSbu0GB9L06Yqh7lcyvKDTEADslIaeSEINxhO2Y1fmcYFX/Fqrrp1WnhH
+OjplXuXE0OPa0utaKC25Aplgom88L2Z8mEWcyfoB7zKOfD759AN7JKZWCYwk
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB
+iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
+cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
+BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw
+MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV
+BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
+aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy
+dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
+AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B
+3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY
+tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/
+Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2
+VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT
+79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6
+c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT
+Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l
+c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee
+UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE
+Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd
+BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G
+A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF
+Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO
+VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3
+ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs
+8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR
+iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze
+Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ
+XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/
+qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB
+VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB
+L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG
+jjxDah2nGN59PRbxYvnKkKj9
+-----END CERTIFICATE-----
+EOF
+cat /etc/ssl/certs/ca-certificates.crt >> $cert
+CURL_CA_BUNDLE=$cert pi xkbset
+
+pi xbindkeys cryptsetup
 
 pi lvm2
 # enables trim for volume delete, other rare commands.
@@ -528,18 +658,24 @@ fi
 
 if isarch; then
     # install so it's build dependencies don't get removed.
-    x=$(mktemp -d)
-    pushd $x
-    aurex emacs-git
-    makepkg -si --noconfirm
-    popd
-    rm -rf $x
+
+    # emacs git build is currently broken
+    if false; then
+        x=$(mktemp -d)
+        pushd $x
+        aurex emacs-git
+        makepkg -si --noconfirm
+        popd
+        rm -rf $x
+    else
+        pi emacs
+    fi
     pi hunspell hunspell-en
 else
     # to disable emacs git build,
     # s apt-get install emacs
     if $recompile; then
-        /a/bin/buildscripts/emacs
+        /a/bin/buildscripts/emacs -u
     else
         /a/bin/buildscripts/emacs -r
     fi
@@ -588,7 +724,7 @@ if isarch; then
     pi xorg-xmessage xmonad-contrib xorg-xsetroot xorg-xinit
 
     # https://wiki.archlinux.org/index.php/Xinitrc
-    for homedir in /homme/*; do
+    for homedir in /home/*; do
         cp /etc/X11/xinit/xinitrc $homedir/.xinitrc
         sed -ri '/^ *twm\b/,$d' $homedir/.xinitrc
         echo "source /a/bin/xinitrc" | tee -a $homedir/.xinitrc
@@ -603,3 +739,4 @@ if isdeb && (tp || x2); then
 fi
 
 sudo chown -R traci:traci /home/traci
+echo "$0: $(date): ending now"
index 4056d055a125deda49ac4aa47081086580454864..3ebc231f1510932151f88ad263380034d2888de7 100755 (executable)
@@ -6,6 +6,9 @@ trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?"' ERR
 
 set -x
 
+exec &> >(sudo tee -a /var/log/distro-end)
+echo "$0: $(date): starting now)"
+
 end_msg() {
     =    local y
     IFS= read -r -d '' y  ||:
@@ -14,6 +17,7 @@ end_msg() {
 
 distro=$(distro-name)
 
+pending_reboot=false
 
 # template
 case $distro in
@@ -46,6 +50,7 @@ simple_packages=(
     smartmontools
     squashfs-tools
     tcpdump
+    transmission-remote-gtk
     tree
     vim
 )
@@ -160,21 +165,29 @@ EOF
     esac
 fi
 
-# from /var/lib/dpkg/info/transmission-daemon.postinst
+# adapted from /var/lib/dpkg/info/transmission-daemon.postinst
 if ! getent passwd debian-transmission > /dev/null; then
-    s adduser --quiet \
-      --system \
-      --group \
-      --no-create-home \
-      --disabled-password \
-      --home /var/lib/transmission-daemon \
-      debian-transmission
+    case $distro in
+        arch)
+            s useradd \
+              --system \
+              --create-home \
+              --home-dir /var/lib/transmission-daemon \
+              --shell /bin/false \
+              debian-transmission
+            ;;
+        *)
+            s adduser --quiet \
+              --system \
+              --group \
+              --no-create-home \
+              --disabled-password \
+              --home /var/lib/transmission-daemon \
+              debian-transmission
+            ;;
+    esac
 fi
 
-case $distro in
-    debian|ubuntu) pi transmission-remote-gtk ;;
-    arch) pi transmission-remote-gtk2 ;;
-esac
 # arch had a default config,
 # debian had nothing until you start it.
 # With a little trial an error, here is a minimal config
@@ -227,46 +240,46 @@ case $distro in
         ser disable openvpn@client
         ser disable openvpn
         ;;
-    *) pi openvpn ;;
-esac
+        *) pi openvpn ;;
+    esac
 
-case $HOSTNAME in
-    tp|frodo)
-        case $distro in
-            debian|ubuntu)
-                log=$(mktemp)
-                cd /a/opt
-                wget -N https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
-                set +e
-                s dpkg -i google-chrome-stable_current_amd64.deb &> $log
-                code=$?
-                set -e
-                case $code in
-                    1)
-                        if grep '^dpkg: dependency problems prevent configuration of' \
-                                $log &>/dev/null; then
-                            s apt-get -fy install
-                        else
-                            exit 1
-                        fi
-                        ;;
-                    0) : ;;
-                    *) exit $code
-                esac
-                ;;
-            arch)
-                pi google-chrome
-                ;;
-        esac
-        ;;
-esac
+    case $HOSTNAME in
+        tp|frodo)
+            case $distro in
+                debian|ubuntu)
+                    log=$(mktemp)
+                    cd /a/opt
+                    wget -N https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
+                    set +e
+                    s dpkg -i google-chrome-stable_current_amd64.deb &> $log
+                    code=$?
+                    set -e
+                    case $code in
+                        1)
+                            if grep '^dpkg: dependency problems prevent configuration of' \
+                                    $log &>/dev/null; then
+                                s apt-get -fy install
+                            else
+                                exit 1
+                            fi
+                            ;;
+                        0) : ;;
+                        *) exit $code
+                    esac
+                    ;;
+                arch)
+                    pi google-chrome
+                    ;;
+            esac
+            ;;
+    esac
 
-case $distro in
-    # ubuntu unknown. probably the same as debian, just check if the
-    # init scripts come with the package.
-    debian)
-        # copied from arch
-        s dd of=/etc/systemd/system/synergys@.service <<'EOF'
+    case $distro in
+        # ubuntu unknown. probably the same as debian, just check if the
+        # init scripts come with the package.
+        debian)
+            # copied from arch, but moved to etc
+            s dd of=/etc/systemd/user/synergys.service <<'EOF'
 [Unit]
 Description=Synergy Server Daemon
 After=network.target
@@ -279,7 +292,7 @@ Restart=on-failure
 [Install]
 WantedBy=multi-user.target
 EOF
-        s dd of=/etc/systemd/system/synergys@.socket <<'EOF'
+            s dd of=/etc/systemd/user/synergys.socket <<'EOF'
 [Unit]
 Conflicts=synergys@.service
 
@@ -290,10 +303,11 @@ Accept=false
 [Install]
 WantedBy=sockets.target
 EOF
-        ;;&
-    *)
-        pi synergy
-        s dd of=/etc/systemd/system/synergyc@.service <<'EOF'
+            ;;&
+        *)
+            pi synergy
+            # taken from arch wiki.
+            s dd of=/etc/systemd/system/synergyc@.service <<'EOF'
 [Unit]
 Description=Synergy Client
 After=network.target
@@ -310,146 +324,147 @@ RestartSec=3s
 [Install]
 WantedBy=multi-user.target
 EOF
-        case $HOSTNAME in
-            frodo)
-                sgo synergyc@ian
-                sgo synergys@ian.socket
-                ;;
-            treetowl) sgo synergys@ian.socket ;;
-        esac
-        ;;
-esac
+            case $HOSTNAME in
+                frodo)
+                    sgo synergyc@ian
+                    systemctl --user start synergys
+                    systemctl --user enable synergys
+                    ;;
+                treetowl) systemctl --user enable synergys ;;
+            esac
+            ;;
+    esac
 
-case $distro in
-    # tk for gitk
-    arch) spa git tk ;;
-    *) spa git ;;
-esac
+    case $distro in
+        # tk for gitk
+        arch) spa git tk ;;
+        *) spa git ;;
+    esac
 
-case $distro in
-    arch) spa the_silver_searcher ;;
-    debian|ubuntu) spa silversearcher-ag ;;
-    # fedora unknown
-esac
+    case $distro in
+        arch) spa the_silver_searcher ;;
+        debian|ubuntu) spa silversearcher-ag ;;
+        # fedora unknown
+    esac
 
-# printer
-case $distro in
-    arch)
-        pi cups ghostscript gsfonts # from arch wiki cups page
-        pi hplip # from google
-        s gpasswd -a $USER sys # from arch wiki
-        sgo org.cups.cupsd.service
-        # goto http://127.0.0.1:631
-        # administration tab, add new printer button.
-        # In debian, I could use hte recommended driver,
-        # in arch, I had to pick out the 6L driver.
-        ;;
-    debian|ubuntu)
-        spa hplip
-        ;;
-    # other distros unknown
-esac
+    # printer
+    case $distro in
+        arch)
+            pi cups ghostscript gsfonts # from arch wiki cups page
+            pi hplip # from google
+            s gpasswd -a $USER sys # from arch wiki
+            sgo org.cups.cupsd.service
+            # goto http://127.0.0.1:631
+            # administration tab, add new printer button.
+            # In debian, I could use hte recommended driver,
+            # in arch, I had to pick out the 6L driver.
+            ;;
+        debian|ubuntu)
+            spa hplip
+            ;;
+        # other distros unknown
+    esac
 
 
-case $distro in
-    ubuntu|debian) spa ack-grep ;;
-    arch|fedora) spa ack ;;
-    # fedora unknown
-esac
-case $distro in
-    ubuntu|debian) pi --no-install-recommends mairix notmuch ;;
-    fedora|arch) spa mairix notmuch ;;
-esac
-case $distro in
-    arch) spa nfs-utils ;;
-    ubuntu|debian) spa nfs-client ;;
-esac
-case $distro in
-    ubuntu|debian) spa par2 ;;
-    arch|fedora) spa par2cmdline ;;
-esac
+    case $distro in
+        ubuntu|debian) spa ack-grep ;;
+        arch|fedora) spa ack ;;
+        # fedora unknown
+    esac
+    case $distro in
+        ubuntu|debian) pi --no-install-recommends mairix notmuch ;;
+        fedora|arch) spa mairix notmuch ;;
+    esac
+    case $distro in
+        arch) spa nfs-utils ;;
+        ubuntu|debian) spa nfs-client ;;
+    esac
+    case $distro in
+        ubuntu|debian) spa par2 ;;
+        arch|fedora) spa par2cmdline ;;
+    esac
 
-# needed for my tex resume
-case $distro in
-    ubuntu|debian) spa texlive-full ;;
-    arch) spa texlive-most ;;
-    # fedora unknown
-esac
+    # needed for my tex resume
+    case $distro in
+        ubuntu|debian) spa texlive-full ;;
+        arch) spa texlive-most ;;
+        # fedora unknown
+    esac
 
-case $distro in
-    ubuntu)
-        # flash, unrar, codecs, ms fonts.
-        # This has a manual prompt.
-        spa ubuntu-restricted-extras
-        ;;
-    fedora)
-        pi yum-utils
-        # rpm fusion recommended codecs
-        s su -c "yum localinstall -y --nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm"
-        pi gstreamer-plugins-ugly gstreamer-plugins-bad gstreamer-ffmpeg\
-           xine-lib-extras-freeworld
-        ;;
-esac
+    case $distro in
+        ubuntu)
+            # flash, unrar, codecs, ms fonts.
+            # This has a manual prompt.
+            spa ubuntu-restricted-extras
+            ;;
+        fedora)
+            pi yum-utils
+            # rpm fusion recommended codecs
+            s su -c "yum localinstall -y --nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm"
+            pi gstreamer-plugins-ugly gstreamer-plugins-bad gstreamer-ffmpeg\
+               xine-lib-extras-freeworld
+            ;;
+    esac
 
-case $distro in
-    # optional dep for firefox for h.264 video
-    arch) spa gst-libav ;;
-    # other distros, probably come by default
-esac
+    case $distro in
+        # optional dep for firefox for h.264 video
+        arch) spa gst-libav ;;
+        # other distros, probably come by default
+    esac
 
-case $distro in
-    fedora|ubuntu|debian) spa gnupg-agent ;;
-    arch) : ;;
-esac
+    case $distro in
+        fedora|ubuntu|debian) spa gnupg-agent ;;
+        arch) : ;;
+    esac
 
 
-case $distro in
-    fedora) spa pinentry-gtk ;;
-    *) : ;; # comes default or with other packages
-esac
+    case $distro in
+        fedora) spa pinentry-gtk ;;
+        *) : ;; # comes default or with other packages
+    esac
 
-case $distro in
-    arch) spa firefox pulseaudio;;
-    *) : ;; # comes default or with other packages
-esac
+    case $distro in
+        arch) spa firefox pulseaudio;;
+        *) : ;; # comes default or with other packages
+    esac
 
-case $distro in
-    arch|debian|ubuntu)
-        spa bash-completion
-        ;;
-    # others unknown
-esac
+    case $distro in
+        arch|debian|ubuntu)
+            spa bash-completion
+            ;;
+        # others unknown
+    esac
 
 
-case $distro in
-    arch) spa ttf-dejavu;;
-    debian|ubuntu) spa fonts-dejavu ;;
-    # others unknown
-esac
+    case $distro in
+        arch) spa ttf-dejavu;;
+        debian|ubuntu) spa fonts-dejavu ;;
+        # others unknown
+    esac
 
-case $distro in
-    debian|ubuntu) spa ntp;;
-    arch)
-        pi ntp
-        sgo ntpd
-        ;;
-    # others unknown
-esac
+    case $distro in
+        debian|ubuntu) spa ntp;;
+        arch)
+            pi ntp
+            sgo ntpd
+            ;;
+        # others unknown
+    esac
 
-case $distro in
-    arch) spa xorg-xev;;
-    debian|ubuntu) spa x11-utils ;;
-    # others unknown
-esac
+    case $distro in
+        arch) spa xorg-xev;;
+        debian|ubuntu) spa x11-utils ;;
+        # others unknown
+    esac
 
-case $distro in
-    arch) pi virt-install;;&
-    debian|ubuntu) pi virtinst ;;&
-    *) pi virt-manager ;; # creates the libvirt group in debian at least
-    # others unknown
-esac
-# allow user to run vms, from debian handbook
-for x in ian traci; do s usermod -a -G libvirt $x; done
+    case $distro in
+        arch) pi virt-install;;&
+        debian|ubuntu) pi virtinst ;;&
+        *) pi virt-manager ;; # creates the libvirt group in debian at least
+        # others unknown
+    esac
+    # allow user to run vms, from debian handbook
+    for x in ian traci; do s usermod -a -G libvirt $x; done
 # bridge networking as user fails. google lead here, but it doesn't work:
 # oh well, I give up.
 # http://wiki.qemu.org/Features-Done/HelperNetworking
@@ -478,9 +493,10 @@ esac
 case $distro in
     arch)
         # cdrkit for cloud-init isos
-        # dnsmasq for nat networking in libvirt
+        # dnsmasq & ebtables for nat networking in libvirt
         # qemu for qemu-img, bind-tools for dig
-        pi unzip wget xorg-xmodmap \
+        # dmidecode just because syslog complains
+        pi unzip wget xorg-xmodmap dmidecode ebtables\
            bridge-utils dnsmasq qemu bind-tools
         # otherwise we get error about accessing kvm module.
         # seems like there might be a better way, but google was a bit vague.
@@ -489,7 +505,10 @@ case $distro in
         # https://bbs.archlinux.org/viewtopic.php?id=206206
         # # this should prolly go in the wiki
         sgo virtlogd.socket
-        sgo virtlogd.service
+        # guessing this is not needed
+        #sgo virtlogd.service
+        sgo libvirtd
+
         ;;
 esac
 
@@ -514,7 +533,7 @@ case $distro in
         pi cronie
         sgo cronie
         ;;
-                        *) : ;; # other distros come with cron.
+                            *) : ;; # other distros come with cron.
 esac
 
 
@@ -746,8 +765,8 @@ if [[ ! -L /var/spool/postfix ]]; then
     ser stop postfix
     n=/q/postfix-`distro-name``debian-archive`
     if [[ -e $n ]]; then
-        echo "$0: error: /q/postfix exists but not the link to it"
-        exit 1
+        echo "$0: warning: $n already exists before we do the link, removing it"
+        rm -rf $n
     fi
     s mv /var/spool/postfix $n
     s lnf -T $n /var/spool/postfix
@@ -885,8 +904,9 @@ EOF
         pi nfs-server
         ;;
     arch)
-        pi nfs-utils
+        pi nfs-utils || pending_reboot=true
         sgo rpcbind
+        # this failed until I rebooted
         sgo nfs-server
         ;;
 esac
@@ -975,7 +995,9 @@ fi
 
 pi samba
 # note samba re-reads it's config every 1 minute
-
+case $distro in
+    arch) s cp /etc/samba/smb.conf.default /etc/samba/smb.conf ;;
+esac
 
 # add 2 lines after workgroup option
 s sed -ri '/^\s*encrypt passwords\s*=/d' /etc/samba/smb.conf
@@ -1029,3 +1051,10 @@ fi
 # Do this again because it occasionally has changes and
 # it can be run outside initial isntall.
 s /a/bin/fai/fai/config/distro-install-common/end
+
+if $pending_reboot; then
+    echo "$0: pending reboot and then finished. doing it now."
+    s reboot now
+else
+    echo "$0: $(date): ending now)"
+fi
diff --git a/rootsshsync b/rootsshsync
new file mode 100755 (executable)
index 0000000..ab904e3
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/bash -l
+# Copyright (C) 2016 Ian Kelling
+# This program is under GPL v. 3 or later, see <http://www.gnu.org/licenses/>
+if s test -e /q/root/.ssh; then
+    s lnf /q/root/.ssh /root
+else
+    mkdir /root/.ssh
+fi
+s cp -rL $(eval echo ~${SUDO_USER:-$USER})/.ssh/* /root/.ssh
+s chown -R root:root /root/.ssh