Quantcast
Channel: Planeta Linux Venezuela
Viewing all 1457 articles
Browse latest View live

Jesus Palencia: Utilizar SWAP sobre NFS

$
0
0

Supongamos que tenemos dos equipos conectados a una red además de mucho tiempo libre para jugar con ellos y queremos montar swap a un equipo pero haciéndolo a través de NFS en otro.

Primero vamos a ver los pasos necesarios para montar la swap en el lado del servidor.

  • Montamos el servidor NFS.
# apt -y install nfs-kernel-server
  • Creamos el directorio donde estará el archivo swap y creamos dicho archivo.
# mkdir /home/usuario/swap
# dd if=/dev/zero of=/home/usuario/swap/swapfile bs=1024 count=1048576
  • Exportamos el directorio y cambiamos los permisos.
# echo "/home/usuario/swap 192.168.1.1(rw,insecure,sync)" >> /etc/exports
# chmod -v 777 /home/usuario/swap/swapfile
# exportfs -r

Ya tenemos todo listo en nuestro servidor, ahora solo falta indicarle al equipo que usara la swap como acceder a ella.

  • Al igual que en el servidor lo primero es instalar NFS.
# apt -y install nfs-common
  • Luego creamos el directorio donde se montara la carpeta remota, colocamos en el /etc/fstab la información para montar dicha carpeta y reiniciamos.
# mkdir /home/user/swap
# echo "192.168.1.1:/home/usuario/swap /home/user/swap nfs user,exec" >> /etc/fstab
# reboot
  •  Configuramos el archivo swapfile como un dispositivo loop.
# losetup /dev/loop0 /home/user/swap/swapfile
  • Y para terminar configuramos el dispositivo loop como swap.
# mkswap /dev/loop0
# swapon /dev/loop0

Listo, si todo ha salido bien ya podremos utilizar la nueva swap en nuestro equipo.


Tagged: nfs, swap

Miguel Ángel Useche: Cómo empecé a usar Firefox hace una década

$
0
0

Ayer 9 de noviembre, se cumplieron 10 años del lanzamiento de la versión 1.0 de Firefox, el navegador que sigo usando actualmente por diversas razones que les comentaré en esta entrada. Aunque recuerdo utilizar Netscape cuando iba a los populares cybercafes (pues en los 90s no era común tener Internet en el hogar) mi salida de Internet Explorer (que por venir instalado con Windows era mi predeterminado) fue como a finales del 2002 cuando empecé a jugar con páginas de seguridad informática y en uno de los retos me pedía falsificar el navegador, averiguando instalé K-meleon que se convirtió en mi navegador por defecto por incluir pestañas. Luego me enteré que el navegador estaba basado en otro llamado Mozilla Suite y ahí empezó todo.
Cuando me enteré del desarrollo de Firefox, recuerdo que no me gustó por ser un navegador con pocas funcionalidades respecto a Mozilla Suite (me encataba la idea de tener un cliente IRC y de correo en el navegador) y lo ignoré por completo hasta que instalé la primera versión de Ubuntu que venía con Firefox 0.93. En ese entonces, al ser una numeración menor a 1.0, pensé que el navegador era una beta y no lo probé hasta su lanzamiento; ese día recuerdo bajar un versión binaria, pues no había paquete oficial para Ubuntu 4.10 y al probarlo me gustó por su rapidez. De ahí seguí utilizando versión por versión, creo que la 1.5 no la usé por gran tiempo debido a problemas de video en mi equipo y utilicé, pero luego volví con la versión 2.0.

Haciendo una retrospectiva de las versiones del navegador, es impresionante como ha cambiado la web en 10 años. Cuando salió Firefox, Internet Explorer controlaba el mercado y casi todas las páginas se hicieron para funcionar en ella, además apenas estaba surgiendo la primeras aplicaciones web, Javascript no era tan importante, era necesario utilizar plugins de terceros para ver animaciones y videos en la web, pocos sitios usaban llamadas AJAX, entre otros. Ya hoy en día gracias a Firefox, tenemos la posibilidad de escoger otros navegadores como Chrome (Firefox permitió abrir el paso a otros navegadores), brindar mayor sentido a las estadarizaciones en la web, implementar futuras tecnologías, ejecutar código JS a velocidades cercanas a código nativo, por nombrar algunas cosas. Ademas, Firefox se ha convertido en el navegador mas rápido (a la fecha de publicación de esta entrada), sirve de base para Firefox OS, tiene una versión para Android, se enfoca en los intereses de los usuarios y no de una organización, te protege tu información y respeta tu privacidad, puedes sincronizar de forma privada y segura la información de tu navegador entre dispositivos, está desarrollado por gente de distintas partes del mundo y de forma totalmente abierta, entre otros. Por estas razones y más, les recomiendo utilizar este navegador, no solo por su gran calidad desde el punto de vista técnico, sino también porque al usarlo apoyas a la web abierta.

P.d: Puede estar un poco extraña la redacción del post pero lo redacté con mucho sueño luego de organizar y realizar el evento.

Jesús Matamoros: ¿Por qué es tan importante tener un sitio web?

$
0
0

dirección en Internet, puede dar una imagen poco seria y profesional. Cada vez más el tener un sitio Web será definitivo para seguir en carrera.  

En la actualidad  TODA  empresa, organización, no importa el tamaño,  necesita y debe tener un sitio Web.  En EEUU y en los países más avanzados de la UE está demostrado que la intensidad en la aplicación de nuevas tecnologías y la incorporación de un Sitio Web, está correlacionado de manera positiva con el incremento de las ventas, la productividad y el valor de mercado de las empresas. Además, estudiosos del E-Business consideran que las empresas que no entren en el campo de Internet en los próximos 10 años, desaparecerán!. Conozca a continuación las ventajas de tener un sitio web...

 Ventajas de tener un sitio web:
1. Alcance mundial de sus productos y servicios: a través del sitio Web Usted podrá llegar a clientes potenciales del mundo entero. Las limitaciones geográficas ya no existen, un sitio Web es como una oficina de ventas en cada lugar del planeta.

2. Competir al lado de los más grandes:
Su imagen en Internet podrá ser comparable a cualquier gran compañía de su mismo sector. Es un terreno imparcial donde el sitio web de una empresa pequeña puede ser tanto o más atractivo que el de una empresa muy grande. Por eso podrá competir justo al lado de las empresas más grandes, de igual a igual.

3. Disponible las 24horas, todos los días año: La presencia universal también se complementa con la presencia las 24 horas, los 7 días de la semana, los 365 días del año, lo que permite que aún fuera del horario de trabajo, la empresa siga produciendo y creciendo. Además de atender otras partes del planeta que por diferencias horarias sería imposible realizarlo al instante.

4. Menos Costos Operativos:
Ahorro en gastos de publicidad, reducción de teléfono y personal, de modo que cualquier información que pudiera necesitar el cliente la podrá consultar en su página Web, esto le ahorra tiempo, dinero y reduce el número de llamadas telefónicas de su negocio, locales y de larga distancia.

5. Imagen Profesional de su empresa: Actualmente las empresas respetadas en el medio tienen presencia en la Web. El no contar con una
Logo empresa desarrollo web

En iT Labs nos dedicamos a ofrecer soluciones digitales 360º, empleando las últimas tecnologías disponibles en el mercado, poniendo especial énfasis en la funcionalidad y el posicionamiento y estrategia de marketing, permitiéndole lograr presencia en Internet. De esta manera Usted y su empresa podrán competir estratégicamente, utilizando nuestros productos como una herramienta de marketing, publicidad y hasta gestión empresarial.


José Luis Rivas: Primera versión de angular-geocomplete

$
0
0

Esta es la historia de un día que necesitaba con una dirección o el nombre de una ciudad conseguir un array JSON que me diese los posibles lugares donde eso fuese cierto.

Y entonces nació angular-geocomplete.

Lo fino es que se puede combinar con algún typeahead y se obtiene un autocompletado demasiado genial como el de Google Maps.

Y sí, usa el API de Google Maps.

¿Cuál es la gran ventaja? Que obtienes no sólo el nombre del lugar sino sus coordenadas.

Instalable vía bower también con bower install angular-geocomplete.

Problemas a los issues de GitHub.

Héctor Colina: Latex Beamer Referencias de figura sin números

$
0
0

Generando unas diapositivas en Latex Beamer para el postgrado, me encontré con un detalle bastante extraño: al insertar una figura no se generaba la referencia respectiva:

Referencia sin número

Investigando un poco [1] conseguí que este error se debe a que me faltaba incluir la opción \setbeamertemplate{caption}[numbered] en el encabezado del documento y con eso ya podemos tener nuestras figuras perfectamente referenciadas en Latex Beamer:
Referencia con número
Disfruten la ayuda!

[1] http://tex.stackexchange.com/questions/127145/beamer-presentation-figure-has-no-number

 

Carlos Colmenarez: El Moto G (2014) es el primero en recibir Lollipop, y algo está cambiando en Android

$
0
0

Como ocurrió el año pasado, Motorola ha sido la primera. Algunos usuarios americanos del Moto G (2014) ya están recibiendo Android 5.0 Lollipop y la tendencia en actualizaciones parece estar cambiando en casi todas las marcas de la plataforma.

Como ya pasó con Android 4.4 Kit Kat, no han sido los Nexus los primeros dispositivos en actualizar a Android 5.0 Lollipop. El honor recae sobre Motorola y el Moto G de segunda generación, mientras que la actualización para el Moto X estaría casi lista. Según informan algunos usuarios usuarios del Moto G (2014) libre americano, ya han comenzado a recibir la actualización vía OTA, con un peso de unos 386 MB.

La actualización llega tras la noticia que conocimos hace tiempo por la cual Motorola confirmaba que toda la gama 2013 y 2014 probaría el sabor de Android 5.0 Lollipop. La velocidad en la entrega no sorprende dada la poca personalización que Motorola hace sobre el Android que Google entrega a las compañías. Sin embargo, tiene mérito que un dispositivo como el Moto E llegue a conocer Lollipop, pues en otra marca la actualización no es que se retrasara, es que directamente la empresa no se planteara su actualización, algo que ha pasado incluso en modelos de gama alta.

Los fabricantes se están tomando más en serio los plazos

En este sentido, parece que algo está cambiando. Todas las marcas han ido confirmando ya los terminales que actualizarán a Android 5.0 Lollipop, y además se están dando más prisa de lo que nos tienen acostumbradas. Por una parte tenemos una LG que esta semana ya comenzará a actualizar su G3 (manualmente ya está disponible la actualización), una Samsung cuyo TouchWiz basado en Lollipop ya hemos podido ver en vídeo en el Galaxy S4 y en Galaxy S5, por lo que tampoco debería tardar mucho en llegar a éstos y a los Note 3 y Note 4.

Quien sale peor parada de este movimiento es, sin duda, Google. Desde el día 3 de noviembre esperamos la llegada de Android 5.0 Lollipop a los Nexus 7 de 2012 y 2013, Nexus 4 y Nexus 5, y la OTA no acaba de llegar a los usuarios. Al parecer se trata de corrección de bugs, pero siendo tú quien desarrolla el software, no da muy buena imagen a la plataforma retrasarse en los que deben ser, como la propia Google afirma, los terminales ejemplares.

fuente: celularis


Jesus Palencia: Definiciones de Pure Blend, Blend, Flavor y Derivative

$
0
0

Hace poco me toco participar como ponente en un evento de una universidad de mi localidad, durante una de las ponencias surgió un comentario sobre derivados de Debian y pude observar que muchas veces las personas no tienen claro que es un blend o un derivado, es por eso que decidí publicar estas pequeñas definiciones.

Pure Blend (Mezcla pura): Un subconjunto de Debian que está configurado para apoyar a un grupo objetivo en particular. En este caso todos los cambios y mejoras se integran a los repositorios oficiales de Debian.

Blend (Mezcla): Una distribución basada en Debian que es, o quiere ser, una mezcla pura, es decir, tiene como objetivo explícito de mejorar Debian en su conjunto, en consecuencia, todos los extras que ofrecen, o bien formar parte de Debian, o son soluciones temporales para resolver una necesidad del grupo objetivo que no puede ser resuelto dentro de Debian todavía.

  • Diferencia entre un Blend y un sistema de remasterizado: No todos los Blend existentes en la actualidad proveen un soporte de instalación. La razón para esto es que tales medios de instalación no siempre son necesarios ya que usted sólo necesita instalar un Debian limpio y luego instalar algunos metapaquetes encima del mismo para transformarlo.

Flavor (Sabor): Tras la instalación de un Blend a menudo es una elección, dependiendo del uso particular, acerca de lo conjunto de valores predeterminados para utilizar. Un sabor es el nombre de un conjunto tal. (por ejemplo, Skolelinux tiene sabores de principal-servidor, estación de trabajo, y cliente-servidor liviano)

Derivative (Derivado): Debian “derivado” es un término coloquial utilizado para referirse a las distribuciones basadas en Debian en varias maneras. Un patrón común, pero no el único de los derivados es la de reutilizar / reconstruir de la mayor parte de los paquetes oficiales de Debian y la adición de algunos paquetes personalizados propios.

Espero que aunque poca esta información les sea de utilidad, saludos…


Tagged: definicion

Jesus Palencia: Fish Shell, un Bash con super poderes

$
0
0

Fish es un shell de línea de comandos totalmente equipada (como bash o zsh) inteligente y fácil de usar. Soporta características de gran alcance como el resaltado de sintaxis, autosugestiones, y completado con la tecla TAB, que trabajan sin nada que aprender o configurar.

Si usted desea hacer su línea de comandos más productivo, más útil y más divertida, sin tener que aprender un montón de opciones de sintaxis y de configuración, entonces Fish puede ser lo que está buscando.

Fish posee todas las capacidades de Bash o Zsh pero con vistas a facilitar la vida de la persona que desea crear script mediante lo que ellos llaman sane scripting.

Tambien existen proyectos como Oh my fish cuyo propósito es mejorar Fish mediante la adición de plugins y temas, haciendo mas atractivo para los desarrolladores.

Para instalar Fish solo debes ejecutar el comando correspondiente a tu distribución.

# yum install fish

# apt -y install fish

# pacman -S fish

Para cambiar permanentemente tu shell a Fish solo debes abrir un terminal y ejecutar lo siguiente.

chsh -s /usr/bin/fish

Si deseas hacer el cambio para todos los usuarios en el equipo solo debes ejecutar el siguiente comando.

# sed -i 's_/bin/bash_/usr/bin/fish_g' /etc/passwd

¿Qué esperas? Prueba Fish y no te arrepentirás.

Referencias:


Tagged: fish, shell

