Это похоже на сценарий, в котором вам может помочь Nix.
Наш продукт должен быть ABI-совместимым с системами CentOS5.
Двоичные файлы и библиотеки, созданные Nix (через Nixpkgs) не ссылаться на системные библиотеки.По сути, это похоже на статическое связывание, но достигается различными способами, такими как rpath и сценариями-оболочками.Это должно сделать ваш продукт ABI совместимым с любым дистрибутивом, если ваша программа явно не требует определенных функций операционной системы, кроме обычных библиотек.Например, если ваша программа зависит от драйвера графического процессора, это все еще может быть проблемой.
со специально созданным GCC
Nixpkgs позволяет создавать все пакетыили просто выбор с вашим пользовательским GCC.
с правильными зависимостями, указанными для деривации.
Nix идеально подходит для этой задачи.Я рекомендую строить с включенной функцией песочницы.Если вы не используете NixOS, вы должны установить его в многопользовательском режиме и включить песочницу.
Основная проблема, которую я вижу, состоит в том, что Nix использует современную библиотеку glibc какбазовый вывод, от которого мы не можем зависеть.
При сборке с Nix ваш продукт будет игнорировать систему glibc.Предоставить свой собственный glibc выполнимо, но я не думаю, что он вам действительно нужен, потому что вы строите все из исходного кода и совместимость с хост-системой не является проблемой.
или мы можем как-то зависетьна glibc, установленном в хост-системе (CentOS5)?
Этот подход используется в системах Mac OS X из-за необходимости.Это будет считаться шагом назад;вам понадобится веская причина для этого.
Подойдет ли Nix для этого случая использования?
Вам стоит попробовать.Nix может предоставить вам как минимум следующие гарантии:
- Все зависимости указаны
- Выводы, построенные параллельно, одинаково верны
- Каждая сборка является чистой сборкой, дажепри повторном использовании результатов более ранних сборок
- Воспроизводимость: если он собирается сегодня, он собирается завтра, и вы можете изменить его завтра
- Полные зависимости: при установке никакие зависимости не будут исключены
Удачи и не стесняйтесь задать вопрос.Программное обеспечение часто не любит, чтобы его принуждали к правильному поведению.
и использование задания CI
Полное раскрытие информации: я работаю над службой CIдля Nix.