#!/bin/bash echo "[+] Activating hibernate support!"; echo "[i] Pass the reserved swap size in bytes to reserve some swap space for non-hibernate image usage."; echo "[!] WARNING polkitd-pkla needs to be installed in newer distributions due to being split from the main package!"; szresv=1073741824; if [[ "$1" =~ ^[0-9]+$ ]] && [ "$1" -gt 0 ]; then szresv=$1; fi; szmem=$(free -b | awk '{print NR==1?$1:$1$2}' | grep 'Mem:' | sed -e "s/Mem://") szswap=$(free -b | awk '{print NR==1?$1:$1$2}' | grep 'Swap:' | sed -e "s/Swap://"); if [ -z $szswap ]; then echo "[-] No Swap Partition!"; exit 2; fi; szhiber=$(echo "$szswap - $szresv" | bc); if [ $szmem -gt $szhiber ]; then echo "[-] Not enough swap space to hibernate!" exit 1; fi; echo "[*] Hibernate image is $szhiber bytes!"; sudo mkdir -p /etc/polkit-1/localauthority/90-mandatory.d; sudo cp -f hibernate-source-files/enable-hibernate.pkla /etc/polkit-1/localauthority/90-mandatory.d/enable-hibernate.pkla; sudo rm -f /etc/systemd/system/hibernate_image_size.service; cat hibernate-source-files/hibernate_image_size.service.p1 | head -c -1 | sudo tee /etc/systemd/system/hibernate_image_size.service > /dev/null; echo -n "$szhiber" | sudo tee -a /etc/systemd/system/hibernate_image_size.service > /dev/null; cat hibernate-source-files/hibernate_image_size.service.p2 | head -c -1 | sudo tee -a /etc/systemd/system/hibernate_image_size.service > /dev/null; sudo rm -f /etc/tmpfiles.d/hibernation_image_size.conf; cat hibernate-source-files/hibernation_image_size.conf | head -c -1 | sudo tee /etc/tmpfiles.d/hibernation_image_size.conf > /dev/null; echo "$szhiber" | sudo tee -a /etc/tmpfiles.d/hibernation_image_size.conf > /dev/null; sudo systemctl daemon-reload; sudo systemctl enable --now hibernate_image_size.service; echo -n "$szhiber" | sudo tee /sys/power/image_size > /dev/null; echo "[+] Finished Hibernate Activation!"; echo "[i] Check the grub file for linux kernel command line info for hibernating with a patched kernel under lockdown."; echo "[i] This file corresponds to /etc/default/grub";