Jesus Palencia: Tor-strong un script para automatizar la instalación de tor + polipo + privoxy + dnsmasq

$
0
0

Según las estadísticas de mi blog los post más visitados son los relacionados con tor, es por eso que decidí crear un script que automatiza el proceso de instalación (en Debian y derivados) siguiendo el procedimiento explicado en los post anteriores.

Tal y como lo menciona el titulo este script instala tor + polipo + privoxy + dnsmasq y lo pueden descargar desde su repositorio en github.

Referencias:


Tagged: dnsmasq, polipo, privoxy, script, tor

Jesús Lara: OpenLDAP TLS/SSL : Configuración básica y aseguramiento

$
0
0

Seguridad OpenLDAP TLS/SSL

Una de las características más imprescindibles de todo directorio que se configure, es el mantener el tráfico seguro, en anterior entrega aprendimos a proteger nuestras contraseñas, ahora aprenderemos a proteger el tráfico mismo del servidor OpenLDAP usando SSL y TLS.

Continuando con la saga de artículos sobre openLDAP, acá el dedicado a seguridad TLS/SSL.

 

SSL

SSL (Secure Socket Layer) permite establecer un enlace cifrado entre el cliente LDAP y el Servidor OpenLDAP, SSL es un estándar y se implementa en Linux mediante openSSL.

SSL requiere un certificado de llave pública, dicho certificado público se le otorga a los clientes a través de la conexión y valida que el servidor al que nos estamos conectando es realmente el servidor al que deseamos conectarnos; luego que ambas partes admiten la conexión, esta se realiza por un canal seguro, cifrado.

Para trabajar con certificados auto-firmados (aquel que es generado por el propio servidor) en Debian, este proporciona una herramienta práctica de gestión/generación de certificados auto-firmados.

Instalación

Instalamos la herramienta de gestión de certificados de Debian

apt-get install openssl ssl-cert ca-certificates

Generando unos certificados genéricos auto-firmados:

/usr/sbin/make-ssl-cert generate-default-snakeoil --force-overwrite

Dicho certificado genérico auto-firmado se encuentra en /etc/ssl/certs.

Cambiamos el grupo al directorio ssl:

chgrp ssl-cert /etc/ssl/ -R

Y agregamos al usuario openLDAP al grupo “ssl-cert” para poder leer los certificados (y no tener que copiarlos a otro directorio):

usermod -G ssl-cert,openldap openldap

Verificando que el usuario ya se encuentra en el grupo:

id openldap

uid=114(openldap) gid=104(openldap) groups=104(openldap),105(ssl-cert)

Reiniciamos el servicio:

service slapd restart

Y hacemos uso de dicho certificado:

ldapadd -H ldapi:/// -Y EXTERNAL -Q << EOF
dn: cn=config
changetype:modify
replace: olcLocalSSF
olcLocalSSF: 71
-
replace: olcTLSCACertificatePath
olcTLSCACertificatePath: /etc/ssl/certs
-
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/cacert.org.pem
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ssl-cert-snakeoil.pem
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ssl-cert-snakeoil.key
-
replace: olcTLSVerifyClient
olcTLSVerifyClient: never
-
replace: olcTLSCRLCheck
olcTLSCRLCheck: none
EOF

Nota: con el atributo olcLocalSSF definimos el nivel de seguridad que admitirá el servidor, SSF significa “Security Strength Factor” donde:

0 = no seguridad requerida

1 = chequeo de integridad exclusivamente

71 = implica que cualquier cifrado es “opcional” (ej: permite acceso vía ldapi socket el cual no es cifrado).

128 = fuerza el uso de conexiones con algún tipo de cifrado

Habilitamos SSL como modo de conexión en /etc/default/slapd

archivo: /etc/default/slapd

sed -i "s/SLAPD_SERVICES=\"ldap:\/\/\/ ldapi:\/\/\/\"/SLAPD_SERVICES=\"ldap:\/\/\/ ldapi:\/\/\/ ldaps:\/\/\/\"/g" /etc/default/slapd

Reiniciamos el servicio:

service slapd restart

Y verificamos que está escuchando por el puerto 636:

lsof -i tcp:636
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
slapd   5776 openldap   11u  IPv4   8045      0t0  TCP *:ldaps (LISTEN)
slapd   5776 openldap   12u  IPv6   8046      0t0  TCP *:ldaps (LISTEN)

Adicionalmente, podemos verificar la conexión SSL mediante openssl:

openssl s_client -connect localhost:636 -showcerts
New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : DES-CBC3-SHA
    Session-ID: 9C0674ED1BEEE9D790F91CDD25D67C60B41E4F2B9AA9D47985E1F4CB6D3112A0
    Session-ID-ctx: 
    Master-Key: 29FC9B902F61C6F5D843C60923BE4B4B71E5252930F0093196B8B2199728C1CD9E05B7278B98C5E7CC584F3D5AA9849F
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1412140120
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---

La conexión nos ha retornado un certificado auto-firmado (self-signed cert)

Configuramos el archivo ldap.conf para utilizar el certificado CA actual:

archivo: /etc/ldap/ldap.conf
BASE dc=devel,dc=com,dc=ve
URI ldaps://localhostldap://localhostSIZELIMIT 12
TIMELIMIT 15
DEREF never
# TLS-SSL
TLS_CACERT /etc/ssl/certs/cacert.org.pem
TLS_REQCERT never

TLS_REQCERT define si un certificado es solicitado o no por el servidor, para conexiones donde se especificará exclusivamente conexiones TLS/SSL se debe colocar en modo “demand”.

Ya podemos verificar la conexión SSL usando ldapsearch:

ldapsearch -H ldaps://localhost -b dc=devel,dc=com,dc=ve -D cn=admin,dc=devel,dc=com,dc=ve -W -s sub '(cn=admin)' -x -LLL

TLS

TLS o “Transport Layer Security” es la evolución de SSL y es de hecho, el modo en el que openLDAP cifra sus conexiones por defecto, aunque obviamente comparte características y atributos de configuración con SSL.

Instalamos en Debian:

apt-get install gnutls-bin

Incorporamos los cifrados TLS con los que cifrará las conexiones nuestro servidor OpenLDAP:

ldapadd -H ldapi:/// -Y EXTERNAL -Q << EOF
dn: cn=config
changetype: modify
replace: olcLocalSSF
olcLocalSSF: 71
-
replace: olcSecurity
olcSecurity: update_ssf=128 simple_bind=128
-
replace: olcTLSCipherSuite
olcTLSCipherSuite: +RSA:+AES-256-CBC:+SHA1
EOF

TLSCipherSuite define la lista de cifrados en las cuales el servidor SLAPD negociará las conexiones.
Usaremos cifrado RSA o AES de 256bits con MAC SHA1, es el modo más compatible de cifrado, soportado por la mayoría de las librerías LDAP que soporten TLS1 o SSL3.
Nota: para mostrar la lista de cifrados compatibles se debe ejecutar:

gnutls-cli -l

Que retornará algo como esto:

