Nextcloud 19 en la Raspberry Pi. Pequeños problemas

Un problema que nunca me había pasado es que al abrir la app de Contactos no aparecía ninguna libreta de dirección, lo que impedía crear contactos o importarlos. Creo que tiene que ver con haber configurado DAVx⁵ en el móvil antes de instalar la app o entrar en ella, pero la solución es fácil, aunque no se puede hacer desde la interfaz web sino desde la línea de comandos.

Para crear una libreta de direcciones y desbloquear Contactos, hay que entrar en la Raspberry por SSH y ejecutar este comando: sudo -u www-data php /var/www/html/nextcloud/occ dav:create-addressbook USUARIO NOMBREDELALIBRETA.

Como siempre, hay que cambiar la ruta a occ si Nextcloud está instalado en un lugar diferente.

Nextcloud 19 en la Raspberry Pi. Avisos de seguridad

Pantalla de configuración de Nextcloud 14

Cuando entramos en la configuración de Nextcloud, nos vamos a encontrar varios avisos de cosas que no están configuradas de la mejor manera posible.  Vamos a ver cómo soluciona rlo.

Límite de memoria de PHP

El primer aviso es «El límite de memoria de PHP está por debajo del valor recomendado de 512 MB». Para solventarlo, tenemos que editar el archivo php.ini con sudo nano /etc/php/7.3/apache2/php.ini.

Buscamos con CTRL+W «memory_limit» y cambimos el valor a 512M. Guardamos los cambios y reiniciamos el servidor con sudo service apache2 restart.

Por cierto, un observador agudo se dará cuenta de que en realidad estamos editando /etc/apache2/sites-available/php.ini, pero creo que es mejor de esta manera.

HSTS

El siguiente aviso nos recuerda que no se ha configurado la cabecera HTTP Strict Transport Security. Esto hace que no se permita ninguna conexión que no sea segura (HTTPS) y hace más difíciles los ataques al sitio. Para configurarlo, podemos editar el archivo de configuración que ha creado Let’s Encrypt:
sudo nano /etc/apache2/sites-enabled/000-default-le-ssl.conf

Vamos al final del archivo y encima de la línea </VirtualHost> añadimos lo siguiente:

    <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
    </IfModule>

Aunque podemos limitarnos a reiniciar el servidor, como siempre, con sudo service apache2 restart, no es mala idea reiniciar la Raspberry con sudo reboot.

Nota: la última parte de la línea central (; preload) añade el dominio que hemos configurado con DDNS a una lista que incluyen los grandes navegadores y que obliga a usar HTTPS en estos dominios. Esto significa que si tienes un problema y tienes que volver a empezar, puede ser difícil volver a trabajar con el dominio antes de configurar Let’s Encrypt, porque no tendrás HTTPS y el navegador estará obligado a intentar usarlo. De hecho, esto me ha dado algún quebradero de cabeza la última vez que me he puesto con esto.

Well-known

Los siguientes avisos están relacionados con el calendario y los contactos, se refieren a las llamadas direcciones «well-known» que permiten configurar estos dos elementos en clientes (móviles, por ejemplo) de forma más sencilla.  No he sido capaz de eliminar estos avisos, aunque teóricamente la documentación lo explica, no he conseguido que funcione. Seguiré buscando.

Cache

La memoria caché es un sistema que permite al servidor servir ciertos objetos habituales de manera más rápida. Es fácil configurar una caché de última generación con sudo apt-get install php-redis redis-server.

Comprobamos que ha arrancado con ps ax | grep redis y editamos el archivo de configuración para que Nextcloud use esta cache: sudo nano /var/www/html/nube/config/config.php.

En primer lugar, configuramos la caché de bloqueo de archivos.  Aunque recomiendan otra configuración si Redis y Nextcloud corren en el mismo servidor, a mí nunca me ha funcionado, así que vamos a la otra opción que ofrecen y añadimos en el archivo config.php esto:

    'filelocking.enabled' => true,
    'memcache.locking' => '\OC\Memcache\Redis',
    'redis' => array(
      'host' => 'localhost',
      'port' => 6379,
      'timeout' => 0.0,
      'password' => '', // Optional, if not defined no password will be used.
   ),

Después configuramos la cache distribuida con:

   'memcache.distributed' => '\OC\Memcache\Redis',

Y por último la caché local con

 'memcache.local' => '\OC\Memcache\Redis',

para configurar la caché local, y

'memcache.locking' => '\OC\Memcache\Redis',

para configurar la caché de bloqueo de archivos.

En versiones anteriores de Nextcloud había un último paso: configurar el archivo php.ini para la memoria OPcache. Desconozco si sigue siendo necesario, pero aquí dejo qué había que hacer.

Lanzamos el comando sudo nano /etc/php/7.3/apache2/php.ini. Tenemos que buscar (con CTRL+W) los valores de la izquierda de cada signo igual y cambiarlo a lo siguiente. Ojo: si la línea comienza con un punto y coma (;), también hay que borrarlo.

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Y reiniciamos el servidor con sudo service apache2 restart.

Módulos PHP recomendados

Otro aviso que aparece que no están instalados unos módulos de PHP que son recomendables: bcmath, gmp y imagick. Para instalarlos, solo hay que ejecutar sudo apt install php7.3-bcmath php7.3-gmp php-imagick y reiniciar el servidor Apache.

 

Nextcloud 19 en la Raspberry Pi. Usando emojis

Traduzco la documentación oficial de Nextcloud para este punto.

Para usar emojis (iconitos basados en texto) en tu servidor Nextcloud con una base de datos MySQL, hay que realizar unos retoques en la instalación.

 

Soporte de MariaDB

(Haz esto si has seguido mi tutorial)

MariaDB 10.3 o posterior

  1. Asegúrate de que está presente la siguiente configuración en tu servidor MariaDB. En Raspbian, editamos el archivo de configuración con sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf. (Es recomendable hacer una copia de seguridad, por si acaso).

    [mysqld]
    innodb_file_per_table=1
    
  2. Si has tenido que cambiar la configuración en el punto 1, reinicia tu servidor con sudo service mysql restart.
  3. Cambia el juego de caracteres y la colación de la base de datos, cambiando nextcloud por el nombre que hayas puesto a la base de datos.
    ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    
  4. Marca la configuración mysql.utf8mb4 en tu config.php:

    sudo -u www-data php /var/www/html/occ config:system:set mysql.utf8mb4 --type boolean --value="true"
    
  5. Convierte todas las tablas existentes a la nueva colación ejecutando el paso de reparación:

    sudo -u www-data php /var/www/html/occ maintenance:repair
    
  6. Ahora ya puedes usar emojis en los nombres de archivo, eventos de calendario, comentarios, etc.

MariaDB 10.2 o anterior

  1. Asegúrate de que está presente la siguiente configuración en tu servidor MariaDB. En Raspbian, editamos el archivo de configuración con sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf. (Es recomendable hacer una copia de seguridad, por si acaso).

    [mysqld]
    innodb_large_prefix=true
    innodb_file_format=barracuda
    innodb_file_per_table=1
    
  2. Si has tenido que cambiar la configuración en el punto 1, reinicia tu servidor con sudo service mysql restart.
  3. Comprueba si el formato de archivo ha cambiado a Barracuda (cambia nube% por nombredelabasededatos% si es necesario):

    MariaDB> SELECT NAME, SPACE, FILE_FORMAT FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME like "nube%";
    

