diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix index e5f2f6402293..99146e827f81 100644 --- a/maintainers/team-list.nix +++ b/maintainers/team-list.nix @@ -141,6 +141,16 @@ with lib.maintainers; enableFeatureFreezePing = true; }; + cockpit = { + members = [ + alexandru0-dev + andre4ik3 + lucasew + ]; + scope = "Maintain Cockpit and official plugins by the Cockpit project."; + shortName = "Cockpit"; + }; + coq = { members = [ cohencyril diff --git a/nixos/modules/services/monitoring/cockpit.nix b/nixos/modules/services/monitoring/cockpit.nix index 8a7192f635eb..a349e2b22611 100644 --- a/nixos/modules/services/monitoring/cockpit.nix +++ b/nixos/modules/services/monitoring/cockpit.nix @@ -15,6 +15,33 @@ let mkPackageOption ; settingsFormat = pkgs.formats.ini { }; + + pathPkgs = [ cfg.package ] ++ cfg.plugins; + + resourcesEnv = pkgs.buildEnv { + name = "cockpit-plugins"; + paths = pathPkgs; + pathsToLink = [ "/share/cockpit" ]; + }; + + depsEnv = pkgs.buildEnv { + name = "cockpit-plugins-env"; + paths = lib.concatMap (p: p.passthru.cockpitPath or [ ]) pathPkgs; + pathsToLink = [ + "/bin" + "/share" + "/lib" + ]; + }; + + share = pkgs.buildEnv { + name = "cockpit-share"; + paths = [ + resourcesEnv + depsEnv + ]; + pathsToLink = [ "/share" ]; + }; in { options = { @@ -100,22 +127,11 @@ in }; # Add plugins in discoverable folder - "cockpit/share/cockpit".source = "${ - pkgs.buildEnv { - name = "cockpit-plugins"; - paths = cfg.plugins ++ [ cfg.package ]; - pathsToLink = [ "/share/cockpit" ]; - } - }/share/cockpit"; + "cockpit/share".source = "${share}/share"; # Add plugins dependencies - "cockpit/bin".source = "${ - pkgs.buildEnv { - name = "cockpit-path"; - paths = lib.concatMap (p: p.passthru.cockpitPath or [ ]) cfg.plugins; - pathsToLink = [ "/bin" ]; - } - }/bin"; + "cockpit/bin".source = "${depsEnv}/bin"; + "cockpit/lib".source = "${depsEnv}/lib"; }; security.pam.services.cockpit = { diff --git a/pkgs/by-name/co/cockpit-files/package.nix b/pkgs/by-name/co/cockpit-files/package.nix new file mode 100644 index 000000000000..5b1ac0e97489 --- /dev/null +++ b/pkgs/by-name/co/cockpit-files/package.nix @@ -0,0 +1,56 @@ +{ + lib, + stdenv, + cockpit, + nodejs, + gettext, + writeShellScriptBin, + fetchFromGitHub, + gitUpdater, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "cockpit-files"; + version = "34"; + + src = fetchFromGitHub { + owner = "cockpit-project"; + repo = "cockpit-files"; + tag = finalAttrs.version; + hash = "sha256-nxlPzNrX3mAwhR8mpRfoZ7d6tdfVOBEaTtzEHU14p68="; + + fetchSubmodules = true; + postFetch = "cp $out/node_modules/.package-lock.json $out/package-lock.json"; + }; + + buildInputs = [ + nodejs + gettext + (writeShellScriptBin "git" "true") + ]; + + cockpitSrc = cockpit.src; + + postPatch = '' + mkdir -p pkg; cp -r $cockpitSrc/pkg/lib pkg + mkdir -p test; cp -r $cockpitSrc/test/common test + + substituteInPlace Makefile \ + --replace-fail '$(MAKE) package-lock.json' 'true' \ + --replace-fail '$(COCKPIT_REPO_FILES) | tar x' "" \ + --replace-fail '/usr/local' "$out" + + patchShebangs build.js + ''; + + passthru.updateScript = gitUpdater { }; + + meta = { + description = "Featureful file browser for Cockpit"; + homepage = "https://github.com/cockpit-project/cockpit-files"; + changelog = "https://github.com/cockpit-project/cockpit-files/releases/tag/${finalAttrs.version}"; + platforms = lib.platforms.linux; + license = [ lib.licenses.lgpl21 ]; + teams = [ lib.teams.cockpit ]; + }; +}) diff --git a/pkgs/by-name/co/cockpit-machines/package.nix b/pkgs/by-name/co/cockpit-machines/package.nix new file mode 100644 index 000000000000..742f72328bac --- /dev/null +++ b/pkgs/by-name/co/cockpit-machines/package.nix @@ -0,0 +1,67 @@ +{ + lib, + stdenv, + cockpit, + nodejs, + gettext, + writeShellScriptBin, + fetchFromGitHub, + gitUpdater, + libosinfo, + osinfo-db, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "cockpit-machines"; + version = "346"; + + src = fetchFromGitHub { + owner = "cockpit-project"; + repo = "cockpit-machines"; + tag = finalAttrs.version; + hash = "sha256-fsEmxJ/9w4NbjgKhb4JTFY94FFTc735+ZQ8YieLQVpA="; + + fetchSubmodules = true; + postFetch = "cp $out/node_modules/.package-lock.json $out/package-lock.json"; + }; + + buildInputs = [ + nodejs + gettext + (writeShellScriptBin "git" "true") + ]; + + cockpitSrc = cockpit.src; + + postPatch = '' + mkdir -p pkg; cp -r $cockpitSrc/pkg/lib pkg + mkdir -p test; cp -r $cockpitSrc/test/common test + + substituteInPlace Makefile \ + --replace-fail '$(MAKE) package-lock.json' 'true' \ + --replace-fail '$(COCKPIT_REPO_FILES) | tar x' "" \ + --replace-fail '/usr/local' "$out" + + substituteInPlace src/manifest.json \ + --replace-fail '"/usr/share/dbus-1/system.d/org.libvirt.conf"' '"/etc/systemd/system/libvirt-dbus.service"' + + patchShebangs build.js + ''; + + passthru = { + updateScript = gitUpdater { }; + cockpitPath = [ + libosinfo + osinfo-db + ]; + }; + + meta = { + description = "Cockpit UI for virtual machines"; + homepage = "https://github.com/cockpit-project/cockpit-machines"; + changelog = "https://github.com/cockpit-project/cockpit-machines/releases/tag/${finalAttrs.version}"; + platforms = lib.platforms.linux; + license = [ lib.licenses.lgpl21 ]; + teams = [ lib.teams.cockpit ]; + }; +}) diff --git a/pkgs/by-name/co/cockpit-podman/package.nix b/pkgs/by-name/co/cockpit-podman/package.nix new file mode 100644 index 000000000000..d4cd27c96f5c --- /dev/null +++ b/pkgs/by-name/co/cockpit-podman/package.nix @@ -0,0 +1,63 @@ +{ + lib, + stdenv, + cockpit, + nodejs, + gettext, + writeShellScriptBin, + fetchFromGitHub, + gitUpdater, + podman, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "cockpit-podman"; + version = "119.1"; + + src = fetchFromGitHub { + owner = "cockpit-project"; + repo = "cockpit-podman"; + tag = finalAttrs.version; + hash = "sha256-XAOHkul9oh1mUJ27ghJgZLtriBGjofyoGhQ3gb7Gunc="; + + fetchSubmodules = true; + postFetch = "cp $out/node_modules/.package-lock.json $out/package-lock.json"; + }; + + buildInputs = [ + nodejs + gettext + (writeShellScriptBin "git" "true") + ]; + + cockpitSrc = cockpit.src; + + postPatch = '' + mkdir -p pkg; cp -r $cockpitSrc/pkg/lib pkg + mkdir -p test; cp -r $cockpitSrc/test/common test + + substituteInPlace Makefile \ + --replace-fail '$(MAKE) package-lock.json' 'true' \ + --replace-fail '$(COCKPIT_REPO_FILES) | tar x' "" \ + --replace-fail '/usr/local' "$out" + + substituteInPlace src/manifest.json \ + --replace-fail '"/lib/systemd' '"/run/current-system/sw/lib/systemd' + + patchShebangs build.js + ''; + + passthru = { + updateScript = gitUpdater { }; + cockpitPath = [ podman ]; + }; + + meta = { + description = "Cockpit UI for podman containers"; + homepage = "https://github.com/cockpit-project/cockpit-podman"; + changelog = "https://github.com/cockpit-project/cockpit-podman/releases/tag/${finalAttrs.version}"; + platforms = lib.platforms.linux; + license = [ lib.licenses.lgpl21 ]; + teams = [ lib.teams.cockpit ]; + }; +}) diff --git a/pkgs/by-name/co/cockpit/package.nix b/pkgs/by-name/co/cockpit/package.nix index acee0c9e2a02..a5ce3e74a015 100644 --- a/pkgs/by-name/co/cockpit/package.nix +++ b/pkgs/by-name/co/cockpit/package.nix @@ -14,6 +14,7 @@ git, glib, glib-networking, + gobject-introspection, gnused, gnutls, hostname, @@ -160,15 +161,23 @@ stdenv.mkDerivation (finalAttrs: { --replace-warn '"/usr/share' '"/run/current-system/sw/share' \ --replace-warn '"/lib/systemd' '"/run/current-system/sw/lib/systemd' - # replace reference to system python interpreter, used for e.g. sosreport - substituteInPlace pkg/lib/python.ts \ - --replace-fail /usr/libexec/platform-python ${python3Packages.python.interpreter} + # fix polkit agent helper path + substituteInPlace src/cockpit/polkit.py \ + --replace-fail "/usr/lib/polkit-1/polkit-agent-helper-1" "/run/wrappers/bin/polkit-agent-helper-1" ''; configureFlags = [ "--enable-prefix-only=yes" "--disable-pcp" # TODO: figure out how to package its dependency - "--with-default-session-path=${placeholder "out"}/bin:/etc/cockpit/bin:${util-linux}/bin:/run/wrappers/bin:/run/current-system/sw/bin" + "--with-default-session-path=${ + lib.makeBinPath [ + (placeholder "out") + "/etc/cockpit" + util-linux + "/run/wrappers" + "/run/current-system/sw" + ] + }" "--with-admin-group=root" # TODO: really? Maybe "wheel"? ]; @@ -192,8 +201,15 @@ stdenv.mkDerivation (finalAttrs: { for binary in $out/bin/cockpit-bridge $out/libexec/cockpit-askpass; do chmod +x $binary wrapProgram $binary \ - --prefix PYTHONPATH : $out/${python3Packages.python.sitePackages} \ - --prefix XDG_DATA_DIRS : /etc/cockpit/share # Cockpit apps will be stored at /etc/cockpit/share/cockpit/ (managed by Cockpit nixos service) + --prefix PATH : "/etc/cockpit/bin" \ + --prefix PYTHONPATH : ${ + lib.makeSearchPath python3Packages.python.sitePackages [ + "$out" + "/etc/cockpit" + ] + } \ + --prefix GI_TYPELIB_PATH : "/etc/cockpit/lib/girepository-1.0" \ + --prefix XDG_DATA_DIRS : "/etc/cockpit/share" done patchShebangs $out/share/cockpit/issue/update-issue @@ -256,6 +272,12 @@ stdenv.mkDerivation (finalAttrs: { passthru = { tests = { inherit (nixosTests) cockpit; }; updateScript = nix-update-script { }; + cockpitPath = [ + glib + gobject-introspection + python3Packages.python + python3Packages.pygobject3 + ]; }; meta = { @@ -264,9 +286,6 @@ stdenv.mkDerivation (finalAttrs: { homepage = "https://cockpit-project.org/"; changelog = "https://cockpit-project.org/blog/cockpit-${finalAttrs.version}.html"; license = lib.licenses.lgpl21; - maintainers = with lib.maintainers; [ - lucasew - andre4ik3 - ]; + teams = [ lib.teams.cockpit ]; }; })