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:
parent
285012d897
commit
d6dbc22bbc
3 changed files with 92 additions and 5 deletions
|
@ -16,7 +16,7 @@ IPKG_STATE_DIR:=$(TARGET_DIR)/usr/lib/opkg
|
||||||
define BuildIPKGVariable
|
define BuildIPKGVariable
|
||||||
ifdef Package/$(1)/$(2)
|
ifdef Package/$(1)/$(2)
|
||||||
$(call shexport,Package/$(1)/$(2))
|
$(call shexport,Package/$(1)/$(2))
|
||||||
$(1)_COMMANDS += var2file "$(call shvar,Package/$(1)/$(2))" $(2);
|
$(1)_COMMANDS += var2file "$(call shvar,Package/$(1)/$(2))" $(2)$(3);
|
||||||
endif
|
endif
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
@ -117,8 +117,8 @@ ifeq ($(DUMP),)
|
||||||
|
|
||||||
$(eval $(call BuildIPKGVariable,$(1),conffiles))
|
$(eval $(call BuildIPKGVariable,$(1),conffiles))
|
||||||
$(eval $(call BuildIPKGVariable,$(1),preinst))
|
$(eval $(call BuildIPKGVariable,$(1),preinst))
|
||||||
$(eval $(call BuildIPKGVariable,$(1),postinst))
|
$(eval $(call BuildIPKGVariable,$(1),postinst,-pkg))
|
||||||
$(eval $(call BuildIPKGVariable,$(1),prerm))
|
$(eval $(call BuildIPKGVariable,$(1),prerm,-pkg))
|
||||||
$(eval $(call BuildIPKGVariable,$(1),postrm))
|
$(eval $(call BuildIPKGVariable,$(1),postrm))
|
||||||
|
|
||||||
$(STAGING_DIR_ROOT)/stamp/.$(1)_installed: $(STAMP_BUILT)
|
$(STAGING_DIR_ROOT)/stamp/.$(1)_installed: $(STAMP_BUILT)
|
||||||
|
@ -174,6 +174,17 @@ ifeq ($(DUMP),)
|
||||||
echo -n "Description: "; $(SH_FUNC) getvar $(call shvar,Package/$(1)/description) | sed -e 's,^[[:space:]]*, ,g'; \
|
echo -n "Description: "; $(SH_FUNC) getvar $(call shvar,Package/$(1)/description) | sed -e 's,^[[:space:]]*, ,g'; \
|
||||||
) > $$(IDIR_$(1))/CONTROL/control
|
) > $$(IDIR_$(1))/CONTROL/control
|
||||||
chmod 644 $$(IDIR_$(1))/CONTROL/control
|
chmod 644 $$(IDIR_$(1))/CONTROL/control
|
||||||
|
( \
|
||||||
|
echo "#!/bin/sh"; \
|
||||||
|
echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \
|
||||||
|
echo "default_postinst \$$$$0 \$$$$@"; \
|
||||||
|
) > $$(IDIR_$(1))/CONTROL/postinst
|
||||||
|
( \
|
||||||
|
echo "#!/bin/sh"; \
|
||||||
|
echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \
|
||||||
|
echo "default_prerm \$$$$0 \$$$$@"; \
|
||||||
|
) > $$(IDIR_$(1))/CONTROL/prerm
|
||||||
|
chmod 0755 $$(IDIR_$(1))/CONTROL/prerm
|
||||||
$(SH_FUNC) (cd $$(IDIR_$(1))/CONTROL; \
|
$(SH_FUNC) (cd $$(IDIR_$(1))/CONTROL; \
|
||||||
$($(1)_COMMANDS) \
|
$($(1)_COMMANDS) \
|
||||||
)
|
)
|
||||||
|
|
|
@ -116,7 +116,8 @@ $(curdir)/install: $(TMP_DIR)/.build
|
||||||
@-find $(TARGET_DIR) -name CVS | $(XARGS) rm -rf
|
@-find $(TARGET_DIR) -name CVS | $(XARGS) rm -rf
|
||||||
@-find $(TARGET_DIR) -name .svn | $(XARGS) rm -rf
|
@-find $(TARGET_DIR) -name .svn | $(XARGS) rm -rf
|
||||||
@-find $(TARGET_DIR) -name '.#*' | $(XARGS) rm -f
|
@-find $(TARGET_DIR) -name '.#*' | $(XARGS) rm -f
|
||||||
rm -f $(TARGET_DIR)/usr/lib/opkg/info/*.postinst
|
rm -f $(TARGET_DIR)/usr/lib/opkg/info/*.postinst*
|
||||||
|
rm -f $(TARGET_DIR)/usr/lib/opkg/info/*.prerm*
|
||||||
$(if $(CONFIG_CLEAN_IPKG),rm -rf $(TARGET_DIR)/usr/lib/opkg)
|
$(if $(CONFIG_CLEAN_IPKG),rm -rf $(TARGET_DIR)/usr/lib/opkg)
|
||||||
$(call mklibs)
|
$(call mklibs)
|
||||||
|
|
||||||
|
|
|
@ -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() {
|
include() {
|
||||||
local file
|
local file
|
||||||
|
|
||||||
|
@ -199,14 +243,45 @@ group_exists() {
|
||||||
grep -qs "^${1}:" ${IPKG_INSTROOT}/etc/group
|
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() {
|
user_add() {
|
||||||
local name="${1}"
|
local name="${1}"
|
||||||
local uid="${2}"
|
local uid="${2}"
|
||||||
local gid="${3:-$2}"
|
local gid="${3}"
|
||||||
local desc="${4:-$1}"
|
local desc="${4:-$1}"
|
||||||
local home="${5:-/var/run/$1}"
|
local home="${5:-/var/run/$1}"
|
||||||
local shell="${6:-/bin/false}"
|
local shell="${6:-/bin/false}"
|
||||||
local rc
|
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
|
[ -f "${IPKG_INSTROOT}/etc/passwd" ] || return 1
|
||||||
[ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
|
[ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd
|
||||||
echo "${name}:x:${uid}:${gid}:${desc}:${home}:${shell}" >> ${IPKG_INSTROOT}/etc/passwd
|
echo "${name}:x:${uid}:${gid}:${desc}:${home}:${shell}" >> ${IPKG_INSTROOT}/etc/passwd
|
||||||
|
|
Loading…
Reference in a new issue