Cipher suites:
TLS_ANON_DH_ARCFOUR_MD5 0x00, 0x18 SSL3.0
TLS_ANON_DH_3DES_EDE_CBC_SHA1 0x00, 0x1b SSL3.0
TLS_ANON_DH_AES_128_CBC_SHA1 0x00, 0x34 SSL3.0
TLS_ANON_DH_AES_256_CBC_SHA1 0x00, 0x3a SSL3.0
TLS_ANON_DH_CAMELLIA_128_CBC_SHA1 0x00, 0x46 TLS1.0
TLS_ANON_DH_CAMELLIA_256_CBC_SHA1 0x00, 0x89 TLS1.0
TLS_ANON_DH_AES_128_CBC_SHA256 0x00, 0x6c TLS1.2
TLS_ANON_DH_AES_256_CBC_SHA256 0x00, 0x6d TLS1.2
TLS_PSK_SHA_ARCFOUR_SHA1 0x00, 0x8a TLS1.0
TLS_RSA_AES_128_CBC_SHA256                            0x00, 0x3c    TLS1.2
TLS_RSA_AES_256_CBC_SHA256                            0x00, 0x3d    TLS1.2
Certificate types: CTYPE-X.509, CTYPE-OPENPGP
Protocols: VERS-SSL3.0, VERS-TLS1.0, VERS-TLS1.1, VERS-TLS1.2
Ciphers: AES-256-CBC, AES-128-CBC, 3DES-CBC, DES-CBC, ARCFOUR-128, ARCFOUR-40, RC2-40, CAMELLIA-256-CBC, CAMELLIA-128-CBC, NULL
MACs: SHA1, MD5, SHA256, SHA384, SHA512, MD2, RIPEMD160, MAC-NULL

Luego de incorporado el cifrado, reiniciamos:

service slapd restart

Y verificamos que podemos  iniciar una negociación TLS:

ldapsearch -x -H ldap://localhost -b dc=devel,dc=com,dc=ve -D cn=admin,dc=devel,dc=com,dc=ve -W -s sub '(cn=admin)' -LLL -ZZ

-ZZ inicia una negociación TLS sobre el puerto 389, forzando una respuesta  correcta.

The post OpenLDAP TLS/SSL : Configuración básica y aseguramiento appeared first on Phenobarbital con Soda.

Jesús Lara: Replicación con OpenLDAP

$
0
0

Replicación con OpenLDAP

Continuando con las entradas referentes a OpenLDAP, esta vez nos orientamos hacia la replicación.

A diferencia de otros servicios de replicación, dónde se habla de “Maestro” y “Esclavo”, en OpenLDAP se habla de “Provedores” y “Consumidores” (Consumers-Providers), esto es debido a que un mismo servidor puede proveer datos a un DSA y además consumir datos de otro DSA, permitiendo configuraciones distribuidas de múltiples ramas y árboles.

Replicación con OpenLDAP

Replicación con OpenLDAP

Existen varias formas de replicación:

  • N-Way Multi-Master: todos los servidores son maestros y todos aceptan cambios y los replican al resto de los DSA.
  • Mirror Mode: es una replicación maestro-maestro entre dos nodos, donde cada DSA replica al próximo DSA los cambios, Mirror-mode es un N-WAY con N=2.
  • Syncrepl: En general, la forma básica de replicación Syncrepl es en modo Maestro-Esclavo, donde una entrada modificada es replicada a cada esclavo que “consuma” los cambios del servidor maestro.
  • Delta Syncrepl: En Delta Sync, se crea un diferencial de cambios (Delta-change) y solamente los atributos modificados en la entrada son replicados, mejorando eficientemente la transferencia de la replicación.

Atributos de la Replicación

olcServerID: es la lista de identificadores únicos de cada server, cada DSA debe tener un ID único y ser el mismo en todos los nodos del cluster de servidores.

RID: el ID de la replicación, es único por cada vía de replicación en cada server

Para replicación openLDAP se utiliza SyncProv, un proveedor de sincronía entre diversos servidores openLDAP.

Configurando la Replicación

Vamos a configurar la réplica sencilla (Mirror-Mode) entre 2 servidores, ldap1 y ldap2.

La definición de ámbos debe existir en los DNS o al menos, en el /etc/hosts:

172.16.30.10 ldap1.devel.com.ve ldap1

172.16.30.11 ldap2.devel.com.ve ldap2

Cargamos la identificación de ámbos servidores (olcServerID)

ldapadd -H ldapi:/// -Y EXTERNAL -Q << EOF
dn: cn=config
changeType: modify
replace: olcServerID
olcServerID: 1 ldap://ldap1.devel.com.ve
olcServerID: 2 ldap://ldap2.devel.com.ve
EOF

Y modificamos los límites, para que el usuario que realizará la réplica no tenga problemas de timeouts o tamaño de entradas:

ldapadd -H ldapi:/// -Y EXTERNAL -Q << EOF
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcLimits
olcLimits: dn.exact="cn=admin,dc=devel,dc=com,dc=ve" time.soft=unlimited 
  time.hard=unlimited size.soft=unlimited size.hard=unlimited
-
add: olcDbIndex
olcDbIndex: entryUUID,entryCSN  eq
EOF

Además indexamos los atributos que contienen el timestamp de las entradas y su UUID.

Habilitamos el Overlay SyncProv para el Backend del arbol y para cn=config:

ldapadd -H ldapi:/// -Y EXTERNAL -Q << EOF
dn: olcOverlay=syncprov,olcDatabase={2}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 20 10
olcSpSessionlog: 500
olcSpNoPresent: TRUE
EOF
ldapadd -H ldapi:/// -Y EXTERNAL -Q << EOF
dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 20 10
olcSpSessionlog: 500
olcSpNoPresent: TRUE
EOF

Ahora, habilitamos el RID entre uno y otro servidor, contra cn=config y el backend del árbol primario:

En el servidor1 (ldap1) aplicamos los LDIF para cargar réplica en cn=config y en el árbol primario:

ldapadd -H ldapi:/// -Y EXTERNAL -Q << EOF
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001 provider=ldap://ldap2.devel.com.ve binddn="cn=admin,cn=config" bindmethod=simple 
  credentials=123456 searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=3
-
add: olcMirrorMode
olcMirrorMode: TRUE
EOF
ldapadd -H ldapi:/// -Y EXTERNAL -Q << EOF
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=002 provider=ldap://ldap2.devel.com.ve binddn="cn=admin,dc=devel,dc=com,dc=ve" bindmethod=simple
  credentials=123456 searchbase="dc=devel,dc=com,dc=ve" type=refreshAndPersist  interval=00:00:00:10 retry="5 5 300 5" timeout=3
-
add: olcMirrorMode
olcMirrorMode: TRUE
EOF

Y en el servidor2:

ldapadd -H ldapi:/// -Y EXTERNAL -Q << EOF
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001 provider=ldap://ldap1.devel.com.ve binddn="cn=admin,cn=config" bindmethod=simple 
  credentials=123456 searchbase="cn=config" type=refreshAndPersist retry="5 5 300 5" timeout=3
-
add: olcMirrorMode
olcMirrorMode: TRUE
EOF

ldapadd -H ldapi:/// -Y EXTERNAL -Q << EOF
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=002 provider=ldap://ldap1 binddn="cn=admin,dc=devel,dc=com,dc=ve" bindmethod=simple
  credentials=123456 searchbase="dc=devel,dc=com,dc=ve" type=refreshAndPersist  interval=00:00:00:10 retry="5 5 300 5" timeout=3
-
add: olcMirrorMode
olcMirrorMode: TRUE
EOF

Reiniciamos en ámbos servidores:

service slapd restart

Probando la replicación

Podemos verificar la replicación, creando una entrada en ldap1 y verificando que dicha entrada aparece en ldap2:

en ldap1:

