Autor: vejeta

  • Configurar plan9 con el hipervisor lguest

    Introducción

    • Plan9 de Bell Labs es el sistema operativo creado por los mismos laboratorios que inventaron Unix. Puede ejecutarse de manera nativa sobre diferentes arquitecturas, o tambien como máquina virtual con Qemu, Xen o Lguest.
    • Lguest está integrado en el kernel linux desde la versión 2.6.23-git13 en adelante. Para realizar el artículo se ha probado con el último kernel 2.6.25.

     

    Configurando Lguest

    Hay que preparar el kernel para tener el soporte de lguest  y activar varias opciones.

    No es el objetivo de este artículo explicar como se configura o compila el kernel, pero puedes utilizar «make menuconfig» para seleccionar las siguientes opciones:

      "General setup":
         "Prompt for development and/or incomplete code/drivers" = Y
            (CONFIG_EXPERIMENTAL=y)
    
      "Processor type and features":
         "Paravirtualized guest support" = Y
            "Lguest guest support" = Y
         "High Memory Support" = off/4GB
         "Alignment value to which kernel should be aligned" = 0x100000
            (CONFIG_PARAVIRT=y, CONFIG_LGUEST_GUEST=y, CONFIG_HIGHMEM64G=n and
             CONFIG_PHYSICAL_ALIGN=0x100000)
    
      "Device Drivers":
         "Block devices"
            "Virtio block driver (EXPERIMENTAL)" = M/Y
         "Network device support"
            "Universal TUN/TAP device driver support" = M/Y
            "Virtio network driver (EXPERIMENTAL)" = M/Y
               (CONFIG_VIRTIO_BLK=m, CONFIG_VIRTIO_NET=m and CONFIG_TUN=m)
    
      "Virtualization"
         "Linux hypervisor example code" = M/Y
            (CONFIG_LGUEST=m)

     

    Configurando el soporte de red (Bridging o NAT)

    La máquina virtual usará un interfaz de red virtual, mediante bridging o NAT.

    En este caso, utilizaremos NAT, para lo cual tambien necesitaremos soporte de NAT en el kernel si no lo tuvieramos:

     

    Networking  ---->
     Networking options  ---->
      Network packet filtering framework (Netfilter)--->
       Core Netfilter Configuration ---->
        <*> Netfilter connection tracking support
        <*> Netfilter Xtables support (required for ip_tables)
        <*>   "NFLOG" target support
        <*>   "conntrack" connection tracking match support
        <*>   "state" match support
       IP: Netfilter Configuration --->
        <*> IPv4 connection tracking support (required for NAT)
        <*> IP tables support (required for filtering/masq/NAT)
        <*>   Packet Filtering
        <*>     REJECT target support
        <*>   Full NAT
        <*>     MASQUERADE target support
    

    Compilamos el kernel: make
    Instalamos el kernel: make install
    Instalamos los modulos: make modules_install

    Compilando el binario de lguest

    Bajo el arbol de directorios donde tengamos las fuentes de linux (en mi caso es /usr/src/fuentes/linux), vamos al siguiente subdirectorio:

    cd Documentation/lguest/

    y ejecutamos «make» para generar el binario ejecutable de lguest.

    vejeta:/usr/src/fuentes/linux/Documentation/lguest# make
    cc -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include    lguest.c  -lz -o lguest

     

    Obtener el kernel modificado y la imagen de Plan9 para lguest (THNX)

     

    • 9lguestcpu.2.6.25.elf.   Es el kernel modificado para arrancar Plan9 bajo lguest.
    wget http://sirviente.9grid.es/sources/contrib/rminnich/lguest/9lguestcpu.2.6.25.elf
    • THNX – «Tiny Horrible NOT Xen» es la imagen preinstalada de Plan9 que fue creada por Ron Minnich para funcionar bajo lguest. (300Mb comprimidos, 1.6Gb al descomprimir)
    wget http://usuarios.lycos.es/vejeta/plan9/thx9.img.bz2

     

    Descomprimir:

    bzip2 -d thx9.img.bz2

     

    Haciendo NAT para el interfaz de red tap0

     

    Crear el script: NATME con las siguientes líneas y ejecutarlo.

    iptables --append FORWARD --in-interface tap0 -j ACCEPT
    iptables --table nat --append POSTROUTING --out-interface  eth0  -j MASQUERADE
    iptables -t nat --list
    echo 1 > /proc/sys/net/ipv4/ip_forward

     

    Arrancando Plan 9 con lguest

    Hay que reiniciar el ordenador para arrancar con el nuevo kernel y ya podemos arrancar lguest.

    Primero cargamos el modulo de lguest con los parámetros que se indican.

    modprobe lg syscall_vector=64

    Arrancando lguest con Plan9 virtualizado.

    /usr/src/fuentes/linux/Documentation/lguest/lguest 256 /usr/local/tmp/plan9/lguest/9lguestcpu.2.6.25.elf \
    --tunnet=192.168.19.1 \
    --block=/usr/local/tmp/plan9/lguest/thx9.img \
    'venti=#S/sd00/arenas;bootdisk=local!#S/sd00/fossil;bootargs=local!#S/sd00/fossil;lguestnetwork=NAT;'
    • 256 indica la RAM que tendra la máquina virtual.
    • 9lguestcpu.2.6.25.elf.  Es el kernel que ejecutará la máquina virtual.
    • –tunnet=192.168.19.1. Configura un dispositivo de red «tap» con la dirección IP indicada.
    • –block=/usr/local/tmp/plan9/lguest/thx9.img.  Es  el dispositivo de bloques (block device) que en este caso contiene la imagen de plan9 preinstalada.

     

    La imagen de Plan9 está preparada para funcionar como «cpu», es un servidor de Plan9 el cual sirve a terminales Plan9.

     

    Conectando a la máquina virtual Plan9 con drawterm

     

    Si aún no tienes un terminal Plan9, puedes usar drawterm compilando los fuentes, o usando un binario ejecutable para tu sistema operativo.

     

    drawterm -u bootes -a 192.168.19.2 -c 192.168.19.2

    La clave o password es: lguestgood

    La siguiente imagen muestra la ventana de drawterm, con el navegador abaco y acme. De fondo se ve el terminal donde arrancamos lguest.

     

    lguest_thnx

     

     

    Enlaces de interes

    —

    Espero que os guste

    Zoperman – Vejeta

  • Proyecto Unix-Jun72

    Se ha creado un proyecto para la recuperación del Unix primera edición datado de Junio de 1972 tal y como está especificado en el Unix Programmer’s Manual del 3 Noviembre de 1971.

    Actualmente se esta intentando ejecutar en una version ligeramente modificada de SIMH el listado del kernel que está en bitsavers,  PreliminaryUnixImplementationDocument_Jun72 (pdf 12Mb).

    En su página web podemos leer:

     

    Este proyecto creará codigo legible y compilable a partir del las copias impresas del la primera edición de Unix del año 1972. Muchos programas ejecutables todavía existen en forma binaria y este proyecto intentará restaurar un incompleto pero funcional sistema de la primera edición de Unix. El software mantendrá el copyright de los autores originales, el cual está actualmente licenciado libremente bajo la licencia de Caldera ancient UNIX license.

     

    Para mas información se puede ver la página del proyecto unix-jun72, o subscribirse a la lista de correo https://minnie.tuhs.org/mailman/listinfo/unix-jun72.

     

    Actualización (07 – Junio – 2008):

    El kernel de la 1ª edición de Unix ha podido ser ejecutado de nuevo bajo SIMH. La única versión conocida del kernel era un listado impreso que tuvo que ser escaneado, despues editado a mano, y por ultimo, depurado.

    El kernel consiste en 4200loc, escrito en ASM del PDP11, corre en una máquina de 24Kbyte y soporte 8 usuarios concurrentes.

    Todo esto es muy interesante para aquellos interesados en kernels, Unix, o la historia de los sistemas operativos y la computación, y al alcance de tu mano en la página del proyecto enlazada anteriormente.

  • Los orígenes de Ctrl-Alt-Del

    Una vez más, Pacolinux nos rescata parte de la historia de la computación. Esta vez, en un esfuerzo de traducción, nos detalla en un documento gráfico la historia que envuelve a esta curiosidad en la historia de los PC: Orígenes del Alt-Ctrl-Del

     

  • Orígenes del Alt-Ctrl-Del

    David Bradley se graduó en 1971 por la Universidad de Dayton (Ohio), el mismo año que Intel lanzó el procesador 4004, y recibió su Ph.D. por la universidad de Purdue el mismo año que salió el kit de construcción del Altair. «El primer ordenador que habría utilizado habría sido un [IBM] 360», dijo. Se incorporó a IBM en junio de 1975 y trabajó y trabajó con un System/23 Datamaster en 1978, el primer ordenador de IBM con un procesador no-IBM. Para el PC, él escribió la totalidad de la BIOS. «Escribí todo el código con la excepción del control de cassete y los test de power-on» comentó.

    Recientemente nos ha contado como ideó la combinación Alt-Ctrl-Del:

    En algún momento durante el desarrollo de la BIOS del IBM PC, probablemente de enero de 1981, tuvimos un problema de desarrollo. Un montón de nuevo software estaba saliendo y siendo puesto a prueba y, como frecuentemente sucede con el nuevo software, éste deja de correr, y deja colgada a la máquina. Cuando los programas que realizas son en ensamblador, hay muchas posibilidades de que algo como esto suceda. A menos que estés trabajando con una placa base que no esté dentro de una caja, la única manera de reiniciar la máquina era desconectar la corriente, esperar unos segundos para que los condensadores se descarguen, entonces encender de nuevo la máquina. A continuación, esperar a que el «Power On Self Test» se ejecute, lo que puede llegar a tardar hasta un minuto si hay una gran cantidad de memoria instalada en la máquina, esperar que arranque el DOS (desde el disquete, por supuesto), y entonces relanzar el programa bajo prueba y tratar de averiguar lo que salió mal.

    La solución mas simple habría sido un botón de reinicio. Sin embargo, la construcción mecánica del interior del PC habria hecho difícil localizar un lugar y, además, siempre estaba el problema de pulsarlo inadvertidamente. Así que decidimos usar el teclado. Había que escoger un juego de teclas que fuera difícil pulsar accidentalmente. Dado que la BIOS tenía que caber en 8KB y ya estabamos casi por 9KB, debía de ser muy breve la secuencia de instrucciones que lo detectara. Por ello dos de las teclas debian de ser de cambio de estado (shift) ya que la BIOS de teclado las monitoriza y mantiene el estado en RAM. Por eso escogí las mas nuevas y menos usadas ‘shift keys’:  Ctrl y Alt. Finalmente escogí la tecla de acción lo mas alejada posible de ellas.  Si miras en el teclado original de 83 teclas del IBM PC (significativamente diferente de los teclados actuales, verás que solo hay una instancia de las teclas Ctrl y Alt en el lado izquierdo y un solo Del el el lado mas derecho del teclado. Podría haber elegido ‘Enter’ en lugar de ‘Del’, pero (a) Enter es una tecla mas grande, con lo cual hay mas posibilidades de pulsarla por accidente, y (b) ‘Del’ es un mejor mnemotécnico que ‘Enter’ para la drástica acción que se va a realizar.

    IBM Model F XT

    El código para controlar la pulsación del C-A-D fue de 9 instrucciones, ocupando 30 bytes de longitud. Después de detectar dos cambios de estado de las teclas modificadoras y la tecla «Supr», almacena una bandera en una posición de memoria especial, y luego salta a la posición de reset del 8088. El código del POST detecta la bandera especial (0x1234 en el área de RAM BIOS) después de haber hecho la inicialización del sistema, pero antes de hacer la larga prueba de memoria. Se supone que la memoria ya ha sido probada en el encendido inicial de la máquina, y otra prueba de memoria es probablemente innecesario. Además es mucho más rápido de esta manera.

    Esta no era la primera vez que usaba una secuencia de tres teclas para acceder a una función del sistema. El system/23 DataMaster, el cual usaba un microprocesador Intel 8085, fue un prototipo del IBM PC en muchos sentidos. Yo había escrito un pequeño depurador para usar en nuestro sistema de desarrollo del S/23 (podéis pensar en el DEBUG del disquette original del DOS). Un desarrollador podía acceder a ese depurador con una secuencia de tres teclas similar al del C-A-D (aunque no idéntica, ya que aunque el teclado era el mismo, el interfaz y las teclas especiales no). Así que usar una secuencia de tres teclas para resetear/reiniciar el IBM PC era lo más natural.

    Ctl-Alt-Del fue una simple solución a un problema. No fue la solución completa, ya que si el programa que fallaba hubiera desactivado las interrupciones (una instrucción de un solo byte en el x86) nada de lo que hicieras en el teclado provocaria una interrupión a la BIOS. Pero funcionó en la mayoría de los casos. Y desde entonces fue uno de los cientos de pequeños (y grandes) problemas que tuvimos que solucionar antes de que el PC pudiera ser anunciado, despues de 10 minutos de diseño, codificación y testeo, fue momento de pasar al siguiente problema.

    Has empleado casi tanto tiempo en leer esto como yo tardé en crear e implementar el C-A-D

    Bueno,  yo creo que he tardado mas en traducir esto. Espero os haya gustado

    Paco.

  • Abaco

     

    • Para instalar abaco.
    % 9fs sources; /n/sources/contrib/fgb/root/rc/bin/contrib/install fgb/contrib

     

    • Para conseguir que las cookies funcionen en abaco (para poder entrar en gmail, por ejemplo)
    % 9fs sources
    % cp /n/sources/contrib/fgb/cookies.c /sys/src/cmd/webfs
    % cd /sys/src/cmd/webfs
    % mk
    % mk install

     

    Para ejecutar abaco, necesitamos arrancar «webfs» primero.

    Si webfs se queja con: «webfs: readjar: cannot read cookie file
    /usr/glenda/lib/webcookies: ‘/usr/glenda/lib/webcookies’ does not exist»

     

    Podemos hacer:

    % touch /usr/glenda/lib/webcookies

    En el caso de que nuestro usuario fuera glenda, sustituir por el usuario que estemos usando.

     

    • Para cambiar las fuentes de abaco.

    Con las herramientas contrib de fgb:

     

    % contrib/install fgb/freefont
    % cp /sys/src/cmd/abaco/abaco.fonts $home/lib
    • Plan9 tambien puede ejecutarse en sistemas operativos tipo Unix, gracias a «Plan 9 from User Space»: plan9port
  • Presentación de PacoLinux

    Hola a todos:

     

    Mis principales intereses en el mundo de la Informática son las
    máquinas y sus  Sistemas Operativos, los compiladores y lenguajes de
    programación. Como actualmente existe poca diversidad de Sistemas
    Operativos y hardware, me interesa bastante ir hacia atrás en el tiempo
    y conocer otras máquinas. A algunas de ellas, todavía se puede tener
    acceso, pero a otras no. Es más, algunas de estas máquinas ya no
    existen, con lo cual la única forma de estudiarlas es bajo emulación.
    Aquí ire hablando de distintos Sistemas Operativos, algo de historia,
    algo de hardware, etc.. En algunas ocasiones contaré como instalar
    determinado Sistemas Operativos bajo un emulador para podernos hacer
    una idea de cómo era. También hare referencia a los distintos
    emuladores que hay y a los múltiples OSes que hay o han habido y que
    presentan interés.

     

    Espero os sea útil,

    Paco

  • ksplice: patches en caliente para el kernel linux

    Una herramienta bastante interesante llamada ksplice nos permite aplicar parches al kernel de linux sin tener que parar la maquina. Interesante para poder aplicar los últimos parches de seguridad, o simplemente para ‘trastear’ con el kernel. En la documentación hay un ejemplo muy bueno de como cambiar la funcion printk estandar por una personalizada.

  • Libros clásicos de Computer Science

    La ACM tras haber realizado una encuesta entre sus asociados, se ha decidido a poner el texto íntegro de diversos libros clásicos del mundo de la computación. Entre otros estan:

     

     

    Algunos pendientes de la autorización del autor. Se necesita registro gratuito y todos ellos se pueden encontrar aquí

    .

  • Anuncio de emulador de Multics

    En alt.os.multics se ha anunciado la disponibilidad de un emulador en estado pre-alpha de Multics/ge635. Se puede ver el código en https://sourceforge.net/projects/h6180/ o descargarlo via:

    svn checkout https://svn.code.sf.net/p/h6180/code/ h6180-code

    El autor indica que esta dispuesto a trabajar o discutir el diseño, ya que esta en una fase muy preliminar.

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.