Raspberry Pi - OpenMediaVault


Índice:

   Enlaces

   Instalación

      Acceso inicial desde el navegador de un cliente

      Configuración inicial

         Asignar una IP fija

         Servicio SSH

      Almacenamiento

         Discos

         Sistema de Archivos

         Carpetas Compartidas

            Permisos

            ACL - Lista de Control de Acceso

      Grupo y Usuarios

      OMV Permisos y Privilegios

         ACL - Lista de control de acceso

         Samba - Extra Options:

      Servicios

         Flashmemory

      SMB/CIFS

   Plugins

      Autoshutdown

      MiniDlna - ReadyMedia

   Docker

      Instalación y configuración

         Instalar Compose

         Configuración Directorios de Compose

         Configuración Usuario(s) de Docker/Compose

         Configuración archivo de variables de ambiente globales

      Transmission

      Jellyfin

      Plex

      Clamav

      Nginx Proxy Manager

      Pi-hole

   Pendientes de resvisar


Actualización: 30 de diciembre de 2025



Enlaces  ⮴  

OpenMediaVault

Installing OMV7 on a Raspberry PI

Wiki OMV Extras

Guía de usuario

openmediavault 7.x documentation

OpenMediaVault Plugin Developers

Install Script

How to do ...

Videos Human


Instalación  ⮴  

Installing OMV7 on a Raspberry PI


  1. Con Raspberry Pi Imager crear la MicroSD con "Raspberry Pi OS ( Legacy,

    64-bit) Lite". A port of Debian Bookworm with security updates and no

    desktop environment.


    Atención:Se usa este sistema operativo porque...

    • Lite   -> El SO no debe tener escritorio.

    • Legacy -> OMV 7 es la última versión estable y se instala sobre

      Debian 12. Con Debian 13 se instala la versión OMV 8 que

      es inestable.


    Opciones de Raspberry Pi Imager:

    • General

      • Set hostname: raspberrypi.local (Poner el adecuado)

      • Set username and password

        • Username: Nombre del que será administrador, no poner juanp

          (en las pruebas juanp)

        • Password: Una contraseña fuerte (en las pruebas 1)

          Estas entradas crearán un usuario administrador, para su uso en

          la línea de comandos, con capacidades SUDO

      • Set locale settings

        • Time zone: Europe/Madrid

        • Keyboard layout: es

    • Services

      • Enabled SSH

        Use Password authentication


  2. Acceder via ssh (ssh juanp@192.168.0.137) a la Raspberry pi

    El router debería tener asignada esa ip a la tarjeta de la rasberry pi

    ( RaspBerry Pi - DC:A6:32:48:39:20 - 192.168.0.137 (fija) )

    • Actualizar

                  sudo apt-get update &&

                  sudo apt-get upgrade -y


      Para ver la lista de repositorios:

                    sudo grep -Erh ^deb /etc/apt/sources.list*

                    cat /etc/apt/sources.list


    • Instalar OMV 7:

    • Install Script

    •             sudo wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash

      Tras la instalación hay que reiniciar si no se hace auotmáticamente.

                  sudo reboot


Acceso inicial desde el navegador de un cliente  ⮴  

Una vez realizada la instalación de OpenMediaVault para el acceso inicial al

servidor desde un navegador se escribe:

    http://[IP_NAS]

    http://192.168.0.137

Si no se puede acceder hay que asegurarse de que el servicio ngnix está

activo, para ello desde la terminal de la rasberry pi ejecutar:

    sudo systemctl start nginx

Iniciar sesión con admin - openmediavault


Configuración inicial  ⮴  

Leer Configuración inicial

Infornación adicional 1

Información adicinal 2


  1. Revisar las actualizaciones disponibles [Sistema]

  2. Cambiar contraseña administrador [Icono Usuario]

  3. Crear un cerfificado SSL  [Sistema - Certificados - SSL]

  4. Configurar conexión segura usando el certificado creado

    SSL/TLS habilitado

    Forzar SSL/TLS

    [Sistema - Área de trabajo]

  5. Configurar el Dashboard  [Opciones de usuario - Dashboard]

  6. Activar omv-extras [Sistema - Omv-Extras]

  7. Configurar Notificaciones


