{"id":2802,"date":"2016-05-07T20:05:57","date_gmt":"2016-05-07T18:05:57","guid":{"rendered":"http:\/\/www.anadebreuil.org\/blog\/?p=2802"},"modified":"2020-03-01T23:02:17","modified_gmt":"2020-03-01T22:02:17","slug":"preparar-para-un-parche-para-fichero-spec","status":"publish","type":"post","link":"https:\/\/www.anadebreuil.org\/blog\/?p=2802","title":{"rendered":"Preparar para un parche para fichero SPEC"},"content":{"rendered":"<p>Dentro de la tareas de preparar un paquete RPM mediante la creaci\u00f3n del fichero SPEC que define los pasos necesarios para compilar correctamente un c\u00f3digo, est\u00e1 la de preparar y aplicar parches al c\u00f3digo original para que se adapte bien a nuestro sistema. Esta \u00abchuleta\u00bb resumen los pasos y sintaxis necesarios. Para obtener una descripci\u00f3n detallada de c\u00f3mo preparar un fichero SPEC recomiendo consultar el <a href=\"https:\/\/fedoraproject.org\/wiki\/How_to_create_an_RPM_package\/es\">manual de Fedora<\/a>.<!--more--><\/p>\n<h4>Preparar el parche<\/h4>\n<pre><code>$ tar xvzf <em>example-1.0.0.tar.gz<\/em>\r\n$ mv <em>example-1.0.0<\/em> <em>example-1.0.0-orig<\/em>\r\n$ tar xvzf <em>example-1.0.0.tar.gz<\/em><\/code><\/pre>\n<p>Haz los cambios que quieras realizar en los ficheros del directorio <em>name-version<\/em>. Al acabar se prepara el parche con el comando:<\/p>\n<pre><code>$ diff -uNr <em>example-1.0.0-orig<\/em> <em>example-1.0.0<\/em> &gt; <strong>a-patch-name.patch<\/strong><\/code><\/pre>\n<h4>Aplicar manualmente el parche<\/h4>\n<p>Suponiendo que los ficheros <em>example-1.0.0.tar.gz<\/em> y <em>a-patch-name.patch<\/em> residen en el mismo directorio:<\/p>\n<pre><code>$ tar xvzf <em>example-1.0.0.tar.gz<\/em>\r\n$ cd example-1.0.0\r\n$ patch -p1 &lt; <strong>..\/a-patch-name.patch<\/strong><\/code><\/pre>\n<h4>Especificar el parche en el fichero SPEC<\/h4>\n<p>En el fichero Spec incluiremos el parche mediante la etiqueta <em>Patch:<\/em> y en la secci\u00f3n donde se dan las instrucciones de preparaci\u00f3n del directorio de compilaci\u00f3n del c\u00f3digo, se indica que se aplique el c\u00f3digo. Por ejemplo, el fichero <em>example.spec<\/em> podr\u00eda contener algo como esto:<\/p>\n<pre><code><span style=\"color: #800000;\">Name:<\/span> example\r\n<span style=\"color: #800000;\">Version:<\/span> 1.0.0\r\n...\r\n<span style=\"color: #800000;\">Patch:<\/span> <strong>a-patch-name.patch<\/strong>\r\n\r\n<span style=\"color: #008000;\">%description<\/span>\r\nBla, bla.\r\n\r\n<span style=\"color: #008000;\"><strong>%prep<\/strong><\/span>\r\n%setup -q\r\n%patch -p1\r\n...<\/code><\/pre>\n<h4>Especificar varios parches en el fichero SPEC<\/h4>\n<pre><code><span style=\"color: #800000;\">Name:<\/span> example\r\n<span style=\"color: #800000;\">Version:<\/span> 1.0.0\r\n...\r\n<span style=\"color: #800000;\">Patch0:<\/span> <strong>a-patch-name-1.patch<\/strong>\r\n<span style=\"color: #800000;\">Patch1:<\/span> <strong>a-patch-name-2.patch<\/strong>\r\n\r\n<span style=\"color: #008000;\">%description<\/span>\r\nBla, bla.\r\n\r\n<span style=\"color: #008000;\"><strong>%prep<\/strong><\/span>\r\n%setup -q\r\n%patch0 -p1\r\n%patch1 -p1\r\n...<\/code><\/pre>\n<h4>Aplicar todos los parches del fichero SPEC<\/h4>\n<p>Podr\u00edamos aplicarlo uno a uno con el comando <em>patch<\/em>. Pero la forma m\u00e1s r\u00e1pida ser\u00e1 utilizar el propio fichero SPEC y el comando <em>rpmbuild<\/em> para que el mismo aplique los parches conforme indique la secci\u00f3n <em>%prep<\/em>.<\/p>\n<pre><code>$ rpmbuild -bp example.spec<\/code><\/pre>\n<p>Y el c\u00f3digo, descomprimido y parcheado quedar\u00e1 (normalmente) en el directorio<\/p>\n<ul><em>$HOME\/rpmbuild\/BUILD\/example-1.0.0<\/em><\/ul>\n<p>aunque esta es ruta se puede configurar en el equipo de desarrollo y en el propio fichero SPEC.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dentro de la tareas de preparar un paquete RPM mediante la creaci\u00f3n del fichero SPEC que define los pasos necesarios para compilar correctamente un c\u00f3digo, est\u00e1 la de preparar y aplicar parches al&#8230;<\/p>\n","protected":false},"author":1,"featured_media":2839,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[68],"tags":[96,97,95,99,98],"class_list":["post-2802","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chuletas","tag-diff","tag-patch","tag-rpm","tag-rpmbuild","tag-spec"],"_links":{"self":[{"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2802","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2802"}],"version-history":[{"count":36,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2802\/revisions"}],"predecessor-version":[{"id":2838,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2802\/revisions\/2838"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/media\/2839"}],"wp:attachment":[{"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2802"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2802"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2802"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}