Albóndigas gemelas (o de las tontunas que se hacen con el Photoshop)

chuleta Observad atentamente las albóndigas de las dos latas de aquí abajo. ¡Si!¡Son la misma! No me puedo imaginar que alguien piense que es más difícil hacerle una foto a una albóndiga que coger una foto ya hecha y modificar con el photoshop el cubierto que la sostiene y los guisantes que la acompañan… O a lo mejor es que se trata de un modelo de albóndiga de una belleza sin parangón y yo, ay, no soy capaz de apreciarlo…

Si, ya, es una tontuna… pero llevo dos días con ella en la cabeza y no quiero volver a dejar abandonado el blog otra vez. Espero que mi lector no me lo tenga mucho en cuenta 😉

find, ejemplos de uso

chuleta El comando find es uno de los más útiles y versátiles de que disponen nuestros Linux. La potencia y la cantidad de opciones disponibles de esta utilidad es increible. Yo, que tengo una pésima memoria, tengo una chuletilla donde voy recopilando los más útiles que encuentro y/o he usado en alguna ocasión. Os copio aquí una selección y una pequeña introducción previa con los comandos más básicos para los novatos.

NOTA: Si no ejecutas el comando como root habrá muchos archivos y/o directorios a los que no tengas acceso y a los que, por tanto, el comando find no podrá acceder y no aparecerán en la lista. Aún como root es normal que en ocasiones te encuentres errores de acceso en determinados ficheros. Algo como esto:

find: «/proc/9308/task/9308/fd/5»: No existe el archivo o el directorio

NOTA (y II): Piensa que puedes combinar fácilmente entre si la mayoría de los ejemplos que veremos a continuación para obtener búsquedas aún más precisas.

Si queremos buscar un archivo de nombre archlinux.iso en nuestro equipo:

find / -name archlinux.iso

Si queremos restringir la búsqueda al directorio /opt (y todo lo que haya debajo):

find /opt -name archlinux.iso

En cualquiera de los casos anteriore podemos usar comodines en el nombre del archivo:

find / -name archlinux*.iso

Y si queremos que la búsqueda sea «insensible» a que el nombre del archivo (o la parte de este que especificamos) esté en mayúsculas o minúsculas:

find / -iname archlinux*.iso

Si sólo estamos interesados en encontrar directorios:

find / -type d -name log

Y sí sólo queremos encontrar ficheros:

find / -type f -name temp

Para encontrar archivos con distintos patrones (por ejemplo todos los iso y los tar.gz):

find /mnt/temp -type f \( -name *.iso -o -name *.tar.gz \)

O archivos que no cumplan un patrón (todos los que no sean iso):

find /mnt/temp/downloads -type f -not -name *.iso

Para encontrar archivos y directorios vacíos:

find / -empty

Para encontrar los ficheros que pertenecen a un determinado usuario:

find /opt -user josemaria

Para encontrar todos los ficheros con un determinado patrón cuyo contenido ha sido modificado por última vez hace exactamente tres días:

find /mnt/datos *.odt -type f -mtime 3

Idem pero modificados por última vez hace menos de 7 días:

find /mnt/datos *.odt -type f -mtime -7

Idem pero modificados por última vez hace más de un año:

find /mnt/datos *.odt -type f -mtime +365

NOTA: Si cambiamos mtime por atime en los tres ejemplos anteriores se realiza la búsqueda teniendo en cuenta el momento del último acceso al fichero y si usamos ctime se tiene en cuenta la última modificación no sólo del contenido del fichero sino también de sus atributos (propietario, permisos, etc.)

Para buscar los archivos con un determinado patrón y guardarlos comprimidos:

find /mnt/temp -type f -name *.txt | xargs tar cvzf textos.tar.gz

Para buscar los archivos con un determinado patrón y borrarlos:

find /mnt/temp -type f -name *.txt -exec rm {} \;

Para encontrar todos los archivos de más de 500 Megas:

find / -type f -size +500M

Idem al anterior pero mostrando el tamaño del archivo (en bytes) antes del nombre:

find / -type f -size +500M -printf '%s %p\n'

Para buscar los 10 archivos o directorios que más espacio ocupan:

find / | sort -nr | head -10

NOTA: ¿find o locate? La única ventaja de locate frente a find es que es más (mucho más) rápido, así que si realizas búsquedas a menudo y quieres que sean como centellas no te leas este texto que no es para ti. Las ventajas de find frente a locate son muchas otras (¡todas las demás que se te ocurran!). Y si no me crees leete esto.

Publicidad: Código de descuento para hosting en Gigas

