Skip to content

Comments

OVMF: add cloudHypervisorSupport#297475

Merged
adamcstephens merged 1 commit intoNixOS:masterfrom
astro:ovmf-chv
Apr 19, 2024
Merged

OVMF: add cloudHypervisorSupport#297475
adamcstephens merged 1 commit intoNixOS:masterfrom
astro:ovmf-chv

Conversation

@astro
Copy link
Contributor

@astro astro commented Mar 20, 2024

Description of changes

cloud-hypervisor has its own edk2 fork which seems to have been upstreamed.

Caveats:

  • I'd love to just add this to default build but the build configuration seems disjoint. What is a better name than cloudHypervisorSupport to indicate that?
  • Couldn't get it to build with msVarsArgs though Secure Boot isn't supported by cloud-hypervisor anyway.
  • Compared to cloud-hypervisor's binary releases I haven't been able to boot this but I don't think the packaging is to blame.

Things done

  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)
    • sandbox = relaxed
    • sandbox = true
  • Tested, as applicable:
  • Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
  • Tested basic functionality of all binary files (usually in ./result/bin/)
  • 24.05 Release Notes (or backporting 23.05 and 23.11 Release notes)
    • (Package updates) Added a release notes entry if the change is major or breaking
    • (Module updates) Added a release notes entry if the change is significant
    • (Module addition) Added a release notes entry if adding a new NixOS module
  • Fits CONTRIBUTING.md.

Add a 👍 reaction to pull requests you find important.

@ofborg ofborg bot added 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin. 10.rebuild-linux: 0 This PR does not cause any packages to rebuild on Linux. labels Mar 20, 2024
Copy link
Member

@RaitoBezarius RaitoBezarius left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please just generalize the projectDscPath and fwPrefix and make it an input and make it default to OVMF and the classical table for all platforms.

Enabling Cloud Hypervisor support means passing callPackage OVMF { projectDscPath = "OvmfPkg/CloudHv/CloudHvX64.dsc"; fwPrefix = "CLOUDHV"; } then.

@astro
Copy link
Contributor Author

astro commented Mar 21, 2024

@RaitoBezarius Thank you for proposing a better way.

@astro astro requested a review from RaitoBezarius March 21, 2024 01:27
@ofborg ofborg bot added 8.has: package (new) This PR adds a new package 10.rebuild-darwin: 1-10 This PR causes between 1 and 10 packages to rebuild on Darwin. 10.rebuild-darwin: 1 This PR causes 1 package to rebuild on Darwin. 10.rebuild-linux: 1-10 This PR causes between 1 and 10 packages to rebuild on Linux. 10.rebuild-linux: 1 This PR causes 1 package to rebuild on Linux. and removed 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin. 10.rebuild-linux: 0 This PR does not cause any packages to rebuild on Linux. labels Mar 21, 2024
Copy link
Contributor

@adamcstephens adamcstephens left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do like this solution better. Thanks. :)

@adamcstephens
Copy link
Contributor

@ofborg build OVMF OVMFFull OVMFFull.fd

@adamcstephens
Copy link
Contributor

Hmm this call method doesn't give us a good way to limit supported systems. This package will only build on x86.

@RaitoBezarius
Copy link
Member

Hmm this call method doesn't give us a good way to limit supported systems. This package will only build on x86.

I mean, currently this is akin to a cross compilation hack to x86 all the time I guess?

Copy link
Contributor

@adamcstephens adamcstephens left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@RaitoBezarius do you clear your block?

@wegank wegank added 12.approvals: 1 This PR was reviewed and approved by one person. 12.approved-by: package-maintainer This PR was reviewed and approved by a maintainer listed in any of the changed packages. labels Mar 22, 2024
Copy link
Member

@RaitoBezarius RaitoBezarius left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All good to go except for a potential abort situation, it needs to be a catchable, thus, a throw.

@astro astro requested a review from messemar April 15, 2024 23:11
@adamcstephens
Copy link
Contributor

adamcstephens commented Apr 17, 2024

