#!/bin/sh # Finish a Das OS installation. The installers (Calamares, das-server-install) # run this inside the target system after users and locale are configured, # before GRUB. set -eu msg() { echo "das-postinstall: $*"; } # Calamares writes LANG to /etc/locale.conf, but glibc on Void only builds the # locales enabled in /etc/default/libc-locales. lang=$(sed -n 's/^LANG=//p' /etc/locale.conf 2>/dev/null | tr -d '"') for l in "$lang" en_US.UTF-8; do [ -n "$l" ] || continue re=$(printf '%s' "$l" | sed 's/[.]/\\./g') sed -i "s/^#\(${re} \)/\1/" /etc/default/libc-locales done msg "building locales" xbps-reconfigure -f glibc-locales # Calamares mounts /tmp on tmpfs only when the root disk is an SSD; Void's own # installer always does. if ! grep -q '^[^#]*[[:space:]]/tmp[[:space:]]' /etc/fstab; then echo "tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0" >>/etc/fstab fi # mklive's list of packages left out of the image; das-server keeps its own rm -f /etc/xbps.d/mklive-ignore.conf # Guest tools only help inside their own hypervisor (VirtualBox's ones even # complain at every login elsewhere). machine=$(cat /sys/class/dmi/id/sys_vendor /sys/class/dmi/id/product_name 2>/dev/null || true) if ! grep -q '^flags.* hypervisor' /proc/cpuinfo; then machine="real hardware" fi case $machine in *VirtualBox* | *innotek*) unused="spice-vdagent qemu-ga" ;; *QEMU* | *KVM*) unused="virtualbox-ose-guest" ;; *) unused="spice-vdagent qemu-ga virtualbox-ose-guest" ;; esac installed="" for pkg in $unused; do xbps-query "$pkg" >/dev/null 2>&1 && installed="$installed $pkg" done case $installed in *spice-vdagent*) rm -f /etc/runit/runsvdir/default/spice-vdagentd ;; esac case $installed in # The live image replaces this autostart file, so xbps keeps it as modified *virtualbox*) rm -f /etc/xdg/autostart/vboxclient.desktop ;; esac if [ -n "$installed" ]; then msg "removing guest tools not needed here:$installed" # shellcheck disable=SC2086 xbps-remove -Ry $installed || true fi # Snapper, hourly snapshots and the GRUB snapshot menu (Btrfs only). das-snapper-setup # The installer copies files with rsync --sparse, which turns the zero tail of # a kernel image into a Btrfs hole that GRUB 2.12 can't read ("premature end # of file"). Rewrite the kernels in full. for f in /boot/vmlinuz-*; do cp --sparse=never "$f" "$f.das-tmp" mv "$f.das-tmp" "$f" done # The live image has a generic initramfs. Build the target's own the same way # Void does on kernel updates (host-only), with das-snapshot-overlay included. msg "building the initramfs" for kver in $(ls /usr/lib/modules); do dracut -q --force "/boot/initramfs-$kver.img" "$kver" done msg "done"