SquashFSВ мире Linux всё построено на динамических зависимостях и перекрестных источниках, сверху накладывается сложная система прав и атрибутов и добивается зоопарком дистрибутивов, где всё находится в разных местах и устроено по-разному - в связи с этим программу нужно именно "собирать".
Для серверов это вполне ок, оно под серверные задачи и автоматизацию задизайнено, но для десктопов это настоящий барьер. Вот у тебя всё собралось и установилось и.. что? И всё. Для большинства на этом эксперименты с Linux заканчивались - есть небольшой набор предустановленных программ, но скачать где-то нужную программу под Linux - нет, новичек ищет "exe для Linux", не находит таковых и понимает, что делать в системе нечего. А если и находит, то что-то вроде "импортируйте ключ разработчика, добавьте наш репозиторий в apt source list, откройте терминал".. аа.. ээ.. И это замкнутый круг: пользователям не хватает программ, производителям не для кого делать поддержку.
Проще говоря, Portable формат для Linux долгое время практически отсутствовал и это тормозило его распространение на десктопах, прогресс последних лет в становлении Linux в роли не только нормальной рабочей станции, но и даже игровой платформы связываю во многом именно с развитием portable инструментария. Здесь мы приходим к нашему топику.
SquashFS - сжатая файловая система c доступом только на чтение. Изначально цель была в том, чтобы оптимизировать прошивки всяких роутеров/IoT/маломощного оборудования - данные занимают меньше места и максимально оптимизировано чтение ценой невозможности записи: убрана система прав, Inodes, события, атрибутика - всё максимально порезано и упрощено. В добавок к этому вы получаете гарантию целостности данных и ту самую портируемость. По сути дистрибутив программы становится монтируемым образом, эдаким .iso
Все Live CD/USB - это SquashFS, snap-пакеты в Ubuntu (все зависимости внутри) - SquashFS, Flatpak приложения, AppImage, Docker, Podman, системные Timeshift-снапшоты. И самое что нам интересное - игры наконец получили возможность распространяться в виде готового образа! Valve в своей SteamOS вовсю использует слои со SquashFS, да и Android кстати свои иммутабельные разделы вроде /system и /vendor тоже монтирует как SquashFS.
Тот же принцип у App в MacOS, но там своя разработка, хотя принцип тот же - программа со всеми зависимостями запекается и становится readonly-образом.
Создаем образ с максимальным сжатием (xz):
mksquashfs myapp myapp.squashfs -comp xz
Смотрим данные
unsquashfs -l myapp.squashfs
Монтируем
mount -t squashfs myapp.squashfs /mnt/squash
Для работы не из под root понадобится FUSE (пакет: squashfuse)
squashfuse myapp.squashfs ~/squash
Размонтируем
fusermount -u ~/squash
Распаковать образ:
unsquashfs myapp.squashfs
Сжатие: gzip|lzo|lz4|xz|zstd (по умолчанию gzip)