Multiple methods held a read or write lock on self.index while calling fallback methods that also needed to acquire locks, causing deadlocks: - get_obsoleted_package_metadata: read lock held during filesystem fallback that calls update_index_entry (write lock) - get_obsoleted_package_manifest: same pattern - remove_obsoleted_package: write lock held while calling build_index (also needs write lock) - search_obsoleted_packages: read lock held during fallback Fix: scope all lock acquisitions in blocks so locks are dropped before calling any method that may also acquire a lock. For remove, extract a needs_rebuild flag set inside the lock scope, then call build_index after release. All 95 libips tests now pass (previously 3 hung indefinitely). |
||
|---|---|---|
| .github | ||
| .idea | ||
| .junie | ||
| .solstice | ||
| .vscode | ||
| doc | ||
| docker | ||
| docs/ai | ||
| libips | ||
| pkg6 | ||
| pkg6depotd | ||
| pkg6recv | ||
| pkg6repo | ||
| pkgtree | ||
| ports | ||
| specfile | ||
| testing/manual | ||
| userland | ||
| xtask | ||
| .dockerignore | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CLAUDE.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| IMPLEMENTATION_STATUS.md | ||
| LICENSE | ||
| Makefile | ||
| pkg6depotd.kdl | ||
| ports.spec | ||
| README.md | ||
| rebuild_test_repo.sh | ||
| run_local_import_test.sh | ||
| run_openindiana_image_import.sh | ||
| run_sample_install.sh | ||
| test_repo_operations.sh | ||
| Vagrantfile | ||
Image Packaging System for illumos
libips
The libips crate contains all modules and functions one needs to implement an Image Packaging System based utility.
Be that a server, client or other utilities.
This project is intended to gradually replace the current python based implementation of IPS. Most things are documented in the docs directory but some things have been added over the years which has not been properly documented. Help is welcome but be advised, this is mainly intended for use within the illumos community and it's distributions. Big changes which are not in the current IPS will need to be carefully coordinated to not break the current IPS.
Development and Release
Releasing
This project uses cargo-release for versioning and tagging.
- Ensure you have
cargo-releaseinstalled:cargo install cargo-release - Prepare the release (dry-run):
cargo release [level] --dry-run(e.g.,cargo release patch --dry-run) - Execute the release:
cargo release [level] --execute - Push the changes and tags:
git push --follow-tags
Pushing a tag starting with v (e.g., v0.5.1) will trigger the GitHub Actions release pipeline, which builds artifacts for Illumos (OpenIndiana) and Linux, and creates a GitHub Release.