Plan 9

Plan 9 de los Laboratorios Bell es un sistema de investigación desarrollado en los laboratorios Bell a finales de 1980s. Sus diseñadores originales son Ken Thompson, Rob Pike, Dave Presotto y Phil Winterbottom.

Introducción

El sistema puede parecer tentador a los usuarios de unix, pero extraño al mismo tiempo.

Plan 9 es un kernel de sistema operativo, pero también una colección de software que lo acompaña. La mayoría del software es predominantemente new, escrito para Plan 9 en vez de importar de Unix u otros sistemas. El sistema de ventanas, compiladores, servidor de archivos y servicios de red fuerón escritos para Plan 9. Aunque programas clásicos de Unix, como dc, ed incluso troff han sido incluidos, pero actualizados, por ejemplo para manejar UTF-8 como hace el resto del sistema.

Plan 9 es un sistema distribuido capáz deusar diferentes tipos de recursos y servidores distribuidos a través de casi cualquier red. requiere pocos recursos comparado a la mayoría de los sitemas.

Todos los recursos en Plan 9 son presentados como archivos (en oposición a Unix, donde casí todo son archivos, pero no todos los archivos son “verdaderos archivos”)) y el sistema utiliza un método común para acceder a todos los recursos. (9P Styx).

#

  • Inicia desde el CD-ROM
  • Slecciona ‘‘1. Install Plan 9 from this CD’’
  • Selecciona ‘‘[yes]’’ cuando el instalador pregunte por DMA. solo si tienes problemas durante la instalación, deberías selecciónar ‘no’
  • Enseguida el instalador pregunta por el puerto del mouse, si tienes un mouse USB ignora la pregunta. No podrás usar el mouse durante la instalación, pero no hay problema.
  • El instalador pregunta por la resolución de la tarjeta VGA. El default esta bien para la instalación, puedes cambiar esto una véz que el sistema esté instalado.
  • Instalación gráfica.
  • Selecciona el sistema de archivos, configfs (fossil) o venti. Fosil esta bien.
  • Selecciona el dispositivo de disco donde instalar Plan9. Plan 9 …blah blah sdC0
  • selecciona ‘'’y’’’ para instalar ‘‘mbr’’
  • Enseguida se ejecuta ‘‘fdisk’’, este automaticamente crea (pero no escribe) una partición para Plan 9, si encuentra espacio libre suficiente. Escribe ‘'’w’’’ para escribir la tabla de particiones y ‘'’q’’’ para salir de ‘‘fdisk’’
  • Eseguida subdivide la partición recien creada en ‘‘p9fat’’, ‘‘fossil’’ y ‘‘swap’’. ‘‘p9fat’’ debe ser la primera partición del disco para que Plan 9 pueda iniciar. El programa ‘‘prep’’ sugiere una distribución de las subparticiones. Igual que en ‘‘fdisk’’ usa ‘'’w’’’ y ‘'’q’’’ para aceptar el default.
  • Formato del sistema de archivos fossil.
  • En ‘‘mountfs’’, monta la partición fossil que acabas de formatear.
  • '’configdist’’, pregunta por la localización del archivo de la distribución; como estas instalando desde el CD, selecciona ‘'’local’’’
  • '’mountdist’’ explora los dispositivos y te da una lista de los dispositivos donde encuentra el archivo de la distribución. Selecciona ‘'’sdD0/data (iso9660 cdrom)’’’
  • Enseguida el instalador pregunta cual directorio contiene los archivos de la distribución, instalando desde CD-ROM la raíz de este es el indicado.
  • Una vez que el archivo de la distribución es localizado, inicia la tarea ‘‘copydist’’.
  • '’bootsetup’’ configura el disco duro para iniciar Plan 9, cuando te pregunte; especifica ‘'’plan9’’’ para hacer la partición del disco de plan 9 la default y selecciona ‘'’Plan 9 master boot record’’’
  • La instalación ha terminado, re-inicia la PC y saca el CD-ROM para que Plan 9 inicie desde el disco duro. Cuando el bootloader pida el usuario, usa ‘'’glenda’’’

