martes, 24 de octubre de 2023

¿Cómo uso ITS desde Ubuntu?

Reunidos con educadores de nivel primario, Juan Perón expone las necesidades de formar ciudadanos de provecho, a la vez que instruye cómo utilizar remotamente el ITS, el mítico sistema operativo del MIT desde Ubuntu.

¡Trabajadores!

El pasado pertenece a nuestra historia y a nuestros héroes. El presente tenemos la gran responsabilidad de tenerlo en nuestras manos. Pero el futuro - que es lo más valioso, porque es la esperanza de la Patria - es de los Maestros, que plasman y modelan diariamente en las escuelas a los hombres del mañana, de quienes depende la grandeza de la nacionalidad.

No hay país que pueda ser grande si no son grandes los que forman y acendran el temple y el alma de sus hijos. La democracia, y cualquier otra forma de gobierno en que un noble liberalismo les guíen, no será nada para la grandeza de los países, si los maestros no han preparado los hombres que han de practicarla y llevarla adelante.

Se ha dicho - y con razón - que Inglaterra es uno de los países mas libres y más importantes del mundo, y eso lo debe exclusivamente a la escuela. El liberalismo en manos de hombres mal instruidos, mal preparados, conduce mas al caos que a la liberación, y no a la grandeza de los hombres y de las Patrias.

De ahí surge, en forma indudable, la responsabilidad de los hombres y de las mujeres que están forjando - en los niños - la grandeza futura del País. De ahí surge la enorme responsabilidad de un Maestro consciente que ha de formar la fuerza mas extraordinaria del Pueblo, que es la conjunción de las Inteligencias y de las Almas de los hombres que lo integran.

La tarea del Maestro no es solamente la de instruir, sino la de educar y formar el alma y la inteligencia; dar armas a los hombres para su lucha por la vida o en la vida. Porque es necesario pensar en vivir en una Comunidad Organizada para organizarla. Es necesario pensar en vivir en paz, para lograr la paz.

En el uso del cómputo sucede más o menos lo mismo, al constituirse en una extensión técnica de la vida misma. Un ambiente de cómputo no puede estar regido como una nube, donde vuela pasajera y se deshace al capricho incontrolable del clima político, sino que debe fundarse sobre el sólido pilar técnico de factura y control comunitario, humano. Es allí donde una comunidad, en operación de su potencia de cómputo, puede desarrollar software en libertad para hoy y para el mañana.

Uno de los ambientes punteros en este aspecto fue sin duda el ITS (1969-c.1993), el mítico Sistema de Tiempo de cómputo compartido Incompatible, desarrollado en una DEC PDP-10 del Instituto Tecnológico de Massachussets, el MIT. Este fue el cimiento sobre el cual se afianzó la comunidad hacker, y por extensión, nuestro Movimiento de Software Libre.

En el Justicialismo sabemos que no todos los días debemos tirar un viejo por la ventana, y esto podremos hacerlo realidad efectiva gracias a HACTRN, proyecto que pone a público acceso telemático un sistema ITS emulado, con el cual podremos utilizar para hacer nuestra informática de forma Libre. Podremos además comprender el funcionamiento de ITS como se debe hacer: usándolo.

Para mayor fidelidad, en nuestro sistema GNU con Linux podemos emplear un emulador de terminal gráfica Knight TV11, videoterminal diseñada en la Universidad de Stanford por Tom Knight. Consistía en un monitor de tubo de rayos catódicos excitado por direccionamiento de mapeo de bits, provisto de teclado. Su memoria intermedia - controlada por una minicomputadora PDP-11, se conectaba a la PDP-10 merced de una interfaz especial que permitía incluso adosarle una impresora electrostática.

Para instalar en Ubuntu dicho emulador hemos de abrir una terminal mediante Ctrl+Alt+T, e ingresar los siguientes comandos de organización:

cd /tmp;
wget https://hactrn.org/tvcon/tvcon-linux.gz ;
gzip -d tvcon-linux.gz
chmod +x tvcon
sudo mv /tmp/tvcon-linux /usr/local/bin/tvcon

Una vez completada esta instalación ya podremos enlazar a la máquina ITS "HACTRN" con:

tvcon -2BCS  -c00000,affae2 bitzone.sdf.org

(Nota: los números en hexadecimial de la variable -c en este caso denotan el color de fondo y frontal, calculados en este caso para representar la estética televisiva de la Knight TV11).

...o bien por telnet, con

telnet bitzone.sdf.org 10003

Al establecer contacto, deberíamos recibir una imagen del bienvenida del sistema ITS del MIT emulado:


 

...o - desde telnet - el siguiente mensaje:

Connected to hactrn.org.
Escape character is '^]'.


Connected to the KA-10 simulator MTY device, line 1

Una vez presentados este "lobby" electrónico que nos invita a activar un terminal, debemos activarla presionando la tecla F1 (o Ctrl+z si usamos Telnet) y finalmente se refrescará la pantalla de login:

HX ITS.1651. DDT.1548.
TTY 1
You're all alone, Fair share = 98%
Welcome to ITS!

For brief information, type ?
For a list of colon commands, type :? and press Enter.
For the full info system, type :INFO and Enter.

Happy hacking!

Debido a las muy laxas medidas de seguridad originales de los laboratorios del Instituto Tecnológico de Massachussetts - fundamento de la cultura hacker - podremos darnos de alta en el ITS clásico sin suplir luser (forma risueña de "usuario de laboratorio"), ni contraseña.

Para adentrarnos al sistema ingresamos:

:login luser

Ingresar comandos en DDT

En pantalla deberíamos ver el prompt * que denota a DDT - el intérprete de comandos original y depurador de nivel superior en ITS. Asimismo, en la parte inferior de la pantalla, aparecerá una línea de status ("wholine") que indica el nombre de luser, nombre de trabajo de cómputo activo, fecha y hora, status de sistema (ejecución, paginado, etc), el porcentaje de compartimentado justo, y otra información interesante de ITS.

Cada comando suele empezar con :, y para ejecutarlo debemos presionar la tecla Intro.

Muchas veces podremos interrumpir un programa en pleno funcionamiento mediante la combinación de teclas Ctrl+z. En otros casos los programas finalizan su ejecución por si mismos, por lo que DDT presentará el indicador :kill, lo que denota que el programa mismo se autoeliminó y liberó la memoria que consumía.

El programa de ayuda más simple que podremos ejecutar es  el comando :help indicará una introducción básica del intérprete DDT. 


El comando :luser nos indicará advertencias al usuario novato en línea. En tanto. El comando :? lista los comandos mas usuales de ITS (podremos paginarlos con la Barra Espaciadora). El comando :info presentará ayuda en pantalla.

Por supuesto, para cerrar la sesión de usuario, debemos usar el comando :logout, que cierra la sesión e interrumpe todos los trabajos que hubiésemos estado haciendo en ITS

Pues bien señores, ciertos programas requieren utilizar un nombre de luser, y tal vez incluso contar con un directorio de almacenamiento (“home”). 

Si deseamos crear tal directorio de almacenamiento debemos elegir un nombre de luser, y presionamos Ctrl+r e ingresamos el comando 

luser; ..new. (uder)

(siendo luser el nombre de usuario deseado). Si bien DDT te informará “no such file”, aún así creará el directorio. Este directorio LUSER simplemente será asignado al luser que ingrese al sistema.

Hemos de notar que contar con un directorio home implica en la práctica poder usar la mayoría de las aplicaciones de ITS, pero para afiliarnos como luser “oficial” del sistema del MIT debemos responder las preguntas del programa INQUIR. Para ello, ingresamos el comando:

:inquir

...y completamos los campos que irán apareciendo uno a uno en forma de preguntas en inglés. Para ello mecanografiamos las respuestas y presionamos la tecla Intro o Ctrl+c según se indique. Al terminar, almacenamos los resultados con el comando DONE.

Al loguearnos, DDT recavará la base de datos INQUIR por el nombre de tu directorio home. Al usar este programa, si directorio home podría ser distinto al de tu nombre de usuario (si así lo has dispuesto). 

El sistema de archivaje de ITS es relativamente potente, y consiste en directorios y ficheros, con control de versionado.

Los archivos tienen seis letras, y una extensión de tres, junto con un número de versión. Ejemplo: DIRECT;FICHER.EXTEN.1

Podremos :cwd para ver tu directorio home, y :cwd directorio para cambiar a otro directorio.

Se usa el comando :listf o Ctrl+f para listar los ficheros de un directorio. Podrás imprimir en pantalla el contenido de un fichero mediante :print fichero.

Editores

Ahora podremos usar el comando :emacs para editar con Emacs, o bien usar :teco. Los comandos de Emacs son mayormente similares a los de la versión GNU.

