Как я могу включить плагины Caddy в NixOS? - PullRequest
0 голосов
/ 20 марта 2019

Я только начал играть с NixOS, и до сих пор мне удалось отредактировать /etc/nixos/configuration.nix в моей виртуальной машине NixOS 18.09, чтобы включить PHP-FPM и веб-сервер Caddy.

{ config, pkgs, ... }:

{
  imports = [ <nixpkgs/nixos/modules/installer/virtualbox-demo.nix> ];

  users = {
    mutableUsers = false;
    groups = {
      caddy = { };
      php-project = { };
    };
    users = {
      hello = {
        group = "php-project";
      };
    };
  };

  environment.systemPackages = [
    pkgs.htop  
    pkgs.httpie
    pkgs.php  # for PHP CLI
  ];

  services.caddy = {
    enable = true;
    email = "david@example.com";
    agree = true;
    config = ''
      (common) {
        gzip
        header / -Server
        header / -X-Powered-By
      }
      :8080 {
        root /var/www/hello
        fastcgi / /run/phpfpm/hello.sock php
        log syslog
        import common
      }
    '';
  };

  services.phpfpm = {
    phpOptions = ''
      date.timezone = "Europe/Berlin"
    '';
    poolConfigs = {
      hello = ''
        user = hello
        listen = /run/phpfpm/hello.sock
        ; ...
        pm.max_requests = 500
      '';
    };
  };
}

PHP-обработанный ответ доступен по адресу localhost: 8080.(Yay!)

To включить плагины Caddy при компиляции из источника , импорт Go добавлен в run.go caddy, например:

_ "github.com/mholt/caddy/caddyhttp" // plug in the HTTP server type
    // This is where other plugins get plugged in (imported)
_ "github.com/nicolasazrak/caddy-cache" // added to use another plugin
)

Как я могу настроить вставку такой строки после загрузки исходного кода и до начала сборки?(Если это разумный подход при использовании Nix?)

Пакет caddy NixOS 18.09 .

Служба caddy NixOS 18.09 .

Я полагаю, что при написании пакета может быть назначен скрипт компоновщика (Bash или другой), и я думаю, что в него можно было бы вставить строку.Но я заблудился относительно того, как назначить скрипт для существующего пакета в этой ситуации (переопределить атрибут / использовать оверлей?) И где поместить скрипт на диск.


Обновление статуса

Я немного читал о настройке пакетов в целом, и мне кажется, что overlays может быть тем, что мне нужно.Тем не менее, я не могу оценить мой оверлей.

Я использую переопределение имени пакета в качестве теста, поскольку это проще, чем исправление кода.

Попытка оверлея 1

/etc/nixos/configuration.nix:

{ config, pkgs, options, ... }:

{
  imports = [ <nixpkgs/nixos/modules/installer/virtualbox-demo.nix> ];

  nix.nixPath = options.nix.nixPath.default ++ [
    "nixpkgs-overlays=/etc/nixos/overlays-compat/"
  ];

  # ...
}

/etc/nixos/overlays-compat/overlays.nix:

self: super:
with super.lib;
let
  # Using the nixos plumbing that's used to evaluate the config...
  eval = import <nixpkgs/nixos/lib/eval-config.nix>;
  # Evaluate the config,
  paths = (eval {modules = [(import <nixos-config>)];})
    # then get the `nixpkgs.overlays` option.
    .config.nixpkgs.overlays
  ;
in
foldl' (flip extends) (_: super) paths self

/etc/nixos/overlays-compat/caddy.nix:

self: super:
{
  caddy = super.caddy.override {
    name = "caddy-override";
  };
}

попытка наложения 2

/etc/nixos/configuration.nix:

  nixpkgs.overlays = [ (self: super: {
    caddy = super.caddy.override {
      name = "caddy-override";
    };
  } ) ];

error: anonymous function at /nix/store/mr5sfmz6lm5952ch5q6v49563wzylrkx-nixos-18.09.2327.37694c8cc0e/nixos/pkgs/servers/caddy/default.nix:1:1 called with unexpected argument 'name', at /nix/store/mr5sfmz6lm5952ch5q6v49563wzylrkx-nixos-18.09.2327.37694c8cc0e/nixos/lib/customisation.nix:69:12

overrideAttrs

Ранее мне удалось переопределить имя пакета следующим образом:

{ config, pkgs, options, ... }:

let
  caddyOverride = pkgs.caddy.overrideAttrs (oldAttrs: rec {
    name = "caddy-override-v${oldAttrs.version}";
  });
in {
{
  # ...

  services.caddy = {
    package = caddyOverride;
    # ...
  }
}

Я видел в htop, что бинарный файл caddy находился в папке с именем /nix/store/...-caddy-override-v0.11.0-bin/.Но я понимаю, что переопределение таким образом было заменено наложениями.

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Существует проблема для плагинов Caddy: https://github.com/NixOS/nixpkgs/issues/14671

PR приветствуется!

0 голосов
/ 20 марта 2019

Чтобы добавить плагины в Caddy, похоже, что метод - изменить источник.

Вам потребуется адаптировать выражение Nixpkgs для Caddy , чтобы сделать это возможным. Это можно сделать вне дерева Nixpkgs, например, используя services.caddy.package = callPackage ./my-caddy.nix {}, или разветвив репозиторий Nixpkgs и указав свой NIX_PATH на свой клон.

...