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그러나 이는 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 라이브러리를 읽을 수 없다는 모호한 오류가 발생했습니다. 그래서 포기하고 우분투 가상 머신에서 실행했습니다.

관련 정보