Multi-user Environments
Sharing a bulker config in a group
Section titled “Sharing a bulker config in a group”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.
- Create a shared config file on a shared filesystem:
bulker config init -c /shared/path/bulker_config.yaml -e apptainer- Point team members to the shared config in their shell RC:
export BULKERCFG=/shared/path/bulker_config.yaml- 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- Users can then activate shared crates:
bulker activate databio/pepatacPermissions
Section titled “Permissions”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.
Config file
Section titled “Config file”After creating the config, make it group-readable:
chgrp <your-group> /shared/path/bulker_config.yamlchmod g+r /shared/path/bulker_config.yamlIf 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/Manifest cache
Section titled “Manifest cache”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_configbulker crate install databio/pepatac -bThen 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/Sticky group bits (recommended)
Section titled “Sticky group bits (recommended)”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 rVerify access as a team member
Section titled “Verify access as a team member”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-readablels -l /shared/path/bulker_manifests/ # should be group-readablebulker crate list -c /shared/path/bulker_config.yaml # should list installed cratesBenefits over environment modules
Section titled “Benefits over environment modules”- 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.