amarao (amarao_san) wrote,
amarao
amarao_san

Инженерная задачка

А вот вам простая инженерная задачка (для тех, кто не понимает, чем страдают devops'ы).

Дано: самописная либа thread_timeout.

Нехороший интернет уговорил меня на использование wrapt'а. Но его нет ни в precise (да, всё ещё есть в продакшенах), ни в trusty. А пакет из более новой хочет libc сильно перезадранной версии, то есть поставиться "так просто" не поставится.

И вот у меня варианты решения проблемы:

1) Бинарно похакать python-wrapt из vivid'а или более нового дистрибутива. Распаковать, поправить требование по libc, запаковать обратно и положить на наш миррор. Работать будет, ибо libc там постольку-поскольку. ~ 20 минут работы.
2) Настроить job'у на CI'е для пакетирования python-wrapt по мотивам vivid'овского пакета, но в окружении precise'а (откуда оно встанет и на trusty) и в свой миррор. ~ час работы с неизвестными задержками.
3) Подложить wrapt в исходники thread_timeout и юзать оттуда. ~10 минут, но очень криво.
4) Выпилить использование wrapt'а из библиотеки. ~ пара часов отладки
5) (не рассматривается) ставить pip'ом на сервер.

(отдельно стоит вопрос о том, что надо попаковать сам thread_timeout как отдельный пакет, да и саму приложуху тоже ещё пакетировать надо).

Ещё веселее: попытка настроить сборку либы под precise натыкается на то, что six слишком маленький по версии (1.1) и не предоставляет PY2

(AttributeError: 'module' object has no attribute 'PY2')

Зависимость, соответственно, можно поправить, конечно. Но это очень и очень плохо. Вероятнее всего, если я не найду возможности решить эту проблему, то "сборка своего wrap'а" отменяется.

Попытка хакнуть версию libc в депенденсах libc. Успешно. Валится опять на:
>>> import wrapt
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib/python2.7/dist-packages/wrapt/__init__.py", line 10, in
from .decorators import decorator, synchronized
File "/usr/lib/python2.7/dist-packages/wrapt/decorators.py", line 52, in
class _AdapterFunctionSurrogate(CallableObjectProxy):
File "/usr/lib/python2.7/dist-packages/wrapt/decorators.py", line 83, in _AdapterFunctionSurrogate
if six.PY2:
AttributeError: 'module' object has no attribute 'PY2'

Менять версию six, от которого пол-продакшена зависит я не буду, так что выход один - прощай import wrapt.
Tags: devops
Subscribe

  • А вот вам пост об исторической нелогичности

    Вот есть у меня файл /etc/default/grub.d/unified.cfg для включения unified cgroups для systemd. А вот вопрос (ответ на который я хорошо знаю, но…

  • ансибло-философия

    А вот я хочу продолжить думать умное про ансибл, ci/cd и прочую рабочую фигню между гитом и сервером. Классическое программирование стремится…

  • апгрейдовое

    А вот шифрованный home я переносил вообще ленивым образом - тупо сделал dd для раздела и поправил путь к устройству для кастомного pam_exec-скрипта.…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 20 comments

  • А вот вам пост об исторической нелогичности

    Вот есть у меня файл /etc/default/grub.d/unified.cfg для включения unified cgroups для systemd. А вот вопрос (ответ на который я хорошо знаю, но…

  • ансибло-философия

    А вот я хочу продолжить думать умное про ансибл, ci/cd и прочую рабочую фигню между гитом и сервером. Классическое программирование стремится…

  • апгрейдовое

    А вот шифрованный home я переносил вообще ленивым образом - тупо сделал dd для раздела и поправил путь к устройству для кастомного pam_exec-скрипта.…