Home

Files on disk.

AppFS is a universal packaging format that is presented to the system as a filesystem (via FUSE). Packages manifests as well as individual package files are lazily-fetched (Just-In-Time) and cached to disk so the "installation" step is transparent. Regular unprivileged users can read (and write!) to any file in any package, thus allowing completely unprivileged "installation" of packages and allowing users to update configuration files for the package.

All remote files in AppFS are identified by the SHA1 of their contents so multiple users accessing the same file (content-wise) will share the same locally cached copy.

It is similar to the the original 0install implementation, LazyFS. It supports many features required for large scale deployments. It has the following fancy features:

  • Write support: Writes are redirected to the users HOME directory
  • Set-UID root support: Administrators may set conditions on which files are Set-UID root (by default, no files are)
  • Run-time configuration reloading: All configuration may be reloaded at run-time
  • PKI support: Package providers can optionally sign index files, which in turn signs all packages and all files in packages (unsigned indexes are untrusted by default)

It should be mounted in /opt/appfs. Once mounted, sub-directories will be automatically made available by attempting to access the hostname of an AppFS server. For example, /opt/appfs/core.appfs.rkeene.org contains:

$ ls -l /opt/appfs/core.appfs.rkeene.org/
total 0
dr-xr-xr-x 4 root root 0 Nov 19 04:02 acl/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 appfs/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 applications/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 attr/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 bash/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 binutils/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 bzip2/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 coreutils/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 glibc/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 gmp/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 libcap/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 linux-headers/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 mpc/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 mpfr/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 ncurses/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 readline/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 tcl/
dr-xr-xr-x 4 root root 0 Nov 19 04:02 zlib/
$

Demo

<script type="text/javascript" src="https://asciinema.org/a/20465.js" id="asciicast-20465" async></script>

Browser

Download

Documentation