Monthly Archives: December 2012

Compilar Mozilla Firefox

Un poco harto de Iceweasel que es la versión de Firefox para Debian, la cual va todavía por la versión 10, y que los chicos de Mozilla no sacan una versión del navegador para los 64 bits me puse a leer la documentación para compilarlo por mi mismo.

El proceso es bastante sencillo. En pocos paso tendremos la versión en desarrollo.

Pre requisitos

Primero debemos instalar algunos paquetes que nos haran falta para compilar el código

Ubuntu

# apt-get install mercurial g++ make autoconf2.13 yasm libgtk2.0-dev libglib2.0-dev libdbus-1-dev libdbus-glib-1-dev libasound2-dev libcurl4-openssl-dev libiw-dev libxt-dev mesa-common-dev

Debian

# aptitude install mercurial libasound2-dev libcurl4-openssl-dev libnotify-dev libxt-dev libiw-dev libidl-dev mesa-common-dev autoconf2.13 yasm libgtk2.0-dev libdbus-1-dev libdbus-glib-1-dev

openSUSE/SUSE Linux Enterprise

# zypper install \
  make cvs mercurial zip gcc-c++ gtk2-devel xorg-x11-libXt-devel libidl-devel \
  freetype2-devel fontconfig-devel pkg-config dbus-1-glib-devel mesa-devel \
  libcurl-devel libnotify-devel alsa-devel autoconf213 libiw-devel yasm

Arch Linux

# pacman -Syu base-devel zip unzip freetype2 fontconfig pkg-config gtk2 dbus-glib iw libidl2 python2 mercurial alsa-lib curl libnotify libxt mesa autoconf2.13 yasm wireless_tools

Descargar el código

Vamos a sincronizar contra un repositorio de Mercurial, así que podemos crear un directorio en nuestro $HOME, cuando sincronicemos se creará el directorio mozilla-central.

Para sincronizar, entramos al directorio y escribimos:

$ hg clone https://hg.mozilla.org/mozilla-central

Dependiendo de nuestra conexión tardará más o menos.

Compilando

A la hora de compilar tenemos la oportunidad de configurar a nuestro gusto el software mediante el uso del fichero .mozconfig situado en /path/to/mozilla-central. Sin embargo es muy importante saber qué se está haciendo. Si no queremos enredarnos en este asunto, la compilación con los valores por defecto produce un software idéntico al que libera Mozilla con cada lanzamiento.

Para compilarlo, los desarrolladores incluyen un script que facilita la tarea. Entramos al directorio y lo ejecutamos.

$ cd /path/to/mozilla-central
$ ./mach build

La compilación tardará más o menos según la máquina en la que se ejecute.

Ejecución

Una vez haya acabado tendremos un fichero binario situado en:

/path/to/mozilla-central/obj-.../dist/bin/firefox

Los puntos suspensivos se completaran según la arquitectura, por ejemplo en mi caso es:

obj-x86_64-unknown-linux-gnu

Actualizando

A partir de ahora, cada vez que queramos obtener la última versión del navegador tendremos que actualizar el repositorio haciendo esto:

hg pull -u

y volveremos a ejecutar el comando march como hemos indicado arriba.

Referencia

Mozilla Developer Network – Simple Firefox build

Programar Encendido de PC

Hace un par de días publicaban en Linux.com un artículo que me gustó mucho, consistía en usar el RTC (Real Time Clock) de la placa base para programar el encendido del PC a través del pseudo-sistema de fichero /sys.

La idea se basa en escribir en uno de los pseudo ficheros la hora a la que se desea encender la máquina. No se necesita nada más.

Uno de los beneficios que no ofrece en nuestro día a día sería poder programar un apagado por algún mantenimiento que nosotros no controlamos (podrían cortar la luz para alguna reparación) y programar un encendido cuando estimemos que se ha terminado ese mantenimiento.

Para empezar debemos comprobar que nuestra versión de Kernel soporta rtc lo vemos así:

# grep -i rtc /boot/config-$(uname -r)

Que debe devolver:

[...]
CONFIG_HPET_EMULATE_RTC=y 
CONFIG_PM_TRACE_RTC=y 
CONFIG_RTC_LIB=y 
CONFIG_RTC_CLASS=y 
CONFIG_RTC_HCTOSYS=y 
CONFIG_RTC_HCTOSYS_DEVICE="rtc0" 
[...]

También es posible verlo a través de los logs del Kernel:

# grep -i rtc /var/log/messages 
# grep -i rtc /var/log/kern.log

Que debe salir:

Dec  2 08:14:38 asgard kernel: [    0.853916] rtc_cmos 00:03: RTC can wake from S4
Dec  2 08:14:38 asgard kernel: [    0.854031] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0
Dec  2 08:14:38 asgard kernel: [    0.854053] rtc0: alarms up to one month, y3k, 114 bytes nvram, hpet irqs
Dec  2 08:14:38 asgard kernel: [    0.855641] rtc_cmos 00:03: setting system clock to 2012-12-02 07:14:23 UTC (1354432463)

Aquí muestra un par de cosas interesantes, la primera es que el reloj está sincronizado UTC e implica que no debemos tener en cuenta el cambio de horario de verano/invierno y que el dispositivo es rtc0, podría pasar, aunque es poco frecuente, que hubiera más de uno.

Probando

Ahora ya estamos listos para probar el invento, para ello solo necesitamos dos pasos:

Primero poner a cero el contador de la alarma:

# echo 0 > /sys/class/rtc/rtc0/wakealarm

Y segundo poner la alarma:

# echo $(date '+%s' -d '+ 3 minutes') > /sys/class/rtc/rtc0/wakealarm

Si ahora hacemos un cat del fichero veremos un número como este 1354444166 que es la fecha en formato epoch (segundos transcurridos desde el 1 de enero de 1970) y es el formato de tiempo que usa UNIX internamente.

Ahora podemos apagar el PC y ver como pasados los tres minutos arranca de nuevo.

A partir de aquí ya podemos escribir un script que simplifique la tarea, si queremos que se apague a cierta hora y se encienda de nuevo sin que tengamos que preocuparnos. O cosas así.

Referencia

Artículo original publicado por Carla Schroder en Linux.com con licencia Creative Commons 3.0