#

Ejecutar qemu como root o con privilegios elevados (sudo).

qemu-img create -f qcow2 plan9.img 2G qemu -hda plan9.img -cdrom plan9.iso -boot d qemu -m 256 -vnc :1 -net nic -net tap,ifname=tap0,script=no plan9.img }}}

Configuración

#

Lista los modos vesa soportados y configura a 1024x768x24.

aux/vga -m vesa -p aux/vga -m vesa -l 1024x768x24 }}}

#

Inicia sesión como ‘'’adm’’’

cp /adm/timezone/Mexico_General /adm/timezone/local }}}

#

Configuración de la red

/!\ Estos 3 pasos son temporales y se pierden si el sistema reinicia, para hacerlos permanentes; agregalos en el archivo ‘‘/rc/bin/termrc’’

ip/ipconfig -g 192.94.73.1 ether /net/ether0 YOUR_IP 255.255.255.0 echo ‘key proto=p9sk1 dom=plan9 user=glenda !password=YOUR_PASSWORD’ >/mnt/factotum/ctl aux/listen1 -t tcp!*!ncpu /bin/cpu -R & }}}

’'’Configuaración DNS’’’

echo ‘ip= sys= dom= dns=' >> /lib/ndb/local }}}

'’ndb/cs’’ es un servidor utilizado por [[http://cm.bell-labs.com/magic/man2html/2/dial dial(2)]] para traducir nombres de red. Se inicia junto con el sistema. CHECK THIS

'’ndb/dns’’ le sirve a ‘‘ndb/cs’’ y sistemas remotos traduciendo nombres de dominio de Internet. La opción ‘‘-r’’ indica que actua solo como resolver: envía consultas recursivas pidiendo a otros servidores completar la búsqueda.

ndb/cs ndb/dns -r }}}

#

mkdir /cfg/ dircp /cfg/example /cfg/ chmod 750 /cfg//*rc }}}

#

ip/ipconfig -g ether /net/ether0

ndb/cs ndb/dns -r

echo ‘key proto=p9sk1 dom=valhala user=ecelis !password=' > /mnt/factotum/ctl echo 'key proto=pass server=mx.sdf.org service=imap user=ecelis !password=' >> /mnt/factotum/ctl aux/listen1 -t tcp!*!ncpu /bin/cpu -R &

echo ‘hwaccel off’ > /dev/vgactl }}}

#

TIMESYNCARGS=(-rLa1000000) NDBFILE=/lib/ndb/local

mntgen -s slashn && chmod 666 /srv/slashn

for(i in f t m v L P u U ‘$’ Σ κ) /bin/bind -a ‘#’^$i /dev >/dev/null >[2=1]

diskparts

disk=’‘{ls /dev/sd*/swap >[2]/dev/null} if (! ~ $#disk 0) swap $disk(1) >/dev/null >[2=1] rm /env/disk

if(test -e /rc/bin/termrc.local) . /rc/bin/termrc.local

if(! test -e /srv/cs && ! test -e /net/cs) ndb/cs -f $NDBFILE sysname=’‘{cat /dev/sysname} if (~ $#sysname 0 || ~ $sysname ‘’) { sysname echo -n $sysname >/dev/sysname }

if(test -e /cfg/$sysname/termrc) . /cfg/$sysname/termrc

if(test -e /net/ipifc/0/ctl && ! test -e /srv/dns) ndb/dns -r

if(! ~ $terminal vx32){ # start timesync if it isn’t running and we weren’t told not to if(! ps|grep -s timesync) if(! ~ $TIMESYNCARGS ‘’) aux/timesync $TIMESYNCARGS

# add the loop-back device
if(grep -s loopback /dev/drivers)
	ip/ipconfig loopback /dev/null 127.1

# set things up for vmware
if(! ~ ''{cat /dev/user} none)
	if(test -e /bin/aux/vmware)
		aux/vmware }

if(~ $mouseport ask){ echo -n ‘mouseport is (ps2, ps2intellimouse, 0, 1, 2)[ps2]: ‘ mouseport=’‘{read} if(~ $#mouseport 0) mouseport=ps2 } if(~ $vgasize ask){ echo -n ‘vgasize [640x480x8]: ‘ vgasize=’‘{read} if(~ $#vgasize 0) vgasize=640x480x8 } if(~ $monitor ask){ echo -n ‘monitor is [xga]: ‘ monitor=’‘{read} if(~ $#monitor 0) monitor=xga } if(test -f /dev/mousectl){ switch($mouseport){ case ps2 ps2intellimouse 0 1 2 aux/mouse $mouseport # parse vgasize into fields vgasize=’‘{echo $vgasize} if(! ~ $”monitor ‘’ && ! ~ ‘‘{cat /dev/user} none) aux/vga -l $vgasize if(~ $accupoint 1) pipefile -dr /bin/aux/accupoint /dev/mouse } }

usbstart if (test -f /dev/apm) aux/apm

dontkill ‘^(ipconfig|factotum|mntgen|fossil|cs|dns|listen|reboot)$’ }}}

#

database= file=/lib/ndb/local file=/lib/ndb/common

auth=sources.cs.bell-labs.com authdom=outside.plan9.bell-labs.com

ip=127.0.0.1 sys=localhost dom=localhost ip= sys= dom= dns= }}}

