fix(linux): keep the Service through released rpm %preun via uninstaller wrapper

Refs #8515

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Tunglies
2026-11-09 18:47:54 +08:00
co-authored by Copilot
parent 33fc9ba9e3
commit ae2b2b6a06
5 changed files with 74 additions and 4 deletions
+23
View File
@@ -550,9 +550,16 @@ const SERVICE_BINARIES = [
'clash-verge-service-uninstall',
]
// Linux packages install the uninstaller under /usr/lib behind a wrapper sidecar; see
// src-tauri/packages/linux/service-uninstall.sh and the files entries in tauri.linux.conf.json.
const LINUX_UNINSTALLER_FILE = 'clash-verge-service-uninstall-bin'
function serviceFileInfo(name) {
const ext = platform === 'win32' ? '.exe' : ''
const suffix = platform === 'linux' ? `-${SIDECAR_HOST}` : ''
if (platform === 'linux' && name === 'clash-verge-service-uninstall') {
return { sourceFile: name, targetFile: LINUX_UNINSTALLER_FILE }
}
return {
sourceFile: `${name}${ext}`,
targetFile: `${name}${suffix}${ext}`,
@@ -573,6 +580,22 @@ async function findExtractedFile(dir, fileName) {
}
async function resolveServiceBundle() {
await fetchServiceBundle()
if (platform === 'linux') {
const wrapper = path.join(
SERVICE_DIR,
`clash-verge-service-uninstall-${SIDECAR_HOST}`,
)
await fsp.copyFile(
path.join(cwd, 'src-tauri', 'packages', 'linux', 'service-uninstall.sh'),
wrapper,
)
await fsp.chmod(wrapper, 0o755)
await updateHashCache(wrapper)
}
}
async function fetchServiceBundle() {
const files = SERVICE_BINARIES.map((name) => {
const info = serviceFileInfo(name)
return {