В компании, где я работаю, есть сложный промышленный проект ARM arch router, состоящий в основном из множества приложений C и C ++ с ядром Linux. В настоящее время мы готовимся к сертификации, и организация сертификации хочет, чтобы мы отправили им все источники и двоичную контрольную сумму результирующего root образа файловой системы. Конечно, контрольная сумма, которую мы отправляем, и контрольная сумма изображения, которое они получат после сборки, должны быть одинаковыми.
Я попытался последовательно собрать одно и то же приложение (я выбрал busybox) дважды на одном хосте и получил две разные контрольные суммы. Я пытался решить его, используя ответ https://superuser.com/a/1092566/851200 (передать -frandom-seed=123
в качестве флага компиляции) - не помогло.
Если бы я мог создать одно приложение с одной и той же контрольной суммой дважды тот же хост - я думаю, что проблема будет практически решена, потому что мы можем сказать сертификационной организации: «Построить софт на Ubuntu 18.04.3 с G CC 7.5.0-3ubuntu1 ~ 18.04 с ARM GNUEABI G CC 4.8.5, построенный из источники, которые мы вам предоставили et c ", и базовый софт будет одинаковым, и он будет идентичен для сборки на том же системном корпусе. Но, возможно, я что-то упускаю.
Может ли кто-нибудь мне помочь?
ОБНОВЛЕНИЕ:
Я попытался увидеть, что именно отличается в результирующих двоичных файлах, используя arm-linux-gnueabi-readelf -a
, и получил следующий diff для двух последовательных сборок на одном компьютере для busybox:
--- a 2020-03-24 16:17:51.901192012 +0500
+++ b 2020-03-24 16:18:47.152671408 +0500
@@ -1404,7 +1404,7 @@
Displaying notes found at file offset 0x00000168 with length 0x00000020:
Owner Data size Description
GNU 0x00000010 NT_GNU_BUILD_ID (unique build ID bitstring)
- Build ID: ecc0ddee1a1f50c9b4ac98477be7ba55
+ Build ID: edab8a4ee42f8fd0e4ee7e931639f226
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "5TE"
Затем я проверил справочную страницу G CC и увидел If style is omitted, "sha1" is used ... The "md5" and "sha1" styles produces an identifier that is always the same in an identical output file
. Таким образом, значения по умолчанию должны быть в порядке и производить то же самое Build ID
, но это не так.