Snap, Flatpak, AppImage и другие: универсальные форматы
apt и dnf работают на «своих» дистрибутивах. Но что если хочется один формат пакетов, работающий везде? Эту нишу пытаются занять snap, flatpak, AppImage — три разных подхода к «универсальной упаковке».
Для DE это в большей степени контекстное знание: если ваш сервер на Alpine — там не apt и не dnf, а apk. Если на Arch — pacman. Понимать ландшафт нужно, даже если 95% времени работаете с apt/dnf/brew.
Snap — детище Canonical
Snap разработан Canonical (компанией за Ubuntu). На Ubuntu 22.04+ многие пакеты идут именно как snaps — даже стандартные firefox, chromium, code.
# Установить
sudo snap install postgresql-16
# Список установленных
snap list
# Поиск
snap find postgres
# Обновить (автоматически обновляются раз в день)
sudo snap refresh
# Удалить
sudo snap remove postgresql-16
Особенности:
Что отличает snap от обычных пакетов
Snap — спорная технология. На Ubuntu 22.04+ Firefox идёт ТОЛЬКО как snap (даже если ставите через apt — apt просто вызывает snap). Это многих раздражает: запуск Firefox через snap занимает 2-3 секунды против 0.5 секунды через обычный пакет. Многие переходят на flatpak Firefox или Debian (где snap нет).
Для DE: snap-серверы (например snap postgresql) — рабочее решение для maybe homelab, но для production обычно используют apt-пакеты или контейнеры.
Flatpak — конкурент
Flatpak — конкурент snap, более тесно связан с GNOME. Использует Flathub как центральный репозиторий.
# Установить flatpak
sudo apt install flatpak
# Добавить Flathub
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# Установить (typically GUI app)
flatpak install flathub org.signal.Signal
# Список
flatpak list
# Запустить
flatpak run org.signal.Signal
Flatpak больше про GUI-приложения, чем CLI. На сервере его смысла мало. Если используете Linux на десктопе и нужно стандартные приложения (Signal, Telegram, Discord) — часто проще через flatpak, чем через .deb.
AppImage — самый простой подход
AppImage — это просто один исполняемый файл, в котором упакованы все зависимости. Никакого менеджера, просто скачали, сделали chmod +x, запустили.
# Скачали file.AppImage
chmod +x ./MyApp.AppImage
./MyApp.AppImage
Идея: portable executable как в Windows. Удобно для:
- Software, которого нет в репах
- Старые версии (которых уже нет в стандартных репах)
- «Просто запусти и забудь»
Для DE: некоторые тулзы (например, OBS Studio, Etcher) официально распространяются как AppImage.
Pacman — пакетный менеджер Arch Linux
Arch Linux и его производные (Manjaro, EndeavourOS) используют pacman. Junior DE столкнётся с Arch редко — обычно у энтузиастов или Steam Deck (на SteamOS).
# Установить
sudo pacman -S firefox
# Обновить всю систему
sudo pacman -Syu
# Поиск
pacman -Ss firefox
# Удалить
sudo pacman -R firefox
Особенности:
- AUR (Arch User Repository) — community-репо с всем. Если что-то существует — оно есть в AUR. Доступ через
yayилиparu(AUR helpers). - Rolling release — нет «версий Arch». Всегда последний софт.
- Минимализм — Arch не ставит ничего лишнего, всё собирается из gardens.
Для DE: на Arch обычно не разрабатывают production-системы, но как dev-машина — популярен.
apk — пакетный менеджер Alpine Linux
Alpine — минималистичный дистрибутив (~5MB base image), очень популярен в Docker-контейнерах. apk — его пакетный менеджер.
# Установить
apk add postgresql
# Обновить
apk update
apk upgrade
# Поиск
apk search postgresql
# Удалить
apk del postgresql
Junior DE сталкивается с apk в Dockerfile:
FROM alpine:3.20
RUN apk add --no-cache python3 py3-pip
RUN pip3 install pandas
# --no-cache = не сохранять apk-кэш, экономит размер image
Alpine использует musl libc вместо glibc. Это делает образы маленькими, но иногда ломает Python-пакеты с C-extensions (например, pandas/numpy медленно собираются). Поэтому для Python-проектов часто используют python:3.13-slim (на Debian) вместо python:3.13-alpine. Знать эту тонкость — must для junior DE, использующего Docker.
Сравнение пакетных менеджеров
Где какой менеджер используется на практике
Что нужно знать DE на практике
Минимум:
brew— для своей dev-машины (macOS).apt— для большинства Linux-серверов.apk— для Dockerfile с Alpine.
Полезно:
dnf— если работаете с AWS (Amazon Linux), Cloudera, Oracle.- Понимание snap/flatpak — встретите на Ubuntu Desktop.
Не нужно:
- Изучать
pacmanдетально (если только Arch не ваш daily driver). - Изучать AppImage внутренности (это просто chmod +x && run).
DE-сценарий: Docker base images
Выбор base image в Dockerfile — alpine vs slim vs ubuntuКогда выбираете base image для Docker, влияет напрямую:
# Вариант 1: Alpine — самый маленький (~50MB final image)
FROM python:3.13-alpine
RUN apk add --no-cache postgresql-client
# Плюс: маленький. Минус: musl libc, могут быть проблемы с numpy/pandas
# Вариант 2: Debian slim — компромисс (~120MB final)
FROM python:3.13-slim
RUN apt-get update && apt-get install -y postgresql-client && rm -rf /var/lib/apt/lists/*
# Плюс: glibc, всё работает. Минус: больше места
# Вариант 3: Ubuntu/RHEL UBI — больше всего (~400MB+)
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y python3.13 postgresql-client
# Плюс: «знакомая» среда. Минус: большой размер
Для большинства Python-проектов DE — python:3.13-slim. Если важен размер — python:3.13-alpine (но проверьте, что все зависимости работают). Полные Ubuntu/RHEL — только если есть жёсткое compliance требование.
Установка нескольких менеджеров параллельно
На одной машине могут жить параллельно:
# Ubuntu 26.04 — apt по умолчанию
sudo apt install ripgrep
# Можно ещё brew (Linuxbrew)
brew install ripgrep
# Будет в /home/linuxbrew/.linuxbrew/bin/
# Можно ещё snap
sudo snap install ripgrep
# Они не конфликтуют — разные пути. Какой запустится — зависит от PATH
which rg
# /usr/bin/rg (если apt-версия раньше в PATH)
Это полезно когда apt-версия устарела, и нужна свежая — ставите через brew или snap, и они «перебивают» по PATH.
Попробуй сам
# 1. На Ubuntu — посмотри, что есть snap
snap list
# Вероятно видите firefox, chromium, snapd
# 2. Поиск через snap
snap find postgres
# 3. Запуск Alpine в Docker — попробуй apk
docker run -it --rm alpine:3.20 sh
# Внутри:
apk update
apk add curl jq ripgrep
which jq
# /usr/bin/jq
exit
# 4. Запуск Arch в Docker — попробуй pacman
docker run -it --rm archlinux:latest bash
# Внутри:
pacman -Syu --noconfirm
pacman -S --noconfirm htop ripgrep
which htop
exit
# 5. Сравни размеры разных base images
docker pull alpine:3.20
docker pull debian:13-slim
docker pull ubuntu:24.04
docker pull rockylinux:9
docker images | head -10
# Alpine ~5MB, Debian slim ~80MB, Ubuntu ~80MB, Rocky ~200MB
Cross-link: предыдущий урок 03 — brew. Модуль 14 — systemd работает на всех дистрах (apt, dnf, pacman), но конкретные unit-файлы могут отличаться. Модуль 17 — Docker и контейнеры (будет упомянуто в production-bash).