miércoles, 6 de noviembre de 2013

Proyecto GNU

PROYECTO GNU



GNU es un sistema operativo similar a Unix que es software libre.

HISTORIA

En los inicios de la informática todo el software era libre. Los ordenadores eran máquinas pesadas y caras que sólo se podían encontrar en las Universidades y centros de investigación. Los programadores mantenían su código abierto y colaboraban entre sí a través de Internet, construida toda ella con software libre. En aquellos años el sistema de referencia era UNIX propiedad de AT&T, cuyo código era distribuido libremente a empresas y universidades por un precio simbólico. AT&T no podía explotar comercialmente UNIX debido a su calidad de monopolio.

En el 1984 la ley antimonopolio estadounidense obligó a la compañía a dividirse. A partir de ese momento la restricción impuesta dejo de ser efectiva, UNIX comenzó a comercializarse y dejo ser software libre.

Al mismo tiempo la informática comenzaba a tomar otro rumbo, la informática doméstica. Los ordenadores comenzaron a ser  más ligeros e invadir los hogares. 

El software comenzó a ser comercializado y las empresas obligaron a sus programadores a firmar acuerdos de no revelación, por los que se comprometían a cerrar el código, y los programas comenzaron a venderse sin facilitar su código fuente.

Esto generó una reacción de rechazo que se hizo patente cuando Richard Matthew Stallman en 1984 decidió iniciar el proyecto de crear un sistema operativo similar a UNIXTM, pero con una licencia que permitiera el acceso al código fuente, además de la libre distribución y copia. Para ello hubo de abandonar el laboratorio de Inteligencia Artificial del MIT (Instituto Tecnológico de Massachusetts) en el que había trabajado hasta entonces.

Siguiendo una costumbre muy popular entre los hackers informáticos de la época llamó al proyecto GNU, acrónimo recursivo que significa "GNU is Not Unix", y cuyo emblema sería un Ñu. Para proteger al nuevo sistema se creó la licencia GNU/GPL (Licencia Pública General GNU) y el copyleft (opuesto al copyright), que garantiza la libertad de uso, copia y modificación, y obliga a distribuir el código fuente junto con los binarios

El proyecto GNU tuvo un gran exito. Cientos de programadores de todo el mundo se identificaron con su manifiesto fundacional y comenzaron a colaborar y producir componentes del futuro sistema operativo libre. Stallman comenzó a construir gcc, el Compilador GNU para el lenguaje C, verdadera pieza clave en el desarrollo del sistema. En la actualidad gcc, conocido ahora como Colección de Compiladores GNU, ha ampliado su funcionalidad y es capaz de trabajar con 7 lenguajes de programación diferentes.

En 1985 Stallman creó la Free Software Fundation (FSF) para dar cobertura legal al proyecto. En la actualidad la FSF promueve el desarrollo y uso del software libre, particularmente del sistema operativo GNU, y defiende los derechos de los usuarios a copiar, estudiar, modificar y redistribuir los programas informáticos.

En 1990 el sistema GNU estaba casi completo pero faltaba un componente muy importante: el núcleo (kernel). Sin núcleo no puede haber sistema operativo y aunque se había trabajado en GNU Hurd no se habían conseguido resultados efectivos.
El primer kernel libre y operativo no llegaría hasta la década de los 90.

En 1991 Linus Torvalds un estudiante finlandés de 21 años desarrolló un núcleo compatible con Unix y lo denominó Linux.

En enero de 1992 se publicó la versión 0.02, y poco tiempo después, en marzo de 1994 la versión 1.0.0,  lista para sistemas en producción. A partir de esta versión al combinar Linux con el sistema no completo GNU resultó un sistema operativo libre completo cuyo nombre correcto es GNU/Linux, y no simplemente Linux por más que esta denominación abreviada se haya popularizado. De esta manera se reconoce que el sistema no es sólo el núcleo, sino muchas otra piezas de software que se escribieron con anterioridad sin las que hubiera sido imposible tener algo funcional e incluso poder construirlo.

En 1996 se publica el kernel 2.0.0 ya asociado con la mascota del Pingüino (llamada Tux). En la actualidad el kernel Linux versión 2.6.30, está disponible para una gran variedad de arquitecturas y goza de un gran prestigio en la comunidad informática como fiable, sólido y seguro.

¿Qué es un software libre?

Software libre 


Un software se considera libre si el mismo cumple con las siguientes condiciones:

  • Es posible utilizar el programa con cualquier fin
  • Es posible acceder al código fuente del mismo
  • Es posible hacer copias del programa
  • Es posible publicar las mejoras


Se refiere a la libertad de los usuarios para ejecutar, copiar, distribuir, estudiar, modificar el software y distribuirlo modificado.

