Acabei de concluir uma modificação e reconstrução simples do código-fonte em uma máquina Raspberry Pi OS - bullseye. Como isso é novo para mim, vou listar as etapas que segui em um esforço para evitar ambiguidade:
$ 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
$
Tudo bem, mas os números de versão "antes" e "depois" são exatamente os mesmos, o que me deixa sem uma maneira simples de saber se tenho meu código corrigido em execução ou o código não corrigido . Vou instalar o arquivo .deb corrigido em vários hosts, posso receber solicitações de outros, etc, então gostaria de alguma maneira de distinguir facilmente o código corrigido do não corrigido .
Usando dhcpcd --version
parece uma maneira fácil de fazer isso. Eu li que o Debian tem regras sobre números de versão, mas como não estou liberando isso para "o mundo", não vejo necessidade de formalidade. Além disso - enviei uma solicitação de pull/merge para o repositório Debian e avisei a organização RPi sobre o problema. Não recebi nenhum feedback de nenhuma das partes, mas esse bug é um grande aborrecimento para mim. Não desejo esperar por um novo lançamento dhcpcd
com um número de versão "adequado".
O que devo fazer para que a versão corrigidadhcpcd
de reporte dhcpcd 8.1.2.1
- ou algo semelhante?
EDIT para esclarecimento:
Com base nessa resposta , editei dhcpcd5-8.1.2/debian/changelog
. Após essa alteração, os apt
utilitários relatam consistentemente a versão de dhcpcd
como 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
$
No entanto: dhcpcd --version
ainda relata 8.1.2
. dhcpcd
é alias dhcpcd5
em /etc/alternatives
. Consequentemente, dhcpcd --version
é na verdade dhcpcd5 --version
. Parece que o executável estádhcpcd5
recebendo --version
de uma fonte diferente dos apt
utilitários.?
EDIÇÃO 2:
Acontece que a versão # que é relatada por dhcpcd --version
é definida da defs.h
seguinte forma:
#define PACKAGE "dhcpcd"
#define VERSION "8.1.2"
Eu acho que dhcpcd
é um pouco outlier . A equipe do RPi aparentemente decidiu renunciar à versão upstream 9 quando lançada (anos atrás), e manteve a versão 8.1.2, embora houvesse vários lançamentos upstream após a versão 8.1.2. Ainda mais confuso é o fato de que o .dsc
arquivo lista Vcs-Browser: https://salsa.debian.org/smlx-guest/dhcpcd5
como o repositório Git - mas na verdade está preso na versão 7. Isso não faz muito sentido para mim - acho que é uma das razões pelas quais não sou um mantenedor de pacotes. :)
Você pode adicionar as linhas relevantes na parte superior de
debian/changelog
(encontre aqui detalhes sobre o conteúdo desse arquivo).Você pode duplicar a estrofe superior atual e alterar o número da versão (fazer um comentário de log útil é uma boa ideia).
Alternativamente, você pode usar a
dch
ferramenta (dedevtools
):Uma vez instalado, você pode verificar a versão instalada do pacote com algo assim (existem alternativas )
Os identificadores de versão upstream não podem ser importados automaticamente porque nem sempre existem oficialmente (digamos , python3-lzss ) e quando existem, podem não ser compatíveis com as restrições e classificação das versões do sistema de pacotes . Por exemplo
epoch
, às vezes é necessário migrar de versões upstream para Debian.