184 lines
4.1 KiB
Bash
Executable file
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"
|