ldapadd -H ldapi:/// -x -D cn=admin,dc=devel,dc=com,dc=ve -W << EOF
dn: ou=services,dc=devel,dc=com,dc=ve
objectClass: top
objectClass: organizationalUnit
ou: services
description: Services and Apps
EOF

En ldap2:

ldapsearch -H ldaps://localhost -b dc=devel,dc=com,dc=ve -D cn=admin,dc=devel,dc=com,dc=ve -W -s sub '(ou=services)' -x -LLL
Enter LDAP Password: 
dn: ou=services,dc=devel,dc=com,dc=ve
objectClass: top
objectClass: organizationalUnit
ou: services
description: Services and Apps

Entonces hemos verificado que nuestra sencilla replicación Mirror-Mode (maestro-maestro de 2 nodos) está operativa.

 

Ya sabes!, si te gustan estos artículos, apoya a que este sitio web siga operativo, ¡dona!, o haz click en alguna publicidad de este blog.


The post Replicación con OpenLDAP appeared first on Phenobarbital con Soda.

Jesús Lara: Migrando Debian a un disco SSD – Optimización básica

$
0
0

Usando un SSD

Mi portátil, una Thinkpad X220, venía con un disco de estado sólido (SSD) además de un disco SATA, por cosas de experimentos el disco SSD lo removí, pero encontré otro y lo agregué a mi equipo, ahora bien, ¿cómo migrar satisfactoriamente mi root system ya instalado a este nuevo SSD?.

SSD

He aquí mi breve experiencia compartida.

Instalación física del SSD

La Thinkpad viene con 2 bahías mini-PCIe, en una ya viene la tarjeta inalámbrica y trae otra vacía (lista para un modem 3G) dónde he colocado mi disco SSD, ahora bien, como es una Thinkpad tuve que “flashear” un BIOS mod (basado en 8duj25us_8DET69WW) para “eliminar” esa mala costumbre de Lenovo te poner una “lista blanca” de dispositivos que puedes meter a tu portátil (y que para colmo son más caros).

Al retirar los tornillos, se desprende la tapa que contiene el touchpad y el teclado y debajo encontrarán las bahías.

original.jpg

Para Thinkpad un disco SSD en esa bahía es tomado como secundario (sdb) y no como primario, no es ningún problema ya que en mi disco SATA /boot está separado de raíz y no pensaba migrar el arranque de allí.

 Particionando el disco

Hay 2 trucos básicos para particionar un disco de estado sólido y aprovechar al máximo su potencial:

Alineación de Particiones

Alinear las particiones es una de las actividades más importantes y menos tomada en cuenta cuando se diseña el layout de particiones, yo destiné 10GB (y realmente no necesito más para root) y para diseñarla usé parted:

parted /dev/sdb
mklabel gpt
unit s
mkpart primary 2048s 10G
align-check optimal 1

Dejamos 2048 sectores (1MB) al principio del disco, esto permite una mejor alineación del disco con el tamaño de los sectores (512Bytes):

Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number     Start   End      Size    Filesystem    Name     Flags
           17,4kB  1049kB   1031kB  Free Space
 1         1049kB  10,0GB   9999MB  ext4          primary

Dejar Holgura

Deja al menos un 10% libre al final del disco, este margen de holgura le permite al disco un “respiro” en su operación.

Además, orientadas a Linux hay otras consideraciones

NO usar SWAP

con 8GB de RAM es casi imposible que mi equipo se vaya a SWAP con la más alta demanda (viendo videos con un par de máquinas virtuales KVM en el fondo, navegando con el gran consumidor de RAM Chromium mientras chateo por Telegram), sin embargo, la ventaja de la X220 es que viene con un disco SATA, así que la SWAP se quedará en dicho disco (sólo de ser necesario).

Usar GPT

No usaré Windows ni ningún otro sistema operativo no-UNIX en este equipo, por lo que usar una geometría de particiones basada en GPT (GUID Partition Table), no solamente me permite múltiples particiones primarias, GPT almacena su tabla de particiones al principio y al final (una copia) lo que da una protección adicional para recuperación de particiones con herramientas como Testdisk.

 

Luego de particionado, procedemos a formatear.

Formato ext4

Aunque “mkfs.ext4 /dev/sdb1″ serviría para la mayoría de las opciones, en nuestro caso necesitamos activar una serie de opciones como el TRIM, con TRIM (discard: según ext4) los bloques de datos borrados o que dejan de estar en uso por el sistema operativo, el sistema puede notificarle al disco SSD que “limpie” dichos bloques inmediatamente para evitar la ralentización del mismo en operaciones de escritura futuras; además de TRIM, EXT4 no inicializa al ejecutar el comando mkfs ni la tabla de inodos ni el journal del mismo (característica conocida como “lazy initialization”) haciendo más lentas las operaciones iniciales de montaje y primera copia; por último, deseamos activar el modo WRITEBACK, con “data=writeback” los datos son escritos “después” que se ha escrito la metadata de la misma en el journal, esto tiene grandes ventajas en el performance (la operación de escritura de datos se hace en segundo plano) pero conlleva que un fallo eléctrico luego de ejecutado el commit de la metadata pero antes de finalizar la escritura de datos creará un sistema inconsistente; como me encuentro en un sistema protegido por batería (portátil), esto para mí no es un problema serio.

Sin embargo, recordemos las sabias palabras de Linus al respecto de data=writeback:

If your data gets written out long after the metadata hit the disk, you are going to hit all kinds of bad issues if the machine ever goes down. Linus

Insisto, habilitar “data=writeback” solo si tienes una garantía ABSOLUTA de que no habrán fallos del equipo durante un proceso de escritura en disco.

Para determinar si mi disco SSD soporta TRIM ejecuto:

hdparm -I /dev/sdb | grep 'TRIM'
 * Data Set Management TRIM supported (limit 2 blocks)

Luego, ejecuto entonces el formato de la partición sdb1:

mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 -b 4096 -m 0 -O extents,dir_index /dev/sdb1

Y tune2fs:

tune2fs -o journal_data_writeback,discard -c 5 -i 5 /dev/sdb1

Adicionalmente, bajo a 5 (del por defecto 2o) la cantidad de veces que el sistema de archivos debe ser chequeado al arranque, esto porque es un equipo que constantemente se suspende|hiberna, necesito que cada vez que arranque sea chequeado, para evitar largas esperas y que espere mucho tiempo antes que un chequeo se haga demasiado tarde y el sistema simplemente no arranque (arranque en initramfs).

Al finalizar, chequeamos:

e2fsck /dev/sdb1

Y verificamos características:

tune2fs -l /dev/sdb1 | grep discard
Default mount options: journal_data_writeback user_xattr acl discard

Ahora procedemos al montaje.

Montaje de la partición

Creamos un directorio temporal y realizamos el montaje:

mkdir /ssd
Y
mount -t ext4 /dev/sdb1 /ssd -o discard,noatime,nodiratime,nodelalloc,data=writeback,i_version,barrier=0,user_xattr,inode_readahead_blks=64,commit=100

