LINUX.ORG.RU

Как устроен Flatpak?

 


0

2

Суть вопроса проста. Интересует ваше представление о том, что есть в техническом плане Flatpak.

Например -

  1. это виртуалка

  2. это контейнер как Docker

  3. какой-то иной тип контейнера

  4. пакет, в виде образа и архива, который содержит приложение и все его зависимости.

  5. и так далее - ваше видение.

Особенно приглашаются люди, которым не нравится флатпак. Которые считают, что подобному подходу не место в линуксе. Очень интересует ваше текущее представление о том, чем же флатпак является технически.

И конечно, наиболее интересно услышать по этому вопросу мнение @theLORdweller, претендующего на звание ведущего здешнего эксперта. Ему, мягко говоря, есть что рассказать о различных дистрибутивах, пакетных системах и о флатпаке в частности. Ждем.

Особое пояснение. интересует именно ваше представление на данный момент. Не надо ссылок на документацию и подобного. Мне интересна картина представлений в головах людей.

Ответ на: комментарий от fernandos

Погоди, я просто хочу понять что думают люди и как думают. Потом можно будет делать выводы.

James_Holden ★★★★
() автор топика

Чего только не придумают...

XoFfiCEr ★★☆☆
()
Ответ на: комментарий от Sergius71

Последнее предложение в стартовом посте. Кури.

Но спасибо, статистика «что в головах людей» пополнена. Многие не читают стартовый пост. Как и документацию флатпака, наверняка.

James_Holden ★★★★
() автор топика
Последнее исправление: James_Holden (всего исправлений: 1)
Ответ на: комментарий от James_Holden

По мне так это типа виндового экзешника, который всю хрень за собой тянет. Плюсы и минусы по ссылке. У меня пара приложений из флатпака установлена. Брат жив.

Sergius71
()
Ответ на: комментарий от Sergius71

Flatpak – это современный прогрессивный формат самодостаточных пакетов для GNU/Linux

Мне кажется, они банально украли описание аппимеджа.

fernandos ★★★
()

Это:

  1. плохая идея

  2. попытка забандлить зависимости и поставить приложение ущербным ПМ в обход системного ПМ, что, естественно, ересь богонеугодная

  3. самое пока передовое их ходовых решений по изоляции пользовательских приложений друг от друга

Если бы они сосредоточились чисто на третьем пункте, было бы прекрасно. А так это еще один ПМ-вредитель.

t184256 ★★★★★
()
Ответ на: комментарий от Sergius71

По мне так это типа виндового экзешника, который всю хрень за собой тянет

Нет, это аппиммедж, флатпак продуманнее.

fernandos ★★★
()
Ответ на: комментарий от t184256

Вот, с тобой тоже интересно это обсудить. В целом я в курсе твоей точки зрения на ПМ, и как с нее выглядит флатпак - узнать очень полезно.

ересь богонеугодная

А можно вот тут раскрыть, почему так резко?

Если бы они сосредоточились чисто на третьем пункте, было бы прекрасно.

Хм. Интересно, что многие высказывают противоположное мнение - хаят именно за изоляцию.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от Sergius71

По мне так это типа виндового экзешника, который всю хрень за собой тянет

ты можешь использовать только системные библиотеки и тогда твой экзешник будет небольшой, и не будет зависимостей от сторонних библиотек…

fsb4000 ★★★★★
()
Ответ на: комментарий от t184256

Если бы они сосредоточились чисто на третьем пункте, было бы прекрасно.

А как это сделать? У них же изоляция через монтирование разрешенного внутрь песочницы. То есть система изоляции предполагает, что все в песочницах. И это требует наличия ПМ, который ставит в песочницы. Разве нет?

James_Holden ★★★★
() автор топика
Последнее исправление: James_Holden (всего исправлений: 1)

Это контейнер и пакетный менеджер в одном флаконе.

Kron4ek ★★★★★
()
Ответ на: комментарий от t184256

Если бы они сосредоточились чисто на третьем пункте, было бы прекрасно.

Третий пункт - это bubblewrap. Его можно и отдельно от flatpak использовать.

Kron4ek ★★★★★
()

Менеджер неймспейсов.

anonymous
()
Ответ на: комментарий от commagray

Его в виде bubblejail можно с AppImage использовать. Зачем тогда этот Flatpak нужен?

AppImage — более самодостаточные пакеты. Так еще и легко можно любой AppImage-пакет запустить в режиме portable (со всеми настройками и прочими программными файлами) с портативного диска.

