{"id":1556,"date":"2016-05-09T18:35:15","date_gmt":"2016-05-09T18:35:15","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/?p=1556"},"modified":"2016-05-10T05:41:54","modified_gmt":"2016-05-10T05:41:54","slug":"apt-dater-actualizaciones-multiples","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2016\/05\/09\/apt-dater-actualizaciones-multiples\/","title":{"rendered":"apt-dater: actualizaciones m\u00faltiples &#8230;"},"content":{"rendered":"<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:928,&quot;href&quot;:&quot;https:\\\/\\\/developer.gnome.org\\\/glib\\\/stable\\\/glib-Key-value-file-parser.html&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20210508162227\\\/https:\\\/\\\/developer.gnome.org\\\/glib\\\/stable\\\/glib-Key-value-file-parser.html&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 16:55:29&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 16:55:29&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:929,&quot;href&quot;:&quot;https:\\\/\\\/es.wikipedia.org\\\/wiki\\\/Ncurses&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20251123014937\\\/https:\\\/\\\/es.wikipedia.org\\\/wiki\\\/Ncurses&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 16:55:33&quot;,&quot;http_code&quot;:429}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 16:55:33&quot;,&quot;http_code&quot;:429},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:930,&quot;href&quot;:&quot;https:\\\/\\\/github.com\\\/DE-IBH\\\/apt-dater\\\/issues&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;},{&quot;id&quot;:931,&quot;href&quot;:&quot;https:\\\/\\\/joeyh.name\\\/code\\\/etckeeper&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260415165710\\\/https:\\\/\\\/joeyh.name\\\/code\\\/etckeeper\\\/&quot;,&quot;redirect_href&quot;:&quot;https:\\\/\\\/joeyh.name\\\/code\\\/etckeeper\\\/&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;}]'><\/div>\n<p>&#8230; con todo lo que eso conlleva.<\/p>\n<p><!--more--><\/p>\n<p>Aunque es un programa que ya empleo en mi trabajo, ahora me ha tocado usarlo en mis m\u00e1quinas, las propias y las ajenas, porque he alcanzado cierto grado de normalizaci\u00f3n en su administraci\u00f3n.<\/p>\n<h4>Requisitos<\/h4>\n<p>En todos los sistemas es necesario disponer de:<\/p>\n<ol>\n<li>Conexiones SSH.<\/li>\n<li>Mecanismo <a href=\"http:\/\/esferas.org\/msqlu\/2016\/04\/14\/sudo\/\">sudo<\/a> funcionando.<\/li>\n<li>Cuenta administrativa.<\/li>\n<\/ol>\n<p>Se designa entonces una m\u00e1quina desde la que efectuar las conexiones, un punto central, al que nos conectaremos para obtener la consola de control del programa.<\/p>\n<h4>En el servidor &#8230;<\/h4>\n<p>Se debe instalar el paquete <em>apt-dater<\/em> y proceder a su configuraci\u00f3n, siempre desde la cuenta administrativa. El programa no requiere valores globales y usa <code>$HOME\/.config\/apt-dater<\/code> como directorio de configuraci\u00f3n.<\/p>\n<p>All\u00ed tenemos que definir tres archivos; los dos primeros, <code>apt-dater.conf<\/code> y <code>hosts.conf<\/code> est\u00e1n en formato <a href=\"https:\/\/developer.gnome.org\/glib\/stable\/glib-Key-value-file-parser.html\">GKeyFile<\/a> mientras que el tercero depende de la versi\u00f3n del programa <em>screen<\/em>.<\/p>\n<p>Una vez creada la configuraci\u00f3n el programa es muy sencillo de usar: basta con invocarlo para que aparezca el men\u00fa.<\/p>\n<p><a href=\"http:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/05\/Captura-de-pantalla-de-2016-05-09-203059.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-1558\" src=\"http:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/05\/Captura-de-pantalla-de-2016-05-09-203059-300x180.png\" alt=\"apt-dater en acci\u00f3n\" width=\"300\" height=\"180\" srcset=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/05\/Captura-de-pantalla-de-2016-05-09-203059-300x180.png 300w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/05\/Captura-de-pantalla-de-2016-05-09-203059-768x460.png 768w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/05\/Captura-de-pantalla-de-2016-05-09-203059.png 894w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<h5>Configuraci\u00f3n<\/h5>\n<p>El archivo <code>apt-dater.conf<\/code> define varios aspectos de su funcionamiento y empleando la copia que se incluyen en su documentaci\u00f3n es m\u00e1s que suficiente para empezar a trabajar.<\/p>\n<p>Quiz\u00e1s sea interesante definir el auto refresco de los paquetes en caso de que est\u00e9n desactualizados porque en algunos casos he visto demasiadas llamadas a <code>apt-get update<\/code> que sobrecargan red y procesador.<\/p>\n<p>Ah, y tambi\u00e9n conviene echar un vistazo al juego de colores del interfaz (funciona bajo <a href=\"https:\/\/es.wikipedia.org\/wiki\/Ncurses\">ncurses<\/a>) y c\u00f3mo notificar avisos al operador.<\/p>\n<h5>Lista de m\u00e1quinas<\/h5>\n<p>Las m\u00e1quinas que se controlan desde el panel principal est\u00e1n definidas en el archivo <code>hosts.conf<\/code>. No es muy c\u00f3modo para trabajar porque el formato subyacente est\u00e1 pensado para pares clave-valor y en algunos casos termina siendo farragoso de utilizar.<\/p>\n<p>La idea\u00a0 es agrupar m\u00e1quinas bajo etiquetas que pueden tratarse como un todo en el panel de control. No admite m\u00e1s subniveles as\u00ed que es posible que para algunas redes se quede corto, a pesar de los mecanismos de b\u00fasqueda y marcado del panel que tambi\u00e9n dan juego.<\/p>\n<pre class=\"lang:default decode:true\">#\r\n#  [Customer Name]\r\n#  Hosts=([OptionalUser@]host.domain[:OptionalPort];)*\r\n#  [IdentityFile=path_to_identity_file]\r\n#\r\n\r\n[Propios]\r\nHosts=esferas.org;quark.taquiones.net:373;\\\r\n      spin.taquiones.net\r\n\r\n[Amigos]\r\nHosts=example.net:1048\r\n\r\n<\/pre>\n<p>Pues s\u00ed,\u00a0 es un poco pobre: lo m\u00e1s se puede incluir por grupo es un archivo de identidad con el que conectar, y si la lista de m\u00e1quinas es larga se tiene que jugar con roturas de l\u00ednea para evitar errores sint\u00e1cticos.<\/p>\n<h5>Conexiones<\/h5>\n<p>Antes de usarlo por primera vez es necesario crear un par de claves SSH (<code>ssh-keygen<\/code>) y transmitirlas a las cuentas cliente (<code>ssh-copy-id<\/code>). La gracia del asunto es conectarse sin contrase\u00f1as desde el panel de control as\u00ed que este paso es obligado.<\/p>\n<h4>En los clientes &#8230;<\/h4>\n<p>En las m\u00e1quinas subordinadas, secundarias o clientes, como se las quiera llamar, las operaciones que hay que realizar son las siguientes:<\/p>\n<ol>\n<li>Instalar el paquete <em>apt-dater-host<\/em>.<\/li>\n<li>Retocar la configuraci\u00f3n de <em>sudo<\/em> (archivo <code>\/etc\/sudoers.d\/apt-dater-host<\/code> que incluye el paquete) para que el grupo <em>adm<\/em> tenga acceso a varios programas sin precisar de contrase\u00f1a.<\/li>\n<li>A\u00f1adir la cuenta administrativa (<em>osr<\/em> en mi caso<em>)<\/em> al grupo <em>adm<\/em>.<\/li>\n<\/ol>\n<p>Los programas que necesita <em>apt-dater<\/em> para efectuar las actualizaciones son:<\/p>\n<pre class=\"lang:default decode:true\"># Keep apt-dater's MAINTAINER environment variable\r\nDefaults        env_keep += MAINTAINER\r\n\r\n# Allow members of group adm to execute the apt-get command\r\n%adm            ALL=NOPASSWD: \/usr\/bin\/apt-get,\/usr\/sbin\/needrestart\r\n<\/pre>\n<h5>Comentarios sobre el uso<\/h5>\n<p><em>apt-dater<\/em> no es tan completo como debiera. <a href=\"https:\/\/github.com\/DE-IBH\/apt-dater\/issues\">Su foro<\/a> est\u00e1 lleno de peticiones de mejoras que lo prueba y es verdad que tiene ciertas carencias, como un mejor uso de los paquetes retenidos, pero dispone de conexi\u00f3n directa con cada m\u00e1quina, registro de sesiones para ver los fallos y puede recabar bastante informaci\u00f3n sobre los sistemas.<\/p>\n<p>De ah\u00ed, por cierto, viene la recomendaci\u00f3n de emplear un paquete aparte para gestionar los nodos: hace m\u00e1s cosas que comunicarse con <em>apt<\/em>. Por ejemplo, se puede ver lo siguiente de una m\u00e1quina:<\/p>\n<p><a href=\"http:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/05\/Captura-de-pantalla-de-2016-05-09-204430.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-1561\" src=\"http:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/05\/Captura-de-pantalla-de-2016-05-09-204430-300x182.png\" alt=\"apt-dater: informaci\u00f3n de un host\" width=\"300\" height=\"182\" srcset=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/05\/Captura-de-pantalla-de-2016-05-09-204430-300x182.png 300w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/05\/Captura-de-pantalla-de-2016-05-09-204430-768x466.png 768w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/05\/Captura-de-pantalla-de-2016-05-09-204430.png 912w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Ah, y si se utiliza <a href=\"https:\/\/joeyh.name\/code\/etckeeper\/\">etckeeper<\/a> para mantener el directorio <em>\/etc<\/em> bajo control de <em>git<\/em> y, como en caso, prefiero que los cambios en \u00e9ste est\u00e9n registrados antes de cualquier instalaci\u00f3n o actualizaci\u00f3in, lo mejor es a\u00f1adir el programa a la lista de ejecutables sin contrase\u00f1a para el operador.<\/p>\n<p>Esto es, si en<code><em> \/etc\/etckeeper\/etckeeper.conf<\/em><\/code> est\u00e1 lo siguiente:<\/p>\n<pre class=\"lang:default decode:true\"># Uncomment to avoid etckeeper committing existing changes to \r\n# \/etc before installation. It will cancel the installation,\r\n# so you can commit the changes by hand.\r\nAVOID_COMMIT_BEFORE_INSTALL=1\r\n<\/pre>\n<p>es muy aconsejable que en <code>\/etc\/sudoers.d\/apt-dater-host<\/code> se a\u00f1ada \u00e9sto otro:<\/p>\n<pre class=\"lang:default decode:true\"># Allow members of group adm to execute the apt-get command\r\n%adm            ALL=NOPASSWD: \/usr\/bin\/apt-get,\/usr\/sbin\/needrestart,\\\r\n                                \/usr\/bin\/etckeeper\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; con todo lo que eso conlleva.<\/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":[2],"tags":[18,585,41,586,93],"class_list":["post-1556","post","type-post","status-publish","format-standard","hentry","category-software","tag-administracion-de-sistemas","tag-apt-dater","tag-debian","tag-etckeeper","tag-ssh"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/1556","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=1556"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/1556\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=1556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=1556"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=1556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}