Патченное ядро + Python/Kylix

Обсуждение вопросов, связанных с системой проведения турниров ejudge.
Post Reply
apathism
Posts:64
Joined:09 January 2009, 22:54
Location:Мытищи, Россия
Патченное ядро + Python/Kylix

Post by apathism » 09 September 2012, 23:55

Доброго времени суток.

Обращаюсь за помощью в двух вопросах, не связанных между собой, но относящихся к работе патченного ядра.
На сервере имею ванильное ядро 3.4.10 с наложенным патчем. И ядро, и юзерспейс полностью x86_64.
  1. В python при попытке использовать что-либо из модуля random случается немедленный Run-Time со следующим исключением:

    Code: Select all

    OSError: [Errno 1] Operation not permitted: '/dev/urandom'
    Можно ли это как-то побороть без выключения безопасного режима?
  2. Не могу настроить нормально Kylix, но тут, видимо, совсем тяжелый случай из-за его 32-битности.
    Сначала была проблема при компиляции любых программ следующего вида:

    Code: Select all

    Borland Delphi for Linux Version 14.5
    Copyright (c) 1983,2002 Borland Software Corporation
    test.pas(3) 
    Error: Bad file format: 'libc.so.6'
    Error: Bad file format: 'libdl.so.2'
    Error: Bad file format: 'libpthread.so.0'
    Error: Bad file format: 'libc.so.6'
    Error: Bad file format: 'libdl.so.2'
    Error: Bad file format: 'libpthread.so.0'
    
    Я поборол эту проблему тем, что добавлял флаг -O для dcc, который указывает на 32-битные библиотеки.
    То есть, создал следующий скрипт /usr/local/bin/dcc:

    Code: Select all

    #!/bin/bash
    
    dcc-inner -O/usr/lib32 $@
    А dcc-inner — это symlink на сам dcc. После этого компиляция стала работать, однако скомпилированные
    файлы валятся в ejudge с Run-Time на первом тесте, ничего не выдавая в лог. При этом с выключенным
    использованием патченного ядра все работает на ура.

    Есть какие-нибудь соображения или готовые рецепты по этому поводу?
Заранее спасибо за ответ.
Корябкин Иван

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Патченное ядро + Python/Kylix

Post by cher » 11 September 2012, 10:25

1. Для kylix в конфигурации турнира нужно установить параметр

Code: Select all

arch = "linux-shared-32"
Это поддерживается в новых версиях ejudge.

2. В безопасном режиме обращения к файлам в каталоге /dev запрещены. Список разрешенных путей можно поменять в коде ядра: fs/open.c в районе строки 1000.

apathism
Posts:64
Joined:09 January 2009, 22:54
Location:Мытищи, Россия

Re: Патченное ядро + Python/Kylix

Post by apathism » 11 September 2012, 18:18

По поводу kylix: в serve.cfg, вроде бы, уже есть такая опция. Вот полный serve.cfg без описания задач.

Версия ejudge последняя, то есть 2.3.24.

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Патченное ядро + Python/Kylix

Post by cher » 12 September 2012, 09:59

Попробуйте взять какую-нибудь скомпилированную программу и запустить ее следующим образом:

Code: Select all

strace env LD_PRELOAD=/opt/ejudge/libexec/ejudge/lang/libdropcaps32.so LD_BIND_NOW=1 ./prog
В результате будут выведены системные вызовы, которые выполняет программа ./prog, их аргументы и возвращаемые значения.

apathism
Posts:64
Joined:09 January 2009, 22:54
Location:Мытищи, Россия

Re: Патченное ядро + Python/Kylix

Post by apathism » 12 September 2012, 12:42

1. Гм. Выводится вот такое: http://pastebin.com/bx0btvjs

2. Спасибо, с Python правка ядра помогла.

apathism
Posts:64
Joined:09 January 2009, 22:54
Location:Мытищи, Россия

Re: Патченное ядро + Python/Kylix

Post by apathism » 16 September 2012, 22:18

Честно говоря, не могу разобраться в чем проблема. Если запускать без LD_BIND_NOW, то все ок (и с libdropcaps32), а если с ним, то сразу Segfault. Вот два трейса (успешный и неуспешный) с LD_BIND_NOW и без него соответственно.

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Патченное ядро + Python/Kylix

Post by cher » 18 September 2012, 12:27

То есть, если убрать LD_BIND_NOW, то все начинает работать?

apathism
Posts:64
Joined:09 January 2009, 22:54
Location:Мытищи, Россия

Re: Патченное ядро + Python/Kylix

Post by apathism » 18 September 2012, 23:48

Да, именно так.

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Патченное ядро + Python/Kylix

Post by cher » 19 September 2012, 14:56

Тогда можно удалить установку LD_BIND_NOW из run_common.c.

Какой у вас дистрибутив?

apathism
Posts:64
Joined:09 January 2009, 22:54
Location:Мытищи, Россия

Re: Патченное ядро + Python/Kylix

Post by apathism » 19 September 2012, 21:46

Arch Linux. Да, возможно, что-то дистрибутиво-специфичное. А какие возможны спецэффекты от такого изменения?

apathism
Posts:64
Joined:09 January 2009, 22:54
Location:Мытищи, Россия

Re: Патченное ядро + Python/Kylix

Post by apathism » 20 September 2012, 21:36

Да, все заработало после правки run_common.c.

Post Reply