Ура, она взорвалась!

Много лет я пользуюсь на своих FreeBSD-серверах некоторыми бинарниками, собранными в незапамятные времена, под FreeBSD6. Работают (под compat6x), каши не просят, все устраивает (устраивало?).

Но, ура, наконец оно (воспроизводимо) сломалось:

  • (cd /usr/src; svn up; make то-се-инсталл) - получается текущая 10.1
  • И, ура, эти бинарники перестают запускаться, cannot lock pidfile пишут мне. Truss чего-то такое показывает про bad address.

Воспроизвел на двух машинах - вводимом в эксплуатацию сервере (и сейчас, да, всю команию обратно, вот значит подарочек мне) и на виртуалке. На виртуалке вот просто классически, там была 10.x от 27 июля - и работало, а свежий сегодняшний svn up все поломал. Ну, зашибись.

Я, понятно, могу произвести раскопки, найти ЕЩЕ ТЕ исходники, пересобрать под 10.1 (не уверен, что соберутся текущими компиляторами, гы) и все такое. Но блин, не до грибов мне сейчас!

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

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

P.S. На Linux на серверах не перехожу вот примерно по этой же причине (помимо ZFS) - есть нажитые непосильным трудом бинари, они нужны, а заниматься археологией и пересобирать это под Linux - ну нет никаких сил.

P.P.S. Как хорошо, что на домашнем стораджбоксе не затеял переход на 10.1. Собирался ведь, а получился бы точно геморой на всю задницу.

Comments

Какая бы ни была ОС, такие моменты перед мало-мальски крупными обновлениями стоит проверять на виртуалочке или тествой среде какой-нибудь.

p.s. а про "cannont lock pidfile" - под BSD наверняка есть strace или аналог, можно было бы посмотреть в какой момент фейлится и, возможно, подложить какую-нибудь подстилку или окончательно осознать что только откат спасет.

Ну это не обновление, а установка нового сервера.
Он, конечно, уже частично в бою (вот мы на нем переписываемся), но откат возможен без проблем, DNS перевесить и все. То есть разрушительного ничего не произошло.

truss-ом (аналог strace и смотрел). Пытается залочить pid и обламывается (написав про это в лог), все так и есть. В деталях не буду разбираться, проще поставить 9.3 и не париться.

Это скорее легкой грусти ПСТО - compat в FreeBSD был очень хороший, я горя не знал вот лет уже 10 (6-ка под которую эти бинарники - в 2005-м вышла), но все портится.

Смотреть надо не strace-ом и не truss-ом, а через ktrace и потом kdump.

Ну посмотрел
fcntl(fd,F_OSETLK,??непонятный 3-й аргумент??) возвращает -1 и errno 14 (bad address)
Ну я и так знаю, по truss, - не локает. Оно и в лог такое пишет.

Исходников, в первом приближении, нет (во втором - нашел бы, но делать этого не буду)

Отписал Белоусову, который это место фиксил в ядре и Сс: добавил, см. почту.

Ага, спасибо.

Но я там ответил что
а) мне проще не ходить на 10.1, а пожить с 9.3
б) ну и моя позиция совершенно неконструктивная - мне проще (быстрее и легче) обойти проблему, чем помогать ее фиксить. По миллиону причин.

... ну, предполагаемый фикс-то потестишь? и то будет полезно.

Вот, в процессе, пересобираю ядро на VM.
Я тебе больше скажу, если оно сработает, то я его накачу на боевой сервер и не буду его даунгрейдить :), потому что он почти вот уже готов, я всякие минорные вещи переносил (включая и эти бинари) - и обломался.

Переваливается через борт и сразу тонет...

fcntl починился, теперь ломается на sigaction. Пойду я, болезный, на 9.3

... просто, как следует из обсуждения этих частей ядра, реально многие гоняют джейлы с FreeBSD 4.* -- так что этот-то баг уж точно должны починить.

Хм, это в смысле через compat?

Именно. Потому что есть куча проприетарщины, от которой не то что исходников -- авторов не существует.

И, да, недавние попытки поменять ABI в -current, которые грозили сломать совместимость с FREEBSD4 -- были злостно отвергнуты именно по этой причине

Ну вот конкретному моему варезу было плохо в двух местах
fcntl - там просто в конверсии аргумента из 64 в 32 бита была пара операций забыта
sigaction с SIG_IGN (судя по всему) - несмотря на SIG_IGN, флаги проверялись, а там был, судя по всему, мусор (кому интересны флаги, если SIG_IGN)

Но ставить 10.1 в бой что-то резко расхотелось после таких изменений.

For the reference:

https://svnweb.freebsd.org/changeset/base/277236
в десятку пойдёт через неделю, как видно. Из релизов будет в 10.2

Это вторая наступленная грабля.

А вот еще первая: https://svnweb.freebsd.org/base?view=revision&revision=277211