【问题标题】:Build deb package version with command line option使用命令行选项构建 deb 包版本
【发布时间】:2017-09-26 21:30:17
【问题描述】:

新手构建 deb 包。我有一个构建脚本来为 Ubuntu 生成包。版本号在changelog 中。我想使用version 文件来自动化构建deb 包的过程而不接触changelog,并且该文件仅包含类似1.0.0 的版本号。

如何将版本号传递给 debuild 命令?

   debuild --no-lintian --preserve-envvar=PATH --check-dirname-level 0 --no-tgz-check -uc -us

【问题讨论】:

    标签: ubuntu ubuntu-14.04 deb


    【解决方案1】:

    我没有足够的代表发表评论,但我可以想到 2 种方法来实现这一点。

    首先是从文件中读取所有选项并对其执行 debuild,包括版本号(假设您将“debuild”设为全局别名或函数):

    #!/bin/bash
    file="/home/user/build_options.txt"
    while IFS= read -r line
    do
        debuild $line
    done <"$file"
    

    您的 build_options.txt 文件如下所示:

    --version 1.0.0 --no-lintian --preserve-envvar=PATH --check-dirname-level 0 --no-tgz-check -uc -us
    --version 1.0.1 --no-lintian --preserve-envvar=PATH --check-dirname-level 0 --no-tgz-check -uc -us
    ...
    

    第二种方法取决于您编写“debuild”脚本所用的语言。我假设您正在围绕dpkg-deb 创建一个包装器?本质上,您为 --version 选项编写了一个函数,该函数需要一个文件路径,以逐行打开和读取版本号、逗号分隔等。在 Python 中,这可以通过 argparse 模块(见https://docs.python.org/2/howto/argparse.html)。在这个 TensorFlow 脚本中可以看到另一个很好的工作示例:https://github.com/tensorflow/tensorflow/blob/r1.3/tensorflow/examples/learn/wide_n_deep_tutorial.py

    第二种方法的总体思路是编写一个使用--version 标志读取版本文件的函数,但此解决方案将特定于您选择的语言。可能相关:https://github.com/tarantool/tarantool/wiki/Automatic-RPM-DEB-Packages-module-building

    【讨论】:

    • 感谢@shellcat_zero 的努力。我最终使用dch 自动更新更新日志
    【解决方案2】:

    一般的想法是,debian 软件包的新版本由变更日志条目决定。可以使用 dch 帮助脚本自动添加条目。

    【讨论】:

    • 我最终使用了 - sudo dch -v "${version}" -D "trusty" "all latest updates"
    • 你为什么使用 sudo?要更新更新日志,您不需要它,构建包的常用方法是dpkg-buildpackage -rfakeroot。我会尽量避免使用 sudo,首先是出于安全原因,其次是为了防止软件包意外在系统中而不是在软件包目录中安装某些东西。 fakeroot 程序在安装过程中伪造了用户 ID。
    • 有道理。我将删除sudo
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多