diff --git a/apt-snapshot.sh b/apt-snapshot.sh new file mode 100755 index 0000000..1ce6ec8 --- /dev/null +++ b/apt-snapshot.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -euo pipefail + + +cat << EOF | tee /usr/bin/zfs-system-snapshot-apt &> /dev/null +#!/bin/bash +set -euo pipefail + + +TIMESTAMP="\$(date +%Y_%m_%d-%H_%M_%S)" + + +if [[ -z "\$(zfs list -t snapshot | grep 'apt-\${TIMESTAMP}')" ]]; then + zfs snapshot \$(zfs mount | grep 'ROOT' | sed 's| .*||')@apt-\${TIMESTAMP} && printf "\n- Snapshot taken\n\n" +fi +EOF + +chmod \ + +x \ + /usr/bin/zfs-system-snapshot-apt + +printf \ + 'DPkg::Pre-Install-Pkgs {"/usr/bin/zfs-system-snapshot-apt";};\n' | \ + tee /etc/apt/apt.conf.d/90-zfs_system-snapshot &> /dev/null + +printf \ + 'DPkg::Post-Invoke {"apt moo";};\n' | \ + tee /etc/apt/apt.conf.d/99-apt_moo &> /dev/null diff --git a/debian.sh b/debian.sh index b4858c4..62656f4 100755 --- a/debian.sh +++ b/debian.sh @@ -178,4 +178,31 @@ elif [[ "${1}" == '--tasksel' ]]; then tasksel \ --new-install +elif [[ "${1}" == '--initramfs' ]]; then + printf \ + "UMASK=0077\n" | \ + tee /etc/initramfs-tools/conf.d/umask.conf &> /dev/null + + update-initramfs \ + -c \ + -k all +elif [[ "${1}" == '--logrotate' ]]; then + for file in /etc/logrotate.d/* ; do + if grep -Eq "(^|[^#y])compress" "$file" ; then + sed -i -r "s/(^|[^#y])(compress)/\1#\2/" "$file" + fi + done +elif [[ "${1}" == '--systemctl-enable' ]]; then + systemctl \ + enable \ + zfs.target + systemctl \ + enable \ + zfs-import-cache + systemctl \ + enable \ + zfs-mount + systemctl \ + enable \ + zfs-import.target fi diff --git a/install.sh b/install.sh index 1b52a4c..a08308f 100755 --- a/install.sh +++ b/install.sh @@ -110,15 +110,7 @@ if [[ "${ID}" == 'debian' ]] || [[ "${ID}" == 'elementary' ]]; then "${baseDir}/debian.sh" --dpkg-reconfigure fi -# if [[ "${ID}" == 'debian' ]]; then -# printf \ -# 'REMAKE_INITRD=yes\n' | \ -# tee /etc/dkms/zfs.conf &> /dev/null -# fi - -if [[ ! "${*}" = *--no-part* ]]; then - "${baseDir}/partition.sh" --efi -fi +"${baseDir}/partition.sh" --efi if [[ "${ID}" == 'debian' ]] || [[ "${ID}" == 'elementary' ]]; then "${baseDir}/debian.sh" --purge-os-prober @@ -160,13 +152,7 @@ if [[ "${ID}" == 'debian' ]]; then fi if [[ "${ID}" == 'debian' ]] || [[ "${ID}" == 'elementary' ]]; then - printf \ - "UMASK=0077\n" | \ - tee /etc/initramfs-tools/conf.d/umask.conf &> /dev/null - - update-initramfs \ - -c \ - -k all + "${baseDir}/debian.sh" --initramfs elif [[ "${ID}" == 'fedora' ]]; then dracut \ --force \ @@ -192,18 +178,7 @@ if [[ ! "${*}" = *--no-part* ]]; then fi if [[ "${ID}" == 'debian' ]] || [[ "${ID}" == 'elementary' ]]; then - systemctl \ - enable \ - zfs.target - systemctl \ - enable \ - zfs-import-cache - systemctl \ - enable \ - zfs-mount - systemctl \ - enable \ - zfs-import.target + "${baseDir}/debian.sh" --systemctl-enable fi zfs \ diff --git a/post-inst.sh b/post-inst.sh index 77c10ee..a4b8e45 100755 --- a/post-inst.sh +++ b/post-inst.sh @@ -93,36 +93,9 @@ if [[ "${ID}" = 'debian' ]]; then fi if [[ "${ID}" == 'debian' ]] || [[ "${ID}" == 'elementary' ]]; then - for file in /etc/logrotate.d/* ; do - if grep -Eq "(^|[^#y])compress" "$file" ; then - sed -i -r "s/(^|[^#y])(compress)/\1#\2/" "$file" - fi - done + "${baseDir}/debian.sh" --logrotate - cat << EOF | tee /usr/bin/zfs-system-snapshot-apt &> /dev/null -#!/bin/bash -set -euo pipefail - - -TIMESTAMP="\$(date +%Y_%m_%d-%H_%M_%S)" - - -if [[ -z "\$(zfs list -t snapshot | grep 'apt-\${TIMESTAMP}')" ]]; then - zfs snapshot \$(zfs mount | grep 'ROOT' | sed 's| .*||')@apt-\${TIMESTAMP} && printf "\n- Snapshot taken\n\n" -fi -EOF - - chmod \ - +x \ - /usr/bin/zfs-system-snapshot-apt - - printf \ - 'DPkg::Pre-Install-Pkgs {"/usr/bin/zfs-system-snapshot-apt";};\n' | \ - tee /etc/apt/apt.conf.d/90-zfs_system-snapshot &> /dev/null - - printf \ - 'DPkg::Post-Invoke {"apt moo";};\n' | \ - tee /etc/apt/apt.conf.d/99-apt_moo &> /dev/null + "${baseDir}/apt-snapshot.sh" fi # if [[ ! "${*}" = *--no-part* ]]; then