LINUX.ORG.RU

Конейнер с приложением и либами, только нужными ей на конкретной машине

 , , ,


0

2

Всем привет.

Допустим, есть машина, которая не обновлялась последние 100 лет. На ней нужно установить новую софтину. Чтобы не обновлять всю ОС, делаем контейнер, в который помещаем саму софтину и либы, которые ей нужны. Но не все, а только которых нет на существующей (хостовой) системе, или которые нужно обновлять.

Как я это вижу. Создается пустой контейнер; логинимся в него. Изначально внутри конейнера (гостевая система) видна вся (хостовая) ФС, так что по сути гостевое окружение ничем не отличается от реальной хостовой ОС. Далее мы устанавливаем софтину и обновляем/доустанавливаем нужные либы. Все изменения записываются только в контейнере (гостевой ОС) и никак не отражаются на реальной (хостовой) системе (например, посредством UnionFS/aufs/OverlayFS). Когда нужно запустить программу, контейнер маппит все файлы/ресурсы/окружения из хостовой ОС + накладывает сверху (добавляет, подменяет) те, которые присущи только гостевой системе; а далее запускает софтину.

Смотрел Docker. Там всё начинается с FROM, который, как я понял, создаёт полностью новое окружение. Без FROM, как я понял, нельзя. А можно ли чтобы там базовым image была существующая система?

Если нет - что есть кроме Docker, с подобный функционалом?

★★★★★

Изначально внутри конейнера (гостевая система) видна вся (хостовая) ФС

Но зачем? Если контейнер один, то ставим LXC и оверхед в лишние 200-300-400Мб роли не сыграет. Если контейнеров много, то ставим Docker и тогда базовый контейнер будет общим и оверхед сведётся к тем же копейками. Это, ведь, сегодня даже не проценты дискового пространства. Это десятые и сотые доли процента.

KRoN73 ★★★★★
()

Такие пространные вопросы лучше начинать с описания проблемы, которую ты пытаешься решить.

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

Такие пространные вопросы лучше начинать с описания проблемы, которую ты пытаешься решить.

Так я ее описал.

Дистр - Gentoo. Кто пробовал обновлять Gentoo 5-летней давности, тот знает.

Софтина - Firefox.

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

Думаю с помощью напильника и синей изолетны можно сделать это в LXC. Как-то примерно так

none /var/lib/lxc/somename/rootfs aufs br=/var/lib/lxc/somename/rootfs_overlay=rw:/=ro 0 1

Ну и перед этим создать контейнер использующий /var/lib/lxc/somename/rootfs в качестве rootfs. ХЗ умеет-ли lxc-create создавать пустой контейнер, я такие вещи делаю копипастом конфига готового контейнера.
Кстати так-же можно создавать контейнеры на основе других контейнеров. Никакой чёрной магии.

Монтировать aufs лучше не в /etc/fstab, а сразу пред стартом контейнера, но когда я озабачивался подобной проблемой мне было лень разбираться как это сделать аккуратно.

И я таки не понимаю зачем всё это нужно.

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

Ты описал способ решения с кучей ограничений, а проблема—запустить свежий фаерфокс в старой генте. Ставь бинарь с сайта. В пятилетней генте поди еще ядро не умеет контейнеризацию.

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

Но зачем? Если контейнер один, то ставим LXC и оверхед в лишние 200-300-400Мб роли не сыграет.

Если откровенно - мое стремление к экономии и порядку.

И потом, 200-400Мб, если они будут в RAM это уже не копейки. Нужно проверять...

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

Идея интересная, подумаю над ней, спасибо.

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

Но зачем? Если контейнер один, то ставим LXC и оверхед в лишние 200-300-400Мб роли не сыграет.

Идея в том, чтобы сама ОС и была таким контейнером.

Вот человек написал, похоже, то, что мне нужно: Конейнер с приложением и либами, только нужными ей на конкретной машине (комментарий)

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

