Configuration
NixOS:在 buildFHSUserEnv 環境中修改配置文件
在 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,也非常歡迎。
所以我決定查看原始碼,因為文件非常糟糕。
顯然,如果你在 /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 中執行它。