Entre las caraterísticas del montaje están:

  • discard: habilita el TRIM de la partición
  • i_version: habilita el uso de una versión “extendida” de 64-bit de los inodos de ext4
  • barrier: deshabilita los write barriers.
  • noatime,nodiratime: no escribir las fechas de acceso en archivos y directorios, información poco útil en /
  • commit: permite definir la cantidad de segundos que la metadata en disco es escrita y sincronizada, 100 segundos es mucho tiempo para garantizar confiabilidad en los datos, pero aumenta drásticamente el performance.
  • inode_readahead_blks: ext4 cuenta con un algoritmo de pre-lectura (read-ahead), dicho algoritmo “pre-lee” los inodos a los lados de un inodo leído, para “optimizar” la extracción de datos, el valor por defecto es de 32 bloques, se incrementa a 64.
  • nodelalloc: ext4 ejecuta una “delayed allocation” de los bloques y solo los reserva cuando ya va a escribir a disco, esto es potencialmente peligroso combinado con data=writeback, la totalidad de los bloques que ocupan un archivo son reservados apenas la data es copiada desde userspace a la caché del dispositivo, así, cuando la metadata se esté escribiendo en el disco, ya los bloques para almacenar dicha data estarán reservados.

Sincronizando mi raíz

Para sincronizar mi partición raíz utilizo el siguiente comando rsync:

rsync -aAvPSXx --numeric-ids --exclude="/dev/*" --exclude="/proc/*" --exclude="/sys/*" --exclude="/tmp/*" --exclude="/home/*" / /ssd/

En general excluyo todo archivo que no pertenezca a la partición raíz y los puntos de montaje de sistema (/dev, /sys).

Al finalizar la sincronización, fuerzo un trim “manual” a la partición:

fstrim -v /ssd
/ssd: 3395391488 bytes were trimmed

Cambios al FSTAB

Los cambios más importantes al FSTAB (archivo: /ssd/etc/fstab) tienen que ver con el montaje “especial” de raíz, y con el montaje en RAMFS de las particiones temporales básicas del sistema:

# tmp
tmpfs /tmp        tmpfs        noatime,nosuid         0 0
tmpfs /var/run    tmpfs        nosuid,mode=0755       0 0
tmpfs /var/lock   tmpfs        noexec,nosuid,nodev    0 0

Y raíz:

UUID=970518df-7db4-44af-979c-7c9fd86a7488 / ext4 discard,noatime,nodelalloc,data=writeback,barrier=0,i_version,commit=100,inode_readahead_blks=64,errors=remount-ro 0 1

el UUID de la partición /dev/sdb1 lo obtienen fácilmente con el comando “blkid”

Actualizando GRUB

En el archivo /ssd/etc/default/grub  cambiamos el elevador a “deadline“:

GRUB_CMDLINE_LINUX=”acpi_osi=Linux acpi=ht elevator=deadline”

Un I/O scheduler, implica la forma como Linux envía los bloques de datos a los discos, en general mi equipo es una estación de trabajo, tengo bases de datos, directorios, máquinas virtuales y “deadline” es la opción más idónea, manteniendo las colas con tiempos “deadline”, para que algunas muy retrasadas “expiren”, evitando que nos quedemos sin recursos, además, en deadline, las lecturas se priorizan por sobre las escrituras, mejorando el performance de largas operaciones de lectura sobre los discos.

CFQ (el elevador por defecto en Debian), es incluso más lento que “deadline” en operaciones con bases de datos o cargas multihilos.

Este siempre es mi elevador por defecto, sin embargo, para los discos SSD hay un elevador mucho más simple, NOOP.

Con NOOP, las operaciones van sin orden (y unidas) en una única cola de escritura que es entregada al dispositivo, su ordenamiento, escritura dependerán del dispositivo.

Hay que asumir el riesgo de usar uno u otro scheduler, en mi caso uso “deadline” por lo importante de priorizar las lecturas sobre las escrituras (útil en bases de datos y directorios LDAP), sin embargo, usar CFQ permitirá a un usuario garantizar un ancho de banda más consistente para ciertas aplicaciones (ejemplo: desktops).

También el scheduler puede ser cambiado por disco, algo que veremos en el próximo apartado.

Hacemos una “jaula” para poder actualizar el GRUB desde el nuevo disco SSD (montado en /ssd):

  • Monto el actual /boot dentro de /ssd
mount /dev/sda1 /ssd/boot
  • Monto los sistemas especiales con la opción “-o bind”:
mount /dev /ssd/dev -o bind
mount /sys -o bind  /ssd/sys
mount /proc -o bind /ssd/proc

Y creo la jaula con:

chroot /ssd

Ya dentro de la jaula, la ejecución de “update-grub” causará que se use /dev/sdb1 como nuevo “root”.

update-grub

actualicen además el initramfs:

update-initramfs -t -u

Y nos salimos de la jaula.

exit

Reiniciamos el equipo.

Optimización del disco

Ahora vamos a crear un archivo especial de optimización del disco (comentado anteriormente).

archivo: /sbin/optimicedisk.sh

#!/bin/bash
# script para optimizar el acceso a disco de sistemas con noop o deadline
# autor: Jesus Lara <jesuslarag@gmail.com>
disks=( sdb )
# parameters
SCHEDULER="deadline"
QUEUEDEPTH=256
BLOCKDEV=16384
NCQ=32
for DISK in "${disks[@]}"
do
      echo "Change I/O elevator to $SCHEDULER"
      echo $SCHEDULER > /sys/block/$DISK/queue/scheduler
      echo "Optimice server disk block size to $BLOCKDEV"
      /sbin/blockdev --setra $BLOCKDEV /dev/$DISK
      echo "Set queue depth to $QUEUEDEPTH"
      /bin/echo $QUEUEDEPTH > /sys/block/$DISK/queue/nr_requests
      echo "Enabling NCQ on $DISK"
      echo $NCQ > /sys/block/$DISK/device/queue_depth
      # read ahead and sectors read by disk
      /bin/echo "8192" > /sys/block/$DISK/queue/read_ahead_kb
      /bin/echo "4096" > /sys/block/$DISK/queue/max_sectors_kb
      if [ "$SCHEDULER" == 'deadline' ]; then
          # fifo batch reduce seeks
         /bin/echo 32 > /sys/block/$DISK/queue/iosched/fifo_batch
      fi
     # enable write-caching, readahead and disable noise-reduction (performance boost)
    /sbin/hdparm -a512 -A1 -W1 /dev/$DISK
done

En este archivo hacemos varias cosas pero 3 son muy importantes:

  • definimos la cantidad de bloques que son pre-leídos en las lecturas secuenciales (read-ahead) a 16384 (blockdev –setra)
  • Hemos indicado al sistema que este disco no es rotacional (es un SSD, sin parte móviles como platos o discos que causen latencia)
  • Habilitamos NCQ (Native Command Queuing), con NCQ se garantiza una paralelización hasta el máximo permitido (31 según LIBATA) de posibles operaciones paralelas de lectura/escritura (NOTA: debe estar habilitado AHCI en el BIOS).

original

Con esta serie de características garantizamos un equilibrio entre performance y uso.

Luego, colocamos este archivo en el rc.local:

/bin/bash /sbin/optimicedisk.sh

Y lo hacemos ejecutable:

chmod +x /sbin/optimicedisk.sh

 

Es importante además, definir si el disco es o no un dispositivo rotacional, esto afectará mucho el comportamiento de NCQ:

archivo: /etc/udev/rules.d/66-ssd.rules

# system default : set deadline scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="deadline"
# SSD specific : set noop scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"

# set a larger readahead size
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/read_ahead_kb}="2048"

Con esta regla UDEV, nos garantizamos que para todo disco detectado como no-rotacional, entonces se seleccione el scheduler noop.

