Саммит Ubuntu Один из наиболее распространенных моментов, вызывающих недовольство форматом упаковки Snap в Ubuntu, заключается в том, что он является запатентованным, но изучение документации показывает, что это неверно.
На саммите Ubuntu в прошлые выходные в Риге, Латвия, Рег Отдел FOSS поговорил с защитником разработчиков Ubuntu Игорем Любунчичем о Snap и особенно о некоторых мифах о нем: о том, что исходный код полностью закрыт, или он ограничен контролем Canonical, или что вы должны использовать Snap Store от Canonical, а также о множестве других заблуждений.
Если есть что-то, что мы ненавидим больше, чем плохое программное обеспечение, так это ложь. Как мы заметили, глядя на Fedora 39, священные войны в защиту программного обеспечения велись задолго до появления Linux, но, пожалуйста, хотя бы придерживайтесь фактов. Не надо придумывать злонамеренную ложь: реальность и так ужасна.
Дайте нам минутку, чтобы изложить здесь нашу позицию. Рег Служба FOSS не особенно пристрастна, когда дело касается дистрибутивов Linux. или свои упаковочные инструменты. Как и большинство компьютерных техников определенного возраста, после нескольких десятилетий работы со всевозможным программным обеспечением, этот стервятник ненавидит все это. Как говорится, любой софт — отстой.
Linux — это программное обеспечение, поэтому он отстой. И, как тривиальный вывод, все дистрибутивы Linux тоже отстой. Менеджеры пакетов тоже являются программным обеспечением и тоже отстой, но, по крайней мере, в большинстве дистрибутивов Linux он есть. Это лучше, чем не иметь его или, что еще хуже, иметь более чем один, как прекрасно иллюстрирует XKCD 927.
Мы не особенно сторонники Snap или антиFlatpak. Вашему корреспонденту лично нравится формат AppImage, который не требует дополнительных фреймворков, но, несмотря на наличие AppImageHub, этот формат не предоставляет инструментов для обновления программного обеспечения. Это остается на усмотрение приложения.
Поскольку все программное обеспечение отстой, единственная важная разница заключается в том, насколько это плохо. Через некоторое время вас больше всего будет волновать то, работает ли он, делает ли он то, что вам нужно, и надежен ли он.
Ваш стервятник провел первые десятилетия своей карьеры в службе технической поддержки, исправляя чужое программное обеспечение. Из этого он узнал одно свойство, которое снижает степень отстойности данного программного обеспечения: насколько легко понять, как оно работает.
Btrfs сложен, а его исправление тем более. Git может быть Действительно сложный, как следует из названия. (Да, «git» — это слово, а не аббревиатура или кодовое имя с существующим значением.) OStree — это Git для двоичных файлов, что делает его как минимум вдвое сложнее обычного Git, а Flatpak — это оболочка OStree.
Это означает не один, а два дополнительных уровня сложности: во-первых, оболочка чего-то сложного только скрывает сложность, но не устраняет ее. Во-вторых, вы не можете собрать ОС из Flatpaks, поэтому вам также понадобится OStree.
Итак, давайте разберем некоторые заблуждения, связанные с форматом и инструментами Snap. Это не практическое руководство – это краткий обзор некоторых менее очевидных вещей, о которых ненавистники не знают.
Распространение без Магазина
Пакет Snap — это просто «squashfs», как и образ системы на большинстве установочных носителей Linux. Снимки поставляются в виде двух файлов: само программное обеспечение внутри файла с именем <name>_<revision>.snap</revision></name>
и сопутствующий файл утверждений, который является цифровой подписью Snap. Canonical также документирует, как работают изменения.
Базовые файлы легко получить с помощью команды snap download
скорее, чем snap install
:
snap download firefox Fetching snap "firefox" Fetching assertions for "firefox" Install the snap with: snap ack firefox_3252.assert snap install firefox_3252.snap
Затем эти файлы можно скопировать на другой компьютер и установить без доступа к Snap Store, используя команды в выходных данных.
Игорь рассказал нам:
Установка без утверждений
snap ack
Команда сначала считывает подпись, но вы можете обойти это, если хотите.
snap install "downloaded snap" --dangerous
При этом Snap будет установлен без проверки его подписи. Он делает именно то, что говорит, но со значительным ограничением: Snaps устанавливаются с помощью --dangerous
не будет обновляться из Магазина.
Таким образом, можно распространять Snaps внутри своей сети, предотвращать их попытки связаться с Магазином и самостоятельно управлять обновлениями.
Контроль snapd
встроенный механизм обновления
Однако вы можете контролировать, как и когда ОС обновляет Snap, не игнорируя механизм утверждений. Игорь написал о том, как приостановить обновления Snap.
Вы можете удерживать Snap в течение определенного периода времени, на неопределенный срок или применить это только к определенным Snap и легко откатить его. Например:
snap refresh --hold Auto-refresh of all snaps held indefinitely.
Вы также можете заблокировать Snap API через брандмауэр, например:
sudo iptables -A OUTPUT -d api.snapcraft.io -j DROP
Запуск снимков без snapd
А .snap
file — это просто сжатая файловая система, содержащая программные файлы (а также библиотеки и т. д.) внутри обычного дерева каталогов, которое приложение, упакованное в Snap, видит в качестве корневого каталога. Snapd помогает настроить для этого пространство имен монтирования и добавляет ограничение безопасности с помощью Apparmor и seccomp.
Вы можете извлечь его содержимое и запустить его напрямую:
unsquashfs firefox_3252.snap Parallel unsquashfs: Using 20 processors 565 inodes (5428 blocks) to write [=====================/] 5428/5428 100% created 399 files created 149 directories created 166 symlinks created 0 devices created 0 fifos created 0 sockets ll squashfs-root/ total 80 drwxr-xr-x 7 igor igor 4096 lis 10 02:33 ./ drwxr-xr-x 10 igor igor 4096 lis 19 15:32 ../ drwxr-xr-x 5 igor igor 4096 lis 10 02:33 data-dir/ -rw-r--r-- 1 igor igor 32441 lis 10 02:33 default256.png -rw-r--r-- 1 igor igor 9146 lis 10 02:33 firefox.desktop -rwxr-xr-x 1 igor igor 2680 lis 10 02:33 firefox.launcher* drwxr-xr-x 2 igor igor 4096 lis 10 02:33 gnome-platform/ drwxr-xr-x 4 igor igor 4096 lis 10 02:33 meta/ -rwxr-xr-x 1 igor igor 3716 lis 10 02:33 patch-default-profile.py* drwxr-xr-x 4 igor igor 4096 lis 10 02:33 snap/ drwxr-xr-x 4 igor igor 4096 sij 19 2022 usr/
Если вы проверите динамические зависимости двоичного файла Firefox внутри Snap, вы увидите, что ему нужны файлы из корневой файловой системы:
ldd usr/lib/firefox/firefox-bin linux-vdso.so.1 (0x00007fff33cc5000) libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f6cf2c00000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6cf2e40000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6cf2be0000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6cf2800000) /lib64/ld-linux-x86-64.so.2 (0x00007f6cf300e000)
Внутри Snap этот корень является вашей базой (core18
или core20
или что-то еще). Но как только вы раздавите Snap, без ограничений безопасности, которые snapd
обеспечивает, когда Snap настроен и запущен, Firefox попытается получить доступ к корневым библиотекам, и это может привести к несогласованности в выполнении.
Например, у вас может быть Snap, внутри которого есть библиотеки GNOME 3.38, но на вашем хосте работает GNOME 3.32. Если вы разблокируете и попытаетесь запустить это приложение, оно может попытаться загрузить библиотеки с хоста, и это может вызвать несогласованность или, что еще хуже, сбой.
Чтобы предотвратить это, единственное, что вам нужно сделать, это установить LD_LIBRARY_PATH
переменная среды, чтобы сообщить программе, где найти ее библиотеки, и убедиться, что она использует их в первую очередь, а не копии ОС, что может привести к сбою в запуске.
LD_LIBRARY_PATH: ${SNAP_LIBRARY_PATH}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}:$SNAP/usr/lib:$SNAP/usr/lib/x86_64-linux-gnu
В общем, вам бы хотелось LD_LIBRARY_PATH
быть: /snap/"snap name"/
будет первый /lib
, /usr/lib
и другие обычные пути. Что касается остального содержимого, то firefox.launcher
файл подготавливает среду выполнения, а остальное, например firefox.desktop
, предназначены для интеграции с рабочим столом: значок, полное имя, ассоциации файлов и т. д. Они заставляют его выглядеть и работать лучше, но они не являются строго необходимыми.
Даже не обязательно извлекать содержимое Snap. Вы можете просто смонтировать сам файл Snap как устройство обратной связи — если хотите, только для чтения — но без ограничения пространства имен монтирования. И если среда не указывает приложению внутри Snap сначала искать свои библиотеки внутри Snap, вам все равно потребуется правильно установить путь к библиотеке.
Проксирование и кэширование пакетов Snap
Игорь рассказал нам, что если они не хотят иметь собственный полноценный фирменный Snap Store, клиенты могут вручную настроить прокси-сервер Snap, если они того пожелают. Опять же, у Canonical есть документация по этому вопросу, а также описание необходимого доступа к сети.
Также можно настроить кеширующий прокси-сервер Snap — это немного более простое упражнение, которое может оказаться подходящим для домашней сети, где вы хотите уменьшить пропускную способность загрузок с ваших компьютеров.
Запустите свой собственный Snap Store
Как мы уже говорили ранее, вы также можете игнорировать всю инфраструктуру Canonical и просто запустить свой собственный Snap Store. В прошлом году мы писали о сопровождающем Ubuntu Unity Рудре Сарасвате, который сделал именно это, среди своих многих других проектов. Нам сказали, что несколько организаций, использующих Ubuntu Core в производстве, делают это, и все инструменты находятся в репозиториях Ubuntu.
Canonical публикует довольно много документации по нему, включая создание вашего первого Snap и его создание на разных языках программирования. На саммите в этом году было несколько переговоров о том, как создавать Snaps, в том числе создание Snaps на планшете и автоматизация создания обновленных Snaps, на которых этот стервятник присутствовал, хотя это было выше его понимания.
Необходимо изучить немного новой терминологии, но она также документирована. Нам понравилось это объяснение:
- слоты являются провайдерами (это ресурсы, предоставляемые Snaps)
- пробки являются потребителями (они используют ресурсы, предоставляемые Snaps)
- интерфейсы являются местами встреч (они соединяют вилки со слотами)
Подведем итоги комментариев представителей Canonical Эль Рег Пообщавшись, они, похоже, больше всего на свете раздражены неверными характеристиками Snap Store и аргументами, что Snap — это заблокированная, закрытая проприетарная система.
Около пятнадцати лет назад появились заявления о том, что платформа Canonical для хостинга кода и управления проектами Launchpad является частной собственностью, поэтому компания очистила кодовую базу и опубликовала ее в 2009 году. Но, как сказали люди, с которыми мы говорили: «Никого это не волновало». Это собственный инструмент Canonical, и он просто бесполезен для кого-либо еще. Они сказали нам, что не хотят проходить через это снова.
Также отметим, что Red Hat движется в противоположном направлении и переходит от Bugzilla с открытым исходным кодом к закрытой облачной Jira – без какого-либо большого скандала.
Сам код snapd уже находится на GitHub как часть репозитория Snapcore Canonical. Формат упаковки — существующий, документированный, используемый большинством дистрибутивов. Инструменты, используемые для ограничения, — это существующие сторонние инструменты, которые уже используются в других дистрибутивах. Например, Debian и семейство SUSE также используют AppArmor, как описано в Arch wiki, тогда как его главный конкурент, SELinux, более сложен и в основном используется в Red Hat и его производных.
Итак, да, хотя собственный бэкэнд Snap Store от Canonical остается закрытым, формат Snap, программное обеспечение snapcore, интерфейс snapcraft.io и другие компоненты открыты. Вы можете разместить свой собственный Snap Store.
Не позволяйте гневным постерам на форумах убедить вас в обратном.
И наконец…
Так получилось, что этот стервятник работал и с Red Hat, и с SUSE, но в основном использует Ubuntu, как и с момента ее первого появления в 2004 году. Она работает и не мешает ему. Однако лишь бы для того, чтобы обновление было быстрее, он уже давно удалил snapd
и его вспомогательные инструменты со своего основного рабочего ноутбука и заменил его на deb-get, первоначально написанный Мартином Вимпрессом, создателем Ubuntu MATE. Ваш писец также использует очень блестящий менеджер пакетов Nala вместо Apt, отчасти потому, что он немного быстрее.
Ему бы хотелось отказаться от всех форм Unix в пользу чего-либо, кроме серверов, и вместо этого использовать RISC OS или Classic MacOS, но им, к сожалению, не хватает веб-браузера и сетевых подключений, не говоря уже о поддержке многоядерности и общей стабильности. .
Счет за участие в саммите Ubuntu в этом году был выставлен компанией Canonical, о чем этот хакер рад сообщить. Что касается открытости: Linux Foundation также пригласил его на саммит открытого исходного кода в этом году в Бильбао, а Red Hat позаботилась о его посещении Flock to Fedora в 2016 году в Кракове. Такая поддержка со стороны поставщиков позволяет нам тратить рекламные деньги на другие вещи и никогда не влияет на наше освещение: Рег всегда с нетерпением ждет возможности укусить руку, которая его кормит. ®