diff options
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 92 |
1 files changed, 73 insertions, 19 deletions
@@ -1,20 +1,52 @@ # sb-builder Desktop GUI for managing a Slackware SlackBuilds build VM from one place. It -runs slackrepo builds, overlay syncs (sbpull, sbshadow), hint file updates -and SBo orphan discovery on the VM over ssh, as background jobs that -keep running when the GUI disconnects and can be reattached later. A -dashboard shows VM and repository state, and the GUI can start the VM through -libvirt when it is off. - -Work in progress. See `docs/superpowers/specs/` for the design. +runs slackrepo builds, overlay syncs (sbpull, sbshadow) and hint file updates +on the VM over ssh, as background jobs that keep running when the GUI +disconnects and can be reattached later. Upstream versions are checked with +nvchecker on the desktop. A dashboard shows VM and repository state, +including the packages SBo lists without a maintainer, and the GUI can start +the VM through libvirt when it is off. + +It is built around one setup: a Slackware64-current VM building a personal +repository with [slackrepo](https://github.com/aclemons/slackrepo), laid out +by [slackrepo_setup](https://forge.slackware.nl/danix/slackrepo_setup) (the +SBo tree plus overlays as git subtrees). The defaults (VM `buildsystem`, +repository `SBo-danix`, overlays `personal` and `pentesting`) are the +author's; every one of them is a config key. `nvchecker.toml` is the +author's list of tracked packages. + +Still to come: a guarded full repository rebuild, and an SBo orphans screen. +The design, one spec per phase, is in `docs/design/`. ## Requirements - Desktop: Python 3.11 or newer, PyQt6 (with QtDBus), ssh access to the VM, optionally `virsh` for starting the VM and `nvchecker` for upstream checks - VM: Python 3.11 or newer, root ssh login, the - [slackrepo_setup](https://forge.slackware.nl/danix/slackrepo_setup) tools (`sbpull`, `sbshadow`) + [slackrepo_setup](https://forge.slackware.nl/danix/slackrepo_setup) tools (`sbpull`, `sbshadow`, + `slackrepo_setup_SBo-danix.sh`) + +## VM setup + +1. A Slackware64-current VM with Python 3.11 or newer (stock), reachable over + ssh as root with a key. A host alias in `~/.ssh/config` keeps the GUI config + short. For start and resume from the GUI, a libvirt domain on the desktop. +2. slackrepo and slackrepo-hints (SBo) installed on the VM. +3. The repository and its slackrepo config from + [slackrepo_setup](https://forge.slackware.nl/danix/slackrepo_setup): follow + its Install section, fill `/etc/slackrepo/SBo-danix.local`, then run + `slackrepo_setup_SBo-danix.sh` once to build the repository. +4. Package signing: a gpg key in root's keyring, `/root/.genreprc` with + `USE_GPGAGENT=1` and `REPOSOWNERGPG=<fingerprint>` (read by slackrepo's + `gen_repos_files.sh`), and slackrepo_setup's `gpg-agent.conf`, which lets + the GUI unlock the key for jobs. +5. `./install.sh --remote` from the desktop (below) installs the helper and + `/etc/sb-builder/config.toml`. For another repository, set `repo_dir`, + `overlays`, `slackrepo_repo`, `slackrepo_db`, `hintdir` and + `slackrepo_logdir` there. +6. The phantom deps list (`/etc/sb-builder/phantom-deps`) starts empty; fill it + from Hints, Phantom deps. ## Install @@ -27,7 +59,11 @@ Work in progress. See `docs/superpowers/specs/` for the design. - GUI: `~/.config/sb-builder/config.toml`, see `config.example.toml` - VM: `/etc/sb-builder/config.toml`, see `remote/config.example.toml` -Every key is optional. `File > Reload config` rereads the GUI config. +Every key is optional. Both configs also have settings pages in Keystone (the +quickshell desktop shell); the files stay hand-editable. The GUI rereads its +config when the file changes (`File > Reload config` does it by hand), and +Keystone edits the VM's through `sbb-remote config-get` / `config-set`, which +refuse a file that does not load and keep the previous one as `config.toml.bak`. Column widths, sort order, splitter positions and the window size are kept across runs in `~/.config/sb-builder/state.conf` (delete it to reset them; on Wayland the compositor may still pick the window size). @@ -36,8 +72,8 @@ Wayland the compositor may still pick the window size). sb-builder -The window has five tabs, always open: Dashboard, Packages, Hints, Results, -Jobs (Ctrl+PgUp/PgDn cycle them). The ribbon at the top holds the current +The window has six tabs, always open: Dashboard, Packages, Hints, Results, +Repository, Jobs (Ctrl+PgUp/PgDn cycle them). The ribbon at the top holds the current tab's actions, in the order a task uses them; the smaller bar under it holds its view controls (select, clear, refresh). An action that does not apply is greyed out, its tooltip says why. Actions act on the **ticked** rows: a click @@ -54,14 +90,24 @@ reopens it. - **Dashboard**: VM load, uptime and free disk, package counts, slackrepo build results, last overlay pull, SBo orphans, recent jobs. Refreshes while visible. The tiles open Packages (the orphans tile with only the orphaned - filter on), Results (one result kind) and Jobs. -- **Packages**: every package of the repository, with built version and - status (`ok`, `failed`, `never`, `outdated`). Search by name or summary, or - with `cat:`, `maint:`, `req:`, `status:`; toggle the overlay and status - chips, and **orphaned** for the packages SBo lists without a maintainer. The detail pane shows the package's versions, its dependencies after + filter on), Results (one result kind) and Jobs; Built lists the packages + to prune (built, SlackBuild gone). +- **Packages**: every package of the repository, with built version, hint + and status (`ok`, `failed`, `never`, `outdated`, `newer`: built newer than + the target, e.g. after a pin left its hint, so a build would downgrade). The + hint column says what the hint does: `pin` (sets `VERSION`), `deps` (only + `DELREQUIRES`/`ADDREQUIRES`), `skip`, `other`. Search by name or summary, + or with `cat:`, `maint:`, `req:`, `status:`, `hint:` (`hint:none` for no + hint); toggle the overlay and status + chips, and **orphaned** for the packages SBo lists without a maintainer. + The detail pane shows the package's versions, its dependencies after hints (dropped ones struck through), what its hint file does, and a link - to it in Hints. **Build**, **Update**, **Rebuild**, **Remove** and **Update - all** run a slackrepo `--preview` first; **New hint** creates hints, pinned + to it in Hints. **Build** (also updates outdated packages), **Rebuild**, + **Remove** and **Update all** run a slackrepo `--preview` first; **Prune** + removes built packages whose SlackBuild is gone from the tree (e.g. moved + to Slackware), the same removal Update all does, without building. A run + whose packages fail is marked failed and opens **Build results**: each + package's result, its log, and **Retry failed**; **New hint** creates hints, pinned at the `.info` version, for the ticked packages without one; **Publish** pushes the package repository (untick **publish** at Run it to hold a run back and publish later). @@ -88,10 +134,18 @@ reopens it. the log of the package's last attempt (slackrepo keeps one per command: `build.log`, `update.log`, `rebuild.log`, `remove.log`), where it reports the failure, with its `resource.log` (load, memory, tmp over the build). +- **Repository**: the packages slackrepo built, read from the local mount of + its package repository (`[repository] path`, default `/repo`; no VM + needed). Tiles for count (per overlay), size, unpublished (opens that + filter) and last publish; search by name or description, overlay and `unpublished` chips; + the detail pane shows the description, sizes and the package's ChangeLog + entries, with a link to it in Packages. - **Jobs**: every job with its live log. **Pull overlay** (`sbpull <overlay>`) and **Check shadowing** (`sbshadow`) run as previews; when one finds `shadow:` or `unshadow:` lines, its dialog offers **Apply shadowing**. - **Kill** stops the selected running job. + **Rebuild tree** (after a confirm) replaces the SBo-danix tree with a fresh + clone of upstream and the overlays (`slackrepo_setup_SBo-danix.sh`); the live + tree stays until the new one is ready. **Kill** stops the selected running job. - Real runs sign the repository. When the package signing key is locked (status bar 🔒), the GUI asks for its passphrase first and hands it to the VM's gpg-agent; it is never stored. |
