Ayuda con la creación de un NAS

Como un proyecto de la FP tengo que hacer un nas, la cuestion es que bueno, ya lo tengo hecho pero me hace falta algo… Una interfaz grafica. Estaba pensando en utilizar nextcloud, pero honestamente estoy perdido, el nas lo estoy haciendo con un raspberry pi 4, naturalmente una arquitectura diferente y no se si funcione, he visto que tambien existe nextcloudpi, pero creo que termine con mas dudas o no se, habia entendido que estaba descontinuado o algo asi, no se. Y con los tutoriales que hay honestamente no me ubico… Ya seria lo ultimo que me faltara antes de empezar a trabajar con el escrito, asi que agradeceria bastante si alguien me guia en esta parte.

debido a la gran ayuda recibida por @5ombr4 he decido liberar el guion de todo lo que he hecho hasta el momento, si ven mucha x, es solo por censurar nombres, contraseñas y ip, quizas no seria bueno tomarse esto como un curso, la mitad de estas cosas las he hecho de pura suerte, pero quizas les sirva:

al principio intente utilizar openmediavault, pero veo que todos los paquetes que venia en el script estan rotos, asi que decidi hacer todo desde cero con samba

lo primero que hice despues de instalar raspbian. me conecte al raspberry pi con mi portatil por medio de ssh

depues desde mi portatil actualice y luego instale samba samba-common-bin

luego cree una carpeta llamada "compartido" y aplique el siguiente comando en ella "chmod -R 777"

ahora configuro el archivo /etc/samba/smb.conf.

al final del archivo puse esto:

[compartido]
  comment = Datos compartido
  path = /home/xxxx/compartido
  browsable = yes
  writable = yes
  create mask = 0777
  directory mask = 0777
  guest ok = no


luego utilice el siguiente comando:
sudo smbpasswd -a xxxx

luego el siguiente comando:

sudo systemctl restart smbd


mi sistema utiliza artix (archlinux) 
asi que tuve que instalar un cliente de samba
el comando utilizado para instalarlo "sudo pacman -S smbclient"

luego accedo al archivo asi:

smbclient //xxxx/compartido -U xxxx

luego creo un directorio en mi equipo personal (no raspberry pi)

sudo mkdir -p /mnt/compartido


luego utilizo el siguiente comando:

sudo mount.cifs //xxxx/compartido /mnt/compartido \
  -o username=xxxx,uid=$(id -u),gid=$(id -g)
  
con esto he creado una capeta compartida entre el raspberry pi y mi portatil
he hecho una prubea copiando el juego de "supertux" y se ha copiado exitosamente.
luego descargue el archivo y se descargo. la descarga fue algo lenta, a pesar de que lo tengo el raspberry pi al lado, se nota que esto usa internet.

cree el archivo
~/.smbcredentials

con el contenido del usuario y la contraseña

protegi el archivo para solo pueda ser leido


añadi esto al archivo /etc/fstab:

//xxxx/compartido  /mnt/compartido  cifs  credentials=~/.smbcredentials,uid=1000,gid=1000  0  0

la unidad esta montada. y puedo comprobar que el archivo que puse sigue ahi.


ahora intentando instalar nextcloud como una interfaz grafica para el raspberry pi, se decidio utilizar este comando:

sudo apt update && sudo apt upgrade -y


sudo apt install apache2 mariadb-server libapache2-mod-php php-gd php-mysql php-curl php-mbstring php-intl php-xml php-zip php-bz2 php-json php-ldap php-imagick -y

sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation

Switch to unix_socket authentication [Y/n] N

Change the root password? [Y/n] Y
(xxx)

Remove anonymous users? [Y/n] Y

Disallow root login remotely? [Y/n] N

Usa Samba: https://www.samba.org/ herramientas profesionales para trabajos profesionales.

2 Me gusta

Si, he hecho el nas con samba. Lo que pasa es que necesito una interfaz grafica para que quede mas bonito para la tarea. O eso dijo el profe.