hosting Gigas, la empresa de hosting en la que está alojado este blog desde hace ya más de dos años (y eso que siempre he sido un culo inquieto para esto de los hostings) ofrece en estos momentos un par de cupones de descuento para algunas de sus modalidades de hosting, así que si estás buscando alojamiento en la web tenlo en consideración. No son los más baratos, es verdad, pero si uno de los que dan mejor soporte y servicio desde nuestro país y con soporte en español. Y con estos cupones el precio es realmente competitivo.

En la información que me han enviado sobre estos cupones no pone hasta cuando son válidos. Lo digo por si pasas por aquí dentro de unas semanas y ya no valen. No me lo eches en cara que no tengo ni idea ¿vale?

Los cupones son estos:

  • INTRO25 – Cupón válido para planes Nova y Pro con facturación semestral o anual (25% de descuento).
  • EXPERT30 – Cupón válido para planes Élite y Summun con facturación mensual, semestral o anual (30% de descuento).

DISCLAIMER: Si contratas después de entrar por mi enlace de referidos yo me llevo unas pelillas para que mi próxima renovación me salga un poco más barata pero a ti no te supone cargo alguno adicional. Palabra 😉

Pasar de http a https en una web con nginx y wordpress

nginx «Papá» Google dejó claro hace unos meses que quería darle un empujoncito en sus rankings a quienes usaran https en lugar de http. Y allá vamos todos como tiernos corderitos a hacer la migración. ¡Faltaría más! Lo bueno (por verle algo) es que a los que esto no nos va ni nos viene nos sirve para motivarnos a remozar un poquillo el blog y hacer cosas nuevas. Y en eso estamos. Hasta hace bien poquito si queríamos usar https en una web y no queríamos gastarnos dinero en certificados teníamos las opciones que nos ofrecían StartSSL o CaCert. Pero desde finales del año pasado contamos con Let’s Encrypt: un proyecto patrocinado, entre otros, por la EFF y Mozilla del que todo el mundo habla maravillas. Había que probarlo, estaba claro.

Con Lets Encrypt no hacemos la instalación de un certificado a la antigua usanza, sino que instalamos en nuestro servidor un programa que se encarga de realizar la instalación y posterior renovación periódica de forma automática. Además, si usamos Apache se encarga de realizar la configuración necesaria en nuestro servidor de forma automática. Está previsto que en el futuro también existirá un script para nginx pero de momento esta posibilidad no existe aún.

Nuestro punto de partida es un servidor web que funciona en Debian 8.4 usando nginx como servidor web y wordpress como CMS. El fichero de definición para nuestro virtualhost es de lo mas sencillito que se despacha:

server {
        listen   80 default_server;
        root /var/www/myblog;
        index index.php;
        server_name www.myblog.com;
        access_log /var/log/nginx/myblog-access.log;
        error_log /var/log/nginx/myblog-error.log;
        location / {
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
              root /usr/share/nginx/www;
        }
        location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_param SCRIPT_FILENAME $request_filename;
		}
}

Lo primero que necesitamos es instalar el cliente de Lets Encrypt. Para ello ejecutamos lo siguiente (con privilegios de root):

apt-get install -y git
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
cd /opt/letsencrypt
./letsencrypt-auto

El código anterior instala el paquete git y copia el código necesario al directorio /opt/letsencrypt. Luego nos posiciona en dicho directorio y ejecuta el script que realizará la instalación de dependencias necesarias (augeas, gcc y python), instalará los certificados raices en nuestro servidor y creará el directorio /etc/letsencrypt.

Lo siguiente que necesitamos es crear un directorio temporal para letsencrypt accesible a través de nuestro servidor web. En la documentación nos recomiendan hacerlo de la siguiente forma:

cd /var/www
mkdir letsencrypt
chown www-data:www-data letsencrypt

En tercer lugar crearemos un fichero de configuración con los datos del certificado que queremos crear. Dicho fichero debe de estar en el directorio /etc/letsencrypt/configs/ y debería de llamarse como el dominio para el que queremos crear el certificado pero añadiendo la extensión .conf. En nuestro caso, por tanto, el fichero se llamará www.myblog.com.conf y tendrá el siguiente contenido:

domains = www.myblog.com
rsa-key-size = 2048 # Si lo deseas puedes usar claves de 4096
server = https://acme-v01.api.letsencrypt.org/directory
email = josemaria@myblog.com # Recibirás recordatorios de renovación en esta dirección
text = True
authenticator = webroot
webroot-path = /var/www/letsencrypt/

Cuarto paso: tenemos que hacer accesible el directorio letsencrypt que creamos anteriormente en /var/www a nuestro servidor web. Para ello añadimos las siguientes líneas dentro del bloque server de la definición de nuestro virtualhost:

location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
    }

Para que el cambio anterior tenga efecto necesitamos hacer un reload del servicio de nginx:

systemctl reload nginx
NOTA: Para asegurarte de que no has metido la pata al editar los ficheros de configuración de nginx puedes hacer un test antes del reload:

nginx -t

Ahora ya vamos a solicitar el certificado a Let’s Encrypt. Para ello ejecutamos lo siguiente:

cd /opt/letsencrypt
./letsencrypt-auto --config /etc/letsencrypt/configs/www.myblog.com.conf certonly

Si todo ha salido bien se descargará el certificado a nuestra máquina y obtendremos una salida similar a esta:

Checking for new version...
Requesting root privileges to run letsencrypt...
   /root/.local/share/letsencrypt/bin/letsencrypt --config /etc/letsencrypt/configs/www.myblog.com.conf certonly

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/www.myblog.com/fullchain.pem. Your
   cert will expire on 2016-07-10. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
 - If you like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Fíjate que el certificado descargado es válido sólo durante seis meses. Acuerdate de esto que luego veremos como renovarlo. Bien. Pues ya nos queda sólo ún último paso para terminar: tenemos que modificar de nuevo el fichero de definición del virtualhost de nuestro servidor web para que atienda las peticiones https, sepa donde está el certificado que necesita para ello y redireccione todas las peticiones que se hagan a través del puerto 80 al nuevo servicio que reside en el 443. El nuevo fichero de definición de virtualhost quedaría como sigue:

server {
        listen   80;
        server_name www.myblog.com;
        return 301 https://www.myblog.com/$request_uri;
}

server {
        listen   443 ssl default_server;
        root /var/www/myblog;
        index index.php;
        server_name www.myblog.com;
        location /.well-known/acme-challenge {
        	root /var/www/letsencrypt;
    	}
        ssl_certificate /etc/letsencrypt/live/www.myblog.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.myblog.com/privkey.pem;

        access_log /var/log/nginx/myblog-access.log;
        error_log /var/log/nginx/myblog-error.log;
        location / {
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
              root /usr/share/nginx/www;
        }
        location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_param SCRIPT_FILENAME $request_filename;
		}
}
NOTA: Si quieres ver que líneas hemos añadido basta con que compares con las líneas que hemos dejado un poco más arriba 😉

Volvemos a hacer un reload de la configuración de nginx y nuestro servidor ya debería de funcionar correctamente con https y, es más, redirigir todas las peticiones de enlaces a través de http que hubiera en cualquier sitio de internet al nuevo servicio https. Puedes comprobar las características del nuevo certificado que acabas de instalar a traves de los servicios de SSLABS

¿Hemos dicho que hemos terminado? Bueno, en realidad no… Faltarían un par de detallitos. El primero, acordarte de que el certificado caduca a los seis meses. Para renovarlo basta con ejecutar de nuevo lo siguiente:

cd /opt/letsencrypt
./letsencrypt-auto --config /etc/letsencrypt/configs/www.myblog.com.conf certonly

Pero los chicos que llevan nginx nos han dejado un útil script que podemos crear y programar desde crontab:

#!/bin/sh

cd /opt/letsencrypt/
./letsencrypt-auto --config /etc/letsencrypt/configs/my-domain.conf certonly
if [ $? -ne 0 ]
 then
        ERRORLOG=`tail /var/log/letsencrypt/letsencrypt.log`
        echo -e "The Let's Encrypt cert has not been renewed! \n \n" \
                 $ERRORLOG
 else
        nginx -s reload
fi
exit 0

Para que funcione debes de crear un directorio llamado letsencrypt colgando de /var/log. Allí se dejarán los mensajes de error en caso de que la renovación no pueda realizarse correctamente. Ah, y no apures los seis meses de vida del certificado hasta el final. Por si acaso… Lets Encrypt nos deja renovar nuestros certificados hasta 5 veces al día, así que si lo programas para que se ejecute cada cuatro meses, por ejemplo, no va a morirse nadie 😉

En segundo lugar, si nuestra web lleva funcionando desde hace tiempo con http, google nos tendrá indexados en multitud de sitios y si no queremos perder el ranking de esos enlaces debemos de informarle del cambio. Existe una guía editada por la propia Google donde nos dicen paso a paso como hacer esto.

En tercer y, ahora si, último lugar, aunque nuestro servicio redirige todas las peticiones http a https, estas redirecciones podrían penalizar un poco el rendimiento de nuestra web. Debemos de tratar de ir eliminando los antiguos enlaces que estén en nuestra mano y para ello deberíamos de empezar por la propia configuración de wordpress cambiando la dirección del sitio en la entrada de Ajustes Generales.

