Try para Inspeccionar Efectos de un Comando antes de Modificar tu Sistema en Vivo
Try para Inspeccionar Efectos de un Comando antes de Modificar tu Sistema en Vivo

Try: Inspecciona Efectos de un Comando antes de Modificar tu Sistema en Vivo

“try” te permite ejecutar un comando e inspeccionar sus efectos antes de cambiar tu sistema en vivo. try utiliza los espacios de nombres de Linux (a través de unshare) y el sistema de archivos de unión overlayfs.

Por favor, ten en cuenta que “try” es un prototipo y no un sandbox completo, y no debe ser usado para ejecutar comandos en los que no confíes ya en tu sistema, (por ejemplo, los dispositivos en /dev están montados en el sandbox, y las llamadas de red están todas permitidas). Por favor, no intentes ningún comando que elimine todo en /dev o escriba ceros en tus discos.

Dependencias

try se basa en las siguientes dependencias

  • util-linux

En los casos en los que overlayfs no funcione en montajes anidados, necesitarás mergerfs o unionfs. try debería ser capaz de autodetectarlos, pero puedes especificar la ruta a mergerfs o unionfs con -U (p.e. try -U ~/.local/bin/unionfs)

https://github.com/trapexit/mergerfs
https://github.com/rpodgorny/unionfs-fuse

Para ejecutar el conjunto de pruebas de try (test/run_tests.sh), necesitarás

  • bash
  • expect

try ha sido probado en las siguientes distribuciones:

  • Ubuntu 20.04 LTS o posterior
  • Debian 12
  • Fedora 38
  • Centos 9 Stream 5.14.0-325.el9
  • Arch 6.1.33-1-lts
  • Alpine 6.1.34-1-lts
  • Rocky 9 5.14.0-284.11.1.el9_2
  • SteamOS 3.4.8 5.13.0-valve36-1-neptune

Instalación

Sólo necesitas el script de prueba, que puedes descargar clonando este repositorio:

$ git clone https://github.com/binpash/try.git

Arch Linux

try está presente en AUR, puedes instalarlo con tu AUR helper preferido:

yay -S try

o manualmente:

git clone https://aur.archlinux.org/try.git
cd try
makepkg -sic

Ejemplo de Uso

try es un comando de orden superior, como xargs, exec, nohup o find. Por ejemplo, para instalar un paquete mediante pip3, puedes invocar try de la siguiente manera:

$ try pip3 install libdash
... # output continued below

Por defecto, try te pedirá que confirmes los cambios realizados al final de su ejecución.

...
Defaulting to user installation because normal site-packages is not writeable
Collecting libdash
  Downloading libdash-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (254 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 254.6/254.6 KB 2.1 MB/s eta 0:00:00
Installing collected packages: libdash
Successfully installed libdash-0.3.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

Changes detected in the following files:

/tmp/tmp.zHCkY9jtIT/upperdir/home/gliargovas/.local/lib/python3.10/site-packages/libdash/ast.py (modified/added)
/tmp/tmp.zHCkY9jtIT/upperdir/home/gliargovas/.local/lib/python3.10/site-packages/libdash/_dash.py (modified/added)
/tmp/tmp.zHCkY9jtIT/upperdir/home/gliargovas/.local/lib/python3.10/site-packages/libdash/__init__.py (modified/added)
/tmp/tmp.zHCkY9jtIT/upperdir/home/gliargovas/.local/lib/python3.10/site-packages/libdash/__pycache__/printer.cpython-310.pyc (modified/added)
/tmp/tmp.zHCkY9jtIT/upperdir/home/gliargovas/.local/lib/python3.10/site-packages/libdash/__pycache__/ast.cpython-310.pyc (modified/added)
<snip>

Commit these changes? [y/N] y

A veces, es posible que desees pre-ejecutar un comando y confirmar su resultado en un momento posterior. Ejecutar try -n imprimirá el directorio superpuesto en STDOUT sin confirmar el resultado.

$ try -n "curl https://sh.rustup.rs | sh"
/tmp/tmp.uCThKq7LBK

Como alternativa, puedes especificar tu propio directorio de superposición existente utilizando la opción -D :

$ mkdir rustup-sandbox
$ try -D rustup-sandbox "curl https://sh.rustup.rs | sh"
$ ls rustup-sandbox
temproot  upperdir  workdir

Como puedes ver en la salida anterior, try ha creado un entorno de superposición en el directorio rustup-sandbox.

Inspeccionando manualmente upperdir se revelan los cambios realizados en los ficheros dentro de la superposición durante la ejecución del comando anterior con try:

~/try/rustup-sandbox/upperdir$ du -hs .
1.2G    .

Puedes inspeccionar los cambios realizados dentro de un directorio de superposición dado usando try:

$ try summary rustup-sandbox/ | head

Changes detected in the following files:

rustup-sandbox//upperdir/home/ubuntu/.profile (modified/added)
rustup-sandbox//upperdir/home/ubuntu/.bashrc (modified/added)
rustup-sandbox//upperdir/home/ubuntu/.rustup/update-hashes/stable-x86_64-unknown-linux-gnu (modified/added)
rustup-sandbox//upperdir/home/ubuntu/.rustup/settings.toml (modified/added)
rustup-sandbox//upperdir/home/ubuntu/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/libstd-8389830094602f5a.so (modified/added)
rustup-sandbox//upperdir/home/ubuntu/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/etc/lldb_commands (modified/added)
rustup-sandbox//upperdir/home/ubuntu/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/etc/gdb_lookup.py (modified/added)

También puedes elegir confirmar el contenido del directorio superpuesto:

$ try commit rustup-sandbox

También puedes ejecutar try explore para abrir tu shell actual en try, o /try explore /tmp/tmp.X6OQb5tJwr para explorar un sandbox existente.

https://github.com/binpash/try

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda