X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=distro-end;h=84566b89fa4299468c147d69bd2e60ee97911166;hb=28904b44d0dd6ce9d43ab720b5efe9af2ce336de;hp=d72adea591e501549cfd1669e4fd6c210dd31fd0;hpb=90bd397922e7240c41377e7404f79f190bfbc9d8;p=distro-setup diff --git a/distro-end b/distro-end index d72adea..84566b8 100755 --- a/distro-end +++ b/distro-end @@ -14,8 +14,9 @@ # limitations under the License. ### setup -errcatch -src="${BASH_SOURCE%/*}" +source /a/bin/errhandle/err +src="$(readlink -f -- "$BASH_SOURCE")"; src=${src%/*} # directory of this file + source $src/pkgs set -x @@ -27,10 +28,14 @@ end_msg() { IFS= read -r -d '' y ||: end_msg_var+="$y" } +die() { + printf "$0: %s\n" "$*" >&2; exit 1 +} spa() { # simple package add simple_packages+=($@) } distro=$(distro-name) +codename_compat=$(debian-codename-compat) pending_reboot=false sed="sed --follow-symlinks" # template @@ -43,8 +48,30 @@ if isdeb; then pi aptitude fi +# avoid ptompts! +s debconf-set-selections </dev/null; then - # this condition is just a speed optimization - pi apt-file - s apt-file update - fi - ;; -esac +if isdeb && ! dpkg -s -- "$@" | grep -Fx "Status: install ok installed" &> /dev/null; then + # this condition is just a speed optimization + pi apt-file + s apt-file update +fi # disable motd junk. @@ -83,10 +106,6 @@ case $distro in # this says disabling the service, it will still get restarted # but this script doesn't do anything on restart, so it should be fine s dd of=/var/run/motd.dynamic if=/dev/null - # stretch doesn't have initscripts pkg installed by default - if [[ $(debian-codename) == jessie ]]; then - s update-rc.d motd disable - fi ;; trisquel|ubuntu) # this isn't a complete solution. It still shows me when updates are available, @@ -95,59 +114,50 @@ case $distro in ;; esac -# automatic updates -# reference: -# https://debian-handbook.info/browse/stable/sect.regular-upgrades.html -# /etc/cron.daily/apt calls unattended-upgrades -# /usr/share/doc/unattended-upgrades# cat README.md -# /etc/apt/apt.conf.d/50unattended-upgrades -if isdebian; then - setup-debian-auto-update -fi - ### begin docker install #### if isdeb; then # https://store.docker.com/editions/community/docker-ce-server-debian?tab=description pi software-properties-common apt-transport-https curl -fsSL https://download.docker.com/linux/$(distro-name-compat)/gpg | sudo apt-key add - - sudo add-apt-repository \ - "deb [arch=amd64] https://download.docker.com/linux/$(distro-name-compat) \ - $(debian-codename-compat) \ - stable" - p update + url=https://download.docker.com/linux/$(distro-name-compat) + l="deb [arch=amd64] $url $codename_compat stable" + + if ! grep -xFq "$l" /etc/apt/sources.list{,.d/*.list}; then + sudo add-apt-repository "$l" + p update + fi # docker eats up a fair amount of cpu when doing nothing, so don't enable it unless # we really need it. pi-nostart docker-ce + # and docker is even more crap, it ignores that it shouldnt start + ser stop docker + ser disable docker case $HOSTNAME in li|lj) sgo docker ;; esac - # other distros unknown fi ### end docker install #### + ### begin certbot install ### -case $distro in - debian) - # note, need python-certbot-nginx for nginx, but it depends on nginx, - # and I'm not installing nginx by default right now. - # note python-certbot-apache is in suggests, but so is a doc package that brought in xorg - if [[ $(debian-codename) == jessie ]]; then - pi -t jessie-backports certbot python-certbot-apache - else - pi certbot python-certbot-apache - fi - ;; - trisquel|ubuntu) - # not packaged in xenial or flidas - pi software-properties-common +if [[ $distro == debian ]]; then + # note, need python-certbot-nginx for nginx, but it depends on nginx, + # and I'm not installing nginx by default right now. + pi certbot python-certbot-apache +elif [[ $codename_compat == xenial ]]; then + # not packaged in xenial or flidas + pi software-properties-common + l="deb http://ppa.launchpad.net/certbot/certbot/ubuntu xenial main" + if ! grep -xFq "$l" /etc/apt/sources.list{,.d/*.list}; then s add-apt-repository -y ppa:certbot/certbot ||: p update - pi python-certbot-apache - ;; - # todo: other distros unknown -esac + fi + pi python-certbot-apache +else + die "distro unknown for certbot" +fi # make a version of the certbot timer that emails me. x=/systemd/system/certbot $sed -r -f - /lib$x.timer <<'EOF' |s dd of=/etc${x}mail.timer @@ -161,15 +171,46 @@ sgo certbotmail.timer ### end certbot install ### -# dogcam setup -case $HOSTNAME in - lj|li) - /a/bin/webcam/install-server - ;; - kw) - /a/bin/webcam/install-client - ;; -esac +# dogcam setup. not using atm +# case $HOSTNAME in +# lj|li) +# /a/bin/webcam/install-server +# ;; +# kw) +# /a/bin/webcam/install-client +# ;; +# esac + +pi ${p1[@]} + +##### begin automatic upgrades #### +# this makes it so we upgrade everything +s debconf-set-selections <<'EOF' +unattended-upgrades unattended-upgrades/origins_pattern string "codename=${distro_codename}"; +EOF +s dpkg-reconfigure -u -fnoninteractive unattended-upgrades + +# Setup daily reboots, so all unattended upgrades go into affect +# unattended upgrades happen at 6 am + rand(60 min). +echo '20 7 * * * root /usr/local/bin/zelous-unattended-reboot' | s dd of=/etc/cron.d/unattended-upgrade-reboot +##### end automatic upgrades #### + +# office is not exposed to internet yet +if [[ $(hostname -f) != *.office.fsf.org ]]; then + ## prometheus node exporter setup + web-conf -f 9100 -p 9101 apache2 $(hostname -f) <<'EOF' +#https://httpd.apache.org/docs/2.4/mod/mod_authn_core.html#authtype +# https://stackoverflow.com/questions/5011102/apache-reverse-proxy-with-basic-authentication + + AllowOverride None + AuthType basic + AuthName "Authentication Required" + # setup one time, with root:www-data, 640 + AuthUserFile "/etc/prometheus-htpasswd" + Require valid-user + +EOF +fi # website setup case $HOSTNAME in @@ -568,43 +609,200 @@ esac ########### end section including li/lj ############### -pi ${p4[@]} $(apt-cache search ruby[.0-9]+-doc| awk '{print $1}') +case $(debian-codename) in + # needed for debootstrap scripts for fai since fai requires debian + flidas) + curl http://archive.ubuntu.com/ubuntu/project/ubuntu-archive-keyring.gpg | s apt-key add - + s dd of=/etc/apt/preferences.d/flidas-xenial </dev/null <$t <$t <$t <$t </dev/null < /dev/null; then + s groupadd -g 450 debian-transmission + case $distro in + arch) + s useradd \ + --system \ + --create-home \ + --gid 450 \ + --uid 450 \ + --home-dir /var/lib/transmission-daemon \ + --shell /bin/false \ + debian-transmission + ;; + *) + s adduser --quiet \ + --gid 450 \ + --uid 450 \ + --system \ + --no-create-home \ + --disabled-password \ + --home /var/lib/transmission-daemon \ + debian-transmission + ;; + esac +fi +# We want group writable stuff from transmission. +# However, after setting this, I learn that transmission sets it's +# own umask based on it's settings file. Well, no harm leaving this +# so it's set right from the beginning. +s chfn debian-transmission -o umask=0002 case $distro in debian|trisquel|ubuntu) @@ -1042,6 +1275,9 @@ EOF # some reason it doesn\'t seem to start automatically anyways pi-nostart transmission-daemon + # be extra sure its not started + ser disable transmission-daemon + ser stop transmission-daemon # the folder was moved here after an install around 02/2017. # it contains runtime data, @@ -1055,7 +1291,7 @@ EOF fi for f in /i/k/partial-torrents /i/k/torrents; do if [[ -e $f ]]; then - s chown -R debian-transmission:traci $f + s chown -R debian-transmission:user2 $f fi done s chown -R debian-transmission:debian-transmission /var/lib/transmission-daemon @@ -1089,40 +1325,11 @@ File.write(p, JSON.pretty_generate(JSON.parse(File.read(p)).merge({ })) + "\n") EOF - # make sure its not enabled, not sure if this is needed - ser disable transmission-daemon ;; # todo: others unknown esac -# 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 -# We want group writable stuff from transmission. -# However, after setting this, I learn that transmission sets it's -# own umask based on it's settings file. Well, no harm leaving this -# so it's set right from the beginning. -s chfn debian-transmission -o umask=0002 # trisquel 8 = openvpn, debian stretch = openvpn-client vpn_ser=openvpn-client @@ -1185,8 +1392,11 @@ EOF rpc_pass=$(

