Skip to content

Commit

Permalink
deb:rpm: stop editing settings for migration
Browse files Browse the repository at this point in the history
The old service file should work as before.
So, we shouldn't touch the current settings by our own
assumptions.

Signed-off-by: Daijiro Fukuda <fukuda@clear-code.com>
  • Loading branch information
daipom committed Jul 26, 2023
1 parent 32645ab commit 17c1fdb
Show file tree
Hide file tree
Showing 10 changed files with 233 additions and 122 deletions.
1 change: 1 addition & 0 deletions fluent-package/apt/systemd-test/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ set -eu
test_filenames=(
install-newly.sh
update-from-v4.sh
update-from-v4-with-old-service-file.sh
update-to-next-version.sh
)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
#!/bin/bash

set -exu

. $(dirname $0)/../commonvar.sh

# TODO: Remove it when v5 repository was deployed
sudo apt install -y curl ca-certificates
curl -O https://packages.treasuredata.com/4/${distribution}/${code_name}/pool/contrib/f/fluentd-apt-source/fluentd-apt-source_2020.8.25-1_all.deb
sudo apt install -y ./fluentd-apt-source_2020.8.25-1_all.deb

# Install v4
sudo apt clean all
# Uncomment when v5 repository was deployed
#apt_source_package=/vagrant/${distribution}/pool/${code_name}/${channel}/*/*/fluent-apt-source*_all.deb
#sudo apt install -V -y ${apt_source_package} ca-certificates
sudo apt update
sudo apt install -V -y td-agent=4.5.0-1

systemctl status --no-pager td-agent

# Set custom service as "td-agent-server"
sleep 3
sudo systemctl stop td-agent
sudo cp /lib/systemd/system/td-agent.service /etc/systemd/system/td-agent-server.service
sudo cp /etc/logrotate.d/td-agent /etc/logrotate.d/td-agent-server
sudo cp /etc/td-agent/td-agent.conf /etc/td-agent/td-agent-server.conf
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/etc/td-agent/td-agent.conf,/etc/td-agent/td-agent-server.conf,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/var/run/td-agent/td-agent.sock,/var/run/td-agent-server/td-agent-server.sock,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/var/log/td-agent/td-agent.log,/var/log/td-agent/td-agent-server.log,g'
sudo sed -i /etc/logrotate.d/td-agent-server -e 's,/var/log/td-agent/td-agent.log,/var/log/td-agent/td-agent-server.log,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/etc/default/td-agent,/etc/default/td-agent-server,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/var/run/td-agent/td-agent.pid,/var/run/td-agent-server/td-agent-server.pid,g'
sudo sed -i /etc/logrotate.d/td-agent-server -e 's,/var/run/td-agent/td-agent.pid,/var/run/td-agent-server/td-agent-server.pid,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,RuntimeDirectory=td-agent,RuntimeDirectory=td-agent-server,g'
sudo systemctl daemon-reload
sudo systemctl enable --now td-agent-server

# Install the current
sleep 3
sudo systemctl stop td-agent-server
sudo apt install -V -y \
/vagrant/${distribution}/pool/${code_name}/${channel}/*/*/fluent-package_*_${architecture}.deb

# Manual migration
sleep 3
sudo systemctl stop td-agent
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/opt/td-agent/lib/libjemalloc.so,/opt/fluent/lib/libjemalloc.so,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/opt/td-agent/lib/ruby/gems/2.7.0/,/opt/fluent/lib/ruby/gems/3.2.0/,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/opt/td-agent/lib/ruby/gems/2.7.0/,/opt/fluent/lib/ruby/gems/3.2.0/,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/opt/td-agent/bin/fluentd,/opt/fluent/bin/fluentd,g'
echo "Alias=fluentd.service" | sudo tee -a /etc/systemd/system/td-agent-server.service

sudo systemctl daemon-reload
sudo systemctl enable --now td-agent-server

# Somehow, we need to restart the service to apply "/etc/systemd/system/td-agent-server.service"
systemctl status --no-pager td-agent-server
sudo systemctl restart td-agent-server