Ctrl+x,Ctrl+f fichero Intro Carga fichero
Ctrl+x,Ctrl+s fichero Intro Guarda fichero
Ctrl+x,Ctrl+c sale (pero no mata emacs)
Ctrl+f cursor derecha
Ctrl+b Cursor izquierda
Ctrl+a Comienzo de línea
Ctrl+e Fin de línea
Ctrl+n Línea siguiente
Ctrl+p Línea previa
Ctrl+d Borra caracter a la derecha
Supr Borra caracter a la izquierda
Ctrl+k Borra hasta el final de la línea

Control de Trabajos en ITS

Al igual que otros sistemas contemporáneos como TOPS-20,  ITS era un sistema multiusuario multitarea influyente, señero en el sentido que podía operar distintos planos los trabajos de cómputo en ejecución ("jobs").

:continue Pasa el trabajo a primer plano
:proceed Pasa el trabajo a ejecución en segundo plano
:self Selecciona al intérprete DDT como trabajo actual
:attach Une un trabajo en segundo plano pase al primer plano de la terminal.
:detach Despega el trabajo de la terminal.
:job nombretrabajo Selecciona el nombre del trabajo
:kill Elimina el trabajo activo
:massacre elimina todos los trabajos.
:forget Oculta un trabajo a tu intérprete, sin eliminarlo.
:genjob Cambia el nombre del trabajo actual.
:ujobs luser Selecciona el trabajo de un usuario ajeno para exminarlo
:snarf trabajo Toma posesión de un trabajo ajeno

Con el comando :who podrás ver los lusers conectados al sistema. En cualquier caso, podrás mandar un mensaje a otro usuario con :send luser mensaje, y utiliza Ctrl+c para enviar el mensaje a luser.

Si usas :shout mensaje y lo envías con Ctrl+c, enviarás el mensaje a todos los usuarios conectados. 

El sistema de correo electrónico interno de ITS puede usarse con :mail, o bien :msend para enviar a varios usuarios internos. Se finaliza el mensaje con Ctrl+c. Para leerlos podremos usar :rmail (lector en Emacs).

He aquí una serie de equivalencias de comandos de UNIX a un equivalente para el ITS. En ITS el $ equivale a presionar la tecla tecla Escape.

Comando de UNIX Comando de DDT Comando con :
login: usuario luser$u :login luser
logout $$u :logout
TERM=vt52
:tctyp vt52
TERM=vt100
:crtsty vt100
clear
:clear
ls Ctrl+f :listf
ls directorio directorioCtrl+F :listf directorio
ls / Ctrl-R m.f.d. (fichero) :print m.f.d. (fichero)
ls *.foo Ctrl-R directorio: second foo :print directorio: second foo
more fichero Ctrl-R fichero :print fichero
mkdir directorio Ctrl+R directorio;..new. (udir) :print directorio;..new. (udir)
cd directorio directorio$$CTRL-S :cwd directorio
cp f1 f2 $Ctrl+r f1,f2 :copy f1,f2
rm fichero CTRL+o fichero :delete fichero
ln f1 f2 $Ctrl+o f1,f2 :link f1,f2
mv f1 f2 $$Ctrl+o f1,f2 :rename f1,f2
mv fichero directorio :move fichero,directorio
emacs emacsCtrl+K :emacs
ps $$v :listj
kill pid pid$Ctrl+x :job pid :kill
sudo -u u comando u$Ctrl+s comando
top peekCtrl+h :peek
Ctrl+u Ctrl+d
Ctrl+c Ctrl+g
Ctrl+z Ctrl+z
Ctrl+d Ctrl+c
fg $P :continue
bg Ctrl+p :proceed

Juegos

El ITS cuenta con varios juegos. Con :advent te permitirá jugar la versión clásica de la aventura de texto. :wumpus era un juego para cazar la míticaa criatura Wumpus. :eliza y :doctor eran juegos de psiquiatría. Los juegos de tablero están presentes con :games,ckr (damas), :games;ocm, :chess y :games;chess2 (ajedrez), :go (ajedrez chino go) y el primer FPS multiusuario :games;maze, o :chase, un laberinto para dos jugadores. :cube es un juego de cubo de rubik. También está el juego de la vida de Conway con :games;mlife. El clásico trek puede jugarse con :games;trek, mientras que el viejo juego de adivinar números con :games;guess.

También puedes jugar la aventura de texto Zork, pero requiere tener un archivo en tu directorio para trabajar, de modo que debes ingresar:

:login luser
:print luser; ..new. (udir)
:create luser; _msgs_ luser

Presiona Ctrl+c e ingresa:

:zork

Finalmente, podrás observar el mítico PDP Spacewar (se sale presionando varias veces con Ctrl+q o Ctrl+c):

Subsistemas

ITS es una plataforma de programación y virtualización que cuenta con gran cantidad de intérpretes y subsistemas. Podremos compilar C con :cc, usar Macsyma 1001 con :macsyma, contamos con :forth para dicho lenguaje, el intérprete de Macro Z80 con :macn80 y DEC Macro-10 con :macro-10, LISP con :lisp y :lisp11, Scheme con :scheme y LOGO con :llogo y :logas. :fail nos permite usar el ensamblador del SAIL, mientras que :cross permite usar un compilador cruzado para distintas microcomputadoras, pero existen muchos más.

A su vez, contaremos con una shell tipo Unix con :shell (lo abandonamos con q).

En tanto, podremos usar :finger, :telnet, :ftpu, :kermit, :xmodem, para tareas respectivas con dichas aplicaciones de transmisión de datos.

Naturalmente, podremos encontrar información en la Wiki de ITS.

jueves, 12 de octubre de 2023

¿Cómo juego PixelWheels en Ubuntu?

El 9 de marzo de 1952, durante la inauguración del Autódromo "17 de Octubre", Juan Perón enseña cómo instalar y jugar PixelWheels en Ubuntu.

¡Trabajadores!

Son ciento veinte mil personas las que colman las gradas de este colosal autódromo. Las competencias internacionales que se desarrollan en Argentina y las grandes actuaciones que llevaban a cabo nuestros pilotos, hacían indispensable la construcción de un circuito que contara con la jerarquía que se merecía el automovilismo de la Patria.

Es así que este nuevo Autódromo "17 de Octubre" cuenta ya con 10 trazados distintos y la mayor infraestructura de seguridad que puede concebirse. El deporte motor nos convoca hoy ante tres pruebas, de entre la que destacarán la Fórmula Libre "Copa Perón", a 30 vueltas. Tengo aquí a Juan Manuel Fangio para muñequear una Ferrari 166FL. mientras que Froilán González lo hará con una Ferrari 166C. Y damos la bienvenida al carioca Francisco Landi con su Ferrari 125C.

Mi profesión es la de Conductor, para eso me he formado toda la vida (porque como político, soy un aficionado). Pero estos muchachos tienen mucha maña para tirar cambios porque se entrenan con Pixel Wheels. Se trata de un juego de carreras multijugador escrito por Aurélien Gâteau para la máquina virtual Java, y por tanto compatible con un sistema GNU con Linux provisto de tal aditamento.

La distribución de juego puede pagarse opcionalmente en su plataforma de descarga, pero por amabilidad de su autor, podremos hacernos con el juego de manera gratuita. Para ello nos dirigimos a la página de descargas de Pixelwheels y presionamos el botón rojo rectangular que aparecerá en nuestro navegador, en particular el que dice "Download". 

Acto seguido podremos escoger un precio sugerido a pagar a la plataforma de descargas. Como nada de eso le llega al buenazo de Aurélien y al único signo $ al que debemos prestar atención es al del prompt del intérprete de comandos de GNU, podremos hacer click en el mensaje "No tanks, just take me to the downloads" ("No, gracias. Sólo llevame a las descargas").
El sistema nos llevará así a la página con los ficheros correspondientes a múltiples plataformas de cómputo. Pixel Wheels está escrito puede funcionar en GNU con Linux, y para ello debemos descargar el fichero pixelwheels-linux-stable.zip - haciendo click en el botón Download que lo indica. Tras unos segundos nos haremos con la última versión del mismo, que normalmente irá a parar a nuestra carpeta ~/Descargas/.

Una vez descargado los aproximadamente 80 megabytes del juego, podemos instalarlo. Recurriremos a la terminal para tal menester, abriendo una con Ctrl+Alt+T e ingresando los siguientes Comandos de Organización:

cd ~/Descargas/
unzip pixelwheels-linux-stable.zip
cd pixelwheels-0.25.1-linux64/
./install.sh

Normalmente el juego instalará un vínculo en /home/$USER/.local/ y se agregará a los juegos instalados de forma automática. Por tal motivo, podemos ejecutarlo desde Aplicaciones / Juegos / Pixel Wheels.

Al arrancar el juego se nos presentará un sencillo menú en castellano, donde podremos optar por jugar de a uno, o entre varios (hasta 4 jugadores). Asimismo, el modo de juego puede definirse entre carrera rápida, o modo campeonato, donde debemos disputar la serie de carreras.

