X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=fai%2Fconfig%2Fscripts%2FGRUB_PC%2F11-iank;h=e27260e76065f0c77c02b71a8e8a8647bde33686;hb=b5aa031e877e295b016d26b01803a719feb7e051;hp=0df904b6cf85f0f6fa3ceb9073058f5c11a8f9da;hpb=05e47f6734e5a9354a3243686ae55fe4ab2b72c7;p=automated-distro-installer diff --git a/fai/config/scripts/GRUB_PC/11-iank b/fai/config/scripts/GRUB_PC/11-iank index 0df904b..e27260e 100755 --- a/fai/config/scripts/GRUB_PC/11-iank +++ b/fai/config/scripts/GRUB_PC/11-iank @@ -12,24 +12,22 @@ if ! type -t fcopy &>/dev/null; then sudo apt-get -y install fai-client fi -chroot $FAI_ROOT bash <<'EOFOUTER' -if getent group systemd-journal >/dev/null; then - # makes the journal be saved to disk. - mkdir -p /var/log/journal - chmod 755 /var/log/journal +if [[ -e /a/bin/fai/fai-wrapper ]]; then + chroot() { + shift + "$@" + } fi -debconf-set-selections <$tmpfile1 ||: +fcopy -riBM /etc/apt +tmpfile2=$(mktemp) +chroot $FAI_ROOT /usr/bin/apt-cache policy >$tmpfile2 +if ! diff -q $tmpfile1 $tmpfile2; then + chroot $FAI_ROOT /usr/bin/apt update +fi # outside of fai, this seems to regularly lead to # E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable) # so add a sleep. 1 sec is probably way more than needed. sleep 1 -$ROOTCMD apt-get update - - -chroot $FAI_ROOT bash <<'EOF' -#### begin .ssh setup ### -set -eE -o pipefail -mkdir -p /home/iank/.ssh -f=/root/.ssh/authorized_keys -if [[ -e $f ]]; then - cp $f /home/iank/.ssh -fi -chown -R 1000:1000 /home/iank/.ssh -chmod -R u=Xrw,og= /home/iank/.ssh -rm -rf /root/.ssh -# remove broken symlinks or the following cp will fail -find /home/iank/.ssh -xtype l -exec rm '{}' \; -cp -rL /home/iank/.ssh /root -chown -R root:root /root/.ssh -chmod 700 /root/.ssh -#### end .ssh setup ### - -# this is needed to enable resolvconf, making /etc/resolv.conf be a symlink. -# why? i dun know, it\'s really dumb. -dpkg-reconfigure -fnoninteractive resolvconf +f=$FAI_ROOT/var/cache/apt/pkgcache.bin +if [[ ! -r $f ]] || (( $(( $(date +%s) - $(stat -c %Y $f ) )) > 60*60*2 )); then + i=0 + while fuser $FAI_ROOT/var/lib/dpkg/lock &>/dev/null; do + sleep 1 + i=$(( i+1 )) + if (( i > 300 )); then + echo "error: timed out waiting for /var/lib/dpkg/lock" >&2 + exit 1 + fi + $ROOTCMD apt-get update + done +fi +### end sources install + updates -# default jessie groups + kvm, systemd-journal, adm -usermod -aG adm,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev iank +#### misc configurations +chroot $FAI_ROOT bash <<'EOFOUTER' if getent group systemd-journal >/dev/null; then - usermod -aG systemd-journal iank + # makes the journal be saved to disk. + mkdir -p /var/log/journal + chmod 755 /var/log/journal fi - +debconf-set-selections <$target/etc/systemd/system/myncq.service <<'EOF' +[Unit] +Description=fix ncq errors + +[Service] +Type=oneshot +ExecStart=/usr/bin/myncq +TimeoutStartSec=20 + +[Install] +# https://www.enricozini.org/blog/2017/debian/systemd-07-devices/ +WantedBy=dev-disk-by\x2did-ata\x2dSamsung_SSD_870_QVO_8TB_S5VUNG0N900656V.device EOF + chroot $FAI_ROOT bash <<'EOFOUTER' +systemctl enable myncq.service +/usr/bin/myncq no-upgrub +EOFOUTER -if [[ $FAI_ACTION != dirinstall ]]; then - chroot $FAI_ROOT bash <<'EOF' - # https://askubuntu.com/questions/33416/how-do-i-disable-the-boot-splash-screen-and-only-show-kernel-and-boot-text-inst - # it suggests not having plymouth-theme-ubuntu-text, but - # making it not installed then kills plymouth, then makes - # the system not boot. - sed -ri 's/(^ *GRUB_CMDLINE_LINUX.*)quiet splash/\1/' /etc/default/grub - # on xenial, no grub is displayed at all. fix that. - # found just by noticing this in the config file, and a - # warning about it in error.log - sed -i '/^ *GRUB_HIDDEN_TIMEOUT/d' /etc/default/grub + ;; + # per rubens suggestion to make a d16 more stable + kd|kw) cmdline+=" pci=realloc=off" ;; + esac + fi - update-grub2 + cat >$FAI_ROOT/etc/grub.d/40_custom </dev/null; then + update-grub2 +else + update-grub fi +EOF +fi ##### end != dirinstall && != NOCRYPT + + +###### begin network setup #### + +# use old names. the idea of them changing between boots has never +# happened to me and I usually only have 1 wired or other type. +# If I ever do need to care about it, I will. +# Strangely this didn't work on kw, so I added kernel cmdline parameter. +# https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ +ln -sf /dev/null $target/etc/systemd/network/99-default.link + + +# bitfolk installer handles the rest +case $HOSTNAME in + bk|je) exit 0 ;; +esac + + +# bug fix, somewhere between t9's xorg 1.19.6 +# and 1.20.1-3ubuntu2 +# xserver-xorg-video-nouveau 1:1.0.15-3 +# xorg stopped load nouveau +# https://www.linuxquestions.org/questions/slackware-14/kernel-modules-conflicting-with-nouveau-driver-4175623867/ +# https://nouveau.freedesktop.org/InstallNouveau.html +if lspci|grep -q 'GeForce GTX 6[0-9][0-9]\]'; then + mkdir -p $target/etc/X11/xorg.conf.d/ + cat >$target/etc/X11/xorg.conf.d/10-nouveau.conf <<'EOF' +Section "Device" +Identifier "Device0" +Driver "nouveau" +EndSection +EOF +fi + +# use networkmanager if this host has wireless. +if type -p iw &>/dev/null && [[ $(iw dev) ]]; then + chroot $FAI_ROOT bash <$target/etc/NetworkManager/conf.d/99-iank.conf <<'EOF' +[main] +dns=systemd-resolved +EOF + if [[ $HOSTNAME == frodo ]]; then + cat > $target/etc/network/interfaces <<-EOF +# generated by FAI +auto lo eth0 +iface lo inet loopback +iface eth0 inet static +address 10.3.0.2/16 + +source-directory /etc/network/interfaces.d +EOF + fi + +else + cat > $target/etc/network/interfaces <<-EOF +# generated by FAI +auto lo eth0 +iface lo inet loopback +iface eth0 inet dhcp +iface eth0 inet6 auto + +source-directory /etc/network/interfaces.d +EOF + + # previously had an else condition after + #elif ifclass VM || ifclass LINODE; then + # iface $NIC1 inet manual + # iface br0 inet dhcp + # bridge_ports $NIC1 + # bridge_stp off + # bridge_maxwait 0 + # however, on t9, on startup, br0, became + # rename1 and didn't come up. i dunno why, + # but the bridge is for vms that I rarely use, + # so not bothering to figure it out. + + +fi + +if ifclass LINODE; then + mkdir -p $target/etc/initramfs-tools/conf.d + cat >$target/etc/initramfs-tools/conf.d/mine < $target/etc/network/interfaces <<-EOF +# generated by FAI +auto lo eth0 +iface lo inet loopback +iface eth0 inet dhcp +# for the standard network config, uncomment this and comment the lines after it. +#iface eth0 inet6 auto + +iface eth0 inet6 static +# this is really a /128. it seems like we need to assign it for ipv6 to work. +address 2600:3c00::f03c:91ff:fe6d:baf8/64 +gateway fe80::1 + +iface eth0 inet6 static +# from a requested /64 pool +address 2600:3c00:e000:280::2/64 + +source-directory /etc/network/interfaces.d +EOF + fi +fi + +# I prefer to stick with ifup/down for now. a. networkd is not in its +# own package, so cant use in other init systems. b. it works fine. +chroot $FAI_ROOT bash </home/iank/.local/share/systemd/user/sshaiank.service <<'EOF' +[Unit] +Description=OpenSSH User Agent +Documentation=man:ssh-agent(1) +[Service] +ExecStart=/usr/lib/openssh/agent-launch start +ExecStopPost=/usr/lib/openssh/agent-launch stop +[Install] +WantedBy=default.target +EOF +# enable it +# systemctl --user is not available at fai time, so create the link ourselves +dir=/home/iank/.config/systemd/user/default.target.wants +mkdir -p $dir +ln -sf /home/iank/.local/share/systemd/user/sshaiank.service $dir + +#### end .ssh setup ### + +## duplicated in ssh-emacs-setup +# done here so its setup earlier for convenience +line='AcceptEnv INSIDE_EMACS BRC COLUMNS' +f=/etc/ssh/sshd_config +grep -xFq "$line" $f || tee -a $f <<<"$line" + + +# default debian groups (jessie through buster) + adm, sudo, root, admin +for g in cdrom floppy audio dip video plugdev netdev adm sudo admin; do + if getent group $g >/dev/null; then + usermod -aG $g iank + fi +done + +if getent group systemd-journal >/dev/null; then + usermod -aG systemd-journal iank +fi +EOFOUTER + +rm -f $target/etc/resolv.conf +ln -s ../run/systemd/resolve/stub-resolv.conf $target/etc/resolv.conf +# needed for bitfolk image +if [[ -e /a/bin/fai/fai-wrapper ]]; then + systemctl enable systemd-resolved + systemctl start systemd-resolved +fi + + -# reading through the groups that iank is in but traci isn't, +# reading through the groups that iank is in but user2 isn't, for g in plugdev audio video cdrom; do - $ROOTCMD usermod -a -G $g traci + $ROOTCMD usermod -a -G $g user2 done