# Test: service status
systemctl status --no-pager td-agent-server
systemctl status --no-pager fluentd

# Test: config migration
test -L /etc/td-agent
test -e /etc/td-agent/td-agent-server.conf

# Test: log file migration
test -L /var/log/td-agent
test -e /var/log/td-agent/td-agent-server.log

# Test: bin file migration
test -h /usr/sbin/td-agent
test -h /usr/sbin/td-agent-gem

# Test: environmental variables
pid=$(systemctl show fluentd --property=MainPID --value)
env_vars=$(sudo sed -e 's/\x0/\n/g' /proc/$pid/environ)
test $(eval $env_vars && echo $HOME) = "/var/lib/td-agent"
test $(eval $env_vars && echo $LOGNAME) = "td-agent"
test $(eval $env_vars && echo $USER) = "td-agent"
test $(eval $env_vars && echo $FLUENT_CONF) = "/etc/td-agent/td-agent-server.conf"
test $(eval $env_vars && echo $TD_AGENT_LOG_FILE) = "/var/log/td-agent/td-agent-server.log"
test $(eval $env_vars && echo $FLUENT_PLUGIN) = "/etc/td-agent/plugin"
test $(eval $env_vars && echo $FLUENT_SOCKET) = "/var/run/td-agent-server/td-agent-server.sock"

# Test: No error logs
# (v4 default config outputs 'warn' log, so we should check only 'error' and 'fatal' logs)
sleep 3
(! grep -e '\[error\]' -e '\[fatal\]' /var/log/td-agent/td-agent-server.log)

# Test: logrotate config migration
test -e /etc/logrotate.d/td-agent-server
test -e /var/log/fluent/td-agent-server.log

sudo logrotate -f /etc/logrotate.d/td-agent-server
sleep 1

test -e /var/log/fluent/td-agent-server.log.1
sudo cp /var/log/fluent/td-agent-server.log.1 saved_rotated_logfile

sudo systemctl stop td-agent-server
# Check that SIGUSR1 is sent to Fluentd and Fluentd reopens the logfile
# not to log to the rotated old file.
sudo diff --report-identical-files /var/log/fluent/td-agent-server.log.1 saved_rotated_logfile

# Uninstall
sudo apt remove -y fluent-package
(! systemctl status --no-pager td-agent-server)
(! systemctl status --no-pager fluentd)
22 changes: 3 additions & 19 deletions fluent-package/apt/systemd-test/update-from-v4.sh
Original file line number Diff line number Diff line change
Expand Up @@ -53,30 +53,14 @@ env_vars=$(sudo sed -e 's/\x0/\n/g' /proc/$pid/environ)
test $(eval $env_vars && echo $HOME) = "/var/lib/fluent"
test $(eval $env_vars && echo $LOGNAME) = "_fluentd"
test $(eval $env_vars && echo $USER) = "_fluentd"
test $(eval $env_vars && echo $FLUENT_CONF) = "/etc/fluent/td-agent.conf"
test $(eval $env_vars && echo $FLUENT_PACKAGE_LOG_FILE) = "/var/log/fluent/td-agent.log"
test $(eval $env_vars && echo $FLUENT_CONF) = "/etc/fluent/fluentd.conf"
test $(eval $env_vars && echo $FLUENT_PACKAGE_LOG_FILE) = "/var/log/fluent/fluentd.log"
test $(eval $env_vars && echo $FLUENT_PLUGIN) = "/etc/fluent/plugin"
test $(eval $env_vars && echo $FLUENT_SOCKET) = "/var/run/fluent/fluentd.sock"

# Test: No error logs
# (v4 default config outputs 'warn' log, so we should check only 'error' and 'fatal' logs)
sleep 3
(! grep -q -e '\[error\]' -e '\[fatal\]' /var/log/td-agent/td-agent.log)

# Test: logrotate config migration
test -e /etc/logrotate.d/td-agent
test -e /var/log/fluent/td-agent.log

