This guide covers packaging, signing, and distributing the Quip Node Manager Tauri app on Linux.
AppImage produces a single self-contained executable that runs on most Linux distributions without installation.
Tauri generates an AppImage during the build:
bun run build
# Output: src-tauri/target/release/bundle/appimage/quip-node-manager.AppImageSign the AppImage with a detached GPG signature so users can verify authenticity:
# Generate a GPG key if you don't have one
gpg --full-generate-key
# Create a detached signature
gpg --detach-sign --armor \
src-tauri/target/release/bundle/appimage/quip-node-manager.AppImage
# Output: quip-node-manager.AppImage.ascUsers verify the signature with:
gpg --verify quip-node-manager.AppImage.asc quip-node-manager.AppImagechmod +x quip-node-manager.AppImage
./quip-node-manager.AppImageDebian/Ubuntu packages for APT-based distribution.
Tauri generates a .deb package during the build:
bun run build
# Output: src-tauri/target/release/bundle/deb/quip-node-manager_VERSION_amd64.debConfigure .deb metadata in src-tauri/tauri.conf.json:
{
"bundle": {
"linux": {
"deb": {
"depends": ["libwebkit2gtk-4.1-0", "libgtk-3-0", "docker.io"],
"section": "utils",
"priority": "optional",
"desktopTemplate": "assets/quip-node-manager.desktop"
}
}
}
}Set up a signed APT repository so users can install and update via apt:
- Generate a dedicated GPG key for the repository:
gpg --full-generate-key
# Choose RSA 4096, no expiration (or set a long expiration)
# Use an identity like "Quip Node Manager Releases <releases@quip.network>"- Export the public key:
gpg --armor --export "releases@quip.network" > quip-repo.gpg.asc- Create the repository structure:
mkdir -p repo/pool/main
mkdir -p repo/dists/stable/main/binary-amd64
# Copy the .deb into the pool
cp quip-node-manager_VERSION_amd64.deb repo/pool/main/- Generate Packages and Release files:
cd repo
# Generate Packages index
dpkg-scanpackages pool/main /dev/null > dists/stable/main/binary-amd64/Packages
gzip -k dists/stable/main/binary-amd64/Packages
# Generate Release file
cd dists/stable
apt-ftparchive release . > Release- Sign the Release file:
gpg --default-key "releases@quip.network" \
--armor --detach-sign --output Release.gpg Release
gpg --default-key "releases@quip.network" \
--clearsign --output InRelease Release- User installation:
# Add the repository GPG key
curl -fsSL https://releases.quip.network/quip-repo.gpg.asc \
| sudo gpg --dearmor -o /usr/share/keyrings/quip-archive-keyring.gpg
# Add the repository
echo "deb [signed-by=/usr/share/keyrings/quip-archive-keyring.gpg] \
https://releases.quip.network/repo stable main" \
| sudo tee /etc/apt/sources.list.d/quip.list
# Install
sudo apt update
sudo apt install quip-node-managerRPM packages for Fedora, RHEL, and openSUSE.
Tauri generates an .rpm package during the build:
bun run build
# Output: src-tauri/target/release/bundle/rpm/quip-node-manager-VERSION.x86_64.rpm- Import your GPG key into RPM:
# Export the public key
gpg --armor --export "releases@quip.network" > RPM-GPG-KEY-quip
# Configure ~/.rpmmacros
cat >> ~/.rpmmacros <<'EOF'
%_gpg_name releases@quip.network
%_gpg_path ~/.gnupg
%__gpg /usr/bin/gpg
EOF- Sign the RPM:
rpm --addsign quip-node-manager-VERSION.x86_64.rpm- User verification:
rpm --import RPM-GPG-KEY-quip
rpm --checksig quip-node-manager-VERSION.x86_64.rpmFor servers or headless systems running only the Quip network node (not the GUI), use a systemd service:
# /etc/systemd/system/quip-node.service
[Unit]
Description=Quip Network Node
After=network-online.target docker.service
Wants=network-online.target
Requires=docker.service
[Service]
Type=simple
User=quip
Group=quip
WorkingDirectory=/home/quip
ExecStart=/usr/bin/quip-network-node
Restart=on-failure
RestartSec=10
TimeoutStopSec=30
# Hardening
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/quip/quip-data
PrivateTmp=yes
# Logging
StandardOutput=journal
StandardError=journal
SyslogIdentifier=quip-node
[Install]
WantedBy=multi-user.targetEnable and start the service:
sudo useradd --system --create-home quip
sudo systemctl daemon-reload
sudo systemctl enable --now quip-node.service
sudo journalctl -u quip-node.service -fFor broader distribution through Linux app stores:
-
Flatpak: Submit to Flathub. See docs.flathub.org/docs/for-app-authors for submission guidelines.
-
Snap: Submit to the Snap Store. See snapcraft.io/docs for packaging instructions with
snapcraft.yaml.
Both formats provide sandboxing, automatic updates, and cross-distribution compatibility.