From 569b186edf2da04e62ba8d4674ea41efcf4fdba3 Mon Sep 17 00:00:00 2001 From: goeranh Date: Fri, 27 Feb 2026 22:49:54 +0100 Subject: [PATCH 1/7] original config --- hosts/redmine/default.nix | 316 +++++++++++++++++++---- hosts/redmine/hardware-configuration.nix | 38 --- 2 files changed, 268 insertions(+), 86 deletions(-) delete mode 100644 hosts/redmine/hardware-configuration.nix diff --git a/hosts/redmine/default.nix b/hosts/redmine/default.nix index a2f50b5..3a8ccba 100644 --- a/hosts/redmine/default.nix +++ b/hosts/redmine/default.nix @@ -1,60 +1,280 @@ -{ - config, - pkgs, - lib, - modulesPath, - ... -}: +{ config, pkgs, lib, ... }: { +#services.openssh.enable = true; imports = [ - "${modulesPath}/virtualisation/proxmox-lxc.nix" + + + ]; + + +############################ +#### NixOS +############################ + system.stateVersion = "22.11"; - networking = { - hostName = "pro"; - domain = "htw.stura-dresden.de"; - firewall.allowedTCPPorts = [ - 80 - 443 - ]; + system.autoUpgrade.enable = true; + system.autoUpgrade.allowReboot = true; +# system.autoUpgrade.channel = https://nixos.org/channels/nixos-22.11; + nix.settings.auto-optimise-store = true; + nix.optimise.automatic = true; + nix.gc.automatic = true; +# nix.gc.options = "--delete-older-than 5d"; + nix.gc.options = "--delete-older-than 42d"; + + +############################ +#### Umgebung +############################ + +# environment.noXlibs = true; + services.xserver.enable = false; + + services.openssh.enable = true; + + +############################ +#### Netzwerk +############################ + + networking.enableIPv6 = false; + + +############################ +#### System +############################ + + proxmoxLXC.manageHostName = true; + networking.hostName = "pro"; + networking.domain = "stura.htw-dresden.de"; + +# time.timeZone = "Europe/Berlin"; + + +############################ +#### Anwendung +############################ + +#### Aufgabenverwaltung StuRa HTW Dresden +#### Redmine + +#### Beim StuRa braucht es einen Dienst zur Aufgabenverwaltung. +#### Beim StuRa wird (gefuehlt seit jeher) die Anwendung Redmine fuer den Dienst Aufgabenverwaltung verwendet. + +#### https://search.nixos.org/options?show=services.redmine.enable +#### Verwenden der Anwendung Redmine + services.redmine.enable = true; +#### Standardmaessig verwendet die Anwendung Redmine den Port 3000. +#### Es ist aber ueblich, dass die Anwendung Redmine nicht direkt, sondern nur ueber eine eine uebliche Anwednung fuer den Dienst web server, erreichbar sein soll. networking.firewall.allowedTCPPorts = [ 3000 ]; + +#### https://search.nixos.org/options?show=services.redmine.settings +#### https://github.com/redmine/redmine/blob/master/config/configuration.yml.example +#### Standardmaessig ist keine Konfiguration fuer den Versand von Mails bei der Anwendung Redmine konfiguriert. Es ist kein Versand von Mails durch die Anwendung moeglich. +#### Der Dienst Aufgabenverwaltung soll aber Mails - um ueber Aenderungen beim der Aufgabenverwaltung informieren zu koennen - Mails versenden koennen. +#### #### Achtung! Die Inhalte der Konfiguration werden den Inhalten der sonstigen Inhalten der Konfiguration von in der Dateie fuer die Konfiguration der Anwendung Redmine vorangestellt. + services.redmine.settings.production.email_delivery = { + delivery_method = ":smtp"; + smtp_settings = { + address = "mail.${config.networking.domain}"; + port = 25; + }; +#### Alternativ waere vielleicht auch das Versand von Mails durch das Programm sendmail (als lokale Installation) moeglich. +#### Getestet wurde das aber noch nicht. +##### delivery_method = ":sendmail"; }; - services = { - redmine = { - enable = true; - components.imagemagick = true; - components.minimagick_font_path = "${pkgs.liberation_ttf.outPath}/share/fonts/truetype/LiberationSans-Regular.ttf"; - components.ghostscript = true; - settings.production.email_delivery = { - delivery_method = ":smtp"; - smtp_settings = { - address = "mail.${config.networking.domain}"; - port = 25; - }; - }; - }; - nginx = { - enable = true; - logError = "/dev/null emerg"; - appendHttpConfig = '' - access_log off; - ''; - recommendedOptimisation = true; - recommendedGzipSettings = true; - recommendedProxySettings = true; - recommendedTlsSettings = true; - virtualHosts = { - "pro.htw.stura-dresden.de" = { - locations."/" = { - proxyPass = "http://127.0.0.1:${toString config.services.redmine.port}"; - }; - forceSSL = true; - enableACME = true; - }; - }; +#### https://www.redmine.org/projects/redmine/wiki/RedmineAdminInformation#ImageMagick-convert-available + services.redmine.components.imagemagick = true; + services.redmine.components.minimagick_font_path = "${pkgs.liberation_ttf.outPath}/share/fonts/truetype/LiberationSans-Regular.ttf"; +#### https://www.redmine.org/projects/redmine/wiki/RedmineAdminInformation#ImageMagick-PDF-support-available + services.redmine.components.ghostscript = true; + +#### Die Anwendung Redmine kann mit sogenannten Plugins erweitert werden. +#### Beim StuRa brauchen wir keine Erweiterungen fuer die Anwendung Redmine. +#### Zum Test der Verwendung von Erweiterungen fuer die Anwendung Redmine installieren wir "zufaellige" Erweiterungen. +# services.redmine.plugins = { +# issue_recurring = builtins.fetchurl { +# url = "https://github.com/cryptogopher/issue_recurring/archive/refs/tags/1.7.zip"; +# sha256 = "1s729gyh2wsa9yljm6gvk76z3qxnp1vhaydypvda8miw69csvs34"; +# }; +#### siehe instanz 137 (srs-test-pve) +#### https://10.1.0.17:8006/#v1:0:=lxc%2F137:4::::::: +# redmine_kanban = builtins.fetchurl { +## url = "https://github.com/happy-se-life/kanban/archive/refs/heads/master.zip"; +# url = "https://github.com/happy-se-life/kanban/archive/refs/heads/tags0.0.11.zip"; +# sha256 = "01ymd25169dhyc4ksdx67w5h9rba09hrvmfw7bc6y71lsrxlg4sr"; +# }; +# }; + +#### weitere Inhalte zur Konfiguration +#### ls -l /var/lib/redmine/config/ + +#### Die Anwendung Redmine soll nicht direkt, sondern ueber eine uebliche Anwendung fuer den Dienst web server, erreichbar sein. +#### Es braucht einen (nahezu beliebigen) web server. +#### Beim StuRa HTW Dresden verwenden wir als web server moeglichst Nginx. +#### Verwenden der Anwendung Nginx als web server (Proxy) + services.nginx.enable = true; + +#### Der StuRa speichert nicht! + services.nginx.logError = ''/dev/null emerg''; + services.nginx.appendHttpConfig = '' + access_log off; + ''; + +#### Wir verwenden die fuer NixOS ueblichen Empfehlung fuer Nginx. + services.nginx.recommendedOptimisation = true; + services.nginx.recommendedGzipSettings = true; +##### Mit der Anwendung Nginx soll die Erreichbarkeit der Anwendung Redmine (standardmaessig an Port 3000) (auf erwartbaren Weg) moeglich machen. + services.nginx.recommendedProxySettings = true; +#### Mit der Anwendung Nginx soll die (ausschließliche) Verwendung von https (http mit TLS), statt http ermoeglicht werden. + services.nginx.recommendedTlsSettings = true; + +#### Anscheinend kann mit nix nur die Konfiguration fuer eine konkrete (manuelle) Konfiguration fuer den Dienst web server. + services.nginx.virtualHosts."${config.networking.fqdn}" = { +#### https://search.nixos.org/options?show=services.nginx.virtualHosts..default + default = true; + locations."/" = { + proxyPass = "http://127.0.0.1:${toString config.services.redmine.port}"; }; + forceSSL = true; + enableACME = true; }; + services.nginx.virtualHosts."pro.htw.stura-dresden.de" = { +#### https://search.nixos.org/options?show=services.nginx.virtualHosts..default + locations."/" = { + proxyPass = "http://127.0.0.1:${toString config.services.redmine.port}"; + }; + forceSSL = true; + enableACME = true; + }; + +#### Die Verwendung von TLS braucht ein (valides) Zertifikat. +#### Beim StuRa verwenden wir den ((auch bei NixOS) standardmaessigen) Dienst von letsencrypt.org. +#### Bereitstellen der Informationen (Erreichbarkeit und Einwilligung) fuer letsencrypt.org + security.acme.defaults.email = "cert@stura.htw-dresden.de"; + security.acme.acceptTerms = true; + +# networking.firewall.allowedTCPPorts = [ 80 443 3000 ]; + networking.firewall.allowedTCPPorts = [ 22 80 443 ]; + + +############################ +#### Probleme +############################ + +# services.redmine.package = unstable.redmine; +# services.redmine.packages = pkgs.redmine.override { rubyPackages.rails = pkgs.ruby_2_7; }; + + +#### Problem Verweigerung der Akualisierung wegen unsicherenen Paket redmine + +#### 2025-06-09 vat +#### Durch die Aktualisierung auf Redmine Version 6 durch die Aktualisierung auf NixOS Version 25.05 scheint das Problem ueberwunden (siehe Ticket #2475) zu sein. +##### Ausnahme für upgrade von der Instanz +##### siehe Ticket #2241 +#### nixpkgs.config.permittedInsecurePackages = [ +######## 2025-05-16 vat@ +######## Die Aktualisierung lief nicht, da nun 5.1.8 verwendet wird. +##### "redmine-5.1.7" +#### "redmine-5.1.8" +#### ]; + + +#### Problem - wie bei allen Instanzen mit NixOS auf PVE - fehlende Bereitstellung der Daten fuer locale + +#### 2025-06-27 vat@ && tan@ +#### gescheiterter Versuch um fehlermeldungen nach +#### pct enter 100 +#### . /etc/profile +####sh: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory +####sh: warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory +#### zu vermeiden. + +## i18n.extraLocales = [ +## "all" +## ]; + +# i18n.extraLocaleSettings = { +# LC_CTYPE = "en_US.UTF-8"; +# LC_COLLATE = "en_US.UTF-8"; +## LC_CTYPE = "en_US.utf8"; +## LC_COLLATE = "en_US.utf8"; +### LC_ALL = "en_US.UTF-8"; +# }; + +# i18n.localeCharsets = { +# LC_CTYPE = "en_US.UTF-8"; +# LC_COLLATE = "en_US.utf8"; +# }; + +# i18n.defaultLocale = "en_US.UTF-8"; + +# i18n.glibcLocales = pkgs.glibcLocales; +# i18n.glibcLocales = pkgs.glibcLocalesUtf8; + +# environment.systemPackages = with pkgs; [ +# glibcLocales +# glibcLocalesUtf8 +# ]; + +# environment.variables = { +# LC_CTYPE = "en_US.UTF-8"; +# LC_COLLATE = "en_US.UTF-8"; +# }; + +#### ve + +############################ +#### Problem Anwendung Redmine startet nicht, weil beim Bauen vom Paket Inhalte aus einem Gemfile nicht richtig behandelt werden +############################ +#### https://pro.stura.htw-dresden.de/issues/2510 + +############################ +#### nixpkgs +############################ + +#### 2025-07-11 vat +#### vb + +#### https://wiki.nixos.org/wiki/FAQ/Pinning_Nixpkgs#Pinning_an_unstable_service + +# nixpkgs.config = { +## allowUnfree = true; +# packageOverrides = pkgs: { +## unstable = import { +# master = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/d21825f9cf895942e057230c56625e2290d1b149.tar.gz") { +# config = config.nixpkgs.config; +# }; +# }; +# }; +## environment.systemPackages = with pkgs; [ +## unstable.redmine +## ]; +## +# + services.redmine.package = + let +#### fixing commit +#### https://github.com/NixOS/nixpkgs/commit/d21825f9cf895942e057230c56625e2290d1b149 +# pkgs_master_redmine_fixed = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/d21825f9cf895942e057230c56625e2290d1b149.tar.gz") { +# config = config.nixpkgs.config; +# }; +#### https://github.com/NixOS/nixpkgs/commits/nixos-25.05/pkgs/by-name/re/redmine +#### breaking commit +#### https://github.com/NixOS/nixpkgs/commit/1105b34ec2b88e82fe35be9e6ba5c547487824b2 + pkgs_redmine_25-05_before-broken = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/c80c8f5ba65ceab4c7ec266293a2ce20a663d245.tar.gz") { + config = config.nixpkgs.config; + }; + in +# pkgs_master_redmine_fixed.redmine; + pkgs_redmine_25-05_before-broken.redmine; + +#### https://github.com/NixOS/nixpkgs/pull/424140 +#### https://github.com/NixOS/nixpkgs/pull/424285 + +#### ve + } diff --git a/hosts/redmine/hardware-configuration.nix b/hosts/redmine/hardware-configuration.nix deleted file mode 100644 index b92ae55..0000000 --- a/hosts/redmine/hardware-configuration.nix +++ /dev/null @@ -1,38 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ - config, - lib, - pkgs, - modulesPath, - ... -}: - -{ - imports = [ - (modulesPath + "/profiles/qemu-guest.nix") - ]; - - boot.initrd.availableKernelModules = [ - "ata_piix" - "uhci_hcd" - "virtio_pci" - "virtio_scsi" - "sd_mod" - "sr_mod" - ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; - - # fileSystems."/" = - # { - # device = "/dev/sda1"; - # fsType = "ext4"; - # }; - - # swapDevices = [ ]; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; -} From f5090b30cb6f14cb9739a99bdb8cd779ce7fb99a Mon Sep 17 00:00:00 2001 From: goeranh Date: Fri, 27 Feb 2026 22:56:44 +0100 Subject: [PATCH 2/7] config running from flake --- hosts/redmine/default.nix | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/hosts/redmine/default.nix b/hosts/redmine/default.nix index 3a8ccba..2d0c9ff 100644 --- a/hosts/redmine/default.nix +++ b/hosts/redmine/default.nix @@ -1,12 +1,10 @@ -{ config, pkgs, lib, ... }: +{ config, pkgs, lib, modulesPath, ... }: { #services.openssh.enable = true; imports = [ - - - + "${modulesPath}/virtualisation/proxmox-lxc.nix" ]; @@ -49,7 +47,8 @@ proxmoxLXC.manageHostName = true; networking.hostName = "pro"; - networking.domain = "stura.htw-dresden.de"; +# wird in der default nix auch gesetzt + networking.domain = lib.mkForce "stura.htw-dresden.de"; # time.timeZone = "Europe/Berlin"; From 0093dbac85c9ae88e08b1dfbdd7661adb0feef77 Mon Sep 17 00:00:00 2001 From: goeranh Date: Sat, 28 Feb 2026 02:42:34 +0100 Subject: [PATCH 3/7] redmine: group networking settings --- hosts/redmine/default.nix | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/hosts/redmine/default.nix b/hosts/redmine/default.nix index 2d0c9ff..9059552 100644 --- a/hosts/redmine/default.nix +++ b/hosts/redmine/default.nix @@ -38,7 +38,14 @@ #### Netzwerk ############################ - networking.enableIPv6 = false; + networking = { + enableIPv6 = false; + hostName = "pro"; + domain = lib.mkForce "stura.htw-dresden.de"; + firewall.allowedTCPPorts = [ 22 80 443 ]; + # firewall.allowedTCPPorts = [ 80 443 3000 ]; + }; + ############################ @@ -46,9 +53,7 @@ ############################ proxmoxLXC.manageHostName = true; - networking.hostName = "pro"; # wird in der default nix auch gesetzt - networking.domain = lib.mkForce "stura.htw-dresden.de"; # time.timeZone = "Europe/Berlin"; @@ -156,10 +161,6 @@ security.acme.defaults.email = "cert@stura.htw-dresden.de"; security.acme.acceptTerms = true; -# networking.firewall.allowedTCPPorts = [ 80 443 3000 ]; - networking.firewall.allowedTCPPorts = [ 22 80 443 ]; - - ############################ #### Probleme ############################ From 7b25130a120cc5a492d5100eac864a2c9afabc76 Mon Sep 17 00:00:00 2001 From: goeranh Date: Sat, 28 Feb 2026 02:42:56 +0100 Subject: [PATCH 4/7] these defaults should be global --- default.nix | 8 ++++++++ hosts/redmine/default.nix | 8 -------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/default.nix b/default.nix index 4970af1..4eea8ff 100644 --- a/default.nix +++ b/default.nix @@ -59,6 +59,14 @@ in useXkbConfig = true; # use xkb.options in tty. }; + #### Wir verwenden die fuer NixOS ueblichen Empfehlung fuer Nginx. + services.nginx.recommendedOptimisation = true; + services.nginx.recommendedGzipSettings = true; + services.nginx.recommendedProxySettings = true; +#### Mit der Anwendung Nginx soll die (ausschließliche) Verwendung von https (http mit TLS), statt http ermoeglicht werden. + services.nginx.recommendedTlsSettings = true; + + users.users = { # erstmal nur mit root # administration = { diff --git a/hosts/redmine/default.nix b/hosts/redmine/default.nix index 9059552..50c96ce 100644 --- a/hosts/redmine/default.nix +++ b/hosts/redmine/default.nix @@ -128,14 +128,6 @@ access_log off; ''; -#### Wir verwenden die fuer NixOS ueblichen Empfehlung fuer Nginx. - services.nginx.recommendedOptimisation = true; - services.nginx.recommendedGzipSettings = true; -##### Mit der Anwendung Nginx soll die Erreichbarkeit der Anwendung Redmine (standardmaessig an Port 3000) (auf erwartbaren Weg) moeglich machen. - services.nginx.recommendedProxySettings = true; -#### Mit der Anwendung Nginx soll die (ausschließliche) Verwendung von https (http mit TLS), statt http ermoeglicht werden. - services.nginx.recommendedTlsSettings = true; - #### Anscheinend kann mit nix nur die Konfiguration fuer eine konkrete (manuelle) Konfiguration fuer den Dienst web server. services.nginx.virtualHosts."${config.networking.fqdn}" = { #### https://search.nixos.org/options?show=services.nginx.virtualHosts..default From d2d5dc135f3950f9c4291f9f78c0372ffc3c8bbb Mon Sep 17 00:00:00 2001 From: goeranh Date: Sat, 28 Feb 2026 02:45:18 +0100 Subject: [PATCH 5/7] acme settings auch in default.nix --- hosts/redmine/default.nix | 6 ------ 1 file changed, 6 deletions(-) diff --git a/hosts/redmine/default.nix b/hosts/redmine/default.nix index 50c96ce..5a67254 100644 --- a/hosts/redmine/default.nix +++ b/hosts/redmine/default.nix @@ -147,12 +147,6 @@ enableACME = true; }; -#### Die Verwendung von TLS braucht ein (valides) Zertifikat. -#### Beim StuRa verwenden wir den ((auch bei NixOS) standardmaessigen) Dienst von letsencrypt.org. -#### Bereitstellen der Informationen (Erreichbarkeit und Einwilligung) fuer letsencrypt.org - security.acme.defaults.email = "cert@stura.htw-dresden.de"; - security.acme.acceptTerms = true; - ############################ #### Probleme ############################ From d5941898c8866664b747f5177fb37a0b9a56e962 Mon Sep 17 00:00:00 2001 From: goeranh Date: Sat, 28 Feb 2026 02:51:46 +0100 Subject: [PATCH 6/7] update redmine, no longer pinned --- hosts/redmine/default.nix | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/hosts/redmine/default.nix b/hosts/redmine/default.nix index 5a67254..cf88a54 100644 --- a/hosts/redmine/default.nix +++ b/hosts/redmine/default.nix @@ -170,6 +170,7 @@ #### Problem - wie bei allen Instanzen mit NixOS auf PVE - fehlende Bereitstellung der Daten fuer locale +#### ich glaub das hier kann weg wenn man sich per ssh einloggt bekommt man ne richtige shell mit korrekten umgebungsvariablen #### 2025-06-27 vat@ && tan@ #### gescheiterter Versuch um fehlermeldungen nach @@ -241,22 +242,23 @@ ## ]; ## # - services.redmine.package = - let -#### fixing commit -#### https://github.com/NixOS/nixpkgs/commit/d21825f9cf895942e057230c56625e2290d1b149 -# pkgs_master_redmine_fixed = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/d21825f9cf895942e057230c56625e2290d1b149.tar.gz") { -# config = config.nixpkgs.config; -# }; -#### https://github.com/NixOS/nixpkgs/commits/nixos-25.05/pkgs/by-name/re/redmine -#### breaking commit -#### https://github.com/NixOS/nixpkgs/commit/1105b34ec2b88e82fe35be9e6ba5c547487824b2 - pkgs_redmine_25-05_before-broken = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/c80c8f5ba65ceab4c7ec266293a2ce20a663d245.tar.gz") { - config = config.nixpkgs.config; - }; - in -# pkgs_master_redmine_fixed.redmine; - pkgs_redmine_25-05_before-broken.redmine; + # mittlerweile in nixpkgs + #services.redmine.package = + # let +##### fixing commit +##### https://github.com/NixOS/nixpkgs/commit/d21825f9cf895942e057230c56625e2290d1b149 +## pkgs_master_redmine_fixed = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/d21825f9cf895942e057230c56625e2290d1b149.tar.gz") { +## config = config.nixpkgs.config; +## }; +##### https://github.com/NixOS/nixpkgs/commits/nixos-25.05/pkgs/by-name/re/redmine +##### breaking commit +##### https://github.com/NixOS/nixpkgs/commit/1105b34ec2b88e82fe35be9e6ba5c547487824b2 + # pkgs_redmine_25-05_before-broken = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/c80c8f5ba65ceab4c7ec266293a2ce20a663d245.tar.gz") { + # config = config.nixpkgs.config; + # }; + # in +## pkgs_master_redmine_fixed.redmine; + # pkgs_redmine_25-05_before-broken.redmine; #### https://github.com/NixOS/nixpkgs/pull/424140 #### https://github.com/NixOS/nixpkgs/pull/424285 From ac91948a06897b8981c1519ead1a24e8073c8bc2 Mon Sep 17 00:00:00 2001 From: oxce Date: Sat, 28 Feb 2026 19:04:22 +0100 Subject: [PATCH 7/7] =?UTF-8?q?redmine=20l=C3=A4uft?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hosts/redmine/default.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hosts/redmine/default.nix b/hosts/redmine/default.nix index cf88a54..6b4f8d0 100644 --- a/hosts/redmine/default.nix +++ b/hosts/redmine/default.nix @@ -43,6 +43,15 @@ hostName = "pro"; domain = lib.mkForce "stura.htw-dresden.de"; firewall.allowedTCPPorts = [ 22 80 443 ]; + interfaces.eth0.ipv4.addresses = [ + { + address = "141.56.51.15"; + prefixLength = 24; + } + ]; + defaultGateway.address = "141.56.51.254"; + defaultGateway.interface = "eth0"; + # firewall.allowedTCPPorts = [ 80 443 3000 ]; };