Estamos desarrollando un proyecto que utilizará mini y micro ordenadores, y para prototipar la instalación utilizamos RaspberryPi 3 modelo B+, que lleva un microprocesador Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz.

Como sistema de base de datos nos decantamos por CouchDB, por lo siguiente:
- Reducido tamaño en disco
- Utiliza pocos recursos
- Utiliza JSON
- Utiliza RestAPI
- Tiene función de Notificaciones (eventing)
- y un largo etc …
El inconveniente es que no hay paquete para microprocesadores ARM en los repositorios de Debian, y nos recomiendan la instalación desde el código fuente. El HowTo de la web de CouchDB, aunque completo y detallado, tiene algunos fallos con la instalación en Raspbian.
Encontramos varios manuales de instalación, pero eran incompleto, o no eran compatibles con la instalación en el Raspbian.
Como instalar CouchDB desde el código fuente en Raspbian de 64bits en RapsberryPi 3 modelo B+
- Actualizar el sistema operativo
apt-get update && apt-get -y dist-upgrade
- Instalar los paquetes necesarios para poder compilar CouchDB
apt-get --no-install-recommends -y install build-essential pkg-config erlang erlang-nox erlang-dev erlang-reltool libicu-dev libmozjs185-dev libcurl4-openssl-dev libicu-dev libmozjs185-1.0 libmozjs185-dev curl
- Descargar CouchDB, descomprimir y compilar
wget http://apache.rediris.es/couchdb/source/2.3.0/apache-couchdb-2.3.0.tar.gz
tar xvzf apache-couchdb-2.3.0.tar.gz
cd apache-couchdb-2.3.0
./configure
make
make release - CouchDB utilizará el usuario “couchdb” para ejecutar el servicio, por ello creamos el usuario
adduser --systcode --shell /bin/bash --group --gecos "CouchDB Administrator" couchdb
- Copiar el contenido del directorio “rel” de CouchDB, que se ha compilado en uno de los pasos anteriores, y cambiar los permisos del home del usuario “couchdb“
cp -r rel/couchdb/* /home/couchdb/
chown -R couchdb:couchdb /home/couchdb
find /home/couchdb -type d -exec chmod 0770 {} \;
chmod 0644 /home/couchdb/etc/* - Para probar la instalación, ejecutar manualmente el servicio
sudo -i -u couchdb /home/couchdb/bin/couchdb
- Ejecutar los siguientes comandos para finalizar la configuración del servicios
curl -X PUT http://127.0.0.1:5984/_users
curl -X PUT http://127.0.0.1:5984/_replicator
curl -X PUT http://127.0.0.1:5984/_global_changes - Para probar el correcto funcionamiento de CouchDB, ejecutamos
curl http://127.0.0.1:5984
- Nos debe dar como respuesta algo parecido a lo siguiente
{"couchdb":"Welcome","version":"2.3.0","git_sha":"07ea0c7","uuid":"a4c3673efdde48d8d301fff79cfd92ff","features":["pluggable-storage-engines","scheduler"],"vendor":{"name":"The Apache Software Foundation"}}
Si necesitamos que CouchDB se inicie al encender el ordenador, debemos seguir estos pasos extras
- Crear el archivo “couchdb.service” para iniciar el servicio por SystemD
nano /etc/systemd/system/couchdb.service
- Agregar el siguiente contenido
[Unit]Description=Couchdb service
After=network.target
[Service]Type=simple
User=couchdb
ExecStart=/home/couchdb/bin/couchdb -o /dev/stdout -e /dev/stderr
Restart=always - Ahora podremos utilizar los siguientes comandos
systemctl start couchdb.service - Para iniciar el servicio
systemctl stop couchdb.service - Para detener el servicio
systemctl restart couchdb.service - Para re-iniciar el servicio
systemctl status couchdb.service - Para comprobar el estado del servicio
Si es necesario acceder desde un ordenador remoto al servidor CouchDB
- Modificar el archivo “default.ini“
nano /home/couchdb/etc/default.ini
- Modificar la línea
bind_address = 127.0.0.1
- reemplazar por la siguiente línea, para permitir el acceso desde cualquier otro dispositivo de la red
bind_address = 0.0.0.0
- Reiniciar el servicio
systemctl restart couchdb.service
- desde un ordenador remoto ejecutar
curl http://IP_Servido_CouchDB:5984
- Nos debe dar como respuesta algo parecido a lo siguiente
{"couchdb":"Welcome","version":"2.3.0","git_sha":"07ea0c7","uuid":"a4c3673efdde48d8d301fff79cfd92ff","features":["pluggable-storage-engines","scheduler"],"vendor":{"name":"The Apache Software Foundation"}}
Ayudas que utilizamos
- https://docs.couchdb.org/en/master/install/unix.html#installation-from-source
- http://docs.couchdb.org/en/stable/install/unix.html#debian-based-systems
- http://guide.couchdb.org/draft/source.html
- http://guide.couchdb.org/draft/tour.html
- https://stackoverflow.com/questions/49037016/access-couchdb-from-another-pc
- https://github.com/apache/couchdb/issues/1103
- https://serverfault.com/questions/700862/do-systemd-unit-files-have-to-be-reloaded-when-modified/700956
- https://www.jamescoyle.net/how-to/2527-add-systemd-startup-script-for-couchdb
- https://askubuntu.com/questions/676007/how-do-i-make-my-systemd-service-run-via-specific-user-and-start-on-boot
- https://stackoverflow.com/questions/21785027/couchdb-ip-address-and-port