diff options
Diffstat (limited to 'image/backends/iso.cc')
-rw-r--r-- | image/backends/iso.cc | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/image/backends/iso.cc b/image/backends/iso.cc index b0936c3..89d1e84 100644 --- a/image/backends/iso.cc +++ b/image/backends/iso.cc @@ -350,18 +350,29 @@ public: /* REQ: ISO.23 */ output_info("CD backend", "creating initrd"); - std::string cdinit_path{""}; - for(const auto &path : data_dirs()) { - fs::path candidate{fs::path{path}.append("horizon").append("iso") - .append("cdinits")}; - if(fs::exists(candidate, ec)) { - cdinit_path = candidate; + std::string kver, kverpath; + for(const auto &dent : + fs::recursive_directory_iterator(target + "/usr/share/kernel", ec)) + { + if(dent.is_regular_file() && + dent.path().filename().string() == "kernel.release") { + kverpath = dent.path().string(); + break; } } -#include "initrd.sh.cpp" - if(run_command("/bin/sh", {"-ec", initrd, "mkinitrd", my_arch, target, - cdpath, cdinit_path}) != 0) { - output_error("CD backend", "failed to create initrd"); + if(kverpath.length() == 0) { + output_error("CD backend", "cannot find kernel.release"); + return FS_ERROR; + } + std::ifstream kverstream(kverpath); + kverstream >> kver; + + /* dracut with -r can't autodetect udev directory without udev.pc */ + ::setenv("udevdir", "/lib/udev", 0); + if(run_command("dracut", {"--kver", kver, "-r", target+"/", "-N", + "--force", "-a", "dmsquash-live", + cdpath + "/initrd-" + my_arch}) != 0) { + output_error("CD backend", "dracut failed to create initramfs"); return COMMAND_ERROR; } @@ -409,7 +420,7 @@ public: output_info("CD backend", "creating ISO"); std::vector<std::string> iso_args = {"-as", "mkisofs", "-o", out_path, "-joliet", "-rational-rock", "-V", - "Adelie "+my_arch}; + "Adelie-"+my_arch}; std::vector<std::string> arch_args; std::string raw_arch; { |