#!/bin/sh
-# Copyright (C) 2006-2013 OpenWrt.org
+# Copyright (C) 2006-2014 OpenWrt.org
# Copyright (C) 2006 Fokus Fraunhofer <carsten.tittel@fokus.fraunhofer.de>
# Copyright (C) 2010 Vertical Communications
export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1))
name="${name:-cfg$CONFIG_NUM_SECTIONS}"
append CONFIG_SECTIONS "$name"
- [ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name"
export ${NO_EXPORT:+-n} CONFIG_SECTION="$name"
- export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype"
+ config_set "$CONFIG_SECTION" "TYPE" "${cfgtype}"
+ [ -n "$NO_CALLBACK" ] || config_cb "$cfgtype" "$name"
}
option () {
local varname="$1"; shift
local value="$*"
- export ${NO_EXPORT:+-n} "CONFIG_${CONFIG_SECTION}_${varname}=$value"
+ config_set "$CONFIG_SECTION" "${varname}" "${value}"
[ -n "$NO_CALLBACK" ] || option_cb "$varname" "$*"
}
config_set "$CONFIG_SECTION" "${varname}_ITEM$len" "$value"
config_set "$CONFIG_SECTION" "${varname}_LENGTH" "$len"
append "CONFIG_${CONFIG_SECTION}_${varname}" "$value" "$LIST_SEP"
- list_cb "$varname" "$*"
+ [ -n "$NO_CALLBACK" ] || list_cb "$varname" "$*"
}
config_unset() {
local section="$1"
local option="$2"
local value="$3"
- local old_section="$CONFIG_SECTION"
- CONFIG_SECTION="$section"
- option "$option" "$value"
- CONFIG_SECTION="$old_section"
+ export ${NO_EXPORT:+-n} "CONFIG_${section}_${option}=${value}"
}
config_foreach() {
done
}
-insert_modules() {
- [ -d /etc/modules.d ] && {
- cd /etc/modules.d
- sed 's/^[^#]/insmod &/' $* | ash 2>&- || :
- }
+default_prerm() {
+ local root="${IPKG_INSTROOT}"
+ local pkgname="$(basename ${1%.*})"
+ local ret=0
+
+ if [ -f "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" ]; then
+ ( . "$root/usr/lib/opkg/info/${pkgname}.prerm-pkg" )
+ ret=$?
+ fi
+
+ local shell="$(which bash)"
+ for i in $(grep -s "^/etc/init.d/" "$root/usr/lib/opkg/info/${pkgname}.list"); do
+ if [ -n "$root" ]; then
+ ${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" disable
+ else
+ if [ "$PKG_UPGRADE" != "1" ]; then
+ "$i" disable
+ fi
+ "$i" stop
+ fi
+ done
+
+ return $ret
+}
+
+add_group_and_user() {
+ local pkgname="$1"
+ local rusers="$(sed -ne 's/^Require-User: *//p' $root/usr/lib/opkg/info/${pkgname}.control 2>/dev/null)"
+
+ if [ -n "$rusers" ]; then
+ local tuple oIFS="$IFS"
+ for tuple in $rusers; do
+ local uid gid uname gname
+
+ IFS=":"
+ set -- $tuple; uname="$1"; gname="$2"
+ IFS="="
+ set -- $uname; uname="$1"; uid="$2"
+ set -- $gname; gname="$1"; gid="$2"
+ IFS="$oIFS"
+
+ if [ -n "$gname" ] && [ -n "$gid" ]; then
+ group_exists "$gname" || group_add "$gname" "$gid"
+ elif [ -n "$gname" ]; then
+ gid="$(group_add_next "$gname")"
+ fi
+
+ if [ -n "$uname" ]; then
+ user_exists "$uname" || user_add "$uname" "$uid" "$gid"
+ fi
+
+ if [ -n "$uname" ] && [ -n "$gname" ]; then
+ group_add_user "$gname" "$uname"
+ fi
+
+ unset uid gid uname gname
+ done
+ fi
+}
+
+default_postinst() {
+ local root="${IPKG_INSTROOT}"
+ local pkgname="$(basename ${1%.*})"
+ local ret=0
+
+ add_group_and_user "${pkgname}"
+
+ if [ -f "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" ]; then
+ ( . "$root/usr/lib/opkg/info/${pkgname}.postinst-pkg" )
+ ret=$?
+ fi
+
+ if [ -d "$root/rootfs-overlay" ]; then
+ cp -R $root/rootfs-overlay/. $root/
+ rm -fR $root/rootfs-overlay/
+ fi
+
+ if [ -z "$root" ] && grep -q -s "^/etc/modules.d/" "/usr/lib/opkg/info/${pkgname}.list"; then
+ kmodloader
+ fi
+
+ if [ -z "$root" ] && grep -q -s "^/etc/uci-defaults/" "/usr/lib/opkg/info/${pkgname}.list"; then
+ . /lib/functions/system.sh
+ [ -d /tmp/.uci ] || mkdir -p /tmp/.uci
+ for i in $(grep -s "^/etc/uci-defaults/" "/usr/lib/opkg/info/${pkgname}.list"); do
+ ( [ -f "$i" ] && cd "$(dirname $i)" && . "$i" ) && rm -f "$i"
+ done
+ uci commit
+ fi
+
+ [ -n "$root" ] || rm -f /tmp/luci-indexcache 2>/dev/null
+
+ local shell="$(which bash)"
+ for i in $(grep -s "^/etc/init.d/" "$root/usr/lib/opkg/info/${pkgname}.list"); do
+ if [ -n "$root" ]; then
+ ${shell:-/bin/sh} "$root/etc/rc.common" "$root$i" enable
+ else
+ if [ "$PKG_UPGRADE" != "1" ]; then
+ "$i" enable
+ fi
+ "$i" start
+ fi
+ done
+
+ return $ret
}
include() {
[ -f "${IPKG_INSTROOT}/etc/group" ] || return 1
[ -n "$IPKG_INSTROOT" ] || lock /var/lock/group
echo "${name}:x:${gid}:" >> ${IPKG_INSTROOT}/etc/group
- rc=$?
[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/group
- return $rc
}
group_exists() {
grep -qs "^${1}:" ${IPKG_INSTROOT}/etc/group
}
+group_add_next() {
+ local gid gids
+ gid=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
+ if [ -n "$gid" ]; then
+ echo $gid
+ return
+ fi
+ gids=$(cat ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
+ gid=65536
+ while [ -n "$(echo "$gids" | grep "^$gid$")" ] ; do
+ gid=$((gid + 1))
+ done
+ group_add $1 $gid
+ echo $gid
+}
+
+group_add_user() {
+ local grp delim=","
+ grp=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group)
+ [ -z "$(echo $grp | cut -d: -f4 | grep $2)" ] || return
+ [ -n "$(echo $grp | grep ":$")" ] && delim=""
+ [ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
+ sed -i "s/$grp/$grp$delim$2/g" ${IPKG_INSTROOT}/etc/group
+ [ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd
+}
+
user_add() {
local name="${1}"
local uid="${2}"
- local gid="${3:-$2}"
+ local gid="${3}"
local desc="${4:-$1}"
local home="${5:-/var/run/$1}"
local shell="${6:-/bin/false}"
local rc
+ [ -z "$uid" ] && {
+ uids=$(cat ${IPKG_INSTROOT}/etc/passwd | cut -d: -f3)
+ uid=65536
+ while [ -n "$(echo "$uids" | grep "^$uid$")" ] ; do
+ uid=$((uid + 1))
+ done
+ }
+ [ -z "$gid" ] && gid=$uid
[ -f "${IPKG_INSTROOT}/etc/passwd" ] || return 1
[ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
echo "${name}:x:${uid}:${gid}:${desc}:${home}:${shell}" >> ${IPKG_INSTROOT}/etc/passwd
echo "${name}:x:0:0:99999:7:::" >> ${IPKG_INSTROOT}/etc/shadow
- rc=$?
[ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd
- return $rc
}
user_exists() {
grep -qs "^${1}:" ${IPKG_INSTROOT}/etc/passwd
}
+board_name() {
+ [ -e /tmp/sysinfo/board_name ] && cat /tmp/sysinfo/board_name || echo "generic"
+}
+
[ -z "$IPKG_INSTROOT" -a -f /lib/config/uci.sh ] && . /lib/config/uci.sh