<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-8804953694443657519</atom:id><lastBuildDate>Sat, 12 Oct 2024 22:36:33 +0000</lastBuildDate><category>docker</category><category>mysql</category><category>Linux</category><category>AIX alt_disk_install command comando clon storage rootvg instalación installation backup</category><category>Virtualizacion</category><category>AIX</category><category>AIX IPL pSeries RS/6000 error codes</category><category>AIX administración Unix update parches fix pSeries compid ibm support</category><category>AIX administración Unix update parches fix pSeries suma</category><category>AIX hdiskpower alt_disk_install</category><category>AIX odm pSeries POWER bootlist bosboot</category><category>AIX pSeries storage almacenamiento lvm</category><category>AIX ssh PAM</category><category>AIX volume group ibm chvg pSeries</category><category>IBM aix resources ftp free software download</category><category>aix linux tcpdump lsof networking</category><category>autofs</category><category>bash</category><category>c# development programación office</category><category>docker container</category><category>docker volume</category><category>inspect</category><category>json</category><category>nfs</category><category>smb samba linux public password share</category><category>tty</category><category>ubuntu. ipv6</category><category>unix</category><category>wordpress</category><title>Administración de sistemas</title><description></description><link>http://osadmin.blogspot.com/</link><managingEditor>noreply@blogger.com (Jose Fco. Hidalgo)</managingEditor><generator>Blogger</generator><openSearch:totalResults>40</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-6547221209177660782</guid><pubDate>Thu, 21 Jul 2016 09:21:00 +0000</pubDate><atom:updated>2016-07-21T02:21:39.144-07:00</atom:updated><title>Secuencia de arranque con systemctl</title><description>
&lt;b&gt;systemctl&lt;/b&gt; ha llegado a Linux envuelto en polémica. En la evolución de este sistema operativo ya hemos vivido episodios similares. Yo creo que como suele ocurrir, ha venido para quedarse.&lt;br&gt;

Ya que tenemos que lidiar con él vamos a sacarle algún partido extra que justifique el &quot;trago&quot;.&lt;br&gt;

&lt;br&gt;
&lt;b&gt;Ubicación de la configuración&lt;/b&gt;
&lt;br&gt;
Lo que antes buscabas en tu &lt;b&gt;/etc/rcX.d&lt;/b&gt; ya no está. Tampoco te funciona &quot;&lt;b&gt;/etc/init.d/servicioX start&lt;/b&gt;&quot;. Eso ha cambiado y hay una nueva ubicación y un sistema de dependencias en el arranque diferente. Si eres de los míos y quieres saber donde se esconde y qué forma tiene la configuración aquí tienes algunas indicaciones:
&lt;br&gt;
&lt;pre&gt;

# ls -al /etc/systemd/system/
total 12
drwxr-xr-x. 10 root root 4096 jul 21 10:40 .
drwxr-xr-x.  4 root root 4096 abr 25 13:35 ..
drwxr-xr-x.  2 root root   30 jul 21 10:40 basic.target.wants
lrwxrwxrwx.  1 root root   46 abr 25 13:28 dbus-org.freedesktop.NetworkManager.service -&gt; /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx.  1 root root   57 abr 25 13:28 dbus-org.freedesktop.nm-dispatcher.service -&gt; /usr/lib/systemd/system/NetworkManager-dispatcher.service
lrwxrwxrwx.  1 root root   37 abr 25 13:29 default.target -&gt; /lib/systemd/system/multi-user.target
drwxr-xr-x.  2 root root   85 abr 25 13:28 default.target.wants
drwxr-xr-x.  2 root root   31 abr 25 13:28 getty.target.wants
drwxr-xr-x.  2 root root 4096 may 18 13:59 multi-user.target.wants
drwxr-xr-x.  2 root root   30 may 18 13:59 remote-fs.target.wants
drwxr-xr-x.  2 root root   75 may 18 13:59 sockets.target.wants
drwxr-xr-x.  2 root root   86 abr 25 13:35 sysinit.target.wants
drwxr-xr-x.  2 root root   43 abr 25 13:28 system-update.target.wants


# ls /etc/systemd/system/multi-user.target.wants
atop.service      crond.service       kdump.service           nfs-client.target  
postfix.service   rsyslog.service     sshd.service            vmtoolsd.service
auditd.service    irqbalance.service  NetworkManager.service  ntpd.service       
remote-fs.target  snmpd.service       tuned.service


# cat /etc/systemd/system/multi-user.target.wants/atop.service
[Unit]
Description=advanced interactive monitor
After=syslog.target

[Service]
Type=forking
PIDFile=/var/run/atop.pid
ExecStart=/usr/bin/atopd
ExecStop=/bin/rm -f /var/run/atop.pid

[Install]
WantedBy=multi-user.target
&lt;/pre&gt;



&lt;br&gt;
&lt;b&gt;Secuencia de arranque&lt;/b&gt;
&lt;br&gt;
Seguro que todos tenemos más o menos una idea de cómo arranca nuestro equipo con Linux. Me refiero a la secuencia en las que las cosas ocurren. Podemos saber con precisión qué depende de qué con el comando
&lt;br&gt;
&lt;br&gt;

&lt;pre&gt;
# systemd-analyze critical-chain
The time after the unit is active or started is printed after the &quot;@&quot; character.
The time the unit takes to start is printed after the &quot;+&quot; character.

multi-user.target @22.077s
└─tuned.service @17.251s +4.824s
  └─network.target @17.233s
    └─network.service @15.516s +1.715s
      └─NetworkManager.service @7.451s +1.904s
        └─basic.target @7.265s
          └─sockets.target @7.265s
            └─dbus.socket @7.264s
              └─sysinit.target @7.253s
                └─systemd-update-utmp.service @7.201s +50ms
                  └─auditd.service @6.744s +452ms
                    └─systemd-tmpfiles-setup.service @6.647s +94ms
                      └─rhel-import-state.service @6.536s +108ms
                        └─local-fs.target @6.505s
                          └─boot.mount @5.125s +1.375s
                            └─systemd-fsck@dev-disk-by\x2duuid-0a013536\x2d8d16\x2d4bde\x2db03a\x2da664620130fe.service @4.737s +386ms
                              └─dev-disk-by\x2duuid-0a013536\x2d8d16\x2d4bde\x2db03a\x2da664620130fe.device @4.736s
&lt;/pre&gt;

&lt;br&gt;
&lt;b&gt;Diagrama de Gant y tiempos de puesta en marcha&lt;/b&gt;&lt;br&gt;
Podemos obtener más detalle en el informe generando un diagrama de Gant con marcas de tiempo. Para ello podemos usar el comando
&lt;br&gt;
&lt;pre&gt;
systemd-analyze plot &gt; boot-gant.svg
&lt;/pre&gt;

&lt;br&gt;
Esto nos va a generar un svg que puedes abrir sin problemas con cualquier explorador de internet (por ejemplo). Verás algo asi como el gráfico siguiente. Si lo analizas verás que te indice el tiempo en el que tu sistema operativo está completamente arriba desde cero.
&lt;br&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguz8zh_QEo0TfDG3GMu3KGZydmvsARPGQ91o4hymOgf7pe_1zaO89AQ3BF_bP9a4hae2HM54BhsNOC5Qi11qz9Uv4W03S8LWTJezn5ueqB-po-H4sLrFN5uZ4OmwHH58O8z7Om2nNdxEgX/s1600/systemctl-gat.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguz8zh_QEo0TfDG3GMu3KGZydmvsARPGQ91o4hymOgf7pe_1zaO89AQ3BF_bP9a4hae2HM54BhsNOC5Qi11qz9Uv4W03S8LWTJezn5ueqB-po-H4sLrFN5uZ4OmwHH58O8z7Om2nNdxEgX/s320/systemctl-gat.png&quot; width=&quot;320&quot; height=&quot;202&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;br&gt;
La leyenda (abajo) te indica el estado de cada proceso a lo largo del tiempo.
&lt;br&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzgOcymci_d6m7P_7hweOy3J5fUydV7Ir4tLt4NoiPSAOvsK10-J6t5bVl5TdunSI93TznA1fo_t6nitEX4upcuQ4UjTzJEQUzUI1AhTBHMIGPUANoz5X-BDIq-P9elgUUyTIksPLRXLvG/s1600/systemctl-gant-leyenda.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzgOcymci_d6m7P_7hweOy3J5fUydV7Ir4tLt4NoiPSAOvsK10-J6t5bVl5TdunSI93TznA1fo_t6nitEX4upcuQ4UjTzJEQUzUI1AhTBHMIGPUANoz5X-BDIq-P9elgUUyTIksPLRXLvG/s320/systemctl-gant-leyenda.png&quot; width=&quot;320&quot; height=&quot;163&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;br&gt;</description><link>http://osadmin.blogspot.com/2016/07/secuencia-de-arranque-con-systemctl.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguz8zh_QEo0TfDG3GMu3KGZydmvsARPGQ91o4hymOgf7pe_1zaO89AQ3BF_bP9a4hae2HM54BhsNOC5Qi11qz9Uv4W03S8LWTJezn5ueqB-po-H4sLrFN5uZ4OmwHH58O8z7Om2nNdxEgX/s72-c/systemctl-gat.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-1560218204540516722</guid><pubDate>Tue, 29 Mar 2016 18:01:00 +0000</pubDate><atom:updated>2016-03-29T11:01:26.528-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">autofs</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><category domain="http://www.blogger.com/atom/ns#">nfs</category><category domain="http://www.blogger.com/atom/ns#">unix</category><title>autofs</title><description>El demonio &lt;b&gt;autofs&lt;/b&gt; es un gran desconocido en los sistemas Unix. No es que no lo conozca nadie, lo que pasa es que no se suele poner en funcionamiento por miedo a que un recurso no esté montado cuando se necesita. Vamos a aclarar algunas cuestiones a ver si gana adeptos. Yo más que recomendarlo, lo practico.
&lt;br&gt;
&lt;br&gt;

Empecemos por el principio. &quot;&lt;b&gt;autofs&lt;/b&gt;&quot; es un servicio Unix/Linux que permite que un recurso se monte justo cuando se necesita. Pasado un tiempo de ociosidad (configurable, luego lo vemos), el recurso se desmonta.
&lt;br&gt;
&lt;br&gt;
Esto presenta ventajas desde varios puntos de vista:
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;Durante el arranque, el host no tiene que montar todos los sistemas de ficheros que pueden ser necesarios. Se montarán justo cuando empiecen a necesitarse. Se evitan los posibles sobresaltos y esperas durante el arranque.&lt;br&gt;
&lt;li&gt;El servidor NFS, FTP o del tipo que sea tendrá menos clientes conectados.&lt;br&gt;
&lt;li&gt;Durante el tiempo en el que el hots está encendido lo hará siempre con la menor cantidad de recursos montados. 
&lt;/ul&gt;

&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;b&gt;Configuración básica&lt;/b&gt;
&lt;br&gt;&lt;br&gt;
El fichero &lt;b&gt;/etc/auto.master&lt;/b&gt; es el origen de la configuración. Los ficheros incluidos en él se incorporan a la configuración del demonio. Un contenido mínimo típico (quitando los comentarios):
&lt;br&gt;
&lt;pre&gt;
/misc   /etc/auto.misc
&lt;/pre&gt;
&lt;br&gt;&lt;br&gt;
La lectura que debemos hacer es que en el punto de montaje &quot;&lt;b&gt;/misc&lt;/b&gt;&quot; se montarán los recursos declarados en el fichero &quot;&lt;b&gt;/etc/auto.misc&lt;/b&gt;&quot;.
&lt;br&gt;&lt;br&gt;
El fichero &lt;b&gt;/etc/auto.misc&lt;/b&gt; podría contener las siguientes 2 lineas:
&lt;br&gt;&lt;br&gt;
&lt;pre&gt;
cd              -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
recupera        -fstype=nfs,nolock servidor_nfs:/data/recuperaciones
&lt;/pre&gt;

Todo ello debe interpretarse como que virtualmente existen &lt;b&gt;/misc/cd&lt;/b&gt; y &lt;b&gt;/misc/recupera&lt;/b&gt;. Si sacamos un listado del directorio &quot;&lt;b&gt;/misc&lt;/b&gt;&quot; puede que aparezca vacío, pero si accedemos a cualquiera de los 2 directorios virtuales se montará el correspondiente recurso y se mostrará el contenido.
&lt;br&gt;
&lt;br&gt;
Es muy importante que sepamos que el directorio &lt;b&gt;/misc&lt;/b&gt; no debe contener nada. De hecho si contiene algo, al arrancar el demonio &quot;&lt;b&gt;autofs&lt;/b&gt;&quot; desaparecerá virtualmente ya que el demonio gestiona por completo ese punto de montaje base. Esto es un pequeño inconveniente que solemos solventar con enlaces, como comento abajo.
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