Al preparar la carrera podremos elegir uno de los circuitos. Tres de ellos estarán disponibles al inicio, y los otros habremos de desbloquearlos.



Para correr necesitamos elegir un coche. A diferencia de las Ferraris de los muchachos, hay varios activados, desde un pistero, un patrullero, un rastrojero, etcétera. Cada uno de ellos tiene distintas características de pique, aceleración, agarre al piso, inercia, velocidad, etcétera. El resto podremos desbloquearlos conforme vayamos ganando carreras.

La carrera rápida es frenética y a tres vueltas: no bien el semáforo de la orden de largada, debemos ponerlo al taco. En mi rastrojero, cuando mando rebajes para curvar, el motor brama aullando "¡pe-róoon, pe-róooon!".

Podemos jugar de a dos en un teclado (e incluso de a cuatro, si sumamos dos gamepads o joysticks USB a la computadora). 

El jugador 1 maneja con las flechas del cursor: dobla con las flechas de cursor izquierda/derecha, y acelera y frena con las flecha cursor arriba/abajo, a la vez que activa las opciones con la barra espaciadora y retrocede con la tecla Escape.

El jugador 2 usa las teclas dxcv: o sea que acelera con la tecla d y frena con la tecla c, mientras que gira a la izquierda con x y a la derecha con v. A la vez activa las opciones con la tecla Ctrl izquierda y retrocede con tecla q.

En este aspecto multijugador es donde el Pixel Wheels se torna mucho más competitivo y divertido, ya que funciona perfectamente incluso en las Netbooks con Huayra del Conectar Igualdad/Juana Manso.

Como su nombre lo indica, la estética de PixelWheels replica los clásicos juegos de 8 bits, y si bien no se caracteriza por su imaginería absolutamente pixelada, lo cierto es que no reinventa la rueda. Tiene un cierto parecido al libre Dust Racing 2, aunque también podremos recoger power-ups y encontrar "turbos" tirados en la pista, al estilo de SuperTuxKart. Al tomarlos podremos usar armas de energía y cohetazos para desbancar a nuestros oponentes.

Como novedad contamos ahora con una pista de sonido de música electrónica, que podemos regular en volumen o desactivar.

En fin, un excelente juego para hacerse un as del volante por $0.

miércoles, 11 de octubre de 2023

¿Cómo instalo yt-dlp-gui en Ubuntu?

¡Compañeros!

El cómputo sigue mas o menos las mismas premisas que la Política. Si en esta no debemos perder los principios, en nuestro sistema GNU con Linux no debemos perder el backend; el front-end responde a las necesidades tácticas. Es decir, los principios han de ser inconmovibles, en tanto que el método con el cual llegamos a la acción puede variar fluidamente de acuerdo a una percepción lúcida de la situación imperante.

Esto, que lo hemos reconocido y con lo cual operamos, también cuenta con un raciocinio que puede portarse a los sistemas similares a UNIX. Es que muchas de las herramientas más útiles cuentan con una sencillez espartana, pero donde la complejidad de la tarea lo requiera, contaremos con herramientas mucho más complejas, y ello las hará difíciles de dominar.

yt-dlp es una de ellas. Sin duda este programa para terminal es excelso para bajar videos de YouTube desde la terminal (así como otros sitios de contenidos agregados). Y si bien su uso  es simple, una vez que demandamos extracciones de streams de audio por separado, diferentes codificaciones y demás, deja de ser moco de pavo.

Afortunadamente, podremos contar con un front-end gráfico que puede atemperar el problema al neófito. Tal es la tarea de yt-dlp-gui, una interfaz gráfica de usuario escrita en Python 3.9 que opera junto al yt-dlp y permite facilitar las operaciones de descargas de video.

Abrimos una terminal con Ctrl+Alt+t e ingresamos el siguiente bloque de comandos de organización para instalar todo lo necesario:

sudo apt update ;
sudo apt install ffmpeg -y
sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp ;
sudo chmod a+rx /usr/local/bin/yt-dlp ;

sudo yt-dlp --update
cd ~ ;
git clone https://github.com/dsymbol/yt-dlp-gui ;
cd yt-dlp-gui ;
pip install -r requirements.txt ;
cd app ;
pyinstaller --name=yt-dlp-gui --clean -y app.py
cd ~/yt-dlp-gui/app/dist/
cp -r yt-dlp-gui/ ~/.local/bin/

Una vez instalada la interfaz, por comodidad deberíamos crear un lanzador. Para ello vamos a Sistema / Preferencias / Aspecto y comportamiento / Menú principal. En la ventana Menú Principal, podremos seleccionar la categoría de menú Aplicaciones / Internet, y a continuación presionar el botón "+Nuevo ítem". Este abrirá el cuadro de diálogo Crear Lanzador. En el campo Nombre de dicho cuadro asignar le al lanzador "yt-dlp-gui", mientras que en el campo Comando o Órden debemos asignar la ruta /home/usuario/.local/bin/yt-dlp-gui/yt-dlp-gui.

Ahora podremos lanzar yt-dlp-gui desde Aplicaciones / Internet / yt-dlp-gui, con lo cual se abrirá su ventana.

El uso del programa es bastante sencillo. Debemos pegar el link (URL) del video que queremos descargar en el campo Link. Asimismo, en el campo Path debemos indicar la carpeta donde irán a parar los ficheros descargados (por ejemplo, /home/usuario). 

Opcionalmente, el indicador Format nos desplegará un menú que nos permite escoger un formato preferido de descarga. La opción por defecto best elige el mejor, mp4 utiliza tal formato de video. Para audio y extracción de audio de un video contempla el formato mp3 (compresión con pérdida), wav (sin compresión), o flac (compresión sin pérdida).

En el campo filename podremos escoger un nombre de archivo a descargar (por ejemplo, video.mp4), o bien por defecto se indicaría una estructura de renombrado "%(title)s.(ext)s", que simplemente asigna el nombre o título de la pista de audio y la extensión escogida.

Una vez que incluimos la URL, ruta y nombre de archivo, podremos agregar el link  a la cola de descarga presionando el botón "+" ("agregar"). Para iniciar la carga de los links ingresados en la lista, presionamos el botón Descargar.

El yt-dlp-gui usará el programa yt-dlp para ir descargando secuencialmente los elementos según su posición están en la cola. Los archivos descargados quedarán en la carpeta que le solicitamos.

Es importante destacar que el módulo de descarga es siempre yt-dlp, y como tal este debe actualizarse manualmente para poder afrontar los desafíos que pudiesen surgir en los distintos agregadores de contenidos. Normalmente la actualización de dicho módulo no es automática, sino que debe realizarse manualmente en la terminal con el siguiente comando:

sudo yt-dlp --update

Una vez que esté instalado el programa, opcionalmente podríamos eliminar el clon local del repositorio con:

rm -r yt-dlp-gui/

domingo, 8 de octubre de 2023

¿Cómo juego al ajedrez online desde la terminal de Ubuntu?

Recordando el "match telegráfico" de Ajedrez entre el Jockey Club de La Plata y el Manhattan Chess Club neoyorquino, Juan Perón explica cómo jugar ajedrez en línea desde la terminal de Ubuntu.

¡Estimados Maestros y Grandes Maestros!

Las características que hacen del Ajedrez el más respetado de los deportes, lo sustancian de las virtudes más universales. 

No solo es un juego de estrategia en el que se enfrentan dos jugadores, cada uno de los cuales tiene 16 piezas de valores diversos que pueden mover, siguiendo ciertas reglas, sobre un tablero dividido en cuadrados blancos y negros. El objetivo de "derrocar al Rey" propone la bondad de agilizar la mente, sino que la lid sobre el tablero bien puede consagrar la amistad entre sus muy temporales oponentes.

Ha sido a través de la historia que el más duradero de los kriegsspiel ha propuesto los mayores desafíos, y - por que no - divertimentos. Como tal, hubiese sido extraño que nuestro país escapase a estas visiones positivas. El Juego Ciencia se había popularizado en estas tierras ya desde la épocas coloniales, y una vez establecida la Nación no puede ignorarse la labor del ciertamente oligárquico Club del Progreso. A este le siguieron una buena cantidad de círculos y clubes ajedrecísticos de distintas proveniencias y montas, con fuerte jugadores. De todos ellos, sin duda el Club Argentino de Ajedrez (1905) y el vanguardista Círculo de Ajedrez de Buenos Aires (1916) contaron con temibles mesas. En 1922, la formalización de la unidad entre veintidós de estos círculos vio nacer a la Federación Argentina de Ajedrez (FADA), cuya labor se vio aureolada en la realización del Campeonato Mundial de Ajedrez de 1927, sede del legendario choque Capablanca-Alekhine.

