Operator utilities for the EquisLinux production workspace. These are not runtime components of the distribution: they help maintainers locate the workspace, grant the narrow sudo permissions needed by release/validation scripts, and generate the repository signing key.
The utilities expect one directory named equislinux containing every
repository at the same level:
.../equislinux/
├── x/
├── scripts/
├── xpm/
├── xpkg/
├── x-repo/
├── web/
├── wiki/
├── wsl/
├── wsl-scripts/
├── utils/ <- this repository
└── ops/ <- private operations notes (not required here)
The parent of the workspace is not fixed: ~/Documents/repos/equislinux,
~/Documents/equislinux, ~/repos/equislinux, etc. are all valid.
Workspace discovery order:
--workspace PATH(where supported)X_WORKSPACE~/.config/equislinux/workspace(single path)- the parent directory of this repository (normal case)
- common locations under
$HOME
A .equislinux-workspace marker at the workspace root makes detection
unambiguous. There is intentionally no .env: it is working-directory
dependent and easy to commit by accident. See
docs/workspace-layout.md.
equislinux-clone bootstraps a new machine by cloning every repository in the
organization into a workspace named equislinux. It also refreshes existing
checkouts with git fetch --all --prune --tags.
From a checkout:
./bin/equislinux-clone --dest ~/repos/equislinuxFrom the directory that should become the workspace:
cd ~/repos/equislinux
./bin/equislinux-clone --here--here uses the current directory when it is already named equislinux;
otherwise it creates ./equislinux inside the current directory.
On a machine without the repository (the script is standalone):
curl -fsSL \
https://github.com/equislinux/utils/raw/refs/heads/main/bin/equislinux-clone \
-o /tmp/equislinux-clone
bash /tmp/equislinux-clone --dest "$HOME/repos/equislinux"Or directly through a pipe:
curl -fsSL \
https://github.com/equislinux/utils/raw/refs/heads/main/bin/equislinux-clone \
| bash -s -- --dest "$HOME/repos/equislinux"- Requires
ghinstalled and authenticated (gh auth login) andgit. - Private repositories (
ops) are cloned when the currentghsession can see them. The script never reads or stores tokens. Use--no-privateto leave them out and clone them manually. - Every branch currently on the remote is fetched. By default the script also
creates local tracking branches; use
--no-local-branchesto keep onlyorigin/*. - Useful options:
--here,--dry-run,--only NAME,--org NAME. - Full details:
docs/cloning.md.
# Print the detected workspace, or pin it explicitly
./bin/equislinux-workspace
./bin/equislinux-workspace --init /path/to/equislinux
./bin/equislinux-workspace --set-default
# Show the sudo rules that would be installed (no changes)
./bin/equislinux-sudo --dry-run
# Install them (asks for your sudo password); removes the legacy
# /etc/sudoers.d/xlnux-sprint file automatically
./bin/equislinux-sudo --apply
# Inspect or remove them
sudo ./bin/equislinux-sudo status
sudo ./bin/equislinux-sudo remove
# Legacy aliases from xlnux-sudo.sh are accepted:
# --status, --remove, --create (create = install --apply)
# Plan a signing key, then generate it outside any git worktree
./bin/equislinux-keygen --dry-run
./bin/equislinux-keygen # passphrase-protected (default)
./bin/equislinux-keygen --no-passphrase # development/automation only
# Restore the keyring and SourceForge key from the offline backup
./bin/equislinux-restore \
--backup-dir /run/media/x/PortableSSD/equislinux-backup-2026-10-17 \
--workspace ~/repos/equislinux --dry-run
./bin/equislinux-restore \
--backup-dir /run/media/x/PortableSSD/equislinux-backup-2026-10-17 \
--workspace ~/repos/equislinux --applyDetailed guides:
- Workspace discovery and moves:
docs/workspace-layout.md - Clone and refresh:
docs/cloning.md - Sudo rules:
docs/sudo.md - Signing key:
docs/keygen.md - Restore from backup:
docs/restore.md
The sudo rules cover only the scripts that need root:
scripts/test/generations-btrfs.shx/xbuild.shwsl/publish-sf.shwsl/build-rootfs.sh
- NOPASSWD on a script the target user can edit is equivalent to
passwordless root. This utility warns about it and offers
--strictfor root-owned layouts, but it is meant for a single-user development machine, not as a security boundary. - Key material is written to
<workspace>/keysby default and the generator refuses to write inside a git worktree. Never commitgnupg/,env.shorrevoke.asc. - The key generator protects the key with a passphrase by default. The
--no-passphrasemode is only for development and automated signing; keep an offline backup either way. - The sudo utility validates the generated file with
visudobefore installing it and backs up the previous sudoers file under/var/backups/equislinux.
make checkThe smoke test runs bash -n, shellcheck (when available), workspace
discovery, the sudo dry-run, and the keygen help. It never touches real keys
or sudoers.
GPL-3.0-or-later. See LICENSE.