Resumen
Se presenta a continuación la organización de un curso de cincuenta horas cuyo fin es dar a conocer la base ideológica que sostiene a los movimientos de Software Libre (Free Software) y Código Abierto (Open Source), así como el Sistema Operativo LINUX, los principales utilitarios, clientes y servidores que conforman un sistema GNU. El curso se orienta a alumnos de los últimos años de la carrera de Ingeniería de Sistemas y a profesionales de la disciplina en general. Se asume que los alumnos poseen conocimientos generales de informática y nociones de los principales aspectos de las ciencias de la computación, así como también experiencia en operación y programación de computadoras. No se asume sin embargo que los alumnos posean conocimientos previos de UNIX.
Objetivos
El curso tiene como objetivo introducir al alumno a los siguientes tópicos:
- Base ideológica e histórica de los movimientos de Software Libre (Free Software) y Código Abierto (Open Source)
- Historia, filosofía y funcionamiento de los sistemas operativos de la familia de los UNIX.
- Sistema operativo Linux: su arquitectura, configuración y puesta a punto para diferentes configuraciones1.
- Ambiente de trabajo de un sistema GNU: principales componentes.
- Configuración de redes utilizando el sistema operativo Linux como base.
- Principales servidores y configuración de los mismos.
- Mecanismos de conectividad y convivencia en una misma red de máquinas con Linux y máquinas con otros sistemas operativos.
- Herramientas de base para el desarrollo de Software en sistemas GNU.
Organización
10 clases teóricas de 3 horas reales y 10 clases prácticas de 2 horas reales, haciendo un total de 50 horas con una frecuencia semanal, horarios y fecha de inicio a convenir.
Contenido
Base Ideológica del Software Libre (Free Software) y Código Abierto (Open Source)
Introducción
- Concepto de idea original, derecho de autor, propiedad intelectual y patente aplicado al Software.
- Concepto de Acuerdo de Licencia a Usuario Final (EULA)
- Las licencias comerciales o `propietarias'.
- Historia del Software libre.
- La Fundación de Software Libre (FSF).
- El proyecto GNU. Manifiesto. El Sistema GNU.
- Concepto de `copyleft'.
- La Licencia Pública General GNU (GNU GPL) y la GNU GPL relajada.
- Historia del Código Abierto (Open Source). Diferencias y similitudes con el Software Libre.
- Iniciativa Código Abierto (OSI).
- Revista de los tipos comunes de licencias de Software Libre, Código Abierto y Comerciales.
Distribuciones de Sistemas GNU
- Breve ambientación histórica de los sistemas operativos de la familia UNIX.
- Definición de términos UNIX -> POSIX -> LINUX, GNU/Linux. Concepto de portabilidad.
- Concepto de distribución. Descripción de las distribuciones más importantes.
Software de Base de los Sistemas GNU
Linux
- Características de Linux.
- Comparación entre Linux y otros sistemas operativos.
- Kernel de Linux. Drivers.
- Relación entre el compilador y el kernel. libc y ld-linux. Llamadas al sistema.
- Programas del sistema (comandos) y shell.
Organización del árbol de directorios de UNIX
- Sistemas de Archivos.
- El sistema de archivos virtual. Concepto de árbol único.
- Montaje y desmontaje de particiones. Montaje remoto. NFS.
- File Hierarchy Standard (FHS). Descripción de los directorios más importantes.
Instalación y puesta a punto en ix86
- Proceso de booteo en PC. Basic Input Output System (BIOS).
- Sectores de arranque en disquetes y discos rígidos (MBR).
- Particiones reales y lógicas.
- Concepto de imagen de disco. Creación de un disco a partir de una imagen.
Configuraciones de trabajo
- Procesos de booteo y shutdown.
- El proceso init. Niveles de corrida.
- El archivo inittab. Configuración de los servicios en /etc/rc.d.
- Concepto de terminal virtual. Manejo de las terminales virtuales.
- Terminal X. Manejo de las terminales X.
- Sistemas de ventanas y Ambientes de escritorio. Arquitectura del entorno gráfico. Comparación con otros entornos gráficos.
La línea de comando
Shell
- Concepto de shell. El shell Bourne.
- Descripción de los diferentes formatos de comandos, opciones y argumentos. Comandos embebidos.
- Acceso a los sistemas de documentación: comandos man e info.
- Comandos básicos y sus opciones más utilizadas.
- Concepto de enlace duro y simbólico. Comando.
- Descriptores de archivo heredados.
- Redireccionamiento de los descriptores.
- Dispositivos especiales.
Sustituciones
- Generación de listas de archivos mediante metacaracteres. Expresiones glob.
- Escapado de metacaracteres.
- Función de completitud.
- Sustitución de parámetros y variables de ambiente.
- Sustitución de comandos.
- Valor de retorno de un comando.
- Ejecución secuencial incondicional.
- Ejecución secuencial condicional.
- Ejecución paralela.
- Indicadores de agrupamiento.
- Ejecución paralela en pipeline.
Scripting
- Editor vi.
- Formato de un archivo de script.
- Declaración del intérprete y comentarios.
- Sentencias de control.
- Sustitución y manejo de parámetros y variables automáticas.
- Sustitución aritmética.
- Sustituciones de variable.
- Funciones.
Procesos y tareas
- Concepto de proceso. Diferencia entre proceso y programa.
- Árbol de procesos. El proceso init.
- Revisión de procesos.
- Niveles de prioridad dinámicos y estáticos del planificador.
- Señalamiento de procesos.
- Abstracción de procesos en el shell: tareas. Ejecución en background. Desheredado de procesos.
Interacción de los sistemas GNU
Seguridad a nivel de usuarios
- Concepto de usuario y grupo.
- Creación de nuevos usuarios y grupos.
- Parámetros de las cuentas de usuario.
- Librería PAM.
- Dueño y grupo de un archivo o directorio.
- Permisos de un archivo o grupo. Mascara octal.
- Permisos especiales.
Redes
- Repaso de TCP/IP.
- Configuración de una estación de trabajo.
- Configuración de un gateway/router./li>
- Configuración de un firewall a nivel de paquetes.
- Protocolos de conexión punto a punto./li>
- Conexiones a redes externas vía modem o DSL.
- Conectividad con Windows. samba.
- Servidores: inetd, ssh, telnet, ftp, smtp, pop, imap, ldap.
Herramientas de base para el desarrollo de Software Libre/Codigo Abierto
Compilador de C/C++
- Descripción de las herramientas binarias (ensamblador, vinculador, etc.) y el compilador.
- Repaso del concepto de interface (.h) e implementación (.c) en lenguaje C.
- Construcción de librerías de enlace estático.
- Construcción de librerías de enlace dinámico.
- El vinculador dinámico, configuración.
Sistema
- Propósito del sistema Make.
- Estructura de un Makefile.
- Reglas normales.
- Reglas implíscitas.
- Reglas patrón (template).
- Variables automáticas y Sustituciones.
- Generalización de Makefiles.
- Llamado recursivo.
Sistema de Versionamiento Concurrente (CVS)
- Propósito del sistema CVS.
- Algoritmo de cálculo de diferencias en archivos de texto: diff y diff3.
- Manejo de archivos binarios.
- Sistema RCS.
- Concepto de versión, release, y rama de desarrollo.
- Operaciones básicas sobre los fuentes: checkout, commit, update, add y remove.
- Creación de versiones y ramas mediante tags.
- Manejo de desarrollo concurrente y/o distribuído utilizando CVS.
- Organización de un repositorio CVS.
- Acceso anónimo remoto a los repositorios vía pserver.
- Acceso remoto autentificado y seguro a los repositorios vía ssh.