在 NixOS 上,我使用 FHS环境unixODBC
向.sqlite-odbc
libreoffice
{ 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 虚拟机中运行它。