[Buildroot] Potential issue with per package directory hard link
Arnout Vandecappelle
arnout at mind.be
Mon Jan 13 22:33:53 UTC 2020
On 09/01/2020 19:09, Paul Kasemir wrote:
> Hi Thomas et. al,
>
> Regarding this line in the per package directory core changes:
> https://github.com/buildroot/buildroot/commit/c4e6d5c8be6ada8e7c60950e3b499c55d48761cb#diff-4ba3c73225b6850a34a3077526e4105cR146
>
> Using hard links is a good idea, but it also lets you shoot yourself in the
> foot a little bit.
>
> Take this example
> PackageA builds and installs FileA to staging
> PackageB builds and modifies FileA is such a way that FileA doesn't work
> anymore
>
> Since it is a hardlink, FileA is now broken for all packages depending on
> PackageA and you would need to rebuild both PackageA to get a working copy
> again, even though PackageB was the one that corrupted the file.
>
> Not sure if you can come up with another way that would enforce a new file
> created if the file is modified. Using sed -i 'expr' FileA is fine, but
> using echo "something" >> FileA will modify all versions.
An easy way to error out in such cases is to chmod -R a-w the install
directories. Not ideal though because you probably want to restore permissions
afterwards.
However, we've already concluded that modifying files is really a problem with
per-package directories. If package A, B and C all modify the same file, and B
and C both depend on A but not on each other, then the order between B and C is
not defined. So when the final host, staging and target dirs are created by
combining all per-package directories, we will get the result of either B's or
C's edit, but not both combined.
Whether such edits are made with echo>>, sed -i or even rm makes no difference,
the net result will always be wrong.
The solution is to introduce the check-unique-files step again to make sure
this doesn't happen, i.e. no two packages touch the same file.
Regards,
Arnout
> I've thought of using unionfs, but that would probably add a lot more
> complication than its worth and you would have tons of mounts you would
> then need to manage. I've also tried inotify, but it didn't seem reliable
> and is also a bit complicated to manage.
>
> I just thought I would bring this to your attention in case you weren't
> already aware of it.
>
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
>
More information about the buildroot
mailing list