我刚刚在 Raspberry Pi OS - bullseye 机器上完成了简单的源代码修改和重建。因为这对我来说是新的,所以我将列出我遵循的步骤以避免歧义:
$ 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 存储库提交了拉取请求/合并请求,并且我已就该问题向 RPi 组织提供了建议。我没有收到任何一方的反馈,但这个错误对我来说是一个巨大的烦恼。我不想等待dhcpcd
具有“正确”版本号的新版本。
我必须做什么才能导致已纠正dhcpcd
报告的版本dhcpcd 8.1.2.1
- 或类似的东西?
编辑澄清:
基于这个答案,我编辑过dhcpcd5-8.1.2/debian/changelog
。进行此更改后,实用程序一致报告asapt
的版本: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。这对我来说没有多大意义 - 我想这就是我不是包维护者的原因之一。 :)
答案1
您可以在顶部添加相关行debian/changelog
(查找这里该文件内容的详细信息)。
您可以复制当前的顶部节并更改版本号(进行有用的日志注释是一个好主意)。
或者,您可以使用该dch
工具(来自devtools
):
dch --local your_package_name
安装后,您可以使用类似以下内容检查软件包的已安装版本(有备择方案)
dpkg -l dhcpcd5
上游版本标识符无法自动导入,因为它们并不总是正式存在(例如python3-lzss)并且当它们这样做时,它们可能与限制和排序不兼容软件包系统版本。例如,epoch
有时需要从上游版本迁移到 Debian 版本。