Asignar una IP fija  ⮴  

Dos opciones:


  1. Descrita en los manuales asigando una ip fuera del rango, ...

    Esta forma No funciona.

  2. Manteniendo en el router la asignación de la IP a la dirección MAC

    de la raspberry pi


Servicio SSH  ⮴  

Openmediavault permitirá el acceso SSH al usuario root de forma predeterminada

para poder acceder a un sistema problemas en caso de una instalación rota u

otras situaciones de mantenimiento. Debe desactivar este comportamiento en la

página Servicios | SSH por razones de seguridad después de la instalación.


Para mantener acceso root, debe crear un usuario no privilegiado y agregarlos

a los grupos _ssh y sudo. Después de eso, puede acceder con SSH en el sistema

con este usuario no privilegiado y ejecutar sudo su.


Revisar la configuración en el archivo:

    cat /etc/ssh/sshd_config


      Protocol 2

      HostKey /etc/ssh/ssh_host_rsa_key

      HostKey /etc/ssh/ssh_host_ecdsa_key

      HostKey /etc/ssh/ssh_host_ed25519_key

      SyslogFacility AUTH

      LogLevel INFO

      LoginGraceTime 120

      StrictModes yes

      IgnoreRhosts yes

      HostbasedAuthentication no

      PermitEmptyPasswords no

      ChallengeResponseAuthentication no

      X11Forwarding yes

      X11DisplayOffset 10

      PrintMotd no

      PrintLastLog yes

      TCPKeepAlive yes

      AcceptEnv LANG LC_*

      Subsystem sftp /usr/lib/openssh/sftp-server

      UsePAM yes

      AllowGroups root _ssh       <<=== [Revisar]

      AddressFamily any

      Port 22

      PermitRootLogin no          <<=== [Revisar]

      AllowTcpForwarding no

      Compression no

      PasswordAuthentication yes

      AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 /var/lib/openmediavault/ssh/authorized_keys/%u

      PubkeyAuthentication yes


Con la linea AllowGroups root _ssh sólo se permite acceso a los usuarios

pertenecientes a los grupos root y _ssh, hay que comprobar:


  1. Que el grupo _ssh sólo contenga al usuario creado, en este caso juanp


          cut -d: -f1,4 /etc/group | grep _ssh


    El resultado debe ser:


          _ssh:juanp


  2. Que el grupo root esté vacío


          cut -d: -f1,4 /etc/group | grep root


    El resultado debe ser:


            root:


  3. Comprobar que no se permite el acceso como root con la directiva:


        PermitRootLogin no


También se podría habilitar exclusivamente al usuario juanp con la directiva


  AllowUsers


Almacenamiento  ⮴  

Ver Shared folder permissions


Discos  ⮴  

Configurar los discos que se usarán como almacenamiento. [REVISAR]


ATENCIÓN:Si se va a usar Docker usar EXT4.

Ver aparatado backup_compose


Sistema de Archivos  ⮴  

Crear el sistema de archivo de los discos configurados anteriormente. Pre-

feriblemente usar EXT4.


Carpetas Compartidas  ⮴  

Crear y configurar las carpetas necesarias, tanto para compartirlas poste-

riormente como las necesarias para los plugins, ...


Los permisos asignados al crear las carpetas se asignan a:


Permisos  ⮴  

Los permisos asignados con esta opción son usados por los servicios para

configurar los derechos de acceso de usuarios y grupos.


Esta configuración no tiene ningún efecto sobre los permisos del sistema

de archivos.


ACL - Lista de Control de Acceso  ⮴  

Los permisos asignados aquí prevalecen sobre los permisos tradicionales.


Para modificar los permisos del sistema de archivos ha de usarse la opción

ACL (Lista de Control de Acceso).


Estas carpetas serán accesibles sólo si posteriormente se configuran en el

servicio adecuado (CIFS / NFS)


Grupo y Usuarios  ⮴  

