Open GZGavinZhao opened 10 months ago
What about creating different overlay layers for each individual package install? That would allow layers to be reused between builds.
I'm concerned about file conflicts between different packages. If we install packages one by one, we would need extra measure to make sure file conflicts are reported to us, while if we let eopkg install everything eopkg will handle that.
I used to mention running triggers is also an issue, but I guess we could force run triggers before running ypkg-build, so now my main concern is if packages have file conflicts.
This is the design for caching our container root between subsequent builds on the same package. The container root will be reused as long as
system.base
,system.devel
, and the package's dependencies remain the same. This will eliminate most if not all the time needed for fetching and installing dependencies.To do this, we will need to have three overlays that are mounted and unmounted one after another. Relative paths are relative to
/var/cache/solbuild/<profile>/<package>/
.system.base
,system.devel
, and other packages needed bysolbuild
to function are at their latest version.img
base
unionb
/var/cache/eopkg/packages
<hash-of-dependencies>
is generated inside this overlay after everything is up-to-date.img:base
/var/cache/solbuild/<layers>/<hash-of-dependencies>
. This is the layer that will be cached and reused.uniond
/var/cache/eopkg/packages
img:base:/var/cache/solbuild/<layers>/<hash-of-dependencies>
tmp
union
<hash-of-dependencies>
is generated byypkg-install-deps --dry-run --json
(getsolus/ypkg#57).