Обсуждение вопросов, связанных с системой проведения турниров ejudge.
-
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.
- В python при попытке использовать что-либо из модуля random случается немедленный Run-Time со следующим исключением:
Code: Select all
OSError: [Errno 1] Operation not permitted: '/dev/urandom'
Можно ли это как-то побороть без выключения безопасного режима?
- Не могу настроить нормально 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:
Post
by cher » 11 September 2012, 10:25
1. Для kylix в конфигурации турнира нужно установить параметр
Это поддерживается в новых версиях ejudge.
2. В безопасном режиме обращения к файлам в каталоге /dev запрещены. Список разрешенных путей можно поменять в коде ядра: fs/open.c в районе строки 1000.
-
apathism - Posts:64
- Joined:09 January 2009, 22:54
- Location:Мытищи, Россия
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:
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:Мытищи, Россия
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:
Post
by cher » 18 September 2012, 12:27
То есть, если убрать LD_BIND_NOW, то все начинает работать?
-
apathism - Posts:64
- Joined:09 January 2009, 22:54
- Location:Мытищи, Россия
Post
by apathism » 18 September 2012, 23:48
Да, именно так.
-
cher - Posts:1153
- Joined:13 March 2004, 17:00
-
Contact:
Post
by cher » 19 September 2012, 14:56
Тогда можно удалить установку LD_BIND_NOW из run_common.c.
Какой у вас дистрибутив?
-
apathism - Posts:64
- Joined:09 January 2009, 22:54
- Location:Мытищи, Россия
Post
by apathism » 19 September 2012, 21:46
Arch Linux. Да, возможно, что-то дистрибутиво-специфичное. А какие возможны спецэффекты от такого изменения?
-
apathism - Posts:64
- Joined:09 January 2009, 22:54
- Location:Мытищи, Россия
Post
by apathism » 20 September 2012, 21:36
Да, все заработало после правки run_common.c.