stage-2: replace readonly-mountpoint by findmnt

This commit is contained in:
Jörg Thalheim 2017-04-04 23:27:51 +02:00
parent a5ad8b4f69
commit b42af25223
No known key found for this signature in database
GPG Key ID: CA4106B8D7CC79FA
3 changed files with 5 additions and 32 deletions

View File

@ -1,20 +0,0 @@
#include <sys/statvfs.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv) {
struct statvfs stat;
if (argc != 2) {
fprintf(stderr, "Usage: %s PATH", argv[0]);
exit(2);
}
if (statvfs(argv[1], &stat) != 0) {
perror("statvfs");
exit(3);
}
if (stat.f_flag & ST_RDONLY)
exit(0);
else
exit(1);
}

View File

@ -46,7 +46,9 @@ echo "booting system configuration $systemConfig" > /dev/kmsg
chown -f 0:30000 /nix/store chown -f 0:30000 /nix/store
chmod -f 1775 /nix/store chmod -f 1775 /nix/store
if [ -n "@readOnlyStore@" ]; then if [ -n "@readOnlyStore@" ]; then
if ! readonly-mountpoint /nix/store; then if ! [[ "$(findmnt --noheadings --output OPTIONS /nix/store)" =~ ro(,|$) ]]; then
# FIXME when linux < 4.5 is EOL, switch to atomic bind mounts
#mount /nix/store /nix/store -o bind,remount,ro
mount --bind /nix/store /nix/store mount --bind /nix/store /nix/store
mount -o remount,ro,bind /nix/store mount -o remount,ro,bind /nix/store
fi fi

View File

@ -7,15 +7,6 @@ let
kernel = config.boot.kernelPackages.kernel; kernel = config.boot.kernelPackages.kernel;
activateConfiguration = config.system.activationScripts.script; activateConfiguration = config.system.activationScripts.script;
readonlyMountpoint = pkgs.stdenv.mkDerivation {
name = "readonly-mountpoint";
unpackPhase = "true";
installPhase = ''
mkdir -p $out/bin
cc -O3 ${./readonly-mountpoint.c} -o $out/bin/readonly-mountpoint
'';
};
bootStage2 = pkgs.substituteAll { bootStage2 = pkgs.substituteAll {
src = ./stage-2-init.sh; src = ./stage-2-init.sh;
shellDebug = "${pkgs.bashInteractive}/bin/bash"; shellDebug = "${pkgs.bashInteractive}/bin/bash";
@ -23,11 +14,11 @@ let
inherit (config.nix) readOnlyStore; inherit (config.nix) readOnlyStore;
inherit (config.networking) useHostResolvConf; inherit (config.networking) useHostResolvConf;
inherit (config.system.build) earlyMountScript; inherit (config.system.build) earlyMountScript;
path = lib.makeBinPath ([ path = lib.makeBinPath [
pkgs.coreutils pkgs.coreutils
pkgs.utillinux pkgs.utillinux
pkgs.openresolv pkgs.openresolv
] ++ optional config.nix.readOnlyStore readonlyMountpoint); ];
postBootCommands = pkgs.writeText "local-cmds" postBootCommands = pkgs.writeText "local-cmds"
'' ''
${config.boot.postBootCommands} ${config.boot.postBootCommands}