SARS
()
Ответ на: комментарий от James_Holden

В целом я в курсе твоей точки зрения на ПМ, и как с нее выглядит флатпак - узнать очень полезно.

ПМ должен быть один, уметь все, менеджить все: систему, юзерский профиль, виртуалэнв, окружение каждого кусочка кода твоей машины. Флатпак тут как стим — набор костылей и подпорок, который системам с импотентным ПМ помогает, но ценой разведения второй системы абы как. Нафиг.

Интересно, что многие высказывают противоположное мнение - хаят именно за изоляцию.

Никто им не мешает ставить ровно тот же софт из дистрибутивных репов. Флатпак это изоляция ценой многих минусов, самый криминальный из которых — возомнение себя ПМом.

t184256 ★★★★★
()
Ответ на: комментарий от James_Holden

А как это сделать? У них же изоляция через монтирование разрешенного внутрь песочницы. То есть система изоляции предполагает, что все в песочницах. И это требует наличия ПМ, который ставит в песочницы. Разве нет?

Берется этот их bubblewrap и интегрируется одним концом в системный ПМ, другим в DE. Запускать изолированно дистрибутивный софт.

t184256 ★★★★★
()
Ответ на: комментарий от Kron4ek

Можно, но они его отдельно не пиарят и в нормальные ПМ не интегрируют.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

ПМ должен быть один

Это да, тут я спорить не буду. Больше одного их точно не нужно.

систему

Ну тут пожалуй все могут

юзерский профиль

Ставить приложения юзеру флатпак может. Управлять конфигами каким-то серьезным образом - нет. Но вот тут моя основная претензия к Nix - почему управление пакетами с ним тянет за собой засовывание всех конфигов в один файл? Почему я должен рулить конфигами через ПМ? Это же пакетный менеджер.

виртуалэнв

С этим да, буксование, как выявила предыдущая моя тема. Тут есть пакетные менеджеры языков, но для C/C++ с ними больше проблем чем пользы.

набор костылей и подпорок, который системам с импотентным ПМ помогает

Не согласен. Ну каких костылей. Это совершенно самостоятельная система, позволяющая ставить софт. То что он может соседствовать с другими ПМ и как бы помогает - это побочный эффект.

Берется этот их bubblewrap и интегрируется одним концом в системный ПМ, другим в DE

Вот тут самое интересное. Возьмем конкретно Nix. Как можно интегрировать bubblewrap в него?

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

Ставить приложения юзеру флатпак может.

Примотав скотчем другой ПМ все могут.

Но вот тут моя основная претензия к Nix - почему управление пакетами с ним тянет за собой засовывание всех конфигов в один файл? Почему я должен рулить конфигами через ПМ? Это же пакетный менеджер.

Ты не должен. Собственно, чистый Nix без home-manager и/или никаких конфигов менеджить не будет и не обучен даже, это все в надстройках.

С этим да, буксование, как выявила предыдущая моя тема. Тут есть пакетные менеджеры языков

и вот их уже три, ничего друг о друге не знающих и толком не могущих.

Не согласен. Ну каких костылей. Это совершенно самостоятельная система, позволяющая ставить софт. То что он может соседствовать с другими ПМ и как бы помогает - это побочный эффект.

Невероятных. Поставь мне юзерским или язычковым ПМ что-нибудь с зависимостью от хедеров ядра или openssl. Разверни это на пару сотен компов. Подожди уязвимости в openssl. Поплачь.

Вот тут самое интересное. Возьмем конкретно Nix. Как можно интегрировать bubblewrap в него?

Сделать не только nix build огороженным и изолированным, но и nix run. Прописать разрешения пакетам в метаданные, прижать ограничениями со стороны юзера. Будет у тебя nix run nixpkgs/release-20.09#chromium тебе хромиум из прошлого релиза не просто без засирания системы притягивать на разок со всеми старыми зависимостями, а еще и запускать насколько тебе/ему надо огороженно.

t184256 ★★★★★
()

Думаю, что-то вроде докера. В целом ничего против не имею но при наличии нормального пакета предпочту его. Меня устраивает традиционный формат распространения софта.

Legioner ★★★★★
()
Ответ на: комментарий от t184256

Примотав скотчем другой ПМ все могут.

Не обязательно другой. По сути флатпак это обертка над ostree. Можно сделать систему где все ставится через ostree, и такая система давно есть. Другой пакетный менеджер тогда не нужен.

Собственно, чистый Nix без home-manager и/или никаких конфигов менеджить не будет и не обучен даже, это все в надстройках.

