Open diefans opened 1 month ago
Thanks for the feedback.
https://github.com/kcl-lang/lib/pull/154 Can this modification solve the problem of creating subfolders?
Hey @Peefy your fix is only solving half of the issue, and I would like to reopen this issue. The application now tries to create a lockfile in the readonly directories:
panic: open /nix/store/kyhhm0yx0h7ckrjzx28kazvp8vmx237c-kclvm-0.10.3/lib/install.lock: read-only file system
IMHO the application should perform its "userspace business" wholly somewhere in ${XDG_CACHE_HOME}
resp. ${HOME}/.cache
. The assumption to have write permission in the library directory cannot be hold.
Despite all that, thank you for your efforts!
@diefans Thank you!
https://github.com/kcl-lang/lib/commit/e4b13625ffb97ba38682f2b438790588de187861
Do you mean I should modify it this way?
@Peefy I think the problem is related to the override of the libPath
by env var KCL_LIB_HOME
, which in the NixOS case points to a readonly directory.
In https://github.com/kcl-lang/lib/blob/main/go/native/loader.go#L31-L34 the libPath()
call result gets overridden and points to this readonly directory. So maybe the definition of KCL_LIB_HOME
in https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/kc/kcl/package.nix#L49 is not right...
@diefans Thank you! 👍
Do you mean we should modify the KCL nix configuration here?
The following patch will fix the issue for NixOS
diff --git a/pkgs/by-name/kc/kcl/package.nix b/pkgs/by-name/kc/kcl/package.nix
index 0200265bb6d6..fe9d71af73f6 100644
--- a/pkgs/by-name/kc/kcl/package.nix
+++ b/pkgs/by-name/kc/kcl/package.nix
@@ -11,16 +11,16 @@
}:
buildGo123Module rec {
pname = "kcl";
- version = "0.10.0";
+ version = "0.10.6";
src = fetchFromGitHub {
owner = "kcl-lang";
repo = "cli";
rev = "v${version}";
- hash = "sha256-0KxT4t77EDB7Vr/cb+P20ARRR+7g5uZiF5QYOArUhgI=";
+ hash = "sha256-NyqiypzKjMcT61bEjUHa1QGyeoJtcx78qzch9sdgn2k=";
};
- vendorHash = "sha256-9APQDYCBvG38y0ZYuacfyUmjoEV9jGqRg7OZ7mArzIU=";
+ vendorHash = "sha256-uFtEKIPL052BwN7NdIvgoQWR4EbVMoMKkQ3cvd2S0Ww=";
# By default, libs and bins are stripped. KCL will crash on darwin if they are.
dontStrip = stdenv.isDarwin;
@@ -46,7 +46,6 @@ buildGo123Module rec {
postFixup = ''
wrapProgram $out/bin/kcl \
--prefix PATH : "${lib.makeBinPath [kclvm kclvm_cli]}" \
- --prefix KCL_LIB_HOME : "${lib.makeLibraryPath [kclvm]}" \
--prefix KCL_GO_DISABLE_INSTALL_ARTIFACT : false
'';
While digging into the code I am also quite confident now, that the env vars for disabling certain installer features are not longer respected: https://github.com/kcl-lang/kcl-go/blob/main/pkg/env/env.go#L33-L34 see https://github.com/kcl-lang/kcl-go/pull/259 At least a code search shows only the implementation of the setting, but no usage: https://github.com/search?q=repo%3Akcl-lang%2Fkcl-go%20GetDisableInstallArtifact&type=code
Thanks for the feedback. This config will be deprecated in the next version.
Bug Report
I am using NixOS, where the directories of packages are readonly.
The kcl installer v0.10.3 seems to try to create a directory
kcl
under$KCL_LIB_HOME
This commit was introducing it: https://github.com/kcl-lang/lib/commit/3c73ffd5173227b3fa4893f653ac450af71a6069
1. Minimal reproduce step (Required)
build kcl v0.10.3 for nix and run it, so that the internal installer is called...
IMHO for NixOS the whole installer and caching thingy should be disabled since there is not much "dynamic" expected in terms of installing/downloading/caching the kclvm library... Or there should be some pre-fetch/prepare stage for this cache, which then gets commited into the nix package.