https://paquita.masto.host/polkillas

Programar reuniones en Teams para invitados

Este año la Comunidad de Madrid nos ha ofrecido de nuevo a los centros la posibilidad de disponer de una cuenta de office 365, que incluye además Teams como herramienta de comunicación. En nuestro centro no estamos usándolo, ya tenemos organizadas las clases semipresenciales con otras herramientas, pero una cosa que hemos encontrado que es muy útil es que tanto con Jitsi como con Meet no se pueden organizar reuniones para más de 100 participantes, y en nuestro caso, con cerca de 200 alumnos por nivel, nos es necesario para cosas como reuniones informativas con padres o incluso para las reuniones de la junta de delegados, porque al tener 60 grupos, los delegados y subdelegados superan esa cifra de 100. Y mientras tanto, Teams funciona bien con reuniones de más de 150 personas.

La forma que utilizo yo para programar estas reuniones virtuales con Teams, que no tiene por qué ser la más rápida ni la más sencilla es esta:

  1. Es muy recomendable que quien vaya a participar en la reunión  se descargue la aplicación de Teams, tanto para ordenador como para móvil. Sin embargo, no es necesaria para crear la reunión.
    En el caso de los invitados a la reunion, la app no es necesaria, pero solo se puede usar Google Chrome (y solo Google Chrome, no valen otros navegadores basados en Chromium) para unirse a la reunión. Por cierto, si no queremos instalar la app en el móvil, además de usar Chrome habrá que pedir el sitio de escritorio para que funcione directamente en el navegador.
  2. Para organizar la reunión, vamos a la web de Teams.  Tenemos que iniciar sesión poniendo primero el correo de Educamadrid y después la contraseña. También nos preguntará si queremos dejar la sesión abierta: sí, si es un ordenador privado; no, si es un ordenador compartido.
  3. En el apartado de «Calendario» creamos una reunión con las horas aproximadas de inicio y fin.  La reunión se puede iniciar antes de la hora fijada y se puede alargar más allá de la hora de fin, pero está bien ponerlo a modo informativo.
  4. También tenemos que añadir asistentes opcionales, para que pueda asistir quien no tenga cuenta de Teams. Yo pongo una cuenta mía personal, por ejemplo, aunque no es necesario, se puede usar cualquier cuenta.
    Una vez lo hemos hecho, Guardamos.
  5. Por último, pinchamos en Opciones de reunión  para que nos salga un menú similar a este.

    Aquí hay que cambiar lo siguiente:

    1. ¿Quién puede omitir la sala de espera? –> Todos (porque si no, en una reunión tan grande es un horror para el organizador estar dando paso a cada persona)
    2. ¿Quién puede presentar? –> Lo ideal es «Solo yo» o, como mucho, «Personas de mi organización», por ejemplo para reuniones donde dirección, jefatura u orientación quieren presentar cosas. Para que esto funcione, el resto de profesores tiene que acceder con su cuenta de Educamadrid.
      Guardamos con el botón morado.
  6. Por último, en la vista de detalle de la reunión, pulsamos con el botón derecho del ratón y seleccionamos «Copiar la ruta del enlace», para poder copiarlo en el correo que enviemos a los participantes a través de Roble o en la página web. Este es el enlace que los participantes deberán abrir en la app de Teams o en Chrome.

16 de diciembre

Hoy hemos trabajado en clase y en casa el análisis morfológico de palabras con los ejercicios 36 y 37 de la página 24 y el 3 de la página 25.

A partir de mañana y sobre todo en enero vamos a empezar con la poesía barroca. Para trabajar debéis tener en el móvil estos cuatro archivos del aula virtual:

  • Antología poética del Barroco (pdf)
  • Recursos literarios en el comentario de texto (pdf)
  • Tarjeta con las figuras retóricas (odt)
  • Principales estrofas (odt)

Además, tenéis que imprimir y recortar las tarjetas con las figuras retóricas. Word debería abrir los archivos odt, pero si os da problemas, os podéis descargar LibreOffice en el ordenador (enlace en el aula virtual) y Collabora en el móvil.

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.

Actualización 15 de octubre: Si queremos instalar una versión más moderna de PHP, que no dé problemas con algunas apps como Passwords y con versiones futuras de Nextcloud, podemos añadir el repositorio de Sury, siguiendo estas instrucciones que traduzco:

sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg Conseguimos la clave del repositorio de Sury

echo «deb https://packages.sury.org/php/ buster main» | sudo tee /etc/apt/sources.list.d/php.list Añadimos a los orígenes del software el repositorio

sudo apt update Actualizamos

 


 

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

Cargar más