[freebsd] mismatched checksums

17 views
Skip to first unread message

Taras Heichenko

unread,
Jun 11, 2020, 10:47:15 AM6/11/20
to Рассылка FreeBSD UA
Hi!

Последнее время фря регулярно по ночам ругается

Checking for packages with mismatched checksums:
py37-pycparser-2.20: /usr/local/lib/python3.7/site-packages/pycparser/__pycache__/c_ast.cpython-37.pyc

Я так понимаю, что это просто некая неаккуратность. Но грызет меня червячок совершенства. Подскажите,
куда пнуть, чтобы это поправили? Или может это только у меня такое вылазит – тогда что я делаю не так?

--
Taras Heichenko
ta...@academ.kiev.ua





_______________________________________________
freebsd mailing list
fre...@uafug.org.ua
http://mailman.uafug.org.ua/mailman/listinfo/freebsd

George L. Yermulnik

unread,
Jun 11, 2020, 11:10:53 AM6/11/20
to fre...@uafug.org.ua
Hello!

On Thu, 11 Jun 2020 at 17:47:04 (+0300), Taras Heichenko wrote:

> Последнее время фря регулярно по ночам ругается

> Checking for packages with mismatched checksums:
> py37-pycparser-2.20: /usr/local/lib/python3.7/site-packages/pycparser/__pycache__/c_ast.cpython-37.pyc

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

> куда пнуть, чтобы это поправили? Или может это только у меня такое вылазит ??? тогда что я делаю не так?

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=241952

`pkg check -r py37-pycparser-2.20` чтобы пересчитать чексумму

--
George L. Yermulnik
[YZ-RIPE]

Eugene Grosbein

unread,
Jun 11, 2020, 11:28:15 PM6/11/20
to Taras Heichenko, Рассылка FreeBSD UA
11.06.2020 21:47, Taras Heichenko пишет:

> Hi!
>
> Последнее время фря регулярно по ночам ругается
>
> Checking for packages with mismatched checksums:
> py37-pycparser-2.20: /usr/local/lib/python3.7/site-packages/pycparser/__pycache__/c_ast.cpython-37.pyc
>
> Я так понимаю, что это просто некая неаккуратность. Но грызет меня червячок совершенства. Подскажите,
> куда пнуть, чтобы это поправили? Или может это только у меня такое вылазит – тогда что я делаю не так?

Слово __pycache__ намекает на то, что там лежит некий "кеш", то есть изменяемые файлы,
проверить это можно через ls -l для сравнения даты создания/модификации этого файла
с датой создания других файлов того же пакета вне кеша.

Суть контрольных сумм - обнаружить взлом, подмену файлов, поэтому изменяемым файлам не место
в списке защищаемых котрольной суммой, такие кеши согласно принятой на фре иерархии
должны жить внутри /var/db. К сожалению, это не всегда согласуется с дефолтной раскладкой
каталогов порта и лень маинтейнера (или его незнание об этом моменте) приводит
к таким вот коллизиям: все устанавиваемые пакетом/портом файлы должны быть перечислены
в pkg-plist и контрольные суммы для всех файлов из pkg-plist создаются и проверяются
автоматически. Если пакет ставит "предсозданный" кеш, а потом его обновляет,
вылазит эта хрень.

По хорошему надо пинать маинтейнеров инфраструктуры python.mk, группу por...@FreeBSD.org,
потому что это вряд ли проблема отдельного питоновского модуля, это инфраструктурная проблема.

Valentin Nechayev

unread,
Jun 12, 2020, 1:05:31 AM6/12/20
to Eugene Grosbein, Taras Heichenko, Рассылка FreeBSD UA
Fri, Jun 12, 2020 at 10:27:46, eugen wrote about "Re: [freebsd] mismatched checksums":

> Слово __pycache__ намекает на то, что там лежит некий "кеш", то есть изменяемые файлы,
> проверить это можно через ls -l для сравнения даты создания/модификации этого файла
> с датой создания других файлов того же пакета вне кеша.
>
> Суть контрольных сумм - обнаружить взлом, подмену файлов, поэтому изменяемым файлам не место
> в списке защищаемых котрольной суммой, такие кеши согласно принятой на фре иерархии
> должны жить внутри /var/db.

