El blog de Javier Aranda

aprendiendo a ser ingeniero informático

Archivo para la categoría ‘Linux’

Scripts en init.d que dejan de ejecutarse al inicio en Ubuntu 9.10

0 comentarios ¡escriba uno!

Desde hace unas cuantas semanas he notado que en mi Ubuntu 9.10 no se inician algunos scripts situados en /etc/init.d pese a estar bien configurados (pues anteriormente funcionaban sin problemas) y los enlaces simbólicos en /etc/rc?.d también estaban correctamente creados. En mi caso, no se iniciaban servicios que tengo yo configurados (como lighttp, mongodb, etc) pero tampoco algunos “importantes” como cups (lo cual me hacía que cada vez que quería imprimir algo tuviera que iniciarlo manualmente con sudo /etc/init.d/cups start). Hoy me he puesto a ver que podía pasarle y me he topado con que se trata de un bug ya reportado, así que leyendo los comentarios hallamos la solución al menos por ahora: tenemos que instalar una versión anterior del paquete upstart, ejecutando para ello el comando:

sudo apt-get install upstart=0.6.3-10

Reiniciamos y ya se inician los servicios en el arranque del sistema.

Si queremos evitar que las actualizaciones automáticas o el uso del comando apt-get upgrade nos actualice el paquete upstart a la versión más reciente (lo que haría que volviésemos a tener problemas), podemos bloquear el paquete para que no sea actualizado. Para ello:

sudo apt-get install wajig
sudo wajig hold upstart

Nota: si quisiéramos desbloquearlo, basta con ejecutar:

sudo wajig unhold upstart

Escrito por javierav

1 Marzo 2010 a las 5:52 pm

Categoría: Linux

Etiquetado con , , , ,

Instalando mongoDB + driver PHP en Ubuntu 9.04

1 comentario

logo mongoDB

¿Qué es mongoDB?

Es una base de datos orientada a documentos de código abierto escrita en C++. A diferencia de otros sistemas de gestión de bases de datos, mongoDB no sigue el modelo relacional. La base de datos gestiona colecciones de documentos en objetos JSON. Está orientada a la web 2.0, la nube y las configuraciones de varios servidores de bases de datos. En la entrada Más allá de las bases de datos relacionales hablamos de la utilidad de este tipo de bases de datos.

Más información:

Descargando e instalando mongoDB

Existen dos formas de realizar este proceso: podemos descargar el código fuente y compilarlo o bajar directamente los binarios. En este artículo optaremos por lo segundo por la facilidad y comodidad.

En la sección de descargas de la web de mongodb tenemos varias opciones, aunque las que nos interesa es la correspondiente a la versión 1.0.0 para Linux 32 bits (el que use 64 bits deberá escoger su opción). Tras la descarga, tendremos un archivo tar.gz que descomprimiremos con los comandos habituales:

cd Escritorio
tar -zxvf mongodb-linux-i686-1.0.0.tgz
cd mongodb-linux-i686-1.0.0

Si observamos el contenido del directorio vemos que se organiza en los subdirectorios bin, include y lib. En principio ya podríamos ejecutar mongodb desde ese directorio, pero por cuestiones de orden y claridad, copiaremos el contenido de esas subcarpetas en los directorios de igual nombre bajo /usr/local, operación para la que necesitamos adquirir permisos de root.

