From 71709e5ef941dad76acfcefda265788a983b9995 Mon Sep 17 00:00:00 2001 From: Benjamin Edwards Date: Fri, 27 Oct 2023 12:29:09 -0400 Subject: [PATCH] Handle RPM upgrade in %postun script (#14379) This pull request addresses a key aspect of the RPM upgrade process - handling of scripts during upgrades vice pure deletion events. An RPM upgrade operation consists of both an Install and an Uninstall operation, meaning that during an upgrade, our %postun script is run and previously, it was causing the accidental deletion of binaries needed for the upgrade. To prevent this unwanted removal during upgrade scenarios, the %postun script now checks for the execution scenario in which it finds itself. --- orbit/changes/14380-rpm-graceful-upgrade | 1 + orbit/pkg/packaging/linux_shared.go | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 orbit/changes/14380-rpm-graceful-upgrade diff --git a/orbit/changes/14380-rpm-graceful-upgrade b/orbit/changes/14380-rpm-graceful-upgrade new file mode 100644 index 000000000..97e82c95e --- /dev/null +++ b/orbit/changes/14380-rpm-graceful-upgrade @@ -0,0 +1 @@ +* Add a conditional check in the %postun script to prevent file deletion during RPM upgrade. The check ensures that files and directories are only removed during a full uninstall ( equals 0), safeguarding necessary files from unintended deletion during an upgrade. \ No newline at end of file diff --git a/orbit/pkg/packaging/linux_shared.go b/orbit/pkg/packaging/linux_shared.go index 0ec882353..0e425790c 100644 --- a/orbit/pkg/packaging/linux_shared.go +++ b/orbit/pkg/packaging/linux_shared.go @@ -364,7 +364,11 @@ pkill fleet-desktop || true func writePostRemove(opt Options, path string) error { if err := ioutil.WriteFile(path, []byte(`#!/bin/sh -rm -rf /var/lib/orbit /var/log/orbit /usr/local/bin/orbit /etc/default/orbit /usr/lib/systemd/system/orbit.service /opt/orbit +# For RPM during uninstall, $1 is 0 +# For Debian during remove, $1 is "remove" +if [ "$1" = 0 ] || [ "$1" = "remove" ]; then + rm -rf /var/lib/orbit /var/log/orbit /usr/local/bin/orbit /etc/default/orbit /usr/lib/systemd/system/orbit.service /opt/orbit +fi `), constant.DefaultFileMode); err != nil { return fmt.Errorf("write file: %w", err) }