From 865571068d0e7327a41c42ae46202c95b3f116a9 Mon Sep 17 00:00:00 2001 From: "A. Wilcox" Date: Sun, 13 Oct 2019 03:52:08 -0500 Subject: hscript: Ensure mounts are executed in proper order --- hscript/script.cc | 15 +++++++++++++++ tests/fixtures/0057-many-mounts.installfile | 8 ++++++++ 2 files changed, 23 insertions(+) create mode 100644 tests/fixtures/0057-many-mounts.installfile diff --git a/hscript/script.cc b/hscript/script.cc index 989ea0f..d1608cd 100644 --- a/hscript/script.cc +++ b/hscript/script.cc @@ -446,6 +446,21 @@ bool Script::execute() const { output_error(phase, "The HorizonScript failed to execute",\ "Check the log file for more details.") + output_step_start("disk"); + /* Sort by mountpoint. + * This ensures that any subdirectory mounts come after their parent. */ + std::sort(this->internal->mounts.begin(), this->internal->mounts.end(), + [](std::unique_ptr const &e1, std::unique_ptr const &e2) { + return e1->mountpoint() < e2->mountpoint(); + }); + for(auto &mount : this->internal->mounts) { + if(!mount->execute(opts)) { + EXECUTE_FAILURE("disk"); + return false; + } + } + output_step_end("disk"); + output_step_start("pre-metadata"); if(!this->internal->hostname->execute(opts)) { EXECUTE_FAILURE("pre-metadata"); diff --git a/tests/fixtures/0057-many-mounts.installfile b/tests/fixtures/0057-many-mounts.installfile new file mode 100644 index 0000000..a8c93c3 --- /dev/null +++ b/tests/fixtures/0057-many-mounts.installfile @@ -0,0 +1,8 @@ +network false +hostname test.machine +pkginstall adelie-base +rootpw $6$gumtLGmHwOVIRpQR$2M9PUO24hy5mofzWWf9a.YLbzOgOlUby1g0hDj.wG67E2wrrvys59fq02PPdxBdbgkLZFtjfEx6MHZwMBamwu/ +mount /dev/gwyn/home /home +mount /dev/gwyn/source /usr/src +mount /dev/sda1 / +mount /dev/sda2 /usr -- cgit v1.2.3-60-g2f50