💾 Archived View for jdrm.info › 9front.gmi captured on 2024-05-26 at 14:32:39. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-05-10)

➡️ Next capture (2024-08-18)

-=-=-=-=-=-=-

Página actualizada el 03/05/2024

Información y notas sobre 9front

Introducción

Soy un fan de 9front, lo reconozco, pero no le dedico el tiempo que me gustaría. En mi web he ido creando algunas entradas con información un poco desordenada así que creo que ha llegado el momento de ir recopilándola y poner un poco de orden. Esta página de mi cápsula no tendrá su igual en el blog, de momento.

Administración

Mantenemos el sistema actualizado, de forma rápida, mediante:

term% sysupdate
term% cd /sys/src
term% mk install
term% mk clear

En ocasiones los pasos anteriores se nos quedan cortos y necesitamos recompilar el kernel limpiando todo desde cero. Para ello:

term% sysupdate
term% cd /sys/src
term% mk nuke
term% mk libs
term% mk install
term% mk clear
term% cd /sys/src/9/pc64 # En el caso de ser un pc de 64 bits
term% mk install
term% mk clean
term% 9fs 9fat
term% cp /amd64/9pc64 /n/9/
term% unmount /n/9
term% unmount /n/9fat
term% rm /srv/dos
term% fshal -r # para reiniciar

Apaga el ordenador de forma ordenada

El primer comando que hay que aprender al adentrarse en Plan 9 o sus derivados es

fshalt

Este comando para los fileservers y hace un apagado ordenado de la máquina.

/env

En el directorio /env se encuentran variables de entorno de la consola. Este "directorio" contiene una serie de "ficheros" que se llaman igual que las variables de entorno y que contienen el valor de las mismas. Así estos dos comandos devuelven el mismo resultado:

cat /env/pid
echo $pid

Ambos nos devuelven el identificador de la consola actual. ¡¡¡Con lo que /env es diferente para cada terminal que abramos!!! Realmente /env no es un directorio real con ficheros reales dentro. Es un interface por medio del cual el sistema nos permite acceder a cierta información dándonos la sensación de que estamos leyendo ficheros. Pasa algo parecido con /proc.

Configuración

La configuracison del sistema tiene un fichero principal, que es plan9.ini. Ahí se configuran cosas como la resolución de pantalla. Para ello:

term% 9fs 9fat
term% acme /n/9fat/plan9.ini

Teclado

Para cambiar la configuración del teclado editamos el fichero $home/lib/profile y añadimos la siguiente línea antes de rio -i riostart:

term% cat /sys/lib/kbmap/es > /dev/kbmap

SSH

9front tiene varios "clientes" ssh. ssh como tal, con el que nos podemos conectar a un servidor tanto por el puerto 22, por defecto, como por otro diferente:

ssh usuario@IP.IP.IP.IP
ssh usuario@tcp!IP.IP.IP.IP!puerto

O podemos utilizar vt, un emulador de terminal

vt -x ssh -r usuario@IP.IP.IP.IP

Accediendo a unidades de disco

9front tiene un script llamado 9fs que sirve para montar en local distintos espacios de almacenamiento de servidores en internet, como por ejemplo las fuentes de 9p.io, el repositorio de contrib, etc.

9fs 9contrib
lc /n/contrib

Acceder a un disco de red NFS

Mediante el comando NFS creamos el servicio de acceso que luego nos permitirá montar el disco

nfs -s nombre ip.del.servidor.remoto
mount -a /srv/nombre /n/nfs-server nombre-carpeta
lc /n/nfs-server

Acceder a un disco local con ext4

Desde principios de año es posible montar en lectura y escritura un disco con el sistema de ficheros ext4.

Para montarlo en modo sólo lectura:

ext4srv
mount /srv/ext4 /n/disco /dev/sd.../data
lc /n/disco

Invocando a ext4srv con la opción -S se montará el disco en lectura y escritura

Acceder a un disco mediante SSH

Disponemos de sshfs para montar como dispositivo un equipo remoto mediante ssh.

Para conectarnos mediante sshfs, por ejemplo para copiar contenido desde nuestro 9front hacia o desde otro ordenador, lo hacemos con estos dos simples pasos:

sshfs -s server user@IP.IP.IP.IP
mount -a /srv/server /n/sshfs

Git

La siguiente configuración vale para cualquier servidor git en el que sea necesario usar una llave ssh para hacer push.

La guía de instalación se encuentra en este enlace aunque ya es un paquete base en el sistema operativo.

Creamos el fichero $home/lib/git/config con el siguiente contenido

[user]
  name = User Name
  email = email@jdrm.info

[core]
  editor = acme

El siguiente paso es generar una llave ssh, la cual deberemos subir el fichero .pub al servidor:

