OpenVZ Forum


Home » International » Russian » vzctl exec. Bug?
vzctl exec. Bug? [message #34283] Sun, 21 December 2008 11:38 Go to next message
Pilat is currently offline  Pilat
Messages: 8
Registered: November 2006
Junior Member
День добрый коллеги!

Получил весьма неожиданный результат при выполнении команд внутри VE с помощью exec с хост системы.

# vzctl exec 1101 "echo ~"
/

Естественно, что весь софт, который использует хомник пишет свои файлы "не туда". Первичные проблемы возникли с gpg & wget.

Внутри VE естественно всё нормально.
vzctl enter 1101
entered into VE 1101
# echo ~
/root

Ядро Убунтовское(8.04.1) стандартное:
2.6.24-19-openvz #1 SMP Wed Aug 20 22:07:43 UTC 2008 x86_64 GNU/Linux

VE тоже Убунта 8.04.1, самосбор, без особых модификаций.

# vzctl --version
vzctl version 3.0.22

Какие будут соображения, как с бедою великою сладить?

[Updated on: Sun, 21 December 2008 13:45]

Report message to a moderator

Re: vzctl exec. Bug? [message #34284 is a reply to message #34283] Sun, 21 December 2008 12:24 Go to previous messageGo to next message
Pilat is currently offline  Pilat
Messages: 8
Registered: November 2006
Junior Member
Пофиксил явным выставлением HOME, перед выполнением команды.
Т.е. так работает:
vzctl exec 1101 'HOME=/root; echo ~'
/root

Другой вариант так:
vzctl exec 1101 'export HOME=/root; echo ~'

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

[Updated on: Sun, 21 December 2008 13:42]

Report message to a moderator

Re: vzctl exec. Bug? [message #34296 is a reply to message #34284] Mon, 22 December 2008 12:15 Go to previous messageGo to next message
maratrus is currently offline  maratrus
Messages: 1495
Registered: August 2007
Location: Moscow
Senior Member
Если сделать "vzctl enter", то HOME должна выставиться должным образом.
Почему они разные в обоих случаях?
Можно, конечно, порассуждать, а какая она должна быть, и должне ли vzctl гадать, где у рута домашняя директория.
Я думаю, для ответа на этот вопрос можете забить баг в багзиллу http://bugzilla.openvz.org/ . Там соответсвенно либо признают, что так быть не должно, либо объяснят, почему так сделано.

Quote:


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


рута с HN? По моему мнению, не совсем верно говорить, что команда vzctl exec запускается от рута с HN.
Re: vzctl exec. Bug? [message #34298 is a reply to message #34296] Mon, 22 December 2008 13:34 Go to previous messageGo to next message
Pilat is currently offline  Pilat
Messages: 8
Registered: November 2006
Junior Member
Quote:

рута с HN? По моему мнению, не совсем верно говорить, что команда vzctl exec запускается от рута с HN.


Мне сложно судить о внутреннем устройстве OVZ, скорее мои рассуждения сводятся к рассуждениям пользователя. С точки зрения пользователя VE это всё же виртуальная машина, от которой я жду максимальной абстракции и максимальной схожести с реальной машиной. При vzctl enter я же рут и vzctl "гадает" о моём окружении. И интуитивно от других команд я жду того же самого, хотя в man vzctl, всё же нашел упоминание о проблеме: "Environment variables are not set inside the VE".

Команда:
vzctl exec 2222 'id'
uid=0(root) gid=0(root)

Свидетельствует, о том, что пользователем текущим является root внутри VE и интуитивное ожидается окружение root`а.

И результат выполнения следующих команд тоже интуитивно должен быть одинаковым:

# vzctl exec 2222 "gpg --keyserver-options http-proxy --keyserver keyserver.ubuntu.com --recv-key $MYKEY"

# vzctl enter 2222
entered into VE 2222
# MYKEY=ABE2A3C4; gpg --keyserver-options http-proxy --keyserver keyserver.ubuntu.com --recv-key $MYKEY

Но он получается не корректным. В первом случае публичный ключ инсталлируется в /.gnupg. Во втором случае в /root/.gnupg.


В итоге можно сказать, что это документированная «фича», но ужасно не удобная, снижающая юзабилити.

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

Спасибо за комментарий.
Re: vzctl exec. Bug? [message #34301 is a reply to message #34298] Mon, 22 December 2008 13:52 Go to previous messageGo to next message
maratrus is currently offline  maratrus
Messages: 1495
Registered: August 2007
Location: Moscow
Senior Member
Quote:


При vzctl enter я же рут и vzctl "гадает" о моём окружении.



На самом деле не гадает а проставляет в "/root"


Quote:


В итоге можно сказать, что это документированная «фича», но ужасно не удобная, снижающая юзабилити.



Так поэтому лучше и написать в bugzilla.
Все, что вы объяснили в своем сообщении и может послужить толчком. Если фича неудобна с точки зрения пользователя и логического объяснения почему так сделано нет, а есть обратное, то можно и поменять.

Quote:


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


Если Вы напишете в bugzilla, то во всяком случае будут знать о вашей проблеме.
Re: vzctl exec. Bug? [message #34303 is a reply to message #34301] Mon, 22 December 2008 14:47 Go to previous messageGo to next message
Pilat is currently offline  Pilat
Messages: 8
Registered: November 2006
Junior Member
Bug 942 был повешен Daniel Hahler 2008-07-22.
Коммент свой повесил и подтвердил баг.
Судя по всему данная проблема не заинтересовала кого либо из разработчиков как и следовало ожидать. Kir там прокомментировал баг тем что /root не всегда является HOMEDIR для root`а. Но с тем же успехом можно говорить и о том, что корень так же практически никогда не бывает HOME для него. Хотя в целом я против прописывания статики в HOME, это скорее усложнит ситуацию и неразбериху, vzctl следует поддерживать всё окружение видимо это связано с некоторыми техническими сложностями, раз не было реализовано.
Re: vzctl exec. Bug? [message #34304 is a reply to message #34283] Mon, 22 December 2008 15:33 Go to previous messageGo to next message
asarg is currently offline  asarg
Messages: 5
Registered: March 2008
Junior Member
Работаю с pilat в одной комнате )

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

Что мы изначально имеем? vzctl? это он выполняет вход в VE и знает, что и как запустить? Все, нам для решения больше ничего не надо, кроме изменения исходников vzctl.

Конкретно, саму команду exec трогать не будем, оставим ее для совместимости с уже наработанными (подозреваю не только у нас) скриптами для обхода данной проблемы, вместо этого введем новую команду execl или добавим ключ --login к уже имеющемуся exec. Далее для простоты будем говорить просто об execl.

имеем:
vzctl [flags] execl veid command [arg ...]
Тогда vzctl сначала выполняет действия:
1. лезет внутрь VE и считывает оттуда /etc/passwd, и находит там $SHELL для UID=0.
2. проверяет, существует ли $SHELL внутри VE и исполнимый ли он.
3. находит /bin/echo внутри VE и проверяет, исполнимый ли он
4. если все условия соблюдены, то vzctl заходит внутрь VE и исполняет в нем команду
/bin/echo 'command [arg ...]' | $SHELL -l
- нашел именно такой способ, совместимый с различными диалектами шелла от bash до zsh.
5. если не соблюдены условия в пп 1-3, то fallback до vzctl exec или возврат ошибки.

в принципе несложно.

[Updated on: Mon, 22 December 2008 15:38]

Report message to a moderator

Re: vzctl exec. Bug? [message #34306 is a reply to message #34304] Mon, 22 December 2008 16:04 Go to previous messageGo to next message
asarg is currently offline  asarg
Messages: 5
Registered: March 2008
Junior Member
Поковырялся.
Предложенный способ в лоб не работает, переменные типа $HOME устанавливаются процессом /bin/login или sshd.

Так почему бы тогда не сделать маааааленькую заначку? сделать какой-нить хелпер для виртуального окружения? собранный статически... И ставить его опционально куда-нить в заранее заданное место внутри VE, например /bin/vzhelper, и он будет исполнять функции, аналогичные login и прочему, что еще может понадобиться. Если уж все равно VE надо специально напильником дорабатывать типа удаления строк getty tty1 в inittab.

Тогда vzctl и прочая будет использовать хелпер, если найдет его; и не будет использовать, если не найдет. А удобств будет на порядок выше.

[Updated on: Mon, 22 December 2008 16:06]

Report message to a moderator

Re: vzctl exec. Bug? [message #34484 is a reply to message #34304] Sun, 11 January 2009 08:39 Go to previous message
asarg is currently offline  asarg
Messages: 5
Registered: March 2008
Junior Member
если я исполняю vzctl exec $VEID "su - -c 'желаемая команда'", то оно все почти работает...
Previous Topic: Порядок запуска VE
Next Topic: Не загружается ядро на Cent OS 5.2. Ошибка grub?
Goto Forum:
  


Current Time: Tue Feb 07 04:54:02 GMT 2023

Total time taken to generate the page: 0.01157 seconds