Fix ubuntu debs (#320)
This commit is contained in:
committed by
GitHub
Unverified
parent
01efd87642
commit
e7d4cf73d5
3
.github/workflows/release.yml
vendored
3
.github/workflows/release.yml
vendored
@@ -196,7 +196,8 @@ jobs:
|
|||||||
|
|
||||||
- **macOS**: On first launch, you may see "cannot verify developer". Go to System Preferences → Security & Privacy to allow the app to run
|
- **macOS**: On first launch, you may see "cannot verify developer". Go to System Preferences → Security & Privacy to allow the app to run
|
||||||
- **Windows**: SmartScreen may block the app. Click "More info" → "Run anyway" to proceed
|
- **Windows**: SmartScreen may block the app. Click "More info" → "Run anyway" to proceed
|
||||||
- **Linux**: AppImage requires executable permission: `chmod +x ClawX-*.AppImage`
|
- **Linux AppImage**: First run `chmod +x ClawX-*.AppImage` to add execute permission. On Ubuntu 22.04 you may also need `sudo apt install libfuse2`; on Ubuntu 24.04 use `sudo apt install libfuse2t64`
|
||||||
|
- **Linux .deb (Ubuntu 24.04)**: If installation fails due to missing dependencies, use `sudo apt install libgtk-3-0t64 libnotify4t64 libxss1t64` before installing
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -167,19 +167,22 @@ linux:
|
|||||||
Comment: AI Assistant powered by OpenClaw
|
Comment: AI Assistant powered by OpenClaw
|
||||||
Categories: Utility;Network;
|
Categories: Utility;Network;
|
||||||
Keywords: ai;assistant;automation;chat;
|
Keywords: ai;assistant;automation;chat;
|
||||||
|
StartupWMClass: clawx
|
||||||
|
|
||||||
appImage:
|
appImage:
|
||||||
license: LICENSE
|
license: LICENSE
|
||||||
|
|
||||||
deb:
|
deb:
|
||||||
depends:
|
depends:
|
||||||
- libgtk-3-0
|
# Use OR syntax to support both Ubuntu 22.04 and Ubuntu 24.04 (t64 transition).
|
||||||
- libnotify4
|
# Ubuntu 24.04 renamed many libraries with a t64 suffix (64-bit time_t ABI transition).
|
||||||
|
- libgtk-3-0 | libgtk-3-0t64
|
||||||
|
- libnotify4 | libnotify4t64
|
||||||
- libnss3
|
- libnss3
|
||||||
- libxss1
|
- libxss1 | libxss1t64
|
||||||
- libxtst6
|
- libxtst6 | libxtst6t64
|
||||||
- xdg-utils
|
- xdg-utils
|
||||||
- libatspi2.0-0
|
- libatspi2.0-0 | libatspi2.0-0t64
|
||||||
- libuuid1
|
- libuuid1
|
||||||
afterInstall: scripts/linux/after-install.sh
|
afterInstall: scripts/linux/after-install.sh
|
||||||
afterRemove: scripts/linux/after-remove.sh
|
afterRemove: scripts/linux/after-remove.sh
|
||||||
|
|||||||
@@ -37,6 +37,14 @@ import { ensureBuiltinSkillsInstalled } from '../utils/skill-config';
|
|||||||
// set `"disable-hardware-acceleration": false` in the app config (future).
|
// set `"disable-hardware-acceleration": false` in the app config (future).
|
||||||
app.disableHardwareAcceleration();
|
app.disableHardwareAcceleration();
|
||||||
|
|
||||||
|
// On Linux, set CHROME_DESKTOP so Chromium can find the correct .desktop file.
|
||||||
|
// On Wayland this maps the running window to clawx.desktop (→ icon + app grouping);
|
||||||
|
// on X11 it supplements the StartupWMClass matching.
|
||||||
|
// Must be called before app.whenReady() / before any window is created.
|
||||||
|
if (process.platform === 'linux') {
|
||||||
|
app.setDesktopName('clawx.desktop');
|
||||||
|
}
|
||||||
|
|
||||||
// Prevent multiple instances of the app from running simultaneously.
|
// Prevent multiple instances of the app from running simultaneously.
|
||||||
// Without this, two instances each spawn their own gateway process on the
|
// Without this, two instances each spawn their own gateway process on the
|
||||||
// same port, then each treats the other's gateway as "orphaned" and kills
|
// same port, then each treats the other's gateway as "orphaned" and kills
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "clawx",
|
"name": "clawx",
|
||||||
"version": "0.1.22",
|
"version": "0.1.23-alpha.1",
|
||||||
"pnpm": {
|
"pnpm": {
|
||||||
"onlyBuiltDependencies": [
|
"onlyBuiltDependencies": [
|
||||||
"@whiskeysockets/baileys",
|
"@whiskeysockets/baileys",
|
||||||
|
|||||||
@@ -8,6 +8,14 @@
|
|||||||
!endif
|
!endif
|
||||||
|
|
||||||
!macro customCheckAppRunning
|
!macro customCheckAppRunning
|
||||||
|
; Pre-emptively remove old shortcuts to prevent the Windows "Missing Shortcut"
|
||||||
|
; dialog during upgrades. The built-in NSIS uninstaller deletes ClawX.exe
|
||||||
|
; *before* removing shortcuts; Windows Shell link tracking can detect the
|
||||||
|
; broken target in that brief window and pop a resolver dialog.
|
||||||
|
; Delete is a silent no-op when the file doesn't exist (safe for fresh installs).
|
||||||
|
Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
|
||||||
|
Delete "$SMPROGRAMS\${PRODUCT_NAME}.lnk"
|
||||||
|
|
||||||
${nsProcess::FindProcess} "${APP_EXECUTABLE_FILENAME}" $R0
|
${nsProcess::FindProcess} "${APP_EXECUTABLE_FILENAME}" $R0
|
||||||
|
|
||||||
${if} $R0 == 0
|
${if} $R0 == 0
|
||||||
@@ -73,7 +81,15 @@
|
|||||||
|
|
||||||
; Add resources\cli to the current user's PATH for openclaw CLI.
|
; Add resources\cli to the current user's PATH for openclaw CLI.
|
||||||
; Read current PATH, skip if already present, append otherwise.
|
; Read current PATH, skip if already present, append otherwise.
|
||||||
|
;
|
||||||
|
; ReadRegStr silently returns "" when the value exceeds the NSIS string
|
||||||
|
; buffer (8192 chars for the electron-builder large-strings build).
|
||||||
|
; Without an error-flag check we would overwrite the entire user PATH with
|
||||||
|
; only our CLI directory, destroying every other PATH entry.
|
||||||
|
ClearErrors
|
||||||
ReadRegStr $0 HKCU "Environment" "Path"
|
ReadRegStr $0 HKCU "Environment" "Path"
|
||||||
|
IfErrors _ci_readFailed
|
||||||
|
|
||||||
StrCmp $0 "" _ci_setNew
|
StrCmp $0 "" _ci_setNew
|
||||||
|
|
||||||
; Check if our CLI dir is already in PATH
|
; Check if our CLI dir is already in PATH
|
||||||
@@ -94,6 +110,12 @@
|
|||||||
WriteRegExpandStr HKCU "Environment" "Path" $0
|
WriteRegExpandStr HKCU "Environment" "Path" $0
|
||||||
; Broadcast WM_SETTINGCHANGE so running Explorer/terminals pick up the change
|
; Broadcast WM_SETTINGCHANGE so running Explorer/terminals pick up the change
|
||||||
SendMessage ${HWND_BROADCAST} ${WM_SETTINGCHANGE} 0 "STR:Environment" /TIMEOUT=500
|
SendMessage ${HWND_BROADCAST} ${WM_SETTINGCHANGE} 0 "STR:Environment" /TIMEOUT=500
|
||||||
|
Goto _ci_done
|
||||||
|
|
||||||
|
_ci_readFailed:
|
||||||
|
; PATH value could not be read (likely exceeds NSIS buffer).
|
||||||
|
; Skip modification to avoid destroying existing entries.
|
||||||
|
DetailPrint "Warning: Could not read user PATH (may exceed 8192 chars). Skipping PATH update."
|
||||||
|
|
||||||
_ci_done:
|
_ci_done:
|
||||||
!macroend
|
!macroend
|
||||||
@@ -137,7 +159,9 @@ FunctionEnd
|
|||||||
|
|
||||||
!macro customUnInstall
|
!macro customUnInstall
|
||||||
; Remove resources\cli from user PATH
|
; Remove resources\cli from user PATH
|
||||||
|
ClearErrors
|
||||||
ReadRegStr $0 HKCU "Environment" "Path"
|
ReadRegStr $0 HKCU "Environment" "Path"
|
||||||
|
IfErrors _cu_pathDone
|
||||||
StrCmp $0 "" _cu_pathDone
|
StrCmp $0 "" _cu_pathDone
|
||||||
|
|
||||||
; Remove our entry (with leading or trailing semicolons)
|
; Remove our entry (with leading or trailing semicolons)
|
||||||
@@ -145,8 +169,17 @@ FunctionEnd
|
|||||||
Push "$INSTDIR\resources\cli"
|
Push "$INSTDIR\resources\cli"
|
||||||
Call un._cu_RemoveFromPath
|
Call un._cu_RemoveFromPath
|
||||||
Pop $0
|
Pop $0
|
||||||
|
|
||||||
|
; If PATH is now empty, delete the registry value instead of writing ""
|
||||||
|
StrCmp $0 "" _cu_deletePath
|
||||||
WriteRegExpandStr HKCU "Environment" "Path" $0
|
WriteRegExpandStr HKCU "Environment" "Path" $0
|
||||||
SendMessage ${HWND_BROADCAST} ${WM_SETTINGCHANGE} 0 "STR:Environment" /TIMEOUT=500
|
Goto _cu_pathBroadcast
|
||||||
|
|
||||||
|
_cu_deletePath:
|
||||||
|
DeleteRegValue HKCU "Environment" "Path"
|
||||||
|
|
||||||
|
_cu_pathBroadcast:
|
||||||
|
SendMessage ${HWND_BROADCAST} ${WM_SETTINGCHANGE} 0 "STR:Environment" /TIMEOUT=500
|
||||||
|
|
||||||
_cu_pathDone:
|
_cu_pathDone:
|
||||||
|
|
||||||
|
|||||||
@@ -26,4 +26,37 @@ if [ -f "$OPENCLAW_WRAPPER" ]; then
|
|||||||
ln -sf "$OPENCLAW_WRAPPER" /usr/local/bin/openclaw 2>/dev/null || true
|
ln -sf "$OPENCLAW_WRAPPER" /usr/local/bin/openclaw 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Set chrome-sandbox permissions.
|
||||||
|
# On systems without working user namespaces, the SUID bit is required.
|
||||||
|
# On Ubuntu 24.04+, user namespaces are available but blocked by AppArmor;
|
||||||
|
# we rely on the AppArmor profile below instead, so 0755 is correct there.
|
||||||
|
if ! { [[ -L /proc/self/ns/user ]] && unshare --user true; }; then
|
||||||
|
# No user namespace support — fall back to SUID sandbox
|
||||||
|
chmod 4755 '/opt/ClawX/chrome-sandbox' || true
|
||||||
|
else
|
||||||
|
chmod 0755 '/opt/ClawX/chrome-sandbox' || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install AppArmor profile (Ubuntu 24.04+).
|
||||||
|
# Ubuntu 24.04 enables kernel.apparmor_restrict_unprivileged_userns=1 by default,
|
||||||
|
# which blocks Electron's sandbox. The bundled AppArmor profile grants the 'userns'
|
||||||
|
# permission so the app can create user namespaces without disabling the global policy.
|
||||||
|
#
|
||||||
|
# We first check if AppArmor is enabled and if the running version supports abi/4.0
|
||||||
|
# (Ubuntu 22.04 does not; it runs fine without the profile, so we skip it there).
|
||||||
|
if apparmor_status --enabled > /dev/null 2>&1; then
|
||||||
|
APPARMOR_PROFILE_SOURCE='/opt/ClawX/resources/apparmor-profile'
|
||||||
|
APPARMOR_PROFILE_TARGET='/etc/apparmor.d/clawx'
|
||||||
|
if apparmor_parser --skip-kernel-load --debug "$APPARMOR_PROFILE_SOURCE" > /dev/null 2>&1; then
|
||||||
|
cp -f "$APPARMOR_PROFILE_SOURCE" "$APPARMOR_PROFILE_TARGET"
|
||||||
|
|
||||||
|
# Skip live-loading in a chroot environment (e.g. image-building pipelines).
|
||||||
|
if ! { [ -x '/usr/bin/ischroot' ] && /usr/bin/ischroot; } && hash apparmor_parser 2>/dev/null; then
|
||||||
|
apparmor_parser --replace --write-cache --skip-read-cache "$APPARMOR_PROFILE_TARGET"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Skipping AppArmor profile installation: this version of AppArmor does not support the bundled profile"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
echo "ClawX has been installed successfully."
|
echo "ClawX has been installed successfully."
|
||||||
|
|||||||
@@ -18,4 +18,10 @@ if command -v gtk-update-icon-cache &> /dev/null; then
|
|||||||
gtk-update-icon-cache -q /usr/share/icons/hicolor || true
|
gtk-update-icon-cache -q /usr/share/icons/hicolor || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Remove AppArmor profile
|
||||||
|
APPARMOR_PROFILE_TARGET='/etc/apparmor.d/clawx'
|
||||||
|
if [ -f "$APPARMOR_PROFILE_TARGET" ]; then
|
||||||
|
rm -f "$APPARMOR_PROFILE_TARGET"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "ClawX has been removed."
|
echo "ClawX has been removed."
|
||||||
|
|||||||
Reference in New Issue
Block a user