Sin embargo, distintas acepciones fueron dando lugar un "cisma" federativo local. La solución a tal división no podía venir sino de mano del Justicialismo, lo que confluyó en lo que podríamos describir como una Segunda Era del Ajedrez Argentino, regada con merecidos apoyos y subvenciones gubernamentales. La Cámara de Diputados aprobó un subsidio anual para la Federación Argentina De Ajedrez (FADE) por $ 50.000, en tanto que el Club Argentino de Ajedrez adquirió su sede de Paraguay 1858 merced de un subsidio del Congreso de la Nación. 

Esto permitió elaborar una fuerte serie de torneos locales, culminados por encuentros internacionales auspiciados por la FIDE. El Torneo Internacional de Mar del Plata se constituyó en un gran certamen a equipos, con 18 Grandes Maestros de altísimo calibre. Fue ganado por Najdorf en gran forma, seguido por Ståhlberg, Eliskases, Pilnik, Euwe, Julio Bolbochán. Posteriormente se jugó el fortísimo Sextangular Buenos Aires/La Plata, coronando a Ståhlberg. 

El IV Torneo Memorial Roberto Grau fue algo más fuerte que el del año anterior, dominando Ståhlberg. Rossetto se impuso en el Campeonato Argentino.

Sin duda uno de los logros que permitieron las subvenciones fue maridar al ajedrez con los desarrollos tecnológicos. En este marco es de especial trascendencia el mítico match telegráfico Jockey Club de La Plata-Manhattan Chess Club de 1947 donde el equipo argentino integrado por Ståhlberg, Najdorf, Julio Bolbochán, Pilnik, Maderna, Michel, Rossetto, Guimard, García Baladó y Marcos Luckis dio por tierra con el seleccionado neoyorkino a través de terminales teletipo, en un épico 6½:3½.

Difícilmente este tipo de matchs ajedrecísticos "por télex" podrían haberse extendido como una Realidad Efectiva si no fuese por el alcance de las redes de datos en materia de la lúdica. Un sistema de tipo UNIX, donde un computador hace las veces de tablero, reloj, ujier y árbitro, nos permitió replicar e incluso superar esta propuesta, máxime si consideramos la posibilidad que ofrece el acceso público. Este logro se conoce como FICS, un servidor libre de ajedrez en la red de datos. 

Pues bien señores, hoy todo el mundo puede usar dicho programa desde múltiples avenidas, incluyendo la popular freechess.org, lo que permite jugar contra otros parroquianos electrónicos. Si bien FICS acepta perfectamente clientes gráficos libres (incluyendo al superclásico xboard, pychess o Gnome Chess), no escapa a lo interesante jugar "a la télex", usando una terminal enlazada a un sistema GNU con Linux.

Es que todo sistema GNU que se precie cuenca aún con un cliente capaz de enlazar a redes a través del viejo protocolo Telnet. Este podrá utilizarse para establecer el enlace que nos interesa.

Para ello abrimos una terminal con Ctrl+Alt+t y llamamos al servidor con el cliente de telnet. Podremos hacerlo ingresando el comando:

telnet freechess.org

