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 nuevo, 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 fueron 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 capaz de usar diferentes tipos de recursos y servidores distribuidos a través de casi cualquier red. requiere pocos recursos comparado a la mayoría de los sistemas.

Todos los recursos en Plan 9 son presentados como archivos (en oposición a Unix, donde casi 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).

Instalación

  • Inicia desde el CD-ROM
  • Selecciona 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 seleccionar ‘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 vez 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 TODO …blah blah sdC0
  • selecciona 'y’ para instalar mbr
  • Enseguida se ejecuta fdisk, este automáticamente 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
  • Enseguida subdivide la partición recién 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 sub-particiones. 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

Virtualización de Plan 9

Qemu

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

VirtualBox

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

Gráficos

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 Red

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 &

Configuración DNS

echo 'ip=<YOUR_IP> sys=<YOUR_SYSNAME> dom=<YOUR_FQDN> dns=<DNS_IP>' >> /lib/ndb/local

ndb/cs es un servidor utilizado por para traducir nombres de red. Se inicia junto con el sistema.

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

ndb/cs
ndb/dns -r
mkdir /cfg/<sysname>
dircp /cfg/example /cfg/<sysname>
chmod 750 /cfg/<sysname>/*rc
ip/ipconfig -g <YOUR_GATEWAY> ether /net/ether0 <YOUR_IP> <YOUR_NETMASK>
ndb/cs
ndb/dns -r

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

echo 'hwaccel off' > /dev/vgactl

Configuración IP

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=<YOUR_IP> sys=<YOUR_SYSNAME> dom=<YOUR_FQDN> dns=<DNS_IP>

Agregar nuevo usuario

Firmado como glenda ejecuta los comandos siguientes para crear un usuario del sistema.

con -l /srv/fscons
uname <usuario> <usuario>
uname sys +<usuario>

Para salir de fscons presiona CTRL+** y escribe q en el indicador >>>

La primera vez que el usuario accede al sistema, ejecuta el siguiente comando para poblar su directorio.

/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 +<usuario>

IMAPS e-mail

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

Actualiza Plan 9

-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 <user>/<package>

Dependencias básicas

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

mercurial y ptyon

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

Desktop

Take screenshot

cat /dev/screen > screenshot
cat /dev/screen > screenshot | topng > screenshot.png
tojpg < /dev/window > window.jpg

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;

Drawterm

Autenticación

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

Conexión remota

drawterm -c 192.168.0.10 -a 192.168.0.10 -u glenda

Referencias