<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">#
# Author: Wei Yang (SLAC National Accelerator Laboratory / Stanford University, 2017)
#

Bootstrap: yum
OSVersion: 7
MirrorURL: http://mirror.centos.org/centos-%{OSVERSION}/%{OSVERSION}/os/$basearch/
Include: yum

%labels
Maintainer Wei.Yang
Version Xcache-4.7.1,rucioN2N-1.0
Purpose Xcache-for-RUCIO

%setup
  mkdir -p $SINGULARITY_ROOTFS/etc/grid-security/certificates 
  mkdir -p $SINGULARITY_ROOTFS/etc/grid-security/vomsdir

  # $GRIDSECURITY is a directory on container local build host
  # GRIDSECURITY=/etc/grid-security

  GRIDSECURITY="/cvmfs/oasis.opensciencegrid.org/mis/osg-wn-client/current/el7-x86_64/etc/grid-security"
  if [ -d $GRIDSECURITY ]; then
    cd $GRIDSECURITY
    tar chf - certificates vomsdir | (cd $SINGULARITY_ROOTFS/etc/grid-security; tar xf -)
  fi

%post
  yum install -y curl gperftools hostname

  curl -s -o /etc/yum.repos.d/xrootd-stable-slc7.repo http://www.xrootd.org/binaries/xrootd-stable-slc7.repo
  curl -s -o /etc/pki/rpm-gpg/RPM-GPG-KEY-wlcg http://linuxsoft.cern.ch/wlcg/RPM-GPG-KEY-wlcg
  curl -s -o /etc/yum.repos.d/wlcg-centos7.repo http://linuxsoft.cern.ch/wlcg/wlcg-centos7.repo

  yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  yum install -y xrootd-server xrootd-client xrootd xrootd-debuginfo
  yum install -y xrootd-rucioN2N-for-Xcache
  yum install -y vomsxrd
  yum install -y gdb
  mkdir -p /data 

  echo "g /atlas / rl" &gt; /etc/xrootd/auth_db
  mkdir -p /etc/grid-security/xrd
  touch /etc/grid-security/xrd/xrdcert.pem
  touch /etc/grid-security/xrd/xrdkey.pem

  touch /etc/xrootd/xcache.cfg /var/run/x509up
  cat &gt; /etc/xrootd/xcache.cfg.template &lt;&lt;EOF
# "redirector" should be full qualified DNS name (e.g. hostname -f)
set redirector = XCACHE_RDR

all.manager \$(redirector):1213
all.adminpath /data/xrd/var/spool/xrootd
all.pidpath   /data/xrd/var/run/xrootd

oss.localroot  /data/xrd/namespace

all.export /atlas/rucio stage r/o
all.export /root:/      stage r/o
all.export /xroot:/     stage r/o

if \$(redirector)
    all.role manager
    cms.delay startup 10
else if exec cmsd
    all.role server
    oss.statlib /usr/lib64/XrdName2NameDCP4RUCIO.so
else
    oss.space meta /data/xrd/xrdcinfos
    oss.space data /data/xrd/datafiles

    all.role server
    oss.path /atlas/rucio r/w
    oss.path /root:/      r/w
    oss.path /xroot:/     r/w
    ofs.osslib   /usr/lib64/libXrdPss.so
    pss.cachelib /usr/lib64/libXrdFileCache.so
    pss.config streams 128
    pss.origin localfile:1094
    pss.namelib -lfncache -lfn2pfn /usr/lib64/XrdName2NameDCP4RUCIO.so

    pfc.ram XCACHE_RAMSIZE
    pfc.diskusage XCACHE_SPACE_LO_MARK XCACHE_SPACE_HI_MARK
    pfc.spaces data meta
    pfc.blocksize 1M
    pfc.prefetch 0
    pfc.trace info

    # Uncomment the following and bind mount to /etc/xrootd/xcache.cfg to request GSI security from client
    #xrootd.seclib /usr/lib64/libXrdSec.so
    #sec.protparm gsi -vomsfun:/usr/lib64/libXrdSecgsiVOMS.so -vomsfunparms:certfmt=raw|vos=atlas|grps=/atlas
    #sec.protocol /usr/lib64 gsi -ca:1 -crl:3
    #acc.authdb /etc/xrootd/auth_db
    #acc.authrefresh 60
    #ofs.authorize
