Code change:
Cockpit is a server manager that makes it easy to administer your GNU/Linux servers via a web browser. Website: http://cockpit- Upstream: License: LGPL2.1 Arch Linux package: !
Could be a lot of effort to port: ... I have not looked at the code how many assumption it makes about the system, but in terms of system configuration nixos is a special snow flake.
Probably only a subset will work. But I think there is some stuff in cockpit that is helpful even on NixOS: View journald logs and systemd services Manage virtual machines via libvirt Get a shell terminal from the Web UI Some general system information like disk usage etc. It's mostly read only stuff but I'm not sure how easy it is to only use parts of cockpit that would work.
+1, would love to have this
Given that NixOS is pitched as a server os first, this would be very helpful. I already tried to but got stuck because it requires a few npm packages
try with
Thank you for your contributions. This has been automatically marked as stale because it has had no activity for 180 days. If this is still important to you, we ask that you leave a comment below. Your comment can be as simple as "still important to me". This lets people see that at least one person still cares about this. Someone will have to do this at most twice a year if there is no other activity. Here are suggestions that might help resolve this more quickly: for maintainers and people that previously touched the related code and @ mention them in a comment. on the . 3. Ask on the on .
I still think it would be good to have this in NixOS.
Well as pointed out, there will be quite a lot of patching up paths to do, as well as the NPM packages that need installing (try yarn2nix or npm2nix for that) Seeing as it's non-trivial, it will have to be packaged by someone with real interest in getting it, and we can assist (make a draft PR and tag us on questions)
node is only required for the dev environment I have made packaging cockpit, it still fails to compile tho Any help would be greatly appreciated
building build flags: SHELL=/nix/store/5hplxs3kprdp6v62qk3di6a1m1s1paiq-bash-4.4-p23/bin/bash GEN src/ws/mock-dbus-tests.h Traceback (most recent call last): File "/nix/store/5zajbm8674d93nix4h8b0hxgglj2pbir-glib-2.64.3-dev/bin/gdbus-codegen", line 53, in <modulefrom codegen import codegenmain File "/nix/store/5zajbm8674d93nix4h8b0hxgglj2pbir-glib-2.64.3-dev/share/glib-", line 24, in <moduleimport argparse File "/nix/store/jli50q24fvik6pfsnjs1jd90g3dy4p6y-python3-", line 88, in <moduleimport re as _re File "/nix/store/jli50q24fvik6pfsnjs1jd90g3dy4p6y-python3-", line 145, in <moduleclass RegexFlag(enum.IntFlag): AttributeError: module 'enum' has no attribute 'IntFlag' make: * [Makefile:: src/ws/mock-dbus-tests.h] Error 1 error: --- Error
----------- nix-build error: --- Error --- nix-daemon builder for '/nix/store/mdiihwskfp862y17wp70skdy74kh33v5-cockpit-' failed with exit code 2; last 10 log lines: File "/nix/store/5zajbm8674d93nix4h8b0hxgglj2pbir-glib-2.64.3-dev/bin/gdbus-codegen", line 53, in <modulefrom codegen import codegenmain File "/nix/store/5zajbm8674d93nix4h8b0hxgglj2pbir-glib-2.64.3-dev/share/glib-", line 24, in <moduleimport argparse File "/nix/store/jli50q24fvik6pfsnjs1jd90g3dy4p6y-python3-", line 88, in <moduleimport re as _re File "/nix/store/jli50q24fvik6pfsnjs1jd90g3dy4p6y-python3-", line 145, in <moduleclass RegexFlag(enum.IntFlag): AttributeError: module 'enum' has no attribute 'IntFlag' make: * [Makefile:: src/ws/mock-dbus-tests.h] Error 1 Seems like an error in the package itself.
The enum thing is due to a stray enum34 dependency in - enum34 is a backport of the enum module, and breaks things if it's installed on Python = 3.4. You'll need to look at why pyscss is pulling in enum34 - it's not immediately obvious to me from pyscss's , it looks correct. A pthread link error happens if that's fixed or if Python is removed from the deps entirely. That pthread link error is, I believe, a problem with the Cockpit makefiles; I made to fix it. With that change applied, I get I don't know anything about the Javascript packaging, so no idea how to progress from here. Good luck!
It compiles but gets stuck writing it's systemd.service files. I don't have much experience packaging applications which hook into systemd
How’s the effort? :crossedfingers: :crossedfingers: :crossed_fingers:
If this gonna work I could start replacing my with
I have updated nix to solve the issue of beside updating the version and it built successfully
I built the derivation posted by by including in my . It built successfully, producing . The output includes many things for like systemd units that do not get installed on the system - I'm wondering if these should be symlinked in as-is, or do they need to be converted to Nix? Most systemd units look OK but will need a fix to replace a reference to :
If is changed to (in patch below), and is to , the units get installed but are not enabled. The package also has references to and , please let me know if you know how best to patch these: I patched the reference to , and replaced with just due to build warning. Here's what I have, building entirely on what others have contributed to this thread:
I considered running the docker container, but it requires and proceeds to modify the host's PAM config. Not something I personally like to see in a docker container... Back to the Nixpkgs. I was able to use so that has references to coreutils programs and patched the certificate paths to be . was because of patches to . Right now it fails running with SIGSEGV. I thought it might be systemd's setting, but it does the same outside invocation by systemd. I tried building newer versions of cockpit, but I kept running into There are some notes that might be helpful. Here's the latest packaging attempt: Even though I've posted like 4 times in a row, I think I'm done trying to do this. I hope someone else can pick up the effort.
I was able to get past this by changing the interpreter in from to . Note that, for some reason, doesn't work. You also have to run , because Nix resets its date and that breaks the "is packages- newer than " check. I also had to replace with in . What's odd is that all of the scripts run correctly when run from . When this is done, will just error with "Cannot find module stdio".
Spent some time learning nix by giving this a shot and actually ended up getting things to start. A lot of things are not working, but some might be possible to fix. For anyone interested I have left things here:
Another take on it Tested features: Logs Virtual Machines (cockpit-machines module, only managing works, creation of new VMs doesn't work) Services Terminal Code:
Tried to create a virtual machine, no luck, OS list is empty. Cannot create VM without choosing the operating system. I tried to fix it but I got the following error: !
I came across this discussion in the upstream project and figured it might be helpful to cross-reference:
You require libosinfo, and osinfo-db
I would to keep working on this issue, any hints you got for me would be welcomed. I do see any errors in my log
I am also working on this Here is what I have so far: It's building only. I was able to solve some documentation build bugs.
:eyes: !

Related discussion:
text: <ins> import ./make-test-python.nix ( { pkgs, lib, ... }: let user = "alice"; # from ./common/user-account.nix password = "foobar"; # from ./common/user-account.nix in { name = "cockpit"; meta = { maintainers = with lib.maintainers; [ lucasew ]; }; nodes = { server = { config, ... }: { imports = [ ./common/user-account.nix ]; security.polkit.enable = true; users.users.${user} = { extraGroups = [ "wheel" ]; }; services.cockpit = { enable = true; openFirewall = true; settings = { WebService = { Origins = "https://server:9090"; }; }; }; }; client = { config, ... }: { imports = [ ./common/user-account.nix ]; environment.systemPackages = let seleniumScript = pkgs.writers.writePython3Bin "selenium-script" { libraries = with pkgs.python3Packages; [ selenium ]; } '' from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from time import sleep def log(msg): from sys import stderr print(f"[*] {msg}", file=stderr) log("Initializing") options = Options() options.add_argument("--headless") driver = webdriver.Firefox(options=options) driver.implicitly_wait(10) log("Opening homepage") driver.get("https://server:9090") wait = WebDriverWait(driver, 60) def wait_elem(by, query): wait.until(EC.presence_of_element_located((by, query))) def wait_title_contains(title): wait.until(EC.title_contains(title)) def find_element(by, query): return driver.find_element(by, query) def set_value(elem, value): script = 'arguments[0].value = arguments[1]' return driver.execute_script(script, elem, value) log("Waiting for the homepage to load") # cockpit sets initial title as hostname wait_title_contains("server") wait_elem(By.CSS_SELECTOR, 'input#login-user-input') log("Homepage loaded!") log("Filling out username") login_input = find_element(By.CSS_SELECTOR, 'input#login-user-input') set_value(login_input, "${user}") log("Filling out password") password_input = find_element(By.CSS_SELECTOR, 'input#login-password-input') set_value(password_input, "${password}") log("Submiting credentials for login") driver.find_element(By.CSS_SELECTOR, 'button#login-button').click() # driver.implicitly_wait(1) # driver.get("https://server:9090/system") log("Waiting dashboard to load") wait_title_contains("${user}@server") log("Waiting for the frontend to initalize") sleep(1) log("Looking for that banner that tells about limited access") container_iframe = find_element(By.CSS_SELECTOR, 'iframe.container-frame') driver.switch_to.frame(container_iframe) assert "Web console is running in limited access mode" in driver.page_source driver.close() ''; in with pkgs; [ firefox-unwrapped geckodriver seleniumScript ]; }; }; testScript = '' start_all() server.wait_for_open_port(9090) server.wait_for_unit("network.target") server.wait_for_unit("multi-user.target") server.systemctl("start", "polkit") client.wait_for_unit("multi-user.target") client.succeed("curl -k https://server:9090 -o /dev/stderr") print(client.succeed("whoami")) client.succeed('PYTHONUNBUFFERED=1 selenium-script') ''; } ) </ins>