LINUX.ORG.RU
ФорумTalks

Поттеринг: «Давайте заменим пакетный менеджер подтомами btrfs»

 ,


1

6

Сабж

The scheme we propose is built around the variety of concepts of btrfs and Linux file system name-spacing. btrfs at this point already has a large number of features that fit neatly in our concept, and the maintainers are busy working on a couple of others we want to eventually make use of.

[…]

app:<vendorid>:<runtime>:<architecture>:<version> — This encapsulates an application bundle. It contains a tree that at runtime is mounted to /opt/<vendorid>, and contains all the application's resources. The <vendorid> could be a string like org.libreoffice.LibreOffice, the <runtime> refers to one the vendor id of one specific runtime the application is built for, for example org.gnome.GNOME3_20:3.20.1. The <architecture> and <version> refer to the architecture the application is built for, and of course its version. Example: app:org.libreoffice.LibreOffice:GNOME3_20:x86_64:133

[…]

  • We want a unified scheme, how we can install and update OS images, user apps, runtimes and frameworks.
  • We want a unified scheme how you can relatively freely mix OS images, apps, runtimes and frameworks on the same system.
  • We want a fully trusted system, where cryptographic verification of all executed code can be done, all the way to the firmware, as standard feature of the system.
  • We want to allow app vendors to write their programs against very specific frameworks, under the knowledge that they will end up being executed with the exact same set of libraries chosen.
  • We want to allow parallel installation of multiple OSes and versions of them, multiple runtimes in multiple versions, as well as multiple frameworks in multiple versions. And of course, multiple apps in multiple versions.
  • We want everything double buffered (or actually n-fold buffered), to ensure we can reliably update/rollback versions, in particular to safely do automatic updates.
  • We want a system where updating a runtime, OS, framework, or OS container is as simple as adding in a new snapshot and restarting the runtime/OS/framework/OS container.
  • We want a system where we can easily instantiate a number of OS instances from a single vendor tree, with zero difference for doing this on order to be able to boot it on bare metal/VM or as a container.
  • We want to enable Linux to have an open scheme that people can use to build app markets and similar schemes, not restricted to a specific vendor.

    […]

The future is going to be awesome!

★★★★★

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

http://capec.mitre.org/data/definitions/132.html - это один из примеров. Они (симлинки) скорее способствуют, итак непомерному, бардаку в дистрибутивах.

Вроди бы, да же есть альтернатива - вские AuFS и UnionFS, НО нет поддержки файлов с одинаковым именем в одном каталоге.

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

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

Кто запрещает? Где этот негодяй?

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

Интересно, что мешает сейчас применять такой подход? Симлинки+чрут или неймспейсы есть.

Ну-ка расскажи мне, как сделать так, чтобы firefox, глядя на несуществующий /usr/lib64/libgtk-x11-2.0.so.0, видел файл /pkgs/gtk-2.24-2.24/build/image/usr/lib64/libgtk-x11-2.0.so.0, а глядя на несуществующий /usr/lib64/libglib-2.0.so.0 - видел /pkgs/dev-libs/glib-2.40.0/build/image/usr/lib64/libglib-2.0.so.0?

shatsky ★★
()

Ась? Подобная идея приходила хоть раз любому пользователю линукса.

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

только завязанный на btrfs зачем-то.

Гыгы. За тем же, зачем и udev не бывает без journald.

Shadow ★★★★★
()

Как это вообще должно работать? Так?

1. Ввожу я в терминале firefox.

2. С помощью cgroups(?) создается изолированное окружение с отдельной памятью, процессором и пустой ФС

3. Для этого окружения конструируется собственная ФС - результат скрещивания полсотни отдельных маленьких ФС, каждая из которых это библиотека или фреймворк (gtk, libpng, ...) - всё, что потребуется для запуска браузера.

4. В этом окружении запускается исполняемый файл

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

А зачем ему смотреть на несуществующие файлы? Пусть юзает /pkgs/gtk-2.24-2.24/build/image/usr/lib64/libgtk-x11-2.0.so.0 и /pkgs/dev-libs/glib-2.40.0/build/image/usr/lib64/libglib-2.0.so.0

goingUp ★★★★★
()

Правильно ли я понимаю, что это позволит создать пакет один раз - а пользоваться им сможет любой дистрибутив?

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

чтобы firefox, глядя на несуществующий /usr/lib64/libgtk-x11-2.0.so.0

Когда у разработчиков либ и фреймворков всё хорошо, то должно быть что-то типа «$LD_LIBRARY_PATH/libgtk-x11-2.0.so»

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

Нет никакой помойки. Кто юзает сильноумные надстройки (костыли), должен страдать.

pkg_add/addpkg десятилетиями нормально работали и тянули бинарные зависимости. А то, что каждый «вендор» себе выдумывает новое смешное название управления пакетами, проблемы вендора. Ну так RH же!

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

Я как понял он у меня идею украл ?

Что не патентовал ? Сейчас бы затроллил жёстко и зарубил. :-)

AS ★★★★★
()

В контексте больших кластеров VM-ов просто охрененный план. Наконец-т Поттеринг делом занялся, а не ломанием работающих (!) вещей.

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

В некоторых случаях даже нужна ext3, например.

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

