From c4a451eeadaade76900c0e8f8c6a90502473eada Mon Sep 17 00:00:00 2001 From: Alexander Marx Date: Thu, 3 Dec 2015 13:14:23 +0000 Subject: [PATCH] Remove ramdisks for RRD databases Ramdisks are very limited in space and as new graphs are generated for OpenVPN N2N connections, etc. more space is necessary. This patch will enable ramdisks for all systems with more than 490M of memory and allows the user to force using a ramdisk on systems with less memory. Signed-off-by: Alexander Marx Acked-by: Arne Fitzenreiter Signed-off-by: Michael Tremer --- config/rootfiles/common/armv5tel/initscripts | 12 ++- config/rootfiles/common/i586/initscripts | 12 ++- config/rootfiles/common/stage2 | 1 + lfs/initscripts | 9 +- lfs/vnstat | 2 +- src/initscripts/init.d/cleanfs | 31 ++++++- src/initscripts/init.d/collectd | 36 +++++++- src/initscripts/init.d/functions | 31 +++++++ src/initscripts/init.d/tmpfs | 93 -------------------- src/initscripts/init.d/vnstat | 45 ++++++++++ 10 files changed, 162 insertions(+), 110 deletions(-) delete mode 100644 src/initscripts/init.d/tmpfs create mode 100755 src/initscripts/init.d/vnstat diff --git a/config/rootfiles/common/armv5tel/initscripts b/config/rootfiles/common/armv5tel/initscripts index a174c5b450..e37a905c3c 100644 --- a/config/rootfiles/common/armv5tel/initscripts +++ b/config/rootfiles/common/armv5tel/initscripts @@ -125,12 +125,13 @@ etc/rc.d/init.d/sysctl etc/rc.d/init.d/sysklogd etc/rc.d/init.d/template #etc/rc.d/init.d/tftpd -etc/rc.d/init.d/tmpfs +#etc/rc.d/init.d/tmpfs #etc/rc.d/init.d/tor etc/rc.d/init.d/udev etc/rc.d/init.d/udev_retry etc/rc.d/init.d/upnpd #etc/rc.d/init.d/vdr +etc/rc.d/init.d/vnstat #etc/rc.d/init.d/vdradmin #etc/rc.d/init.d/vsftpd #etc/rc.d/init.d/watchdog @@ -149,13 +150,14 @@ etc/rc.d/rc0.d/K30sshd etc/rc.d/rc0.d/K45random etc/rc.d/rc0.d/K47setclock etc/rc.d/rc0.d/K49cyrus-sasl +etc/rc.d/rc0.d/K51vnstat etc/rc.d/rc0.d/K78snort etc/rc.d/rc0.d/K79leds etc/rc.d/rc0.d/K80network etc/rc.d/rc0.d/K82wlanclient #etc/rc.d/rc0.d/K84bluetooth #etc/rc.d/rc0.d/K85messagebus -etc/rc.d/rc0.d/K85tmpfs +#etc/rc.d/rc0.d/K85tmpfs etc/rc.d/rc0.d/K90sysklogd etc/rc.d/rc0.d/S60sendsignals etc/rc.d/rc0.d/S70localnet @@ -163,7 +165,8 @@ etc/rc.d/rc0.d/S80mountfs etc/rc.d/rc0.d/S90swap etc/rc.d/rc0.d/S99halt #etc/rc.d/rc3.d -etc/rc.d/rc3.d/S01tmpfs +#etc/rc.d/rc3.d/S01tmpfs +etc/rc.d/rc3.d/S01vnstat etc/rc.d/rc3.d/S10sysklogd #etc/rc.d/rc3.d/S15messagebus #etc/rc.d/rc3.d/S16bluetooth @@ -197,13 +200,14 @@ etc/rc.d/rc6.d/K30sshd etc/rc.d/rc6.d/K45random etc/rc.d/rc6.d/K47setclock etc/rc.d/rc6.d/K49cyrus-sasl +etc/rc.d/rc6.d/K51vnstat etc/rc.d/rc6.d/K78snort etc/rc.d/rc6.d/K79leds etc/rc.d/rc6.d/K80network etc/rc.d/rc6.d/K82wlanclient #etc/rc.d/rc6.d/K84bluetooth #etc/rc.d/rc6.d/K85messagebus -etc/rc.d/rc6.d/K85tmpfs +#etc/rc.d/rc6.d/K85tmpfs etc/rc.d/rc6.d/K90sysklogd etc/rc.d/rc6.d/S60sendsignals etc/rc.d/rc6.d/S70mountfs diff --git a/config/rootfiles/common/i586/initscripts b/config/rootfiles/common/i586/initscripts index 84c432a055..d5c8f1d4b0 100644 --- a/config/rootfiles/common/i586/initscripts +++ b/config/rootfiles/common/i586/initscripts @@ -126,13 +126,14 @@ etc/rc.d/init.d/sysctl etc/rc.d/init.d/sysklogd etc/rc.d/init.d/template #etc/rc.d/init.d/tftpd -etc/rc.d/init.d/tmpfs +#etc/rc.d/init.d/tmpfs #etc/rc.d/init.d/tor #etc/rc.d/init.d/transmission etc/rc.d/init.d/udev etc/rc.d/init.d/udev_retry etc/rc.d/init.d/upnpd #etc/rc.d/init.d/vdr +etc/rc.d/init.d/vnstat #etc/rc.d/init.d/vdradmin #etc/rc.d/init.d/vsftpd #etc/rc.d/init.d/watchdog @@ -151,13 +152,14 @@ etc/rc.d/rc0.d/K30sshd etc/rc.d/rc0.d/K45random etc/rc.d/rc0.d/K47setclock etc/rc.d/rc0.d/K49cyrus-sasl +etc/rc.d/rc0.d/K51vnstat etc/rc.d/rc0.d/K78snort etc/rc.d/rc0.d/K79leds etc/rc.d/rc0.d/K80network etc/rc.d/rc0.d/K82wlanclient #etc/rc.d/rc0.d/K84bluetooth #etc/rc.d/rc0.d/K85messagebus -etc/rc.d/rc0.d/K85tmpfs +#etc/rc.d/rc0.d/K85tmpfs etc/rc.d/rc0.d/K87acpid etc/rc.d/rc0.d/K90sysklogd etc/rc.d/rc0.d/S60sendsignals @@ -166,7 +168,8 @@ etc/rc.d/rc0.d/S80mountfs etc/rc.d/rc0.d/S90swap etc/rc.d/rc0.d/S99halt #etc/rc.d/rc3.d -etc/rc.d/rc3.d/S01tmpfs +#etc/rc.d/rc3.d/S01tmpfs +etc/rc.d/rc3.d/S01vnstat etc/rc.d/rc3.d/S10sysklogd etc/rc.d/rc3.d/S12acpid #etc/rc.d/rc3.d/S15messagebus @@ -201,13 +204,14 @@ etc/rc.d/rc6.d/K30sshd etc/rc.d/rc6.d/K45random etc/rc.d/rc6.d/K47setclock etc/rc.d/rc6.d/K49cyrus-sasl +etc/rc.d/rc6.d/K51vnstat etc/rc.d/rc6.d/K78snort etc/rc.d/rc6.d/K79leds etc/rc.d/rc6.d/K80network etc/rc.d/rc6.d/K82wlanclient #etc/rc.d/rc6.d/K84bluetooth #etc/rc.d/rc6.d/K85messagebus -etc/rc.d/rc6.d/K85tmpfs +#etc/rc.d/rc6.d/K85tmpfs etc/rc.d/rc6.d/K87acpid etc/rc.d/rc6.d/K90sysklogd etc/rc.d/rc6.d/S60sendsignals diff --git a/config/rootfiles/common/stage2 b/config/rootfiles/common/stage2 index 4021cafad6..5b763fd874 100644 --- a/config/rootfiles/common/stage2 +++ b/config/rootfiles/common/stage2 @@ -40,6 +40,7 @@ etc/profile.d/term256.sh etc/profile.d/umask.sh etc/resolv.conf etc/securetty +etc/sysconfig/ramdisk etc/sysctl.conf etc/syslog.conf etc/system-release diff --git a/lfs/initscripts b/lfs/initscripts index 141fd66d8d..c4e3492215 100755 --- a/lfs/initscripts +++ b/lfs/initscripts @@ -61,6 +61,9 @@ $(TARGET) : -rm -rf /etc/init.d ln -svf rc.d/init.d /etc/init.d + #create ramdiskfile to force ramdiskcreation if FORCE=1 + echo "FORCE=0" > /etc/sysconfig/ramdisk + for i in $(DIR_SRC)/src/initscripts/init.d/*; do \ install -v -m 754 $$i /etc/rc.d/init.d/; \ done @@ -128,9 +131,6 @@ $(TARGET) : ln -sf ../init.d/random /etc/rc.d/rc3.d/S25random ln -sf ../init.d/random /etc/rc.d/rc6.d/K45random ln -sf ../../sysconfig/rc.local /etc/rc.d/rc3.d/S98rc.local - ln -sf ../init.d/tmpfs /etc/rc.d/rc0.d/K85tmpfs - ln -sf ../init.d/tmpfs /etc/rc.d/rc3.d/S01tmpfs - ln -sf ../init.d/tmpfs /etc/rc.d/rc6.d/K85tmpfs ln -sf ../init.d/mediatomb /etc/rc.d/rc3.d/S98mediatomb ln -sf ../init.d/mediatomb /etc/rc.d/rc0.d/K02mediatomb ln -sf ../init.d/mediatomb /etc/rc.d/rc6.d/K02mediatomb @@ -178,6 +178,9 @@ $(TARGET) : ln -sf ../init.d/firewall /etc/rc.d/rcsysinit.d/S85firewall ln -sf ../init.d/network-trigger /etc/rc.d/rcsysinit.d/S90network-trigger ln -sf ../init.d/rngd /etc/rc.d/rcsysinit.d/S92rngd + ln -sf ../init.d/vnstat /etc/rc.d/rc3.d/S01vnstat + ln -sf ../init.d/vnstat /etc/rc.d/rc0.d/K51vnstat + ln -sf ../init.d/vnstat /etc/rc.d/rc6.d/K51vnstat ln -sf ../init.d/wlanclient /etc/rc.d/rc0.d/K82wlanclient ln -sf ../init.d/wlanclient /etc/rc.d/rc3.d/S19wlanclient ln -sf ../init.d/wlanclient /etc/rc.d/rc6.d/K82wlanclient diff --git a/lfs/vnstat b/lfs/vnstat index b8c8b2759f..1c1333b536 100644 --- a/lfs/vnstat +++ b/lfs/vnstat @@ -76,6 +76,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cd $(DIR_APP) && make all $(MAKETUNING) LOCAL_CONFIGURE_OPTIONS="--enable-readline=yes" cd $(DIR_APP) && make install sed -i 's|eth0|green0|g' /etc/vnstat.conf - sed -i 's|/var/lib/vnstat|/var/log/rrd/vnstat|g' /etc/vnstat.conf + sed -i 's|/var/lib/vnstat|/var/log/vnstat|g' /etc/vnstat.conf @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/initscripts/init.d/cleanfs b/src/initscripts/init.d/cleanfs index e8c8c8bb08..2d5778df93 100644 --- a/src/initscripts/init.d/cleanfs +++ b/src/initscripts/init.d/cleanfs @@ -77,7 +77,36 @@ case "${1}" in rm -rf /var/run ln -s ../run /var/run fi - + # + # create some folders + # + if [ ! -e /var/lock/subsys ]; then + mkdir -p /var/lock/subsys + fi + if [ ! -e /var/lock/time ]; then + mkdir -p /var/lock/time + chown nobody.root /var/lock/time + fi + if [ ! -e /var/run/clamav ]; then + mkdir -p /var/run/clamav + chown clamav:clamav /var/run/clamav + fi + if [ ! -e /var/run/cups ]; then + mkdir -p /var/run/cups + fi + if [ ! -e /var/run/dbus ]; then + mkdir -p /var/run/dbus + fi + if [ ! -e /var/run/mysql ]; then + mkdir -p /var/run/mysql + chown mysql:mysql /var/run/mysql + fi + if [ ! -e /var/run/saslauthd ]; then + mkdir -p /var/run/saslauthd + fi + if [ ! -e /var/log/vnstat ]; then + mkdir -p /var/log/vnstat + fi boot_mesg -n "Cleaning file systems:" ${INFO} boot_mesg -n " /tmp" ${NORMAL} diff --git a/src/initscripts/init.d/collectd b/src/initscripts/init.d/collectd index 96bd12676c..69dc94c6fa 100644 --- a/src/initscripts/init.d/collectd +++ b/src/initscripts/init.d/collectd @@ -6,6 +6,7 @@ . $rc_functions eval $(/usr/local/bin/readhash /var/ipfire/main/settings) +eval $(/usr/local/bin/readhash /etc/sysconfig/ramdisk) if [ "$RRDLOG" = '' ]; then RRDLOG=/var/log/rrd @@ -13,6 +14,35 @@ fi case "$1" in start) + if [ "$FORCE" == '1' ] || [ "$(mem_amount)" -gt "490" ];then + #mount ramdisk + if ! mountpoint $RRDLOG &>/dev/null; then + boot_mesg "Mount rrd Ramdisk..." + if [ $(find "$RRDLOG" | wc -l) -ne 1 ]; then + backup_ramdisk "$RRDLOG" + fi + mount_ramdisk "$RRDLOG" + evaluate_retval + #cleanup cron + if [ -e $RRDLOG.bak/cron/new.root ]; then + if [ -e $RRDLOG.bak/cron/root ]; then + rm -f $RRDLOG.bak/cron/new.root + fi + fi + #restore old values to ramdisk if exist + restore_ramdisk "$RRDLOG" + fi + else + restore_ramdisk "$RRDLOG" + fi + # + # Move /var/spool/cron to ramdisk and make a symlink + # + if [ ! -L /var/spool/cron ]; then + mv /var/spool/cron /var/log/rrd/cron + ln -s /var/log/rrd/cron /var/spool/cron + fi + # If run from init and collectd alrady started then exit silent if [ "$(basename $0)" != "collectd" ]; then if [ "$(ps -A | grep " collectd$")" != "" ]; then @@ -106,10 +136,8 @@ case "$1" in boot_mesg "Stopping Collection daemon..." killproc /usr/sbin/collectd evaluate_retval - # Save the ramdisk at manual stop but not at shutdown - if [ "$(basename $0)" == "collectd" ]; then - /etc/init.d/tmpfs backup - fi + backup_ramdisk "$RRDLOG" + umount_ramdisk "$RRDLOG" # sync after backup... sync ;; diff --git a/src/initscripts/init.d/functions b/src/initscripts/init.d/functions index e2e058d38b..ec3e512ec7 100644 --- a/src/initscripts/init.d/functions +++ b/src/initscripts/init.d/functions @@ -702,4 +702,35 @@ run_subdir() { done } +mem_amount() { + local pagesize="$(getconf PAGESIZE)" + local pages="$(getconf _PHYS_PAGES)" + + echo "$(( ${pagesize} * ${pages} / 1024 / 1024 ))" +} + +mount_ramdisk() { + mount -t tmpfs none $1 +} + +umount_ramdisk() { + if mountpoint $1 &>/dev/null; then + umount $1 + fi +} + +backup_ramdisk() { + if [ ! -e $1.bak ]; then + mkdir -p $1.bak + fi + cp -pR $1/* $1.bak/ + rm -rf $1/* +} + +restore_ramdisk() { + if [ -e $1.bak ];then + cp -pR $1.bak/* $1/ + rm -rf $1.bak/* + fi +} # End $rc_base/init.d/functions diff --git a/src/initscripts/init.d/tmpfs b/src/initscripts/init.d/tmpfs deleted file mode 100644 index 2ee2ffb72f..0000000000 --- a/src/initscripts/init.d/tmpfs +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/sh -# Begin $rc_base/init.d/tmpfs - -. /etc/sysconfig/rc -. $rc_functions - -eval $(/usr/local/bin/readhash /var/ipfire/main/settings) - -if [ "$RRDLOG" = '' ]; then - RRDLOG=/var/log/rrd -fi - -case "$1" in - start) - $0 restore - if [ ! -e $RRDLOG.bak/vnstat ]; then - mkdir -p $RRDLOG.bak/vnstat - fi - if [ ! -e $RRDLOG/vnstat ]; then - mkdir -p $RRDLOG/vnstat - fi - # - # create some folders - # - if [ ! -e /var/lock/subsys ]; then - mkdir -p /var/lock/subsys - fi - if [ ! -e /var/lock/time ]; then - mkdir -p /var/lock/time - chown nobody.root /var/lock/time - fi - if [ ! -e /var/run/clamav ]; then - mkdir -p /var/run/clamav - chown clamav:clamav /var/run/clamav - fi - if [ ! -e /var/run/cups ]; then - mkdir -p /var/run/cups - fi - if [ ! -e /var/run/dbus ]; then - mkdir -p /var/run/dbus - fi - if [ ! -e /var/run/mysql ]; then - mkdir -p /var/run/mysql - chown mysql:mysql /var/run/mysql - fi - if [ ! -e /var/run/saslauthd ]; then - mkdir -p /var/run/saslauthd - fi - - # - # Move /var/spool/cron to ramdisk and make a symlink - # - if [ ! -L /var/spool/cron ]; then - cp -pR /var/spool/cron /var/log/rrd.bak/cron - mv /var/spool/cron /var/log/rrd/cron - ln -s /var/log/rrd/cron /var/spool/cron - fi - - echo_ok - ;; - stop) - $0 backup - ;; - - backup) - boot_mesg "Save ramdisk..." - cp -pR $RRDLOG/* $RRDLOG.bak/ - evaluate_retval - ;; - restore) - if ! mountpoint $RRDLOG &>/dev/null; then - mount -t tmpfs -o size=64M none "$RRDLOG" - fi - - if [ -e $RRDLOG.bak/cron/new.root ]; then - if [ -e $RRDLOG.bak/cron/root ]; then - rm -f $RRDLOG.bak/cron/new.root - fi - fi - if [ -e $RRDLOG.bak ];then - boot_mesg "Restore ramdisk..." - cp -pR $RRDLOG.bak/* $RRDLOG/ - fi - ;; - - - *) - echo "Usage: $0 {start|stop|backup}" - exit 1 - ;; -esac - -# End $rc_base/init.d/tmpfs diff --git a/src/initscripts/init.d/vnstat b/src/initscripts/init.d/vnstat new file mode 100755 index 0000000000..2e4a87874f --- /dev/null +++ b/src/initscripts/init.d/vnstat @@ -0,0 +1,45 @@ +#!/bin/sh +# Begin $rc_base/init.d/vnstat + +. /etc/sysconfig/rc +. $rc_functions + +eval $(/usr/local/bin/readhash /var/ipfire/main/settings) + +if [ "$VNSTATLOG" = '' ]; then + VNSTATLOG=/var/log/vnstat +fi + +case "$1" in + start) + if [ "$FORCE" == '1' ] || [ "$(mem_amount)" -gt "490" ];then + if ! mountpoint $VNSTATLOG &>/dev/null; then + boot_mesg "Mount vnstat ramdisk..." + if [ $(find "$VNSTATLOG" | wc -l) -ne 1 ]; then + backup_ramdisk "$VNSTATLOG" + fi + mount_ramdisk "$VNSTATLOG" + evaluate_retval + $0 restore + fi + else + restore_ramdisk "$VNSTATLOG" + fi + ;; + stop) + $0 backup + umount_ramdisk "$VNSTATLOG" + ;; + backup) + backup_ramdisk "$VNSTATLOG" + ;; + restore) + restore_ramdisk "$VNSTATLOG" + ;; + *) + echo "Usage: $0 {start|stop|backup}" + exit 1 + ;; +esac + +# End $rc_base/init.d/vnstat -- 2.39.2