Tomarei como exemplo o Google Chrome.
Supondo que está desatualizado e aparecendo a mensagem ao abrir o Chrome.
1- Faça o download oficial do .deb (o .deb é melhor de trabalhar do que o .rpm):
https://www.google.com/chrome/?platform=linux
2- Entre no diretório onde fez o download e gere o hash:
$ cd Downloads
$ sha256sum google-chrome-stable_current_amd64.deb
4dbd78d88a1e69a6036ba8e8adb99fca808790e23b2ea92d8610494ad7f57328 google-chrome-stable_current_amd64.deb
3- Veja a versão do novo programa:
$ tar -xJf control.tar.xz ./control -O | grep Version
Version: 146.0.7680.177-1
4- Atualize o sistema e instale o necessário:
$ sudo xbps-install -Su
$ sudo xbps-install xtools
5- Clone o repositório git do Void (fará somente uma vez):
$ git clone https://github.com/void-linux/void-packages.git
6- Entre no diretório criado e prepare o ambiente:
$ cd void-packages
$ ./xbps-src binary-bootstrap
7- Entre na pasta e edite o template:
$ cd void-packages
$ vim srcpkgs/google-chrome/template
# Template file for 'google-chrome'
pkgname=google-chrome
version=146.0.7680.164
revision=1
_channel=stable
archs="x86_64"
hostmakedepends="python3-html2text python3-setuptools"
depends="gtk+3"
short_desc="Attempt at creating a safer, faster, and more stable browser"
maintainer="Michael Aldridge "
license="custom:chrome"
homepage="https://www.google.com/chrome/"
distfiles="https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-${_channel}_${version}-1_amd64.deb"
checksum=f6dd8715a3f10f0cd37b2e7b8831a96359ea856c747da222d3b2623ae651b374
...
version: Altere para a versão que você descobriu (ex.: 146.0.7680.177-1).
revision: Resete para 1.
checksum: Substitua pelo hash que você gerou no Passo 2.
Salve e saia.
8- Autorize (o Chrome é um pacote proprietário) e gere o pacote:
$ echo "XBPS_ALLOW_RESTRICTED=yes" >> etc/conf
$ ./xbps-src pkg google-chrome
Caso der um erro de hash, o xbps-src já apresenta a solução, pois compara o hash informado com o atual porque a Google atualiza o binário do Chrome com muita frequência (às vezes várias vezes ao dia para correções de segurança), o que altera o hash (SHA256) do arquivo mesmo que o número da versão do pacote .deb baixado pareça o mesmo:
=> ERROR: SHA256 mismatch for 'google-chrome-stable_146.0.7680.164-1_amd64.deb:'f6dd8715a3f10f0cd37b2e7b8831a96359ea856c747da222d3b2623ae651b374=> ERROR: google-chrome-146.0.7680.164_1: couldn't verify distfiles, exiting...
Copie o hash da mensagem, reabra o template e cole nele.
Execute:
$ ./xbps-src pkg google-chrome
9- Instale atualizando:
$ sudo xbps-install --repository=hostdir/binpkgs/nonfree -fu google-chrome
Como essa alteração foi feita manualmente somente no repositório local (void-packages), o comando "git pull" no futuro pode acusar um conflito quando os mantenedores do Void atualizarem o Chrome no GitHub deles.
Caso isso acontecer, resolva limpando e atualizando suas alterações locais:
$ git checkout srcpkgs/google-chrome/template
$ git pull --rebase
No Void
Linux, o arquivo template não é apenas um registro de versão; ele é o roteiro de construção do pacote.
Quando você altera a "version" e o "checksum" no template, o xbps-src faz o seguinte "por baixo dos panos":
Download Dinâmico: Ele utiliza a variável "version" para montar a URL de download (ex:
https://google.com{version}_amd64.deb).
Troca do Binário: Ele descarta o .deb antigo, baixa o novo arquivo .deb da Google correspondente à versão que você digitou e verifica se o checksum bate.
Descompactação: Ele extrai o conteúdo desse novo .deb.
Reempacotamento: Ele converte a estrutura do Debian para o formato .xbps do Void.
O xbps-src não atualiza somente o número da versão, ele atualiza o pacote em si, através do número da versão e do checksum no template.
Depois de atualizar localmente o pacote, você pode enviá-lo para o repositório oficial do Void tornando-se um contribuidor do Void Linux.