diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 88b494041abe2eeccea6e0ec926f06051a9f4413..e650e4a086cdc957cf54bb9747fdf1f6154e7f2b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,7 +6,7 @@ stages: - main - singularity -builder_stable: +builder:stable: stage: builder tags: - silicon @@ -19,7 +19,7 @@ builder_stable: - head Dockerfile - make login - make release-cached -builder_unstable: +builder:unstable: stage: builder tags: - silicon @@ -35,7 +35,7 @@ builder_unstable: ## I wish there were a simple way to transfer the "latest/unstable" strings ## between jobs... -config_stable: +config:stable: image: eicweb.phy.anl.gov:4567/containers/eic_container/eic_builder:latest stage: config tags: @@ -44,6 +44,7 @@ config_stable: - tags - master - staging + needs: ["builder:stable"] script: - bash containers/release/configure_release.sh artifacts: @@ -51,7 +52,7 @@ config_stable: - config/spack-env.sh - config/eic-env.sh - config/Dockerfile -config_unstable: +config:unstable: image: eicweb.phy.anl.gov:4567/containers/eic_container/eic_builder:unstable stage: config tags: @@ -60,6 +61,7 @@ config_unstable: - tags - master - staging + needs: ["builder:unstable"] script: - bash containers/release/configure_release.sh artifacts: @@ -68,7 +70,7 @@ config_unstable: - config/eic-env.sh - config/Dockerfile -release_stable: +release:stable: stage: main tags: - silicon @@ -76,13 +78,14 @@ release_stable: - tags - master - staging + needs: ["config:stable"] script: - cp config/Dockerfile containers/release/Dockerfile - cp config/eic-env.sh containers/release/eic-env.sh - cd containers/release - make login - make release-cached -release_unstable: +release:unstable: stage: main tags: - silicon @@ -90,6 +93,7 @@ release_unstable: - tags - master - staging + needs: ["config:unstable"] script: - cp config/Dockerfile containers/release/Dockerfile - cp config/eic-env.sh containers/release/eic-env.sh @@ -97,13 +101,14 @@ release_unstable: - make login - make develop-cached -builder_singularity: +builder:singularity: stage: singularity tags: - singularity only: - staging - tags + needs: ["builder:stable"] when: manual script: - cp containers/builder/eic_builder.def . @@ -117,13 +122,14 @@ builder_singularity: - build/eic_builder.sif - build/eic_builder.def -release_singularity: +release:singularity: stage: singularity tags: - singularity only: - staging - tags + needs: ["release:stable"] script: - cp containers/release/eic.def . - /bin/bash .gitlabci/setup.sh diff --git a/README.md b/README.md index 21bd852a4d94bb103bf70b4e0ff24e63cd6edc6b..9167e063c66689b046dcc56749fa8b8220a2c832 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ cd eic_container modeuefile will be installed to `$PREFIX/../../etc/modulefiles`. You can use the `-v` flag to select the version you want to deploy, or omit the flag if you want to install the master build. The recommended stable - release version is `v2.1.3`. + release version is `v2.2.0`. ```bash -./deploy.py -v 2.1.3 <PREFIX> +./deploy.py -v 2.2.0 <PREFIX> ``` Available flags: @@ -101,15 +101,15 @@ $PREFIX/bin/eic-shell Included software: ------------------ - Included software: - - gcc@9.3.0 - - cmake@3.17.3 + - gcc@10.2.0 + - cmake@3.18.1 - fmt@6.1.2 - spdlog@1.5.0 - nlohmann-json - heppdt@3.04.01 - clhep@2.4.1.3 - eigen@3.3.7 - - python@3.7.7 with pip, numpy, pyyaml, pyafp, matplotlib, ipython, scipy + - python@3.7.8 with pip, numpy, pyyaml, pyafp, matplotlib, ipython, scipy - xrootd@4.12.3 - root@6.22.00 - pythia8@8244 @@ -117,8 +117,10 @@ Included software: - podio@master - geant4@10.6.2 - dd4hep@1.13.1 - - acts@0.31.0 + - acts@1.00.0 - gaudi@34.0 + - dawn@3.91a + - dawncut@1.54a - The singularity build exports the following applications: - eic_shell: a development shell in the image - container_dev: same as EIC shell diff --git a/VERSION b/VERSION index cd57a8b95d6d1de42ed8ae15fa6c449ed7c9863c..ccbccc3dc62631f22ff358ac418e52401ec770b4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.1.5 +2.2.0 diff --git a/containers/builder/Dockerfile b/containers/builder/Dockerfile index c9428663b2d530e26a03770155201b33978f41e6..697eaf47fbb4df7fdbf7a9e5ab9a553e805575a6 100644 --- a/containers/builder/Dockerfile +++ b/containers/builder/Dockerfile @@ -1,28 +1,36 @@ # Builder with Argonne EIC software # -FROM eicweb.phy.anl.gov:4567/containers/image_recipes/ubuntu_spack:0.15.3 +FROM eicweb.phy.anl.gov:4567/containers/image_recipes/debian_spack:snapshot-20200922 LABEL maintainer="Sylvester Joosten <sjoosten@anl.gov>" \ name="eic_builder" \ group="eic_builder" \ march="native" \ - basedist="ubuntu" \ - base="ubuntu" + basedist="debian" \ + base="debian" -ENV DOCKERFILE_BASE=ubuntu \ - DOCKERFILE_DISTRO=ubuntu \ - DOCKERFILE_DISTRO_VERSION=20.04 \ +ENV DOCKERFILE_BASE=debian \ + DOCKERFILE_DISTRO=debian \ + DOCKERFILE_DISTRO_VERSION=20200908-testing \ SPACK_ROOT=/opt/spack \ DEBIAN_FRONTEND=noninteractive \ CURRENTLY_BUILDING_DOCKER_IMAGE=1 \ container=docker +## install ghostview/ghostscript needed by some of the tools +RUN apt-get -yqq update \ + && apt-get -yqq install --no-install-recommends \ + ghostscript \ + gv \ + && rm -rf /var/lib/apt/lists/* + ## Ensure an up-to-date custom package list RUN rm -rf $SPACK_ROOT/np-spack \ - && echo "Update spack for v2.1.3" \ && git clone https://eicweb.phy.anl.gov/EIC/np-spack.git $SPACK_ROOT/np-spack \ - && cd $SPACK_ROOT/np-spack && git checkout v`spack --version` && cd - \ - && rm -rf $SPACK_ROOT/np-spack/.git \ + && cd $SPACK_ROOT/np-spack \ + && git checkout snapshot-`echo $(spack --version) | cut -d- -f3` \ + && cd - \ + && echo "DISABLED: rm -rf $SPACK_ROOT/np-spack/.git" \ && echo "repos:" > $SPACK_ROOT/etc/spack/repos.yaml \ && echo " - $SPACK_ROOT/np-spack" >> $SPACK_ROOT/etc/spack/repos.yaml @@ -33,7 +41,7 @@ COPY spack.yaml /opt/spack-environment/spack.yaml ## as this is a raw builder image RUN cd /opt/spack-environment \ && spack env activate . \ - && spack install -j32 \ + && spack install -j64 \ && spack clean -a ## Install additional python packages @@ -73,7 +81,7 @@ RUN cd /opt/spack-environment \ && spack env activate . \ && export PODIO=`spack find -p podio | grep software | awk '{print $2}'` \ && echo "export PODIO=${PODIO};" >> /etc/profile.d/z10_spack_environment.sh \ - && echo "export BINARY_TAG=x86_64-linux-gcc9-opt" >> /etc/profile.d/z10_spack_environment.sh + && echo "export BINARY_TAG=x86_64-linux-gcc10-opt" >> /etc/profile.d/z10_spack_environment.sh ## make sure we have the entrypoints setup correctly ENTRYPOINT [] diff --git a/containers/builder/spack.yaml b/containers/builder/spack.yaml index 532e2add5589c06be29d15a0cfe82ac029fc3bea..afcd7cf54e90d4ab97f97af26d77a5192a7b48ca 100644 --- a/containers/builder/spack.yaml +++ b/containers/builder/spack.yaml @@ -1,26 +1,29 @@ spack: specs: - - cmake@3.17.3 + - cmake@3.18.1 - fmt@6.1.2 cxxstd=17 - spdlog@1.5.0 - nlohmann-json - heppdt@3.04.01 - clhep@2.4.1.3 cxxstd=17 + - cairo+fc+ft+X+pdf+gobject - eigen@3.3.7 - - python@3.7.7 + - python@3.7.8 - py-pip - py-numpy - py-pyyaml - xrootd@4.12.3 cxxstd=17 +python - - root@6.22.00 cxxstd=17 +dataframe +fftw +fortran +gdml +http +mlp +pythia8 +root7 +tmva +vc +xrootd +ssl ^mesa+opengl -llvm -osmesa + - root@6.22.00 cxxstd=17 +fftw +fortran +gdml +http +mlp +pythia8 +root7 +tmva +vc +xrootd +ssl ^mesa+opengl -llvm -osmesa - pythia8@8244 - hepmc3@3.2.2 +python +rootio - stow@2.2.2 - podio@master - geant4@10.6.2 cxxstd=17 +opengl +vecgeom +x11 +qt ^qt +opengl - dd4hep@1.13.1 +geant4 +assimp +hepmc3 - - acts@0.31.0 +dd4hep +digitization +identification +json +tgeo + - acts@1.00.0 +dd4hep +digitization +identification +json +tgeo - gaudi@34.0 + - dawn@3_91a + - dawncut@1_54a concretization: together config: install_tree: /opt/software diff --git a/containers/release/Dockerfile.in b/containers/release/Dockerfile.in index 9c347f59bb50af47e307251ac9cca332afd8e06a..490ed179f67c2b67b832fdc457b2755774717b6b 100644 --- a/containers/release/Dockerfile.in +++ b/containers/release/Dockerfile.in @@ -11,18 +11,18 @@ RUN find -L /usr/local/* -type f -exec readlink -f '{}' \; | \ grep 'x-executable\|x-archive\|x-sharedlib' | \ awk -F: '{print $1}' | xargs strip -s -FROM eicweb.phy.anl.gov:4567/containers/image_recipes/ubuntu_minimal:20.04 +FROM eicweb.phy.anl.gov:4567/containers/image_recipes/debian_minimal:testing-20200908 LABEL maintainer="Sylvester Joosten <sjoosten@anl.gov>" \ - name="eic_container" \ - group="eic_container" \ + name="eic" \ + group="eic" \ march="native" \ - basedist="ubuntu" \ - base="ubuntu" + basedist="debian" \ + base="debian" ## @ENV@ will be automatically expanded to auto-load the ## runtime environment ENV DOCKERFILE_DISTRO=ubuntu \ - DOCKERFILE_DISTRO_VERSION=20.04 \ + DOCKERFILE_DISTRO_VERSION=20200908-testing \ DEBIAN_FRONTEND=noninteractive \ @ENV@ @@ -31,6 +31,8 @@ ENV DOCKERFILE_DISTRO=ubuntu \ RUN apt-get -yqq update \ && apt-get -yqq install --no-install-recommends \ openssh-client \ + ghostscript \ + gv \ && locale-gen en_US.UTF-8 \ && rm -rf /var/lib/apt/lists/* diff --git a/containers/release/bashrc b/containers/release/bashrc index 307c4da3fbae2c10be41c940d1fbed8f1a66d47b..4d1c1f3487e728bb91c447e29c966138ef8ddedb 100644 --- a/containers/release/bashrc +++ b/containers/release/bashrc @@ -60,8 +60,8 @@ alias snano='sedit' export CLICOLOR=1 export LS_COLORS='no=00:fi=00:di=00;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:*.xml=00;31:' #export GREP_OPTIONS='--color=auto' #deprecated -alias grep="`which grep` $GREP_OPTIONS" -unset GREP_OPTIONS +#alias grep="/usr/bin/grep $GREP_OPTIONS" +#unset GREP_OPTIONS # Color for manpages in less makes manpages a little easier to read export LESS_TERMCAP_mb=$'\E[01;31m' @@ -72,39 +72,9 @@ export LESS_TERMCAP_so=$'\E[01;44;33m' export LESS_TERMCAP_ue=$'\E[0m' export LESS_TERMCAP_us=$'\E[01;32m' -####################################################### -# MACHINE SPECIFIC ALIAS'S -####################################################### - -# Alias's for SSH -# alias SERVERNAME='ssh YOURWEBSITE.com -l USERNAME -p PORTNUMBERHERE' - -# Alias's to change the directory -#alias web='cd /var/www/html' - -# Alias's to mount ISO files -# mount -o loop /home/NAMEOFISO.iso /home/ISOMOUNTDIR/ -# umount /home/NAMEOFISO.iso -# (Both commands done as root only.) - ####################################################### # GENERAL ALIAS'S ####################################################### -# To temporarily bypass an alias, we preceed the command with a \ -# EG: the ls command is aliased, but to use the normal ls command you would type \ls - -# Add an "alert" alias for long running commands. Use like so: -# sleep 10; alert -alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' - -# Edit this .bashrc file -#alias ebrc='edit ~/.bashrc' - -# Show help for this .bashrc file -#alias hlp='less ~/.bashrc_help' - -# alias to show the date -alias da='date "+%Y-%m-%d %A %T %Z"' # Alias's to modified commands alias cp='cp -i' @@ -175,32 +145,6 @@ alias countfiles="for t in files links directories; do echo \`find . -type \${t: # To see if a command is aliased, a file, or a built-in command alias checkcommand="type -t" -# Show current network connections to the server -alias ipview="netstat -anpl | grep :80 | awk {'print \$5'} | cut -d\":\" -f1 | sort | uniq -c | sort -n | sed -e 's/^ *//' -e 's/ *\$//'" - -# Show open ports -alias openports='netstat -nape --inet' - -# Alias's for safe and forced reboots -alias rebootsafe='sudo shutdown -r now' -alias rebootforce='sudo shutdown -r -n now' - -# Alias's to show disk space and space used in a folder -alias diskspace="du -S | sort -n -r |more" -alias folders='du -h --max-depth=1' -alias folderssort='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn' -alias tree='tree -CAhF --dirsfirst' -alias treed='tree -CAFd' -alias mountedinfo='df -hT' - -# Alias's for archives -alias mktar='tar -cvf' -alias mkbz2='tar -cvjf' -alias mkgz='tar -cvzf' -alias untar='tar -xvf' -alias unbz2='tar -xvjf' -alias ungz='tar -xvzf' - # Show all logs in /var/log alias logs="sudo find /var/log -type f -exec file {} \; | grep 'text' | cut -d' ' -f1 | sed -e's/:$//g' | grep -v '[0-9]$' | xargs tail -f" @@ -328,47 +272,6 @@ pwdtail () pwd|awk -F/ '{nlast = NF -1;print $nlast"/"$NF}' } -# Show the current distribution -distribution () -{ - local dtype - # Assume unknown - dtype="unknown" - - # First test against Fedora / RHEL / CentOS / generic Redhat derivative - if [ -r /etc/rc.d/init.d/functions ]; then - source /etc/rc.d/init.d/functions - [ zz`type -t passed 2>/dev/null` == "zzfunction" ] && dtype="redhat" - - # Then test against SUSE (must be after Redhat, - # I've seen rc.status on Ubuntu I think? TODO: Recheck that) - elif [ -r /etc/rc.status ]; then - source /etc/rc.status - [ zz`type -t rc_reset 2>/dev/null` == "zzfunction" ] && dtype="suse" - - # Then test against Debian, Ubuntu and friends - elif [ -r /lib/lsb/init-functions ]; then - source /lib/lsb/init-functions - [ zz`type -t log_begin_msg 2>/dev/null` == "zzfunction" ] && dtype="debian" - - # Then test against Gentoo - elif [ -r /etc/init.d/functions.sh ]; then - source /etc/init.d/functions.sh - [ zz`type -t ebegin 2>/dev/null` == "zzfunction" ] && dtype="gentoo" - - # For Mandriva we currently just test if /etc/mandriva-release exists - # and isn't empty (TODO: Find a better way :) - elif [ -s /etc/mandriva-release ]; then - dtype="mandriva" - - # For Slackware we currently just test if /etc/slackware-version exists - elif [ -s /etc/slackware-version ]; then - dtype="slackware" - - fi - echo $dtype -} - # Show the current version of the operating system ver () { @@ -402,129 +305,6 @@ ver () fi } -# Automatically install the needed support files for this .bashrc file -install_bashrc_support () -{ - local dtype - dtype=$(distribution) - - if [ $dtype == "redhat" ]; then - sudo yum install multitail tree joe - elif [ $dtype == "suse" ]; then - sudo zypper install multitail - sudo zypper install tree - sudo zypper install joe - elif [ $dtype == "debian" ]; then - sudo apt-get install multitail tree joe - elif [ $dtype == "gentoo" ]; then - sudo emerge multitail - sudo emerge tree - sudo emerge joe - elif [ $dtype == "mandriva" ]; then - sudo urpmi multitail - sudo urpmi tree - sudo urpmi joe - elif [ $dtype == "slackware" ]; then - echo "No install support for Slackware" - else - echo "Unknown distribution" - fi -} - -# Show current network information -netinfo () -{ - echo "--------------- Network Information ---------------" - /sbin/ifconfig | awk /'inet addr/ {print $2}' - echo "" - /sbin/ifconfig | awk /'Bcast/ {print $3}' - echo "" - /sbin/ifconfig | awk /'inet addr/ {print $4}' - - /sbin/ifconfig | awk /'HWaddr/ {print $4,$5}' - echo "---------------------------------------------------" -} - -# IP address lookup -alias whatismyip="whatsmyip" -function whatsmyip () -{ - # Dumps a list of all IP addresses for every device - # /sbin/ifconfig |grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'; - - # Internal IP Lookup - echo -n "Internal IP: " ; /sbin/ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}' - - # External IP Lookup - echo -n "External IP: " ; wget http://smart-ip.net/myip -O - -q -} - -# View Apache logs -apachelog () -{ - if [ -f /etc/httpd/conf/httpd.conf ]; then - cd /var/log/httpd && ls -xAh && multitail --no-repeat -c -s 2 /var/log/httpd/*_log - else - cd /var/log/apache2 && ls -xAh && multitail --no-repeat -c -s 2 /var/log/apache2/*.log - fi -} - -# Edit the Apache configuration -apacheconfig () -{ - if [ -f /etc/httpd/conf/httpd.conf ]; then - sedit /etc/httpd/conf/httpd.conf - elif [ -f /etc/apache2/apache2.conf ]; then - sedit /etc/apache2/apache2.conf - else - echo "Error: Apache config file could not be found." - echo "Searching for possible locations:" - sudo updatedb && locate httpd.conf && locate apache2.conf - fi -} - -# Edit the PHP configuration file -phpconfig () -{ - if [ -f /etc/php.ini ]; then - sedit /etc/php.ini - elif [ -f /etc/php/php.ini ]; then - sedit /etc/php/php.ini - elif [ -f /etc/php5/php.ini ]; then - sedit /etc/php5/php.ini - elif [ -f /usr/bin/php5/bin/php.ini ]; then - sedit /usr/bin/php5/bin/php.ini - elif [ -f /etc/php5/apache2/php.ini ]; then - sedit /etc/php5/apache2/php.ini - else - echo "Error: php.ini file could not be found." - echo "Searching for possible locations:" - sudo updatedb && locate php.ini - fi -} - -# Edit the MySQL configuration file -mysqlconfig () -{ - if [ -f /etc/my.cnf ]; then - sedit /etc/my.cnf - elif [ -f /etc/mysql/my.cnf ]; then - sedit /etc/mysql/my.cnf - elif [ -f /usr/local/etc/my.cnf ]; then - sedit /usr/local/etc/my.cnf - elif [ -f /usr/bin/mysql/my.cnf ]; then - sedit /usr/bin/mysql/my.cnf - elif [ -f ~/my.cnf ]; then - sedit ~/my.cnf - elif [ -f ~/.my.cnf ]; then - sedit ~/.my.cnf - else - echo "Error: my.cnf file could not be found." - echo "Searching for possible locations:" - sudo updatedb && locate my.cnf - fi -} - # For some reason, rot13 pops up everywhere rot13 () { if [ $# -eq 0 ]; then