X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fefi-boot-generator%2Fefi-boot-generator.c;h=606d35bf791b099d49133c27380a046f102287e0;hb=3798fd4c30150984d6e9eb63e8e94f5410ba5996;hp=88fa220d2f4fb6416cba523ca5d8977c760e548d;hpb=9cde64ff264c432fc83be638e57d8fd6392793a6;p=elogind.git diff --git a/src/efi-boot-generator/efi-boot-generator.c b/src/efi-boot-generator/efi-boot-generator.c index 88fa220d2..606d35bf7 100644 --- a/src/efi-boot-generator/efi-boot-generator.c +++ b/src/efi-boot-generator/efi-boot-generator.c @@ -26,14 +26,16 @@ #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_fclose_ FILE *f = NULL; + _cleanup_free_ char *what = NULL, *fsck = NULL; + char *name; + _cleanup_fclose_ FILE *f = NULL, *f2 = NULL; if (argc > 1 && argc != 4) { log_error("This program takes three or no arguments."); @@ -55,7 +57,7 @@ int main(int argc, char *argv[]) { 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) { @@ -63,38 +65,43 @@ int main(int argc, char *argv[]) { return EXIT_FAILURE; } - name = strjoin(arg_dest, "/boot.mount", NULL); - if (!name) { + name = strappenda(arg_dest, "/boot.mount"); + f = fopen(name, "wxe"); + if (!f) { + log_error("Failed to create mount unit file %s: %m", name); + 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; } - f = fopen(name, "wxe"); - if (!f) { - log_error("Failed to create mount unit file %s: %m", name); + 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\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" - "Options=umask=0077\n", - SD_ID128_FORMAT_VAL(id)); + "What=%s\n" + "Options=umask=0077,noauto\n", + fsck, fsck, what); - free(name); - name = strjoin(arg_dest, "/boot.automount", NULL); - if (!name) { - log_oom(); - return EXIT_FAILURE; - } - - fclose(f); - f = fopen(name, "wxe"); - if (!f) { + name = strappenda(arg_dest, "/boot.automount"); + f2 = fopen(name, "wxe"); + if (!f2) { log_error("Failed to create automount unit file %s: %m", name); return EXIT_FAILURE; } @@ -103,21 +110,15 @@ int main(int argc, char *argv[]) { "[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); - if (!name) { - log_oom(); - return EXIT_FAILURE; - } + "Where=/boot\n", f2); + name = strappenda(arg_dest, "/local-fs.target.wants/boot.automount"); 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; } - return 0; + return EXIT_SUCCESS; }