X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fefi-boot-generator%2Fefi-boot-generator.c;h=e20d3250b836b8bc5fdf52bda3908033757bc787;hb=d09ee17da21b7ca2259067ac4e54f8a1cc3c0fc0;hp=c7bf34a5326fd951211e8ae41e626cc1c4b818b0;hpb=1da350f18e871566eeab16585e5c18c6e440e30e;p=elogind.git diff --git a/src/efi-boot-generator/efi-boot-generator.c b/src/efi-boot-generator/efi-boot-generator.c index c7bf34a53..e20d3250b 100644 --- a/src/efi-boot-generator/efi-boot-generator.c +++ b/src/efi-boot-generator/efi-boot-generator.c @@ -26,13 +26,14 @@ #include "path-util.h" #include "util.h" #include "mkdir.h" +#include "unit-name.h" static const char *arg_dest = "/tmp"; int main(int argc, char *argv[]) { int r = EXIT_SUCCESS; sd_id128_t id; - _cleanup_free_ char *name = NULL; + _cleanup_free_ char *name = NULL, *what = NULL, *fsck = NULL; _cleanup_fclose_ FILE *f = NULL; if (argc > 1 && argc != 4) { @@ -49,13 +50,13 @@ int main(int argc, char *argv[]) { umask(0022); - if (!is_efiboot()) + if (!is_efi_boot()) return EXIT_SUCCESS; if (dir_is_empty("/boot") <= 0) return EXIT_SUCCESS; - r = efi_get_loader_device_part_uuid(&id); + r = efi_loader_get_device_part_uuid(&id); if (r == -ENOENT) return EXIT_SUCCESS; if (r < 0) { @@ -75,13 +76,32 @@ int main(int argc, char *argv[]) { return EXIT_FAILURE; } + r = asprintf(&what, + "/dev/disk/by-partuuid/%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", + SD_ID128_FORMAT_VAL(id)); + if (r < 0) { + log_oom(); + return EXIT_FAILURE; + } + + fsck = unit_name_from_path_instance("systemd-fsck", what, ".service"); + if (!fsck) { + log_oom(); + return EXIT_FAILURE; + } + fprintf(f, "# Automatially generated by systemd-efi-boot-generator\n\n" + "[Unit]\n" + "Description=EFI System Partition\n" + "Requires=%s\n" + "After=%s\n" + "\n" "[Mount]\n" "Where=/boot\n" - "What=/dev/disk/by-partuuid/%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\n" + "What=%s\n" "Options=umask=0077\n", - SD_ID128_FORMAT_VAL(id)); + fsck, fsck, what); free(name); name = strjoin(arg_dest, "/boot.automount", NULL); @@ -97,10 +117,11 @@ int main(int argc, char *argv[]) { return EXIT_FAILURE; } - fprintf(f, - "# Automatially generated by systemd-efi-boot-generator\n\n" - "[Automount]\n" - "Where=/boot\n"); + fputs("# Automatially generated by systemd-efi-boot-generator\n\n" + "[Unit]\n" + "Description=EFI System Partition Automount\n\n" + "[Automount]\n" + "Where=/boot\n", f); free(name); name = strjoin(arg_dest, "/local-fs.target.wants/boot.automount", NULL); @@ -112,7 +133,7 @@ int main(int argc, char *argv[]) { mkdir_parents(name, 0755); if (symlink("../boot.automount", name) < 0) { - log_error("Failed to create symlink: %m"); + log_error("Failed to create symlink %s: %m", name); return EXIT_FAILURE; }