Skip to content
Docs

Multi-user Environments

Bulker works well as a shared, centralized software source for teams. On our local HPC, we use a shared bulker config so everyone has access to the same containerized tools without building their own. This replaces environment modules with something that works across computing systems.

  1. Create a shared config file on a shared filesystem:
bulker config init -c /shared/path/bulker_config.yaml -e apptainer
  1. Point team members to the shared config in their shell RC:
export BULKERCFG=/shared/path/bulker_config.yaml
  1. Pre-cache crates from an admin account so they’re available to all users:
bulker crate install databio/pepatac -b -c /shared/path/bulker_config.yaml
  1. Users can then activate shared crates:
bulker activate databio/pepatac

Shared filesystem setups commonly fail because files written by the admin account are not readable by other users. Follow these steps to make the shared config and cache accessible to the whole group.

After creating the config, make it group-readable:

chgrp <your-group> /shared/path/bulker_config.yaml
chmod g+r /shared/path/bulker_config.yaml

If the config references an apptainer_image_folder, that directory and all .sif files inside it must also be group-readable:

chgrp -R <your-group> /shared/path/apptainer_images/
chmod -R g+rX /shared/path/apptainer_images/

Bulker caches crate manifests at ~/.config/bulker/manifests/ by default (derived from XDG_CONFIG_HOME). When an admin runs bulker crate install, the manifests are written to the admin’s home directory and are not accessible to other users.

To share the manifest cache, set the XDG_CONFIG_HOME environment variable to a shared filesystem path before running bulker crate install. All team members should set the same value:

export XDG_CONFIG_HOME=/shared/path/bulker_config
bulker crate install databio/pepatac -b

Then set permissions after each crate install:

chgrp -R <your-group> /shared/path/bulker_config/bulker/manifests/
chmod -R g+rX /shared/path/bulker_config/bulker/manifests/

To avoid having to re-run chgrp every time a crate is added, set the setgid bit on the shared directories. New files and subdirectories will then inherit the group automatically:

chmod g+s /shared/path/
chmod g+s /shared/path/bulker_manifests/
chmod g+s /shared/path/apptainer_images/

Pair this with a umask of 0002 in the admin account’s shell RC so new files are group-writable (or at least group-readable with 0022):

umask 0022 # new files: owner rw, group r, other r

After setup, confirm a regular user can reach the config and manifests:

# As a team member (not the admin):
ls -l /shared/path/bulker_config.yaml # should be group-readable
ls -l /shared/path/bulker_manifests/ # should be group-readable
bulker crate list -c /shared/path/bulker_config.yaml # should list installed crates
  • Works identically across servers, laptops, and cloud — same crate manifests everywhere.
  • Works across container engines (Docker on desktops, Apptainer on HPC).
  • No per-system module definitions to maintain.
  • The same crates work for interactive use and workflow execution.