sudo logrotate -f /etc/logrotate.d/td-agent
sleep 1

test -e /var/log/fluent/td-agent.log.1
sudo cp /var/log/fluent/td-agent.log.1 saved_rotated_logfile

sudo systemctl stop td-agent
# Check that SIGUSR1 is sent to Fluentd and Fluentd reopens the logfile
# not to log to the rotated old file.
sudo diff --report-identical-files /var/log/fluent/td-agent.log.1 saved_rotated_logfile
(! grep -e '\[warn\]' -e '\[error\]' -e '\[fatal\]' /var/log/fluent/fluentd.log)

# Uninstall
sudo apt remove -y fluent-package
Expand Down
4 changes: 0 additions & 4 deletions fluent-package/templates/etc/systemd/fluentd.erb
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
FLUENT_PACKAGE_OPTIONS=""
# The following environment variable will be modified via package maintainer's migration script
FLUENT_CONF=/etc/<%= package_dir %>/<%= service_name %>.conf
FLUENT_PLUGIN=/etc/<%= package_dir %>/plugin
FLUENT_PACKAGE_LOG_FILE=/var/log/<%= package_dir %>/<%= service_name %>.log
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,6 @@ migration_from_v4_main_process() {
if [ -f /etc/<%= compat_package_dir %>/<%= compat_service_name %>.conf ]; then
echo "Migrating from /etc/<%= compat_package_dir %>/<%= compat_service_name %>.conf to /etc/<%= package_dir %>/<%= compat_service_name %>.conf"
cp -f /etc/<%= compat_package_dir %>/<%= compat_service_name %>.conf /etc/<%= package_dir %>/<%= compat_service_name %>.conf
echo "Refer previous configuration <%= compat_service_name %>.conf ..."
sed -i"" /etc/default/<%= service_name %> -e "/FLUENT_CONF/c FLUENT_CONF=/etc/<%= package_dir %>/<%= compat_service_name %>.conf"
for d in $(ls /etc/<%= compat_package_dir %>); do
if [ ! "$d" = "plugin" -a ! "$d" = "<%= compat_service_name %>.conf" ]; then
# except managed under deb files must be migrated
Expand Down Expand Up @@ -103,14 +101,6 @@ migration_from_v4_main_process() {
mv -f /var/log/<%= compat_package_dir %>/$d /var/log/<%= package_dir %>/
fi
done
if [ -f /var/log/<%= package_dir %>/<%= compat_service_name %>.log ]; then
echo "Keep logging to <%= compat_service_name %>.log ..."
sed -i"" /etc/default/<%= service_name %> -e "/FLUENT_PACKAGE_LOG_FILE/c FLUENT_PACKAGE_LOG_FILE=/var/log/<%= package_dir %>/<%= compat_service_name %>.log"
fi
if [ -f /etc/logrotate.d/<%= compat_service_name %> ]; then
echo "Migrating path of pid ..."
sed -i"" /etc/logrotate.d/<%= compat_service_name %> -e "s,/var/run/<%= compat_package_dir %>/<%= compat_service_name %>.pid,/var/run/<%= package_dir %>/<%= service_name %>.pid,"
fi
fi
}

Expand Down
8 changes: 0 additions & 8 deletions fluent-package/yum/fluent-package.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -199,8 +199,6 @@ if [ $1 -eq 1 ]; then
mv -f $d /etc/@PACKAGE_DIR@/
fi
done
echo "Refer previous configuration @COMPAT_SERVICE_NAME@.conf ..."
%{__sed} -i"" %{_sysconfdir}/sysconfig/@SERVICE_NAME@ -e "/FLUENT_CONF/c FLUENT_CONF=/etc/@PACKAGE_DIR@/@COMPAT_SERVICE_NAME@.conf"
fi
fi
if systemctl is-active @COMPAT_SERVICE_NAME@; then
Expand Down Expand Up @@ -233,8 +231,6 @@ if [ $1 -eq 1 ]; then
fi
done
if [ -f /var/log/@PACKAGE_DIR@/@COMPAT_SERVICE_NAME@.log ]; then
echo "Keep logging to @COMPAT_SERVICE_NAME@.log ..."
%{__sed} -i"" %{_sysconfdir}/sysconfig/@SERVICE_NAME@ -e "/FLUENT_PACKAGE_LOG_FILE/c FLUENT_PACKAGE_LOG_FILE=/var/log/@PACKAGE_DIR@/@COMPAT_SERVICE_NAME@.log"
# Backup the config since RPM removes the file if it is not edited.
if [ -f /etc/logrotate.d/@COMPAT_SERVICE_NAME@ ]; then
cp /etc/logrotate.d/@COMPAT_SERVICE_NAME@ %{v4migration_old_rotate_config_saved}
Expand Down Expand Up @@ -327,10 +323,6 @@ if [ -f %{v4migration} ]; then
echo "Restores logrotate config from backup"
mv -f %{v4migration_old_rotate_config_saved} /etc/logrotate.d/@COMPAT_SERVICE_NAME@
fi
if [ -f /etc/logrotate.d/@COMPAT_SERVICE_NAME@ ]; then
echo "Migrating path of pid in the logrotate config /etc/logrotate.d/@COMPAT_SERVICE_NAME@ ..."
%{__sed} -i"" /etc/logrotate.d/@COMPAT_SERVICE_NAME@ -e "s,/var/run/@COMPAT_PACKAGE_DIR@/@COMPAT_SERVICE_NAME@.pid,/var/run/@PACKAGE_DIR@/@SERVICE_NAME@.pid,"
fi
rm -f %{v4migration}
if [ -f %{v4migration_with_restart} ]; then
# When upgrading from v4, td-agent.service will be removed
Expand Down
2 changes: 1 addition & 1 deletion fluent-package/yum/systemd-test/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ set -eu
test_filenames=(
install-newly.sh
update-from-v4.sh
update-from-v4-with-old-service-file.sh
update-to-next-version.sh
update-from-v4-logrotation-config-edited.sh
)

for test_filename in ${test_filenames[@]}; do
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
#!/bin/bash

set -exu

. $(dirname $0)/commonvar.sh

# Install v4
sudo rpm --import https://packages.treasuredata.com/GPG-KEY-td-agent
case ${distribution} in
amazon)
cat > td.repo <<'EOF';
[treasuredata]
name=TreasureData
baseurl=https://packages.treasuredata.com/4/amazon/$releasever/$basearch
gpgcheck=1
gpgkey=https://packages.treasuredata.com/GPG-KEY-td-agent
EOF
sudo mv td.repo /etc/yum.repos.d/
;;
*)
cat > td.repo <<'EOF';
[treasuredata]
name=TreasureData
baseurl=https://packages.treasuredata.com/4/redhat/$releasever/$basearch
gpgcheck=1
gpgkey=https://packages.treasuredata.com/GPG-KEY-td-agent
EOF
sudo mv td.repo /etc/yum.repos.d/
;;
esac
sudo $DNF update -y
sudo $DNF install -y td-agent-4.5.0-1.*.x86_64

