Como injectar um patch

From Paldo

Jump to: navigation, search

Contents

[edit] Como injectar patches através do upkg

written by AV in apr 2010

[edit] Abstracto

Este tutorial irá ajudá-lo a aplicar um patch a um pacote em código fonte utilizando upkg. Upkg é o gestor de pacotes e o sistema de construção utilizado no Paldo Linux distribution.

[edit] Um problema concreto

Tenho uma placa PCI TV no meu computador, com o Paldo instalado. Infelizmente, o repositório principal do Paldo, não tem nenhuma aplicação Gnome, específica para TV. (Eu não quero utilizar o MythTV apenas para assistir a programas de TV) Por este motivo, decidi construir zapping a partir do código fonte. Infelizmente, enquanto decorria o "make", surgiram os seguintes erros.

    In file included from io-v4l2k.c:55:
    videodev2k.h:19:46: error: linux/compiler.h: No such file or directory
    make[4]: *** [io-v4l2k.lo] Error 1
    make[4]: Leaving directory `/home/nicolas/temp/zvbi-0.2.19.orig/src'
    make[3]: *** [all-recursive] Error 1
    make[3]: Leaving directory `/home/nicolas/temp/zvbi-0.2.19.orig/src'
    make[2]: *** [all] Error 2
    make[2]: Leaving directory `/home/nicolas/temp/zvbi-0.2.19.orig/src'
    make[1]: *** [all-recursive] Error 1
    make[1]: Leaving directory `/home/nicolas/temp/zvbi-0.2.19.orig'
    make: *** [all] Error 2

Uma forma simples de tornear, seria descomentar a linha que incluia linux/compiler.h. No entanto, nós gostaríamos de fazer o upload para o repositório do Paldo, dos pacotes com o código fonte originários. É por esse motivo que o upkg é capaz de aplicar um patch, no decurso de um processo de construção. Vidé a forma como pode criar-se um patch e aplicá-lo num spec file do upkg.

Leia package build howto, no caso de pretender obter uma visão geral sobre a forma como o upkg funciona.

[edit] Criar um ficheiro diff

Em primeiro lugar, fazer o download do código fonte do pacote original da aplicação, e descompactá-lo "untar/unzip". Para isso, adicione o sufixo ".orig" à pasta e faça uma cópia da totalidade da pasta, sem incluir esse sufixo. Depois disso, o seu directório ficará com o seguinte aspecto:

    [nicolas@gandalf:~/temp]$ ls -la
    [...]
    drwxr-xr-x  9 nicolas users   4096 2006-03-29 17:01 zvbi-0.2.19
    drwxr-xr-x  9 nicolas users   4096 2006-03-29 17:03 zvbi-0.2.19.orig

De seguida, vá para a pasta-de-trabalho (aquela que não tem o sufixo) e corriga o/os bugs. epois disso, esta fase fica concluída. Saia da pasta-de-trabalho e crie um ficheiro-diff, usando o comando "diff". No meu exemplo, foi necessário alterar o ficheiro videodev2k.h porque o mesmo se encontra também na pasta src da minha pasta-de-trabalho (zvbi-0.2.19/src/videodev2k.h). Agora, cria-se um ficheiro-diff, utilizando o seguinte comando:

    [nicolas@gandalf:~/temp]$ diff -puNr zvbi-0.2.19.orig zvbi-0.2.19 > zvbi-0.2.19-compiler.h-1.patch

[edit] Comprimir o ficheiro

Agora, utilizar bzip2 para comprimir o(s) patche(s) obtido(s), e em seguida copie o pacote em código fonte original (upstream) e o ficheiro patch comprimido, para dentro do seu repositório. epois disso, a pasta do meu repositório ficou com o seguinte aspecto:

    [nicolas@gandalf:~/]$ ls -la PaldoRepo/sources/zvbi-0.2/
    [...]
    -rw-r--r-- 1 nicolas users    344 2006-03-29 16:30 zvbi-0.2.19-compiler.h-1.patch.bz2
    -rw-r--r-- 1 nicolas users 722143 2006-03-29 15:55 zvbi-0.2.19.tar.bz2

[edit] Notificar o upkg sobre o patch efectuado

Agora, cria-se um ficheiro spec para o upkg (conforme descrito em package build howto). A parte importante, consiste em adicionar um patch-directive entre o archive- tag (<patch name="zvbi-0.2.19-compiler.h-1"/>). Conforme pode ver-se, não é necessário adicionar-se o sufixo ".patch.bz2". Neste caso, o upkg irá procurar um ficheiro denominado zvbi-0.2.19-compiler.h-1.patch.bz2 e automaticamente, aplicá-lo-á durante o processo de construção.

    <?xml version="1.0"?>
    <package name="zvbi-0.2">
          <description>the vertical blanking interval (VBI) library</description>
          <releases>
                  <release version="0.2.19" revision="1" branch="testing">
                          <deps>
                            <dep name="libpng"/>
                          </deps>
                          <build>
                                  <script>
                                          <archive name="zvbi-$VERSION">
                                                  <patch name="zvbi-$VERSION-compiler.h-1"/>
                                                  <cmd>./configure --prefix=/usr 
                                                                   --infodir=/usr/share/info 
                                                                   --mandir=/usr/share/man 
                                                                   --sysconfdir=/etc</cmd>
                                                  <cmd>make -j 2</cmd>
                                                  <cmd>make install</cmd>
                                          </archive>
                                  </script>
                          </build>
                  </release>
          </releases>
    </package>

[edit] Iniciar a compilação e a instalação

Neste momento, estamos em condições para compilar e instalar a nossa aplicação. O patch, irá ser adicionado automaticamente, durante esse processo. The patch will automatically be added during this process. O seguinte comando irá invocar tudo o que irá acontecer:

    [root@gandalf:~]# upkg-build zvbi-0.2
    Generating script...
    Writing script...
    Executing script...
    The following extra packages will be installed:
    zvbi-0.2

    The following packages will be built from source:
    zvbi-0.2

    Do you want to continue? [Y/n]
    Building zvbi-0.2-0.2.19-1 (testing)...
    [root@gandalf:~]#

Se pretender obter a visualização do texto inerente ao processo, deverá acrescentar --verbose ao upkg-build:

    [root@gandalf:~]# upkg-build --verbose zvbi-0.2

[edit] Neste momento, deverá ser possível fazer correr a sua aplicação.

Ficheiros de Registo do upkg-build

Se pretender ver na totalidade, aquilo que foi feito pelo upkg, verifique o ficheiro /var/lib/upkg/logs/PACKAGE-VERSION.log.bz2. No meu caso, é aí que se encontram todos os passos seguidos pelo upkg, em /var/lib/upkg/logs/zvbi-0.2-x86-glibc-2.4-gcc-4.1-1-0.2.19-1.log.bz2

Personal tools