diff options
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/applications/misc/multibootusb')
-rw-r--r-- | infra/libkookie/nixpkgs/pkgs/applications/misc/multibootusb/default.nix | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/misc/multibootusb/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/misc/multibootusb/default.nix new file mode 100644 index 000000000000..c1c7b5a2706e --- /dev/null +++ b/infra/libkookie/nixpkgs/pkgs/applications/misc/multibootusb/default.nix @@ -0,0 +1,114 @@ +{ fetchFromGitHub, libxcb, mtools, p7zip, parted, procps, qemu, unzip, zip, + coreutils, gnugrep, which, gnused, e2fsprogs, autoPatchelfHook, gptfdisk, + python36Packages, qt5, runtimeShell, stdenv, util-linux, wrapQtAppsHook }: + +# Note: Multibootusb is tricky to maintain. It relies on the +# $PYTHONPATH variable containing some of their code, so that +# something like: +# +# from scripts import config +# +# works. It also relies on the current directory to find some runtime +# resources thanks to a use of __file__. +# +# https://github.com/mbusb/multibootusb/blob/0d34d70c3868f1d7695cfd141141b17c075de967/scripts/osdriver.py#L59 + +python36Packages.buildPythonApplication rec { + pname = "multibootusb"; + name = "${pname}-${version}"; + version = "9.2.0"; + + nativeBuildInputs = [ + wrapQtAppsHook + autoPatchelfHook + unzip + zip + ]; + + runTimeDeps = [ + coreutils + gnugrep + which + parted + util-linux + qemu + p7zip + gnused + mtools + procps + e2fsprogs + gptfdisk + ]; + + buildInputs = [ + libxcb + python36Packages.python + qt5.full + ]; + + src = fetchFromGitHub { + owner = "mbusb"; + repo = pname; + rev = "v${version}"; + + sha256 = "0wlan0cp6c2i0nahixgpmkm0h4n518gj8rc515d579pqqp91p2h3"; + }; + + # Tests can't run inside the NixOS sandbox + # "Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory" + doCheck = false; + + pythonPath = [ + python36Packages.dbus-python + python36Packages.pyqt5 + python36Packages.pytest-shutil + python36Packages.pyudev + python36Packages.six + ]; + + # multibootusb ships zips with various versions of syslinux, we need to patchelf them + postPatch = '' + for zip in $(find . -name "*.zip"); do + zip=$(readlink -f $zip) + target="$(mktemp -d)" + pushd $target + unzip $zip + rm $zip + autoPatchelf . + zip -r $zip * + popd + done + ''; + + postInstall = '' + # This script doesn't work and it doesn't add much anyway + rm $out/bin/multibootusb-pkexec + + # The installed data isn't sufficient for whatever reason, missing gdisk/gdisk.exe + mkdir -p "$out/share/${pname}" + cp -r data "$out/share/${pname}/data" + ''; + + preFixup = '' + makeWrapperArgs+=( + # Firstly, add all necessary QT variables + "''${qtWrapperArgs[@]}" + + # Then, add the installed scripts/ directory to the python path + --prefix "PYTHONPATH" ":" "$out/lib/${python36Packages.python.libPrefix}/site-packages" + + # Add some runtime dependencies + --prefix "PATH" ":" "${stdenv.lib.makeBinPath runTimeDeps}" + + # Finally, move to directory that contains data + --run "cd $out/share/${pname}" + ) + ''; + + meta = with stdenv.lib; { + description = "Multiboot USB creator for Linux live disks"; + homepage = "http://multibootusb.org/"; + license = licenses.gpl2; + maintainers = []; # Looking for a maintainer! + }; +} |