distribution/scripts/create_docker_package
2022-02-05 09:23:32 -05:00

184 lines
4.1 KiB
Bash
Executable file

#!/bin/sh
FIRST_LABEL=30002
LABEL_DEVICE="D"
LABEL_ENV="E_"
LABEL_PORT="P_"
LABEL_VOLUME="V"
STRING_DEVICE="-d "
STRING_ENV="-e "
STRING_PORT="-p "
STRING_VOLUME="-v "
add_default() {
defaults="${defaults} <setting id=\"${1}\" value=\"${2}\" />\n"
}
add_device() {
add_label
default="${1%:*}"
docker="${1#*:}"
id="${LABEL_DEVICE}${docker//\//_}"
add_default "${id}" "${default}"
add_option "--device=\"\$${id}\""
add_setting "<setting label=\"${label}\" type=\"folder\" id=\"${id}\" default=\"${default}\" />"
add_string "${STRING_DEVICE}${docker}"
}
add_env() {
add_label
default="${1#*=}"
docker="${1%%=*}"
id="${LABEL_ENV}${docker}"
add_default "${id}" "${default}"
add_option "-e ${docker}=\"${id}\""
add_setting "<setting label=\"${label}\" type=\"text\" id=\"${id}\" default=\"${default}\" />"
add_string "${STRING_ENV}${docker}"
}
add_label() {
if [ -z ${label} ]; then
label=${FIRST_LABEL}
else
label=$((label+1))
fi
}
add_option() {
if [ ! -z "${options}" ]; then
options="${options} "'\\\n'
fi
options="${options} ${1}"
}
add_port() {
add_label
default="${1%:*}"
docker="${1#*:}"
port="${docker%/*}"
id="${LABEL_PORT}${port}"
add_default "${id}" "${default}"
add_option "-p \"\$${id}\":${docker}"
add_setting "<setting label=\"${label}\" type=\"number\" id=\"${id}\" default=\"${default}\" />"
add_string "${STRING_PORT}${port}"
}
add_setting() {
settings="${settings} ${1}\n"
}
add_string() {
strings="${strings}\nmsgctxt \"${label}\"\nmsgid \"${1}\"\nmsgstr \"\"\n"
}
add_volume() {
add_label
default="${1%:*}"
docker="${1#*:}"
id="${LABEL_VOLUME}${docker//\//_}"
add_default "${id}" "${default}"
add_option "-v \"\$${id}\":${docker}"
add_setting "<setting label=\"${label}\" type=\"folder\" id=\"${id}\" default=\"${default}\" />"
add_string "${STRING_VOLUME}${docker}"
}
case "${ARCH}" in
arm)
projects="imx6 RPi RPi2"
;;
x86_64)
projects="Generic"
;;
*)
echo "Unkown project"
exit 1
;;
esac
while [[ $# -gt 0 ]]; do
option="${1}"
shift
case "${option}" in
--device=*)
add_device "${option#--device=}"
;;
--name=*)
;;
--port=*)
add_port "${option#--port=}"
;;
--volume=*)
add_volume "${option#--volume=}"
;;
-e)
add_env "${1}"
shift
;;
-p)
add_port "${1}"
shift
;;
-v)
add_volume "${1}"
shift
;;
-*)
add_option "${option}"
;;
*/*)
add_option "${option}"
image="${option%:*}"
version="${option#*:}"
if [ "${version}" = "${option}" ]; then
version="latest"
fi
if [ ! -z "$*" ]; then
add_option "$*"
fi
break
;;
*)
add_option "${option}"
;;
esac
done
if [ -z "${image}" ]; then
echo "Failed to parse image"
exit 1
fi
name="${image//\//.}"
dir="packages/addons/docker/${name}"
if [ -d "${dir}" ]; then
echo "Package already exists"
exit 1
fi
cp -R config/docker "${dir}"
sed -e "s|@NAME@|${name}|g" \
-e "s|@VERSION@|${version}|g" \
-e "s|@ARCH@|${arch}|g" \
-e "s|@IMAGE@|${image}|g" \
-e "s|@PROJECTS@|${projects}|g" \
-i "${dir}/package.mk"
defaults="$(echo -en "${defaults}" | sort)"
echo -en "<settings>\n${defaults}\n</settings>" > "${dir}/source/settings-default.xml"
echo -en "${options}" >> "${dir}/source/bin/docker"
sed -e "s|@SETTINGS@|${settings}|g" \
-i "${dir}/source/resources/settings.xml"
echo -en "${strings}" >> "${dir}/source/resources/language/English/strings.po"
mv "${dir}/source/bin/docker" "${dir}/source/bin/docker.${name}"
mv "${dir}/source/system.d/docker.service" "${dir}/source/system.d/docker.${name}.service"