{"id":744,"date":"2015-04-26T05:31:02","date_gmt":"2015-04-26T05:31:02","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/?p=744"},"modified":"2015-04-26T05:31:02","modified_gmt":"2015-04-26T05:31:02","slug":"empleando-run-parts-en-paquetes-de-la-empresa","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2015\/04\/26\/empleando-run-parts-en-paquetes-de-la-empresa\/","title":{"rendered":"Empleando run-parts en paquetes de la empresa"},"content":{"rendered":"<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:1091,&quot;href&quot;:&quot;http:\\\/\\\/manpages.debian.org\\\/cgi-bin\\\/man.cgi?query=run-parts&amp;apropos=0&amp;sektion=0&amp;manpath=Debian+7.0+wheezy&amp;format=html&amp;locale=en&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;https:\\\/\\\/manpages.debian.org\\\/cgi-bin\\\/man.cgi?query=run-parts&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1092,&quot;href&quot;:&quot;https:\\\/\\\/astillas.net\\\/wiki\\\/Run-parts&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;}]'><\/div>\n<p>Llevo ya unos doce paquetes Debian escritos expresamente para funcionar en los servidores y los puestos de trabajo de la empresa; he llegado a crear un peque\u00f1o \u00e1rbol de dependencias entre ellos persiguiendo siempre la finalidad de automatizar todo lo posible la configuraci\u00f3n de los puestos de trabajo.<\/p>\n<p class=\"wp-more-tag mce-wp-more\" title=\"Leer m\u00e1s...\" data-wp-more=\"more\" data-wp-more-text=\"\" data-mce-placeholder=\"1\"><!--more--><\/p>\n<p class=\"wp-more-tag mce-wp-more\" title=\"Leer m\u00e1s...\" data-wp-more=\"more\" data-wp-more-text=\"\" data-mce-placeholder=\"1\">Uno de los problemas m\u00e1s urgentes con los que me encontrado es que pr\u00e1cticamente todos los paquetes terminan creando o incluyen directorios y archivos que deben ser accesibles, entre otras caracter\u00edsticas, al grupo de usuarios de la empresa.<\/p>\n<p class=\"wp-more-tag mce-wp-more\" title=\"Leer m\u00e1s...\" data-wp-more=\"more\" data-wp-more-text=\"\" data-mce-placeholder=\"1\">Este grupo de usuarios est\u00e1 definido en un directorio LDAP central y ya ha sufrido al menos un cambio de nombre.\u00a0 Con esto quiero decir que no se puede simplemente indicar el nombre durante la construcci\u00f3n del paquete; primero porque en la m\u00e1quina de desarrollo no tiene por qu\u00e9 existir y segundo porque puede cambiar en el futuro y lo peor que puede pasarme es tener que reconstruir todos los paquetes de nuevo cada vez que ocurra.<\/p>\n<p class=\"wp-more-tag mce-wp-more\" title=\"Leer m\u00e1s...\" data-wp-more=\"more\" data-wp-more-text=\"\" data-mce-placeholder=\"1\">Para resolverlo se me ocurri\u00f3 crear un paquete muy b\u00e1sico llamado <em>empresa-common<\/em> del que dependiesen los dem\u00e1s y que proporcionase unas funciones <em>bash<\/em> simples que se llamasen en la parte de configuraci\u00f3n del mismo.<\/p>\n<p class=\"wp-more-tag mce-wp-more\" title=\"Leer m\u00e1s...\" data-wp-more=\"more\" data-wp-more-text=\"\" data-mce-placeholder=\"1\">Algo como lo que muestro en el siguiente ejemplo del archivo <em>debian\/postinst<\/em>:<\/p>\n<pre># Cargamos funciones \r\n. \/etc\/empresa\/lib\/patches.sh\r\n\r\ncase \"$1\" in\r\n    configure)\r\n        # Ejecutamos sistema de parches \r\n        $EMPRESA_PATCHES\r\n    ;;\r\n... \r\n  \r\n<\/pre>\n<p>El <em>script<\/em> define el contenido de la variable <em>$EMPRESA_PATCHES<\/em> como lo siguiente:<\/p>\n<pre>PATCHES=\/usr\/share\/empresa\/patches \r\n\r\nEMPRESA_PATCHES=\"run-parts --report --lsbsysinit ${PATCHES}\"\r\n\r\n<\/pre>\n<p>de manera que ejecutamos <em>run-parts<\/em> sobre un directorio al que todos los paquetes pueden a\u00f1adir algo, y que realiza estas tareas justo cuando todo el contenido del paquete est\u00e1 ya disponible en el sistema de archivos.<\/p>\n<p>El primer parche se limita a buscar el directorio de configuraci\u00f3n base de todos mis paquetes en <em>\/etc\/empresa<\/em> aquellos archivos que no tienen el grupo propietario correcto y lo cambia sin m\u00e1s al grupo adecuado. \u00c9ste, incluso, puede ser descargado en tiempo de instalaci\u00f3n de otra fuente para no tener que reconstruir ning\u00fan otro paquete.<\/p>\n<p>\u00bf Qu\u00e9 ocurre si un paquete en concreto precisa que exista un archivo dentro de <em>\/etc\/empresa<\/em> con una propiedad totalmente distinta ? Bueno, aunque es un caso extra\u00f1o se puede dar, y para eso puede incluir un parche concreto con un n\u00famero como nombre m\u00e1s alto (el noventa y nueve es una buena elecci\u00f3n) que se asegure de efectuar los cambios que necesite. Incluso si posteriormente se instala otro paquete y se vuelven a aplicar los parches el resultado deber\u00eda ser el mismo ya que mientras el paquete que precisa los cambios espec\u00edficos est\u00e9 instalado lo estar\u00e1 tambi\u00e9n su parche.<\/p>\n<h4>Enlaces y referencias<\/h4>\n<ul>\n<li>La <a href=\"http:\/\/manpages.debian.org\/cgi-bin\/man.cgi?query=run-parts&amp;apropos=0&amp;sektion=0&amp;manpath=Debian+7.0+wheezy&amp;format=html&amp;locale=en\">p\u00e1gina<\/a> de manual de run-parts<\/li>\n<li>Mis <a href=\"https:\/\/astillas.net\/wiki\/Run-parts\">apuntes<\/a> sobre run-parts<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Llevo ya unos doce paquetes Debian escritos expresamente para funcionar en los servidores y los puestos de trabajo de la empresa; he llegado a crear un peque\u00f1o \u00e1rbol de dependencias entre ellos persiguiendo siempre la finalidad de automatizar todo lo posible la configuraci\u00f3n de los puestos de trabajo.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","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":[18,16,52,468],"class_list":["post-744","post","type-post","status-publish","format-standard","hentry","category-debian","tag-administracion-de-sistemas","tag-desarrollo","tag-mi-lugar-de-trabajo","tag-run-parts"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/744","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=744"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/744\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}