Crear los necesarios

Información


Para impedir el acceso a la consola local o remota del servidor, en el apar-

tado Shell seleccionar /usr/sbin/nologin


OMV Permisos y Privilegios  ⮴  

Permissions Overview

Privileges and permissions explained under OMV


Las capas de permisos se pueden ajustar con:


Las sucesivas capas sólo pueden restringir permisos que se haya otorgado en

alguna previa, es decir, en la capa Samba no puede otorgarse permisos de escri-

tura a un grupo si en el apartado carpeta compartida sólo se le ha asignado

permiso de lectura.


ACL - Lista de control de acceso  ⮴  

En el contexto de un NAS de Linux, utilizado como servidor doméstico, se

deben evitar los ACL. Mezclar permisos estándar de Linux y ACL puede causar

efectos inexplicables, si no se hace con cuidado. Sin embargo, los ACL se

pueden utilizar, si es necesario, para “negar” explícitamente el acceso a

uno o más usuarios en el Grupo.


Samba - Extra Options:  ⮴  

Este campo presenta a los administradores domésticos y de pequeñas empresas

algunas opciones interesantes para la administración de acciones. Por

ejemplo, en la mitad superior de este cuadro de diálogo de Samba, existe la

opción de solo lectura. En un recurso compartido de Samba, el interruptor de

solo lectura restringirá aún más a los usuarios de grupo a acceso de solo

lectura, incluso si la carpeta compartida a continuación permite el acceso de

escritura.


Sin embargo, una “write list” permitirá a un administrador omitir

selectivamente el interruptor de solo lectura de Samba. En este caso, si la

instrucción write list=Fred se agrega al campo Opciones adicionales, el

usuario Fred tendrá acceso de escritura, mientras que el resto de los

usuarios del grupo seguirán estando restringidos a solo lectura, aplicado por

el interruptor de solo lectura de Samba.


Lo mismo podría hacerse para los usuarios del grupo con write list=@users

Agregar esta declaración permitiría a todos los usuarios del grupo, escribir

el acceso mientras se restringen otros con el interruptor de solo lectura.


Servicios  ⮴  

Flashmemory  ⮴  

El propósito principal del Plugin de Memoria Flash es reducir la frecuencia

de escrituras en los medios flash mediante la consolidación de escrituras

muy pequeñas en una escritura masiva más grande que se descarga en la unidad

de arranque al apagarse. Esto reduce drásticamente el número de bloques es-

critos físicamente en el dispositivo flash. El plugin puede reducir el núme-

ro de bloques escritos en la unidad Flash, potencialmente, por un orden de

magnitud o 1/10 de la cantidad que de otro modo se escribiría. Por extensión,

una unidad de un tamaño determinado podría durar hasta 10 veces más de lo que

duraría sin el plugin Flash Media.

Más información


SMB/CIFS  ⮴  

Samba (SMB) Network Shares

Create a network share


Marcar las casillas


La configuración se encuentra en /etc/samba/smb.conf

    sudo nano /etc/samba/smb.conf


Plugins  ⮴  

Se prueba Antivirus y File Browser


Autoshutdown  ⮴  

Información

Raspberry Pi no soporta la suspensión ni la hibernación


MiniDlna - ReadyMedia  ⮴  

ReadyMedia

[Sistema - Plugins]


  1. Crear un grupo de usuarios para acceder: gmultimedia

    [Gestión de usuarios - Grupos]

  2. Crear (Asignar si ya existiera) un usuario para acceder Read/Write a la

    carpeta multimedia. Agregarle al grupo gmultimedia. Pruebas ujuanp

    [Gestión de usuarios - Usuarios]

  3. Crear una carpeta compartida para almacenar los archivos multimedia.

    [Almacenamiento - Carpetas Compartidas]

    • Nombre: multimedia

    • Permisos: Lectura/Escritura para todos menos para Otros

    • Asignar permisos Read/Write al grupo multimedia

      [Almacenamiento - Carpetas Compartidas - Permisos]

  4. Configurar acceso a la carpeta multimedia para escribir, leer, ... con

    el servicio SMB.

    • Read Only

    • write list=ujuanp

  5. Instalar el plugin y activar el servicio

  6. Añadir la carpeta multimedia


