OpenWrt – Blame information for rev 3
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | #!/bin/sh |
2 | # Copyright (C) 2006-2014 OpenWrt.org |
||
3 | # Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de> |
||
4 | # Copyright (C) 2010 Vertical Communications |
||
5 | |||
6 | |||
7 | debug () { |
||
8 | ${DEBUG:-:} "$@" |
||
9 | } |
||
10 | |||
11 | # newline |
||
12 | N=" |
||
13 | " |
||
14 | |||
15 | _C=0 |
||
16 | NO_EXPORT=1 |
||
17 | LOAD_STATE=1 |
||
18 | LIST_SEP=" " |
||
19 | |||
20 | append() { |
||
21 | local var="$1" |
||
22 | local value="$2" |
||
23 | local sep="${3:- }" |
||
24 | |||
25 | eval "export ${NO_EXPORT:+-n} -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\"" |
||
26 | } |
||
27 | |||
28 | list_contains() { |
||
29 | local var="$1" |
||
30 | local str="$2" |
||
31 | local val |
||
32 | |||
33 | eval "val=\" \${$var} \"" |
||
34 | [ "${val%% $str *}" != "$val" ] |
||
35 | } |
||
36 | |||
37 | config_load() { |
||
38 | [ -n "$IPKG_INSTROOT" ] && return 0 |
||
39 | uci_load "$@" |
||
40 | } |
||
41 | |||
42 | reset_cb() { |
||
43 | config_cb() { return 0; } |
||
44 | option_cb() { return 0; } |
||
45 | list_cb() { return 0; } |
||
46 | } |
||
47 | reset_cb |
||
48 | |||
49 | package() { |
||
50 | return 0 |
||
51 | } |
||
52 | |||
53 | config () { |
||
54 | local cfgtype="$1" |
||
55 | local name="$2" |
||
56 | |||
57 | export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1)) |
||
58 | name="${name:-cfg$CONFIG_NUM_SECTIONS}" |
||
59 | append CONFIG_SECTIONS "$name" |
||
60 | export ${NO_EXPORT:+-n} CONFIG_SECTION="$name" |
||
61 | config_set "$CONFIG_SECTION" "TYPE" "${cfgtype}" |
||
62 | [ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name" |
||
63 | } |
||
64 | |||
65 | option () { |
||
66 | local varname="$1"; shift |
||
67 | local value="$*" |
||
68 | |||
69 | config_set "$CONFIG_SECTION" "${varname}" "${value}" |
||
70 | [ -n "$NO_CALLBACK" ] || option_cb "$varname" "$*" |
||
71 | } |
||
72 | |||
73 | list() { |
||
74 | local varname="$1"; shift |
||
75 | local value="$*" |
||
76 | local len |
||
77 | |||
78 | config_get len "$CONFIG_SECTION" "${varname}_LENGTH" 0 |
||
79 | [ $len = 0 ] && append CONFIG_LIST_STATE "${CONFIG_SECTION}_${varname}" |
||
80 | len=$(($len + 1)) |
||
81 | config_set "$CONFIG_SECTION" "${varname}_ITEM$len" "$value" |
||
82 | config_set "$CONFIG_SECTION" "${varname}_LENGTH" "$len" |
||
83 | append "CONFIG_${CONFIG_SECTION}_${varname}" "$value" "$LIST_SEP" |
||
84 | [ -n "$NO_CALLBACK" ] || list_cb "$varname" "$*" |
||
85 | } |
||
86 | |||
87 | config_unset() { |
||
88 | config_set "$1" "$2" "" |
||
89 | } |
||
90 | |||
91 | # config_get <variable> <section> <option> [<default>] |
||
92 | # config_get <section> <option> |
||
93 | config_get() { |
||
94 | case "$3" in |
||
3 | office | 95 | "") eval echo "\${CONFIG_${1}_${2}:-\${4}}";; |
1 | office | 96 | *) eval export ${NO_EXPORT:+-n} -- "${1}=\${CONFIG_${2}_${3}:-\${4}}";; |
97 | esac |
||
98 | } |
||
99 | |||
100 | # config_get_bool <variable> <section> <option> [<default>] |
||
101 | config_get_bool() { |
||
102 | local _tmp |
||
103 | config_get _tmp "$2" "$3" "$4" |
||
104 | case "$_tmp" in |
||
105 | 1|on|true|yes|enabled) _tmp=1;; |
||
106 | 0|off|false|no|disabled) _tmp=0;; |
||
107 | *) _tmp="$4";; |
||
108 | esac |
||
109 | export ${NO_EXPORT:+-n} "$1=$_tmp" |
||
110 | } |
||
111 | |||
112 | config_set() { |
||
113 | local section="$1" |
||
114 | local option="$2" |
||
115 | local value="$3" |
||
116 | |||
117 | export ${NO_EXPORT:+-n} "CONFIG_${section}_${option}=${value}" |
||
118 | } |
||
119 | |||
120 | config_foreach() { |
||
121 | local ___function="$1" |
||
122 | [ "$#" -ge 1 ] && shift |
||
123 | local ___type="$1" |
||
124 | [ "$#" -ge 1 ] && shift |
||
125 | local section cfgtype |
||
126 | |||
127 | [ -z "$CONFIG_SECTIONS" ] && return 0 |
||
128 | for section in ${CONFIG_SECTIONS}; do |
||
129 | config_get cfgtype "$section" TYPE |
||
130 | [ -n "$___type" -a "x$cfgtype" != "x$___type" ] && continue |
||
131 | eval "$___function \"\$section\" \"\$@\"" |
||
132 | done |
||
133 | } |
||
134 | |||
135 | config_list_foreach() { |
||
136 | [ "$#" -ge 3 ] || return 0 |
||
137 | local section="$1"; shift |
||
138 | local option="$1"; shift |
||
139 | local function="$1"; shift |
||
140 | local val |
||
141 | local len |
||
142 | local c=1 |
||
143 | |||
144 | config_get len "${section}" "${option}_LENGTH" |
||
145 | [ -z "$len" ] && return 0 |
||
146 | while [ $c -le "$len" ]; do |
||
147 | config_get val "${section}" "${option}_ITEM$c" |
||
148 | eval "$function \"\$val\" \"\$@\"" |
||
149 | c="$(($c + 1))" |
||
150 | done |
||
151 | } |
||
152 | |||
153 | default_prerm() { |
||
154 | local root="${IPKG_INSTROOT}" |
||
3 | office | 155 | local name |
1 | office | 156 | |
3 | office | 157 | name=$(basename ${1%.*}) |
158 | [ -f "$root/usr/lib/opkg/info/${name}.prerm-pkg" ] && . "$root/usr/lib/opkg/info/${name}.prerm-pkg" |
||
1 | office | 159 | |
160 | local shell="$(which bash)" |
||
3 | office | 161 | for i in `cat "$root/usr/lib/opkg/info/${name}.list" | grep "^/etc/init.d/"`; do |
1 | office | 162 | if [ -n "$root" ]; then |
163 | ${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" disable |
||
164 | else |
||
165 | if [ "$PKG_UPGRADE" != "1" ]; then |
||
166 | "$i" disable |
||
167 | fi |
||
3 | office | 168 | "$i" stop || /bin/true |
1 | office | 169 | fi |
170 | done |
||
171 | } |
||
172 | |||
173 | add_group_and_user() { |
||
174 | local pkgname="$1" |
||
175 | local rusers="$(sed -ne 's/^Require-User: *//p' $root/usr/lib/opkg/info/${pkgname}.control 2>/dev/null)" |
||
176 | |||
177 | if [ -n "$rusers" ]; then |
||
178 | local tuple oIFS="$IFS" |
||
179 | for tuple in $rusers; do |
||
180 | local uid gid uname gname |
||
181 | |||
182 | IFS=":" |
||
183 | set -- $tuple; uname="$1"; gname="$2" |
||
184 | IFS="=" |
||
185 | set -- $uname; uname="$1"; uid="$2" |
||
186 | set -- $gname; gname="$1"; gid="$2" |
||
187 | IFS="$oIFS" |
||
188 | |||
189 | if [ -n "$gname" ] && [ -n "$gid" ]; then |
||
190 | group_exists "$gname" || group_add "$gname" "$gid" |
||
191 | elif [ -n "$gname" ]; then |
||
192 | gid="$(group_add_next "$gname")" |
||
193 | fi |
||
194 | |||
195 | if [ -n "$uname" ]; then |
||
196 | user_exists "$uname" || user_add "$uname" "$uid" "$gid" |
||
197 | fi |
||
198 | |||
199 | if [ -n "$uname" ] && [ -n "$gname" ]; then |
||
200 | group_add_user "$gname" "$uname" |
||
201 | fi |
||
202 | |||
203 | unset uid gid uname gname |
||
204 | done |
||
205 | fi |
||
206 | } |
||
207 | |||
208 | default_postinst() { |
||
209 | local root="${IPKG_INSTROOT}" |
||
210 | local pkgname="$(basename ${1%.*})" |
||
211 | local ret=0 |
||
212 | |||
213 | add_group_and_user "${pkgname}" |
||
214 | |||
215 | if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then |
||
216 | ( . "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ) |
||
217 | ret=$? |
||
218 | fi |
||
219 | |||
220 | if [ -d "$root/rootfs-overlay" ]; then |
||
221 | cp -R $root/rootfs-overlay/. $root/ |
||
222 | rm -fR $root/rootfs-overlay/ |
||
223 | fi |
||
224 | |||
225 | if [ -z "$root" ] && grep -q -s "^/etc/modules.d/" "/usr/lib/opkg/info/${pkgname}.list"; then |
||
226 | kmodloader |
||
227 | fi |
||
228 | |||
229 | if [ -z "$root" ] && grep -q -s "^/etc/uci-defaults/" "/usr/lib/opkg/info/${pkgname}.list"; then |
||
230 | . /lib/functions/system.sh |
||
231 | [ -d /tmp/.uci ] || mkdir -p /tmp/.uci |
||
3 | office | 232 | for i in $(sed -ne 's!^/etc/uci-defaults/!!p' "/usr/lib/opkg/info/${pkgname}.list"); do ( |
233 | cd /etc/uci-defaults |
||
234 | [ -f "$i" ] && . ./"$i" && rm -f "$i" |
||
235 | ) done |
||
1 | office | 236 | uci commit |
237 | fi |
||
238 | |||
239 | [ -n "$root" ] || rm -f /tmp/luci-indexcache 2>/dev/null |
||
240 | |||
241 | local shell="$(which bash)" |
||
242 | for i in $(grep -s "^/etc/init.d/" "$root/usr/lib/opkg/info/${pkgname}.list"); do |
||
243 | if [ -n "$root" ]; then |
||
244 | ${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" enable |
||
245 | else |
||
246 | if [ "$PKG_UPGRADE" != "1" ]; then |
||
247 | "$i" enable |
||
248 | fi |
||
249 | "$i" start |
||
250 | fi |
||
251 | done |
||
252 | |||
253 | return $ret |
||
254 | } |
||
255 | |||
256 | include() { |
||
257 | local file |
||
258 | |||
259 | for file in $(ls $1/*.sh 2>/dev/null); do |
||
260 | . $file |
||
261 | done |
||
262 | } |
||
263 | |||
264 | find_mtd_index() { |
||
265 | local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')" |
||
266 | local INDEX="${PART##mtd}" |
||
267 | |||
268 | echo ${INDEX} |
||
269 | } |
||
270 | |||
271 | find_mtd_part() { |
||
272 | local INDEX=$(find_mtd_index "$1") |
||
273 | local PREFIX=/dev/mtdblock |
||
274 | |||
275 | [ -d /dev/mtdblock ] && PREFIX=/dev/mtdblock/ |
||
276 | echo "${INDEX:+$PREFIX$INDEX}" |
||
277 | } |
||
278 | |||
279 | group_add() { |
||
280 | local name="$1" |
||
281 | local gid="$2" |
||
282 | local rc |
||
283 | [ -f "${IPKG_INSTROOT}/etc/group" ] || return 1 |
||
284 | [ -n "$IPKG_INSTROOT" ] || lock /var/lock/group |
||
285 | echo "${name}:x:${gid}:" >> ${IPKG_INSTROOT}/etc/group |
||
286 | [ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/group |
||
287 | } |
||
288 | |||
289 | group_exists() { |
||
290 | grep -qs "^${1}:" ${IPKG_INSTROOT}/etc/group |
||
291 | } |
||
292 | |||
293 | group_add_next() { |
||
294 | local gid gids |
||
295 | gid=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group | cut -d: -f3) |
||
296 | if [ -n "$gid" ]; then |
||
297 | echo $gid |
||
298 | return |
||
299 | fi |
||
300 | gids=$(cat ${IPKG_INSTROOT}/etc/group | cut -d: -f3) |
||
301 | gid=65536 |
||
302 | while [ -n "$(echo "$gids" | grep "^$gid$")" ] ; do |
||
303 | gid=$((gid + 1)) |
||
304 | done |
||
305 | group_add $1 $gid |
||
306 | echo $gid |
||
307 | } |
||
308 | |||
309 | group_add_user() { |
||
310 | local grp delim="," |
||
311 | grp=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group) |
||
312 | [ -z "$(echo $grp | cut -d: -f4 | grep $2)" ] || return |
||
313 | [ -n "$(echo $grp | grep ":$")" ] && delim="" |
||
314 | [ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd |
||
315 | sed -i "s/$grp/$grp$delim$2/g" ${IPKG_INSTROOT}/etc/group |
||
316 | [ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd |
||
317 | } |
||
318 | |||
319 | user_add() { |
||
320 | local name="${1}" |
||
321 | local uid="${2}" |
||
322 | local gid="${3}" |
||
323 | local desc="${4:-$1}" |
||
324 | local home="${5:-/var/run/$1}" |
||
325 | local shell="${6:-/bin/false}" |
||
326 | local rc |
||
327 | [ -z "$uid" ] && { |
||
328 | uids=$(cat ${IPKG_INSTROOT}/etc/passwd | cut -d: -f3) |
||
329 | uid=65536 |
||
330 | while [ -n "$(echo "$uids" | grep "^$uid$")" ] ; do |
||
331 | uid=$((uid + 1)) |
||
332 | done |
||
333 | } |
||
334 | [ -z "$gid" ] && gid=$uid |
||
335 | [ -f "${IPKG_INSTROOT}/etc/passwd" ] || return 1 |
||
336 | [ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd |
||
337 | echo "${name}:x:${uid}:${gid}:${desc}:${home}:${shell}" >> ${IPKG_INSTROOT}/etc/passwd |
||
338 | echo "${name}:x:0:0:99999:7:::" >> ${IPKG_INSTROOT}/etc/shadow |
||
339 | [ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd |
||
340 | } |
||
341 | |||
342 | user_exists() { |
||
343 | grep -qs "^${1}:" ${IPKG_INSTROOT}/etc/passwd |
||
344 | } |
||
345 | |||
346 | board_name() { |
||
347 | [ -e /tmp/sysinfo/board_name ] && cat /tmp/sysinfo/board_name || echo "generic" |
||
348 | } |
||
349 | |||
350 | [ -z "$IPKG_INSTROOT" -a -f /lib/config/uci.sh ] && . /lib/config/uci.sh |