Si necesitas alguna otra cosa no cubierta aquí tienes disponible un completito manual aquí

ACTUALIZACIÓN: La mejor forma ahora de instalar los certificados de Let’s Encrypt es usar certbot. Además hay otros cambios sobre lo aquí escrito: un paquete en Debian backports llamado certbot, la caducidad de los certificados se ha bajado a tres meses y alguna cosilla mas… Así que usa este artículo como base si quieres pero no te lo creas todo a pies juntillas que se ha quedado viejo muy pronto!

Nombres de fichero con marcas de tiempo o secuenciales

chuleta A veces necesitamos generar ficheros a intervalos regulares en un determinado directorio sin perder los creados anteriormente. Para hacerlo de forma automática y desde un script es necesario que los nombres de los ficheros generados sean diferentes en cada ocasión. Existen distintas formas de hacer esto. Os voy a contar mis dos favoritas con un ejemplo en el que volcamos en el fichero un listado con los procesos en ejecución en el momento de crearlo.

En el primer método creamos un fichero cuya marca distintiva es un número secuencial que empieza por el 0 y que se irá incrementando de 1 en 1. En este ejemplo los ficheros creados serán ps_0.txt, ps_1.txt, etc.

#!/bin/sh
cd /var/archivos/
numero=$(ls ps* | wc -l)
fichero=ps_$numero.txt
ps aux --sort -rss > $fichero

El segundo método usa una marca de tiempo que incluye año, mes, día, hora y minuto. Al generar el fichero en el momento de escribir este texto el nombre sería ps_20160401-17:55.txt

#!/bin/sh
cd /var/archivos/
fecha=`date +%Y%m%d-%H:%M`
fichero=ps_$fecha.txt
ps aux --sort -rss > $fichero

El Document Freedom Day en Madrid de la mano de Pandora FMS

DFD El próximo día 30, el último miércoles del mes de marzo, se celebra internacionalmente el Document Freedom Day, un evento promovido por la FSF para concienciar sobre la importancia de usar estándares abiertos en los documentos. En Madrid la gente de Pandora FMS han organizado una charla y un taller práctico a las 11.00. Tienes más información sobre el evento en el enlace anterior.

Chuletillas (y XXXXIV) – Liberar espacio en un servidor FTP lleno

chuleta ¿Te has quedado sin espacio alguna vez en un servidor FTP? Si te ha pasado te habrás llevado la sorpresa de que no puedes eliminar ningún archivo para liberar espacio porque si el servidor FTP está completamente lleno no es posible. Si, si, parece de broma pero así es:

mdelete *.tar.gz
550 Could not mdelete *.tar.gz: No space left on device

La solución es sencilla, pero hay que saberla 😉 . Basta con enviar al servidor FTP un fichero vacío con 0 bytes con el mismo nombre que uno de los que queremos eliminar para liberar espacio. La operación de sustitución si se llevará a cabo correctamente y a partir de ahí tendremos ya espacio para hacer un borrado convencional.

Script desatendido de conexión a un servidor FTP

Al contratar espacio de backup en la mayoría de las empresas de hosting la opción más habitual sigue siendo a través de FTP. Para automatizar las copias de forma desatendida necesitamos programar estas, habitualmente lanzando un script a través de cron. Si buscas un modelo para construir el tuyo puedes hacerlo a partir de este:

#!/bin/sh

HOST='ip_del_ftp_server'
USER='nombre_de_usuario'
PASSWD='password'

ftp -n -i $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd /file_backups
lcd /home/administrador/file_backups
mput *
cd /mysql_backups
lcd /home/administrador/mysql_backups
mput *
quit
END_SCRIPT
exit 0

El script supone que ya tenemos los ficheros que queremos copiar en dos directorios locales: /home/adminstrador/file_backups y /home/administrador/mysql_backups. Haremos la copia en dos directorios del servidor ftp que se llaman /file_backups y mysql_backups. Los parámetros -n y -i de la conexión al servidor desactivan, respectivamente, el autologin y el modo interactivo (para evitar que el servidor ftp nos pida confirmación en cada operación de copia).

Viviendo de las rentas

