Improve cache-manager with immutable local cache and require util-linux
Summary
- Refactor cache-manager to use immutable tar-based local cache
- Add documentation for cache-manager and Docker images
- Remove BusyBox flock fallback, require util-linux
Changes
Immutable Local Cache
- Store local cache as tar files instead of directories/symlinks
- Local-first PUT: create local tar, then push to NFS
- Always extract fresh on GET (prevents cache corruption from job modifications)
Unified Tar Format
- Both NFS host and clients use tar archives
- Remove legacy directory format support
BusyBox Removal
- BusyBox flock returns "Bad file descriptor" on NFS mounts
- Fail fast with clear error message instead of unreliable fallback
- docker-builder and docker-dind already have util-linux installed
Documentation
- Add cache-manager.md explaining architecture, locking, failure handling
- Add common-ci-images.md documenting all Docker images and their purposes
- Document potentially redundant images (python, python_runtime, python_development)