term% mkdir lib/ssh
term% auth/rsagen -t 'service=ssh' > lib/ssh/key
term% auth/rsa2ssh lib/ssh/key > lib/ssh/key.pub

y disponibilizarla mediante:

cat $home/lib/ssh/key >/mnt/factotum/ctl

Correo electrónico

Primero debemos guardar en factotum los datos de conexión al servidor IMAP y al SMTP

auth/factotum -g 'proto=pass server=imap.server.com service=imap user=username !password=YOURPASSWORD'
auth/factotum -g 'proto=pass server=smtp.server.com service=smtp user=username !password=YOURPASSWORD'

Lo siguiente es hacer una primera conexión de prueba que dará un error de certificado

upas/fs -f /imaps/disroot.org/user

El error de certificado dice que ejecutemos lo siguiente:

echo 'x509 sha256=XXXXXXXX' >>/sys/lib/tls/mail

Y ya podemos volver a lanzar el comando anterior, que tardará bastante tiempo. Dejamos que termine.

Una vez ha finalizado podemos ejecutar lo siguiente:

upas/fs -f /imaps/imap.server.com/username
echo 'open /imaps/imap.server.com/username/Inbox Inbox' >/mail/fs/ctl

Y entrar en acme y mediante el comando Mail ya nos cargará la lista de correos de la carpeta.

Configuración de correo saliente

Modificamos el fichero /mail/lib/remotemail con la siguiente configuración:

#!/bin/rc
shift
sender=username@server.com
shift
addr=tcp!smtp.server.com!587
shift
fd=‘{/bin/upas/aliasmail -f $sender}
switch($fd){
case *.*
  ;
case *
  fd=smtp.server.com
}
exec /bin/upas/smtp -u username -a -h $fd $addr $sender $*

Copiamos el fichero /mail/lib/rewrite.gateway como /mail/lib/rewrite y reemplazamos YOURDOMAIN.COM por server.com