# Set custom service as "td-agent-server"
sudo cp /usr/lib/systemd/system/td-agent.service /etc/systemd/system/td-agent-server.service
sudo cp /etc/logrotate.d/td-agent /etc/logrotate.d/td-agent-server
sudo cp /etc/td-agent/td-agent.conf /etc/td-agent/td-agent-server.conf
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/etc/td-agent/td-agent.conf,/etc/td-agent/td-agent-server.conf,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/var/run/td-agent/td-agent.sock,/var/run/td-agent-server/td-agent-server.sock,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/var/log/td-agent/td-agent.log,/var/log/td-agent/td-agent-server.log,g'
sudo sed -i /etc/logrotate.d/td-agent-server -e 's,/var/log/td-agent/td-agent.log,/var/log/td-agent/td-agent-server.log,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/etc/default/td-agent,/etc/default/td-agent-server,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/var/run/td-agent/td-agent.pid,/var/run/td-agent-server/td-agent-server.pid,g'
sudo sed -i /etc/logrotate.d/td-agent-server -e 's,/var/run/td-agent/td-agent.pid,/var/run/td-agent-server/td-agent-server.pid,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,RuntimeDirectory=td-agent,RuntimeDirectory=td-agent-server,g'
sudo systemctl daemon-reload
sudo systemctl enable --now td-agent-server

