From 2338d14f6256b4a082d89d448481bcea922eff43 Mon Sep 17 00:00:00 2001 From: Tom Herbers Date: Sat, 11 Jan 2025 17:51:12 +0100 Subject: [PATCH 1/6] bird: rename bird to bird2 This is done to enable us to introduce bird3 without causing confusion. --- pkgs/by-name/bi/{bird => bird2}/dont-create-sysconfdir-2.patch | 0 pkgs/by-name/bi/{bird => bird2}/package.nix | 0 pkgs/top-level/aliases.nix | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename pkgs/by-name/bi/{bird => bird2}/dont-create-sysconfdir-2.patch (100%) rename pkgs/by-name/bi/{bird => bird2}/package.nix (100%) diff --git a/pkgs/by-name/bi/bird/dont-create-sysconfdir-2.patch b/pkgs/by-name/bi/bird2/dont-create-sysconfdir-2.patch similarity index 100% rename from pkgs/by-name/bi/bird/dont-create-sysconfdir-2.patch rename to pkgs/by-name/bi/bird2/dont-create-sysconfdir-2.patch diff --git a/pkgs/by-name/bi/bird/package.nix b/pkgs/by-name/bi/bird2/package.nix similarity index 100% rename from pkgs/by-name/bi/bird/package.nix rename to pkgs/by-name/bi/bird2/package.nix diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index cda951863212..2ff2be777725 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -152,7 +152,7 @@ mapAliases { bibata-extra-cursors = throw "bibata-cursors has been removed as it was broken"; # Added 2024-07-15 bitcoin-unlimited = throw "bitcoin-unlimited has been removed as it was broken and unmaintained"; # Added 2024-07-15 bitcoind-unlimited = throw "bitcoind-unlimited has been removed as it was broken and unmaintained"; # Added 2024-07-15 - bird2 = bird; # Added 2022-02-21 + bird = bird2; # Added 2025-01-11 bisq-desktop = throw "bisq-desktop has been removed because OpenJFX 11 was removed"; # Added 2024-11-17 bitwarden = bitwarden-desktop; # Added 2024-02-25 blender-with-packages = args: From daeb10e515ec7d0945c18d33ef67fbe95d88bd7a Mon Sep 17 00:00:00 2001 From: Tom Herbers Date: Wed, 15 Jan 2025 17:42:21 +0100 Subject: [PATCH 2/6] bird2: fetch src url via https --- pkgs/by-name/bi/bird2/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/bi/bird2/package.nix b/pkgs/by-name/bi/bird2/package.nix index 238af5251a96..5d28f0add04c 100644 --- a/pkgs/by-name/bi/bird2/package.nix +++ b/pkgs/by-name/bi/bird2/package.nix @@ -14,7 +14,7 @@ stdenv.mkDerivation rec { version = "2.16.1"; src = fetchurl { - url = "ftp://bird.network.cz/pub/bird/${pname}-${version}.tar.gz"; + url = "https://bird.network.cz/download/bird-${version}.tar.gz"; hash = "sha256-9uWcvMrKYmaK6gIGhyS9QnuexEnH4PD8VoFQOYjHNbQ="; }; @@ -43,7 +43,7 @@ stdenv.mkDerivation rec { meta = with lib; { changelog = "https://gitlab.nic.cz/labs/bird/-/blob/v${version}/NEWS"; description = "BIRD Internet Routing Daemon"; - homepage = "http://bird.network.cz"; + homepage = "https://bird.network.cz"; license = licenses.gpl2Plus; maintainers = with maintainers; [ herbetom ]; platforms = platforms.linux; From eb58cf834704077f71430ec668e550c255373b50 Mon Sep 17 00:00:00 2001 From: Tom Herbers Date: Sat, 11 Jan 2025 21:18:46 +0100 Subject: [PATCH 3/6] bird3: init at 3.0.1 --- .../bi/bird3/dont-create-sysconfdir-2.patch | 6 +++ pkgs/by-name/bi/bird3/package.nix | 51 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 pkgs/by-name/bi/bird3/dont-create-sysconfdir-2.patch create mode 100644 pkgs/by-name/bi/bird3/package.nix diff --git a/pkgs/by-name/bi/bird3/dont-create-sysconfdir-2.patch b/pkgs/by-name/bi/bird3/dont-create-sysconfdir-2.patch new file mode 100644 index 000000000000..247164461183 --- /dev/null +++ b/pkgs/by-name/bi/bird3/dont-create-sysconfdir-2.patch @@ -0,0 +1,6 @@ +--- a/Makefile.in ++++ b/Makefile.in +@@ -165,2 +165,2 @@ + install: all +- $(INSTALL) -d $(DESTDIR)/$(sbindir) $(DESTDIR)/$(sysconfdir) $(DESTDIR)/$(runstatedir) ++ $(INSTALL) -d $(DESTDIR)/$(sbindir) $(DESTDIR)/$(sysconfdir) diff --git a/pkgs/by-name/bi/bird3/package.nix b/pkgs/by-name/bi/bird3/package.nix new file mode 100644 index 000000000000..279199cafb4f --- /dev/null +++ b/pkgs/by-name/bi/bird3/package.nix @@ -0,0 +1,51 @@ +{ + lib, + stdenv, + fetchurl, + flex, + bison, + readline, + libssh, + nixosTests, +}: + +stdenv.mkDerivation rec { + pname = "bird"; + version = "3.0.1"; + + src = fetchurl { + url = "https://bird.network.cz/download/bird-${version}.tar.gz"; + hash = "sha256-iGhAPKqE4lVLtuYK2+fGV+e7fErEGRDjmPNeI2upD6E="; + }; + + nativeBuildInputs = [ + flex + bison + ]; + buildInputs = [ + readline + libssh + ]; + + patches = [ + ./dont-create-sysconfdir-2.patch + ]; + + CPP = "${stdenv.cc.targetPrefix}cpp -E"; + + configureFlags = [ + "--localstatedir=/var" + "--runstatedir=/run/bird" + ]; + + passthru.tests = nixosTests.bird; + + meta = with lib; { + changelog = "https://gitlab.nic.cz/labs/bird/-/blob/v${version}/NEWS"; + description = "BIRD Internet Routing Daemon"; + homepage = "https://bird.network.cz"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ herbetom ]; + platforms = platforms.linux; + }; +} From 7d67acbe4ae457d1c9fdc034982fdda548ca1782 Mon Sep 17 00:00:00 2001 From: Tom Herbers Date: Tue, 14 Jan 2025 12:26:28 +0100 Subject: [PATCH 4/6] nixos/bird: add package option This is done to allows to easier change which bird package should be used --- nixos/modules/services/networking/bird.nix | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/nixos/modules/services/networking/bird.nix b/nixos/modules/services/networking/bird.nix index 4588e39ea37c..1c94add8a75c 100644 --- a/nixos/modules/services/networking/bird.nix +++ b/nixos/modules/services/networking/bird.nix @@ -26,6 +26,7 @@ in options = { services.bird2 = { enable = mkEnableOption "BIRD Internet Routing Daemon"; + package = lib.mkPackageOption pkgs "bird2" { }; config = mkOption { type = types.lines; description = '' @@ -74,15 +75,16 @@ in ###### implementation config = mkIf cfg.enable { - environment.systemPackages = [ pkgs.bird ]; + environment.systemPackages = [ cfg.package ]; environment.etc."bird/bird2.conf".source = pkgs.writeTextFile { name = "bird2"; text = cfg.config; + derivationArgs.nativeBuildInputs = lib.optional cfg.checkConfig cfg.package; checkPhase = optionalString cfg.checkConfig '' ln -s $out bird2.conf ${cfg.preCheckConfig} - ${pkgs.buildPackages.bird}/bin/bird -d -p -c bird2.conf + bird -d -p -c bird2.conf ''; }; @@ -95,9 +97,9 @@ in Restart = "on-failure"; User = "bird2"; Group = "bird2"; - ExecStart = "${pkgs.bird}/bin/bird -c /etc/bird/bird2.conf"; - ExecReload = "${pkgs.bird}/bin/birdc configure"; - ExecStop = "${pkgs.bird}/bin/birdc down"; + ExecStart = "${lib.getExe' cfg.package "bird"} -c /etc/bird/bird2.conf"; + ExecReload = "${lib.getExe' cfg.package "birdc"} configure"; + ExecStop = "${lib.getExe' cfg.package "birdc"} down"; RuntimeDirectory = "bird"; CapabilityBoundingSet = caps; AmbientCapabilities = caps; From 5abb11bbe70cb68ed9b834fedac0029829482166 Mon Sep 17 00:00:00 2001 From: Tom Herbers Date: Wed, 18 Dec 2024 15:56:20 +0100 Subject: [PATCH 5/6] nixos/bird: rename bird2 to bird, switch to bird3 by default This is done in view of the Release of the new v3 of Bird. Switch to the bird3 package for the `services.bird.package` option. Switch the `bird` package alias to bird3. --- .../manual/release-notes/rl-2505.section.md | 2 + .../monitoring/prometheus/exporters/bird.nix | 2 +- nixos/modules/services/networking/bird-lg.nix | 2 +- nixos/modules/services/networking/bird.nix | 44 +++++++++++-------- .../services/networking/birdwatcher.nix | 2 +- nixos/tests/bird.nix | 16 +++---- nixos/tests/birdwatcher.nix | 6 +-- nixos/tests/fastnetmon-advanced.nix | 4 +- nixos/tests/prometheus-exporters.nix | 4 +- pkgs/top-level/aliases.nix | 2 +- 10 files changed, 46 insertions(+), 38 deletions(-) diff --git a/nixos/doc/manual/release-notes/rl-2505.section.md b/nixos/doc/manual/release-notes/rl-2505.section.md index 47625d2b235d..896ffe5724d9 100644 --- a/nixos/doc/manual/release-notes/rl-2505.section.md +++ b/nixos/doc/manual/release-notes/rl-2505.section.md @@ -261,6 +261,8 @@ - `tldr` now uses [`tldr-python-client`](https://github.com/tldr-pages/tldr-python-client) instead of [`tldr-c-client`](https://github.com/tldr-pages/tldr-c-client) which is unmaintained. +- `services.bird2` has been renamed to `services.bird` and the default bird package has been switched to `bird3`. `bird2` can still be choosen via the `services.bird.package` option. + - `renovate` was updated to v39. See the [upstream release notes](https://docs.renovatebot.com/release-notes-for-major-versions/#version-39) for breaking changes. Like upstream's docker images, renovate now runs on NodeJS 22. diff --git a/nixos/modules/services/monitoring/prometheus/exporters/bird.nix b/nixos/modules/services/monitoring/prometheus/exporters/bird.nix index 00b217e1fd2a..78174385d0d0 100644 --- a/nixos/modules/services/monitoring/prometheus/exporters/bird.nix +++ b/nixos/modules/services/monitoring/prometheus/exporters/bird.nix @@ -45,7 +45,7 @@ in }; serviceOpts = { serviceConfig = { - SupplementaryGroups = singleton (if cfg.birdVersion == 1 then "bird" else "bird2"); + SupplementaryGroups = "bird"; ExecStart = '' ${pkgs.prometheus-bird-exporter}/bin/bird_exporter \ -web.listen-address ${cfg.listenAddress}:${toString cfg.port} \ diff --git a/nixos/modules/services/networking/bird-lg.nix b/nixos/modules/services/networking/bird-lg.nix index ed296b98943f..f565c7f505fb 100644 --- a/nixos/modules/services/networking/bird-lg.nix +++ b/nixos/modules/services/networking/bird-lg.nix @@ -320,7 +320,7 @@ in groups."bird-lg" = lib.mkIf (cfg.group == "bird-lg") { }; users."bird-lg" = lib.mkIf (cfg.user == "bird-lg") { description = "Bird Looking Glass user"; - extraGroups = lib.optionals (config.services.bird2.enable) [ "bird2" ]; + extraGroups = lib.optionals (config.services.bird.enable) [ "bird" ]; group = cfg.group; isSystemUser = true; }; diff --git a/nixos/modules/services/networking/bird.nix b/nixos/modules/services/networking/bird.nix index 1c94add8a75c..7003ec892d27 100644 --- a/nixos/modules/services/networking/bird.nix +++ b/nixos/modules/services/networking/bird.nix @@ -14,7 +14,7 @@ let types ; - cfg = config.services.bird2; + cfg = config.services.bird; caps = [ "CAP_NET_ADMIN" "CAP_NET_BIND_SERVICE" @@ -24,9 +24,9 @@ in { ###### interface options = { - services.bird2 = { + services.bird = { enable = mkEnableOption "BIRD Internet Routing Daemon"; - package = lib.mkPackageOption pkgs "bird2" { }; + package = lib.mkPackageOption pkgs "bird3" { }; config = mkOption { type = types.lines; description = '' @@ -38,7 +38,7 @@ in type = types.bool; default = true; description = '' - Whether bird2 should be automatically reloaded when the configuration changes. + Whether bird should be automatically reloaded when the configuration changes. ''; }; checkConfig = mkOption { @@ -59,7 +59,7 @@ in ''; description = '' Commands to execute before the config file check. The file to be checked will be - available as `bird2.conf` in the current directory. + available as `bird.conf` in the current directory. Files created with this option will not be available at service runtime, only during build time checking. @@ -69,35 +69,37 @@ in }; imports = [ - (lib.mkRemovedOptionModule [ "services" "bird" ] "Use services.bird2 instead") - (lib.mkRemovedOptionModule [ "services" "bird6" ] "Use services.bird2 instead") + (lib.mkRemovedOptionModule [ "services" "bird2" ] + "Use services.bird instead. bird3 is the new default bird package. You can choose to remain with bird2 by setting the service.bird.package option." + ) + (lib.mkRemovedOptionModule [ "services" "bird6" ] "Use services.bird instead") ]; ###### implementation config = mkIf cfg.enable { environment.systemPackages = [ cfg.package ]; - environment.etc."bird/bird2.conf".source = pkgs.writeTextFile { - name = "bird2"; + environment.etc."bird/bird.conf".source = pkgs.writeTextFile { + name = "bird"; text = cfg.config; derivationArgs.nativeBuildInputs = lib.optional cfg.checkConfig cfg.package; checkPhase = optionalString cfg.checkConfig '' - ln -s $out bird2.conf + ln -s $out bird.conf ${cfg.preCheckConfig} - bird -d -p -c bird2.conf + bird -d -p -c bird.conf ''; }; - systemd.services.bird2 = { + systemd.services.bird = { description = "BIRD Internet Routing Daemon"; wantedBy = [ "multi-user.target" ]; - reloadTriggers = lib.optional cfg.autoReload config.environment.etc."bird/bird2.conf".source; + reloadTriggers = lib.optional cfg.autoReload config.environment.etc."bird/bird.conf".source; serviceConfig = { Type = "forking"; Restart = "on-failure"; - User = "bird2"; - Group = "bird2"; - ExecStart = "${lib.getExe' cfg.package "bird"} -c /etc/bird/bird2.conf"; + User = "bird"; + Group = "bird"; + ExecStart = "${lib.getExe' cfg.package "bird"} -c /etc/bird/bird.conf"; ExecReload = "${lib.getExe' cfg.package "birdc"} configure"; ExecStop = "${lib.getExe' cfg.package "birdc"} down"; RuntimeDirectory = "bird"; @@ -114,12 +116,16 @@ in }; }; users = { - users.bird2 = { + users.bird = { description = "BIRD Internet Routing Daemon user"; - group = "bird2"; + group = "bird"; isSystemUser = true; }; - groups.bird2 = { }; + groups.bird = { }; }; }; + + meta = { + maintainers = with lib.maintainers; [ herbetom ]; + }; } diff --git a/nixos/modules/services/networking/birdwatcher.nix b/nixos/modules/services/networking/birdwatcher.nix index 07df2ee62444..3325d454633a 100644 --- a/nixos/modules/services/networking/birdwatcher.nix +++ b/nixos/modules/services/networking/birdwatcher.nix @@ -58,7 +58,7 @@ in [bird] listen = "0.0.0.0:29184" - config = "/etc/bird/bird2.conf" + config = "/etc/bird/bird.conf" birdc = "''${pkgs.bird}/bin/birdc" ttl = 5 # time to live (in minutes) for caching of cli output diff --git a/nixos/tests/bird.nix b/nixos/tests/bird.nix index 9b52e1beccae..d6dccd0f71a3 100644 --- a/nixos/tests/bird.nix +++ b/nixos/tests/bird.nix @@ -13,7 +13,7 @@ let inherit (import ../lib/testing-python.nix { inherit system pkgs; }) makeTest; inherit (pkgs.lib) optionalString; - makeBird2Host = + makeBirdHost = hostId: { pkgs, ... }: { @@ -32,7 +32,7 @@ let networkConfig.Address = "10.0.0.${hostId}/24"; }; - services.bird2 = { + services.bird = { enable = true; config = '' @@ -107,17 +107,17 @@ let }; in makeTest { - name = "bird2"; + name = "bird"; - nodes.host1 = makeBird2Host "1"; - nodes.host2 = makeBird2Host "2"; + nodes.host1 = makeBirdHost "1"; + nodes.host2 = makeBirdHost "2"; testScript = '' start_all() - host1.wait_for_unit("bird2.service") - host2.wait_for_unit("bird2.service") - host1.succeed("systemctl reload bird2.service") + host1.wait_for_unit("bird.service") + host2.wait_for_unit("bird.service") + host1.succeed("systemctl reload bird.service") with subtest("Waiting for advertised IPv4 routes"): host1.wait_until_succeeds("ip --json r | jq -e 'map(select(.dst == \"10.10.0.2\")) | any'") diff --git a/nixos/tests/birdwatcher.nix b/nixos/tests/birdwatcher.nix index 1f90e840e441..00b3b6d77af2 100644 --- a/nixos/tests/birdwatcher.nix +++ b/nixos/tests/birdwatcher.nix @@ -17,7 +17,7 @@ makeTest { nodes = { host1 = { environment.systemPackages = with pkgs; [ jq ]; - services.bird2 = { + services.bird = { enable = true; config = '' log syslog all; @@ -71,7 +71,7 @@ makeTest { filter_fields = [] [bird] listen = "0.0.0.0:29184" - config = "/etc/bird/bird2.conf" + config = "/etc/bird/bird.conf" birdc = "${pkgs.bird}/bin/birdc" ttl = 5 # time to live (in minutes) for caching of cli output [parser] @@ -89,7 +89,7 @@ makeTest { testScript = '' start_all() - host1.wait_for_unit("bird2.service") + host1.wait_for_unit("bird.service") host1.wait_for_unit("birdwatcher.service") host1.wait_for_open_port(29184) host1.succeed("curl http://[::]:29184/status | jq -r .status.message | grep 'Daemon is up and running'") diff --git a/nixos/tests/fastnetmon-advanced.nix b/nixos/tests/fastnetmon-advanced.nix index 1582280cb5df..99ef0513b1b4 100644 --- a/nixos/tests/fastnetmon-advanced.nix +++ b/nixos/tests/fastnetmon-advanced.nix @@ -9,7 +9,7 @@ { ... }: { networking.firewall.allowedTCPPorts = [ 179 ]; - services.bird2 = { + services.bird = { enable = true; config = '' router id 192.168.1.1; @@ -59,7 +59,7 @@ '' start_all() fnm.wait_for_unit("fastnetmon.service") - bird.wait_for_unit("bird2.service") + bird.wait_for_unit("bird.service") fnm.wait_until_succeeds('journalctl -eu fastnetmon.service | grep "BGP daemon restarted correctly"') fnm.wait_until_succeeds("journalctl -eu gobgp.service | grep BGP_FSM_OPENCONFIRM") diff --git a/nixos/tests/prometheus-exporters.nix b/nixos/tests/prometheus-exporters.nix index c20b3e4f99fe..3afe4fcc9579 100644 --- a/nixos/tests/prometheus-exporters.nix +++ b/nixos/tests/prometheus-exporters.nix @@ -116,8 +116,8 @@ let enable = true; }; metricProvider = { - services.bird2.enable = true; - services.bird2.config = '' + services.bird.enable = true; + services.bird.config = '' router id 127.0.0.1; protocol kernel MyObviousTestString { diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 2ff2be777725..6dfd1be40f36 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -152,7 +152,7 @@ mapAliases { bibata-extra-cursors = throw "bibata-cursors has been removed as it was broken"; # Added 2024-07-15 bitcoin-unlimited = throw "bitcoin-unlimited has been removed as it was broken and unmaintained"; # Added 2024-07-15 bitcoind-unlimited = throw "bitcoind-unlimited has been removed as it was broken and unmaintained"; # Added 2024-07-15 - bird = bird2; # Added 2025-01-11 + bird = bird3; # Added 2025-01-11 bisq-desktop = throw "bisq-desktop has been removed because OpenJFX 11 was removed"; # Added 2024-11-17 bitwarden = bitwarden-desktop; # Added 2024-02-25 blender-with-packages = args: From 784baa4f19daf7a50c4ac1bff9fe01c63981dbbe Mon Sep 17 00:00:00 2001 From: Sandro Date: Fri, 7 Feb 2025 14:19:19 +0100 Subject: [PATCH 6/6] bird: change alias back to bird2 as we otherwise silently update people using the alias which we do not want in this case --- pkgs/top-level/aliases.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 6dfd1be40f36..2ff2be777725 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -152,7 +152,7 @@ mapAliases { bibata-extra-cursors = throw "bibata-cursors has been removed as it was broken"; # Added 2024-07-15 bitcoin-unlimited = throw "bitcoin-unlimited has been removed as it was broken and unmaintained"; # Added 2024-07-15 bitcoind-unlimited = throw "bitcoind-unlimited has been removed as it was broken and unmaintained"; # Added 2024-07-15 - bird = bird3; # Added 2025-01-11 + bird = bird2; # Added 2025-01-11 bisq-desktop = throw "bisq-desktop has been removed because OpenJFX 11 was removed"; # Added 2024-11-17 bitwarden = bitwarden-desktop; # Added 2024-02-25 blender-with-packages = args: