Find a file
Kron4ek e658f269e1
Add ability to use system squashfuse and bwrap
Instead of the builtin ones.
2021-03-28 17:37:46 +05:00
.gitattributes Init repo 2021-03-26 22:03:50 +05:00
create-arch-bootstrap.sh Add libva-mesa-driver for mesa video acceleration 2021-03-28 01:04:52 -04:00
create-conty.sh Use 256 KB block size by default for squashfs 2021-03-27 15:35:02 +05:00
LICENSE Add LICENSE 2021-03-28 00:35:45 +05:00
README.md Update README.md 2021-03-27 15:53:39 +05:00
squashfs-start.sh Add ability to use system squashfuse and bwrap 2021-03-28 17:37:46 +05:00
utils.tar Init repo 2021-03-26 22:03:50 +05:00

Conty

This is an easy to use non-root container compressed into squashfs and packed into a single executable that runs (or at least should run) on most Linux distros.

You can use it to run any applications, including games (Vulkan and OpenGL).

Besides, due to bubblewrap, Conty also supports true filesystem sandboxing, so you can even use it to sandbox your applications.

In other words, it's a portable Arch Linux distro packed into a single executable that can be used to run any applications. Conty combines benefits of flatpak and AppImage.

It uses two technologies:

Benefits

  • Single executable - download (or create) and run, nothing else it required.
  • Root rights are not required.
  • Compressed into squashfs, so it takes much less disk space than unpacked containers.
  • Contains many libraries and packages so it can run almost everything. And you don't need to install anything on your main (host) system. You can even run 32-bit applications on pure 64-bit systems.
  • Based on Arch Linux, so it contains latest software, including latest videodrivers.
  • Almost completely seamless experience. All applcations that you run with Conty store their configs in your HOME directory as if you wouldn't use container at all.
  • Supports filesystem sandboxing.

Requirements

The only requirements are bash, fuse2 and tar. And your /tmp directory should allow binaries execution (which it does by default on most distros).

Also, your Linux kernel must support unprivileged user namespaces. On some Linux distros this feature is disabled by default and can be enabled with sysfs:

sysctl kernel.unprivileged_userns_clone=1

or

echo 1 > /proc/sys/kernel/unprivileged_userns_clone

Usage

Either download ready-to-use executable from the releases page or create your own (the instructions are below). Make it executable before run.

chmod +x conty.sh
./conty.sh command command_arguments

For example, if you want to run an application from your HOME or from somewhere on your storage run something like:

./conty.sh /full/path/to/a/binary

Conty also contains Steam, Lutris, Wine-Staging and many more.

./conty.sh steam
./conty.sh lutris
./conty.sh wine app.exe

It has a builtin file manager (pcmanfm):

./conty.sh pcmanfm

Want to check if graphics acceleration works? Run glxinfo, glxgears, vulkaninfo and vkcube:

./conty.sh glxinfo | grep direct
./conty.sh glxgears
./conty.sh vulkaninfo
./conty.sh vkcube

You can even use Conty for compilation:

./conty.sh gcc src.c
./conty.sh git clone https://something.git
cd something && ./conty.sh ./configure
./conty.sh make

There are many more integrated programs. You can list all of them with:

./conty.sh ls /usr/bin

Let me know if you want something else to be included in the container.

Sandbox

Conty uses bubblewrap and thus supports filesystem sandboxing. By default it's disabled and all directories on your system are available for the container.

You can enable sandboxing with the SANDBOX environment variable. You can allow access to directories and/or files you want with the BIND variable. And it's also possible to disable network with the DISABLE_NET. For instance:

export DISABLE_NET=1
export SANDBOX=1
export BIND="/home/username/.steam /home/username/.local/share/Steam"
./conty.sh steam

How to create your own Conty executables

If you want to create Arch-based container then use the create-arch-bootstrap.sh script. Root rights are required for this step, because chrooting is used here.

./create-arch-bootstrap.sh

You can edit the script if you want to include different set of packages inside the container.

If you want to use some other distro, then you need to manually obtain it from somewhere.

When distro bootsrap is obtained, use the create-conty.sh script to pack everything into a single executable.

./create-conty.sh

Done!