2

我正在尝试构建一个能够运行我编写的 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文件的情况下继续进行。我发现了这一点,因为我试图删除这个文件作为尝试删除包的版本限制的一部分。

4

1 回答 1

3

错误消息是准确的,注册表中没有名称FASTX存在的包General(截至此日期)。

在您的情况下:您必须在运行Pkg.Registry.add(Pkg.RegistrySpec(; url="https://github.com/BioJulia/BioJuliaRegistry.git"))之前运行Pkg.instantiate()

在一般情况下:对于instantiate依赖未注册包的项目,您必须提供文件(您链接的目录Manifest.toml中似乎没有文件)。

于 2019-09-18T17:43:56.743 回答