{"id":92,"date":"2013-12-30T17:00:00","date_gmt":"2013-12-30T17:00:00","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/2013\/12\/30\/ampliando-debianrules\/"},"modified":"2013-12-30T17:00:00","modified_gmt":"2013-12-30T17:00:00","slug":"ampliando-debianrules","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2013\/12\/30\/ampliando-debianrules\/","title":{"rendered":"Ampliando debian\/rules &#8230;"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"debian-logo\" src=\"https:\/\/esferas.org\/mt\/msqlu\/logos\/openlogo-100.png\" class=\"mt-image-left\" style=\"float: left; margin: 0 20px 20px 0;\" height=\"123\" width=\"100\" \/>&#8230; y aprovechando mejor su potencial sin liarla en exceso.<\/p>\n<\/p>\n<p><!--more--><\/p>\n<p>Supongamos que estamos construyendo un paquete Debian que incluye un par de archivos de control de servicios (los t\u00edpicos bajo <em>\/etc\/init.d\/<\/em>) y otro par de configuraciones para el rotador de registros (\u00e9stos bajo <em>\/etc\/logrotate.d<\/em>) y que queremos hacerlo seg\u00fan la normativa Debian.<\/p>\n<p>Si constru\u00edmos el armaz\u00f3n de archivos bajo <em>debian\/<\/em> empleando <em>dh_make<\/em> obtendremos directamente un archivo Make de construcci\u00f3n del proyecto con el nombre <em>debian\/rules<\/em> y que tiene el siguiente aspecto:\u00a0<\/p>\n<pre><span style=\"color: #696969;\">#!\/usr\/bin\/make -f<\/span>\n\n<span style=\"color: #004a43;\">%<\/span><span style=\"color: #800000; font-weight: bold;\">:<\/span>\n<span style=\"font-weight: bold; font-style: italic;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span>dh <span style=\"color: #797997;\">$@<\/span>\n<\/pre>\n<p>Muy pelado, \u00bf verdad ? Pues funciona de maravilla. No en vano el autor es <a href=\"http:\/\/joeyh.name\/\">Joey Hess, <\/a>el creador del famoso <a href=\"http:\/\/joeyh.name\/code\/ikiwiki\/\">ikiwiki<\/a> que yo empleaba antes. Es muy buen programador y comprende bastante bien c\u00f3mo funciona Debian y su sistema de empaquetado. Y hasta aqu\u00ed la publicidad, ahora vamos con el caso real de antes.<\/p>\n<p>El programa <em>dh<\/em> llama por orden a todos los dem\u00e1s para realizar la construcci\u00f3n y el empaquetado final, pero los llama con los par\u00e1metros predeterminados y \u00e9stos, en este caso concreto, se quedan cortos. \u00bf Por qu\u00e9 ? Pues porque s\u00f3lo est\u00e1n pensados para instalar un componente por vez.<\/p>\n<p>Por ejemplo el instalador de servicios <em>dh_installinit<\/em> busca dentro de <em>debian\/<\/em> un archivo para el servicio y otro para los valores predeterminados. El primero debe estar nombrado como <strong>debian\/paquete.init<\/strong> que situar\u00e1 en <strong>\/etc\/init.d\/paquete<\/strong> mientras que el segundo tendr\u00e1 como m\u00e1scara <strong>debian\/paquete.default<\/strong> e ir\u00e1 en <strong>\/etc\/default\/paquete<\/strong>. \u00bf Y si hay m\u00e1s ? No, no puede haber m\u00e1s con ese m\u00e9todo de nombrado. Tendremos que invocar al componente <em>debhelper<\/em> directamente para afinar m\u00e1s.<\/p>\n<p>Para estos casos el componente <em>dh_installlogrotate<\/em> acepta un par\u00e1metro llamado <em>&#8211;name nombre<\/em> que le indica que busque el servicio como <strong>debian\/paquete.nombre.init<\/strong> y lo instale como <strong>\/etc\/init.d\/nombre<\/strong>. Con los valores predeterminados otro tanto: busca <strong>debian\/paquete.nombre.default<\/strong> y lo instala como <strong>\/etc\/default\/nombre<\/strong>. Y ya que es posible llamarlo varias veces podremos resolver el problema de tener varios archivos de servicio, varias rotaciones de registros o varios lo que sea en el mismo paquete.<\/p>\n<p>\u00bf C\u00f3mo definir en el archivo <em>debian\/rules<\/em> lo que queremos hacer ? F\u00e1cil. Basta con especificar un objetivo especial que sustituya (<em>override<\/em>) la fase en la que queremos actuar.<\/p>\n<p>Pongo un ejemplo porque es trivial una vez que se ve:<\/p>\n<pre><span style=\"color: #696969;\">#!\/usr\/bin\/make -f<\/span>\n\n<span style=\"color: #004a43;\">%<\/span><span style=\"color: #800000; font-weight: bold;\">:<\/span>\n\tdh <span style=\"color: #797997;\">$@<\/span> \n\n<span style=\"color: #e34adc;\">override_dh_installinit<\/span><span style=\"color: #800000; font-weight: bold;\">:<\/span>\n\tdh_installinit --name demonio1 \n\tdh_installinit --name demonio2 \n\n<span style=\"color: #e34adc;\">override_dh_installlogrotate<\/span><span style=\"color: #800000; font-weight: bold;\">:<\/span>\n\tdh_installlogrotate --name demonio1 \n\tdh_installlogrotate --name demonio2\n<\/pre>\n<p>Sencillo y limpio. Otra cosa es que una vez instalados funcionen, pero eso, como dicen, es otra historia &#8230;<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; y aprovechando mejor su potencial sin liarla en exceso.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"1","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[6],"tags":[155],"class_list":["post-92","post","type-post","status-publish","format-standard","hentry","category-debian","tag-debhelper"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/92","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=92"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/92\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=92"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=92"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=92"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}