Editamos el fichero /mail/box/${user}/headers con el siguiente contenido (ojo, es importante que haya una línea en blanco al final del documento

From: My Name García <username@server.com>

El siguiente paso es añadir el certificado a factotum, para ello ejecutamos:

echo hello | mail -s test myuser@server.com

lo que deberá generar un error en /sys/log/smtp. Copiamos el sha y ejecutamos:

echo 'x509 sha256=XXXXXXXX' >>/sys/lib/tls/smtp

Ahora desde acme podemos hacer una prueba de envío de correo.

rc

rc es el intérprete de comandos de Plan 9 y derivados. Originalmente se desarrolló para UNIX y se portó a Plan 9.

rc no tiene un histórico como tienen bash, zsh o esas otras cosas modernas, pero si tiene algunas funcionalidades interesantes. Lo primero es saber que puedes añadir cosas a la configuración de rc editando el fichero $home/lib/profile. Por ejemplo añadiendo la siguiente función:

fn term%{ $* }

para poder seleccionar una línea completa haciendo doble click al final de la misma y, desde el menú contextual del botón 2 del ratón, darle a Send.

Algunos comandos en rc

Si bien algunos comandos son iguales en 9front que en GNU/Linux, hay unos cuantos que son diferentes y hay ausencias importantes. Hay que tener en cuenta que todo el código fuente de 9front son muchas, muchas líneas menos que el código fuente del navegador Firefox, y esto afecta también a comandos que si bien son iguales que en otros UNIX y similares, no aceptan los mismos parámetros.

rio

rio es el sistemas de ventanas de Plan 9. Más concretamente, rio convierte ficheros de texto en pixels e interpreta los comandos introducidos mediante los periféricos de entrada y los convierte a texto a su vez. Así, por ejemplo, si haces un cat /dev/mouse en un terminal y mueves el ratón sobre él verás como la posición del cursor es escrita en el fichero.

Para usar rio es necesario tener un ratón con 3 botones. Los botones son referidos en la documentación como 1, 2 y 3 (de izquierda a derecha).

El botón 1 es principalmente para seleccionar y posicionarnos en la pantalla. El botón 3 nos muestra un menú con diferentes opciones:

New
Resize
Move
Delete
Hide

además de una lista de las ventanas que hayamos ocultado. Creo que es muy obvio para qué sirve cada comando.

No, en rio no hay un menú de aplicaciones como en otros sistemas de ventanas de NIX. El botón 3* sirve para manejar las ventanas que tenemos abiertas.

El botón 2 nos muestra un menú con opciones para manejar texto y ejecutar operaciones sobre él, tales como cut, snarf, paste, send o plumb.

¿Snarf? En Plan 9 no existe el comando copy, en su lugar está snarf que hace algo parecido. Copia el texto seleccionado a memoria.

Para moverte por el terminal arriba y abajo puedes usar tanto los cursores pulsando a la vez el botón de Mayúsculas o mediante los botones 1 y 3 haciendo click en la barra de desplazamiento que hay a la izquierda del terminal.

Comandos con el ratón en rio

Click con el botón 1 selecciona texto.

Doble click con el botón 1 selecciona la palabra que hay bajo el cursos, salvo que estemos al final de una línea. En ese caso selecciona toda la línea.

Manteniendo pulsado el botón 1 si hacemos Click con el botón 2 corta el texto seleccionado.

Manteniendo pulsado el botón 1 si hacemos Click con el botón 3 pega el texto cortado anteriormente.

Atajos de teclado en rio

Comandos útiles

Hacer capturas de pantalla:

term% cat /dev/screen | topng > captura.png
term% topng < /dev/screen > captura.png

Aplicaciones

Repo de nvi

Zuke

Zuke son realmente dos aplicaciones interrelacionadas: zuke y mkplist. Ambos programas están en la instalación por defecto de 9front, no hace falta acudir al repositorio del desarrollador. El primero es un reproductor de audio gráfico que usa una playlist como punto de entrada. El segundo es el programa necesario para crear esa playlist.

En la playlist podemos tener fichero de audio en diversos formatos (OGG, MP3, FLAC y WAV) además de urls de streaming de radio. Para crear una playlist de cero usamos el comando

audio/mkplist http://urlDeRadioOnline fichero.ogg /usr/glenda/directorioDeMusica > $home/music.plist

Cuando queramos añadir contenido a la playlist usaremos casi el mismo comando. Deberemos usar >> para que añada las nuevas entradas al final del fichero sin que nos borre el contenido existente.

Para reproducir el contenido ejecutamos

audio/zuke < $home/music.plist

Con esto veremos una ventana con la playlist y podremos iterar por ella:

-          Bajar volúmen.
+ =        Subir volúmen.
← →        Saltar 10 segundos atrás/adelante.
, .        Saltar 60 segundos atrás/adelante.
↑ ↓ Pgup Pgdown Inicio Fin
o i        Salta a la pista actual.
Enter      Escucha la pista actual.
> b        Salta a la pista siguiente.
< z        Salta a la pista anterior.
v          Para la reprodución
p c Space  Pause/Continúa.
s          Reproduce en modo aleatorio.
q Del      Salir.
/          Busca hacia adelante.
?          Busca hacia atrás.
n          Repite búsqueda adelante.
N          Repite búsqueda atrás.

Mothra

Mothra es otra aplicación que instala de fábrica 9front. Es un navegador web (olvidate del javascript) bastante intuitivo. En el menú del botón 3 (el derecho) puedes acceder a la lista de "marcadores", añadir la página actual a dicha lista, buscar texto, etc...

Es un navegador muy rápido con el que puedes acceder a todas tus páginas favoritas siempre y cuando las hayan desarrollado pensando en que hay personas que pueden no tener activado javascript en su navegador porque no debería ser obligatorio.

USENET mediante nntpfs y Acme

Configuración de nntpfs

Daré por supuesto que tenéis usuario en cualquiera de los servidores de USENET. En mi caso lo tengo en news.eternal-september.org

Lo primero es crear el registro en factotum:

auth/factotum -g 'proto=pass service=nntp server=news.eternal-september.org user=miusuario !password=<aquí va tu contraseña>'

Y lo siguiente es montar el sistema de archivos:

nntpfs -a news.eternal-september.org

Y con esto, en unos pocos segundos, tendremos /mnt/news/ cargado con todos los directorios de USENET montados de forma jerárquica. Por ejemplo, comp.os.plan9 estará en el path /mnt/news/comp/os/plan9 y dentro habrá un directorio por cada mensaje con ficheros dentro en los que está el cuerpo y las cabeceras de cada mensaje.

Usar Acme para leer USENET

Una vez tenemos montado en nuestro userspace el sistema de archivos nntpfs abrimos Acme y ejecutamos, por ejemplo:

News comp.os.plan9

Lo que hará que se nos carguen todos los mensajes de este topic en una nueva ventana dentro de nuestro editor. Desde ahí podremos abrir los mensajes, responder a ellos, crear un nuevo Post en ese grupo...

Una nota

Cuando pulsas en Newpost para crear un nuevo post abre una nueva ventana con el grupo al que va a llegar ese post y el subject: para rellenar. Hay que añadir otro campo, si quieres, que es el from: con un email que debe ser el tuyo, pero modificado para que no te llegue SPAM pero que pueda ser usado por una persona para enviarte información si lo considera necesario.

Enlaces

Un documento fundamental es la Introducción a Plan 9 de Francisco J. Ballesteros.

Why is Plan9 like this? An introduction to Namespaces

Goofing around with Plan 9 from Bell Labs

A quick intro to C programming, for Plan 9 and 9front