&lt;b&gt;Uso&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
Una vez configurado adecuadamente, usar el recurso es tan sencillo como acceder al recurso como si estuviera montado. En ese justo instante se monta si no lo está ya.
&lt;br&gt;
&lt;br&gt;
Un simple &quot;ls&quot; del punto de montaje servirá&lt;br&gt;
&lt;pre&gt;
ls /misc/recupera
&lt;/pre&gt;
&lt;br&gt;
La dificultad estriba, si cabe decirlo así, en saber donde está el recurso. Una operativa habitual consiste en crear un enlace simbólico del punto de montaje automático en el lugar donde lo querríamos tener. Supongamos para el ejemplo, que queremos tener el directorio de recuperaciones en el $HOME del root. Como hemos dicho, no es posible que el montaje automático ocurra en un directorio que usamos para otra cosa, pero si podemos hacer el enlace:
&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;
ln -s /misc/recupera /root/RECUPERA
&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Monitorización&lt;/b&gt;
&lt;br&gt;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;Una vez montado se puede ver con el comando &quot;&lt;b&gt;mount&lt;/b&gt;&quot;, &lt;b&gt;df&lt;/b&gt;, etc.., es decir, con cualquier comando que se nos ocurra.&lt;br&gt;
&lt;li&gt;El log del sistema almacena todos los hitos de montaje y desmontaje de los recursos del &lt;b&gt;autofs&lt;/b&gt;.&lt;br&gt;
&lt;/ul&gt;

&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Configuración avanzada&lt;/b&gt;
&lt;br&gt;&lt;br&gt;
Una linea típica de configuración en el &lt;b&gt;/etc/auto.misc&lt;/b&gt; puede contener cualquier opción que acepta el correspondiente comando &quot;mount&quot; para ese recurso. Una lectura atenta de la sintaxis nos permite adivinar dónde va el tipo de recurso y dónde las opciones. Un ejemplo más completo para el recurso NFS puede ser:
&lt;pre&gt;
/recupera -fstype=nfs,rw,nosuid,nodev,hard,nolock,rsize=32768,wsize=32768,noatime,nodiratime servidor_nfs:/data/recuperaciones
&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
La otra cuestión caliente es el tiempo que debe estar un recurso montado para evitar rebotes o que esté montado demasiado tiempo. En el fichero &quot;&lt;b&gt;auto.master&lt;/b&gt;&quot; se puede modificar el timeout por defecto (suele ser 300 segundos). Por ejemplo:

&lt;pre&gt;
/misc   /etc/auto.misc --timeout=60
&lt;/pre&gt;
&lt;br&gt;
En el ejemplo hemos rebajado a 60 segundos la permanencia del montaje. Cuanto más prolongado o frecuente sea el uso mayor tiene que ser el timeout. Cuanto mas esporádico sea el uso del recurso menor debería ser el timeout. Eso requiere de tu propio ajuste fino.
&lt;br&gt;
&lt;br&gt;
Finalmente decir que es posible tener montado el mismo recurso en distintos puntos de montaje. Esto es extensible a autofs. Puedes tener un recurso montado manualmente y también tenerlo configurado por autofs o en varios puntos de montaje autofs. La imaginación al poder.
&lt;br&gt;
&lt;br&gt;
Hay muchísimas posibilidades y detalles que escapan a la intención de primera aproximación de este post, por eso te recomiendo que mires documentación oficial similar a &lt;a href=&quot;https://wiki.archlinux.org/index.php/autofs&quot;&gt;esta&lt;/a&gt;.

&lt;br&gt;
&lt;br&gt;</description><link>http://osadmin.blogspot.com/2016/03/autofs.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-8152869179536641465</guid><pubDate>Wed, 23 Mar 2016 10:46:00 +0000</pubDate><atom:updated>2016-03-23T03:46:48.235-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">bash</category><category domain="http://www.blogger.com/atom/ns#">docker</category><category domain="http://www.blogger.com/atom/ns#">mysql</category><category domain="http://www.blogger.com/atom/ns#">tty</category><title>Docker: acceso interactivo a consola</title><description>

&lt;br&gt;

Un contenedor docker puede haber sido arrancado sin mapeo de puertos y sin sesión interactiva. En esos casos podemos albergar dudas sobre qué está ocurriendo en él. Otras veces queremos descubrir qué directorio interno debemos mapear con un volumen para conservar los cambios. Todo eso es posible de averiguar abriendo una sesión interactiva de shell con nuestro contenedor sin alterar su estado.


&lt;br&gt;
&lt;br&gt;
Cogemos de nuevo el post anterior y los contenedores que se crearon:
&lt;br&gt;
&lt;pre&gt;
$ sudo docker ps -a
CONTAINER ID        IMAGE               [...]   NAMES
87a11363c32f        wordpress:latest    [...]   WPwordpress         
1eda9845dc71        mysql:latest        [...]   WPmysql             
&lt;/pre&gt;
&lt;br&gt;

Vamos a hacer una incursión con sesión interactiva para administrar algo de ambos.
&lt;br&gt;&lt;br&gt;
&lt;b&gt;Acceder por shell a un contenedor en ejecución&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;&quot;docker attach&quot;&lt;/b&gt; solo permite una conexión simultánea. Es incómodo y además attach detiene la ejecución del contenedor  cuando salimos de la sesión interactiva. Usaremos la fórmula siguiente para abrir tantos shell como deseemos y no afectar al estado del contenedor.

&lt;br&gt;

&lt;pre&gt;
$ sudo docker exec -i -t 87a11363c32f bash
&lt;/pre&gt;

&lt;br&gt;
Para salir simplemente &quot;exit&quot;
&lt;pre&gt;
root@87a11363c32f:/var/www/html# exit
&lt;/pre&gt;


&lt;br&gt;
&lt;b&gt;Gestionamos algo del contenedor Wordpress&lt;/b&gt;
&lt;br&gt;
Al entrar vemos donde están los contenidos estáticos y los PHP de Wordpress. Deberíamos hacer un mapeo a un volumen externo.
&lt;pre&gt;
root@87a11363c32f:/var/www/html# ls
index.php    readme.html wp-admin wp-comments-post.php  wp-config.php  
wp-cron.php  wp-links-opml.php  wp-login.php  wp-settings.php  wp-trackback.php
license.txt  wp-activate.php  wp-blog-header.php  wp-config-sample.php  wp-content     
wp-includes  wp-load.php   wp-mail.php   wp-signup.php    xmlrpc.php

&lt;/pre&gt;

&lt;br&gt;
&lt;b&gt;Conexión a una base de datos dentro del contenedor&lt;/b&gt;
&lt;br&gt;
Vamos a conectarnos a la base de datos con el cliente propio del contenedor:
&lt;pre&gt;
root@goku:~# sudo docker exec -i -t 1eda9845dc71 bash
root@1eda9845dc71:/# mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)
root@1eda9845dc71:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 29
Server version: 5.7.11 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; to clear the current input statement.

mysql&gt; show schemas;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)

&lt;/pre&gt;
Hemos podido acceder al contenido, previa entrada a la consola del contenedor.

</description><link>http://osadmin.blogspot.com/2016/03/docker-acceso-interactivo-consola.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-8592151804776144023</guid><pubDate>Tue, 22 Mar 2016 10:26:00 +0000</pubDate><atom:updated>2016-03-22T03:26:27.602-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">docker</category><category domain="http://www.blogger.com/atom/ns#">docker volume</category><category domain="http://www.blogger.com/atom/ns#">mysql</category><category domain="http://www.blogger.com/atom/ns#">wordpress</category><title>Wordpress con docker y mysql</title><description>Uniendo los conceptos de docker de entradas anteriores del blog voy a proponerte una forma sencilla de desplegar un wordpress con contenedores docker.

&lt;br&gt;
&lt;br&gt;
La receta es tan sencilla como los 2 comandos siguientes y el paso final:
&lt;br&gt;

&lt;b&gt;1.- Creamos la base de datos. &lt;/b&gt;
&lt;br&gt;
Le hacemos un mapeo del puerto (-p) por si queremos entrar a administrar o curiosear algo. No será necesario.
&lt;pre&gt;
$ sudo docker run --name WPmysql -p 13307:3306 \
         -v /home/volumenes/WPmysql:/var/lib/mysql \
         -e MYSQL_ROOT_PASSWORD=mi-secreto -d mysql

30160004622edb51ef290fca4cf232b61ca519a674994c26a98127e6c424abc7
&lt;/pre&gt;

&lt;br&gt;
&lt;b&gt;2.- Creamos el contenedor wordpress&lt;/b&gt;
&lt;br&gt;
&lt;pre&gt;
$ sudo docker run --name WPwordpress --link WPmysql:mysql \
      -v /home/volumenes/WPwordpress/html:/var/www/html \
      -p 10080:80 -d wordpress
626c5706de2c062ecaa3479bd4f6abbcf96703d7353151dd2111d4e063bf3bf6
&lt;/pre&gt;


&lt;br&gt;
Debemos tener algo así:
&lt;pre&gt;
$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                     NAMES
626c5706de2c        wordpress:latest    &quot;/entrypoint.sh apac   5 seconds ago       Up 4 seconds        0.0.0.0:10080-&gt;80/tcp     WPwordpress         
30160004622e        mysql:latest        &quot;/entrypoint.sh mysq   6 seconds ago       Up 5 seconds        0.0.0.0:13307-&gt;3306/tcp   WPmysql             
&lt;/pre&gt;

&lt;b&gt;3.- Navegamos para terminar de configurar&lt;/b&gt;
&lt;br&gt;
Recupero un viejo clásico de la informática de administración. Se trata del comando &lt;b&gt;&quot;lynx&quot;&lt;/b&gt; que muestra por consola su &quot;best-effort&quot; de la página en cuestión. Es un browser en consola de texto.
&lt;br&gt;
&lt;pre&gt;
$ lynx http://localhost:10080
&lt;/pre&gt;

Lógicamente no tienes porqué usar &quot;lynx&quot;. Puedes usar cualquier navegador o acceder desde tu escritorio si tienes accesible el anfitrión del contenedor por su IP y al puerto 10080.
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Comentario final&lt;/b&gt;
&lt;br&gt;
Tal vez te hayas dado cuenta de que hay algo de magia en la poca configuración de Wordpress y sin embargo parece que llega a la base de datos. El secreto está en el switch &quot;--link&quot;. Lo ampliaremos en otro post. De momento disfruta de tu wordpress reluciente.
</description><link>http://osadmin.blogspot.com/2016/03/wordpress-con-docker-y-mysql.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-764110253399874319</guid><pubDate>Mon, 21 Mar 2016 10:52:00 +0000</pubDate><atom:updated>2016-03-21T10:01:40.843-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ubuntu. ipv6</category><title>Deshabilitar IPv6</title><description>Normalmente uno no es consciente de si utiliza &lt;b&gt;ipv6&lt;/b&gt; o solamente ipv4. Lo normal en entornos pequeños o heredados es que lo que usamos sea solamente ipv4. Si esto es así, podemos desactivar ipv6 de nuestros sistemas para aligerar la carga del sistema y para aclarar diagnósticos relacionados con la configuración de red.
&lt;br&gt;
&lt;br&gt;
El ejemplo que te muestro aquí es de un sistema &lt;i&gt;Ubuntu 14.04.04 LTS&lt;/i&gt;
&lt;br&gt;
&lt;br&gt;

&lt;b&gt;Comprobamos si tenemos IPv6 habilitado&lt;/b&gt;
&lt;br&gt;

&lt;pre&gt;
# sysctl -a | grep &quot;ipv6 =&quot;
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.docker0.disable_ipv6 = 0
net.ipv6.conf.eth0.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
&lt;/pre&gt;

&lt;br&gt;

Como podrás observar las entradas de configuración dicen que &quot;&lt;i&gt;disable_ipv6 = 0&lt;/i&gt;&quot;. De forma resumida lo podíamos haber preguntado con el siguiente comando:
&lt;br&gt;
&lt;pre&gt;
# cat /proc/sys/net/ipv6/conf/all/disable_ipv6
0
&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;



El comando &lt;b&gt;netstat&lt;/b&gt; suele mostrar las filas correspondientes a &lt;b&gt;tcp6&lt;/b&gt; y &lt;b&gt;udp6&lt;/b&gt; de forma separada. Puedes ver en el ejemplo que las conexiones se duplican para ipv6 e ipv4.
&lt;br&gt;
&lt;pre&gt;
# netstat -l
Conexiones activas de Internet (solo servidores)
Proto  Recib Enviad Dirección local         Dirección remota       Estado      
tcp        0      0 *:sunrpc                *:*                     ESCUCHAR   
tcp        0      0 *:ssh                   *:*                     ESCUCHAR   
tcp        0      0 localhost:ipp           *:*                     ESCUCHAR   
tcp6       0      0 [::]:sunrpc             [::]:*                  ESCUCHAR   
tcp6       0      0 [::]:ssh                [::]:*                  ESCUCHAR   
tcp6       0      0 [::]:43446              [::]:*                  ESCUCHAR   
tcp6       0      0 ip6-localhost:ipp       [::]:*                  ESCUCHAR   
udp        0      0 *:1008                  *:*                                
udp        0      0 *:mdns                  *:*                                
udp        0      0 *:sunrpc                *:*                                
udp6       0      0 [::]:1008               [::]:*                             
udp6       0      0 [::]:mdns               [::]:*                             
udp6       0      0 [::]:sunrpc             [::]:*
&lt;/pre&gt;