+ staseg

А бинарные сборки фокса на твоей системе не запускаются?

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

firefox-bin-49.0

...
DEPEND="app-arch/unzip"
RDEPEND="dev-libs/atk
	>=sys-apps/dbus-0.60
	>=dev-libs/dbus-glib-0.72
	>=dev-libs/glib-2.26:2
	>=media-libs/alsa-lib-1.0.16
	media-libs/fontconfig
	>=media-libs/freetype-2.4.10
	>=x11-libs/cairo-1.10[X]
	x11-libs/gdk-pixbuf
	>=x11-libs/gtk+-2.18:2
	>=x11-libs/gtk+-3.4.0:3
	x11-libs/libX11
	x11-libs/libXcomposite
	x11-libs/libXdamage
	x11-libs/libXext
	x11-libs/libXfixes
	x11-libs/libXrender
	x11-libs/libXt
	>=x11-libs/pango-1.22.0
	virtual/freedesktop-icon-theme
	selinux? ( sec-policy/selinux-mozilla )
"

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

В пятилетней генте поди еще ядро не умеет контейнеризацию.

В Генте ядро умеет то, что ты (ок - я) включил в него при компиляции.
Перекомпилить ядро - не проблема. Даже возможно получится обновить его на пару версий (если позволят старые пакеты).

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

Надо собрать волю в кулак и обновиться, и тогда не придётся лепить костыли.

Обновить очень старую генту - проще поставить снуля. Более оптимальное решение - частичный апгрейд нескольких пакетов. До сих пор так и делал. Занимает часа два. Требует наличия набора бубнов №3 и благосклонности звёзд, иначе есть риск вообще положить систему.

В подчинении есть несколько машин с Gentoo. Пользователи неприхотливы, и в идеале хотели бы чтобы ничего не менялось и просто работало. Оно и работает, пока в браузеры не добавят новые алгоритмы шифрования, скайпик не дропнет старый протокол и т. п.

Проблема не разовая. Пора искать нормальное решение.

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

Смотрел Docker. Там всё начинается с FROM, который, как я понял, создаёт полностью новое окружение. Без FROM, как я понял, нельзя. А можно ли чтобы там базовым image была существующая система?

Смотрите ВНИМАТЕЛЬНЕЕ - https://docs.docker.com/engine/userguide/eng-image/baseimages/

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

Занимает часа два. Требует наличия набора бубнов №3 и благосклонности звёзд, иначе есть риск вообще положить систему.
Проблема не разовая. Пора искать нормальное решение.

Сменить дистрибутив.
Серьёзно, зачем себя так мучить?

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

Смотрите ВНИМАТЕЛЬНЕЕ - https://docs.docker.com/engine/userguide/eng-image/baseimages/

Если я правильно понял по ссылке, то там инструкция как создать образ из существующей ОС. То есть файлы из установленной ОС будут скопированы в образ. Я правильно всё понял?

Мне нужно, чтобы ничего никуда не копировалось, а чтобы контейнер создался путём copy-on-write (на уровне файлов) тех файлов, которые я буду добавлять/изменять. Мне нужен diff от уже установленной системы и target, при том базовый образ - не образ, а существующая система.

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

Сменить дистрибутив.
Серьёзно, зачем себя так мучить?

Дело не в дистрибутиве, а в типе дистрибутива: rolling release. Это недостаток этого типа.

Кейс возникает раз в два года - не перевешивает остальные плюсы Gentoo.

Кроме того, я решение найду! :)

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

У меня оно на всякой несвежей каке запускалось

Хочешь сказать, что там статика? Не верю, но всё-таки попробую если что. Спасибо.

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

Есть ещё вариант, проще описанного выше, но работающий в пределах одной файловой системы.
Принцип такой же, как у rsnapshot, т.е. через cp -al.

не перевешивает остальные плюсы

Тогда ладно.
Просто со стороны выглядит странно держать роллинг, который обновляется очень редко.

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

ХЗ, так и не удосужился посмотреть, а сейчас уже удалил (в репы стали завозить актуальные версии лисы).

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

И потом, 200-400Мб, если они будут в RAM это уже не копейки.

Нет, в RAM там будут только нужные демоны, основные будут жрать столько же, сколько и на хосте, а обвязка измеряется обычно смешными десятками мегабайт от силы. В любом случае, какую бы систему контейнеризации ты не использовал, твой запрос в топикстарте касается только дискового пространства, процессы всё равно будут одинаково работать что в твоём варианте, что с Docker/LXC.

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

Если откровенно - мое стремление к экономии и порядку.

Экономии тут практически не будет, а вот порядка больше, когда у тебя используется нормальный код в контейнере без лишних извращений. Порядка больше будет с нормальными LXC/Docker :)

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

Сменить дистрибутив

Кстати, периодические проблемы с Docker и LXC были одними из последних соломинок, которые добили Gentoo на моих серверах :) Это после многих десятков машинолет использования... :D

Типа:

- http://juick.com/Balancer/2784167
- http://juick.com/Balancer/2822761

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

Просто со стороны выглядит странно держать роллинг, который обновляется очень редко.

Дома обновляю почти каждый день. А вот у родных поставил просто потому, что я знаю этот дистр, а учить особенности другого дистра - overkill.

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

Кстати, периодические проблемы с Docker и LXC были одними из последних соломинок, которые добили Gentoo на моих серверах :) Это после многих десятков машинолет использования... :D

Ну, тут я могу поумничать «а зачем было обновлять, если всё работало»?

У меня кейс чуть другой: я на тех машинах вообще стараюсь обновлять пореже.

Единственное что, есть еще и другой интерес. На работе развивают идею виртуализации и микросервисов. Пока что OpenStack да WMware, но про Docker и LXC тоже задумываются. Вот и хочу посмотреть на практике то, о чем на умных презентациях рисуют...

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

Ты скажи что за софтина - я тебе в CentOS ее соберу, и положу в каталог с программой не-LSB зависимости

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

> Софтина - Firefox.

На, держи. 32-бит/64-бит, не-LSB зависимостей нет (отломаны Dbus, aspell, PulseAudio, в 32-бит отломан SSE2). Не забудь включить dom.ipc.plugins.asyncdrawing.enabled, чтобы Flash Player в режиме VDPAU не «падал».

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

а зачем было обновлять, если всё работало

Затем, что оно _не_ работает :) И Docker, и LXC активно развиваются. Скажем, работать с docker напрямую без docker-compose сегодня страшное извращение. А старые версии с docker-compose не работают. И т.п.

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

какой-то кашерный юниксвей, проще оставить стабильную ветку, и да при наличии конфигов гораздо проще stage3 распаковать с установкой mate чем что-то мудрить. Самый геморр с установкой - ядроковыряние и настройка вcяких /etc/..

deity ★★★★
()

Почти то, что ты описал уже есть и называется snap пакетом. А Ubuntu Core это как раз то, что ты описал.

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

Сменить дистрибутив

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

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

какой-то кашерный юниксвей, проще оставить стабильную ветку, и да при наличии конфигов гораздо проще stage3 распаковать с установкой mate чем что-то мудрить. Самый геморр с установкой - ядроковыряние и настройка вcяких /etc/..

С технической точки зрения - всё правильно говоришь. Вот только будет ли это быстрее запуска одной команды

$ docker run ...
? Если оверхеда у docker'а будет и правда немного, то...

DevOps, чтоб он жил...

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

Вот только будет ли это быстрее запуска одной команды

будет - ты уже сутки тут пытаешься выполнить команду, ради интереса - да по#баться месяц, для дела проще stage3

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

ну, можно и genkernel. Но святое создать 4Мб ядро и ловить лулзы с добавлением новых железок - то флешки не читает, то кардридер, то ардуину не видет.

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