2016-12-07 16 views
1

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

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 
+0

Кстати, вам не нужно указывать 'target'. Вы можете вставить его в имя, например: 'environment.etc." Ppp/peers/huawei ".text =" ... ";'. Реализация - https://github.com/NixOS/nixpkgs/blob/release-16.09/nixos/modules/system/etc/etc.nix#L114 – danbst

ответ

1

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

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

    environment.etc.huawei = rec { 
        target = "ppp/peers/huawei"; 
        text = ''... 
          # Below here what I've struggled 
          connect ${target} 
        ''; 
    }; 
    
+0

Основная проблема заключается в том, где правильный путь 'etc' (поскольку в NixOS, папка 'etc' не находится под корнем). Как мне получить этот путь, чтобы полностью найти мой скрипт (который находится в 'etc'). – Abdillah

+0

@Abdillah, почему вы думаете, что 'etc' не под корнем? Я попробовал 'ls -la /' и 'etc' там. Это даже не символическая ссылка. – danbst

+0

@ danbst О нет ... Да, вы правы! Кажется, я это переусердствовал :( – Abdillah

1

Вы можете обратиться к пути подать в /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 
+0

К сожалению, в моем случае у него нет источника. Но спасибо! – Abdillah

+0

вы пробовали это? неявно, когда вы устанавливаете 'text' (https://github.com/NixOS/nixpkgs/blob/release-16.09/nixos/modules/system/etc/etc.nix#L115). – danbst

+0

Да, но это пошло не так, источник undefined :( – Abdillah

0

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

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

connect /etc/${environment.etc."huawei-script".target} 

 Смежные вопросы

  • Нет связанных вопросов^_^