Newer
Older
# Turris medkit generator script
# (C) 2018 CZ.NIC, z.s.p.o.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
export BOARD=
export BRANCH=
export L10N=en,cs
# TODO fill in default lists when we have them selected
export LISTS=
export UPDATER_SCRIPT=
export OVERLAY=
## Parse arguments ##
while [ $# -gt 0 ]; do
case "$1" in
-h|--help)
echo "This script generates Turris medkit using updater-ng."
echo "Usage: $0 [OPTION].. [OUTPUT]"
echo
echo "Generated medkit is written to file at path OUTPUT. If no OUTPUT"
echo "is specified then the default format for used board is used."
echo "Warning: This script generates a lot of stuff to current working"
echo "directory. It is suggested to use some empty one not your home."
echo "Options:"
echo " --target, -t BOARD"
echo " Set given board as target for generated medkit. In default"
echo " if this options is not specified omnia is used. Allowed"
echo " values are: turris, omnia, mox"
echo " --branch, -b BRANCH"
echo " Set given branch as source for packages used to generate "
echo " this medkit. If this option is not set then 'hbd' is used."
echo " Note that this does not sets that branch to updater-ng"
echo " configuration. You have to do that on your own."
# TODO maybe add version specification for future out of build use.
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 " --updater-script FILE"
echo " Run file as updater's script. It is executed after primary"
echo " entry script of this tool."
echo " --overlay PATH"
echo " This allows you to overwrite or add some files to medkit."
echo " PATH is expected to be directory and whole content is copied"
echo " to newly generated root. This is handy if you want to change"
echo " some default settings for example."
echo " --help, -h"
echo " Print this text and exit."
exit 0
;;
--target|-t)
shift
BOARD="$1"
;;
--branch|-b)
shift
BRANCH="$1"
;;
--localization|-l)
shift
L10N="$1"
;;
--lists|-p)
shift
LISTS="$1"
;;
--updater-script)
shift
UPDATER_SCRIPT="$1"
;;
--overlay)
shift
OVERLAY="$1"
;;
*)
if [ -z "$OUTPUT" ]; then
OUTPUT="$1"
else
echo "Unknown option: $1" >&2
exit 1
fi
;;
esac
shift
done
[ -n "$BOARD" ] || {
echo "You have to specify target Turris router." >&2
exit 1
}
[ -n "$BRANCH" ] || {
echo "You have to specify target branch." >&2
exit 1
}
[ -n "$OUTPUT" ] || {
case "$1" in
mox)
OUTPUT=medkit-mox.tar.gz
;;
omnia)
OUTPUT=medkit-omnia.tar.gz
;;
turris)
OUTPUT=medkit-turris.tar.gz
;;
esac
}
. "$(dirname "$(readlink -f "$0")")/helpers/generate_common.sh"
updater_ng_repodetect "$BRANCH" "$BOARD"
get_usign
get_updater_ng
get_turris_keys
## Generate root ##
exec fakeroot -- sh -esx <<EOF
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
## Run updater it self
"$PKGUPDATE" \
--model="$BOARD" \
--board=rtunknown \
--out-of-root \
-R root \
--usign="$USIGN" \
--batch "file://$(dirname "$(readlink -f "$0")")/helpers/medkit-updater-ng.lua" || true
## Generate /etc/config/updater
m4 \
-D_BRANCH_=$BRANCH \
-D_LISTS_=$LISTS \
-D_LANGS_=$L10N \
$(dirname "$(readlink -f "$0")")/helpers/medkit-updater-ng-config.m4 > root/etc/config/updater
## Overlay user's files
if [ -n "$OVERLAY" ]; then
cp -a "$OVERLAY/." root/
fi
## Root cleanups
rm -f root/var/lock/opkg.lock
rm -f root/usr/share/updater/flags
rm -rf root/usr/share/updater/unpacked
rm -rf root/var/opkg-collided
## Tar root
(
cd root
# Create archive
tar -czf "$(readlink -f "$OUTPUT")" .
)
## Cleanup
rm -rf root
EOF