Changeset 42470


Ignore:
Timestamp:
2014-09-11T14:27:49+02:00 (3 years ago)
Author:
blogic
Message:

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@…>

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/package-ipkg.mk

    r42469 r42470  
    1717ifdef Package/$(1)/$(2) 
    1818  $(call shexport,Package/$(1)/$(2)) 
    19   $(1)_COMMANDS += var2file "$(call shvar,Package/$(1)/$(2))" $(2); 
     19  $(1)_COMMANDS += var2file "$(call shvar,Package/$(1)/$(2))" $(2)$(3); 
    2020endif 
    2121endef 
     
    118118    $(eval $(call BuildIPKGVariable,$(1),conffiles)) 
    119119    $(eval $(call BuildIPKGVariable,$(1),preinst)) 
    120     $(eval $(call BuildIPKGVariable,$(1),postinst)) 
    121     $(eval $(call BuildIPKGVariable,$(1),prerm)) 
     120    $(eval $(call BuildIPKGVariable,$(1),postinst,-pkg)) 
     121    $(eval $(call BuildIPKGVariable,$(1),prerm,-pkg)) 
    122122    $(eval $(call BuildIPKGVariable,$(1),postrm)) 
    123123 
     
    175175        ) > $$(IDIR_$(1))/CONTROL/control 
    176176        chmod 644 $$(IDIR_$(1))/CONTROL/control 
     177        ( \ 
     178                echo "#!/bin/sh"; \ 
     179                echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \ 
     180                echo "default_postinst \$$$$0 \$$$$@"; \ 
     181        ) > $$(IDIR_$(1))/CONTROL/postinst 
     182        ( \ 
     183                echo "#!/bin/sh"; \ 
     184                echo ". \$$$${IPKG_INSTROOT}/lib/functions.sh"; \ 
     185                echo "default_prerm \$$$$0 \$$$$@"; \ 
     186        ) > $$(IDIR_$(1))/CONTROL/prerm 
     187        chmod 0755 $$(IDIR_$(1))/CONTROL/prerm 
    177188        $(SH_FUNC) (cd $$(IDIR_$(1))/CONTROL; \ 
    178189                $($(1)_COMMANDS) \ 
  • trunk/package/Makefile

    r42041 r42470  
    117117        @-find $(TARGET_DIR) -name .svn  | $(XARGS) rm -rf 
    118118        @-find $(TARGET_DIR) -name '.#*' | $(XARGS) rm -f 
    119         rm -f $(TARGET_DIR)/usr/lib/opkg/info/*.postinst 
     119        rm -f $(TARGET_DIR)/usr/lib/opkg/info/*.postinst* 
     120        rm -f $(TARGET_DIR)/usr/lib/opkg/info/*.prerm* 
    120121        $(if $(CONFIG_CLEAN_IPKG),rm -rf $(TARGET_DIR)/usr/lib/opkg) 
    121122        $(call mklibs) 
  • trunk/package/base-files/files/lib/functions.sh

    r41405 r42470  
    161161} 
    162162 
     163default_prerm() { 
     164        local name 
     165        name=$(echo $(basename $1) | cut -d. -f1) 
     166        [ -f /usr/lib/opkg/info/${name}.prerm-pkg ] && . /usr/lib/opkg/info/${name}.prerm-pkg 
     167        for i in `cat /usr/lib/opkg/info/${name}.list | grep "^/etc/init.d/"`; do 
     168                $i disable 
     169                $i stop 
     170        done 
     171} 
     172 
     173default_postinst() { 
     174        local name rusers 
     175        name=$(echo $(basename $1) | cut -d. -f1) 
     176        [ -f ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.postinst-pkg ] && . ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.postinst-pkg 
     177        rusers=$(grep "Require-User:" ${IPKG_INSTROOT}/usr/lib/opkg/info/${name}.control) 
     178        [ -n "$rusers" ] && { 
     179                local user group 
     180                for a in $(echo $rusers | sed "s/Require-User://g"); do 
     181                        user="" 
     182                        group="" 
     183                        for b in $(echo $a | sed "s/:/ /g"); do 
     184                                [ -z "$user" ] && { 
     185                                        user=$b 
     186                                        continue 
     187                                } 
     188                                [ -z "$group" ] && { 
     189                                        group=$b 
     190                                        group_add_next $b 
     191                                        gid=$? 
     192                                        user_exists $user || user_add $user "" $gid 
     193                                        continue 
     194                                } 
     195                                group_add_next $b 
     196                                group_add_user $b $user 
     197                        done 
     198                done 
     199        } 
     200        [ -n "${IPKG_INSTROOT}" -o "$PKG_UPGRADE" = "1" ] || for i in `cat /usr/lib/opkg/info/${name}.list | grep "^/etc/init.d/"`; do 
     201                $i enable 
     202                $i start 
     203        done 
     204        return 0 
     205} 
     206 
    163207include() { 
    164208        local file 
     
    200244} 
    201245 
     246group_add_next() { 
     247        local gid gids 
     248        gid=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group | cut -d: -f3) 
     249        [ -n "$gid" ] && return $gid 
     250        gids=$(cat ${IPKG_INSTROOT}/etc/group | cut -d: -f3) 
     251        gid=100 
     252        while [ -n "$(echo $gids | grep $gid)" ] ; do 
     253                gid=$((gid + 1)) 
     254        done 
     255        group_add $1 $gid 
     256        return $gid 
     257} 
     258 
     259group_add_user() { 
     260        local grp delim="," 
     261        grp=$(grep -s "^${1}:" ${IPKG_INSTROOT}/etc/group) 
     262        [ -z "$(echo $grp | cut -d: -f4 | grep $2)" ] || return 
     263        [ -n "$(echo $grp | grep ":$")" ] && delim="" 
     264        [ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd 
     265        sed -i "s/$grp/$grp$delim$2/g" ${IPKG_INSTROOT}/etc/group 
     266        [ -n "$IPKG_INSTROOT" ] || lock -u /var/lock/passwd 
     267} 
     268 
    202269user_add() { 
    203270        local name="${1}" 
    204271        local uid="${2}" 
    205         local gid="${3:-$2}" 
     272        local gid="${3}" 
    206273        local desc="${4:-$1}" 
    207274        local home="${5:-/var/run/$1}" 
    208275        local shell="${6:-/bin/false}" 
    209276        local rc 
     277        [ -z "$uid" ] && { 
     278                uids=$(cat ${IPKG_INSTROOT}/etc/passwd | cut -d: -f3) 
     279                uid=100 
     280                while [ -n "$(echo $uids | grep $uid)" ] ; do 
     281                        uid=$((uid + 1)) 
     282                done 
     283        } 
     284        [ -z "$gid" ] && gid=$uid 
    210285        [ -f "${IPKG_INSTROOT}/etc/passwd" ] || return 1 
    211286        [ -n "$IPKG_INSTROOT" ] || lock /var/lock/passwd 
Note: See TracChangeset for help on using the changeset viewer.