15 junio 2013

Backup/Restore del MBR

Un registro de arranque principal, conocido también como registro de arranque maestro o por su nombre en inglés Master Boot Record (abreviado MBR) es el primer sector ("sector cero") de un dispositivo de almacenamiento de datos, como un disco duro. A veces, se emplea para el arranque del sistema operativo con bootstrap, otras veces es usado para almacenar una tabla de particiones y, en ocasiones, se usa sólo para identificar un dispositivo de disco individual, aunque en algunas máquinas esto último no se usa y es ignorado.

Backup del MBR

En UNIX y GNU/Linux se puede usar el comando dd para hacer una copia de seguridad del MBR (en este caso, del disco sda):

$ sudo dd if=/dev/sda of=/path/to/file/mbr.512.img bs=512 count=1

Si se quiere hacer una copia de seguridad del MBR, sería recomendable copiar los primeros 63 sectores del disco (que equivaldrían al primer cilindro del disco) y no sólo el primero, ya que nuestro sistema podría tener implementado el sistema GUID, el cual utiliza más sectores para guardar la información sobre las particiones del disco duro. La instrucción sería parecida:

$ sudo dd if=/dev/sda of=/path/to/file/mbr_63.512.img bs=512 count=63

Borrado del MBR

Para borrar el MBR, si no tenemos una copia de seguridad pero necesitamos eliminar la información de este sector, tenemos que poner los 512 bytes a cero:

$ sudo dd if=/dev/zero of=/dev/sda bs=512 count=1

Restauración del MBR

Desde la consola, igualmente, se puede restaurar el MBR

$ sudo dd of=/dev/sda if=/path/to/file/mbr.512.img bs=512 count=1


En los sistemas operativos de Microsoft no hay acceso directo al MBR. En DOS o Windows 9x, el programa de DOS fdisk junto con fdisk /mbr (del que no hay documentación) reescribirá el código del MBR. En Windows 2000 y posteriores, la consola de recuperación puede usarse para escribir el nuevo código del MBR al disco duro. Existen otras utilidades para editar la tabla de particiones del MBR directamente.

Si se está haciendo un backup del disco duro (lo que en inglés se conoce como ghosting) y da avisos de que no se encuentra el fichero de paginación, seguramente se pueda solucionar con fdisk /fixmbr (ejecutado desde un disquete, ya que no se podrá entrar en Windows).

13 junio 2013

Cambiar el UUID de una partición

Después de haber realizado un volcado de una partición sobre otra con el comando dd, es habitual que los UUID de ambas particiones queden iguales. En el caso del ejemplo, hemos hecho un volcado de la partición /dev/sda5 sobre la partición /dev/sda3. De ahí que ambas particiones tengan el mismo UUID.

$ sudo blkid
/dev/loop0: TYPE="squashfs"
/dev/sda1: LABEL="DELLUTILITY" UUID="805E-EA66" TYPE="vfat"
/dev/sda2: LABEL="OS" UUID="50A5-D2A7" TYPE="vfat"
/dev/sda3: UUID="294a6668-e7ac-46d6-9394-f5c19061fed4" TYPE="ext4"
/dev/sda5: UUID="294a6668-e7ac-46d6-9394-f5c19061fed4" TYPE="ext4"
/dev/sda6: UUID="3e2e04c1-f76a-43a3-865e-2cb3e415e140" TYPE="swap"

Lógicamente, el hecho de que dos particiones distintas tengan el mismo UUID va a generar un problema puesto que el sistema no va a poder distinguir entre ambas particiones. Para solucionarlo, vamos a cambiar el UUID de la partición /dev/sda3.

En nuestro caso, hemos consultado el archivo /boot/grub/grub.cfg y hemos podido recuperar el UUID original de la partición /dev/sda3 (147589f2-5680-4727-b1d6-acbc43d335c1). Si no fuera posible recuperar el UUID, siempre se puede generar uno nuevo con el comando uuidgen.

$ uuidgen
fdd9b2c0-ae0e-4c2b-a833-084462e97bd9