NOTA: se usa el índice 66 ya que las reglas UDEV para almacenamientos persistentes se ejecutan en la regla 60 (persistent-storage.rules).

Al finalizar el archivo de reglas lo probamos con:

udevadm test --action=add /sys/block/sdb

Y veremos entre la larga lista de acciones de udevadme algo como esto:

udev_rules_apply_to_event: ATTR '/sys/devices/pci0000:00/0000:00:1f.2/host2/target2:0:0/2:0:0:0/block/sdb/queue/scheduler' writing 'noop' /etc/udev/rules.d/66-ssd.rules:5

demostrando que la regla se ha aplicado correctamente a nuestro disco SSD.

Otras consideraciones

  • Re-organizar mi disco duro para que /var (y por sobre todo /var/cache y /var/log, además de /var/spool) queden sobre el disco SATA
  • Actualizar el firmware del disco, OCZ trae un comando para hacerlo desde Linux.
  • Realizar algunos cambios adicionales en sysctl como por ejemplo:
# VM
vm.dirty_ratio = 20
vm.dirty_background_ratio = 20
vm.dirty_bytes = 67108864
vm.dirty_background_bytes = 134217728
vm.mmap_min_addr = 4096
# swapping
vm.swappiness = 0
vm.vfs_cache_pressure = 20

Que podría explicar luego.

Conclusiones

Un disco SSD es un excelente recurso para incrementar el performance, pero por sus características, su tiempo de vida es limitado (con estas características acá aplicadas, el tiempo de vida de una portátil con SSD podría llegar a los 8 años, y yo jamás he tenido más de 8 años con la misma portátil y el mismo disco!), como todo, hay que aprender a optimizarlo y sacarle el mejor provecho posible.

Happy Hacking!

 

The post Migrando Debian a un disco SSD – Optimización básica appeared first on Phenobarbital con Soda.

Gabriel Vegas: FAT filesystem – bad superblock

$
0
0
Tiempo sin publicar nada. Hace poco tuve un problema con una memoria sd, movía unos archivos y el Gala de Elementary OS se congelo. Me salia el siguiente error : mount:/dev/sdf1 can’t read superblock Con sudo fdisk -l /dev/sdf me salia: Disco /dev/sdf1: 1973 MB, 1973416448 bytes 61 cabezas, 62 sectores/pista, 1019 cilindros, 3854329 sectores…

Ernesto Crespo: Configurando un sitio estático con flask

$
0
0

Continuando con la serie de artículos sobre el microframework de desarrollo web flask, ahora se mostrará como crear un sitio estático.

Este artículo se basa en un artículo en inglés llamado Introduction to Flask, Part 1 - Setting up a static site.

Se usará el mismo archivo utilizado en los artículos anteriores (app.py), en este caso simplemente se agregará el decorador y la función que se va a usar que será para llamar una página de bienvenida.

Aparte del archivo app.py se necesita crear dos directorios, uno llamado templates el cual contendrá la plantilla html y el otro se llamará static que contendrá archivos estáticos como archivos css y archivos javascript.

ernesto@heimdall:~/proyectos/tutorialflask$ ls -l
total 12
-rw-r--r-- 1 ernesto ernesto  792 jun  7 20:56 app.py
drwxr-xr-x 2 ernesto ernesto 4096 jun  7 21:09 static
drwxr-xr-x 2 ernesto ernesto 4096 jun  7 21:10 templates

El archivo app.py tendrá la siguiente información adicional:

#Se agrega el renderizado de la plantilla

from flask import Flask,request,redirect,render_template









#Se usa el decorador ruta para ver el url bienvenido.


@app.route('/bienvenido')


#Se crea la funcion welcome que renderiza una plantilla html.


def welcome():


    return render_template('bienvenido.html')  # renderiza la plantilla bienvenido.html.






Ahora en el directorio templates se crea el archivo bienvenido.html con el siguiente contenido:



Se ejecuta la aplicación y se consulta el url http://127.0.0.1:5000/bienvenido


Ahora se usará un estilo que se llama bootstrap para descargarlo lo puede hacer desde el enlace. Al bajarlo y descomprimirlo copie los archivos bootstrap.min.css y bootstrap.min.js al directorio static, como se muestra a continuación:
ernesto@heimdall:~/proyectos/tutorialflask$ ls -l static/
total 132
-rw-r--r-- 1 ernesto ernesto 99961 feb 13 12:54 bootstrap.min.css
-rw-r--r-- 1 ernesto ernesto 29110 feb 13 12:54 bootstrap.min.js


A continuación se muestra los nuevos cambios a la plantilla bienvenido.html para que use los archivos mencionados anteriormente.

Ahora se abre el navegador al url http://127.0.0.1:5000/bienvenido y se obtiene lo que muestra la siguiente figura:

Richzendy Contreras: Fedora en el CGSOL 2014 Guatemala

$
0
0

Jesus Palencia: Usar Hardlink para reducir el espacio ocupado en disco

$
0
0

Hardlink es una herramienta que detecta múltiples copias de un archivo y las reemplaza con enlaces duros, teniendo como resultado una reducción de espacio utilizado en el disco.

Su instalación es bastante simple, basta con ejecutar el comando correspondiente a tu distribución como root.

# apt -y install hardlink

# yum install hardlink

# pacman -S hardlink

Luego de su instalación basta con ejecutarlo desde la linea de comandos (como root) cada vez que desee recuperar espacio en disco.

# hardlink -f -x /sys -t -o /

La lista de opciones es un poco extensa y la podemos consultar ejecutando “man hardlink” por lo que me limitaré a explicar solo las opciones utilizada en el ejemplo.

  • -f solo trata de enlazar archivos con el mismo nombre.
  • -x excluye una carpeta del proceso de comparación (en este caso /sys)
  • -t hace la comprobación incluso cuando la fecha de modificación sea diferente.
  • -o ignora el propietario del archivo a la hora de comparar (normalmente solo se comparan archivos con el mismo dueño)
  • / le indica a hardlink que se ejecute desde la raíz del sistema de archivos.

Dependiendo de la cantidad de archivos en su disco la ejecución puede tomar bastante tiempo.

Referencias:


Tagged: filesystem, hardlink, optimizaciones

Jesus Palencia: Acelera tu GNU/Linux con Prelink y Preload

$
0
0

Hoy en día es común ver PC con mas de 4 Gb de RAM usando Linux y muchas veces el usuario se pregunta como puedo hacer uso de mi hardware más eficientemente. Para lograr esto podemos hacer uso de las dos pequeñas herramientas que les mostraré a continuación.

La primera es Preload, un programa que analiza las aplicaciones que más usamos, y las pre-carga en RAM reduciendo así su tiempo de inicio al ejecutarlas.

La segunda se llama Prelink un programa que se encarga de agilizar la carga dinámica de librerías. Dicho de otro modo, rellena las tablas de símbolos del binario deduciendo las direcciones de memoria donde supuestamente van a estar los mismos, lo que resulta en una mayor velocidad de carga de las aplicaciones ya que cada vez que necesitemos un símbolo de una librería dinámica no tendremos que hacer una carga de la misma, ya que gracias a prelink sabremos donde va estar.

La instalación de ambas es bastante sencilla, solo debes ejecutar el comando correspondiente a tu distribución.

# apt -y install prelink preload

# yum install prelink preload

# pacman -S prelink preload

En el caso de preload no se necesita ninguna configuración posterior a la instalación, pero en la caso de prelink son necesarios algunos pasos adicionales.

