Fecha: 2019-04-30 Tiempo de lectura: 4 minutos Categoría: Miscelánea Tags: grabación / terminal / asciinema
Me defino como una persona de tecnología clásica, pero últimamente me ha dado una aire de modernillo y me he empezado a mirar el tema de los podcasts. Como amante del terminal necesitaba conocer alguna herramienta que me permitiera hacer casts de mi terminal y encontré uno interesante: es asciinema.
No tengo muy claro para qué lo voy a utilizar, ni siquiera si lo utilizaré, pero por el momento voy a dejar estas notas en este artículo para su uso futuro. Si alguien cree que le puede dar un uso interesante, soy todo oídos…
Lo primero es instalar la herramienta. Hay muchas maneras de instalar o usar la herramienta, tal como se indica en su documentación; desde paquetes para tu distribución favorita hasta un contenedor, pasando por una librería python. Voy a utilizar esta última por comodidad:
gerard@atlantis:~$ pip install asciinema
Collecting asciinema
Using cached https://files.pythonhosted.org/packages/a7/71/771c859795e02c71c187546f34f7535487b97425bc1dad1e5f6ad2651357/asciinema-2.0.2.tar.gz
Building wheels for collected packages: asciinema
Running setup.py bdist_wheel for asciinema ... error
Complete output from command /home/gerard/workspace/asciinematest/env/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-l8bnaq6u/asciinema/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmpv_6mhrv_pip-wheel- --python-tag cp35:
/usr/lib/python3.5/distutils/dist.py:261: UserWarning: Unknown distribution option: 'long_description_content_type'
warnings.warn(msg)
usage: -c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: -c --help [cmd1 cmd2 ...]
or: -c --help-commands
or: -c cmd --help
error: invalid command 'bdist_wheel'
----------------------------------------
Failed building wheel for asciinema
Running setup.py clean for asciinema
Failed to build asciinema
Installing collected packages: asciinema
Running setup.py install for asciinema ... done
Successfully installed asciinema-2.0.2
gerard@atlantis:~$
Su uso no es muy complejo, pero en caso de duda, nos ofrece ayuda si se invoca sin parámetros:
gerard@atlantis:~$ asciinema
usage: asciinema [-h] [--version] {rec,play,cat,upload,auth} ...
Record and share your terminal sessions, the right way.
positional arguments:
{rec,play,cat,upload,auth}
rec Record terminal session
play Replay terminal session
cat Print full output of terminal session
upload Upload locally saved terminal session to asciinema.org
auth Manage recordings on asciinema.org account
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
example usage:
Record terminal and upload it to asciinema.org:
asciinema rec
Record terminal to local file:
asciinema rec demo.cast
Record terminal and upload it to asciinema.org, specifying title:
asciinema rec -t "My git tutorial"
Record terminal to local file, limiting idle time to max 2.5 sec:
asciinema rec -i 2.5 demo.cast
Replay terminal recording from local file:
asciinema play demo.cast
Replay terminal recording hosted on asciinema.org:
asciinema play https://asciinema.org/a/difqlgx86ym6emrmd8u62yqu8
Print full output of recorded session:
asciinema cat demo.cast
For help on a specific command run:
asciinema <command> -h
gerard@atlantis:~$
La grabación de un fichero en local es muy simple; parámetros aparte, lo más simple quedaría así:
gerard@atlantis:~$ asciinema rec free_memory.cast
Esto nos abre una sesión de shell que será “grabada”, aunque el fichero resultante es de texto plano y se puede modificar a mano con mucha paciencia. Por poner un ejemplo, voy a hacer un cast de un vaciado de cachés de la memoria del sistema operativo; concretamente, lanzo estos comandos (y comentarios):
# Veamos la memoria ocupada en nuestro sistema:
free -h
# Intentemos vaciar las cachés
echo 3 | sudo tee /proc/sys/vm/drop_caches
# Y veamos el resultado:
free -h
exit
Tras “salir” de esta sesión de terminal, volvemos a la sesión original, previo aviso de que nuestro cast ha quedado grabado en el fichero indicado.
asciinema: recording finished
asciinema: asciicast saved to free_memory.cast
gerard@atlantis:~$
Este es nuestro cast, y podemos reproducirlo, tanto localmente como en remoto si lo subimos a la nube. Como el comando es tan simple, le he añadido al ejemplo doble velocidad, con el flag -s 2.
gerard@atlantis:~$ asciinema play free_memory.cast -s 2
La página en donde se pueden subir los casts es https://asciinema.org/ y podemos registrarnos en ella sin complicación ninguna. Una vez conectada la cuenta web con la herramienta de terminal mediante asciinema auth, podemos subir nuestro cast.
gerard@atlantis:~$ asciinema upload free_memory.cast
View the recording at:
https://asciinema.org/a/3vdnfBAL8simwMtcPx2zkhQbZ
gerard@atlantis:~$
En la página web se pueden editar algunos metadatos, como por ejemplo el título. Una vez hecho esto, la voy a hacer pública, para que todo el mundo pueda ver mi cast, en caso de saber su dirección. Me voy a “share” y puedo encontrar varias formas de compartir mi cast, como por ejemplo la dirección, un enlace, un enlace con imagen, o directamente incrustando un visor directamente; solo falta que distribuya el enlace o que lo añada a mi página para darlo a conocer al mundo.
Si a alguien le interesa el enlace, es https://asciinema.org/a/241168, pero yo considero que la mejor forma de distribuir el cast es con el visor incrustado, que necesita javascript para funcionar, pero se integra muy bien con mi blog.