Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-08 07:59:56

0001 #!/bin/sh
0002 # 
0003 # Licensed under the Apache License, Version 2.0 (the "License");
0004 # You may not use this file except in compliance with the License.
0005 # You may obtain a copy of the License at
0006 # http://www.apache.org/licenses/LICENSE-2.0OA
0007 #
0008 # Authors:
0009 # - Wen Guan, <wen.guan@cern.ch>, 2022 - 2025
0010 
0011 IDDS_SERVICE=$1
0012 
0013 source /etc/profile.d/conda.sh
0014 conda activate /opt/idds;
0015 
0016 export IDDS_HOME=/opt/idds
0017 export ALEMBIC_CONFIG=/opt/idds/config/idds/alembic.ini
0018 export IDDS_CONFIG=/opt/idds/etc/idds/idds.cfg
0019 
0020 if [ -f /etc/grid-security/hostkey.pem ]; then
0021     echo "host certificate is already created."
0022     chmod 600 /etc/grid-security/hostkey.pem
0023 elif [ -f /opt/idds/certs/hostkey.pem ]; then
0024     echo "mount /opt/idds/certs/hostkey.pem to /etc/grid-security/hostkey.pem"
0025     ln -fs /opt/idds/certs/hostkey.pem /etc/grid-security/hostkey.pem
0026     ln -fs /opt/idds/certs/hostcert.pem /etc/grid-security/hostcert.pem
0027     chmod 600 /etc/grid-security/hostkey.pem
0028 fi
0029 # setup intermediate certificate
0030 if [ ! -f /etc/grid-security/chain.pem ]; then
0031   if [ -f /opt/idds/certs/chain.pem ]; then
0032     ln -fs /opt/idds/certs/chain.pem /etc/grid-security/chain.pem
0033   elif [ -f /etc/grid-security/hostcert.pem ]; then
0034     ln -fs /etc/grid-security/hostcert.pem /etc/grid-security/chain.pem
0035   fi
0036 fi
0037 
0038 if [ -f /opt/idds/config/idds/idds.cfg ]; then
0039     echo "idds.cfg already mounted."
0040 else
0041     echo "idds.cfg not found. will generate one."
0042     python3 /opt/idds/tools/env/merge_idds_configs.py \
0043         -s /opt/idds/config_default/idds.cfg $IDDS_OVERRIDE_IDDS_CONFIGS \
0044         --use-env \
0045         --prefix IDDS_CFG_IDDS \
0046         -d /opt/idds/config/idds/idds.cfg
0047     python3 /opt/idds/tools/env/merge_configmap.py \
0048         -s /opt/idds/configmap/idds_configmap.json \
0049         -d /opt/idds/config/idds/idds.cfg
0050 fi
0051 
0052 if [ -f /opt/idds/config/idds/alembic.ini ]; then
0053     echo "alembic.ini already mounted."
0054 else
0055     echo "alembic.ini not found. will generate one."
0056     cp /opt/idds/config_default/alembic.ini /opt/idds/config/idds/alembic.ini
0057     python3 /opt/idds/tools/env/merge_configmap.py \
0058         -s /opt/idds/configmap/idds_configmap.json \
0059         -d /opt/idds/config/idds/alembic.ini
0060 fi
0061 
0062 if [ -f /opt/idds/config/idds/auth.cfg ]; then
0063     echo "auth.cfg already mounted."
0064 else
0065     echo "auth.cfg not found. will generate one."
0066     python3 /opt/idds/tools/env/merge_idds_configs.py \
0067         -s /opt/idds/config_default/auth.cfg $IDDS_OVERRIDE_AUTH_CONFIGS \
0068         --use-env \
0069         --prefix IDDS_CFG_AUTH \
0070         -d /opt/idds/config/idds/auth.cfg
0071     
0072     if [ -f /opt/idds/configmap/auth.cfg.json ]; then
0073         python3 /opt/idds/tools/env/merge_configmap.py \
0074             -s /opt/idds/configmap/auth.cfg.json \
0075             -d /opt/idds/config/idds/auth.cfg
0076     fi
0077 
0078     python3 /opt/idds/tools/env/merge_configmap.py \
0079         -s /opt/idds/configmap/idds_configmap.json \
0080         -d /opt/idds/config/idds/auth.cfg
0081 fi
0082 
0083 if [ -f /opt/idds/config/idds/gacl ]; then
0084     echo "gacl already mounted."
0085 else
0086     echo "gacl not found. will generate one."
0087     ln -s /opt/idds/config_default/gacl /opt/idds/config/idds/gacl
0088 fi
0089 
0090 if [ -f /opt/idds/config/panda.cfg ]; then
0091     echo "panda.cfg already mounted."
0092 else
0093     echo "panda.cfg not found. will generate one."
0094     python3 /opt/idds/tools/env/merge_idds_configs.py \
0095         -s /opt/idds/config_default/panda.cfg $IDDS_OVERRIDE_PANDA_CONFIGS \
0096         --use-env \
0097         --prefix IDDS_CFG_PANDA \
0098         -d /opt/idds/config/panda.cfg
0099     python3 /opt/idds/tools/env/merge_configmap.py \
0100         -s /opt/idds/configmap/idds_configmap.json \
0101         -d /opt/idds/config/panda.cfg
0102 fi
0103 
0104 if [ -f /opt/idds/config/rucio.cfg ]; then
0105     echo "rucio.cfg already mounted."
0106 else 
0107     echo "rucio.cfg not found. will generate one."
0108     python3 /opt/idds/tools/env/merge_idds_configs.py \
0109         -s /opt/idds/config_default/rucio.cfg $IDDS_OVERRIDE_RUCIO_CONFIGS \
0110         --use-env \
0111         --prefix IDDS_CFG_RUCIO \
0112         -d /opt/idds/config/rucio.cfg
0113     python3 /opt/idds/tools/env/merge_configmap.py \
0114         -s /opt/idds/configmap/idds_configmap.json \
0115         -d /opt/idds/config/rucio.cfg
0116 fi
0117 
0118 # generate oidc token from environment
0119 echo "generate oidc token from environment PANDA_AUTH_ID_TOKEN if it exists."
0120 python3 /opt/idds/tools/env/merge_configmap.py --create_oidc_token
0121 
0122 if [ -f /opt/idds/config/idds/httpd-idds-443-py311-al9.conf ]; then
0123     echo "httpd conf already mounted."
0124 else
0125     echo "httpd conf not found. will use the default one."
0126     if [ -f /opt/idds/config_default/httpd-idds-443-py311-al9.conf ]; then
0127         cp /opt/idds/config_default/httpd-idds-443-py311-al9.conf /opt/idds/config/idds/httpd-idds-443-py311-al9.conf
0128     else
0129         echo "httpd default conf not found. will generate from template and use the default one."
0130         # Generate *.install_template files (Apache conf + idds.wsgi) with paths
0131         # resolved from the running /opt/idds Python env, not from the build env.
0132         python3 /opt/idds/tools/env/setup_idds_path.py
0133         # Use the freshly generated install_template as the default httpd conf.
0134         if [ -f /opt/idds/etc/idds/rest/httpd-idds-443-py39-cc7.conf.install_template ]; then
0135             cp /opt/idds/etc/idds/rest/httpd-idds-443-py39-cc7.conf.install_template \
0136                /opt/idds/config/idds/httpd-idds-443-py39-cc7.conf
0137         fi
0138     fi
0139 fi
0140 
0141 if [ -f /opt/idds/config/idds/supervisord_idds.ini ]; then
0142     echo "supervisord conf already mounted."
0143 else
0144     echo "supervisord conf not found. will use the default one."
0145     cp /opt/idds/config_default/supervisord_idds.ini /opt/idds/config/idds/supervisord_idds.ini
0146     # cp /opt/idds/config_default/supervisord_iddsfake.ini /opt/idds/config/idds/supervisord_iddsfake.ini
0147     cp /opt/idds/config_default/supervisord_idds_clerk.ini /opt/idds/config/idds/supervisord_idds_clerk.ini
0148     cp /opt/idds/config_default/supervisord_idds_transformer.ini /opt/idds/config/idds/supervisord_idds_transformer.ini
0149     cp /opt/idds/config_default/supervisord_idds_submitter.ini /opt/idds/config/idds/supervisord_idds_submitter.ini
0150     cp /opt/idds/config_default/supervisord_idds_poller.ini /opt/idds/config/idds/supervisord_idds_poller.ini
0151     cp /opt/idds/config_default/supervisord_idds_receiver.ini /opt/idds/config/idds/supervisord_idds_receiver.ini
0152     cp /opt/idds/config_default/supervisord_idds_trigger.ini /opt/idds/config/idds/supervisord_idds_trigger.ini
0153     cp /opt/idds/config_default/supervisord_idds_finisher.ini /opt/idds/config/idds/supervisord_idds_finisher.ini
0154     
0155     cp /opt/idds/config_default/supervisord_httpd.ini /opt/idds/config/idds/supervisord_httpd.ini
0156     # cp /opt/idds/config_default/supervisord_syslog-ng.ini /opt/idds/config/idds/supervisord_syslog-ng.ini
0157 
0158     echo "setup log rotation"
0159     cp /opt/idds/config_default/supervisord_logrotate.ini /opt/idds/config/idds/supervisord_logrotate.ini
0160     cp /opt/idds/config_default/logrotate_idds /opt/idds/config/idds/logrotate_idds
0161     cp /opt/idds/config_default/logrotate_daemon /opt/idds/config/idds/logrotate_daemon
0162     chmod +x /opt/idds/config/idds/logrotate_daemon
0163     chown root /opt/idds/config/idds/logrotate_idds
0164 
0165     echo "setup health monitor"
0166     cp /opt/idds/config_default/supervisord_healthmonitor.ini /opt/idds/config/idds/
0167     cp /opt/idds/config_default/healthmonitor_daemon /opt/idds/config/idds/
0168     cp /opt/idds/config_default/idds_health_check.py /opt/idds/config/idds/
0169     chmod +x /opt/idds/config/idds/healthmonitor_daemon
0170     chmod +x /opt/idds/config/idds/idds_health_check.py
0171 fi
0172 
0173 if [ -f /etc/grid-security/hostkey.pem ]; then
0174     echo "Host certificate already mounted."
0175 else
0176     echo "Host certificate not found. will generate a self-signed one."
0177     openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
0178         -subj "/C=US/DC=IDDS/OU=computers/CN=$(hostname -f)" \
0179         -keyout /opt/idds/config/hostkey.pem \
0180         -out /opt/idds/config/hostcert.pem
0181     ln -fs /opt/idds/config/hostcert.pem /etc/grid-security/hostcert.pem
0182     ln -fs /opt/idds/config/hostkey.pem /etc/grid-security/hostkey.pem
0183     chmod 600 /etc/grid-security/hostkey.pem
0184 fi
0185 
0186 cp /opt/idds/config_default/httpd_daemon.sh /opt/idds/config/idds/httpd_daemon.sh
0187 chmod a+rx /opt/idds/config/idds/httpd_daemon.sh
0188 
0189 mkdir -p /opt/idds/config/.panda/
0190 
0191 if [ ! -z "$IDDS_PRINT_CFG" ]; then
0192     echo "=================== /opt/idds/etc/idds.cfg ============================"
0193     cat /opt/idds/etc/idds.cfg
0194     echo ""
0195     echo "=================== /opt/idds/etc/idds/auth/auth.cfg ============================"
0196     cat /opt/idds/etc/idds/auth/auth.cfg
0197     echo ""
0198     echo "=================== /opt/idds/etc/idds/rest/gacl ============================"
0199     cat /opt/idds/etc/idds/rest/gacl
0200     echo ""
0201     echo "=================== /etc/httpd/conf.d/httpd-idds-443-py311-al9.conf ============================"
0202     cat /etc/httpd/conf.d/httpd-idds-443-py311-al9.conf
0203     echo ""
0204     echo "=================== /opt/idds/config/idds/supervisord_idds.ini ============================"
0205     cat /opt/idds/config/idds/supervisord_idds.ini
0206     echo ""
0207     echo "=================== /opt/idds/etc/panda/panda.cfg ============================"
0208     cat /opt/idds/etc/panda/panda.cfg
0209     echo ""
0210     echo "=================== /opt/idds/etc/rucio.cfg ============================"
0211     cat /opt/idds/etc/rucio.cfg
0212     echo ""
0213 fi
0214 
0215 # min number of workers
0216 if [[ -z "${IDDS_SERVER_CONF_MIN_WORKERS}" ]]; then
0217   export IDDS_SERVER_CONF_MIN_WORKERS=32
0218 fi
0219 
0220 # max number of workers
0221 if [[ -z "${IDDS_SERVER_CONF_MAX_WORKERS}" ]]; then
0222   export IDDS_SERVER_CONF_MAX_WORKERS=512
0223 fi
0224 
0225 # max number of WSGI daemons
0226 if [[ -z "${IDDS_SERVER_CONF_NUM_WSGI}" ]]; then
0227   export IDDS_SERVER_CONF_NUM_WSGI=32
0228 fi
0229 
0230 # max number of WSGI daemons
0231 if [[ -z "${IDDS_SERVER_CONF_MAX_BACKLOG}" ]]; then
0232   export IDDS_SERVER_CONF_MAX_BACKLOG=511
0233 fi
0234 
0235 # max number of WSGI threads
0236 if [[ -z "${IDDS_SERVER_CONF_NUM_WSGI_THREAD}" ]]; then
0237   export IDDS_SERVER_CONF_NUM_WSGI_THREAD=32
0238 fi
0239 
0240 # create database if not exists
0241 python /opt/idds/tools/env/create_database.py
0242 # upgrade database
0243 alembic upgrade heads
0244 
0245 # configure monitor
0246 python /opt/idds/tools/env/config_monitor.py -s ${IDDS_HOME}/monitor/data/conf.js.template -d ${IDDS_HOME}/monitor/data/conf.js  --host ${IDDS_REST_HOST}
0247 
0248 if ! [ -f /opt/idds/config/.token ]; then
0249     echo "/opt/idds/config/.token does not exist."
0250     if [ -f /opt/idds/configmap/idds2panda_token ]; then
0251         ln -s /opt/idds/configmap/idds2panda_token /opt/idds/config/.token
0252     fi
0253 fi
0254 
0255 # get vomsproxy renew
0256 cp /opt/idds/config_default/vomsprox-renew /opt/idds/config/vomsprox-renew
0257 chmod +x /opt/idds/config/vomsprox-renew
0258 if [ -d "/opt/idds/sandbox/vomses" ] && [ ! -e "/etc/vomses" ]; then
0259     ln -s /opt/idds/sandbox/vomses /etc/vomses
0260 fi
0261 
0262 # fetch-crl cron
0263 cronExec=/opt/idds/cronExec
0264 cat <<EOT >> ${cronExec}
0265 while true; do /usr/sbin/fetch-crl; sleep 36000; done &
0266 while true; do /opt/idds/config/vomsprox-renew; sleep 50000; done &
0267 EOT
0268 chmod +x ${cronExec}
0269 bash ${cronExec}
0270 
0271 # start redis
0272 mkdir -p /var/log/idds/redis
0273 if [ ! -h /var/log/redis ]; then
0274     ln -s /var/log/idds/redis /var/log/redis
0275 fi
0276 if [ ! -h /var/lib/redis ]; then
0277     ln -s /var/log/idds/redis /var/lib/redis
0278 fi
0279 /usr/bin/redis-server /etc/redis/redis.conf --supervised systemd &
0280 
0281 # start NATS
0282 cp /opt/idds/config_default/supervisord_nats.ini /opt/idds/config/idds/supervisord_nats.ini
0283 cp /opt/idds/config_default/nats_daemon.sh /opt/idds/config/idds/nats_daemon.sh
0284 chmod +x /opt/idds/config/idds/nats_daemon.sh
0285 if [ ! -z "$NATS_TOKEN" ]; then
0286     # Replace ${NATS_TOKEN} in the file with the actual value
0287     sed -i "s|\${NATS_TOKEN}|$NATS_TOKEN|g" /opt/idds/config/idds/nats_daemon.sh
0288 fi
0289 
0290 
0291 echo "clean heartbeats"
0292 python /opt/idds/tools/env/clean_heartbeat.py
0293 
0294 if [ "${IDDS_SERVICE}" == "rest" ]; then
0295   echo "starting iDDS ${IDDS_SERVICE} service"
0296   # systemctl restart httpd.service
0297   # systemctl enable httpd.service
0298   # systemctl status httpd.service
0299   # /usr/sbin/httpd
0300   /usr/bin/supervisord -c /etc/supervisord.conf
0301 elif [ "${IDDS_SERVICE}" == "daemon" ]; then
0302   echo "starting iDDS ${IDDS_SERVICE} service"
0303   # systemctl enable supervisord
0304   # systemctl start supervisord
0305   # systemctl status supervisord
0306   /usr/bin/supervisord -c /etc/supervisord.conf
0307 elif [ "${IDDS_SERVICE}" == "all" ]; then
0308   echo "starting iDDS rest service"
0309   # /usr/sbin/httpd
0310 
0311   echo "starting iDDS daemon service"
0312   /usr/bin/supervisord -c /etc/supervisord.conf
0313 else
0314   exec "$@"
0315 fi
0316 
0317 # echo "start syslog-ng"
0318 # /usr/sbin/syslog-ng -F --no-caps --persist-file=/var/log/idds/syslog-ng.persist -p /var/log/idds/syslog-ng.pid
0319 # tail -f -F /var/log/idds/syslog-ng-stdout.log &
0320 # tail -f -F /var/log/idds/syslog-ng-stderr.log &
0321 
0322 trap : TERM INT; sleep infinity & wait