PostgreSQL en FreeBSD
Autor: Julio Merino (aka Slink)
En este artículo voy a explicaros cómo poner en marcha el fantástico servidor de bases de datos PostgreSQL en el sistema operativo FreeBSD. De hecho, todo lo que detallo aquí es aplicable fácilmente a los demás sistemas BSDs, en los cuales la situación de algunos archivos es diferente (y otros no existen). Instalación del paqueteComo con cualquier programa o servidor, procederemos a instalar PostgreSQL desde los ports. Os recomiendo que configuréis algunas opciones de optimización (más información). Procederemos: # cd /usr/ports/databases/postgresql7 # make # make install Una vez termine, no lo arranquéis aún, ya que deberemos realizar varios cambios de la configuración. El directorio de datosEl servidor nos instalará, por defecto, los archivos de configuración y las bases de datos en /usr/local/pgsql. Os recomiendo encarecidamente que cambiéis este directorio de lugar, para evitar "problemas" más adelante. Así que nuestro siguiente paso consistirá en llevar este directorio a /home/pgsql. Para ello lo copiaremos, conservando los archivos originales: # cp -prf /usr/local/pgsql /home Es necesario indicarle a PostgreSQL que hemos cambiado su directorio. El proceso es muy sencillo y consiste en cambiar los datos del usuario administrador (pgsql). Entraremos con: # chpass pgsql Y una vez dentro cambiaremos dos campos de la siguiente forma: Home directory: /home/pgsql Shell: /bin/sh Aprovechamos aquí de asegurarnos que el shell sea /bin/sh ya que será el que procesará los archivos de configuración inicial. Configuración del entornoPasaremos a configurar algunas de las variables de entorno que PostgreSQL usará. Para ello editaremos el archivo /home/pgsql/.profile (aquí es dónde interviene el shell que escojimos antes). Las variables más interesantes de este archivo son: PGDATESTYLE y LC_ALL. Editaremos las lineas que las contienen, de modo que queden así: #You might want to set some locale stuff here PGDATESTYLE=ISO LC_ALL=es_ES.ISO_8859-1 export PGDATESTYLE LC_ALL He leido en algún lado que la elección de un lenguaje en LC_ALL provoca problemas de velocidad, así que si este punto os interesa mucho, no configuréis esta variable. Inicializando la base de datosAhora que ya hemos configurado lo más básico, podemos pedir a PostgreSQL que inicie su base de datos. Debemos tener en cuenta que todas las operaciones sobre el servidor se tienen que hacer bajo el usuario pgsql; el usuario root no tiene permisos especiales, aunque lo parezca. Así pues, ejecutaremos el siguiente comando: # su - pgsql -c "initdb" Después de breves instantes, aparecerá un directorio nuevo, /home/pgsql/data. Una vez ya estén los datos inicializados, procederemos a arrancar el servidor (y daremos permisos de ejecución al script, por si no tenía): # chmod +x /usr/local/etc/rc.d/010.pgsql.sh # /usr/local/etc/rc.d/010.pgsql.sh start Configuración de usuarios y contraseñasEl siguiente punto de la configuración consiste en crear usuarios y configurar contraseñas. Aquí ya intervienen comandos SQL, así que os recomendaría que os pasáseis por la página de PostgreSQL. Para proceder a ello, deberemos acceder al servidor mediante el usuario administrador, siendo root en el sistema: # su - pgsql -c "psql template1" Una vez dentro, cambiaremos la contraseña del administrador y crearemos un usuario para nosotros con la posibilidad de crear nuevas bases de datos: template1=# ALTER USER pgsql WITH PASSWORD 'el_password_del_admin' template1=# CREATE USER miuser WITH CREATEDB PASSWORD 'mi_password' Podemos salir del programa pulsando [Ctrl+D] para seguir configurando detalles. AutenticaciónEl servidor de PostgreSQL acepta, por defecto, el acceso de cualquier usuario local a las bases de datos sin pedir contraseña. Este comportamiento es muy poco recomendable por lo que procederemos a cambiarlo. Abriremos el archivo /home/pgsql/data/pg_hba.conf y buscaremos las siguientes líneas (que aparecen al final de todo): local all trust host all trust Realizaremos los cambios de modo que queden de la siguiente forma: local all crypt host all crypt Guardamos y salimos. Habilitar el acceso por TCP/IP
En algunos casos no vamos a necesitar esta opción, cosa que nos dará un poco más de seguridad. De todos modos, muchas otras veces es necesaria para poder usar determinados programas o, simplemente, para gestión remota de las bases de datos. Si necesitamos esta opción, procederemos a editar el archivo /home/pgsql/data/postgresql.conf. Buscaremos la siguiente línea: #tcpip_socket = false Y la cambiaremos por: tcpip_socket = true Corrección del script de arranqueEl script de inicio del servidor de FreeBSD tiene un pequeño fallo que hace que se nos pida la contraseña de administador cada vez que queramos iniciar o parar el servidor. Para evitar este comportamiento, nos dirigiremos al archivo /usr/local/etc/rc.d/010.pgsql.sh y situaremos las siguientes líneas:
su -l pgsql -c \
'[ -d ${PGDATA} ] && exec /usr/local/bin/pg_ctl start -s -w -l ~pgsql/errlog'
Lo que NO nos interesa aquí es la opción -w, por lo que la quitaremos:
su -l pgsql -c \
'[ -d ${PGDATA} ] && exec /usr/local/bin/pg_ctl start -s -l ~pgsql/errlog'
Inicio del servidorAhora sí que ya lo tenemos todo listo para poder arrancar el servidor "en condiciones". Lo haremos así: # /usr/local/etc/rc.d/010.pgsql.sh stop # /usr/local/etc/rc.d/010.pgsql.sh start Acceder al sistemaYa podemos entrar a nuestro sistema de bases de datos como un usuario normal. Para ello usaremos la base de datos de prueba que viene preconfigurada: miuser$ psql template1 Si nos pide la contraseña y todo va bien, ¡enhorabuena! todo ha funcionado correctamente ;) |