1
0
forked from brl/citadel
citadel/citadel-tools/citadel-realms
2018-03-19 15:29:57 -04:00
..
src Fixed /skel problem creating files/dirs as root 2018-03-19 15:29:57 -04:00
Cargo.lock introducing, citadel realms 2018-03-18 19:21:20 -04:00
Cargo.toml introducing, citadel realms 2018-03-18 19:21:20 -04:00
README.md new home for this README is the /docs directory 2018-03-19 08:07:00 -04:00

Citadel Realms

In Citadel applications are installed into and run from spaces called Realms. Realms are implemented internally as systemd-nspawn containers but you don't need to know this because the realms command-line tool manages creating and launching containers for you.

Application Images

The root filesystem for realms are called Application Images, but we usually just call them appimgs. We have created a framework for constructing these images from Debian based distributions which we use to build the default appimg that we provide, but we also encourage users to experiment with building their own images.

Tree Application Images

Tree images are the only type of application image which is currently implemented for realms.

The rootfs is a tree of files on the filesystem, and also it is a btrfs subvolume.

Block Application Images

default realm

One realm is always selected to be the default realm. The default realm starts automatically when the system boots. The realms utility can be used to change which realm is the default realm. Switching the default realm changes the symlink /realm/default.realm to point to a different realm instance directory.

citadel:~# realms default
Default Realm: main

citadel:~# realms default project
[+] default realm changed from 'main' to 'project'

citadel:~# realms default
Default Realm: project

current realm

If any realms are running, then one realm is always the current realm. The current realm is a realm that is being monitored by the citadel-desktopd daemon. This daemon is responsible for safely copying application .desktop files from the running realm instance to a temporary directory where they will be read by the GNOME desktop to to display a menu of applications that can be launched.

Changing the current realm, changes the set of applications which are visible to gnome-shell to only the applications installed in this realm. Also, any applications started by gnome-shell will run in the current realm.

citadel:~# realms 
Current Realm: main

Realms base directory layout

The realms base directory is stored on the storage partition at /storage/realms and is bind mounted to /realms on the root filesystem for convenience.

/realms
    config
    /Shared
    /skel
    /default.realm -> realm-main
    /realm-main
    /realm-project
    /realm-testing

/realms/config file

This file is a template of the configuration file for individual realms. When a new realm is created this file in copied into the new realm instance directory. By modifying this file, the default configuration for new realm instances can be changed.

/realms/Shared directory

This directory is bind mounted to /home/user/Shared of each running realm that has the option use-shared-dir enabled. It's a convenient way to move files between different realms and between citadel and realms.

/realms/skel directory

Files which are added to this directory will be copied into the home directory of any newly created realm. The directory is copied as a tree of files and may contain subdirectories.

/realms/default.realm

A symlink which points to a realm instance directory of the default realm. The default realm is the realm which starts when the system is booted.

/realms/realm-$name

This is a realm instance directory, for a realm with $name as the realm name.

/realm-main
    config
    /home
    /rootfs
  • config : configuration file copied from /realms/config
  • /home : directory mounted to /home/user in the realm, populated from /realms/skel
  • /rootfs : btrfs subvolume clone (snapshot) of an application image.

Realm instance directory layout

/realm-main
    config
    /home
    /rootfs