Se presentan en esta sección los resultados del relevamiento de distintas distribuciones con sus principales características, sus semejanzas y diferencias. Así mismo, sirve de base para la elección del sistema operativo que emplearemos en este proyecto.
Se acostumbra llamar una distribución de GNU/Linux a un conjunto de programas1 que junto al kernel constituyen un sistema operativo. A fines de 2004 existían más de 300 distribuciones de GNU/Linux hechas en 51 países diferentes [41], recopilando miles de proyectos de software, algunas de ellas pensadas para un fin específico: escritorio, laptop, servidor, firewall, dispositivos embebidos, recuperación de sistemas, terminales, etc. Se distribuyen en distintos formatos: DVD, CD Rom, disquetes, instalación vía una red, USB y Flash cards. Aunque la mayoría de estas se instala en el disco duro de una computadora, existen varias que pueden ejecutarse desde un CD, p.ej. Knoppix2, lo que es muy útil para hacer mantenimientos de máquinas que se han desconfigurado, y para probar Linux sin tener que hacer modificaciones en la propia computadora. Knoppix en particular permite grabar y recuperar información de un dispositivo de almacenamiento USB y grabar la configuración y recuperarla en un disquete.
Hay versiones de GNU/Linux generadas (“portes”) para distintas arquitecturas: Intel compatible 32 bit (ix86) y 64 bit (ia64, AMD64), PowerPC, IBM Power5, Sparc, Alpha, Motorola 68000, IBM Z-Series, etc. Solamente vamos a considerar las distribuciones para arquitecturas ix86 de 32bits por ser las que más probablemente se encuentren en las PyMEs y las que tenemos a nuestro alcance.
Hay unas pocas distribuciones principales3, de las cuales derivan las demás: Debian, RedHat, Knoppix, Slackware, Mandrake, SUSE, Gentoo. Estas distribuciones usan el mismo conjunto de herramientas y software Open Free de GNU. Según el conjunto de programas que se instalen y se configuren de determinada manera, una máquina se puede constituir tanto como cliente como servidor.
La Linux Standard Base (LSB) [42] y el Filesystem Hierarchy Standard (FHS4) [43] son especificaciones aceptadas como estándar que cumplen la mayoría de las distribuciones de Linux. Por ejemplo, algunas compañías como Novell que mantiene la distribución SUSE, exige que todos los socios de negocios adhieran también a estos estándares.
El objetivo de la LSB es desarrollar y promocionar un conjunto de estándares para aumentar la compatibilidad entre distribuciones y así permitir a los programas correr en cualquier distribución.
El FHS, que está incluido en la LSB es anterior a ésta y no es específico de Linux. Es un estándar aplicable a todos los Unixes5. El FHS se creó para evitar que aplicaciones escritas por terceros remplacen archivos del sistema operativo; para evitar que actualizaciones del sistema operativo remplacen archivos de aplicaciones de terceros; para promover organización y consistencia para los usuarios finales y para mantener datos estáticos separados de datos que cambian con frecuencia, de modo de que los directorios que contengan datos estáticos sean solamente de lectura.
Las aplicaciones que cumplen con ambos estándares supuestamente son compatibles a nivel binario y se instalan correctamente en cualquier distribución que adhiera a dichos estándares. Una de las principales ventajas de la compatibilidad binaria entre distribuciones es el empleo de drivers estándares para dispositivos.
No todas las distribuciones adhieren a estos estándares en su totalidad y, por ejemplo RedHat que es uno de los líderes en el mercado de distribuciones Linux, rechaza las mismas. El mismo Linus Torvalds se opone a la LSB argumentando que para asegurar compatibilidad binaria entre distribuciones se deberían 'congelar' las API del sistema operativo, impidiendo la incorporación de innovaciones.
Por otro lado, es interesante mencionar que Solaris y FreeBSD permite ejecutar binarios de Linux en forma nativa6.
El software que acompaña al kernel, junto al que forma la distribución, se agrupa en paquetes. Los paquetes muchas veces exigen la instalación previa de versiones específicas de otros paquetes (dependencias). Tanto cuando se migra a una nueva versión de la distribución de Linux como cuando se instala un paquete de software que no venía incluido en la distribución (o una versión nueva de un paquete de software que sí venía con la distribución) se presentan problemas de dependencia.
A veces, un paquete de software está compilado de una forma determinada, para un determinado sistema (por ejemplo, usando un manejador u otro de bases de datos) y en ese caso basta con obtener los fuentes y compilarlos para el sistema donde se lo va a instalar y otras veces las dependencias son respecto de funcionalidades que existen solamente en las versiones más recientes. Pueden presentarse dependencias de ambas tipos.
Existen diversas soluciones, que van desde la instalación y configuración manual de las dependencias a herramientas y metodologías para la automatización de la administración de dependencias. Hay distintas clases de paquetes de software que se caracterizan por el grado de automatización para la administración de dependencias, como ser tgz, deb y rpm.
Los archivos .tgz contienen el conjunto de archivos que constituyen el software empaquetados (mediante tar) y comprimidos (mediante gzip). La distribución Slackware [55], una de las primeras, siempre ha usado este tipo de archivo lo que requiere una planificación cuidadosa previa a la instalación a la vez que otorga mucho más control al administrador del sistema.
Los archivos .deb son característicos de la distribución Debian y contienen información sobre las dependencias que debe satisfacer el sistema y donde se va a instalar. Esto permite a herramientas automáticas detectar si se cumplen las dependencias y, en ciertos casos, obtener los paquetes complementarios.
Otro tanto sucede con los archivos .rpm. Originados en la distribución RedHat, también contienen información sobre donde y como deben instalarse, así como los paquetes que deben estar instalados previamente. Esto permite mantener el sistema o un conjunto de paquetes de software actualizados de manera sencilla.
Otra característica útil de este sistema de paquetes es que se puede obtener paquetes con los fuentes y recompilarlos automáticamente, generando el paquete binario adecuado al sistema y la arquitectura deseada.7
Desde hace años existen programas que permiten convertir entre estos formatos de archivos. Aunque cada distribución incluye un sistema para la instalación y administración de dependencias, es posible instalar paquetes creados para otras distribuciones. A veces, sin embargo, esto no es posible debido a variaciones en la estructura de directorios: recordamos que no todas las distribuciones adhieren en un 100% a la LSB.
Dentro de las propias distribuciones existen diferencias respecto a quien estén dirigidas. Por ejemplo SUSE Personal Edition 9.1 vs SUSE Professional o Mandrake Corporate Desktop vs Mandrake Corporate Server. Las versiones de escritorio o personales incluyen un conjunto limitado de los paquetes que vienen con la distribución completa. Por lo general, estas distribuciones orientadas a la empresa solamente están disponibles a través de contratos anuales de soporte.
Como vimos anteriormente esta distinción entre cliente y servidor es relativamente reciente, y es un indicador de que existe una tendencia a desarrollar distribuciones especializadas en las aplicaciones de escritorio y herramientas de productividad (p.ej. navegadores, aplicaciones de ofimática, clientes de correo electrónico, aplicaciones gráficas y multimedia, etc.).
En ocasiones se puede oír hablar de distribuciones o aplicaciones 'estables' y aplicaciones 'en desarrollo'. Aunque a primera vista la distinción parecería la misma que hay entre una versión final y una beta, en realidad esto no es así.
Una aplicación se sigue manteniendo, p.ej. se siguen corrigiendo bugs y aplicando parches para corregir problemas de seguridad tanto si es estable como si está en desarrollo. La palabra estabilidad hace referencia al código.
La diferencia radica en que las versiones estables no incorporan código nuevo, mientras que las que están en desarrollo siguen modificándose, agregando nuevas funcionalidades, etc.
Y si bien es cierto que una versión estable de una aplicación suele ser más segura, esto no tiene por que ser siempre el caso; como tampoco que la versión en desarrollo sea la que tenga mejor desempeño (performance).
Un ejemplo es el kernel. Siempre hay dos versiones, la estable y la que está en desarrollo, que se distinguen por el número, p.ej. un kernel 2.4 es estable y también lo es un kernel 2.6, pero un kernel 2.5 o uno 2.7 no. Sin embargo se liberan parches de seguridad para ambos tipos.
El ejemplo paradigmático de una distribución que adhiere a esta política es Debian, que tiene tres distribuciones disponibles: Sid (inestable), Sarge (para testeo) y Woody (estable). En Woody están las versiones más antiguas de los programas, que tienen instaladas todas los parches de seguridad. En Sid están todas las últimas funcionalidades de las aplicaciones, es la distribución que se usa para desarrollo activo. En Sarge están los paquetes que no han sido testeados completamente como para incorporarse a la versión estable. En general Sarge se usa en producción. Vale la pena destacar que no todas las distribuciones y aplicaciones siguen esta política.
Las distribuciones más recientes (primer semestre 2004) son las siguientes:
Debian [54] - La versión «estable» actual de Debian GNU/Linux es la 3.0r4, cuyo nombre en código es woody. Salió el 1 de enero de 2005. La información más actualizada se puede obtener en http://www.debian.org/releases/. El ciclo de liberación de la versión estable tiende a ser más largo que para otras distribuciones, pero existen otras versiones más modernas. Uno de sus fuertes son las facilidades para instalar actualizaciones y nuevos paquetes: en un archivo (/etc/apt/sources.list) se ingresan los repositorios donde buscar los paquetes, y con el comando apt-get se automatiza la actualización de paquetes y grupos de paquetes. Se puede llegar a actualizar toda la distribución con el comando apt-get dist-upgrade si se tiene una conexión de banda ancha.
Knoppix [57] - La principal característica es que viene para correr desde CD (Live CD). Se puede usar como un demo de Linux, con fines educativos, para rescatar un sistema, o adaptarlo y usarlo para hacer demostraciones de otros productos. Como está comprimido, trae 2Gb de software. La versión más reciente es la 3.7.
Mandrake [53] - La versión doméstica más reciente es la 10.1, de diciembre de 2004. Al final de la instalación permite, si el usuario tiene una conexión a internet y preferiblemente de banda ancha, una actualización del sistema incluyendo los últimos parches de seguridad. Su principal ventaja es la sencillez de su instalación y la cantidad de hardware que detecta, incluidos impresoras USB, DVDs y CD Rewriters. Recientemente, Mandrakesoft liberó dos servicios de soporte (en modalidades estándar y premium al estilo RedHat) con las dos nuevas versiones de su distribución: Corporate Server 3.0 desde U$S 369, la versión Premium desde U$S 829 y la Corporate Desktop desde U$S 109. La versión 10.0 fue la que se bajó de internet para testeo durante el proyecto, y en ese momento no existían versiones corporativas.
RedHat [51] - Después de la versión 8, la compañía RedHat no permite acceso a su distribución salvo que contrate con ella un servicio de soporte. Es una manera de obtener dinero sin violar la licencia GPL. Tiene tres versiones, WS (workstation), ES (Enterprise Server) y AS (Application Server). Los contratos se dividen en básico, estándar y premium. Para la versión WS van desde U$S 179 a U$S 299; para la versión ES van de U$S 349 a U$S 799 y para la versión AS van de U$S 1499 a U$S 2499. Los montos son por año. La principal ventaja de este tipo de soporte es acceso a actualizaciones. Los usuarios de versiones anteriores de RedHat ahora mantienen una versión descendiente, Fedora Core [52], de la que hablaremos más adelante. La versión más reciente de RedHat es RHEL 3.0 en octubre de 2003; la última de Fedora Core es la 3; ambas distribuciones incluyen el Anaconda Installer, que entre otras cosas permite realizar instalaciones automáticas basadas en scripts. Una característica de la instalación de Fedora es que permite verificar que el medio elegido de instalación no tenga errores.
SlackWare [55] - Es una de las primeras distribuciones de Linux, que originalmente venía en juegos de disquetes. La versión más reciente es la 10.0 liberada en junio de 2004. Recientemente fue portado a mainframes S/390. Como se mencionó anteriormente, la administración de paquetes solamente requiere gzip y tar, lo que permite un mayor control sobre que se instala, pero fuerza a una mayor planificación.
SUSE [56] - Originalmente desarrollado en Alemania, y recientemente adquirido por Novell. Actualmente ofrece los siguientes productos SUSE Linux Enterprise Server 9, Novell Linux Desktop, SUSE Linux Professional 9.2, y SUSE Linux Personal Edition 9.1. Las distintas versiones están disponibles a través de contratos de servicios de soporte y versiones de evaluación, algunas de ellas están disponibles gratuitamente para descargar desde Internet.
Gentoo [65] - Se ha dado en llamar una meta-distribución porque permite un grado de configuración muy alto, instalando los paquetes y optimizándolos en función del uso que se le vaya a dar (servidor seguro, estación de trabajo de desarrollo, escritorio corporativos, etc.). Mediante la herramienta portage se obtienen scripts que permiten la instalación desde los fuentes de todos los paquetes disponibles. Luego se ejecutan los scripts requeridos, los cuales obtienen los fuentes de un repositorio y los compila antes de instalarlos, permitiendo mejor performance que una compilación genérica. De este modo se prescinde de versiones de la distribución porque se puede sincronizar con todos los paquetes cuando se desee. Es una forma de instalación muy novedosa para Linux (aunque es usada desde hace tiempo para los 'ports' de FreeBSD), pero requiere de una conexión de banda ancha. Aunque también está disponible en Cds.
Instalar GNU/Linux puede ser muy simple y automático o muy complejo y manual. Sin importar la distribución, el procedimiento general es similar en todas las distribuciones. Se bootea un kernel Linux del medio de instalación (CD ROM/Floppy/Network/USB) y arranca un sistema GNU/Linux limitado al programa instalador y una o dos terminales con un shell y algunos logs desplegados en consolas virtuales.
El programa instalador arranca y guía al usuario en la definición de algunos parámetros: el lenguaje, la hora y huso horario, la clave del usuario root (administrador), los parámetros de la red, los paquetes de software a ser instalados, los nombres de usuario y las claves de los demás usuarios, etc.
Una parte crítica del proceso de instalación es el de crear las particiones del espacio de disco. Por lo general hay una interfaz gráfica que permite crear nuevas particiones (o incluso modificar el tamaño de las particiones presentes). Luego las particiones seleccionadas para la instalación se crean, se formatean y se montan en un subdirectorio.
El sistema hace chroot a las nuevas particiones creadas o sea, las identifica como directorio raíz del sistema el punto de montaje de dichas particiones y los paquetes seleccionados se instalan.
Los dispositivos de hardware se detectan y configuran y usualmente en este punto es donde se diferencian las distribuciones ya que cada una utiliza su propia herramienta para esta tarea. Generalmente un kernel modular capaz de reconocer diferente hardware (eventualmente optimizado para el procesador subyacente) se instala por defecto.
Un cargador de Linux (p.ej. lilo o grub) se instala en el primer sector de la partición seleccionada o por lo general en el Master Boot Record. Este cargador permite también la carga de otros sistemas operativos tales como Microsoft Windows, OS/2, etc en un proceso denominado “arranque dual”.
La instalación puede tomar de 10 minutos (p.ej. Linspire) a varias horas (p.ej. Gentoo, donde todo debe ser compilado de los fuentes).
Después de reiniciar la computadora por primera vez, el sistema está pronto con suficiente software instalado y la capacidad de actualizarlo automáticamente vía la red.
Comentamos a continuación los instaladores de las distribuciones principales.
RedHat usa el Anaconda Graphical Installer, con un procedimiento estándar y fácil de instalación.
Debian usa Debian Installer, basado en texto, el cual no es particularmente sencillo para el principiante.
Slackware usa un instalador basado en texto que requiere que el usuario sea consciente de que paquetes precisa y de las dependencias entre los mismos.
Mandrake usa un instalador gráfico, completo, sencillo y versátil que además permite modificar el tamaño de las particiones.
SUSE usa el Yast2 Graphical Installer, con características similares al instalador de Mandrake.
Gentoo el proceso de instalación está guiado por el usuario.
Si el software está hecho por varias personas u organizaciones, existe una lógica de las dependencias respecto a bibliotecas que hace posible la coexistencia de programas heterogéneos. Los formatos usados más frecuentemente son para empaquetar el software son rpm, deb, tgz, portage, y aunque se basan en herramientas de línea de comando suelen existir interfaces gráficas.
La actualización automática de paquetes está presente en todas las distribuciones principales. Se hacen actualizaciones planificadas mediante crontab, se bajan los paquetes de distintos sitios espejo (mirror), y se actualiza el paquete correspondiente en el sistema con la herramienta de administración de paquetes.
Por lo general el kernel nunca se actualiza de forma automática para permitir más control.
La siguiente tabla resume los formatos de archivo de cada distribución y las distintas herramientas utilizadas para instalación y actualización.
Distribución |
Formato de Archivo |
Herramientas |
Tipo de Herramienta |
Debian |
deb |
Dpkg, apt-get, dselect, aptitude synaptic |
línea de comando |
Red Hat |
rpm |
rpm,up2date,yum apt-get,autorpm, redhat-config-packages |
línea de comando y visual |
SlackWare |
tgz |
installpkg,pkgtool, slackupdate,slaptget |
línea de comando |
Mandrake |
rpm |
rpm, urpmi, drakrpm |
línea de comando y visual |
Gentoo |
portage |
ebuild,emerge, portage,kportage |
línea de comando |
SuSE |
rpm |
rpm,yast2 |
línea de comando y visual |
Una observación importante es que, si bien el formato rpm es utilizado por varias distribuciones puede no ser compatible de un sistema a otro. Esto se debe a pequeñas diferencias en la estructura de directorios de cada distribución. Afortunadamente gracias al esfuerzo de Linux Standard Base y de Filesystem Hierarchy Standard , estas diferencias van disminuyendo.
Mientras que Linux es el kernel, todos los sistemas GNU/Linux emplean utilidades desarrolladas por el proyecto GNU. Las mismas son reimplementaciones de los comandos básicos de UNIX licenciadas vía la GPL:
Glibc GNU C Library - Es uno de los componentes más importantes de todas las distribuciones de Linux. Es usado por casi todos los programas en C y provee la interfaz de programación más esencial.
bash - Es un shell compatible con sh que incorpora funcionalidades útiles del Korn shell.
C shell (csh) - Está adecuada al estándar de shell y herramientes POSIX P1003.2/ISO 9945.2 de la IEEE.
gcc - Es un compilador de ANSI C con soporte para K&R C, C++, Objective C, Java y Fortran.
Colección de utilidades para manejar archivos (file utils) - chgrp, chown, chmod, cp, dd, df, dir, dircolors, du, install, ln, ls, mkdir, mkfifo, mknod, mv, rm, rmdir, sync, touch, vdir.
Colección de utilidades para usar en el shell - basename, chroot, date, dirname, echo, env, expr, factor, false, groups, hostname, id, logname, nice, nohup, pathchk, pinky, printenv, printf, pwd, seq, sleep, stty, su, tee, test, true, tty, uname, uptime, users, who, whoami, yes.
Colección de utilidades para manejar texto (text utils) - cat, cksum, comm, csplit, cut, expand, fmt, fold, head, join, md5sum, nl, od, paste, ptx, pr, sort, split, sum, tac, tail, tr, tsort, unexpand, uniq, wc.
Colección de utilidades para redes - ftp, ftpd, rcp, rexec, rlogin, rlogind, rsh, rshd, syslog, syslogd, talk, talkd, telnet, telnetd, tftp, tftpd, and uucpd.
make - Genera ejecutables a partir de un script ('makefile') que le indica los fuentes de que se compone el programa.
tar, gzip, bzip2 - tar crea un archivo a partir de múltiples archivos y gzip comprime y descomprime archivos.
vi, vim, emacs - Son dos editores de texto populares.
Además de las bibliotecas básicas y los programas y herramientas de línea de comando, las distribuciones de GNU/Linux proveen software para diferentes usos. El código, la sintaxis de los archivos de configuración y la lógica de funcionamiento de esos paquetes de software es la misma, pero según la distribución pueden venir diferentes versiones, estar ubicadas en distintos directorios e integrarse al sistema de manera distinta. A continuación mencionamos algunos de los más comunes:
Xfree86 - Un X server Open Free, necesario para tener un ambiente gráfico en Linux.
GNOME (GNU Network Object Model Environment) - Es un framework para el escritorio con un conjunto de aplicaciones.
KDE (K Desktop Environment) - Similar a GNOME, es un ambiente gráfico para escritorio con aplicaciones altamente integradas al mismo.
OpenOffice.Org - La más famosa, avanzada y madura suite de oficina Open Free
PERL - Un lenguaje de programación ampliamente usado para scripts, programas y aplicaciones web. Habitualmente viene acompañado de varias bibliotecas para diferentes usos.
Apache - El servidor web más usado.
Sendmail / Postfix - Dos de los MTA más usados.
Bind - La implementación Open más usada de un servidor DNS.
Samba - La implementación Open de un servidor de archivos CIFS/SMB (para compartir archivos e impresoras con computadoras corriendo Windows).
Gimp – Herramienta de diseño gráfico, permite procesar y manipular imágenes.
Mozilla - Uno de los más avanzados y conocidos web browsers.
El programa que carga Linux en las arquitecturas compatibles con Intel puede ser LiLo o Grub.
Los archivos de configuración generalmente están en /etc/lilo.conf y /boot/grub/grub.conf. En estos se define donde ubicar el cargador (si en el Master Boot Record o en el boot record de una partición), cual es la partición a montar como root (/), el path para la imagen del kernel a bootear y para el initrd.
En cada distribución el kernel deriva del kernel original (Vanilla) hecho por Linux Torvalds, pero puede tener parches que no provengan de Linux sino de quien mantiene la distribución. Siempre es posible recompilar el kernel de los fuentes oficiales o del fuente que viene con la distribución.
Init es el primer proceso que se ejecuta en todos los sistema tipo Unix. Su archivo de configuración es /etc/inittab. Analizando ese archivo y todos los scripts invocados allí permite reconstruir lo que ocurre en el proceso de booteo.
El método de booteo del Unix System V, basado en scripts rc es usado por todos los sistemas Linux y define que scripts (de los ubicados en /etc/init.d) se ejecutan para cada diferente nivel de ejecución o runlevel. Los scripts de booteo de las principales distribuciones son los siguientes:
Distribución |
Ubicación |
Descripción |
Debian |
/etc/init.d/rcS |
El script de inicialización del sistema ejecuta todos los scripts para los que exista un link simbólico en /etc/rcS.d/. El directorio /etc/default/ contiene los parámetros de la configuración (similar a /etc/sysconfig/ de otras distribuciones). Después de la inicialización básica, el sistema entra en el runlevel por defecto (Debian usa el nivel 2, modo texto en red, ejecutando los scripts que inician los servicios. |
RedHat |
/etc/rc.d/rc.sysinit |
Es un script grande, ejecutado directamente por init, que configura y ejecuta todas las funciones de inicialización del sistema. Los archivos de configuración están en /etc/sysconfig/* donde tanto usuarios como herramientas de configuración guardan varios valores del sistema. |
/etc/rc.d/functions |
Contiene funciones de propósito general usadas por cada script del sistema. |
|
/etc/init.d/* |
Contiene los scripts de inicio y finalización mediante links simbólicos en los directorios /etc/rc#.d/ |
|
SlackWare |
/etc/rc.d/rc.S |
Contiene la inicialización del sistema |
/etc/rc.d/rc.modules |
Módulos del kernel |
|
/etc/rc.d/rc.pcmcia, rc.serial |
Testeo y configuración de varios dispositivos de hardware |
|
/etc/rc.d/rc.sysvinit |
Ejecuta los archivos de inicialización de acuerdo al runlevel |
|
/etc/rc.d/rc.local |
Reservado para booteo especificado por el usuario |
|
Mandrake |
/etc/init.d/rc.sysinit |
Es un script grande, ejecutado directamente por init, que configura y ejecuta todas las funciones de inicialización. Los archivos de configuración están en /etc/sysconfig/* donde tanto usuarios como herramientas de configuración guardan varios valores del sistema. |
/etc/rc.d/functions |
Contiene funciones de propósito general usadas por cada script del sistema. |
|
/etc/init.d/* |
|
|
Gentoo |
/sbin/rc |
Maneja todo y realiza acciones diferentes de acuerdo a los argumentos recibidos como parámetro. El inittab de Gentoo ejecuta /sbin/rc sysinit para inicialización general del sistema. |
/sbin/rc boot |
Para más comandos genéricos de booteo y /sbin/rc default para entrar en el runlevel por defecto. Para iniciar los servicios ejecuta los scripts en /etc/init.d/. |
|
SuSE |
/etc/init.d/boot |
Es el primer script ejecutado por init, y maneja los siguientes scripts: /etc/init.d/boot.* varios archivos de booteo para diferentes propósitos; se ejecutan los que tienen links simbólicos en /etc/init.d/boot.d/ |
/etc/init.d/boot.local |
Es el último archivo antes de entrar en la fase de rc, reservado para los comandos de booteo del usuario. |
|
/etc/init.d/* |
Son scripts de inicio de servicios ejecutados si existen links simbólicos en /etc/init.d/rc#.d/ rc symlinks |
La ubicación de los archivos del sistema (binarios, configuración, logs, dispositivos, documentos, etc) representan un problema para el usuario novicio en Unix. Hay estándares para saber donde se ubican estos archivos, el Filesystem Hierarchy Standard por ejemplo es uno de ellos, aunque pueden variar ligeramente de una distribución a otra.
Para ubicar un archivo están las utilidades which, locate, whereis, whatis, apropos, find, etc.
Algunos directorios importantes y su uso, son:
/bin |
Comandos esenciales para todos los usuarios. |
/boot |
Archivos estáticos para el cargador de inicio (boot loader). |
/dev |
Archivos de dispositivos. |
/etc |
Configuración específica para cada host. |
/home |
Directorio donde se ubican los directorios de los usuarios. |
/lib |
Bibliotecas compartidas esenciales y módulos del kernel. |
/media |
Puntos de montaje para medios removibles. |
/mnt |
Puntos de montaje para sistemas de archivos montados temporalmente. |
/opt |
Paquetes de software de aplicación agregados. |
/root |
Directorio hogar para el administrador. |
/sbin |
Binarios del sistema. |
/srv |
Datos para servicios provistos por el sistema. |
/tmp |
Archivos temporarios. |
/proc |
Sistema de archivo virtual con información sobre el kernel y los procesos. |
/var |
Archivos variables que cambian su tamaño. |
/usr |
Comandos y herramientas de usuarios. |
/var/account |
Process accounting logs. |
/var/cache |
Cache de datos de las aplicaciones. |
/var/crash |
Volcados (dumps) ante caídas del sistema (opcional). |
/var/lib |
Información temporal de las aplicaciones en ejecución. |
/var/lock |
Archivos de bloqueo. |
/var/log |
Archivos y directorios de log. |
/var/mail |
Archivos de mailbox de usuario. |
/var/opt |
Datos variables para /opt. |
/var/run |
Datos variables de tiempo de ejecución. |
/var/spool |
”Spool” de datos para las aplicaciones. |
/var/tmp |
Archivos temporarios preservados entre reinicios. |
/usr/X11R6 |
Sistema X Window, versión 11 Release 6. |
/usr/bin |
La mayoría de los comandos (y aplicaciones) de usuarios. |
/usr/include |
Directorio para los archivos de inclusión de cabecera estándar |
/usr/lib |
Bibliotecas para programación. |
/usr/local |
Jerarquía local, para software instalado localmente y no vía la distribución. |
/usr/sbin |
Binarios estándar del sistema que no son esenciales. |
/usr/share |
Datos independientes de la arquitectura. |
/usr/src |
Código fuente. |
Los comandos básicos usados en Linux son comunes a todas las distribuciones: ifconfig, route, hostname, netstat, arp, mii-tool. Muchas distribuciones están incluyendo las herramientas iproute2 con ruteo mejorado y utilidades como ip y tc.
Cada distribución provee su propia herramienta de configuración que opera sobre archivos de configuración comunes, p.ej. /etc/resolv.conf, /etc/nsswitch.conf, /etc/hosts, /etc/services, /etc/protocols, etc.
Algunos, típicamente aquellos en los que se definen direcciones IP y rutas, cambian. A continuación se mencionan archivos relevantes, ordenados por distribución. Observar que la sintaxis cambia de acuerdo a los scripts que hacen uso de dichos archivos de configuración.
Distribución |
Script |
Descripción |
Debian |
/etc/network/interfaces |
Interfaces y parámetros de red |
RedHat |
/etc/sysconfig/network-scripts/ifcfg-* |
Archivos de configuración para cada interfase. El mismo archivo se encuentra dividido por perfil en /etc/sysconfig/networking/devices/* |
|
/etc/sysconfig/network |
Hostname, default gateway, configuración general |
|
/etc/sysconfig/static-routes |
rutas estáticas |
Slackware |
/etc/rc.d/rc.inet1 |
IP y parámetros de red |
|
/etc/rc.d/rc.inet2 |
Servicios de red |
Mandrake |
/etc/sysconfig/network-scripts/ifcfg-* |
Archivos de configuración para cada interfase. El mismo archivo se encuentra dividido por perfil en /etc/sysconfig/networking/devices/* |
|
/etc/sysconfig/network |
Hostname, default gateway, configuración general |
|
/etc/sysconfig/static-routes |
rutas estáticas |
Gentoo |
/etc/conf.d/net |
Parámetros de la red IP y de las interfases |
|
/etc/conf.d/routes |
Rutas estáticas |
SuSE |
/etc/sysconfig/network/ifcfg-* |
Archivos de configuración para cada interfase. |
|
/etc/sysconfig/network/config |
Configuración general de la red |
Las aplicaciones pueden generar logs de dos maneras: mediante una lógica propia y autónoma, o a través del demonio de log del sistema: syslog. El demonio syslog tiene como archivo de configuración a /etc/syslog.conf, el cual se puede analizar para saber donde se almacenan los logs (en general se usa /var/log/ para los logs del sistema).
Las dos maneras más frecuentes de planificar la ejecución de programas no interactivos son mediante at y cron. Por lo general se instala sin ninguna regla por defecto. En cambio cron se instala y se requiere para la ejecución de varios eventos del sistema.
El archivo de configuración de cron es /etc/crontab; los usuarios pueden crear sus propios trabajos para cron en /var/spool/cron.
Muchas distribuciones proveen (o requieren) anacron para ejecutar cron jobs 'perdidos', p.ej. planificados a una hora en que el sistema estaba apagado.
Administración de usuarios
Un sistema GNU/Linux es un sistema operativo multiusuario con un usuario privilegiado (root), usuarios de sistema que se emplean para ejecutar comandos del sistema y demonios (lp, nobody, mail, news, uucp ...) y usuarios humanos, es decir, interactivos.
La base de usuarios es /etc/passwd, cuya lógica y sintaxis es común a todos los sistemas GNU/Linux. Cada uno de ellos almacena los datos y las contraseñas de los usuarios en /etc/shadow. Los usuarios pueden ser organizados en grupos, definidos en /etc/group.
La configuración del sistema para políticas UID/GID, contraseñas y administración de login suelen almacenarse en /etc/login.defs.
Los archivos estándar de los usuarios, p.ej. los que se copian al directorio hogar de un usuario cuando éste es creado, se almacenan en /etc/skel/.
Los comandos useradd, userdel, usermod son los más básicos para manejar usuarios. El comando passwd se usa para cambiar la contraseña.
Todas las distribuciones proveen su propia interfase de texto o gráfica para administración de usuarios, a veces, hasta más de una.
La naturaleza del proyecto requiere el empleo de herramientas Open Source, incluyendo el sistema operativo. A continuación, resumimos los argumentos que nos inclinaron a emplear la distribución Mandrake 10.0 como sistema operativo y a la vez ver la problemática de la introducción del software libre en las pequeñas y medianas empresas.
Evitamos las distribuciones que apuntan a necesidades específicas y nos concentramos en distribuciones genéricas, o sea, distribuciones que pueden utilizarse para múltiples propósitos, a fin de poder abordar la mayor cantidad de empresas posibles.
Nos guiamos por el índice de popularidad de las distribuciones, pensando que una distribución popular tiene más garantías de continuidad.
Distribución |
Sitios Activos Julio 2004 |
Mercado compartido (distribuciones conocidas) |
Taza de crecimiento en 6 meses |
|
Enero 04 |
Julio 04 |
|||
Linux – RedHat |
1465310 |
50,8 |
49,8 |
10,1 |
Linux - Cobalt |
596743 |
20,8 |
20,3 |
13,3 |
Linux – Debian |
468502 |
15,5 |
15,9 |
14,5 |
Linux - SuSE |
347326 |
10,9 |
11,8 |
15,6 |
Linux - Mandrake |
37186 |
1,3 |
1,3 |
15,3 |
Linux - Gentoo |
29912 |
0,7 |
1 |
49,5 |
Estos datos fueron obtenidos de NetCraft.[44] http://news.netcraft.com/archives/2004/07/12/slight_linux_market_share_loss_for_red_hat.html.
Mandrake además es considerada la distribución GNU/Linux más amigable con el usuario y más fácil de usar. Encontramos también que la distribución de Mandrake es apta tanto para servidores como para desktop. Si bien existen distribuciones específicas para desktop como SUSE 9.1 Personal Edition, encontramos inclusive que Mandrake es tanto o más amigable y fácil de utilizar para un usuario final que esta. Además, no encontramos una manera fácil ni inmediata para conseguir la distribución de SuSE Enterprise (servidores), excepto comprándola.
Estas son algunas de las características de Mandrake 10.0
Kernel 2.6
Proceso de instalación automatizado
Detección y configuración automática del hardware
Software de particionado fácil de usar con soporte para sistemas de archivos transaccionales: EXT3, ReiserFS, XFS, y sistemas de archivos cifrados. Cambio del tamaño de la partición NTFS sin pérdida de datos.
Instalación del sistema en el idioma de su elección (de entre 68 disponibles)
KDE 3.2, Gnome 2.6
Centro de Control de Mandrake Linux: 62 herramientas (entre asistentes y utilitarios) para configurar su sistema con facilidad y de forma intuitiva.
URPMI: Administración automatizada del software.
Manejo de CPU compatible con arquitecturas SMP e Hypter-Threading. Soporta procesadores AMD Athlon 64 y AMD Opteron.
Soporte para USB2 e IEEE 1394.
Soporte para Serial ATA*.
Soporte de ambientes heterogéneos con Samba.
Autenticación sobre servidores LDAP, NIS o Windows.
Compatibilidad con chipsets ATI™Rage 128/Pro & Radeon, NVIDIA, Matrox G200/G400/G500.
Compatibilidad con tarjetas de vídeo compatibles con NVIDIA®, ATI™, tarjetas Intel i865G, 8xx, Matrox y otras.
Administración de la seguridad del sistema (Draksec y Drakperm).
Cortafuegos (firewall).
Para elegir la distribución a usar, primero se seleccionaron las distribuciones de propósito general más populares, después se seleccionaron aquellas con menor costo de adquisición.
Es deseable que la distribución sea de propósito general para que pueda abarcar la mayor cantidad de empresas posibles. Por otro lado, la popularidad ofrece cierta garantía de continuidad.
La siguiente tabla incluye las principales características de las tres distribuciones de propósito general más populares. [47]
|
Fedora RC2 |
Mandrake 10 |
SuSE 9.1 |
Instalación |
Modo gráfico, sin herramienta de reparticionamiento. |
Modo gráfico, herramienta de reparticionamiento, actualización online. |
Modo gráfico, herramienta de reparticionamiento, actualización online. |
Booteo |
GDM login manager, mensajes del kernel. |
MDM login manager, mensajes del kernel opcionales. |
KDM login manager, mensajes del kernel opcionales. |
Configura-ción del sistema |
Detección y configuración durante el booteo. Panel de control gráfico. Varias aplicaciones. No permite configuración avanzada. |
Detección y configuración durante el booteo. Panel de control gráfico: una aplicación varios módulos. |
Detección y configuración durante el booteo. Panel de control gráfico: una aplicación, YaST, varios módulos. |
Software |
1600 paquetes con las últimas versiones; herramienta básica de instalación/desinstalación de paquetes. |
3172 + 1998 (por ftp) paquetes con las versiones más viejas; herramienta avanzada de administración de paquetes. |
3475 paquetes + subdirectorio para actualizar principales secciones; herramienta avanzada de administración de paquetes. |
Escritorio |
GNOME 2.6, KDE 3.2.2 |
GNOME 2.4, KDE 3.2 |
GNOME 2.4 + Ximian Evolution, KDE 3.2.1 |
Multimedia |
ALSA u OSS recopilando el kernel. No incluye reproductor de MP3. K3B para grabar Cds. Problemas para instalar drivers de NVIDIA. |
ALSA u OSS. Reproducción de MP3 pero no encodificación. Encodificación OGG. K3B para grabar Cds. |
ALSA u OSS recompilando el kernel. Reproducción de MP3 pero no encodificación. Encodificación OGG. K3B para grabar Cds. |
Soporte |
Para soporte corporativo de RedHat hay que instalar RedHat Desktop. |
Mandrake Club |
Enterprise level support respaldo de Novell. |
Conclusión |
Lista para escritorio en empresas. |
Lista para escritorio en empresas. Aplicaciones de uso frecuente. Herramientas de administración amigables. |
Lista para escritorio en empresas. Aplicaciones de uso frecuente. Herramientas de administración amigables. Soporte corporativo. |
A continuación se incluye una tabla comparativa sobre el tiempo de instalación en una máquina AMD Athlon XP 2600+ con un disco duro 7200rpm Seagate.
Distribución |
Tamaño de Instalación |
De comienzo de instalación hasta el Login Manager |
Fedora Linux RC2 |
2.07 Gb |
13 minutos |
Mandrake Linux 10 |
1.20 Gb |
8.5 minutos |
SuSE Linux 9.1 |
1.49 Gb |
19.5 minutos |
Microsoft XP Pro |
1.03 Gb |
22 minutos, sin drivers |
La tabla siguiente establece una comparación de los tiempos de booteo de los sistemas anteriores en el mismo equipo. La fuente de los datos es la misma que en el caso anterior.
Distribución |
Tiempo de booteo por defecto |
Tiempo de booteo de servicios |
Fedora Linux RC2 |
43 segundos |
38 segundos |
Mandrake Linux 10 |
30 segundos |
28 segundos |
SuSE Linux 9.1 |
42 segundos |
39 segundos |
Microsoft XP Pro |
54 segundos |
N/A |
Se puso interés exclusivamente en arquitectura Intel por entenderse que es la más popular en las PyMEs.
Si bien otra opción válida de implementación de una plataforma empresarial basada en GNU/Linux a considerar es SUSE 9.2 Professional Edition para equipos servidores y SUSE 9.1 Personal Edition para desktops encontramos que para la Professional Edition no es fácilmente accesible y se encontraron problemas en la utilización de la versión desktop resultando no tan amigable como se lo promociona.
Entre otras distribuciones a considerar, nos quedan Debian, Gentoo y Mandrake. Por un lado, Debian, si bien es popular es difícil de instalar. Por otro, Gentoo tiene la filosofía de instalarse en forma remota y requiere una infraestructura específica en la empresa (p.ej. ADSL).
Observar que Mandrake cumple con LSB 1 (Linux Standard Base, iniciativa para aumentar compatibilidad a nivel binario y correr software en distintas distribuciones sin tener que recompilarlo), está libre de las restricciones legales que impone Estados Unidos al software criptográfico (asociado a una baja seguridad) y además se puede instalar en español.
Y dada la facilidad de acceso a la distribución de Mandrake, la completitud de paquetes (tanto servidor como desktop), facilidad de uso al usuario final, ventaja de tener una versión completa y de descarga gratuita (Community Edition) encontramos a Mandrake como el candidato para utilizar durante todo el Proyecto.
La distribución se obtuvo a través de LinuxIso.org. Se bajaron los 3 ISO con las imágenes de los primeros 3 CDs de la distribución en marzo.
1Observar que en general estos programas son licenciados vía la GPL, debido a las restricciones de GPL que impone al uso del kernel junto a otras aplicaciones.
2Basado en la distribución Debian.
3Existen otras distribuciones, las que tienen un fin específico, como Coyote. Coyote Linux implementa un firewall y cabe en un CD.
4La versión actual de la LSB es la 2.1 de enero de 2005 y se puede obtener de la página http://www.linuxbase.org/spec/. La versión actual del FHS es la 2.3 de enero de 2004 y se puede obtener de la página http://www.pathname.com/fhs/
5Unix es un trademark de Bell Labs y SCO es titular de los fuentes, pero diremos Unixes o “sistemas tipo-Unix” para referirnos a sistemas operativos que cumplen con Posix y System V, como GNU/Linux y FreeBSD.
6FreeBSD lo hace a través de un módulo del kernel. Esto ha permitido instalar la versión para GNU/Linux de SAP R/3 sobre FreeBSD, aunque SAP AG no da soporte para ese tipo de instalación.
7Por ejemplo con rpm –rebuild paq.src.rpm obtengo el paquete paq.rpm. Si yo ya tenía instalada una versión anterior, puedo actualizarla con rpm -Uvh paq.rpm.
Estudio del Open/Free (GNU/Linux) como plataforma de servicios de red en entornos empresariales
Daniel Caraballo - Mario Madera - Marcelo Odin
Tutor: Ariel Sabiguero Yawelak
2004 - 2005.