#

’'’Crear usuario’’’

con -l /srv/fscons prompt: uname USERNAME USERNAME }}} ‘‘CTRL+'’ and type ‘‘q’’ at »> prompt

’'’Primera vez que el usuario accede’’’

/sys/lib/newuser }}} ‘'’Crear mailbox’’’

upas/nedmail -c }}}

’'’Copiar directorio de glenda’’’

dircp /usr/glenda /usr/newuser }}}

’'’Hacer usuario administrador’’’

con -l /srv/fscons prompt: uname sys +USERNAME }}}

’'’IMAPS e-mail’’’

upas/fs -f/// upas/fs impas: server certificate 22471E10D5C1E41768048EF5567B27F532F33 not recognized upas/fs: opening mailbox: bad server certificate echo 'x509 sha1=22471E10D5C1E41768048EF5567B27F532F33' > /sys/lib/tls/mail }}}

’’‘$user/lib/profile’’’

bind -a $home/bin/rc /bin bind -a $home/bin/$cputype /bin bind -c tmp /tmp if(! syscall create /tmp/xxx 1 0666 >[2]/dev/null) ramfs # in case we’re running off a cd font upas/fs fn cd { builtin cd $* && awd } # for acme switch($service){ case terminal plumber echo -n accelerated > ‘#m/mousectl’ echo -n ‘res 3’ > ‘#m/mousectl’ prompt=(‘term% ‘ ‘ ‘) fn term%{ $* } exec rio -i riostart case cpu plumber webfs upas/fs -f/imaps/mx.sdf.org/ecelis if (test -e /mnt/term/mnt/wsys) { # rio already running bind -a /mnt/term/mnt/wsys /dev if(test -w /dev/label) echo -n $sysname > /dev/label } bind /mnt/term/dev/cons /dev/cons bind /mnt/term/dev/consctl /dev/consctl bind -a /mnt/term/dev /dev prompt=(‘cpu% ‘ ‘ ‘) fn cpu%{ $* } news if (! test -e /mnt/term/mnt/wsys) { # cpu call from drawterm font=/lib/font/bit/pelm/latin1.8.font exec rio -i riostart } case con prompt=(‘cpu% ‘ ‘ ‘) news } }}}

  pop   pops  
  imap   imaps  
  smtp      

#

’‘-c’’ previene que la actualización modificque cambios locales.

9fs sources pull -c /rc/bin/termrc }}}

#

Para instalar contrib

9fs sources /n/sources/contrib/fgb/root/rc/bin/contrib/install fgb/contrib }}}

Software marcado con ‘‘fbg’s contrib’’ se instala:

contrib/install / }}}

Basic Dependencies

contrib/install fgb/z contrib/install fgb/bz2 contrib/install fgb/openssl }}}

’'’mercurial y ptyon’’’

contrib/install bichued/python contrib/install bichued/hg }}}

