Как мы относимся к пакету etc из конфигурации NixOS?

Я хочу получить путь, который ведет к местоположению nixos /etc (любое из /run/current-system/etc или /nix/store/hashhere-etc-1.0). Я использую этот путь для настройки pppd connect скрипта, вроде следующего,

  environment.etc."huawei" =
    { text = ''
        /dev/ttyUSB0
        38400
        lock
        crtscts
        nodetach
        noipdefault
        # Below here what I've struggled
        connect ${pkgs.etc}/${environment.etc."huawei-script".target}
      '';
      mode = "0777";
      target = "ppp/peers/huawei"; };

Я пытался написать ${pkgs.etc}, ${system.build.etc} или даже ${environment.etc} возникающие ошибки.

Структура каталогов на самом деле относительна, но я думаю, что безопаснее использовать абсолютный путь.

    /nix/store/...etc.../ppp/peers
    |- huawei
    |- huawei.d
       |- huawei.sh
       |- huawei.chat 

person Abdillah    schedule 07.12.2016    source источник
comment
кстати, вам не нужно указывать target. Вы можете вставить его в имя, например: environment.etc."ppp/peers/huawei".text = "...";. Реализация - github.com/ NixOS / nixpkgs / blob / release-16.09 / nixos / modules /   -  person danbst    schedule 12.12.2016


Ответы (3)


Если я правильно понимаю, ваша проблема в том, что вам просто нужно передать строковое значение атрибута target в директиву huawei.text connect. Согласно описанию для целевого атрибута значение - это путь относительно /etc, поэтому вы можете:

  1. Сделайте значение директивы подключения строковым литералом connect /etc/ppp/peers/huawei или
  2. сделайте атрибут etc.huaweiattribute рекурсивным, чтобы атрибуты могли ссылаться друг на друга, делать

    environment.etc.huawei = rec {
        target = "ppp/peers/huawei";
        text = ''...
                 # Below here what I've struggled
                 connect ${target}
        '';
    };
    
person brocking    schedule 07.12.2016
comment
Основная проблема на самом деле заключается в том, где правильный путь etc (поскольку в NixOS папка etc не ниже корня). Как мне получить этот путь, чтобы точно определить местонахождение моего скрипта (который находится в etc). - person Abdillah; 07.12.2016
comment
@Abdillah, почему ты думаешь, что etc не под root? Я пробовал ls -la / и etc есть. Это даже не символическая ссылка. - person danbst; 10.12.2016
comment
@danbst О нет ... Да ты прав! Кажется, я над этим слишком много обдумываю :( - person Abdillah; 10.12.2016
comment
Спасибо @nickbh, поэтому ваше предложение №1 верное. - person Abdillah; 11.12.2016

Вы можете сослаться на путь к файлу в /nix/store/...etc... следующим образом:

{ config, pkgs, lib, ... }:

{
  environment.etc."test".text = "helo";
  environment.etc."test2".text = "${config.environment.etc."test".source.outPath}";
}

Теперь у меня в /etc/test2:

$ cat /etc/test2
/nix/store/1igc2rf011jmrr3cprsgbdp3hhm5d4l0-etc-test
person danbst    schedule 10.12.2016
comment
К сожалению, в моем случае у него нет источника. Но спасибо! - person Abdillah; 11.12.2016
comment
вы пробовали это? Атрибут source создается неявно, когда вы устанавливаете text (github.com/NixOS/nixpkgs/blob/release-16.09/nixos/modules/). - person danbst; 12.12.2016
comment
ах, я исправил пример кода. Причина заключалась в ссылке через атрибут config - person danbst; 13.12.2016

Извините, я упустил из виду тот факт, что NixOS фактически отображает любые файлы в /nix/store/...etc../ в сам /etc.

Итак, чтобы обратиться к файлу, лучше использовать /etc напрямую.

connect /etc/${environment.etc."huawei-script".target}
person Abdillah    schedule 11.12.2016