diff options
author | Janne Heß <janne@hess.ooo> | 2022-05-01 14:56:58 +0200 |
---|---|---|
committer | Janne Heß <janne@hess.ooo> | 2022-05-01 17:06:14 +0200 |
commit | e5995b22353d003cf2c3b32143ff996b14cbbb62 (patch) | |
tree | 225de1280d944dbb4104b77ced376e85b98b9308 /pkgs/build-support | |
parent | 5b47056b7d4ac1dcde998f9bac309a1875c670d5 (diff) | |
download | nixpkgs-e5995b22353d003cf2c3b32143ff996b14cbbb62.tar nixpkgs-e5995b22353d003cf2c3b32143ff996b14cbbb62.tar.gz nixpkgs-e5995b22353d003cf2c3b32143ff996b14cbbb62.tar.bz2 nixpkgs-e5995b22353d003cf2c3b32143ff996b14cbbb62.tar.lz nixpkgs-e5995b22353d003cf2c3b32143ff996b14cbbb62.tar.xz nixpkgs-e5995b22353d003cf2c3b32143ff996b14cbbb62.tar.zst nixpkgs-e5995b22353d003cf2c3b32143ff996b14cbbb62.zip |
makeInitrdNG: Strip more and remove output
This strips all elf files as far as possible and removes a lot of unnecessary output. Also wrap in the binaries instead of relying on $PATH.
Diffstat (limited to 'pkgs/build-support')
-rw-r--r-- | pkgs/build-support/kernel/make-initrd-ng-tool.nix | 9 | ||||
-rw-r--r-- | pkgs/build-support/kernel/make-initrd-ng.nix | 4 | ||||
-rw-r--r-- | pkgs/build-support/kernel/make-initrd-ng/src/main.rs | 22 |
3 files changed, 25 insertions, 10 deletions
diff --git a/pkgs/build-support/kernel/make-initrd-ng-tool.nix b/pkgs/build-support/kernel/make-initrd-ng-tool.nix index 66ffc09d43c..654b1036781 100644 --- a/pkgs/build-support/kernel/make-initrd-ng-tool.nix +++ b/pkgs/build-support/kernel/make-initrd-ng-tool.nix @@ -1,4 +1,4 @@ -{ rustPlatform }: +{ rustPlatform, lib, makeWrapper, patchelf, glibc, binutils }: rustPlatform.buildRustPackage { pname = "make-initrd-ng"; @@ -6,4 +6,11 @@ rustPlatform.buildRustPackage { src = ./make-initrd-ng; cargoLock.lockFile = ./make-initrd-ng/Cargo.lock; + + nativeBuildInputs = [ makeWrapper ]; + + postInstall = '' + wrapProgram $out/bin/make-initrd-ng \ + --prefix PATH : ${lib.makeBinPath [ patchelf glibc binutils ]} + ''; } diff --git a/pkgs/build-support/kernel/make-initrd-ng.nix b/pkgs/build-support/kernel/make-initrd-ng.nix index 1890bbcd173..5f0a70f8a96 100644 --- a/pkgs/build-support/kernel/make-initrd-ng.nix +++ b/pkgs/build-support/kernel/make-initrd-ng.nix @@ -8,7 +8,7 @@ let # compression type and filename extension. compressorName = fullCommand: builtins.elemAt (builtins.match "([^ ]*/)?([^ ]+).*" fullCommand) 1; in -{ stdenvNoCC, perl, cpio, ubootTools, lib, pkgsBuildHost, makeInitrdNGTool, patchelf, runCommand, glibc +{ stdenvNoCC, perl, cpio, ubootTools, lib, pkgsBuildHost, makeInitrdNGTool, patchelf, runCommand # Name of the derivation (not of the resulting file!) , name ? "initrd" @@ -72,7 +72,7 @@ in passAsFile = ["contents"]; contents = lib.concatMapStringsSep "\n" ({ object, symlink, ... }: "${object}\n${if symlink == null then "" else symlink}") contents + "\n"; - nativeBuildInputs = [makeInitrdNGTool patchelf glibc cpio] ++ lib.optional makeUInitrd ubootTools; + nativeBuildInputs = [makeInitrdNGTool patchelf cpio] ++ lib.optional makeUInitrd ubootTools; } '' mkdir ./root make-initrd-ng "$contentsPath" ./root diff --git a/pkgs/build-support/kernel/make-initrd-ng/src/main.rs b/pkgs/build-support/kernel/make-initrd-ng/src/main.rs index 1342734590f..294c570a374 100644 --- a/pkgs/build-support/kernel/make-initrd-ng/src/main.rs +++ b/pkgs/build-support/kernel/make-initrd-ng/src/main.rs @@ -6,7 +6,7 @@ use std::hash::Hash; use std::io::{BufReader, BufRead, Error, ErrorKind}; use std::os::unix; use std::path::{Component, Path, PathBuf}; -use std::process::{Command, Stdio}; +use std::process::Command; struct NonRepeatingQueue<T> { queue: VecDeque<T>, @@ -42,7 +42,6 @@ fn patch_elf<S: AsRef<OsStr>, P: AsRef<OsStr>>(mode: S, path: P) -> Result<Strin let output = Command::new("patchelf") .arg(&mode) .arg(&path) - .stderr(Stdio::inherit()) .output()?; if output.status.success() { Ok(String::from_utf8(output.stdout).expect("Failed to parse output")) @@ -51,16 +50,15 @@ fn patch_elf<S: AsRef<OsStr>, P: AsRef<OsStr>>(mode: S, path: P) -> Result<Strin } } -fn copy_file<P: AsRef<Path> + AsRef<OsStr>, S: AsRef<Path>>( +fn copy_file<P: AsRef<Path> + AsRef<OsStr>, S: AsRef<Path> + AsRef<OsStr>>( source: P, target: S, queue: &mut NonRepeatingQueue<Box<Path>>, ) -> Result<(), Error> { - fs::copy(&source, target)?; + fs::copy(&source, &target)?; if !Command::new("ldd").arg(&source).output()?.status.success() { - //stdout(Stdio::inherit()).stderr(Stdio::inherit()). - println!("{:?} is not dynamically linked. Not recursing.", OsStr::new(&source)); + // Not dynamically linked - no need to recurse return Ok(()); } @@ -91,6 +89,17 @@ fn copy_file<P: AsRef<Path> + AsRef<OsStr>, S: AsRef<Path>>( } } + // Make file writable to strip it + let mut permissions = fs::metadata(&target)?.permissions(); + permissions.set_readonly(false); + fs::set_permissions(&target, permissions)?; + + // Strip further than normal + if !Command::new("strip").arg("--strip-all").arg(OsStr::new(&target)).output()?.status.success() { + println!("{:?} was not successfully stripped.", OsStr::new(&target)); + } + + Ok(()) } @@ -200,7 +209,6 @@ fn main() -> Result<(), Error> { } } while let Some(obj) = queue.pop_front() { - println!("{:?}", obj); handle_path(out_path, &*obj, &mut queue)?; } |