Utilerias

’'’lsrupd’’’ Script para hacer copia de /n/sources, no disponible donde la wiki deice que debe estar.

switch($#*) { case 2 basehier=$1^/; basedort=$2^/; case * echo usage: lsrupd to from >[1=2] exit }

ramfs;

begin=’‘{date}; echo $begin; cd $basehier; lsr -dt > /tmp/lsr; if(! test -e $basedort^lsr) { echo -n creating other lsr …; cd $basedort; lsr -dt > /tmp/lsr.dort; echo done; } if not { cp $basedort^lsr /tmp/lsr.dort; } comm -3 /tmp/lsr /tmp/lsr.dort | @{ while() { next=’‘{awk ‘{print $1; exit;}’}; if(~ $next ‘./’) { next=’‘{awk ‘{print $1; exit;}’}; } if(~ $next ‘’) { exit }

	echo -n trying: $next ...;

	hier=$basehier^$next;
	dort=$basedort^$next;

	hasfiles=0;
	isdirectory=0;
	hierexist=0;
	if( test -e $hier) {
		hierexist=1;
		if( test -d $hier) {
			hasfiles=1;
			dirfiles=''{ls $hier};
			if(~ $dirfiles '')
				hasfiles=0;
		}
	}
	dortexist=1;
	if( ! test -e $dort)
		dortexist=0;
	if( ~ $hierexist 1 && ~ $dortexist 0) {
		if(! ~ $hasfiles 1) {
			echo rm $hasfiles : $next;
			rm -rf $hier;
		}
	}
	if not {
		if( ~ $dortexist 1) {
			dortnewer=0;
			if( test $dort -nt $hier) {
				dortnewer=1;
				if(! ~ $hasfiles 1) {
					echo rm $hasfiles : $next;
					rm -rf $hier;
				}
			}
			if( test -d $dort) {
				if( ~ $dortnewer 1 || ~ $hierexist 0) {
					mkdir -p $hier;
					echo mkdir: $next;
				}
			}
			if not {
				if( ~ $dortnewer 1 || ~ $hierexist 0) {
					base=''{basename -d $hier};
					if( ! test -e $base) {
						mkdir -p $base;
						echo mkdir: $next;
					}
					if( ! test -r $dort) {
						echo touch: $next;
						touch $hier;
					}
					if not {
						echo fcp $dortnewer $hierexist : $next;
						fcp -x $dort $hier;
					}
				}
			}
		}
	}
	echo done;
} } echo started: $begin; echo ended: ''{date};

unmount /tmp; }}}

  • VirtualBox 5.0.8
  • 512 MB RAM, 8 GB Disco Duro
  • SoundBlaster 16
  • Intel PRO/1000 MT Server Bridged

#

/lib/ndb/local ip=192.168.0.10 sys=plan9me dom=localdomain dns=8.8.8.8

ndb/cs ndb/dns -r

#

Crear Usuario

CTRL+\ para salir de la consola del sistema de archivos y q en >>>

con -l srv/fscons prompt: uname alice alice prompt: uname sys +alice

Estructura b;asica $home /sys/lib/newuser

Autenticación echo 'key proto=p9sk1 dom=plan9me user=glenda !password=secret' >/mnt/factotum/ctl aux/listen1 -t tcp!*!ncpu /bin/cpu -R &

#

drawterm -c 192.168.0.10 -a 192.168.0.10 -u glenda

Referencias

  • [[http://plan9.bell-labs.com/wiki/plan9/installing_plan_9_in_a_virtualbox/index.html Installing Plan 9 in a VirtualBox]]
  • [[http://www.9gridchan.org/plan_9_basics Plan 9 Basics]]
  • [[[http://plan9.bell-labs.com/plan9/ Plan 0 from Bell Labs]]]
  • [[http://wildflower.diablonet.net/~scaron/p9setup.html]]
  • [[http://www.ueber.net/who/mjl/plan9/plan9-obsd.html]]
  • [[[http://www.9grid.fr/ Nodo 9grid Frances]]]
  • [[[http://www.9grid.it/ Nodo 9grid Italiano]]]