活到老学到老  

记录遇到问题的点点滴滴。

关于安装最新ipk包提示postinst出错解决方法

8年前发布  · 2082 次阅读

很多朋友从openwrt官方trunk版本下载package到自己的路由上安装时,会有类似postinst script returned status 127.或者XXX.postinst: line 4: default_postinst: not found这些错误提示,这是路由版本跟软件包不对应造成,其实这错误并不会影响软件包的安装成功,所以当看到这类错误时,只要不是提示依赖错误,一般不影响。

原因是因为这些软件包是基于trunk 代码编译,所以目前编译出的 ipk 包默认带有Package/postinst脚本或Package/prerm脚本,而其他版本没有,如PandoraBox。

 

#!/bin/sh
[ "${IPKG_NO_SCRIPT}" = "1" ] && exit 0
. ${IPKG_INSTROOT}/lib/functions.sh
default_postinst $0 $@

#!/bin/sh
. ${IPKG_INSTROOT}/lib/functions.sh
default_prerm $0 $@

 

而若不是最新编译的固件,其/lib/functions.sh中是没有>default_postinst或default_prerm函数的,所以会造成 127错误。

如果不想看到些提示,可在路由上执行命令:

echo -e "\ndefault_postinst() {\n\
\treturn 0\n\
}\n\
default_prerm() {\n\
\treturn 0\n\
}" >> /lib/functions.sh

如果想用trunk的SDK编译安装包而装在其他版本上不提示出错,可以在编译 IPK 前修改include/package-ipkg.mk,删除如下部分

        ( \
                echo "#!/bin/sh"; \
                echo "[ \"\$$$${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; \
                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

从而避免 IPK 中出现postinst和prerm这两个脚本。