Closed levydsa closed 5 months ago
Hi @levydsa! First question that comes to mind is your Cargo.lock
file up to date? Running cargo update
should make sure that the git entry shows up and can be picked up during vendoring
It makes a lot of sense. I don't remenber updating the Cargo.lock before running the nix build
.
Now, cargo update
fails in a similar way. Maybe I have to set something up?
$ cargo update
Updating crates.io index
Updating git repository `https://github.com/levydsa/libsql.git`
error: failed to get `libsql` as a dependency of package `qed-web v0.1.0 (/home/dante/src/repos/qed/crates/qed-web)`
Caused by:
failed to load source for dependency `libsql`
Caused by:
Unable to update https://github.com/levydsa/libsql.git?branch=nix-patch
Caused by:
failed to fetch into: /home/dante/.local/share/cargo/git/db/libsql-32cf909f52753506
Caused by:
network failure seems to have happened
if a proxy or similar is necessary `net.git-fetch-with-cli` may help here
https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli
Caused by:
SSL error: unknown error; class=Ssl (16)
$ CARGO_NET_GIT_FETCH_WITH_CLI="true" cargo update
Updating crates.io index
Updating git repository `https://github.com/levydsa/libsql.git`
remote: Enumerating objects: 243527, done.
remote: Counting objects: 100% (128/128), done.
remote: Compressing objects: 100% (104/104), done.
error: 1315 bytes of body are still expected5 MiB | 1004.00 KiB/s
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output
error: failed to get `libsql` as a dependency of package `qed-web v0.1.0 (/home/dante/src/repos/qed/crates/qed-web)`
Caused by:
failed to load source for dependency `libsql`
Caused by:
Unable to update https://github.com/levydsa/libsql.git?branch=nix-patch
Caused by:
failed to fetch into: /home/dante/.local/share/cargo/git/db/libsql-32cf909f52753506
Caused by:
process didn't exit successfully: `git fetch --force --update-head-ok 'https://github.com/levydsa/libsql.git' '+refs/heads/nix-patch:refs/remotes/origin/nix-patch'` (exit status: 128)
cargo run
worked lol. I made a typo, it's already "ammended" it in the nix-patch
branch. Just to show the repos getting fetched.
$ cargo run
Updating git repository `https://github.com/levydsa/libsql.git`
Locking 7 packages
Adding libsql v0.4.0 (https://github.com/levydsa/libsql.git?branch=nix-patch#10cb6996)
Adding libsql-ffi v0.3.0 (https://github.com/levydsa/libsql.git?branch=nix-patch#10cb6996)
Adding libsql-hrana v0.2.0 (https://github.com/levydsa/libsql.git?branch=nix-patch#10cb6996)
Adding libsql-rusqlite v0.31.0 (https://github.com/levydsa/libsql.git?branch=nix-patch#10cb6996)
Adding libsql-sqlite3-parser v0.12.0 (https://github.com/levydsa/libsql.git?branch=nix-patch#10cb6996)
Adding libsql-sys v0.6.0 (https://github.com/levydsa/libsql.git?branch=nix-patch#10cb6996)
Adding libsql_replication v0.4.0 (https://github.com/levydsa/libsql.git?branch=nix-patch#10cb6996)
Compiling libsql-ffi v0.3.0 (https://github.com/levydsa/libsql.git?branch=nix-patch#10cb6996)
Compiling libsql-sqlite3-parser v0.12.0 (https://github.com/levydsa/libsql.git?branch=nix-patch#10cb6996)
Compiling libsql-hrana v0.2.0 (https://github.com/levydsa/libsql.git?branch=nix-patch#10cb6996)
error: expected `;`, found keyword `let`
--> /home/dante/.local/share/cargo/git/checkouts/libsql-32cf909f52753506/10cb699/libsql-ffi/build.rs:102:57
|
102 | dbg!((format!("{dir}/{bindgen_rs_path}"), out_path))
| ^ help: add `;` here
103 |
104 | let mut cfg = cc::Build::new();
| --- unexpected token
error: could not compile `libsql-ffi` (build script) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
When I fixed the semicolon, everything seems to run fine. But when trying to build...
$ nix build .#container
warning: Git tree '/home/dante/src/repos/qed' is dirty
error: builder for '/nix/store/fng144bdb79s083j49d4x6p6m93fmwvs-cargo-git.drv' failed with exit code 1;
last 10 log lines:
> source root is source
> Running phase: patchPhase
> Running phase: updateAutotoolsGnuConfigScriptsPhase
> Updating Autotools / GNU config script to a newer upstream version: ./libsql-ffi/bundled/SQLite3MultipleCiphers/admin/build-aux/config.sub
> Updating Autotools / GNU config script to a newer upstream version: ./libsql-sqlite3/config.sub
> Updating Autotools / GNU config script to a newer upstream version: ./libsql-ffi/bundled/SQLite3MultipleCiphers/admin/build-aux/config.guess
> Updating Autotools / GNU config script to a newer upstream version: ./libsql-sqlite3/config.guess
> Running phase: installPhase
> cp: cannot stat '/build/source/libsql-sqlite3/ext/crr/rs/sqlite-rs-embedded/sqlite3_capi/deps/sqlite3.h': No such file or directory
> cp: cannot stat '/build/source/libsql-sqlite3/ext/crr/rs/sqlite-rs-embedded/sqlite3_capi/deps/sqlite3ext.h': No such file or directory
For full logs, run 'nix log /nix/store/fng144bdb79s083j49d4x6p6m93fmwvs-cargo-git.drv'.
error: 1 dependencies of derivation '/nix/store/2yxgnbj59alh04bjikka6pyzkib5nmp1-linkLockedDeps.drv' failed to build
error: 1 dependencies of derivation '/nix/store/6rpzy95kb32qq9l9qs9xhjd3vfkw6a5z-vendor-cargo-deps.drv' failed to build
error: 1 dependencies of derivation '/nix/store/kcbfdjzvkya0l7v7k25mm52m566dka7b-qed-web-0.1.0.drv' failed to build
error: 1 dependencies of derivation '/nix/store/4ah1mx85jj4n9namp1n4gyzpfvwddg2d-image-root.drv' failed to build
error: 1 dependencies of derivation '/nix/store/pm4ibhzrgvnvivig3yw5jz1c99va5jdw-docker-layer-qed-web.drv' failed to build
error: 1 dependencies of derivation '/nix/store/3i4v3099fv4z9lbzi6b59q9h7yjgxfls-docker-image-qed-web.tar.gz.drv' failed to build
Now I'm lost. I know that the build.rs for libsql-ffi
is broken when trying to build with crane from the cargo registry. But this error is new. I don't know why there is a symlink in upstream libsql that points to nothing. I'm going insane.
Ok, now if fixed it by just copying the files that should be symlinked, just to make things work. Now I can debug the initial problem. It seems that libsql-ffi
is trying to modify files that are off the nix store.
warning: Git tree '/home/dante/src/repos/qed' is dirty
error: builder for '/nix/store/w1i4hsyy5bxvjxs11n8r4kacq0bx2mrs-qed-web-deps-0.1.0.drv' failed with exit code 101;
last 10 log lines:
>
> --- stderr
> [/nix/store/h23s6yzi0w9m9h0bm606fysg5wmq4bk4-vendor-cargo-deps/2207e6162cffb926680ad9d4345ae20306b4e0c2c08a080ea970acf2486365a6/libsql-ffi-0.3.0/build.rs:101:5] (format!("{dir}/{bindgen_rs_path}"), out_path) = (
> "/nix/store/h23s6yzi0w9m9h0bm606fysg5wmq4bk4-vendor-cargo-deps/2207e6162cffb926680ad9d4345ae20306b4e0c2c08a080ea970acf2486365a6/libsql-ffi-0.3.0/bundled/bindings/bindgen.rs",
> "/build/source/target/release/build/libsql-ffi-c266b42decff3ceb/out/bindgen.rs",
> )
> thread 'main' panicked at /nix/store/h23s6yzi0w9m9h0bm606fysg5wmq4bk4-vendor-cargo-deps/2207e6162cffb926680ad9d4345ae20306b4e0c2c08a080ea970acf2486365a6/libsql-ffi-0.3.0/build.rs:102:65:
> called `Result::unwrap()` on an `Err` value: Os { code: 13, kind: PermissionDenied, message: "Permission denied" }
> note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
> warning: build failed, waiting for other jobs to finish...
For full logs, run 'nix log /nix/store/w1i4hsyy5bxvjxs11n8r4kacq0bx2mrs-qed-web-deps-0.1.0.drv'.
error: 1 dependencies of derivation '/nix/store/75ggrf973z2n75lx35x87qqmm9nknhka-qed-web-0.1.0.drv' failed to build
error: 1 dependencies of derivation '/nix/store/xn4h04xnpij284jqdiqfi95lhc35lms3-image-root.drv' failed to build
error: 1 dependencies of derivation '/nix/store/5apj1agb28qwd6v3x635418g8iz343my-docker-layer-qed-web.drv' failed to build
error: 1 dependencies of derivation '/nix/store/5barcbggjvgw1nzkz6q86ldnzi85g3yx-docker-image-qed-web.tar.gz.drv' failed to build
But it seems to be trying to write to $OUT_DIR
, which is correct? idk
@ipetkov shoud I open another issue and close this one?
If you have a flake that reproduces the issue you can post it here
Clone it from here https://github.com/levydsa/qed.
The problem is that build script will attempt to copy bindgen.rs
to OUT_DIR
multiple times. Here's what happens:
/nix/store/...
r--
, usually cargo keeps source files stored as rw-
)OUT_DIR
the first time, but the file will maintain its read-only r--
permissionsstd::fs::copy
appears to try to update the file in place (which fails due to no write-permissions)If you go through some trouble to make the vendored sources writable the build continues past this point. Hence my advice is to patch the build script to either not copy the file multiple times, or to attempt to delete the file before copying.
Hope this helps!
When trying to build a package with git dependency this error happens. Any easy way to solve this?
When I set the
net.git-fetch-with-cli
env var and add the git package to the build. The output is similar, but with another error (maybe related to networking again?).I was doing this to try to debug another problem when trying to build with the libsql-ffi dependency. Maybe I can make another issue later? I'll try to figure it out on my own, but this issue is a bit overwhelming to me. No idea what's happening.