diff --git a/packages/bsp/common/usr/lib/armbian/armbian-ramlog b/packages/bsp/common/usr/lib/armbian/armbian-ramlog index 11e46e6762..7a9fac179d 100755 --- a/packages/bsp/common/usr/lib/armbian/armbian-ramlog +++ b/packages/bsp/common/usr/lib/armbian/armbian-ramlog @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # Copyright (c) Authors: http://www.armbian.com/authors # @@ -22,68 +22,75 @@ LOG2RAM_LOG="${HDD_LOG}armbian-ramlog.log" LOG_OUTPUT="tee -a $LOG2RAM_LOG" isSafe () { - [ -d $HDD_LOG ] || echo "ERROR: $HDD_LOG doesn't exist! Can't sync." - [ -d $HDD_LOG ] || exit 1 + [ -d $HDD_LOG ] || echo "ERROR: $HDD_LOG doesn't exist! Can't sync." + [ -d $HDD_LOG ] || exit 1 } RecreateLogs (){ # in case of crash those services doesn't start if there are no dirs & logs - [ ! -d /var/log/proftpd ] && mkdir -p /var/log/proftpd - [ ! -d /var/log/nginx ] && mkdir -p /var/log/nginx - [ ! -f /var/log/proftpd/controls.log ] && touch /var/log/proftpd/controls.log - [ ! -f /var/log/nginx/access.log ] && touch /var/log/nginx/access.log - [ ! -f /var/log/nginx/error.log ] && touch /var/log/nginx/error.log + check_if_installed apache2 && [ ! -d /var/log/apache2 ] && mkdir -p /var/log/apache2 + check_if_installed proftpd-basic && [ ! -d /var/log/proftpd ] && \ + (mkdir -p /var/log/proftpd ; touch /var/log/proftpd/controls.log) + check_if_installed nginx && [ ! -d /var/log/nginx ] && \ + (mkdir -p /var/log/nginx ; touch /var/log/nginx/access.log ; touch /var/log/nginx/error.log) + check_if_installed samba && [ ! -d /var/log/samba ] && mkdir -p /var/log/samba } syncToDisk () { - isSafe + isSafe - if [ "$USE_RSYNC" = true ]; then - rsync -aXWv --exclude armbian-ramlog.log --links $RAM_LOG $HDD_LOG 2>&1 | $LOG_OUTPUT - else - cp -rfup $RAM_LOG -T $HDD_LOG 2>&1 | $LOG_OUTPUT - fi + if [ "$USE_RSYNC" = true ]; then + rsync -aXWv --exclude armbian-ramlog.log --links $RAM_LOG $HDD_LOG 2>&1 | $LOG_OUTPUT + else + cp -rfup $RAM_LOG -T $HDD_LOG 2>&1 | $LOG_OUTPUT + fi } syncFromDisk () { - isSafe + isSafe - if [ "$USE_RSYNC" = true ]; then + if [ "$USE_RSYNC" = true ]; then rsync -aXWv --delete --exclude armbian-ramlog.log --exclude *.gz --exclude='*.[0-9]' --links $HDD_LOG $RAM_LOG 2>&1 | $LOG_OUTPUT - else + else #find $RAM_LOG* -maxdepth 1 -type f -not \( -name '*.[0-9]' -or -name '*.xz*' -or -name '*.gz' \) | awk -v var="$RAM_LOG" '{print var $1}' | xargs cp -t $RAM_LOG find $HDD_LOG* -maxdepth 1 -type f -not \( -name '*.[0-9]' -or -name '*.xz*' -or -name '*.gz' \) | xargs cp -ut $RAM_LOG - fi + fi } +check_if_installed () { + local DPKG_Status="$(dpkg -s "$1" 2>/dev/null | awk -F": " '/^Status/ {print $2}')" + if [[ "X${DPKG_Status}" = "X" || "${DPKG_Status}" = *deinstall* ]]; then + return 1 + else + return 0 + fi +} case "$1" in - start) - [ -d $HDD_LOG ] || mkdir $HDD_LOG - mount --bind $RAM_LOG $HDD_LOG - mount --make-private $HDD_LOG - rm -f $LOG2RAM_LOG - # zram type - if [ "$(blkid -s TYPE /dev/zram0 | awk ' { print $2 } ' | grep ext4)" ]; then - mount /dev/zram0 $RAM_LOG | $LOG_OUTPUT - else - mount -t tmpfs -o nosuid,noexec,nodev,mode=0755,size=$SIZE armbian-ramlog $RAM_LOG | $LOG_OUTPUT - fi - syncFromDisk - RecreateLogs - ;; - - stop) - syncToDisk - umount -l $RAM_LOG - umount -l $HDD_LOG - ;; - - write) - syncToDisk - ;; - *) - echo "Usage: log2ram {start|stop|write}" >&2 - exit 1 - ;; + start) + [ -d $HDD_LOG ] || mkdir -p $HDD_LOG + mount --bind $RAM_LOG $HDD_LOG + mount --make-private $HDD_LOG + rm -f $LOG2RAM_LOG + # zram type + if [ "$(blkid -s TYPE /dev/zram0 | awk ' { print $2 } ' | grep ext4)" ]; then + mount /dev/zram0 $RAM_LOG | $LOG_OUTPUT + else + mount -t tmpfs -o nosuid,noexec,nodev,mode=0755,size=$SIZE armbian-ramlog $RAM_LOG | $LOG_OUTPUT + fi + syncFromDisk + RecreateLogs + ;; + stop) + syncToDisk + umount -l $RAM_LOG + umount -l $HDD_LOG + ;; + write) + syncToDisk + ;; + *) + echo "Usage: log2ram {start|stop|write}" >&2 + exit 1 + ;; esac