Guest User

Untitled

a guest
Jan 8th, 2019
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.75 KB | None | 0 0
  1. #!/bin/bash
  2. #
  3. # An entrypoint script for Artifactory to allow custom setup before server starts
  4. #
  5.  
  6. : ${ARTIFACTORY_USER_NAME:=artifactory}
  7. : ${ARTIFACTORY_USER_ID:=1030}
  8. : ${ARTIFACTORY_HOME:=/opt/jfrog/artifactory}
  9. : ${ARTIFACTORY_DATA:=/var/opt/jfrog/artifactory}
  10. : ${ACCESS_ETC_FOLDER=${ARTIFACTORY_DATA}/access/etc}
  11. ART_ETC=$ARTIFACTORY_DATA/etc
  12. DB_PROPS=${ART_ETC}/db.properties
  13.  
  14. : ${RECOMMENDED_MAX_OPEN_FILES:=32000}
  15. : ${MIN_MAX_OPEN_FILES:=10000}
  16.  
  17. : ${RECOMMENDED_MAX_OPEN_PROCESSES:=1024}
  18.  
  19. export ARTIFACTORY_PID=${ARTIFACTORY_HOME}/run/artifactory.pid
  20.  
  21. DEFAULT_SERVER_XML_ARTIFACTORY_PORT=8081
  22. DEFAULT_SERVER_XML_ARTIFACTORY_MAX_THREADS=200
  23. DEFAULT_SERVER_XML_ACCESS_MAX_THREADS=50
  24.  
  25. logger() {
  26. DATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")
  27. if [ -z "$CONTEXT" ]
  28. then
  29. CONTEXT=$(caller)
  30. fi
  31. MESSAGE=$1
  32. CONTEXT_LINE=$(echo "$CONTEXT" | awk '{print $1}')
  33. CONTEXT_FILE=$(echo "$CONTEXT" | awk -F"/" '{print $NF}')
  34. printf "%s %05s %s %s\n" "$DATE_TIME" "[$CONTEXT_LINE" "$CONTEXT_FILE]" "$MESSAGE"
  35. CONTEXT=
  36. }
  37.  
  38. errorExit () {
  39. logger "ERROR: $1"; echo
  40. exit 1
  41. }
  42.  
  43. warn () {
  44. logger "WARNING: $1"
  45. }
  46.  
  47. # Print on container startup information about Dockerfile location
  48. printDockerFileLocation() {
  49. logger "Dockerfile for this image can found inside the container."
  50. logger "To view the Dockerfile: 'cat /docker/artifactory-oss/Dockerfile.artifactory'."
  51. }
  52.  
  53. # Check the max open files and open processes set on the system
  54. checkULimits () {
  55. logger "Checking open files and processes limits"
  56.  
  57. CURRENT_MAX_OPEN_FILES=$(ulimit -n)
  58. logger "Current max open files is $CURRENT_MAX_OPEN_FILES"
  59.  
  60. if [ ${CURRENT_MAX_OPEN_FILES} != "unlimited" ] && [ "$CURRENT_MAX_OPEN_FILES" -lt "$RECOMMENDED_MAX_OPEN_FILES" ]; then
  61. if [ "$CURRENT_MAX_OPEN_FILES" -lt "$MIN_MAX_OPEN_FILES" ]; then
  62. errorExit "Max number of open files $CURRENT_MAX_OPEN_FILES, is too low. Cannot run Artifactory!"
  63. fi
  64.  
  65. warn "Max number of open files $CURRENT_MAX_OPEN_FILES is low!"
  66. warn "You should add the parameter '--ulimit nofile=${RECOMMENDED_MAX_OPEN_FILES}:${RECOMMENDED_MAX_OPEN_FILES}' to your the 'docker run' command."
  67. fi
  68.  
  69. CURRENT_MAX_OPEN_PROCESSES=$(ulimit -u)
  70. logger "Current max open processes is $CURRENT_MAX_OPEN_PROCESSES"
  71.  
  72. if [ "$CURRENT_MAX_OPEN_PROCESSES" != "unlimited" ] && [ "$CURRENT_MAX_OPEN_PROCESSES" -lt "$RECOMMENDED_MAX_OPEN_PROCESSES" ]; then
  73. warn "Max number of processes $CURRENT_MAX_OPEN_PROCESSES is too low!"
  74. warn "You should add the parameter '--ulimit noproc=${RECOMMENDED_MAX_OPEN_PROCESSES}:${RECOMMENDED_MAX_OPEN_PROCESSES}' to your the 'docker run' command."
  75. fi
  76. }
  77.  
  78. configureServerXml () {
  79. logger "Customising Tomcat server.xml if needed"
  80.  
  81. # List of all available variables with default values if needed
  82. server_xml_variables="""
  83. SERVER_XML_FULL
  84. SERVER_XML_ARTIFACTORY_PORT=${DEFAULT_SERVER_XML_ARTIFACTORY_PORT}
  85. SERVER_XML_ARTIFACTORY_MAX_THREADS=${DEFAULT_SERVER_XML_ARTIFACTORY_MAX_THREADS}
  86. SERVER_XML_ACCESS_MAX_THREADS=${DEFAULT_SERVER_XML_ACCESS_MAX_THREADS}
  87. SERVER_XML_ARTIFACTORY_EXTRA_CONFIG
  88. SERVER_XML_ACCESS_EXTRA_CONFIG
  89. """
  90.  
  91. if env | grep ^SERVER_XML; then
  92. local server_xml=${ARTIFACTORY_HOME}/tomcat/conf/server.xml
  93. local server_xml_template=${ARTIFACTORY_HOME}/server.xml.template
  94. [ -f ${server_xml} ] || errorExit "${server_xml} not found"
  95. [ -f ${server_xml_template} ] || errorExit "${server_xml_template} not found"
  96.  
  97. # Loop over all variables and replace with final value
  98. for v in ${server_xml_variables}; do
  99. key=$(echo ${v} | awk -F= '{print $1}')
  100. default=$(echo ${v} | awk -F= '{print $2}')
  101. value=${!key}
  102.  
  103. # Set final value (fall back to default if exists)
  104. final_value=
  105. if [ ! -z "${value}" ]; then
  106. final_value=${value}
  107. elif [ ! -z "${default}" ]; then
  108. final_value=${default}
  109. fi
  110.  
  111. logger "Replacing ${key} with ${final_value}"
  112. sed -i "s,${key},${final_value},g" ${server_xml_template} || errorExit "Updating ${key} in ${server_xml_template} failed"
  113. done
  114.  
  115. # Save original and replace with the template
  116. mv -fv ${server_xml} ${server_xml}.orig || errorExit "Moving ${server_xml} to ${server_xml}.orig failed"
  117. mv -fv ${server_xml_template} ${server_xml} || errorExit "Moving ${server_xml_template} to ${server_xml} failed"
  118.  
  119. logger "New ${server_xml}"
  120. cat ${server_xml}
  121. else
  122. logger "No Tomcat server.xml customizations found"
  123. fi
  124. }
  125.  
  126. testReadWritePermissions () {
  127. local dir_to_check=$1
  128. local error=false
  129.  
  130. [ -d ${dir_to_check} ] || errorExit "'${dir_to_check}' is not a directory"
  131.  
  132. local test_file=${dir_to_check}/test-permissions
  133.  
  134. # Write file
  135. if echo test > ${test_file} 1> /dev/null 2>&1; then
  136. # Write succeeded. Testing read...
  137. if cat ${test_file} > /dev/null; then
  138. rm -f ${test_file}
  139. else
  140. error=true
  141. fi
  142. else
  143. error=true
  144. fi
  145.  
  146. if [ ${error} == true ]; then
  147. return 1
  148. else
  149. return 0
  150. fi
  151. }
  152.  
  153. # Test directory has read/write permissions for current user
  154. testDirectoryPermissions () {
  155. local dir_to_check=$1
  156. local error=false
  157.  
  158. [ -d ${dir_to_check} ] || errorExit "'${dir_to_check}' is not a directory"
  159.  
  160. local id_str="'${ARTIFACTORY_USER_NAME}' (id ${ARTIFACTORY_USER_ID})"
  161. local u_id=$(id -u)
  162. if [ "${u_id}" != ${ARTIFACTORY_USER_ID} ]; then
  163. id_str="id ${u_id}"
  164. fi
  165.  
  166. logger "Testing directory ${dir_to_check} has read/write permissions for user ${id_str}"
  167.  
  168. if testReadWritePermissions ${dir_to_check}; then
  169. # Checking also sub directories (in cases of upgrade + uid change)
  170. local file_list=$(ls -1 ${dir_to_check})
  171. if [ ! -z "${file_list}" ]; then
  172. for d in ${file_list}; do
  173. if [ -d ${dir_to_check}/${d} ]; then
  174. testReadWritePermissions ${dir_to_check}/${d} || error=true
  175. fi
  176. done
  177. fi
  178. else
  179. error=true
  180. fi
  181.  
  182. if [ "${error}" == true ]; then
  183. local stat_data=$(stat -Lc "Directory: %n, permissions: %a, owner: %U, group: %G" ${dir_to_check})
  184. logger "###########################################################"
  185. logger "${dir_to_check} DOES NOT have proper permissions for user ${id_str}"
  186. logger "${stat_data}"
  187. logger "Mounted directory must have read/write permissions for user ${id_str}"
  188. logger "###########################################################"
  189. errorExit "Directory ${dir_to_check} has bad permissions for user ${id_str}"
  190. fi
  191. logger "Permissions for ${dir_to_check} are good"
  192. }
  193.  
  194. setupDataDirs () {
  195. logger "Setting up Artifactory data directories if missing"
  196. testDirectoryPermissions ${ARTIFACTORY_DATA}
  197. [ -d ${ARTIFACTORY_DATA}/etc ] || mkdir -pv ${ARTIFACTORY_DATA}/etc || errorExit "Creating ${ARTIFACTORY_DATA}/etc folder failed"
  198. [ -d ${ARTIFACTORY_DATA}/data ] || mkdir -pv ${ARTIFACTORY_DATA}/data || errorExit "Creating ${ARTIFACTORY_DATA}/data folder failed"
  199. [ -d ${ARTIFACTORY_DATA}/logs ] || mkdir -pv ${ARTIFACTORY_DATA}/logs || errorExit "Creating ${ARTIFACTORY_DATA}/logs folder failed"
  200. [ -d ${ARTIFACTORY_DATA}/backup ] || mkdir -pv ${ARTIFACTORY_DATA}/backup || errorExit "Creating ${ARTIFACTORY_DATA}/backup folder failed"
  201. [ -d ${ARTIFACTORY_DATA}/access ] || mkdir -pv ${ARTIFACTORY_DATA}/access || errorExit "Creating ${ARTIFACTORY_DATA}/access folder failed"
  202. }
  203.  
  204. setAccessCreds() {
  205. ACCESS_SOURCE_IP_ALLOWED=${ACCESS_SOURCE_IP_ALLOWED:-127.0.0.1}
  206. ACCESS_CREDS_FILE=${ACCESS_ETC_FOLDER}/bootstrap.creds
  207. if [ ! -z "${ACCESS_USER}" ] && [ ! -z "${ACCESS_PASSWORD}" ] && [ ! -f ${ACCESS_CREDS_FILE} ] ; then
  208. logger "Creating bootstrap.creds using ACCESS_USER and ACCESS_PASSWORD env variables"
  209. mkdir -pv ${ACCESS_ETC_FOLDER} || errorExit "Couldn't create ${ACCESS_ETC_FOLDER}"
  210. echo "${ACCESS_USER}@${ACCESS_SOURCE_IP_ALLOWED}=${ACCESS_PASSWORD}" > ${ACCESS_CREDS_FILE}
  211. chmod 600 ${ACCESS_CREDS_FILE} || errorExit "Setting permission on ${ACCESS_CREDS_FILE} failed"
  212. fi
  213. }
  214.  
  215. setMasterKey() {
  216. ARTIFACTORY_SECURITY_FOLDER=${ART_ETC}/security
  217. ARTIFACTORY_MASTER_KEY_FILE=${ARTIFACTORY_SECURITY_FOLDER}/master.key
  218. if [ ! -z "${ARTIFACTORY_MASTER_KEY}" ] ; then
  219. logger "Creating master.key using ARTIFACTORY_MASTER_KEY environment variable"
  220. mkdir -pv ${ARTIFACTORY_SECURITY_FOLDER} || errorExit "Creating folder ${ARTIFACTORY_SECURITY_FOLDER} failed"
  221. echo "${ARTIFACTORY_MASTER_KEY}" > "${ARTIFACTORY_MASTER_KEY_FILE}"
  222. fi
  223.  
  224. if [ -f "${ARTIFACTORY_MASTER_KEY_FILE}" ] ; then
  225. chmod 600 ${ARTIFACTORY_MASTER_KEY_FILE} || errorExit "Setting permission on ${ARTIFACTORY_MASTER_KEY_FILE} failed"
  226. fi
  227. }
  228.  
  229. # Wait for DB port to be accessible
  230. waitForDB () {
  231. local PROPS_FILE=$1
  232. local DB_TYPE=$2
  233.  
  234. [ -f "$PROPS_FILE" ] || errorExit "$PROPS_FILE does not exist"
  235.  
  236. local DB_HOST_PORT=
  237. local TIMEOUT=30
  238. local COUNTER=0
  239.  
  240. # Extract DB host and port
  241. case "${DB_TYPE}" in
  242. postgresql|mysql|mariadb)
  243. DB_HOST_PORT=$(grep -e '^url=' "$PROPS_FILE" | sed -e 's,^.*:\/\/\(.*\)\/.*,\1,g' | tr ':' '/')
  244. ;;
  245. oracle)
  246. DB_HOST_PORT=$(grep -e '^url=' "$PROPS_FILE" | sed -e 's,.*@\(.*\):.*,\1,g' | tr ':' '/')
  247. ;;
  248. mssql)
  249. DB_HOST_PORT=$(grep -e '^url=' "$PROPS_FILE" | sed -e 's,^.*:\/\/\(.*\);databaseName.*,\1,g' | tr ':' '/')
  250. ;;
  251. *)
  252. errorExit "DB_TYPE $DB_TYPE not supported"
  253. ;;
  254. esac
  255.  
  256. logger "Waiting for DB $DB_TYPE to be ready on $DB_HOST_PORT within $TIMEOUT seconds"
  257.  
  258. while [ $COUNTER -lt $TIMEOUT ]; do
  259. (</dev/tcp/$DB_HOST_PORT) 2>/dev/null
  260. if [ $? -eq 0 ]; then
  261. logger "DB $DB_TYPE up in $COUNTER seconds"
  262. return 1
  263. else
  264. logger "."
  265. sleep 1
  266. fi
  267. let COUNTER=$COUNTER+1
  268. done
  269.  
  270. return 0
  271. }
  272.  
  273. setMaxDBConnections () {
  274. logger "Setting DB max connections if needed"
  275.  
  276. if [ ! -z "${DB_POOL_MAX_ACTIVE}" ]; then
  277. # Check DB_POOL_MAX_ACTIVE is a valid positive integer
  278. [[ ${DB_POOL_MAX_ACTIVE} =~ ^[0-9]+$ ]] || errorExit "DB_POOL_MAX_ACTIVE (${DB_POOL_MAX_ACTIVE}) is not a valid number"
  279.  
  280. logger "Setting pool.max.active=${DB_POOL_MAX_ACTIVE}"
  281.  
  282. # Just in case file already has the property
  283. grep pool.max.active ${DB_PROPS} > /dev/null 2>&1
  284. if [ $? -eq 0 ]; then
  285. sed -i "s,pool.max.active=.*,pool.max.active=${DB_POOL_MAX_ACTIVE},g" ${DB_PROPS} || errorExit "Updating pool.max.active=${DB_POOL_MAX_ACTIVE} in ${DB_PROPS} failed"
  286. else
  287. echo "pool.max.active=${DB_POOL_MAX_ACTIVE}" >> ${DB_PROPS} || errorExit "Writing pool.max.active=${DB_POOL_MAX_ACTIVE} to ${DB_PROPS} failed"
  288. fi
  289.  
  290. if [ ! -z "${DB_POOL_MAX_IDLE}" ]; then
  291. # Check DB_POOL_MAX_IDLE is a valid positive integer
  292. [[ ${DB_POOL_MAX_IDLE} =~ ^[0-9]+$ ]] || errorExit "DB_POOL_MAX_IDLE (${DB_POOL_MAX_IDLE}) is not a valid number"
  293.  
  294. # Make sure DB_POOL_MAX_ACTIVE > DB_POOL_MAX_IDLE
  295. [ ${DB_POOL_MAX_ACTIVE} -gt ${DB_POOL_MAX_IDLE} ] || errorExit "DB_POOL_MAX_ACTIVE (${DB_POOL_MAX_ACTIVE}) must be higher than DB_POOL_MAX_IDLE (${DB_POOL_MAX_IDLE})"
  296.  
  297. logger "Setting pool.max.idle=${DB_POOL_MAX_IDLE}"
  298. else
  299. logger "DB_POOL_MAX_IDLE not set. Setting pool.max.idle to 1/10 of pool.max.active"
  300.  
  301. DB_POOL_MAX_IDLE=$(( ${DB_POOL_MAX_ACTIVE} / 10 ))
  302. logger "Setting pool.max.idle=${DB_POOL_MAX_IDLE}"
  303. fi
  304.  
  305. # Just in case file already has the property
  306. grep pool.max.idle ${DB_PROPS} > /dev/null 2>&1
  307. if [ $? -eq 0 ]; then
  308. sed -i "s,pool.max.idle=.*,pool.max.idle=${DB_POOL_MAX_IDLE},g" ${DB_PROPS} || errorExit "Updating pool.max.idle=${DB_POOL_MAX_IDLE} in ${DB_PROPS} failed"
  309. else
  310. echo "pool.max.idle=${DB_POOL_MAX_IDLE}" >> ${DB_PROPS} || errorExit "Writing pool.max.idle=${DB_POOL_MAX_IDLE} to ${DB_PROPS} failed"
  311. fi
  312. else
  313. logger "Not needed. DB_POOL_MAX_ACTIVE not set"
  314. fi
  315. }
  316.  
  317. # Check DB type configurations before starting Artifactory
  318. setDBConf () {
  319. # Set DB_HOST
  320. if [ -z "$DB_HOST" ]; then
  321. DB_HOST=$DB_TYPE
  322. fi
  323. logger "DB_HOST is set to $DB_HOST"
  324.  
  325. logger "Checking if need to copy $DB_TYPE configuration"
  326. # If already exists, just make sure it's configured for postgres
  327. if [ -f ${DB_PROPS} ]; then
  328. logger "${DB_PROPS} already exists. Making sure it's set to $DB_TYPE... "
  329. grep type=$DB_TYPE ${DB_PROPS} > /dev/null
  330. if [ $? -eq 0 ]; then
  331. logger "${DB_PROPS} already set to $DB_TYPE"
  332. else
  333. errorExit "${DB_PROPS} already exists and is set to a DB different than $DB_TYPE"
  334. fi
  335. else
  336. NEED_COPY=true
  337. fi
  338.  
  339. # On a new install and startup, need to make the initial copy before Artifactory starts
  340. if [ "$NEED_COPY" == "true" ]; then
  341. logger "Copying $DB_TYPE configuration... "
  342. cp ${ARTIFACTORY_HOME}/misc/db/$DB_TYPE.properties ${DB_PROPS} || errorExit "Copying $ARTIFACTORY_HOME/misc/db/$DB_TYPE.properties to ${DB_PROPS} failed"
  343.  
  344. sed -i "s/localhost/$DB_HOST/g" ${DB_PROPS}
  345.  
  346. # Set custom DB parameters if specified
  347. if [ ! -z "$DB_URL" ]; then
  348. logger "Setting DB_URL to $DB_URL"
  349. sed -i "s|url=.*|url=$DB_URL|g" ${DB_PROPS}
  350. fi
  351. if [ ! -z "$DB_USER" ]; then
  352. logger "Setting DB_USER to $DB_USER"
  353. sed -i "s/username=.*/username=$DB_USER/g" ${DB_PROPS}
  354. fi
  355. if [ ! -z "$DB_PASSWORD" ]; then
  356. logger "Setting DB_PASSWORD to **********"
  357. sed -i "s/password=.*/password=$DB_PASSWORD/g" ${DB_PROPS}
  358. fi
  359. if [ ! -z "$DB_PORT" ]; then
  360. logger "Setting DB_PORT to $DB_PORT"
  361. case "$DB_TYPE" in
  362. mysql|postgresql|mariadb)
  363. oldPort=$(grep -E "(url).*" ${DB_PROPS} | awk -F":" '{print $4}' | awk -F"/" '{print $1}')
  364. ;;
  365. oracle)
  366. oldPort=$(grep -E "(url).*" ${DB_PROPS} | awk -F":" '{print $5}')
  367. ;;
  368. mssql)
  369. oldPort=$(grep -E "(url).*" ${DB_PROPS} | awk -F":" '{print $4}' | awk -F";" '{print $1}')
  370. ;;
  371. esac
  372. sed -i "s/$oldPort/$DB_PORT/g" ${DB_PROPS}
  373. fi
  374. if [ ! -z "$DB_HOST" ]; then
  375. logger "Setting DB_HOST to $DB_HOST"
  376. case "$DB_TYPE" in
  377. mysql|postgresql|mssql|mariadb)
  378. oldHost=$(grep -E "(url).*" ${DB_PROPS} | awk -F"//" '{print $2}' | awk -F":" '{print $1}')
  379. ;;
  380. oracle)
  381. oldHost=$(grep -E "(url).*" ${DB_PROPS} | awk -F"@" '{print $2}' | awk -F":" '{print $1}')
  382. ;;
  383. esac
  384. sed -i "s/$oldHost/$DB_HOST/g" ${DB_PROPS}
  385. fi
  386. fi
  387. }
  388.  
  389. # Set and configure DB type
  390. setDBType () {
  391. logger "Checking DB_TYPE"
  392. if [ -f "${ART_ETC}/.secrets/.temp.db.properties" ]
  393. then
  394. SECRET_DB_PROPS_FILE="${ART_ETC}/.secrets/.temp.db.properties"
  395. logger "Detected secret db.properties file at ${SECRET_DB_PROPS_FILE}. Secret file will override default db.properties file as well as environment variables."
  396. DB_TYPE_FROM_SECRET=$(grep -E "(type).*" "$SECRET_DB_PROPS_FILE" | awk -F"=" '{ print $2 }')
  397. if [[ "$DB_TYPE_FROM_SECRET" =~ ^(postgresql|mysql|oracle|mssql|mariadb)$ ]]; then DB_TYPE=${DB_TYPE_FROM_SECRET} ; fi
  398. fi
  399. if [ ! -z "${DB_TYPE}" ] && [ "${DB_TYPE}" != derby ]; then
  400. logger "DB_TYPE is set to $DB_TYPE"
  401. NEED_COPY=false
  402. DB_PROPS=${ART_ETC}/db.properties
  403. if [ ! -z "$SECRET_DB_PROPS_FILE" ]
  404. then
  405. DB_PROPS=${SECRET_DB_PROPS_FILE}
  406. logger "DB_PROPS set to: ${DB_PROPS}"
  407. fi
  408.  
  409. setDBConf
  410.  
  411. # Wait for DB
  412. # On slow systems, when working with docker-compose, the DB container might be up,
  413. # but not ready to accept connections when Artifactory is already trying to access it.
  414. if [[ ! "$HA_IS_PRIMARY" =~ false ]]; then
  415. waitForDB "$DB_PROPS" "$DB_TYPE"
  416. [ $? -eq 1 ] || errorExit "DB $DB_TYPE failed to start in the given time"
  417. fi
  418. fi
  419. if [ -z "${DB_TYPE}" ] || [ "${DB_TYPE}" == derby ]; then
  420. logger "Artifactory will use embedded Derby DB"
  421. # In case db.properties is missing, create a Derby default db.properties
  422. if [ ! -f ${DB_PROPS} ]; then
  423. logger "${DB_PROPS} does not exist. Creating it with defaults"
  424. cat << DB_P > "${DB_PROPS}"
  425. # File auto generated by Docker entrypoint
  426. type=derby
  427. url=jdbc:derby:{db.home};create=true
  428. driver=org.apache.derby.jdbc.EmbeddedDriver
  429. DB_P
  430. fi
  431. fi
  432.  
  433. setMaxDBConnections
  434. }
  435.  
  436. addExtraJavaArgs() {
  437. if [ ! -z "$EXTRA_JAVA_OPTIONS" ] && [ ! -f ${ARTIFACTORY_HOME}/bin/artifactory.default.origin ] ; then
  438. cp -v ${ARTIFACTORY_HOME}/bin/artifactory.default ${ARTIFACTORY_HOME}/bin/artifactory.default.origin
  439. echo "export JAVA_OPTIONS=\"\$JAVA_OPTIONS $EXTRA_JAVA_OPTIONS\"" >> ${ARTIFACTORY_HOME}/bin/artifactory.default
  440. fi
  441. }
  442.  
  443. terminate () {
  444. echo -e "\nTerminating Artifactory"
  445. ${ARTIFACTORY_HOME}/bin/artifactory.sh stop
  446. }
  447.  
  448. # Catch Ctrl+C and other termination signals to try graceful shutdown
  449. trap terminate SIGINT SIGTERM SIGHUP
  450.  
  451. logger "Preparing to run Artifactory in Docker"
  452. logger "Running as $(id)"
  453.  
  454. printDockerFileLocation
  455. checkULimits
  456. setupDataDirs
  457. setAccessCreds
  458. setMasterKey
  459. setDBType
  460. configureServerXml
  461. addExtraJavaArgs
  462.  
  463. logger "Setup done. Running Artifactory"
  464.  
  465. # Run Artifactory as ARTIFACTORY_USER_NAME user
  466. exec ${ARTIFACTORY_HOME}/bin/artifactory.sh &
  467. art_pid=$!
  468.  
  469. echo ${art_pid} > ${ARTIFACTORY_PID}
  470.  
  471. wait ${art_pid}
Add Comment
Please, Sign In to add comment