1 me gusta

La verdad es que es la opción más sencilla. Es como navegar en tu propio sistema de archivos, no necesitas instalar nada extra salvo samba en algunas distribuciones y hasta los propios gestores gestores de archivos cuentan con herramientas para facilitar o personalizar el acceso al servicio.

1 me gusta

Un truco o “trampa” para estos casos, es crear una interfáz web con html y css en donde podés estilizarla a gusto y para la navegación, simplemente listas el contenido de las carpetas.

En el caso de la Raspberry Pi, la propia aplicación para instalar el sistema operativo en la unidad te brinda opciones de SOs para servidores NAS.
Es cuestión de elegir la más conveniente y por supuesto que existen otras opciones disponibles buscando apenas un poco por internet.

1 me gusta

Yo he instalado la version lite ya que solo requiero de la terminal. De todas formas, ¿podrias pasarme documentacion o ejemplos de como hacer una solucion web para ver y mover y trabajar con los archivos? Porque yi no tengo ni idea de eso.

Sobre lo de utilizar el sistema de gestion de archivos, bueno, entiendo que no es valido ya que se lo mostre al profesor y como que no, pues.

Es algo de HTML, las etiquetas de link te permiten utilizar el directorio de donde se encuentra el archivo, el resto es estilizar con CSS. Para eso necesitas una base de desarrollo web.

1 me gusta

Bases que no tengo. Pero bueno, vere si chatgpt me ayuda en esto, muchas gracias de todas formas.

¿Por qué no un tui? Así toda la interfaz se manejaría con texto.

El problema allí son los permisos si quieres que la interfaz pueda realizar las configuraciones propias del root.

También puedes ver el código y funcionamiento de TrueNAS que es código abierto como guia.

1 me gusta

creo haber escuchado de trueNAS, aunque creo recordar que no era compatible con raspberry pi, le echare un vistazo. de todas formas un tui… no creo que sea lo que preciso para este proyecto. ademas de que… no se como hacerlo.

1 me gusta

Creo que vamos a necesitar un poco más de contexto para poder ayudarte.

Qué es lo que les han enseñado y cuál es la consigna del proyecto?

1 me gusta

a ver, construir un nas, eso no nos lo han enseñado, estudio una formación profesional en telecomunicaciones. he estudiado redes, como configurar routers, instalar fibra optica por ejemplo, antenas, cosas de esas. Lo del NAS es un proyecto que tengo que hacer para ya poder titularme, tengo que hacer algo relacionado con la tecnologia, redes si se puede, aunque tambien lo hubiera podido hacer de los sistemas de audio, o lo que sea, por que al final de lo que se trata mi carrera es de comunicar, transferir información de forma eficiente, entonces lo del nas, lo he aprendido yo por mi cuenta y es lo que se me ha ocurrido porque pense que no seria tan dificil pues. Y lo que quiero es poner una interfaz grafica para que se vea bonito, tener mejor nota y en general, que este bonito, algo mas profesional y “utilizable” por asi decirlo, por gente que no ha instalado nas en su vida o no saben nada del tema, por eso.

1 me gusta

Bien, o sea que básicamente tenés algunas reglas para seguir:

  1. No vas a poder utilizar una interfaz gráfica ya hecha. Cómo es un trabajo a presentar, básicamente vos mismo vas a tener que desarrollarlo incluyendo esos aspectos.

  2. Tiene que estar enfocado en redes (en este caso un servidor NAS por tu elección).

  3. Vas a necesitar aprender a desarrollar en algo, muy posiblemente crear un script que se encargue de la instalación y demás para automatizarle la tarea al usuario.

Bueno, por lo que veo es que básicamente vas a necesitar saber sobre algún lenguaje de programación.
Un servidor NAS básicamente es una PC con archivos y almacenamiento accesibles como recursos de red, para ello utiliza el protocolo SAMBA,** SSH**, Ftp o SFTP, no hay muchas opciones. Esto es algo ya muy común dentro de la informática o las telecomunicaciones, es algo que se viene usando desde hace décadas.

