<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title># rm-rf.es &#187; Unix</title>
	<atom:link href="http://rm-rf.es/categoria/unix/feed/" rel="self" type="application/rss+xml" />
	<link>http://rm-rf.es</link>
	<description>Administración de sistemas, Unix, Linux, FreeBSD, Windows, hosting, dominios, servidores...</description>
	<lastBuildDate>Fri, 18 May 2012 21:00:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Bucle de password expirado en ldap nativo RHEL contra Sun LDAP</title>
		<link>http://rm-rf.es/bucle-de-password-expirado-en-ldap-nativo-rhel-contra-sun-ldap/</link>
		<comments>http://rm-rf.es/bucle-de-password-expirado-en-ldap-nativo-rhel-contra-sun-ldap/#comments</comments>
		<pubDate>Tue, 08 May 2012 18:48:31 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[RHEL]]></category>
		<category><![CDATA[solaris]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2642</guid>
		<description><![CDATA[Me ha resultado difícil concretar el problema en tan poco espacio en el título. La situación es la siguiente: Sun LDAP Server Cliente Red Hat Enterprise Linux con LDAP nativo configurado contra el servidor de Sun La configuración del LDAP Nativo en Red Hat es relativamente sencilla, únicamente lanzamos el authconfig-tui o pasamos los parámetros [...]]]></description>
			<content:encoded><![CDATA[<p>Me ha resultado difícil concretar el problema en tan poco espacio en el título. La situación es la siguiente:</p>
<ul>
<li><strong>Sun LDAP Server</strong></li>
<li><strong>Cliente Red Hat Enterprise Linux con LDAP nativo</strong> configurado contra el servidor de Sun</li>
</ul>
<p>La configuración del LDAP Nativo en Red Hat es relativamente sencilla, únicamente lanzamos el <strong>authconfig-tui</strong> o pasamos los parámetros correspondientes al comando authconfig. Una vez configurado, ya deberíamos poder autenticarnos con los usuarios del LDAP.</p>
<p>En este caso concreto, todo funcionaba correctamente a excepción de la autenticación. Si hacíamos su desde root a cualquier usuario del LDAP funcionaba, la salida del comando <strong>getent passwd</strong> o <strong>getent shadow</strong> mostraba todos los usuarios, podíamos hacer <strong>ldapsearch</strong>, etc.</p>
<p>Con la autenticación, nos pedía continuamente cambiar la password porque había expirado:</p>
<pre>$ ssh test@10.0.0.15
You are required to change your LDAP password immediately.
Warning: Your password has expired, please change it now
...
...</pre>
<p>Por lo que sea, los servidores Solaris en nuestro caso hacían caso omiso a los atributos de expiración, llevabamos años sin problemas, pero RHEL sí que los revisaba. Todo debería haber funcionado una vez cambiada la clave, pero los servidores RHEL seguían pidiendo continuamente que se cambiara (en Solaris sí que se accedía con la nueva clave).</p>
<p>Para poder acceder correctamente desde Red Hat (y creo que desde cualquier máquina Linux) hay que prestar especialmente atención a estos atributos de LDAP para cada usuario:</p>
<pre>shadowMax:
shadowMin:
shadowWarning:</pre>
<p>Si están presentes, es necesario que su valor este <strong>vacío</strong> (no 0) para solucionar el problema. O eso, o especificar una expiración de 99999 en shadowMax&#8230; una vez cambiado accederéis sin problemas vía ssh  y con el resto de autenticación.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/monitorizar-oracle-iplanet-web-server-con-get-perfdump/" title="Monitorizar Oracle iPlanet Web Server con get-perfdump">Monitorizar Oracle iPlanet Web Server con get-perfdump</a></li><li><a href="http://rm-rf.es/usar-autenticacion-ldap-openldap-con-opensshd-sshd/" title="Usar autenticación LDAP (OpenLDAP) con OpenSSHD (sshd)">Usar autenticación LDAP (OpenLDAP) con OpenSSHD (sshd)</a></li><li><a href="http://rm-rf.es/login-ssh-sin-password-de-forma-rapida-y-sencilla/" title="Login SSH sin password de forma rápida y sencilla">Login SSH sin password de forma rápida y sencilla</a></li><li><a href="http://rm-rf.es/que-es-apipazeroconf-en-centosrhel-y-como-deshabilitarlo-169-254-x-y/" title="¿Qué es APIPA/zeroconf y cómo deshabilitarlo en CentOS/RHEL (169.254.x.y)?">¿Qué es APIPA/zeroconf y cómo deshabilitarlo en CentOS/RHEL (169.254.x.y)?</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/bucle-de-password-expirado-en-ldap-nativo-rhel-contra-sun-ldap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacer persistentes los cambios en ulimit (limits.conf)</title>
		<link>http://rm-rf.es/hacer-persistentes-los-cambios-en-ulimit-limits-conf/</link>
		<comments>http://rm-rf.es/hacer-persistentes-los-cambios-en-ulimit-limits-conf/#comments</comments>
		<pubDate>Wed, 02 May 2012 19:04:28 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[red hat]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[ulimit]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2633</guid>
		<description><![CDATA[Cuando cambiamos algún valor de los disponibles en ulimit, sólo se mantiene en nuestra sesión. Si salimos y volvemos a entrar los perdemos. Esto es útil para cambios temporales pero no cuando queremos que sean persistentes tras el cierre de sesión. Como ya sabéis la mayoría, el comando ulimit -a nos dice los valores y [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando cambiamos algún valor de los disponibles en <strong>ulimit</strong>, sólo se mantiene en nuestra sesión. Si salimos y volvemos a entrar los perdemos. Esto es útil para cambios temporales pero no cuando queremos que sean persistentes tras el cierre de sesión.</p>
<p>Como ya sabéis la mayoría, el comando <strong>ulimit -a</strong> nos dice los valores y límites establecidos para nuestro usuario:</p>
<pre>$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited</pre>
<p>Los que más se suelen cambiar son el número de ficheros abiertos de forma simultanea por el usuario, el número de procesos por usuario, ciclos de cpu, etc. Para nuestra sesión, lo solemos hacer directamente en la línea de comandos:</p>
<pre># ulimit -n
1024
# ulimit -n 2048
# ulimit -n
2048</pre>
<p>Si salimos de la sesión y entramos de nuevo, el valor volverá a ser 1024. En el caso de Red Hat y derivados, así como Debian debemos especificar estos valores en el fichero <strong>/etc/security/limits.conf</strong>, así los haremos persistentes.</p>
<p>El propio fichero está perfectamente documentado con comentarios, sino, también tenemos la página man de limits.conf para más información:</p>
<pre>$ man limits.conf</pre>
<pre>
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - an user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#        - NOTE: group and wildcard limits are not applied to root.
#          To apply a limit to the root user, <domain> must be
#          the literal username root.
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#        - chroot - change root to directory (Debian-specific)
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4
</pre>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/the-debian-administrators-handbook/" title="The Debian Administrator’s Handbook">The Debian Administrator’s Handbook</a></li><li><a href="http://rm-rf.es/nmap-online-para-tu-ip-o-clase-c/" title="Nmap Online para tu IP o Clase C">Nmap Online para tu IP o Clase C</a></li><li><a href="http://rm-rf.es/faq-de-rhcs-red-hat-cluster-suite/" title="FAQ de RHCS (Red Hat Cluster Suite)">FAQ de RHCS (Red Hat Cluster Suite)</a></li><li><a href="http://rm-rf.es/red-hat-cluster-generic-error-al-crear-un-ip-resource/" title="Red Hat Cluster: &#8220;generic error&#8221; al crear un IP Resource">Red Hat Cluster: &#8220;generic error&#8221; al crear un IP Resource</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/hacer-persistentes-los-cambios-en-ulimit-limits-conf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Communigate Pro: enrutar un dominio local a un servidor externo</title>
		<link>http://rm-rf.es/communigate-pro-enrutar-un-dominio-local-a-un-servidor-externo/</link>
		<comments>http://rm-rf.es/communigate-pro-enrutar-un-dominio-local-a-un-servidor-externo/#comments</comments>
		<pubDate>Sat, 17 Mar 2012 14:23:55 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Communigate Pro]]></category>
		<category><![CDATA[mta]]></category>
		<category><![CDATA[routing]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2579</guid>
		<description><![CDATA[Hay situaciones, que aunque sean poco comunes pueden suceder. Por ejemplo, tener un dominio dado de alta en el sistema como local pero cuyo servidor de correo real está en un servidor externo. En un comportamiento normal, al detectarse el correo como local, directamente se enruta localmente sin hacer consulta al DNS. En estos casos, [...]]]></description>
			<content:encoded><![CDATA[<p>Hay situaciones, que aunque sean poco comunes pueden suceder. Por ejemplo, <strong>tener un dominio dado de alta en el sistema como local pero cuyo servidor de correo real está en un servidor externo</strong>. En un comportamiento normal, <strong>al detectarse el correo como local, directamente se enruta localmente sin hacer consulta al DNS</strong>.</p>
<p>En estos casos, podemos configurar el enrutamiento para ese dominio en concreto y que sea el servidor local el que haga <strong>relay contra ese MX externo</strong>. En Communigate Pro se hace como vemos a continuación.</p>
<p>Vamos a suponer que tenemos dado de alta el dominio pruebas.com en el servidor local Communigate Pro, pero realmente el servicio de correo lo gestiona el servidor de correo 10.0.0.100. Lo que tenemos que hacer es decir al sistema que cuando detecte la recepción de un correo para este dominio lo enrute y envíe al servidor 10.0.0.100.</p>
<p>Para ello accedemos desde la HTTPA a <strong>Settings &gt; Router</strong> y añadimos la siguiente línea a la tabla de enrutamiento:</p>
<pre>prueba.com = prueba.com@[10.0.0.100]</pre>
<p>Como podéis ver, la estructura es:</p>
<pre>dominio.com = dominio.com@[IP_MX]</pre>
<p>Podemos realizar la prueba con el botón TEST que tenemos en la misma pantalla y verificar el enrutamiento:</p>
<p><strong><em>Routed to SMTP host [10.0.0100](test@pruebas.com)</em></strong></p>
<p>Para más información sobre el routing en CG Pro acceded a la ayuda oficial, sección <a href="http://www.communigate.com/cgatepro/HowTo.html#Routing " target="_blank">routing</a>.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/que-es-apipazeroconf-en-centosrhel-y-como-deshabilitarlo-169-254-x-y/" title="¿Qué es APIPA/zeroconf y cómo deshabilitarlo en CentOS/RHEL (169.254.x.y)?">¿Qué es APIPA/zeroconf y cómo deshabilitarlo en CentOS/RHEL (169.254.x.y)?</a></li><li><a href="http://rm-rf.es/anadir-la-cabecera-content-type-al-usar-el-comando-mail/" title="Añadir la cabecera Content-type al usar el comando mail o mailx">Añadir la cabecera Content-type al usar el comando mail o mailx</a></li><li><a href="http://rm-rf.es/cpanel-configurar-exim-puerto-alternativo/" title="cPanel: Configurar exim en puerto alternativo">cPanel: Configurar exim en puerto alternativo</a></li><li><a href="http://rm-rf.es/utilidades-para-mailenable/" title="Utilidades para Mailenable">Utilidades para Mailenable</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/communigate-pro-enrutar-un-dominio-local-a-un-servidor-externo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ejemplos prácticos de grep y egrep</title>
		<link>http://rm-rf.es/ejemplos-practicos-de-grep-y-egrep/</link>
		<comments>http://rm-rf.es/ejemplos-practicos-de-grep-y-egrep/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 16:19:55 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[expresiones regulares]]></category>
		<category><![CDATA[grep]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2399</guid>
		<description><![CDATA[Grep es sin duda alguna no de los comandos más utilizados en el día a día por los administradores de sistemas. Muchos no van más allá de sus usos más básicos, que si bien cumplen a la perfección su función son una mínima parte de las posibilidades que nos ofrece. Algunos de estos ejemplos se [...]]]></description>
			<content:encoded><![CDATA[<p><img class=" size-full wp-image-2402" title="grep search" src="http://rm-rf.es/wp-content/uploads/2011/12/search-logo.jpg" alt="grep search" width="180" height="179" align="right" />Grep es sin duda alguna no de los comandos más utilizados en el día a día por los administradores de sistemas. Muchos no van más allá de sus usos más básicos, que si bien cumplen a la perfección su función son una mínima parte de las posibilidades que nos ofrece. Algunos de estos ejemplos se pueden ejecutar tanto con grep como con egrep (<strong>egrep= grep -E</strong>), independientemente de que casi siempre se ejecuten con egrep en el post. Espero que os sean de utilidad.</p>
<p>Este es el texto que se va a utilizar para trabajar como ejemplo. Sí, es un fichero de configuración de un Cluster MySQL de prueba, pero es que no tenía otra cosa a mano y no me apetecía preparar un fichero específicamente para esto ;)</p>
<pre>[ndb_mgmd]
hostname=192.168.0.10           # Hostname or IP address of management node
datadir=/var/lib/mysql-cluster  # Directory for management node log files

# Options for data node "A":
[ndbd]
                                # (one [ndbd] section per data node)
hostname=192.168.0.30           # Hostname or IP address
datadir=/usr/local/mysql/data   # Directory for this data node's data files

# Options for data node "B":
[ndbd]
hostname=192.168.0.40           # Hostname or IP address
datadir=/usr/local/mysql/data   # Directory for this data node's data files

# SQL node options:
[mysqld]
hostname=192.168.0.20           # Hostname or IP address
                                # (additional mysqld connections can be
                                # specified for this node for various
                                # purposes such as running ndb_restore)</pre>
<h3>Buscar dos ó n strings distintas dentro de un mismo fichero</h3>
<p>La sintaxis es &#8216;(cadena1|cadena2|cadenaN)&#8217;. La salida será todas aquellas líneas que contienen cualquiera de esas strings. Esto nos permite hacer múltiples búsquedas en un único comando:</p>
<pre>$ egrep '(192.168.0.30|192.168.0.40)' test
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.40           # Hostname or IP address</pre>
<pre>$ egrep '(192.168.0.30|192.168.0.40|192.168.0.20)' test
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.40           # Hostname or IP address
hostname=192.168.0.20           # Hostname or IP address</pre>
<h3>Usar los corchetes para reducir el rango de búsqueda</h3>
<p>Podemos hacer uso de los corchetes [] para definir, dentro de una misma string, que una sección contenga únicamente X carácteres, un rango de ellos, etc.</p>
<p>En este caso queremos sacar únicamente los resultados que contengan 192.168.0.30 y 192.168.0.40:</p>
<pre>$ egrep 192.168.0.[30,40] test
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.40           # Hostname or IP address</pre>
<p>Pero si quisiéramos definir los rangos que queremos mostrar para los dos últimos caracteres, en este caso numéricos (se podría hacer con alfanuméricos) podemos hacerlo separando el valor inicial y el final con &#8220;-&#8221;. En este ejemplo queremos que nos muestre aquello que cumpla la condición de que el primer número del último bloque tiene que ser 0,1 ó 2:</p>
<pre>$ egrep 192.168.0.[0-2]0 test
hostname=192.168.0.10           # Hostname or IP address of management node
hostname=192.168.0.20           # Hostname or IP address</pre>
<p>Y en este que el primer número del último bloque sea 1,2 ó 3 y el último entre 0 y 9:</p>
<pre>$ egrep 192.168.0.[0-3][0-9] test
hostname=192.168.0.10           # Hostname or IP address of management node
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.20           # Hostname or IP address</pre>
<p>Un ejemplo práctico con caracteres alfanuméricos sería usar por ejemplo <strong>[a-c]test</strong>, que buscaría atest, btest y ctest ó por ejemplo <strong>[ar4d]test</strong> que buscaría atest, rtest, 4test y dtest.</p>
<h3>Uso de clases predefinidas</h3>
<p>Existen clases predefinidas que nos pueden llegar a ahorrar mucho trabajo. Son las siguientes:</p>
<pre>[:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], [:xdigit:]</pre>
<p>Lo que hace cada una de ellas está claro por su nombre, no obstante vamos a ver un ejemplo. Podemos buscar toda línea que contenga un carácter en mayúsculas:</p>
<pre>$ egrep [[:upper:]] test
hostname=192.168.0.10           # Hostname or IP address of management node
datadir=/var/lib/mysql-cluster  # Directory for management node log files
...
...</pre>
<h3>Todo lo que comienza o termina por&#8230;</h3>
<p>Esto es sencillo, <strong>las líneas comienzan por el carácter ^ y terminan con $</strong>. Por lo que:</p>
<p>Buscar todo lo que comience por &#8220;hostname&#8221;:</p>
<pre>$ egrep ^hostname test
hostname=192.168.0.10           # Hostname or IP address of management node
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.40           # Hostname or IP address
hostname=192.168.0.20           # Hostname or IP address</pre>
<p>O todo lo que termine por &#8220;node&#8221;:</p>
<pre>$ egrep node$ test
hostname=192.168.0.10           # Hostname or IP address of management node</pre>
<h3>Más expresiones regulares</h3>
<p>Ya hicimos un artículo sobre ello hace tiempo, podéis revisarlo aquí: <a title="Unix: Expresiones regulares" href="http://rm-rf.es/unix-expresiones-regulares/">unix: Expresiones regulares</a>, ahí también encontraréis unos cuantos <strong>ejemplos de grep</strong>. Son muy útiles los operadores de repetición:</p>
<pre>       ?      El carácter que precede es opcional y coincide al menos una vez.
       *      El carácter que precede coincidirá 0 o más veces.
       +      El carácter que precede coincidirá 1 o más veces.
       {n}    El carácter que precede coincidirá exactamente n veces.
       {n,}   El carácter que precede coincidirá n o más veces.
       {,m}   El carácter que precede coincidirá como máximo m veces.
       {n,m}  El carácter que precede coincidirá entre n y m veces.</pre>
<p>Podemos entonces buscar todas las líneas del fichero que contienen una IP. Usamos primero los corchetes para definir que puede haber números del 0 al 9, con las llaves decimos que habrá 1 o 3 números en cada bloque y así cuatro veces (nota: hay que escapar las llaves):</p>
<pre>$ grep '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' test
hostname=192.168.0.10           # Hostname or IP address of management node
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.40           # Hostname or IP address
hostname=192.168.0.20           # Hostname or IP address</pre>
<h3>Buscar palabras completas, contar resultados</h3>
<p>Para indicar a grep que queremos que la búsqueda se centre en palabras y no en caracteres sueltos especificamos el parámetro &#8220;-w&#8221;. Podemos ver la diferencia buscando &#8220;data&#8221; en el ejemplo, contamos los resultados satisfactorios con el parámetro &#8220;-c&#8221;:</p>
<pre>$ grep -cw data test
5
$ grep -c data test
6</pre>
<h3>Excluir resultados, sensibilidad a mayúsculas</h3>
<p>Algo básico a la hora de usar grep es conocer los parámetros &#8220;-v&#8221; que excluye la cadena indicada en el resultado y &#8220;-i&#8221; que especifica que no se tendrá en cuenta si el resultado es mayúscula o minúscula.</p>
<p>Eliminamos las líneas que tienen comodines:</p>
<pre>$ grep -v "#" test
[ndb_mgmd]

[ndbd]

[ndbd]

[mysqld]</pre>
<h3>Uso de pipes</h3>
<p>Todos usamos pipes (|) para acotar resultados. Hacemos un primer grep, con el resultado de ese hacemos otro y así sucesivamente:</p>
<pre>$ grep -iw hostname test | grep 192.168.0.[0-9]0 | grep -v 192.168.0.40 | grep -vw node
hostname=192.168.0.30           # Hostname or IP address
hostname=192.168.0.20           # Hostname or IP address</pre>
<h3>Listar los archivos que contienen la cadena</h3>
<p>Con el parámetro -l podemos ejecutar grep contra varios archivos (y de forma recursiva en múltiples directorios con -R) y recibiremos el listado de archivos con coincidencias sin mostrar las líneas que contienen la cadena:</p>
<pre>$ grep -lR SQL *
config.ini
header.xcf
iptables.sh
test
dir1/test.sql
dir2/prueba.txt
...</pre>
<h3>Número de línea en la que se encuentran los resultados</h3>
<p>Para saber el número de línea en la que se encuentra el resultado utilizaremos el parámetro -n:</p>
<pre>$ grep -n hostname test
2:hostname=192.168.0.10           # Hostname or IP address of management node
8:hostname=192.168.0.30           # Hostname or IP address
...</pre>
<h3>Cuantas veces se encuentran resultados</h3>
<p>Si &#8220;-n&#8221; nos monstraba el nº de línea en el que estaba la coincidencia, &#8220;-c&#8221; nos dice cuantas veces está la búsqueda en el fichero:</p>
<pre>$ grep -c hostname test
4</pre>
<p>Bueno, de momento esto es todo. Por supuesto hay muchas más opciones y explotar la potencia de grep llevaría mucho tiempo así que a partir de aquí investigáis vosotros ;)</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/awk-imprimir-expresion-regular-hasta-final-fichero/" title="AWK: imprimir a partir de una expresión regular hasta el final del fichero">AWK: imprimir a partir de una expresión regular hasta el final del fichero</a></li><li><a href="http://rm-rf.es/grep-mostrar-lineas-anteriores-posteriores-busqueda/" title="Truco GREP: Mostrar líneas anteriores/posteriores al resultado de la búsqueda">Truco GREP: Mostrar líneas anteriores/posteriores al resultado de la búsqueda</a></li><li><a href="http://rm-rf.es/truco-shell-unix-quitar-lineas-en-blanco-de-un-fichero-con-grep/" title="Truco shell Unix: quitar líneas en blanco de un fichero con grep">Truco shell Unix: quitar líneas en blanco de un fichero con grep</a></li><li><a href="http://rm-rf.es/vim-manual-de-expresiones-regulares/" title="Vim: Manual de expresiones regulares">Vim: Manual de expresiones regulares</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/ejemplos-practicos-de-grep-y-egrep/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Montar un filesystem por UUID o label</title>
		<link>http://rm-rf.es/montar-un-filesystem-por-uuid-o-label/</link>
		<comments>http://rm-rf.es/montar-un-filesystem-por-uuid-o-label/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 20:04:57 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Storage]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[fstab]]></category>
		<category><![CDATA[sistema ficheros]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2378</guid>
		<description><![CDATA[El beneficio de montar los sistemas de ficheros con su UUID o label en lugar de con el nombre asignado a la partición (/dev/sda1, /dev/hda2&#8230;) es que se trata de un identificador único, como su propio nombre indica: Universally Unique Identifier (UUID). Esto evita problemas que se pueden producir cuando añadimos nuevos dispositivos al sistema, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-1695" style="margin-left: 12px; margin-right: 12px;" title="disco duro" src="http://rm-rf.es/wp-content/uploads/2011/04/disco-duro.jpg" alt="disco duro" width="160" height="160" align="right" />El beneficio de <strong>montar los sistemas de ficheros con su UUID o label</strong> en lugar de con el nombre asignado a la partición (/dev/sda1, /dev/hda2&#8230;) es que se trata de un identificador único, como su propio nombre indica: <strong>Universally Unique Identifier (UUID)</strong>. Esto evita problemas que se pueden producir cuando añadimos nuevos dispositivos al sistema, movemos particiones, etc ya que el nombre de la partición puede cambiar pero no el UUID o label (etiqueta asignada por nosotros).</p>
<h3>¿Cómo averiguamos el UUID de una partición?</h3>
<p>Hay varias formas: con el comando blkid, tune2fs&#8230; Vamos a localizar el UUID de la partición /dev/sda2:</p>
<pre># tune2fs -l /dev/sda2 | grep UUID
Filesystem UUID:          528c141b-66fd-43d5-808b-4a94a639f323</pre>
<pre># blkid /dev/sda2
/dev/sda2: UUID="528c141b-66fd-43d5-808b-4a94a639f323" TYPE="ext4"</pre>
<p>Con esta información ya podemos añadir la entrada correspondiente al fichero <strong>/etc/fstab</strong>. Si antes estaba así:</p>
<pre>/dev/sda2     /datos               ext4    defaults        1 1</pre>
<p>Ahora quedaría así:</p>
<pre>UUID=528c141b-66fd-43d5-808b-4a94a639f323     /datos        ext4    defaults   1 1</pre>
<h3>¿Y cómo averiguamos o configuramos la etiqueta del filesystem?</h3>
<p>Es sencillo, con el comando<strong> tune2fs seguido del parámetro -L</strong> podemos configurar la etiqueta que queramos:</p>
<pre># tune2fs -L "DATOS" /dev/sda2
tune2fs 1.41.12 (17-May-2010)</pre>
<p>Para consultar la etiqueta/label de la partición:</p>
<pre># tune2fs -l /dev/sda2 | grep "Filesystem volume name"
Filesystem volume name:   DATOS</pre>
<p>También podemos verla con el comando anterior blkid, ahora que la partición tiene label nos muestra tanto el UUID como la etiqueta:</p>
<pre># blkid /dev/sda2
/dev/sda2: UUID="528c141b-66fd-43d5-808b-4a94a639f323" TYPE="ext4" LABEL="DATOS"</pre>
<p>Y para montarla en /etc/fstab tan sencillo como:</p>
<pre>LABEL=DATOS     /datos        ext4    defaults   1 1</pre>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/openvz-virtuozzo-activar-noatime-para-un-contenedor/" title="OpenVZ &#038; Virtuozzo: activar noatime para un contenedor">OpenVZ &#038; Virtuozzo: activar noatime para un contenedor</a></li><li><a href="http://rm-rf.es/atime-noatime-y-relatime/" title="atime, noatime y relatime">atime, noatime y relatime</a></li><li><a href="http://rm-rf.es/hacer-cambios-en-un-filesystem-gfs2-con-gfs2_tool-y-gfs2_edit/" title="Hacer cambios en un filesystem GFS2 con gfs2_tool y gfs2_edit">Hacer cambios en un filesystem GFS2 con gfs2_tool y gfs2_edit</a></li><li><a href="http://rm-rf.es/clustered-logical-volume-manager-clvm-y-gfs2/" title="Clustered Logical Volume Manager (CLVM) y GFS2">Clustered Logical Volume Manager (CLVM) y GFS2</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/montar-un-filesystem-por-uuid-o-label/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Routing Tables: &#8216;netstat -rn&#8217; y &#8216;route -n&#8217;</title>
		<link>http://rm-rf.es/routing-tables-netstat-rn-y-route-n/</link>
		<comments>http://rm-rf.es/routing-tables-netstat-rn-y-route-n/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 18:17:47 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Redes]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[netstat]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[network config]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2364</guid>
		<description><![CDATA[Algo importante en los sistemas Linux (o Unix) y todo lo relacionado con networking es conocer el estado y configuración de las tablas de rutas IP (routing tables), que nos indican cómo y a través de donde se envía un paquete en las distintas redes. Para visualizar la tabla de rutas tenemos dos posibilidades, utilizar [...]]]></description>
			<content:encoded><![CDATA[<p>Algo importante en los sistemas Linux (o Unix) y todo lo relacionado con networking es conocer el <strong>estado y configuración de las tablas de rutas IP (routing tables)</strong>, que nos indican cómo y a través de donde se envía un paquete en las distintas redes.</p>
<p>Para visualizar la tabla de rutas tenemos dos posibilidades, utilizar el comando <strong>netstat -rn</strong> o <strong>route -n</strong>, ambos nos ofrecen la misma salida:</p>
<pre># route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0</pre>
<p>Las tres primeras columnas nos indican, por un lado las redes de destino (Destination), la puerta de enlace que utilizan (Gateway) y la máscara de red (Genmask). En las Flags vemos &#8220;U&#8221;, que significa que la interfaz de red está levantada y G que indica que esa ruta utiliza la puerta de enlace. 0.0.0.0 es tratado como un wildcard (también se suele representar con un *) y especifica el destino a cualquier red no especificada.</p>
<p>Explicando la salida del comando route anterior, vemos en primer lugar que <strong>todo paquete dirigido a las redes 192.168.1.0/255.255.255.0 y 169.254.0.0/255.255.0.0 serán enviados a través de redes LAN</strong> (vemos que no hay flag de gateway) por lo que no harán uso de puerta de enlace. En cambio <strong>todo paquete con destino 0.0.0.0, es decir, el resto de redes sí que pasará por nuestra puerta de enlace 192.168.1.1</strong>. Todas estas rutas trabajan bajo la interfaz de red eth0, si tuviéramos más interfaces levantadas aparecerían marcadas como ethX en la columna Iface.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/que-es-apipazeroconf-en-centosrhel-y-como-deshabilitarlo-169-254-x-y/" title="¿Qué es APIPA/zeroconf y cómo deshabilitarlo en CentOS/RHEL (169.254.x.y)?">¿Qué es APIPA/zeroconf y cómo deshabilitarlo en CentOS/RHEL (169.254.x.y)?</a></li><li><a href="http://rm-rf.es/enrutar-en-linux-route-add-del/" title="Enrutar en Linux (route add/del)">Enrutar en Linux (route add/del)</a></li><li><a href="http://rm-rf.es/snort-fatal-error-openpcap-device-eth0-open-bind-network-is-down/" title="Snort: FATAL ERROR: OpenPcap() device eth0 open: bind: Network is down">Snort: FATAL ERROR: OpenPcap() device eth0 open: bind: Network is down</a></li><li><a href="http://rm-rf.es/netstat-estado-de-las-conexiones/" title="Netstat: Estado de las conexiones">Netstat: Estado de las conexiones</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/routing-tables-netstat-rn-y-route-n/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introducción a SMF (Service Management Facility) en Solaris</title>
		<link>http://rm-rf.es/introduccion-a-smf-service-management-facility-en-solaris/</link>
		<comments>http://rm-rf.es/introduccion-a-smf-service-management-facility-en-solaris/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 11:02:07 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[servicios]]></category>
		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2327</guid>
		<description><![CDATA[Hace unos días comentaba el paso de System V a Upstart en RHEL y Centos 6. Hoy vamos a hablar sobre Solaris y el cambio introducido a partir de Solaris 9 para la gestión de servicios. Antes de Solaris 9 los servicios se gestionaban como en la mayoría de sistemas Unix y Linux (legacy), teníamos [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2331" title="Solaris" src="http://rm-rf.es/wp-content/uploads/2011/11/Solaris.jpg" alt="Solaris" width="250" height="130" align="right" />Hace unos días comentaba el paso de <a title="RHEL/CentOS 6: adios System V, hola Upstart" href="http://rm-rf.es/rhel-centos-6-adios-system-v-hola-upstart/">System V a Upstart en RHEL y Centos 6</a>. Hoy vamos a hablar sobre Solaris y el cambio introducido a partir de Solaris 9 para la gestión de servicios.</p>
<p>Antes de Solaris 9 los servicios se gestionaban como en la mayoría de sistemas Unix y Linux (legacy), teníamos scripts de arranque en /etc/init.d y se creaban enlaces simbólicos contra ellos en los distintos runlevels (directorios RC) para su arranque/parada. A partir de Solaris 9 se introdujo <strong>SMF (Service Management Facility)</strong> y se ha convertido en la manera por defecto de gestionar los servicios en Solaris 10.</p>
<p>Los beneficios de SMF sobre el método anterior son sustanciales. Entre ellos la posibilidad de <strong>mantener monitorizados los servicios</strong> para que en el momento que se produzca una caída levanten de forma instantánea, la <strong>gestión inteligente de arranque</strong> mediante la cual el servicio tiene unas <strong>dependencias</strong> y hasta que no estén activas el servicio no está disponible, el <strong>arranque en paralelo y de forma asíncrona</strong>, etc.</p>
<p>Los comandos básicos para gestion de servicios en SMF son <strong>svcs, svccfg y svcadm</strong>. Mediante svcs a secas podemos ver el estado de los servicios del sistema (incluidos los del sistema antiguo legacy), a través de distintos parámetros podemos filtrar únicamente los deshabilitados, etc:</p>
<pre># svcs
STATE          STIME    FMRI
legacy_run      9:04:48 lrc:/etc/rc2_d/S20sysetup
legacy_run      9:04:48 lrc:/etc/rc2_d/S47pppd
legacy_run      9:04:49 lrc:/etc/rc2_d/S72autoinstall
legacy_run      9:04:49 lrc:/etc/rc2_d/S73cachefs_daemon
legacy_run      9:04:49 lrc:/etc/rc2_d/S81dodatadm_udaplt
legacy_run      9:04:49 lrc:/etc/rc2_d/S89PRESERVE
disabled        9:02:34 svc:/platform/i86pc/acpihpd:default
online          9:01:28 svc:/system/svc/restarter:default
online          9:01:35 svc:/system/early-manifest-import:default
online          9:01:38 svc:/network/netcfg:default
online          9:01:39 svc:/network/datalink-management:default
online          9:01:39 svc:/network/socket-config:default
...
...</pre>
<p>Básicamente vemos el estado del proceso, la última vez que el servicio cambió de estado y su <strong>FMRI (Fault Management Resource Identifier)</strong>. El FMRI es el identificador del servicio. El FMRI se divide en tres partes separadas por &#8220;:&#8221;. La primera el esquema (svc o lrc según el tipo de servicio), la categoría en la que se encuentra (network, system&#8230;) y el nombre del servicio, y finalmente la instancia.</p>
<p>Podemos ver también con detalle el estado de un único servicio con el parámetro &#8220;-x&#8221; y sus dependencias con &#8220;-d&#8221;:</p>
<pre># svcs -x  svc:/system/cron:default
svc:/system/cron:default (clock daemon (cron))
 State: online since  1 de noviembre de 2011 09:02:51 WET
   See: cron(1M)
   See: crontab(1)
   See: /var/svc/log/system-cron:default.log
Impact: None.</pre>
<pre># svcs -d svc:/system/cron:default
STATE          STIME    FMRI
online          9:02:35 svc:/milestone/name-services:default
online          9:02:49 svc:/system/filesystem/local:default</pre>
<p>Podemos verificar rápidamente cómo SMF monitoriza activamente los servicios que están bajo su control, vamos a ver el estado del servicio cron, matarlo con una <a title="Linux: enviar señales a un proceso con el comando kill" href="http://rm-rf.es/linux-enviar-senales-a-un-proceso-con-el-comando-kill/">señal kill</a> y verificar que al momento SMF lo ha levantado de nuevo:</p>
<pre># date
martes  1 de noviembre de 2011 09:46:24 WET
# svcs -v system/cron
STATE          NSTATE        STIME    CTID   FMRI
online         -              <strong>9:02:51</strong>     62 svc:/system/cron:default
# ps -ef | grep cron
    root   441     1   0 09:02:51 ?           0:00 /usr/sbin/cron
    root   841   687   0 09:46:33 pts/1       0:00 grep cron
# kill 441
# svcs -v system/cron
STATE          NSTATE        STIME    CTID   FMRI
online         -              <strong>9:46:38</strong>     96 svc:/system/cron:default</pre>
<p>A través de svcs también podemos ver el estado de un servicio y diagnosticarlo cuando no es satisfactorio. Encontraremos los siguientes estados: <strong>online, offline, disabled, degraded, maintenance y legacy-run</strong>. Los cuatro primeros estados están claros, online, offline, deshabilitado y degradado. Cuando un servicio está en estado maintenance es debido a que hay algún problema con el servicio y no puede ser arrancado. Como requiere nuestra intervención se pone a nuestra disposición la ruta hacia el log del servicio para verificar el origen del problema. El estado legacy-run simplemente indica que se trata de un servicio legacy.</p>
<p>Mediante <strong>svcadm</strong> podemos gestionar el estado de cada uno de los servicios, con los parámetros <strong>&#8220;enable&#8221;, &#8220;disable&#8221;, &#8220;refresh&#8221;, &#8220;clear&#8221;, &#8220;mark&#8221; y &#8220;restart&#8221;</strong>. Aparte de los obvios, conviene comentar que &#8220;refresh&#8221; sirve para leer de nuevo los ficheros de configuración del servicio por si se ha realizado algún cambio, &#8220;clear&#8221; sirve para resetear el servicio si se encuentra en estado de mantenimiento y &#8220;mark&#8221; para marcar un servicio como degradado, mantenimiento, etc.</p>
<p>Para que veáis un ejemplo de fichero xml básico para un servicio aquí tenéis uno para la gestión de <a title="Configurar PHP + FastCGI en Oracle iPlanet Web Server" href="http://rm-rf.es/configurar-php-fastcgi-en-oracle-iplanet-web-server/"> Oracle iPlanet webserver 7</a> que instalamos hace unos días. Básicamente hemos establecido como dependencias los servicios de red, los sistemas de ficheros locales y el arranque bajo el milestone multi-user (lo que viene siendo el runlevel 3 en legacy). Después establecemos los tres comandos para el arranque, parada y reinicio del servicio:</p>
<pre>&lt;?xml version='1.0'?&gt;

&lt;!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'&gt;

&lt;service_bundle type='manifest' name='webserver7'&gt;

&lt;service name='network/webserver7' type='service' version='0'&gt;
&lt;create_default_instance enabled='true'/&gt;
&lt;single_instance/&gt;
&lt;dependency name='fs' grouping='require_all' restart_on='none' type='service'&gt;
&lt;service_fmri value='svc:/system/filesystem/local'/&gt;
&lt;/dependency&gt;
&lt;dependency name='net' grouping='require_all' restart_on='none' type='service'&gt;
&lt;service_fmri value='svc:/network/physical'/&gt;
&lt;/dependency&gt;
&lt;dependent name='webserver7_multi-user' restart_on='none' grouping='optional_all'&gt;
&lt;service_fmri value='svc:/milestone/multi-user'/&gt;
&lt;/dependent&gt;
&lt;exec_method name='start' type='method' exec='su www -c "/opt/webserver7/bin/webserver7 start"' timeout_seconds='60'&gt;
&lt;method_context/&gt;
&lt;/exec_method&gt;
&lt;exec_method name='stop' type='method' exec='su www -c "/opt/webserver7/bin/webserver7 stop"' timeout_seconds='60'&gt;
&lt;method_context/&gt;
&lt;/exec_method&gt;
&lt;exec_method name='restart' type='method' exec='su www -c "/opt/webserver7/bin/webserver7 restart"' timeout_seconds='60'&gt;
&lt;method_context/&gt;
&lt;/exec_method&gt;
&lt;/service&gt;

&lt;/service_bundle&gt;</pre>
<p>Para importar un servicio creado de este modo ejecutamos el siguiente comando:</p>
<pre># svccfg import webserver7.xml</pre>
<p>Como siempre os recomiendo revisar las páginas man de todos estos comandos para recibir información detallada sobre cada uno de ellos, esto es una pequeña introducción que podría extenderse mucho más si entráramos en detalle de cada una de las características y posibilidades de SMF. Ahí van unas cuantas referencias para aprender más sobre Service Management Facility:</p>
<ul>
<li><a href="http://www.oreillynet.com/pub/a/sysadmin/2006/04/13/using-solaris-smf.html?page=1" target="_blank">Using Solaris SMF (O&#8217;Reilly)</a></li>
<li><a href="http://www.princeton.edu/~unix/Solaris/troubleshoot/smf.html" target="_blank">Universidad de Princeton, Service Management Facility</a></li>
<li><a href="http://hub.opensolaris.org/bin/view/Community+Group+smf/faq" target="_blank">OpenSolaris SMF FAQ</a></li>
</ul>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/monitorizar-oracle-iplanet-web-server-con-get-perfdump/" title="Monitorizar Oracle iPlanet Web Server con get-perfdump">Monitorizar Oracle iPlanet Web Server con get-perfdump</a></li><li><a href="http://rm-rf.es/stub-start-error-en-oracle-iplanet-web-server-php-fastcgi/" title="Stub Start Error en Oracle iPlanet Web Server: PHP + FastCGI">Stub Start Error en Oracle iPlanet Web Server: PHP + FastCGI</a></li><li><a href="http://rm-rf.es/configurar-php-fastcgi-en-oracle-iplanet-web-server/" title="Configurar PHP + FastCGI en Oracle iPlanet Web Server">Configurar PHP + FastCGI en Oracle iPlanet Web Server</a></li><li><a href="http://rm-rf.es/gestionar-el-storage-en-solaris-con-zfs-y-zpool/" title="Gestionar el storage en Solaris con zfs y zpool">Gestionar el storage en Solaris con zfs y zpool</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/introduccion-a-smf-service-management-facility-en-solaris/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oracle Solaris/Open Solaris, DHCP, IPs estáticas y nwam</title>
		<link>http://rm-rf.es/oracle-solaris-open-solaris-dhcp-ips-estaticas-y-nwam/</link>
		<comments>http://rm-rf.es/oracle-solaris-open-solaris-dhcp-ips-estaticas-y-nwam/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 18:38:03 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2270</guid>
		<description><![CDATA[Lo reconozco, soy novato con Solaris y todavía estoy aprendiendo sus peculiaridades más allá de lo común con cualquier sistema Unix. En este caso, el primer problema que tuve fue a la hora de desactivar el dhcp y activar la posibilidad de utilizar IPs estáticas. Hiciera lo que hiciera con el comando ipadm (sustituto de [...]]]></description>
			<content:encoded><![CDATA[<p>Lo reconozco, soy novato con Solaris y todavía estoy aprendiendo sus peculiaridades más allá de lo común con cualquier sistema Unix. En este caso, el primer problema que tuve fue a la hora de <strong>desactivar el dhcp y activar la posibilidad de utilizar IPs estáticas</strong>.</p>
<p>Hiciera lo que hiciera con el comando ipadm (sustituto de ifconfig) no me dejaba desactivar en la interfaz de red el DHCP. Tras un rato trasteando y buscando en google encontré una opción que permite <strong>desactivar nwam (NetWork Auto Magic, que configura la red de forma automática)</strong>, el responsable de esta asignación dinámica y activar la opción &#8216;por defecto&#8217; para la configuración de las interfaces.</p>
<p>Ante todo desconozco (de momento) si esta es la solución más óptima para hacerlo, pero desde luego es rápida y efectiva. Únicamente son dos pasos:</p>
<pre># pfexec svcadm enable physical:default
# pfexec svcadm disable physical:nwam</pre>
<p>Con svcadm activamos la opción default y desactivamos nwam. pfexec es algo así como el sudo de Solaris, ya hablaremos de él más adelante. Una vez realizado esto, ya podéis <a title="Configurar tarjetas de red en Oracle Solaris 11 con ipadm" href="http://rm-rf.es/configurar-tarjetas-de-red-en-oracle-solaris-11-con-ipadm/">configurar ips estáticas en Oracle Solaris 11 con ipadm</a>.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/monitorizar-oracle-iplanet-web-server-con-get-perfdump/" title="Monitorizar Oracle iPlanet Web Server con get-perfdump">Monitorizar Oracle iPlanet Web Server con get-perfdump</a></li><li><a href="http://rm-rf.es/introduccion-a-smf-service-management-facility-en-solaris/" title="Introducción a SMF (Service Management Facility) en Solaris">Introducción a SMF (Service Management Facility) en Solaris</a></li><li><a href="http://rm-rf.es/stub-start-error-en-oracle-iplanet-web-server-php-fastcgi/" title="Stub Start Error en Oracle iPlanet Web Server: PHP + FastCGI">Stub Start Error en Oracle iPlanet Web Server: PHP + FastCGI</a></li><li><a href="http://rm-rf.es/configurar-php-fastcgi-en-oracle-iplanet-web-server/" title="Configurar PHP + FastCGI en Oracle iPlanet Web Server">Configurar PHP + FastCGI en Oracle iPlanet Web Server</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/oracle-solaris-open-solaris-dhcp-ips-estaticas-y-nwam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo instalar y gestionar paquetes en Oracle Solaris (pkg)</title>
		<link>http://rm-rf.es/como-instalar-y-gestionar-paquetes-en-oracle-solaris-pkg/</link>
		<comments>http://rm-rf.es/como-instalar-y-gestionar-paquetes-en-oracle-solaris-pkg/#comments</comments>
		<pubDate>Sun, 25 Sep 2011 18:56:39 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2259</guid>
		<description><![CDATA[Sigo explorando el sistema Oracle Solaris Express, tras su instalación y configuración de la red vamos a ver la utilización del gestor/repositorio de paquetes que incorpora, pkg. La filosofía es similar al apt en Debian o yum en RHEL, así que vamos a ver unos cuantos ejemplos de instalación, eliminación, actualización de paquetes, etc. Buscar [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2255" title="Oracle Solaris" src="http://rm-rf.es/wp-content/uploads/2011/09/Oracle_Solaris_logo.png" alt="Oracle Solaris" width="252" height="122" align="right" />Sigo explorando el sistema <strong>Oracle Solaris Express</strong>, tras su <a title="Cómo instalar Oracle Solaris 11 Express" href="http://rm-rf.es/como-instalar-oracle-solaris-11-express/">instalación</a> y <a title="Configurar tarjetas de red en Oracle Solaris 11 con ipadm" href="http://rm-rf.es/configurar-tarjetas-de-red-en-oracle-solaris-11-con-ipadm/">configuración de la red</a> vamos a ver la utilización del gestor/repositorio de paquetes que incorpora, <strong>pkg</strong>.</p>
<p>La filosofía es similar al apt en Debian o yum en RHEL, así que vamos a ver unos cuantos ejemplos de instalación, eliminación, actualización de paquetes, etc.</p>
<h3>Buscar un paquete</h3>
<p>La sintaxis a utilizar es la siguiente:</p>
<pre># pkg search &lt;paquete&gt;</pre>
<p>Si por ejemplo quisiéramos buscar el servidor web <a title="Instalación y configuración de Lighttpd con PHP + FastCGI" href="http://rm-rf.es/instalacion-y-configuracion-de-lighttpd-con-php-fastcgi/">Lighttpd</a> podríamos buscar las versiones disponibles así:</p>
<pre># pkg search lighttpd
INDEX ACTION VALUE PACKAGE
description set Lighttpd Web Server pkg:/web/server/lighttpd-14@1.4.23-0.151.0.1
pkg.description set The Lighttpd Web Server (1.4.23) pkg:/web/server/lighttpd-14@1.4.23-0.151.0.1
pkg.summary set Lighttpd Web Server pkg:/web/server/lighttpd-14@1.4.23-0.151.0.1
basename dir etc/lighttpd pkg:/web/server/lighttpd-14@1.4.23-0.151.0.1
basename dir usr/lighttpd pkg:/web/server/lighttpd-14@1.4.23-0.151.0.1
basename dir var/lighttpd pkg:/web/server/lighttpd-14@1.4.23-0.151.0.1
basename file etc/security/auth_attr.d/lighttpd pkg:/web/server/lighttpd-14@1.4.23-0.151.0.1
basename file etc/security/prof_attr.d/lighttpd pkg:/web/server/lighttpd-14@1.4.23-0.151.0.1
basename file usr/lighttpd/1.4/sbin/lighttpd pkg:/web/server/lighttpd-14@1.4.23-0.151.0.1
pkg.fmri set solaris/web/server/lighttpd pkg:/web/server/lighttpd@1.4.23-0.134</pre>
<p>También podemos <strong>buscar en un repositorio determinado</strong> con el parámetro -s:</p>
<pre># pkg search -s http://pkg.repo.com/ lighttpd</pre>
<p>O utilizar las cláusula <strong>AND y OR para encadenar consultas y/o utilizar comodines</strong>:</p>
<pre># pkg search lighttpd AND htt*d OR apache</pre>
<h3>Ver la información de un paquete</h3>
<p>Para ver toda la información de un paquete usaremos el parámetro info seguido del paquete a consultar:</p>
<pre># pkg info pkg://solaris/web/server/lighttpd-14@1.4.23-0.151.0.1
          Name: web/server/lighttpd-14
       Summary: Lighttpd Web Server
   Description: The Lighttpd Web Server (1.4.23)
      Category: Web Services/Application and Web Servers
         State: Not installed
     Publisher: solaris
       Version: 1.4.23
 Build Release: 5.11
        Branch: 0.151.0.1
Packaging Date:  5 de noviembre de 2010 06:22:12
          Size: 794.78 kB
          FMRI: pkg://solaris/web/server/lighttpd-14@1.4.23,5.11-0.151.0.1:20101105T062212Z</pre>
<h3>Instalación de un paquete</h3>
<p>La instalación es sencilla, como en cualquier gestor de paquetes:</p>
<pre># pkg install &lt;paquete&gt;</pre>
<p>Vamos a instalar una de las versiones de lighttpd encontradas antes:</p>
<pre># pkg install pkg:/web/server/lighttpd-14@1.4.23-0.151.0.1
Packages to install: 2
Create boot environment: No
Services to restart: 1
DOWNLOAD PKGS FILES XFER (MB)
Completed 2/2 52/52 4.5/4.5

PHASE ACTIONS
Install Phase 143/143

PHASE ITEMS
Package State Update Phase 2/2
Image State Update Phase 2/2</pre>
<p>Como véis, a la hora de instalar un paquete se puede <strong>especificar la versión exacta</strong> a instalar de todas las disponibles, y también el &#8220;<strong>publisher</strong>&#8221; del cual la queremos instalar. Si quisieramos instalarla desde otro repositorio/publisher lo especificaríamos del siguiente modo, donde repo-mirror.com es el publisher.:</p>
<pre># pkg install pkg://repo-mirror.com/test/paquete-solaris</pre>
<h3>Simular la instalación de un paquete</h3>
<p>Pasando los <strong>parámetros -nv a install</strong> podemos ver lo que se instalaría en el sistema sin necesidad de hacerlo:</p>
<pre># pkg install -nv &lt;paquete&gt;</pre>
<pre># pkg install -nv pkg:/system/management/webmin@1.510-0.151.0.1
               Packages to install:     1
           Create boot environment:    No
               Services to restart:     1
              Rebuild boot archive:    No
Changed fmris:
  None -&gt; pkg://solaris/system/management/webmin@1.510,5.11-0.151.0.1:20101105T061636Z
Services:
  restart_fmri: svc:/system/manifest-import:default</pre>
<h3>Actualizar un paquete</h3>
<p>A la hora de actualizar un paquete se puede usar tanto la orden install como update:</p>
<pre># pkg update &lt;paquete&gt;
# pkg install &lt;paquete&gt;</pre>
<h3>Verificar la instalación de un paquete</h3>
<p>Una vez realizada una instalación podemos verificar si todo se ha realizado de forma correcta, si el paquete se ha instalado bien, busqueda de errores, etc. Para ello utilizamos el parámetro <strong>verify</strong>. Con el parámetro -v vemos toda la información y con -q únicamente los errores:</p>
<pre># pkg verify -v pkg:/web/server/lighttpd-14@1.4.23-0.151.0.1
Verifying: PACKAGE                                             STATUS
pkg://solaris/web/server/lighttpd-14                    OK</pre>
<h3>Arreglar fallos en paquetes instalados</h3>
<p>En caso de haber recibido algún error en el punto mencionado anteriormente (<em>verify</em>), podemos tratar de arreglarlo mediante la siguiente orden:</p>
<pre>pkg fix --accept &lt;paquete&gt;</pre>
<h3>Desinstalar un paquete</h3>
<p>Muy sencillo:</p>
<pre>pkg uninstall &lt;paquete&gt;</pre>
<p>Vamos a desinstalar el servidor web lighttpd instalado anteriormente:</p>
<pre># pkg uninstall pkg://solaris/web/server/lighttpd-14@1.4.23-0.151.
                Packages to remove:     1
           Create boot environment:    No
               Services to restart:     1
PHASE                                        ACTIONS
Removal Phase                                  1/104
Warning - directory //var/lighttpd/1.4/logs not empty or not expected during operation - contents preserved in /var/pkg/lost+found/var/lighttpd/1.4/logs-20110925T204323Z

Warning - directory //var/lighttpd/1.4/docroot not empty or not expected during operation - contents preserved in /var/pkg/lost+found/var/lighttpd/1.4/docroot-20110925T204323Z
Removal Phase                                104/104

PHASE                                          ITEMS
Package State Update Phase                       1/1
Package Cache Update Phase                       1/1
Image State Update Phase                         2/2</pre>
<h3>Ver el contenido de un paquete</h3>
<p>Siempre es útil conocer el contenido del paquete a instalar para saber con exactitud que es lo que vamos a instalar en nuestro sistema y donde. Si queremos, podemos especificar que nos indique el path, el tamaño de cada fichero, etc:</p>
<pre># pkg contents -r -o pkg.size,path pkg://solaris/web/server/lighttpd-14@1.4.23-0.151.0.1
PKG.SIZE PATH
  1503
    1503
         etc
         etc/lighttpd
         etc/lighttpd/1.4
         etc/lighttpd/1.4/conf.d
    1934 etc/lighttpd/1.4/conf.d/fcgi-php.conf
    1105 etc/lighttpd/1.4/conf.d/ssl.conf
   11497 etc/lighttpd/1.4/lighttpd.conf
         etc/security
....
....
....
   11696 usr/lighttpd/1.4/lib/mod_extforward.so</pre>
<h3>Visualizar el historial de acciones realizadas con pkg</h3>
<p>Podemos ver un registro de las acciones realizadas:</p>
<pre># pkg history
TIME                OPERATION                 CLIENT          OUTCOME
2010-11-05T16:14:56 purge-history             pkg             Succeeded
2011-09-22T18:41:16 uninstall                 pkg             Succeeded
2011-09-22T18:41:37 uninstall                 pkg             Succeeded
2011-09-22T18:41:53 set-property              pkg             Succeeded
2011-09-22T18:42:03 set-property              pkg             Succeeded
2011-09-25T10:21:01 uninstall                 pkg             Succeeded
2011-09-25T17:05:22 refresh-publishers        pkg             Succeeded
2011-09-25T17:05:22 install                   pkg             Failed (Bad Request)
2011-09-25T17:12:25 refresh-publishers        pkg             Succeeded</pre>
<p>Y para eliminar este registro:</p>
<pre># pkg purge-history</pre>
<p>Espero que os haya sido de utilidad esta guía de iniciación a pkg en Oracle Solaris, seguiré profundizando en los secretos de este sistema en próximos artículos.</p>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/monitorizar-oracle-iplanet-web-server-con-get-perfdump/" title="Monitorizar Oracle iPlanet Web Server con get-perfdump">Monitorizar Oracle iPlanet Web Server con get-perfdump</a></li><li><a href="http://rm-rf.es/introduccion-a-smf-service-management-facility-en-solaris/" title="Introducción a SMF (Service Management Facility) en Solaris">Introducción a SMF (Service Management Facility) en Solaris</a></li><li><a href="http://rm-rf.es/stub-start-error-en-oracle-iplanet-web-server-php-fastcgi/" title="Stub Start Error en Oracle iPlanet Web Server: PHP + FastCGI">Stub Start Error en Oracle iPlanet Web Server: PHP + FastCGI</a></li><li><a href="http://rm-rf.es/configurar-php-fastcgi-en-oracle-iplanet-web-server/" title="Configurar PHP + FastCGI en Oracle iPlanet Web Server">Configurar PHP + FastCGI en Oracle iPlanet Web Server</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/como-instalar-y-gestionar-paquetes-en-oracle-solaris-pkg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurar tarjetas de red en Oracle Solaris 11 con ipadm</title>
		<link>http://rm-rf.es/configurar-tarjetas-de-red-en-oracle-solaris-11-con-ipadm/</link>
		<comments>http://rm-rf.es/configurar-tarjetas-de-red-en-oracle-solaris-11-con-ipadm/#comments</comments>
		<pubDate>Sun, 25 Sep 2011 14:47:18 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[interfaz red]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://rm-rf.es/?p=2254</guid>
		<description><![CDATA[En el sistema Oracle Solaris 11 Express tenemos la posibilidad de utilizar un nuevo comando para realizar tareas de configuración y mantenimiento de nuestras interfaces de red. Este comando puede sustituir al ya conocido por todos ifconfig, se trata de ipadm. Vamos a ver como haríamos para configurar una IP estática en nuestro sistema para [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2255" title="Oracle Solaris" src="http://rm-rf.es/wp-content/uploads/2011/09/Oracle_Solaris_logo.png" alt="Oracle Solaris" width="252" height="122" align="right" />En el sistema <strong>Oracle Solaris 11 Express</strong> tenemos la posibilidad de utilizar un nuevo comando para realizar tareas de <strong>configuración y mantenimiento de nuestras interfaces de red</strong>. Este comando puede sustituir al ya conocido por todos <strong>ifconfig</strong>, se trata de <strong>ipadm</strong>.</p>
<p>Vamos a ver como haríamos para configurar una IP estática en nuestro sistema para la interfaz de red e1000g0. Una IP dentro del rango 192.168.0.0/24 y con puerta de enlace 192.168.1.1.</p>
<p>Lo primero que podemos hacer es echar un vistazo a lo que ya tenemos configurado, en este caso únicamente las interfaces locales, con show-if vemos el estado de las interfaces y con show-addr el estado de las direcciones asignadas:</p>
<pre># ipadm  show-if
IFNAME     STATE    CURRENT      PERSISTENT
lo0        ok       -m-v------46 ---
# ipadm  show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
lo0/v6            static   ok           ::1/128</pre>
<p>Bien, lo primero que debemos hacer es &#8216;dar de alta&#8217; nuestra interfaz, activarla. Para ello utilizaremos el parámetro <strong>create-if</strong>:</p>
<p>Una vez creada, vemos con show-if que efectivamente ya figura, aunque de momento está caída:</p>
<pre># ipadm show-if e1000g0
IFNAME     STATE    CURRENT      PERSISTENT
e1000g0    down     bm--------46 -46</pre>
<p>Procedemos a asignar ya una IP estática y máscara a la interfaz, en este caso la 192.168.1.100, con máscara /24 y tipo ipv4:</p>
<pre># ipadm create-addr -T static -a 192.168.1.100/24 e1000g0/v4</pre>
<p>Ahora podemos verificar, ya sea con ifconfig como con ipadm que la IP ha sido configurada correctamente:</p>
<pre># ifconfig e1000g0
e1000g0: flags=1000843 mtu 1500 index 2
        inet 192.168.1.100 netmask ffffff00 broadcast 192.168.1.255
        ether 8:0:27:30:43:df 

# ipadm show-addr e1000g0/v4
ADDROBJ           TYPE     STATE        ADDR
e1000g0/v4        static   ok           192.168.1.100/24</pre>
<p>Efectivamente, tenemos conectividad con otros nodos de la red:</p>
<pre># ping 192.168.1.128
192.168.1.128 is alive</pre>
<p>Sólo nos queda configurar el enrutado y los servidores DNS para tener la red configurada de forma correcta:</p>
<pre># route -p add default 192.168.0.1
add net default: gateway 192.168.0.1
add persistent net default: gateway 192.168.0.1

Verificamos la tabla de rutas con el comando netstat:</pre>
<pre># netstat -r

Routing Table: IPv4
  Destination           Gateway           Flags  Ref     Use     Interface
-------------------- -------------------- ----- ----- ---------- ---------
default              192.168.1.1          UG        1          0
solaris              solaris              UH        2         24 lo0
192.168.1.0          192.168.1.100        U         4        369 e1000g0   

Routing Table: IPv6
  Destination/Mask            Gateway                   Flags Ref   Use    If
--------------------------- --------------------------- ----- --- ------- -----
solaris                     solaris                     UH      2       0 lo0</pre>
<p>Las DNS las añadiríamos en el <a title="Cómo cambiar los servidores DNS desde línea de comandos" href="http://rm-rf.es/como-cambiar-servidores-dns-desde-linea-comandos/">fichero /etc/resolv.conf</a> como en cualquier sistema Unix. También verificaríamos que estas dos entradas del fichero <strong>/etc/nsswitch.conf</strong> tienen añadida la opción dns:</p>
<pre>
hosts:      files dns
ipnodes:    files dns
</pre>
<h4  class="related_post_title">También te puede interesar:</h4><ul class="related_post"><li><a href="http://rm-rf.es/monitorizar-oracle-iplanet-web-server-con-get-perfdump/" title="Monitorizar Oracle iPlanet Web Server con get-perfdump">Monitorizar Oracle iPlanet Web Server con get-perfdump</a></li><li><a href="http://rm-rf.es/introduccion-a-smf-service-management-facility-en-solaris/" title="Introducción a SMF (Service Management Facility) en Solaris">Introducción a SMF (Service Management Facility) en Solaris</a></li><li><a href="http://rm-rf.es/stub-start-error-en-oracle-iplanet-web-server-php-fastcgi/" title="Stub Start Error en Oracle iPlanet Web Server: PHP + FastCGI">Stub Start Error en Oracle iPlanet Web Server: PHP + FastCGI</a></li><li><a href="http://rm-rf.es/configurar-php-fastcgi-en-oracle-iplanet-web-server/" title="Configurar PHP + FastCGI en Oracle iPlanet Web Server">Configurar PHP + FastCGI en Oracle iPlanet Web Server</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://rm-rf.es/configurar-tarjetas-de-red-en-oracle-solaris-11-con-ipadm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

