Learning Platform
Глоссарий Troubleshooting
Урок 12.04 · 15 мин
Начальный
snapflatpakappimagepacmanapkArchAlpineDocker

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 от обычных пакетов

SandboxedКаждое snap-приложение работает в изолированной среде. Не может читать файлы вне своих директорий без явного permission
Auto-updatesnap обновляется автоматически 4 раза в день. Это нельзя отключить полностью — Canonical считает это feature, многие — bug
Slower startupИз-за squashfs-mount и sandbox setup — приложение запускается заметно медленнее. Особенно болезненно для CLI-тулз
Self-containedВсе зависимости внутри snap. Не конфликтуют с системой. Минус — увеличенный размер и duplicate libraries
WARNING

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
TIP

Alpine использует musl libc вместо glibc. Это делает образы маленькими, но иногда ломает Python-пакеты с C-extensions (например, pandas/numpy медленно собираются). Поэтому для Python-проектов часто используют python:3.13-slim (на Debian) вместо python:3.13-alpine. Знать эту тонкость — must для junior DE, использующего Docker.


Сравнение пакетных менеджеров

Пакетные менеджеры — где встретится DE

Где какой менеджер используется на практике

aptDebian, Ubuntu, Mint, Pop_OS, Kali, Raspberry Pi OS. Самый частый на dev-серверах
dnfRHEL, Fedora, CentOS Stream, Rocky, Alma, Amazon Linux, Oracle Linux. Enterprise серверы и AWS
brewmacOS (основное использование), Linux (опционально). Personal dev машины
apkAlpine — основа Docker images. Постоянно встречается в FROM alpine
pacmanArch, Manjaro, EndeavourOS, SteamOS. Энтузиастские dev машины
snap, flatpak, AppImageUniversal форматы. Snap популярен на Ubuntu. Flatpak — на GNOME-системах. AppImage — для standalone apps

Что нужно знать DE на практике

Минимум:

  1. brew — для своей dev-машины (macOS).
  2. apt — для большинства Linux-серверов.
  3. 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).


Проверка знанийKnowledge check
Junior DE написал Dockerfile с `FROM alpine:3.20 ... pip install pandas` и удивляется почему сборка идёт 5 минут вместо 30 секунд как на Debian. В чём проблема и какое решение?
ОтветAnswer
Alpine использует musl libc вместо glibc. Многие Python-пакеты с C-extensions (numpy, pandas, scipy, lxml, psycopg2) распространяются как pre-built wheels — но эти wheels собраны под glibc, а не под musl. На Alpine pip не может использовать pre-built wheel, поэтому вынужден компилировать пакет из исходников. Для pandas это означает скачивание numpy + cython + huge C-code + 5+ минут компиляции. Решения: 1) Использовать python:3.13-slim вместо python:3.13-alpine — это Debian Bookworm slim, основан на glibc, все wheels работают, образ ~120MB vs ~50MB Alpine — приемлемая разница за стабильность. 2) Если ОБЯЗАТЕЛЬНО Alpine — установить musl-compatible wheels через apk add py3-pandas py3-numpy (системные пакеты Alpine) вместо pip. 3) Multi-stage build: компилировать на python:3.13-alpine с build deps, копировать в финальный alpine. На практике 90% Python-проектов используют python:3.13-slim — это де-факто стандарт.

Проверьте понимание

Результат: 0 из 0
Аналитический
Вопрос 1 из 5. Junior DE написал Dockerfile с `FROM python:3.13-alpine` и `RUN pip install pandas`. Сборка идёт 5 минут вместо 30 секунд как на Debian. В чём причина?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4