NixOS:修改 buildFHSUserEnv 环境上的配置文件

NixOS:修改 buildFHSUserEnv 环境上的配置文件

在 NixOS 上,我使用 FHS环境unixODBC向.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,也非常欢迎。

答案1

所以我决定调查一下来源,因为文档非常糟糕。

显然,如果您向 buildTargets 添加派生输出 /etc 或 /var 文件夹中的文件,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 虚拟机中运行它。

相关内容