"Do, or do not. There is no try."
We're setting out to change that: try cmd
and commit---or not.
try
lets you run a command and inspect its effects before changing your live system. try
uses Linux's namespaces (via unshare
) and the overlayfs union filesystem.
Please note that try
is a prototype and not a full sandbox, and should not be used to execute
commands that you don't already trust on your system, (i.e. network calls are all allowed)
try
relies on the following dependencies
util-linux
In cases where overlayfs doesn't work on nested mounts, you will need either
mergerfs or unionfs. try
should be able to autodetect them, but you can specify the path to mergerfs or unionfs with -U (e.g. try -U ~/.local/bin/unionfs
)
To run try
's test suite (test/run_tests.sh
), you will need:
bash
expect
try
has been tested on the following distributions:
Ubuntu 20.04 LTS
or laterDebian 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
Note that try will only work on Linux 5.11 or higher for overlayfs to work in a user namespace.
You only need the try
script, which you can download by cloning this repository:
$ git clone https://github.com/binpash/try.git
try
is present in AUR, you can install it with your preferred AUR helper:
yay -S try
or manually:
git clone https://aur.archlinux.org/try.git
cd try
makepkg -sic
try
is a higher-order command, like xargs
, exec
, nohup
, or find
. For example, to install a package via pip3
, you can invoke try
as follows:
$ try pip3 install libdash
... # output continued below
By default, try
will ask you to commit the changes made at the end of its execution.
...
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 recomm