From fb6a7bfe74ebeca9a86a96ece73242a11d34352c Mon Sep 17 00:00:00 2001 From: Artemis Tosini Date: Sun, 22 Dec 2024 03:44:21 +0000 Subject: [PATCH 1/3] openbsd.{fsck,fsck_ffs,fsck_msdos}: init --- pkgs/os-specific/bsd/openbsd/pkgs/fsck.nix | 4 ++++ pkgs/os-specific/bsd/openbsd/pkgs/fsck_ffs.nix | 8 ++++++++ pkgs/os-specific/bsd/openbsd/pkgs/fsck_msdos.nix | 5 +++++ 3 files changed, 17 insertions(+) create mode 100644 pkgs/os-specific/bsd/openbsd/pkgs/fsck.nix create mode 100644 pkgs/os-specific/bsd/openbsd/pkgs/fsck_ffs.nix create mode 100644 pkgs/os-specific/bsd/openbsd/pkgs/fsck_msdos.nix diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/fsck.nix b/pkgs/os-specific/bsd/openbsd/pkgs/fsck.nix new file mode 100644 index 000000000000..c1afc90746ae --- /dev/null +++ b/pkgs/os-specific/bsd/openbsd/pkgs/fsck.nix @@ -0,0 +1,4 @@ +{ mkDerivation }: +mkDerivation { + path = "sbin/fsck"; +} diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/fsck_ffs.nix b/pkgs/os-specific/bsd/openbsd/pkgs/fsck_ffs.nix new file mode 100644 index 000000000000..85ff031ad488 --- /dev/null +++ b/pkgs/os-specific/bsd/openbsd/pkgs/fsck_ffs.nix @@ -0,0 +1,8 @@ +{ mkDerivation }: +mkDerivation { + path = "sbin/fsck_ffs"; + extraPaths = [ + "sbin/fsck" + "sys/ufs/ffs" + ]; +} diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/fsck_msdos.nix b/pkgs/os-specific/bsd/openbsd/pkgs/fsck_msdos.nix new file mode 100644 index 000000000000..103728248610 --- /dev/null +++ b/pkgs/os-specific/bsd/openbsd/pkgs/fsck_msdos.nix @@ -0,0 +1,5 @@ +{ mkDerivation }: +mkDerivation { + path = "sbin/fsck_msdos"; + extraPaths = [ "sbin/fsck" ]; +} From 55d65381bbda9ca9a614d86d54a836897d49a755 Mon Sep 17 00:00:00 2001 From: Artemis Tosini Date: Sun, 22 Dec 2024 03:53:07 +0000 Subject: [PATCH 2/3] openbsd.fsck: Override paths --- .../bsd/openbsd/pkgs/fsck/fsck-path.patch | 25 +++++++++++++++++++ .../pkgs/{fsck.nix => fsck/package.nix} | 2 ++ 2 files changed, 27 insertions(+) create mode 100644 pkgs/os-specific/bsd/openbsd/pkgs/fsck/fsck-path.patch rename pkgs/os-specific/bsd/openbsd/pkgs/{fsck.nix => fsck/package.nix} (61%) diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/fsck/fsck-path.patch b/pkgs/os-specific/bsd/openbsd/pkgs/fsck/fsck-path.patch new file mode 100644 index 000000000000..a49ac7ceb04c --- /dev/null +++ b/pkgs/os-specific/bsd/openbsd/pkgs/fsck/fsck-path.patch @@ -0,0 +1,25 @@ +diff --git a/sbin/fsck/fsck.c b/sbin/fsck/fsck.c +index 19e730a484f..176d614d986 100644 +--- a/sbin/fsck/fsck.c ++++ b/sbin/fsck/fsck.c +@@ -308,18 +308,8 @@ checkfs(const char *vfstype, const char *spec, const char *mntpt, void *auxarg, + _exit(0); + + /* Go find an executable. */ +- edir = edirs; +- do { +- (void)snprintf(execname, +- sizeof(execname), "%s/fsck_%s", *edir, vfstype); +- execv(execname, (char * const *)argv); +- if (errno != ENOENT) { +- if (spec) +- warn("exec %s for %s", execname, spec); +- else +- warn("exec %s", execname); +- } +- } while (*++edir != NULL); ++ (void)snprintf(execname, sizeof(execname), "fsck_%s", vfstype); ++ execvp(execname, (char * const *)argv); + + if (errno == ENOENT) { + if (spec) diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/fsck.nix b/pkgs/os-specific/bsd/openbsd/pkgs/fsck/package.nix similarity index 61% rename from pkgs/os-specific/bsd/openbsd/pkgs/fsck.nix rename to pkgs/os-specific/bsd/openbsd/pkgs/fsck/package.nix index c1afc90746ae..c7a9e307f932 100644 --- a/pkgs/os-specific/bsd/openbsd/pkgs/fsck.nix +++ b/pkgs/os-specific/bsd/openbsd/pkgs/fsck/package.nix @@ -1,4 +1,6 @@ { mkDerivation }: mkDerivation { path = "sbin/fsck"; + + patches = [ ./fsck-path.patch ]; } From 52f3e97ee46c0cdd3511ddaa3882e764fe14c62f Mon Sep 17 00:00:00 2001 From: Audrey Dutcher Date: Sun, 22 Dec 2024 00:07:48 -0800 Subject: [PATCH 3/3] openbsd.fsck: unveil /nix/store too --- .../bsd/openbsd/pkgs/fsck/fsck-path.patch | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/bsd/openbsd/pkgs/fsck/fsck-path.patch b/pkgs/os-specific/bsd/openbsd/pkgs/fsck/fsck-path.patch index a49ac7ceb04c..2eedb4fc6c04 100644 --- a/pkgs/os-specific/bsd/openbsd/pkgs/fsck/fsck-path.patch +++ b/pkgs/os-specific/bsd/openbsd/pkgs/fsck/fsck-path.patch @@ -1,8 +1,17 @@ diff --git a/sbin/fsck/fsck.c b/sbin/fsck/fsck.c -index 19e730a484f..176d614d986 100644 +index 19e730a484f..cb548971abd 100644 --- a/sbin/fsck/fsck.c +++ b/sbin/fsck/fsck.c -@@ -308,18 +308,8 @@ checkfs(const char *vfstype, const char *spec, const char *mntpt, void *auxarg, +@@ -115,6 +115,8 @@ main(int argc, char *argv[]) + err(1, "unveil %s", _PATH_FSTAB); + if (unveil("/sbin", "x") == -1) + err(1, "unveil /sbin"); ++ if (unveil("/nix/store", "rx") == -1) ++ err(1, "unveil /nix/store"); + if (pledge("stdio rpath wpath disklabel proc exec", NULL) == -1) + err(1, "pledge"); + +@@ -308,18 +310,8 @@ checkfs(const char *vfstype, const char *spec, const char *mntpt, void *auxarg, _exit(0); /* Go find an executable. */