pacwrap/docs
Xavier 91b5c79c5a Further documentation and overhaul of the help menu CLI
- Shields.io badges added to README.md with clarification on
  functionality present in pacwrap.
- Stipulate the requirement for libalpm 14 or greater in README.md
- Module documentation written in markdown located in /docs/ for
  filesystems and permissions modules
- Help CLI refactored with format improvements and fixes.
- Lock assert calls for container composition, creation, and remote sync
- Added value opperand for process module in main frontend module
2024-03-30 21:47:20 -04:00
..
dbus Further documentation and overhaul of the help menu CLI 2024-03-30 21:47:20 -04:00
filesystems Further documentation and overhaul of the help menu CLI 2024-03-30 21:47:20 -04:00
modules Further documentation and overhaul of the help menu CLI 2024-03-30 21:47:20 -04:00
config.md Documentation, tidy up, and some errata fixed 2024-02-12 00:27:36 -05:00
manual.md Updated to correspond with changes made with commit 2a48da2773 2024-02-18 03:36:25 -05:00
README.md Updated docs/README.md 2024-02-12 23:28:01 -05:00

Getting started

Be sure to read the manuals here and here.

Creating containers

To create a base container, execute the following command:

$ pacwrap -Syucbt base

Then to create a container segment named common with a common set of packages, and an aggregate container named steam built up of these two containers, execute the following command sequence:

$ pacwrap -Syucst common --dep=base mesa gtk3 nvidia-utils -cat steam steam --dep=base,common

And finally, to launch steam inside of a fresh, aggregated container:

$ pacwrap run steam steam

You might've noticed that last step didn't work. That's because each container is locked down with a tight permission set by default.

Container configuration

Then you might be wondering: How do I use this with anything?

To explain that, first a little bit of background: Pacwrap implements a DSL (Domain Specific Language) with YAML. Containers are configured with this DSL to permiss access to filesystems, devices, UNIX sockets, networking, etc..

For example, here's a sample configuration of a container environment used for playing Steam games:

container_type: Aggregate
dependencies:
- base
- common
explicit_packages:
- steam
meta_version: 1706515223
enable_userns: true
retain_session: false
seccomp: true
allow_forking: true
filesystems:
- mount: root
- mount: home
- mount: sysfs
- mount: to_root
  volumes:
  - path: /usr/share/icons
  - path: /usr/share/fonts
  - path: /etc/fonts
  - permission: rw
    path: /media/Storage/Games/Steam
    dest: /mnt/SteamLibrary
- mount: to_home
  volumes:
  - path: .config/fontconfig/
permissions:
- module: net
- module: gpu
- module: display
- module: pulseaudio
- module: dev
  devices:
  - input
- module: env
  variables:
  - var: LANG
  - var: QT_X11_NO_MITSHM
    set: '1'
dbus:
- module: appindicator

Configuration Modules

Each base and aggregate type container can make use of filesystems, permissions, and dbus modules. These provide a good, ergonomic way to abstract these problems, whilst minimising complexity, providing a flexible human-readable configuration language.

You then might wonder: What are the individual modules, and what do each of them do? Here's a small breakdown of what some of them do below:

Networking module

- module: net

net permission module instructs bubblewrap to provide host networking to the container.

Display module

- module: display

display permission module detects, validates, and provides an X11 or Wayland (if available) display socket to the container.

GPU module

- module: gpu

gpu permission module binds your system's graphics devices to the container.

Home bind module

- mount: to_home
  volumes:
  - permission: rw
    path: Documents
  - permission: ro
    path: .config/fontconfig

to_home mount module provides an easy way to mount files or directories from your home folder into the container's home directory. In this example, we mount our Documents folder with read/write permissions, and our .config/fontconfig directory with read-only permissions.

Locations

  • Configuration files: ~/.config/pacwrap/
  • Container data stores: ~/.local/share/pacwrap/
  • Package caches: ~/.cache/pacwrap/pkg/

Further documentation

Documentation on each module, breaking down the individual options, can be found here.