&lt;br&gt;
&lt;br&gt;


¿ Y esto porqué es ?. Por que está fijado por defecto que se habilite, con cada nueva interfaz. Vamos a verlo.
&lt;br&gt;
&lt;pre&gt;
# cat /proc/sys/net/ipv6/conf/default/disable_ipv6
0
&lt;/pre&gt;
Es decir, por defecto cualquier nueva interfaz también tendría ipv6 activado.
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Deshabilitar ipv6 de forma temporal&lt;/b&gt;
&lt;br&gt;
Antes de deshabilitar ipv6 de nuestro sistema de forma permanente vamos a ver que pasa si lo quitamos sin afectar la configuración. Lo desconectamos un momento.
&lt;br&gt;
La forma más rápida es
&lt;br&gt;
&lt;pre&gt;
# echo &quot;1&quot; &gt; /proc/sys/net/ipv6/conf/all/disable_ipv6
&lt;/pre&gt;
&lt;br&gt;
Comprobamos que cada una de las interfaces ya lo tiene &quot;disable&quot;.
&lt;pre&gt;
# sysctl -a | grep &quot;ipv6 =&quot;
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.docker0.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
&lt;/pre&gt;
&lt;br&gt;
Si trabajamos con normalidad, hacemos pruebas y todo va ok, te puedes plantear pasar al siguiente punto y dejarlo deshabilitado de forma permanente.
&lt;br&gt;
&lt;br&gt;

&lt;b&gt;Deshabilitar ipv6 de forma permanente&lt;/b&gt;
&lt;br&gt;
Para hacerlo de forma permanente editaremos el fichero &lt;b&gt;&quot;/etc/sysctl.conf&quot;&lt;/b&gt; con un editor de textos. Es posible que todo lo que contenga esté comentado, de forma que solo los valores por defecto se incorporan para que sean tenidos en cuenta en cada reinicio. Nosotros vamos a aportar uno de los bloques que hemos visto arriba. 
&lt;br&gt;
&lt;br&gt;
Ten en cuenta que puedes ser selectivo, por ejemplo dejando ipv6 habilitado solo para la interfaz &lt;b&gt;localhost&lt;/b&gt;
&lt;pre&gt;
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.docker0.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 0
&lt;/pre&gt;

&lt;br&gt;
O quitar todo ipv6 de forma permanente.
&lt;pre&gt;
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.all.disable_ipv6 = 1
&lt;/pre&gt;

Tras el reinicio del sistema, las preferencias de ipv6 se mantendrán como las hayamos indicado.
&lt;br&gt;
Otra forma de hacer permanente la configuración del fichero &lt;b&gt;&quot;/etc/sysctl.conf&quot;&lt;/b&gt; es usar &lt;b&gt;&quot;sysctl -p&quot;&lt;/b&gt;. 


</description><link>http://osadmin.blogspot.com/2016/03/deshabilitar-ipv6.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-7733320816378297861</guid><pubDate>Wed, 16 Mar 2016 13:09:00 +0000</pubDate><atom:updated>2016-03-16T06:09:13.059-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">docker</category><category domain="http://www.blogger.com/atom/ns#">docker container</category><category domain="http://www.blogger.com/atom/ns#">mysql</category><title>Docker: crear una base de datos (2/2)</title><description>Este post es la continuación de este &lt;a href=&quot;http://osadmin.blogspot.com.es/2016/03/docker-crear-una-base-de-datos-mysql.html&quot;&gt;otro&lt;/a&gt;. Ahora vamos a mejorar un poco el planteamiento a la vez que introducimos un concepto nuevo. 
&lt;br&gt;
&lt;br&gt;
Como ya hemos dicho el contenedor no debe contener estado alguno que lo convierta en una elemento valioso e irremplazable con datos. Tenemos varios mecanismos para hacer esto, pero el que vamos a ver hoy en acción es el de los &lt;b&gt;volúmenes de docker&lt;/b&gt;. Se trata de mapear un directorio del host anfitrión para que sea accesible dentro del contenedor. Lógicamente lo que dejemos ahí desde cualquier extremo (host o contenedor) es visible para el contrario.

&lt;br&gt;
&lt;br&gt;
Siguiendo con el tema de la base de datos, supongamos que tenemos la carpeta /home/usuario/db y que es donde vamos a ubicar los schemas de nuestra mysql.
&lt;br&gt;
Creamos el contenedor desde cero indicando este volumen. La novedad es el switch &lt;b&gt;-v&lt;/b&gt;: 
&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;
$ sudo docker run --name mimysql2 -p 13307:3306 \
         -v /home/usuario/db:/var/lib/mysql \
         -e MYSQL_ROOT_PASSWORD=mi-secreto -d mysql
ebe6d5b6c4854a86a781e48386c5d6107b05ec6e10b16654feb5282028254257
&lt;/pre&gt;

Nos conectamos a ella y alteramos el estado. 
&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;
$ mysql --host=127.0.0.1 --port 13307 -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.11 MySQL Community Server (GPL)
 
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; to clear the current input statement.
 
mysql&gt; show schemas;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
 
mysql&gt; create schema prueba;
Query OK, 1 row affected (0.00 sec)
 
mysql&gt; use prueba
Database changed

mysql&gt; create table tabla_datos(id int(4),  nota varchar(20));
Query OK, 0 rows affected (0.00 sec)
 