This is now failing ofborg eval.

@ofborg build OVMF-cloud-hypervisor OVMF-cloud-hypervisor.passthru.tests OVMF

@astro
Copy link
Contributor Author

astro commented Apr 17, 2024

This is now failing ofborg eval.

Sorry. I added the missing parenthesis.

@ofborg ofborg bot requested a review from adamcstephens April 17, 2024 21:41
Copy link
Contributor

@adamcstephens adamcstephens left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry to keep requesting changes here, but this fails the build on aarch64 because that's not a supported platform.

Can you also turn meta.platforms into an argument that defaults to edk2.meta.platforms but is overridden for the cloudHypervisor?

@astro
Copy link
Contributor Author

astro commented Apr 18, 2024

Can you also turn meta.platforms into an argument that defaults to edk2.meta.platforms but is overridden for the cloudHypervisor?

A verbatim platforms didn't work as nixpkgs would inject pkgs.platforms then. I went for metaPlatforms instead.

@astro astro requested a review from adamcstephens April 18, 2024 19:22
@adamcstephens adamcstephens merged commit 716b484 into NixOS:master Apr 19, 2024
@astro astro deleted the ovmf-chv branch April 21, 2024 00:08
@roberth
Copy link
Member

roberth commented Jun 3, 2024

This PR seems to have broken i686-linux VM tests, failing with

$ nix-instantiate --expr 'with import ./. { system = "i686-linux"; }; nixosTest { name = "empty"; nodes.machine = {}; testScript = ""; }' --show-trace
[...]
       at /home/user/h/nixpkgs/pkgs/applications/virtualization/OVMF/default.nix:74:1:
error: assertion '((platformSpecific) ? "${cpuName}")' failed`
Error and trace
error:
       … while evaluating the attribute 'drvPath'
         at /home/user/h/nixpkgs/lib/customisation.nix:268:7:
          267|     in commonAttrs // {
          268|       drvPath = assert condition; drv.drvPath;
             |       ^
          269|       outPath = assert condition; drv.outPath;

       … while calling the 'derivationStrict' builtin
         at <nix/derivation-internal.nix>:9:12:
            8|
            9|   strict = derivationStrict drvAttrs;
             |            ^
           10|

       … while evaluating derivation 'vm-test-run-empty'
         whose name attribute is located at /home/user/h/nixpkgs/pkgs/stdenv/generic/make-derivation.nix:331:7

       … while evaluating attribute 'buildCommand' of derivation 'vm-test-run-empty'
         at /home/user/h/nixpkgs/nixos/lib/testing/run.nix:48:7:
           47|
           48|       buildCommand = ''
             |       ^
           49|         mkdir -p $out

       … while calling the 'getAttr' builtin
         at <nix/derivation-internal.nix>:19:19:
           18|       value = commonAttrs // {
           19|         outPath = builtins.getAttr outputName strict;
             |                   ^
           20|         drvPath = strict.drvPath;

       … while calling the 'derivationStrict' builtin
         at <nix/derivation-internal.nix>:9:12:
            8|
            9|   strict = derivationStrict drvAttrs;
             |            ^
           10|

       … while evaluating derivation 'nixos-test-driver-empty'
         whose name attribute is located at /home/user/h/nixpkgs/pkgs/stdenv/generic/make-derivation.nix:331:7

       … while evaluating attribute 'buildCommand' of derivation 'nixos-test-driver-empty'
         at /home/user/h/nixpkgs/pkgs/build-support/trivial-builders/default.nix:68:17:
           67|         enableParallelBuilding = true;
           68|         inherit buildCommand name;
             |                 ^
           69|         passAsFile = [ "buildCommand" ]

       … while calling the 'toString' builtin
         at /home/user/h/nixpkgs/nixos/lib/testing/driver.nix:59:38:
           58|
           59|         vmStartScripts=($(for i in ${toString vms}; do echo $i/bin/run-*-vm; done))
             |                                      ^
           60|

       … while evaluating the first argument passed to builtins.toString

       … while calling the 'getAttr' builtin
         at <nix/derivation-internal.nix>:19:19:
           18|       value = commonAttrs // {
           19|         outPath = builtins.getAttr outputName strict;
             |                   ^
           20|         drvPath = strict.drvPath;

       … while calling the 'derivationStrict' builtin
         at <nix/derivation-internal.nix>:9:12:
            8|
            9|   strict = derivationStrict drvAttrs;
             |            ^
           10|

       … while evaluating derivation 'nixos-vm'
         whose name attribute is located at /home/user/h/nixpkgs/pkgs/stdenv/generic/make-derivation.nix:331:7

       … while evaluating attribute 'buildCommand' of derivation 'nixos-vm'
         at /home/user/h/nixpkgs/pkgs/build-support/trivial-builders/default.nix:68:17:
           67|         enableParallelBuilding = true;
           68|         inherit buildCommand name;
             |                 ^
           69|         passAsFile = [ "buildCommand" ]

       … while calling the 'getAttr' builtin
         at <nix/derivation-internal.nix>:19:19:
           18|       value = commonAttrs // {
           19|         outPath = builtins.getAttr outputName strict;
             |                   ^
           20|         drvPath = strict.drvPath;

       … while calling the 'derivationStrict' builtin
         at <nix/derivation-internal.nix>:9:12:
            8|
            9|   strict = derivationStrict drvAttrs;
             |            ^
           10|

       … while evaluating derivation 'run-nixos-vm'
         whose name attribute is located at /home/user/h/nixpkgs/pkgs/stdenv/generic/make-derivation.nix:331:7

       … while evaluating attribute 'text' of derivation 'run-nixos-vm'
         at /home/user/h/nixpkgs/pkgs/build-support/trivial-builders/default.nix:103:17:
          102|       ({
          103|         inherit text executable checkPhase allowSubstitutes preferLocalBuild;
             |                 ^
          104|         passAsFile = [ "text" ]

       … while calling the 'concatStringsSep' builtin
         at /home/user/h/nixpkgs/nixos/modules/virtualisation/qemu-vm.nix:256:13:
          255|           ${drivesCmdLine config.virtualisation.qemu.drives} \
          256|           ${concatStringsSep " \\\n    " config.virtualisation.qemu.options} \
             |             ^
          257|           $QEMU_OPTS \

       … from call site
         at /home/user/h/nixpkgs/nixos/modules/virtualisation/qemu-vm.nix:256:42:
          255|           ${drivesCmdLine config.virtualisation.qemu.drives} \
          256|           ${concatStringsSep " \\\n    " config.virtualisation.qemu.options} \
             |                                          ^
          257|           $QEMU_OPTS \

       … while calling anonymous lambda
         at /home/user/h/nixpkgs/lib/attrsets.nix:749:18:
          748|         mapAttrs
          749|           (name: value:
             |                  ^
          750|             if isAttrs value && cond value

       … from call site
         at /home/user/h/nixpkgs/lib/attrsets.nix:752:18:
          751|             then recurse (path ++ [ name ]) value
          752|             else f (path ++ [ name ]) value);
             |                  ^
          753|     in

       … while calling anonymous lambda
         at /home/user/h/nixpkgs/lib/modules.nix:242:72:
          241|           # For definitions that have an associated option
          242|           declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options;
             |                                                                        ^
          243|

       … while evaluating the attribute 'value'
         at /home/user/h/nixpkgs/lib/modules.nix:809:9:
          808|     in warnDeprecation opt //
          809|       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
             |         ^
          810|         inherit (res.defsFinal') highestPrio;

       … while evaluating the option `nodes.machine.virtualisation.qemu.options':

       … while evaluating the attribute 'mergedValue'
         at /home/user/h/nixpkgs/lib/modules.nix:844:5:
          843|     # Type-check the remaining definitions, and merge them. Or throw if no definitions.
          844|     mergedValue =
             |     ^
          845|       if isDefined then

       … while evaluating a branch condition
         at /home/user/h/nixpkgs/lib/modules.nix:845:7:
          844|     mergedValue =
          845|       if isDefined then
             |       ^
          846|         if all (def: type.check def.value) defsFinal then type.merge loc defsFinal

       … while evaluating the attribute 'values'
         at /home/user/h/nixpkgs/lib/modules.nix:838:9:
          837|       in {
          838|         values = defs''';
             |         ^
          839|         inherit (defs'') highestPrio;

       … while evaluating a branch condition
         at /home/user/h/nixpkgs/lib/modules.nix:834:11:
          833|           # Avoid sorting if we don't have to.
          834|           if any (def: def.value._type or "" == "order") defs''.values
             |           ^
          835|           then sortProperties defs''.values

       … while calling the 'any' builtin
         at /home/user/h/nixpkgs/lib/modules.nix:834:14:
          833|           # Avoid sorting if we don't have to.
          834|           if any (def: def.value._type or "" == "order") defs''.values
             |              ^
          835|           then sortProperties defs''.values

       … while evaluating the attribute 'values'
         at /home/user/h/nixpkgs/lib/modules.nix:937:7:
          936|     in {
          937|       values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
             |       ^
          938|       inherit highestPrio;

       … while calling the 'concatMap' builtin
         at /home/user/h/nixpkgs/lib/modules.nix:937:16:
          936|     in {
          937|       values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
             |                ^
          938|       inherit highestPrio;

       … while calling the 'concatMap' builtin
         at /home/user/h/nixpkgs/lib/modules.nix:824:17:
          823|         # Process mkMerge and mkIf properties.
          824|         defs' = concatMap (m:
             |                 ^
          825|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

       … while calling anonymous lambda
         at /home/user/h/nixpkgs/lib/modules.nix:824:28:
          823|         # Process mkMerge and mkIf properties.
          824|         defs' = concatMap (m:
             |                            ^
          825|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

       … while calling the 'map' builtin
         at /home/user/h/nixpkgs/lib/modules.nix:825:11:
          824|         defs' = concatMap (m:
          825|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
             |           ^
          826|         ) defs;

       … while evaluating definitions from `/home/user/h/nixpkgs/nixos/modules/virtualisation/qemu-vm.nix':

       … from call site
         at /home/user/h/nixpkgs/lib/modules.nix:825:137:
          824|         defs' = concatMap (m:
          825|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
             |                                                                                                                                         ^
          826|         ) defs;

       … while calling 'dischargeProperties'
         at /home/user/h/nixpkgs/lib/modules.nix:896:25:
          895|   */
          896|   dischargeProperties = def:
             |                         ^
          897|     if def._type or "" == "merge" then

       … while calling the 'concatMap' builtin
         at /home/user/h/nixpkgs/lib/modules.nix:898:7:
          897|     if def._type or "" == "merge" then
          898|       concatMap dischargeProperties def.contents
             |       ^
          899|     else if def._type or "" == "if" then

       … while calling 'dischargeProperties'
         at /home/user/h/nixpkgs/lib/modules.nix:896:25:
          895|   */
          896|   dischargeProperties = def:
             |                         ^
          897|     if def._type or "" == "merge" then

       … while evaluating a branch condition
         at /home/user/h/nixpkgs/lib/modules.nix:900:7:
          899|     else if def._type or "" == "if" then
          900|       if isBool def.condition then
             |       ^
          901|         if def.condition then

       … while calling the 'isBool' builtin
         at /home/user/h/nixpkgs/lib/modules.nix:900:10:
          899|     else if def._type or "" == "if" then
          900|       if isBool def.condition then
             |          ^
          901|         if def.condition then

       … while evaluating the attribute 'condition'
         at /home/user/h/nixpkgs/lib/modules.nix:1001:15:
         1000|     { _type = "if";
         1001|       inherit condition content;
             |               ^
         1002|     };

       … in the right operand of the AND (&&) operator
         at /home/user/h/nixpkgs/nixos/modules/virtualisation/qemu-vm.nix:1186:45:
         1185|       ])
         1186|       (mkIf (pkgs.stdenv.hostPlatform.isx86 && cfg.efi.OVMF.systemManagementModeRequired) [
             |                                             ^
         1187|         "-machine" "q35,smm=on"

       … from call site
         at /home/user/h/nixpkgs/nixos/modules/virtualisation/qemu-vm.nix:1186:48:
         1185|       ])
         1186|       (mkIf (pkgs.stdenv.hostPlatform.isx86 && cfg.efi.OVMF.systemManagementModeRequired) [
             |                                                ^
         1187|         "-machine" "q35,smm=on"

       … while calling anonymous lambda
         at /home/user/h/nixpkgs/lib/attrsets.nix:749:18:
          748|         mapAttrs
          749|           (name: value:
             |                  ^
          750|             if isAttrs value && cond value

       … from call site
         at /home/user/h/nixpkgs/lib/attrsets.nix:752:18:
          751|             then recurse (path ++ [ name ]) value
          752|             else f (path ++ [ name ]) value);
             |                  ^
          753|     in

       … while calling anonymous lambda
         at /home/user/h/nixpkgs/lib/modules.nix:242:72:
          241|           # For definitions that have an associated option
          242|           declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options;
             |                                                                        ^
          243|

       … while evaluating the attribute 'value'
         at /home/user/h/nixpkgs/lib/modules.nix:809:9:
          808|     in warnDeprecation opt //
          809|       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
             |         ^
          810|         inherit (res.defsFinal') highestPrio;

       … while evaluating the option `nodes.machine.virtualisation.efi.OVMF':

       … while evaluating the attribute 'mergedValue'
         at /home/user/h/nixpkgs/lib/modules.nix:844:5:
          843|     # Type-check the remaining definitions, and merge them. Or throw if no definitions.
          844|     mergedValue =
             |     ^
          845|       if isDefined then

       … while evaluating a branch condition
         at /home/user/h/nixpkgs/lib/modules.nix:845:7:
          844|     mergedValue =
          845|       if isDefined then
             |       ^
          846|         if all (def: type.check def.value) defsFinal then type.merge loc defsFinal

       … while evaluating the attribute 'values'
         at /home/user/h/nixpkgs/lib/modules.nix:838:9:
          837|       in {
          838|         values = defs''';
             |         ^
          839|         inherit (defs'') highestPrio;

       … while evaluating a branch condition
         at /home/user/h/nixpkgs/lib/modules.nix:834:11:
          833|           # Avoid sorting if we don't have to.
          834|           if any (def: def.value._type or "" == "order") defs''.values
             |           ^
          835|           then sortProperties defs''.values

       … while calling the 'any' builtin
         at /home/user/h/nixpkgs/lib/modules.nix:834:14:
          833|           # Avoid sorting if we don't have to.
          834|           if any (def: def.value._type or "" == "order") defs''.values
             |              ^
          835|           then sortProperties defs''.values

       … while calling anonymous lambda
         at /home/user/h/nixpkgs/lib/modules.nix:834:19:
          833|           # Avoid sorting if we don't have to.
          834|           if any (def: def.value._type or "" == "order") defs''.values
             |                   ^
          835|           then sortProperties defs''.values

       … while evaluating the attribute 'value._type'
         at /home/user/h/nixpkgs/lib/modules.nix:935:73:
          934|       highestPrio = foldl' (prio: def: min (getPrio def) prio) 9999 defs;
          935|       strip = def: if def.value._type or "" == "override" then def // { value = def.value.content; } else def;
             |                                                                         ^
          936|     in {

       … while evaluating the attribute 'value.content'
         at /home/user/h/nixpkgs/lib/modules.nix:1016:24:
         1015|     { _type = "override";
         1016|       inherit priority content;
             |                        ^
         1017|     };

       … while evaluating the attribute 'default'
         at /home/user/h/nixpkgs/nixos/modules/virtualisation/qemu-vm.nix:878:9:
          877|         type = types.package;
          878|         default = (pkgs.OVMF.override {
             |         ^
          879|           secureBoot = cfg.useSecureBoot;

       … while evaluating the attribute 'OVMF.override'
         at /home/user/h/nixpkgs/pkgs/top-level/all-packages.nix:26705:3:
        26704|
        26705|   OVMF = callPackage ../applications/virtualization/OVMF {
             |   ^
        26706|     inherit (python3Packages) pexpect;

       … from call site
         at /home/user/h/nixpkgs/pkgs/top-level/all-packages.nix:26705:10:
        26704|
        26705|   OVMF = callPackage ../applications/virtualization/OVMF {
             |          ^
        26706|     inherit (python3Packages) pexpect;

       … while calling 'callPackageWith'
         at /home/user/h/nixpkgs/lib/customisation.nix:153:35:
          152|   */
          153|   callPackageWith = autoArgs: fn: args:
             |                                   ^
          154|     let

       … while calling a functor (an attribute set with a '__functor' attribute)
         at /home/user/h/nixpkgs/lib/customisation.nix:205:13:
          204|     in if missingArgs == {}
          205|        then makeOverridable f allArgs
             |             ^
          206|        # This needs to be an abort so it can't be caught with `builtins.tryEval`,

       … from call site
         at /home/user/h/nixpkgs/lib/trivial.nix:425:7:
          424|     { # TODO: Should we add call-time "type" checking like built in?
          425|       __functor = self: f;
             |       ^
          426|       __functionArgs = args;

       … while calling anonymous lambda
         at /home/user/h/nixpkgs/lib/customisation.nix:96:17:
           95|     in
           96|     mirrorArgs (origArgs:
             |                 ^
           97|     let

       … while evaluating a branch condition
         at /home/user/h/nixpkgs/lib/customisation.nix:108:7:
          107|     in
          108|       if isAttrs result then
             |       ^
          109|         result // {

       … while calling the 'isAttrs' builtin
         at /home/user/h/nixpkgs/lib/customisation.nix:108:10:
          107|     in
          108|       if isAttrs result then
             |          ^
          109|         result // {

       … from call site
         at /home/user/h/nixpkgs/lib/customisation.nix:98:16:
           97|     let
           98|       result = f origArgs;
             |                ^
           99|

       … while calling anonymous lambda
         at /home/user/h/nixpkgs/pkgs/applications/virtualization/OVMF/default.nix:1:1:
            1| { stdenv, nixosTests, lib, edk2, util-linux, nasm, acpica-tools, llvmPackages
             | ^
            2| , fetchurl, python3, pexpect, xorriso, qemu, dosfstools, mtools

       error: assertion '((platformSpecific) ? "${cpuName}")' failed
       at /home/user/h/nixpkgs/pkgs/applications/virtualization/OVMF/default.nix:74:1:
           73|
           74| assert platformSpecific ? ${cpuName};
             | ^
           75| assert msVarsTemplate -> fdSize4MB;

Found in NixOS/nix#10835

roberth added a commit to hercules-ci/nix that referenced this pull request Jun 3, 2024
roberth added a commit to hercules-ci/nix that referenced this pull request Jun 3, 2024
roberth added a commit to hercules-ci/nix that referenced this pull request Jun 3, 2024
@adamcstephens adamcstephens mentioned this pull request Jun 4, 2024
14 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

8.has: package (new) This PR adds a new package 10.rebuild-darwin: 1-10 This PR causes between 1 and 10 packages to rebuild on Darwin. 10.rebuild-darwin: 1 This PR causes 1 package to rebuild on Darwin. 10.rebuild-linux: 1-10 This PR causes between 1 and 10 packages to rebuild on Linux. 10.rebuild-linux: 1 This PR causes 1 package to rebuild on Linux. 12.approvals: 1 This PR was reviewed and approved by one person. 12.approved-by: package-maintainer This PR was reviewed and approved by a maintainer listed in any of the changed packages.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants