current tty as console in CT [message #51757] |
Sat, 08 November 2014 06:06 |
|
Привет!
Обычно контейнер описывают как chroot на стероидах. Но chroot получает в качестве stdin и stdout текущий терминал. И поэтому в нём работают даже графические программы (framebuffer). Вот и для контейнера хочется такой же режим.
Для checkpoint/restore эта фича не совсем подходит и лучше сделать виртуальный framebuffer в CT, но для DESKTOP будет вполне хороша и должна быть проще в реализации.
Но вот как этого добиться? Как избавиться от namespace для устройств tty, console, vcs, vcsa, fb? Может разработчики подскажут?
Для чего фича нужна? Например, для запуска в контейнере android
В Paralles (http://habrahabr.ru/company/parallels/blog/174211/) под руководством master1981 (kir?) в 2012-2013 году два студента из кафедры МиИТ Академического университета Санкт-Петербург повторили работу http://systems.cs.columbia.edu/projects/cells/build/ Но там используется ядро 3.1 с доработткой device namespace так, что для всех контейнеров доступен framebuffer. Но только для foreground CT вывод реально осуществляется на экран, а для остальных CT вывод идёт просто в память.
Реализация довольно сложная и не подходит для checkpoit/restore. Поэтому для начала хочется subj -- иметь возможность избавиться в некоторых контейнерах от виртуализации tty и научиться запускать в CT графические программы (framebuffer).
Любая подсказка будет принята с благодарностью.
PS: правильный и длинный путь -- это реализация в CT spice-устройств. Тогда и checkpoint/restore будет с этим работать. И будут звук, принтер...
|
|
|
Re: current tty as console in CT [message #51759 is a reply to message #51757] |
Sat, 08 November 2014 12:05 |
|
Оставил запрос о помощи в bugzilla (https://bugzilla.openvz.org/show_bug.cgi?id=3115). Может разработчики что подскажут.
А для начала решил виртуализировать /proc/cmdline для CT. Сейчас там только quiet. А хочется указать патаметры в NNN.conf. Типа PROC_CMDLINE="бла-бла-бла". Ибо у меня TZ, LANG, CODEPAGE, UNICODE и другие параметры системы указываются именно в параметрах загрузки. Можно конечно исправить и в другом месте, но это уже разная логика в основной системе и CT.
Показ /proc/cmdline осуществляется в функции cmdline_proc_show(). Соответственно надо понять, как выделить память для cmdline в CT и установить это значение из vzctl
|
|
|
Re: current tty as console in CT [message #51761 is a reply to message #51759] |
Thu, 13 November 2014 02:06 |
|
Реализовал эту фичу, только в vzctl назвал как --boot-cmdline. Можно сконфигурировать с помощью vzctl как
vzctl set XXX --boot-cmdline "string" --save
Сохраняется и восстанавливается при suspend/resume. Фича может и так себе, но для разгона -- самый раз. Патчи для ядра и vzctl 4.8 выложил в google drive ( https://drive.google.com/file/d/0B35PjbLHNzyqdUI1OFNURGZiQjg /view?usp=sharing).
Далее хочу реализовать для vzctl параметр --boot-initprog, чтобы указать программу, которую запускать как init. Сейчас vzctl перебором пытается запустить /sbin/init, /etc/init, /bin/init и это никак не конфигурируется. Кроме того, в других местах проверяются свойства только /sbin/init. При загрузке реального ядра можно указать в загрузчике параметр init=/bin/bash
|
|
|
|