Дело в том, что этот кэш должен быть идентичным для комбинации
конкретного исходного файла и версии Питона. Поэтому его и можно
учитывать в пакете. Второе - что если этот файл пересоздаётся в
рантайме, то у него будет владелец - юзер запуска, что неудобно для
общих файлов. В персональном каталоге можно сколько угодно стирать и
создавать заново, но в общем пакете или его не должно быть, или он
должен принадлежать тому же, у кого соответствующий .py (считаем -
руту). А само его присутствие полезно сокращением времени старта
использующего кода.

Поэтому вопрос, было ли расхождение изначально в пакете и, если нет -
что случилось, что оно появилось, нет жалоб на расхождение содержимого
.py, но есть на .pyc.

> По хорошему надо пинать маинтейнеров инфраструктуры python.mk, группу por...@FreeBSD.org,
> потому что это вряд ли проблема отдельного питоновского модуля, это инфраструктурная проблема.

Может и модуля. Я вот сейчас борюсь с тем, что CFFI пересоздаёт в
некоторых случаях целевой soʼшник (причём в нескольких процессах
параллельно, и они начинают драться за линковку - реальный сюр).


-netch-

Taras Heichenko

unread,
Jun 12, 2020, 6:45:54 AM6/12/20
to Maxim Sobolev, Рассылка FreeBSD UA


> On 12 Jun 2020, at 02:34, Maxim Sobolev <sob...@sippysoft.com> wrote:
>
> Как минимум это говорит о том что ты от рута питоновские скрипты/сервисы запускаешь. :)

Нет. Я всего лишь [пере]собрал какой-то порт, зависящий при сборке от этой беды. Оно из портов вот так стало.
Могу снести, и до следующей переустановки чего-то, зависящего от этого порта, опять все будет спокойно. Но этот
подход не радует душу. ;)

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

При обновлении пакетов я запускаю обычно portupgrade -R, так что без обновления зависимостей вряд ли.

>
> -Max

Taras Heichenko

unread,
Jun 12, 2020, 7:07:23 AM6/12/20
to Eugene Grosbein, Рассылка FreeBSD UA


> On 12 Jun 2020, at 06:27, Eugene Grosbein <eu...@grosbein.net> wrote:
>
> 11.06.2020 21:47, Taras Heichenko пишет:
>> Hi!
>>
>> Последнее время фря регулярно по ночам ругается
>>
>> Checking for packages with mismatched checksums:
>> py37-pycparser-2.20: /usr/local/lib/python3.7/site-packages/pycparser/__pycache__/c_ast.cpython-37.pyc
>>
>> Я так понимаю, что это просто некая неаккуратность. Но грызет меня червячок совершенства. Подскажите,
>> куда пнуть, чтобы это поправили? Или может это только у меня такое вылазит – тогда что я делаю не так?
>
> Слово __pycache__ намекает на то, что там лежит некий "кеш", то есть изменяемые файлы,
> проверить это можно через ls -l для сравнения даты создания/модификации этого файла
> с датой создания других файлов того же пакета вне кеша.

Там лежит горстка таких файлов (все они с одной датой создания с точностью до минуты), но ругань идет
только по поводу одного этого файла.

>
> Суть контрольных сумм - обнаружить взлом, подмену файлов, поэтому изменяемым файлам не место
> в списке защищаемых котрольной суммой, такие кеши согласно принятой на фре иерархии
> должны жить внутри /var/db. К сожалению, это не всегда согласуется с дефолтной раскладкой
> каталогов порта и лень маинтейнера (или его незнание об этом моменте) приводит
> к таким вот коллизиям: все устанавиваемые пакетом/портом файлы должны быть перечислены
> в pkg-plist и контрольные суммы для всех файлов из pkg-plist создаются и проверяются
> автоматически. Если пакет ставит "предсозданный" кеш, а потом его обновляет,
> вылазит эта хрень.

В /usr/ports/devel/py-pycparser, откуда согласно pkg info был поставлен пакет, притащивший этот файл в
систему, вообще нет файла pkg-plist. Кстати, а где лежат checksums установленных пакетов, с которыми
сверяется pkg при проверке? Почему вообще этот файл туда попал?

>
> По хорошему надо пинать маинтейнеров инфраструктуры python.mk, группу por...@FreeBSD.org,
> потому что это вряд ли проблема отдельного питоновского модуля, это инфраструктурная проблема.

