diff --git a/Docker/liberate.sh b/Docker/liberate.sh index decf16c4..73cd8966 100755 --- a/Docker/liberate.sh +++ b/Docker/liberate.sh @@ -32,7 +32,7 @@ init_config_file() { cp ${FULLPATH} ${LIBATION_CONFIG_INTERNAL}/ return 0 else - warn "${FULLPATH} not found, using defaults" + warn "${FULLPATH} not found, creating empty file" echo "{}" > ${LIBATION_CONFIG_INTERNAL}/${FILE} return 1 fi @@ -63,7 +63,6 @@ create_db() { warn "prexisting database found when creating" return 0 else - warn "database not found, creating one at ${DBFILE}" if ! touch "${DBFILE}"; then error "unable to create database, check permissions on host" exit 1 @@ -72,6 +71,46 @@ create_db() { fi } +setup_db() { + DBPATH=$1 + dbpattern="*.db" + + debug "using database directory ${DBPATH}" + + # Figure out the right databse file + if [[ -z "${LIBATION_DB_FILE}" ]]; + then + dbCount=$(find "${DBPATH}" -type f -name "${dbpattern}" | wc -l) + if [ "${dbCount}" -gt 1 ]; + then + error "too many database files found, set LIBATION_DB_FILE to the filename you wish to use" + exit 1 + elif [ "${dbCount}" -eq 1 ]; + then + files=( ${DBPATH}/${dbpattern} ) + FILE=${files[0]} + else + FILE="${DBPATH}/LibationContext.db" + fi + else + FILE="${DBPATH}/${LIBATION_DB_FILE}" + fi + + debug "planning to use database ${FILE}" + + if [ -f "${FILE}" ]; then + info "database found at ${FILE}" + elif [ ${LIBATION_CREATE_DB} = "true" ]; + then + warn "database not found, creating one at ${FILE}" + create_db ${FILE} + else + error "database not found and creation is disabled" + exit 1 + fi + ln -s "${FILE}" "${LIBATION_CONFIG_INTERNAL}/LibationContext.db" +} + run() { info "scanning accounts" /libation/LibationCli scan @@ -89,27 +128,15 @@ main() { update_settings Settings.json InProgress /tmp info "loading database" - FILE=LibationContext.db # If user provides a separate database mount, use that if is_mounted "${LIBATION_DB_DIR}"; then - debug "using database directory ${LIBATION_DB_DIR}" - if [ -f "${LIBATION_DB_DIR}/${FILE}" ]; then - info "database found in ${LIBATION_DB_DIR}" - else - create_db ${LIBATION_DB_DIR}/${FILE} - fi - ln -s /${LIBATION_DB_DIR}/${FILE} ${LIBATION_CONFIG_INTERNAL}/${FILE} + DB_LOCATION=${LIBATION_DB_DIR} # Otherwise, use the config directory else - debug "using config directory ${LIBATION_CONFIG_DIR}" - if [ -f "${LIBATION_CONFIG_DIR}/${FILE}" ]; then - info "database found in ${LIBATION_CONFIG_DIR}" - else - create_db ${LIBATION_CONFIG_DIR}/${FILE} - fi - ln -s /${LIBATION_CONFIG_DIR}/${FILE} ${LIBATION_CONFIG_INTERNAL}/${FILE} + DB_LOCATION=${LIBATION_CONFIG_DIR} fi + setup_db ${DB_LOCATION} # Try to warn if books dir wasn't mounted in if ! is_mounted "${LIBATION_BOOKS_DIR}"; @@ -122,7 +149,7 @@ main() { SLEEP_TIME=-1 fi - if [ "${SLEEP_TIME}" = -1 ]; then + if [ "${SLEEP_TIME}" -eq -1 ]; then info "running once" else info "running every ${SLEEP_TIME}" @@ -134,7 +161,7 @@ main() { run # Liberate only once if SLEEP_TIME was set to -1 - if [ "${SLEEP_TIME}" = -1 ]; then + if [ "${SLEEP_TIME}" -eq -1 ]; then break fi diff --git a/Dockerfile b/Dockerfile index 88909c4e..7e9eb9be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,8 +22,11 @@ ENV SLEEP_TIME=-1 ENV LIBATION_CONFIG_INTERNAL=/config-internal ENV LIBATION_CONFIG_DIR=/config ENV LIBATION_DB_DIR=/db +ENV LIBATION_DB_FILE= +ENV LIBATION_CREATE_DB=true ENV LIBATION_BOOKS_DIR=/data + RUN apt-get update && apt-get -y upgrade && \ apt-get install -y jq && \ mkdir -m777 ${LIBATION_CONFIG_INTERNAL} ${LIBATION_BOOKS_DIR}