Descompacte facilmente o deb, reembale o deb com a nova versão

0

Eu já vi Descompacte facilmente DEB, editar postinst, e repack DEB - no entanto, esse não explica como alterar corretamente o número da versão .deb se eu quiser fazer algumas alterações no arquivo .deb original.

Eu estou no Ubuntu 14.04, e vamos pegar hostapd para um exemplo:

$ mkdir /tmp/debtest
$ cd /tmp/debtest/
$ apt-get download hostapd
Get:1 http://dk.archive.ubuntu.com/ubuntu/ trusty-updates/universe hostapd amd64 1:2.1-0ubuntu1.4 [423 kB]
Fetched 423 kB in 1s (361 kB/s)  
$ ls -la hostapd_1%3a2.1-0ubuntu1.4_amd64.deb 
-rw-rw-r-- 1 myuser myuser 422846 Nov 10  2015 hostapd_1%3a2.1-0ubuntu1.4_amd64.deb

Agora podemos descompactar como no link acima:

$ mkdir unpack-hostapd
$ dpkg-deb -R hostapd_1%3a2.1-0ubuntu1.4_amd64.deb unpack-hostapd
$ ls -la unpack-hostapd/
total 20
drwxr-xr-x 5 myuser myuser 4096 Jan 26 11:31 .
drwxrwxr-x 3 myuser myuser 4096 Jan 26 11:31 ..
drwxr-xr-x 2 myuser myuser 4096 Nov  9  2015 DEBIAN
drwxr-xr-x 6 myuser myuser 4096 Nov  9  2015 etc
drwxr-xr-x 4 myuser myuser 4096 Nov  9  2015 usr

Digamos que eu queira fazer uma alteração trivalente, por exemplo, anexar uma linha de texto ao README.Debian:

echo "Just a test line" >> unpack-hostapd/usr/share/doc/hostapd/README.Debian

... e agora quero refazer isso como um novo .deb.

Primeira pergunta - existe uma maneira de recuperar a versão atual (antiga) do pacote do estado descompactado? Como não confio em nomes de arquivos, geralmente faço:

$ apt-cache policy hostapd
hostapd:
  Installed: (none)
  Candidate: 1:2.1-0ubuntu1.4
...

... e isso me diz que baixei a versão 1: 2.1-0ubuntu1.4 do pacote quando usei apt-get download... - mas não necessariamente qual é a versão dentro do diretório unpack-hostapd . Existe um comando que me dirá a versão do pacote do .deb de origem que foi descompactado no diretório unpack-hostapd ?

Agora, usei debchange como dch -i antes para incrementar automaticamente um número de versão (embora em outros projetos de origem), mas quando eu tentar aqui:

$ cd unpack-hostapd
$ pwd
/tmp/debtest/unpack-hostapd
$ dch -e
dch: fatal error at line 580:
Cannot find debian/changelog anywhere!
Are you in the source code tree?
(You could use --create if you wish to create this file.)
$ find . -name 'changelog*'
./usr/share/doc/hostapd/changelog.Debian.gz
$ dpkg -c ../hostapd_1%3a2.1-0ubuntu1.4_amd64.deb | grep changelog
-rw-r--r-- root/root      2126 2015-11-09 14:56 ./usr/share/doc/hostapd/changelog.Debian.gz

... mas não posso mudar nada disso aqui.

Então, minha segunda pergunta é: existe uma maneira fácil (como dch -i para pacotes fonte) de alterar o número da versão do pacote .deb e possivelmente adicionar um changelog, para um desempacotado? pacote de .deb como este?

É claro que, em última análise, gostaria de reempacotar essa nova versão como um pacote .deb, para o qual o link acima sugere algo como dpkg-deb -b unpack-hostapd hostapd_1%3a2.1-0ubuntu1.4_amd64.deb ; Embora, digamos, aqui eu prefiro usar a versão 1:2.2 , então eu finalmente usaria um nome de arquivo como dpkg-deb -b unpack-hostapd hostapd_1%3a2.2_amd64.deb - no entanto, essa versão também deve corresponder ao que está gravado dentro do .deb, e eu não sei como faça isso ...

    
por sdbbs 26.01.2017 / 11:47

2 respostas

2

A versão é definida no arquivo de controle binário, que é extraído em DEBIAN/control ao usar dpkg-deb -R . Procure um campo Version: :

Version: 1:2.5.2+v2.4-3+b1

Aqui você edita o número da versão do novo pacote. (Opcionalmente, você pode adicionar uma entrada de changelog ao changelog em usr/share/doc/hostapd/changelog.Debian.gz .) Então você pode reconstruir seu pacote assim, de modo que dpkg-deb determine o nome correto do arquivo para você:

mkdir newpkg
dpkg-deb -b hostapd newpkg

Isso produzirá um novo pacote no diretório newpkg , nomeado apropriadamente.

O ideal é que você verifique os requisitos de biblioteca dos seus novos binários e atualize as informações de dependência em control também!

    
por 26.01.2017 / 13:14
1

Veja que tipo de edição manual funcionou para mim - no entanto, isso foi uma espécie de palpite cego, então ainda é bom ter uma resposta de alguém que entende o sistema:

# decompress changelog.Debian.gz
unpack-hostapd$ gzip -d  usr/share/doc/hostapd/changelog.Debian.gz

# edit the uncompressed changelog.Debian:
# add this on top:
# wpa (2.2) trusty-security; urgency=medium
# 
# * whatever
# 
# wpa (2.1-0ubuntu1.4) trusty-security; urgency=medium
# ....
unpack-hostapd$ nano usr/share/doc/hostapd/changelog.Debian

# repack changelog.Debian.gz
unpack-hostapd$ gzip -9 usr/share/doc/hostapd/changelog.Debian

# change DEBIAN/control - Source: and Version:
# change to:
# Source: wpa (2.2)
# Version: 1:2.2
unpack-hostapd$ nano DEBIAN/control

# repack .deb:
unpack-hostapd$ cd ..
$ dpkg-deb -b unpack-hostapd hostapd_1%3a2.2_amd64.deb

# now can install the deb
sudo dpkg -i hostapd_1%3a2.2_amd64.deb
    
por 26.01.2017 / 13:16