tag:blogger.com,1999:blog-22733644298011050882024-03-27T12:19:42.438-07:00Un toque de CanelaInformacion sobre IT, Linux y datos en generalSaul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.comBlogger51125tag:blogger.com,1999:blog-2273364429801105088.post-39640675622996187942024-03-27T12:18:00.001-07:002024-03-27T12:18:48.270-07:00Configurar dirección IP estatica en Linux Debian<style>
pre {
background: #f4f4f4;
border: 1px solid #ddd;
border-left: 3px solid #f36d33;
color: #666;
page-break-inside: avoid;
font-family: monospace;
font-size: 15px;
line-height: 1.6;
margin-bottom: 1.6em;
max-width: 100%;
overflow: auto;
padding: 1em 1.5em;
display: block;
word-wrap: break-word;
}
</style>
<h3 style="text-align: left;">Aclaración <br /></h3><p>En este tutorial se indicará como configurar una dirección IP estática en Linux Debian, esto para la versión 10/11/12</p><p>El tutorial tomado (traducido en parte) de la versión en ingles que puedes ver <a href="https://www.cyberciti.biz/faq/add-configure-set-up-static-ip-address-on-debianlinux/" target="_blank">aquí</a>.</p><p><br /></p><p>Por default,al instalar se toma la dirección IP por DHCP. El cliente dhcp de Debian la obtiene del servidor DHCP que se tenga en la red, configurando también las direcciones DNS y Gateway.</p><p>Vamos a mostrar como configurar estas direcciones IP's de forma estática, para este procedimiento se requiere tener acceso de usuario root.</p><h4 style="text-align: left;">Procedimiento a realizar</h4><ol style="text-align: left;"><li>Acceder por SSH remoto al servidor. Esto con la dirección automática que obtuvo desde el servidor DHCP. Si no se tiene, será necesario tener acceso a la consola del servidor.</li><li>Realizar un respaldo del archivo a modificar</li><li>Configurar las direcciones IP, DNS y Gateway</li><li> Aplicar los cambios en el sistema operativo</li></ol><h4 style="text-align: left;">Paso 1. Acceder al servidor<br /></h4><p>Si se tiene la dirección IP asignada automáticamente, se puede acceder por SSH al mismo. Para esto se puede utiliza alguna aplicación como PuTTY o el cliente ssh de Windows o Linux, según se este usando</p><p>En caso de usa PuTTY, esto seria</p><p style="text-align: center;"><img alt="" src="data:image/png;base64,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" /></p><p>En caso de cliente ssh en Windows o Linux, seria:</p><p></p><pre><code>ssh root@192.168.1.58 </code></pre><p></p><p><br /></p><h4 style="text-align: left;">Paso 2. Respaldo de archivo<br /></h4><p>De preferencia se recomienda realizar un respaldo del archivo a modificar, esto de caso de suceder algún problema. Para esto, una vez se acceda al servidor ejecutar el siguiente comando:</p><pre><code>cp /etc/network/interfaces /root </code></pre><p></p><p></p><p></p><p></p><p> </p><h4 style="text-align: left;">Paso 3. Configurar direcciones<br /></h4><p>Para configurar las direcciones, se requiere editar el archivo de configuracion de la red. Pero antes es necesario conocer el nombre del dispositivo de red, para esto podemos revisar utilizando el comando:</p><pre><code>ip -c link show </code></pre><p></p><p></p><p></p><p></p><p></p><p>El cual mostrará algo similar a la siguiente imagen:</p><p style="text-align: center;"><img alt="" src="data:image/png;base64,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" /></p><p>En este caso el nombre del dispositivo es <i>eth0</i>, con lo cual podemos editar el archivo (usando su editor favorito, en mi caso <i>vim</i>) ejecutando:</p><pre><code>vim /etc/network/interfaces </code></pre><p></p><p></p><p></p><p></p><p><br /></p><p>El contenido del archivo se vera como lo siguiente:</p><p><img alt="" src="data:image/png;base64,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" /></p><p>Editaremos la linea de <i>iface eth0 inet dhcp</i>, dejando como: <i>iface eth0 inet static</i>. Debajo de esa linea se agregará las siguiente lineas:</p><ul><li>address 192.168.1.12</li><li>netmask 255.255.255.0</li><li>gateway 192.168.1.254</li><li>dns-nameservers 192.168.1.254 8.8.8.8</li></ul><p>Quedando como la siguiente imagen:</p><p><img alt="" src="data:image/png;base64,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" /></p><p><br /></p><p></p><p>Una vez guardado el archivo, solo resta reiniciar el servicio de red o se puede mandar reiniciar el servidor si se prefiere.</p><p>Para reiniciar el servicio de red, se puede ejecutar el siguiente comando:</p><pre><code>systemclt restart networking.service </code></pre><p></p><p></p><p></p><p></p><p><br />Cabe aclarar que si se encuentra conectado por SSH es posible que se pierda la conexión.</p><p>Si todo se realizó correctamente, se puede confirmar el cambio desde la consola del servidor accediendo y ejecutando el siguiente comando:</p><pre><code>ip -c addr show eth0 </code></pre><p></p><p></p><p></p><p></p><p><br /></p><p></p><p>Si quiere tener mas información de las opciones que se pueden configurar en el archivo <i>interfaces</i>, puedes ver el manual del mismo ejecutando desde la consola de linux:</p><p></p><pre><code>man interaces<br /></code></pre><p></p><p></p><p></p><p></p><p><br />Esperando sea de utilidad para mas de alguno, nos leemos luego. Saludos<br /></p><p><br /><br /></p><p></p><p><br /></p><p></p><p><br /></p>Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-80285749294057925142023-01-19T13:12:00.001-07:002023-01-19T13:14:31.895-07:00Validar llave privada con OpenSSL<style>
pre {
background: #f4f4f4;
border: 1px solid #ddd;
border-left: 3px solid #f36d33;
color: #666;
page-break-inside: avoid;
font-family: monospace;
font-size: 15px;
line-height: 1.6;
margin-bottom: 1.6em;
max-width: 100%;
overflow: auto;
padding: 1em 1.5em;
display: block;
word-wrap: break-word;
}
</style>
<h3 style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUg_ZnTt2DGU2gw4uFJ5eHbJO7a_rIE2oQi2Z3cwh6k8bzQ_S8h_SUiWhsYCX2BhYEecBl_TXg4WQOVLBIWPzXhv0hG61Ku0PvyxSH5TA9pGcJ7-LL61e8vZ2O-fQtXOQNBz_uOeOp0eh7g0ZecfGSaiKNzyICqawRAr7RakG30ODq2ddxSU-OadI/s623/OpenSSL_logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="141" data-original-width="623" height="72" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUg_ZnTt2DGU2gw4uFJ5eHbJO7a_rIE2oQi2Z3cwh6k8bzQ_S8h_SUiWhsYCX2BhYEecBl_TXg4WQOVLBIWPzXhv0hG61Ku0PvyxSH5TA9pGcJ7-LL61e8vZ2O-fQtXOQNBz_uOeOp0eh7g0ZecfGSaiKNzyICqawRAr7RakG30ODq2ddxSU-OadI/s320/OpenSSL_logo.png" width="320" /></a></div><br /> </h3><h3 style="text-align: left;">Aclaración</h3>
<p> En esta ocasion vamos a dejar un tutorial/nota sobre como revisar rapidamente si nuestro llave privada, que normalmente la usamos en nuestro servidor web, es valida o no.</p>
<p>Esto debido a que me tope con un detalle al desplegar un pagina web con certificado y la llave privada me estaba fallando. Así que iniciemos.</p>
<h3 style="text-align: left;">Validación</h3>
<p>Hacer la revision es rapida y sencilla, solo es un comando que nos van a ayudar</p>
<h3 style="text-align: left;">Comando</h3>
<p>Para revisar que la consistencia de la llave es correcta ejecutamos</p>
<div>
<pre>openssl rsa -check -noout -in myprivate.key | openssl md5</pre>
</div>
<p>Lo anterior mostrara el siguiente mensaje:</p>
<div>
<pre>[root@localhost ssl]# openssl rsa -check -noout -in myprivate.key<br />RSA key ok
</pre>
</div>
<p>Y con lo anterior se confirma que es correcto.</p>
<p>Comando bonus</p>
<p>Si queremos revisar la información del certificado se puede ejecutar el siguiente:</p>
<div><pre>openssl x509 -text -noout -in myserver.crt</pre></div>
<p>Lo anterior debería mostrar información del certificado, por ejemplo:</p>
<div>
<pre>Certificate:<br /> Data:<br /> Version: 3 (0x2)<br /> Serial Number:<br /> b0:4b:df:81:25:fb:80:27<br /> Signature Algorithm: sha256WithRSAEncryption<br /> Issuer: C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", OU = http://certs.godaddy.com/repository/, CN = Go Daddy Secure Certificate Authority - G2<br /> Validity<br /> Not Before: May 10 07:00:40 2021 GMT</pre>
</div>
<p><br /></p>
<p>Esperando sera de utilidad a mas de alguno, nos leemos luego. Saludos</p><p><br />
</p>Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-8107784408290774802022-12-29T10:24:00.000-07:002022-12-29T10:24:33.556-07:00Multipuerto SIP para una instancia Asterisk<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://upload.wikimedia.org/wikipedia/pt/thumb/1/1a/Asterisk_Logo.png/300px-Asterisk_Logo.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="177" data-original-width="300" height="177" src="https://upload.wikimedia.org/wikipedia/pt/thumb/1/1a/Asterisk_Logo.png/300px-Asterisk_Logo.png" width="300" /></a></div><p></p><h2 style="text-align: left;">Multipuerto SIP <br /></h2><h3 style="text-align: left;">Descripción <br /></h3><p>En esta ocasión se trae un truco para poder utilizar, a parte del puerto por default 5060 de SIP, multiples puertos de escucha para la señalización SIP.</p><p>Como tal, no hay forma de configurar en <a href="https://www.asterisk.org/" target="_blank">Asterisk</a> para el protocolo SIP para escucha en mas de 1 puerto a la vez. Sin embargo, existe una forma de poder redireccionar puertos para lograr esa funcionalidad.</p><h3 style="text-align: left;">Redireccionar</h3><p>Para lograr escuchar y redireccionar se utiliza las tablas de ruteo de IPTABLES, para esto se configura una regla que realice dicho redireccionamiento</p><p>Seria: <br /></p><pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span face="arial, tahoma, helvetica, freesans, sans-serif" style="color: #333333;"><span style="font-size: 12px; line-height: 17px;">iptables -t nat -A PREROUTING -i eth0 -p udp --dport 49750 -j REDIRECT --to-ports 5060<br /></span></span></pre><p><br /></p><p>Cable aclarar que esto no solo funcionaria para Asterisk, sino también para cualquier servicio VoIP que utilice el protocolo SIP, esto es <a href="https://signalwire.com/freeswitch" target="_blank">FreeSWTICH</a>, <a href="https://www.kamailio.org/w/" target="_blank">kamailio</a>, etc.<br /></p>Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-43826571614068648962022-12-27T09:21:00.000-07:002022-12-27T09:21:07.457-07:00SSH - Acceso sin password en Linux<style>
pre {
background: #f4f4f4;
border: 1px solid #ddd;
border-left: 3px solid #f36d33;
color: #666;
page-break-inside: avoid;
font-family: monospace;
font-size: 15px;
line-height: 1.6;
margin-bottom: 1.6em;
max-width: 100%;
overflow: auto;
padding: 1em 1.5em;
display: block;
word-wrap: break-word;
}
</style>
<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCCLFE0NbbQGxcxEyFPMr3TdEe1owbd32UI1vRvEhLj7aETf1Tk4LyBqSXx27AiiKg18wImMapMC23-Exda0fkTGsyJSfahAOYSCNIUuMGNBD0UOd04iZLbVaLRezb_trM6V4pejO8vM4Ik4HnAq-L2pmEf8KLHnJ29Ga8owgZXgKhYFhOACPl_fg/s920/png-transparent-secure-shell-ssh-keygen-computer-servers-computer-network-computer-software-shell-text-computer-logo.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="920" data-original-width="920" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCCLFE0NbbQGxcxEyFPMr3TdEe1owbd32UI1vRvEhLj7aETf1Tk4LyBqSXx27AiiKg18wImMapMC23-Exda0fkTGsyJSfahAOYSCNIUuMGNBD0UOd04iZLbVaLRezb_trM6V4pejO8vM4Ik4HnAq-L2pmEf8KLHnJ29Ga8owgZXgKhYFhOACPl_fg/w220-h220/png-transparent-secure-shell-ssh-keygen-computer-servers-computer-network-computer-software-shell-text-computer-logo.png" width="220" /></a></div><br /> <p></p><h1 style="text-align: left;">SSH - Acceso sin password en Linux <br /></h1><h2 style="text-align: left;">Introducción <br /></h2><p> En este ocasión se trae una guía rápida de como generar una conexión a un servidor SSH evitando que en cada sesión nos solicite un usuario y password.</p><p>Esta pequeña guía se enfoca en el caso de practicidad al momento genera conexiones a un servidor utilizando llaves publicas y privadas. Si bien existen gestores de conexiones como <a href="https://remmina.org/" target="_blank">Remmina</a> en Linux o <a href="https://mobaxterm.mobatek.net/" target="_blank">MobaXterm</a> en Windows y otros mas, es posible administrar nuestras conexiones si tener herramientas adicionales, este método te permite generar tu archivo de configuración a tu gusto.<br /></p><p>El escenario a mostrar en esta guía sera:</p><ul><li>SSH Cliente: Tendrá la dirección IP 192.168.1.12</li><li>SSH Server: Tendrá la dirección IP 192.168.1.11 <br /></li></ul><h3 style="text-align: left;">Equipo cliente</h3><h4 style="text-align: left;">Paso 1. Generar llaves de acceso <br /></h4><p>En el equipo cliente se debe generar las llaves publicas y privadas las cuales se usaran para acceder al servicio remoto. Para lo anterior, en una terminal, ejecutar el siguiente comando:</p><pre><code><p>ssh-keygen -t rsa</p></code></pre><p>La generación solicitará una password, si no se quiere estar proporcionando dicha password solo es necesario presionar "Enter" a las preguntas. Esto ha de generar 2 archivos, la llave publica (<i>id_rsa.pub</i>) y la llave privada (<i>id_rsa</i>)</p><p></p><h4 style="text-align: left;">Paso 2. Copiar tu llave publica al servidor remoto</h4><p>Una vez generada las llaves, es necesario copiar la llave pública al servidor remoto al que se desea conectar sin usar password. Para esto la herramienta de SSH trae un comando que permite hacer el envió de forma segura. Hay que ejecutar:</p><pre><code><p>ssh-copy-id usuario@192.168.1.11</p></code></pre><p>Lo anterior solicitará una conexión al servidor SSH remoto con el usuario que utilizamos para conectarnos al servidor. Solicitará la contraseña de ese usuario, si todo bien realizará la copia de la llave pública de forma automática</p><p>Con lo anterior es necesario para realizar la conexión sin necesitar escribir password. Para esto se puede ejecutar la conexión de la siguiente forma:</p><pre><code><p>ssh usuario@192.168.1.11</p></code></pre><p>Y el cliente SSH realizara la validación de las llaves y el intercambio de autenticación, permitiendo acceder de forma directa al servidor remoto.</p><p>Si queremos hacer mas como nuestro acceso, podemos editar nuestro archivo <i>config</i> del cliente SSH y definir parámetros de conexión al servidor remoto. De ese modo nuestro comando de conexión seria mas corto </p><h4 style="text-align: left;">Paso 3. Configurar sesiones</h4><p>Para tener una mejor comodidad al momento de ingresar a nuestros equipos, y evitar escribir tanto, podemos editar el archivo <i>config</i> de ssh, definiendo los parámetros de nuestros equipos. Para esto editamos el archivo <code>~/.ssh/config<br /></code></p><p>Definimos los configuración de nuestro ejemplo, quedando:</p><pre><code><p>Host Remoto</p><p> Hostname 192.168.1.11</p><p> User usuario</p><p> IdentityFile ~/.ssh/id_rsa</p><p> ServerAliveInternal 60</p><p> ServerAliveCountMax 3</p></code></pre><p>Guardamos el archivo y podemos probar la conexión ejecutando desde una terminal:</p><pre><code><p>ssh Remoto</p></code></pre><p>Con esto debería ser suficiente para generar la sesión remota.</p><p>Esperando sea de ayuda para mas de alguno, nos leemos en otra publicación. </p><p><br /></p>Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-22560351086020957392021-07-30T12:26:00.001-06:002021-07-30T12:26:39.961-06:00Copiando con RSync mostrando progreso en Linux<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5u6fUpfR6HHJK_5k3IBoQQf7Kn6DPGaZFNnHzKPTfopLy6pmZIIT41ukix9OUdS_wiEnYfkhnVACmD0l2IKdDiMlmdZV2zFvuxvQLDRin9A0iNFLROQ2FZMojVm8FDjXh6yD__MeZWLk//" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="200" data-original-width="320" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5u6fUpfR6HHJK_5k3IBoQQf7Kn6DPGaZFNnHzKPTfopLy6pmZIIT41ukix9OUdS_wiEnYfkhnVACmD0l2IKdDiMlmdZV2zFvuxvQLDRin9A0iNFLROQ2FZMojVm8FDjXh6yD__MeZWLk//" width="320" /></a></div><p></p><p>Hacer copias de archivos y/o directorios enteros es común en cualquier sistema operativo. En Linux existen diferentes formas de hacer esta tarea.</p><p>Vamos a ver una de esas formas utilizando un comando muy conocido, pero con algunas opciones que nos ayudaran a tener mejor control y rendimiento al copiar.</p><p></p><h3 style="text-align: left;">Aclaración</h3><p>Una de las situaciones que como usuario de linux se llega a enfrentar, es que cuando se ejecuta algún comando, pocas veces se ve por pantalla el progreso o avance que el comando esta realizando. En el caso de rsync, si no se le especifica esto, no muestra el avance de la copia, por lo que es necesario indicarle que muestre el progreso.</p><p></p><p>Una buena forma de conocer todos los parámetros de un comando es consultando su manual de usuario. Normalmente se puede hacer ejecutando el comando man.</p><pre style="background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; margin-bottom: 15px; margin-top: 5px; overflow: auto; padding: 10px 15px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ man rsync</span></span></pre><div><br /></div><div>Lo anterior mostrara una ventana con la información del comando y sus parámetros, y en algunos casos ejemplos prácticos.</div><h3 style="text-align: left;">Copiando (Sincronizando)</h3><div>Es muy común utilizar rsync para la copia de directorios mas que un archivo en particular. Para casos de archivos, pudiera ser cuando estos tienen un peso grande en Megas.</div><div><br /></div><div>Cuando son directorios donde se tienen archivos importantes, o archivos de algún sistema o servicio, los cuales requieren tener ciertos permisos y se desea que estos mismos permisos se hereden al copiar se ejecuta con los siguientes parámetros</div><div><br /></div><div><pre style="background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; margin-bottom: 15px; margin-top: 5px; overflow: auto; padding: 10px 15px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ rsync --progress -grov /ruta/del/directorio/origen/ /ruta/del/directorio/destino/</span></span></pre></div><div><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;"><br /></span></span></div><div>Lo anterior realiza la copia de un directorio completo hacia el directorio destino, respetando tanto los permisos lectura, escritura y ejecución, así como los permisos de usuario y grupo de los archivos.</div><div><br /></div><div>Los parámetros usados son:</div><div><br /></div><div><b>--progress</b>: El cual se le indica a rsync que por cada archivo que sincronice debe mostrar un avance de la copia. El cual muestra tanto el tamaño del archivo en bytes, como el porcentaje de la copia.</div><div><b>-grov</b>: hace referencia a diferentes opciones, estas son:</div><div><ul style="text-align: left;"><li><b>g</b>: Que respete los permisos del grupo dueño del/los archivo(s)</li><li><b>r</b>: Que la copia se realice de forma recursiva, en caso de existir directorios y archivos internos en el origen</li><li><b>o</b>: Que respete los permisos del dueño (owner) de los archivos/directorios a copiar</li><li><b>v</b>: Que muestre el verbose, es decir, cada directorio y/o archivo que va procesando</li></ul></div><div><br /></div><div>Si deseamos hacer la copia de algún archivo grande (Megas o Gigas) y queremos ver como va la copia, seria muy similar al comando anterior, solo que solo se indica el archivo en cuestión y el destino. Ejemplo:</div><div><br /></div><div><pre style="background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; margin-bottom: 15px; margin-top: 5px; overflow: auto; padding: 10px 15px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ rsync --progress -av /ruta/de/archivo.iso /ruta/directorio/destino/</span></span></pre></div><div><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;"><br /></span></span></div><div>Lo anterior debe mostrar el progreso de la copia del archivo, como se puede confirmar en la siguiente imagen:</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih1cvK4PIBoBuLNNpSKPIGDi7TR10ACtt9M6vJsTcxk-320wNJFNWLfJ1BbUBvTH8kUdC5ZLWC_3IO0vfjXiDHMqX5QhOxJkV17rbpHsGzvc1cKbx27NR6T9tC1F8oZy7t468CoGl06kE//" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="171" data-original-width="756" height="145" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih1cvK4PIBoBuLNNpSKPIGDi7TR10ACtt9M6vJsTcxk-320wNJFNWLfJ1BbUBvTH8kUdC5ZLWC_3IO0vfjXiDHMqX5QhOxJkV17rbpHsGzvc1cKbx27NR6T9tC1F8oZy7t468CoGl06kE/w640-h145/image.png" width="640" /></a></div><br />Una vez finalizada la copia, debería de mostrar el siguiente resumen:</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNVLzCj8Ar2nOaQ3MOhp66CFvylEuuauJJVDQNxkZngsYAssJIaFX6-lyDARMs85ser_I7ugQKlFRMwI_oAUegWYc4MMuI_ZKmKgXOjKwtygtNrlTaWLrL6YKN91z_vFXnhO2Vdu6u6Yo//" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="184" data-original-width="691" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNVLzCj8Ar2nOaQ3MOhp66CFvylEuuauJJVDQNxkZngsYAssJIaFX6-lyDARMs85ser_I7ugQKlFRMwI_oAUegWYc4MMuI_ZKmKgXOjKwtygtNrlTaWLrL6YKN91z_vFXnhO2Vdu6u6Yo/w640-h170/image.png" width="640" /></a></div><br /></div><h3 style="text-align: left;">Copias hacia otro equipo o servidor</h3></div><div>Una de las bondades que brinda rsync, aparte de la copia con sus permisos, también se puede hacer lo mismo pero hacia un equipo o servidor remoto. Para esto es necesario ejecutar el comando de la siguiente forma:</div><div><br /></div><div><div><pre style="background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; margin-bottom: 15px; margin-top: 5px; overflow: auto; padding: 10px 15px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ rsync --progress -avh -e ssh /ruta/de/archivo.iso usuario@192.168.1.220:/tmp</span></span></pre></div><div><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;"><br /></span></span></div>Lo anterior estaría copiando el archivo hacia un servidor externo, indicando el destino (después de los dos puntos ":" en el servidor remoto).</div><div><br /></div><div>En el ejemplo anterior se utilizan 2 parámetros adicionales:</div><div><br /></div><div><ul style="text-align: left;"><li><b>h</b>: Le indica a rsync que muestre la transferencia en un formato mas entendible (para humanos). Ya había mencionado que la vista se muestra en bytes al hacer la copia. Con este parámetro forza a mostrar en Mega y/o Gigas, según sea el caso.</li><li><b>e</b>: Indica la shell a utilizar en la copia remota, en este caso utiliza SSH para el tema de la transferencia segura.</li></ul></div><div>El comando anterior debería mostrar algo como la siguiente imagen:</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHVkc5T1X4u6OFSapndz8925iMbnV3U1f_Y5fjceVLU_W4LvmMF7Lf9-9UUtXp5my3JkOj-pZzW1l6NrvdMi5pvfC1en30wUV0PI0j2R8pKVDM-VvF21Z-Y1v54fZyP3UgRVE8i4CIg8k//" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="194" data-original-width="880" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHVkc5T1X4u6OFSapndz8925iMbnV3U1f_Y5fjceVLU_W4LvmMF7Lf9-9UUtXp5my3JkOj-pZzW1l6NrvdMi5pvfC1en30wUV0PI0j2R8pKVDM-VvF21Z-Y1v54fZyP3UgRVE8i4CIg8k/w640-h142/image.png" width="640" /></a></div><br />Conclusión</div><div><br /></div><div>Entiendo que pueden existir otras forma de hacer copias, algunas mas agradables en terminos de vista. Pero cuando se trabaja con servidores, donde lo que se tiene es la linea de comandos, esta puede ser una forma de hacerlo.</div><div><br /></div><div>Esperando que pueda ser de utilidad para mas de alguno. Nos leemos en otra entrada. Saludos</div><div><br /></div><div><br /></div><p><br /></p>Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-55442199434058097242021-04-05T12:40:00.001-06:002021-04-05T12:40:32.839-06:00Generar Certificado SSL Wildcard usando Let's Encrypt/Certbot<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2BsWbOgjd_WAGvZJXL5oDLhHb8Mov0ASoEKt3TaU3R_-rTqpyOAcL7OiuB6q2NEMHcFNeKKsIIYquMJS5dCkHQKNkZ5D-QmgHJT0ukURhUnhsbg_mRzZgAzm_OOcnaaTBxBHHOibY6WI/s300/letsencrypt-logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="233" data-original-width="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2BsWbOgjd_WAGvZJXL5oDLhHb8Mov0ASoEKt3TaU3R_-rTqpyOAcL7OiuB6q2NEMHcFNeKKsIIYquMJS5dCkHQKNkZ5D-QmgHJT0ukURhUnhsbg_mRzZgAzm_OOcnaaTBxBHHOibY6WI/s16000/letsencrypt-logo.png" /></a></div><br /><h2 style="text-align: left;"> Introducción</h2><p></p><p> Buen día, en esta ocasión quiero compartir como se realiza la creación de un certificado wildcard, o lo que es lo mismo, un certificado que puedas usar con tu dominio principal y con subdominio.</p><p>Digamos que tienes un dominio llamado supertienda.com, y deseas tener varios subdominios, como por ejemplo: www.supertienda.com, almacen.supertienda.com, webmail.supertienda.com, etc.</p><p> Inicialmente, cuando supe de Let's Encrypt y la ventaja de tener un certificado gratuito (se vale donar), me agrado mucho la idea, pero tenia que crear un certificado por cada dominio/subdominio que quería usar.</p><p>No hace mucho alguien me pregunto si podíamos crear un certificado de Let's Encrypt pero como wildcard, por lo que buscando encontramos y aquí el como.</p><h2 style="text-align: left;">Aclaración</h2><p>Este proceso contempla el hecho de tener acceso al manejador de DNS (servicio/servidor), ya que se requiere realizar una configuración en dicho servicio para que funcione la creación del certificado <br /></p><h2 style="text-align: left;">Primero lo primero</h2><p> Dependiendo de la distribución que estes usando, tendras que instalar Certbot. Usualmente las distribuciones mas comunes ya lo tienen en sus repositorios, por lo que tendras que:</p><h3 style="text-align: left;">Ubuntu/Debian (y derivados)</h3><pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">sudo apt install certbot</span></span></pre><h3 style="text-align: left;">Para Centos/RHEL/Fedora (y derivados)</h3><pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">sudo yum install certbot<br /></span></span></pre><p>Una vez instalado se procede con el siguiente paso.</p><h2 style="text-align: left;">Generando el certificado</h2><p>Usualmente, para generar un certificado de forma "normal", solo se requiere ejecutar el comando de <i>certbot</i> y con algunos parametros, indicando tipo de servicio web (apache, nginx), entre otros parametros. Pero en este caso se pasaran parametros donde uno de ellos es definir el proceso manual.</p><pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">certbot certonly --manual \<br /> </span></span><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">--preferred-challange=dns</span></span><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;"> </span></span></span></span><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">--email webmaster@supertienda.com</span></span></span></span> \<br /> -- server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d *.supertienda.com<br /></span></span></pre><p> Donde:</p><ul style="text-align: left;"><li><b>--manual</b>: Indica que la generación sera de forma manual e interactiva o utilizando un hook de shell</li><li><b>--preferred-challenge</b>: Indica que la validación sera a traves de la validación del DNS, usualmente utiliza el servicio de apache, nginx a traves del puerto 80 de la IP donde responde el dominio deseado.</li><li><b>--server</b>: Especifica el punto de generación del certificado. Actualmente solo acme-v02</li><li><span><b>--agree-tos</b>: Bandera. Aceptar Servidores ACME</span></li><li><span><b>-d</b>: Escpecifica el dominio deseado. Es aquí donde se pone el wildcard</span></li></ul><p><span>Nota: Como se esta generando<span> un certificado SSL wildcard, se indica el dominio con el *, como se muestra en el ejemplo.</span></span></p><h2 style="text-align: left;"><span><span>Autenticando el dominio en el DNS</span></span></h2><p><span><span>Para certificados Wildcard la unica autenticación es por DNS (challenge) para Let's Encrypt, el cual se invoca con el parametro <i>preferred-challenge=dns</i>.</span></span></p><p><span><span> Una vez que se ejecuta el comando con los parametros indicados, Certbot indicara el valor que hay que configurar en el DNS con el tipo TXT. El mensaje se mostrará como:</span></span></p><pre class="if ig ih ii ij kf kg kh"><span class="gk ki jf fo kj b dh kk kl s km" data-selectable-paragraph="" id="67ed"></span></pre><blockquote><pre class="if ig ih ii ij kf kg kh"><span style="font-size: small;"><span class="gk ki jf fo kj b dh kk kl s km" data-selectable-paragraph="" id="67ed">Please deploy a DNS TXT record under the name<br />_acme-challenge.supertienda.com with the following value:</span><span class="gk ki jf fo kj b dh le lf lg lh li kl s km" data-selectable-paragraph="" id="01dc">J50GNXkhGmKCfn-0LQJcknVGtPEAQ_U_WajcLXgqWqo</span></span></pre><p><span><span> </span></span></p></blockquote><p><span><span></span> </span></p><p>Los valores a rescatar son:</p><ul style="text-align: left;"><li><b>Nombre del registro</b>: _acme-challenge</li><li><b>Valor</b>: j50GNXkhGmKCfn-0LQJcknVGtPEAQ_U_WajcLXgqWqo<br /></li></ul><h2 style="text-align: left;">Revisando el registro TXT <br /></h2><p>El registro se tiene que generar del tipo TXT. Certbot se quedará a la espera a que se propague el registro del DNS. Para validar si el registro ya se propagó, puedes validar utilizando un servicio online, en caso probé en <a href="https://mxtoolbox.com/TXTLookup.aspx">MxToolBox</a>. Ahi se debe poner en la casilla como sigue:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIJp7j627MlNqRzME0xM27gMHReK3s4MScRGhUJJUBN8HNckGrZXHKCr8u4RekMEITzlQypIQU9N8A0rlfxd6mFBBUJn8gHHhzbeWc5s7Fy2GKWQ-1AbqT0oynRp82Q73Zdt-daa9KuGQ/s631/Screen+Shot+2021-04-05+at+12.18.08+p.m..png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="321" data-original-width="631" height="204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIJp7j627MlNqRzME0xM27gMHReK3s4MScRGhUJJUBN8HNckGrZXHKCr8u4RekMEITzlQypIQU9N8A0rlfxd6mFBBUJn8gHHhzbeWc5s7Fy2GKWQ-1AbqT0oynRp82Q73Zdt-daa9KuGQ/w400-h204/Screen+Shot+2021-04-05+at+12.18.08+p.m..png" width="400" /></a></div><p>Al validar, deberá mostrarte que encontro el registro (ya propagado por los servidores DNS). Se debe de la siguiente manera:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgccxYoR0XQ-r4uSUEslM47a_IoEml1vl2pMJUTkgn3kfMhW-SxgC_6CS6SN7nlyXHK2YeAG4nvs4aVZVet6Qa0PQ_BHtW3XBINVO7PSQ773t7CKZxqIRzLoCNTHbWjcH3ESx7fdXn6WZM/s979/Screen+Shot+2021-04-05+at+12.20.16+p.m..png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="598" data-original-width="979" height="390" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgccxYoR0XQ-r4uSUEslM47a_IoEml1vl2pMJUTkgn3kfMhW-SxgC_6CS6SN7nlyXHK2YeAG4nvs4aVZVet6Qa0PQ_BHtW3XBINVO7PSQ773t7CKZxqIRzLoCNTHbWjcH3ESx7fdXn6WZM/w640-h390/Screen+Shot+2021-04-05+at+12.20.16+p.m..png" width="640" /></a></div><p>Certbot debe estar en esperá de la propagación, solo hay que darle enter para validar el registro. Si todo esta correcto debera mostrarte el mismo mensaje que muestra cuando se crea el certificado.</p><p>Con lo anterior queda generado el certificado. Esperando que sea de utilidad para más de alguno, nos leemos luego. Saludos</p><p><br /></p>Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-45413336650296669482021-03-26T13:38:00.004-07:002021-03-26T13:38:34.377-07:00Limite de carga de archivos en Nginx<h1 style="text-align: left;"> Limite de carga de archivos en Nginx</h1><div class="separator" style="clear: both; text-align: center;"><a href="https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fwww.silicon.co.uk%2Fwp-content%2Fuploads%2F2018%2F04%2FNginx-logo-1.png&f=1&nofb=1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="420" data-original-width="800" height="168" src="https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fwww.silicon.co.uk%2Fwp-content%2Fuploads%2F2018%2F04%2FNginx-logo-1.png&f=1&nofb=1" width="320" /></a></div><p style="text-align: left;"></p><h3 style="text-align: left;">Introducción <br /></h3><p>El siguiente mini-como es debido a una situación con la que me tope, donde tengo un servicio Nginx como proxy para una herramienta de chat.</p><p>Me vi en la necesidad de enviar un documento a través de esa herramienta y el archivo se quedaba "pensando" al momento de enviar el archivo/imagen. Pero no me da daba mas información de que estaba pasando.</p><p>Revise el log de la herramienta de chat, pero no me dio información, así que revise el log de nginx y ahí encontré los siguiente:</p><pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">2021/03/26 12:44:12 [error] 231926#0: *1819192 client intended to send too large body: 1877132 bytes, client: 172.16.1.20, server: _<br /></span></span></pre><p>El cual me dio una pista de que estaba sucediendo, nginx me estaba limitando el tamaño de envio (subida) de archivos.</p><p>Para lo cual tuve que ver como incrementar el tamaño y aqui lo que hice.</p><h3 style="text-align: left;">Configurando</h3><p>Por defecto, según leí, nginx permite la carga máxima de subida de 1.3 MB, por lo que esto me impedía enviar archivos mas grande.</p><p>Para incrementar el limite hay que configurar el parámetro <i>client_max_body_size</i>. Ya que la herramienta utiliza POST para el envío de archivos en <i>body</i> de la solicitud.</p><p>Para esto se puede configurar de 2 formas, dentro de la configuracion del http que maneja nginx o dentro del servidor/ruta que se quiera procesar.</p><p>Esto es:</p><pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">http {<br /> ...<br /> client_max_body_size 100M;<br />} <br /></span></span></pre><br class="Apple-interchange-newline" /><p>o en</p><pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">server {<br /> ...<br /> client_max_body_size 100M;<br />}<br /></span></span></pre><br class="Apple-interchange-newline" />o en<br /><pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #333333; font-family: arial, tahoma, helvetica, freesans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">location /uploads {<br /> ...<br /> client_max_body_size 100M;<br />} <br /></span></span></pre><p><br class="Apple-interchange-newline" />Dependerá de como se quiera manejar el permiso, si es para todos el servicio, entonces seria en <i>http</i>, si es para un servidor en particular en <i>server</i>, o si es solo para una ruta. Ya será como se necesite trabajar.</p><p>Posterior a eso solo se manda reiniciar el servicio de <i>nginx</i> y listo. Esperando sea de utilidad, saludos.</p><p><br /></p><p><br /></p>Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-20373334215471815512021-01-14T15:43:00.001-07:002021-04-05T11:30:47.168-06:00Importar CSV en MongoDB<h3 style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvwOVYWbuikENV5JC4aw-hxjM_BhJ9mExl99odzNH4uFm72_5XZ14lV7MhjXKilhj10qSbXEIhFAY7tdVXY59HlWMRwIbB-biNpr3_zjmY4OqQFRCoZdEZ9cl003hsl8TxPt-6P6y-XAA/s3320/mongodb-logo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="947" data-original-width="3320" height="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvwOVYWbuikENV5JC4aw-hxjM_BhJ9mExl99odzNH4uFm72_5XZ14lV7MhjXKilhj10qSbXEIhFAY7tdVXY59HlWMRwIbB-biNpr3_zjmY4OqQFRCoZdEZ9cl003hsl8TxPt-6P6y-XAA/w400-h114/mongodb-logo.jpg" width="400" /></a></div><a href="https://www.agiliacenter.com/wp-content/uploads/2017/04/mongo-db-logo.png" style="margin-left: 1em; margin-right: 1em;"></a></div>Poco de Historia <br /></h3><p> Hace unos días me vi en la necesidad de importar un archivo CSV a una base de datos, dado que necesitaba la información para hacer consultas.</p><p></p><p>La razón era poder consultar el código postal de un domicilio y recuperar la colonia, municipio/alcaldía y estado. La base de datos en cuestión es MongoDB, y como vengo utilizando por mucho tiempo bases de datos relacionales, donde hacer este tipo de importaciones me era común, pense que esta tipo de base deberia tener algo similar.</p><h3 style="text-align: left;">Primer Intento <br /></h3><p>En un principio llegue a hacer una pequeña aplicación (en Node.JS) para hacer la importación, pero por las premuras tuve que buscar otro método mas rápido. Para lo cual encontré un método "nativo" que trae este gestor de datos.</p><h3 style="text-align: left;">Solución <br /></h3><p>Hacer la importación es sencilla. Si estas acostumbrado a usar la terminal, te sera muy sencillo. Para esto hay que ejecutar el siguiente comando:</p><pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span face="arial, tahoma, helvetica, freesans, sans-serif" style="color: #333333;"><span style="font-size: 12px; line-height: 17px;">$ mongoimport -d mibase -c micoleccion --type CSV --file archivo.csv --headerline</span></span></pre><p><br class="Apple-interchange-newline" />El comando anterior utiliza varios parámetros que a continuación describo:</p><ul style="text-align: left;"><li>Parámetro <b>-d</b>: Nombre de la base de datos</li><li>Parámetro <b>-c</b>: Se indica la colección (tabla si lo quieres relacionar) donde se guardaran los registros</li><li>Parámetro <b>--type</b>: Define el tipo/formato de dato origen del archivo a procesar</li><li>Parámetro <b>--file</b>: Indica el archivo (con su ruta) a procesar</li><li>Parámetro <b>--headerline</b>: Se le indica al importador que la primera linea se utilizara para los nombres de los campos del documento. Este parametro solo funciona con formatos CSV y TSV</li></ul><div style="text-align: left;"><i><span style="font-size: x-small;"><b>Nota</b>: es necesario aclarar que para que el comando se pueda ejecutar debe estar en el PATH de tu sistema operativo.</span></i></div><p>Con lo anterior se cumple con el objetivo de hacer la importación y de forma mas rápida. Esperando te ahorre tiempo como a mí, nos leemos luego.<br /></p>Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-50553517129545831452020-04-19T23:52:00.002-06:002020-04-19T23:53:21.376-06:00Configurar Nginx/Apache con certificado SSL y su cadena completaCon el siguiente mini manual se puede crear el certificado SSL completo y que nuestras paginas web no tengan fallas con algunos servicios, mas en particular con las aplicaciones moviles.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6A9lYffhsQANDdNGoutcigtcFHfwJwKzMBL0WoSJaliqpix7aK27zdntyf3FojRa9qPWL3kiOIOnobVgf5NbX2UOdDPzNWWudDqLd4QwtZGiL86uW5-BTdrnJgqCHliUluWVXHU7dJ-A/s1600/sslcertificate-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="800" data-original-width="1200" height="425" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6A9lYffhsQANDdNGoutcigtcFHfwJwKzMBL0WoSJaliqpix7aK27zdntyf3FojRa9qPWL3kiOIOnobVgf5NbX2UOdDPzNWWudDqLd4QwtZGiL86uW5-BTdrnJgqCHliUluWVXHU7dJ-A/s640/sslcertificate-2.png" width="640" /></a></div>
<br />
<h4>
Justificación</h4>
En esta ocasión se explica como realizar la configuración de los certificados SSL en nuestras servidores web pero con la cadena completa del certificado, llamada también Full Chain.<br />
<br />
<h4>
Obtener los archivos SSL</h4>
<ol>
<li>Clave privada: archivo que usualmente termina con extensión <b>.key</b></li>
<li>Certificado intermedio: este archivo puede tener extensión <b>.crt</b> (SHA1) o <b>.pem</b> (SHA2). Puedes descargarlo desde el proveedor del certificado SSL</li>
<li>Certificado firmado: el certificado SSL firmado por tu proveedor, usualmente puede tener la extensión <b>.crt</b></li>
</ol>
<br />
<h4>
Copiar tu certificado</h4>
La copia es opcional y puedes trabajar directamente con tu certificado. Aun así, es mas sencillo poder hacer la "union" del certificado firmado y el certificado intermedio, para esto se recomienda hacer una copia y trabajar con ella<br />
<br />
<pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ cp certificado-firmado.crt certificado-firmado2.pem</span></span></pre>
<br class="Apple-interchange-newline" />
<h4>
Agregar certificado intermedio</h4>
En este paso se concatena el certificado intermedio y el certificado firmado. La concatenación se tiene que hacer en el orden correcto, primero el certificado firmado y luego el certificado intermedio, por ejemplo:<br />
<br />
<pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ cat certificado-intermedio.crt >> certificado-firmado2.pem</span></span></pre>
<br class="Apple-interchange-newline" />
El comando anterior agrega el certificado intermedio dentro del certificado firmado (copia).<br />
<br />
<h4>
Configurando Nginx</h4>
Necesitas especificar el nuevo certificado SSL creado en la configuración de nginx, para esto edita el archivo que contiene la configuración de los certificados y define los siguientes parámetros:<br />
<br />
<pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">ssl_certficate /ruta/delos/certificados/certificado-firmado2.pem
ssl_certificate_key /ruta/delos/certificados/clave-privada.key</span></span></pre>
<br />
Con lo anterior solo resta reiniciar el servicio de nginx<br />
<br />
<h4>
Configurar Apache</h4>
Dependiendo de la versión que tengas instalado, los archivos de configuración puede estar en rutas distintas, aun así los parámetros a configurar son los mismo, por lo que debes de tener<br />
<br />
<pre style="-webkit-text-stroke-width: 0px; background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #757575; font-family: monospace, monospace; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 15px; margin-top: 5px; orphans: 2; overflow: auto; padding: 10px 15px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">SSLCertificateFile /ruta/delos/certificados/certificado-firmado2.pem
SSLCertificateKeyFule /ruta/delos/certificados/clave-privada.key</span></span></pre>
<br />
Posterior reiniciar el servicio de apache y listo.<br />
<br />
Con lo anterior se debe poder tener el certificado valido para todos los servicios y/o aplicaciones móviles sin tener problemas de certificado invalido.<br />
<br />
Esperando sea de provecho. Nos leemos en próximo articulo.Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-43318115940997133582020-04-09T12:23:00.002-06:002020-04-09T12:23:40.270-06:00Instalar PHP 7.x en CentOS 7En esta entrada les traigo un manual en el cual se describe el proceso para instalar versiones de PHP 7 en un CentOS 7.<br />
<br />
Si bien existen muchos tutoriales en linea, la mayoría que he encontrado están en ingles, por lo que me dí a la tarea de tomar uno de ellos y traducir las partes necesarias en español.<br />
<br />
<h3>
Aclaración </h3>
<br />
En los repositorio de CentOS 7 la versión oficial que aun aparece para PHP es la 5.4.x la cual ya ha terminado su soporte, por lo que las web que se lleguen a trabajar con esta versión pueden tener problemas de seguridad.<br />
<br />
Para lo anterior, se puede realizar el siguiente proceso para la instalación de las versiones mas recientes.<br />
<h4>
</h4>
<h4>
Preparación</h4>
<br />
Para la instalación correcta de la versión 7 de PHP se requiere un par de repositorios adicionales, EPEL y Remi. Para esto sera necesario ejecutar los siguientes comandos.<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ sudo yum install epel-release
$ sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm </span></span></pre>
<br />
Una vez instalado ambos paquetes, es necesario instalar un paquete que nos ayudara a indicarle a <i>yum</i> desde donde tomar los paquetes de <i>php</i>, para eso ejecutamos:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ sudo yum install yum-utils</span></span></pre>
<br />
Una vez instalado el paquete anterior, ejecutaremos una instrucción para indicarle a <i>yum</i> la prioridad de selección de los paquetes de <i>php</i>, para eso ejecutamos<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ sudo yum-config-manager --enable remi-php73</span></span></pre>
<br />
La instrucción anterior indica que la selección sera sobre la versión 7.3 de php, si se requiere una versión distinta como 7.0, 7.1, 7.2 solo cambia al final de la instrucción por la versión que se quiere.<br />
<br />
<h4>
Instalación</h4>
<br />
Una vez que se define la versión que se quiere instalar, solo es cuestión de ejecutar el comando <i>yum</i> con los paquetes de <i>php</i> que se requieren instalar, por ejemplo:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ sudo yum install php php-mcrypt php-cli php-gd php-curl php-mysql php-ldap php-zip php-fileinfo</span></span></pre>
<br />
Para comprobar que la versión instalada es correcta puedes ejecutar el comando de <i>php</i> con el parámetro '<i>v'</i><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf8YFGca2k77FIUhhI7OatMbsq6FD7PTLFHCAkHq4SFGxaPj-LVQ5a2XiTSw6ngrqhrpbtbNLHxW54fl1UwxGpJypaAU8eZsSyEtEDv6ksTuTsmHvgBO-5OqXveWYqW6ZBySvRzC8wpzw/s1600/centos7-php7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="134" data-original-width="468" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf8YFGca2k77FIUhhI7OatMbsq6FD7PTLFHCAkHq4SFGxaPj-LVQ5a2XiTSw6ngrqhrpbtbNLHxW54fl1UwxGpJypaAU8eZsSyEtEDv6ksTuTsmHvgBO-5OqXveWYqW6ZBySvRzC8wpzw/s1600/centos7-php7.png" /></a></div>
<br />
Con lo anterior se confirma que la instalación quedo correctamente.<br />
<br />
Esperando que les sirva el manual a mas de alguno, me despido. Saludos<br />
<br />Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-48089565868484320612020-02-29T10:37:00.001-07:002020-02-29T10:37:36.046-07:00Montar directorio FTP en local en Linux<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkL-yvRmHwOzFiExhhlIBPcG6w33oTBdEJlE8KQiB8btecFVB4IC0VTJMiOpQEy8hovH4T9xPshuiLqJW_GfcL0iHch-W_HBm8Bg_n0uAvWxwhfiAnT3WhK83CiXHM5iaDSkl3Gi9RmQs/s1600/set-up-FTP-connection-windows-10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="332" data-original-width="751" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkL-yvRmHwOzFiExhhlIBPcG6w33oTBdEJlE8KQiB8btecFVB4IC0VTJMiOpQEy8hovH4T9xPshuiLqJW_GfcL0iHch-W_HBm8Bg_n0uAvWxwhfiAnT3WhK83CiXHM5iaDSkl3Gi9RmQs/s400/set-up-FTP-connection-windows-10.jpg" width="400" /></a></div>
<h4>
</h4>
<h4>
Razon</h4>
Hace ya un tiempo publique como montar un recurso compartido utilizando NFS, y si bien prefiero ese metodo, tuve la necesidad de hacerlo a traves de FTP.<br />
<br />
Para esto traigo es tutorial en el cual explicare como montar un directorio FTP remoto de forma local en nuestro GNU/Linux. Para esto proposito usaremos CurlFtpfs, el cual sistema de archivos para acceder a un host FTP basado en FUSE y libcurl.<br />
<br />
<h4>
Caracteristicas</h4>
CurlFtpFs se diferencia de otros sistemas de archivos por las siguientes caracteriscas:<br />
<br />
<ul>
<li>Soporta SSLv3 y TLSv1</li>
<li>Se puede conectar atraves de tunel proxy HTTP</li>
<li>Reconexion automatica si el servidor marca time out</li>
<li>Transforma los enlaces simbolicos absolutos para volver a apuntar al sistema de archivos del FTP</li>
</ul>
<br />
<h4>
Instalacion</h4>
Si estas en una distribucion Ubuntu, el comando es:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ sudo apt install curlftpfs</span></span></pre>
<br />
Si estas en distribuciones como CentOS/RHLE/Fedora, seria:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ sudo yum install curlftpfs</span></span></pre>
<br />
Montando directorio<br />
<br />
Para montar el directorio se puede realizar de 2 formas, desde la consola utilizando comando:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ curlftpfs -o umask=0777,uid=1000,gid=1000,allow_other ftp://usuario:password@mi.servidor.com /mi/directorio</span></span></pre>
<br />
Hay que tomar en cuenta que puede ser necesario utilizar el comando sudo.<br />
<br />
La segunda forma es configurar en el archivo de montaje, el cual normalmente esta en /etc/fstab. Para esto hay que editar el archivo con el editor preferente y agregar la siguiente linea:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">curlftpfs#usuario:password@mi.servidor.com /mi/directorio fuse rw,uid=1000,gid=1000,umask=0777,user,siud,allow_other,auto 0 1</span></span></pre>
<br />
Guardas el archivo y puedes ejecutar el comando en la terminal: mount -a<br />
<br />
Con lo anterior deberas de poder acceder al directorio y ver los archivos, crear nuevos, etc.<br />
<br />
Esperando sea de utilidad para mas de alguno, nos leemos luego.<br />
<br />Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-10183875021764507352019-11-08T12:03:00.001-07:002019-11-08T12:03:57.609-07:00Resetear password de NextCloud<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglTGEUKi14RJZvad66AQIcaB7tlTMEUqx1zExn7MYhtg_It4XU44FmpSSEFf4H7uofMEL-HpJOzQOKHY1hzPQN3QeFm_yt9GrDuxTZQxydsMMPFRVqzRK-oHQ2QAQnDSui1BJH1vxER5w/s1600/Nextcloud_Logo.svg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="852" data-original-width="1200" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglTGEUKi14RJZvad66AQIcaB7tlTMEUqx1zExn7MYhtg_It4XU44FmpSSEFf4H7uofMEL-HpJOzQOKHY1hzPQN3QeFm_yt9GrDuxTZQxydsMMPFRVqzRK-oHQ2QAQnDSui1BJH1vxER5w/s400/Nextcloud_Logo.svg.png" width="400" /></a></div>
<br />
<br />
Estimados, recienmente he estado trabajando en la administración de archivos para una institución gubernamental, por lo que comenzamos a trabajar con <a href="https://nextcloud.com/" target="_blank">NextCloud</a>.<br />
<br />
Para mas información de la plataforma consulten la <a href="https://docs.nextcloud.com/" target="_blank">documentación</a><br />
<br />
Como suele pasar en muchas ocasiones, es probable que podamos olvidar la password del usuario admin o que quien instaló no haya previsto el anotarla y se olvide.<br />
<br />
Para realizar el reset o cambiar la password del administrador u otro usuario se puede realizar de la siguiente manera.<br />
<br />
1. Click en el link de reset password en la pantalla de login, esta link aparece al intentar la primera vez en el acceso y falla. Este metodo solo funcionara si se definio un correo electrónico para el usuario, por lo que Nextcloud te enviara una correo con las instrucciones.<br />
<br />
2. Solicitar a otro usuario que tenga permisos de administrador, para que te resetee el password.<br />
<br />
Si lo anterior no funciona o no esta en el escenario en que estas, puedes resetear el password teniendo acceso al servidor donde este instalado el servicio.<br />
<br />
Para esto debes de ir a la ruta donde tienes instalado el servicio web de nextcloud, en la ruta:<br />
<h4>
Si se trabaja con apache</h4>
En Ubuntu/Debian la ruta es: <i>/var/www/apache2/</i><br />
En Centos/RHEL/Fedora, la ruta es: <i>/var/www/html/</i><br />
<br />
Para quienes trabajen con nginx, vaya al lugar donde dejaron la instalación del servicio<br />
<br />
Una vez se este en la ruta, se debera ejecutar el siguiente comando:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ sudo -u www-data php occ user:resetpassword admin
Enter a new password:
</span></span></pre>
<span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"> </span></span><br />
Para el caso de que el nombre del usuario no <i>admin</i>, cambiar por el nombre del usuario deseado. La password se le solicitara 2 veces para confirmacion.<br />
<br />
Con lo anterior debe ser suficiente para el cambio de la contraseña.<br />
<br />
Esperando sea de utilidad para mas de alguno, nos leemos luego.<br />
<span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"> </span></span>
Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-79353379645948543962019-10-30T11:20:00.001-07:002019-10-30T11:20:55.843-07:00Abrir puerto en FirewallD<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidL9JeBQD4OtUMz1sYRxVT2DUr3FGVSFt0Je084vp2FM7zE-YLJeJBkYxT1s9gm81iLuBrT_73fCixFekokvd4Ma7wFiXSkOVe-hMzo6MNgQbKKRmlr0z1F-snLBT-3BPgw6gizDIE09I/s1600/firewallD_bg.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="440" data-original-width="800" height="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidL9JeBQD4OtUMz1sYRxVT2DUr3FGVSFt0Je084vp2FM7zE-YLJeJBkYxT1s9gm81iLuBrT_73fCixFekokvd4Ma7wFiXSkOVe-hMzo6MNgQbKKRmlr0z1F-snLBT-3BPgw6gizDIE09I/s640/firewallD_bg.jpg" width="640" /></a></div>
<h3>
</h3>
<h3>
Introduccion</h3>
<br />
<br />
En este articulo veremos como abrir puertos y/o servicios en distribuciones linux que utilizan FirewallD.<br />
<br />
Se muestra como realizar las configuraciones de manera manual para abrir puertos en particular, es mas recomendable (y facil) permitir la apertura de servicios predefinidos.<br />
<br />
<h4>
Abrir puerto en particular</h4>
Abrir un puerto en firewalld es muy sencillo, el siguiente ejemplo muestra como abrir un puerto para cualquier IP de origen hacia el puerto 100 en el protocolo TCP.<br />
<span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"> </span></span><br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ firewall-cmd --permanent --add-port=100/tcp
$ firewall-cmd --reload
</span></span></pre>
<span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"> </span></span><br />
<br />
Lo anterior abrirá el puerto 100 para TCP y aplicara la regla en el firewall<br />
<br />
<h4>
Generar regla por servicio</h4>
Para mayor comodidad (si se quiere ver así) se le puede indicar que sea a traves de los servicios que mismo firewalld puede conoce o a detectado, para esto se puede utilizar el siguiente comando:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ firewall-cmd --permanent --add-service=mysql
$ firewall-cmd --reload</span></span></pre>
<br />
Si se quiere ver que servicios reconoce firewalld se puede ejecutar el siguiente comando para ver los servicios<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ firewall-cmd --list-services
dhcpv6-client ssh mysql
</span></span></pre>
<br />
Lo anterior mostrar una lista separada por espacios en blanco de los servicios que ha encontrado, y con esto podemos tener certeza de que servicios podemos utilizar en el ejemplo anterior.<br />
<br />
Esperando sea de utilidad para mas de alguno. Saludos y nos leemos en un proximo post.<br />
<br />
<br />Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-45854130293970347962019-10-11T12:14:00.000-06:002019-10-11T12:14:17.702-06:00TMUX - Terminal multiplexor para Linux<h4>
Saludos </h4>
Buenas amigos, aquí con una publicacion mas. En esta ocasion voy a comentar sobre un emulador de terminal para linux que permite tener varias paneles a la vez, estoy hablando de <a href="https://github.com/tmux/tmux/wiki" target="_blank">tmux </a><br />
<h4>
Introduccion</h4>
Tmux permite tener varias terminales en una, es decir, permite crear varios paneles en la misma terminal, asi puede tener varios procesos corriendo a la vez y poder verlos en la misma ventana.<br />
<br />
La definicion que manejan en su wiki es como sigue:<br />
<br />
<blockquote class="tr_bq">
tmux es un terminal multiplexor. Este permite cambiar facilmente entre diferentes programas en un mismo terminal, desacoplarse de el (esto mantiene en ejecucion en segundo plano la aplicacion) y volver a acoplarse (retomar la sesion nuevamente) en diferente terminal. Y hacer muchas otras cosas mas. Fuente: <a href="https://github.com/tmux/tmux/wiki" target="_blank">Tmux Wiki</a></blockquote>
<h4>
Manos a la obra </h4>
<br />
Una vez aclarado lo que es, es muy sencillo poner en ejecucion, solo basta con ejecutar en un terminal:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ tmux</span></span></pre>
<br />
Con lo anterior entraremos a la terminal que proporciona tmux, pero con la diferencia de que veremos una barra (de color verde, normalmente) en la parte inferior de nuestra terminal, algo como:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2_IjOFsqkyRgVFQbeVyrIpJE8dkv3WFQ5YDWzvysb12mG0sYhZx2rnO4Q-ECpU2oRXMxuFihw0AOJpU6QIzs1mRoAqhWkzk9eDakFV1qpIf7CPs-2nLInLUz6X3FvDmUoMYiZk3-HX_0/s1600/Screen+Shot+2019-10-11+at+11.37.24+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="618" data-original-width="1018" height="387" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2_IjOFsqkyRgVFQbeVyrIpJE8dkv3WFQ5YDWzvysb12mG0sYhZx2rnO4Q-ECpU2oRXMxuFihw0AOJpU6QIzs1mRoAqhWkzk9eDakFV1qpIf7CPs-2nLInLUz6X3FvDmUoMYiZk3-HX_0/s640/Screen+Shot+2019-10-11+at+11.37.24+AM.png" width="640" /></a></div>
<br />
<h4>
Comandos y teclas de accion</h4>
En ella podemos ejecutar lo mismo que podriamos ejecutar en un terminal normal, la diferencia es que nos permitirá poder tener varias terminales en la misma. Para crear una segunda (o mas) terminales, sera necesario ejecutar <i><span style="background-color: #cccccc;">CTRL + b <span style="background-color: white;"><span></span></span></span></i><span style="background-color: #cccccc;"><span style="background-color: white;"><span> que es la combinacion de tecla "maestra" para ejecutar comandos sobre tmux.</span></span></span><br />
<br />
<span style="background-color: #cccccc;"><span style="background-color: white;"><span>Para poder hacer una nueva terminal (o panel, como lo conoce tmux) se tienen varias teclas de acción, las cuales son:</span></span></span><br />
<br />
<ul>
<li><span style="background-color: #cccccc;"><span style="background-color: white;"><span><span style="background-color: #cccccc;"><b>%</b></span> - Divide la termina en 2, de forma vertial, de izquierda a derecha</span></span></span></li>
<li><span style="background-color: #cccccc;"><span style="background-color: white;"><span><span style="background-color: #cccccc;"><b>"</b></span> - Divide la termina actual en 2, de forma horizontal, de arriba a abajo</span></span></span></li>
<li><span style="background-color: #cccccc;"><span style="background-color: white;"><span><span style="background-color: #cccccc;"><b>&</b></span> - Elimina o finaliza el panel actual (o terminal) </span></span></span></li>
<li><span style="background-color: #cccccc;"><b>c</b></span> - Crea una nueva ventana. Para entenderlo, es crear una nueva terminal (como al estilo pestañas), dandole un numero a ventana le da un numero. Para acceder a cada ventana es necesario presional la combinacion maestra y luego el numero al que queremos movernos (0-9)</li>
</ul>
<br />
No son todas los comandos que se tiene, existen mas. Pero con los anteriores se tiene para trabajar. Si se desea tener la lista completa de los comando (o teclas de accion), puedes consultar <a href="http://man.openbsd.org/OpenBSD-current/man1/tmux.1" target="_blank">aqui</a>.<br />
<br />
Teniendo lo anterior, nuestra ventana puede verse algo como:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP_g2aNwrIXvYtmcKZWiXTjfdOplDKnLbPiVC3DXG1Vjmz0XaRI5oDHPfPGA0sF5nmuU0s2Wr-ZdcQouiqTdFpAWfu-_1ZKxfAR69NSXQiuELJECO4KxfGKujLnUZDt56aRK0q0x4aWzA/s1600/Screen+Shot+2019-10-11+at+11.51.01+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1039" data-original-width="1600" height="412" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP_g2aNwrIXvYtmcKZWiXTjfdOplDKnLbPiVC3DXG1Vjmz0XaRI5oDHPfPGA0sF5nmuU0s2Wr-ZdcQouiqTdFpAWfu-_1ZKxfAR69NSXQiuELJECO4KxfGKujLnUZDt56aRK0q0x4aWzA/s640/Screen+Shot+2019-10-11+at+11.51.01+AM.png" width="640" /></a></div>
<br />
<h4>
Moviendose entre panales</h4>
Para poder moverse entre cada uno de los posibles panales que puedas estar trabajando, es necesario utilizar la combinacion maestra y posterior usar las teclas (o flechas) de direccion de tu teclado.<br />
<br />
<h4>
Dimencionar los panales</h4>
Si llegas a tener la necesidad de tener mas grande algun panel que otro, por lo que estas visualizando en él, puede dimensionar el tamaño de los paneles.<br />
<br />
Para esto, en el panel que deseas (re)dimensionar, presionas la combinacion maestra y posterior presionas los dos puntos (:), esto te mandara a una linea de comandos (en la barra inferior se pinta de amarillo y te permite escribir) y ahi se digita el comando deseado, esto es:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">:resize-pane -L | -R [numero celdas]</span></span></pre>
<br />
Lo anterior se decribe como:<br />
<br />
:resize-pane -D (redimensiona el panel actual hacia abajo)<br />
:resize-pane -U (redimensiona el panel actual hacia arriba)<br />
:resize-pane -L (redimensiona el panel actual hacia la izquierda)<br />
:resize-pane -R (redimensiona el panel actual hacia la derecha) <br />
<br />
Si se proporciona el parametro de celdas, el panel se movera el numero de celdas que proporciones<br />
<br />
Lo anterior se puede ver de la siguiente forma:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcRLi-ZY_kG77scU-WIbouAoHLCk9CGugZqLmpcVwUSmE125sx0nm4UPl_sGXqqip3sJ5f2otyX74eCnbQiGLYwGJ1wkApqh6tSDVP-q0fD5xZ34VO3Ngyeo12yGRKuq44SB6eiXEi934/s1600/Screen+Shot+2019-10-11+at+12.07.22+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1034" data-original-width="1600" height="412" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcRLi-ZY_kG77scU-WIbouAoHLCk9CGugZqLmpcVwUSmE125sx0nm4UPl_sGXqqip3sJ5f2otyX74eCnbQiGLYwGJ1wkApqh6tSDVP-q0fD5xZ34VO3Ngyeo12yGRKuq44SB6eiXEi934/s640/Screen+Shot+2019-10-11+at+12.07.22+PM.png" width="640" /></a></div>
<br />
Podras ver que he movido el panel superior mas hacia abajo, y el panel inferior derecho lo he hecho mas pequeño.<br />
<br />
<br />
Esperando que sea de utilidad para mas de algo, nos vemos en el siguiente articulo. Saludos<br />
<br />
<br />Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-68522944358742222612018-08-20T13:05:00.002-06:002018-08-20T13:05:20.467-06:00Instalacion Central Telefonica AsteriskEstimados,<br />
<br />
En esta ocasión traigo un video donde se explica como realizar la compilación del código fuente del software <a href="https://www.asterisk.org/" target="_blank">Asterisk</a>, el cual permite tener una central telefónica trabajando.<br />
<br />
Asterisk trabaja como un conmutador IP el cual permite poder tener dispositivos conectados (ya sea teléfonos físicos o por software llamados softphones) a traves de diferentes tecnologías como son SIP, IAX, H323 entre otros.<br />
<br />
Aquí les comparto el video, espero les sea de utilidad. Saludos.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/JbEGU8eN6is/0.jpg" src="https://www.youtube.com/embed/JbEGU8eN6is?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-37529171958416375392018-03-29T00:44:00.000-07:002018-03-29T00:44:30.106-07:00Como replicar una base de MySQL en LinuxLectores, en esta ocasión les traigo otro "Como" para quienes administran bases de datos en el gestor MySQL (posiblemente aplique para MariaDB pero no he probado).<br />
<br />
<h3>
Introducción</h3>
<br />
La replicación es una técnica donde a una base de datos se le indica ser copiada uno o mas destinos. P<span class="" id="result_box" lang="es"><span class="hps">or lo</span> <span class="hps">que la fiabilidad</span>, <span class="hps">tolerancia a fallos</span> <span class="hps">o accesibilidad de</span> <span class="hps">la base de datos</span> <span class="hps">se puede mejorar.</span></span><br />
<br />
<span class="" id="result_box" lang="es"><span class="hps">Las replicaciones pueden darse:</span></span><br />
<br />
<ul>
<li><span class="" id="result_box" lang="es"><span class="hps">Basado en instantánea de la base (snapshot), donde la base de datos completa es copiada a otro equipo.</span></span></li>
<li><span class="" id="result_box" lang="es"><span class="hps">Basado en combinación o fusión, donde dos o mas bases se copian y se unen en una sola.</span></span></li>
<li><span class="" id="result_box" lang="es"><span class="hps">Basado en transacción, donde la actualización de los datos se aplican periódicamente entre un servicio maestro y uno esclavo.</span></span></li>
</ul>
<span class="" id="result_box" lang="es"><span class="hps"><br /></span></span>
<span class="" id="result_box" lang="es"><span class="hps">La replicación de MySQL es considerada como base transaccional. Para implementar la replicación en MySQL, el servicio maestro guarda un log de transacciones de todas las actualizaciones que ha realizado.</span></span><br />
<span class="" id="result_box" lang="es"><span class="hps"><br /></span></span>
<span class="" id="result_box" lang="es"><span class="hps">Los servicios esclavos, se conectan al maestro y leen el log y actualizan cada registro. </span></span><span class="" id="result_box" lang="es"><span class="hps">Además de mantener</span> <span class="hps">un log de transacciones</span>, el maestro <span class="hps">lleva a cabo diversas</span> <span class="hps">tareas de mantenimiento</span>, como la rotación <span class="hps">de registro</span> <span class="hps">y control de acceso.</span></span><br />
<br />
<span class="" id="result_box" lang="es"><span class="hps">Cuando se producen nuevas transacciones y el servicio maestro, actualiza el log, los servicios esclavos realizan las mismas transacciones en su copia del servicio maestro y actualizan su posición.</span></span><br />
<br />
<span class="" id="result_box" lang="es"><span class="hps"></span></span><span class="" id="result_box" lang="es"><span class="hps">Este</span> <span class="hps">proceso de replicación</span> <span class="hps">maestro</span>-esclavo <span class="hps">se realiza</span> <span class="hps">de forma asíncrona</span>, <span class="hps">lo que significa que</span> <span class="hps">el servicio maestro</span> <span class="hps">no tiene</span> <span class="hps">que esperar a que</span> <span class="hps">los esclavos</span> <span class="hps">se pongan al día.</span></span><br />
<br />
<span class="" id="result_box" lang="es"><span class="hps"><span class="" id="result_box" lang="es"><span class="hps">Si</span> <span class="hps">los esclavos</span> <span class="hps">no pueden</span> <span class="hps">conectar con el maestro</span> <span class="hps">por un período de</span> <span class="hps">tiempo, se</span> <span class="hps">descarga</span> <span class="hps">y ejecuta</span> <span class="hps">todas las transacciones</span> <span class="hps">pendientes</span> <span class="hps">cuando</span> <span class="hps">se restablezca</span> <span class="hps">la conectividad.</span></span></span></span><br />
<br />
<div id="gt-input-tool" style="display: inline-block;">
<div id="itamenu">
<span class="ita-kd-inputtools-div"></span></div>
</div>
<div class="g-unit" id="gt-src-c">
<div id="gt-src-p">
</div>
</div>
<span class="" id="result_box" lang="es"><span class="hps">La replicación</span> <span class="hps">de bases de datos</span> <span class="hps">permite tener</span> <span class="hps">una copia exacta de</span> <span class="hps">una base de datos</span> <span class="hps">en vivo de un</span> <span class="hps">servidor maestro</span> <span class="hps">en otro</span> <span class="hps">servidor remoto</span> <span class="hps atn">(</span>servidor esclavo) <span class="hps">sin</span> <span class="hps">tener que desconectar el</span> <span class="hps">servidor maestro</span><span class="">.</span></span><br />
<br />
<span class="" id="result_box" lang="es"><span class=""><span class="" id="result_box" lang="es"><span class="hps">En</span> <span class="hps">caso de que el</span> servicio<span class="hps"> principal</span> <span class="hps">este inactivo o</span> <span class="hps">tenga</span> <span class="hps">algún problema,</span> <span class="hps">se puede señalar</span> <span class="hps">temporalmente</span> <span class="hps">clientes</span> <span class="hps">de bases de datos</span> <span class="hps">o</span> <span class="hps">de resolución de DNS</span> <span class="hps">para</span> <span class="hps">la dirección IP del</span> <span class="hps">servicio esclavo</span>, logrando un failover tra<span class="hps">nsparente.</span> </span></span></span><br />
<br />
<span class="" id="result_box" lang="es"><span class=""><span class="" id="result_box" lang="es"><span class="hps">Se</span> <span class="hps">debe</span> <span class="hps">señalar</span> <span class="hps">que la replicación</span> <span class="hps">de MySQL no</span> <span class="hps">es una solución de</span> <span class="hps">copia de seguridad.</span> <span class="hps">Por ejemplo</span><span class="">, si un</span> <span class="hps">comando DELETE</span> <span class="hps">no deseado</span> <span class="hps">es ejecutado</span> <span class="hps">en el</span> <span class="hps">servicio maestro</span> <span class="hps">por accidente,</span> <span class="hps">la misma transacción</span> <span class="hps">se aplicara en </span><span class="hps">todos los</span> <span class="hps">servicios esclavos</span>.</span> </span></span><br />
<span class="" id="result_box" lang="es"><span class=""><br /></span></span>
<span class="" id="result_box" lang="es"><span class="">Se estará mostrando como realizar la replicaci</span></span><span class="" id="result_box" lang="es"><span class="">ón de MySQL en dos equipos Linux. Para este ejemplo se tomaran las direcciones IP 192.168.2.1 y 192.168.2.2 para servicio maestro y esclavo respectivamente.</span></span><br />
<span class="" id="result_box" lang="es"><span class=""><br /></span></span>
<br />
<h3>
<span class="" id="result_box" lang="es"><span class="">Configurando el servicio maestro</span></span></h3>
<span class="" id="result_box" lang="es"><span class=""><br /></span></span>
<span class="" id="result_box" lang="es"><span class="">Primero, acceder a la consola de MySQL y crear la base de datos <i>test_repl</i></span></span><br />
<span class="" id="result_box" lang="es"><span class="hps"><span class="" id="result_box" lang="es"></span></span></span><br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ mysql -u root -p
mysql> CREATE DATABASE test_repl;</span></span></pre>
<br />
<span class="" id="result_box" lang="es"><span class="hps"> Posterior crear una tabla dentro de la base de datos e insertar 3 registros de ejemplo:</span></span><br />
<span class="" id="result_box" lang="es"><span class="hps"><br /></span></span>
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">mysql> USE test_repl;
mysql> CREATE TABLE employee (
-> EmployeeID int,
-> LastName varchar(255),
-> FirstName varchar(255),
-> Address varchar(255),
-> City varchar(255));
mysql> INSERT INTO employee VALUES(1,"LastName1","FirstName1","Address1","City1"),
-> (2,"Lastname2","FirstName2","Address2","City2"),
-> (3,"LastName3","FirstName3","Address3","City4");</span></span></pre>
<br />
Posterior de salir de la consola de MySQL, editar el archivo <i>my.cnf</i> utilizando su editor favorito, el archivo puede encontrarse en <i>/etc</i> o en <i>/etc/mysql</i>.<br />
<br />
Agregar las siguientes lineas<br />
<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">[mysqld]
server-id=1
log-bin=master-bin.log
binlog-do-db=test_repl
innodb_flush_log_at_trx_commit=1
sync_binlog=1
</span></span></pre>
<br />
La opción <i>server-id</i> asigna un ID entero (en el rango de 1 a 2^32) al servidor master. Para temas de ejemplo, el ID 1 y 2 seran asignados para el servidor master y esclavo respectivamente.<br />
<br />
El servidor master debe tener activo en <i>logging</i> binario (con la opción <i>log-bin</i>) el cual activara la replicación. Asignar a la opción <i>binlog-do-db</i> el nombre de la base de datos que replicara al servidor esclavo.<br />
<br />
Las opciones <i>innodb_flush_log_at_trx_comming = 1</i> y <i>sync_binlog=1</i>deben estar activo para una mejor posibilidad de durabilidad y consistencia en la replicación.<br />
<br />
Posterior a guardar los cambios en el archivo <i>my.cnf</i>, reiniciar el servicio <i>mysqld</i>.<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"># systemctl restart mysqld
</span></span></pre>
o con el comando<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"># /etc/init.d/mysqld restart
</span></span></pre>
<br />
Posterior, entrar a la consola del servidor master para crear un nuevo usuario para el servidor esclavo. Asignar el permiso de replicación al usuario creado.<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">mysql> CREATE USER repl_user@192.168.2.2;
mysql> GRANT REPLICATION SLAVE ON *.* TO repl_user@192.168.2.2 IDENTIFY BY 'repl_user_password';
mysql> FLUSH PRIVILEGES;
</span></span></pre>
<br />
El usuario creado (en este ejemplo) es <i>repl_user</i> y la contraseña es <i>repl_user_password</i>. Confirmar que el servidor MySQL master no este asignado a la interfaz looback, es decir, que escuche peticiones solo en la dirección local del servidor, ya que el servidor esclavo necesita registrarse al servidor master vía su dirección IP.<br />
<br />
Finalmente, revisar en el servidor master su estado ejecutando el siguiente comando en la consola:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">mysql> SHOW MASTER STATUS;
</span></span></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXKXTaWMRFhwtSpGU30DZa6WYGCEhl5YZg8mC_AnHFU370IiO0rBkXPNRo-0wFrHSYiQ-RXd6f3epdyIHWf6FJuylFvQ__GrYfPGRy2_8AZN4tUU__95F8ln-DFohPfVeW0kjxxdDTCNc/s1600/18157192466_50c5829d77_b.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="164" data-original-width="642" height="161" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXKXTaWMRFhwtSpGU30DZa6WYGCEhl5YZg8mC_AnHFU370IiO0rBkXPNRo-0wFrHSYiQ-RXd6f3epdyIHWf6FJuylFvQ__GrYfPGRy2_8AZN4tUU__95F8ln-DFohPfVeW0kjxxdDTCNc/s640/18157192466_50c5829d77_b.jpg" width="640" /></a></div>
<br />
<br />
Nótese que la primera y la segunda columna será utilizada por el servidor esclavo para realizar la replicación.<br />
<br />
<h3>
Configurando el servicio esclavo</h3>
<br />
Ahora es el turno del servidor esclavo. Primero editar el archivo <i>my.cnf</i> con el editor favorito y agregar las siguientes lineas dejo de la sección <i>[mysqld]</i>.<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">server-id = 2
master-host = 192.168.2.1
master-connect-retry = 60
master-user = repl_user
master-password = repluser
master-info-file = mysql-master.info
relay-log-index = /var/lib/mysql/slave-relay-bin.index
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
relay-log = /var/lib/mysql/slave-relay-bin
log-error = /var/lib/mysql/mysql.err
log-bin = /var/lib/mysql/slave-bin
</span></span></pre>
<br />
Posterior, guardar los cambios y reiniciar el servicio.<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"># systemctl restart mysqld
</span></span></pre>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Entrar a la consola del servidor esclavo y ejecutar los siguientes comandos<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">mysql> CHANGE MASTER TO MASTER_HOST='192.168.2.1', MASTER_USER='repl_user',
-> MASTER_PASSWORD='repl_user_password', MASTER_LOG_FILE='master-bin.00002',
-> MASTER_LOG_POS=107;
mysql> SLAVE START;
mysql> SHOW SLAVE STATUS \G;</span></span></pre>
<br />
Con el comando anterior el servicio MySQL local se convierte en servidor esclavo para el servidor master en <i>192.168.2.1</i>. Entonces el servidor esclavo se conecta al servidor master con el usuario <i>repl_user</i> y monitorea el archivo log binario <i>master-bin.000002</i> para la replicación.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj977xB59UFeHDqfNi1TD_9H3XF6S62v133RHBIzckavWBxidtDxeHv6LTYbM4pWIHVeFQnEA5u8JvZ8vSUuv5oSQtJEzSwEyC9s2t_Sxm3yVSyNTwc8wVqWoaYWnutp58bfqFb4g4nObk/s1600/18183695235_4288e7842f_b.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="660" data-original-width="555" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj977xB59UFeHDqfNi1TD_9H3XF6S62v133RHBIzckavWBxidtDxeHv6LTYbM4pWIHVeFQnEA5u8JvZ8vSUuv5oSQtJEzSwEyC9s2t_Sxm3yVSyNTwc8wVqWoaYWnutp58bfqFb4g4nObk/s640/18183695235_4288e7842f_b.jpg" width="538" /></a></div>
<br />
La imagen anterior muestra el estado del servidor esclavo. Para confirmar que la replicación se ha realizado, revisar los 3 campos marcados de la salida del comando de estado.<br />
<br />
Primero, el dato <i>Master_Host</i> debe mostrar la dirección IP del servidor maestro. Segundo, el dato <i>Master_User</i> indica el usuario utilizado para la replicación. Y tercero el dato <i>Slave_IO_Running</i> debe mostrar el valor 'Yes'<br />
<br />
Cuando el servidor esclavo comienza a trabajar, este leerá automáticamente el log de la base de datos del servidor maestro y creara las mismas tablas y entradas en caso que no se encuentren el servido esclavo.<br />
<br />
Con lo anterior quedaría configurada la replicación entre ambos servidores. Esperando que sea de utilidad a mas de alguno.<br />
<br />
Saludos y nos leemos en una próxima entrada.<br />
<br />Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-12319425376110820682017-10-18T18:14:00.000-06:002017-10-18T18:14:04.979-06:00Como recuperar RPMDB en RedHat/CentOS/FedoraLinuxeros, aquí con un post express.<br />
<br />
Hoy me toco que al intentar actualizar un servidor que administro, me apareció un error de RPM, por lo que al investigar encontré como recuperar la base de rpm.<br />
<br />
La siguiente información la encontré en el siguiente <a href="https://opensourceeducation.net/recover-rpmdb-rhel-centos-fedora" target="_blank">enlace</a> en ingles<br />
<br />
El error que me apareció es el siguiente:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoQ6YFvlak0JMWi0I4q4Z16v1q2H36fmKdnfcUUwYaAOGMf-hN9OXS7E_VVs2Ju1EOPzj_TdII9kDUseNXp7q5hnySrcYfEEIr40Elc8KcYHqUagOanZ2p1OUA3hUAkHoadKwe_jGFApQ/s1600/rpmdb-error.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="253" data-original-width="981" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoQ6YFvlak0JMWi0I4q4Z16v1q2H36fmKdnfcUUwYaAOGMf-hN9OXS7E_VVs2Ju1EOPzj_TdII9kDUseNXp7q5hnySrcYfEEIr40Elc8KcYHqUagOanZ2p1OUA3hUAkHoadKwe_jGFApQ/s640/rpmdb-error.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
Para poder solucionar lo anterior, es necesario ir al directorio <i>/var/lib/rpm</i>, ahí se mostraran los siguientes archivos:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxYvPxtVSN-s51FQWQvOxzLxq8QatTnh6H_crn0ENvgqVM7dqBN6wPJAAT96-k76LFYB_v1mkHLzYZ7NzNWB0JccVEMRcie1Hf5yEt-RgpLeLGKWVtNL1wpVYZxlUs-WcGbld2LeiDWCk/s1600/rpm-ls.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="503" data-original-width="651" height="307" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxYvPxtVSN-s51FQWQvOxzLxq8QatTnh6H_crn0ENvgqVM7dqBN6wPJAAT96-k76LFYB_v1mkHLzYZ7NzNWB0JccVEMRcie1Hf5yEt-RgpLeLGKWVtNL1wpVYZxlUs-WcGbld2LeiDWCk/s400/rpm-ls.png" width="400" /></a></div>
<br />
<br />
Para solucionar, lo que debe hacer es eliminar los archivos llamados <i>__db.00*</i> ejecutando el comando: <i>rm -rf /var/lib/rpm/__db.00*</i> y posterior ejecutar de nuevo <i>yum update</i>.<br />
<br />
Y listo, con lo anterior se debería de resolver el problema.<br />
<br />
Esperando que ha mas de alguno les sea de utilidad. Hasta la próxima.<br />
Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-87277285835658716672017-06-29T11:25:00.003-06:002017-06-29T11:27:48.281-06:00Obtener el Valor Autoincrementado en MySQL/MariaDB<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_leuzBjV4J8ukEdzBVIoucJD4CciDQfHQpbPYuEj6vItcStwbwBAM0ekHUR31eRgv8p9nx90MmeQkJ4Mq6baFlBeSBxAsVNRnETxwnMVE183cM8OQgvdBaln4IZndcf4Cx1QjnH6y5FM/s1600/screenshot1-740-299-slideshow-resize.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="299" data-original-width="740" height="129" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_leuzBjV4J8ukEdzBVIoucJD4CciDQfHQpbPYuEj6vItcStwbwBAM0ekHUR31eRgv8p9nx90MmeQkJ4Mq6baFlBeSBxAsVNRnETxwnMVE183cM8OQgvdBaln4IZndcf4Cx1QjnH6y5FM/s320/screenshot1-740-299-slideshow-resize.png" width="320" /></a></div>
<br />
Que tal, este es mi primer post sobre tema de programacion, al menos en el area de base de datos.<br />
<br />
La intension es tener una anotacion mas que un post tutorial, pero espero que a alguien le sirva como referencia.<br />
<br />
Bien, basicamente es una traduccion de una de las paginas de desarrollo de MySQL, la cual pueden encontrar en <a href="https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-usagenotes-functionality-last-insert-id.html" target="_blank">MySQL Connector /ODBC Developer Guide :: Obtaining Auto-Increment Values</a><br />
<br />
<h3>
Obtener el valor autoincrementado</h3>
<br />
Obtener el valor de una columna que utiliza AUTO_INCREMENT posterior a una sentencia <a href="https://dev.mysql.com/doc/refman/5.7/en/insert.html" target="_blank">INSERT</a> se puede lograr en diferentes formas. Para obtener el valor inmediatamente posterior al INSERT, se puede usar una sentencia <a href="https://dev.mysql.com/doc/refman/5.7/en/select.html" target="_blank">SELECT</a> con la funcion <a href="https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id" target="_blank">LAST_INSERT_ID</a><br />
<br />
Por ejemplo, usando Connector/ODBC, puedes ejecutar dos sentencias por separado, la sentencia INSERT y SELECT para obtener el valor de incremento, es decir:<br />
<br />
<div style="background-color: #fafafa; border-radius: 2px; border: 1px solid #757575; font-size: 12px; padding: 10px;">
<code>
INSERT INTO tbl (auto, text) VALUES(NULL, 'Este es un texto');<br />
SELECT LAST_INSERT_ID();<br />
</code>
</div>
<br />
<br />
Si no se requiere el valor en tu aplicacion al realizar el INSERT, pero si lo requieres para como parte de otro INSERT (por ejemplo una tabla de detalles), el proceso completo seria:<br />
<br />
<br />
<div style="background-color: #fafafa; border-radius: 2px; border: 1px solid #757575; font-size: 12px; padding: 10px;">
<code>
INSERT INTO tbl (auto, text) VALUES (NULL, 'Este es un texto');<br />
INSERT INTO tbl2(di, text) VALUES(LAST_INSERT_ID(), 'Detalle del texto');<br />
</code>
</div>
<br />
<br />
La funcion puede ser utilizada tanto en procedimientos almacenados (STORE PROCEDURES), funciones de usuarios y triggers.<br />
<br />
Esperando que sea de ayuda a mas de uno, nos leemos en el proximo post.<br />
<br />
Saludos<br />
<br />Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-47407984935276629672017-04-12T10:23:00.001-06:002017-04-12T10:23:09.088-06:00Directorios publicados por servicios NFSEstimados, en esta ocasión les traigo un tip "rápido" sobre el servicio NFS.<br />
<br />
Me ha tocado instalar algunos servidores GNU/Linux para compartir archivos y la forma mas rápida (y mejor en mi punto de vista) instalamos el servicio NFS, el cual lo trabaja muy bien.<br />
<br />
Un chico de sistemas en uno de los negocios donde instalamos ese servicio me pregunto cual seria "los pasos para validar los directorios compartidos" en el servidor de NFS.<br />
<br />
Pues bueno, para poder tener una visión de que directorios comparte el servicio hay que confirmar que se tenga instalado el comando "<i><b>showmount</b></i>".<br />
<br />
En caso de no tenerlo, puedes instalarlo desde tu repositorio, aquí los posibles comandos:<br />
<br />
<b>Para Debian/Ubuntu</b><br />
<br />
<pre style="background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #333333; font-size: 14.85px; margin-bottom: 15px; margin-top: 5px; padding: 10px 15px;"><span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"># sudo apt-get install nfs-common</span></span></pre>
<div>
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"><br /></span></span></div>
El paquete nfs-common es el que contiene el comando "<i>showmount</i>".<br />
<div>
<br /></div>
<div>
<b>Para RedHat/CentOS/Fedora</b></div>
<div>
<br /></div>
<div>
<pre style="background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #333333; font-size: 14.85px; margin-bottom: 15px; margin-top: 5px; padding: 10px 15px;"><span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"># sudo yum install nfs-utils</span></span></pre>
</div>
<div>
<br /></div>
<div>
<b>Como usarlo</b></div>
<div>
<br /></div>
Una vez instalado el paquete, podemos ejecutar el comando:<div>
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"><br /></span></span></div>
<div>
<pre style="background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #333333; font-size: 14.85px; margin-bottom: 15px; margin-top: 5px; padding: 10px 15px;"><span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"># showmount -e 192.168.1.182</span></span></pre>
</div>
<div>
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"><br /></span></span></div>
Esto lo que hará es hacer una petición del servidor que esta en la dirección que has puesto y te dará una lista de los directorios que esta publicando y las redes que tienen el permiso para los directorios.<br /><br /><b>Ejemplo</b><span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px;"><br /></span></span>
<br />
<div>
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px;"><br /></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOYSlanHtk7gzcfI5SatY8kfY3pbKY1yyJuNtvC4gPD5B6-EPJyNUWRYb3-PZCwCKEqBYRwV4C0D1s_e4Wze6d6bmt18sNnsZ8JY9YjMB7UcUg6Ll6ElGUYaHBfbvVpx_TS6C-m5vOSqc/s1600/showmount.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="123" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOYSlanHtk7gzcfI5SatY8kfY3pbKY1yyJuNtvC4gPD5B6-EPJyNUWRYb3-PZCwCKEqBYRwV4C0D1s_e4Wze6d6bmt18sNnsZ8JY9YjMB7UcUg6Ll6ElGUYaHBfbvVpx_TS6C-m5vOSqc/s640/showmount.png" width="640" /></a></div>
<div>
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px;"><br /></span></span></div>
<div>
Para ver mas parámetros que soporta el comando puedes ver el manual del mismo, o buscar en Internet.</div>
<div>
<br /></div>
Espero esto le sirva a mas de alguno. Saludos<div>
<br /></div>
Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-84610923937793174352017-04-08T14:39:00.000-06:002017-04-08T14:39:03.147-06:00Continuar descarga con wget en Linux<br />
Que tal estimados, de nuevo con una nueva entrada. En esta ocasión hablaremos de un comando muy usado en Linux, el cual te permite descargar archivos desde la web usando la consola.<br />
<br />
La razón de la publicación es debido a que me tope que con una situación. Me encontraba descargando una ISO de <a href="http://www.issabel.org/" target="_blank">Issabel</a>, el cual es fork del proyecto <a href="https://www.elastix.org/" target="_blank">Elastix</a>, el cual paso a ser de la empresa 3CX, y al tener el 83% descargado se perdió la señal de Wifi.<br />
<br />
Por lo que me di a la tarea de investigar si existía un medio de continuar con la descarga a partir desde lo ya descargado, por lo que le pregunte a Google y me envió a un <a href="https://www.cyberciti.biz/tips/wget-resume-broken-download.html" target="_blank">web</a> (que por cierto consulto bastante) donde indicaban como era el procedimiento.<br />
<br />
La forma de hacerlo con el comando <b><i>wget</i></b>, es muy sencilla, en realidad solo se agrega un parámetro al mismo y listo, muchos dirán "eso ya lo sabia", bueno este amateur no, por eso procedí a preguntar.<br />
<br />
El comando original que ejecute fue:<br />
<br />
<br />
<pre style="background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #333333; font-size: 14.85px; margin-bottom: 15px; margin-top: 5px; padding: 10px 15px;"><span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"># wget http://repo.issabel.org/iso/issabel-2.5-x86_64-2017-01-06.iso</span></span></pre>
<br />
Cuando la red se fue en mi equipo, lo que tuve que hacer fue agregar el parámetro "<b><i>--continue</i></b>" (también puede ser de la forma corta "<b><i>-C</i></b>")<br />
<br />
Por lo que solo tuve que ejecutar nuevamente el comando con el parámetro mencionado, es decir:<br />
<br />
<pre style="background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #333333; font-size: 14.85px; margin-bottom: 15px; margin-top: 5px; padding: 10px 15px;"><span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;">wget --continue http://repo.issabel.org/iso/issabel-2.5-x86_64-2017-01-06.iso</span></span></pre>
<br />
Lo que hace es hacer pequeño resumen de lo descargado y comenzar a descargar el resto.<br />
<br />
Adjunto una imagen donde se ve el procedimiento de como fue mi historia.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinAoNvXZtyJPVpWnK-qDhkqCinf5M0QzWPC22ARXUJATUDryR8Goay1RI6ma7Frl-vQAM9XtcM6IXbimB5wbzwmJPftbrV2MFUWkVswOshvDakXeJJ_pX364Fjic7AILN4pv6iYif2Cvg/s1600/wget-resume-files.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinAoNvXZtyJPVpWnK-qDhkqCinf5M0QzWPC22ARXUJATUDryR8Goay1RI6ma7Frl-vQAM9XtcM6IXbimB5wbzwmJPftbrV2MFUWkVswOshvDakXeJJ_pX364Fjic7AILN4pv6iYif2Cvg/s640/wget-resume-files.png" width="640" /></a></div>
<br />
<br />
<br />
Bueno, espero le sirva a alguien ahí fuera. Un saludo.<br />
<br />Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-57871491055824062762017-03-01T17:02:00.000-07:002017-03-02T16:17:36.229-07:00Encontrar procesos con mayor consumo en LinuxLo se, mucho tiempo ha pasado, pero muchas cosas me han pasado, pero quiero no quiero aburrir con eso.<br />
<br />
Hoy les traigo una traducción de un post que se me hizo muy bueno y practico a la vez. El original en ingles lo pueden encontrar en esta liga <a href="http://www.tecmint.com/find-linux-processes-memory-ram-cpu-usage/?utm_content=bufferbfa31&utm_medium=social&utm_source=plus.google.com&utm_campaign=buffer#" target="_blank">Find Top Running Process By Highest Memory and CPU Usage in Linux</a><br />
<br />
Comencemos entonces.<br />
<br />
<h2>
Encontrar procesos con mayor consumo en Linux</h2>
<h3>
Introducción</h3>
<br />
Los administradores mas eficientes, normalmente son personas flojas. La razón no es porque no hacen nada o pierden su tiempo en su trabajo. En muchos casos es porque automatizan sus tareas diarias. Por eso, no necesitan estar pegados al servidor y usan su tiempo para aprender nuevas tecnologías y estar al día en su área.<br />
<br />
Parte de automatizar tareas, es aprender como los scripts hagan lo que debes hacer por ti mismo. Continuamente agregar nuevos comandos a tu base de conocimiento es importante. Por esa razón, en este articulo se compartirá un truco para conocer, cuales procesos están consumiendo mucha memoria y procesador en un equipo Linux.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP_hMewqSKm5tXr9X-_9ixMwRlb-uQO5qldGE69ajTbRpDTWHg00KynOHXa0SgCkmhGsm1A3N4TN6drPjVIdkbB5pnisexoc5HMnI1jbuH5gHw9_zGPzo1P5xUZFTVfEaOUFa2qfHECew/s1600/ps-sort-cpu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="152" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP_hMewqSKm5tXr9X-_9ixMwRlb-uQO5qldGE69ajTbRpDTWHg00KynOHXa0SgCkmhGsm1A3N4TN6drPjVIdkbB5pnisexoc5HMnI1jbuH5gHw9_zGPzo1P5xUZFTVfEaOUFa2qfHECew/s640/ps-sort-cpu.png" width="640" /></a></div>
<br />
Eso es, ahora veamos el detalle.<br />
<br />
<h3>
Comando</h3>
<br />
El siguiente comando mostrará la lista de procesos con mayor consumo de memoria RAM y CPU en forma descendente.<br />
<br />
<pre style="background-color: #efefef; border-left: 5px solid black; box-shadow: rgb(204, 204, 204) 5px 5px 5px; color: #333333; font-size: 14.85px; margin-bottom: 15px; margin-top: 5px; padding: 10px 15px;"><span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><span style="font-size: 12px; line-height: 17px;"># ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head</span></span></pre>
<br />
Si se desea ver la lista completa, quitar el comando '<i><b>head</b></i>' y el pipe.<br />
<br />
<h3>
Pequeña explicación</h3>
<br />
El parámetro <i><b>-o</b></i> (o <b><i>-format</i></b>) del comando ps, te permite especificar el formato de salida, es decir, el orden de los valor a mostrar por columnas. Del comando anterior seria PID's (<b>pid</b> del proceso), PPID's (<b>pid</b> del proceso padre), nombre del comando o proceso (<b>cmd</b>) y el uso, en porcentaje, de la memoria RAM y CPU (<b>%mem</b>, <b>%cpu</b>). El parámetro <b><i>-e</i></b> devuelve todos los procesos.<br />
<br />
Ademas, se utiliza el parámetro <i><b>--sort</b></i> para ordenar la salida, en este caso por CPU. Por defecto, ordena de forma ascendente, pero si desean el orden descendente solo se agrega el símbolo menos al inicio.<br />
<br />
Si se desea agregar otros campos en la salida, o cambiar el orden por otro campo, pueden revisar el manual del comando <b><i>ps</i></b> (<b><i>man ps</i></b>).<br />
<br />
<h3>
En resumen</h3>
<br />
El monitoreo de procesos es una de las numerosas tareas que un administrador de sistemas Linux hace. En este articulo observamos listar los procesos y ordenarlos acorde a la memoria RAM y CPU usado, utilizando el comando <i><b>ps</b></i>.<br />
<br />
Esperando les sea de utilidad, nos vemos en la próxima publicación. Saludo<br />
<br />Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-47901028397594546812015-05-31T13:45:00.001-06:002015-05-31T13:45:40.683-06:00Como leer/visualizar archivos utmp, wtmp y btmp en LinuxLectores, les paso este "Como" de linux, algo que debe ser usado por cualquier sysadmin de Linux. Esperando aportar conocimiento, aqui les dejo.<br />
<br />
<h3>
Introducción.</h3>
<br />
En sistemas operativos Linux/Unix todo es registrado en algun lado (los conocidos logs). La mayoria de registros del sistema se almacenan en el directorio <i>/var/log</i>. El directorio contiene registros relacionados a distintos servicios y/o aplicaciones.<br />
<br />
En este directorio tenemos algunos archivos como <i>utmp</i>, <i>wtmp</i> y <i>btmp</i>. Estos archivos contienen todo el detalle de registro de inicio (login) y termino (logout) de sesiones de usuarios ya sea local, sistemas remoto, como estado en el sistema, tiempo en linea, etc.<br />
<br />
<h3>
Informacion sobre los archivos</h3>
<br />
<ul>
<li><b>utmp</b>: te mostrara informacion completa del acceso de usuarios, la terminal que usa, termino de sesion, eventos del sistema y el estado actual del mismo, etc.</li>
<li><b>wtmp</b>: contiene el historio del archivo utmp</li>
<li><b>btmp</b>: registros solo intentos fallidos de sesion.</li>
</ul>
<br />
<br />
<h4>
Como no revisar</h4>
Normalmente, cuando intentamos visualizar el contenido de estos archivos con el comando <i>cat</i> o el editor <i>vi(m)</i>, estos muestran datos ilegibles, valores "basura", formato hexadecimal o encriptado. Esto se puede ver al intentar visualizar:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding: 10px 15px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">uribes@localhost:~$ cat /var/log/wtmp
&
pts/1/1uribes:0.0 AkU��
pts/2/2root:0.0�Akpts/1/1uribes�AkUpts/2/2root BkU�8&
pts/1/1uribes:0.0�BkU�&
pts/3/3uribes:0.07JkU�pts/3/3uribesSJkU�m
pts/1/1uribesWJkU�7 &
pts/1/1uribes:0.0�NkUIpts/1/1uribes;RkU�=�xpts/1/1uribes:0.0>RkU�
&ts/1/1uribesGRkU </span></span><span style="color: #333333; font-size: 15px; line-height: 20.7900009155273px;">
</span></pre>
<div>
<br /></div>
<h4>
Como revisar</h4>
Para leer estos archivos es necesario utilizar el comando <i>last</i>. El comando <i>last</i> es uno de los comandos importantes que te indicara los registros de sesion, cuando se registraron y finalizaron, la terminal, etc. Esto sale en mi equipo:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding: 10px 15px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">uribes@localhost:~$ last
uribes pts/1 :0.0 Sun May 31 12:52 still logged in
uribes pts/1 :0.0 Sun May 31 12:26 - 12:26 (00:00)
uribes pts/1 :0.0 Sun May 31 12:10 - 12:26 (00:15)
uribes pts/3 :0.0 Sun May 31 11:51 - 11:52 (00:00)
uribes pts/1 :0.0 Sun May 31 11:20 - 11:52 (00:32)
root pts/2 :0.0 Sun May 31 11:16 - 11:16 (00:00)
uribes pts/1 :0.0 Sun May 31 11:12 - 11:16 (00:03)
wtmp begins Sun May 31 11:12:59 2015</span></span><span style="color: #333333; font-size: 15px; line-height: 20.7900009155273px;">
</span></pre>
<div>
<br /></div>
Como ven, muestra el detalle de actividad de registro/termino. Este mismo comando puede ser utilizado para leer los archivos utmp, wtmp y btmp. Para esto podemos ejecutar de la siguiente forma:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding: 10px 15px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">uribes@localhost:~$ last -f /var/log/wtmp
uribes pts/1 :0.0 Sun May 31 12:52 still logged in
uribes pts/1 :0.0 Sun May 31 12:26 - 12:26 (00:00)
uribes pts/1 :0.0 Sun May 31 12:10 - 12:26 (00:15)
uribes pts/3 :0.0 Sun May 31 11:51 - 11:52 (00:00)
uribes pts/1 :0.0 Sun May 31 11:20 - 11:52 (00:32)
root pts/2 :0.0 Sun May 31 11:16 - 11:16 (00:00)
uribes pts/1 :0.0 Sun May 31 11:12 - 11:16 (00:03)
wtmp begins Sun May 31 11:12:59 2015</span></span><span style="color: #333333; font-size: 15px; line-height: 20.7900009155273px;">
</span></pre>
<div>
<br /></div>
El parametro de <i>-f</i> de <i>last</i> es para indicarle el archivo que deseamos leer. Existen otros parametros utiles para la visualizacion. Te recomiendo revisar el manual del comando <i>last(1)</i>.<br />
<br />
Es asi como podemos visualizar el contenido y poder ver quiene esta, cuanto tiempo, que terminal, etc. Si bien es posible ejecutar el comando <i>w</i>, que tambien muestra informacion de quien esta en linea y desde que terminal/ip, no esta de mas revisar otros registros.<br />
<br />
Esto seria todo, se vale comentar. Saludos.<br />
<br />
<br />Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com2tag:blogger.com,1999:blog-2273364429801105088.post-80125334100726082412015-05-22T15:27:00.002-06:002015-05-22T15:29:27.938-06:00Como montar particiones LVM en LinuxComo están lectores, reportandome después de varios meses fuera.<br />
Hace un par de días vi un howto que me gusto y quiero compartir.<br />
<br />
Nota: lo siguiente es una traducción, el original lo pueden ver el siguiente link: <a href="http://ask.xmodulo.com/mount-lvm-partition-linux.html" target="_blank">How to mount an LVM partition on Linux</a><br />
<h4>
</h4>
<h3>
Introducción </h3>
<br />
LVM es una herramienta de administración de volúmenes lógicos (particiones) la cual te permite administrar el espacio de disco usando la connotación de volúmenes lógicos y grupo de volúmenes.<br />
<br />
El mayor beneficio de usar LVM sobre las particiones clásicas es la flexibilidad en la asignación de almacenamiento para usuarios y aplicaciones sin verse limitado por el tamaño de los discos individuales.<br />
<br />
En LVM, el almacenamiento físico, en el cual se crean los volúmenes lógicos, son particiones tradicionales (/dev/sda1, /dev/sda2). Estas particiones deben ser marcadas como "volúmenes físicos" y etiquetadas como "Linux LVM", esto para ser usadas en LVM.<br />
<br />
<h3>
Como no montar</h3>
<br />
Unas vez que las particiones han sido etiquetadas como volúmenes LVM, no las puedes montar directamente con el comando <i>mount</i>.<br />
<br />
Si intentas montar una partición LVM con <i>mount</i> (ej. /dev/sda2), obtendrás el siguiente error:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">mount: unknown filesystem type 'LVM2_member'</span></span></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://farm8.staticflickr.com/7696/17749902190_0a6d36821f_b.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="177" src="https://farm8.staticflickr.com/7696/17749902190_0a6d36821f_b.jpg" width="400" /></a></div>
<br />
<br />
<h3>
Como si montar</h3>
<br />
<h4>
Revisando particiones</h4>
<br />
Si quieres montar una partición LVM de manera apropiada, en su lugar debes montar las particiones lógicas que se encuentran dentro de la LVM. Esta seria la forma como se debe:<br />
<br />
Buscar la lista de grupo volúmenes disponibles ejecutando:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb2 vg_ezsetupsystem40a8f02fadd0 lvm2 a-- 237.60g 0
</span></span></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://farm8.staticflickr.com/7657/17938136831_d9320b7bfc_b.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="76" src="https://farm8.staticflickr.com/7657/17938136831_d9320b7bfc_b.jpg" width="400" /></a></div>
<br />
El nombre de los volúmenes físicos disponibles y de los grupos de volúmenes esta listados bajo las columnas PV y VG respectivamente. En este ejemplo hay un solo grupo de volumen llamado <i>vg_ezsetupsystem40a8f02fadd0</i> creado en /dev/sdb2.<br />
<br />
Bien, revisemos que volúmenes lógicos que existen dentro de el grupo de volumen. Para esto usamos el comando <i>lvdisplay</i>.<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;"> $ sudo lvdisplay <volume-group-name></span></span></pre>
<br />
<h4>
Volúmenes Lógicos </h4>
<br />
Ejecutando <i>lvdisplay</i> nos mostrara informacion sobre el/los volumen(es) lógico(s), como se muestra a continuación.<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ sudo lvdisplay /dev/vg_ezsetupsystem40a8f02fadd0
--- Logical volume ---
LV Path /dev/vg_ezsetupsystem40a8f02fadd0/lv_root
LV Name lv_root
VG Name vg_ezsetupsystem40a8f02fadd0
LV UUID imygta-P2rv-2SMU-5ugQ-g99D-A0Cb-m31eet
LV Write Access read/write
LV Creation host, time livecd.centos, 2015-03-16 18:38:18 -0400
LV Status available
# open 0
LV Size 50.00 GiB
Current LE 12800
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0</span></span></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://farm8.staticflickr.com/7707/17938137591_cdb4cbfb43_b.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="281" src="https://farm8.staticflickr.com/7707/17938137591_cdb4cbfb43_b.jpg" width="400" /></a></div>
<br />
<h4>
Montando Volúmenes Lógicos </h4>
<br />
Si quieres montar un volumen lógico en particular, utiliza su nombre de dispositivo mostrado en "<i>LV Name</i>" (ej. /dev/vg_ezsetupsystem40a8f02fadd0/lv_home) como sigue:<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ sudo mount /dev/vg_ezsetupsystem40a8f02fadd0/lv_home /mnt </span></span></pre>
<br />
Puedes revisar el estado del montaje ejecutando el comando <i>mount</i> sin argumentos, el cual mostrara una lista de los sistemas de archivos montados.<br />
<br />
<h4>
Validando</h4>
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ mount </span></span></pre>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://farm6.staticflickr.com/5449/17749903670_2ee617445d_c.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://farm6.staticflickr.com/5449/17749903670_2ee617445d_c.jpg" width="400" /></a></div>
<br />
<h4>
Ahorrando tiempo</h4>
<br />
Si deseas montar los volúmenes lógicos de manera automática al arrancar linux, agrega las siguientes lineas en el archivo <i>/etc/fstab</i>. Necesitaras especificar el tipo de sistema de archivos (ej EXT4) del volumen, del cual puedes ver en la salida del comando anterior<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">/dev/vg_ezsetupsystem40a8f02fadd0/lv_home /mnt ext4 defaults 0 0</span></span></pre>
Ahora el volumen lógica se montara automático en <i>/mnt</i> al arrancar linux.<br />
<br />
<br />
Esperando les sirva como a mi. Nos leemos en el próximo post.<br />
Saludos<br />
<br />
<br />Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com5tag:blogger.com,1999:blog-2273364429801105088.post-63866210583491574112015-03-11T21:23:00.001-07:002015-03-11T21:23:36.331-07:00Linux LiberationQuiero contribuir con mi grano de arena<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://ytimg.googleusercontent.com/vi/VDEdKUu-gTI/0.jpg" frameborder="0" height="266" src="http://www.youtube.com/embed/VDEdKUu-gTI?feature=player_embedded" width="320"></iframe></div>
<br />
Aun falta mucho por hacer, pero se ha recorrido mucho.Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0tag:blogger.com,1999:blog-2273364429801105088.post-79527507936032460992014-06-08T13:42:00.001-06:002014-06-08T13:47:31.621-06:00Validando ancho de banda desde consolaEstimados, vuelvo con un post mas, ya que hacia algo de tiempo que no escribía.<br />
<br />
Como mi trabajo es mucho de servidores, normalmente no instalamos la parte gráfica de la misma, en varias ocasiones necesitamos saber cual es el ancho de banda con el que cuenta el servidor. Esto ya que mi trabajo mayormente es con telefonía IP.<br />
<br />
Bien, por algún tiempo me había preguntando si existía alguna herramienta, aplicación o lo que fuera para hacer un test de velocidad del ancho de banda que usan los servidores. Pues bien, encontré un script que me gustaría compartir.<br />
<br />
Nota: lo siguiente es una traducción de la pagina original, así que si les gusta la lengua anglosajona, les paso el link: <a href="http://xmodulo.com/2014/01/check-internet-speed-command-line-linux.html" target="_blank">How to check Internet speed from the command line on Linux</a><br />
<br />
<h3>
Introducción</h3>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjswFZES5EjxYL9z-lszJDK6_HRp_jnxSViihMMfLPhK7urs6Olmhn8RmMEcniokiKq4VrX_tZrx25MqGFlVfnC9EXvMQ0CC5r-0Q0CuUa5LeKkIZ3N25gc7a9ONniQdBkr5l35SlNpwTE/s1600/SpeedTest_preview.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjswFZES5EjxYL9z-lszJDK6_HRp_jnxSViihMMfLPhK7urs6Olmhn8RmMEcniokiKq4VrX_tZrx25MqGFlVfnC9EXvMQ0CC5r-0Q0CuUa5LeKkIZ3N25gc7a9ONniQdBkr5l35SlNpwTE/s1600/SpeedTest_preview.gif" height="205" width="320" /></a></div>
<br />
Cuando experimentas el acceso a Internet lento, normalmente haces un test de velocidad sobre tu ISP. Para eso, <a href="http://www.speedtest.net/">speedtest.net</a> es la web de prueba de mayor uso en Internet.<br />
<br />
Internamente, speedtest carga código javascript en tu navegador, con el cual automáticamente detecta el host mas cercano a tu conexion, y mide la velocidad de descarga/subida enviando solicitudes HTTP POST y/o GET hacia el servidor.<br />
<br />
Sin embargo, si tratas de revisar la velocidad de Internet en un servidor, VPS u otro equipo sin escritorio (KDE, Gnome, Windows, etc), la plataforma Flash de Speedtest no funcionaria. Para ello existe un interfaz de linea de comando (CLI) de Speedtest, conocida como <i>speedtest-cli</i>. Vamos a demostrar como usar <i>speedtest-cli</i> para revisar la velocidad de Internet desde la linea de comando.<br />
<br />
<h3>
Instalando <i>speedtest-cli</i> en Linux</h3>
<br />
<i>speedtest-cli</i> es un cliente escritor en Python para la medición bidireccional de ancho de banda utilizando la infraestructura de Speedtest.com. Este trabaja con python 2.4-3.4. Para instalar solo basta con descargar el script.<br />
<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ wget https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
$ chmod u+x speedtest_cli.py
$ sudo mv speedtest_cli.py /usr/local/bin/speedtest-cli
$ sudo chown root:root /usr/local/bin/speedtest-cli</span></span></pre>
<br />
<br />
<h3>
Probando la conexión</h3>
<br />
Es muy sencillo realizar la medición de velocidad de Internet <i>speedtest-cli</i>, solo hay que ejecutarlo sin parámetros<br />
<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ speedtest-cli</span></span></pre>
<br />
<br />
En automático, buscara el servidor mas optimo (en términos de distancia geografía) para hacer la medición y posterior reportara el resultado<br />
<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="color: #333333;"><span style="font-size: 12px; line-height: 17px;">Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Uninet S.A. de C.V. (189.186.37.251)...
Selecting best server based on ping...
Hosted by Triara (Los Mochis) [195.81 km]: 15.02 ms
Testing download speed........................................
Download: 3.02 Mbits/s
Testing upload speed..................................................
Upload: 0.31 Mbits/s</span></span><span style="color: #333333; font-size: 12px; line-height: 17px;">
</span></span></pre>
<div>
<span style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px;"><br /></span></span></div>
<br />
Si deseas conocer los servidores que tiene Speedtest, puedes ejecutar el script con el parametro "<i>--list</i>", el cual mostrara la lista justo a un numero asociado, para posteriormente ejecutar el script con el parametro "--server" y el numero del servidor<br />
<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ ./speedtest_cli.py --list
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
3371) Triara (Culiacan, Mexico) [0.65 km]
3372) Triara (Los Mochis, Mexico) [195.81 km]
3817) Click Intelvid (Los Mochis, Mexico) [195.81 km]
3354) Triara (Mazatlan, Mexico) [201.84 km]
3407) Triara (Durango, Mexico) [300.73 km]
3349) Triara (Obregon, Mexico) [393.05 km]
3361) Triara (Torreon, Mexico) [403.49 km]
3547) Megacable (Torreon, Mexico) [403.49 km]
1981) Cablemas (Delicias, Mexico) [422.91 km]
3341) Triara (Chihuahua, Mexico) [445.85 km]
1955) Cablemas (Chihuahua, Mexico) [445.85 km]
3348) Triara (Tepic, Mexico) [447.51 km]
3370) Triara (Zacatecas, Mexico) [504.72 km]
2858) Telecable (Puerto Vallarta, Mexico) [516.34 km]
3335) Triara (Puerto Vallarta, Mexico) [516.34 km]
...</span></span></pre>
<br />
<br />
Por ejemplo, para probar uno de Chihuahua de Cablemas (1955) seria:<br />
<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ ./speedtest_cli.py --server 1955
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Uninet S.A. de C.V. (189.186.37.251)...
Hosted by Cablemas (Chihuahua) [445.85 km]: 20.027 ms
Testing download speed........................................
Download: 3.00 Mbits/s
Testing upload speed..................................................
Upload: 0.27 Mbits/s
</span></span></pre>
<div>
<span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;"><br /></span></span></div>
<br />
Y si deseas compartir tu resultado puedes ejecutar el script con el parametro "--share"<br />
<br />
<br />
<pre style="-webkit-box-shadow: rgb(204, 204, 204) 5px 5px 5px; background-color: #efefef; border-left-color: black; border-left-style: solid; border-left-width: 5px; box-shadow: rgb(204, 204, 204) 5px 5px 5px; margin-bottom: 15px; margin-top: 5px; padding-bottom: 10px; padding-left: 15px; padding-right: 15px; padding-top: 10px;"><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;">$ ./speedtest_cli.py --share
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Uninet S.A. de C.V. (189.186.37.251)...
Selecting best server based on ping...
Hosted by Triara (Durango) [300.73 km]: 15.338 ms
Testing download speed........................................
Download: 2.94 Mbits/s
Testing upload speed..................................................
Upload: 0.31 Mbits/s
Share results: http://www.speedtest.net/result/3551179518.png
</span></span></pre>
<div>
<span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;"><br /></span></span></div>
<span style="font-family: Times, 'Times New Roman', serif;"><span style="line-height: 17px;">Y al final te dara una URL donde podras ver el resultado.</span></span><br />
<span style="font-family: Times, 'Times New Roman', serif;"><span style="line-height: 17px;"><br /></span></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.speedtest.net/result/3551179518.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.speedtest.net/result/3551179518.png" /></a></div>
<span style="font-family: Times, 'Times New Roman', serif;"><span style="line-height: 17px;"><br /></span></span>
<span style="font-family: Times, 'Times New Roman', serif;"><span style="line-height: 17px;"><br /></span><span style="line-height: 17px;">Espero les haya agradado el manual. Se vale comentar</span></span><br />
<span style="font-family: Times, 'Times New Roman', serif;"><span style="line-height: 17px;">Saludos</span></span><span style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: 12px; line-height: 17px;"><br /></span></span><br />
<br />
<br />Saul Uribehttp://www.blogger.com/profile/11330053860929936399noreply@blogger.com0