diff --git a/julia/julia.def b/julia/julia.def index dbf0bed..03cc464 100644 --- a/julia/julia.def +++ b/julia/julia.def @@ -1,82 +1,85 @@ Bootstrap: library -From: default/debian:10 +From: default/alpine:3.14.0 %post - # Copied from https://github.com/docker-library/julia/blob/master/1.6/buster/Dockerfile - apt-get -y update - apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - procps - rm -rf /var/lib/apt/lists/* + # Install dependencies + apk add --no-cache bash + apd add --no-cache --virtual .build-deps gpg curl - export JULIA_GPG="3673DF529D9049477F76B37566E3C7DC03D6E495" - export JULIA_VERSION="1.6.1" - export JULIA_PATH=/usr/local/julia - export PATH=$JULIA_PATH/bin:$PATH + # Make our lives easier by declaring some constants + export JULIA_GPG="3673DF529D9049477F76B37566E3C7DC03D6E495" + export JULIA_VERSION="1.6.2" + export JULIA_PATH=/usr/local/julia + export PATH=$JULIA_PATH/bin:$PATH + export tarArch='x86_64' + export dirArch='x64' + export sha256='5ff279bc733a99a9582fd9b39eb3d18a3fa77b9d3d2733039279a250c8c5d49c' - savedAptMark="$(apt-mark showmanual)" + # Download Julia + export folder="$(echo "$JULIA_VERSION" | cut -d. -f1-2)" + curl -fL -o julia.tar.gz.asc "https://julialang-s3.julialang.org/bin/musl/${dirArch}/${folder}/julia-${JULIA_VERSION}-linux-${tarArch}.tar.gz.asc" + curl -fL -o julia.tar.gz "https://julialang-s3.julialang.org/bin/musl/${dirArch}/${folder}/julia-${JULIA_VERSION}-linux-${tarArch}.tar.gz" - if ! command -v gpg > /dev/null; then - apt-get update - apt-get install -y --no-install-recommends \ - gnupg \ - dirmngr - rm -rf /var/lib/apt/lists/* - fi + # Security check step 1: verify via sha256 + echo "${sha256} *julia.tar.gz" | sha256sum -c - - export tarArch='x86_64' - export dirArch='x64' - export sha256='7c888adec3ea42afbfed2ce756ce1164a570d50fa7506c3f2e1e2cbc49d52506' + # Security check step 2: verify via GPG + export GNUPGHOME="$(mktemp -d)" + gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$JULIA_GPG" + gpg --batch --verify julia.tar.gz.asc julia.tar.gz + command -v gpgconf > /dev/null && gpgconf --kill all + rm -rf "$GNUPGHOME" julia.tar.gz.asc - export folder="$(echo "$JULIA_VERSION" | cut -d. -f1-2)" - curl -fL -o julia.tar.gz.asc "https://julialang-s3.julialang.org/bin/linux/${dirArch}/${folder}/julia-${JULIA_VERSION}-linux-${tarArch}.tar.gz.asc" - curl -fL -o julia.tar.gz "https://julialang-s3.julialang.org/bin/linux/${dirArch}/${folder}/julia-${JULIA_VERSION}-linux-${tarArch}.tar.gz" + # Extract Julia + mkdir "$JULIA_PATH" + tar -xzf julia.tar.gz -C "$JULIA_PATH" --strip-components 1 + rm julia.tar.gz - echo "${sha256} *julia.tar.gz" | sha256sum -c - - - export GNUPGHOME="$(mktemp -d)" - gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$JULIA_GPG" - gpg --batch --verify julia.tar.gz.asc julia.tar.gz - command -v gpgconf > /dev/null && gpgconf --kill all - rm -rf "$GNUPGHOME" julia.tar.gz.asc - - mkdir "$JULIA_PATH" - tar -xzf julia.tar.gz -C "$JULIA_PATH" --strip-components 1 - rm julia.tar.gz - - apt-mark auto '.*' > /dev/null - [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark - apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false + # Cleanup build dependencies + apk del --no-cache .build-deps %environment - export JULIA_PATH=/usr/local/julia - export PATH=$JULIA_PATH/bin:$PATH + export JULIA_PATH=/usr/local/julia + export PATH=$JULIA_PATH/bin:$PATH %test - if [ ! "$(command -v julia)" ]; then - echo "command julia not found!" - FAILED_TESTS="TRUE" - fi - - if [ ! "$(command -v bash)" ]; then - echo "command bash not found!" - FAILED_TESTS="TRUE" - fi - - if [ ! "$(command -v ps)" ]; then - echo "command ps not found!" - FAILED_TESTS="TRUE" - fi - - if [ -n "$FAILED_TESTS" ]; then - exit 1 + cat << "EOF" > /tmp/singularity-test.sh + #!/bin/bash + CMDS=('bash' 'ps' 'julia') + for CMD in "${CMDS[@]}"; do + if ! command -v "$CMD"; then + echo "command $CMD not found!" + FAILED_TESTS=1 fi + done + # Abort if a test failed + if [ -n "$FAILED_TESTS" ]; then + exit 1 + fi + EOF + chmod +x /tmp/singularity-test.sh + bash /tmp/singularity-test.sh %runscript - julia "$@" + julia "$@" %labels - Author 25492070+MillironX@users.noreply.github.com - Version v2.3.1 + Author 25492070+MillironX@users.noreply.github.com + SoftwareVersion v1.6.2 + SingularityDefinitionVersion 1 + +%help + Julia + ===== + + Julia is a high-level dynamic programming language designed to address the + needs of high-performance numerical analysis and computational science. It + provides a sophisticated compiler, distributed parallel execution, numerical + accuracy, and an extensive mathematical function library. + Source: GitHub () + + For more help, see + - + - + -