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

很多朋友从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这两个脚本。

暧昧贴

发表评论

    微笑 大笑 拽 大哭 奸笑 流汗 喷血 生气 囧 不爽 晕 示爱 卖萌 吃惊 迷离 爱你 吓死了 呵呵

      已有3条评论

    1. avatar MarIxs地板
      十分感谢2017-06-04 14:40 回复
      1. avatar 学习了!板凳
        解决一个烦人的问题,感谢博主填坑!2016-03-03 23:20 回复
        1. avatar hoppocket沙发
          非常好2015-02-13 11:26 回复