Files
LibreELEC.tv/scripts/create_docker_package
2016-10-22 14:45:40 +02:00

185 lines
3.9 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"