PackageCompiler.jl
PackageCompiler.jl copied to clipboard
ERROR: open: permission denied (EACCES)
I installed Julia in /usr/local
, so the following fails.
PackageCompiler.compile_package("TrivialPackage", force = false, reuse = true)
Julia Version 0.6.2 Linux (x86_64-linux-gnu)
I think this should be resolved! Please reopen if not!
Still happens in my case if I pass in force = true
. Guess users are not supposed to try to replace the system image? What if I want to compile a package used system-wide such as LanguageServer
. Should I just compile the package as the root user (not sure if that works though).
I'm experiencing the same issue with Julia 1.3.0 when running this example in the repo docs - any advice?
oliver@oliver-x1c7-arch:~/local/src % git clone [email protected]:JuliaLang/PackageCompiler.jl.git
Cloning into 'PackageCompiler.jl'...
remote: Enumerating objects: 237, done.
remote: Counting objects: 100% (237/237), done.
remote: Compressing objects: 100% (101/101), done.
remote: Total 4035 (delta 92), reused 181 (delta 57), pack-reused 3798
Receiving objects: 100% (4035/4035), 1.04 MiB | 9.92 MiB/s, done.
Resolving deltas: 100% (2177/2177), done.
oliver@oliver-x1c7-arch:~/local/src % cd PackageCompiler.jl/examples
oliver@oliver-x1c7-arch:~/local/src/PackageCompiler.jl/examples (master=) % julia -q --project
julia> VERSION
v"1.3.0"
julia> using PackageCompiler
[ Info: Precompiling PackageCompiler [9b87118b-4619-50d2-8e1e-99f35a4d4d9d]
julia> create_app("MyApp", "MyAppCompiled")
ERROR: IOError: open: permission denied (EACCES)
Stacktrace:
[1] #cp at ./none:0 [inlined]
[2] bundle_julia_libraries(::String) at /home/oliver/local/src/PackageCompiler.jl/src/PackageCompiler.jl:678
[3] #create_app#6(::Nothing, ::Array{String,1}, ::Array{String,1}, ::Bool, ::Bool, ::Bool, ::Bool, ::String, ::typeof(create_app), ::String, ::String) at /home/oliver/local/src/PackageCompiler.jl/src/PackageCompiler.jl:614
[4] create_app(::String, ::String) at /home/oliver/local/src/PackageCompiler.jl/src/PackageCompiler.jl:587
[5] top-level scope at REPL[2]:1
Investigating a bit more, it seems that [2]
in the stack trace is at /home/oliver/local/src/PackageCompiler.jl/src/PackageCompiler.jl:678
is
cp(julia_libdir(), app_libdir; force=true)
.
Putting a @show
just before that, I get julia_libdir() = "/usr/lib"
. Is the desired behavior really to copy my entire /usr/lib
into this app in order to compile it? Seems a bit overkill ;)
(@SimonDanisch - I hope you don't mind reopening the issue)
I now see this big warning in the docs that you should use binaries downloaded from the julia website. Presumably, it was previously trying to copy my whole /usr/lib
because that's where libjulia
was installed by my package manager (Arch linux/pacman).
It succeeded without any errors after removing my system-install and downloading a fresh v1.4.0 from the julia website. Not sure if there's something actionable here, or if this issue should just remain closed.
Thanks, Oliver
Even the official binaries do not help if they are placed in /usr/lib. This happens when julia-bin is used on Arch. I think juliaup should resolve this.
The offending line is the cp
in:
https://github.com/JuliaLang/PackageCompiler.jl/blob/c0e68553c7a74bd580ba7238816ab7c4b7ce4b9c/src/PackageCompiler.jl#L1021-L1027
when julia_libdir() == "/usr/lib"
.
Can we just copy libjulia.*
and the contents of the julia
subdirectory?
@feanor12 do you have a /usr/lib/julia
directory? If so, what is in it?
If I install julia-bin I have a /usr/lib/julia
directory.
Files in /usr/lib/julia
$ pacman -Ql julia-bin | grep /usr/lib/julia
julia-bin /usr/lib/julia/
julia-bin /usr/lib/julia/libLLVM-13jl.so
julia-bin /usr/lib/julia/libLLVM.so
julia-bin /usr/lib/julia/libamd.so
julia-bin /usr/lib/julia/libamd.so.2
julia-bin /usr/lib/julia/libamd.so.2.4.6
julia-bin /usr/lib/julia/libatomic.so
julia-bin /usr/lib/julia/libatomic.so.1
julia-bin /usr/lib/julia/libatomic.so.1.2.0
julia-bin /usr/lib/julia/libblastrampoline.so
julia-bin /usr/lib/julia/libblastrampoline.so.5
julia-bin /usr/lib/julia/libblastrampoline.so.5.0.2
julia-bin /usr/lib/julia/libbtf.so
julia-bin /usr/lib/julia/libbtf.so.1
julia-bin /usr/lib/julia/libbtf.so.1.2.6
julia-bin /usr/lib/julia/libcamd.so
julia-bin /usr/lib/julia/libcamd.so.2
julia-bin /usr/lib/julia/libcamd.so.2.4.6
julia-bin /usr/lib/julia/libccalltest.so
julia-bin /usr/lib/julia/libccalltest.so.debug
julia-bin /usr/lib/julia/libccolamd.so
julia-bin /usr/lib/julia/libccolamd.so.2
julia-bin /usr/lib/julia/libccolamd.so.2.9.6
julia-bin /usr/lib/julia/libcholmod.so
julia-bin /usr/lib/julia/libcholmod.so.3
julia-bin /usr/lib/julia/libcholmod.so.3.0.14
julia-bin /usr/lib/julia/libcolamd.so
julia-bin /usr/lib/julia/libcolamd.so.2
julia-bin /usr/lib/julia/libcolamd.so.2.9.6
julia-bin /usr/lib/julia/libcurl.so
julia-bin /usr/lib/julia/libcurl.so.4
julia-bin /usr/lib/julia/libcurl.so.4.8.0
julia-bin /usr/lib/julia/libdSFMT.so
julia-bin /usr/lib/julia/libgcc_s.so.1
julia-bin /usr/lib/julia/libgfortran.so
julia-bin /usr/lib/julia/libgfortran.so.5
julia-bin /usr/lib/julia/libgfortran.so.5.0.0
julia-bin /usr/lib/julia/libgit2.so
julia-bin /usr/lib/julia/libgit2.so.1.3
julia-bin /usr/lib/julia/libgit2.so.1.3.0
julia-bin /usr/lib/julia/libgmp.so
julia-bin /usr/lib/julia/libgmp.so.10
julia-bin /usr/lib/julia/libgmp.so.10.4.1
julia-bin /usr/lib/julia/libgmpxx.so
julia-bin /usr/lib/julia/libgmpxx.so.4
julia-bin /usr/lib/julia/libgmpxx.so.4.6.1
julia-bin /usr/lib/julia/libgomp.so
julia-bin /usr/lib/julia/libgomp.so.1
julia-bin /usr/lib/julia/libgomp.so.1.0.0
julia-bin /usr/lib/julia/libjulia-codegen.so
julia-bin /usr/lib/julia/libjulia-codegen.so.1
julia-bin /usr/lib/julia/libjulia-codegen.so.1.8
julia-bin /usr/lib/julia/libjulia-internal.so
julia-bin /usr/lib/julia/libjulia-internal.so.1
julia-bin /usr/lib/julia/libjulia-internal.so.1.8
julia-bin /usr/lib/julia/libklu.so
julia-bin /usr/lib/julia/libklu.so.1
julia-bin /usr/lib/julia/libklu.so.1.3.8
julia-bin /usr/lib/julia/libldl.so
julia-bin /usr/lib/julia/libldl.so.2
julia-bin /usr/lib/julia/libldl.so.2.2.6
julia-bin /usr/lib/julia/libllvmcalltest.so
julia-bin /usr/lib/julia/libmbedcrypto.so
julia-bin /usr/lib/julia/libmbedcrypto.so.2.28.0
julia-bin /usr/lib/julia/libmbedcrypto.so.7
julia-bin /usr/lib/julia/libmbedtls.so
julia-bin /usr/lib/julia/libmbedtls.so.14
julia-bin /usr/lib/julia/libmbedtls.so.2.28.0
julia-bin /usr/lib/julia/libmbedx509.so
julia-bin /usr/lib/julia/libmbedx509.so.1
julia-bin /usr/lib/julia/libmbedx509.so.2.28.0
julia-bin /usr/lib/julia/libmpfr.so
julia-bin /usr/lib/julia/libmpfr.so.6
julia-bin /usr/lib/julia/libmpfr.so.6.1.0
julia-bin /usr/lib/julia/libnghttp2.so
julia-bin /usr/lib/julia/libnghttp2.so.14
julia-bin /usr/lib/julia/libnghttp2.so.14.22.0
julia-bin /usr/lib/julia/libopenblas64_.0.3.20.so
julia-bin /usr/lib/julia/libopenblas64_.so
julia-bin /usr/lib/julia/libopenblas64_.so.0
julia-bin /usr/lib/julia/libopenlibm.so
julia-bin /usr/lib/julia/libopenlibm.so.4
julia-bin /usr/lib/julia/libopenlibm.so.4.0
julia-bin /usr/lib/julia/libpcre2-8.so
julia-bin /usr/lib/julia/libpcre2-8.so.0
julia-bin /usr/lib/julia/libpcre2-8.so.0.11.0
julia-bin /usr/lib/julia/libquadmath.so
julia-bin /usr/lib/julia/libquadmath.so.0
julia-bin /usr/lib/julia/libquadmath.so.0.0.0
julia-bin /usr/lib/julia/librbio.so
julia-bin /usr/lib/julia/librbio.so.2
julia-bin /usr/lib/julia/librbio.so.2.2.6
julia-bin /usr/lib/julia/libspqr.so
julia-bin /usr/lib/julia/libspqr.so.2
julia-bin /usr/lib/julia/libspqr.so.2.0.9
julia-bin /usr/lib/julia/libssh2.so
julia-bin /usr/lib/julia/libssh2.so.1
julia-bin /usr/lib/julia/libssh2.so.1.0.1
julia-bin /usr/lib/julia/libssp.so
julia-bin /usr/lib/julia/libssp.so.0
julia-bin /usr/lib/julia/libssp.so.0.0.0
julia-bin /usr/lib/julia/libstdc++.so
julia-bin /usr/lib/julia/libstdc++.so.6
julia-bin /usr/lib/julia/libstdc++.so.6.0.29
julia-bin /usr/lib/julia/libsuitesparseconfig.so
julia-bin /usr/lib/julia/libsuitesparseconfig.so.5
julia-bin /usr/lib/julia/libsuitesparseconfig.so.5.10.1
julia-bin /usr/lib/julia/libumfpack.so
julia-bin /usr/lib/julia/libumfpack.so.5
julia-bin /usr/lib/julia/libumfpack.so.5.7.9
julia-bin /usr/lib/julia/libunwind.so
julia-bin /usr/lib/julia/libunwind.so.8
julia-bin /usr/lib/julia/libunwind.so.8.0.1
julia-bin /usr/lib/julia/libuv.so
julia-bin /usr/lib/julia/libuv.so.2
julia-bin /usr/lib/julia/libuv.so.2.0.0
julia-bin /usr/lib/julia/libz.so
julia-bin /usr/lib/julia/libz.so.1
julia-bin /usr/lib/julia/libz.so.1.2.12
julia-bin /usr/lib/julia/sys.so
Files in /usr/lib
╰─$ pacman -Ql julia-bin | grep /usr/lib/ | grep -v /usr/lib/julia
julia-bin /usr/lib/
julia-bin /usr/lib/libjulia.so
julia-bin /usr/lib/libjulia.so.1
julia-bin /usr/lib/libjulia.so.1.8
I get similar problems under Manjaro Linux 22, Julia 1.8.2 installed via the integrated package manager.
IOError: open("/usr/lib/cups/backend/cups-brf", 0, 0): permission denied (EACCES)
The julia_libdir()
function returns /usr/lib
on my system, and then the script tries to copy all files from there - and (fortunately) fails due to some read access problems for certain files.
julia> PackageCompiler.julia_libdir()
"/usr/lib"
julia> Libdl.dlpath("libjulia")
"/usr/bin/../lib/libjulia.so.1"
julia> dirname(abspath(Libdl.dlpath("libjulia")))
"/usr/lib"