{ 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! }; }