我刚刚在 Raspberry Pi OS - 靶心机器上完成了一个简单的源代码修改和重建。因为这对我来说是新的,所以我将列出我遵循的步骤以避免歧义:
$ dhcpcd --version
dhcpcd 8.1.2 # "before" version
$ sudo apt install devscripts # build tools for using `debuild`
$ apt-get source dhcpcd5 # creates source tree ~/dhcpcd5-8.1.2; Debian git repo is far off!
$ cd dhcpcd5-8.1.2 # cd to source dir
$ nano src/dhcp.c # make required changes to the source (one line)
~/dhcpcd5-8.1.2 $ debuild -b -uc -us # successful build
$ cd ..
$ sudo dpkg -i dhcpcd5_8.1.2-1+rpt5_armhf.deb # install .deb file created by debuild
$ dhcpcd --version
dhcpcd 8.1.2 # "after" version
$
一切都很好,但是“之前”和“之后”的版本号完全相同,这让我无法简单地知道我是否运行了已更正的代码或未更正的代码。我会将 更正后的.deb 文件安装到多个主机上,我可能会收到其他人的请求,等等,所以我想要一些方法来轻松区分更正和未更正的代码。
使用dhcpcd --version
似乎是一种简单的方法来做到这一点。我读过 Debian 有关于版本号的规则,但由于我没有将它发布给“世界”,我认为不需要形式。另外 - 我已经向 Debian repo 提交了一个拉取请求/合并请求,并且我已经就这个问题向 RPi 组织提出了建议。我没有得到任何一方的反馈,但这个错误对我来说是一个巨大的烦恼。我不想等待dhcpcd
具有“正确”版本号的新版本。
我必须做什么才能导致报告的更正版本- 或类似的东西?dhcpcd
dhcpcd 8.1.2.1
编辑澄清:
基于这个答案,我编辑了dhcpcd5-8.1.2/debian/changelog
。在此更改之后,apt
实用程序始终将版本报告dhcpcd
为8.1.3
:
$ apt-cache policy dhcpcd5
dhcpcd5:
Installed: 1:8.1.3-1+rpt1
Candidate: 1:8.1.3-1+rpt1
Version table:
*** 1:8.1.3-1+rpt1 100
100 /var/lib/dpkg/status
1:8.1.2-1+rpt1 500
500 http://archive.raspberrypi.org/debian buster/main armhf Packages
7.1.0-2 500
500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages
$ #
$ dpkg -s dhcpcd5 | grep Version
Version: 1:8.1.3-1+rpt1
$
但是:dhcpcd --version
仍然报告8.1.2
。dhcpcd
别名为dhcpcd5
in /etc/alternatives
。因此,dhcpcd --version
实际上是dhcpcd5 --version
。似乎可执行文件dhcpcd5
是--version
从与实用程序不同的来源获取的apt
。?
编辑2:
原来报告的版本号dhcpcd --version
定义defs.h
如下:
#define PACKAGE "dhcpcd"
#define VERSION "8.1.2"
我觉得 dhcpcd
有点离群。RPi 团队显然决定在发布时(几年前)放弃上游版本 9,并坚持使用 8.1.2 版本,即使在 8.1.2 版本之后有多个上游版本。更令人困惑的是.dsc
文件Vcs-Browser: https://salsa.debian.org/smlx-guest/dhcpcd5
列为 Git 存储库的事实——但它实际上停留在版本 7。这对我来说没有多大意义——我想这是我不是包维护者的原因之一。:)
您可以在顶部添加相关行(在此处
debian/changelog
找到有关该文件内容的详细信息)。您可以复制当前的顶部节并更改版本号(做一个有用的日志注释是个好主意)。
或者,您可以使用该
dch
工具(来自devtools
):安装后,您可以使用类似这样的方式检查软件包的安装版本(有替代方案)
上游版本标识符不能自动导入,因为它们并不总是正式存在(比如python3-lzss ),并且当它们存在时,它们可能与包系统版本的限制和排序不兼容。例如
epoch
,有时需要从上游迁移到 Debian 版本。