Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумРазбор ошибок

После обновления всё сломалось: порядок отката

hardline
hardline
Знаток
сообщений 970
с июн
1 января, 08:12первое сообщение

Сервер стоял без обновлений долго, руки дошли, накатил всё разом. Утром прогон лежит.

Две ошибки подряд. Обвязка через сокетный туннель падает с InvalidSchema: Missing dependencies for SOCKS support, хотя пакет на месте. Второй скрипт вообще не стартует, ругается на отсутствующий distutils.

Откатывать наугад страшно, машина боевая. Нужен порядок, по которому это разгребают.

Тимур Ш.
Тимур Ш.
Участник
сообщений 890
с июн
8 июня, 11:29#2

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

что обновилось за последний заход
что обновилось за последний заход

Вот эти три строки и объясняют обе ваши ошибки.

бэкап перед правкой конфига
hardline
hardline
Знаток
сообщений 970
с июн
15 ноября, 14:46#3
Тимур Ш.: слева версия до, справа после

Не знал, что там обе версии пишутся. Список снял, кроме питона и urllib3 приехали ещё ca-certificates и libssl. Всего двадцать восемь пакетов.

nastroyka_pro
nastroyka_pro
Ветеран
сообщений 2110
с мар
22 апреля, 17:03#4

Разгребается это по шагам, и шаг первый именно тот, что назвал Тимур: зафиксировать список.

Шаг второй, самый важный: возвращать назад по одному пакету, начиная с того, который ближе всего к тексту ошибки. Массовый откат всех двадцати восьми превращает боевую машину в кашу, потому что часть пакетов уже подтянула за собой зависимости, и обратно они уходят с боем.

По вашим ошибкам всё читается сразу. Missing dependencies for SOCKS support появляется, когда urllib3 второй ветки стоит рядом со старым requests: поддержка сокетов там переехала, и старая обвязка её ищет по прежнему адресу. Второе про distutils это питон свежей ветки, оттуда модуль убрали совсем.

Шаг третий: питоновские пакеты уводите из системных в отдельное окружение, тогда обновление системы перестаёт трогать прогон.

python3 -m venv /opt/progon/venv
/opt/progon/venv/bin/pip install "requests[socks]==2.31.0" "urllib3==1.26.18"
/opt/progon/venv/bin/python -c "import socks; print('ok')"

Шаг четвёртый: то, что откатили, придержать, чтобы следующее обновление не вернуло всё обратно.

sudo apt-mark hold python3-urllib3
linuxvsem
linuxvsem
Участник
сообщений 830
с июл
1 сентября, 08:20#5

Про отдельное окружение подпишусь двумя руками. Системный питон принадлежит системе: половина утилит написана на нём, и когда вы правите там версии под свой прогон, вы играете в лотерею с чужими утилитами.

Правило простое: всё, что запускается вашими руками, живёт в своём окружении и в своём каталоге.

Алина Т.
Алина Т.
Новичок
сообщений 190
с апр, второй сезон
8 февраля, 11:37#6

а как узнать, какая версия стояла до обновления, если журнал уже подрезала ротация?

linuxvsem
linuxvsem
Участник
сообщений 830
с июл
15 июля, 14:54#7

Алина, в каталоге лежат старые куски журнала, dpkg.log.1 и дальше сжатые. Смотрятся через zgrep, там та же разметка со старой и новой версией.

Если и они уехали, остаётся кэш пакетов в /var/cache/apt/archives: файлы там лежат с номерами версий в имени, поставить прежний можно прямо оттуда.

Тимур Ш.
Тимур Ш.
Участник
сообщений 890
с июн
22 декабря, 17:11#8

И заведите привычку снимать слепок до того, как нажали обновление. Две команды, полминуты времени.

dpkg -l > /root/pered-obnovleniem-pakety.txt
cp -a /etc /root/etc.kopiya
/opt/progon/venv/bin/pip freeze > /root/pered-obnovleniem-pip.txt

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

бэкап перед правкой конфига
kvadrat_ru
kvadrat_ru
Участник
сообщений 855
с июл
1 мая, 08:28#9

У хостера обычно есть слепок диска на сутки назад, это тоже часть порядка. Только имейте в виду: откат всей машины утащит и рабочие данные, накопленные после слепка. Годится как последняя ступень, когда по пакетам разобрать уже никак.

hardline
hardline
Знаток
сообщений 970
с июн
8 октября, 11:45#10

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

Собрал окружение, поставил urllib3 прежней ветки, import socks проходит. Второй скрипт перевёл туда же, distutils он больше не просит, потому что тянул его через старую сборку пакета.

nastroyka_pro
nastroyka_pro
Ветеран
сообщений 2110
с мар
15 марта, 14:02#11

Адреса вы проверите за минуту, там список выдаётся ссылкой и обновляется в реальном времени. Я под ночные прогоны держу приватные серверные адреса с безлимитным трафиком, при откате питона в них ничего трогать не пришлось, ошибка сидела целиком в обвязке.

Кстати, import socks проходит ещё не значит, что туннель поднимается. Прогоните одну страницу и посмотрите код ответа.

Вика Сорокина
Вика Сорокина
Новичок
сообщений 85
с июл, второй сезон
22 августа, 17:19#12

спасибо за ветку, забрала себе шаги про слепок до обновления

Тимур Ш.
Тимур Ш.
Участник
сообщений 890
с июн
1 января, 08:36#13

На будущее ещё одна вещь, она дешевле всех остальных. Обновляйтесь сначала на второй машине, хоть на самой слабой, и гоняйте там короткий прогон полчаса. Если прошло, повторяете на боевой. У нас так два раза ловились именно такие переезды с ветки на ветку, и оба раза боевая машина этого даже не заметила.

бэкап перед правкой конфига
hardline
hardline
Знаток
сообщений 970
с июн
8 июня, 11:53#14

Итог по ветке.

Порядок вышел такой: список изменений из журнала пакетов, возврат по одному ближе к тексту ошибки, придержать возвращённое, прогон питона в отдельном окружении. Слепок пакетов и копия конфигов теперь снимаются скриптом перед каждым обновлением.

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