mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-02 11:03:57 +00:00
Merge release-22.11 into staging-next-22.11
This commit is contained in:
commit
e381db2e1c
@ -7,4 +7,5 @@
|
|||||||
</para>
|
</para>
|
||||||
<xi:include href="special/fhs-environments.section.xml" />
|
<xi:include href="special/fhs-environments.section.xml" />
|
||||||
<xi:include href="special/mkshell.section.xml" />
|
<xi:include href="special/mkshell.section.xml" />
|
||||||
|
<xi:include href="special/darwin-builder.section.xml" />
|
||||||
</chapter>
|
</chapter>
|
||||||
|
60
doc/builders/special/darwin-builder.section.md
Normal file
60
doc/builders/special/darwin-builder.section.md
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# darwin.builder {#sec-darwin-builder}
|
||||||
|
|
||||||
|
`darwin.builder` provides a way to bootstrap a Linux builder on a macOS machine.
|
||||||
|
|
||||||
|
This requires macOS version 12.4 or later.
|
||||||
|
|
||||||
|
This also requires that port 22 on your machine is free (since Nix does not
|
||||||
|
permit specifying a non-default SSH port for builders).
|
||||||
|
|
||||||
|
You will also need to be a trusted user for your Nix installation. In other
|
||||||
|
words, your `/etc/nix/nix.conf` should have something like:
|
||||||
|
|
||||||
|
```
|
||||||
|
extra-trusted-users = <your username goes here>
|
||||||
|
```
|
||||||
|
|
||||||
|
To launch the builder, run the following flake:
|
||||||
|
|
||||||
|
```ShellSession
|
||||||
|
$ nix run nixpkgs#darwin.builder
|
||||||
|
```
|
||||||
|
|
||||||
|
That will prompt you to enter your `sudo` password:
|
||||||
|
|
||||||
|
```
|
||||||
|
+ sudo --reset-timestamp /nix/store/…-install-credentials.sh ./keys
|
||||||
|
Password:
|
||||||
|
```
|
||||||
|
|
||||||
|
… so that it can install a private key used to `ssh` into the build server.
|
||||||
|
After that the script will launch the virtual machine:
|
||||||
|
|
||||||
|
```
|
||||||
|
<<< Welcome to NixOS 22.11.20220901.1bd8d11 (aarch64) - ttyAMA0 >>>
|
||||||
|
|
||||||
|
Run 'nixos-help' for the NixOS manual.
|
||||||
|
|
||||||
|
nixos login:
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note: When you need to stop the VM, type `Ctrl`-`a` + `c` to open the `qemu`
|
||||||
|
> prompt and then type `quit` followed by `Enter`
|
||||||
|
|
||||||
|
To delegate builds to the remote builder, add the following options to your
|
||||||
|
`nix.conf` file:
|
||||||
|
|
||||||
|
```
|
||||||
|
# - Replace ${ARCH} with either aarch64 or x86_64 to match your host machine
|
||||||
|
# - Replace ${MAX_JOBS} with the maximum number of builds (pick 4 if you're not sure)
|
||||||
|
builders = ssh-ng://builder@localhost ${ARCH}-linux /etc/nix/builder_ed25519 ${MAX_JOBS} - - - c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSUpCV2N4Yi9CbGFxdDFhdU90RStGOFFVV3JVb3RpQzVxQkorVXVFV2RWQ2Igcm9vdEBuaXhvcwo='
|
||||||
|
|
||||||
|
# Not strictly necessary, but this will reduce your disk utilization
|
||||||
|
builders-use-substitutes = true
|
||||||
|
```
|
||||||
|
|
||||||
|
… and then restart your Nix daemon to apply the change:
|
||||||
|
|
||||||
|
```ShellSession
|
||||||
|
$ sudo launchctl kickstart -k system/org.nixos.nix-daemon
|
||||||
|
```
|
7
nixos/modules/profiles/keys/ssh_host_ed25519_key
Normal file
7
nixos/modules/profiles/keys/ssh_host_ed25519_key
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||||
|
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||||
|
QyNTUxOQAAACCQVnMW/wZWqrdWrjrRPhfEFFq1KLYguagSflLhFnVQmwAAAJASuMMnErjD
|
||||||
|
JwAAAAtzc2gtZWQyNTUxOQAAACCQVnMW/wZWqrdWrjrRPhfEFFq1KLYguagSflLhFnVQmw
|
||||||
|
AAAEDIN2VWFyggtoSPXcAFy8dtG1uAig8sCuyE21eMDt2GgJBWcxb/Blaqt1auOtE+F8QU
|
||||||
|
WrUotiC5qBJ+UuEWdVCbAAAACnJvb3RAbml4b3MBAgM=
|
||||||
|
-----END OPENSSH PRIVATE KEY-----
|
1
nixos/modules/profiles/keys/ssh_host_ed25519_key.pub
Normal file
1
nixos/modules/profiles/keys/ssh_host_ed25519_key.pub
Normal file
@ -0,0 +1 @@
|
|||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJBWcxb/Blaqt1auOtE+F8QUWrUotiC5qBJ+UuEWdVCb root@nixos
|
134
nixos/modules/profiles/macos-builder.nix
Normal file
134
nixos/modules/profiles/macos-builder.nix
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
keysDirectory = "/var/keys";
|
||||||
|
|
||||||
|
user = "builder";
|
||||||
|
|
||||||
|
keyType = "ed25519";
|
||||||
|
|
||||||
|
in
|
||||||
|
|
||||||
|
{ imports = [
|
||||||
|
../virtualisation/qemu-vm.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# The builder is not intended to be used interactively
|
||||||
|
documentation.enable = false;
|
||||||
|
|
||||||
|
environment.etc = {
|
||||||
|
"ssh/ssh_host_ed25519_key" = {
|
||||||
|
mode = "0600";
|
||||||
|
|
||||||
|
source = ./keys/ssh_host_ed25519_key;
|
||||||
|
};
|
||||||
|
|
||||||
|
"ssh/ssh_host_ed25519_key.pub" = {
|
||||||
|
mode = "0644";
|
||||||
|
|
||||||
|
source = ./keys/ssh_host_ed25519_key.pub;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# DNS fails for QEMU user networking (SLiRP) on macOS. See:
|
||||||
|
#
|
||||||
|
# https://github.com/utmapp/UTM/issues/2353
|
||||||
|
#
|
||||||
|
# This works around that by using a public DNS server other than the DNS
|
||||||
|
# server that QEMU provides (normally 10.0.2.3)
|
||||||
|
networking.nameservers = [ "8.8.8.8" ];
|
||||||
|
|
||||||
|
nix.settings = {
|
||||||
|
auto-optimise-store = true;
|
||||||
|
|
||||||
|
min-free = 1024 * 1024 * 1024;
|
||||||
|
|
||||||
|
max-free = 3 * 1024 * 1024 * 1024;
|
||||||
|
|
||||||
|
trusted-users = [ "root" user ];
|
||||||
|
};
|
||||||
|
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
authorizedKeysFiles = [ "${keysDirectory}/%u_${keyType}.pub" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
system.build.macos-builder-installer =
|
||||||
|
let
|
||||||
|
privateKey = "/etc/nix/${user}_${keyType}";
|
||||||
|
|
||||||
|
publicKey = "${privateKey}.pub";
|
||||||
|
|
||||||
|
# This installCredentials script is written so that it's as easy as
|
||||||
|
# possible for a user to audit before confirming the `sudo`
|
||||||
|
installCredentials = pkgs.writeShellScript "install-credentials" ''
|
||||||
|
KEYS="''${1}"
|
||||||
|
INSTALL=${hostPkgs.coreutils}/bin/install
|
||||||
|
"''${INSTALL}" -g nixbld -m 600 "''${KEYS}/${user}_${keyType}" ${privateKey}
|
||||||
|
"''${INSTALL}" -g nixbld -m 644 "''${KEYS}/${user}_${keyType}.pub" ${publicKey}
|
||||||
|
'';
|
||||||
|
|
||||||
|
hostPkgs = config.virtualisation.host.pkgs;
|
||||||
|
|
||||||
|
in
|
||||||
|
hostPkgs.writeShellScriptBin "create-builder" ''
|
||||||
|
KEYS="''${KEYS:-./keys}"
|
||||||
|
${hostPkgs.coreutils}/bin/mkdir --parent "''${KEYS}"
|
||||||
|
PRIVATE_KEY="''${KEYS}/${user}_${keyType}"
|
||||||
|
PUBLIC_KEY="''${PRIVATE_KEY}.pub"
|
||||||
|
if [ ! -e "''${PRIVATE_KEY}" ] || [ ! -e "''${PUBLIC_KEY}" ]; then
|
||||||
|
${hostPkgs.coreutils}/bin/rm --force -- "''${PRIVATE_KEY}" "''${PUBLIC_KEY}"
|
||||||
|
${hostPkgs.openssh}/bin/ssh-keygen -q -f "''${PRIVATE_KEY}" -t ${keyType} -N "" -C 'builder@localhost'
|
||||||
|
fi
|
||||||
|
if ! ${hostPkgs.diffutils}/bin/cmp "''${PUBLIC_KEY}" ${publicKey}; then
|
||||||
|
(set -x; sudo --reset-timestamp ${installCredentials} "''${KEYS}")
|
||||||
|
fi
|
||||||
|
KEYS="$(nix-store --add "$KEYS")" ${config.system.build.vm}/bin/run-nixos-vm
|
||||||
|
'';
|
||||||
|
|
||||||
|
system.stateVersion = "22.05";
|
||||||
|
|
||||||
|
users.users."${user}"= {
|
||||||
|
isNormalUser = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
virtualisation = {
|
||||||
|
diskSize = 20 * 1024;
|
||||||
|
|
||||||
|
memorySize = 3 * 1024;
|
||||||
|
|
||||||
|
forwardPorts = [
|
||||||
|
{ from = "host"; guest.port = 22; host.port = 22; }
|
||||||
|
];
|
||||||
|
|
||||||
|
# Disable graphics for the builder since users will likely want to run it
|
||||||
|
# non-interactively in the background.
|
||||||
|
graphics = false;
|
||||||
|
|
||||||
|
sharedDirectories.keys = {
|
||||||
|
source = "\"$KEYS\"";
|
||||||
|
target = keysDirectory;
|
||||||
|
};
|
||||||
|
|
||||||
|
# If we don't enable this option then the host will fail to delegate builds
|
||||||
|
# to the guest, because:
|
||||||
|
#
|
||||||
|
# - The host will lock the path to build
|
||||||
|
# - The host will delegate the build to the guest
|
||||||
|
# - The guest will attempt to lock the same path and fail because
|
||||||
|
# the lockfile on the host is visible on the guest
|
||||||
|
#
|
||||||
|
# Snapshotting the host's /nix/store as an image isolates the guest VM's
|
||||||
|
# /nix/store from the host's /nix/store, preventing this problem.
|
||||||
|
useNixStoreImage = true;
|
||||||
|
|
||||||
|
# Obviously the /nix/store needs to be writable on the guest in order for it
|
||||||
|
# to perform builds.
|
||||||
|
writableStore = true;
|
||||||
|
|
||||||
|
# This ensures that anything built on the guest isn't lost when the guest is
|
||||||
|
# restarted.
|
||||||
|
writableStoreUseTmpfs = false;
|
||||||
|
};
|
||||||
|
}
|
@ -555,7 +555,7 @@ in {
|
|||||||
auto_assign_org_role = mkOption {
|
auto_assign_org_role = mkOption {
|
||||||
description = lib.mdDoc "Default role new users will be auto assigned.";
|
description = lib.mdDoc "Default role new users will be auto assigned.";
|
||||||
default = "Viewer";
|
default = "Viewer";
|
||||||
type = types.enum ["Viewer" "Editor"];
|
type = types.enum ["Viewer" "Editor" "Admin"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -160,6 +160,7 @@ stdenv.mkDerivation rec {
|
|||||||
preFixup = ''
|
preFixup = ''
|
||||||
gappsWrapperArgs+=(
|
gappsWrapperArgs+=(
|
||||||
--prefix GSETTINGS_SCHEMA_DIR : "$out/share/gsettings-schemas/${pname}-${version}/glib-2.0/schemas/"
|
--prefix GSETTINGS_SCHEMA_DIR : "$out/share/gsettings-schemas/${pname}-${version}/glib-2.0/schemas/"
|
||||||
|
--prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS"
|
||||||
)
|
)
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -29,13 +29,13 @@
|
|||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "vengi-tools";
|
pname = "vengi-tools";
|
||||||
version = "0.0.22";
|
version = "0.0.23";
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "mgerhardy";
|
owner = "mgerhardy";
|
||||||
repo = "vengi";
|
repo = "vengi";
|
||||||
rev = "v${version}";
|
rev = "v${version}";
|
||||||
sha256 = "sha256-OlOnr1Spy8kdie9CyLVOQkY1+ib6Uwcd/xP5TSaZkYg=";
|
sha256 = "sha256-wRqQ7x6eQTrzFU++Qgq/7NXXo5F1onlZBdQ9ttNvvEw=";
|
||||||
};
|
};
|
||||||
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{ lib, fetchFromGitHub, pkgs, python3, wrapGAppsHook}:
|
{ lib, fetchFromGitHub, pkgs, python3, wrapGAppsHook, gobject-introspection }:
|
||||||
|
|
||||||
python3.pkgs.buildPythonApplication {
|
python3.pkgs.buildPythonApplication {
|
||||||
pname = "pdf-quench";
|
pname = "pdf-quench";
|
||||||
@ -11,10 +11,9 @@ python3.pkgs.buildPythonApplication {
|
|||||||
sha256 = "1rp9rlwr6rarcsxygv5x2c5psgwl6r69k0lsgribgyyla9cf2m7n";
|
sha256 = "1rp9rlwr6rarcsxygv5x2c5psgwl6r69k0lsgribgyyla9cf2m7n";
|
||||||
};
|
};
|
||||||
|
|
||||||
nativeBuildInputs = [ wrapGAppsHook ];
|
nativeBuildInputs = [ wrapGAppsHook gobject-introspection ];
|
||||||
buildInputs = with pkgs; [
|
buildInputs = with pkgs; [
|
||||||
gtk3
|
gtk3
|
||||||
gobject-introspection
|
|
||||||
goocanvas2
|
goocanvas2
|
||||||
poppler_gi
|
poppler_gi
|
||||||
];
|
];
|
||||||
|
@ -49,7 +49,7 @@ let
|
|||||||
in
|
in
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "github-runner";
|
pname = "github-runner";
|
||||||
version = "2.300.0";
|
version = "2.300.2";
|
||||||
|
|
||||||
inherit sdkSource;
|
inherit sdkSource;
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ stdenv.mkDerivation rec {
|
|||||||
owner = "actions";
|
owner = "actions";
|
||||||
repo = "runner";
|
repo = "runner";
|
||||||
rev = "v${version}";
|
rev = "v${version}";
|
||||||
hash = "sha256-pEBudX285qMz0W8Sog0ph2CA5UclBItQ+ixaBi6dl8I=";
|
hash = "sha256-4TCClrCCHMVtbGAlxmAhZt63nQlMxkaLLZ9EOgurSMA=";
|
||||||
};
|
};
|
||||||
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
|
@ -33,6 +33,7 @@ python3Packages.buildPythonApplication rec {
|
|||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
meson
|
meson
|
||||||
pkg-config
|
pkg-config
|
||||||
|
gobject-introspection
|
||||||
glib
|
glib
|
||||||
ninja
|
ninja
|
||||||
gtk3
|
gtk3
|
||||||
|
@ -205,4 +205,23 @@ impure-cmds // appleSourcePackages // chooseLibs // {
|
|||||||
|
|
||||||
discrete-scroll = callPackage ../os-specific/darwin/discrete-scroll { };
|
discrete-scroll = callPackage ../os-specific/darwin/discrete-scroll { };
|
||||||
|
|
||||||
|
# See doc/builders/special/darwin-builder.section.md
|
||||||
|
builder =
|
||||||
|
let
|
||||||
|
toGuest = builtins.replaceStrings [ "darwin" ] [ "linux" ];
|
||||||
|
|
||||||
|
nixos = import ../../nixos {
|
||||||
|
configuration = {
|
||||||
|
imports = [
|
||||||
|
../../nixos/modules/profiles/macos-builder.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
virtualisation.host = { inherit pkgs; };
|
||||||
|
};
|
||||||
|
|
||||||
|
system = toGuest stdenv.hostPlatform.system;
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
nixos.config.system.build.macos-builder-installer;
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user