From e16ea0a4dd3d399be1049c5e0719f46589fd2ebe Mon Sep 17 00:00:00 2001 From: Andreas Fendt Date: Thu, 1 Dec 2022 13:58:54 +0100 Subject: [PATCH] Reformatted and refactored some files --- build-packages.sh | 1 - install.sh | 18 +++-- log2ram | 193 +++++++++++++++++++++++----------------------- log2ram.conf | 1 - log2ram.service | 6 +- uninstall.sh | 37 +++++---- 6 files changed, 131 insertions(+), 125 deletions(-) diff --git a/build-packages.sh b/build-packages.sh index c449e57..3e77f35 100755 --- a/build-packages.sh +++ b/build-packages.sh @@ -19,7 +19,6 @@ new=$(echo $api | grep -Po '"tag_name": "\K.*?(?=")') # Remove potential leftovers from a previous build rm -rf "$DESTDIR" "$OUTDIR" - ## log2ram # Create directory install -Dm 644 "$STARTDIR/log2ram.service" "$DESTDIR/etc/systemd/system/log2ram.service" diff --git a/install.sh b/install.sh index ff5bde2..2585fa7 100755 --- a/install.sh +++ b/install.sh @@ -1,7 +1,13 @@ #!/usr/bin/env sh -systemctl -q is-active log2ram && { echo "ERROR: log2ram service is still running. Please run \"sudo service log2ram stop\" to stop it."; exit 1; } -[ "$(id -u)" -eq 0 ] || { echo "You need to be ROOT (sudo can be used)"; exit 1; } +systemctl -q is-active log2ram && { + echo "ERROR: log2ram service is still running. Please run \"sudo service log2ram stop\" to stop it." + exit 1 +} +[ "$(id -u)" -eq 0 ] || { + echo "You need to be ROOT (sudo can be used)" + exit 1 +} # log2ram mkdir -p /usr/local/bin/ @@ -10,17 +16,17 @@ install -m 644 log2ram-daily.service /etc/systemd/system/log2ram-daily.service install -m 644 log2ram-daily.timer /etc/systemd/system/log2ram-daily.timer install -m 755 log2ram /usr/local/bin/log2ram if [ ! -f /etc/log2ram.conf ]; then - install -m 644 log2ram.conf /etc/log2ram.conf + install -m 644 log2ram.conf /etc/log2ram.conf fi install -m 644 uninstall.sh /usr/local/bin/uninstall-log2ram.sh systemctl enable log2ram.service log2ram-daily.timer # logrotate if [ -d /etc/logrotate.d ]; then - install -m 644 log2ram.logrotate /etc/logrotate.d/log2ram + install -m 644 log2ram.logrotate /etc/logrotate.d/log2ram else - echo "##### Directory /etc/logrotate.d does not exist. #####" - echo "##### Skipping log2ram.logrotate installation. #####" + echo "##### Directory /etc/logrotate.d does not exist. #####" + echo "##### Skipping log2ram.logrotate installation. #####" fi # Remove a previous log2ram version diff --git a/log2ram b/log2ram index 0a5ae39..e38817c 100755 --- a/log2ram +++ b/log2ram @@ -9,18 +9,17 @@ fi LOG_NAME='log2ram.log' NO_RSYNC=${USE_RSYNC#true} -isSafe () { +## @fn is_safe() +## @brief Check if hdd log exists +is_safe() { [ -d "$HDD_LOG" ] || echo "ERROR: $HDD_LOG/ doesn't exist! Can't sync." [ -d "$HDD_LOG" ] || exit 1 } -remountOriginal() { - OPTION="$1" - mount -o remount,"$OPTION" "$HDD_LOG" -} - -syncToDisk () { - isSafe +## @fn sync_to_disk() +## @brief Sync memory back to hard disk +sync_to_disk() { + is_safe if [ -z "${NO_RSYNC}" -a -x "$(command -v rsync)" ]; then rsync -aXv --inplace --no-whole-file --delete-after "$RAM_LOG"/ "$HDD_LOG"/ 2>&1 | tee -a "$LOG2RAM_LOG" @@ -29,8 +28,10 @@ syncToDisk () { fi } -syncFromDisk () { - isSafe +## @fn sync_from_disk() +## @brief Sync hard disk to memory +sync_from_disk() { + is_safe TP_SIZE=$SIZE if [ "$ZL2R" = true ]; then @@ -42,7 +43,7 @@ syncFromDisk () { umount -l "$RAM_LOG"/ umount -l "$HDD_LOG"/ if [ "$MAIL" = true ]; then - echo "LOG2RAM : No place on RAM for \"$HDD_LOG/\" anymore, fallback on the disk" | mail -s 'Log2Ram Error' root; + echo "LOG2RAM : No place on RAM for \"$HDD_LOG/\" anymore, fallback on the disk" | mail -s 'Log2Ram Error' root fi exit 1 fi @@ -55,103 +56,105 @@ syncFromDisk () { } -wait_for () { - while ! findmnt "$1" > /dev/null; do - sleep 0.1 - done - - while [ ! -f "$1/log2ram.test" ]; do - touch "$1/log2ram.test" +## @fn wait_for() +## @brief Wait for directory and create test file to make sure the directory exists +## @param param1 path to the directory +wait_for() { + WAIT_PATH="$1" + while ! findmnt "$WAIT_PATH" >/dev/null; do sleep 0.1 done - rm "$1/log2ram.test" + + while [ ! -f "$WAIT_PATH/log2ram.test" ]; do + touch "$WAIT_PATH/log2ram.test" + sleep 0.1 + done + rm "$WAIT_PATH/log2ram.test" } -createZramLogDrive () { - # Check Zram Class created - if [ ! -d "/sys/class/zram-control" ]; then - modprobe zram - RAM_DEV='0' - else - RAM_DEV=$(cat /sys/class/zram-control/hot_add) - fi - echo "$COMP_ALG" > "/sys/block/zram${RAM_DEV}/comp_algorithm" - echo "$LOG_DISK_SIZE" > "/sys/block/zram${RAM_DEV}/disksize" - echo "$SIZE" > "/sys/block/zram${RAM_DEV}/mem_limit" - mke2fs -t ext4 "/dev/zram${RAM_DEV}" -} - -make_log_dir () { - [ -d "$HDD_LOG" ] || mkdir "$HDD_LOG" +## @fn create_zram_log_drive() +## @brief Create zram log device +create_zram_log_drive() { + # Check Zram Class created + if [ ! -d "/sys/class/zram-control" ]; then + modprobe zram + RAM_DEV='0' + else + RAM_DEV=$(cat /sys/class/zram-control/hot_add) + fi + echo "$COMP_ALG" >"/sys/block/zram${RAM_DEV}/comp_algorithm" + echo "$LOG_DISK_SIZE" >"/sys/block/zram${RAM_DEV}/disksize" + echo "$SIZE" >"/sys/block/zram${RAM_DEV}/mem_limit" + mke2fs -t ext4 "/dev/zram${RAM_DEV}" } case "$1" in - start) - IFS=';' - for i in $PATH_DISK; do - # Skip the path if the folder doesn't exist - [ ! -d "$i" ] && continue - - PATH_FIRST_PART="${i%/*}" - PATH_LAST_PART="${i##/*/}" - RAM_LOG="$i" - HDD_LOG="${PATH_FIRST_PART}/hdd.${PATH_LAST_PART}" - LOG2RAM_LOG="${RAM_LOG}/${LOG_NAME}" +start) + IFS=';' + for i in $PATH_DISK; do + # Skip the path if the folder doesn't exist + [ ! -d "$i" ] && continue - make_log_dir + PATH_FIRST_PART="${i%/*}" + PATH_LAST_PART="${i##/*/}" + RAM_LOG="$i" + HDD_LOG="${PATH_FIRST_PART}/hdd.${PATH_LAST_PART}" + LOG2RAM_LOG="${RAM_LOG}/${LOG_NAME}" - mount --bind "$RAM_LOG"/ "$HDD_LOG"/ - mount --make-private "$HDD_LOG"/ - wait_for "$HDD_LOG" + [ -d "$HDD_LOG" ] || mkdir "$HDD_LOG" - if [ "$ZL2R" = true ]; then - createZramLogDrive - mount -t ext4 -o nosuid,noexec,noatime,nodev,user=log2ram "/dev/zram${RAM_DEV}" "$RAM_LOG"/ - else - mount -t tmpfs -o "nosuid,noexec,noatime,nodev,mode=0755,size=${SIZE}" log2ram "$RAM_LOG"/ - fi - wait_for "$RAM_LOG" - syncFromDisk - done - exit 0 - ;; + mount --bind "$RAM_LOG"/ "$HDD_LOG"/ + mount --make-private "$HDD_LOG"/ + wait_for "$HDD_LOG" - stop) - IFS=';' - for i in $PATH_DISK; do - PATH_FIRST_PART="${i%/*}" - PATH_LAST_PART="${i##/*/}" - RAM_LOG="$i" - HDD_LOG="${PATH_FIRST_PART}/hdd.${PATH_LAST_PART}" - LOG2RAM_LOG="${RAM_LOG}/${LOG_NAME}" + if [ "$ZL2R" = true ]; then + create_zram_log_drive + mount -t ext4 -o nosuid,noexec,noatime,nodev,user=log2ram "/dev/zram${RAM_DEV}" "$RAM_LOG"/ + else + mount -t tmpfs -o "nosuid,noexec,noatime,nodev,mode=0755,size=${SIZE}" log2ram "$RAM_LOG"/ + fi + wait_for "$RAM_LOG" + sync_from_disk + done + exit 0 + ;; - syncToDisk - #ZRAM_LOG=$(awk '$2 == "/var/log" {print $1}' /proc/mounts) - #ZRAM_LOG=$(echo ${ZRAM_LOG} | grep -o -E '[0-9]+') - umount -l "$RAM_LOG"/ - umount -l "$HDD_LOG"/ - # Unsure as even with Root permision denied - #echo ${ZRAM_LOG} > /sys/class/zram-control/hot_remove - done - exit 0 - ;; +stop) + IFS=';' + for i in $PATH_DISK; do + PATH_FIRST_PART="${i%/*}" + PATH_LAST_PART="${i##/*/}" + RAM_LOG="$i" + HDD_LOG="${PATH_FIRST_PART}/hdd.${PATH_LAST_PART}" + LOG2RAM_LOG="${RAM_LOG}/${LOG_NAME}" - write) - IFS=';' - for i in $PATH_DISK; do - PATH_FIRST_PART="${i%/*}" - PATH_LAST_PART="${i##/*/}" - RAM_LOG="$i" - HDD_LOG="${PATH_FIRST_PART}/hdd.${PATH_LAST_PART}" - LOG2RAM_LOG="${RAM_LOG}/${LOG_NAME}" + sync_to_disk + #ZRAM_LOG=$(awk '$2 == "/var/log" {print $1}' /proc/mounts) + #ZRAM_LOG=$(echo ${ZRAM_LOG} | grep -o -E '[0-9]+') + umount -l "$RAM_LOG"/ + umount -l "$HDD_LOG"/ + # Unsure as even with Root permision denied + #echo ${ZRAM_LOG} > /sys/class/zram-control/hot_remove + done + exit 0 + ;; - syncToDisk - done - exit 0 - ;; +write) + IFS=';' + for i in $PATH_DISK; do + PATH_FIRST_PART="${i%/*}" + PATH_LAST_PART="${i##/*/}" + RAM_LOG="$i" + HDD_LOG="${PATH_FIRST_PART}/hdd.${PATH_LAST_PART}" + LOG2RAM_LOG="${RAM_LOG}/${LOG_NAME}" - *) - echo 'Usage: log2ram {start|stop|write}' >&2 - exit 1 - ;; + sync_to_disk + done + exit 0 + ;; + +*) + echo 'Usage: log2ram {start|stop|write}' >&2 + exit 1 + ;; esac diff --git a/log2ram.conf b/log2ram.conf index 8d7853a..932b5e4 100644 --- a/log2ram.conf +++ b/log2ram.conf @@ -36,4 +36,3 @@ COMP_ALG=lz4 # lzo/lz4=2.1:1 compression ratio zlib=2.7:1 zstandard=2.9:1 # Really a guestimate of a bit bigger than compression ratio whilst minimising 0.1% mem usage of disk size LOG_DISK_SIZE=100M - diff --git a/log2ram.service b/log2ram.service index 70c4681..398037d 100644 --- a/log2ram.service +++ b/log2ram.service @@ -9,9 +9,9 @@ IgnoreOnIsolate=yes [Service] Type=oneshot -ExecStart= /usr/local/bin/log2ram start -ExecStop= /usr/local/bin/log2ram stop -ExecReload= /usr/local/bin/log2ram write +ExecStart=/usr/local/bin/log2ram start +ExecStop=/usr/local/bin/log2ram stop +ExecReload=/usr/local/bin/log2ram write TimeoutStartSec=120 RemainAfterExit=yes diff --git a/uninstall.sh b/uninstall.sh index 561b838..ab89109 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -1,26 +1,25 @@ #!/usr/bin/env sh -if dpkg -l log2ram 2> /dev/null; then - echo "Please run : apt remove log2ram" - exit 1 +if dpkg -l log2ram 2>/dev/null; then + echo "Please run : apt remove log2ram" + exit 1 fi -if [ "$(id -u)" -eq 0 ] -then - echo "Not apt installed. Remove will continue with this script..." - systemctl stop log2ram.service log2ram-daily.timer - systemctl disable log2ram.service log2ram-daily.timer - rm -rf /etc/systemd/system/log2ram* - rm /usr/local/bin/log2ram - rm /etc/log2ram.conf - rm -f /etc/logrotate.d/log2ram +if [ "$(id -u)" -eq 0 ]; then + echo "Not apt installed. Remove will continue with this script..." + systemctl stop log2ram.service log2ram-daily.timer + systemctl disable log2ram.service log2ram-daily.timer + rm -rf /etc/systemd/system/log2ram* + rm /usr/local/bin/log2ram + rm /etc/log2ram.conf + rm -f /etc/logrotate.d/log2ram - if [ -d /var/hdd.log ]; then - rm -r /var/hdd.log - fi - echo "Log2Ram is uninstalled, removing the uninstaller in progress" - rm /usr/local/bin/uninstall-log2ram.sh - echo "##### Reboot isn't needed #####" + if [ -d /var/hdd.log ]; then + rm -r /var/hdd.log + fi + echo "Log2Ram is uninstalled, removing the uninstaller in progress" + rm /usr/local/bin/uninstall-log2ram.sh + echo "##### Reboot isn't needed #####" else - echo "You need to be ROOT (sudo can be used)" + echo "You need to be ROOT (sudo can be used)" fi