AppImage — зручний формат для портативних застосунків у Linux. Якщо ви хочете роздавати власні або внутрішні збірки, безпечно оновлювати їх і красиво додавати до меню — зробимо локальний репозиторій AppImage з підписуванням, автооновленням через zsync та інтеграцією з робочим столом. Обіцяю: усе реально зробити з нуля у звичайному терміналі Linux 🚀
Що таке локальний репозиторій AppImage і навіщо він
Це проста HTTP‑тека з вашими *.AppImage, де додатково лежать підписи (GPG), контрольні суми та файли *.zsync для швидких дельта‑оновлень. Користувачі завантажують застосунки напряму або система оновлює їх автоматично. Без складних серверів.
Крок 1. Підготуйте структуру каталогу
Створимо місце для репозиторію та перший реліз застосунку. Далі всі приклади команд — це чесні linux команди, їх зручно виконувати в терміналі Linux.
Крок 2. Підписування AppImage (GPG) і контрольні суми
Підпис — це ваша гарантія цілісності. Користувачі можуть перевірити, що файл не було підмінено. Якщо у вас ще немає ключа GPG:
Підписуємо реліз і публікуємо відкритий ключ разом із контрольними сумами:
Перевірка на клієнтській машині виглядає так:
Крок 3. Ввімкніть автооновлення через zsync
Для швидких оновлень AppImage використовує AppImageUpdate та метадані zsync. Потрібно згенерувати *.zsync і (якщо ви збираєте свій AppImage) вбудувати адресу оновлень у заголовок.
Якщо ви самі збираєте AppImage, на етапі створення вбудуйте інформацію про оновлення (приклад для appimagetool):
Клієнтське оновлення виконується так (через appimageupdatetool):
Важливо: якщо ви лише «перехостите» сторонні AppImage без збудованої Update Information, дельта‑оновлення можуть бути недоступні. Тоді оновлення — звичайна заміна файлу.
Крок 4. Роздаємо репозиторій по HTTP
Найшвидший старт — вбудований сервер Python (зручно для тесту):
Для постійного доступу краще налаштувати Nginx:
Крок 5. Інтеграція з меню робочого столу
Щоб ваш застосунок з'явився в меню, достатньо .desktop‑файла та іконки. Це не складно навіть без додаткових утиліт GUI Linux.
Тепер «MyApp» з'явиться у меню запуску. Якщо ні — перелогіньтесь.
Автоматичні оновлення через systemd (user)
Зробимо маленькі bash скрипти для масового оновлення та ввімкнемо автоматизацію задач таймером systemd.
Готово: ваші AppImage оновлюватимуться раз на добу. Це чиста автоматизація задач без зайвих залежностей.
Альтернативні способи
- Без zsync: просто публікуйте новий MyApp-2.0.AppImage і оновлюйте символічне посилання MyApp-latest.AppImage. Клієнти перекачують повний файл.
- Внутрішня мережа: можна роздавати репозиторій через Samba/NFS, але для AppImageUpdate потрібна HTTP‑доступність .zsync.
- Інтеграція через AppImageLauncher: він сам інтегрує та пропонує оновлення (де підтримується). Див. розділ нижче.
GUI-спосіб: AppImageLauncher
AppImageLauncher додає зручну інтеграцію в меню, керує місцем збереження та може запускати оновлення. Для багатьох дистрибутивів є пакети. Шукайте «AppImageLauncher» у вашому дистро або на GitHub. Після встановлення просто відкрийте AppImage — майстер інтегрує його в систему. Це найпростіший шлях у світі GUI Linux 🧁
FAQ
Чому appimageupdatetool каже «No update information»?
У вашому AppImage не вбудовано APPIMAGE_UPDATE_INFORMATION. Це треба робити під час збирання (через appimagetool). Для «чужих» AppImage автооновлення може бути недоступне.
zsync отримує 404 або не знаходить файл
Перевірте, що URL у *.zsync (параметр -u під час zsyncmake) вказує на фактичний шлях до AppImage на сервері. Також перевірте права доступу Linux до файлів і що веб‑сервер віддає їх коректно.
Іконка не відображається в меню
Переконайтеся, що Icon=myapp збігається з назвою файлу іконки без розширення та що вона лежить у правильній темі іконок (наприклад, ~/.local/share/icons/hicolor/256x256/apps/myapp.png). Оновіть кеш: gtk-update-icon-cache або перелогіньтесь.
Файл не запускається
Задайте біт виконання: chmod +x MyApp.AppImage. Якщо з мережевої теки — переконайтеся у довіреності шляху або скопіюйте в локальний каталог.
Як перевірити підпис?
Імпортуйте KEYS.asc, далі gpg --verify підпис *.sig проти файлу AppImage. Для зручності публікуйте відбиток ключа (gpg --fingerprint) на сайті.
Порада від Kernelka
Версії зберігайте з чіткою семантикою (1.0, 1.1.1), а посилання «latest» тримайте символічним. Так простіше робити відкат, якщо щось пішло не так. І пам'ятайте: невеликі bash скрипти рятують купу часу 😉
Підсумок
- Створили структуру локального репозиторію й перший реліз.
- Налаштували GPG‑підпис та контрольні суми для безпеки.
- Додали zsync і (за потреби) вбудували Update Information.
- Роздали файли по HTTP через Python або Nginx.
- Інтегрували застосунок у меню через .desktop та іконку.
- Увімкнули автооновлення з appimageupdatetool і systemd‑таймером.
- Показали GUI‑варіант із AppImageLauncher.

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.