La configuración se encuentra en /etc/minidlna.conf


Si está activo el FireWall hay que incluir las reglas que permitan su uso.


Docker  ⮴  

Instalación y configuración  ⮴  

Enlaces:


Instalar Compose  ⮴  

En [Sistema - Plugins] seleccionar e instalar: openmediavault-compose 7.X


La instalación del plugin openmediavault-compose también instalará el plugin

openmediavault-sharerootfs como dependencia.


Configuración Directorios de Compose  ⮴  

Servicios > Compose > Configuracion


La principal recomendación aquí es mantener separados los datos de docker y

el sistema operativo OMV.


Los directorios recomendados son:



  1. Archivos compose >> [Directorio: appdata]


    • Esta carpeta contiene los archivos de configuración y los datos per-

      sistentes de los contenedores por defecto.


    • El plugin creará subcarpetas dentro de la carpeta de appdata para ca-

      da archivo de composición que generemos. El nombre de cada subcarpeta

      será el mismo que el archivo de composición.


    • Esta subcarpeta contendrá una copia del archivo yml y el archivo env

      generado en la GUI. Estas son solo copias de seguridad, no deben mo-

      dificarse excepto en la interfaz gráfica de usuario del plugin.


    • Si establece volúmenes con rutas relativas (a través de la expresión

      ./ por ejemplo ./config) en sus archivos de composición, esas carpe-

      tas se crearán dentro de la subcarpeta correspondiente a ese archivo

      de composición.


  2. Datos >> [Directorio: data]


    • El uso de este campo es opcional. Este campo en la configuración del

      plugin le permite definir una ruta a una carpeta compartida utilizan-

      do la variable CHANGE_TO_COMPOSE_DATA_PATH. En la GUI se puede ver

      una nota que dice: “Opcional - Ubicación de los datos persistentes

      del contenedor”, este era el objetivo cuando se creó el plugin ya que

      en ese momento las variables de entorno no eran compatibles para las

      rutas en la utilidad de bakup del complemento. En este punto, ya no

      es un problema y todas las rutas se pueden definir en el archivo de

      variables de entorno.


    • Este campo es útil, a pesar de la leyenda en la GUI sobre datos per-

      sistentes, utilizaremos esta variable para definir la ruta a la car-

      peta de datos del sistema. Por los datos de los usuarios entendemos

      el sistema de archivos de almacenamiento principal donde tendrá la

      mayoría de los datos, como películas u otros tipos de archivos.


  3. Backup  >> [Directorio: backup_compose]


    • El plugin de composición le permite programar copias de seguridad

      automáticas de datos de contenedores persistentes. Estas copias de

      seguridad se almacenarán en esta carpeta.


  4. Docker  >> [Directorio: /var/lib/docker  -  docker ]


    • Esta carpeta contiene los archivos que docker utiliza internamente,

      como imágenes descargadas y otra información necesaria para que docker

      funcione.


    • Para definir esta ruta es necesario definir la ruta completa. Los en-

      laces simbólicos a veces pueden causar problemas.


ATENCIÓN:

  • El sistema de archivos donde está la carpeta docker debería ser

    preferiblemente EXT4.

  • La ruta si se define ha de ser la ruta completa al directorio.


Configuración Usuario(s) de Docker/Compose  ⮴  


El mecanismo de seguridad de docker se basa en asignar al contenedor en nues-

tro sistema los permisos equivalentes a los permisos que el usuario asignado

a ese contenedor tiene.


Hay dos opciones:


  1. Crear un único usuario que tenga permiso para escribir/leer los directo-

    rios que todos los contenedores necesiten y que no tenga acceso a los ar-

    chivos del sistema.


  2. Crear un usuario específico con los permisos pertinentes para cada conte-

    nedor.


En los enlaces hay información detallada.


Por ahora se opta por la primera opción, se crea un usuario llamado appsuer