Al establecer el enlace telemático, con la potencia de los baudios se nos presentará en pantalla el aviso de login al sistema ajedrecístico remoto FICS de freechess.org:

             _       __     __                             __      
            | |     / /__  / /________  ____ ___  ___     / /_____ 
            | | /| / / _ \/ / ___/ __ \/ __ `__ \/ _ \   / __/ __ \
            | |/ |/ /  __/ / /__/ /_/ / / / / / /  __/  / /_/ /_/ /
            |__/|__/\___/_/\___/\____/_/ /_/ /_/\___/   \__/\____/ 
       ^^__                  _____________________                 _  _  _ 
      /  - \_               / ____/  _/ ____/ ___/   _            | || || |
    <|    __<              / /_   / // /    \__ \   (_)           |_______|
    <|    \               / __/ _/ // /___ ___/ /  _              \__ ___ /
    <|     \             /_/   /___/\____//____/  (_)              |___|_|
    <|______\                                                      |_|___|
     _|____|_        ======================================        |___|_|
    (________)         freechess.org  ----  54.39.129.129         (_______)
    /________\       ======================================       /_______\ 
                       (Login screen designed by Alefith)

   ****** Welcome to the Free Internet Chess Server at freechess.org ******

Webpage: http://www.freechess.org
Head admin : mattuc   Complaints to : complaints@freechess.org
Server location: freechess.org   Server version : 1.25.20

      If you are not a registered player, enter guest or a unique ID.
             (If your return key does not work, use cntrl-J)

login:

Naturalmente si ya tuviésemos un usuario registrado podríamos ingresar con el nombre de usuario específico y una contraseña. Sin embargo, al tratarse de un ordenador público podremos perfectametne utilizar un nada pretencioso usuario “invitado”. Para ello debemos logueamos como "g" o "guest". 

Con este recibiremos un alias del tipo Guestxxxx podremos darnos de alta y acercarnos a un tablero para jugar partidas sin obtener puntaje (como quien va a la plaza a jugarle a los jubilados).

Una vez ingresado al servidor por Telnet, veremos el intérprete de comandos del servidor ajedrecístico FICS, indicado con prompt:

fics%

Ahora bien, existen varias maneras de localizar un oponente:

Al entrar a un servidor ajedrecísitico tan concurrido como freechess.org, normalmente deberían ir apareciendo las solicitudes de otros concurrentes invitados, que desea jugar en alguna modalidad de juego. Estas aparecerían según este formato:

GuestQRXX (++++) seeking 15 0 unrated standard ("play 13" to respond)

Esto indica que el jugador GuestQRXX quiere jugar una partida en el tablero 13. Para jugar contra este jugador, en el prompt fics% deberíamos ingresar el comando play 13.

Además: 

  • Podemos ver quién está en línea con el comando who, y usar el comando match con el nombre del jugador en línea que nos interesa.
  • Podremos usar el comando seek para buscar un jugador que ya conocemos.
  • Podremos usar el comando de chat general cshout y gritar en el servidor "Quiero jugar una partida del tipo...".

Nuestro oponente recibirá en pantalla nuestra solicitud y podrá aceptarla o rechazarla. De aceptarla, el servidor determinará al azar el color de piezas de cada contrincante. Cada uno recibirá un tablero inicial en su pantalla, y las Blancas podrán iniciar la partida. 

(Naturalmente, también nos podrían proponer una partida, la cual podremos aceptar o declinar).

Durante la partida a través FICS con Telnet, debemos mover las piezas en el tablero introduciendo varias órdenes o solicitudes. Para ello introducimos comandos en el prompt FICS%.

Cada vez que el oponente mueve, el servidor enviará la nueva posición del tablero a ambos oponentes. 

Los escaques del ajedrez están divididas en filas del tablero, que van de la a a la h (siendo la a el lado de Blancas y la h el lado de Negras), y columnas del tablero, que van de la 1 a la 8 (siendo la 1 el lado de Blancas y la 9 el de Negras). 

En la notación algebraica, cada escaque está definido por sus coordenadas fila-columna. En notación algebraica, cada pieza del ajedrez está representada por una letra propia, según su nombre en inglés:

Símbolo Pieza
k rey
q reina
b alfil
n caballo
r torre
p peón (aunque realmente no se usa la “p”).

Por este motivo, el tablero que representa la jugada se ilustria de esta manera (con símbolos ASCII):

        ---------------------------------
     8  |   | *R|   |   | *R|   | *K|   |
        |---+---+---+---+---+---+---+---|
     7  | *P|   |   | *B| *P| *P| *B| *P|
        |---+---+---+---+---+---+---+---|
     6  |   |   |   |   |   | *N| *P|   |
        |---+---+---+---+---+---+---+---|
     5  | *Q|   |   | *P|   |   | B |   |
        |---+---+---+---+---+---+---+---|
     4  |   |   |   |   |   | P |   |   |
        |---+---+---+---+---+---+---+---|
     3  |   |   | N | B | P |   |   |   |
        |---+---+---+---+---+---+---+---|
     2  | P | P |   |   | Q |   | P | P |
        |---+---+---+---+---+---+---+---|
     1  |   |   | R |   |   | R | K |   |
        ---------------------------------
          a   b   c   d   e   f   g   h

Según este ejemplo, las Blancas se disponen en la parte inferior del tablero, mientras que las Negras lo hacen en la parte superior. Los símbolos de las piezas aparecen en mayúsculas, mientras que el símbolo * denota que es una de las piezas Negras. El Rey de las Negras (*K) está en el escaque g8; el rey de las Blancas (K) está en el escaque g1, etcétera. Juegan las Negras.

Movidas

Podemos usar varias notaciones para mover las piezas. 

Aquellos jugadores que deseen emplear la Notación algebraica, pueden definir en su comando las piezas a mover y los escaques. Supongamos que las Negras desean mover su caballo (*N) del escaque f6 al escaque e4. La movida algebraica a ingresar sería Ne4 (o directamente ne4, pues el servidor de ajedrez es insensible a mayúsculas). Como normalmente siempre avanzan sobre una columna, para mover peones el intérprete es sensato, por lo cual no suele ser necesario consignar p para denotar al peón; basta con indicarle el escaque al cual queremos moverlo. Suponiendo que las Negras deciden mover el peón (*P) del escaque h7 al escaque h6, el comando sería h6 (aunque opcionalmente se puede especificar al peón, indicando Ph6). Para hacer enroque corto (lado del rey) usamos O-O, mientras que para enroque largo usamos O-O-O

Este método funciona bastante bien si somos ágiles con la notación algebraica inglesa. Es importante al principio elegir jugadas estándar en lugar de rápidas ("blitz"), pues puede llevarnos algunos segundos introducir la jugada y ser ágiles con la notación algebraica.

Sin embargo, debemos tener cuidado con aquellas jugadas que resultan ambiguas en esta notación. Durante el juego podría suceder que hubiesen varios peones, caballos, torres e incluso reinas en capacidad de desplazarse a un mismo escaque de destino. Ante tales casos no alcanzaría con ingresar simplemente Nd4, Rd4 o Qd4 pues se produciría una ambigüedad que el servidor estaría incapacitado de discernir correctamente (no distinguiría cuál de las piezas de dicho tipo es la que debe mover). Ante tal incidencia, debemos consignarle específicamente cuál de es la pieza a mover. Esto se hace de varias maneras:

  • Indicando las coordenadas de fila o columna de la pieza en cuestión (cualquiera que aclare la posición). Por ejemplo, en caso que las Negras tuviesen caballos en los escaques c2 y e2, ambas piezas podrían moverse al escaque d4. Por ello para definir el movimiento del caballo del escaques c2 a d4, conviene indicar Ncd4, donde la c aclara cuál de los caballos debe mover (en este caso, el caballo situado en la fila c). Si fuese el caso que ambos caballos se sitúan en la fila c, entonces se debe indicar la coordenada algebraica completa de la pieza interesada, ya sea N2d4 o bien N6d4.
  • Describir la coordenada algebraica completa para la movida, esto es: indicar el tipo de pieza, el escaque de origen y el escaque de destino; por ejemplo Nb6c4.

Captura de piezas

En notación algebraica, la captura de piezas se denota con un x (se pronuncia en su acepción algebraica como "por").

Supongamos que las Negras desean usar la torre de las Negras (R*) situada en b8 para comer el peón (P) de las Blancas situado en b2; en la notación algebraica inglesa tradicional la movida se escribe como Rxb2. Sin embargo, el servidor podría interpretar esto tanto como:

  1. una movida simple Rb2, y sabría que es una captura,
  2. RxP pero no sabría cuál escaque se quería decir (ya que en esta posición la torre puede capturar únicamente un peón).

Nuevamente podría suceder que en ciertas posiciones de tablero tanto el peón de una fila b y un alfil pudiesen moverse hacia un mismo escaque. En tal caso el intérprete confundiría el significado de la b (ya que puede referirse tanto al peón en la fila b o un alfil de Blancas, B). En tal caso, si ingresamos bc6 se produciría tal ambigüedad y el servidor se ve incapaz de saber cual de las dos piezas realizará la captura (si el peón en fila b o el alfil). Para subsanar esto debemos consignar qué pieza es la que consagrará la captura, indicandolo como pxc6.

Naturalmente de esto se desprende el otro caso que puede dar lugar a movida ambigua: el concierne a cuál pieza deseamos comer. 

Por ejemplo, Rxb4 ¿significa “Torre captura en escaque b4” o “torre captura alfil en la columna 4”? Para evitar tales malentendidos, debemos evitar especificar dicha captura como una movida algebraica simple desde un escaque a otro (por ejemplo, Rb4), y especificarla la movida de manera completa (indicando la pieza a mover, su posición inicial y la pieza situada en la posición de destino final, de esta manera: RxPb4

En cualquier caso, para evitarse problemas con las movidas ambiguas, también es posible utilizar la poco tradicional notación de computadora que os explicaré a continuación.

La manera más simple (aunque tal vez no la más ágil o utilizada) es usar la notación de computadora. Esta es puramente en base al sistema de coordenadas, y consconstan de la siguiente sintaxis:

escaque_de_origen-escaque_de_destino

Por ejemplo, en la posición de tablero indicada, para mover la torre de Negras desde b8 a b2 deberíamos ingresar simplemente b8-b2.

Como se ve, no se usan las letras identificadores de las piezas, simplemente los escaques, y por este motivo las movidas ingresadas en notación de computadora no pueden ser ambiguas, simplemente son más largas de ingresar y no son descriptivas.

Comandos de solicitudes

Durante la partida también será necesario introducir algunos comandos de solicitudes en el prompt FICS, que se utilizan para realizar determinadas solicitudes al oponente. El oponente debería aceptarlas para que ocurran. Estos comandos son:

Comando Función
abort Solicita cancelar el juego
adjourn pide guardar y detener la partida para poder seguirla más adelante
draw Solicita tablas (declarar empate)
flag finaliza la partida porque el oponente se quedó sin tiempo
moves pide al servidor FICS que le envíe la lista de movidas de la partida
pause solicita suspender temporalmente la partida, sin detenerla para continuarla mas adelante
promote configura la pieza a coronar cuando el peón llegue a coronación
refresh Presenta la posición actual del tablero
resign Otorga la victoria al oponente, y finaliza la partida
say Se comunica con el oponente actual (o el último)
switch solicita que su oponeten cambie de piezas (color)
takeback solicita que una o más movidas sea retrocedidas (cancela movidas)
unpause solicita que una partida en pausa continúe
withdraw cancela una solicitud que ha realizado (siempre que no hubiese sido concedida)

Podremos decirle algo al contrincante con el comando say. Naturalmente, también existen muchos más comandos que se pueden aprender a través del comando general de ayuda help.

Una vez dominado el entorno, podremos incluso jugar partidas con más de un contrincante, a la manera de un torneo de exhibición en simultáneas. Para ello deberíamos introducir el comando simuls.

Para cerrar la sesión, ingresa el comando logout

Logging you out.
                                         .::.
                               _()_      _::_
                      _O     _/____\_  _/____\_    _O   
 _  _  _    ^^__     / //\   \      /  \      /   / //\     ^^__    _  _  _ 
| || || |  /  - \_  {     }   \____/    \____/   {     }   /  - \_ | || || |
|_______|<|    __<   \___/    (____)    (____)    \___/  <|    __< |_______| 
|__ ___ |<|    \     (___)     |  |      |  |     (___)  <|    \   \__ ___ /
 |___|_| <|   _ \     |_|      |__|      |__|     _|_|   <|_    \   |___|_|
 |_|(_)| <|__(_)_\   /(_)\    /(_) \    (_)  \   (_)  \  <(_)____\ (_)|___|
 |_(___)  _|(___)_  ((___))  ((___)_)  (___)__) (___)__) (___)__|_(___)_|_| 
(_ _|_|_)(_ _|_|_ )( _|_|_ )(__|_|_ _) _|_|____)_|_|____)_|_|_ ___)|_|_____)
/_(_____)/_(_____)\/(_____)\/(_____)_\(_____)__(_____)__(_____)__(_____)___\
  /_____\  /_____\  /_____\  /_____\  /_____\  /_____\  /_____\  /_____\

                         (Logout screen by Alefith)

Thank you for using the Free Internet Chess server (http://www.freechess.org).

viernes, 29 de septiembre de 2023

¿Cómo mostrar un mensaje de login SSH en Ubuntu?

En el metraje de La Revolución Justicialista los integrantes del Grupo Cine Liberación ceden a la visión de Juan Perón imperante durante fines de la década de 1960. Entre las consideraciones sobre las reformas sociales acaecidas durante su gestión, explicó cómo presentar un banner de login SSH en Ubuntu.

(...)

Yo he hablado de la solución económica que nuestro gobierno dio a la situación imperante de posguerra. Pero es indudable que esta situación económica hizo posible también todas las reformas sociales que sería largas de enumerar. 

Si uno revisa los anales de la legislación argentina - que son mas o menos treinta tomos - casi quince tomos son la legislación Justicialista. En esa legislación Justicialista, el acento está marcado precisamente hacia el Pueblo. Y dentro del Pueblo, a la clase trabajadora. Por primera vez en la historia sindical argentina, se conformó una organización y se dio un status legal y constitucional a esa legislación, que permitió la organización de toda la clase trabajadora argentina. Hasta 1946, el sindicato era una Asociación Ilícita, porque había un fallo de la Suprema Corte que declaraba al sindicato como asociación ilícita. Eso fue posible porque hasta entonces jamás la organización sindical tuvo status constitucional. Recién en la legislación que parte del Justicialismo, se le comienza a dar status legal primero, y en la Constitución de 1949, se le da status constitucional. Es decir, se incorporan los derechos del Trabajador a la Constitución. Esto que aparentemente no tendría gran importancia, tiene una importancia decisiva, porque al establecer en la Constitución que el obrero tiene derecho a organizarse para la defensa de sus intereses profesionales, ya no puede considerarse como una asociación ilícita: es una asociación de bien público.

Yo siempre cito un ejemplo. Habían regiones donde los peones ganaban 12 pesos por mes, que no les alcanzaban ni para los cigarrillos, y andaban harapientos y miserables. El Estatuto del Peón que fue uno de las primeras conquistas nuevas, obligó pagar sueldo de dignidad por lo menos. La primera carta que recibí fue de mi madre, que en la estancia tuvo que pagar a los peones con los sueldos establecidos por nosotros. Y me escribió una carta: "vos parece que te has vuelto loco, si te parece que podemos pagar esos sueldos", y yo lo que le dije fue "vieja, o pagás o cerrá la estancia", y lo tuvo que pagar.

Bueno, todo este proceso que ha vivido el Pueblo Argentino no es necesario citarlo mas; en muchas partes del mundo ya nos citan como ejemplo de Justicia Social. Por otra parte, uno de los primeros que hablamos de la Justicia Social en el mundo fuimos nosotros. Los acuerdos colectivos de trabajo, también fuimos los iniciadores en el mundo. Hace 25 años establecimos nosotros los primeros acuerdos colectivos del trabajo, y las primeras leyes estableciendo la obligatoriedad de realizar esos convenios colectivos de trabajo.

Si estas reformas sociales han sido imperecederas, ha sido porque el que las ha custodiado el Pueblo. Este sabe por instinto lo que tiene que defender, pero no viene mal recordárselo: no debemos descuidarnos ni en el Cementerio, no vaya a ser que le corten la mano por un anillo de ónix negro...

Saben ustedes que ya los antiguos egipcios estaban prevenidos, y no descuidaban colocar una serie de jeroglíficos preanunciando las más abyectas de las maldiciones ante quienes osaran profanar sus tumbas. Nosotros no tenemos pirámides en la herencia, pero indudablemente un servidor de acceso remoto por contraseña debe contar con las mismas prerrogativas. Es sabido que los hackers del primer peronismo se abocaron a ello con ahínco, no soslayando incluso a quienes discaban por medio de terminales teletipo. Esto se llamaba "banner".


Si esto ya se podía hacer con los sistemas de tiempo de cómputo compartido más veteranos, sin duda podremos incorporar un archivo de texto de advertencia o saludo para el servidor de Secure Shell de nuestro sistema operativo GNU con Linux, o cualquier otro que use OpenSSH. De esta forma, cada que que queramos establecer un enlace remoto, recibiremos el mensaje incluido:

Para hacer de esto una realidad efectiva, en primer lugar debemos activar el uso de banner en nuestro servidor. Para ello debemos editar el archivo de configuración del demonio Secure Shell en el servidor SSH. Esto lo haremos abriendo allí una terminal con Ctrl+Alt+t e ingresando el siguiente Comando de Organización:

sudo nano /etc/ssh/sshd_config

Se abrirá el editor GNU Nano con tal fichero. Debemos buscar y decomentamos la cadena #Banner /etc/banner, eliminando el # de modo que nos quede así:

Esto habilitará la presentación del texto contenido en el archivo /etc/banner). Tras guardar los cambios con Ctrl+o y salir del editor con Ctrl+x, podremos editar ya el fichero de texto /etc/banner propiamente dicho. Esto podremos hacerelo con:

sudo nano /etc/banner

Podremos incluir el contenido de texto que se nos ocurra. Idealmente el banner debe contener archivos ASCII, y no extenderse más allá de las 80x24 líneas (tamaño de video-terminal estándar).

       __________________________
      |+++|++++|++++|++++|++|++ /\
     |----+----+----+----+--|++/ _|  NODO PJ: EL BRAZO TECH DEL JUSTICIALISMO
 ____| +++ ++++ ++++ ++++ ++ |/ ++ |
| ----------------------------------           ¡¡ VIVA PERÓN CARAJO !!
| |         ------           |     |
| |        |      |          |     |     Este nodo computacional se encuentra
| |         |     |         /|\ o /|        al servicio del Pueblo, su Masa
| |         |     |       _/ ||\O/||       Trabajadora, y encuadrado en una
| |        |_______|    _/   || o ||       lucha sin cuartel contra la puta
| |            |      /      | \ / |              oligarquía gorila.
| |            |____/      /-|  V  |
| |            |         /   |\   /|     La verdadera computación es aquella
| |           /|      /      ||\O/||     donde la CPU hace lo que el usuario
| |---------/~~~---~\--------|| o ||      quiere y defiende un solo interés:
| |.....__/         \\.......| \ / |                el del usuario.
| |..../           \_\.......|  V  |
| |--     ______/\/..........|\   /|   Queremos un software socialmente justo,
| |/     /.....|.............||\O/||    económicamente libre, y políticamente
| |     /......|.............|| o ||                 soberano.
| |___ /__________...........| \ / |
\_____________   |...........|  Y  |  Y cuando uno de nuestros servidores caiga
              |  +-----------   J  |     ¡¡CAERÁN CINCO DE LOS DE ELLOS!!
              \____________________/

Una vez armado el banner, será necesario reiniciar el servicio SSH para que estos cambios resulten aplicados y  de ahora en más surtan efecto.

sudo systemctl restart sshd

De ahora en más, al conectar al servidor SSH con contraseña, deberíamos recibir el texto del fichero /etc/banner.

MOTD

Si quisiéramos disponer un "mensaje del día" para que se presente al usuario una vez ingresada la contraseña e inciada la sesión, podremos hacerlo a través de indicar un fichero /etc/motd. Normalmente este mensaje se utiliza para advertir alguna particularidad a todos sus usuarios, y como se ha mencionado, se muestra antes de dar inicio al intérprete de comandos de cada usuario remoto.

Para ello editamos el fichero /etc/motd y disponemos en ella un mensaje de texto en cuestión.

En mi caso, puedo recurrir a esta funcionalidad de "mensaje del día" para propalar una enseñanza al azar con fortune y cowsay.

sudo fortune doctrina | cowsay -f gaucho > /etc/motd

En cualquier caso, hay que reiniciar el demonio servidor sshd para que surta efecto:

sudo systemctl restart sshd

De esta manera se presentará una galleta de la fortuna con una gráfica ASCII.

miércoles, 27 de septiembre de 2023

GNU cumple 40 años

Se cumplen hoy 40 años del Proyecto GNU (gnu.org), patrocinado por la Fundación del Software Libre.

El objetivo de este Proyecto - iniciado por Richard Stallman el 27 de septiembre de 1983 - es el desarrollo de un sistema operativo de computadoras formado enteramente por software libre.

Este cometido creativo se inició como reacción un proceso de privatización del software, que había restringido gran cantidad de programas a la legislación de derechos de autor. Esto degeneró en fuertes limitaciones de uso. Ciertos fabricantes de software habían considerado esto de vital importancia para sus intereses comerciales.

Paulatinamente el sistema GNU dio lugar a una miríada de programas que componen un sistema operativo total y completo, entre aquellos llamados “similares a UNIX”. Este se encuentra salvaguardado por licencias públicas que identifican y protegen los derechos de los usuarios a copiar el código fuente del programa, usarlo en la forma que el mismo usuario decida, e incluso eventualmente modificarlo y redistribuir estas copias modificadas para el bien de una comunidad de otros usuarios semejantes. La Fundación del Software Libre entiende esta acción como fundamento para una Sociedad Digital justa.

miércoles, 6 de septiembre de 2023

¿Cómo reemplazo unidades de disco NVMe de un RAID en Ubuntu Server?

Juan Perón expone sobre la necesidad de integrar la lucha a la vez que explica cómo reemplazar las unidades de disco NVMe en Ubuntu Server.

¡Trabajadores!

Las dicotomías del Mundo parecen impulsar al hombre hacia su final destrucción. Se lo ha apremiado artificialmente hacia un híper-consumismo cuyo único sentido es generar una clase de ultra-ricos solventados por una descomunión de ultra-pobres. A su vez, ello ha requerido de la súper-explotación de los recursos ecológicos de nuestro Planeta, y de la ultra-dependencia política de los Pueblos que lo componen.

La acción irresoluta del hombre contra el hombre parece querer consumar una lucha enconada, y se le ha ofrecido como solución la competencia entre esclavos por el afecto de un amo al que siquiera conocen, y de cuyos frutos jamás podrán gozar. Muy pocos guardar alguna duda que el diseño mismo de esta lid es el culpable de estas circunstancias.

Ante estas construcciones artificiosas no podemos mas que valernos de la conciencia natural de los Pueblos, que por instinto han comprendido que todo lo perderán si no asocian a su existir mancomunado una prédica social de integración, en un sentir que - si no es humano - al menos ha de ser justo.

Hemos hallado coto a esta situación en la Justicia Social. En esto no he sido los únicos, pero si hemos sido los primeros en desarrollarla e implementarla en este rincón del Globo.


Es indudable que desde un comienzo nos dimos en tornar realidad efectiva una solución de memoria de masa en base a discos rígidos con acceso al Pueblo. Esto ha sido así porque oligárquicas compañías sin Patria ni Bandera que lo intentaban lo hacían con el único propósito de robar datos y explotar metadatos.

Nuestro mérito en un clúster de datos para el Pueblo nos permite en cambio almacenar para trabajar, y resguardar para luchar. Tal ha sido nuestra previsión, y no nos hemos equivocado.

Cuando surgió la necesidad, contábamos ya con una herramienta, que de afilarse puede constituir un arma. Es que nuestro servidor Ubuntu de acceso popular en las redes de datos no contaba con la posibilidad de instalarle novedosos discos NVMe, sino que daba uso a las sencillas unidades SATA en forma de discos rígidos mecánicos. Pero la expansión que permite un Justicialismo en anhelo de lucha le permite integrar una placa controladora para discos NVMe que permite darle al Pueblo aquello a lo que antes sólo accedía el oligarca. Es posible así munirle hasta cuatro discos de estado sólido NVMe. Con unidades de 240GB cada uno permitían totalizar próximo a un Terabyte, erogando una velocidad cinco veces superior a la de los discos de estado sólido SATA2, y unas  veinticinco veces superior a las de los viejos discos rígidos mecánicos, a la vez que se guardaba la información del daño esperable y lógico al que la someten las operaciones mecánicas. Por demás, su funcionamiento es totalmente silencioso.

La Doctrina que hemos creado permanece irresoluta, pero el avance de la técnica puesta a nuestra disposición nos permite tomar la decisión de reemplazar dichas unidades de referencia por cuatro más veloces y mayores, cada una ya de 2 Terabytes. Para ello recurriremos a desacoplarlas de la controladora, y operarlas individualmente según un modo de redundancia RAID que creamos convenientes para nuestras necesidades. Las viejas unidades de 240 nos servirán perfectamente para nuevas laptops "de combate" que disponían de los zócalos pertinentes pero no de discos.

Si bien el armado de cero de un servidor o un clúster RAID no opone gran resistencias, el planteo de reemplazar las unidades NVMe del conjunto de arranque RAID1 en Ubuntu Server (con datos propios y ajenos) constituye en cambio un desafío mucho mayor, al que debemos encarar como si de discos rígidos en uso se tratara. No es algo que puede hacerse "a tontas y a locas": en efecto, debemos hacer caso al procedimiento de realizar una copia de resguardo, tomar nota del particionado actual las unidades, y luego reemplazarlas físicamente, para sincronizar las unidades nuevas.

En este caso el servidor contaba con Ubuntu Server en cuatro unidades de disco de estado sólido NVMe, conocidas como nvme0n1, nvme1n1, nvme2n1 y nvme3n1, divididas en pares según el estándar raid1 (según este, las particiones de las unidades se duplican pero el uso equivale al del disco de menor capacidad del conjunto).

El par de unidades de 240GB que forman el conjunto raid1 cuentan con particionado para que las mismas operen de unidades de arranque, según la siguiente estructura:

    UEFI 512M
    md0 / boot 1GB
    md1 / LVM <resto del disco>

La idea es replicar esto en las unidades NVMe nuevas.

Antes de comenzar, instalaremos en el servidor los programas de administración de discos (si es que no los tuviésemos a mano ya):

sudo apt install mdadm parted smartctl sfdisk efibootmgr

En primer lugar probamos que todas las unidades NVMe se encuentren realmente montados y en línea como deberían. Para ello introducimos el comando:

cat /proc/mdstat

...ante lo cual el sistema nos devuelve algo como:

Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 nvme0n1p2[3] nvme1n1p2[2]
       x blocks super 1.2 [2/2] [UU]
md1 : active raid1 nvme1n1p3[2] nvme0n1p3[3]
       x blocks super 1.2 [2/2] [UU]
       bitmap: 3/7 pages [12KB], xKB chunk

Esto nos asegura que las unidades de disco se encuentran montadas como conjunto raid1. Debe indicarnos [UU] y no [U_] o algo similar.

Es prudente utilizar por ejemplo el comando  smartctl -ia /dev/nvme0, smartctl -ia /dev/nvme1, etc, con el fin de tomar nota de los números de serie de las unidades. En mi caso particular permite delimitar esto con seguridad cuál unidad NVMe específica es la que se reemplaza (ya que físicamente son todas iguales, y el orden de los conectores en la placa controladora no es correlativo, por alguna decisión de diseño).

Acto seguido, como generamos una copia de respaldo de la partición EFI de 512MB que contiene el sector de arranque, la cual necesitaremos posteriormente (no viene mas resguardarla en un pendrive):

dd if=/dev/nvme0n1p1 bs=4M of=/root/PARTICION_EFI.img

Escogemos ahora algunas de las unidades y la ponemos fuera de línea (una de las ventajas interesantes de las unidades NMEe):

mdadm /dev/md0 --fail /dev/nvme0n1p2 --remove nvme0n1p2
mdadm /dev/md1 --fail /dev/nvme0n1p3 --remove nvme0n1p3


Ahora reemplazamos físicamente una de las unidades NMVe en el servidor. Ya que estamos puede ser una buena idea actualizar el firmware de la unidad nueva (si es que existe un binario disponible en el sitio del fabricante). En este caso las unidades se colocan en uno de los cuatro zócalos de la controladora tras remover un disipador metálico atornillado y ajustar un pin de retención.


Una vez emplazada la nueva unidad NVMe, colocada la placa nuevamente e iniciado el servidor desde la unidad restante, copiaremos la tabla de particiones de dicha unidad restante (que era un RAID duplicado) a la nueva. Y a continuación generaremos nuevos UUIDs (identificadores únicos de unidad) nuevas para todas sus particiones:

sfdisk -d /dev/nvme1n1 | sfdisk /dev/nvme0n1
sgdisk -G /dev/nvme0n1


Hecho esto, podremos volver a agregar estas dispositivos al conjunto del RAID1:

mdadm --manage /dev/md0 --add /dev/nvme0n1p2
mdadm --manage /dev/md1 --add /dev/nvme0n1p3


Tras este procedimiento, el RAID comenzará lógicamente a sincronizar en segundo plano todas las particiones a la unidad "pelada", como un loco (le llevará un tiempo). Podríamos monitorear el status de dicha reconstrucción del RAID introduciendo un comando como:

watch cat /proc/mdstat

Si la reconstrucción RAID se ve sumamente lenta, es probable que se encuentre limitada por software en el servidor a velocidades de unos 200 MB/segundo (11 GB/minuto, algo típico para evitar sobre-exigir de las unidades de disco de estado sólido, y no presentar inconvenientes en el caso de ambientes de acceso en red). Sin embargo, en este caso de mantenimiento vigilado podríamos solicitar que la carga máxima de trabajo de la unidad se eleve muy por encima de tal valor de precaución, lo que podría redundar en una velocidad máxima por ejemplo 1.600MB/segundo (~94 GB/minuto, dependiendo de la velocidad del controlador de discos). Esto podría hacerse con:

echo 1600000 > /proc/sys/dev/raid/speed_limit_max

De esta forma podremos lograr una sincronización completa de 1TB en 11 o 12 minutos, a costa de una mayor generación de calor. Naturalmente podríamos escoger un valor de 800000 como compromiso; en operación normal con Ubuntu, prácticamente no genera calor. En este caso, el disipador provisto redunda en una buena refrigeración momentánea (las unidades NVMe en este regímen generan bastante más calor, y el disipador lo contiene momentáneamente por unos siete y ocho minutos). 

Una vez que la reconstrucción RAID haya concluido, necesitaremos reparar la EFI, comenzando por copiar de nuevo la imagen de partición EFI que respaldamos anteriormente:

dd if=/root/PARTICION_EFI.img bs=4M of=/dev/nvme0n1p1

Asimismo, debemos reparar el arrancador grub:

update-grub
grub-install /dev/nvme0n1


Y finalmente reinstalamos la opción de arranque UEFI. En Ubuntu esto se hace con:

efibootmgr -v | grep ubuntu  # solo muestra una entrada
efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "ubuntu" --loader "\EFI\ubuntu\shimx64.efi"


Una vez concluido esto, deberíamos contar dos entradas "ubuntu" en el efibootmgr, una para cada unidad NVMe. Esto debería ser todo para un simple reemplazo de unidades en el RAID1.

Como comprobación cruzamos los dedos e intentamos reiniciar el servidor, de modo de asegurar que el arranque con UEFI se produce correctamente desde cualquiera de los dos unidades NMVe.

Naturalmente, si necesitáramos reemplazar otras unidades en un conjunto con mayor número de discos deberíamos seguir el mismo procedimiento funcional, utilizando en cambio el designador de unidad nvme1n1

Redimensionado de Disco NVMe

En este caso particular, las nuevas unidades NVMe no sin similares, sino mayores que las anteriores, lo que permiten incrementar el tamaño del conjunto RAID1 hasta 1 terabyte. Para delimitar este cambio habremos de utilizar el programa parted. Primero sacamos de línea la unidad y luego la abrimos con parted:

mdadm /dev/md1 --fail /dev/nvme0n1p3 --remove nvme0n1p3
parted /dev/nvme0n1


Y usamos el comando resizepart del programa parted para cambiar el tamaño de la partición desde los ~240GB anteriores hasta los ~1960GB.

Conforme lo hayamos definido, agregamos el disco nuevamente al conjunto RAID1:

mdadm --manage /dev/md1 --add /dev/nvme0n1p3

Ahora aguardamos que se produzca la resincronización del RAID (podemos usar cat /proc/mdstat para comprobarlo) y luego agrandamos el conjunto RAID con el comando grow hasta su máximo posible:

mdadm --grow /dev/md1 --size=max

Luego, necesitaremos reformular el tamaño del sistema de archivo.

En el caso de que hubiese sido particionado de tipo GPT simplemente deberíamos ejecutar

resize2fs /dev/md1

Sin embargo, en este caso que el esquema RAID cuenta con una estructura de particionado LVM mas avanzado, al cual se adosan las un particionado de formato ext4, por lo cual utilizamos:

pvresize /dev/md1
lvextend -L +1G /dev/vg-md1/lv-root
resize2fs /dev/vg-md1/lv-root

Y ahora ya podremos contar con un servidor con 1TB en dos discos de arranque NVMe Gen2 en el conjunto RAID1 (y en mi caso, otro conjunto RAID con 2 discos mas para otros usos). Naturalmente, estos también deben ser respaldados, todo sea por la protección que merecen los datos del Pueblo. Así podemos buscar la Tikún Olam, como dicen los judíos.

martes, 22 de agosto de 2023

¿Cómo puedo usar un émulo del XEDIT de VM/CMS en Ubuntu?

En la típica visita del Día del Niño a la Casa de Gobierno, Juan Perón regala chocolate caliente y enseña cómo utilizar el editor de texto THE en Ubuntu.

A los niños les gusta ponerse calificativos. Los hay ortodoxos, los hay heterodoxos, los hay combativos, los hay contemplativos, pero todos juegan. Algunos usan DEC y habrá siempre otros que usen equipamiento de potencia IBM. No podemos ser sectarios, ya que a todos podremos instalarles GNU si lo proponemos.

No caben dudas para nadie que el viejo editor XEDIT era uno de los instrumentales en los mainframes del Gigante Azul. Contaba con facilidades para el trabajo interactivo, pero especialmente destacaban las funciones de operación diferida, que permitía contactar a un mainframe remoto a través de videoterminales, y ejecutar allí un trabajo de edición preparado. Esto permitía programar en ellas un fichero de macro con los cambios escritos en un lenguaje específico - REXX era uno de los favoritos - y luego efectuar modificaciones en un santiamén a través de uina mera llamada telefónica de escasos segundos.

Si bien con el advenimiento de las comunicaciones de datos de banda ancha, esta modalidad de trabajo podría parecernos innecesaria, nunca serán inexistentes las ocasiones donde podría anhelarse un herramental de este tipo, considerando que anteriormente sólo podía gozarlo el oligarca. Pudiendo elaborar nuevas y más módicas soluciones, podremos utilizarlas según dicha costumbre de obrar, pues si es para sumar, todo sirve.

Nuestro Movimiento es uno que hace de una necesidad un derecho, y podremos otorgarlo con la misma facilidad y efecto con el que uno da chocolate caliente a un niño.

THE ("El Editor Hessling") es un editor de texto que opera a través de órdenes en la línea de comandos y combinaciones de teclas. Fue concebido en 1991 replicando al XEDIT (1980), Editor intrínseco del viejo sistema tiempo de cómputo compartido de IBM, el VM/CMS. Como este, también representa en gran medida al editor KEDIT (1985) de Mansfield Software, del cual existía versión portada para UNIX System V (no confundir con posterior y extinto KEdit de KDE).

THE fue escrito originalmente para su utilización por individuos encasillados en grandes máquinas de IBM pero que preferían la acción del Justicialismo. Y ya que les resultaba familiar el uso de XEDIT, y se le incorporó un intérprete de órdenes de edición de lenguaje REXX. Para lograr dicha compatibilidad, THE utiliza una implementación libre de tal lenguaje denominada REGINA.

Para instalarlo en Ubuntu abrimos una terminal con Ctrl+Alt+t e ingresamos el siguiente comando de organización:

sudo apt install the

Iniciaremos el editor con;

the archivo.txt

Al arrancar el editor THE, el cursor se encontrará en la línea de comandos, cuyo tradicional prompt ====> se encuentra en la parte inferior de la pantalla.

Podremos utilizar esta línea de comandos para introducir cualquiera de los comandos de THE, y ejecutarlos con la tecla Intro

Estos comandos son en gran parte similares a los de XEDIT/KEDIT. Entre los típicos comandos de operación encontraremos EDIT fichero ("abrir") SAVE ("guardar"), QUIT ("salir del programa") y QQUIT ("salir rápidamente sin preguntar"), así como el comando de ayuda HELP comando.

Para conmutar entre la línea de órdenes y la FILEAREA (la zona de los contenidos de edición) debemos presionar la tecla Inicio, con lo cual el adepto a los editores de inspiración IBM podrá comenzar su producción, mecanografiar en modo reemplazo (podremos activar el modo inserción con la tecla Ins).

THE es un editor altamente configurable. Por ejemplo, podríamos activar el macro que activa la compatibilidad con XEDIT, mediante la orden:

set compat xedit

La pantalla cobrará entonces el formato tradicionalista IBM:

 DIFERENCIAS         Size=10 Line=10 Col=1 Alt=10
XEDIT:
===== VM/CMS
===== .sp ===== VM/CMS opera bajo el concepto de registros, a diferencia de Unix ===== que lo hace sobre ficheros enteros. Por tal motivo se hizo ===== especialmente válido para el manejo de bases de datos secuenciales, ===== así como otro tipos de editores de registros. ===== Contaba con un manejo bastante similar al de MULTICS, dando uso ===== a un intérprete de comandos llamado EXEC, inaugurando el concepto ===== de Máquinas Virtuales, en un sentido similar a los proceso de UNIX ===== o demonios en BSD, y luego incoporando pipelines, emulos de los |...+....1....+....2....+....3....+....4....+....5....+....6....+....7... ===== caños de UNIX.
===== Entre sus grandes suites de aplicaciones se encuentra el clásico
===== editor de registros XEDIT. Pronto se adaptó para utilizar
===== funcionalidades de procesamiento de texto y de correo electrónico
===== con anterioridad al modelo cliente-servidor.
===== * * * End of File * * * ====> X E D I T 1 File

Todo este andamiaje de comandos se aplicaba también a la mera edición del texto. El funcionamiento completo del XEDIT - al menos en sus versiones postreras para z/VM - está documentado en su frondoso manual

Sin embargo, podremos acotar su aprendizaje conociendo que el funcionamiento básico de edición de XEDIT consistía en delimitar bloques de texto (que se marcaban con el comando MARK LINE linea1 linea2), o bien delimitar una seguidilla de caracteres con coordenadas posicionales, como MARK STREAM linea1 columna1 linea2 columna2. Como referencia se usaba la reglita de columnas y el contador de puntero. Una vez delimitado el bloque, se lo podía operar con los comandos COPY posición1 posición2 ("copiar"), MOVE posición1 posición2 ("cortar y pegar"), y eventualmente DELETE ("borrar"). Esta era la forma folklórica de operar en las terminales IBM 3270 y superiores.

Los más pitucos podrán ordenar set compat kedit si tal editor nos es más favorable. Esta nos será útil si reservamos especial aprecio al uso de Bibliotecas de Macros de KEDIT, sus clásicos ficheros .kml.

Ante cualquier eventualidad podremos emprender el retorno al modo de compatibilidad nativo, si usamos set compat the

Naturalmente, podremos poner estos comandos en un fichero de perfil para the, llamado ~/.therc. Como es común en los sistemas similares a UNIX, este fichero se busca y se ejecuta al inicio, permitiéndonos dejar allí una secuencia de comandos que hagan a nuestra configuración de THE favorita.

¡Con todos ellos podremos tanto editar textos como escribir programas, desde COBOL a C!