Configuration

NixOS:在 buildFHSUserEnv 環境中修改配置文件

  • June 30, 2019

在 NixOS 上,我使用 FHSunixODBC環境sqlite-odbclibreoffice.

{ pkgs ? import <nixpkgs> {} }:
( pkgs.buildFHSUserEnv {
 name = "odbc-sqlite-libreoffice";
 targetPkgs = pkgs: with pkgs; [libreoffice unixODBC unixODBCDrivers.sqlite];
}).env

/etc/odbcinst.ini但是,這與從選項生成的配置文件結合使用environment.unixODBCDrivers,但我不知道如何將其傳遞給 chroot 的文件系統。

我嘗試使用以下extraBuildCommands選項:

extraBuildCommands = "ln -s /host/etc/odbcinst.ini /etc/odbcinst.ini";

但這似乎不是正確的方法,並且會導致錯誤:ln: failed to create symbolic link '/etc/odbcinst.ini': Permission denied


我將如何放置配置文件?我想應該有一種方法可以基於特定的系統配置/生成來創建環境。

如果有其他方法可以在 NixOS 上配置 ODBC 和 SQLite,也非常歡迎。

所以我決定查看原始碼,因為文件非常糟糕。

顯然,如果你在 /etc 或 /var 文件夾中添加派生輸出文件到 buildTargets,buildFHSUserEnv 會自動將它們複製到 FHS 環境中的相應位置。

對於我的情況,我編寫了一個簡單的推導,將配置文件放入 $out/etc/odbcinst.ini,並將其添加到 buildTargets:

odbcinst = pkgs.stdenv.mkDerivation {
 name = "odbcinst";
 buildCommand = ''
   mkdir -p $out/etc
   cp $odbcinst $out/etc/odbcinst.ini
 '';
 odbcinst = pkgs.writeTextFile {
   name = "odbcinst-ini";
   text = ''
     [SQLite]
     Description = ODBC driver for SQLite
     Driver = /lib/libsqlite3odbc.so
   '';
 };
}

你瞧:

[...]$ nix-shell odbc.nix 
odbc-chrootenv:[...]$ ls /etc
asound.conf  hosts   mtab       pam.d      resolv.conf  sudoers
default      localtime   nsswitch.conf  passwd     shadow   sudoers.d
fonts        login.defs  odbcinst.ini   profile    ssl      zoneinfo
group        machine-id  os-release profile.d  static

Libreoffice 辨識了該文件,但隨後它給了我一些關於無法讀取 sqlite 庫的難以理解的錯誤。所以,我放棄並在 Ubuntu VM 中執行它。

引用自:https://unix.stackexchange.com/questions/520546