我正在尝试构建一个能够运行我编写的 Julia 应用程序的奇异容器。
我是根据包含 Julia 1.2 的官方 docker 映像来执行此操作的。这是我的定义文件:
Bootstrap:docker
From:julia:1.2-buster
%post
apt-get update -y
apt-get install -y git
apt-get install -y wget
mkdir -p /usr/local/src/git-lfs
cd /usr/local/src/git-lfs
wget https://github.com/git-lfs/git-lfs/releases/download/v2.8.0/git-lfs-linux-amd64-v2.8.0.tar.gz
tar -xvzf git-lfs-linux-amd64-v2.8.0.tar.gz
./install.sh
cd ..
git clone https://gitlab.pasteur.fr/bli/qaf_demux.git
cd qaf_demux/Julia/QafDemux/
/usr/local/julia/bin/julia --project=. --eval 'import Pkg; Pkg.activate("."), Pkg.instantiate()'
apt-get remove -y git
apt-get autoremove -y
apt-get clean -y
%environment
export LC_ALL=C
export PATH=/usr/local/src/qaf_demux/Julia/QafDemux/bin:"${PATH}"
%runscript
exec /usr/local/src/qaf_demux/Julia/QafDemux/bin/qaf_demux.sh "$@"
%post当我尝试julia实例化项目时,构建在该阶段失败:
+ /usr/local/julia/bin/julia --project=. --eval import Pkg; Pkg.activate("."), Pkg.instantiate()
Activating environment at `/usr/local/src/qaf_demux/Julia/QafDemux/Project.toml`
Cloning default registries into `~/.julia`
Cloning registry from "https://github.com/JuliaRegistries/General.git"
Added registry `General` to `~/.julia/registries/General`
Updating registry at `~/.julia/registries/General`
Updating git-repo `https://github.com/JuliaRegistries/General.git`
ERROR: Package FASTX [c2308a5c-f048-11e8-3e8a-31650f418d12] not found in a registry.
Stacktrace:
[1] pkgerror(::String) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/Types.jl:112
[2] check_registered(::Pkg.Types.Context, ::Array{Pkg.Types.PackageSpec,1}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/Operations.jl:924
[3] up(::Pkg.Types.Context, ::Array{Pkg.Types.PackageSpec,1}, ::Pkg.Types.UpgradeLevel) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/Operations.jl:1043
[4] #up#43(::Pkg.Types.UpgradeLevel, ::Pkg.Types.PackageMode, ::Bool, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(Pkg.API.up), ::Pkg.Types.Context, ::Array{Pkg.Types.PackageSpec,1}) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:167
[5] #up#38 at ./none:0 [inlined]
[6] #up at ./none:0 [inlined]
[7] #instantiate#81(::Nothing, ::Bool, ::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::typeof(Pkg.API.instantiate), ::Pkg.Types.Context) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:463
[8] instantiate at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:461 [inlined]
[9] #instantiate#80 at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:458 [inlined]
[10] instantiate() at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.2/Pkg/src/API.jl:458
如果我使用相同的 docker 映像来构建“沙盒”容器 ( singularity build --sandbox <the folder> docker://julia:1.2-buster),并通过 使用它singularity shell --writable <the folder>,我可以作为普通用户执行此项目实例化步骤,并且它似乎可以工作。
如果我以 root 身份尝试,则会发生相同的ERROR: Package FASTX [c2308a5c-f048-11e8-3e8a-31650f418d12] not found in a registry.错误。
如果(在该可写沙箱中仍以 root 身份),我尝试在 REPL 中执行相同的问题:
(v1.2) pkg> activate .
Activating environment at `/usr/local/src/qaf_demux/Julia/QafDemux/Project.toml`
(QafDemux) pkg> instantiate
Updating registry at `~/.julia/registries/General`
Updating git-repo `https://github.com/JuliaRegistries/General.git`
ERROR: Package FASTX [c2308a5c-f048-11e8-3e8a-31650f418d12] not found in a registry.
这是在系统范围内安装 Julia 应用程序的正确方法吗?
(或多或少在我尝试https://discourse.julialang.org/t/julia-packages-with-singularity/19883/8的早期步骤中交叉发布,还没有答案)
编辑(2019 年 9 月 23 日)
感谢@David Varela的回答,使用Pkg.Registry.add(Pkg.RegistrySpec(; url="https://github.com/JuliaRegistries/General.git")); Pkg.Registry.add(Pkg.RegistrySpec(; url="https://github.com/BioJulia/BioJuliaRegistry.git"));我现在有一个工作定义文件:
Bootstrap:docker
From:julia:1.2-buster
%post
apt-get update -y
apt-get install -y git
apt-get install -y wget
apt-get install -y build-essential
mkdir -p /usr/local/src/git-lfs
cd /usr/local/src/git-lfs
wget https://github.com/git-lfs/git-lfs/releases/download/v2.8.0/git-lfs-linux-amd64-v2.8.0.tar.gz
tar -xvzf git-lfs-linux-amd64-v2.8.0.tar.gz
./install.sh
cd ..
git clone https://gitlab.pasteur.fr/bli/qaf_demux.git
cd qaf_demux/Julia/QafDemux/
/usr/local/julia/bin/julia --project=. --eval 'import Pkg; Pkg.Registry.add(Pkg.RegistrySpec(; url="https://github.com/JuliaRegistries/General.git")); Pkg.Registry.add(Pkg.RegistrySpec(; url="https://github.com/BioJulia/BioJuliaRegistry.git")); Pkg.activate("."); Pkg.instantiate(); Pkg.build()'
strip deps/builddir/qaf_demux
export PATH="/usr/local/julia/bin:${PATH}"
export PATH=/usr/local/src/qaf_demux/Julia/QafDemux/bin:"${PATH}"
export PATH=/usr/local/src/qaf_demux/Julia/QafDemux/deps/builddir:"${PATH}"
which qaf_demux
qaf_demux --help
apt-get remove -y git
apt-get autoremove -y
apt-get clean -y
rm -rf /usr/local/src/git-lfs
%environment
export LC_ALL=C
export PATH=/usr/local/src/qaf_demux/Julia/QafDemux/deps/builddir:"${PATH}"
%runscript
exec /usr/local/src/qaf_demux/Julia/QafDemux/deps/builddir/qaf_demux "$@"
但是,生成的图像需要一个对于我们的计算集群来说太新的内核。
因此,我想尝试基于 构建类似的图像,但在Julia 1.1 之前不存在docker://julia:1.0-stretch注册表操作 API 。Pkg
是否有替代 1.0 兼容的方式来获取丢失的注册表?
自我回答:
我发现注册表可以使用git“手动”获取,如下:
mkdir -p /root/.julia/registries
cd /root/.julia/registries
git clone https://github.com/JuliaRegistries/General.git
git clone https://github.com/BioJulia/BioJuliaRegistry.git
(在上面,我使用 root 的.julia目录,因为 root 是构建和安装应用程序的目录。)
需要注意的是:应用程序的实例化和构建可以在没有Manifest.toml文件的情况下继续进行。我发现了这一点,因为我试图删除这个文件作为尝试删除包的版本限制的一部分。