
Instalando PostgreSQL en un servidor Linux
Como usuario sin privilegios de administrador
Fecha:Estos días he estado revisando alternativas de gestores de notas que pudiera instalar en mi VPS, como dnote, el cual tiene como dependencia tener la base de datos PostgreSQL.
Dado que en la VPS carezco de permisos para instalar PostgreSQL, tenía que buscar una alternativa. En este caso, decidí compilar un binario en una "máquina donadora" para luego transferir los archivos necesarios a la máquina de destino.
Revisando la compatibilidad del sistema
Es crucial que el sistema operativo de la máquina donadora sea lo más similar posible al sistema de la máquina de destino. Esto es para evitar problemas de compatibilidad con las bibliotecas del sistema.
Por ejemplo: Una versión de los binarios compilados en Manjaro podría terminar teniendo referencias a bibliotecas del sistema fundamentalmente diferentes a las de un sistema de destino Ubuntu Server 22.04 LTS. Estas diferencias pueden causar problemas de compatibilidad y hacer que PostgreSQL no funcione correctamente en la máquina de destino.
Para mejores resultados y ayudar a garantizar que las bibliotecas y dependencias sean compatibles entre ambos sistemas, nuestra máquina donadora debe cumplir las siguientes características:
- El mismo sistema operativo que la máquina de destino.
- Una versión lo más cercana posible a la de la máquina de destino.
- Un nivel de actualizaciones similar al de la máquina de destino.
Preparación en la Máquina Donadora
Después de revisar la versión del sistema operativo de nuestro VPS, creamos una instalación limpia de Ubuntu Server 22.04 LTS en una máquina virtual. Como vamos a utilizarla para compilar, debemos instalarle el paquete build-essential que contiene los paquetes necesarios para compilar.
bash
> sudo apt-get install build-essential
Descargamos el paquete de la versión que requerimos de PostgreSQL en nuestra máquina virtual donadora, en este caso la 16.3, luego descomprimimos e ingresamos dentro. 1
bash
> wget https://ftp.postgresql.org/pub/source/v16.3/postgresql-16.3.tar.gz
> tar -xzvf postgresql-16.3.tar.gz
> cd postgresql-16.3
PostgreSQL en el archivo 'INSTALL' tiene una lista de dependencias
que son requeridas para poder ser compilado/funcionar. Para verificar si
tenemos las bibliotecas necesarias, podemos revisarlas en la máquina de
destino con ldconfig -p | grep nombre_lib
. Si no aparece nada, significa
que la biblioteca no existe o no está instalada.
Hay que repetir este proceso para otras bibliotecas necesarias.
Las bibliotecas requeridas en su versión de desarrollo son para compilar, como libreadline, por lo que es necesario instalarlas en nuestra máquina donadora.
En este caso, y tomando las opciones de configuración para la compilación 2
bash
> ./configure --prefix=/home/user/postgresql --exec-prefix=/home/user/postgresql --without-icu --without-zlib
Ejecutamos make para compilar, lo cual puede tomar un tiempo dependiendo de los recursos de la máquina
bash
> make
Y al terminar, solo ejecutamos make install, lo cual colocará los archivos binarios de PostgreSQL en el directorio que especificamos como opción prefix
bash
> make install
De aquí podemos copiar el contenido de esta carpeta a nuestro servidor con permisos locales e intentar ejecutarlos ahí, o podemos probarlos en nuestra máquina donadora.
Ejecutar nuestros binarios
Ya con nuestros binarios en el directorio, tenemos que actualizar nuestro "path" para que sepa en qué parte residen nuestros binarios en la máquina, así como nuestro "library path" para que pueda ubicar las bibliotecas que PostgreSQL utiliza para funcionar. Una vez nos cercioremos de que todo funciona, podemos colocar estos comandos al final de nuestro .bashrc (o el archivo de configuración de tu shell) para no tener que ejecutarlos al iniciar cada sesión.
bash
> export PATH="$PATH:/home/user/postgresql/lib"
> export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/user/postgresql/lib"
Si todo esto salió exitoso, deberíamos poder seguir el resto de pasos para inicializar el servidor PostgreSQL. Aunque es posible que si nos indica que falta una biblioteca, podríamos solo copiarla en la mayoría de los casos de nuestra máquina donadora al directorio que especificamos en el "library path". Sin embargo, si la cantidad es mucha, sería mejor intentar repetir la configuración sin una opción o buscar una mejor emulación de nuestro entorno local.

[1] El código fuente de PostgreSQL puede conseguirse aquí
[2] Las opciones de configuración detalladas se encuentran aquí.