qemu-static-arm: проблемы с getpcaps

(хост, amd64)# getpcaps $$
Capabilities for `17435': =ep

(hard, qemu-static-arm chroot) # getpcaps $$
Failed to get cap's for proccess 25181: (Function not implemented)

Соотв. не работает и setcap, что приводит к ошибкам при установке, например net-misc/iptools

# emerge --info libcap

Кто-нибудь сталкивался с этим?

Может все же

Может все же net-misc/iputils? И да, net-misc/iputils-20121221 собирается нормально. Только что проверял с qemu-static-arm версии 1.7.0.

Пакет собирается нормально,

Пакет собирается нормально, но в фазе постинсталляции вылетает ошибка, мол, невозможно выставить соотв. капабилити - фейлится setcap с тем же самым function not implemented.

Путем поиска я обнаружил, что у не работает и getpcap. Причем, в хост-системе он работает, а под chroot - нет. Не очень понятно, где копать.

В qemu системные вызовы

В qemu системные вызовы реализованы с помощью врапперов и далеко не все поддерживаются. Пишите разрабам qemu (если возможно), чтобы добавили оддержку данного syscall'а или лучше лезьте в исходники и добавляйте сами. Сейчас оно по всей видимости не поддерживается. У меня раньше не работалит вызовы chroot и некоторые фичи сети, не правильно работал fork, да и вообще половина сетевых операций. Не знаю, как сейчас, но сборку на arm недавно сломали добавлением новых сисколов.

Локальный оверлей растёт

Да,

Да, действительно:

qemu/syscall.c

    case TARGET_NR_capget:
        goto unimplemented;
    case TARGET_NR_capset:
        goto unimplemented;

Я потратил некоторое время разбираясь с адресацией из guest в host и по итогу сделал патч для qemu-user-9999 (актуальная версия - 1.7). Хорошо, что они добавили пользовательские патчи в ебилд. Короче:

http://pastebin.com/nGJ1A8w3

Наверняка надо еще поставить какие-то ifdef-ы для определения есть в системе capabilities.h или нет, но тут - увы, я никогда не занимался системным программированием, а на Си в предыдущий раз писал лет 15 назад.

Тем не менее оно работает:

[18:52] (ARM) root@crits / # setcap 'cap_net_raw+ep' testfile 
[18:53] (ARM) root@crits / # getcap testfile
testfile = cap_net_raw+ep
[18:53] (ARM) root@crits / # emerge -1q iputils
>>> Verifying ebuild manifests
>>> Emerging (1 of 1) net-misc/iputils-20121221-r1
>>> Installing (1 of 1) net-misc/iputils-20121221-r1
[18:55] (ARM) root@crits / # 

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

Остался лишь один вопрос - а как бы попросить разработчиков qemu включить правки хотя бы в следующей версии?

P.S.: Чтобы поставить qemu-user-1.7 и выше с ключом static нужно помимо glib и zlib собрать со static-libs dev-libs/openssl и net-libs/libssh2

Думаю, это:

Думаю, это: http://wiki.qemu.org/Contribute/SubmitAPatch

Локальный оверлей растёт

Ого. Серьезно ребята подошли

Ого. Серьезно ребята подошли к вопросу. Пожалуй, я воздержусь при таких раскладах. :-)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".