我读了文档和其他教程尝试fpm
在构建 Debian 包时处理依赖关系,但每次都失败。
我的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
输出错误信息
gem
我在Ubuntu 16.04 LTS 上安装了 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:
但这导致在尝试安装包时出现错误,因为它找不到依赖项。除了依赖项之外,它运行良好。
- 有什么办法可以
fpm
接受我的依赖吗? - 有没有更简单的系统来构建 Debian 软件包?
答案1
尽管它用引号回显了依赖项参数,但错误消息看起来好像 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)"'
)
给它们添加额外的一层引号,看看是否有帮助。