El software libre es una cuestión de libertad de los usuarios para ejecutar, copiar, distribuir, estudiar, cambiar y modificar el software.
 Más concreto, se refiere a los cuatro tipos de libertades para los usuarios de software:
1.- La libertad de usar el programa, con cualquier propósito
2.- La libertad de estudiar el funcionamiento del programa, y adaptarlo a sus necesidades. El acceso al código fuente es un requisito para esto.
3.- La libertad de distribuir copias para ayudar a los demás

4.- La libertad de mejorar el programa y de publicar las mejoras, de modo que toda la comunidad se beneficie. El acceso al código fuente es un requisito para esto.

martes, 5 de noviembre de 2013

PRACTICA DE LABORATORIO

PRACTICA LABORATORIO








¿Qué son Runlevels y para qué sirven?


RUNSLEVELS


El runlevel (del inglés, nivel de ejecución) es cada uno de los estados de ejecución en que se puede encontrar el sistema Linux. Existen 7 niveles de ejecución en total:


  • Nivel de ejecución 0: Apagado.
  • Nivel de ejecución 1: Monousuario (sólo usuario root; no es necesaria la contraseña). Se suele usar para analizar y reparar problemas.
  • Nivel de ejecución 2: Multiusuario sin soporte de red.
  • Nivel de ejecución 3: Multiusuario con soporte de red.
  • Nivel de ejecución 4: Como el runlevel 3, pero no se suele usar
  • Nivel de ejecución 5: Multiusuario en modo gráfico.
  • Nivel de ejecución 6: Reinicio.

Este sistema de niveles de ejecución lo proporciona el sistema de arranque por defecto de la mayoría de distribuciones GNU/Linux (init). Sin embargo, Canonical ha estado desarrollando un nuevo sistema de arranque llamado upstart para sustituir a init, ya que init no se adapta a las necesidades actuales.

CAMBIAR EL RUNLEVEL EN EJECUCIÓN
Existe una utilidad para línea de comandos que permite cambiar de un nivel de ejecución a otro. Esta es la herramienta init. Para cambiar de nivel de ejecución sólo hay que ejecutar init seguido del número del runlevel. Por ejemplo:
  • init 0: Cambia al runlevel 0 (se apaga el sistema, equivalente al comando halt).
  • init 2: Cambia al runlevel 2.
  • init 6: Cambia al runlevel 6 (reinicia el sistema, equivalente al comando reboot).


Proceso Init


PROCESO INIT



El proceso de arranque init  es el primer proceso que se ejecuta en el sistema, es el más importante, del que dependen el resto de todos los demás procesos. En el arranque de GNULinux, el núcleo ejecuta init. Este programa, ahora como proceso, cargará los subprocesos necesarios para la puesta en marcha del sistema. Cuando init haya terminado de cargarse vaciará el subdirectorio /tmp y lanzará a getty que es el encargado de permitir a los usuarios hacer login en el sistema.


Los niveles de ejecución (también generalmente conocidos por su nombre en inglés, runlevel) determinan los servicios que tendremos disponibles en cada uno de ellos. Es una forma de tener diferentes modos de trabajo, cada uno de ellos con distintas características bien definidas, en función del tipo de tarea a que estén orientados.

Existen ocho niveles de ejecución: los nombres de los siete primeros son los números que van del 0 al 6, más un octavo cuyo nombre es la letra S (tiene un alias con la letra s para evitar problemas con la sensibilidad al caso), este runlevel, en realidad, es igual a el nº 1.

Los niveles de ejecución son tal como siguen:

0: (Detener el sistema).
1: (modo en Mono usuario, sin soporte de red).
2: (modo en Multiusuario, sin soporte de red).
3: (Modo multiusuario completo).
4: (Sin uso. Recomendado para pruebas).
5: (Multiusuario completo en entorno gráfico).

6: (Reinicio del sistema). 



Uno de los scripts más importantes en el arranque del sistema es /etc/rc.d/rc.sysinit. y es el primer script que init ejecuta. En él están definidas funciones

importantes como pueden ser: el inicio y activación del espacio de intercambio. (swap), la configuración de la red, la especificación de las variables del sistema, la comprobación y montaje de los sistemas de archivos, la inicialización de puertos serie, la carga de los módulos del kernel, el establecimiento  de las cuotas para cada usuario, el ajuste del reloj del sistema, etc.

El último script en ejecutarse es /etc/rc.d/rc.local. En este archivo se podrán poner inicializaciones especificas del sistema, aunque su propósito inicial es controlar los servicios de red. 

¿Qué es el Kernel o núcleo?


KERNEL/NÚCLEO



El kernel o núcleo de linux se puede definir como el corazón de este sistema operativo. Es el encargado de que el software y el hardware del  ordenador puedan trabajar juntos.