# Install the current
sudo $DNF install -y \
/vagrant/${distribution}/${DISTRIBUTION_VERSION}/x86_64/Packages/fluent-package-[0-9]*.rpm

# Manual migration
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/opt/td-agent/lib/libjemalloc.so,/opt/fluent/lib/libjemalloc.so,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/opt/td-agent/lib/ruby/gems/2.7.0/,/opt/fluent/lib/ruby/gems/3.2.0/,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/opt/td-agent/lib/ruby/gems/2.7.0/,/opt/fluent/lib/ruby/gems/3.2.0/,g'
sudo sed -i /etc/systemd/system/td-agent-server.service -e 's,/opt/td-agent/bin/fluentd,/opt/fluent/bin/fluentd,g'
echo "Alias=fluentd.service" | sudo tee -a /etc/systemd/system/td-agent-server.service

sudo systemctl daemon-reload
sudo systemctl enable --now td-agent-server

# Test: service status
systemctl status --no-pager td-agent-server
systemctl status --no-pager fluentd

# Test: config migration
test -L /etc/td-agent
test -e /etc/td-agent/td-agent-server.conf

# Test: log file migration
test -L /var/log/td-agent
test -e /var/log/td-agent/td-agent-server.log

# Test: bin file migration
test -h /usr/sbin/td-agent
test -h /usr/sbin/td-agent-gem

# Test: environmental variables
pid=$(eval $(systemctl show fluentd --property=MainPID) && echo $MainPID)
env_vars=$(sudo sed -e 's/\x0/\n/g' /proc/$pid/environ)
test $(eval $env_vars && echo $HOME) = "/var/lib/td-agent"
test $(eval $env_vars && echo $LOGNAME) = "td-agent"
test $(eval $env_vars && echo $USER) = "td-agent"
test $(eval $env_vars && echo $FLUENT_CONF) = "/etc/td-agent/td-agent-server.conf"
test $(eval $env_vars && echo $TD_AGENT_LOG_FILE) = "/var/log/td-agent/td-agent-server.log"
test $(eval $env_vars && echo $FLUENT_PLUGIN) = "/etc/td-agent/plugin"
test $(eval $env_vars && echo $FLUENT_SOCKET) = "/var/run/td-agent-server/td-agent-server.sock"

# Test: No error logs
# (v4 default config outputs 'warn' log, so we should check only 'error' and 'fatal' logs)
sleep 3
(! grep -e '\[error\]' -e '\[fatal\]' /var/log/td-agent/td-agent-server.log)

# Test: logrotate config migration
test -e /etc/logrotate.d/td-agent-server
test -e /var/log/fluent/td-agent-server.log

sudo $DNF install -y logrotate # rockylinux-8 needs to install logrotate
sudo logrotate -f /etc/logrotate.d/td-agent-server
sleep 1

test -e /var/log/fluent/td-agent-server.log.1
sudo cp /var/log/fluent/td-agent-server.log.1 saved_rotated_logfile

sudo systemctl stop td-agent-server
# Check that SIGUSR1 is sent to Fluentd and Fluentd reopens the logfile
# not to log to the rotated old file.
sudo diff --report-identical-files /var/log/fluent/td-agent-server.log.1 saved_rotated_logfile

# Uninstall
sudo $DNF remove -y fluent-package
(! systemctl status --no-pager td-agent-server)
(! systemctl status --no-pager fluentd)
Loading

0 comments on commit 17c1fdb

Please sign in to comment.