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