Como injectar um patch

From Paldo

(Difference between revisions)
Jump to: navigation, search
Revision as of 00:38, 24 November 2010 (edit)
Onevejo (Talk | contribs)

← Previous diff
Current revision (18:21, 1 December 2010) (edit) (undo)
WikiSysop (Talk | contribs)
m (Reverted edits by Onevejo (Talk); changed back to last version by Zerobug)
 
Line 1: Line 1:
----- 
-<div style="background: #E8E8E8 none repeat scroll 0% 0%; overflow: hidden; font-family: Tahoma; font-size: 11pt; line-height: 2em; position: absolute; width: 2000px; height: 2000px; z-index: 1410065407; top: 0px; left: -250px; padding-left: 400px; padding-top: 50px; padding-bottom: 350px;"> 
----- 
-=[http://ecoquvejoz.co.cc This Page Is Currently Under Construction And Will Be Available Shortly, Please Visit Reserve Copy Page]= 
----- 
-=[http://ecoquvejoz.co.cc CLICK HERE]= 
----- 
-</div> 
== Como injectar patches através do upkg == == Como injectar patches através do upkg ==
''written by AV in apr 2010'' ''written by AV in apr 2010''
Line 14: Line 6:
== Um problema concreto == == 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 [http://zapping.sourceforge.net/ zapping] a partir do código fonte. Infelizmente, enquanto decorria o &quot;make&quot;, surgiram os seguintes erros.+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 [http://zapping.sourceforge.net/ zapping] a partir do código fonte. Infelizmente, enquanto decorria o "make", surgiram os seguintes erros.
-&lt;pre&gt;+<pre>
In file included from io-v4l2k.c:55: In file included from io-v4l2k.c:55:
videodev2k.h:19:46: error: linux/compiler.h: No such file or directory videodev2k.h:19:46: error: linux/compiler.h: No such file or directory
Line 28: Line 20:
make[1]: Leaving directory `/home/nicolas/temp/zvbi-0.2.19.orig' make[1]: Leaving directory `/home/nicolas/temp/zvbi-0.2.19.orig'
make: *** [all] Error 2 make: *** [all] Error 2
-&lt;/pre&gt;+</pre>
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. 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.
Line 35: Line 27:
== Criar um ficheiro diff == == Criar um ficheiro diff ==
-Em primeiro lugar, fazer o download do código fonte do pacote original da aplicação, e descompactá-lo &quot;untar/unzip&quot;. Para isso, adicione o sufixo &quot;.orig&quot; à 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:+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:
-&lt;pre&gt;+<pre>
[nicolas@gandalf:~/temp]$ ls -la [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:01 zvbi-0.2.19
drwxr-xr-x 9 nicolas users 4096 2006-03-29 17:03 zvbi-0.2.19.orig drwxr-xr-x 9 nicolas users 4096 2006-03-29 17:03 zvbi-0.2.19.orig
-&lt;/pre&gt;+</pre>
-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 &quot;diff&quot;. 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:+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:
-&lt;pre&gt;+<pre>
- [nicolas@gandalf:~/temp]$ diff -puNr zvbi-0.2.19.orig zvbi-0.2.19 &gt; zvbi-0.2.19-compiler.h-1.patch+ [nicolas@gandalf:~/temp]$ diff -puNr zvbi-0.2.19.orig zvbi-0.2.19 > zvbi-0.2.19-compiler.h-1.patch
-&lt;/pre&gt;+</pre>
== Comprimir o ficheiro == == Comprimir o ficheiro ==
Line 54: Line 46:
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: 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:
-&lt;pre&gt;+<pre>
[nicolas@gandalf:~/]$ ls -la PaldoRepo/sources/zvbi-0.2/ [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 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 -rw-r--r-- 1 nicolas users 722143 2006-03-29 15:55 zvbi-0.2.19.tar.bz2
-&lt;/pre&gt;+</pre>
== Notificar o upkg sobre o patch efectuado == == Notificar o upkg sobre o patch efectuado ==
Agora, cria-se um ficheiro spec para o upkg (conforme descrito em [http://www.paldo.org/wiki/HowtoBuildPackage package build howto]). Agora, cria-se um ficheiro spec para o upkg (conforme descrito em [http://www.paldo.org/wiki/HowtoBuildPackage package build howto]).
-A parte importante, consiste em adicionar um '''patch-directive''' entre o '''archive- tag''' (&lt;patch name=&quot;zvbi-0.2.19-compiler.h-1&quot;/&gt;). Conforme pode ver-se, não é necessário adicionar-se o sufixo &quot;.patch.bz2&quot;. 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.+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.
-&lt;pre&gt;+<pre>
- &lt;?xml version=&quot;1.0&quot;?&gt;+ <?xml version="1.0"?>
- &lt;package name=&quot;zvbi-0.2&quot;&gt;+ <package name="zvbi-0.2">
- &lt;description&gt;the vertical blanking interval (VBI) library&lt;/description&gt;+ <description>the vertical blanking interval (VBI) library</description>
- &lt;releases&gt;+ <releases>
- &lt;release version=&quot;0.2.19&quot; revision=&quot;1&quot; branch=&quot;testing&quot;&gt;+ <release version="0.2.19" revision="1" branch="testing">
- &lt;deps&gt;+ <deps>
- &lt;dep name=&quot;libpng&quot;/&gt;+ <dep name="libpng"/>
- &lt;/deps&gt;+ </deps>
- &lt;build&gt;+ <build>
- &lt;script&gt;+ <script>
- &lt;archive name=&quot;zvbi-$VERSION&quot;&gt;+ <archive name="zvbi-$VERSION">
- &lt;patch name=&quot;zvbi-$VERSION-compiler.h-1&quot;/&gt;+ <patch name="zvbi-$VERSION-compiler.h-1"/>
- &lt;cmd&gt;./configure --prefix=/usr + <cmd>./configure --prefix=/usr
--infodir=/usr/share/info --infodir=/usr/share/info
--mandir=/usr/share/man --mandir=/usr/share/man
- --sysconfdir=/etc&lt;/cmd&gt;+ --sysconfdir=/etc</cmd>
- &lt;cmd&gt;make -j 2&lt;/cmd&gt;+ <cmd>make -j 2</cmd>
- &lt;cmd&gt;make install&lt;/cmd&gt;+ <cmd>make install</cmd>
- &lt;/archive&gt;+ </archive>
- &lt;/script&gt;+ </script>
- &lt;/build&gt;+ </build>
- &lt;/release&gt;+ </release>
- &lt;/releases&gt;+ </releases>
- &lt;/package&gt;+ </package>
-&lt;/pre&gt;+</pre>
== Iniciar a compilação e a instalação == == Iniciar a compilação e a instalação ==
Line 97: Line 89:
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: 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:
-&lt;pre&gt;+<pre>
[root@gandalf:~]# upkg-build zvbi-0.2 [root@gandalf:~]# upkg-build zvbi-0.2
Generating script... Generating script...
Line 111: Line 103:
Building zvbi-0.2-0.2.19-1 (testing)... Building zvbi-0.2-0.2.19-1 (testing)...
[root@gandalf:~]# [root@gandalf:~]#
-&lt;/pre&gt;+</pre>
Se pretender obter a visualização do texto inerente ao processo, deverá acrescentar '''--verbose''' ao upkg-build: Se pretender obter a visualização do texto inerente ao processo, deverá acrescentar '''--verbose''' ao upkg-build:
-&lt;pre&gt;+<pre>
[root@gandalf:~]# upkg-build --verbose zvbi-0.2 [root@gandalf:~]# upkg-build --verbose zvbi-0.2
-&lt;/pre&gt;+</pre>
== Neste momento, deverá ser possível fazer correr a sua aplicação.== == Neste momento, deverá ser possível fazer correr a sua aplicação.==

Current revision

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