refactor: disable legacy pymc services and normalize paths in management scripts

This commit is contained in:
Lloyd
2026-06-25 00:00:28 +01:00
parent 16e88579ae
commit 08b4667b2c
2 changed files with 55 additions and 0 deletions
+38
View File
@@ -230,6 +230,26 @@ is_enabled() {
systemctl is-enabled "$SERVICE_NAME" >/dev/null 2>&1
}
# Stop/disable legacy service names that can conflict on GPIO.
disable_legacy_services() {
local legacy_services="pymc-repeater pymc-repeater.service"
local svc removed_unit=0
for svc in $legacy_services; do
systemctl stop "$svc" >/dev/null 2>&1 || true
systemctl disable "$svc" >/dev/null 2>&1 || true
done
if [ -f /etc/systemd/system/pymc-repeater.service ]; then
rm -f /etc/systemd/system/pymc-repeater.service
removed_unit=1
fi
if [ "$removed_unit" -eq 1 ]; then
systemctl daemon-reload >/dev/null 2>&1 || true
fi
}
# Function to get current version
get_version() {
# Read version from the pip-installed package in the venv
@@ -405,6 +425,8 @@ install_repeater() {
useradd --system --home "$DATA_DIR" --shell /sbin/nologin "$SERVICE_USER"
fi
disable_legacy_services
(
echo "10"; echo "# Adding user to hardware groups..."
for grp in plugdev dialout gpio i2c spi; do
@@ -838,6 +860,7 @@ upgrade_repeater() {
echo "=== Upgrade Progress ==="
echo "[1/9] Stopping service..."
systemctl stop "$SERVICE_NAME" 2>/dev/null || true
disable_legacy_services
echo "[1.5/9] Migrating legacy paths..."
migrate_legacy_paths
@@ -1372,6 +1395,16 @@ validate_and_update_config() {
local example_file="config.yaml.example"
local updated_example="$CONFIG_DIR/config.yaml.example"
normalize_legacy_paths_in_config() {
local target_file="$1"
[ -f "$target_file" ] || return 0
sed -i 's|/var/lib/pymc_repeater|/var/lib/openhop_repeater|g' "$target_file" 2>/dev/null || true
sed -i 's|/etc/pymc_repeater|/etc/openhop_repeater|g' "$target_file" 2>/dev/null || true
sed -i 's|/var/log/pymc_repeater|/var/log/openhop_repeater|g' "$target_file" 2>/dev/null || true
sed -i 's|/opt/pymc_repeater|/opt/openhop_repeater|g' "$target_file" 2>/dev/null || true
}
# Ensure destination config directory exists before copy/merge steps.
mkdir -p "$CONFIG_DIR"
@@ -1387,6 +1420,7 @@ validate_and_update_config() {
if [ ! -f "$config_file" ]; then
echo " ⚠ No existing config.yaml found, copying example"
cp "$updated_example" "$config_file"
normalize_legacy_paths_in_config "$config_file"
return 0
fi
@@ -1427,18 +1461,22 @@ validate_and_update_config() {
# Verify the merged file is valid YAML
if "$YQ_CMD" eval '.' "$temp_merged" > /dev/null 2>&1; then
mv "$temp_merged" "$config_file"
normalize_legacy_paths_in_config "$config_file"
echo " ✓ Configuration merged successfully"
echo " ✓ Legacy pymc_* paths normalized"
echo " ✓ User settings preserved, new options added"
return 0
else
echo " ✗ Merged config is invalid, restoring backup"
rm -f "$temp_merged"
cp "$backup_file" "$config_file"
normalize_legacy_paths_in_config "$config_file"
return 1
fi
else
echo " ✗ Config merge failed, keeping original"
rm -f "$temp_merged" "$stripped_user"
normalize_legacy_paths_in_config "$config_file"
return 1
fi
}
+17
View File
@@ -887,6 +887,22 @@ def _cleanup_stale_source_trees() -> None:
_state.append_line("[pyMC updater] No stale source-tree paths found")
def _disable_legacy_services() -> None:
legacy_units = ["pymc-repeater", "pymc-repeater.service"]
for unit in legacy_units:
subprocess.run([_SYSTEMCTL_BIN, "stop", unit], check=False) # nosec B603
subprocess.run([_SYSTEMCTL_BIN, "disable", unit], check=False) # nosec B603
if os.path.isfile("/etc/systemd/system/pymc-repeater.service"):
try:
os.remove("/etc/systemd/system/pymc-repeater.service")
except OSError:
pass
subprocess.run([_SYSTEMCTL_BIN, "daemon-reload"], check=False) # nosec B603
def _do_install() -> None:
channel = _state.channel
@@ -944,6 +960,7 @@ def _do_install() -> None:
)
cmd = ["/bin/sh", _BUILDROOT_UPGRADE_HELPER, "upgrade"]
elif is_root:
_disable_legacy_services()
_migrate_pymc_install_dir()
_migrate_service_unit()