Я работаю над программным обеспечением, которое собирает пакеты Pacman (которые по сути являются tarballs с некоторыми специальными файлами метаданных). Тестовый набор собирает некоторые пакеты, затем сравнивает полученный пакет с записанным ожидаемым результатом.
Одним из полей метаданных, записанных в пакете, является установленный размер пакета, определяемый путем запуска du -s --apparent-size
в корневом каталоге перед его упаковкой в tar.
Все это прекрасно работает на моих локальных Arch Linux-боксах, где я разрабатываю. Пакеты, включая их установленный размер в байтах (даже не в килобайтах, а в байтах!), воспроизводятся в точности каждый раз, когда я запускаю тест.
Теперь я также включил этот тест в Travis, где он запускается (насколько я понимаю из документации Travis) на контейнере на базе Ubuntu-12.04. Там тест проходит большую часть времени.Большинствоиз раз. Иногда он вычисляет установленные размеры, которые ошибаются на 80-99%.
Вот пример теста, который не пройден:https://travis-ci.org/holocm/holo/builds/89326780(Тесткак раз перед этимуспешно.) Одно из соответствующих различий -
@@ -37,7 +37,7 @@
pkgdesc = my foo bar package
url =
packager = Unknown Packager
- size = 37728
+ size = 1464
arch = any
license = custom:none
replaces = foo-bar<2.1
Самое загадочное в этом то, что это происходит только иногда, без какой-либо очевидной закономерности. Тест упорядочивает те же файлы, что и всегда, запускается du -s --apparent-size
на результирующем дереве и приходит к совершенно неправильному результату. Я пытался воспроизвести это на виртуальной машине Ubuntu 12.04, и хотя я видел, как это появлялось там один или два раза, я не смог увидеть никаких закономерностей, которые помогли бы мне воспроизвести проблему.
Может быть, у кого-то есть идеи, что может быть причиной этой проблемы?
EDIT: О, на самом деле, я заметил один шаблон. du
запускается один раз для каждого тестового случая. Если он не сработает для первого тестового случая, он не сработает для всех тестовых случаев в этом запуске.
решение1
Ну, разместить это в качестве ответа меня побудил @derobert
Проблема у вас в AUFS... проверьте проблемы, связанные с ней, проверьте причины, по которым ее нет в последних ядрах, проверьте ее «стабильность», проверьте ее «полноту POSIX». – Hvisage 24 янв. в 20:55