mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-26 04:43:09 +03:00
make-disk-iamge: use faketime to get a consistent timestamp
This fixes #28768 because during an image build, Nix sees bad store timestamps and attempts to fix them, but can't fix them on a running system (due to being inside a builder). Since timestamps on the store are supposed to be 1 anyway, if we fix this, that fixes image building inside booted images made this way. Note that this adds quite a bit of noise to the output, because running `cptofs` under `faketime` causes a bunch of seemingly spurious error messages and my attempts to suppress them all failed. We'll fix it when `cptofs` gets a native timestamp preservation feature.
This commit is contained in:
parent
7ebacd1a43
commit
f5b3f2c5a7
@ -64,7 +64,7 @@ let
|
||||
${channelSources}
|
||||
'';
|
||||
|
||||
prepareImageInputs = with pkgs; [ rsync utillinux parted e2fsprogs lkl fakeroot config.system.build.nixos-prepare-root ] ++ stdenv.initialPath;
|
||||
prepareImageInputs = with pkgs; [ rsync utillinux parted e2fsprogs lkl fakeroot libfaketime config.system.build.nixos-prepare-root ] ++ stdenv.initialPath;
|
||||
|
||||
# I'm preserving the line below because I'm going to search for it across nixpkgs to consolidate
|
||||
# image building logic. The comment right below this now appears in 4 different places in nixpkgs :)
|
||||
@ -86,7 +86,7 @@ let
|
||||
offset=0
|
||||
''}
|
||||
|
||||
mkfs.${fsType} -F -L nixos -E offset=$offset $diskImage
|
||||
faketime -f "1970-01-01 00:00:01" mkfs.${fsType} -F -L nixos -E offset=$offset $diskImage
|
||||
|
||||
root="$PWD/root"
|
||||
mkdir -p $root
|
||||
@ -124,6 +124,14 @@ let
|
||||
fakeroot nixos-prepare-root $root ${channelSources} ${config.system.build.toplevel} closure
|
||||
|
||||
echo "copying staging root to image..."
|
||||
# If we don't faketime, we can end up with timestamps other than 1 on the nix store, which
|
||||
# will confuse Nix in some situations (e.g., breaking image builds in the target image)
|
||||
# N.B: I use 0 here, which results in timestamp = 1 in the image. It's weird but see
|
||||
# https://github.com/lkl/linux/issues/393. Also, running under faketime makes `cptofs` super
|
||||
# noisy and it prints out that it can't find a bunch of files, and then works anyway. We'll
|
||||
# shut it up someday but trying to do a stderr filter through grep is running into some nasty
|
||||
# bug in some eval nonsense we have in runInLinuxVM and I'm sick of trying to fix it.
|
||||
faketime -f "1970-01-01 00:00:00" \
|
||||
cptofs ${pkgs.lib.optionalString partitioned "-P 1"} -t ${fsType} -i $diskImage $root/* /
|
||||
'';
|
||||
in pkgs.vmTools.runInLinuxVM (
|
||||
|
Loading…
Reference in New Issue
Block a user