И как его заставить это делать? Линковщик ищет либы в заданных директориях. Перечисление ${PKG_PATH}/lib для всех установленных пакетов в /etc/ld.so.conf скажется на производительности. И линковщик libc - далеко не единственный компонент системы, прибитый гвоздями к концепции «содержимое пакетов раскидано по общей ФС».

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

Я думаю, понадобится какой-нибудь враппер типа pkg-exec <пакет> <путь к бинарнику в пакете>. Только, во-первых, сишным линкером проблема не исчерпывается. Во-вторых, остается вопрос, как задействовать враппер в описаниях служб системы инициализации, .desktop-файлах и т. п.

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

Зачем нужен этот костыль да еще и в качестве стандарта?

Это не костыль. Это красивое решение, делающее множество костылей ненужными.

Можно же просто собирать разные версии в разные каталоги?

Проблема не в этом, а в том, как их после этого запускать. См. сообщения выше.

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

Во-вторых

Вот мне и кажется, что Поттеринг хочет целиком переписать world, но всё равно всё останется по-старому, только названия сменятся.

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

В оригинале — порядка 5 маленьких ФС, не больше. Библиотеки объединены в крупные рантаймы (или фреймворки — то же самое, но debug-версия).

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

Поц — всего лишь исполнитель, инструмент в руках красношляпого менеджмента.

Ну значит и менеджмент за компанию

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

А как тогда насчет маленьких либ? Если их объединить по какому-то критерию и у одной из них появится новая версия - начнется кошмар

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

We want a fully trusted system, where cryptographic verification of all executed code can be done, all the way to the firmware, as standard feature of the system.

Ох, как Большой Брат-то обрадуется. Зонды и кактусы на всех уровнях!

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

unionfs?

В мэйнлайн ведре его нет.

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

shatsky ★★
()
Последнее исправление: shatsky (всего исправлений: 1)
Ответ на: комментарий от shatsky
$ ldd /home/user/test2/bin/php 
	linux-vdso.so.1 =>  (0x00007fff67bc4000)
	libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007faad45e5000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007faad42df000)
	libxml2.so.2 => /home/user/test/lib/libxml2.so.2 (0x00007faad3f86000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007faad3d82000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007faad39bc000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007faad37a2000)
	/lib64/ld-linux-x86-64.so.2 (0x00007faad4825000)

Обращать внимание на libxml2

$ set | grep PKG
$ set | grep LD_
            completions="$COMMON_OPTIONS $BUILD_OPTIONS"
libxml2 собрал с --prefix=/home/user/test. пыхпых с ./configure --with-libxml-dir=/home/user/test --prefix=/home/user/test2. Все манипуляции включая make install делал не под рутом, так что /etc/ld.so.conf нетронут (проверял). Я так когда-то на шаред хостинге ставил squid в хомяк со сборкой нужных либ. Под юзером.

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

этот дебил правда не понимает, что ресурсы в одном месте это одна из причин, по которой люди используют *nix?

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

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

возможно знать каждый файл в своей ОС

мм, полезное знание. Мне оно в работе, правда, никогда не было нужно, но тебе лучше знать. /var/log/* по ночам заучиваешь тоже?

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

Ну может слегка просесть. А вообще бы тесты увидеть.

И первоначальный вопрос был «как?». Я показал как. Достаточно приемлемое решение. Ещё бы добавить сюда какую-нибудь FUSE-фс, позволяющую показывать только нужные файлы, например, для защиты $HOME.

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

тебе оно в работе может и не нужно, а индексатору - нужно.

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

Это bash completitions, к вопросу отношения не имеют. Я не в курсе, как линкер ее находит, но работает - факт, можешь сам проверить, все опции сборки я указал. Может как-то в бинарь статично зашит путь. Что по твоему делают опции сборки --with-... ?

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

Что по твоему делают опции сборки --with-... ?

Я думал, что они при формировании мейкфайла вызывают добавление к командам компиляции аргумента, явным образом задающего корень для поиска заголовков сооветствующей либы. Т. е. на рантайм не влияют. Надо будет поэкспериментировать.

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

Чтобы могло собраться. Мне помнится, я в аналогичной ситуации при запуске потом еще указывал дополнительный LD_LIBRARY_PATH, без этого не работало.

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

И чтобы от винды отличий было поменьше.

В винде все намнгого изящнее. При запуске любой програмы всё затемняется и появляется окошко «а можно мне полный контроль над твоим анусом?». Ты привычно жмешь «да, да, отъ***сь уже». И все довольны - пользователи - потомучто с правами все также легко и приятно как в винCE-вин98. А майкрософт - потомучто можно на конференциях говорить о современных технологиях защиты

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

Можно враппер сделать и более прозрачным. Будет исполнимый файл firefox в /usr/bin, который будет скриптом-конфигом для какого-нибудь /usr/bin/makeenv. В конфиге будет перечислен путь к бинарнику нужной версии, нужные версии библиотек и т.д. и т.п. Пользователи могут иметь и свои скрипты с отличной версией.

.desktop-файлы, я так понимаю, не потребуют никакой модификации.

Службы инициализации и прочее базовое системное можно оставить работающим по-старинке.

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