Lamento informarte que no es algo sencillo que se pueda hacer con unos simples pasos, vas a tener que aprender a desarrollar en algún lenguaje, siendo irrelevante cuál debido a la cantidad de opciones disponibles. Va a depender de tu elección.

  • Una manera de lograr esto es con Java, de cuál ya existe una parte del curso en la comunidad desarrollado por @Sugoli15.

  • Otro lenguaje fácil de aprender pero un poco más complicado en cuanto a lo visual es Python.
    Existen módulos en Python para crear TUIs y GUIs que podrían ayudarte, además de que Python se puede combinar muy bien con bash scripting, lo que facilita la manipulación y scrapeo de archivos a un servidor NAS.
    (Podés encontrar un curso de Python en este foro. El enlace al mismo está en mi perfíl).

  • Por último tenemos a HTML con CSS. Visualmente se pueden lograr maravillas con esto. Una página puede ser hosteada en la red local de manera muy muy sencilla y el sitio solo debe dedicarse a mostrar el contenido de dicha carpeta.

  • En cuanto al protocolo a utilizar, cualquiera te va a servir, incluso se pueden combinar dentro del mismo proyecto para facilitar la creación de funciones útiles.

Todo esto esto son opciones por las cuales yo encararía en base a lo que me descibís del proyecto.
En estos casos es muy difícil volver a inventar la rueda.

Por cierto, muy buena carrera. A mí me gustaría estudiar ingeniería en telecomunicaciones. Me parece de lo más interesante.

Otras ideas de proyecto:

  1. Sistema de monitoreo de redes, hosts activos, elaboración de reportes, puertos disponibles, detección de amenazas, etc.
    Básicamente algo que muestre su hosts en la red se encuentran activos, podes ingresarlos manualmente, alguna que otra interfaz de usuario, etc.

  2. Servidor de correos electrónicos. Este posiblemente sea mucho trabajo. Podría cambiarse por un sistema de mensajería, aunque sea por terminal.

A medida que vaya teniendo más ideas, voy a ir modificando mi comentario.

1 me gusta

bueno, no me dijeron nada de no utilizar interfaces graficas ya hechas, de hecho mi primera idea fue utilizar nextcluod, pero bueno, tambien te digo, hacer todo desde cero, no me molesta tampoco tanto, igual y me suben nota por ello. lo la base del proyecto, o sea, samba. eso ya lo tengo hecho, segui un tutorial, lo comprobe, y ya puedo pasar archivos como si nada, esa parte yo la daria por practicamente terminada.

la opción que yo elegiria seria utilizar html con css. ¿por que? 1. entiendo que es mas “sencillo” en teoria, 2. pues se me hace algo mas similar a la idea que tenia con nexcloud, 3. la web duela lo que me duela, es como la niña mimada hoy en dia. quizas haria una con java, pero ya para proyectos personales y no de mi carrera.

yo bueno, lo mio no es una ingeniería, es una FP, una formación de España, solo dura 2 años, nada básicamente.

agradezco un montón tus sugerencias, definitivamente me serán muy útiles.

respecto a la opción de hacerlo con la web, básicamente (por no escribir html y css a cada rato) pues… ¿me podrías decir algo de como podría conectar el servidor samba que tengo con el programa web? o sea, lo mas quiero que me digas como se llama la técnica o el procedimiento para ya poder buscarlo a mayor profundidad por mi mismo, para que básicamente la tarea no me la hagas tu pues. y ademas, también me gustaría saber como la podría hacer visible en otra red que no sea la miá. también supongo que tendría que aprender a hacer un “servidor” para la pagina web, eso si recuerdo haberlo hecho antes, el año pasado, pero eso ya fue fuera del curso, fuera de clases, un profe nos dijo, ¿es enseño esto? y los 2 creo que había dijimos va