Abrimos el archivo /etc/default/prelink

# nano /etc/default/prelink

Y modificamos las siguientes lineas:

PRELINKING=unknown

PRELINK_OPTS=-mR

Quedando ambas de la siguiente forma:

PRELINKING=yes

PRELINK_OPTS=-amR

Guardamos y ejecutamos el siguiente comando:

# prelink -amR

El proceso tomará varios minutos y al concluir la carga de las aplicaciones será mucho mas rápida.

En Debian podemos realizar un paso adicional para asegurarnos que las aplicaciones que se instalen en el futuro pasen por prelink luego del proceso de instalación.

Abrimos o creamos el archivo /etc/apt/apt.conf

# nano /etc/apt/apt.conf

Y colocamos lo siguiente:

DPkg::Post-Invoke {"echo Ejecutando prelink, espere...;/etc/cron.daily/prelink";}

Adicional a este procedimiento los usuarios de KDE pueden realizar lo siguiente para acelerar su sistema usando prelink, abrimos o creamos el archivo /etc/profile.d/kde-prelink.sh

# nano /etc/profile.d/kde-prelink.sh

Y pegamos lo siguiente:

export KDE_IS_PRELINKED=1

Luego le cambiamos los permisos a dicho archivo y listo.

# chmod 755 /etc/profile.d/kde-prelink.sh

Ya podemos reiniciar nuestro sistema y disfrutar de la carga de nuestra distribución Linux a toda velocidad.

Referencias:


Tagged: optimizaciones, prelink, preload

Miguel Ángel Useche: Cómo migrar los issues de Bitbucket a Github

$
0
0

Hace unos días en la organización donde trabajo, nos tocó migrar de Bitbucket a Github y principalmente nuestra necesidad era migrar el código (obviamente) y la lista de issues junto con los datos asociados a ellos.

El código fuente fue sencillo pues Github tiene un asistente que permite clonar cualquier repositorio GIT y almacenarlo en el proyecto seleccionado, luego el siguiente paso fue ejecutar los siguientes comandos para cambiar el repositorio origen:

git remote set-url origin git@github.com:USUARIO/REPOSITORIO.git

Para migrar los issues, encontré un script de python para migrar los issues desde Bitbucket a Github y su uso es sencillo, sin embargo tuve problemas al ejecutarlo y me salió el error:

EOF occurred in violation of protocol

Luego de encontrar una solución en StackOverflow agregué el siguiente código luego de importar la librería SSL:

import ssl
from functools import wraps
def sslwrap(func):
    @wraps(func)
    def bar(*args, **kw):
        kw['ssl_version']= ssl.PROTOCOL_TLSv1
        return func(*args, **kw)
    return bar

ssl.wrap_socket= sslwrap(ssl.wrap_socket)

Finalmente pude ejecutar el programa tal como lo dice su archivo README.md y en pocos segundos tuve todos los issues recreados en Github junto con los milestones y etiquetas utilizadas.

Nota: El repositorio debe ponerse temporalmente público para poder realizar la migración.

Jesus Palencia: I2p en Debian, Ubuntu, Mint y Trisquel

$
0
0

I2P es una red anónima, que presenta una capa simple que las aplicaciones pueden usar para enviarse mensajes entre si de forma anónima y segura. La propia red está estrictamente basada en mensajes, pero hay una librería disponible para permitir comunicación en streaming confiable sobre ella. Toda comunicación está cifrada extremo a extremo (en total hay cuatro capas de cifrado usadas cuando se envía un mensaje), e incluso los puntos de los extremos son identificadores criptográficos (esencialmente un par de claves públicas).

Ninguna red puede ser “perfectamente anónima”. El objetivo continuado de I2P es hacer los ataques más y más difíciles de montar. Su anónimato se volverá más fuerte al crecer el tamaño de la red y con la revisión académica que está en marcha.

¿Qué puede hacer con él?

Dentro de la red I2P las aplicaciones no tienen restricciones en como pueden comunicarse aquellas que normalmente usan UDP pueden usar las funcionalidades básicas de I2P, y aquellas aplicaciones que normalmente usan TCP pueden utilizar la librería ‘tipo TCP de streaming’. I2P incluye una aplicación genérica de puente TCP/I2P (I2PTunnel) que permite enviar flujos TCP dentro de la red I2P, también recibir flujos TCP de fuera de la red y enviar estos a una dirección IP específica.

Para instalar I2p en Debian hay que agregar el repositorio correspondiente a tu versión en el archivo source.list.

  • Estable
deb http://deb.i2p2.no/ stable main
deb-src http://deb.i2p2.no/ stable main
  •  Testing o Sid
deb http://deb.i2p2.no/ unstable main
deb-src http://deb.i2p2.no/ unstable main

Luego descargue la clave usada para firmar el repositorio desde aquí y agréguela usando el siguiente comando.

apt-key add debian-repo.pub

Ahora actualice la lista de repositorios e instale

# apt update
# apt install i2p i2p-keyring

Para Ubuntu, Mint y Trisquel el procedimiento es ligeramente diferente ya que usaremos un PPA para realizar la instalación.

# apt-add-repository ppa:i2p-maintainers/i2p
# apt update
# apt install i2p

Para iniciar el programa después de la instalación (sin importar el método utilizado) podemos utilizar alguno de los siguientes comandos.

  • A petición del usuario
$ i2prouter start
  •  Como servicio
# dpkg-reconfigure i2p

Si puede, cuando instale por primera vez, recuerde ajustar su NAT/cortafuegos. Los puertos a abrir pueden verse en la web de configuración de la red en la consola del router.

Si quiere acceder a eepsites (sitios web en la red I2P) a través su navegador, eche un vistazo a la página sobre configuración para proxy del navegador para ver unas instrucciones sencillas.

Referencias:


Tagged: anonimo, i2p, red

Jesus Palencia: Monitorea lo que sucede en tu GNU/Linux con Iftop, Iotop y Htop

$
0
0

En GNU/Linux existen multitud de herramientas dedicadas a monitorear lo que sucede en nuestro sistema y a veces seleccionar la herramienta adecuada puede resultar difícil, es por eso que hoy les hablare sobre iftop, iotop y htop, tres herramientas que a pesar de ser utilizadas mediante el terminal resultan súper fáciles de manejar y nos permiten observar con detalle lo que sucede en nuestro sistema.

La primera de las tres se llama iftop, una herramienta que produce una lista frecuentemente actualizada de las conexiones de red clasificadas por el uso de ancho de banda.

Iftop

La siguiente en la lista se llama iotop, cuyo propósito es mostrarnos una lista de los procesos de lectura/escritura de los discos en nuestro sistema y la velocidad de dicho acceso organizándolo de mayor a menor.

iotop

Por ultimo les hablare de htop, para quienes conocen el comando top notaran que existen algunas similitudes y algunas diferencias, su interfaz se enfoca en mejorar la experiencia de los usuario del comando top mediante colores y barras que hacen mas fácil entender la información que se muestra.

Htop

La instalación de cualquiera de estas herramientas es bastante sencilla, solo debes ejecutar el comando correspondiente a tu distribución.

# apt install iftop iotop htop

# yum install iftop iotop htop

# pacman -S iftop iotop htop

Para su ejecución solo debes abrir un terminal como root o utilizar sudo.

# iftop
# iotop
# htop

Referencias:


Tagged: htop, iftop, iotop, monitoreo
Viewing all 1457 articles
Browse latest View live