add outputs.manifest for diagnosing image size problems
This commit is contained in:
parent
5e573cef09
commit
2e13f1372e
3 changed files with 22 additions and 3 deletions
10
README.md
10
README.md
|
@ -114,6 +114,16 @@ Assuming you have nixpkgs checked out in a peer directory of this one,
|
|||
|
||||
NIX_PATH=nixpkgs=../nixpkgs:$NIX_PATH ./run-tests.sh
|
||||
|
||||
## Diagnosing unexpectedly large images
|
||||
|
||||
Sometimes you can add a package and it causes the image size to balloon
|
||||
because it has dependencies on other things you didn't know about. Build the
|
||||
`outputs.manifest` attribute, which is a json representation of the
|
||||
filesystem, and you can run `nix-store --query` on it:
|
||||
|
||||
NIX_PATH=nixpkgs=../nixpkgs:$NIX_PATH NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM=1 nix-build -I liminix-config=path/to/your/configuration.nix --arg device "import ./devices/qemu.nix" -A outputs.manifest -o manifest
|
||||
nix-store -q --tree manifest
|
||||
|
||||
|
||||
## Articles of interest
|
||||
|
||||
|
|
10
THOUGHTS.txt
10
THOUGHTS.txt
|
@ -186,7 +186,7 @@ creates the interface instead of using an existing unconfigured one
|
|||
|
||||
5) write a test for udhcp
|
||||
|
||||
6) squashfs size is ~ 14MB for a configuration with not much in it,
|
||||
DONE 6) squashfs size is ~ 14MB for a configuration with not much in it,
|
||||
look for obvious wastes of space
|
||||
|
||||
7) some of the pppoe config should be moved into a ppp service
|
||||
|
@ -207,7 +207,13 @@ is that specified or fluke?
|
|||
|
||||
19) syslogd - use busybox or s6?
|
||||
|
||||
20) The option currently called defaultPackages needs a better name as
|
||||
DONE 20) The option currently called defaultPackages needs a better name as
|
||||
it doesn't have the same semantics as nixos
|
||||
environment.defaultPackages. maybe call it packagesInProfile or
|
||||
packagesOnPath. or defaultProfile.packages
|
||||
|
||||
|
||||
Tue Sep 27 22:00:36 BST 2022
|
||||
|
||||
Found the cause of huge image size: rp-pppoe ships with scripts that
|
||||
reference build-time packages, so we have x86-64 glibc in there
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
let
|
||||
overlay = import ./overlay.nix;
|
||||
nixpkgs = import <nixpkgs> ( device.system // {overlays = [overlay]; });
|
||||
inherit (nixpkgs.pkgs) callPackage liminix;
|
||||
inherit (nixpkgs.pkgs) callPackage writeText liminix;
|
||||
config = (import ./merge-modules.nix) [
|
||||
./modules/base.nix
|
||||
({ lib, ... } : { config = { inherit (device) kernel; }; })
|
||||
|
@ -24,6 +24,9 @@ in {
|
|||
ln -s ${squashfs} squashfs
|
||||
ln -s ${kernel.vmlinux} vmlinux
|
||||
'';
|
||||
# this exists so that you can run "nix-store -q --tree" on it and find
|
||||
# out what's in the image, which is nice if it's unexpectedly huge
|
||||
manifest = writeText "manifest.json" (builtins.toJSON config.filesystem.contents);
|
||||
};
|
||||
# this is just here as a convenience, so that we can get a
|
||||
# cross-compiling nix-shell for any package we're customizing
|
||||
|
|
Loading…
Reference in a new issue