Estoy en un ranking, chispas. Hace más de seis meses que no escribo nada en el blog y van y me nominan en una lista de administradores de sistemas. Y yo voy y me meto en el puesto número 8. Así sin hacer publicidad ni nada. Como el zapatero ese al que le hacían las botas los duendecillos y se llevaba el sólo todo el mérito el muy cabroncete… En fin, esto me confirma de una vez por todas lo que siempre he sospechado: que cuanto menos escriba por aquí más visitas tengo y mejor funciona el blog. No es coña. Tampoco es una buena forma de motivarme a retomarlo salvo que me entre la mala leche y decida joder a mi lector volviendo por aquí más a menudo como un BOFH vengativo. Es una opción, si…

logo pretencioso y de autobombo

Pero bueno, en cualquier caso y para que quede constancia de ello aquí va el enlace con el ranking. Hay otros 18 y alguno, incluso, ha quedado por encima mía. Seguro que de todos ellos puedes aprender un poquito más de lo que lo haces por aquí, oh amable lector. Pero vuelve de vez en cuando, por favor, que aún no he decidido si yo voy a hacerlo o no… Por si acaso.

Extender el tiempo de evaluación de productos Microsoft

windows Me suele incomodar bastante llegar a un instituto y encontrarme que las licencias de los sistemas operativos y programas de Microsoft (ya sea en máquinas virtuales o reales) son piratas. A veces, incluso, que algún profesor instruya a sus alumnos acerca de como crackearlas o, en algún caso, que le pida consejo de como hacerlo al espabilado de la clase. En su casa cada uno puede hacer lo que le plazca, pero en un centro de enseñanza donde se supone que estamos preparando a la gente para salir al mundo laboral no me parece una buena práctica en absoluto. No me gusta la política de licencias de Microsoft, pero siempre que he trabajado en una empresa me he negado a piratear licencias (aunque no siempre he podido mantener esta postura, para que negarlo). Pero mi idea en este sentido es que el que las quiera que las pague, y quien no quiera pagarlas, tiene buenas alternativas a todos sus sistemas y productos.

Además, si necesitas usar licencias Microsoft (y en ciclos formativos de Informática, como comprenderéis, es imprescindible) existen la posibilidad de usar licencias gratuitas de evaluación. Se pueden descargar desde aquí previo registro y suelen tener una validez inicial de entre 90, 120 o 180 días. Las licencias de evaluación son plenamente funcionales, pero una vez transcurrido el plazo estipulado suelen reiniciar el equipo sin previo aviso tras cada hora de funcionamiento.

Aunque los equipos en los centros educativos suelen «reformatearse» todos los años estos tiempos son insuficientes para un curso, pero pueden extenderse usando el Server License Manager. Una vez concluido el período de evaluación solo hay que ejecutar lo siguiente:

slmgr /rearm
Ejecutando un intérprete de comandos con privilegios reales de administrador en Windows 8.1IMPORTANTE: Recuerda que en los nuevos windows de escritorio aunque tu usuario tenga perfil de administrador no trabaja normalmente con esos privilegios (¡afortunadamente!), así que si no estás usando el verdadero administrador del sistema debes de ejecutar estos comandos forzando privilegios reales de administrador. Para ello, busca el icono del intérprete de comandos y pulsando sobre el el botón derecho del ratón elige la opción de «ejecutar como administrador». Si no lo haces así, el comando dará un error diciendo que no puede ejecutarse.

Tras ejecutar esa instrucción y reiniciar el equipo la licencia se renovará por un tiempo igual al que tuvimos una vez instalada. Pero cuidado, no son tiempos acumulativos. Me explico: si instalamos un windwows 2008 server con 180 días iniciales de evaluación y transcurridos los primeros 100 días ejecutamos esa orden no nos encontraremos con un equipo al que restan 260 días para finalizar la evaluación, sino 180. Igual que recien instalado. Así que es importante que no «renovemos» la licencia hasta que esté agotado el periodo inicial. Esto es fácil puesto que Microsoft nos informa cuando el tiempo expira, pero si quieres hacerlo de forma más eficiente la propia Microsoft te explica como automatizar este procedimiento mediante un script. También dispones de opciones para comprobar los días que restan hasta la expiración (/dlv) y el número de renovaciones que has consumido y que aún te restan (/dli):

Y ahora lo mejor: esta renovación puede hacerse varias veces. Habitualmente al menos tres veces, pero no es una regla fija: A veces sólo permite una renovación adicional a los 90 días base, lo que nos da un período total de pruebas de 180 días (6 meses) mientras que otrs se nos permite hasta cinco o siete renovaciones de 180 días cada una (¡48 meses!¡Más que la vida útil de muchos equipos!

NOTA: El Server License Manager da mucho más juego de lo que he contado por aqui. Échale un vistazo a este texto si quieres ver otras utilidades para extender aún más la vida de tus licencias de evaluación 😉

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información

ACEPTAR
Aviso de cookies