y se le da acceso exclusivamente a la carpeta appdata


Configuración archivo de variables de ambiente globales  ⮴  

Gobal environmental variables


El plugin le permite definir variables de entorno global en un archivo que es-

tará disponible para todos los contenedores en ejecución. Esto significa que

las variables definidas en este archivo se pueden utilizar en los diferentes

archivos de composición. Cuando inicie un contenedor, docker reemplazará esas

variables con sus valores reales.


Esto es muy útil para definir rutas a carpetas o al usuario que ejecuta el con-

tenedor. Definimos estos valores una vez y los actualizamos automáticamente en

todos los contenedores.



Archivo  de variables de ambiente globales:


    # THE FOLLOWING VARIABLES CAN BE USED IN ANY COMPOSE FILE

    # THEIR VALUE WILL BE REPLACED BY THE VALUE ASSIGNED HERE

    # YOU CAN ADD AS MANY VARIABLES AS YOU NEED



    # Customize the PID and GID value of your appuser user.

    # You can see it in the OMV GUI in the USERS > USERS tab


    APPUSER_PUID=1003

    APPUSER_PGID=100


    # Customize your time zone value.

    # You can see it in the OMV GUI in the SYSTEM > DATE & TIME tab


    TIME_ZONE_VALUE=Europe/Madrid


    # In this file you can define how many paths you need for different compose files.

    # The following are examples corresponding to the example system in the Docker on OMV document on the omv-extras wiki.

    # Customize the values ​​according to your system configuration.


    PATH_TO_APPDATA=/srv/dev-disk-by-uuid-b6c7c45a-2420-40a6-9140-c2214e89a148/docker/appdata

    PATH_TO_DATA=/srv/dev-disk-by-uuid-b6c7c45a-2420-40a6-9140-c2214e89a148/docker/data

    #PATH_TO_DOCUMENTS=

    PATH_TO_MEDIA=/srv/dev-disk-by-uuid-b6c7c45a-2420-40a6-9140-c2214e89a148/multimedia

    #PATH_TO_MOVIES=

    #PATH_TO_PHOTOS=

    PATH_TO_BACKUPS=/srv/dev-disk-by-uuid-b6c7c45a-2420-40a6-9140-c2214e89a148/docker/backup_compose

    PATH_TO_DOWNLOADS=/srv/dev-disk-by-uuid-b6c7c45a-2420-40a6-9140-c2214e89a148/download


Los valores de la variables se corresponden con los del usuario appsuser


    APPUSER_PUID=1003

    APPUSER_PGID=100


En la GUI de OMV, vaya a SERVICIOS > COMPONER > ARCHIVOS y presionar el botón

EDITAR ARCHIVO DE ENTORNO GLOBAL.


En el campo ENTORNO GLOBAL copia y pega el archivo de anterior.


Personalízalo con tus propios valores:



Personalice los valores de todas las rutas según la configuración del sis-

tema. Si necesitas definir otras rutas diferentes también puedes hacerlo

aquí de la misma manera que el resto de las variables.


Puede definir otras variables de acuerdo a sus necesidades, como las contra-

señas de la base de datos o cualquier valor que necesite su archivo compues-

to.



Transmission  ⮴  

Enlaces

linuxserver/transmission


Acceso web con ip:9091


Configuración:

    # Date: 2025-06-01

    # https://hub.docker.com/r/linuxserver/transmission

    services:

      transmission:

        image: lscr.io/linuxserver/transmission:latest

        container_name: transmission

        environment:

          - PUID=${APPUSER_PUID}

          - PGID=${APPUSER_PGID}

          - TZ=${TIME_ZONE_VALUE}

          - TRANSMISSION_WEB_HOME= #optional

          - USER= #optional

          - PASS= #optional

          - WHITELIST= #optional

          - PEERPORT= #optional

          - HOST_WHITELIST= #optional

        volumes:

          - ${PATH_TO_APPDATA}/transmission/config:/config

          - ${PATH_TO_DOWNLOADS}/transmission/downloads:/downloads

          - ${PATH_TO_DOWNLOADS}/transmission/watch:/watch

        ports:

          - 9091:9091

          - 51413:51413

          - 51413:51413/udp

        restart: unless-stopped




