Command-line interface¶
The command-line interface is used for user and manifest management. It’s in a very early stage, so things might change quickly.
The entry point is wildland-cli
, with wl
shortcut for provided for
convenience.
Quick start¶
Create a user:
$ wl user create User
Generated key: 0x5a7a224844d80b086445
No path specified, using: /users/User
Created: /home/user/.config/wildland/users/User.yaml
Using 0x5a7a224844d80b086445 as default user
Adding 0x5a7a224844d80b086445 to local owners
List users:
$ wl user list
/home/user/.config/wildland/users/User.yaml
owner: 0x5a7a224844d80b086445
path: /users/User
Create a container and storage manifests. You need to first create a container, and then attach storage to it:
$ wl container create Container --path /C1
Created: /home/user/.config/wildland/containers/Container.yaml
$ wl storage create local --location /tmp/storage --container Container
Using container: /home/user/.config/wildland/containers/Container.yaml (/.uuid/589e53d9-54ae-4036-95d7-4af261e7746f)
Adding storage ed7594e7-5316-4fd3-b437-bd393b684fb4 directly to the container
Saving: /home/user/.config/wildland/containers/Container.yaml
Mount it all:
$ wl start
Mounting: /home/user/wildland
$ wl container mount Container
Mounting: /home/user/.config/wildland/containers/Container.yaml
$ ls -a ~/wildland
. .. .control .users .uuid C1
Global options¶
--base-dir PATH
: base config directory (default is~/.config/wildland
)
Configuration file¶
The file ~/.config/wildland/config.yaml
specifies all the defaults. Here are the
supported fields.
Note that the @default
and @default-owner
keys have to be quoted in
YAML.
user-dir
(absolute path (must begin with a single ‘/’)): path to user manifests (default: $HOME/.config/wildland/users)storage-dir
(absolute path (must begin with a single ‘/’)): path to storage manifests (default: $HOME/.config/wildland/storage)cache-dir
(absolute path (must begin with a single ‘/’)): path to cache storage manifests (default: $HOME/.config/wildland/cache)container-dir
(absolute path (must begin with a single ‘/’)): path to container manifests (default: $HOME/.config/wildland/users)bridge-dir
(absolute path (must begin with a single ‘/’)): path to bridge manifests (default: $HOME/.config/wildland/bridges)key-dir
(absolute path (must begin with a single ‘/’)): path to private key directory (default: $HOME/.config/wildland/keys)mount-dir
(absolute path (must begin with a single ‘/’)): FUSE mount path (default: $HOME/wildland)template-dir
(absolute path (must begin with a single ‘/’)): path to templates directory (default: $HOME/.config/wildland/templates)fs-socket-path
(absolute path (must begin with a single ‘/’)): Path to FUSE control socket (default: $XDG_RUNTIME_DIR/wlfuse.sock)sync-socket-path
(absolute path (must begin with a single ‘/’)): Path to sync daemon control socket (default: $XDG_RUNTIME_DIR/wlsync.sock)alt-bridge-separator
(boolean): Use alternative bridge path separator in FUSE, instead of a colondummy
(boolean): use ‘dummy’ keys and signatures instead of Sodium@default
(key fingerprint (must begin with 0x)): default user for mounted containers@default-owner
(key fingerprint (must begin with 0x)): default user for newly created containersaliases
: A dictionary of custom aliases (other than @default and @default-owner)local-hostname
(string): hostname recognized for file:// URLs on this machine (default: localhost)local-owners
(array): list of owners for which file:// URLs are recognized on this machinedefault-containers
(array): list of container names/paths to mount at startup (‘wl start’); in the same syntax as ‘wl c mount’default-cache-template
(string): Default template for container cache storagesdefault-remote-for-container
(object): A dictionary of default remote storage for each container
Keys and signatures¶
Public key cryptography is handled by libsodium.
After generating, the keys are stored in key-dir
(by default,
~/.config/wildland/keys
). The public-private key pair is stored in
<fingerprint>.pub
and <fingerprint>.sec
files.
Manual pages¶
- wl - CLI interface to Wildland
- wl bridge - Bridge commands
- Synopsis
- Description
- Commands
- wl bridge create [--user USER] [--target-user USER] [--target-user-location URL-OR-PATH] [--path PATH] [BRIDGE_NAME]
- wl bridge> {sign|verify|edit} [...]
- wl {bridge|bridges} list
- wl bridge import [--path path] [--bridge-owner user] [--only-first] url_or_path
- wl bridge publish <bridge> [<bridge> ...]
- wl bridge unpublish <bridge> [<bridge> ...]
- wl container - Container commands
- Synopsis
- Description
- Commands
- wl {container|containers} list
- wl container info NAME
- wl container delete [--force] [--cascade] [--no-unpublish] NAME [NAME ...]
- wl container create [--owner <user>] [--path <path>] [--path <path2> ...] [--storage-template <storage-template>] [--encrypt-manifest/--no-encrypt-manifest] [--access <user>] [--no-publish]
- wl container create-cache --template <template_name> <container> [<container>...]
- wl container delete-cache <container> [<container>...]
- wl container update [--storage <storage>] <container>
- wl container mount [--verbose/-v] [--remount/--no-remount] [--lazy/--no-lazy] [options] <container> [<container>...]
- wl container mount-watch [--with-subcontainers/--without-subcontainers] <pattern|container> [<pattern|container>...]
- wl container add-mount-watch <pattern> [<pattern>...]
- wl container stop-mount-watch
- wl container unmount [--path] [--all] [--with-subcontainers/--without-subcontainers] [--undo-save] <container>
- wl container publish <container> [<container> ...]
- wl container unpublish <container> [<container> ...]
- wl container {sign|verify} [...]
- wl container edit PATH
- wl container dump PATH
- wl container sync [--target-storage <id_or_type>] [--source-storage <id_or_type>] [--one-shot] [--no-wait] <container>
- wl container stop-sync <container>
- wl container list-conflicts [--force-scan] <container>
- wl container duplicate [--new-name <new-name>] <container>
- wl container modify [--add-path <path> ...] [--del-path <path> ...] [--add-access <user> ...] [--del-access <user> ...] [--add-category <path> ...] [--del-category <path> ...] [--del-storage <storage>] [--title] [--encrypt-manifest] [--no-encrypt-manifest] [--publish/--no-publish] [--remount/--no-remount] <file>
- wl container find <file>
- wl dump - Dump (decrypted) manifest contents in a machine-readable way.
- wl edit - Edit and sign a manifest in a safe way.
- wl forest - Forest management commands
- wl get - get a file from wildland
- wl publish - publish wildland manifests
- wl put - put a file into wildland
- wl set-default-cache — Set default template for container cache storages
- wl sign - sign manifests
- wl start — Start the Wildland FUSE driver
- wl status — Display all mounted containers or specified container and sync jobs
- wl stop — Stop the Wildland FUSE driver
- wl storage - Storage management
- Synopsis
- Description
- Commands
- wl {storage|storages} list
- wl storage delete [--force] [--no-cascade] [--container <container>] NAME [NAME ...]
- wl storage create local --container <container> [--manifest-pattern <glob>] [--subcontainer-manifest <path>] --location <filesystem_path> [--no-publish] <storage>
- wl storage create local-cached --container <container> --location <filesystem_path> [--no-publish] <storage>
- wl storage create local-dir-cached --container <container> --location <filesystem_path> [--no-publish] <storage>
- wl storage create timeline --container <container> --reference-container-url <url> [--timeline-root <dir>] [--no-publish] <storage>
- wl storage create delegate --container <container> --reference-container-url <url> [--subdirectory <dir>] [--no-publish] <storage>
- wl storage create dummy --container <container> [--no-publish]
- wl storage create static --container <container> [--file <path>=<content> ...] [--no-publish]
- wl storage create zip-archive --container <container> --location <filesystem_path> [--no-publish] <storage>
- wl storage create http --container <container> --url <url> [--no-publish] <storage>
- wl storage create dropbox --container <container> --token <access_token> --app-key <app_key> [--refresh-token <refresh_token>] [--no-publish]
- wl storage create categorization --container <container> --reference-container-url <url> [--with-unclassified-category] [--unclassified-category-path <path>] [--no-publish] <storage>
- wl storage create transpose --container <container> --reference-container-url <url> --rules <rules> --conflict <conflict> [--no-publish] <storage>
- wl storage create googledrive --container <container> --credentials <credentials> --skip-interaction [--no-publish]
- wl storage create s3 --container <container> --url <url> <storage> [--no-publish]
- wl storage create sshfs --container <container> [--sshfs-command <cmd>] --host <host> [--path <path>] [--ssh-user <user>] [--ssh-identity <path>|--pwprompt] [-mount-options <OPT1>[,OPT2,OPT3,...]]
- wl storage create ipfs --container <container> --ipfs-hash <url> --endpoint-addr <multiaddress> <storage> [--no-publish]
- wl storage create encrypted --container <container> --reference-container-url <url> <storage>
- wl storage create webdav --container <container> --url <url> --login <login> --password <password> <storage [--no-publish]
- wl storage create git --container <container> --url <url> [--username <username>] [--password <password>] [--no-publish] <storage>
- wl storage create redis --container <container> --hostname <string> --database <int> [--password <string>] [--port 6379]
- wl storage {sign|verify|edit} [...]
- wl storage create-from-template --storage-template <storage_template> <container>
- wl storage modify [--location <path>] [--add-access <user>] [--del-access <user>] <file>
- wl storage publish <storage> [<storage> ...]
- wl storage unpublish <storage> [<storage> ...]
- wl template - Storage template management
- Synopsis
- Description
- Storage Templates
- Commands
- wl template list [--show-filenames]
- wl template remove NAME [NAME ...]
- wl template create categorization --reference-container-url <url> NAME
- wl template create transpose --reference-container-url <url> NAME
- wl template create timeline --reference-container-url <url> [--timeline-root <dir>] NAME
- wl template create delegate --reference-container-url <url> NAME
- wl template create dropbox --token <access_token> --app-key <app_key> [--refresh-token <refresh_token>] NAME
- wl template create dummy NAME
- wl template create encrypted --reference-container-url <url> NAME
- wl template create googledrive --credentials <credentials> NAME
- wl template create http --url <url> NAME
- wl template create git --url <url> [--username <username>] [--password <password>] NAME
- wl template create ipfs --ipfs-hash <url> --endpoint-address <multiaddress> NAME
- wl template create local --location <absolute_path> NAME
- wl template create local-cached --location <absolute_path> NAME
- wl template create local-dir-cached --location <absolute_path> NAME
- wl template create s3 --s3-url <s3_url> --access-key <access_key> [--secret-key <secret_key>] NAME
- wl template create sshfs [--sshfs-command <cmd>] --host <host> [--path <path>] [--ssh-user <user>] [--ssh-identity <path>|--pwprompt] [-mount-options <OPT1>[,OPT2,OPT3,...]] NAME
- wl template create static [--file <path>=<content> ...] NAME
- wl template create webdav --url <url> --login <login> --password <password> NAME
- wl template create zip-archive --location <absoute_path_to_zip_file> NAME
- wl template create redis --hostname <string> --database <int> [--password <string>] [--port 6379] NAME
- wl template add categorization --reference-container-url <url> NAME
- wl template add transpose --reference-container-url <url> NAME
- wl template add timeline --reference-container-url <url> [--timeline-root <dir>] NAME
- wl template add delegate --reference-container-url <url> NAME
- wl template add dropbox --token <access_token> --app-key <app_key> [--refresh-token <refresh_token>] NAME
- wl template add dummy NAME
- wl template add encrypted --reference-container-url <url> NAME
- wl template add googledrive --credentials <credentials> NAME
- wl template add http --url <url> NAME
- wl template add ipfs --ipfs-hash <url> --endpoint-address <multiaddress> NAME
- wl template add local --location <absolute_path> NAME
- wl template add local-cached --location <absolute_path> NAME
- wl template add local-dir-cached --location <absolute_path> NAME
- wl template add s3 --s3-url <s3_url> --access-key <access_key> [--secret-key <secret_key>] NAME
- wl template add sshfs [--sshfs-command <cmd>] --host <host> [--path <path>] [--ssh-user <user>] [--ssh-identity <path>|--pwprompt] [-mount-options <OPT1>[,OPT2,OPT3,...]] NAME
- wl template add static [--file <path>=<content> ...] NAME
- wl template add webdav --url <url> --login <login> --password <password> NAME
- wl template add zip-archive --location <absoute_path_to_zip_file> NAME
- wl template add git --url <url> [--username <username>] [--password <password>] NAME
- wl template add redis --hostname <string> --database <int> [--password <string>] [--port 6379] NAME
- wl template edit PATH/NAME
- wl template dump PATH/NAME
- wl unpublish - unpublish wildland manifests
- wl user: - User management
- Synopsis
- Description
- Commands
- wl {user|users} list [OPTIONS]
- wl user create [OPTIONS] NAME
- wl user delete [--force] [--cascade] [--delete-keys] NAME [NAME ...]
- wl user {sign|verify|edit} [OPTIONS] <file>
- wl user import [--path path] [--bridge-owner user] url_or_path
- wl user refresh USER
- wl user modify [--add-path <path>] [--del-path <path>] [--add-pubkey <pubkey>] [--add-pubkey-user <user>] [--del-pubkey <pubkey>] [--add-catalog-entry <path>] [--del-catalog-entry <path>] <file>
- wl user publish <user> [<user> ...]
- wl user unpublish <user> [<user> ...]
- wl verify - verify manifests
- wl version — Display Wildland version
- wl watch — Watch the Wildland filesystem for changes