Одной из сильных сторон NixOS является то, что вы можете использовать модули NixOS для таких вещей, как переопределение версий пакетов, чтобы вы могли настроить, какое программное обеспечение работает на вашем компьютере. Вы можете использовать это для ручного исправления программ или, в качестве альтернативы, для переопределения зависимостей с другими версиями. Сегодня я покажу вам, как использовать оверлей, чтобы заставить NixOS пересобрать nginx с OpenSSL 1.1.1 вместо OpenSSL 3.x. Вы можете сделать это, если хотите снизить риски, связанные с КРИТИЧЕСКОЙ проблемой безопасности, объявленной для OpenSSL 3.x (OpenSSL 1.1.1 не указан как КРИТИЧЕСКАЯ).
Откройте файл configuration.nix
и добавьте его в блок модуля:
nixpkgs.overlays = [ (final: prev: { nginxStable = prev.nginxStable.override { openssl = prev.openssl_1_1; }; }) ];

openssl
вместо openssl_1_1
.Это создаст наложение , которое заменит пакет nginx версией, в которой OpenSSL заменен на пакет OpenSSL 1.x.

nginxStable
вместо nginx
, потому что по умолчанию services.nginx.package
имеет значение nginxStable
. В качестве альтернативы вы можете использовать что-то вроде этого, чтобы напрямую изменить пакет nginx: services.nginx.package = (pkgs.nginxStable.override { openssl = pkgs.openssl_1_1; });
Это может быть идеальным в зависимости от фактов и обстоятельств. Он использует переопределение для изменения версии OpenSSL, которая передается в сборку пакета. Это работает, потому что пакеты в nixpkgs
определяются примерно так:
{ stdenv, openssl, fetchurl }: stdenv.mkDerivation { # whatever is needed to build the software }
Каждый вход в верхней строке является аргументом пакета (который моделируется как функция). Когда вы используете .override
, вы переопределяете аргументы, которые вы передаете функциям пакета. Это означает, что когда вы используете этот оверлей, который я вставил, вы будете переопределять версию OpenSSL, переданную в процесс сборки nginx, что сделает nginx зависимым от OpenSSL 1.x.
В зависимости от рассматриваемого программного обеспечения вы сможете использовать эту стратегию для исправления любых других общедоступных программ. Единственная загвоздка в том, что программное обеспечение должно быть совместимо с OpenSSL 1.x.