Jellyfin  ⮴  

    # Date: 2025-06-01

    # https://hub.docker.com/r/linuxserver/jellyfin

    # https://jellyfin.org/docs/

    services:

      jellyfin:

        image: lscr.io/linuxserver/jellyfin:latest

        container_name: jellyfin

        environment:

          - PUID=${APPUSER_PUID}

          - PGID=${APPUSER_PGID}

          - TZ=${TIME_ZONE_VALUE}

          #- JELLYFIN_PublishedServerUrl=192.168.0.5 #optional

        volumes:

          - ${PATH_TO_APPDATA}/jellyfin/config:/config

          - ${PATH_TO_MEDIA}:/multimedia

        ports:

          - 8096:8096

          #- 8920:8920 #optional

          #- 7359:7359/udp #optional

          #- 1900:1900/udp #optional

        restart: unless-stopped


Plex  ⮴  

    # Date: 2025-06-01

    # https://hub.docker.com/r/linuxserver/plex

    # https://github.com/plexinc/pms-docker

    services:

      plex:

        image: lscr.io/linuxserver/plex:latest

        container_name: plex

        network_mode: host

        environment:

          - PUID=${APPUSER_PUID}

          - PGID=${APPUSER_PGID}

          - VERSION=docker

          - PLEX_CLAIM= #optional

        volumes:

          - /dev/shm:/transcode

          - /etc/localtime:/etc/localtime:ro

          - ${PATH_TO_APPDATA}/plex/database:/config

          - ${PATH_TO_MEDIA}:/multimedia:/multimedia

        restart: unless-stopped



Clamav  ⮴  

Manual



Nginx Proxy Manager  ⮴  

Nginx Proxy Manager




Pi-hole  ⮴  





Pendientes de resvisar  ⮴  

openmediavault-sftp 7.0.6

sftp server

Configure sftp server using jails


openmediavault-timeshift 7.0.1


openmediavault-webdav 7.0.8


openmediavault-wireguard 7.0.7

WireGuard is an extremely simple yet fast and modern VPN that utilizes

state-of-the-art cryptography. It aims to be faster, simpler, leaner, and

more useful than IPsec, while avoiding the massive headache. It intends to

be considerably more performant than OpenVPN. WireGuard is designed as a

general purpose VPN for running on embedded interfaces and super computers

alike, fit for many different circumstances.


Changeteection

Monotorizar cambios en web,s


mkdocs


pihole

Pi-hole es una herramienta de bloqueo de anuncios a nivel de red que permite

filtrar anuncios y rastreadores en toda tu red local.


Instalado en una Raspberry Pi, Pi-hole actúa como un servidor de nombres de

dominio (DNS) para tu red. Cuando un dispositivo en tu red intenta acceder a

un sitio web, consulta al servidor DNS para traducir el nombre del sitio en

una dirección IP.








%5*Cb20@dEe29#4a0{}B98de54F@$5#d1a49]9871*Ec4d@19B06]349f[@-4{aA


# Date: 2025-06-01

# https://hub.docker.com/r/linuxserver/plex

# https://github.com/plexinc/pms-docker

services:

plex:

image: lscr.io/linuxserver/plex:latest

container_name: plex

network_mode: host

environment:

- PUID=${APPUSER_PUID}

- PGID=${APPUSER_PGID}

- VERSION=docker

- PLEX_CLAIM= #optional

volumes:

- /dev/shm:/transcode

- /etc/localtime:/etc/localtime:ro

- ${PATH_TO_APPDATA}/plex/database:/config

- ${PATH_TO_MEDIA}:/multimedia:/multimedia

restart: unless-stopped



mkdocs  | Error: Config file 'mkdocs.yml' does not exist.



- PUID=${APPUSER_PUID}

- PGID=${APPUSER_PGID}

volumes:

- ${PATH_TO_APPDATA}/mkdocs/config:/config