fpm不处理依赖关系

我已经阅读了文档和其他教程 ,试图让fpm在构builddebian包时处理依赖关系,但每次都失败。

我的build.sh

 #!/bin/bash # constants ITERATION=1 CODEVER=0.006 DIRBUILD=/home/chicks/Documents/build-proxwrap DIRGIT=/home/chicks/Documents/git/wrap_proxmox DEPS=( "libio-prompt-perl (>= 0.997002-1)" "perl-doc (>= 5.18.2-2ubuntu1.1)" "liburi-escape-xs-perl (>= 0.11-1)" "libjson-perl (>= 2.61-1)" "libhttp-message-perl (>= 6.06-1)" "libwww-perl (>= 6.05-2)" ) PATH="$PATH:/home/chicks/.gem/ruby/2.3.0/bin" # clean dirs rm -rf $DIRBUILD mkdir -p $DIRBUILD || exit 1 mkdir -p $DIRBUILD/usr/bin || exit 1 mkdir -p $DIRBUILD/opt/lib/perl5 || exit 1 ARG_DEPS="" for index in `seq 1 5` do ARG_DEPS="$ARG_DEPS -d 'deb:${DEPS[$index]}'" done #echo $DIRGIT echo $ARG_DEPS # build directory tree cd $DIRBUILD/usr/bin for file in $(cd $DIRGIT/bin; ls); do if echo $file | grep '.sh$' > /dev/null then echo leaving $file out of package continue fi cat $DIRGIT/bin/$file | sed -e "s/use lib '..\/lib';/use lib '\/opt\/lib\/perl5';/" > $file chmod +x $file done cd $DIRBUILD/opt/lib/perl5 cp -pr $DIRGIT/lib/* . pwd ls # build package cd $DIRGIT OUTDEB=tm-proxwrap_${CODEVER}-${ITERATION}_amd64.deb rm $OUTDEB echo about to build $OUTDEB from $DIRBUILD echo "" echo running fpm -s dir -t deb -n tm_proxwrap -v $CODEVER $ARG_DEPS --iteration $ITERATION -C $DIRBUILD usr opt fpm -s dir -t deb -n tm_proxwrap -v $CODEVER $ARG_DEPS --iteration $ITERATION -C $DIRBUILD usr opt echo "" ls -lh $OUTDEB dpkg -c $OUTDEB 

输出错误信息

我在Ubuntu 16.04 LTS上通过gem安装了fpm 1.6.1。

 $ ./build.sh -d 'deb:perl-doc (>= 5.18.2-2ubuntu1.1)' -d 'deb:liburi-escape-xs-perl (>= 0.11-1)' -d 'deb:libjson-perl (>= 2.61-1)' -d 'deb:libhttp-message-perl (>= 6.06-1)' -d 'deb:libwww-perl (>= 6.05-2)' leaving build.sh out of package leaving install.sh out of package /home/chicks/Documents/build-proxwrap/opt/lib/perl5 Net Telmate rm: cannot remove 'tm-proxwrap_0.006-1_amd64.deb': No such file or directory about to build tm-proxwrap_0.006-1_amd64.deb from /home/chicks/Documents/build-proxwrap running fpm -s dir -t deb -n tm_proxwrap -v 0.006 -d 'deb:perl-doc (>= 5.18.2-2ubuntu1.1)' -d 'deb:liburi-escape-xs-perl (>= 0.11-1)' -d 'deb:libjson-perl (>= 2.61-1)' -d 'deb:libhttp-message-perl (>= 6.06-1)' -d 'deb:libwww-perl (>= 6.05-2)' --iteration 1 -C /home/chicks/Documents/build-proxwrap usr opt All flags should be before the first argument (stray flags found: ["-d", "-d", "-d", "-d", "--iteration", "-C"] {:level=>:warn} Invalid package configuration: Cannot package the path './(>=', does it exist? {:level=>:error} 

离开deb:离开deb: 当我没有包含版本号时,我需要deb:但是当试图安装这个软件包的时候会导致错误,因为它找不到依赖关系。 除了依赖,它运作良好。

  • 有没有办法让fpm接受我的依赖?
  • 有没有一个更容易的系统来build立debian软件包?

即使它使用引号回显依赖项参数,错误消息使得它看起来像fpm正在丢失你的依赖项名称上的引号,因为它似乎试图使用./(>=作为一个文件。

 DEPS=( '"libio-prompt-perl (>= 0.997002-1)"' '"perl-doc (>= 5.18.2-2ubuntu1.1)"' '"liburi-escape-xs-perl (>= 0.11-1)"' '"libjson-perl (>= 2.61-1)"' '"libhttp-message-perl (>= 6.06-1)"' '"libwww-perl (>= 6.05-2)"' ) 

添加一个额外的报价层,看看是否有帮助。