И /etc не обязательно?

Поставь мне юзерским или язычковым ПМ что-нибудь с зависимостью от хедеров ядра или openssl. Разверни это на пару сотен компов. Подожди уязвимости в openssl. Поплачь.

Давай тут разделим. Зависимость от хедеров ядра - это скорее всего модуль ядра. Через pip он ставится не будет. ПМ язычков C - понятно, мы уже выяснили что тут беда.

От openssl - в случае с flatpak openssl бандлится в пакет не будет, она будет в рантайме. Соответственно я не вижу препятствий чтобы приложение с такой зависимостью установить юзеру и на пару сотен машин. Когда найдут уязвимость - обновят рантайм. В чем тут плач?

Сделать не только nix build огороженным и изолированным

Все равно у меня пока картина не сложилась. Для изоляции через bubblewrap надо чтобы в одном каталоге было chroot-подобное окружение содержащее программу со всеми зависимостями. Потом туда вовнутрь монтируется то что программа должна видеть по разрешениям. Насколько я понимаю, Nix распределяет файлы приложения и зависимостей не так.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

Можно сделать систему где все ставится через ostree, и такая система давно есть.

Можно, и она ужасна. Попытка наполовину перешагнуть пропасть между Nix и староверием заканчивается… ну, понимаешь.

И /etc не обязательно?

Да, сам Nix в /etc ничего не пишет, разве что собственные конфиги там ищет.

Давай тут разделим. Зависимость от хедеров ядра - это скорее всего модуль ядра. Через pip он ставится не будет.

А надо! Как мне питономодуль писать, которому константы оттуда нужны?

От openssl - в случае с flatpak openssl бандлится в пакет не будет, она будет в рантайме. Соответственно я не вижу препятствий чтобы приложение с такой зависимостью установить юзеру и на пару сотен машин. Когда найдут уязвимость - обновят рантайм. В чем тут плач?

В наличии отдельного рантайма, который кому-то отдельно обновлять. И так это адская работа, opensslи в одном классическом дистре обновить.

А что делать с менее попсовыми либами, в общий рантайм не попадающими?

Для изоляции через bubblewrap надо чтобы в одном каталоге было chroot-подобное окружение содержащее программу со всеми зависимостями. Потом туда вовнутрь монтируется то что программа должна видеть по разрешениям. Насколько я понимаю, Nix распределяет файлы приложения и зависимостей не так.

Это исключительно потому, что приложения 20ого века ожидают помойку в /. Для Nix изоляция / актуальна куда меньше, Nix-приложение и так знает, где в /nix/store лежат зависимости. И Nix знает.

Я про изоляцию хомяка, сети, звуковой подсистемы, смарткарт, вот этого всего.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Можно, и она ужасна

Чем? Я вижу только один крупный недостаток. Тройное дублирование. Флатпак дублирует своим рантаймом системные библиотеки. Разработка в toolbox контейнере опять все дублирует. Но если покумекать головой и немного отрезвить «приложения 20 века», то ostree все это способно решить.

Я про изоляцию хомяка, сети, звуковой подсистемы, смарткарт, вот этого всего

Я не пойму как bubblewrap будет например изолировать хомяк и давать доступ к конкретной папке в нем, если каждое приложение установленное через Nix не находится в изолированном chroot-подобном окружении.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от t184256

Для Nix изоляция / актуальна куда меньше, Nix-приложение и так знает, где в /nix/store лежат зависимости

Так в этом же и проблема. Приложение не изолировано на уровне файловой системы. Как дальше изоляцию делать? Любая изоляция типа «контейнер» предполагает что приложение сидит в своей полностью изолированной файловой системе, либо в образе, который монтируется, либо в каталоге который используется способом подобным chroot.

Иначе как ему тот же хомяк выборочно давать?

James_Holden ★★★★
() автор топика

Это жирная ненужная хрень

Ros ★★★★
()
Ответ на: комментарий от Ros

Одну прожку ставить смысла через него нет. Надо ставить все.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

Я не пойму как bubblewrap будет например изолировать хомяк и давать доступ к конкретной папке в нем, если каждое приложение установленное через Nix не находится в изолированном chroot-подобном окружении.

Системный корень - это само по себе chroot-подобное окружение, достаточное для использования с bubblewrap. Можно подмонтировать только нужные программе каталоги/файлы - например, /etc/app.conf, /usr, /home/username/.config и т.д.

Kron4ek ★★★★★
()
Ответ на: комментарий от Kron4ek

