15

我有一个我已经使用checkinstall了一段时间的包,我想自动化它(通过命令行传递值,而不是输入选择,粘贴值等等......)

我不确定这是否是 checkinstall 错误,但如何通过命令行--requires选项包含多个包。--requires="libvte9 (>= 0.28.2)"如果我包含一个包的最低版本(例如),或者一次包含多个包(例如--requires "libvte9, libc6") ,这似乎很糟糕

有没有人在多个包的命令行参数方面取得了更好的成功?我做错了什么,或者这是一个错误。

注意:如果我运行脚本,并选择 requires 选项 (10),然后将我的整行粘贴到多个包和最低版本(例如libvte9 (>= 0.28.2), libc6 (>= 2.13),它工作正常,它似乎只是在命令行上出现问题。这也是使用该-D选项构建一个 debian 包。

4

4 回答 4

26

在阅读了 Aleks-Daniel Jakimenko-A. 的回答Reallumpi的回答)并在真实案例中进行了一些测试之后,您应该这样做:

  1. 使用,(逗号)不带空格来分隔所需的包;
  2. ()指定包的版本时转义括号;
  3. >指定包的版本时转义(更大的符号) ;

例子

make && sudo -k checkinstall \
    --pkgsource="https://github.com/raboof/nethogs/" \
    --pkglicense="GPL2" \
    --deldesc=no \
    --nodoc \
    --maintainer="$USER\\<$USER@$HOSTNAME\\>" \
    --pkgarch=$(dpkg \
    --print-architecture) \
    --pkgversion="0.8.1" \
    --pkgrelease="SNAPSHOT" \
    --pkgname=nethogs \
    --requires="libc6 \(\>= 2.4\),libgcc1 \(\>= 1:4.1.1\),libncurses5 \(\>= 5.5-5~\),libpcap0.8 \(\>= 0.9.8\),libstdc++6 \(\>= 4.1.1\),libtinfo5" \
    make install

输出

*****************************************
**** Debian package creation selected ***
*****************************************

This package will be built according to these values:

0 -  Maintainer: [ elopez<elopez@> ]
1 -  Summary: [ Net top tool grouping bandwidth per process ]
2 -  Name:    [ nethogs ]
3 -  Version: [ 0.8.1 ]
4 -  Release: [ SNAPSHOT ]
5 -  License: [ GPL2 ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ https://github.com/raboof/nethogs/ ]
9 -  Alternate source location: [  ]
10 - Requires: [ libc6 (>= 2.4),libgcc1 (>= 1:4.1.1),libncurses5 (>= 5.5-5~),libpcap0.8 (>= 0.9.8),libstdc++6 (>= 4.1.1),libtinfo5 ]
11 - Provides: [ nethogs ]
12 - Conflicts: [  ]
13 - Replaces: [  ]
于 2016-02-12T10:32:04.227 回答
12

checkinstall 用于,分隔多个包。就是这样,一个逗号,周围没有任何空格。

于 2013-08-21T19:12:56.533 回答
7

您需要转义括号,例如--requires "package \(= 1.0\)"

于 2014-01-07T16:43:25.680 回答
1

这个答案详细说明了如何在 shell 脚本中正确格式化标点符号,以获取多个包依赖项以使 checkinstall 工作。

PAK_USER='. , ? ! : + - ^ _ { } = $ % @ [ ] / ; # & * ~ ( ) < > \ |'
PAK_NEEDS='. , ? ! : + - ^ _ { } = $ % @ [ ] / ; # & * ~ ( ) < > \ |'
PAK_NEEDS=$(echo "$PAK_NEEDS" | perl -pe 's/([[:punct:]])/\\\1/g')

0 -  Maintainer: [ . , ? ! : + - ^ _ { } = $ % @ [ ] / ]
1 -  Summary: [ This is a punctuation escape test. ]
10 - Requires: [ . , ? ! : + - ^ _ { } = $ % @ [ ] / ; # & * ~ ( ) < > \ | ]

需要转义的似乎是 shell 运算符; # & * ~ ( ) < > \ | Some 将返回一个值* ~终止行; #或清除所有内容( ) < > | &\消失,因为它是转义字符。

正则表达式perl -pe 's/([[:punct:]])/\\\1/g'转义了所有过分但效果很好的标点符号。单引号和双引号已经存在问题,$除非被单引号包围,否则它们会扩展。

如果您不想考虑转义,请使用正则表达式并谨慎使用' " $.

PAK_NEEDS="libasound2 (>= 1.0.16), libavcodec57 (>= 7:3.4.2) | libavcodec-extra57 (>= 7:3.4.2), libavformat57 (>= 7:3.4.2), libavutil55 (>= 7:3.4.2), libboost-filesystem1.65.1, libboost-system1.65.1, libc6 (>= 2.27), libcurl4 (>= 7.16.2), libexpat1 (>= 2.0.1), libgcc1 (>= 1:3.0), libgl1, libglu1-mesa | libglu1, libmad0 (>= 0.15.1b-3), libsdl2-2.0-0 (>= 2.0.8), libsdl2-image-2.0-0 (>= 2.0.2), libsdl2-net-2.0-0 (>= 2.0.1), libsdl2-ttf-2.0-0 (>= 2.0.14), libsndfile1 (>= 1.0.20), libspeex1 (>= 1.2~beta3-1), libspeexdsp1 (>= 1.2~beta3.2-1), libstdc++6 (>= 5.2), libswscale4 (>= 7:3.4.2), libvorbisfile3 (>= 1.1.2), libzzip-0-13 (>= 0.13.56), zlib1g (>= 1:1.1.4)"
PAK_NEEDS=$(echo "$PAK_NEEDS" | perl -pe 's/([[:punct:]])/\\\1/g')
10 - Requires: [ libasound2 (>= 1.0.16), libavcodec57 (>= 7:3.4.2) | libavcodec-extra57 (>= 7:3.4.2), libavformat57 (>= 7:3.4.2), libavutil55 (>= 7:3.4.2), libboost-filesystem1.65.1, libboost-system1.65.1, libc6 (>= 2.27), libcurl4 (>= 7.16.2), libexpat1 (>= 2.0.1), libgcc1 (>= 1:3.0), libgl1, libglu1-mesa | libglu1, libmad0 (>= 0.15.1b-3), libsdl2-2.0-0 (>= 2.0.8), libsdl2-image-2.0-0 (>= 2.0.2), libsdl2-net-2.0-0 (>= 2.0.1), libsdl2-ttf-2.0-0 (>= 2.0.14), libsndfile1 (>= 1.0.20), libspeex1 (>= 1.2~beta3-1), libspeexdsp1 (>= 1.2~beta3.2-1), libstdc++6 (>= 5.2), libswscale4 (>= 7:3.4.2), libvorbisfile3 (>= 1.1.2), libzzip-0-13 (>= 0.13.56), zlib1g (>= 1:1.1.4) ]
于 2018-05-15T12:08:29.307 回答