Add Dockerfile for Scientific Linux 7 (RHEL7 recompile) (#8422)
* Add Dockerfile for Scientific Linux 7 (RHEL7 recompile)
This commit is contained in:
		 Patrick Gartung
					Patrick Gartung
				
			
				
					committed by
					
						 Todd Gamblin
						Todd Gamblin
					
				
			
			
				
	
			
			
			 Todd Gamblin
						Todd Gamblin
					
				
			
						parent
						
							e5a6832760
						
					
				
				
					commit
					bdd5aab8be
				
			| @@ -24,6 +24,12 @@ services: | ||||
|       - '../../..:/spack' | ||||
|     environment: | ||||
|       PROMPT: "${PROMPT:-0}" | ||||
|   scilinux: | ||||
|     build: ./spack_scilinux | ||||
|     volumes: | ||||
|       - '../../..:/spack' | ||||
|     environment: | ||||
|       PROMPT: "${PROMPT:-0}" | ||||
|   ubuntu: | ||||
|     build: ./spack_ubuntu | ||||
|     volumes: | ||||
|   | ||||
							
								
								
									
										62
									
								
								share/spack/docker/spack_scilinux/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								share/spack/docker/spack_scilinux/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| FROM sl:7 | ||||
| MAINTAINER Patrick Gartung (gartung@fnal.gov) | ||||
|  | ||||
| ENV SPACK_ROOT=/spack     \ | ||||
|     FORCE_UNSAFE_CONFIGURE=1 \ | ||||
|     DISTRO=rhel7 \ | ||||
|     container=docker | ||||
|  | ||||
| RUN yum update -y               && \ | ||||
|     yum install -y yum-conf-repos.noarch && \ | ||||
|     yum update -y               && \ | ||||
|     yum -y install epel-release && \ | ||||
|     yum update -y               && \ | ||||
|     yum --enablerepo epel \ | ||||
|     groupinstall -y "Development Tools" && \ | ||||
|     yum --enablerepo epel \ | ||||
|         install -y            \ | ||||
|         curl                  \ | ||||
|         findutils             \ | ||||
|         gcc-c++               \ | ||||
|         gcc                   \ | ||||
|         gcc-gfortran          \ | ||||
|         git                   \ | ||||
|         gnupg2                \ | ||||
|         hostname              \ | ||||
|         iproute               \ | ||||
|         Lmod                  \ | ||||
|         make                  \ | ||||
|         patch                 \ | ||||
|         openssh-server        \ | ||||
|         python                \ | ||||
|         tcl                 | ||||
| RUN    git clone --depth=1 git://github.com/spack/spack.git /spack && \ | ||||
|        rm -rf /var/cache/yum /spack/.git && yum clean all | ||||
|  | ||||
| RUN echo "source /usr/share/lmod/lmod/init/bash" \ | ||||
|     > /etc/profile.d/spack.sh | ||||
| RUN echo "source /spack/share/spack/setup-env.sh" \ | ||||
|     >> /etc/profile.d/spack.sh | ||||
| RUN echo "source /spack/share/spack/spack-completion.bash" \ | ||||
|     >> /etc/profile.d/spack.sh | ||||
| COPY handle-ssh.sh /etc/profile.d/handle-ssh.sh | ||||
| COPY handle-prompt.sh /etc/profile.d/handle-prompt.sh.source | ||||
|  | ||||
| RUN (                                                         \ | ||||
|     echo "export DISTRO=$DISTRO"                            ; \ | ||||
|     echo "if [ x\$PROMPT '!=' 'x' -a x\$PROMPT '!=' 'x0' ]" ; \ | ||||
|     echo "then"                                             ; \ | ||||
|     echo "source /etc/profile.d/handle-prompt.sh.source"    ; \ | ||||
|     echo "fi"                                               ; \ | ||||
| ) > /etc/profile.d/handle-prompt.sh | ||||
|  | ||||
| RUN mkdir -p /root/.spack | ||||
| COPY modules.yaml /root/.spack/modules.yaml | ||||
|  | ||||
| RUN rm -f /run/nologin | ||||
|  | ||||
| RUN rm -rf /root/*.* | ||||
|  | ||||
| WORKDIR /root | ||||
| ENTRYPOINT ["bash"] | ||||
| CMD ["-l"] | ||||
							
								
								
									
										143
									
								
								share/spack/docker/spack_scilinux/handle-prompt.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								share/spack/docker/spack_scilinux/handle-prompt.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,143 @@ | ||||
| __tmp="`mktemp -d`" | ||||
|  | ||||
| __trylock() { | ||||
|     local dir | ||||
|     dir="$__tmp/$1.lock" | ||||
|     mkdir "$dir" &>/dev/null | ||||
|     return $? | ||||
| } | ||||
|  | ||||
| __queue_init() { | ||||
|     local r | ||||
|     local w | ||||
|  | ||||
|     mkdir "$__tmp/$1.read.lock" ; r=$? | ||||
|     mkdir "$__tmp/$1.write.lock" ; w=$? | ||||
|  | ||||
|     if [ "$r" '=' '0' -a "$w" '=' '0' ] ; then | ||||
|         return 0 | ||||
|     else | ||||
|         return 1 | ||||
|     fi | ||||
| } | ||||
|  | ||||
| __queue_try_read() { | ||||
|     __trylock "$1.read" | ||||
|     return $? | ||||
| } | ||||
|  | ||||
| __queue_try_write() { | ||||
|     __trylock "$1.write" | ||||
|     return $? | ||||
| } | ||||
|  | ||||
| __queue_make_readable() { | ||||
|     rm -r "$__tmp/$1.read.lock" &>/dev/null | ||||
|     return $? | ||||
| } | ||||
|  | ||||
| __queue_make_writable() { | ||||
|     rm -r "$__tmp/$1.write.lock" &>/dev/null | ||||
|     return $? | ||||
| } | ||||
|  | ||||
| __read() { | ||||
|     cat "$__tmp/$1" 2> /dev/null | ||||
|     return $? | ||||
| } | ||||
|  | ||||
| __write() { | ||||
|     cat > "$__tmp/$1" 2> /dev/null | ||||
|     return $? | ||||
| } | ||||
|  | ||||
| __update_prompt() { | ||||
|     local prompt | ||||
|     prompt='' | ||||
|     linux_distro="$DISTRO" | ||||
|     if [ -n "$linux_distro" ] ; then | ||||
|         linux_distro='\[\e[1;34m\][\[\e[0;34m\]'"$linux_distro"'\[\e[1;34m\]]' | ||||
|         if [ -n "$prompt" ] ; then | ||||
|             prompt="$prompt " | ||||
|         fi | ||||
|         prompt="$prompt$linux_distro" | ||||
|     fi | ||||
|  | ||||
|     git_head="`git --git-dir=/spack/.git --work-tree=/spack rev-parse --abbrev-ref HEAD 2>/dev/null`" | ||||
|     if [ "$?" '=' '0' ] ; then | ||||
|         if [ "$git_head" '=' 'HEAD' ] ; then | ||||
|             git_head="`git --git-dir=/spack/.git --work-tree=/spack rev-parse HEAD 2>/dev/null | cut -c1-8`..." | ||||
|         fi | ||||
|     else | ||||
|         git_head='' | ||||
|     fi | ||||
|  | ||||
|     if [ -n "$git_head" ] ; then | ||||
|         git_head='\[\e[1;32m\](\[\e[0;32m\]'"$git_head"'\[\e[1;32m\])' | ||||
|         if [ -n "$prompt" ] ; then | ||||
|             prompt="$prompt " | ||||
|         fi | ||||
|         prompt="$prompt$git_head" | ||||
|     fi | ||||
|  | ||||
|     if [ -n "$prompt" ] ; then | ||||
|         prompt="$prompt " | ||||
|     fi | ||||
|     prompt="$prompt"'\[\e[0;m\]\W: ' | ||||
|     echo "$prompt" | __write prompt | ||||
| } | ||||
|  | ||||
| set -m | ||||
| ( | ||||
|     __queue_init query | ||||
|     __queue_init prompt | ||||
|  | ||||
|     __update_prompt | ||||
|     __queue_make_readable prompt | ||||
|  | ||||
|     __queue_make_writable query | ||||
|  | ||||
|     while sleep 0.010 ; do | ||||
|         last_q_time='' | ||||
|  | ||||
|         while sleep 0.010 ; do | ||||
|             q_time="`date +%s%N`" | ||||
|             if __queue_try_read query ; then | ||||
|                 last_q_time="$q_time" | ||||
|                 __queue_make_writable query | ||||
|             fi | ||||
|  | ||||
|             if [ -n "$last_q_time" -a \ | ||||
|                 "$(( (q_time - last_q_time)/10000000 > 100 ))" '=' '1' ] ; then | ||||
|                 break | ||||
|             fi | ||||
|         done | ||||
|  | ||||
|         __update_prompt | ||||
|         __queue_make_readable prompt | ||||
|     done | ||||
| ) &>/dev/null & | ||||
| set +m | ||||
|  | ||||
| __update_prompt_main_first_call=1 | ||||
| __update_prompt_main() { | ||||
|     if [ "$__update_prompt_main_first_call" '=' '1' ] ; then | ||||
|         while sleep 0.001 ; do | ||||
|             if __queue_try_read prompt ; then | ||||
|                 PS1="`__read prompt`" | ||||
|                 break | ||||
|             fi | ||||
|         done | ||||
|         __update_prompt_main_first_call=0 | ||||
|     else | ||||
|         if __queue_try_read prompt ; then | ||||
|             PS1="`__read prompt`" | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     if __queue_try_write query ; then | ||||
|         __queue_make_readable query | ||||
|     fi | ||||
| } | ||||
|  | ||||
| PROMPT_COMMAND=__update_prompt_main | ||||
							
								
								
									
										36
									
								
								share/spack/docker/spack_scilinux/handle-ssh.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								share/spack/docker/spack_scilinux/handle-ssh.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| uid="`id -u`" | ||||
| if [ "$uid" '=' '0' ] ; then | ||||
|     for key_type in dsa ecdsa ed25519 rsa ; do | ||||
|         private_key_file="/etc/ssh/ssh_host_${key_type}_key" | ||||
|         public_key_file="$private_key_file.pub" | ||||
|  | ||||
|         if [ '!' -f "$private_key_file" ] ; then | ||||
|             ssh-keygen \ | ||||
|                 -q -t "$key_type" -N "" -f "$private_key_file" | ||||
|             chmod 600 "$private_key_file" | ||||
|             chmod 644 "$public_key_file" | ||||
|         fi | ||||
|     done | ||||
|  | ||||
|     mkdir -p /var/run/sshd | ||||
|  | ||||
|     pgrep -u 0 -U 0 sshd &> /dev/null | ||||
|     if [ '!' "$?" '=' '0' ] ; then | ||||
|         nohup /usr/sbin/sshd -f /etc/ssh/sshd_config < /dev/null &> /dev/null | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| if [ '!' -f "$HOME/.ssh/id_rsa" ] ; then | ||||
|     ssh-keygen \ | ||||
|         -t rsa -C "spack.developer@docker.host" -N "" -f "$HOME/.ssh/id_rsa" | ||||
|     cat "$HOME/.ssh/id_rsa.pub" >> "$HOME/.ssh/authorized_keys" | ||||
|     chmod 600 "$HOME/.ssh/authorized_keys" | ||||
|  | ||||
|     docker_ip="`ip address show dev eth0 | | ||||
|                 grep inet | | ||||
|                 cut -d' ' -f 6 | | ||||
|                 cut -d/ -f 1`" | ||||
|  | ||||
|     ssh-keyscan -t rsa 127.0.0.1 localhost "$docker_ip" "`hostname`" \ | ||||
|         > "$HOME/.ssh/known_hosts" 2> /dev/null | ||||
| fi | ||||
							
								
								
									
										6
									
								
								share/spack/docker/spack_scilinux/modules.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								share/spack/docker/spack_scilinux/modules.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| modules: | ||||
|   enable: | ||||
|     - lmod | ||||
|   lmod: | ||||
|     core_compilers: | ||||
|       - gcc | ||||
		Reference in New Issue
	
	Block a user