sudo -s
mv bin/* /usr/local/bin
mv include/* /usr/local/include
mv lib/* /usr/local/lib

De aquí en adelante asumiremos que estamos logueados en la terminal como root. Como ya tenemos los archivos donde nos interesan, podemos eliminar la carpeta descomprimida y el archivo descargado:

cd ../
rm -fr mongodb-linux-i686-1.0.0 mongodb-linux-i686-1.0.0.tgz

Configuración inicial

Antes de iniciar el demonio de mongodb es necesario crear una serie de directorios de trabajo, ya que al no instalarse, estos directorios no se crean. El más fundamental será el directorio donde el gestor almacenará las estructuras necesarias para almacenar en el disco duro los datos. Por defecto la carpeta es /data/db pero en este tutorial guardaremos los datos bajo /var/lib/mongodb (mysql por ejemplo también guarda los datos bajo /var/lib). Para ello creamos el directorio:

mkdir /var/lib/mongodb

Este directorio es propiedad de root. En este tutorial el demonio mongod se ejecutará bajo el usuario root. Podríamos ejecutarlo bajo otro usuario existente o crear uno específico para ello, tras lo que podríamos cambiar la propiedad del directorio de los datos por la del usuario usado por mongod.

El demonio puede configurarse mediante una serie de parámetros (ejecutar mongod –help para una lista) pasados al ejecutable del demonio, pero esta forma es un poco sucia y puede exponer ciertas configuraciones a la vista de cualquier usuario del sistema que explore la lista de procesos. Por ello, mongodb permite ser llamado especificándole la ruta a un archivo de configuración (de tipo conf). Ya que existe esa posibilidad, nosotros la vamos a hacer de esa forma. Para ello creamos un directorio bajo /etc llamado mongodb:

mkdir /etc/mongodb

Y con cualquier editor creamos el archivo mongodb.conf y le asignamos el contenido:

nano /etc/mongodb/mongodb.conf
# Config file for MongoDB

dbpath = /var/lib/mongodb

Como puede observarse, la directiva de configuración dbpath (que podía fijarse como parámetro del demonio) se usa de forma análoga en el archivo de configuración, especificándole a la aplicación dónde se encuentra el directorio con los datos. Existen directivas que no reciben argumentos, por ejemplo –auth no requiere nada a continuación. En estos casos, en el archivo de configuración deberemos igualarlo a true. Continuando con el ejemplo, –auth quedaría como auth = true. Por el momento no usaremos más directivas. En la web oficial existe un apartado dedicado a cada parámetro que podemos usar para configurar mongodb.

Iniciando el demonio

Para ejecutar el demonio escribiremos (le indicamos la ruta al archivo de configuración con -f):

mongod -f /etc/mongodb/mongodb.conf

Y si todo va bien, obtendremos algo como esto:

Tue Oct 13 21:47:02 Mongo DB : starting : pid = 16139 port = 27017 dbpath = /var/lib/mongodb master = 0 slave = 0  32-bit 

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
**       see http://blog.mongodb.org/post/137788967/32-bit-limitations for more

Tue Oct 13 21:47:02 db version v1.0.0, pdfile version 4.4
Tue Oct 13 21:47:02 git version: afe21e02c11f9a923ab1c95edf6fdd95b9a4a51e
Tue Oct 13 21:47:02 sys info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686
Tue Oct 13 21:47:02 waiting for connections on port 27017
Tue Oct 13 21:47:02 web admin interface listening on port 28017

Tras esta operación ya tenemos al demonio listo para atender nuestras peticiones.

Instalar el driver para PHP

Para poder instalar el driver de mongodb para php debemos tener instalado el paquete PEAR y la versión de desarrollo de php. Si no lo tenemos instalado, sólo tenemos que ejecutar:

apt-get install php-pear php5-dev

Y para instalar el driver:

pecl install mongo

Configurar PHP

El siguiente paso y último de la instalación y configuración consiste en indicarle a php que debe cargar la nueva extensión que contiene el driver en sí. Para ello creamos el siguiente archivo:

nano /etc/php5/conf.d/mongodb.ini

Y le asignamos la carga del módulo y sus directivas de configuración:

extension=mongo.so

[mongo]
; If the driver should reconnect to mongo
mongo.auto_reconnect = true

; Whether to allow persistent connections
mongo.allow_persistent = On

; Maximum number of persistent connections (-1 means unlimited)
mongo.max_persistent = -1

; Maximum number of links (persistent and non-persistent, -1 means unlimited)
mongo.max_connections = -1

; Default host for mongo connection
mongo.default_host = www.example.com

; Default port for mongo database
mongo.default_port = 42

; When saving files to the database, size of chunks to split them into
mongo.chunk_size = 1024

; Specify an alternate character to $ to use for special db functions ($set, $push, $exists, etc.)
mongo.cmd = "$"

Tras esta operación debemos reiniciar Apache para que PHP cargue de nuevo la configuración y los módulos (sólo si trabajamos con mod_php).

/etc/init.d/apache2 restart
Si ejecutamos un phpinfo() observamos que la extensión se ha cargado perfectamente.

Si ejecutamos un phpinfo() observamos que la extensión se ha cargado perfectamente.

Escrito por javierav

13 Octubre 2009 a las 10:42 pm

Categoría: Linux, PHP

Etiquetado con , , ,

Crear un repositorio git remoto a través de ssh

0 comentarios ¡escriba uno!

Brevemente explicaré como configuro un repositorio Git remoto donde almacenar una copia de mi repositorio local. Existen varias formar de hacerlo, por lo que si quieres ampliar la información te recomiendo la lectura del capítulo dedicado a ello del libro ProGit. Y si no tienes inconveniente en que tu repositorio sea público y no esté en tu servidor, os recomiendo el uso de Github.

1. Requisitos

Para poder disponer de nuestro repositorio remoto necesitamos:

a) Estar en posesión obviamente de un servidor dedicado, vps o cualquier servicio con acceso ssh (no tiene por que ser root).

b) Que el servidor tenga instalado Git (o si tenemos acceso root instalarlo nosotros mismos)

2. Creación del repositorio remoto en tu servidor

a) Entramos bajo el usuario con el que vayamos a conectarnos normalmente para realizar las actualizaciones (si queremos podemos crear tantos usuarios linux como desarrolladores tengamos, aunque git es independiente en eso pues lo que cuenta es los datos del commiteador y no del usuario ssh con el que nos hayamos conectado). Supongamos que utilizaremos el usuario desarrollo cuyo directorio es /home/desarrollo.

$ ssh desarrollo@git.example.com

b) Creamos el directorio donde se guardará el repositorio y lo inicializamos como un repositorio de git sin área de trabajo (ya que no la vamos a utilizar pues no trabajamos desde el servidor, así que sólo necesitamos guardar los archivos del control de versiones propios de git).

$ mkdir -p git/proyecto1.git
$ cd git/proyecto1.git
$ git init --bare

Si este proceso lo hiciéramos bajo root, no debemos olvidarnos de cambiar el propietario de este directorio por el usuario desde el cual vayamos a conectarnos a ssh para realizar las operaciones de git.

3. Creación del repositorio local

Si ya tuvieramos un repositorio creado, pasar al paso siguiente.

Para crear un repositorio sólo tenemos que irnos al directorio de trabajo e inicializar un repositorio:

$ cd ~/mis_proyectos
$ mkdir proyecto1
$ cd proyecto1
$ git init

4. Añadir el repositorio remoto a nuestro repositorio local

Para que la sincronización pueda llevarse a cabo, debemos añadir nuestro repositorio remoto:

$ git remote add origin ssh://desarrollo@git.example.com/home/desarrollo/git/proyecto1.git

5. Crear y/o subir el contenido al servidor remoto

Si no tenemos contenido creado, deberemos crear alguno para poder subirlo:

$ touch README
$ git add README
$ git commit -m 'mi primer commit'

Y ahora subimos los cambios al servidor con:

$ git push origin master

5. Clonando el repositorio remoto

Si desde otro equipo deseamos obtener nuestro código, sólo tenemos que clonar el repositorio:

$ git clone ssh://desarrollo@git.example.com/home/desarrollo/git/proyecto1.git

 

 

Escrito por javierav

29 Septiembre 2009 a las 4:24 pm

Categoría: Linux

Etiquetado con , ,

Recompilar PHP5 con soporte para la libreria GD de PHP (GD BUNDLED) en Ubuntu

2 comentarios

Si queremos manipular imágenes desde nuestro script php podemos usar varias librerías gráficas para ello (GD, ImageMagick, Netpbm…) aunque sin lugar a dudas la más utilizada en la primera de ellas, librería desarrollada por la gente de boutell.com y que actualmente va por la versión 2, la cual incluye muchas mejoras respecto a la 1. Pero, a pesar de esas mejoras, todavía posee algunas carencias que nos harían la vida más fácil. En este contexto, los desarrolladores de PHP deciden realizar un fork (clon) de la librería original de Boutell y comienzan a incorporarle numerosas funciones nuevas: es lo que se conoce como la librería GD Bundled (empaquetada, que va con php).

Esto no tendría nada de malo si no fuera porque algunas distribuciones de Linux (en concreto Debian y sus derivadas como Ubuntu) consideran que esta nueva librería puede ser inestable y contener errores y deciden no incluirla en los binarios disponibles en el sistema de paquetes de la distribución. De esta forma, cuando instalamos el paquete php5-gd estamos instalando la librería original de Boutell, y por tanto, no dispondremos de las nuevas funciones que incorpora la versión de la gente de php.

¿Y cuál es la solución? Pues recompilar el binario de la librería GD.

El primer paso es instalar todos los paquetes necesarios y el código fuente de php:

apt-get install build-essential debhelper fakeroot

# el codigo fuente debe residir en /usr/src
cd /usr/src

# descargar el código fuente de php
apt-get source php5

# instalar todos los paquetes necesarios para compilar php5
apt-get build-dep php5

# acceder al directorio del código (puede variar según la versión disponible)
cd php5-5.2.6.dfsg.1

La forma de la cual debe compilarse un paquete se establece dentro de archivos bajo el directorio debian de un paquete. Las reglas que configuran el proceso de compilación se encuentran en debian/rules. Dentro de este archivo, en una línea, se puede leer –with-gd=shared,/usr –enable-gd-native-ttf \. Esta línea le dice al compilador que debe linkear con la librería LibGD distribuida con Ubuntu como librería compartida. Lo único que deberemos hacer es reemplazar esa linea por –with-gd=shared –enable-gd-native-ttf \. Esto hace que el proceso de compilación use la versión GD de php y cree una librería compartida con ella.

Una vez que el paquete ha sido reconfigurado, podemos proceder a su compilación y posterior instalación:

#debemos situarnos dentro del directorio del código fuente de php o la compilación no funcionará
cd /usr/src/php5-5.2.6.dfsg.1

# crear los paquetes php5-*
dpkg-buildpackage -rfakeroot

# instalar el nuevo paquete php5-gd
cd ..
dpkg -i php5-gd_5.2.6.dfsg.1-3ubuntu4.1_i386.deb

La compilación durará varios minutos (alrededor de 20 con un Core2Quad). Una vez realizado esto ya sólo tenemos que reiniciar Apache y ya podemos usar las nuevas funciones de la librería GD Bundled. Existe un único problema: si actualizamos Ubuntu reinstalaremos el paquete oficial y dejaremos de tener disponible la nueva librería. Para los que lo usen en una Ubuntu normal con interfaz gráfica, cada vez que encendamos el ordenador nos avisará de que hay actualizaciones disponibles. Hay que estar pendientes y desmarcar la casilla del paquete php5-gd. Otra posible solución a este problema pasa por instalar la librería desde los repositorios de dotdeb.org.

Vía CuMu.Li

Escrito por javierav

23 Agosto 2009 a las 9:38 pm

Categoría: Linux, PHP

Etiquetado con