PRINCIPIOS DE SISTEMAS OPERATIVOS TAREA 1: VERIFICADOR DE COLORES 1 Tarea 1: Verificador de colores Marı́a-Lucı́a Monge-Golcher, Gerald Valverde Mc kenzie , Mariano Muñoz Ması́s [email protected] [email protected] [email protected] Área Académica Ingenierı́a en Computadores Instituto Tecnológico de Costa Rica Abstract—Application of an auto executable TCP Server with a daemon service running on a virtual machine, to receive and analyze a picture sent from a TCP Client running on a Docker container. • • • • Procesadores: 6 Núcleos Disco Duro Virtual: 100 Gb Adaptador de Red: Default Switch Sistema Operativo: Ubuntu 18.4 LTS Palabras clave—Cliente, Demonio, Imagen, Sevidor I. I NTRODUCCI ÓN Un demonio o servicio es un programa que se ejecuta en segundo plano, fuera del control interactivo de los usuarios del sistema. Puede ser ejecutado de forma persistente o reiniciarse si se intenta matar el proceso, dependiendo de la configuración y polı́ticas del sistema. [1] El término demonio se usa en sistemas UNIX y basados en el mismo, en Windows y otros sistemas operativos se denominan servicios porque fundamentalmente son programas que ofrecer servicios al resto del sistema. [2] Se pretende implementar dicho demonio sobre un servidor TCP, el cual se ejecuta en una máquina virtual basada en un sistema operativo de la distribución de Linux, en este caso Ubuntu. La ejecución del servidor es automática y queda a la espera de una solicitud de conexión de un cliente. El cliente a su vez se ejecuta sobre un contenedor de la plataforma Docker. Se pretende de igual manera que el contenedor sea en una distribución de Linux, en este caso CentOS, el contenedor se configura mediante un archivo denominado Dockerfile. La intensión de ejecutar el cliente y servidor es de poder enviar una imagen del cliente al servidor y que este devuelva la cantidad de pı́xeles superiores a determinado valor dado por el usuario. C. Contenedor Docker - CentOS El contenedor de Docker se configuró con la version más actualizada de CentOS. El archivo de configuración se muestra a continuación. FROM centos:latest ENV container docker WORKDIR /etc/yum.repos.d/ RUN sed -i ’s/mirrorlist/#mirrorlist/g’ /etc/yum.repos.d/CentOS-* RUN sed -i ’s|#baseurl=http://mirror.centos.org|baseurl=\\ http://vault.centos.org|g’ \\ /etc/yum.repos.d/CentOS-* RUN yum update -y RUN yum install gcc -y RUN mkdir -p ./home/Cliente \ && chmod 775 ./home/Cliente -R COPY . /home/Cliente/ WORKDIR /home/Cliente RUN gcc Client.c -o Client El anterior archivo de configuración se ejecuta con el siguiente comando desde la terminal. 1) Ejecución del contenedor: Comandos: II. A MBIENTE DE D ESARROLLO A. Cliente/Servidor TCP - C El código base para desarrollar el proyecto de cliente y servidor se toma de internet y se usa como referencia [5], [6], se modifica a las necesidades especı́ficas del proyecto. El lenguaje en el que se desarrolla el modelo TCP es en C, lenguaje caracterı́stico para manejo de memoria. B. Máquina Virtual - Ubuntu Mediante la herramienta nativa de Windows, Administrador de Hyper-V, se configuro una máquina virtual en el ambiente de virutualización, se toman como parámetros los valores listados a continuación. • Memoria RAM: 6Gb cd ’path del dockerfile’; docker stop cliente; docker rm cliente; docker rmi centos:cliente; docker build -t centos:cliente .; docker run -d -v /home/Cliente:/Cliente --name cliente centos:cliente tail -f /dev/null; docker exec -it cliente /bin/bash El comando anterior esta diseñado para evitar cualquier problema con cambios dentro del dockerfile, ası́ mismo como para evitar problemas con los contenedores existentes. El comando inicializa el contenedor con el fin de estar listo para la ejecución. PRINCIPIOS DE SISTEMAS OPERATIVOS TAREA 1: VERIFICADOR DE COLORES D. Procesamiento de imágenes - C El procesamiento de imágenes es una de las tareas más básicas e importantes de un sistema operativo con entorno gráfico, pues permite manipular la imagen a gusto y hacer algo con ella. Lo primero por hacer en este proceso es obtener una imagen en un formato legible. . . una vez que la imagen se encuentra en un formato legible, el software de procesamiento de imágenes requiere leerla para que posteriormente pueda ser procesada y escrita en un archivo. [7] En general, una imagen se puede describir como un arreglo bidimensional de números donde cada posición del arreglo consiste en un llamado “pixel” que almacena el dato de color o tonalidad a partir de un código legible (ejemplo: RGB, HEX, etc) En el caso del ImageServer se empleó la librerı́a stb image la cuál facilitó el procesamiento, almacenamiento, decodificación y obtención de parámetros de archivos de formato ”PNG, JPG, TGA, BMP, PSD, GIF, HDR, JPEG, HDR y PIC” [4]. E. Daemon con Systemd Para la creación del demonio en Ubuntu, se utilizo Systemd, este es un nuevo administrador de de subsistemas, que se utilizo para la configuración del servicio que se ejecuta en segundo plano. Se debe contar con una aplicación con la que el demonio va a interactuar, en este caso el servidor, y con un archivo que le indique a systemd como interactuar con la misma, para esto se debe contar con la configuración de unidad de servicio, un ejemplo de como se observa esta configuración es el siguiente. [Unit] Description=My Service After=network.target [Service] ExecStart=/usr/bin/my-service Restart=on-failure [Install] WantedBy=multi-user.target Una vez el archivo este creado es necesario instalarlo en /lib/systemd/system, refrescar los servicios y habilitar el que se acaba de agregar. Con la configuración completa se puede iniciar la interacción con el servicio. III. ATRIBUTOS Tal como se conoce en la cotidianidad y la programación, los atributos son todos aquellos aspectos que caracterizan a un objeto, una situación, una persona, etc. En un documento como el presente, se generan múltiples atributos de aprendizaje y desarrollo de herramientas que caracterizan al proceso de investigación. A continuación, se detallarán los atributos obtenidos a lo largo de este trabajo: 2 A. Aprendizaje continuo Estrategia de trabajo en equipo El objetivo de trabajo en equipo trazado consistió en obtener resultados lo más rápidos y eficientes posibles. Para lograr estos objetivos, se planteó como solución que el equipo se dividiera las tareas de forma equitativa y procurar que cada integrante trabajara en su área de mayor destreza, permitiendo ası́, obtener resultados positivos de cada tarea lo más pronto posible y, con esto, dejar espacios de tiempo disponibles para colaborar con otros integrantes en tareas que fueran particularmente retadoras o en resolución de dudas. Además, se estableció una comunicación constante entre los miembros para conocer el avance de cada uno con sus asignaciones y las posibles problemáticas que se encontraban enfrentando, de modo que alguna otra persona del equipo pudiera ayudar o consultar al respecto. Troubleshooting En todo proceso de investigación y diseño existen problemas que surgen a lo largo del camino y que requieren de particular atención para avanzar con el trabajo y concretar las tareas exitosamente. Para conseguir esto, se determinó darle seguimiento por jerarquı́a a la resolución de problemas. Como el equipo se dividió las tareas, en la primera lı́nea de reacción está cada integrante que, basado en su responsabilidades, debe intentar solventar los problemas que le surgen a lo largo del planteamiento y ejecución de sus tareas. Seguidamente, si no se encontró una solución satisfactoria, se procede a consultar con los otros miembros del equipo, exponer el problema, la estrategia de solución planteada por la persona y las falencias de esta, de modo que se le pueda aportar ayuda con conocimiento de causa. Por último, si dentro de los miembros del equipo no se logra comprender una tarea o darle solución, se procede a pactar consulta con el profesor del curso, quien aclara dudas y/o guı́a al equipo para plantear nuevas estrategias de solución al problema. Respaldo de información Adicional al troubleshooting, es importante guardar un registro de las soluciones obtenidas, pues pueden ser necesarias en otra tarea o incluso otros trabajos a futuro, de modo que se documentan las soluciones que dieron resultados satisfactorios ante los problemas surgidos, de forma que quede el aprendizaje a posteridad y no se repitan los mismos errores a futuro o bien, se conozca cómo resolver las tareas por si es necesario implementar nuevamente esos conocimientos en otros trabajos. Además, los miembros del equipo respaldan los avances de sus asignaciones en Github y con esto pueden tener siempre respaldada la información y programación hecha en un medio accesible desde cualquier punto, sin necesidad de depender de la funcionalidad de un único ordenador; esto también aporta al proceso de troubleshooting pues se pueden recuperar versiones anteriores de archivos que anteriormente funcionaban y tras algún cambio o problema, dejan de servir. PRINCIPIOS DE SISTEMAS OPERATIVOS TAREA 1: VERIFICADOR DE COLORES 3 B. Herramientas de Ingenierı́a 1) Visual Studio Code: Es un editor de código de Microsoft que brinda varias herramientas y plugins para poder aplicar casi cualquier lenguaje al editor y que este se adecue a las necesidades de los programadores. 2) Docker: Es una plataforma que implementa servicios, en los que se manejan imágenes de software, se les llama contenedores. Los contenedores se encuentra aislados unos de otros para manejar de forma independiente su propio software, librerı́as y configuraciones, aunque si se permite su comunicación por canales especı́ficos. 3) Máquina Virtual - Hyper-V: Es un programa de vitalización de hardware de Microsoft, actúa como un computador y ejecuta un sistema operativo y sus programas. Brinda flexibilidad, ahorro de tiempo y dinero. Además permite ejecutar mas de una maquina virtual en el mismo hardware al mismo tiempo. 4) Github: Es una herramienta muy utilizada por desarrolladores, para el manejo de versiones en el código o software, ofrece almacenamiento y disponibilidad a toda hora. 5) Overleaf: Es un editor de LaTex en linea, fácil de usar, en el que varias personas pueden trabajar juntas para realizar un documento, no requiere instalaciones y se puede acceder a los documentos en tiempo real. Fig. 1. Diagrama de Secuencia TCP IV. D ETALLES DEL D ISE ÑO A. Modelo TCP TCP/IP son las siglas de Transmission Control Protocol/Internet Protocol (Protocolo de control de transmisión/Protocolo de Internet). TCP/IP es un conjunto de reglas estandarizadas que permiten a los equipos comunicarse en una red como Internet. [3] De esta manera mediante el enlace IP se pueden conectar dos maquinas mediante el servicio de Cliente-Servidor, en cual requiere un punto de conexión que medie como servidor y otro u otros puntos que funcionen como clientes de ese servicio. En el diagrama de la Figura 1 se puede apreciar como funciona la secuencia de pasos del modelo TCP desarrollado en el presente trabajo. Primeramente el servidor habilita el socket de conexión, y confirma la creación del mismo, una vez creado, el servidor entra en modo de ”escucha”, a la espera de una solicitud de un cliente. De la misma manera, el cliente crea un socket para la conexión, y una vez creado intenta conectar al servidor que esta escuchando, el enlace se realiza por un puerto en especı́fico, y hacia una Ip concreta, la del servidor. En la Figura 2, perteneciente al diagrama de arquitectura, se puede observar que a pesar que tanto la máquina virtual (VM) como el contenedor de Docker están en la máquina local, el usuario puede interactuar con ambos de manera independiente, y además estas partes pueden comunicarse entre sı́, mediante el protocolo TCP 3. Fig. 2. Diagrama de Arquitectura TCP Fig. 3. Diagrama de Componentes TCP PRINCIPIOS DE SISTEMAS OPERATIVOS TAREA 1: VERIFICADOR DE COLORES 4 V. I NSTRUCCIONES DEL P ROYECTO VI. TABLA DE ACTIVIDADES A. Lucı́a Monge Golcher A. ImageServer Para la configuración y funcionamiento de la aplicación servidor se deben seguir los siguientes pasos: 1) Máquina Virtual:: Se debe crear una instancia de Ubuntu en una máquina virtual. TABLE I ACTIVIDADES REALIZADAS POR L UC ÍA M ONGE Fecha 10/Mar 12/Mar 2) Descargar repositorio:: Se debe descargar el repositorio del proyecto, el cuál está alojado en Github en el siguiente link: https://github.com/MarianoIDC/Operativos/ tree/releasev2.0. Iniciar la máquina virtual, abrir la linea de comandos, dirigirse a la carpeta ”DaemonConfig” y ejecutar los siguientes comandos. 14/Mar ###Configurando por primera vez el servicio de daemon 17/Mar ### Copia el archivo de configuracin en el path especificado sudo cp ImageServerDaemon.service /lib/systemd/system ### Carga el servicio de daemon sudo systemctl daemon-reload ### Habilita el servicio del daemon del servidor sudo systemctl enable ImageServerDaemon ### Inicia y verifica el daemon del servidor sudo systemctl start ImageServerDaemon sudo systemctl status ImageServerDaemon El servidor esta listo para iniciar de manera automática cada vez que se inicie la máquina. Nota: Esta configuración solo se requiere una vez. 15/Mar 16/Mar Actividad División de tareas del proyecto Investigación sobre creación de demonios en linux Consulta con el profesor sobre los demonios Implementación del demonio para el proyecto Realización de pruebas y correcciones del demonio con el servidor Modificaciones en el informe Corrección y entendimiento de errores en el demonio Modificaciones en el informe Pruebas y verificación de funcionamiento Finalización del informe Hora(s) 1h 2h 0.5h 2h 2h 2h 2h 2h 2h 2h B. Gerald Valderde Mc Kenzie TABLE II ACTIVIDADES REALIZADAS POR G ERALD VALVERDE Fecha 10/Mar 11/Mar 12/Mar 14/Mar 15/Mar 16/Mar 17/Mar Actividad División de tareas del proyecto Investigación sobre procesamiento de imágenes Implementación de los métodos para contar pixeles y comparar tamaño de las imágenes Implementación del procesamiento de imágenes en el servidor Optimización del envı́o de imágenes entre el servidor y el cliente Creación y edición del informe Creación de makefile Pruebas en conjunto Optimización del sistema Horas 1h 2h 4h 2h 5h 4h 0.5h 3h 7h C. Mariano B. Cliente Para el correcto funcionamiento de la aplicación cliente se deben seguir los siguientes pasos: 1) Descargar repositorio: Se debe descargar el repositorio del proyecto, el cuál está alojado en Github en el siguiente link: https://github.com/MarianoIDC/Operativos/ tree/releasev2.0. 2) Inicializar contenedor: Se debe situar en el directorio donde se descargó el repositorio seguidamente ejecutar los comandos que se muestran acontinuación desde el bash de Linux. 3) Envı́o de Imágenes: Envio de parámetros .\Client [IPSERVER] [PORTSERVER] [PATHFILE] [PIXELS] Por ejemplo: .\Client 192.168.100.9 1717 imagen.png 1200 TABLE III ACTIVIDADES REALIZADAS POR M ARIANO M U ÑOZ Fecha 5/Mar 10/Mar 11/Mar 12/Mar 13/Mar 14/Mar 16/Mar 17/Mar Actividades Creación del Docker File Primer reunión, división de tareas y objetivos Actualización del Dockerfile, consulta con el profesor para solucionar Creación de Cliente y Servidor base (Chat entre cliente y servidor) Cliente-Servidor 2, envio de archivo txt, tratando de implementar enviar la imagen Cliente-Servidor 2, envio de archivo txt,envio de imagen completado, pero incompatible con el método de Gerald Implementación del demonio desarrollado por Lucı́a Integración y Documentación Horas 0.5 1 3 4 4 3 5 6 VII. C ONCLUSIONES Los servicios que se ejecutan en segundo plano o demonios, son procesos muy útiles cuando se requiere automatizar, solo PRINCIPIOS DE SISTEMAS OPERATIVOS TAREA 1: VERIFICADOR DE COLORES es necesario contar con el ejecutable de para que el programa sea ejecutado según las condiciones de configuración. La virtualización de servicios es una manera efectiva de comunicar y operar sistemas con especificaciones especiales, aprovechando recursos de una manera óptima, Los servicios de contenedores como Docker, facilitan y agilizan el desarrollo de aplicaciones donde la interfáz gráfica no requiere mayor atención, se utiliza con mucha frecuencia para verificar fragmentos de código de un proyecto, que toman y retornan valores especı́ficos, y en los cuales la interacción con el usuario se limita a ingresar parámetros y verificar resultados, Docker especı́ficamente ofrece la posibilidad de realizar pruebas en ambientes similares a entornos de producción y desarrollo, si se combina con el uso de computación en la nube. VIII. S UGERENCIAS Y RECOMENDACIONES Aunque la implementación de los demonios puede ser simple, se recomienda verificar los datos necesarios para la configuración, como la ubicación del ejecutable y posibles dependencias Se recomienda para el manejo de imágenes, utilizar sockets y chunks de 256 bytes para el envió correcto de información, además de facilitar su manipulación. Si las especificaciones del proyecto lo permiten y los recursos son suficientes, plantear una solución diferente al modelo de sockets TCP es muy recomendado, esto con el criterio que los sockets TCP funcionan dentro de una LAN, lo que restringe el alcance de las aplicaciones desarrolladas. IX. R EFERENCIAS R EFERENCES [1] Systemd. (s.f.) Writing and packaging system . freedesktop.org. https: //www.freedesktop.org/software/systemd/man/daemon.html [2] Jen0f0nte. (2017) Demonio.Colaboratorio.net. https://colaboratorio.net/ glosario/demonio/ [3] Sharon F. (julio 30, 2019), ¿Qué es TCP/IP y cómo funciona?[Online]. Avast, Academy. https://www.avast.com/es-es/c-what-is-tcp-ip [4] Sean B. (setiembre 10, 2021), STB: Libraries for C/C++[Online]. https: //github.com/nothings/stb [5] Shukla Y. (l.u. febrero 2, 2022), TCP Server-Client implementation in C[Online]. geeksforgeeks.org. https://www.geeksforgeeks.org/ tcp-server-client-implementation-in-c/ [6] Nikhil T. (mayo 1, 2020), File Transfer using TCP Socket in C[Online]. Idiot Developer. https://idiotdeveloper.com/ file-transfer-using-tcp-socket-in-c/ [7] Phillips D. (abril 26, 2000), Image Processing in C[Online]. RD Publications. https://homepages.inf.ed.ac.uk/rbf/BOOKS/PHILLIPS/cips2ed.pdf 5