Я готов попинать, но мне сначала нужно понять, где именно вылазит ошибка, чтобы задавать осознанные вопросы
(содержащие не менее 50% ответов :) ).

>
>
> _______________________________________________
> freebsd mailing list
> fre...@uafug.org.ua
> http://mailman.uafug.org.ua/mailman/listinfo/freebsd

--
Taras Heichenko
ta...@academ.kiev.ua

Taras Heichenko

unread,
Jun 12, 2020, 7:20:45 AM6/12/20
to Eugene Grosbein, Рассылка FreeBSD UA


> On 12 Jun 2020, at 14:07, Taras Heichenko <ta...@academ.kiev.ua> wrote:
>
>
>>
>> Слово __pycache__ намекает на то, что там лежит некий "кеш", то есть изменяемые файлы,
>> проверить это можно через ls -l для сравнения даты создания/модификации этого файла
>> с датой создания других файлов того же пакета вне кеша.
>
> Там лежит горстка таких файлов (все они с одной датой создания с точностью до минуты), но ругань идет
> только по поводу одного этого файла.

И да, посмотрел дату модификации файлов в этом каталоге. Файл, по поводу которого идет ругань действительно
с самой свежей датой модификации, но она на 11-12 секунд отличается от даты модификации других файлов в
том же каталоге.

George L. Yermulnik

unread,
Jun 12, 2020, 7:45:51 AM6/12/20
to fre...@uafug.org.ua
Hello!

On Fri, 12 Jun 2020 at 14:07:11 (+0300), Taras Heichenko wrote:

> В /usr/ports/devel/py-pycparser, откуда согласно pkg info был
> поставлен пакет, притащивший этот файл в систему, вообще нет файла
> pkg-plist.

Он автогенерируется в этом пакете (`USE_PYTHON= autoplist [...]`)

> Кстати, а где лежат checksums установленных пакетов, с
> которыми сверяется pkg при проверке?

Видимо /var/db/pkg/local.sqlite

> Почему вообще этот файл туда попал?

Так устроено =)
/usr/ports/Mk/Uses/python.mk

> > По хорошему надо пинать маинтейнеров инфраструктуры python.mk, группу por...@FreeBSD.org,
> > потому что это вряд ли проблема отдельного питоновского модуля, это инфраструктурная проблема.

> Я готов попинать, но мне сначала нужно понять, где именно вылазит
> ошибка, чтобы задавать осознанные вопросы (содержащие не менее 50%
> ответов :) ).

Я кидал ссылку на bug.

--
George L. Yermulnik
[YZ-RIPE]

Taras Heichenko

unread,
Jun 12, 2020, 9:08:33 AM6/12/20
to George L. Yermulnik, Рассылка FreeBSD UA


> On 12 Jun 2020, at 14:45, George L. Yermulnik <y...@yz.kiev.ua> wrote:
>
> Hello!
>
> On Fri, 12 Jun 2020 at 14:07:11 (+0300), Taras Heichenko wrote:
>
>> В /usr/ports/devel/py-pycparser, откуда согласно pkg info был
>> поставлен пакет, притащивший этот файл в систему, вообще нет файла
>> pkg-plist.
>
> Он автогенерируется в этом пакете (`USE_PYTHON= autoplist [...]`)
>
>> Кстати, а где лежат checksums установленных пакетов, с
>> которыми сверяется pkg при проверке?
>
> Видимо /var/db/pkg/local.sqlite

Ага, да, спасибо. Похоже табличка files.

>
>> Почему вообще этот файл туда попал?
>
> Так устроено =)
> /usr/ports/Mk/Uses/python.mk

Уж послала так послала. :) Я собственно имел в виду, зачем pyc файлы запихивать в проверку checksum.

>
>>> По хорошему надо пинать маинтейнеров инфраструктуры python.mk, группу por...@FreeBSD.org,
>>> потому что это вряд ли проблема отдельного питоновского модуля, это инфраструктурная проблема.
>
>> Я готов попинать, но мне сначала нужно понять, где именно вылазит
>> ошибка, чтобы задавать осознанные вопросы (содержащие не менее 50%
>> ответов :) ).
>
> Я кидал ссылку на bug.

Ага, да. После некоторого обсуждения я даже понял, что там написано. ;) Собственно говоря там и решение
предложено. Причем вполне разумное. Попробую пнуть.

