mirror of
https://github.com/CachyOS/New-Cli-Installer.git
synced 2025-01-23 22:42:31 +08:00
🐛 fix bug
make sure that we have valid initcpio config, overwise we will end up here with unbootable system.
This commit is contained in:
parent
ea82bbb4cc
commit
51e661e706
@ -61,6 +61,17 @@ class Initcpio {
|
|||||||
hooks.emplace_back(std::move(hook));
|
hooks.emplace_back(std::move(hook));
|
||||||
return this->write();
|
return this->write();
|
||||||
}
|
}
|
||||||
|
inline bool append_hooks(std::vector<std::string>&& hook) noexcept {
|
||||||
|
/* clang-format off */
|
||||||
|
if (!this->parse_file()) { return false; }
|
||||||
|
auto&& filtered_input = hook | ranges::views::filter([&](auto&& el) {
|
||||||
|
return !ranges::contains(hooks, el);
|
||||||
|
}) | ranges::to<std::vector<std::string>>();
|
||||||
|
if (filtered_input.empty()) { return false; }
|
||||||
|
|
||||||
|
hooks.insert(hooks.end(), filtered_input.begin(), filtered_input.end());
|
||||||
|
return this->write();
|
||||||
|
}
|
||||||
inline bool insert_hook(std::string&& needle, std::string&& hook) noexcept {
|
inline bool insert_hook(std::string&& needle, std::string&& hook) noexcept {
|
||||||
/* clang-format off */
|
/* clang-format off */
|
||||||
if (!this->parse_file()) { return false; }
|
if (!this->parse_file()) { return false; }
|
||||||
|
@ -747,6 +747,10 @@ void install_base(const std::string_view& packages) noexcept {
|
|||||||
const auto& initcpio_filename = fmt::format(FMT_COMPILE("{}/etc/mkinitcpio.conf"), mountpoint);
|
const auto& initcpio_filename = fmt::format(FMT_COMPILE("{}/etc/mkinitcpio.conf"), mountpoint);
|
||||||
auto initcpio = detail::Initcpio{initcpio_filename};
|
auto initcpio = detail::Initcpio{initcpio_filename};
|
||||||
|
|
||||||
|
// NOTE: make sure that we have valid initcpio config,
|
||||||
|
// overwise we will end up here with unbootable system.
|
||||||
|
initcpio.append_hooks({"base", "udev", "autodetect", "modconf", "block", "filesystems", "keyboard", "fsck"});
|
||||||
|
|
||||||
// filter_packages
|
// filter_packages
|
||||||
utils::install_from_pkglist(base_pkgs);
|
utils::install_from_pkglist(base_pkgs);
|
||||||
|
|
||||||
@ -760,6 +764,7 @@ void install_base(const std::string_view& packages) noexcept {
|
|||||||
std::int32_t zfs_root = 0;
|
std::int32_t zfs_root = 0;
|
||||||
|
|
||||||
const auto& filesystem_type = fmt::format(FMT_COMPILE("findmnt -ln -o FSTYPE {}"), mountpoint);
|
const auto& filesystem_type = fmt::format(FMT_COMPILE("findmnt -ln -o FSTYPE {}"), mountpoint);
|
||||||
|
spdlog::info("filesystem type on '{}' := '{}'", mountpoint, filesystem_type);
|
||||||
if (filesystem_type == "btrfs") {
|
if (filesystem_type == "btrfs") {
|
||||||
btrfs_root = 1;
|
btrfs_root = 1;
|
||||||
initcpio.remove_hook("fsck");
|
initcpio.remove_hook("fsck");
|
||||||
@ -776,6 +781,7 @@ void install_base(const std::string_view& packages) noexcept {
|
|||||||
// add luks and lvm hooks as needed
|
// add luks and lvm hooks as needed
|
||||||
const auto& lvm = std::get<std::int32_t>(config_data["LVM"]);
|
const auto& lvm = std::get<std::int32_t>(config_data["LVM"]);
|
||||||
const auto& luks = std::get<std::int32_t>(config_data["LUKS"]);
|
const auto& luks = std::get<std::int32_t>(config_data["LUKS"]);
|
||||||
|
spdlog::info("LVM := {}, LUKS := {}", lvm, luks);
|
||||||
|
|
||||||
if (lvm == 1 && luks == 0) {
|
if (lvm == 1 && luks == 0) {
|
||||||
initcpio.insert_hook("filesystems", "lvm2");
|
initcpio.insert_hook("filesystems", "lvm2");
|
||||||
@ -792,7 +798,9 @@ void install_base(const std::string_view& packages) noexcept {
|
|||||||
|
|
||||||
// Just explicitly flush the data to file,
|
// Just explicitly flush the data to file,
|
||||||
// if smth really happened between our calls.
|
// if smth really happened between our calls.
|
||||||
|
if (initcpio.parse_file()) {
|
||||||
initcpio.write();
|
initcpio.write();
|
||||||
|
}
|
||||||
|
|
||||||
if (lvm + luks + btrfs_root + zfs_root > 0) {
|
if (lvm + luks + btrfs_root + zfs_root > 0) {
|
||||||
utils::arch_chroot("mkinitcpio -P");
|
utils::arch_chroot("mkinitcpio -P");
|
||||||
|
@ -58,7 +58,7 @@ int main() {
|
|||||||
initcpio.append_module("radeon");
|
initcpio.append_module("radeon");
|
||||||
initcpio.append_hook("btrfs");
|
initcpio.append_hook("btrfs");
|
||||||
initcpio.append_module("crc32c-intel");
|
initcpio.append_module("crc32c-intel");
|
||||||
initcpio.hooks.insert(initcpio.hooks.end(), {"usr", "lvm2", "zfs"});
|
initcpio.append_hooks({"usr", "lvm2", "zfs"});
|
||||||
|
|
||||||
// Write data.
|
// Write data.
|
||||||
assert(initcpio.write());
|
assert(initcpio.write());
|
||||||
|
Loading…
Reference in New Issue
Block a user