LINUX.ORG.RU
ФорумAdmin

Gentoo. Emerge и Python.


0

1

Здравствуйте,

С Gentoo столкнулся впервые, поэтому прошу сильно не пинать.
Попросили поглядеть на старый сервак, на котором появились проблемы с обновлением / сборкой пакетов. Вот ошибка при попытке запустить emerge с любыми опциями:
Traceback (most recent call last):
File «/usr/bin/portageq», line 40, in <module>
import portage
File «/usr/lib/portage/pym/portage/__init__.py», line 365, in <module>
if platform.system() in ('FreeBSD',):
File «/usr/lib/python2.6/platform.py», line 1227, in system
return uname()[0]
File «/usr/lib/python2.6/platform.py», line 1194, in uname
processor = _syscmd_uname('-p',")
File «/usr/lib/python2.6/platform.py», line 951, in _syscmd_uname
rc = f.close()
IOError: [Errno 10] No child processes

Выбор другой версии Питона и запуск python-updater ни к чему не приводят - сыпятся подобные ошибки.
revdep-rebuild опять же приводит к вышеуказанной ошибке.
Ядро: 2.6.17-gentoo-r4
Куда копать?


Куда копать?

на метр вниз, и два в ширь.

File «/usr/lib/portage/pym/portage/__init__.py», line 365, in <module>

if platform.system() in ('FreeBSD',):
Точно гента то? :)

uname

uname

странный вопрос, но uname -a что пишет?

rigiy ★★
()
Ответ на: комментарий от rigiy

на метр вниз, и два в ширь.

Знал, что эта фраза не будет так просто пропущена ;-)

Точно гента то? :)

Точно. Самого смутила эта строчка. Может быть из другой системы был перенесен пакет?

Вот вывод uname -a:

Linux homesystem 2.6.17-gentoo-r4 #5 Thu Aug 17 18:52:02 GMT 2006 i686 Intel(R) Pentium(R) 4 CPU 2.00GHz GenuineIntel GNU/Linux

regexp
() автор топика
Ответ на: комментарий от Harald

Ну что-то же стало причиной этой ошибки?

К тому же, вот еще одна проблема: при попытку остановить / запустить сервис, вываливается такая ошибка:

Caching service dependencies ...
:0: assertion failed: system(rm -f /var/lib/init.d/depcache)
bash: /var/lib/init.d/depcache: No such file or directory
-:0: assertion failed: system(rm -f /var/lib/init.d/deptree)
* Failed to cache service dependencies [ !! ]
* Error running '/sbin/depscan.sh'!
* Please correct any problems above.

regexp
() автор топика
Ответ на: комментарий от rigiy

И emerge coreutils с последущим обновлением portage.
Должно помочь

rigiy ★★
()
Ответ на: комментарий от rigiy

Машина находится за несколько тысяч км от моего местонахождения, что делает загрузку с ливки несколько проблематичной задачей =[

regexp
() автор топика
Ответ на: комментарий от regexp

Советую погуглить по самимм ошибкам, есть большая вероятность, что кто-то уже сталкивался.
Ибо мне уже ничего толкового в данном случае в голову не приходит.

rigiy ★★
()
Ответ на: комментарий от rigiy

Гуглил. Предлагали менять версию Питона. Менял. Не помогло. Так же могли бы проблемы с переменными среды - тоже мимо. Одним словом пока всё печально, но за участие спасибо ;-)

regexp
() автор топика
Ответ на: комментарий от regexp

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

true_admin ★★★★★
()
Ответ на: комментарий от regexp

Как вариант, если место есть, собрать на локалхосте либо на сервере в чруте систему, вырубить то, что сервер делает и запускать в чруте. Костыль, но по идее работать будет. Или как-то подменить систему (как вариант скопировать /chroot -> / (не знаю взлетит ли)), но если после рестарта не будет грузится, будет проблема.

ymuv ★★★★
()
Ответ на: комментарий от regexp
python
import platform
platform.system()
exit()

скопипасть всё это в консоль в один присест и покажи выхлоп
покажи PATH от рута
и uname от рута запускал?

