Guide for creating distribution packages for Flutter Flatseal.
Snap packages work across many Linux distributions.
sudo apt install snapcraftCreate snap/snapcraft.yaml:
name: flutter-flatseal
version: '1.0.0'
summary: Manage Flatpak permissions
description: |
A Flutter application to manage Flatpak sandbox permissions,
inspired by the original Flatseal project.
base: core22
confinement: classic
grade: stable
parts:
flutter-flatseal:
plugin: flutter
source: .
flutter-target: lib/main.dart
build-packages:
- clang
- cmake
- ninja-build
- libgtk-3-dev
stage-packages:
- libgtk-3-0
- flatpak
apps:
flutter-flatseal:
command: flutter_flatseal
desktop: linux/flutter_flatseal.desktop
plugs:
- desktop
- desktop-legacy
- wayland
- x11
- home
- networksnapcraft clean
snapcraftsudo snap install flutter-flatseal_1.0.0_amd64.snap --dangeroussnapcraft login
snapcraft upload flutter-flatseal_1.0.0_amd64.snap --release=stableCreate a Flatpak package for distribution through Flathub.
sudo apt install flatpak-builderCreate com.example.FlutterFlatseal.yml:
app-id: com.example.FlutterFlatseal
runtime: org.freedesktop.Platform
runtime-version: '23.08'
sdk: org.freedesktop.Sdk
command: flutter_flatseal
finish-args:
- --share=ipc
- --socket=wayland
- --socket=x11
- --socket=fallback-x11
- --device=dri
- --filesystem=host
- --system-talk-name=org.freedesktop.Flatpak
modules:
- name: flutter-flatseal
buildsystem: simple
build-commands:
- install -Dm755 flutter_flatseal /app/bin/flutter_flatseal
- install -Dm644 linux/flutter_flatseal.desktop /app/share/applications/com.example.FlutterFlatseal.desktop
- install -Dm644 linux/flutter_flatseal.png /app/share/icons/hicolor/128x128/apps/com.example.FlutterFlatseal.png
sources:
- type: archive
path: flutter-flatseal-1.0.0.tar.gz# Build
flatpak-builder --force-clean build-dir com.example.FlutterFlatseal.yml
# Test locally
flatpak-builder --run build-dir com.example.FlutterFlatseal.yml flutter_flatseal
# Create repository
flatpak-builder --repo=repo --force-clean build-dir com.example.FlutterFlatseal.yml
# Install from local repo
flatpak --user remote-add --no-gpg-verify flutter-flatseal-repo repo
flatpak --user install flutter-flatseal-repo com.example.FlutterFlatseal- Fork https://github.com/flathub/flathub
- Create PR with your manifest
- Follow Flathub guidelines
Portable application format that works on most Linux distributions.
# Download appimagetool
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
chmod +x appimagetool-x86_64.AppImage#!/bin/bash
set -e
APP_DIR=flutter-flatseal.AppDir
# Create directory structure
mkdir -p $APP_DIR/usr/bin
mkdir -p $APP_DIR/usr/lib
mkdir -p $APP_DIR/usr/share/applications
mkdir -p $APP_DIR/usr/share/icons/hicolor/128x128/apps
# Copy application
cp -r build/linux/x64/release/bundle/* $APP_DIR/usr/bin/
mv $APP_DIR/usr/bin/flutter_flatseal $APP_DIR/usr/bin/flutter-flatseal
# Copy desktop file
cp linux/flutter_flatseal.desktop $APP_DIR/usr/share/applications/
# Copy icon
cp linux/flutter_flatseal.png $APP_DIR/usr/share/icons/hicolor/128x128/apps/
# Create AppRun script
cat > $APP_DIR/AppRun <<'EOF'
#!/bin/bash
SELF=$(readlink -f "$0")
HERE=${SELF%/*}
export PATH="${HERE}/usr/bin:${PATH}"
export LD_LIBRARY_PATH="${HERE}/usr/lib:${LD_LIBRARY_PATH}"
exec "${HERE}/usr/bin/flutter-flatseal" "$@"
EOF
chmod +x $APP_DIR/AppRun
# Create desktop file
cat > $APP_DIR/flutter-flatseal.desktop <<EOF
[Desktop Entry]
Name=Flutter Flatseal
Exec=flutter-flatseal
Icon=flutter_flatseal
Type=Application
Categories=System;Settings;
EOF
# Link icon
ln -sf usr/share/icons/hicolor/128x128/apps/flutter_flatseal.png $APP_DIR/flutter_flatseal.png# Create AppImage
./appimagetool-x86_64.AppImage flutter-flatseal.AppDir
# Result: Flutter_Flatseal-x86_64.AppImagechmod +x Flutter_Flatseal-x86_64.AppImage
./Flutter_Flatseal-x86_64.AppImageCreate a .deb package for Debian/Ubuntu distributions.
sudo apt install dpkg-dev debhelpermkdir -p debian-package/DEBIAN
mkdir -p debian-package/usr/bin
mkdir -p debian-package/usr/share/applications
mkdir -p debian-package/usr/share/icons/hicolor/128x128/appsCreate debian-package/DEBIAN/control:
Package: flutter-flatseal
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Depends: libgtk-3-0, flatpak
Maintainer: Your Name <your.email@example.com>
Description: Manage Flatpak permissions
A Flutter application to manage Flatpak sandbox permissions,
inspired by the original Flatseal project.
.
Features include viewing installed Flatpak applications,
managing permissions, and overriding sandbox settings.
# Copy application
cp -r build/linux/x64/release/bundle/* debian-package/usr/bin/
# Copy desktop file
cp linux/flutter_flatseal.desktop debian-package/usr/share/applications/
# Copy icon
cp linux/flutter_flatseal.png debian-package/usr/share/icons/hicolor/128x128/apps/dpkg-deb --build debian-package flutter-flatseal_1.0.0_amd64.debsudo dpkg -i flutter-flatseal_1.0.0_amd64.deb
sudo apt-get install -f # Fix dependenciesCreate an RPM package for Fedora/RHEL/CentOS.
sudo dnf install rpm-build rpmdevtoolsrpmdev-setuptreeCreate ~/rpmbuild/SPECS/flutter-flatseal.spec:
Name: flutter-flatseal
Version: 1.0.0
Release: 1%{?dist}
Summary: Manage Flatpak permissions
License: GPL-3.0
URL: https://github.com/meta-flutter/flutter-flatseal
Source0: %{name}-%{version}.tar.gz
BuildRequires: cmake
BuildRequires: ninja-build
BuildRequires: gtk3-devel
Requires: gtk3
Requires: flatpak
%description
A Flutter application to manage Flatpak sandbox permissions,
inspired by the original Flatseal project.
%prep
%setup -q
%build
# Application is pre-built
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/bin
mkdir -p $RPM_BUILD_ROOT/usr/share/applications
mkdir -p $RPM_BUILD_ROOT/usr/share/icons/hicolor/128x128/apps
cp -r * $RPM_BUILD_ROOT/usr/bin/
cp linux/flutter_flatseal.desktop $RPM_BUILD_ROOT/usr/share/applications/
cp linux/flutter_flatseal.png $RPM_BUILD_ROOT/usr/share/icons/hicolor/128x128/apps/
%files
/usr/bin/flutter_flatseal
/usr/share/applications/flutter_flatseal.desktop
/usr/share/icons/hicolor/128x128/apps/flutter_flatseal.png
%changelog
* Thu Nov 14 2024 Your Name <your.email@example.com> - 1.0.0-1
- Initial package# Create source tarball
cd build/linux/x64/release
tar czf ~/rpmbuild/SOURCES/flutter-flatseal-1.0.0.tar.gz bundle/
# Build RPM
cd ~/rpmbuild/SPECS
rpmbuild -ba flutter-flatseal.specsudo dnf install ~/rpmbuild/RPMS/x86_64/flutter-flatseal-1.0.0-1.fc38.x86_64.rpmCreate a PKGBUILD for Arch Linux.
Create PKGBUILD:
# Maintainer: Your Name <your.email@example.com>
pkgname=flutter-flatseal
pkgver=1.0.0
pkgrel=1
pkgdesc="Manage Flatpak permissions"
arch=('x86_64')
url="https://github.com/meta-flutter/flutter-flatseal"
license=('GPL3')
depends=('gtk3' 'flatpak')
source=("$pkgname-$pkgver.tar.gz")
sha256sums=('SKIP')
package() {
cd "$srcdir/$pkgname-$pkgver"
# Install binary
install -Dm755 flutter_flatseal "$pkgdir/usr/bin/flutter_flatseal"
# Install desktop file
install -Dm644 linux/flutter_flatseal.desktop \
"$pkgdir/usr/share/applications/flutter_flatseal.desktop"
# Install icon
install -Dm644 linux/flutter_flatseal.png \
"$pkgdir/usr/share/icons/hicolor/128x128/apps/flutter_flatseal.png"
}makepkg -si- Create AUR account at https://aur.archlinux.org
- Generate SSH keys and add to AUR
- Clone AUR repository:
git clone ssh://aur@aur.archlinux.org/flutter-flatseal.git
- Add PKGBUILD and .SRCINFO
- Commit and push
Create package.sh to build all formats:
#!/bin/bash
set -e
VERSION="1.0.0"
echo "Building Flutter Flatseal v$VERSION packages..."
# Build application
flutter build linux --release
# Build Snap
if command -v snapcraft &> /dev/null; then
echo "Building Snap package..."
snapcraft
fi
# Build AppImage
if [ -f appimagetool-x86_64.AppImage ]; then
echo "Building AppImage..."
./build-appimage.sh
fi
# Build Debian package
echo "Building Debian package..."
./build-deb.sh
echo "Package building complete!"
echo "Check the output directories for packages."-
Create release tag:
git tag -a v1.0.0 -m "Release v1.0.0" git push origin v1.0.0 -
Upload packages to GitHub Releases
- Snap Store:
snapcraft upload - Flathub: Submit PR to flathub/flathub
- AUR: Push to AUR repository
- PPA: Create Launchpad PPA
gpg --armor --detach-sign Flutter_Flatseal-x86_64.AppImagedpkg-sig --sign builder flutter-flatseal_1.0.0_amd64.debrpm --addsign flutter-flatseal-1.0.0-1.fc38.x86_64.rpm- Version Consistency: Use same version across all package formats
- Metadata: Include proper descriptions, categories, and keywords
- Icons: Provide icons in multiple sizes
- Desktop Integration: Proper .desktop files with correct categories
- Dependencies: Declare all required dependencies
- Testing: Test packages on clean systems
- Documentation: Include changelog and installation instructions
- Signing: Sign packages for security
- Repository: Maintain package build scripts in version control
- Automation: Use CI/CD for automated package builds