Сборка пакета Angie в NIxOS

При сборке пакета в NixOS столкнулся с несколькими проблемами:

  1. Откуда можно скачать исходные файлы для модуля angie-console-light?
  2. Во время тестирования API модуля не учитывается ошибки связи в HTTP Upstreams до сервера, использующий UNIX сокет, в логах ошибка отображается как критическая. Если переключить на HTTP, то при ошибках связи счетчик начинает работать.

Здравствуйте.

  1. Отсюда: https://download.angie.software/files/angie-console-light/

  2. Спасибо. Обратим на это внимание и постараемся исправить к следующему релизу.

Добрый день.

Ниже патч, который должен исправить проблему, указанную во 2-ом пункте.
Вскоре выпустим релиз, в который войдет данное исправление.

diff --git a/src/http/ngx_http_upstream_round_robin.c b/src/http/ngx_http_upstream_round_robin.c
--- a/src/http/ngx_http_upstream_round_robin.c
+++ b/src/http/ngx_http_upstream_round_robin.c
@@ -863,13 +863,7 @@ ngx_http_upstream_stat(ngx_peer_connecti
     ngx_http_request_t   *r;
     ngx_http_upstream_t  *u;
 
-    c = pc->connection;
-
-    if (c == NULL || c->data == NULL) {
-        return;
-    }
-
-    r = c->data;
+    r = pc->ctx;
     u = r->upstream;
 
     if (u->upstream == NULL || u->upstream->shm_zone == NULL) {
@@ -898,6 +892,16 @@ ngx_http_upstream_stat(ngx_peer_connecti
         }
     }
 
+    c = pc->connection;
+
+    if (c == NULL) {
+        /*
+         * immediate fail of establishing connection
+         * in ngx_event_connect_peer()
+         */
+        return;
+    }
+
     if (u->state->status) {
         code = u->state->status;
         idx = (code >= 100 && code <= 599) ? code - 100 : 500;
diff --git a/src/stream/ngx_stream_upstream_round_robin.c b/src/stream/ngx_stream_upstream_round_robin.c
--- a/src/stream/ngx_stream_upstream_round_robin.c
+++ b/src/stream/ngx_stream_upstream_round_robin.c
@@ -864,13 +864,7 @@ ngx_stream_upstream_stat(ngx_peer_connec
     ngx_stream_session_t   *s;
     ngx_stream_upstream_t  *u;
 
-    c = pc->connection;
-
-    if (c == NULL || c->data == NULL) {
-        return;
-    }
-
-    s = c->data;
+    s = pc->ctx;
     u = s->upstream;
 
     if (u->upstream == NULL || u->upstream->shm_zone == NULL) {
@@ -899,6 +893,16 @@ ngx_stream_upstream_stat(ngx_peer_connec
         }
     }
 
+    c = pc->connection;
+
+    if (c == NULL) {
+        /*
+         * immediate fail of establishing connection
+         * in ngx_event_connect_peer()
+         */
+        return;
+    }
+
     peer->stats.sent += c->sent;
     peer->stats.received += u->received;
 }

1 Like

Добрый день.
Спасибо, патч работает.
Можно ли предоставить прямую ссылку на коммит с git репозитория?

Спасибо за подтверждение работоспособности.
После того, как пройдет внутреннее ревью - появится в репозитории и дам ссылку.

1 Like

Коммит: API: fixed counting failed connections to upstream servers. · fcfb771d5a - angie - Gitea: Git with a cup of tea

Также сейчас выпускаем Angie 1.3.2, куда входит данное исправление.

1 Like

Спасибо, обновил PR:

1 Like

Обратил внимание, что тут версия не верно указана:

1 Like

Видимо это ошибка при конвертации репозитория. Мы используем Mercurial, а Git репозиторий - это просто клон, сконвертированный из Mercurial. Похоже скрипт конвертации не справился с обработкой бранча.

В реальности там отдельный 1.3 бранч и на нем версия указана верно: angie: 3a0e4c3c2b36 src/core/angie.h

Ясно. Мне проще ориентироваться в git репозитории :slight_smile:

А смотрю в Git тоже всё верно. Просто вы смотрите в main ветку, в которой находится 1.4.0 в разработке. А релиз сделан на багфикс бранче и там тоже версия правильная и в Git-репозитории: angie/angie.h at 850a2fa7b351a539dc51dd558d883dd5d1a88491 - angie - Gitea: Git with a cup of tea

Там же несколько веток: Commit Graph - angie - Gitea: Git with a cup of tea

У меня только одна ветка отображается - main, и теги до версии 1.3.1 + nginx до 1.25.3.
Либо я сам запутался в ветках)
Вроде разобрался :slight_smile:

Обновил версию до 1.3.2 PR в NixOS.

1 Like

Готово!
Теперь Angie можно использовать и в NixOS. Для этого надо прописать так:

  services.nginx.package = pkgs.angie

или

  services.nginx.package = pkgs.angieQuic

для работы с протоколом HTTP/3.
По умолчанию исполняемый файл переименован в bin/nginx для совместимости. Имеется символическая ссылка на bin/angie.

Планируется ли добавление ОС NixOS в список поддерживаемых систем? Или для этого лучше подойдёт раздел, поддерживаемый сообществом?

Пока такого в планах не было.
Будем решать по мере поступления запросов от пользователей.

1 Like

Простите,
Я учусь на nix. Я пропустил поддержку angie, я использовал angie на arch linux.

Подскажите, пожалуйста, где я совершаю ошибку. Приведенной выше процедуры оказалось недостаточно.

Спасибо

error: attribute ‘angie’ missing

   at /barbaros/nix/packages/nginx.nix:6:28:

        5|
        6|   services.nginx.package = pkgs.angie;
         |                            ^
        7|

Вы какой канал используете?

nix-channel --list

[root@nixos:~]# nix-channel --list
nixos nixos-23.11 release nixos-23.11.4377.1d1817869c47