>
> --
> George L. Yermulnik
> [YZ-RIPE]
> _______________________________________________
> freebsd mailing list
> fre...@uafug.org.ua
> http://mailman.uafug.org.ua/mailman/listinfo/freebsd

--
Taras Heichenko
ta...@academ.kiev.ua

Eugene Grosbein

unread,
Jun 12, 2020, 10:00:27 AM6/12/20
to Valentin Nechayev, Taras Heichenko, Рассылка FreeBSD UA
12.06.2020 12:05, Valentin Nechayev пишет:

> Fri, Jun 12, 2020 at 10:27:46, eugen wrote about "Re: [freebsd] mismatched checksums":
>
>> Слово __pycache__ намекает на то, что там лежит некий "кеш", то есть изменяемые файлы,
>> проверить это можно через ls -l для сравнения даты создания/модификации этого файла
>> с датой создания других файлов того же пакета вне кеша.
>>
>> Суть контрольных сумм - обнаружить взлом, подмену файлов, поэтому изменяемым файлам не место
>> в списке защищаемых котрольной суммой, такие кеши согласно принятой на фре иерархии
>> должны жить внутри /var/db.
>
> Дело в том, что этот кэш должен быть идентичным для комбинации
> конкретного исходного файла и версии Питона.

Дата модификации на 11 секунд позднее других файлов пакета намекает на такой сценарий:
порт или пакет установлены по зависимости, затем 11 секунд на загрузку/установку пакета
или сборку зависящего порта порта, при которой вызывается код из свежепоставленного
pycparser, который перегенерирует файл в кеше, при этом файл таки меняется,
раз уж контрольная сумма поменялась.

> Поэтому его и можно учитывать в пакете.

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

Maxim Sobolev

unread,
Jun 12, 2020, 12:39:11 PM6/12/20
to Eugene Grosbein, Taras Heichenko, Valentin Nechayev, Рассылка FreeBSD UA
Вообще-то питоновский подход к байт-коду мне лично напоминает золотое правило "premature optimization is the root of all evils". Вы либо уже будьте как джава - сорцы не запускаются сами по себе, либо как джаваскрипт когда никто и никогда этого байткода как правило не видит, кроме виртуальной машины. А вот это вот, какая-то третья нога растущая прямо из жопы. А они вместо того чтобы пофиксить передвигают его между версиями из одной директории в другую.  :)

-Max 

Maxim Sobolev

unread,
Jun 12, 2020, 12:52:49 PM6/12/20
to Eugene Grosbein, Taras Heichenko, Valentin Nechayev, Рассылка FreeBSD UA
По поводу предложения "игнорировать контрольную сумму" я бы поаккуратнее с этим. Этот PYC/PYO код между прочим исполняется на вашем тазике и миллионах других тазиков. А вдруг как враг пролезет и поменяет какой-нибудь безобидный модуль который юзается ну скажем certbot на что-то свое, админ никогда этого не заметит и не оценит.

 -Max

Eugene Grosbein

unread,
Jun 12, 2020, 2:17:27 PM6/12/20
to Maxim Sobolev, Taras Heichenko, Valentin Nechayev, Рассылка FreeBSD UA
12.06.2020 23:52, Maxim Sobolev пишет:

> По поводу предложения "игнорировать контрольную сумму" я бы поаккуратнее с этим. Этот PYC/PYO код между прочим исполняется на вашем тазике и миллионах других тазиков. А вдруг как враг пролезет и поменяет какой-нибудь безобидный модуль который юзается ну скажем certbot на что-то свое, админ никогда этого не заметит и не оценит.

Потому и сказал, что этот вариант мне не нравится.

Интересно, что будет, если при первоначальной установке делать таким файлам chflags uchg,
запрещать изменять его независимо от прав доступа без снятия флага. Для эксперимента.

Maxim Sobolev

unread,
Jun 12, 2020, 3:08:30 PM6/12/20
to Eugene Grosbein, Taras Heichenko, Valentin Nechayev, Рассылка FreeBSD UA
У питона там какие-то свои сложные и исторически сложившиеся правила "что делать если такая хня происходит". :) Но вообще есть три варианта: он выполнит код из PYC, он выполнит код из PY или он заплачет и позовет маму  (вернет ошибку). Насколько  мне известно из моего богатого опыта запуска питоновских кодов с RO носителей, маму он никогда не звал, так что скорее всего варианта на деле всего два. :)

-Max

Taras Heichenko

