diff options
author | huantian <davidtianli@gmail.com> | 2023-04-05 22:19:55 -0700 |
---|---|---|
committer | huantian <davidtianli@gmail.com> | 2023-05-08 21:59:21 -0700 |
commit | cdd10639457bf2a79d88ce11ea60a075710ae398 (patch) | |
tree | cea5a6fc3fcb0322569438f70de5ed7cbf36c783 /pkgs/tools/package-management/dpkg | |
parent | 060e8eee747772fe07b4751404ddcf998aeccbf3 (diff) |
dpkg: add setup-hook for unpacking .deb files
Diffstat (limited to 'pkgs/tools/package-management/dpkg')
-rw-r--r-- | pkgs/tools/package-management/dpkg/default.nix | 2 | ||||
-rw-r--r-- | pkgs/tools/package-management/dpkg/setup-hook.sh | 12 |
2 files changed, 14 insertions, 0 deletions
diff --git a/pkgs/tools/package-management/dpkg/default.nix b/pkgs/tools/package-management/dpkg/default.nix index cb1c67e2e90df..e074ef05d97e5 100644 --- a/pkgs/tools/package-management/dpkg/default.nix +++ b/pkgs/tools/package-management/dpkg/default.nix @@ -71,6 +71,8 @@ stdenv.mkDerivation rec { cp -r scripts/t/origins $out/etc/dpkg ''; + setupHook = ./setup-hook.sh; + meta = with lib; { description = "The Debian package manager"; homepage = "https://wiki.debian.org/Teams/Dpkg"; diff --git a/pkgs/tools/package-management/dpkg/setup-hook.sh b/pkgs/tools/package-management/dpkg/setup-hook.sh new file mode 100644 index 0000000000000..326f06eff3188 --- /dev/null +++ b/pkgs/tools/package-management/dpkg/setup-hook.sh @@ -0,0 +1,12 @@ +unpackCmdHooks+=(_tryDpkgDeb) +_tryDpkgDeb() { + if ! [[ "$curSrc" =~ \.deb$ ]]; then return 1; fi + # Don't use dpkg-deb -x as that will error if the archive contains a file + # or directory with a setuid bit in its permissions. This is because dpkg + # calls tar internally with the -p flag, preserving file permissions. + # + # We instead only use dpkg-deb to extract the tarfile containing the files + # we want from the .deb, then finish extracting with tar directly. + mkdir root + dpkg-deb --fsys-tarfile "$curSrc" | tar --extract --directory=root +} |