2023-02-09 11:40:11 +00:00
|
|
|
{ cmake
|
|
|
|
, dnsmasq
|
|
|
|
, fetchFromGitHub
|
|
|
|
, git
|
|
|
|
, gtest
|
|
|
|
, iproute2
|
|
|
|
, iptables
|
|
|
|
, lib
|
|
|
|
, libapparmor
|
|
|
|
, libvirt
|
|
|
|
, libxml2
|
|
|
|
, nixosTests
|
|
|
|
, openssl
|
|
|
|
, OVMF
|
|
|
|
, pkg-config
|
|
|
|
, qemu
|
|
|
|
, qemu-utils
|
|
|
|
, qtbase
|
|
|
|
, qtx11extras
|
|
|
|
, slang
|
|
|
|
, stdenv
|
|
|
|
, wrapQtAppsHook
|
|
|
|
, xterm
|
|
|
|
}:
|
|
|
|
|
|
|
|
let
|
|
|
|
pname = "multipass";
|
2023-02-16 17:41:37 +00:00
|
|
|
version = "1.11.1";
|
2023-02-09 11:40:11 +00:00
|
|
|
in
|
|
|
|
stdenv.mkDerivation {
|
|
|
|
inherit pname version;
|
|
|
|
|
|
|
|
src = fetchFromGitHub {
|
|
|
|
owner = "canonical";
|
|
|
|
repo = "multipass";
|
|
|
|
rev = "refs/tags/v${version}";
|
2023-02-16 17:41:37 +00:00
|
|
|
sha256 = "sha256-AIZs+NRAn/r9EjTx9InDZzS4ycni4MZQXmC0A5rpaJk=";
|
2023-02-09 11:40:11 +00:00
|
|
|
fetchSubmodules = true;
|
|
|
|
};
|
|
|
|
|
|
|
|
preConfigure = ''
|
|
|
|
substituteInPlace ./CMakeLists.txt \
|
|
|
|
--replace "determine_version(MULTIPASS_VERSION)" "" \
|
|
|
|
--replace 'set(MULTIPASS_VERSION ''${MULTIPASS_VERSION})' 'set(MULTIPASS_VERSION "v${version}")'
|
|
|
|
|
|
|
|
substituteInPlace ./src/platform/backends/qemu/linux/qemu_platform_detail_linux.cpp \
|
|
|
|
--replace "OVMF.fd" "${OVMF.fd}/FV/OVMF.fd" \
|
|
|
|
--replace "QEMU_EFI.fd" "${OVMF.fd}/FV/QEMU_EFI.fd"
|
|
|
|
'';
|
|
|
|
|
|
|
|
postPatch = ''
|
|
|
|
# Patch all of the places where Multipass expects the LXD socket to be provided by a snap
|
|
|
|
substituteInPlace ./src/network/network_access_manager.cpp \
|
|
|
|
--replace "/var/snap/lxd/common/lxd/unix.socket" "/var/lib/lxd/unix.socket"
|
|
|
|
|
|
|
|
substituteInPlace ./src/platform/backends/lxd/lxd_virtual_machine.cpp \
|
|
|
|
--replace "/var/snap/lxd/common/lxd/unix.socket" "/var/lib/lxd/unix.socket"
|
|
|
|
|
|
|
|
substituteInPlace ./src/platform/backends/lxd/lxd_request.h \
|
|
|
|
--replace "/var/snap/lxd/common/lxd/unix.socket" "/var/lib/lxd/unix.socket"
|
|
|
|
|
|
|
|
substituteInPlace ./tests/CMakeLists.txt \
|
|
|
|
--replace "FetchContent_MakeAvailable(googletest)" ""
|
|
|
|
|
|
|
|
cat >> tests/CMakeLists.txt <<'EOF'
|
|
|
|
add_library(gtest INTERFACE)
|
|
|
|
target_include_directories(gtest INTERFACE ${gtest.dev}/include)
|
|
|
|
target_link_libraries(gtest INTERFACE ${gtest}/lib/libgtest.so ''${CMAKE_THREAD_LIBS_INIT})
|
|
|
|
add_dependencies(gtest GMock)
|
|
|
|
|
|
|
|
add_library(gtest_main INTERFACE)
|
|
|
|
target_include_directories(gtest_main INTERFACE ${gtest.dev}/include)
|
|
|
|
target_link_libraries(gtest_main INTERFACE ${gtest}/lib/libgtest_main.so gtest)
|
|
|
|
|
|
|
|
add_library(gmock INTERFACE)
|
|
|
|
target_include_directories(gmock INTERFACE ${gtest.dev}/include)
|
|
|
|
target_link_libraries(gmock INTERFACE ${gtest}/lib/libgmock.so gtest)
|
|
|
|
|
|
|
|
add_library(gmock_main INTERFACE)
|
|
|
|
target_include_directories(gmock_main INTERFACE ${gtest.dev}/include)
|
|
|
|
target_link_libraries(gmock_main INTERFACE ${gtest}/lib/libgmock_main.so gmock gtest_main)
|
|
|
|
EOF
|
|
|
|
'';
|
|
|
|
|
|
|
|
buildInputs = [
|
|
|
|
gtest
|
|
|
|
libapparmor
|
|
|
|
libvirt
|
|
|
|
libxml2
|
|
|
|
openssl
|
|
|
|
qtbase
|
|
|
|
qtx11extras
|
|
|
|
];
|
|
|
|
|
|
|
|
nativeBuildInputs = [
|
|
|
|
cmake
|
|
|
|
git
|
|
|
|
pkg-config
|
|
|
|
slang
|
|
|
|
wrapQtAppsHook
|
|
|
|
];
|
|
|
|
|
|
|
|
nativeCheckInputs = [ gtest ];
|
|
|
|
|
|
|
|
postInstall = ''
|
|
|
|
wrapProgram $out/bin/multipassd --prefix PATH : ${lib.makeBinPath [
|
|
|
|
dnsmasq
|
|
|
|
iproute2
|
|
|
|
iptables
|
|
|
|
OVMF.fd
|
|
|
|
qemu
|
|
|
|
qemu-utils
|
|
|
|
xterm
|
|
|
|
]}
|
|
|
|
'';
|
|
|
|
|
|
|
|
passthru.tests = {
|
|
|
|
multipass = nixosTests.multipass;
|
|
|
|
};
|
|
|
|
|
|
|
|
meta = with lib; {
|
|
|
|
description = "Ubuntu VMs on demand for any workstation.";
|
|
|
|
homepage = "https://multipass.run";
|
|
|
|
license = licenses.gpl3Plus;
|
|
|
|
maintainers = with maintainers; [ jnsgruk ];
|
|
|
|
platforms = [ "x86_64-linux" ];
|
|
|
|
};
|
|
|
|
}
|