分页: 1 / 1

自定制deb包,重定位安装路径时dpkg -i --instdir=$HOME *.deb出错……

发表于 : 2008-12-03 13:51
GChan
$ sudo dpkg -i --instdir=$HOME hellodeb_1.0-1_amd64.deb
选中了曾被取消选择的软件包 hellodeb。
(正在读取数据库 ... 系统当前总共安装有 151599 个文件和目录。)
正在解压缩 hellodeb (从 hellodeb_1.0-1_amd64.deb) ...
dpkg (子进程):无法执行新的 pre-installation script: No such file or directory
dpkg:处理 hellodeb_1.0-1_amd64.deb (--install)时出错:
子进程 pre-installation script 返回了错误号 2
dpkg (子进程):无法执行新的 post-removal script: No such file or directory
dpkg: 作下列清理工作时发生错误:
子进程 post-removal script 返回了错误号 2
在处理时有错误发生:
hellodeb_1.0-1_amd64.deb


----
看其出错的信息,应该是preinst、postrm等脚本有误,其实这些脚本里只有一行:#!/bin/sh;
但是如果去掉--instdir=$HOME选项就可以安装;
google了一下,有人说是/bin/sh的链接到dash的问题,不过我按照其的做法,把/bin/sh链接到bash,也不行。

大家有没有遇到过这种情况,可不可以给个思路?麻烦,谢谢!

Re: 自定制deb包,重定位安装路径时dpkg -i --instdir=$HOME *.deb出错……

发表于 : 2008-12-03 19:24
tyllrxs
给个标准的postinst脚本你参考:

代码: 全选

#!/bin/sh

set -e

# summary of how this script can be called:
#        * <new-preinst> `install'
#        * <new-preinst> `install' <old-version>
#        * <new-preinst> `upgrade' <old-version>
#        * <old-preinst> `abort-upgrade' <new-version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package


case "$1" in
    install|upgrade|configure)
    ;;

    abort-upgrade)
    ;;

    *)
        echo "preinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac


exit 0

Re: 自定制deb包,重定位安装路径时dpkg -i --instdir=$HOME *.deb出错……

发表于 : 2008-12-04 15:58
GChan
tyllrxs, 你发的postinst脚本是用dh_make生成的吧?
我用了默认的那些脚本(即直接把postinst.ex重命名为postinst),
还是出现上面的那些问题。很郁闷……

Re: 自定制deb包,重定位安装路径时dpkg -i --instdir=$HOME *.deb出错……

发表于 : 2008-12-04 16:07
GChan
我打包的步骤是这样的:

1)$gpg --gen-key
2)$gpg --armor --output public.key --export <email>
3)$export DEBEMAIL="email"
4)$export DEBFULLNAME="username"
5)#####把要安装的文件打包
$tar cvf hellodeb hellodeb_1.0-1.tar.gz
6)$dh_make -f hello-1.0-1.tar.gz
7)#####把debian目录下的postinst.ex、postrm.ex、preinst.ex、prerm.ex脚本去掉后缀名
8)$dpkg-buildpackage -rfakeroot -sa
9)#####然后用下面的命令安装
$sudo dpkg -i --instdir=$HOME hellodeb_1.0-1_amd64.deb

在第9步,如果用:
$sudo dpkg -i hellodeb_1.0-1_amd64.deb
就可以安装。