summaryrefslogtreecommitdiff
path: root/build_medkit.sh
diff options
context:
space:
mode:
authorKarel Kočí <karel.koci@nic.cz>2018-02-28 15:23:38 +0100
committerKarel Kočí <karel.koci@nic.cz>2018-02-28 15:23:38 +0100
commit873eb4964f643a70d941cef751213df84a476a6d (patch)
treec5f1aba4a25d8bc0de164a637abfea92a6f63429 /build_medkit.sh
parent235deeaf9430cffcfae009796334b6562589002a (diff)
downloadturris-mymedkit-873eb4964f643a70d941cef751213df84a476a6d.tar.gz
turris-mymedkit-873eb4964f643a70d941cef751213df84a476a6d.tar.bz2
turris-mymedkit-873eb4964f643a70d941cef751213df84a476a6d.zip
Single script it
Now it's just single script with arguments and more.
Diffstat (limited to 'build_medkit.sh')
-rwxr-xr-xbuild_medkit.sh218
1 files changed, 192 insertions, 26 deletions
diff --git a/build_medkit.sh b/build_medkit.sh
index c5c9951..acef1c4 100755
--- a/build_medkit.sh
+++ b/build_medkit.sh
@@ -1,54 +1,220 @@
#!/bin/sh
+# TODO add support for additional files
set -e
-cd `dirname $0`
-
+## Define variables with their default values ##
BRANCH=
-MODEL=omnia
+MODEL=
+L10N=en,cs
+LISTS=
+VERSION=
+
+## Parse arguments ##
while [ $# -gt 0 ]; do
case "$1" in
-h|--help)
- echo "This script generates Turris medkit using user lists and updater-ng."
- echo "Usage: $0 [OPTION]..."
+ echo "This script generates Turris medkit using packages lists and updater-ng."
+ echo "Usage: $0 [OPTION].. MODEL [BRANCH]"
echo
+ echo "Model:"
+ echo " Model is Turris device model. Only supported ones at the moment"
+ echo " are 'turris' for Turris 1.x and 'omnia' for Turris Omnia."
+ echo "Branch:"
+ echo " This optionally specifies source branch for packages."
+ echo " If no branch is specified then deploy is used (branch"
+ echo " identified only just by model, no branch name appended)."
echo "Options:"
echo " --help, -h"
+ echo " Print this text and exit."
+ echo " --localization, -l LOCALIZATION,.."
+ echo " After this argument a list of language codes to be added to"
+ echo " medkit should be specified. Language codes should be"
+ echo " separated by comma. In default en,cs is used."
+ echo " --lists, -p PKGLIST,.."
+ echo " What lists should be added to medkit. In default no"
+ echo " additional lists will be added. Multiple lists can be"
+ echo " specified by separating them by commas."
echo " --version VERSION"
- echo " --branch BRANCH"
- echo " --model MODEL"
+ echo " This option allows you to specify exact Turris OS version."
+ echo " If you do so then archive will be used for generating medkit"
+ echo " (this means that using latest version won't work with this"
+ echo " option)."
exit 0
;;
- --version)
+ --localization|-l)
shift
- VERSION="$1"
+ L10N="$1"
;;
- --branch)
+ --lists|-p)
shift
- BRANCH="$1"
+ LISTS="$1"
;;
- --model)
+ --version)
shift
- MODEL="$1"
+ VERSION="$1"
+ echo "Version option is not yet implemented."
+ exit 1
;;
*)
- echo "Unknown option: $1" >&2
- exit 1
+ if [ -z "$MODEL" ]; then
+ MODEL="$1"
+ elif [ -z "$BRANCH" ]; then
+ if [ "$1" == "deploy" ]; then
+ BRANCH=
+ else
+ BRANCH="-$1"
+ fi
+ else
+ echo "Unknown option: $1" >&2
+ exit 1
+ fi
;;
esac
shift
done
-# Get latest version if we didn't stated version explicitly
-if [ -z "$VERSION" ]; then
- [ -n "$BRANCH" ] && VBRANCH="-$BRANCH"
- VERSION="$(curl https://repo.turris.cz/"$MODEL$VBRANCH"/packages/base/Packages | sed -n 's/^Filename: turris-version_\([^_]*\)_.*/\1/p')"
+[ -n "$MODEL" ] || {
+ echo "You have to specify Turris router model." >&2
+ exit 1
+}
+
+
+## Build needed tools ##
+# Git puller helper function (git_pull output_path source_url)
+git_pull() {
+ if [ ! -d $1 ]; then
+ git clone $2 $1
+ (
+ cd $1
+ git submodule update --init --recursive
+ )
+ else
+ (
+ cd $1
+ git fetch
+ if ! git diff --quiet HEAD origin/HEAD; then
+ git clean -Xdf
+ git reset --hard origin/master
+ git submodule update --init --recursive
+ fi
+ )
+ fi
+}
+# Wget puller helper function (wget_pull output_file source_url)
+wget_pull() {
+ if [ ! -e $1 ] || [ $(expr $(date -u +%s) - $(stat -c %Z $1)) -gt 86400 ]; then
+ wget $2 -O $1
+ fi
+}
+
+# Usign
+git_pull .usign git://git.openwrt.org/project/usign.git
+(
+cd .usign
+cmake .
+make
+)
+
+# Updater-ng
+git_pull .updater https://gitlab.labs.nic.cz/turris/updater.git
+make -C .updater NO_DOC=1 LUA_COMPILE:=no
+
+# Get public parts of signing keys
+for K in release standby test; do
+ wget_pull .$K.pub https://gitlab.labs.nic.cz/turris/turris-os-packages/raw/test/cznic/cznic-repo-keys/files/$K.pub
+done
+
+## Export some variables that are used by pkgupdate lua script
+export L10N
+export LISTS
+export ROOT="$(readlink -f "root-$MODEL$BRANCH")"
+
+
+## Dump updater-ng entry script ##
+export UPDATER_CONFIG=".updater-$MODEL$BRANCH.lua"
+cat > "$UPDATER_CONFIG" <<EOF
+-- Load requested localizations
+l10n = {}
+for lang in os.getenv('L10N'):gmatch('[^,]+') do
+ table.insert(l10n, lang)
+end
+Export('l10n')
+
+-- This is helper function for including localization packages.
+-- (This is copy of standard entry function that can be found in pkgupdate entry.lua)
+function for_l10n(fragment)
+ for _, lang in pairs(l10n or {}) do
+ Install(fragment .. lang, {ignore = {'missing'}})
+ end
+end
+Export('for_l10n')
+
+local script_options = {
+ security = 'Remote',
+ ca = system_cas,
+ crl = no_crl,
+ pubkey = {
+ 'file://$PWD/.release.pub',
+ 'file://$PWD/.standby.pub',
+ 'file://$PWD/.test.pub'
+ }
+}
+base_url = 'https://repo.turris.cz/$MODEL$BRANCH/lists/'
+
+-- Aways include base script
+Script('base', base_url .. 'base.lua', script_options)
+
+-- Now include any additional lists
+local userlists_file = io.open('userlists', 'r')
+for list in os.getenv('LISTS'):gmatch('[^,]+') do
+ Script('userlist-' .. list, base_url .. list, script_options)
+end
+EOF
+
+# Create /tmp/sysinfo files
+# TODO we should use some internal option of updater it self
+mkdir -p /tmp/sysinfo
+if [ "$MODEL" = "omnia" ]; then
+ echo "Turris Omnia" > /tmp/sysinfo/model
+else # Else Turris 1.x (yes this is wrong but it's just temporally)
+ echo "Turris" > /tmp/sysinfo/model
fi
+# We are only using board_name anyway atm.
+echo "rtunknown" > /tmp/sysinfo/board_name
+
+
+
+## Generate root ##
+fakeroot -- sh -s <<EOF
+set -e
+
+mkdir -p "$ROOT"
+## Create base filesystem for updater
+ln -sf tmp "$ROOT/var"
+# Create lock required by updater
+mkdir -p "$ROOT/tmp/lock"
+# Create opkg status file and info file
+mkdir -p "$ROOT/usr/lib/opkg/info"
+touch "$ROOT/usr/lib/opkg/status"
+# And updater directory
+mkdir -p "$ROOT/usr/share/updater"
-# Ensure that we have tools
-./scripts/build_tools.sh
+## Run updater it self
+.updater/bin/pkgupdate --out-of-root --usign=.usign/usign -R "$ROOT" \
+ --batch "file://$UPDATER_CONFIG"
-# Download api crl
-chmod +x .get-api-crl
-./.get-api-crl
+## Tar root in current directory
+(
+cd "$ROOT"
+# Do cleanups first
+rm -f var/lock/opkg.lock
+rm -f usr/share/updater/flags
+rm -rf usr/share/updater/unpacked
+rm -rf var/opkg-collided
+# Now create archive
+tar -czf "../medkit-$MODEL$BRANCH.tar.gz" .
+)
+EOF
-# Now build medkit
-fakeroot ./scripts/updater-medkit.sh --version "$VERSION" --branch "$BRANCH" --model "$MODEL"
+## Cleanup ##
+rm -rf "$ROOT"
+rm -f "$UPDATER_CONF"