Como construir uma versão mais nova de um pacote que está disponível para minha versão estável?

2

Eu quero usar uma versão mais recente do pacote com meu lançamento estável do Ubuntu. Pedindo backport leva muito tempo sem resultado visível, então eu pensei que talvez eu possa construir uma versão mais nova eu mesmo.

Alguém pode me dizer quais são as melhores práticas atuais para construir novas versões de pacotes que já estão disponíveis no Ubuntu?

UPDATE : Descobri que preciso de pbuilder para manter meu sistema limpo de dependências de construção. Então eu fiz:

sudo apt-get install pbuilder
sudo pbuilder create           # create isolated environment for building packages

UPD2 : tentei verificar se posso criar a versão atual, por isso, obtive o código-fonte para o atual <version> do meu <package> :

mkdir delme
cd delme
apt-get source <package>

UPD3 : Agora tentei compilar o pacote a partir do código-fonte, mas não consigo encontrar os resultados:

sudo pbuilder build *.dsc

O log diz:

...
0 packages upgraded, 94 newly installed, 0 to remove and 0 not upgraded.
Need to get 30.2 MB of archives. After unpacking 89.4 MB will be used.
The following packages have unmet dependencies:
 pbuilder-satisfydepends-dummy : Depends: libjansson-dev which is a virtual package.
                                 Depends: libudev-dev but it is not going to be installed.
                                 Depends: ocl-icd-opencl-dev which is a virtual package. or
                                          opencl-dev which is a virtual package.
Unable to resolve dependencies!  Giving up...
The following NEW packages will be installed:
...
Need to get 30.2 MB of archives. After unpacking 89.4 MB will be used.
Abort.
E: pbuilder-satisfydepends failed.
I: Copying back the cached apt archive contents
...

UPD4 : parece que essas dependências não atendidas são do universe repositório de pacotes, então eu tive que ativá-lo:

sudo pbuilder update --components "main universe" --override-config

Sem --override-config pbuilder irá reclamar que não está definido. Tudo é construído com sucesso:

ls -la /var/cache/pbuilder/result/

UP5 : Descobrimos quais versões do pacote estão disponíveis e buscamos a fonte necessária:

uscan --report --verbose
uscan --download-version <version>

UP6 : encontrado uupdate utility e usado para criar diretório para novo pacote e atualizar debian/changelog , necessário para produzir nova versão:

cd <package>-<old-version>
uupdate ../<package>_<version>.orig.tar.gz
cd ../<package>-<version>
vim debian/changelog

UP7 : para criar o código-fonte com pbuilder , preciso gerar o arquivo .dsc . Geralmente é feito com o comando debuild -S , ou com pdebuild -S em 'pbuilder.

pdebuild -S

Estes erros são eliminados:

...
 fakeroot debian/rules clean
dh clean --with autoreconf
dh: unable to load addon autoreconf: ..
BEGIN failed--compilation aborted at (eval 19) line 2.

make: *** [clean] Error 2
dpkg-buildpackage: error: fakeroot debian/rules clean gave error exit status 2

Parece que não há nenhum pacote autoreconf, mas pbiulder deve buscá-lo automaticamente e parece que usa o arquivo .dsc para fazer isso. catch22.

UPD8 : O comando para criar o arquivo .dsc é dpkg-source .

cd ..
dpkg-source -b <package>-<version>

Agora é possível executar pbuilder sobre ele.

sudo pbuilder build <package>_<version>.dsc
ls -la /var/cache/pbuilder/result/

UP9 : o upload para o PPA é tão simples quanto a execução:

dput ppa:techtonik/backports /var/cache/pbuilder/result/<package>_<version>.changes

Mas isso não funciona:

Checking signature on .changes
gpg: no valid OpenPGP data found.
gpg: the signature could not be verified.
...
No signature on /var/cache/pbuilder/result/<package>_<version>.changes

UP10 : não me lembro como geramos a chave GPG, mas tenho uma. Encontrei uma maneira de assinar os pacotes. Campo Maintaner: editado no arquivo .dsc e usado debsign .

sudo vim /var/cache/pbuilder/result/<package>_<version>.dsc
sudo debsign /var/cache/pbuilder/result/<package>_<version>.changes

Tentativa de envio falhou:

Error: uploading files for distribution UNRELEASED to ppa not allowed.

UP11 : refizemos tudo desde a etapa 6. Como eu poderia saber que preciso editar debian/changes para substituir UNRELEASED por saucy e definir meu e-mail em Maintainer: field de debian/control ?

vim <package>-<version>/debian/changelog
vim <package>-<version>/debian/control
dpkg-source -b <package>-<version>
sudo pbuilder build <package>_<version>.dsc
sudo debsign /var/cache/pbuilder/result/<package>_<version>.changes
sudo dput ppa:techtonik/backports /var/cache/pbuilder/result/<package>_<version>.changes

UPD12 : ainda não consigo fazer o upload para o PPA. Primeiro foi Unable to find distroseries: unstable , porque eu especifiquei unstable em vez de saucy como UNRELEASED substituto. Após o repetido passo 11, ele reclamou com Already uploaded to ... , que foi curado com -f chave para dput . Agora, há um e-mail cujo upload foi rejeitado porque Source/binary (i.e. mixed) uploads are not allowed.

Em algum lugar do novo, é dito que precisei criar meu pacote com debuild -S , mas não sei como dizer isso para pbuilder .

UPD14 : parece que o culpado é dh-autoreconf package, que é necessário para a fonte de limpeza antes da compilação, mas ambos pbuilder e debuild ignoram esse fato e não conseguem recuperar . Instalando dh-autoreconf no sistema host permitido para construir o pacote fonte, assine e faça o upload mesmo sem pbuilder build.

cd <package>-<version>
debuild -S
cd ..
dput ppa:techtonik/backports <package>_<version>_source.changes

Feito.

    
por techtonik 27.12.2013 / 18:35

0 respostas