megabaks ★★★★
()
Ответ на: комментарий от ymuv

Да хмурая система, я согласен.
Вот развернутый лог (ну точнее вырезка значимой части) запуска скрипта в режиме отладки:

+ cd /etc/init.d
+ /bin/gawk -f /lib/rcscripts/awk/functions.awk -f /lib/rcscripts/awk/cachedepends.awk
:0: assertion failed: system(rm -f /var/lib/init.d/depcache)
+ retval=1
+ bash /var/lib/init.d/depcache
bash: /var/lib/init.d/depcache: No such file or directory
+ /bin/gawk -f /lib/rcscripts/awk/functions.awk -f /lib/rcscripts/awk/gendepends.awk
-:0: assertion failed: system(rm -f /var/lib/init.d/deptree)
+ retval=1
+ touch /var/lib/init.d/depcache /var/lib/init.d/deptree
+ chmod 0644 /var/lib/init.d/depcache /var/lib/init.d/deptree
+ eend 1 'Failed to cache service dependencies'
+ local retval=1
+ shift
+ _eend 1 eerror 'Failed to cache service dependencies'

Файлы depcache и deptree создаются, но имеют нулевой размер.

regexp
() автор топика
Ответ на: комментарий от megabaks

скопипасть всё это в консоль в один присест и покажи выхлоп

$ python
Python 2.6.2 (r262:71600, Aug 21 2009, 15:03:43)
[GCC 4.1.2 (Gentoo 4.1.2 p1.0.1)] on linux2
Type «help», «copyright», «credits» or «license» for more information.

import platform
platform.system()

Traceback (most recent call last):
File «<stdin>», line 1, in <module>
File «/usr/lib/python2.6/platform.py», line 1227, in system
return uname()[0]
File «/usr/lib/python2.6/platform.py», line 1194, in uname
processor = _syscmd_uname('-p',")
File «/usr/lib/python2.6/platform.py», line 951, in _syscmd_uname
rc = f.close()
IOError: [Errno 10] No child processes

exit()

покажи PATH от рута

Такой же как и от простого юзера:

-bash: /usr/lib/ccache/bin:/usr/lib/distcc/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/4.1.2

и uname от рута запускал?

Выхлоп как и из под простого юзера (приведен выше).

regexp
() автор топика
Ответ на: комментарий от megabaks

Ну версий Питона на машине всего 3 - 2.4, 2.5 и 2.6. Пытался завести emerge с помощью каждой - не получилось. Или «ищи версию питона» значит что-то другое?

regexp
() автор топика

Просишь подключить ipmi, сносишь генту и ставишь CentOS 6. Проблема с python и кривым emerge(+красноглазием) решена.

xpahos ★★★★★
()
Ответ на: комментарий от regexp

что-то с питоном сотворили...

python2.6 -d /usr/lib/python2.6/platform.py
хотя это вряд ли что даст...
можно конечно на свой страх и риск взять бинарный пакет питона (только не текущего) и тупо распаковать в корень
т.к. портаж не работает
но это уже совсем экстрим
больше пока в голову ничего не приходит

megabaks ★★★★
()
Ответ на: комментарий от xpahos

Уж тогда Debian, ибо я (да и люди, работающие за этой машиной) привыкли больше к нему ;-)

regexp
() автор топика
Ответ на: комментарий от baverman

$ python
Python 2.6.2 (r262:71600, Aug 21 2009, 15:03:43)
[GCC 4.1.2 (Gentoo 4.1.2 p1.0.1)] on linux2
Type «help», «copyright», «credits» or «license» for more information.

import os
os.system('uname -p')

Intel(R) Pentium(R) 4 CPU 2.00GHz
-1

exit()

regexp
() автор топика
Ответ на: комментарий от megabaks

Да скорее всего просто перетащу всё это добро на новую машину и дело с концами. Там не сильно вроде много - багзилла, IRC-сервер и новостник и индеец с парой вирт. хостов ;-)

regexp
() автор топика
Ответ на: комментарий от regexp