Так если мы подмонтируем в корень, то все программы какие установлены - получат доступ к одному и тому же. А надо - каждая программа к разному. Для этого каждая программа сама должна сидеть в «псевдокорне», куда будет все монтироваться индивидуально для нее и делаться «chroot».

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

Через bubblewrap можно монтировать отдельные части корня, необязательно весь корень целиком монтировать.

Kron4ek ★★★★★
()
Ответ на: комментарий от Kron4ek

А можно конкретнее. Вот возьмем обычный дебиан. Стоит обычный GIMP. Что и куда я должен смонтировать, чтобы он 1) запустился 2) увидел из /home только одну нужную папку?

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

В самом упрощенном виде это будет вот так выглядеть:

bwrap --dev-bind / / --tmpfs /home --bind "${HOME}"/dirname "${HOME}"/dirname gimp

И gimp в хомяке увидит только ${HOME}/dirname. Конечно, в данном примере изолируется только home, другие каталоги корня будут полностью видны. Но при желании можно куда больше каталогов изолировать.

Kron4ek ★★★★★
()
Последнее исправление: Kron4ek (всего исправлений: 2)
Ответ на: комментарий от fernandos

Либо компилять, либо статическая линковка, другие варианты непонятно зачем нужны
К тому же во флетпаке и снапе софта ничерта нет

Ros ★★★★
()
Ответ на: комментарий от Kron4ek

Да, в принципе это работает как надо.

Конечно, приложение «видит» все остальные приложения, но является ли это проблемой - спорный вопрос.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

Конечно, приложение «видит» все остальные приложения, но является ли это проблемой - спорный вопрос.

Ну, при желании остальные приложения можно скрыть, опять же, подмонтировав только определенный набор файлов, в том числе и только определенные бинарники.

Kron4ek ★★★★★
()
Ответ на: комментарий от Kron4ek

Ну как минимум тут возможна проблема - приложение с одними разрешениями может запустить любое другое со своими же разрешениями. Если оно весь корень видит.

Чтобы приложения так изолировать - это действительно буквально по файлику монтировать надо будет.

Не знаю пока насколько это оправдано по сравнению с тем чтобы сразу ставить приложения отдельно.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

Ну как минимум тут возможна проблема - приложение с одними разрешениями может запустить любое другое со своими же разрешениями. Если оно весь корень видит.

Чтобы приложения так изолировать - это действительно буквально по файлику монтировать надо будет.

Это да, придется выяснять какие файлы программе нужны для нормальной работы и монтировать только их, что не особо удобно.

С другой стороны, по моему не так уж страшно, что программа видит и может запускать другие программы в рамках своих прав, так что не уверен, что есть смысл настолько тщательно изолировать софт. Главное - изолировать файлы пользователя от программы.

Kron4ek ★★★★★
()
Ответ на: комментарий от Kron4ek

С другой стороны, по моему не так уж страшно, что программа видит и может запускать другие программы в рамках своих прав, так что не уверен, что есть смысл настолько тщательно изолировать софт.

Возможны сюрпризы. Хотелось бы чтобы было нельзя.

James_Holden ★★★★
() автор топика

Flatpak - это squashfs архив, в котором находится поставляемая программа и все необходимые для её запука библиотеки и их зависимости.

Этот архив монтируется в систему. И далее запуск приложения из flatpack, скорее всего, происходит через некоторый загрузчик, скрипт или приложение, которое проставляет переменные окржуения LD_PRELOAD_PATH и LD_LIBRARY_PATH для запускаемого из flatpack приложения.

anonymous
()
Ответ на: комментарий от Kron4ek

Из среды разработки, где запускать «программы программой» штатно надо, скайп какой-нибудь по ошибке дернется с полным доступом к хомяку. Или не по ошибке, а расширением, подготовленным злоумышленником.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от anonymous

Этот архив монтируется в систему. И далее запуск приложения из flatpack

Ну, вот интересный пост для статистики. Пример сильно искаженного представления, смешивающего Snap и старые тарболы. Без примеси флатпака.

James_Holden ★★★★
() автор топика
Ответ на: комментарий от James_Holden

Хомяк же все равно изолирован, даже если условный Skype и запустится, увидит только окружение текущей программы. Но я согласен, все равно неприятно было бы.

Kron4ek ★★★★★
()
Ответ на: комментарий от Kron4ek

увидит только окружение текущей программы

Если это среда разработки, тем более свободная, то я хочу чтобы она видела побольше. Надо же с проектами работать.

James_Holden ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.