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
그러나 이는 options 에서 생성된 구성 파일과 함께 작동 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
그래서 조사해 보기로 했어요원천, 문서가 매우 열악하기 때문입니다.
분명히 파생된 출력 /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 라이브러리를 읽을 수 없다는 모호한 오류가 발생했습니다. 그래서 포기하고 우분투 가상 머신에서 실행했습니다.