Si el formato de archivo es Barracuda para cada tabla, no queda nada por hacer. Continúa con las instrucciones para MySQL en el paso 3. Este ha sido mi caso, pero la documentación añade que en sus pruebas, el formato de todas las tablas era todavía «Antelope» y entonces se debe seguir con el paso 4 a continuación.

  1. Se necesita migrar manualmente las tablas a «Barracuda», una por una. Se pueden crear los comando SQL fácilmente, sin embargo (cambiando, otra vez, «nextcloud» por el nombre de la base de datos):
  2. MariaDB> USE INFORMATION_SCHEMA;
    MariaDB> SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` ROW_FORMAT=DYNAMIC;") AS MySQLCMD FROM TABLES WHERE TABLE_SCHEMA = "nextcloud";
    

Esta orden devolverá un comando SQL para cada tabla en la base de datos de Nextcloud. Cada fila puede copiarse rápidamente en un editor de texto reemplazando los «|» y después se puede copiar de nuevo cada renglón en la línea de comandos de MariaDB. Si no aparece ningún error (si no estás seguro, comprueba el paso 2), hemos terminado y no hay que hacer nada más. Se puede continuar con los pasos de MySQL.

  1. Es posible, sin embargo, que no se pueda cambiar alguna de las tablas y la operación falle con “ERROR 1478 (HY000): Table storage engine ‘InnoDB’ does not support the create option ‘ROW_FORMAT’”. En este caso, estas tablas tienen un valor de SPACE de 0 en el paso 2. Básicamente, significa que la table no tiene un archivo de índice propio, que es un requisito del formato Barracuda. Se puede solucionar ocn un comando SQL ligeramente diferente:

    MariaDB> ALTER TABLE `nextcloud`.`oc_tablename` ROW_FORMAT=DYNAMIC, ALGORITHM=COPY;
    

Reemplaza oc_tablename con la tabla que falle. Si hay demasiado (lo que no pasó a los ingenieros de Nextcloud), se pueden generar comandos SQL para hacerlo en lote, pero lo dejan como tarea para el lector y a mí me supera.

  1. Ahora todo debería estar bien y se pueden seguir las instrucciones para MariaDB 10.3 a partir del paso 2.

En MySQL

(No hagas esto directamente si estás siguiendo mi tutorial)

  1. Actualiza tu servidor Nextcloud a la versión 11 o posterior. Con el tutorial, deberíamos estar en la versión 19.

  2. Asegúrate de que las siguientes configuraciones de InnoDB están así configuradas en el servidor MySQL. En Raspbian, editamos el archivo de configuración con sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf. (Es recomendable hacer una copia de seguridad, por si acaso). Si no están, copiamos en el archivo estas tres líneas debajo de [mysqld]. El lugar exacto da igual, pero por mantener el orden, se puede buscar la sección de InnoDB.

      • MySQL 8.0 o posterior:
[mysqld]
innodb_file_per_table=1
      • MySQL anterior a 8.0.
[mysqld]
innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=1
  1. Si has tenido que cambiar la configuración en el punto 1, reinicia tu servidor con sudo service mysql restart.
  1. Cambia el juego de caracteres y la colación de la base de datos, cambiando nextcloud por el nombre que hayas puesto a la base de datos.

    ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    
  2. Marca la configuración mysql.utf8mb4 en tu config.php:

    sudo -u www-data php /var/www/html/occ config:system:set mysql.utf8mb4 --type boolean --value="true"
    
  3. Convierte todas las tablas existentes a la nueva colación ejecutando el paso de reparación:

    sudo -u www-data php /var/www/html/occ maintenance:repair
    

Now you should be able to use Emojis in your file names, calendar events, comments and many more.

Nextcloud 19 la Raspberry Pi. Afinando Nextcloud

Si hemos seguido hasta ahora las instrucciones de este tutorial, ya tenemos una nube privada funcionando. Sin embargo, hay ciertas configuraciones por defecto que podemos retocar para que sea más fácil, más segura, más elegante o más útil. Vamos a ver cómo podemos tunear nuestra instalación de Nextcloud.

Tamaño máximo de archivos

Debido a las configuraciones por defecto de PHP, mediante la interfaz web no se pueden subir archivos de más de 2 Mb, lo cual es muy pero que muy poco. Para subir este límite, debemos editar algunas cosas. El límite máximo que podremos poner son 2 Gb, que está mucho mejor aunque deja fuera ciertos archivos de vídeo, pero este límite ya es cosa de la Raspberry, y su arquitectura, de 32 bits, no de Nextcloud.

Siguiendo las instrucciones del manual de Nextcloud, para aumentar este límite, debemos editar el archivo de configuración de PHP 7.3. Lo hacemos escribiendo en el terminal:

sudo nano /etc/php/7.3/apache2/php.ini

Aparece el editor de texto y buscamos (con las teclas CTRL+W) las líneas en que aparecen las expresiones upload_max_filesize y post_max_size. Cambiamos las cifras para que de 2M y 8M pasen a ser 2G. Deben quedar así:

upload_max_filesize = 2G
(...)
post_max_size = 2G

También podemos aprovechar para configurar la carpeta temporal. Si subimos archivos grandes, podemos llenar la tarjeta SD y esto nunca es bueno, así que es mejor usar una carpeta del disco duro externo. Buscamos (CTRL+W otra vez) la línea ;upload_tmp_dir = y hacemos dos cosas: borramos el punto y coma del inicio (si no lo hacemos, los cambios que hagamos en esta línea no tendrán efecto ) y añadimos al final la carpeta que queramos del disco duro. No es recomendable usar una subcarpeta del directorio de la nube, eso sí, porque si se creara un usuario con el mismo nombre que esta carpeta, usaría la carpeta temporal como sus propios archivos.

Guardamos el archivo (CTRL+X, “s” para decir que sí queremos guardar) pero no reiniciamos todavía el servidor web porque tenemos que ocuparnos de la carpeta temporal. La creamos con
sudo mkdir /media/Vir/nubetmp (cambiando la carpeta Vir a la que hayamos creado para nuestro disco duro, y nubetmp a lo que nos dé la gana)

Cambiamos los permisos de la carpeta
sudo chown -R www-data:www-data /media/Vir/nubetmp

Y, ahora sí, reiniciamos el servidor Apache con
sudo service apache2 restart

Podemos comprobar que lo hemos hecho bien en Nextcloud. Pulsamos en nuestro usuario arriba a la derecha para mostrar el menú, seleccionamos Administración y miramos en el apartado “Sistema” (información del servidor).

El ratón nos muestra que, efectivamente, ya está configurado para aceptar archivos de 2 Gb.

Eliminar “index.php” de las URLs de Nextcloud

Nextcloud, como su predecesor Owncloud, crea unas direcciones (URLs) bastante largas porque incluye por defecto el fragmento “index.php”. Lukas Reschke (su avatar siempre me recuerda al niño del vídeo viral de Star Wars) lo explica en la ayuda de Nextcloud. Se puede eliminar, para pasar de algo como
https://polkas.ddns.net/nube/index.php/apps/files/ a  esto otro: https://polkas.ddns.net/nube/apps/files/, que queda más claro y sencillo.

Para ello, editamos el archivo config.php: sudo nano /var/www/html/config/config.php y añadimos al final la siguiente línea:
'htaccess.RewriteBase' => '/',

Debemos cambiar el final si no tenemos instalado Nextcloud en la carpeta raíz del servidor sino en una subcarpeta. Es decir, si los archivos de Nextcloud están en /var/www/html/nextcloud, la línea anterior debe quedar así:
'htaccess.RewriteBase' => '/nextcloud',

No estoy seguro de que el siguiente paso sea necesario, pero no hace daño hacerlo. Tenemos que activar unos cuantos módulos de Apache, concretamente rewrite, headers, env, dir y mime. Esto se hace con las siguientes instrucciones:

sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod env
sudo a2enmod dir
sudo a2enmod mime

Todos menos headers deberían estar activos, pero no pasa nada por asegurarse. Una vez los hemos activado todos, debemos editar el sitio creado en la configuración de Apache por Let’s Encrypt:
sudo nano /etc/apache2/sites-available/000-default-le-ssl.conf
Tenemos que copiar con la combinación de teclas MAYS+Ins el siguiente código (extraído, de nuevo, del manual), por ejemplo, al final del archivo, antes de la Línea </Directory>:

Alias /nextcloud "/var/www/html/nextcloud/"

<Directory /var/www/html/nextcloud/>
  Options +FollowSymlinks
  AllowOverride All

 <IfModule mod_dav.c>
  Dav off
 </IfModule>

 SetEnv HOME /var/www/html/nextcloud
 SetEnv HTTP_HOME /var/www/html/nextcloud

</Directory>

Y hay que cambiar el directorio todas las veces que aparece, en lugar de /var/www/nextcloud/, si lo hemos cambiado: debemos poner la carpeta que hayamos usado. Si hemos instalado Nextcloud en la raíz del servidor, debería ser /var/www/html/ y, si lo hemos hecho en una carpeta diferrente, deberá ser /var/www/html/LOQUESEA, dependiendo de lo que hayamos usado en la quinta entrada de la serie. Debemos cambiarlo las 4 veces que aparece. También, igual que antes, debemos cambiar lel /nextcloud de la primera línea a una barra / si tenemos Nextcloud instalado en la raíz.

El útlimo paso es ejecutar una actualización de mantenimiento con el comando
sudo -u www-data php /var/www/html/occ maintenance:update:htaccess

Reiniciamos el servidor con
sudo service apache2 restart

Y podemos comprobar, encima del cursor, que ha desaparecido el “index.php” de la URL:

Cron

Es muy habitual que Nextcloud necesite que ciertas acciones tengan lugar cada cierto tiempo. La forma de asegurarse es el cron, cuya misma forma nos dice que tiene que ver con el tiempo (cronos en griego). Por defecto, el cron de Nextcloud se ejecuta cada vez que se carga una página. Es lo más sencillo pero normalmente no vamos a usar la interfaz web sino los clientes de escritorio y móvil, así que puede pasar demasiado tiempo sin que se ejecute el cron. Por ello, es muy recomendable hacerlo de otra manera. ¿Cómo? Encargándoselo al sistema operativo. Raspbian, como todos los sistemas Linux, tiene una opción para esto.

Para sacar ventaja de esto, debemos definir un cronjob. Es así:
sudo crontab -u www-data -e

Aparece un archivo bastante largo, con un montón de explicaciones (todas las líneas que empiezan por una almohadilla [ #] o un punto y coma [;] son comentarios). La orden significa “editar el crontab (lista de tareas que se ejecutan periódicamente) del usuario www-data (el de Apache)”.

Podemos irnos al final del archivo y copiar la siguiente orden:
*/15 * * * * php -f /var/www/html/nextcloud/cron.php

Que significa que cada 15 minutos se va a ejecutar el cron. Como siempre, debemos cambiar la carpeta si fuera preciso. Guardamos como siempre con CTRL+X, “s” y podemos comprobar que se ha guardado con
sudo crontab -u www-data -l
que nos muestra el contenido del crontab.

Una vez lo hemos comprobado, podemos ir a la configuración de Nextcloud y cambiar este estado, si no se ha cambiado automáticamente:

Nextcloud 19 en la Raspberry Pi. Instalación de Nextcloud

El siguiente paso es, por fin, instalar Nextcloud en nuestra Raspberry. Es un paso más sencillo que los anteriores, paradójicamente. Pero aun así, vamos con ello. Lo mejor en este paso es entrar a la Raspberry desde otro ordenador con SSH.

En PuTTY o el terminal, entramos en la Raspberry y nos dirigimos a la carpeta raíz del servidor web, que es una carpeta de sistema, está protegida contra escritura  y el usuario ‘pi’ o el que hayamos creado en el tutorial no puede hacer nada en ella, a no ser que tome privilegios de superusuario. Es decir, todo lo que hagamos aquí deberemos hacerlo empezando las órdenes con ‘sudo’. La carpeta es /var/www/html.

cd /var/www/html
ls

La segunda orden lista el contenido de la carpeta. Veremos uno o dos archivos si hemos ido siguiendo las instrucciones de esta serie de entradas: index.html, que es el archivo de inicio de Apache, e info.php, el archivo que podemos haber creado en una entrada anterior para comprobar el buen funcionamiento de PHP. En realidad, no es una idea especialmente buena tener estos archivos porque pueden dar información a posibles atacantes, por lo que podemos querer borrarlos.

Directorio /var/www/html

Ojo con este paso, que la herramienta de borrado es muy potente y si nos equivocamos podemos llegar a borrar todo el disco duro. En la siguiente orden, la parte de ./ indica que solo se tiene en cuenta el directorio en el que estamos:

sudo rm ./index.html

sudo rm ./info.php

Y nos queda un directorio en blanco. Si abrimos ahora la dirección de la Raspberry en un navegador saldrá una página diferente. Bien, pues vamos a llenarla con nuestro Nextcloud.  Para encontrar la última versión  (ahora mismo la 14.0.3), vamos a http://www.nextcloud.com/install, pulsamos el botón azul ‘Download’ y en la siguiente pantalla vamos de nuevo al botón azul pero lo pulsamos con el botón derecho y seleccionamos la opción de copiar el enlace al portapapeles.

La versión ha cambiado, pero el botón es el mismo: ‘Download Nextcloud’

Para descargar Nextcloud, vamos al terminal SSH, e indicamos que vamos a descargar ese archivo. Escribimos la orden wget y pegamos la URL que acabamos de copiar con MAYS + Ins:

sudo wget https://download.nextcloud.com/server/releases/nextcloud-19.0.0.zip

La numeración irá cambiando según salgan versiones más modernas, claro. Hace falta usar sudo porque la carpeta es propiedad del administrador. Tras descargarse, tenemos un archivo comprimido en zip. Para descomprimirlo, debemos hacer lo siguiente:

sudo unzip nextcloud-19.0.0.zip

Cambiando el nombre, claro, dependiendo del archivo que nos hayamos descargado Esto nos creará una carpeta llamada ‘nextcloud’ con los archivos necesarios. Pero hay que tener en cuenta una cosa importante sobre los permisos y las cuentas de usuario en Linux.

En Linux los usuarios tienen una importancia mayor que en Windows, donde normalmente utilizamos un solo usuario para todo. Sin embargo, en Linux se usan mucho más. En concreto, el servidor web Apache utiliza un usuario diferente para sus tareas, que se llama, en Raspberry Pi OS, ‘www-data’. Como hemos usado privilegios de superusuario para descargar y descomprimir Nextcloud, el propietario de los archivos no es www-data sino el superusuario, ‘root’. Debemos cambiar esto para no tener problemas.

Para cambiar los permisos de archivo, usamos la siguiente orden:

sudo chown -R www-data:www-data nextcloud

Es decir, con permisos de superusuario, cambiamos la propiedad [change ownership] de todos los contenidos [-R] al usuario ‘www-data’ que pertenece al grupo ‘www-data’ para la carpeta ‘nube’.

Una vez hecho esto, se me ocurren tres opciones:

  1. SI no vamos a instalar más cosas y servidores, lo mejor es mover los contenidos de ‘nextcloud’ a ‘/var/www/html’, para que al escribir la dirección 192.168.XX.XX salga directamente la nube.
  2. Si queremos instalar más cosas, lo podemos dejar tal cual.
  3. Si queremos instalar más cosas, también tenemos la opción de cambiar el nombre de la carpeta para que sea más fácil de escribir y recordar. Como se podrá ver en mis capturas, es la opción que he llevado a cabo yo, cambiando ‘nextcloud’ por ‘nube’.

Para llevar a cabo estas opciones, estos son los comandos necesarios:

  1. sudo mv nextcloud/*.* ../*.* (mover todos los archivos dentro de ‘nextcloud’ al directorio superior)
  2. No hay que hacer nada, evidentemente.
  3. sudo mv nextcloud nube (mover la carpeta nextcloud’ a la carpeta ‘nube’)

Ahora ya podemos borrar el archivo .zip. Si no lo hacemos, Nextcloud nos dará un mensaje de advertencia que puede ser molesto. Lo hacemos con el comando
sudo rm./nextcloud-12.0.3.zip.

A partir de este paso, ya podemos trabajar en el navegador, entrando en la dirección adecuada. Según la opción que hayamos escogido de las tres, será:

  1. http://192.168.XX.XX
  2. http://192.168.XX.XX/nextcloud
  3. http://192.168.XX.XX/nube

Como mi opción es la 3, he ido a esa dirección y veo esto:

Este es el momento en que podemos escoger nuestro nombre de usuario y la contraseña que nos dé la gana. Luego podremos crear más cuentas de usuario si queremos. Pero más importante que el usuario y contraseña es la información siguiente.

El segundo recuadro blanco nos pregunta dónde queremos guardar los archivos que subamos a nuestra nube. Es importante cambiar el directorio que aparece por defecto, porque está en la tarjeta SD y, aparte de que lo llenaríamos en seguida, si la tarjeta se estropea perderíamos la información. Para evitar este problema era la cuarta entrada de la serie. Como se puede ver, he señalado la carpeta /media/Vir/nube. Si el disco duro no lo vamos a usar para nada más, no haría falta el último directorio pero al crear esta subcarpeta la raíz del disco duro queda  más ordenada. (por cierto que, si quieres hacer algo así, deberás crear la carpeta con sudo mkdir /media/Vir/nube y darle los permisos al usuario del servidor con sudo chown -R www-data:www-data /media/Vir/nube).

La advertencia que hay en el centro de la página es sobre los tipos de bases de datos. Nos avisa de que solo puede utilizarse una base de datos MySQL o MariaDB. Como esta última es la que hemos instalado y creado, no hay problema, así que en el último recuadro blanco podemos añadir el nombre de la base de datos y del usuario (será el mismo si hemos seguido el tutorial) y la contraseña que creamos en su momento. La última casilla podemos dejarla con ‘localhost’.

Por cierto, recomendable desmarcar la casilla que pone «Instalar las aplicaciones recomendadas». Más adelante podremos escoger nosotros con total libertad, y Talk, a fecha de hoy, no funciona en la Raspberry.

Si hemos introducido bien todos los datos, tardará un ratito (está creando los archivos y carpetas necesarios para el nuevo usuario) y nos saldrá una pantalla de bienvenida (la imagen es de la versión anterior, en la actual hay varias pantallas que podemos pasar con la flecha):

En esta pantalla tenemos un acceso directo a la tienda de aplicaciones. Esto lo veremos en una entrada posterior del tutorial. Más importante ahora es esta otra:

No la pases. Tienes ahí enlaces para descargar los clientes de escritorio (el primer botón negro, para Ubuntu el proceso es algo más complicado pero para Windows es muy fácil) y móviles (los otros dos botones, dependiendo de si usas Android o iPhone). Yo el cliente de Android lo he descargado de F-Droid, que es una appstore alternativa que solo ofrece software libre.

Finalmente, podemos pulsar el botón «Empieza a usar Nextcloud» y veremos la interfaz de Archivos:

Nextclooud Archivos, versión 19Veremos que tenemos algunas carpetas y documentos de ejemplo.

Y ya podemos decir que tenemos nuestra propia nube. Pero ¿cómo acceder a ella desde fuera de casa? Si lo intentáramos, veríamos que la dirección 192.168… no funciona. Ese será el contenido de la siguiente entrada.

Nextcloud 19 en la Raspberry Pi. Acceso seguro: Let’s Encrypt

Las imágenes corresponden a una versión anterior de Certbot, pero el proceso sigue siendo prácticamente igual)

En la entrada anterior veíamos que Nextcloud nos advertía de que no estábamos usando una conexión segura para verlo. Hasta hace bien poco, la única opción que podría haber funcionado era comprar un certificado de servidor, pero si la idea es ahorrar lo más posible, salía más caro el certificado que la propia Raspberry.

Sin embargo, no hace demasiado ha aparecido el proyect Let’s Encrypt, que pretende facilitar y abaratar (¡es gratis!) el acceso a conexiones seguras. Está apoyado por jugadores tan importantes dentro del campo del software libre y de la libertad en internet como la EFF o la Fundación Mozilla. Con Let’s Encrypt (“Vamos a cifrar”) es mucho más fácil crear conexiones seguras. Y esto es importante por detalles como que yo guardo en mi nube el cuaderno de clase con datos personales de mis alumnos, y usar una conexión no fiable es peligroso e, incluso, podría ir en contra de la LOPD. Este, por cierto, es un problema de Dropbox.

Técnicamente estoy convencido de que es muy difícil de entender, pero por suerte no hace falta saber mucho, es muy fácil de llevar a cabo.

Los pasos son estos:

  1. Instalamos el paquete python-certbot-apache, que instala todo lo necesario:
    sudo apt-get install python-certbot-apache
  2. Ejecutamos sudo certbot --authenticator webroot --installer apache.Nos preguntará en primer lugar sobre el dominio. Respondemos el ddns.net que hayamos escogido. Después nos pide una dirección de correo y nos pide que aceptemos los términos y condiciones, lo que hacemos escribiendo ‘a’. A continuación nos pregunta por la raíz web, y deberemos responder que /var/www/html. Por último nos pregunta si queremos el método fácil o el seguro. A gusto del consumidor pero, evidentemente, es más seguro el Seguro. Lo escogemos pulsando ‘2’.

Una vez hemos terminado, podemos probar nuestro dominio de ddns en el navegador… y nos dará un error:
Error de dominio en Nextcloud 14

Para seguir las instrucciones, debemos editar el archivo /var/www/html/config/config.php (acuérdate de añadir la carpeta si Nextcloud no está instalado en la raíz). Buscamos el apartado
'trusted_domains' =>
array (
0 => '192.168.xx.xx',

y añadimos a continuación una línea en la que escribimos     1 => 'LOQUESEA.ddns.net' , en la línea antes de ),.

Guardamos con CTRL-X, s y vamos en el navegador a la dirección https://LOQUESEA.ddns.net o https://LOQUESEA.ddns.net/nextcloud, según donde lo hayamos instalado, y comprobaremos que el navegador ya está contento.

Inicio de Nextcloud 14 con HTTPS

Puede ser que no nos fiemos demasiado porque, al fin y al cabo, antes los certificados eran cosas caras y raras y a nosotros nos ha salido gratis. Bien, pues es fácil comprobar la seguridad de nuestro servidor. Vamos a https://www.ssllabs.com/ssltest e introducimos nuestra dirección de No IP. Tarda un buen rato, y al final nos debe dar este resultado, que no está mal.

 

Hasta hace un par de meses, daba una A, un resultado mejor, pero lo an rebajado para animar a dejar de utilizar TLS 1.0 y TLS 1.1, versiones anticuadas que pueden ser peligrosas. Para quitar este peligro (que es muy pequeño, en realidad) podemos desactivar estos dos protocolos.

Para ello editamos un archivo de configuración con del servidor web con sudo nano /etc/letsencrypt/options-ssl-apache.conf. Buscamos la línea «SSL Protocol» y añadimos después de  all -SSLv2 -SSLv3 dos elementos más: -TLSv1 -TLSv1.1

Con esto ya quedan desactivados y el resultado del test pasa a ser una A. Sencillo, ¿verdad? En próximas entradas veremos cómo mejorar y ajustar nuestra nube, ya con un servidor más seguro.

 

Nextcloud 19 en la Raspberry Pi. NoIP

El siguiente paso para tener una verdadera nube a la que podamos acceder desde cualquier parte del mundo con nuestro ordenador o móvil es configurar una dirección única para la Raspberry. La dirección que hemos estado utilizando hasta ahora (192.168.0.26 o similar) no sirve más que en nuestra red local. Pero lo interesante de tener una nube propia está en poder acceder a ella desde cualquier lugar. Hay un problema para ello: la práctica totalidad de las empresas proveedoras de servicios de internet en España funcionan mediante lo que se conoce como IP dinámica: la IP, la dirección en internet, va cambiando de forma que los clientes no podemos controlarlo. De tal manera que si acudimos a servicios como What’s My IP, hoy nos puede dar un resultado y mañana otro que no podemos adivinar. Para ello hace falta algo llamado servidor de nombre de dominio dinámico o DDNS, por sus siglas en inglés. Este tipo de servicios instala un pequeñ o programa en nuestro servidor que periódicamente comprueba si ha cambiado nuestra dirección y lo actualiza en un “dominio” propio, de tal manera que solo tenemos que usar este “dominio”. Lo escribo entre comillas porque esta explicación no es técnicamente del todo precisa, pero es más que suficiente para nuestras necesidades.

¿Qué necesitamos para tener una dirección propia reconocible? Hay muchos servicios DDNS disponibles. El que yo uso es no-ip.com, que es bastante fácil de utilizar.

En primer lugar tenemos que registrarnos en la web de No IP.

Como se ve en la imagen, podemos elegir una dirección que sea “lo-que-te-dé-la-gana.una-de-las-cuatro-opciones”. Mi nube en producción usa la dirección http://polkillas.ddns.net, pero puedes escoger la opción que prefieras.

Cuando nos registramos, nos envía un correo de confirmación a nuestra cuenta de correo. Cuando activamos mediante el enlace, podemos entrar en el servicio. El segundo paso consiste en descargarse en la Raspberry el programa que se conecta a No IP. Lo llaman DUC y se instala así, siguiendo las instrucciones oficiales:

mkdir /home/NOMBREDEUSUARIOQUEHEMOSCAMBIADO/noip (creamos un directorio para bajarlo)

cd /home/pi/noip (vamos al directorio)

wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz (descargamos el DUC)

tar vzxf noip-duc-linux.tar.gz (lo descomprimimos)

cd noip-2.1.9-1 (entramos en el directorio que se ha creado)

sudo make (preparamos el programa para instalarlo)

compilandonoip

sudo make install (lo instalamos)

Este procedimiento se llama compilar el programa. En el último paso, nos pedirá la dirección de correo y la contraseña de nuestra cuenta en no-ip.com.

Luego nos pedirá el intervalo de tiempo en minutos tras el cual se actualizará la dirección, si fuera necesario. El mínimo es 5 y en realidad 30, lo que sale por defecto, suele ser suficiente, pero se puede poner menos. También nos preguntará si queremos ejecutar algo después, pero podemos contestar que no.

configuración de NoIP

Ya podemos ejecutarlo con la orden sudo noip2. Y como querremos que se ejecute solo al arrancar la Raspberry, lo hacemos de la siguiente manera. Vamos a editar los programas que se ejecutan cada cierto tiempo o en momentos determinados (como el arranque o el apagado) de la Raspberry con la orden

sudo crontab -e

La primera vez que editamos el archivo crontab nos dará a elegir entre diferentes editores de texto. El recomendado es “nano”, la opción 1.

Incluir NoIP en el crontab

En el archivo que aparece, añadimos en la última línea lo siguiente:

@reboot sudo -u root noip2

Cerramos con CTRL + X y le decimos que guarde el archivo.

Si ahora mismo volvemos a ejecutar el DUC, nos dará el siguiente error:

sudo noip2

One noip2 process is already active,
and the multiple instance flag (-M) is not set.

Lo que significa que ya está funcionando. Vamos a comprobar así que lo hemos hech o bien, reiniciando la Raspberry con la orden sudo reboot. Si intentamos ejecutar el DUC, nos dará el mismo mensaje, con lo que es correcto. Así pues, ya podemos ir a nuestro navegador y buscar la dirección que hemos escogido al principio (http://polkillas.ddns.net/nube, en mi caso), y nos debería aparecer lo siguiente:

Que significa que nuestra nube ha detectado algo raro: ya no accedemos desde la IP local, sino desde un dominio de internet. Por si acaso, no se fía y nos pregunta. Pulsamos el botón “Añadir … como dominio de confianza” o, en inglés “Add … as trusted domain” y, si estábamos registrados como administradores, directamente nos sale una pantalla en la que nos pregunta si queremos añadir el dominio. Respondemos que sí y nos saldrá la pantalla de administración de Nextcloud. El mensaje rojo no es exactamente un error, sino una advertencia que corregiremos en próximas entradas.

administracion-nextcloud-mozilla-firefox_061

SI no funciona este proceso, hace falta abrir los puertos del router. Es un proceso que depende mucho del modelo de router que tengamos en casa, así que, en este caso, toca recurrir a Google o a DuckDuckGo para buscar información concreta de cómo se hace.

Nextcloud 19 en la Raspberry Pi. Servidor web, PHP y MariaDB

Raspberry Pi OS es una versión de Debian 10 optimizada para el procesador de la Raspberry, que no es uno normal de ordenador (x86 o x86_64), sino más parecido a los de los móviles (arm). Al estar basada en Debian, nos vamos a encontrar versiones muy probadas de las aplicaciones, pero en versiones no muy modernas. Afortunadamente, parece que en últimas versiones se han preocupado de mejorar esto un poco

Por su parte, MariaDB es una bifurcación (fork) de MySQL que tiene todas las características de MySQL y alguna más, aparte de (según parece) ser más rápida.

Y, por último, Apache es el servidor web, el programa que recibe las peticiones de otros ordenadores y manda páginas web. Hay otros servidores más ligeros (Nginx, lighthttp) que seguramente harían que la Raspberry en general y nuestra nube de Nextcloud en particular funcionaran algo más rápido, pero en mi caso opto por Apache por dos motivos. En primer lugar, porque es el único que he manejado y que algo entiendo de su configuración (poco, realmente poco, en realidad) y en segundo lugar porque hay algunas apps de Nextcloud que piden Apache.

Vamos a ver cómo podemos conseguir instalar Apache2, PHP 7.3 y MariaDB 10 en nuestra flamante Raspbian.

Para entender lo que vamos a hacer, es interesante saber cómo funcional los repositorios en Linux. En Windows, cuando instalamos un programa, nos bajamos un archivo que tiene todo lo que necesita el programa. Es sencillo, pero si varios programas necesitan lo mismo, tendremos eso tres veces en lugar de solo una. En Linux el software se organiza en repositorios, servidores que contienen los programas organizados en paquetes, de tal manera que si tres aplicaciones necesitan PHP, por ejemplo, en lugar de que cada aplicación incluya PHP, las tres declaran que necesitan PHP y se instala una sola vez. Es una solución elegante, aunque puede dar problemas de dependencias (esas necesidades se llaman dependencias y se pueden convertir en un dolor de cabeza).

Instalación

Consiste  en ejecutar la orden sudo apt install apache2 mariadb-server php7.3 php-redis php7.3-cli php7.3-curl php7.3-gd php7.3-ldap php7.3-mbstring php7.3-mysql php7.3-xml php7.3-xmlrpc php7.3-zip libapache2-mod-php7.3 phpmyadmin. Tardará un buen rato en descargar y configurar todo esto.

Durante la instalación, nos preguntará qué servidor web deseamos configurar. Seleccionamos Apache marcándolo con la barra espaciadora, vamos a «Aceptar» con el tabulador y pulsamos Intro para aceptar.

Configuración de phpmyadmin

También nos pedirá configurar el usuario root, al que tendremos que poner una contraseña.

Podemos comprobar que la instalación ha funcionado así:

  • Apache: abrimos un navegador y en la barra de direcciones (no en Google, sino ahí arriba del todo, donde ahora mismo pone polkillas.net y un montón de cosas más) ponemos la dirección IP de nuestra Raspberry. Ya sabemos: 192.168.xx.xx. Debería aparecer la siguiente pantalla:
    Página por defecto de Apache2 en Debian
  • PHP: Podemos comprobar que lo hemos hecho bien escribiendo php -v en el terminal y nos debe aparecer el número exacto de versión). También podemos crear un archivo de información para verlo en el navegador. Esta versión es más chula y da más información, lo cual puede ser peligroso si nos quieren atacar, así que la recomendación es borrar este archivo después de comprobar que lo hemos hecho bien.creamos el archivo con sudo nano /etc/www/html/info.php y escribimos lo siguiente en su interior:
    <?php
    phpinfo();
    ?>

    Guardamos con CTRL-X, s y lo vemos en el navegador en la direción http://192.168.xx.xx/info.php, que debe dar algo parecido a esto (se ve cómo estaba en una versión anterior de este tutorial, con PHP 7.0:
    Resultado de phpinfo
  • MariaDB: entramos en la Raspberry vía SSH  y escribimos sudo mysql --user=root mysql,  lo que debe hacer que el cursor cambie a los siguiente:
    Prompt de MariaDB en Raspbian

 

Preparación de la base de datos

Una vez que hemos comprobado que todo funciona, podemos crear el usuario

Ahora debemos crear la base de datos y el usuario que vamos a utilizar con nuestra instalación de Nextcloud. Parar ello, lanzamos estos comandos SQL:

create user 'USUARIO'@'localhost' identified by 'CONTRASEÑA';
cambiando las mayúsculas por el usuario y contraseña que queramos.

create database NOMBREDELABASEDEDATOS;
cambiando las mayúsculas por el nombre que queramos.

Y le concedemos derechos de uso a este usuario que acabamos de crear con

grant all privileges on NOMBREDELABASEDEDATOS.* to 'USUARIO'@'localhost' with grant option;

Por último, recargamos los privilegios de MariaDB con flush privileges; y salimos con exit.

Retoques y mejoras

De inicio, tanto MySQL como MariaDB vienen con ciertas configuraciones de prueba que es mejor eliminar. Para ello escribimos sudo mysql_secure_installation (truco sacado de aquí) y respondemos las preguntas:

Se pide, lo primero la contraseña del usuario ‘root’. El error que aparece se debía a que no recordaba qué contraseña había puesto, y tuve que probar dos. Con la nueva versión no hay contraseña de root, así que te propone crear esa contraseña.

Después nos pide eliminar el acceso anónimo, que es una buena idea, y deshabilitar el acceso del usuario root desde otro ordenador que no sea la Raspberry. También sugiere eliminar una base de datos de prueba, que es innecesaria. Decimos que sí (y) a estas tres preguntas.

Por último, sugiere recargar las tablas de privilegios (lo que quiera que eso quiera decir), También aceptamos y listo.

Otros requisitos de Nextcloud

Para poder ver vistas previas de las imágenes que subamos a nuestra nube, necesitamos instalar un programa como ffmpeg, y para las Tareas, necesitamos el módulo intl de PHP.

sudo apt-get install ffmpeg php-intl

Nextcloud 19 en la Raspberry Pi. Preparando un disco duro externo

Después de las entradas anteriores, ya podríamos instalar Nextcloud en la Raspberry, pero tendríamos un problema. Si una limitación tiene la Raspberry es que no tiene disco duro y las tarjetas SD tienen una capacidad bastante escasa, si lo que pretendemos es usar este pequeño ordenador como nube. La solución está en conectar un disco duro y configurarlo para que nos haga el servicio que queremos.

En este caso vamos a seguir las instrucciones de manuti, creador del blog en español de referencia sobre las Raspberry, Raspberry para torpes.

Si todavía  no hemos conectado ningún disco duro a la Raspberry, es el momento de hacerlo, a ser posible con un concentrador que evite problemas de alimentación.

Un posible problema que podemos tener es que desconectemos el disco duro y, al volverlo a conectar, no se reconozca de la misma manera. Si estuviéramos en Windows, cuando insertamos un pincho USB se le da una letra (G;, H; etc.) y si lo sacamos y volvemos a meter cabe la posibilidad de que la letra cambie, y eso puede ser un problema para nuestra nube. Para ello, vamos a asegurarnos de que esto no pasa.

Cuando hemos conectado el disco duro a la Rasbperry, podemos comprobar si se ha reconocido bien, escribiendo ls -laF /dev/disk/by-uuid/

Reconozco que no sé a qué se refieren exactamente las dos primeras líneas pero, afortunadamente, no hace falta saberlo. Las importantes son el resto. Las que tienen al final la expresión ../../mmcblkXX se refieren a la tarjeta SD, mientras que la otra es la que nos interesa realmente.

En Linux, la base de Raspbian, los discos duros no reciben una letra como en Windows, sino una expresión que tiene tres letras y puede tener un número. En mi caso, el disco duro es sda1. La “s” significa disco duro moderno, los antiguos llevarían una “h”; la “d” del medio es de disco, la letra es algo parecida a la de Windows, pero siempre en minúscula (podría haber sda, sdb, sdc, etc.); y el número se referirá a las particiones que pueda tener el disco duro.

Manuti recomienda formatear el disco duro en formato ext4. Tiene la ventaja de trabajar mejor y más rápido, y el inconveniente de que, si lo hacemos, Windows no reconocerá el disco duro. Puesto que el principal problema de la Raspberry Pi 2 es la velocidad de transferencia de archivos por la red, problema creado porque el diseño que tiene (todas las versiones, de la 1 a la 3, no sé si la 4 también pero también la Zero) presenta un cuello de botella, me parece que no es muy necesario hacerlo, sobre todo si no manejamos normalmente Linux. Si estás interesado en hacerlo, puedes seguir las (muy claras) instrucciones de manuti.

También podemos comprobar la presencia del disco duro con la orden sudo blkid, que nos dará un resultado diferente pero con la información que necesitamos.

pipolkillas-pi-_029

Vemos que el UUID del disco duro es el mismo en los dos casos. Bien, pues vamos a crear una carpeta donde “se monte” el disco duro siempre. O sea, vamos a decirle a la Raspberry que siempre le dé el mismo nombre, como si en Windows le diéramos la misma letra siempre. Para ello creamos un directorio. Puede ser el que queramos, pero es recomendable usar /media/lo-que-sea. Además, para evitarnos problemas de permisos y que siempre podamos abrir cualquier archivo del disco duro, lo dejamos libre, sin protección

Por ejemplo, puesto que uso un disco duro prestado de mi novia que está etiquetado como “Vir”, hago lo siguiente:

sudo mkdir /media/Vir
sudo chmod 777 /media/Vir

Ahora, el siguiente paso es delicado. Alguna vez me he cargado la Raspberry, dejándola sin posibilidad de arrancar bien. Afortunadamente, manuti no solo nos recomienda hacer una copia de seguridad sino que nos explica cómo hacerla. Hacemos una copia de seguridad del archivo que guarda la configuración de los discos:, que se llama /etc/fstab:

ls /etc (comprobamos que el archivo existe)
sudo cp /etc/fstab /etc/fstab.old (lo copiamos con otro nombre en el mismo sitio)
ls /etc (comprobamos que lo hemos hecho bien)

 

Ahora vamos a editar el archivo “fstab” con un programa llamado “nano”: sudo nano /etc/fstab.

Nano es un editor de textos muy sencillo, es el equivalente al Bloc de notas. Ojo que, aunque tengamos ratón porque estamos accediendo por SSH, hay que tener en cuenta que no podemos manejar nano con el ratón; solo podemos hacerlo con el teclado.

Ahora tenemos dos opciones. La primera es algo más sencilla. En el fichero fstab, debemos añadir una línea como la siguiente

/dev/hdaX /media/Vir ntfs-3g defaults,locale=es_ES.UTF8 0 0

Pero esto tiene un problema: si desconectamos este disco duro y conectamos otro, Rasbpian no tendría forma de saber que es otro diferente. Casi seguro, las carpetas y archivos serían diferentes y esto nos puede dar muchos problemas con Nextcoud. Por eso, es más seguro, como recomienda manuti, identificar el disco duro por su “DNI”, el UUID. La línea del archivo fstab sería esta:

UUID=el-largo-código-de-números-y-letras /media/Vir ntfs-3g defaults,locale=es_ES.UTF8 0 0

Y si hemos optado por hacerlo con el formato de Linux, sería esta otra:

UUID=el-largo-código-de-números-y-letras /media/Vir ext4 defaults 0 0

La explicación es esta:

/dev/hdaX (también puede ser /dev/sdaX)UUID=lo-que-sea El nombre del disco duro
/media/Vir La carpeta que hemos creado
ntfs-3g El sistema de archivos del disco duro (si pusiéramos solo ntfs, sería de solo escritura y no nos serviría para Nextcloud, y si no nos hace falta compatibilidad con Windows, será ext4)
defaults,locale=es_ES.UTF8 la configuración: normal (defaults) y en español de España (es_ES). Esta parte no hace falta en ext4.
0 opción para copias de seguridad que la Raspberry no tiene por defecto, así que lo dejamos en 0
0 opción para que fsck (algo parecido a scandisk pero en Linux) escanee esta unidad. Alargaría mucho el tiempo de arranque, así que le decimos que no con el 0

Reiniciamos la Raspberry con sudo reboot y comprobamos si lo hemos hecho bien yendo al directorio donde debería estar el disco duro: cd /media/Vir ,y comprobando el contenido del disco duro con ls.

Nextcloud 19 en la Raspberry Pi. Configurando la Raspberry. Acceso SSH

Una vez tenemos Raspberry Pi OS funcionando en la Raspberry, el siguiente paso es actualizar el sistema.Para ello, tenemos que tener conectados al miniordenador una pantalla y un teclado, que a partir de este paso, gracias a la magia de SSH, no nos volverán a hacer falta.

El primer arranque se demora varios minutos. En versiones anteriores no era así, pero creo que se debe a que ahora al arrancar la primera vez se actualiza y prepara varias cosas, pero las veces siguientes no tardará más de unos instantes.

Por si acaso, para actualizar el sistema, los comandos que tenemos que escribir son estos:

sudo apt-get update
Actualiza la información de actualizaciones

sudo apt-get dist-upgrade
Actualiza los paquetes, los programas.

Como Raspberry Pi OS está configurado por defecto en inglés, puedes tener problemas para escribir el guion. Puedes usar el signo menos del teclado numérico y, si no lo tienes, prueba con el apóstrofe, la tecla que hay a la derecha del 0. Aunque esté así,  a continuación podremos cambiarlo.

Cuando hemos hecho esto, podemos cambiar la configuración de la Raspberry. Enviamos la orden sudo raspi-config y nos aparece este menú.

Hay varias opciones que nos van a interesar. Vamos con ellas en el orden en que aparecen en el menú, por el que nos movemos con las flechas arriba ya abajo. Para saltar a los botones de Aceptar o Cancelar, usamos el tabulador (la tecla que está a la izquierda de la Q).

1 Expand Filesystem

No debería hacer falta hacerlo al ser una instalación nueva, pero no pasa nada por hacerlo. Lo seleccionamos y nos avisa de que estará hecho después de reiniciar.

2 Change User Password

Podemos cambiar la contraseña por defecto del usuario «pi» porque es un agujero de seguridad tener una contraseña conocida. Sin embargo, es preferible crear otro usuario diferente y ponerle la contraseña que queramos. Lo veremos más adelante.

3 Boot Options

Esta opción es interesante si vamos a usar la Raspberry como ordenador de escritorio. Si no, no hace falta tocarla.

4 Internationalisation Options

Para poner la Raspberry en español este es el sitio adecuado. Las opciones que debemos seleccionar son estas:

I1 Change Locale

Buscamos la opción es_ES.UTF8 y la seleccionamos. Aceptamos y en la siguiente pantalla, en la que aparecen muchas menos opciones, la volvemos a seleccionar. Esperamos unos segundos a que se generen las locales.

I2 Change Timezone

Para no tener problemas, sobre todo, con el calendario de Nextcloud, tenemos que asegurarnos de que el servidor está en nuestra zona horaria. Escogemos nuestro continente y después la capital del país en el que estemos. En mi caso, Europa y Madrid.

I3 Change Keyboard Layout

El primer paso aquí no tan importante como el segundo. Si no encontramos nuestro modelo exacto de teclado o no lo sabemos, basta con dejar el «Generic 105 Intl». Lo importante es lo segundo. Seguramente saldrá una serie de opciones del idioma inglés, así que bajamos a «Other» y buscamos el idioma español. Una vez lo hemos localizado, la primera opción suele bastar, a no ser que tengamos algún teclado específico.

I4 Change Wifi Country

Yo no tuve problemas con la wifi antes de configurar esto, pero no sobra busca ES Spain y seleccionarlo, si vamos a conectar la Raspberry vía Wifi.

7 Advanced Options

De todas las opciones que tenemos aquí, solo comento las que nos pueden ayudar a que vaya mejor. Son estas:

A3 Memory Split

Si no tenemos escritorio instalado, la GPU (memoria gráfica) no necesita mucho, podemos reducir la cantidad que aparece a 16, que es el mínimo.

A4 SSH

Importantísimo. Sin más.

Según Wikipedia, SSH es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red.

Es decir, SSH sirve para “entrar” en un ordenador desde otro. Si está activado, podemos tener una línea de comandos en un ordenador diferente y trabajar en la Raspberry. En versiones anteriores, venía activado por defecto, pero desde hace un tiempo no es así. Este es el paso fundamental para poder usar la Raspberry sin necesidad de tenerla conectada a monitor y teclado., por lo que tendremos que seleccionar esta opción y activarla. Una vez que lo hemos hecho, podemos conectarnos a la Raspberry desde otro ordenador.

En Windows se puede usar PuTTY para ello y en Linux no hace falta instalar nada. Veamos:

No hace falta instalar PuTTY, al abrir el archivo descargado se abre directamente esta ventana. En el campo “Host Name (or IP address)” tenemos que escribir lo que aparece en la imagen, cambiando las  XX con unos números que estarán entre 0 y 255. Para saber exactamente qué número poner podríamos ir pr obando de uno en uno, pero hay una forma mucho más sencilla: cuando  hayamos acabado de configurar la raspberry,,podemos  escribir la orden ifconfig. Sale un montón de información pero lo que tenemos que buscar es la expresion inet address seguida de un número compuesto de cuatro cifras separadas por un punto y que sean las dos primeras esos 192.168. Si estamos conectados al router con un cable, estará en la sección eth0; si estamos usando wifi, estará seguramente en la sección wlan0.

Si lo hemos hecho bien, nos aparecerá una alerta. Es normal, solo nos avisa de que nos estamos conectando a un ordenador nuevo y nunca hemos dicho a PuTTY que se fíe. Pulsar en sí hace que PuTTY, en adelante, confíe en nuestra Raspberry.

A continuación nos sale una pantalla nueva que nos pedirá el usuario de Raspberry PI OS (pi, si no lo cambiamos) y la contraseña (raspberry por defecto, ya cambiaremos esto).  Al escribir la contraseña, como suele pasar en Linux, parece que no pasa nada, pero no es preocupante:

Al pulsar Intro, nos aparece el mismo mensaje que aparece en el monitor de la Raspberry al arrancar, lo que nos confima que esa pantalla “es” la Raspberry.

En Ubuntu y otros Linux, abrimos un terminal (CTRL+ALT+T o abrimos el tablero y escribimos “terminal”). Para usar SSH, la forma es sencilla:

ssh pi@192.168.XX.XX

Igual que en PuTTY, cambiamos los dos últimos números por el resultado de ifconfig:

¡Voilà! A partir de este momento no nos hace falta tener un monitor conectado a la Raspberry mientras haya conexión a internet.

A0 Update

Sirve para actualizar el mismo programa raspi-config. Lo más probable es que no haya actualizaciones.


Con esto tenemos configurada nuestra Raspberry y podemos empezar a instalar los programas que vamos a necesitar para que funcione bien nuestro Nextcloud.

La penúltima cosa que podemos hacer es fijar la IP de la Raspberry para no tener problemas de conexión. En mi experiencia no me ha pasado porque no he desconectado nunca el cable de red que une la Raspberry con el router. Pero si este fuera el caso y hubiera algún problema con la conexión, podría ser porque se ha asignado una IP diferente a la Raspberry. En este caso, recomiendo acudir a Raspberry para torpes, donde manuti tiene 3 entradas que nos pueden ser útiles:

Por último, una cosa que me parece muy recomendable es cambiar el usuario por defecto, (pi), por otro diferente y la contraseña de root. Esto hace que sea más difícil que un posible atacante pueda entrar en la Raspberry, pues no solo tiene que adivinar la contraseña sino también el usuario. Para ello seguiremos algo de un tutorial de Juan Jose Ramirez Lama en su blog juaramir.com y una página vieja pero aún muy útil, Principiante Linux.

Para cambiar la contraseña del superadministrador, escribimos la siguiente orden:

sudo passwd

Nos pide que escribamos la nueva contraseña y que la repitamos, por si acaso nos hemos equivocado al escribirla. Después iniciamos sesión como administrador con el comando sudo su y metemos la contraseña que acabamos de cambiar si nos la pide.

Para cambiar el usuario “pi” debemos crear un usuario nuevo con la siguiente orden:

adduser USUARIONUEVO, sustituyendo las mayúsculas por el nombre que queramos darle al usuario. Como estamos como administrador, no necesitamos sudo delante.

Nos pide que escribamos dos veces la contraseña del nuevo usuario y nos hace una serie de preguntas que no hace falta responder, podemos pulsar Intro en cada una.

A continuación podemos modificar el usuario para darle derechos de administrador. Con la orden groups pi veremos los grupos a los que pertenece ese usuario, y podemos usar groups USUARIONUEVO para comprobarlo en el nuevo. Para darle permisos, hay que dar la siguiente orden:

usermod -G adm,dialout,cdrom,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio,sudo USUARIONUEVO

De la ristra de palabras entre comas, lo más importante para nuestros objetivos es “sudo”. El resto da otros derechos que para otros usos de la Raspberry serán necesarios. Podemos comprobar que lo hemos hecho bien volviendo a ejecutar groups USUARIONUEVO, y veremos que ya tiene los mismos derechos que “pi”.

Cerramos la sesión de «root» escribiendo exit y la sesión de «pi» volviendo a escribir lo mismo, y volvemos a entrar, ahora con el nuevo usuario. Ahora ya podemos eliminar el usuario pi con la orden sudo userdel -r pi.

Cargar más