X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=distro-begin;h=a7622848af7171f3437c9f02dcba2c3eb2ef2f1a;hb=c2bf18a9e27233fc9b57450455969fc9e53508b8;hp=222eb5ceca2ece5b8b9cccacce59bac8368b051e;hpb=aa8ff7aafcbe3cc05b1394818abf1c2f00b78a52;p=distro-setup diff --git a/distro-begin b/distro-begin index 222eb5c..a762284 100755 --- a/distro-begin +++ b/distro-begin @@ -1,12 +1,12 @@ #!/bin/bash -l # Copyright (C) 2016 Ian Kelling - +# # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at - +# # http://www.apache.org/licenses/LICENSE-2.0 - +# # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,21 +14,16 @@ # limitations under the License. -# todo. dunno why, but original bootstrap of timezone is not sticking. -# fixed manually with: -# s dpkg-reconfigure tzdata -# enter 12 then 11. # for bootstrapping a new machine -# to make ssh run better, first run this: +# in case we need it, +# to make ssh interactive shell run better, we run this first. sudo bash -c 'source /a/c/repos/bash/.bashrc && source /a/exe/ssh-emacs-setup' -# see t.org for OS installer notes - -# usage: $0 [OPTIONS] HOSTNAME +# usage: $0 [-r] HOSTNAME # tips: # run any sudo command first so your pass is cached @@ -43,7 +38,7 @@ if [[ $EUID == 0 ]]; then fi fi -interactive=false # set this to true if running by hand in emacs +interactive=true # set this to false to force set -x [[ $- == *i* ]] || interactive=false if ! $interactive; then @@ -62,8 +57,6 @@ recompile=false bootstrapfs=false # old flag, needs new look before using. while [[ $1 == -* ]]; do case $1 in - # avoid some of the longer compilation steps, - # when we need to rerun because we had an error -r) recompile=true; shift ;; esac done @@ -75,9 +68,11 @@ fi for f in iank-dev htpc treetowl x2 frodo tp li lj demohost; do eval "$f() { [[ $HOSTNAME == $f ]]; }" done -has_p() { iank-dev || x2 || frodo || tp; } -has_x() { ! { lj || li || demohost; }; } +has_p() { treetowl || x2 || frodo || tp || demohost; } +has_x() { ! linode; } linode() { lj || li; } +has_btrfs() { ! linode; } +home_network() { ! linode; } encrypted() { has_p; } shopt -s extglob @@ -88,6 +83,9 @@ umask 0002 ####### end command line parsing PATH="/a/exe:$PATH" +sed="sed --follow-symlinks" + +##### begin setup encryption scripts ###### if encrypted; then # I tried making a service which was dependent on reboot.target, # but it happened too late in the shutdown process. @@ -98,7 +96,7 @@ Description=Turn on automatic decryption of drives on boot # generally, I don't think targets order shutdown like they do startup. # So, I did systemd-analyze plot > something.svg, and picked a reliably started # service that happens late in the game. -After=postfix.service +After=ntp.service DefaultDependencies=no # not sure if needed, makes sure we shut down before reboot.target Conflicts=reboot.target @@ -132,24 +130,11 @@ EOF sudo systemctl enable keyscriptoff.service sudo systemctl start keyscriptoff.service fi +##### end setup encryption scripts ###### install-myqueue -if iank-dev; then - desktop=$(ssh root@iankelling.org grep desktop /etc/hosts | grep -o "^.* ") - if $bootstrapfs; then - # for bootstrapping at a new job: - cp="scp $desktop:" - # for moving to a new hd, change $cp to move between filesystems - mkdir -p /a/bin - chown -R ian:ian /a # probably needs to be removed - $cp/a/c /a - $cp/a/c/bin/{bash-programs-by-ian,distro-begin,distro-functions,input-setup.sh} /a/bin - echo -e \\n\\n\\n | ssh-keygen -t rsa - fi -fi - # this script has been designed to be idempotent # todo, it would be nice to cut down on some of the output @@ -164,17 +149,15 @@ $interactive || errcatch set +x source /a/bin/distro-functions/src/identify-distros $interactive || set -x -echo path:$PATH - if isfedora; then # comment out line disallowing calling sudo in scripts - sudo sed -i --follow-symlinks 's/^Defaults *requiretty/#\0 # ian commented/' /etc/sudoers + sudo $sed -i 's/^Defaults *requiretty/#\0 # ian commented/' /etc/sudoers # turn on magic sysrq commands for this boot cycle echo 1 > sudo dd of=/proc/sys/kernel/sysrq # selinux is not user friendly. Like, you enable samba, but you haven't run the magic selinux commands so it doesn't work # and you have no idea why. - sudo sed -i --follow-symlinks 's/^\(SELINUX=\).*/\1disabled/' /etc/selinux/config + sudo $sed -i 's/^\(SELINUX=\).*/\1disabled/' /etc/selinux/config selinuxenabled && sudo setenforce 0 fi @@ -192,7 +175,7 @@ case $distro in esac if linode; then - sudo sed -i '/^127\.0\.1\.1/d' /etc/hosts + sudo $sed -i '/^127\.0\.1\.1/d' /etc/hosts echo "127.0.1.1 $HOSTNAME.lan $HOSTNAME" | sudo tee -a /etc/hosts fi @@ -203,36 +186,24 @@ if [[ $EUID == 0 ]]; then fi -# link files - -lnf-home() { - # $2 and opts are unused so far. - opts=() - while [[ $1 == -* ]]; do - opts+=($1) - shift - done - lnf ${opts[@]} "$1" /home/ian/$2 +#### begin link bashrc repo for all users ###### +for x in /a/c/repos/bash/!(.git|..|.); do + lnf "$x" /home/ian sudo -u traci -i <&2' ERR +for dir in /i /mnt/iroot /k /kr /w; do + if ! mountpoint $dir &>/dev/null && \ + awk '{print $2}' /etc/fstab | grep -xF $dir &>/dev/null; then + if awk '{print $3}' /etc/fstab | grep -xF nfs &>/dev/null; then + mount $dir || echo "warning: failed to mount nfs on $dir" + else + mount $dir + fi + fi +done +EOF + s chmod +x /root/imount + + s dd of=/etc/systemd/system/imount.service <<'EOF' +[Unit] +Description=Mount /i and related mountpoints + +[Service] +Type=oneshot +ExecStart=/root/imount + +[Install] +# note /kr needs networking, this target is the simplest way to +# time it when the network should be up, but not do something +# dumb like delay startup until the network is up. It happens +# at some time after network.target +WantedBy=multi-user.target +EOF + sudo systemctl daemon-reload # needed if the file was already there + sudo systemctl enable imount.service + sudo systemctl start imount.service +fi + +dir=/nocow +if has_btrfs; then + if ! mountpoint $dir; then + subvol=/mnt/root/nocow + if [[ ! -e $subvol ]]; then + s btrfs subvolume create $subvol + s chown root:1000 $subvol + s chattr +C $subvol + fi + + first_root_crypt=$(awk '$2 == "/" {print $1}' /etc/mtab) + tu /etc/fstab <