mirror of
https://github.com/unraid/webgui.git
synced 2026-01-05 09:10:07 -06:00
95 lines
3.5 KiB
Bash
Executable File
95 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
CFG=/boot/config/rsyslog.conf
|
|
ETC=/etc/rsyslog.conf
|
|
USB=/boot/config/rsyslog.local
|
|
LOG=/etc/logrotate.d/rsyslog.local
|
|
|
|
# read settings
|
|
source /boot/config/rsyslog.cfg
|
|
|
|
# read $var
|
|
source /var/local/emhttp/var.ini
|
|
[[ $fsState == Started ]] || h='#'
|
|
|
|
# create local ruleset
|
|
if ! grep -q '^\$RuleSet local$' $ETC; then
|
|
sed -ri '/^# Include all config files in/a$RuleSet local' $ETC
|
|
sed -ri '/^#?\*\.\* @@?.*:[0-9]+$/a$DefaultRuleset local' $ETC
|
|
fi
|
|
|
|
# local syslog server
|
|
if [[ -n $local_server ]]; then
|
|
if ! grep -q '^\$RuleSet remote$' $ETC; then
|
|
sed -ri '$a\$RuleSet remote\n\$FileOwner nobody\n\$FileGroup users\n$FileCreateMode 0666\n\$IncludeConfig /etc/rsyslog.d/*.conf # remote\n*.* ?remote' $ETC
|
|
fi
|
|
# enable/disable local logging
|
|
sed -ri "s/^#?(\*\.\* \?remote)$/$h\1/" $ETC
|
|
if [[ $server_protocol == tcp || $server_protocol == both ]]; then
|
|
sed -ri '/^\$InputTCPServerBindRuleset remote$/d;/^\$InputTCPServerRun [0-9]+$/d;s/^#?(\$ModLoad imtcp)/\1/' $ETC
|
|
sed -ri "\$a\\\$InputTCPServerBindRuleset remote\n\\\$InputTCPServerRun ${server_port:-514}" $ETC
|
|
[[ $server_protocol == tcp ]] && sed -ri 's/^(\$ModLoad imudp)/#\1/;/^\$InputUDPServerBindRuleset remote$/d;/^\$UDPServerRun [0-9]+$/d' $ETC
|
|
fi
|
|
if [[ $server_protocol == udp || $server_protocol == both ]]; then
|
|
sed -ri '/^\$InputUDPServerBindRuleset remote$/d;/^\$UDPServerRun [0-9]+$/d;s/^#?(\$ModLoad imudp)/\1/' $ETC
|
|
sed -ri "\$a\\\$InputUDPServerBindRuleset remote\n\\\$UDPServerRun ${server_port:-514}" $ETC
|
|
[[ $server_protocol == udp ]] && sed -ri 's/^(\$ModLoad imtcp)/#\1/;/^\$InputTCPServerBindRuleset remote$/d;/^\$InputTCPServerRun [0-9]+$/d' $ETC
|
|
fi
|
|
sed -ri "/^\\\$template remote,.*$/d;/^#\\\$UDPServerRun [0-9]+.*$/a\\\$template remote,\"${server_folder:-/mnt/user/system}/${server_filename:-syslog-%FROMHOST-IP%.log}\"" $ETC
|
|
else
|
|
sed -ri '/^\$RuleSet remote$/d;/^\$FileOwner nobody$/d;/^\$FileGroup users$/d;/^\$FileCreateMode 06[46][46]$/d;/^\$IncludeConfig \/etc\/rsyslog\.d\/\*\.conf # remote$/d;/^\*\.\* \?remote$/d;/^\$template remote,".*"$/d;/^\$Input(TCP|UDP)ServerBindRuleset remote$/d;/^\$(InputTCP|UDP)ServerRun [0-9]+$/d;s/^#?\$(ModLoad imtcp|ModLoad imudp)/#\$\1/' $ETC
|
|
fi
|
|
|
|
# remote syslog server
|
|
if [[ -n $remote_server ]]; then
|
|
[[ $remote_protocol == udp ]] && com='@' || com='@@'
|
|
sed -ri "s/^#?(\*\.\*) @@?.*:[0-9]+$/\1 $com$remote_server:${remote_port:-514}/" $ETC
|
|
else
|
|
sed -ri 's/^#?(\*\.\* @@?.*:[0-9]+)$/#\1/' $ETC
|
|
fi
|
|
|
|
# mirror syslog to flash
|
|
if [[ -n $syslog_flash ]]; then
|
|
if ! grep -q '^\$template flash,' $ETC; then
|
|
sed -ri '/^#\$UDPServerRun [0-9]+.*$/a$template flash,"/boot/logs/syslog"' $ETC
|
|
sed -ri '/^\*\.debug .*syslog$/a*.debug ?flash' $ETC
|
|
fi
|
|
else
|
|
sed -ri '/^\$template flash,"\/boot\/logs\/syslog"$/d;/^\*\.debug \?flash/d' $ETC
|
|
fi
|
|
|
|
# copy conf to flash (read settings on reboot)
|
|
todos <$ETC >$CFG
|
|
|
|
# keep local logging disabled at startup
|
|
# disk mount and disk unmount events are used to start/stop logging
|
|
sed -ri 's/^(\*\.\* \?remote)/#\1/' $CFG
|
|
|
|
# update syslog rotation
|
|
if [[ -n $local_server ]]; then
|
|
if [[ -n $log_rotation ]]; then
|
|
cat <<- EOF > $LOG
|
|
$server_folder/*.log {
|
|
su nobody users
|
|
missingok
|
|
create 0666 nobody users
|
|
size $log_size
|
|
rotate $log_files
|
|
sharedscripts
|
|
postrotate
|
|
/bin/kill -HUP \$(cat /var/run/rsyslogd.pid 2>/dev/null) 2>/dev/null || true
|
|
endscript
|
|
}
|
|
EOF
|
|
chmod 644 $LOG
|
|
# keep copy on flash
|
|
cp -f $LOG $USB
|
|
else
|
|
# clean up
|
|
rm -f $LOG $USB
|
|
fi
|
|
fi
|
|
|
|
# update syslog daemon
|
|
/etc/rc.d/rc.rsyslogd restart &> /dev/null
|