mysql&gt; insert into tabla_datos values (1,&#39;hola mundo&#39;);
Query OK, 1 row affected (0.01 sec)
 
mysql&gt; select * from tabla_datos;
+------+------------+
| id   | nota       |
+------+------------+
|    1 | hola mundo |
+------+------------+
1 row in set (0.01 sec)
&lt;/pre&gt;


&lt;br&gt;&lt;br&gt;
Eliminamos el contenedor “mimysql” 
&lt;br&gt;&lt;br&gt;
&lt;pre&gt;
$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS              PORTS                     NAMES
ebe6d5b6c485        mysql:latest        &quot;/entrypoint.sh mysq   About a minute ago   Up About a minute   0.0.0.0:13307-&gt;3306/tcp   mimysql             
89a8e4f3e3d4        mysql:latest        &quot;/entrypoint.sh mysq   About an hour ago    Up 51 minutes       0.0.0.0:13306-&gt;3306/tcp   some-mysql          
$ sudo docker rm -f ebe6d5b6c485
ebe6d5b6c485
&lt;/pre&gt;
&lt;br&gt;&lt;br&gt;

Volvemos a crear un nuevo contenedor y le montamos el volumen donde está la base de datos. 
&lt;pre&gt;
$ sudo docker run --name mimysql -p 13307:3306 \
         -v /home/usuario/db:/var/lib/mysql \
         -e MYSQL_ROOT_PASSWORD=mi-secreto -d mysql
83f848a88181a04f4c55b782bfe8bea988fa6d7a5c5b7936ae3f112db246f01a
&lt;/pre&gt;

Nos conectamos a la base de datos y vemos si existe el schema que creamos con el otro contenedor. 

&lt;pre&gt;
$ mysql --host=127.0.0.1 --port 13307 -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.11 MySQL Community Server (GPL)
 
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; to clear the current input statement.
 
mysql&gt; show schemas;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| prueba             |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
 
mysql&gt; use prueba;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql&gt; select * from tabla_datos;
+------+------------+
| id   | nota       |
+------+------------+
|    1 | hola mundo |
+------+------------+
1 row in set (0.00 sec)

&lt;/pre&gt;


Si te has quedado con ganas de mucho más, aquí tienes algunos enlaces interesantes:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.docker.com/engine/userguide/containers/dockervolumes/&quot;&gt;https://docs.docker.com/engine/userguide/containers/dockervolumes/&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;https://hub.docker.com/_/mysql/&quot;&gt;https://hub.docker.com/_/mysql/&lt;/a&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tutumcloud/mysql&quot;&gt;https://github.com/tutumcloud/mysql&lt;/a&gt;
&lt;/ul&gt;</description><link>http://osadmin.blogspot.com/2016/03/docker-crear-una-base-de-datos-22.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-1338249294649623914</guid><pubDate>Tue, 15 Mar 2016 14:21:00 +0000</pubDate><atom:updated>2016-03-15T07:21:59.275-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">docker</category><category domain="http://www.blogger.com/atom/ns#">inspect</category><category domain="http://www.blogger.com/atom/ns#">json</category><title>Docker: obtener los atributos con inspect</title><description>

Se pueden conocer los detalles de un contenedor o imagen con el subcomando &quot;&lt;b&gt;inspect&lt;/b&gt;&quot;.

&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;
$ sudo docker run --name mimysql -p 13306:3306 \
            -e MYSQL_ROOT_PASSWORD=mi-secreto -d mysql

$ sudo docker inspect mimysql
[{
    &quot;AppArmorProfile&quot;: &quot;&quot;,
    &quot;Args&quot;: [
        &quot;mysqld&quot;
    ],
    &quot;Config&quot;: {
        &quot;AttachStderr&quot;: false,
        &quot;AttachStdin&quot;: false,
        &quot;AttachStdout&quot;: false,
        &quot;Cmd&quot;: [
            &quot;mysqld&quot;
        ],
        &quot;CpuShares&quot;: 0,
        &quot;Cpuset&quot;: &quot;&quot;,
        &quot;Domainname&quot;: &quot;&quot;,
        &quot;Entrypoint&quot;: [
            &quot;/entrypoint.sh&quot;
        ],
        &quot;Env&quot;: [
            &quot;MYSQL_ROOT_PASSWORD=mi-secreto&quot;,
            &quot;PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&quot;,
            &quot;MYSQL_MAJOR=5.7&quot;,
            &quot;MYSQL_VERSION=5.7.11-1debian8&quot;
        ],
        &quot;ExposedPorts&quot;: {
            &quot;3306/tcp&quot;: {}
        },
        &quot;Hostname&quot;: &quot;a7ba98d86780&quot;,
        &quot;Image&quot;: &quot;mysql&quot;,
        &quot;Labels&quot;: {},
        &quot;MacAddress&quot;: &quot;&quot;,
        &quot;Memory&quot;: 0,
        &quot;MemorySwap&quot;: 0,
        &quot;NetworkDisabled&quot;: false,
        &quot;OnBuild&quot;: null,
        &quot;OpenStdin&quot;: false,
        &quot;PortSpecs&quot;: null,
        &quot;StdinOnce&quot;: false,
        &quot;Tty&quot;: false,
        &quot;User&quot;: &quot;&quot;,
        &quot;Volumes&quot;: {
            &quot;/var/lib/mysql&quot;: {}
        },
        &quot;WorkingDir&quot;: &quot;&quot;
    },
    &quot;Created&quot;: &quot;2016-03-15T14:02:35.975162208Z&quot;,
    &quot;Driver&quot;: &quot;aufs&quot;,
    &quot;ExecDriver&quot;: &quot;native-0.2&quot;,
    &quot;ExecIDs&quot;: null,
    &quot;HostConfig&quot;: {
        &quot;Binds&quot;: null,
        &quot;CapAdd&quot;: null,
        &quot;CapDrop&quot;: null,
        &quot;CgroupParent&quot;: &quot;&quot;,
        &quot;ContainerIDFile&quot;: &quot;&quot;,
        &quot;CpuShares&quot;: 0,
        &quot;CpusetCpus&quot;: &quot;&quot;,
        &quot;Devices&quot;: [],
        &quot;Dns&quot;: null,
        &quot;DnsSearch&quot;: null,
        &quot;ExtraHosts&quot;: null,
        &quot;IpcMode&quot;: &quot;&quot;,
        &quot;Links&quot;: null,
        &quot;LogConfig&quot;: {
            &quot;Config&quot;: null,
            &quot;Type&quot;: &quot;json-file&quot;
        },
        &quot;LxcConf&quot;: [],
        &quot;Memory&quot;: 0,
        &quot;MemorySwap&quot;: 0,
        &quot;NetworkMode&quot;: &quot;bridge&quot;,
        &quot;PidMode&quot;: &quot;&quot;,
        &quot;PortBindings&quot;: {
            &quot;3306/tcp&quot;: [
                {
                    &quot;HostIp&quot;: &quot;&quot;,
                    &quot;HostPort&quot;: &quot;13306&quot;
                }
            ]
        },
        &quot;Privileged&quot;: false,
        &quot;PublishAllPorts&quot;: false,
        &quot;ReadonlyRootfs&quot;: false,
        &quot;RestartPolicy&quot;: {
            &quot;MaximumRetryCount&quot;: 0,
            &quot;Name&quot;: &quot;no&quot;
        },
        &quot;SecurityOpt&quot;: null,
        &quot;Ulimits&quot;: null,
        &quot;VolumesFrom&quot;: null
    },
    &quot;HostnamePath&quot;: &quot;/var/lib/docker/containers/a7ba98d867804d74a2a2f9b749bd796ed9e54127356aa9e78e9a7a17161c8ade/hostname&quot;,
    &quot;HostsPath&quot;: &quot;/var/lib/docker/containers/a7ba98d867804d74a2a2f9b749bd796ed9e54127356aa9e78e9a7a17161c8ade/hosts&quot;,
    &quot;Id&quot;: &quot;a7ba98d867804d74a2a2f9b749bd796ed9e54127356aa9e78e9a7a17161c8ade&quot;,
    &quot;Image&quot;: &quot;50806c71cd84eb5b3bc15060d3aa60c8963c7df6cc6ceff9a7cb5c27b62a01f4&quot;,
    &quot;LogPath&quot;: &quot;/var/lib/docker/containers/a7ba98d867804d74a2a2f9b749bd796ed9e54127356aa9e78e9a7a17161c8ade/a7ba98d867804d74a2a2f9b749bd796ed9e54127356aa9e78e9a7a17161c8ade-json.log&quot;,
    &quot;MountLabel&quot;: &quot;&quot;,
    &quot;Name&quot;: &quot;/mimysql&quot;,
    &quot;NetworkSettings&quot;: {
        &quot;Bridge&quot;: &quot;docker0&quot;,
        &quot;Gateway&quot;: &quot;172.17.42.1&quot;,
        &quot;GlobalIPv6Address&quot;: &quot;&quot;,
        &quot;GlobalIPv6PrefixLen&quot;: 0,
        &quot;IPAddress&quot;: &quot;172.17.0.16&quot;,
        &quot;IPPrefixLen&quot;: 16,
        &quot;IPv6Gateway&quot;: &quot;&quot;,
        &quot;LinkLocalIPv6Address&quot;: &quot;fe80::42:acff:fe11:10&quot;,
        &quot;LinkLocalIPv6PrefixLen&quot;: 64,
        &quot;MacAddress&quot;: &quot;02:42:ac:11:00:10&quot;,
        &quot;PortMapping&quot;: null,
        &quot;Ports&quot;: {
            &quot;3306/tcp&quot;: [
                {
                    &quot;HostIp&quot;: &quot;0.0.0.0&quot;,
                    &quot;HostPort&quot;: &quot;13306&quot;
                }
            ]
        }
    },
    &quot;Path&quot;: &quot;/entrypoint.sh&quot;,
    &quot;ProcessLabel&quot;: &quot;&quot;,
    &quot;ResolvConfPath&quot;: &quot;/var/lib/docker/containers/a7ba98d867804d74a2a2f9b749bd796ed9e54127356aa9e78e9a7a17161c8ade/resolv.conf&quot;,
    &quot;RestartCount&quot;: 0,
    &quot;State&quot;: {
        &quot;Dead&quot;: false,
        &quot;Error&quot;: &quot;&quot;,
        &quot;ExitCode&quot;: 0,
        &quot;FinishedAt&quot;: &quot;0001-01-01T00:00:00Z&quot;,
        &quot;OOMKilled&quot;: false,
        &quot;Paused&quot;: false,
        &quot;Pid&quot;: 19910,
        &quot;Restarting&quot;: false,
        &quot;Running&quot;: true,
        &quot;StartedAt&quot;: &quot;2016-03-15T14:02:36.105333233Z&quot;
    },
    &quot;Volumes&quot;: {
        &quot;/var/lib/mysql&quot;: &quot;/var/lib/docker/vfs/dir/842864eff1fdcb81c55f455925e72cbec425569585a99e60619178ed13e00ed9&quot;
    },
    &quot;VolumesRW&quot;: {
        &quot;/var/lib/mysql&quot;: true
    }
}
]
&lt;/pre&gt; 
&lt;br&gt;
&lt;br&gt;

Como se puede ver se trata de un JSON, lo cual lo convierte en muy apropiado para su tratamiento automatizado con paneles y scripts.
&lt;br&gt;&lt;br&gt;
También se puede emplear para preguntar por atributos de la imagen. En el ejemplo &quot;mysql&quot; es la imagen. Si le preguntamos por los detalles nos ofrece los valores de fabricación de la misma.
&lt;br&gt;&lt;br&gt;
&lt;pre&gt;
$ docker inspect mysql
&lt;/pre&gt;
&lt;br&gt;&lt;br&gt;
Si lo ejecutas verás que hay valores que no tienen sentido para una imagen pero si para el contenedor, como son los parámetros de red, configuración de host, etc..

&lt;br&gt;&lt;br&gt;
Si solo estás interesado en un atributo en particular podemos preguntar por él directamente usando &lt;b&gt;--format&lt;/b&gt;. En el siguiente ejemplo vamos a preguntar por el &lt;b&gt;gateway&lt;/b&gt; del contenedor &lt;i&gt;mimysql&lt;/i&gt;.
&lt;br&gt;&lt;br&gt;
&lt;pre&gt;
$ sudo docker inspect --format=&#39;{{.NetworkSettings.Gateway}}&#39; mimysql
172.17.42.1
&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;
Un nuevo ejemplo pero ahora con 2 consultas simultáneas.
&lt;br&gt;
&lt;pre&gt;
$ sudo docker inspect --format=&#39;{{.NetworkSettings.IPAddress}}, {{.NetworkSettings.Gateway}}&#39; mimysql
172.17.0.16, 172.17.42.1
&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;




</description><link>http://osadmin.blogspot.com/2016/03/docker-obtener-los-atributos-con-inspect.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-587698131769743636</guid><pubDate>Mon, 14 Mar 2016 13:47:00 +0000</pubDate><atom:updated>2016-03-14T06:54:49.400-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">docker</category><category domain="http://www.blogger.com/atom/ns#">mysql</category><title>Docker: crear una base de datos mysql (1/2)</title><description>Vamos con un ejemplo concreto de uso de contenedores &lt;b&gt;docker&lt;/b&gt;. En esta entrada vamos a crear una base de datos de usar y tirar sin necesidad de enturbiar nuestro sistema host. 

&lt;br&gt;
&lt;br&gt;

Concretamente vamos a crear un contenedor docker que:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;El contenedor se llamará &quot;mimysql&quot;. Recuerda que el nombre es único. Si repites el experimento te toca eliminar cada vez el contenedor o usar otro nombre.
&lt;li&gt;Si no tenemos ninguna imagen &lt;b&gt;mysql&lt;/b&gt; ya descargada, la imagen es la del registry y la versión será la última disponible (no la hemos especificado).
&lt;li&gt;El demonio &lt;b&gt;mysqld&lt;/b&gt; escuchará internamente (en el contenedor) en el puerto 3306 interno pero se mapeará al puerto 13306 del localhost (externo).
&lt;li&gt;La contraseña del root de mysql será &quot;mi-secreto&quot;.
&lt;/ul&gt;

&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Creación del contenedor&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;

&lt;pre&gt;
$ sudo docker run --name mimysql -p 13306:3306 \
           -e MYSQL_ROOT_PASSWORD=mi-secreto -d mysql
89a8e4f3e3d4673a8fd1b34ace7ac9a60dd90265dea6b9f92fe5fcdcd355cc54

&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;

Comprobamos que se ha creado
&lt;br&gt;
&lt;br&gt;

&lt;pre&gt;
$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                     NAMES
89a8e4f3e3d4        mysql:latest        &quot;/entrypoint.sh mysq   9 seconds ago       Up 8 seconds        0.0.0.0:13306-&gt;3306/tcp   mimysql
&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;

&lt;b&gt;Conexión a la base de datos&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;
$ mysql --host 127.0.0.1 --port=13306 -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.11 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; to clear the current input statement.
&lt;/pre&gt;


Y vemos que es funcional
&lt;pre&gt;
mysql&gt; show schemas;
+--------------------+                                                              
| Database           |                                         
+--------------------+                                         
| information_schema |                                         
| mysql              |                                           
| performance_schema |                                         
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql&gt; create schema prueba;
Query OK, 1 row affected (0.00 sec)

mysql&gt; show schemas;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| prueba             |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;


Como se puede ver hemos alterado el estado de la base de datos creando un &lt;b&gt;schema&lt;/b&gt; y por tanto del contenedor. Después de pararla de forma abrupta (&lt;b&gt;kill&lt;/b&gt;) y de arrancarla (&lt;b&gt;start&lt;/b&gt;), el contenido de la base de datos se mantiene.
&lt;br&gt;
&lt;br&gt;

Aunque el ejemplo demuestra que es posible alterar el estado del contenedor, eso va contra la naturaleza de los mismos. Los contenedores tienen que ser reemplazables y por tanto no contener datos ni las modificaciones de los mismos. En un próximo post voy a mostrar como hacerlo, pero si lo que quieres es una base de datos de prueba o test donde importar un backup y que puedes borrar sin problemas tal vez este post te sirva tal cual.



</description><link>http://osadmin.blogspot.com/2016/03/docker-crear-una-base-de-datos-mysql.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-1464565236227578230</guid><pubDate>Fri, 11 Mar 2016 14:19:00 +0000</pubDate><atom:updated>2016-03-14T05:15:23.009-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">docker</category><title>Estados de un contenedor docker</title><description>&lt;b&gt;Estados de un contenedor docker&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
El ciclo de vida de un contenedor docker es algo que debemos conocer en detalle. Los contenedores están concebidos como un servicio en ejecución y como tal tiene un estado que en parte lo provocamos nosotros con el despliegue, cada vez que usamos un comando que lo altera o con herramientas de orquestación.

&lt;br&gt;
&lt;br&gt;
He visto esta imagen en la &lt;a href=&quot;https://docs.docker.com/engine/reference/api/images/event_state.png&quot;&gt;web de docker&lt;/a&gt; que creo que debes conocer en detalle para comprender el alcance de cada uno de los subcomandos.
&lt;br&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://docs.docker.com/engine/reference/api/images/event_state.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://docs.docker.com/engine/reference/api/images/event_state.png&quot; width=500 /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Los posibles estados son:
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;created&lt;/b&gt;: el contenedor existe como personalización de la imagen base pero no ha entrado en ejecución. Ha sido dado de alta en la lista de docker y tiene un identificador asignado.
&lt;li&gt;&lt;b&gt;running&lt;/b&gt;: es un contenedor que podemos considerar que ha pasado por la etapa &quot;&lt;b&gt;created&lt;/b&gt;&quot; y además está arrancado ejecutando la tarea encomendada. Es posible crearlo y ejecutarlo con el mismo comando docker.
&lt;li&gt;&lt;b&gt;stopped&lt;/b&gt;: la tarea ha concluido y el contenedor se detiene.
&lt;li&gt;&lt;b&gt;paused&lt;/b&gt;: la tarea se ha detenido aunque no ha concluido. Es un estado provocado en el contenedor desde fuera bien por el uso del comando &lt;b&gt;pause&lt;/b&gt; o por la captura de una señal &lt;b&gt;SIGSTOP&lt;/b&gt;. Está técnicamente congelado y se puede reanudar.
&lt;li&gt;&lt;b&gt;deleted&lt;/b&gt;: el contenedor ha sido eliminado. No existe ya como tal. Tampoco está en la lista de contenedores.
&lt;/ul&gt;

</description><link>http://osadmin.blogspot.com/2016/03/estados-de-un-contenedor-docker.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-8285046831576392726</guid><pubDate>Wed, 09 Mar 2016 14:37:00 +0000</pubDate><atom:updated>2016-03-09T06:37:24.321-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">docker</category><title>Primeros pasos con Docker</title><description>
Docker está de moda así que vamos a dar algunas nociones para que todo el mundo pueda subirse a esta tecnología tan fantástica. En pocos días no podrás dejar de pensar en ella cada vez que tengas que iniciar un proyecto o hacer una prueba. Transformará el arquitecto de sistemas que llevas dentro y enriquecerá todo lo que hagas a partir de ahora.
&lt;br&gt;&lt;br&gt;
Empezamos.
&lt;br&gt;&lt;br&gt;

&lt;b&gt;Qué es un contenedor docker&lt;/b&gt;
&lt;br&gt;&lt;br&gt;
No es una máquina virtual. Y punto. Aunque lo parezca. Es un proceso que corre directamente en tu máquina. Lo puedes ver con un &quot;ps&quot;. Ese proceso crea un entorno que contiene todo lo necesario para dar la apariencia de que es otra máquina. Está basado en LXC que es un sistema de contenedores ligeros que emplean muchos proveedores de hosting. Cuanto antes te convenzas de que no es una máquina virtual antes empezarás a disfrutar de lo que sí es.

&lt;br&gt;&lt;br&gt;

Otra cosa que debes saber es que las imágenes de los contenedores docker se construyen unas sobre otras. Abajo estaría la más básica y conforme vamos subiendo podemos ir perfeccionando un contenedor para que cumpla con el rol que queramos. Es como hacer plantillas.

&lt;br&gt;&lt;br&gt;
Vamos a suponer que tienes un equipo con Linux. Ubuntu por ejemplo. Instalamos el paquete de &lt;b&gt;docker&lt;/b&gt;. Ojo que ya existe un paquete con el nombre &quot;docker&quot; que es una bandena KDE. El que nos interesa se llama &quot;docker.io&quot; en ubuntu.
&lt;br&gt;&lt;br&gt;

&lt;pre&gt;
sudo apt-get install docker.io
&lt;/pre&gt;

&lt;br&gt;&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Mi primer docker&lt;/b&gt;
&lt;br&gt;&lt;br&gt;
Vamos a arrancar un primer contenedor con un ubuntu limpio. Sin pensarlo. A lo loco. Los ejemplos que pongo aquí los puedes ejecutar sin peligro en tu equipo. 
&lt;br&gt;&lt;br&gt;
&lt;pre&gt;
$ sudo docker run --name osadmin-ubuntu ubuntu
Unable to find image &#39;ubuntu:latest&#39; locally
latest: Pulling from ubuntu
454970bd163b: Pull complete 
38112156678d: Pull complete 
4e1f7c524148: Pull complete 
56063ad57855: Pull complete 
ubuntu:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:4e85ebe01d056b43955250bbac22bdb8734271122e3c78d21e55ee235fc6802d
Status: Downloaded newer image for ubuntu:latest
&lt;/pre&gt;
&lt;br&gt;&lt;br&gt;
Analicemos qué ha pasado: hemos querido arrancar un contenedor al que llamaremos &lt;b&gt;&quot;osadmin-ubuntu&quot;&lt;/b&gt; y que está basado en la imagen de contenedor docker &lt;b&gt;&quot;ubuntu&quot;&lt;/b&gt;. Puesto que no teníamos ninguna imagen llamada &lt;b&gt;&quot;ubuntu&quot;&lt;/b&gt; se la ha descargado de un repositorio (llamado &quot;registry&quot;). Luego lo ha arrancado y está en algún lugar corriendo. Comprobamos.

&lt;br&gt;&lt;br&gt;
Comprobamos que existe la instancia &quot;osadmin-ubuntu&quot;.
&lt;pre&gt;
$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
c98e2697c8fa        ubuntu:latest       &quot;/bin/bash&quot;         7 minutes ago       Exited (0) 7 minutes ago                       osadmin-ubuntu
&lt;/pre&gt;
Vemos que está detenida. Esto es porque docker solo tiene sentido como proceso. Es decir, si no le encargas que haga nada, no hace nada. Se muere. Vamos a eliminarla y la volvemos a crear haciendo una espera de 120 segundos.
&lt;br&gt;&lt;br&gt;

Primero la eliminamos
&lt;br&gt;&lt;br&gt;
&lt;pre&gt;
$ sudo docker rm osadmin-ubuntu
&lt;/pre&gt;
&lt;br&gt;&lt;br&gt;
¿ Qué hemos eliminado ? La instancia llamada &quot;osadmin-ubuntu&quot;.&lt;br&gt;
¿ Hemos eliminado la imagen docker ubuntu ? La imagen está en un repositorio local y debe seguir allí. Lo vemos.
&lt;br&gt;&lt;br&gt;

&lt;pre&gt;
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              latest              56063ad57855        5 days ago          188 MB
&lt;/pre&gt;
Observa que nuestro repositorio todavía tiene la copia de la imagen &quot;ubuntu&quot; creada hace 5 dias de la imagen del contenedor.
&lt;br&gt;&lt;br&gt;

El siguiente comando creará de nuevo el contenedor pero hará un sleep de 120 segundos. 
&lt;pre&gt;

$ sudo docker run -d --name osadmin-ubuntu ubuntu /bin/bash -c &quot;sleep 120&quot;
da6eda60ad16cfb8e1d6843fa6030ba191cc051900947052c9f07e332fcaeaa0
$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
da6eda60ad16        ubuntu:latest       &quot;/bin/bash -c &#39;sleep   6 seconds ago       Up 5 seconds                            osadmin-ubuntu  
&lt;/pre&gt;
&lt;br&gt;&lt;br&gt;
Pasados 120 segundos se morirá.
&lt;br&gt;&lt;br&gt;


&lt;b&gt;Eliminar imágenes&lt;/b&gt;
&lt;br&gt;&lt;br&gt;
Si queremos purgar nuestro depósito local de imágenes, es sencillo. El ejemplo nos permite eliminar la plantilla &lt;b&gt;&quot;ubuntu&lt;/b&gt;&quot;. Se supone que no hay nadie usándola. Si es así no nos deja eliminarla a no ser que hagamos un &lt;b&gt;&quot;-f&quot;&lt;/b&gt;. 
&lt;br&gt;&lt;br&gt;
&lt;pre&gt;
$ sudo docker rmi ubuntu
Untagged: ubuntu:latest
Deleted: 1997914a7c23c0f2f77ba6570032f8e74292224d24b9e13228244561ac304020
Deleted: 1b1999356dda739315854eb57a482e92405660e84fd71b6c59f777377b5bd2dc
Deleted: 13a8e55f2d20aee3c842842ebadcbda69347bb657a4cde1b851719b8f896c596
Deleted: 8aa2fc7185e20bacda32d815eaae32cbc1c0457dc160ed5b3995ab79a8c7fd98
&lt;/pre&gt;
&lt;br&gt;&lt;br&gt;


No ha estado mal como aperitivo.</description><link>http://osadmin.blogspot.com/2016/03/primeros-pasos-con-docker.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-2830742751778065647</guid><pubDate>Tue, 01 Mar 2016 09:29:00 +0000</pubDate><atom:updated>2016-03-01T01:29:02.516-08:00</atom:updated><title>SSH: conexión desatendida entre hosts</title><description>


Quiero resumir aquí lo necesario para realizar la configuración que permite la conexión desatendida del usuario userA desde el &lt;b&gt;hostA&lt;/b&gt; hasta la cuenta del &lt;b&gt;userB&lt;/b&gt; del &lt;b&gt;hostB&lt;/b&gt;.
&lt;br&gt;
&lt;br&gt;

La base del mecanismo es la &lt;a href=&quot;https://es.wikipedia.org/wiki/Criptograf%C3%ADa_asim%C3%A9trica&quot;&gt;criptografía asimétrica&lt;/a&gt;. En el ejemplo vamos a emplear &lt;a href=&quot;https://es.wikipedia.org/wiki/RSA&quot;&gt;cifrado RSA&lt;/a&gt;, pero podíamos haber escogido &quot;&lt;a href=&quot;https://es.wikipedia.org/wiki/DSA&quot;&gt;cifrado DSA&lt;/a&gt;&quot;. El resultado es equivalente. 

&lt;br&gt;
&lt;br&gt;
La criptografía asimétrica requiere de un par de claves: la pública y la privada. Un mensaje cifrado con una de ellas solo puede ser descifrado con la otra. En este sencillo mecanismo nos apoyamos para:
&lt;br&gt;&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;Demostrar que somos quienes somos: porque lo que nos dicen cifrado con la clave pública lo entendemos porque tenemos la privada.&lt;br&gt;
&lt;li&gt;Mantener la privacidad del canal puesto que nadie puede suplantar el extremo que posee la clave privada. Para evitar que suplanten al otro extremo, al inicio de la sesión se intercambia un secreto que permitirá cifrar las comunicaciones, ya con &lt;a href=&quot;https://es.wikipedia.org/wiki/Criptograf%C3%ADa_sim%C3%A9trica&quot;&gt;criptografía simétrica&lt;/a&gt;.
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;


&lt;b&gt;Generamos la pareja de claves&lt;/b&gt;
&lt;br&gt;
Ten en cuenta que la pareja de claves podría existir antes ya. Sigue leyendo el post y cuando lo entiendas todo, comprueba el contenido del directorio &lt;b&gt;$HOME/.ssh&lt;/b&gt; por ver si te puedes saltar el paso de la generación.
&lt;br&gt;&lt;br&gt;
&lt;pre&gt;
(host A) user A # ssh-keygen -t rsa 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
a7:34:ee:dd:cc:bb:aa:99:88:77:66:55:44:33:22:11 root@muchotest.com
The key&#39;s randomart image is:
+--[ RSA 2048]----+
|        ..=+ ..o.|
|         1 3+ +..|
|          == - = |
|         . .. e .|
|        S .  o o |
|       . +    *  |
|        .    o   |
|                 |
|                 |
+-----------------+
&lt;/pre&gt;
&lt;br&gt;&lt;br&gt;
Si entras en el .ssh del HOME del usuario que quiere hacer las conexiones desatendidas encontrarás los 2 nuevos ficheros:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;id_rsa.pub&lt;/b&gt;: puede ser enviado a cualquier host o persona que lo solicite. Es la parte pública de la pareja de claves asimétricas.&lt;br&gt;
&lt;li&gt;&lt;b&gt;id_rsa&lt;/b&gt;: NUNCA debe salir del lugar seguro donde se supone que se ha generado. NUNCA. Es la parte privada de la clave asimétrica. Cualquiera que tenga este fichero puede suplantar la identidad del host o el usuario al que pertenece.&lt;br&gt;
&lt;/ul&gt;

&lt;br&gt;&lt;br&gt;


&lt;b&gt;Habilitamos la clave en el hostB&lt;/b&gt;
&lt;br&gt;&lt;br&gt;

Lo normal es que los dos hosts sean de nuestra propiedad o ámbito de gestión. Copiamos el &lt;b&gt;id_rsa.pub&lt;/b&gt; con un scp o &lt;i&gt;copy-paste&lt;/i&gt; por el terminal. 
&lt;br&gt;&lt;br&gt;

Para seguir con el ejemplo, vamos a suponer que ya se ha copiado el fichero &lt;b&gt;id_rsa.pub&lt;/b&gt; en el &lt;b&gt;$HOME&lt;/b&gt; del receptor. 
&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;
(hostB) userB # cat $HOME/id_rsa.pub &gt;&gt; $HOME/.ssh/authorized_keys
(hostB) userB # chmod 400 $HOME/.ssh/authorized_keys
&lt;/pre&gt;
&lt;br&gt;
&lt;br&gt;
El tema de los permisos es importantísimo,  por eso los aseguramos en la segunda línea. Si el fichero&lt;b&gt; $HOME/.ssh/authorized_keys&lt;/b&gt; no existe se creará con unos permisos por defecto que pueden no ser &quot;&lt;b&gt;400&lt;/b&gt;&quot;. Debemos asegurarnos de que los permisos del fichero son esos porque si no va a parecer que no lo hemos hecho bien ya que no funcionará y tampoco habrá un mensaje de error claro de ello.
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;


&lt;b&gt;Probamos&lt;/b&gt; 
&lt;br&gt;
&lt;br&gt;
La prueba es hacer un ssh desde el userA del hostA hasta el userB del hostB. Es posible que nos pida confirmación para guardar el certificado del host e incluso de userB. Solo debe ocurrir la primera vez. Lo que nunca debe ocurrir es que nos pida la contraseña.
&lt;br&gt;&lt;br&gt;
Lo que hemos hecho solo sirve en el sentido de A hacia B. Si queremos los 2 sentidos hay que intercambiar la clave pública de B.
&lt;br&gt;
&lt;br&gt;&lt;br&gt;

</description><link>http://osadmin.blogspot.com/2016/03/ssh-conexion-desatendida-entre-hosts.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-3021605353061263856</guid><pubDate>Thu, 25 Feb 2016 11:16:00 +0000</pubDate><atom:updated>2016-02-26T03:54:00.260-08:00</atom:updated><title>Acceso a Ubuntu para recuperación</title><description>Es frecuente que un administrador de sistemas tenga que recuperar una contraseña o deshabilitar un módulo del arranque porque el host se queda colgado sin presentar el prompt para login. Típicamente uno piensa en dispositivo booteable con un Linux Live para poder trastear todo lo que quiera. La idea no es mala pero toma nota de este truco porque tal vez no necesites arrancar con un Linux Live.&lt;br&gt;
&lt;br&gt;
1.- Cuando salga el primer mensaje de grub pulsa ESC para detener la cuenta atrás.&lt;br&gt;
2.- Escoge la versión que te interesa (la más reciente estará arriba por defecto) y pulsa la tecla &#39;e&#39;.&lt;br&gt;
3.- En la siguiente pantalla muévete con los cursores hasta el final de la linea y añade init=/bin/bash. Cambia también de &quot;ro&quot; a &quot;rw&quot; (montajes con todos los permisos de escritura)&lt;br&gt;
4.- Provocamos el arranque. Según la versión será con la tecla &quot;b&quot; o F10.&lt;br&gt;
&lt;br&gt;
&lt;br /&gt;
Si además necesitas, cambiar el password porque lo has perdido usa el comando &quot;passwd&quot;.&lt;br&gt;
Cuando hayas terminado reinicia normalmente (comando &lt;i&gt;reboot&lt;/i&gt; por ejemplo) para ver el resultado.&lt;br&gt;
&lt;br&gt;&lt;br&gt;



&lt;b&gt;RECUERDA:&lt;/b&gt; estas operaciones son delicadas. Si tienes dudas lee, lee y lee. No te quedes con lo que yo te he dicho, sigue leyendo y forma tu propia estrategia de forma segura. &lt;a href=&quot;https://help.ubuntu.com/community/LostPassword&quot;&gt;Aquí&lt;/a&gt; tienes esta información y otras que pueden ser útiles Algunos efectos pueden ser no reversibles.

</description><link>http://osadmin.blogspot.com/2016/02/acceso-ubuntu-para-recuperacion.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-650639504980651448</guid><pubDate>Wed, 17 Mar 2010 11:28:00 +0000</pubDate><atom:updated>2010-03-17T04:32:49.212-07:00</atom:updated><title>Quitar password a un PDF</title><description>A veces tenemos un PDF protegido con una contraseña pero:&lt;br /&gt;  * Sabemos que tarde o temprano la olvidaremos&lt;br /&gt;  * Nuestro dispositivo móvil no es capaz de abrirla&lt;br /&gt;  * Nos molesta teclearla&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Propongo que utilicemos ghostscript para crear un nuevo PDF sin contraseña. Ejemplo con el fichero &quot;fichero.pdf&quot; protegido por la contraseña &quot;clave&quot;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;gs -sPDFPassword=clave -sDEVICE=pdfwrite -dNOPAUSE -sOutputFile=fichero-sinclave.pdf fichero.pdf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Todo esto, claro está, si no quebrantamos ninguna ley.</description><link>http://osadmin.blogspot.com/2010/03/quitar-password-un-pdf.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-5625994074064092773</guid><pubDate>Wed, 17 Mar 2010 11:03:00 +0000</pubDate><atom:updated>2010-03-17T04:11:22.077-07:00</atom:updated><title>Comandos EMC Celerra NS80G</title><description>Lo normal cuando tienes un Celerra y no terminas de aprenderte los comandos es que sufres la interfaz web y además no puedes hacer scripts. Eso tiene una fácil solución. El fichero /nas/log/nas_log.al contiene todos los comandos que lancemos desde el shell, el equivalente a la operación desde la interfaz web y los comandos internos.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;2010-03-17 11:48:03.349 db:201:16987:E: fs_ckpt ckpt_fs_2 -refresh&lt;br /&gt;2010-03-17 11:48:09.532 db:201:17550:S: fs_copy -start ckpt_fs_2 fs_2 -option convert=no,monitor=on&lt;br /&gt;2010-03-17 11:48:13.436 db:201:17550:E: fs_copy -start ckpt_fs_2 fs_2 -option convert=no,monitor=on&lt;br /&gt;2010-03-17 11:48:30.490 db:0:18223:S: /nas/sbin/rootfs_copy -abort 611_CK200000000000000 -timestamp&lt;br /&gt;2010-03-17 11:48:31.197 db:0:18223:E: /nas/sbin/rootfs_copy -abort 611_CK2000000000000000 -timestamp&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Tras la marca de tiempo y el identificador de proceso encuentras &quot;S&quot; o &quot;E&quot; que es Start y End respectivamente. Nos permitirá calcular la duración de los comandos.&lt;br /&gt;&lt;br /&gt;Observa que también sirve para analizar a posteriori qué ha podido ocurrir si algo va mal o ver qué ejecutan desde el servicio técnico cuando pones una incidencia.</description><link>http://osadmin.blogspot.com/2010/03/comandos-emc-celerra-ns80g.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-8074150176258012025</guid><pubDate>Tue, 23 Feb 2010 12:03:00 +0000</pubDate><atom:updated>2010-02-23T04:09:46.412-08:00</atom:updated><title>Link Aggregation/Bonding AIX</title><description>&lt;pre class=&quot;code script&quot;&gt;Problema: queremos hacer una agregación de 2 interfaces de un Blade con VIOS. El chasis es un BladeCenter H y el blade un JS22.&lt;br /&gt;Tenemos una versión de VIOS 2.1.0&lt;br /&gt;&lt;br /&gt;Hemos hecho una identificación previa de ent0 y ent3 viendo el tráfico que les llega con tcpdump.&lt;br /&gt;&lt;br /&gt;1.- Creamos la agrecación de enlace&lt;br /&gt;$ mkvdev  -lnagg ent0,ent3&lt;br /&gt;ent8 Available&lt;br /&gt;&lt;br /&gt;2.- Importante la MAC alternativa&lt;br /&gt;$ chdev -dev ent8 -attr use_alt_addr=yes&lt;br /&gt;ent8 changed&lt;br /&gt;$ chdev -dev ent8 -attr alt_addr=0x000000123456&lt;br /&gt;ent8 changed&lt;br /&gt;$ chdev -dev ent8 -attr mode=8023ad&lt;br /&gt;ent8 changed&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Vemos un poco más de detalle (ahora como root):&lt;br /&gt;$ oem_setup_env&lt;br /&gt;&lt;br /&gt;# lsdev -Cc adapter | grep ent&lt;br /&gt;ent0    Available       Logical Host Ethernet Port (lp-hea)&lt;br /&gt;ent1    Available       Logical Host Ethernet Port (lp-hea)&lt;br /&gt;ent2    Available 06-20 Gigabit Ethernet-SX PCI-X Adapter (14106703)&lt;br /&gt;ent3    Available 06-21 Gigabit Ethernet-SX PCI-X Adapter (14106703)&lt;br /&gt;ent4    Available       Virtual I/O Ethernet Adapter (l-lan)&lt;br /&gt;ent5    Available       Virtual I/O Ethernet Adapter (l-lan)&lt;br /&gt;ent6    Available       Virtual I/O Ethernet Adapter (l-lan)&lt;br /&gt;ent7    Available       Virtual I/O Ethernet Adapter (l-lan)&lt;br /&gt;ent8    Available       EtherChannel / IEEE 802.3ad Link Aggregation&lt;br /&gt;&lt;br /&gt;# lsattr -El ent8&lt;br /&gt;adapter_names   ent0,ent3      EtherChannel Adapters                       True&lt;br /&gt;alt_addr        0x000000123456 Alternate EtherChannel Address              True&lt;br /&gt;auto_recovery   yes            Enable automatic recovery after failover    True&lt;br /&gt;backup_adapter  NONE           Adapter used when whole channel fails       True&lt;br /&gt;hash_mode       default        Determines how outgoing adapter is chosen   True&lt;br /&gt;mode            8023ad         EtherChannel mode of operation              True&lt;br /&gt;netaddr         0              Address to ping                             True&lt;br /&gt;noloss_failover yes            Enable lossless failover after ping failure True&lt;br /&gt;num_retries     3              Times to retry ping before failing          True&lt;br /&gt;retry_time      1              Wait time (in seconds) between pings        True&lt;br /&gt;use_alt_addr    yes            Enable Alternate EtherChannel Address       True&lt;br /&gt;use_jumbo_frame no             Enable Gigabit Ethernet Jumbo Frames        True&lt;/pre&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt; Y ahora configuramos (no persistente)  la interfaz para ver si funciona:  &lt;/p&gt; &lt;pre class=&quot;code script&quot;&gt;# ifconfig en8 192.168.1.11 netmask 255.255.255.0&lt;/pre&gt; &lt;p&gt; Para comprobarlo podemos ir a los switches del BladeCenter y deshabilitar alternativamente los puertos internos INTX correspondientes de nuestro blade para ver cuando se pierde el &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;ping&lt;/span&gt;&quot;.&lt;br /&gt;&lt;/p&gt;</description><link>http://osadmin.blogspot.com/2010/02/link-aggregationbonding-aix.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-3753005304830094835</guid><pubDate>Tue, 16 Feb 2010 19:09:00 +0000</pubDate><atom:updated>2010-02-16T11:13:53.061-08:00</atom:updated><title>Problema con el VG altinst_rootvg</title><description>Al intentar crear un disco alternativo, nos damos cuenta de que en otra ocasión al hacerlo eliminamos el disco sin exportar el VG altinst_rootvg. Los síntomas son estos.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;1.- Nos dice que el &quot;mkvg&quot; no puede crear el mismo device&lt;/span&gt;&lt;br /&gt;# alt_disk_install -O -C -B hdisk3                                                   &lt;br /&gt;+-----------------------------------------------------------------------------+      &lt;br /&gt;ATTENTION: calling new module /usr/sbin/alt_disk_copy. Please see the alt_disk_copy man page and documentation for more details.                                                        &lt;br /&gt;Executing command: {/usr/sbin/alt_disk_copy -O -B -d &quot;hdisk3&quot;}                             &lt;br /&gt;+-----------------------------------------------------------------------------+            &lt;br /&gt;Calling mkszfile to create new /image.data file.                                           &lt;br /&gt;Checking disk sizes.                                                                       &lt;br /&gt;Creating cloned rootvg volume group and associated logical volumes.                        &lt;br /&gt;0505-102 alt_disk_install: mkvg has returned an error.                                     &lt;br /&gt;0516-360 /usr/sbin/mkvg: The device name is already used; choose a                         &lt;br /&gt;        different name.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;2.- Nos lo encontramos definido&lt;/span&gt;&lt;br /&gt;# lsvg                                                         &lt;br /&gt;rootvg                                                         &lt;br /&gt;altinst_rootvg&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;3.- No podemos exportarlo porque falta el disco&lt;/span&gt;&lt;br /&gt;# exportvg altinst_rootvg                                                                                   &lt;br /&gt;0516-894 exportvg: Warning, cannot remove volume group altinst_rootvg from  device configuration database.   &lt;br /&gt;&lt;br /&gt;SOLUCION:&lt;br /&gt;La opción &quot;-X&quot; nos limpia los subproductos pendientes de este tipo:&lt;br /&gt;&lt;br /&gt;# alt_disk_install -X                                                                                       &lt;br /&gt;+-----------------------------------------------------------------------------+                             &lt;br /&gt;ATTENTION: calling new module /usr/sbin/alt_rootvg_op. Please see the alt_rootvg_op man page and documentation for more details.                                                                         &lt;br /&gt;Executing command: {/usr/sbin/alt_rootvg_op -X }                                                            &lt;br /&gt;+-----------------------------------------------------------------------------+                             &lt;br /&gt;Bootlist is set to the boot disk: hdisk0 blv=hd5                                                            &lt;br /&gt;&lt;br /&gt;LISTO!!!&lt;br /&gt;# lsvg                                                                                                      &lt;br /&gt;rootvg</description><link>http://osadmin.blogspot.com/2010/02/problema-con-el-vg-altinstrootvg.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-4949772306149305507</guid><pubDate>Thu, 14 Jan 2010 18:12:00 +0000</pubDate><atom:updated>2010-01-14T10:23:00.387-08:00</atom:updated><title>Convertir cualquier documento a PDF desde un Windows</title><description>Lógicamente existen impresoras PDF y piezas de software que hacen esto de un solo paso. Aquí se da una solución de emergencia y gratuíta.&lt;br /&gt;&lt;br /&gt;Necesitamos una impresora postcript (nos la regala Microsoft) y un conversor postcript a PDF. La secuencia será imprimir a postscript en un fichero y posteriormente convertirlo a PDF con ghostscript.&lt;br /&gt;&lt;br /&gt;1.- Descargamos e instalamos GPL ghostscript 8.64 o similar de &lt;a href=&quot;http://pages.cs.wisc.edu/~ghost/doc/GPL/gpl864.htm&quot;&gt;http://pages.cs.wisc.edu/~ghost/doc/GPL/gpl864.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2.- Desde el panel de control, en Impresoras nos agregamos una impresora local (inexistente) postscript (PS) a color. Por ejemplo, &quot;Apple Laserwriter 12/640 PS&quot;. Es importante que cuando nos pregunte el tipo de puerto seleccionemos &quot;FILE:&quot; del desplegable.&lt;br /&gt;&lt;br /&gt;3.- Abrimos el documento que nos interesa y procedemos a imprimirlo seleccionando esa impresora. Nos pedirá el nombre de un fichero y le ponemos por ejemplo &quot;c:\factura&quot;.&lt;br /&gt;&lt;br /&gt;4.- Nos desplazamos a directorio donde está instalado el ghostscript. En mi caso C:\Archivos de programa\gs\gs8.63\bin.&lt;br /&gt;&lt;br /&gt;5.- Ejecutamos el sencillo comando:&lt;br /&gt;&lt;br /&gt;gswin32c.exe c:\factura.prn -sOutputFile=c:\factura.pdf -sDEVICE=pdfwrite -dBATCH -dNOPAUSE&lt;br /&gt;&lt;br /&gt;6.- En c:\factura.pdf está nuestro oscuro objeto del deseo.&lt;br /&gt;&lt;br /&gt;Voy a decir una tontería, pero para el siguiente documento que nos urja pasar a PDF solo repetiremos desde el paso 3.</description><link>http://osadmin.blogspot.com/2010/01/convertir-cualquier-documento-pdf-desde.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-5263537006312935750</guid><pubDate>Tue, 17 Mar 2009 10:28:00 +0000</pubDate><atom:updated>2009-03-17T03:36:31.348-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AIX ssh PAM</category><title>AIX: openssh</title><description>Cuando arrancamos el demonio sshd, al menos la versión 3.4.2 nos podemos encontrar con que rechaza la conexión y aparecen cosas en los logs como:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;Mar 17 00:21:58 machine auth|security:debug /usr/sbin/sshd PAM: pam_acct_mgmt: error La cuenta del usuario ha caducado&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;Mar 17 00:21:58 machine auth|security:info sshd[221312]: PAM rejected by account configuration[17]: La cuenta del usuario ha caducado&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ó&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;Mar 17 00:26:57 server auth|security:info syslog: ssh: failed login attempt for user from host&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;Mar 17 00:26:57 server auth|security:info sshd[507984]: Failed password for user from IP port 40984 ssh2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nos puede confundir el hecho de que tuviéramos otro demonio SSH funcionando anteriormente (compilado por nosotros mismos).&lt;br /&gt;&lt;br /&gt;En resumen, lo que está pasando es que no tenemos bien configurado el /etc/pam.conf en el que hay que incluir:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;sshd    auth    required        /usr/lib/security/pam_aix&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;sshd    account required        /usr/lib/security/pam_aix&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;sshd    password  required      /usr/lib/security/pam_aix&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;sshd    session required        /usr/lib/security/pam_aix&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para permitir que el servicio sshd tenga la opción de autenticar. Si teníamos otro servidor SSH funcionando antes, probablemente no estaba compilado con PAM.</description><link>http://osadmin.blogspot.com/2009/03/aix-openssh.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-3248257831747198356</guid><pubDate>Fri, 13 Feb 2009 11:54:00 +0000</pubDate><atom:updated>2009-02-13T04:06:57.079-08:00</atom:updated><title>AIX: Cannot set process environment</title><description>El problema es&lt;br /&gt;&lt;br /&gt;$ su -&lt;br /&gt;Passwd:&lt;br /&gt;3004-505 Cannot set process environment&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Solución&lt;/span&gt;&lt;br /&gt;La solución pasa por detectar qué hay de anómalo en el perfil en este caso de root. Contamos según el resultado con que sí sabemos la contraseña del root (en otro caso habríamos obtenido un error de autenticación) y podemos hacer &quot;su - -c &quot;&lt;br /&gt;&lt;br /&gt;$ sudo - -c &#39;usrck -n root&#39;&lt;br /&gt;3001-602 The user name root is not unique.&lt;br /&gt;3001-603 The UID 0 is duplicated for user root.&lt;br /&gt;&lt;br /&gt;Antes de asustarnos más comprobamos quiénes son esos dos usuarios con UID &quot;0&quot;.&lt;br /&gt;$ grep :0:0: /etc/passwd&lt;br /&gt;root:!:0:0::/:/usr/usr/bin/ksh&lt;br /&gt;root:!:0:0::/:/usr/bin/ksh&lt;br /&gt;&lt;br /&gt;Se trata de eliminar una de las entradas. Como podemos hacer uso del &quot;su&quot; en las condiciones arriba descritas, hacemos una copia del /etc/passwd la retocamos y la devolvemos a su sitio de nuevo ya retocada.&lt;br /&gt;&lt;br /&gt;En este caso, el problema que tenía el usuario era ese, pero el comando &lt;span style=&quot;font-weight: bold;&quot;&gt;usrck&lt;/span&gt; podía habernos advertido de otra cosa diferente. Con &quot;su -&quot; nos apañamos para arreglarlo.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Origen del problema&lt;/span&gt;&lt;br /&gt;Realmente son 2. El primero es un despiste humano o un fallo del smit al modificar el shell (debe hacer mucho tiempo porque no lo recuerdo). Pero el decisivo es que al migrar de AIX 5.2 a AIX6.1 al shell del root les ha puesto &lt;span style=&quot;font-weight: bold;&quot;&gt;/usr/&lt;/span&gt; delante, lo que ha convertido el shell de la primera de las 2 entradas en inexistente.</description><link>http://osadmin.blogspot.com/2009/02/aix-cannot-set-process-environment.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-6260934134006221669</guid><pubDate>Fri, 06 Feb 2009 13:28:00 +0000</pubDate><atom:updated>2009-02-06T05:40:05.034-08:00</atom:updated><title>AIX: savebase failed</title><description>En alguna ocasión he comentado el error &quot;&lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;savebase&lt;/span&gt;&quot; haciendo operaciones del tipo que sea como administrador. Esto hay que interpretarlo como que no puede guardar los cambios y ante un eventual reinicio puede que ni arranque el servidor.&lt;br /&gt;&lt;br /&gt;Ej:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new; font-weight: bold;&quot;&gt;# extendvg rootvg hdisk1&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;0516-1734 extend vg: Warning, savebase failed.  Please manually run &#39;savebase&#39; before rebooting.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lo más preocupante es que ejecutamos &quot;&lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;savebase&lt;/span&gt;&quot; sin obtener ningún error pero el mensaje anterior vuelve a aparecer en la próxima ocasión que hacemos algo delicado.&lt;br /&gt;&lt;br /&gt;Se confirman las sospechas cuando el verbose dice lo siguiente:&lt;br /&gt;&lt;span style=&quot;font-family: courier new;font-size:85%;&quot; &gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;# savebase -v  &lt;/span&gt;&lt;br /&gt;non-bootable LV name given&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;SOLUCION&lt;/span&gt;&lt;br /&gt;Lo primero es asegurarnos de que &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;/dev/ipldevice&lt;/span&gt; apunta al dispositivo correcto. Para nuestro ejemplo, el &lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;rootvg&lt;/span&gt; está en el disco &lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;hdisk0&lt;/span&gt; y nos vamos a asegurar de que sea así:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new; font-weight: bold;&quot;&gt;# rm  /dev/ipldevice&lt;br /&gt;# ln /dev/hdisk0 /dev/ipldevice&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;# bosboot -ad /dev/ipldevice  &lt;/span&gt;    &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;bosboot: Boot image is 36250 512 byte blocks.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new; font-weight: bold;&quot;&gt;# savebase -v&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;saving to &#39;/dev/hd5&#39;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;145 CuDv objects to be saved&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;706 CuAt objects to be saved&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;47 CuDep objects to be saved&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;75 CuVPD objects to be saved&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;474 CuDvDr objects to be saved&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;2 CuPath objects to be saved&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;0 CuPathAt objects to be saved&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;0 CuData objects to be saved&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;Number of bytes of data to save = 98151 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;Compressing data&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;Compressed data size is = 25679 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;        bi_start     = 0x3600&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;        bi_size      = 0x11cfc00&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;        bd_size      = 0x11afc00&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;        ram FS start = 0x513130&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;        ram FS size  = 0xc9cad0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;        sba_start    = 0x11b3200&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;        sba_size     = 0x20000&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;        sbd_size     = 0x6453&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;Checking boot image size:&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;        new save base byte cnt = 0x6453&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;Wrote 25683 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;Successful completion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Finalmente configuramos el disco en el bootlist si no lo estaba:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new; font-weight: bold;&quot;&gt;# bootlist -m normal hdisk0&lt;br /&gt;# bootlist -m normal -o&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;hdisk0&lt;/span&gt;&lt;/span&gt;</description><link>http://osadmin.blogspot.com/2009/02/aix-savebase-failed.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-4430542791029846662</guid><pubDate>Wed, 04 Feb 2009 13:38:00 +0000</pubDate><atom:updated>2009-02-04T05:44:22.414-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AIX hdiskpower alt_disk_install</category><title>AIX: target hdisk does not exist</title><description>Estamos en la situación de que el disco existe y lo vemos sin problemas el &quot;lsdev&quot; y &quot;lspv&quot;, pero sin embargo algunos comandos dicen que no existe:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;# alt_disk_install -C -B hdiskpower1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;0505-125 alt_disk_install: target disk hdiskpower1 does not exist.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En mi caso era debido a que el disco estaba asignado también a otro host en la cabina de discos. Dicho host no lo estaba usando pero casualmente era un VIOS y lo tenía bloqueado porque existía un mapeo sobre el disco. La conclusión es que solamente el mapeo (el host virtual estaba parado esperando el disco) bloquea el disco.&lt;br /&gt;&lt;br /&gt;La solución fué quitar el mapeo en el VIOS para que me permitiera trabajar en el otro host.</description><link>http://osadmin.blogspot.com/2009/02/aix-target-hdisk-does-not-exist.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-2550895381432675740</guid><pubDate>Wed, 28 Jan 2009 17:48:00 +0000</pubDate><atom:updated>2009-01-28T10:25:19.119-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">c# development programación office</category><title>c# y excel</title><description>Me vais a disculpar la salida de tono en el blog, pero recientemente he tenido que ayudar a una persona a resolver la manera de procesar información de un fichero Excel desde una aplicación C#. Lo pongo aquí porque seguro que a alguién le sirve.&lt;br /&gt;Con poco esfuerzo lo hacemos en Visual Basic también pero aquí os lo dejo tal cual en C#.&lt;br /&gt;&lt;br /&gt;El ejemplo abre un hoja de cálculo Excel llamado &quot;ficheroinput.xls&quot; como una base de datos y exporta las filas deseadas a un fichero html llamado &quot;output.html&quot;.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;code script&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;br /&gt;string strcon;&lt;br /&gt;&lt;br /&gt;//Con la siguiente funciona, pero la otra más simplificada tambien sirve&lt;/span&gt;&lt;br /&gt;strcon = &quot;Dsn=Excel Files;Provider=Microsoft.Jet.OLEDB.4.0;DBQ=ficheroinput.xls;Extended Properties=\&quot;Excel 12.0;Readonly=False;IMEX=0\&quot;&quot;;&lt;br /&gt;strcon = &quot;Dsn=Excel Files;Provider=Microsoft.Jet.OLEDB.4.0;DBQ=ficheroinput.xls;&quot;; &lt;br /&gt;&lt;br /&gt;//Abrimos la conexion&lt;br /&gt;System.Data.Odbc.OdbcConnection conn;&lt;br /&gt;conn = new System.Data.Odbc.OdbcConnection(strcon);&lt;br /&gt;conn.Open();&lt;br /&gt;&lt;br /&gt;//Nos vamos a interesar solamente los datos de las 2 primeras columnas y 3 filas de la hoja &quot;Hoja1&quot;&lt;br /&gt;//Creamos la consulta y la mostramos por pantalla. &lt;br /&gt;//Se considera a la primera fila no vacía como la cabecera de las columna de datos&lt;br /&gt;//por lo que hay que poner nombres a las columnas&lt;br /&gt;System.Data.Odbc.OdbcCommand misel;&lt;br /&gt;misel = conn.CreateCommand();&lt;br /&gt;misel.CommandText = &quot; Select * from [h$A1:B4];&quot;;&lt;br /&gt;System.Data.Odbc.OdbcDataReader r = misel.ExecuteReader();&lt;br /&gt;&lt;br /&gt;//Guardamos los datos en el fichero en formato htm&lt;br /&gt;System.IO.StreamWriter writer = new System.IO.StreamWriter(&quot;output.html&quot;, false);&lt;br /&gt;string lineaweb;&lt;br /&gt;writer.WriteLine(&quot;&lt;&quot;+&quot;html&gt;&lt;&quot;+&quot;body&gt;&lt;&quot;+&quot;table&gt;&quot;);&lt;br /&gt;try {    &lt;br /&gt;    while (r.Read()) {&lt;br /&gt;         lineaweb = &quot;&lt;&quot;+&quot;tr&gt;&quot;;&lt;br /&gt;         for (int i = 0; i &lt; 7; i++) {&lt;br /&gt;                 lineaweb = lineaweb + &quot;&lt;&quot;+&quot;td&gt;&quot; + notnull(r, i) + &quot;&lt;/&quot;+&quot;td&gt;&quot;;&lt;br /&gt;         }              &lt;br /&gt;         writer.WriteLine(lineaweb+&quot;&lt;/&quot;+&quot;tr&gt;&quot;);&lt;br /&gt;    }&lt;br /&gt;    writer.WriteLine(&quot;&lt;/&quot;+&quot;table&gt;&lt;/&quot;+&quot;body&gt;&lt;/&quot;+&quot;html&gt;&quot;);&lt;br /&gt;}&lt;br /&gt;catch {&lt;br /&gt;     Console.WriteLine(&quot;error leyendo del fichero&quot;);&lt;br /&gt;}&lt;br /&gt;r.Close();&lt;br /&gt;writer.Close();&lt;br /&gt;misel.Dispose();&lt;br /&gt;conn.Close();&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;La función &lt;span style=&quot;font-weight:bold;&quot;&gt;notnull &lt;/span&gt;de fabricación casera es la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;code script&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;br /&gt;string notnull(System.Data.Odbc.OdbcDataReader result,int columna) {&lt;br /&gt;   string res;&lt;br /&gt;   try {&lt;br /&gt;      res = result.GetString(columna);&lt;br /&gt;   }&lt;br /&gt;   catch  {&lt;br /&gt;      res = &quot;&quot;;&lt;br /&gt;   }&lt;br /&gt;   return res;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;</description><link>http://osadmin.blogspot.com/2009/01/c-y-excel.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-5784311717568321686</guid><pubDate>Tue, 20 Jan 2009 19:02:00 +0000</pubDate><atom:updated>2009-01-22T10:31:03.235-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AIX alt_disk_install command comando clon storage rootvg instalación installation backup</category><title>AIX: error en alt_disk_install</title><description>&lt;pre class=&quot;code script&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;Algunos errores son como la sangre en una herida: son mas escandalosos que graves.&lt;br /&gt;Por ejemplo tenemos este haciendo un rootvg alternativo:&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;[...]&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;Creating /alt_inst/var file system.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;Generating a list of files &lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;for backup and restore into the alternate file system...&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;sort: 0653-657 Se ha producido un error de grabación al clasificar.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;Backing-up the rootvg files and restoring them to the alternate file system...&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;/usr/bin/lslpp: No such file or directory&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;Modifying ODM on cloned disk.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;0518-402 odmadd:  No se puede abrir la clase:  CuAt, línea de stanza: 2  /tmp/.fake_cuat&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;        Compruebe el nombre de vía de acceso y los permisos.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;0518-402 odmadd:  No se puede abrir la clase:  CuDv, línea de stanza: 2  /tmp/.fake_cudv&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;        Compruebe el nombre de vía de acceso y los permisos.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;0518-402 odmadd:  No se puede abrir la clase:  CuDvDr, línea de stanza: 2  /tmp/.fake_cudvdr&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;        Compruebe el nombre de vía de acceso y los permisos.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;Un archivo o directorio en la vía de acceso no existe.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;/usr/sbin/alt_disk_install[66]: /alt_inst/etc/filesystems.save: 0403-005 No se puede crear el archivo especificado.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;cp: /alt_inst/etc/filesystems.save: Un archivo o directorio en la vía de acceso no existe.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;Building boot image on cloned disk.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;mv: 0653-401 No se puede renombrar /alt_inst/dev/hd5 a /alt_inst/dev/orig.hd5:&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;             Un archivo o directorio en la vía de acceso no existe.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;mknod: /alt_inst/dev/hd5: Un archivo o directorio en la vía de acceso no existe.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;mv: 0653-401 No se puede renombrar /alt_inst/dev/hdisk0 a /alt_inst/dev/orig.hdisk0:&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;             Un archivo o directorio en la vía de acceso no existe.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;mv: 0653-401 No se puede renombrar /alt_inst/dev/rhdisk0 a /alt_inst/dev/orig.rhdisk0:&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;             Un archivo o directorio en la vía de acceso no existe.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;mknod: /alt_inst/dev/hdisk0: Un archivo o directorio en la vía de acceso no existe.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;mknod: /alt_inst/dev/rhdisk0: Un archivo o directorio en la vía de acceso no existe.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;0518-506 odmget: No se puede abrir la clase de objeto CuAt&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;        Compruebe el nombre de vía de acceso y los permisos.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;0518-506 odmget: No se puede abrir la clase de objeto CuAt&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;        Compruebe el nombre de vía de acceso y los permisos.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;0518-506 odmget: No se puede abrir la clase de objeto CuAt&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;        Compruebe el nombre de vía de acceso y los permisos.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;/usr/sbin/bosboot: No such file or directory&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;/usr/sbin/bosboot: No such file or directory&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;0505-120 alt_disk_install: Error running bosboot in the cloned&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;root volume group.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;Cleaning up.&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;desmontaje forzado de /alt_inst/var&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;[...]&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;Diría uno que está corrupta la &lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;ODM&lt;/span&gt; o incluso que viene el apocalipsis. &lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;span style=&quot;COLOR: rgb(0,0,0)&quot;&gt;Yo solo tuve que ampliar el &lt;span style=&quot;FONT-WEIGHT: bold&quot;&gt;/var&lt;/span&gt; para que la larguísima lista de ficheros contenidos a la sazón en el rootvg cupiera para hacer el posterior sort, etc...&lt;/span&gt;&lt;br style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&lt;br /&gt;&lt;/pre&gt;</description><link>http://osadmin.blogspot.com/2009/01/aix-error-en-altdiskinstall.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-3598876946813261288</guid><pubDate>Tue, 20 Jan 2009 18:35:00 +0000</pubDate><atom:updated>2009-01-20T10:59:58.020-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">aix linux tcpdump lsof networking</category><title>AIX/Linux: lsof</title><description>&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;El otro día hablé sobre tcpdump e introduje un poquito como usarlo para capturar tráfico. Ahora quiero ponerme en la situación del administrador que quiere saber qué proceso está generando el tráfico.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Para ello empleo &quot;lsof&quot; que viene para todo estos sistemas operativos en la revisión 4.78:&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0);font-size:85%;&quot; &gt;&lt;pre class=&quot;code script&quot;&gt;&lt;br /&gt;         AIX 5.[123]&lt;br /&gt;         Apple Darwin 7.x and 8.x for Power Macintosh systems&lt;br /&gt;         FreeBSD 4.x, 4.1x, 5.x and [67].x for x86-based systems&lt;br /&gt;         FreeBSD 5.x and [67].x for Alpha, AMD64 and Sparc64-based systems&lt;br /&gt;         HP-UX 11.00, 11.11 and 11.23&lt;br /&gt;         Linux 2.1.72 and above for x86-based systems&lt;br /&gt;         NetBSD 1.[456], 2.x and 3.x for Alpha, x86, and SPARC-based systems&lt;br /&gt;         NEXTSTEP 3.[13] for NEXTSTEP architectures&lt;br /&gt;         OpenBSD 2.[89] and 3.[0-9] for x86-based systems&lt;br /&gt;         OPENSTEP 4.x&lt;br /&gt;         SCO OpenServer Release 5.0.6 for x86-based systems&lt;br /&gt;         SCO|Caldera UnixWare 7.1.4 for x86-based systems&lt;br /&gt;         Solaris 2.6, 8, 9 and 10&lt;br /&gt;         Tru64 UNIX 5.1&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Seguro que ya habeis leído por ahí que en Unix todo son ficheros (incluído los directorios!). Pues este comando lo viene a poner de manifiesto porque nos muestra tanto ficheros abiertos, como dispositivos /dev, como conexiones de red y todo ello asociado al proceso que los posee.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Con este comando ya podemos contestar a las preguntas ¿ quién está generando tal o cual tráfico ? ¿ hay algún proceso oracle conectado al LDAP ? ¿ qué procesos están bloqueando el sistema de ficheros que quiero desmontar ? y muchas otras.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Aquí proporciono algunos ejemplos que hablan por sí solos.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 0);&quot;&gt;Todos los procesos y objetos en uso por ellos&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0);font-size:85%;&quot; &gt;&lt;pre class=&quot;code script&quot;&gt;&lt;br /&gt;# lsof&lt;br /&gt;COMMAND    PID      USER   FD      TYPE     DEVICE     SIZE       NODE NAME&lt;br /&gt;init         1      root  cwd       DIR      253,0     4096          2 /&lt;br /&gt;init         1      root  rtd       DIR      253,0     4096          2 /&lt;br /&gt;init         1      root  txt       REG      253,0    38620     291774 /sbin/init&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Casi no hace falta comentario porque la cabecera es suficientemente aclaratoria.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 0);&quot;&gt;Muestra los procesos que utilizan algún objeto de /lib o directorios descendientes&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0);font-size:85%;&quot; &gt;&lt;pre class=&quot;code script&quot;&gt;&lt;br /&gt;# lsof +D /lib&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 0);&quot;&gt;Muestra los procesos con puertos TCP a la escucha sin resolución de nombres&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0);font-size:85%;&quot; &gt;&lt;pre class=&quot;code script&quot;&gt;# lsof -P | grep LISTEN&lt;br /&gt;sshd      2395      root    3u     IPv6       6947                 TCP *:22 (LISTEN)&lt;br /&gt;mysqld    2513     mysql   10u     IPv4       7086                 TCP *:3306 (LISTEN)&lt;br /&gt;smbd      2579      root   20u     IPv4       7265                 TCP *:445 (LISTEN)&lt;br /&gt;smbd      2579      root   21u     IPv4       7266                 TCP *:139 (LISTEN)&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 0, 0);&quot;&gt;Objetos abiertos por el proceso init&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0);font-size:85%;&quot; &gt;&lt;pre class=&quot;code script&quot;&gt;&lt;br /&gt;# lsof -c init&lt;br /&gt;COMMAND PID USER   FD   TYPE DEVICE    SIZE   NODE NAME&lt;br /&gt;init      1 root  cwd    DIR  253,0    4096      2 /&lt;br /&gt;init      1 root  rtd    DIR  253,0    4096      2 /&lt;br /&gt;init      1 root  txt    REG  253,0   38620 291774 /sbin/init&lt;br /&gt;init      1 root  mem    REG  253,0  125736 618768 /lib/ld-2.5.so&lt;br /&gt;init      1 root  mem    REG  253,0 1602320 618769 /lib/libc-2.5.so&lt;br /&gt;init      1 root  mem    REG  253,0   16428 618783 /lib/libdl-2.5.so&lt;br /&gt;init      1 root  mem    REG  253,0  242880 618787 /lib/libsepol.so.1&lt;br /&gt;init      1 root  mem    REG  253,0   93508 618788 /lib/libselinux.so.1&lt;br /&gt;init      1 root   10u  FIFO   0,16           1286 /dev/initctl&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;/span&gt;</description><link>http://osadmin.blogspot.com/2009/01/aixlinux-lsof.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8804953694443657519.post-3439517486766743835</guid><pubDate>Mon, 19 Jan 2009 18:30:00 +0000</pubDate><atom:updated>2009-01-19T10:51:51.434-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">smb samba linux public password share</category><title>Linux: carpeta pública con SAMBA</title><description>&lt;span style=&quot;color:#000000;&quot;&gt;La siguiente receta permite configurar una carpeta de acceso público sin necesidad de usar usuario y contraseña (que no será solicitada).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#000000;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color:#000000;&quot;&gt;En principio es para la versión 3.0.28 de Samba que en CentOS 5.2 está constituida por los paquetes:&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;samba-common-3.0.28-1.el5_2.1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;samba-client-3.0.28-1.el5_2.1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;samba-3.0.28-1.el5_2.1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#000000;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color:#000000;&quot;&gt;El siguiente es el contenido ejemplo de un fichero que permite que un recurso compartido llamado &quot;publica&quot; y localizado en &quot;/home/publica&quot; sea de acceso libre sin usuario y contraseña:&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;[global] &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;     workgroup = WORKGROUP &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color:#000000;&quot;&gt;          &lt;span style=&quot;font-family:courier new;font-size:85%;&quot;&gt;server string = Samba Server &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;     log file = /var/log/samba/%m.log &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;     max log size = 0 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000066;&quot;&gt;&lt;strong&gt;     security = share&lt;/strong&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;color:#000066;&quot;&gt;&lt;strong&gt;     usershare allow guests = yes&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;color:#000066;&quot;&gt;&lt;strong&gt;     browseable = yes&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color:#000000;&quot;&gt;[publica] &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;     path = /home/publica &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;     writeable = no &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;color:#000066;&quot;&gt;&lt;strong&gt;     guest ok = yes&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#000000;&quot;&gt;En este caso, además la carpeta es de sólo lectura. Como complemento a esta configuración es necesario que el fichero &lt;strong&gt;/etc/samba/smb.conf&lt;/strong&gt; contenga un mapeo para el usuario &quot;&lt;strong&gt;guest&lt;/strong&gt;&quot; a un usuario local con permisos de ejecución y lectura para las carpetas y lectura para los ficheros. Por ejemplo, el fichero que viene por defecto:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#000000;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;# Unix_name = SMB_name1 SMB_name2 ...&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;root = administrator admin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;nobody = guest pcguest smbguest&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#000000;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#000000;&quot;&gt;El resultado de la configuración de &lt;em&gt;&lt;strong&gt;smb.conf&lt;/strong&gt;&lt;/em&gt; lo puedes comprobar con &quot;&lt;strong&gt;testparm&lt;/strong&gt;&quot;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;$testparm&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;Load smb config files from /etc/samba/smb.conf&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;Processing section &quot;[publica]&quot;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;Loaded services file OK.Server role: ROLE_STANDALONE&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;Press enter to see a dump of your service definitions&lt;br /&gt;[global] &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;     server string = Samba Server &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;     security = SHARE &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;     log file = /var/log/samba/%m.log &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;     max log size = 0 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;     usershare allow guests = Yes&lt;br /&gt;[publica] &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;     path = /home/publica &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;font-size:85%;color:#000000;&quot;&gt;     guest ok = Yes&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color:#000000;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#000000;&quot;&gt;Observa que hay opciones que desaparecen con el comando anterior. El motivo puede ser que esté mal escrita o no soportada y es ignorada, o que coincide con el valor por defecto de la propiedad. Una forma interesante de comprobar ambas cosas y sobre todo ver las opciones de configuración sobre las que debemos actuar es &quot;testparm -v&quot;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:#000000;&quot;&gt;Un último obstáculo puede ser tener SElinux activado. Se manifiesta en que no puedes publicar directorios de creación reciente y si el /tmp o el /home. Antes de volverte loco con la configuración de SAMBA deshabilita SElinux para probar el acceso a la carpeta.&lt;/span&gt;</description><link>http://osadmin.blogspot.com/2009/01/linux-carpeta-pblica-con-samba.html</link><author>noreply@blogger.com (Jose Fco. Hidalgo)</author><thr:total>0</thr:total></item></channel></rss>