Finalmente, una vez conocemos el nuevo UUID para la partición podemos proceder al cambio y a la posterior comprobación.

$ sudo tune2fs /dev/sda3 -U 147589f2-5680-4727-b1d6-acbc43d335c1

$ sudo blkid
/dev/loop0: TYPE="squashfs"
/dev/sda1: LABEL="DELLUTILITY" UUID="805E-EA66" TYPE="vfat"
/dev/sda2: LABEL="OS" UUID="50A5-D2A7" TYPE="vfat"
/dev/sda3: UUID="147589f2-5680-4727-b1d6-acbc43d335c1" TYPE="ext4"
/dev/sda5: UUID="294a6668-e7ac-46d6-9394-f5c19061fed4" TYPE="ext4"
/dev/sda6: UUID="3e2e04c1-f76a-43a3-865e-2cb3e415e140" TYPE="swap"


29 mayo 2013

Eliminar el sufijo de país en Blogger

Desde hace ya un tiempo, Blogger añade a todos sus blogs el sufijo correspondiente al dominio TLD del país desde el que se realiza la consulta (.es si se visita desde España, .mx desde Mexico, .fr desde Francia, etc.). De este modo, si se visita este blog (ubicado en barralog.blogspot.com) desde Alemania, Blogger nos intentará redirigir automáticamente hacia barralog.blogspot.com.de.

Hay diversas razones por las que esto puede llegar a ser una molestia, por eso os indico una forma de solventarlo. Basta con insertar el siguiente código dentro del <head> de la plantilla.

<script type="text/javascript">
   //<![CDATA[
   // Eliminar el sufijo del TLD de cada país en blogger
   var host = document.location.hostname;
   var ruta = document.location.pathname;
   var positive = host.substr(host.lastIndexOf("."));
   if (positive != ".com") {
      var output = "http://" + host.substr(0, host.indexOf("."));
      output += ".blogspot.com/ncr" + ruta;
      window.location.replace(output);
   }
   //]]>
</script>

Nota: Esta acción no está penalizada en absoluto por Blogger y tampoco afecta a AdSense.

13 mayo 2013

Desconectar sesión remota

En algunas ocasiones se puede dar el caso de establezcamos una conexión por ssh a un servidor remoto y que, por la razón que sea, al cerrar esa conexión, la sesión haya quedado abierta. En este artículo veremos una forma de eliminar esa sesión remota "fantasma".

Habilitar HTTPS en apache

En algunas ocasiones (envío de formularios, páginas de autenticación, etc.) es necesario que nuestro servidor web pueda entregar páginas cifradas bajo el protocolo seguro HTTPS. En este artículo se muestran cuales son los pasos a seguir para i) generar un certificado SSL autofirmado y ii) configurar convenientemente el servidor apache2 para que pueda entregar la página https://www.midominio.com.

02 mayo 2013

Extraer lineas de un archivo

Actualmente estoy manipulando un fichero LDIF que tiene alrededor de 6.800.000 líneas.

El caso es que si utilizo un editor gráfico como por ejemplo gedit, al tener que manejar un archivo de ese tamaño, el sistema se cuelga. Por otro lado, según qué tipo de operación se deba realizar, el uso de editores en modo consola como nano o vim puede llegar a ser incómodo.

Para esos casos, puede servir de ayuda un pequeño script que nos permita la extracción de algunas líneas de código del archivo original. Basta con pasarle la línea de inicio, la línea final y el nombre del archivo sobre el que realizar la extracción.

