#!/bin/sh

set -e

# under RHEL7 generator is executed without PATH bing exported.
# as the rresult `which java` will return error
export PATH


[ -f /etc/default/dcache ] && . /etc/default/dcache       
[ -f /etc/dcache.env ] && . /etc/dcache.env               

if [ -z "$DCACHE_HOME" ]; then                            
DCACHE_HOME="/usr/share/dcache"                         
fi                                                        
if [ ! -d "$DCACHE_HOME" ]; then                          
echo "$DCACHE_HOME is not a directory"                  
exit 2                                                  
fi                                                        

DCACHE_CLASSPATH=${DCACHE_HOME}/classes/*                 
DCACHE_DEFAULTS=${DCACHE_HOME}/defaults                   
DCACHE_CACHED_CONFIG=/var/lib/dcache/config/cache         
. ${DCACHE_HOME}/lib/loadConfig.sh                        
if [ "$(id -u)" -eq 0                                       -a -f /lib/systemd/system-generators/dcache-generator  -a "$(basename $0)" != "dcache-generator"              -a -f /bin/systemctl ]; then                         
for unit in /run/systemd/generator/dcache@*.service; do 
if [ "$DCACHE_CACHED_CONFIG" -nt "$unit" ]; then      
systemctl daemon-reload                             
break                                               
fi                                                    
done                                                    
fi


wantdir="$1/dcache.target.wants"
mkdir "$wantdir"

#
# Linux shell by default uses /tmp directory for temporary files,
# including here-document (cat > << EOF...). When generator runs
# the /root (thus /tmp) are mounted read-only.
#
# Point shell to a read-write directory
export TMPDIR=/run/tmpfiles.d/

for domain in $(getProperty dcache.domains); do
    RESTART_DELAY="$(getProperty dcache.restart.delay "$domain")"
    USER="$(getProperty dcache.user "$domain")"
    JAVA_OPTIONS="$(getProperty dcache.java.options "$domain")"
    HOME="$(getProperty dcache.home)"
    CLASSPATH="$(printClassPath "$domain")"
    JAVA_LIBRARY_PATH="$(getProperty dcache.java.library.path "$domain")"

    cat <<-EOF > "$1/dcache@$domain.service"
	[Unit]
	Description=dCache $domain domain
	After=network.target
	PartOf=dcache.target

	[Service]
	Type=simple
	WorkingDirectory=${HOME}
	Restart=always
	RestartSec=${RESTART_DELAY}
	SuccessExitStatus=143
	ProtectSystem=full
	ProtectHome=true
	NoNewPrivileges=true
	SyslogIdentifier=dcache@$domain
	Environment="CLASSPATH=$CLASSPATH" "LD_LIBRARY_PATH=$JAVA_LIBRARY_PATH"
	$( [ -z "$USER" ] || echo "User=$USER" )
	ExecStart=${JAVA} ${JAVA_OPTIONS} "-Ddcache.home=$HOME" "-Ddcache.paths.defaults=${DCACHE_DEFAULTS}" org.dcache.boot.BootLoader start ${domain}
	LimitNOFILE=65535
	LimitNPROC=infinity

	[Install]
	WantedBy=dcache.target
	EOF

    ln -s "$1/dcache@$domain.service" "$wantdir/dcache@$domain.service"
done
