Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions changelog.d/26076_rpm_environment_file.fix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Use the conventional `/etc/sysconfig/vector` environment file path in RPM packages, migrating
existing `/etc/default/vector` customizations during upgrades.

authors: inflatador
22 changes: 18 additions & 4 deletions distribution/rpm/vector.spec
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ rm -rf %{buildroot}
mkdir -p %{buildroot}
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_sysconfdir}/%{_name}
mkdir -p %{buildroot}%{_sysconfdir}/default
mkdir -p %{buildroot}%{_sysconfdir}/sysconfig
mkdir -p %{buildroot}%{_sharedstatedir}/%{_name}
mkdir -p %{buildroot}%{_datadir}/%{_name}
mkdir -p %{buildroot}%{_unitdir}
Expand All @@ -59,19 +59,33 @@ cp -a %{_builddir}/bin/vector %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_datadir}/%{_name}/examples
cp -a %{_builddir}/config/vector.yaml %{buildroot}%{_datadir}/%{_name}/examples/vector.yaml
cp -a %{_builddir}/config/examples/. %{buildroot}%{_sysconfdir}/%{_name}/examples
cp -a %{_builddir}/systemd/vector.service %{buildroot}%{_unitdir}/vector.service
cp -a %{_builddir}/systemd/vector.default %{buildroot}%{_sysconfdir}/default/vector
sed 's|EnvironmentFile=-/etc/default/vector|EnvironmentFile=-/etc/sysconfig/vector|' \
%{_builddir}/systemd/vector.service > %{buildroot}%{_unitdir}/vector.service
Comment thread
inflatador marked this conversation as resolved.
cp -a %{_builddir}/systemd/vector.default %{buildroot}%{_sysconfdir}/sysconfig/vector
cp -a %{_builddir}/licenses/. %{buildroot}%{_datadir}/%{_name}/licenses
cp -a %{_builddir}/NOTICE %{buildroot}%{_datadir}/%{_name}/NOTICE
cp -a %{_builddir}/LICENSE-3rdparty.csv %{buildroot}%{_datadir}/%{_name}/LICENSE-3rdparty.csv

%pre
# Preserve environment customizations when upgrading from an RPM that used
# the Debian-style path. The packaged file is marked noreplace, so RPM keeps
# this migrated file and installs the new default alongside it as .rpmnew.
if [ -f %{_sysconfdir}/default/vector ] && [ ! -e %{_sysconfdir}/sysconfig/vector ]; then
mkdir -p %{_sysconfdir}/sysconfig
cp -a %{_sysconfdir}/default/vector %{_sysconfdir}/sysconfig/vector
fi

%post
getent passwd %{_username} > /dev/null || \
useradd --shell /sbin/nologin --system --home-dir %{_sharedstatedir}/%{_name} --user-group \
--comment "Vector observability data router" %{_username}
chown %{_username} %{_sharedstatedir}/%{_name}
usermod -aG systemd-journal %{_username} || true
usermod -aG systemd-journal-remote %{_username} || true
systemctl daemon-reload >/dev/null 2>&1 || true

%postun
systemctl daemon-reload >/dev/null 2>&1 || true

%clean
rm -rf %{buildroot}
Expand All @@ -80,7 +94,7 @@ rm -rf %{buildroot}
%defattr(-,root,root,-)
%{_bindir}/*
%{_unitdir}/vector.service
%config(noreplace) %{_sysconfdir}/default/vector
%config(noreplace) %{_sysconfdir}/sysconfig/vector
Comment thread
inflatador marked this conversation as resolved.
# Older versions installed a demo config at this path; mark it as %ghost so
# rpm preserves any existing on-disk file during upgrade instead of removing
# it as orphaned.
Expand Down
2 changes: 1 addition & 1 deletion distribution/systemd/vector.default
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# /etc/default/vector
# Environment variables for Vector.
# This file can theoretically contain a bunch of environment variables
# for Vector. See https://vector.dev/docs/setup/configuration/#environment-variables
# for details.
21 changes: 18 additions & 3 deletions scripts/verify-install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,40 @@ install_package () {
esac
}

case "$package" in
*.deb)
environment_file=/etc/default/vector
;;
*.rpm)
environment_file=/etc/sysconfig/vector
# Emulate an upgrade from a package that used the Debian-style path.
mkdir -p /etc/default
echo "FOO=bar" > /etc/default/vector
;;
esac

install_package "$package"

getent passwd vector || (echo "vector user missing" && exit 1)
getent group vector || (echo "vector group missing" && exit 1)
vector --version || (echo "vector --version failed" && exit 1)
test -f /etc/default/vector || (echo "/etc/default/vector doesn't exist" && exit 1)
test -f "$environment_file" || (echo "$environment_file doesn't exist" && exit 1)
test ! -e /etc/vector/vector.yaml || (echo "/etc/vector/vector.yaml should not be installed by default" && exit 1)
test -f /usr/share/vector/examples/vector.yaml || (echo "/usr/share/vector/examples/vector.yaml doesn't exist" && exit 1)

mkdir -p /etc/vector
echo "FOO=bar" > /etc/default/vector
if [[ "$package" == *.deb ]]; then
echo "FOO=bar" > "$environment_file"
fi
grep -q "FOO=bar" "$environment_file" || (echo "$environment_file did not preserve existing contents" && exit 1)
echo "foo: bar" > /etc/vector/vector.yaml

install_package "$package"

getent passwd vector || (echo "vector user missing" && exit 1)
getent group vector || (echo "vector group missing" && exit 1)
vector --version || (echo "vector --version failed" && exit 1)
grep -q "FOO=bar" "/etc/default/vector" || (echo "/etc/default/vector has incorrect contents" && exit 1)
grep -q "FOO=bar" "$environment_file" || (echo "$environment_file has incorrect contents" && exit 1)
grep -q "foo: bar" "/etc/vector/vector.yaml" || (echo "user-provided /etc/vector/vector.yaml was not preserved on reinstall" && exit 1)

dd-pkg lint "$package"
Loading