1 me gusta

Al ser samba, lo único que necesitas es la localización de los archivos o los directorios dónde estos se alojan.
Podés montar (mount) los recursos compartidos en samba en tu PC cliente como si fuese una unidad de almacenamiento (pendrive o algo así).

Con tree, que es una herramienta simple en sistemas tipo UNIX, podés generar un archivo HTML con el contenido listado del directorio o recurso compartido.

1 me gusta

gracias, ya tengo mas o menos una idea de que es lo que quiero hacer para la interfaz grafica.

Estaba pensando en cómo podrías hacerlo y quizás te tenga una opción muy sencilla. Vas a tener que aplicar bash scripting, pero te va a ahorrar muchos pasos.

La técnica consiste o en que el sitio se ejecute en bucle en la PC cliente, el cual construirá los archivos html constantemente para refrescar el contenido, crear las plantillas .html de los subdirectorios y cosas por el estilo. De esta manera podrás listar archivos dentro de un html con un simple for que lo escriba.

La otra posibilidad y lo que yo haría, sería un script de bash corriendo en bucle en el servidor NAS, que la página esté alojada ahí y que haga eso mismo, pero sólo para actualizar el contenido. Esta opción es la que yo tomaría.

De esta manera, automatizas el proceso de refresco de contenido, etcétera.
Con esto podrás hasta ponerle íconos a los archivos listados en base a su extensión, la manera en la que los archivos son listados e incluso nuevos subdirectorios en el servidor de manera automática.
Vas a tener un archivo de estilos .css donde vas a tener las funciones para estilizar el sitio.

Seguramente haya más ideas que puedas utilizar pero tendría que ponerme a hacer el proyecto yo para resolver cada paso jajajajaja
Te va a tocar ir resolviendo los obstáculos a medida que surjan, un paso a la vez.

¡Mucha suerte con el proyecto! Espero poder haberte iluminado un poco el camino.

1 me gusta

vale, gracias, esta tarde retomare mi proyecto y te digo que es lo que he estado haciendo. como compensación iré actualizando la publicación original, para compartir todo lo que tengo, así si alguien quiere hacer un nas rápidamente, pues… que no haga todo desde cero.

1 me gusta

aqui por aparte les dejo un tutorial que me dio chatgpt para tener una ip fija que me estaba volviendo loco con esto:

Cómo asignar una IP fija usando NetworkManager en Linux (vía terminal)

Este método funciona en sistemas que usan NetworkManager, como Ubuntu, Debian, Raspberry Pi OS, Fedora, etc.
:white_check_mark: Pasos para configurar una IP fija

Verifica las conexiones disponibles:

nmcli connection show

Busca el nombre de la conexión activa (por ejemplo, WIFI-CASA, HomeWiFi, etc.).

Aplica la configuración de IP estática:

Sustituye tu-conexion por el nombre que identificaste en el paso anterior.

nmcli connection modify tu-conexion ipv4.addresses 192.168.1.151/24
nmcli connection modify tu-conexion ipv4.gateway 192.168.1.1
nmcli connection modify tu-conexion ipv4.dns “192.168.1.1 8.8.8.8”
nmcli connection modify tu-conexion ipv4.method manual

Aplica los cambios (sin necesidad de reiniciar):

nmcli connection down tu-conexion
nmcli connection up tu-conexion

Verifica que se asignó correctamente la IP fija:

ip a show

:light_bulb: Notas útiles

Puedes listar las interfaces de red con:

nmcli device status

Si el sistema pierde conexión tras modificar la IP, puedes revertirla a automática con:

nmcli connection modify tu-conexion ipv4.method auto
nmcli connection up tu-conexion

1 me gusta

Y por qué no usas contenedores de Docker? Sería mucho más sencillo, creas un Docker en la raspberry para nextcloud, y compartes los discos que hacen de NAS.