[v3,3/5] zabbix_agentd: Better configfile handling during update
Commit Message
- Install user changeable configfiles as .ipfirenew-files to allow
user to merge their config with the new version. (warnings
will be displayed during update when manual review is required).
If the configfiles are not yet present, the .ipfirenew-files will be
renamed to the actual configfiles. And if an existing configfile
does not differ from the new one, the .ipfirenew-file will be removed.
- Make sure .ipfirenew files and userparameter_pakfire.conf are not
included in backup during uninstall to prevent newer versions
from being overwritten by backup restore during install.
- Explicitly remove installed sudoers file as it is not removed by
remove_files due to the renaming from .ipfirenew
- Added comment in userparameter_pakfire.conf not to modify the file
as it will be overwritten on update
Signed-off-by: Robin Roevens <robin.roevens@disroot.org>
---
config/rootfiles/packages/zabbix_agentd | 4 +--
.../zabbix_agentd/userparameter_pakfire.conf | 7 +++++
lfs/zabbix_agentd | 7 +++--
src/paks/zabbix_agentd/install.sh | 29 +++++++++++++++++++
src/paks/zabbix_agentd/uninstall.sh | 8 +++++
5 files changed, 51 insertions(+), 4 deletions(-)
@@ -1,9 +1,9 @@
etc/logrotate.d/zabbix_agentd
etc/rc.d/init.d/zabbix_agentd
-etc/sudoers.d/zabbix
+etc/sudoers.d/zabbix.ipfirenew
etc/zabbix_agentd
etc/zabbix_agentd/scripts
-etc/zabbix_agentd/zabbix_agentd.conf
+etc/zabbix_agentd/zabbix_agentd.conf.ipfirenew
etc/zabbix_agentd/zabbix_agentd.d
etc/zabbix_agentd/zabbix_agentd.d/userparameter_pakfire.conf
usr/bin/zabbix_get
@@ -1,2 +1,9 @@
+#
+# IPFire specific configuration file
+#
+#
+# DO NOT MODIFY - Changes will be overwritten when zabbix_agentd addon is
+# updated.
+#
### Parameter for monitoring pakfire status
UserParameter=pakfire.status,sudo /opt/pakfire/pakfire status
@@ -90,8 +90,11 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
-rmdir /etc/zabbix_agentd/zabbix_agentd.conf.d
-mkdir -pv /etc/zabbix_agentd/zabbix_agentd.d
-mkdir -pv /etc/zabbix_agentd/scripts
+ # Remove original config
+ @rm -f /etc/zabbix_agentd/zabbix_agentd.conf
+ # And replace with our own config
install -v -m 644 $(DIR_SRC)/config/zabbix_agentd/zabbix_agentd.conf \
- /etc/zabbix_agentd/zabbix_agentd.conf
+ /etc/zabbix_agentd/zabbix_agentd.conf.ipfirenew
install -v -m 644 $(DIR_SRC)/config/zabbix_agentd/userparameter_pakfire.conf \
/etc/zabbix_agentd/zabbix_agentd.d/userparameter_pakfire.conf
@@ -111,7 +114,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
# Install sudoers include file
install -v -m 644 $(DIR_SRC)/config/zabbix_agentd/sudoers \
- /etc/sudoers.d/zabbix
+ /etc/sudoers.d/zabbix.ipfirenew
# Install include file for backup
install -v -m 644 $(DIR_SRC)/config/backup/includes/zabbix_agentd \
@@ -23,6 +23,23 @@
#
. /opt/pakfire/lib/functions.sh
+review_required=false
+
+function setup_configfile() {
+ # Puts configfile in place if it does not already exist or
+ # remove the shipped version if it does not differ from existing file
+ configfile=$1
+
+ if [ ! -f $configfile ]; then
+ mv $configfile.ipfirenew $configfile
+ elif diff -q $configfile $configfile.ipfirenew >/dev/null; then
+ rm -f $configfile.ipfirenew
+ else
+ echo "WARNING: new $configfile saved as $configfile.ipfirenew for manual review"
+ review_required=true
+ fi
+}
+
if ! getent group zabbix &>/dev/null; then
groupadd -g 118 zabbix
fi
@@ -41,6 +58,18 @@ ln -sf ../init.d/zabbix_agentd /etc/rc.d/rc6.d/K02zabbix_agentd
# Create additonal directories and set permissions
[ -d /var/log/zabbix ] || ( mkdir -pv /var/log/zabbix && chown zabbix.zabbix /var/log/zabbix )
[ -d /usr/lib/zabbix ] || ( mkdir -pv /usr/lib/zabbix && chown zabbix.zabbix /usr/lib/zabbix )
+[ -d /etc/zabbix_agentd/scripts ] || ( mkdir -pv /etc/zabbix_agentd/scripts && chown zabbix.zabbix /etc/zabbix_agentd/scripts )
restore_backup ${NAME}
+
+# Put zabbix configfiles in place
+setup_configfile /etc/zabbix_agentd/zabbix_agentd.conf
+setup_configfile /etc/sudoers.d/zabbix
+
+if $review_required; then
+ echo "WARNING: New versions of some configfile(s) where provided as .ipfirenew-files."
+ echo " They may need manual review in order to take advantage of new features"
+ echo " or even to make this version of ${NAME} work."
+fi
+
start_service --background ${NAME}
@@ -23,8 +23,16 @@
#
. /opt/pakfire/lib/functions.sh
stop_service ${NAME}
+
+# Remove .ipfirenew files in advance so they won't be included in backup
+rm -rfv /etc/zabbix_agentd/zabbix_agentd.conf.ipfirenew /etc/sudoers.d/zabbix.ipfirenew
+# Remove IPFire provided userparameter config files in advance
+rm -rfv /etc/zabbix_agentd/zabbix_agentd.d/userparameter_pakfire.conf
+
make_backup ${NAME}
remove_files
+# Remove sudoers file
+rm -rvf /etc/sudoers.d/zabbix
# Remove init-scripts and symlinks
rm -rfv /etc/rc.d/rc*.d/*zabbix_agentd