Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: Update ExtractSingleSquash, adding policy.
Overall, there are 3 "good things" done by this change: 1. Fix bug in the current code which tries mounting with each option every time. The problem with doing that is really that the kernel mount option didn't work very well. It would fail with "already mounted", and then squashfuse would end up getting used to mount over the top. 2. Fix race conditions in the current code. overlay.Unpack starts a thread pool and tries to unpack all layers at once. That is fine if there are no duplicate layers. But if there are duplicate layers used by a stacker.yaml file, then there were races on extraction. The end result really was that things would get mounted more than once. Example stacker that shows this: l1: from: type: docker url: docker://busybox:latest run: | echo build layer 1 l2: from: type: docker url: docker://busybox:latest run: | echo build layer 1 There, the busybox layer would get extracted multiple times. The code here has a single lock on ExtractSingleSquash, it would be better to have lock being taken per extractDir. 3. Allow the user to control the list of extractors. If they knew that they could not use kernel mounts (or could, but didn't want to) or wanted to use unsquashfs they can now do that. STACKER_SQUASHFS_EXTRACT_POLICY=kmount stacker build .. or STACKER_SQUASHFS_EXTRACT_POLICY="squashfuse kmount" stacker build ... This adds a SquashExtractor interface, with 3 implementers (KernelExtractor, SquashFuseExtractor, UnsquashfsExtractor). A ExtractPolicy is basically a list of Extractors to try. The first time ExtractPolicy is used it will try each of the Extractors in order. It then stores the result in .Extractor and uses that subsequently. Signed-off-by: Scott Moser <[email protected]>
- Loading branch information