Очень интересно. Тут без доступа к машинке очень долго придется разбираться.

baverman ★★★
()

Да что вы все к питону пристали? Вам же ясно в логе написано, что питон вызывает системную утилиту uname с параметром -p, а в ответ не получает ничего. Даже pid запущеного процесса не получает. Скорее всего uname просто падает, будучи запущеным из пистона. Я бы начал с переустановки пакета, в котором содержится утилита uname. У кого гента под рукой, может посмотрите название пакета? А лучше кинуть автору бинарную сборку, чтоб не мучался со сборкой на проблемной машине. Хотя всегда можно руками собрать. gcc то работает.

delete83 ★★
()
Ответ на: комментарий от delete83

В коде посмотрел, что uname вызывается вот так:

f = os.popen('uname %s 2> %s' % (option, DEV_NULL))
Есть идеи, почему это может упасть?

delete83 ★★
()
Ответ на: комментарий от delete83

Да что вы все к питону пристали?

Потому что проблема в том, как emerge поднимает окружение. Смотри выше, из repl все прекрасно запускается.

baverman ★★★
()
Ответ на: комментарий от delete83

Но ведь uname с ключом "-p" показывает тип процессора, не? Я так понимаю, что с помощью uname должна определяться ОС (в нашем случае - linux), но почему-то определяется FreeBSD. Или я что-то не так понял?

regexp
() автор топика
Ответ на: комментарий от regexp

Сейчас посмотрел код этого platform.py.

uname -p ему нужен, чтобы вытащить именно тип процессора, а делается это потому, что функция uname() вытаскивает всю информацию о системе в виде массива, а уж потом можно взять любую информацию просто указав индекс.

Попробуйте запустить uname -p, что выдаст консоль?

delete83 ★★
()
Ответ на: комментарий от regexp

FreeBSD тут не причем. Ошибка возникает раньше, чем происходит сравнение имени ОС со строкой 'FreeBSD'. Ошибка в функции platform.system().

delete83 ★★
()

Знаете, у меня безумная идея. А укажите ваш make.conf (можно без use-флагов или на pastebin куда-нибудь закиньте). Есть подозрение на одну опцию в этом файле.

delete83 ★★
()
Ответ на: комментарий от baverman

Это уже не актуально. Кажется, я напал на след этой проблемы.

To regexp: попробуйте скомпилировать и запустить такую программу на целевой машине:

#include <stdio.h>
#include <stdlib.h>
main() {
    char *cmd = "uname -p 2> /dev/null";
    char buf[BUFSIZ];
    FILE *ptr;

    if ((ptr = popen(cmd, "r")) != NULL)
        while (fgets(buf, BUFSIZ, ptr) != NULL)
            (void) printf("%s", buf);
        (void) pclose(ptr);
    return 0;
}
и расскажите о результате запуска.

Есть подозрение, что у вас неправильно работает системный вызов popen и это как-то тесно связано с системным сигналом SIGCHLD, однако точнее пока не могу сказать. Если проблема именно в этом, то вышеприведенный код тоже выпадет с ошибкой.

delete83 ★★
()
Ответ на: комментарий от regexp

Приведите весь лог, пожалуйста. Это может дать немного больше инфорации. В make.conf у вас все правильно из чего, вкупе с проблемой с popen, можно сделать вывод, что в вашей системе произведены некие манипуляции, не позволяющие приложениям получать сигнал SIGCHLD, а вот как это можно сделать и как исправить нужно еще поискать. Я не знаток по этой части.

delete83 ★★
()
Ответ на: комментарий от delete83

А какие команды вообще в системе работают, а какие нет?

Ну, coreutils работают все точно ;-)

regexp
() автор топика
Ответ на: комментарий от regexp

На домашней и должно было нормально отработать. Это чуть модифицированный код из страницы man. Он на нормальной системе должен как часы работать.

delete83 ★★
()
Ответ на: комментарий от regexp

А если на домашней системе скомпилировать, а на удаленной запустить? Или так и сделали?

delete83 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.