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

  • Rust soundness

    Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов:…

  • still_ntp

    В ходе локального мозгового штурма у меня родилась суперидея. Надо написать ntp сервер, который может отдавать указанную дату. Т.е. сказали при…

  • arping'а не достаточно

    Я обнаружил, что arping не умеет делать целый запрос полностью (т.е. source mac, dest mac, source ip, dest ip). Dest либо IP, либо mac, и это немного…

  • 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

  • Rust soundness

    Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов:…

  • still_ntp

    В ходе локального мозгового штурма у меня родилась суперидея. Надо написать ntp сервер, который может отдавать указанную дату. Т.е. сказали при…

  • arping'а не достаточно

    Я обнаружил, что arping не умеет делать целый запрос полностью (т.е. source mac, dest mac, source ip, dest ip). Dest либо IP, либо mac, и это немного…