ipkg: add a default postinst/prerm script
the postinst script enables/starts the init.d scripts upon package installation and installs the users required by the package. the prerm script stops and disables the init.d scripts. Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 42470
This commit is contained in:
@@ -160,6 +160,50 @@ insert_modules() {
|
||||
}
|
||||
}
|
||||
|
||||
default_prerm() {
|
||||
local name
|
||||
name=$(echo $(basename $1) | cut -d. -f1)
|
||||
[ -f /usr/lib/opkg/info/${name}.prerm-pkg ] && . /usr/lib/opkg/info/${name}.prerm-pkg
|
||||
for i in `cat /usr/lib/opkg/info/${name}.list | grep "^/etc/init.d/"`; do
|
||||
$i disable
|
||||
$i stop
|
||||
done
|
||||
}
|
||||
|
||||
default_postinst() {
|
||||
local name rusers
|
||||
name=$(echo $(basename $1) | cut -d. -f1)
|
||||
[ -f ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.postinst-pkg ] && . ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.postinst-pkg
|
||||
rusers=$(grep "Require-User:" ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.control)
|
||||
[ -n "$rusers" ] && {
|
||||
local user group
|
||||
for a in $(echo $rusers | sed "s/Require-User://g"); do
|
||||
user=""
|
||||
group=""
|
||||
for b in $(echo $a | sed "s/:/ /g"); do
|
||||
[ -z "$user" ] && {
|
||||
user=$b
|
||||
continue
|
||||
}
|
||||
[ -z "$group" ] && {
|
||||
group=$b
|
||||
group_add_next $b
|
||||
gid=$?
|
||||
user_exists $user || user_add $user "" $gid
|
||||
continue
|
||||
}
|
||||
group_add_next $b
|
||||
group_add_user $b $user
|
||||
done
|
||||
done
|
||||
}
|
||||
[ -n "${IPKG_INSTROOT}" -o "$PKG_UPGRADE" = "1" ] || for i in `cat /usr/lib/opkg/info/${name}.list | grep "^/etc/init.d/"`; do
|
||||
$i enable
|
||||
$i start
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
include() {
|
||||
local file
|
||||
|
||||
@@ -199,14 +243,45 @@ 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)
|
||||
[ -n "$gid" ] && return $gid
|
||||
gids=$(cat ${IPKG_INSTROOT}/etc/group | cut -d: -f3)
|
||||
gid=100
|
||||
while [ -n "$(echo $gids | grep $gid)" ] ; do
|
||||
gid=$((gid + 1))
|
||||
done
|
||||
group_add $1 $gid
|
||||
return $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=100
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user