81 wiersze
2.4 KiB
Plaintext
81 wiersze
2.4 KiB
Plaintext
![]() |
#!/usr/bin/with-contenv bash
|
||
|
|
||
|
# Exit if mods is not set
|
||
|
if [ -z ${DOCKER_MODS+x} ]; then
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
# Check for curl
|
||
|
if [ ! -f /usr/bin/curl ]; then
|
||
|
echo "[mod-init] Curl was not found on this system for Docker mods installing"
|
||
|
if [ -f /usr/bin/apt ]; then
|
||
|
## Ubuntu
|
||
|
apt-get update
|
||
|
apt-get install --no-install-recommends -y \
|
||
|
curl
|
||
|
elif [ -f /sbin/apk ]; then
|
||
|
# Alpine
|
||
|
apk add --no-cache \
|
||
|
curl
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Main run logic
|
||
|
echo "[mod-init] Attempting to run Docker Modification Logic"
|
||
|
IFS='|'
|
||
|
DOCKER_MODS=(${DOCKER_MODS})
|
||
|
for DOCKER_MOD in "${DOCKER_MODS[@]}"; do
|
||
|
FILENAME=$(echo ${DOCKER_MOD} | sed 's/[:\/]/./g')
|
||
|
ENDPOINT=$(echo ${DOCKER_MOD} | awk -F: '{print $1}')
|
||
|
USERNAME=$(echo ${ENDPOINT} | awk -F/ '{print $1}')
|
||
|
TAG=$(echo ${DOCKER_MOD} | awk -F: '{print $2}')
|
||
|
# Kill off modification logic if any of the usernames are banned
|
||
|
BLACKLIST=$(curl -s https://raw.githubusercontent.com/linuxserver/docker-mods/master/blacklist.txt)
|
||
|
IFS=$'\n'
|
||
|
BLACKLIST=(${BLACKLIST})
|
||
|
for BANNED in "${BLACKLIST[@]}"; do
|
||
|
if [ "${BANNED}" == "${USERNAME,,}" ]; then
|
||
|
if [ -z ${RUN_BANNED_MODS+x} ]; then
|
||
|
echo "[mod-init] ${DOCKER_MOD} is banned from use due to reported abuse aborting mod logic"
|
||
|
exit 0
|
||
|
else
|
||
|
echo "[mod-init] You have chosen to run banned mods ${DOCKER_MOD} will be applied"
|
||
|
fi
|
||
|
fi
|
||
|
done
|
||
|
echo "[mod-init] Applying ${DOCKER_MOD} files to container"
|
||
|
# Get Dockerhub token for api operations
|
||
|
TOKEN=\
|
||
|
"$(curl \
|
||
|
--silent \
|
||
|
--header 'GET' \
|
||
|
"https://auth.docker.io/token?service=registry.docker.io&scope=repository:${ENDPOINT}:pull" \
|
||
|
| awk -F'"' '{print $4}' \
|
||
|
)"
|
||
|
# Determine first and only layer of image
|
||
|
SHALAYER=\
|
||
|
"$(curl \
|
||
|
--silent \
|
||
|
--location \
|
||
|
--request GET \
|
||
|
--header "Authorization: Bearer ${TOKEN}" \
|
||
|
https://registry-1.docker.io/v2/${ENDPOINT}/manifests/${TAG} \
|
||
|
|grep -m1 "blobSum" \
|
||
|
| awk -F'"' '{print $4}' \
|
||
|
)"
|
||
|
# Check if we have allready applied this layer
|
||
|
if [ -f "/${FILENAME}" ] && [ "${SHALAYER}" == "$(cat /${FILENAME})" ]; then
|
||
|
echo "[mod-init] ${DOCKER_MOD} at ${SHALAYER} has been previously applied skipping"
|
||
|
else
|
||
|
# Download and extract layer to /
|
||
|
curl \
|
||
|
--silent \
|
||
|
--location \
|
||
|
--request GET \
|
||
|
--header "Authorization: Bearer ${TOKEN}" \
|
||
|
"https://registry-1.docker.io/v2/${ENDPOINT}/blobs/${SHALAYER}" \
|
||
|
| tar xz -C /
|
||
|
echo ${SHALAYER} > "/${FILENAME}"
|
||
|
fi
|
||
|
done
|