Как объяснить qemu что не надо себя пихать в cmdline процесса и занимать argv[0] процесса именем запущенного бинарника? А то из-за этого куча всякой всячины не работает в армовой rootfs. Мелочь, но неприятно.
lxc контейнер, в нём фактически развёрнут debian-arm, в binfmt_misc, как и положено, засунуто про qemu и на что его натравливать, чтобы armel ELF запускать. Всё было бы изумительно, если бы не эта qemu'овая лажа с argv[0]. Из-за этого софтинки, которые работают по-разному, если их под разными именами запускать, работают, очевидно, неправильно, ибо не понимают, что им делать, если они называтся qemu-arm-static или именем бинарника.
ЗЫ: Это в основном касается /proc/$PID/cmdline
Всё даже ещё хуже: Вот кусок кода который например в login работает:
/*
* The argv[0]'th entry is usually the path name, but
* for various reasons the invoker may want to override
* that. So, we determine the 0'th entry only if they
* don't want to tell us what it is themselves.
*/
if (arg == (char *) 0) {
(void) snprintf (arg0, sizeof arg0, "-%s", Basename ((char *) file));
arg0[sizeof arg0 - 1] = '\0';
arg = arg0;
}
/*
* First we try the direct approach. The system should be
* able to figure out what we are up to without too much
* grief.
*/
(void) execle (file, arg, (char *) 0, envp);
login запускает указанный в passwd shell, но в качестве argv[0] указывает -shell, чтоб shell прочёл /etc/profile и всё такое. А qemu, вместо того, чтобы после запуска shell вернуть всё взад - и cmdline, и argv[0], записывает в argv[0] то, что он запустил, а cmdline вообще не трогает. В результате, в argv[0] вместо -shell лежит /bin/shell, в cmdline /usr/bin/qemu-arm-static /bin/shell, ну и т.д.
В общем, надо как-то qemu-то рога пообломать....