unread,
Jun 12, 2020, 4:02:10 PM6/12/20
to Eugene Grosbein, Valentin Nechayev, Рассылка FreeBSD UA


> On 12 Jun 2020, at 16:59, Eugene Grosbein <eu...@grosbein.net> wrote:
>
> 12.06.2020 12:05, Valentin Nechayev пишет:
>
>> Fri, Jun 12, 2020 at 10:27:46, eugen wrote about "Re: [freebsd] mismatched checksums":
>>
>>> Слово __pycache__ намекает на то, что там лежит некий "кеш", то есть изменяемые файлы,
>>> проверить это можно через ls -l для сравнения даты создания/модификации этого файла
>>> с датой создания других файлов того же пакета вне кеша.
>>>
>>> Суть контрольных сумм - обнаружить взлом, подмену файлов, поэтому изменяемым файлам не место
>>> в списке защищаемых котрольной суммой, такие кеши согласно принятой на фре иерархии
>>> должны жить внутри /var/db.
>>
>> Дело в том, что этот кэш должен быть идентичным для комбинации
>> конкретного исходного файла и версии Питона.
>
> Дата модификации на 11 секунд позднее других файлов пакета намекает на такой сценарий:
> порт или пакет установлены по зависимости, затем 11 секунд на загрузку/установку пакета
> или сборку зависящего порта порта, при которой вызывается код из свежепоставленного
> pycparser, который перегенерирует файл в кеше, при этом файл таки меняется,
> раз уж контрольная сумма поменялась.

George L. Yermulnik в самом начале обсуждения давал ссылку на описание и обсуждение бага, где
достаточно внятно объяснено, откуда он лезет и как его можно полечить.
----------------
There is no problem with pkg check -q -s py36-pycparser immediately after installation.
But after python -c 'import pycparser', problems arise.

But python -c 'import pycparser' only updates it once.
Perhaps we only need to run python -c 'import pycparser' once before recording the checksum.
----------------
обсуждение датировано ноябрем-декабрем прошлого года.

>
>> Поэтому его и можно учитывать в пакете.
>
> Поэтому его учитывать в пакете так просто не следует, как это делается с действительно
> неизменяемыми файлами. Либо не защищать кеш контрольной суммой, что лично мне не нравится,
> либо в процессе установки пакета спровоцировать обновление кеша и пересчитать сумму,
> но последнее может создать проблемы при кросс-сборке, особенно если кеш платформенно-зависим.
>
> _______________________________________________
> freebsd mailing list
> fre...@uafug.org.ua
> http://mailman.uafug.org.ua/mailman/listinfo/freebsd

--
Taras Heichenko
ta...@academ.kiev.ua

George L. Yermulnik

unread,
Jun 12, 2020, 4:09:32 PM6/12/20
to fre...@uafug.org.ua
Hello!

On Fri, 12 Jun 2020 at 23:01:56 (+0300), Taras Heichenko wrote:

> George L. Yermulnik в самом начале обсуждения давал ссылку на описание и обсуждение бага, где
> достаточно внятно объяснено, откуда он лезет и как его можно полечить.
> ----------------
> There is no problem with pkg check -q -s py36-pycparser immediately after installation.
> But after python -c 'import pycparser', problems arise.

> But python -c 'import pycparser' only updates it once.
> Perhaps we only need to run python -c 'import pycparser' once before recording the checksum.
> ----------------
> обсуждение датировано ноябрем-декабрем прошлого года.

Кстати, в качестве local quick fix можно это вместе с `pkg check -r py36-pycparser`
закинуть в секцию `AFTERINSTALL` файла /usr/local/etc/pkgtools.conf если
в качестве пакетного менеджера используется portupgrade.
Фикс такой себе, но если баг не фиксят, то почему бы и нет.

--
George L. Yermulnik
[YZ-RIPE]

Eugene Grosbein

unread,
Jun 13, 2020, 5:32:44 AM6/13/20
to Taras Heichenko, Valentin Nechayev, Рассылка FreeBSD UA
13.06.2020 3:01, Taras Heichenko пишет:

Ну, это почти то же самое другими словами. Проблема в том, что "run" чего-нибудь
может быть проблематично в условиях кросс-компиляции, когда целевая платформа,
к примеру, ARM или MIPS, а мы собираем образ на amd64.

Reply all
Reply to author
Forward
0 new messages