Las funciones más importantes del mismo, aunque no las únicas, son:

  • Administración de la memoria para todos los programas y procesos en ejecución.
  • Administración del tiempo de procesador que los programas y procesos en ejecución utilizan.
  • Es el encargado de que podamos acceder a los periféricos/elementos del ordenador de una manera cómoda.
Hasta que empezó el desarrollo de la serie 2.6 del núcleo, existieron dos tipos de versiones del núcleo:
  • Versión de producción: La versión de producción, era la versión estable hasta el momento. Esta versión era el resultado final de las versiones de desarrollo o experimentales.
    Cuando el equipo de desarrollo del núcleo experimental, decidía que tenia un núcleo estable y con la suficiente calidad, se lanzaba una nueva versión de producción o estable. Esta versión era la que se debía utilizar para un uso normal del sistema, ya que eran las versiones consideradas más estables y libres de fallos en el momento de su lanzamiento.
  • Versión de desarrollo: Esta versión era experimental y era la que utilizaban los desarrolladores para programar, comprobar y verificar nuevas características, correcciones, etc. Estos núcleos solían ser inestables y no se debían usar sin saber lo que se hacia.


Proceso de Arranque de Linux


PROCESO DE ARRANQUE DE LINUX



Todo el proceso de arranque, se desarrolla en 4 etapas:
  • Al principio, toma el control la BIOS.
  • En una segunda etapa, tomará el control el cargador de arranque.
  • En una tercera etapa, el control pasa al propio kernel Linux.
  • Y en la cuarta y última etapa tendremos en memoria los programas de usuario conviviendo junto con el propio sistema operativo, quienes tomarán el control del sistema.

Primera etapa: La BIOS.
Al encender el equipo, toma el control la BIOS. que realiza una serie de operaciones básicas de hardware. 
Una vez que el hardware es reconocido y queda listo para usar, la BIOS carga en memoria el código executable del cargador de arranque y le pasa el control.

Segunda etapa: El cargador de arranque: GRUB.
Existen diferentes cargadores de arranque. En Debian, habitualmente utilizamos GRUB.
Normalmente, el cargador de arranque se guarda en el MBR (Master Boot Record), que como tiene un tamaño muy reducido (Son los primeros 512 bytes del disco), obliga a dividir el arranque

 en varias etapas. De este modo, la BIOS carga la primera etapa del cargador de arranque. Y, después, esta primera etapa del cargador de arranque cargará el resto del cargador de arranque.


GRUB se carga y se ejecuta en 4 etapas:

  • La BIOS carga la primera etapa del cargador, que se encuentra almacenada en el MBR.
  • La primera etapa carga el resto del cargador. Si la segunda etapa está en un dispositivo grande, se carga una etapa intermedia (llamada etapa 1.5), que contiene código extra que permite leer cilíndros mayores que 1024 o dispositivos tipo LBA.
  • La segunda etapa ejecuta el cargador y muestra el menú de inicio de GRUB, permitiendo seleccionar el SO que se desea arrancar.
  • Una vez seleccionado el sistema operativo que se quiere arrancar, se carga en memoria y se le pasa el control.
Tercera etapa: El kernel de Linux.
El proceso del kernel se realiza en dos etapas:
  • La etapa de carga.
  • La etapa de ejecución.
El kernel generalmente se almacena en un archivo comprimido. Este archivo comprimido se carga y se descomprime en memoria.
Por otra parte, también se cargan los drivers necesarios mediante el initrd. El initrd crea un sistema de archivos temporal usado en la fase de ejecución del kernel.
Una vez que el kernel se ha cargado en memoria y está listo, se lleva a cabo su ejecución.
Lo último que se lanza es el proceso init.

Cuarta etapa: El proceso init.

Al igual que todos los sistemas Unix, Debian arranca ejecutando el proceso init. El archivo de configuración de init es el fichero /etc/inittab, en el que se indica que el primer script que se debe ejecutar es el /etc/init.d/rcS.

Supongamos que se encuentra instalado el paquete sysv-rc (es lo típico), que utiliza enlaces simbólicos en los directorios rc para controlar qué servicios se inician en los diferentes niveles de ejecución.

El archivo /etc/init.d/rcS ejecuta todos los scripts situados en /etc/rcS.d/ para realizar inicializaciones tales como la comprobación y montaje de los sistemas de archivos, la carga de módulos, la inicialización de los servicios de red, la configuración del reloj, etc.

Luego, y por compatibilidad, también ejecuta todos los archivos (excepto aquellos con un `.' en su nombre) situados en /etc/rc.boot/. Este último directorio está reservado para el administrador del sistema y su utilización ha caído en desuso.


Debian utiliza los siguientes niveles de ejecución:

  • 0 (apagar el sistema)
  • 1 (modo monousuario)
  • 2 al 5 (modos multiusuario)
  • 6 (reiniciar el sistema)