/dev/null; then + cd $(mktemp -d) + # just the latest stable at the time of writing + # TODO, maybe put this all into a build script, + # and do some automatic updates + wget -q https://dl.google.com/go/go1.12.4.linux-amd64.tar.gz + s tar -C /usr/local -xzf go1.12.4.linux-amd64.tar.gz + rm -f ./* + fi + go get -u mvdan.cc/fdroidcl # a bit of googling, and added settings to bashrc - go get -u github.com/mvdan/fdroidcl/cmd/fdroidcl ;; esac case $distro in arch) + pi virt-install # otherwise we get error about accessing kvm module. # seems like there might be a better way, but google was a bit vague. s $sed -ri '/^ *user *=/d' /etc/libvirt/qemu.conf echo 'user = "root"' | s tee -a /etc/libvirt/qemu.conf - # https://bbs.archlinux.org/viewtopic.php?id=206206 - # # this should prolly go in the wiki - sgo virtlogd.socket # guessing this is not needed #sgo virtlogd.service - sgo libvirtd + + # iank: disabed as im not using libvirt usually + # # https://bbs.archlinux.org/viewtopic.php?id=206206 + # # # this should prolly go in the wiki + # sgo virtlogd.socket + # sgo libvirtd + ;; + debian|trisquel|ubuntu) + pi-nostart virtinst virt-manager ;; + esac @@ -1296,7 +1522,7 @@ case $distro in ./configure --with-exuberant-ctags=/usr/bin/ctags make s make install - s pip install pygments + pip install pygments ;; *) pi global @@ -1311,104 +1537,23 @@ 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 - -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 -# # 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 - -# [Service] -# User=%i -# ExecStart=/usr/bin/synergys --no-daemon --config /etc/synergy.conf -# Restart=on-failure - -# [Install] -# WantedBy=multi-user.target -# EOF -# s dd of=/etc/systemd/user/synergys.socket <<'EOF' -# [Unit] -# Conflicts=synergys@.service - -# [Socket] -# ListenStream=24800 -# Accept=false - -# [Install] -# WantedBy=sockets.target -# EOF -# # had this fail with 'Failed to connect to bus: No such file or directory' -# # then when I tried it manually, it worked fine... -# if ! systemctl --user daemon-reload; then -# sleep 2 -# echo retrying systemd user daemon reload -# systemctl --user daemon-reload -# fi -# ;;& -# *) -# # taken from arch wiki. -# s dd of=/etc/systemd/system/synergyc@.service <<'EOF' -# [Unit] -# Description=Synergy Client -# After=network.target - -# [Service] -# User=%i -# ExecStart=/usr/bin/synergyc --no-daemon frodo -# Restart=on-failure -# # per man systemd.unit, StartLimitInterval, by default we -# # restart more than 5 times in 10 seconds. -# # And this param defaults too 200 miliseconds. -# RestartSec=3s - -# [Install] -# WantedBy=multi-user.target -# EOF -# s systemctl daemon-reload -# case $HOSTNAME in -# x2|x3|tp) -# ser enable synergyc@iank -# ser start synergyc@iank ||: # X might not be running yet -# ;; -# frodo) -# systemctl --user start synergys ||: -# systemctl --user enable synergys -# ;; -# esac -# ;; -# esac +# removed synergy since ive not used it in a long time -pi --no-install-recommends kdeconnect-plasma +pi --no-install-recommends kdeconnect ### kdeconnect for gnome. started in /a/bin/distro-setup/desktop-20-autostart.sh ### but gnome + xmonad not working in flidas, so i disabled it -pi libgtk-3-dev python3-requests-oauthlib valac cmake python-nautilus libappindicator3-dev -cd /a/opt/indicator-kdeconnect -mkdir -p build -cd build -cmake .. -DCMAKE_INSTALL_PREFIX=/usr -make -sudo make install -# we can start it manually with /usr/lib/x86_64-linux-gnu/libexec/kdeconnectd -# it seems, according to -# /etc/xdg/autostart/kdeconnectd.desktop -# I'm not seeing the icon, but the clipboard replication is working +# pi libgtk-3-dev python3-requests-oauthlib valac cmake python-nautilus libappindicator3-dev +# cd /a/opt/indicator-kdeconnect +# mkdir -p build +# cd build +# cmake .. -DCMAKE_INSTALL_PREFIX=/usr +# make +# sudo make install +# # we can start it manually with /usr/lib/x86_64-linux-gnu/libexec/kdeconnectd +# # it seems, according to +# # /etc/xdg/autostart/kdeconnectd.desktop +# # I'm not seeing the icon, but the clipboard replication is working ### model 01 arduino support ### @@ -1488,6 +1633,9 @@ s fc-cache /a/bin/distro-setup/mymimes +sgo dynamicipupdate + + # stop autopoping windows when i plug in an android phone. # dbus-launch makes this work within an ssh connection, otherwise you get this message, # with still 0 exit code. @@ -1497,7 +1645,7 @@ dbus-launch gsettings set org.gnome.desktop.media-handling automount-open false # on grub upgrade, we get prompts unless we do this devs=() -for dev in $(s btrfs fi show /boot | sed -nr 's#.*path\s+(\S+)$#\1#p'); do +for dev in $(s btrfs fil show /boot | sed -nr 's#.*path\s+(\S+)$#\1#p'); do devs+=($(devbyid $dev),) done devs[-1]=${devs[-1]%,} # jonied by commas @@ -1514,21 +1662,6 @@ sgo btrfsmaintstop.timer s lnf /p/c/machine_specific/li/mw_vars /root s lnf /k/backup/wiki_backup /root -s cedit /etc/goaccess.conf <<'EOF' || [[ $? == 1 ]] -# all things found from looking around the default config -# copied existing NCSA Combined Log Format with Virtual Host, plus %L -log-format %^:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u" %D -time-format %H:%M:%S -date-format %d/%b/%Y -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 -# not easily installed from a testing. -# goaccess --ignore-crawlers -f <(cat *) -a -o html > x.html -EOF - case $distro in trisquel|ubuntu|debian) @@ -1552,8 +1685,6 @@ EOF ;; esac -# note, for jessie, it depends on a higher version of btrfs-tools. -# # # disabled due to my patch being in btrbk # case $distro in # arch|debian|trisquel|ubuntu) pi btrbk ;; @@ -1562,13 +1693,9 @@ esac cd /a/opt/btrbk s make install -# ian: temporarily disabled while hosts are in flux. -# if [[ $HOSTNAME == tp ]]; then -# # backup/sync manually on others hosts for now. -# sgo btrbk.timer -# # note: to see when it was last run, -# # ser list-timers -# fi +sgo btrbk.timer +# note: to see when it was last run, +# ser list-timers end_msg <<'EOF' @@ -1590,6 +1717,28 @@ esac /a/bin/buildscripts/pithosfly + +# based on guix manual instructions, also added code to profile +pi nscd +if ! type -p guix >/dev/null; then + cd $(mktemp -d) + wget https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh + # added some stuff to envonment.sh for profile based on + # manual instructions + # wget https://sv.gnu.org/people/viewgpg.php?user_id=15145 -qO - | gpg --import - + # echo is to get past prompt + yes | sudo -E HOME=$HOME bash guix-install.sh || [[ $? == 141 ]] + guix install glibc-utf8-locales + guix package --install guile +fi + +# install rust. +curl https://sh.rustup.rs -sSf | bash -s -- -y +# todo: update this. updates in rust are stupidly complicate +if ! which rg &>/dev/null; then + cargo install ripgrep +fi + #### tor case $distro in # based on @@ -1661,16 +1810,12 @@ make sure to reload the firewall to load the persistent configuration EOF pi nfs-utils - sgo nfs-server ;; debian|trisquel|ubuntu) - pi nfs-server + pi-nostart nfs-server ;; arch) pi nfs-utils || pending_reboot=true - sgo rpcbind - # this failed until I rebooted - sgo nfs-server ;; esac