#!/bin/bash # exit script if return code != 0 set -e # release tag name from build arg, stripped of build ver using string manipulation release_tag_name="${1//-[0-9][0-9]/}" # note do NOT download build scripts - inherited from int script with envvars common defined # detect image arch #### OS_ARCH=$(cat /etc/os-release | grep -P -o -m 1 "(?=^ID\=).*" | grep -P -o -m 1 "[a-z]+$") if [[ ! -z "${OS_ARCH}" ]]; then if [[ "${OS_ARCH}" == "arch" ]]; then OS_ARCH="x86-64" else OS_ARCH="aarch64" fi echo "[info] OS_ARCH defined as '${OS_ARCH}'" else echo "[warn] Unable to identify OS_ARCH, defaulting to 'x86-64'" OS_ARCH="x86-64" fi # pacman packages #### # hack - needs rsync for reflector pacman -S rsync --noconfirm # call pacman db and package updater script source upd.sh # define pacman packages pacman_packages="qbittorrent-nox python geoip" # install compiled packages using pacman if [[ ! -z "${pacman_packages}" ]]; then pacman -S --needed $pacman_packages --noconfirm fi # aur packages #### # define aur packages aur_packages="" # call aur install script (arch user repo) - note true required due to autodl-irssi error during install source aur.sh # custom #### # this is a (temporary?) hack to prevent the error '/usr/bin/qbittorrent-nox: # error while loading shared libraries: libQt5Core.so.5: cannot open shared # object file: No such file or directory.' when running this container on # hosts with older kernels (centos, mac os). alternative workaround to this # is for the user to upgrade the kernel on their host. #pacman -S binutils --needed --noconfirm #strip --remove-section=.note.ABI-tag /usr/lib64/libQt5Core.so.5 # container perms #### # define comma separated list of paths install_paths="/etc/privoxy,/home/nobody" # split comma separated string into list for install paths IFS=',' read -ra install_paths_list <<< "${install_paths}" # process install paths in the list for i in "${install_paths_list[@]}"; do # confirm path(s) exist, if not then exit if [[ ! -d "${i}" ]]; then echo "[crit] Path '${i}' does not exist, exiting build process..." ; exit 1 fi done # convert comma separated string of install paths to space separated, required for chmod/chown processing install_paths=$(echo "${install_paths}" | tr ',' ' ') # set permissions for container during build - Do NOT double quote variable for install_paths otherwise this will wrap space separated paths as a single string chmod -R 775 ${install_paths} # create file with contents of here doc, note EOF is NOT quoted to allow us to expand current variable 'install_paths' # we use escaping to prevent variable expansion for PUID and PGID, as we want these expanded at runtime of init.sh cat < /tmp/permissions_heredoc # get previous puid/pgid (if first run then will be empty string) previous_puid=\$(cat "/root/puid" 2>/dev/null || true) previous_pgid=\$(cat "/root/pgid" 2>/dev/null || true) # if first run (no puid or pgid files in /tmp) or the PUID or PGID env vars are different # from the previous run then re-apply chown with current PUID and PGID values. if [[ ! -f "/root/puid" || ! -f "/root/pgid" || "\${previous_puid}" != "\${PUID}" || "\${previous_pgid}" != "\${PGID}" ]]; then # set permissions inside container - Do NOT double quote variable for install_paths otherwise this will wrap space separated paths as a single string chown -R "\${PUID}":"\${PGID}" ${install_paths} fi # write out current PUID and PGID to files in /root (used to compare on next run) echo "\${PUID}" > /root/puid echo "\${PGID}" > /root/pgid EOF # replace permissions placeholder string with contents of file (here doc) sed -i '/# PERMISSIONS_PLACEHOLDER/{ s/# PERMISSIONS_PLACEHOLDER//g r /tmp/permissions_heredoc }' /usr/local/bin/init.sh rm /tmp/permissions_heredoc # env vars #### cat <<'EOF' > /tmp/envvars_heredoc export WEBUI_PORT=$(echo "${WEBUI_PORT}" | sed -e 's~^[ \t]*~~;s~[ \t]*$~~') if [[ ! -z "${WEBUI_PORT}" ]]; then echo "[info] WEBUI_PORT defined as '${WEBUI_PORT}'" | ts '%Y-%m-%d %H:%M:%.S' else echo "[warn] WEBUI_PORT not defined (via -e WEBUI_PORT), defaulting to '8080'" | ts '%Y-%m-%d %H:%M:%.S' export WEBUI_PORT="8080" fi export APPLICATION="qbittorrent" EOF # replace env vars placeholder string with contents of file (here doc) sed -i '/# ENVVARS_PLACEHOLDER/{ s/# ENVVARS_PLACEHOLDER//g r /tmp/envvars_heredoc }' /usr/local/bin/init.sh rm /tmp/envvars_heredoc # cleanup cleanup.sh