if [ $# -eq 3 ]; then
   first=$1
   last=$2
   file=$3
   head -n $last $file | tail -n `expr $last - $first + 1`
else
   echo "Usage: `basename $0` [firstLine] [lastLine] [file]"
fi


05 abril 2013

perl: warning: Setting locale failed.

Al instalar cualquier paquete mediante el uso de apt-get en Ububtu Server 12.04 LTS, el sistema genera un error como este:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "en_US:en",
LC_ALL = (unset),
LC_TIME = "es_ES.UTF-8",
LC_MONETARY = "es_ES.UTF-8",
LC_ADDRESS = "es_ES.UTF-8",
LC_TELEPHONE = "es_ES.UTF-8",
LC_NAME = "es_ES.UTF-8",
LC_MEASUREMENT = "es_ES.UTF-8",
LC_IDENTIFICATION = "es_ES.UTF-8",
LC_NUMERIC = "es_ES.UTF-8",
LC_PAPER = "es_ES.UTF-8",
LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory

La forma de solucionarlo (fijando los locales en inglés y español) es la siguiente

$ sudo locale-gen en_US en_US.UTF-8 es_ES es_ES.UTF-8
Generating locales...
en_US.ISO-8859-1... done
en_US.UTF-8... up-to-date
es_ES.ISO-8859-1... done
es_ES.UTF-8... done
Generation complete.


$ sudo dpkg-reconfigure locales
Generating locales...
en_AG.UTF-8... done
en_AU.UTF-8... done
en_BW.UTF-8... done
en_CA.UTF-8... done
en_DK.UTF-8... done
en_GB.UTF-8... up-to-date
en_HK.UTF-8... done
en_IE.UTF-8... done
en_IN.UTF-8... done
en_NG.UTF-8... done
en_NZ.UTF-8... done
en_PH.UTF-8... done
en_SG.UTF-8... done
en_US.ISO-8859-1... up-to-date
en_US.UTF-8... up-to-date
en_ZA.UTF-8... done
en_ZM.UTF-8... done
en_ZW.UTF-8... done
es_ES.ISO-8859-1... up-to-date
es_ES.UTF-8... up-to-date
Generation complete.


15 diciembre 2012

Mi página web no se visualiza bien en IE

Uno de los principales retos a la hora de realizar un diseño web profesional es que la página se visualice correctamente en cualquier navegador. ¿Os imagináis que Facebook o Twitter sólo se vieran bien en Internet Explorer?

Para ello, la primera premisa es realizar una programación basada en estándares web. A pesar de eso, Internet Explorer suele dar algunos problemas ya que se trata de un navegador con una interpretación de los estándares un tanto "peculiar".

Es frecuente que un diseño web se vea bien en la mayoría de navegadores pero que Internet Explorer presente problemas de visualización. Para solventarlo, hay una solución muy simple y que suele funcionar: basta con añadir el siguiente meta tag justo al inicio del <head> de la página.

<head>
<meta http-equiv="X-UA-Compatible" content="IE=8" />
...
</head>


14 diciembre 2012

Ajustar el huso horario en PHP

Cuando invocamos la función string date ( string $format [, int $timestamp = time() ] ) en PHP, ésta nos devuelve una cadena con formato del tiempo indicado por el parámetro $timestamp o, en el caso de no indicar ningún timestamp, del momento actual.

Un problema típico con el que nos podemos encontrar al leer la fecha y la hora actual es que el servidor se encuentre en un huso horario distinto al de la prestación del servicio. Por ejemplo, cuando el hosting está en algún punto de EEUU y el servicio se está prestando en alguna parte de Europa.

Este problema se puede solucionar fácilmente de forma sencilla con la función bool putenv ( string $setting ) tal y como se muestra en este ejemplo:

<?php
   $now= time();
   echo "La hora de nuestro servidor es: " . date ("H:i, l j F Y", $now)."<br />";
   putenv("TZ=Asia/Tokio");
   echo "Y la hora en Tokio es: " . date ("H:i, l j F Y", $now) . "<br />";
?>

Sigue un listado con todos los husos horarios clasificados por área

11 diciembre 2012

Sincronizar el reloj con NTP en servidores Debian

Para los administradores de sistemas con multitud de equipos y servidores a su cargo es muy conveniente mantener los relojes de todos los equipos sincronizados. De ese modo, en el caso de producirse algún incidente de seguridad (pero no solo en ese caso), como todos los ficheros de log estarán sincronizados, el rastreo y secuenciación de los hechos es mucho más fácil.

Lo primero que necesitamos es instalar el paquete ntpdate.

# apt-get install ntpdate

El paso siguiente es el de sincronizar el reloj de cada sistema con un servidor de NTP. Para hacer eso basta con ejecutar el comando ntpdate nombre.del.servidor. Si nuestro equipo está detrás de un firewall es conveniente usar el parámetro -u del ntpdate para que use un puerto no privilegiado en la comunicación con el servidor NTP (ntpdate -u nombre.del.servidor).

Un servidor que funciona suficientemente bien para estos menesteres es swisstime.ethz.ch.

Sincronización automática

Vamos a asegurarnos que la sincronización se realice de forma periódica. Para ello, editaremos el fichero /etc/cron.hourly/ntp con el siguiente contenido para que se ejecute cada hora:

# vim /etc/cron.hourly/ntp
#!/bin/bash
/usr/sbin/ntpdate -u swisstime.ethz.ch

Para asegurarnos que se ejecutará sin problemas debemos de asignar permisos de ejecución al fichero /etc/cron.hourly/ntp

# chmod a+x /etc/cron.hourly/ntp

$ ls -lF /etc/cron.hourly/ntp
-rwxr-xr-x 1 root root 46 dec 11 13:39 /etc/cron.hourly/ntp*

Esto es todo. A partir de ahora, todos los equipos tendrán la misma (buena) hora.

16 octubre 2012

Cómo volver a crear el icono Mostrar escritorio en la barra de herramientas Inicio rápido en Windows XP

Para volver a crear el icono Mostrar escritorio usted mismo, siga estos pasos

Haga clic en Inicio y, en Ejecutar, escriba notepad en el cuadro Abrir y haga clic en Aceptar.

Copie y pegue el texto siguiente en la ventana del Bloc de notas.

[Shell]
Command=2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop

En el menú Archivo, haga clic en Guardar como y, a continuación, guarde el archivo en el escritorio como "Show Desktop.scf". El icono Mostrar escritorio se crea en el escritorio.

Haga clic y arrastre el icono Mostrar escritorio a la barra de herramientas Inicio rápido.

04 agosto 2012

Instalando symfony 1.4 en Mac OS X

Symfony es un completo framework diseñado para optimizar, gracias a sus características, el desarrollo de las aplicaciones web. Para empezar, separa la lógica de negocio, la lógica de servidor y la presentación de la aplicación web.

Proporciona varias herramientas y clases encaminadas a reducir el tiempo de desarrollo de una aplicación web compleja. Además, automatiza las tareas más comunes, permitiendo al desarrollador dedicarse por completo a los aspectos específicos de cada aplicación. El resultado de todas estas ventajas es que no se debe reinventar la rueda cada vez que se crea una nueva aplicación web.

En su momento vimos como realizar la instalación de symfony para Ubuntu. Hoy vamos a ver como realizar la instalación para Mac OS X

01 junio 2012

Cambiar la contraseña root de MySQL

Es posible que tengamos que administrar una base de datos MySQL y, por la razón que sea, no tengamos la correspondiente contraseña de root. Esta situación presenta un grave problema porque nos impide crear nuevas base de datos, nuevos usuarios, etc.

En este tutorial vamos a ver cómo se puede cambiar la contraseña de root de MySQL desde la cónsola del sistema y en unos pasos muy sencillos.

15 mayo 2012

Redirigir a una conexión segura https en Apache

Puede que, como administradores de un sistema, nos interese que todos los accesos a una determinada página web, se realicen siempre bajo protocolo seguro HTTPS.

Veremos dos posibilidades: Redirección permanente o Reescritura

11 mayo 2012

Autenticación mediante clave pública en SSH


El uso de claves públicas para acceder a servicios como SSH, SCP o SFTP, resulta una técnica más segura para autenticar dichos servicios que el esquema clásico de usuario y contraseña, al que estamos tan acostumbrados. Además, nos permite realizar una identificación automática y transparente, sin necesidad de tener que interaccionar, lo cual será de gran utilidad en la automatización de ciertas tareas rutinarias que, preferiblemente, deban realizarse de forma desatendida como por ejemplo la realización de copias de seguridad.