All articles, tagged with “linux”

Приколы виртуализаторов …

Ситуация: В корне сервера, с 6 паравиртуальными машинами xen (которые лежат в отдельной fs), заканчивается свободное место. При том, что вчера там было минимум 30Г свободного места. Что характерно — /tmp и /log — тоже живут в отдельных fs.

Показания df — места нет.

Показания du — больших папок/файлов в корневой fs не существует. Темные лошадки — как обычно какието девайсы из /proc.

Проверка fsck.reiserfs ошибок не выявляет.

Сисадминская задачка с подлячком, хехе. Освобождаю пару метров в корневой fs и пытаюсь запустить одну из виртуальных машин. Машина стартует со скрипом, беспрерывно выплевывая в свою консоль матюки на модуль, связанный с системными часами. Системные часы — это не связанно с местом на диске, правильно?

Самое время подумать о жизни, и о том — “какого хера”. И пусть весь мир (почта, днс, файловый сервер, веб сервер, сервер авторизации и север БД) подождет.

Но. Задаюсь вопросом: а вот куда ложатся эти беспрерывно выплевываемые, как из пулемета, матюки от 6 машин, на ошибку с системными часами? Судя по скорости — 30Г там набрать — без проблем. Известно куда ложаться — в /proc. Но /proc место на диске не жрет, вроде бы. А оказывается жрет.

Ровняю проблему с часами, методом поиска сообщения об ошибке в гугле, и поскольку время дорого, и влом выискивать по /proc эти файлы — перегружаю сервак. Прощай 180 дней uptime, ну и хрен с ним. Все работает, 30Г — как с куста.

З.Ы. У xen вообще частенько возникают разнообразные проблемы с системными часами. Издержки паравиртуализции.

python2.6 on debian/lenny

Есть в debian/lenny такой недостаток — отсутствие python2.6. Вроде ерунда — 2.6 есть в “experimental”. Чтобы сделать его по умолчанию, не вводить python2.6 при каждом запуске, и избежать “расслоения” уже работающего софта — нужно еще пройтись по этому руководству. И что? Правильно, встанет следующая проблема, особенно актуальная если у вас на этом сервере уже крутятся работающие сервисы. Проблема называется “Глобальные библиотеки”. Стандартные и не очень.

После смены python по умолчанию, придется еще сидеть над логами всех сервисов, ничего не упустить и установить нужные библиотеки. Даже если служб меньше десятка — вялотекущая ловля граблей может происходить несколько недель. Ни сна, ни покоя, тем более, что в самом “experimental” библиотек под 2.6 не так уж много. Устанавливать глобальные библиотеки из distutils опять таки — некошерно. Глобальными библиотеками на productive сервере должна заниматься система контроля дистрибутивов ОС, это мое мнение.

На этом этапе рассуждений, мой переезд в 2.6 имел все шансы прекратится, если бы не тот факт, что 2.6 полностью совместима с 2.5. Значит достаточно переспросить у 2.5 где он берет свои глобальные библиотеки и запихнуть эти библиотеки в PATH для 2.6.

Для таких задач есть специальный пусковой файл /etc/python2.6/sitecustomize.py — этот файл выполняется при каждом запуске python.

В него (с Богом, помолясь) добавляется такой потенциальный генератор граблей:

import pickle
import commands
libs2_5_cmd = 'python2.5 -c "import sys; import pickle; print >>sys.stdout, pickle.dumps(sys.path)"'
try:
    py2_5_libs = pickle.loads(commands.getoutput(libs2_5_cmd))
    sys.path.extend(py2_5_libs)
except Exception, e:
    import warnings
    warnings.warn("Attempt to load libs from python2.5 failed with error \n%s\nDebug file '%s' to resolve this"%\
                             (e, __file__))

Во избежание, пути для 2.5 добавляются в конец. Если верить в то, что приложения будут добавлять свои локальные библиотеки в начало — проблем быть не должно.

С этого момента все библиотеки под Python2.5 будут находится интерпретатором Python2.6, и можно начинать не торопясь принимать взвешенные решения.