fi
EOF

%runscript
# X509_USER_PROXY, X509_CERT_DIR, X509_VOMS_DIR do not have to be defined/provided

# if x509 user proxy is provided in a non-standard location (/tmp/x509up_u$(id -u)), 
# then the proxy should be bind mounted: -B ${X509_USER_PROXY}:/var/run/x509up

unset X509_USER_PROXY
[ -s /var/run/x509up ] &amp;&amp; export X509_USER_PROXY=/var/run/x509up

# if X509_CERT_DIR is not defined, or is inaccessible in the container, then we use
# the default location. Same for X509_VOMS_DIR.
# One can also bind mount:
#     -B ${X509_CERT_DIR}:/etc/grid-security/certificates
#     -B ${X509_VOMS_DIR}:/etc/grid-security/vomsdir

[ ! -z "$X509_CERT_DIR" ] &amp;&amp; [ ! -d "$X509_CERT_DIR" ] &amp;&amp; export X509_CERT_DIR=/etc/grid-security/certificates
[ ! -z "$X509_VOMS_DIR" ] &amp;&amp; [ ! -d "$X509_VOMS_DIR" ] &amp;&amp; export X509_VOMS_DIR=/etc/grid-security/vomsdir 
 
mkdir -p /data/xrd/namespace /data/xrd/xrdcinfos /data/xrd/datafiles
mkdir -p /data/xrd/var/log /data/xrd/var/spool /data/xrd/var/run

runcmsd=0
if [ -z "$XCACHE_RDR" ]; then
  XCACHE_RDR="www.google.com" # XCACHE_RDR must be defined
else
  runcmsd=1
fi
if [ -z "$XCACHE_PFCRAM" ]; then
  XCACHE_PFCRAM=$(free | tail -2 | head -1 | awk '{printf("%d", $NF/1024/1024/2)}')
  [ $XCACHE_PFCRAM -lt 1 ] &amp;&amp; XCACHE_PFCRAM=1
  XCACHE_PFCRAM=${XCACHE_PFCRAM}g
fi
[ -z "$XCACHE_SPACE_LO_MARK" ] &amp;&amp; XCACHE_SPACE_LO_MARK="0.75"
[ -z "$XCACHE_SPACE_HI_MARK" ] &amp;&amp; XCACHE_SPACE_HI_MARK="0.85"

if [ -s /etc/xrootd/xcache.cfg ]; then
  xcache_cfg=/etc/xrootd/xcache.cfg
else
  xcache_cfg=/tmp/xcache.cfg
  cat &gt; $xcache_cfg &lt;&lt;EOF
# Xcache config file - this file is automatically generated
# Modification of this file will be lost.
#
# To make a persistant change, modify and save to another file and then 
# bind mount the new config file to /etc/xrootd/xcache.cfg

# Info about the system:

EOF

  free | sed -e 's/^/\#\ /g' &gt;&gt; $xcache_cfg
  echo "" &gt;&gt; $xcache_cfg
  df -k /data | sed -e 's/^/\#\ /g' &gt;&gt; $xcache_cfg
  echo "" &gt;&gt; $xcache_cfg
  cat /etc/xrootd/xcache.cfg.template | sed -e "s/XCACHE_SPACE_LO_MARK/$XCACHE_SPACE_LO_MARK/g" | \
                                        sed -e "s/XCACHE_SPACE_HI_MARK/$XCACHE_SPACE_HI_MARK/g" | \
                                        sed -e "s/XCACHE_RAMSIZE/$XCACHE_PFCRAM/g" | \
                                        sed -e "s/XCACHE_RDR/$XCACHE_RDR/g" &gt;&gt; $xcache_cfg
fi

#echo $X509_USER_PROXY $X509_CERT_DIR $X509_VOMS_DIR

export LD_PRELOAD=/usr/lib64/libtcmalloc.so
export TCMALLOC_RELEASE_RATE=10
export XRD_LOCALMETALINKFILE=1
/usr/bin/xrootd -b -c $xcache_cfg -l /data/xrd/var/log/xrootd.log -k hup
[ "$runcmsd" -eq 1 ] &amp;&amp; /usr/bin/cmsd -b -c $xcache_cfg -l /data/xrd/var/log/cmsd.log -k 7
</pre></body></html>