mostly refactor mail-setup, more self contained
[distro-setup] / distro-end
index 534c17a5856691b20dc07bad6ddee92cb7fe667a..e0bf4f66fc936785a3fb7f50b2e716d79d949d54 100755 (executable)
@@ -65,12 +65,14 @@ case $HOSTNAME in
             apache2
             apache2-doc
             apt-doc
+            apt-listchanges
             aptitude-doc-en
             bash-doc
             binutils-doc
             bwm-ng
             chromium
             cpio-doc
+            cloc
             cron
             debconf-doc
             duplicity
@@ -84,6 +86,7 @@ case $HOSTNAME in
             gdb
             gdb-doc
             git-doc
+            git-email
             gitk
             glibc-doc
             goaccess
@@ -389,7 +392,7 @@ EOF
          ProxyPass /  https://127.0.0.1:8001/
          ProxyPassReverse /  https://127.0.0.1:8001/
          # i have sockjs disabled per people suggesting that
-         # it won't work with apache right now.
+         # it won\'t work with apache right now.
          # not sure if it would work with this,
          # but afaik, this is pointless atm.
          <Location /main/realtime/sockjs/>
@@ -420,6 +423,112 @@ EOF
         sgo pump
         ########## end pump.io setup ############
 
+
+        ############# begin setup mastodon ##############
+
+        # https://store.docker.com/editions/community/docker-ce-server-debian?tab=description
+        pi  software-properties-common
+        curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
+        sudo add-apt-repository \
+             "deb [arch=amd64] https://download.docker.com/linux/debian \
+         $(lsb_release -cs) \
+         stable"
+        p update
+        pi docker-ce
+        sgo docker
+        # this may not be needed
+        ser start docker
+
+        curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` | s dd of=/usr/local/bin/docker-compose
+        s chmod +x /usr/local/bin/docker-compose
+
+        # i subscrubed to https://github.com/docker/compose/releases.atom
+        # to deal with updates manually.
+
+        cd ~
+        i clone https://github.com/tootsuite/mastodon
+        cd mastodon
+        # https://github.com/tootsuite/mastodon/tree/v1.1.2
+        # subbed to atom feed to deal with updates
+        i co v1.1.2
+
+        # per instructions, uncomment redis/postgres persistence in docker-compose.yml
+        sed -i 's/^#//' docker-compose.yml
+
+        cat >.env.production <<'EOF'
+REDIS_HOST=redis
+REDIS_PORT=6379
+DB_HOST=db
+DB_USER=postgres
+DB_NAME=postgres
+DB_PASS=
+DB_PORT=5432
+
+LOCAL_DOMAIN=mast.iankelling.org
+LOCAL_HTTPS=true
+
+SINGLE_USER_MODE=true
+
+SMTP_SERVER=10.8.0.4
+SMTP_PORT=25
+SMTP_LOGIN=li
+SMTP_FROM_ADDRESS=notifications@mast.iankelling.org
+SMTP_DOMAIN=mast.iankelling.org
+SMTP_DELIVERY_METHOD=smtp
+EOF
+
+        for key in PAPERCLIP_SECRET SECRET_KEY_BASE OTP_SECRET; do
+            printf "%s=%s" $key "$(docker-compose run --rm web rake secret)" >>.env.production
+        done
+        s cat /etc/mailpass| while read -r domain port pass; do
+            if [[ $domain == mail.iankelling.org ]]; then
+                printf "SMTP_PASSWORD=%s" "$pass" >>.env.production
+                break
+            fi
+        done
+
+
+
+        docker-compose run --rm web rails assets:precompile
+
+        # docker daemon takes care of starting on boot.
+        docker-compose up -d
+
+        acme-tiny-wrapper mast.iankelling.org
+        s a2enmod proxy_wstunnel headers
+        apache-site -f 3000 - mast.iankelling.org <<'EOF'
+   ProxyPreserveHost On
+   RequestHeader set X-Forwarded-Proto "https"
+   ProxyPass /500.html !
+   ProxyPass /oops.png !
+   ProxyPass /api/v1/streaming/ ws://localhost:4000/
+   ProxyPassReverse /api/v1/streaming/ ws://localhost:4000/
+   ErrorDocument 500 /500.html
+   ErrorDocument 501 /500.html
+   ErrorDocument 502 /500.html
+   ErrorDocument 503 /500.html
+   ErrorDocument 504 /500.html
+EOF
+
+
+        ############### !!!!!!!!!!!!!!!!!
+        ############### manual steps:
+
+        # only following 2 people atm, so not bothering to figure out backups
+        # when mastodon has not documented it at all.
+        #
+        # fsf@status.fsf.org
+        # cwebber@toot.cat
+        # dbd@status.fsf.org
+        # johns@status.fsf.org
+
+        # sign in page is at https://mast.iankelling.org/auth/sign_in
+        # register as iank, then
+        # https://github.com/tootsuite/documentation/blob/master/Running-Mastodon/Administration-guide.md
+        # docker-compose run --rm web bundle exec rails mastodon:make_admin USERNAME=iank
+
+        ############# end setup mastodon ##############
+
         echo "$0: $(date): ending now)"
         exit 0
         ;;
@@ -428,7 +537,38 @@ esac
 
 ########### end section including li/lj ###############
 
-# pump.io periodic backup
+if [[ $HOSTNAME == treetowl ]]; then
+    # note, see bashrc for more documentation.
+    pi rss2email
+    s dd of=/etc/systemd/system/rss2email.service <<'EOF'
+[Unit]
+Description=rss2email
+After=multi-user.target
+
+[Service]
+User=ian
+Type=oneshot
+# about 24 hours of failures
+ExecStart=/a/bin/log-quiet/sysd-mail-once -288 rss2email r2e run
+EOF
+    s dd of=/etc/systemd/system/rss2email.timer <<'EOF'
+[Unit]
+Description=rss2email
+
+[Timer]
+# for initial run. required.
+OnActiveSec=30
+# for subsequent runs.
+OnUnitInactiveSec=300
+
+[Install]
+WantedBy=timers.target
+EOF
+    s systemctl daemon-reload
+    sgo rss2email.timer
+fi
+
+######### begin  pump.io periodic backup #############
 if [[ $HOSTNAME == treetowl ]]; then
     s dd of=/etc/systemd/system/pumpbackup.service <<'EOF'
 [Unit]
@@ -440,7 +580,6 @@ User=ian
 Type=oneshot
 ExecStart=/a/bin/log-quiet/sysd-mail-once pump-backup /a/bin/distro-setup/pump-backup
 EOF
-
     s dd of=/etc/systemd/system/pumpbackup.timer <<'EOF'
 [Unit]
 Description=pump li backup hourly
@@ -454,16 +593,17 @@ EOF
     s systemctl daemon-reload
     sgo pumpbackup.timer
 fi
+#########  end  pump.io periodic backup #############
 
 case $distro in
     debian|ubuntu)
         # suggests because we want the resolvconf package.
-        # todo: check other distros to make sure it's installed
+        # todo: check other distros to make sure it\'s installed
         pi-nostart --install-suggests openvpn
         # pi-nostart does not disable
         ser disable openvpn
         ;;
-*) pi openvpn;;
+    *) pi openvpn;;
 esac
 
 if private-host; then
@@ -494,6 +634,8 @@ spa lib32stdc++6 default-jdk
 
 
 if [[ $HOSTNAME == treetowl ]]; then
+    ############# begin syncthing setup ###########
+
     # It\'s simpler to just worry about running it in one place for now.
     # I assume it would work to clone it\'s config to another non-phone
     # and just run it in one place instead of the normal having a
@@ -543,11 +685,11 @@ if [[ $HOSTNAME == treetowl ]]; then
     # after adding, notification will appear on desktop to confirm
     #
     # syncing folder. from phone to desktop: select desktop in the
-    # folder on phone's sync options, notification will appear in
-    # desktop's web ui within a minute. For the reverse, the
-    # notification will appear in android's notifications, you have to
-    # swipe down and tap it to add the folder. It won't appear in the
-    # syncthing ui, which would be intuitive, but don't wait for it
+    # folder on phone\'s sync options, notification will appear in
+    # desktop\'s web ui within a minute. For the reverse, the
+    # notification will appear in android\'s notifications, you have to
+    # swipe down and tap it to add the folder. It won\'t appear in the
+    # syncthing ui, which would be intuitive, but don\'t wait for it
     # there.
     #
     # On phone, set settings to run syncthing all the time, and
@@ -562,53 +704,55 @@ if [[ $HOSTNAME == treetowl ]]; then
     #
     # Note, the other thing i did was port forward port 22000,
     # per https://docs.syncthing.net/users/firewall.html
+
+    #############  end syncthing setup ###########
 fi
 
 
 
-    # no equivalent in other distros:
-    case $distro in
-        debian|ubuntu)
-            # for gui bug reporting
-            spa python-vte
-            ;;
-    esac
+# no equivalent in other distros:
+case $distro in
+    debian|ubuntu)
+        # for gui bug reporting
+        spa python-vte
+        ;;
+esac
 
 
-    ####### misc packages ###########
+####### misc packages ###########
 
-    if [[ $HOSTNAME == treetowl ]]; then
-        case $distro in
-            debian|ubuntu)
-                # note i had to do this, which is persistent:
-                # cd /i/k
-                # s chgrp debian-transmission torrents partial-torrents
-
-                # syslog says things like
-                # 'Failed to set receive buffer: requested 4194304, got 425984'
-                # google suggets giving it even more than that
-                tu /etc/sysctl.conf<<'EOF'
+if [[ $HOSTNAME == treetowl ]]; then
+    case $distro in
+        debian|ubuntu)
+            # note i had to do this, which is persistent:
+            # cd /i/k
+            # s chgrp debian-transmission torrents partial-torrents
+
+            # syslog says things like
+            # 'Failed to set receive buffer: requested 4194304, got 425984'
+            # google suggets giving it even more than that
+            tu /etc/sysctl.conf<<'EOF'
 net.core.rmem_max = 67108864
 net.core.wmem_max = 16777216
 EOF
-                s sysctl -p
+            s sysctl -p
 
-            # some reason it doesn't seem to start automatically anyways
+            # some reason it doesn\'t seem to start automatically anyways
             pi-nostart transmission-daemon
 
             # the folder was moved here after an install around 02/2017.
             # it contains runtime data,
-            # plus a simple symlink to the config file which it's
+            # plus a simple symlink to the config file which it\'s
             # not worth separating out.
             s lnf -T /i/transmission-daemon /var/lib/transmission-daemon/.config/transmission-daemon
             #
-            # config file documented here, and it's the same config
-            # for daemon vs client, so it's documented in the gui.
+            # config file documented here, and it\'s the same config
+            # for daemon vs client, so it\'s documented in the gui.
             # https://trac.transmissionbt.com/wiki/EditConfigFiles#Options
             #
             # I originaly setup rpc-whitelist, but after using
-            # routing to a network namespace, it doesn't see the
-            # real source address, so it's disabled.
+            # routing to a network namespace, it doesn\'t see the
+            # real source address, so it\'s disabled.
             #
             # Changed the cache-size to 256 mb, reduces disk use.
             # It is a read & write cache.
@@ -635,34 +779,34 @@ EOF
             ser disable transmission-daemon
             sgo transmission-daemon-nn
             ;;
-            # todo: others unknown
-        esac
-    fi
+        # todo: others unknown
+    esac
+fi
 
-    # adapted from /var/lib/dpkg/info/transmission-daemon.postinst
-    if ! getent passwd debian-transmission > /dev/null; then
-        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
+# adapted from /var/lib/dpkg/info/transmission-daemon.postinst
+if ! getent passwd debian-transmission > /dev/null; then
+    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
 
-# dunno why it's there, but get rid of it
+# dunno why it\'s there, but get rid of it
 case $HOSTNAME in
     li|lj) s rm -rf /home/linode ;;
 esac
@@ -854,7 +998,7 @@ case $distro in
 esac
 # allow user to run vms, from debian handbook
 for x in ian traci; do s usermod -a -G libvirt,kvm $x; done
-# bridge networking as user fails. google lead here, but it doesn't work:
+# 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
 # s mkdir /etc/qemu
@@ -1010,7 +1154,7 @@ EOF
     # has seg fault error due to some bug, but it still works
     pip install -r requirements.txt || [[ $? == 139 ]]
     # note, the target must exist ahead of time, or bitcoin
-    # just overwrites the link, and it's not happy with an empty file,
+    # just overwrites the link, and it\'s not happy with an empty file,
     # so we have to create the wallet, then move and link it.
     s lnf -T /q/bitcoin/wallet.dat /nocow/.bitcoin/wallet.dat
     s lnf -T /q/bitcoin/joinmarket.dat /nocow/.bitcoin/joinmarket.dat
@@ -1028,73 +1172,64 @@ EOF
     done
     sed -ri "s/^\s*(blockchain_source\s*=).*/\1 bitcoin-rpc/" joinmarket.cfg
 
-                    fi
-
-
-
-
-                       # proprietary flash. going without for now
-                       # case $distro in
-                       #     debian)
-                       #         pi flashplugin-nonfree
-                       # esac
+fi
 
 
 
-                       case $distro in
-                           fedora)
-                               cd $(mktemp -d)
-                               wget http://tamacom.com/global/global-6.3.2.tar.gz
-                               ex global*
-                               cd global-6.3.2
-                               # based on https://github.com/leoliu/ggtags
-                               ./configure --with-exuberant-ctags=/usr/bin/ctags
-                               make
-                               s make install
-                               s pip install pygments
-                               ;;
-                           *)
-                               pi global
-                               ;;&
-                           arch)
-                               pi  python2-pygments
-                               ;;
-                           debian|ubuntu)
-                               pi python-pygments
-                               ;;
-                       esac
+case $distro in
+    fedora)
+        cd $(mktemp -d)
+        wget http://tamacom.com/global/global-6.3.2.tar.gz
+        ex global*
+        cd global-6.3.2
+        # based on https://github.com/leoliu/ggtags
+        ./configure --with-exuberant-ctags=/usr/bin/ctags
+        make
+        s make install
+        s pip install pygments
+        ;;
+    *)
+        pi global
+        ;;&
+    arch)
+        pi  python2-pygments
+        ;;
+    debian|ubuntu)
+        pi python-pygments
+        ;;
+esac
 
 
-                       case $distro in
-                           debian)
-                               pi task-cinnamon-desktop
-                               # in settings, change scrolling to two-finger,
-                               # because the default edge scroll doesn\'t work.
-                               pu transmission-gtk
-                               ;;
-                           # others unknown
-                       esac
+case $distro in
+    debian)
+        pi task-cinnamon-desktop
+        # in settings, change scrolling to two-finger,
+        # because the default edge scroll doesn\'t work.
+        pu transmission-gtk
+        ;;
+    # others unknown
+esac
 
-                       case $distro in
-                           arch) spa apg  ;;
+case $distro in
+    arch) spa apg  ;;
 
-                           # already in debian jessie
-                       esac
+    # already in debian jessie
+esac
 
 
 
 
-                       # note this failed running at the beginning of this file,
-                       # because no systemd user instance was running.
-                       # Doing systemd --user resulted in
-                       # Trying to run as user instance, but $XDG_RUNTIME_DIR is not set
+# note this failed running at the beginning of this file,
+# because no systemd user instance was running.
+# Doing systemd --user resulted in
+# Trying to run as user instance, but $XDG_RUNTIME_DIR is not set
 
-                       if isdebian-testing; then
-                           # as of 7/2016, has no unstable deps, and is not in testing anymore.
-                           pi synergy/unstable
-                       else
-                           pi synergy
-                       fi
+if isdebian-testing; then
+    # as of 7/2016, has no unstable deps, and is not in testing anymore.
+    pi synergy/unstable
+else
+    pi synergy
+fi
 
 # case $distro in
 #     # ubuntu unknown. probably the same as debian, just check if the
@@ -1170,7 +1305,7 @@ EOF
 ######### end misc packages #########
 
 
-# packages I once used before and liked, but don't want installed now for
+# packages I once used before and liked, but don\'t want installed now for
 # various reasons:
 # python-sqlite is used for offlineimap
 # lxappearance python-sqlite dolphin paman dconf-editor
@@ -1236,7 +1371,7 @@ log-file /var/log/apache2/access.log
 color-scheme 2
 
 # tip: copy access.log files to a stretch host directory, then run
-# jessie's goaccess is too old for some options, and it's
+# jessie's goaccess is too old for some options, and it\'s
 # not easily installed from a testing.
 # goaccess --ignore-crawlers -f <(cat *) -a -o html > x.html
 EOF