💾 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
⬅️ Previous capture (2024-05-10)
-=-=-=-=-=-=-
Página actualizada el 03/05/2024
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.
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
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.
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.
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
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
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
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
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
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
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
La siguiente configuración vale para cualquier servidor git en el que sea necesario usar una llave ssh para hacer push.
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
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 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 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.
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.
Hacer capturas de pantalla:
term% cat /dev/screen | topng > captura.png term% topng < /dev/screen > captura.png
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 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.
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.
Un documento fundamental es la Introducción a Plan 9 de Francisco J. Ballesteros.
Why is Plan9 like this? An introduction to Namespaces