5 @subsection Релиз 7.6.0
9 Журналирование может производиться в назначенный открытый файловый
10 дескриптор (@env{$NNCPLOG=FD:5} например).
11 Что дружелюбно к использованию под @command{daemontools}.
16 @subsection Релиз 7.5.1
20 NNCP собирается на NetBSD.
25 @subsection Релиз 7.5.0
29 @command{nncp-daemon} соблюдает UCSPI-TCP интерфейс, благодаря чему в
30 журнале будет присутствовать адрес удалённой системы (при запуске под
31 совместимой утилитой). Желательно применять @option{-ucspi} опцию вместо
35 @command{nncp-call} может быть UCSPI-TCP клиентом, используя
36 @option{-ucspi} опцию.
39 Не выходить если не получается слушать на каком-либо MCD сетевом
40 интерфейсе -- только предупреждать об ошибке.
45 @subsection Релиз 7.4.0
49 Исправлена работоспособность MCD при одновременном использовании
50 @command{nncp-daemon} и @command{nncp-caller}.
55 @subsection Релиз 7.3.2
59 @command{hjson-cli} утилита теперь собирается в vendor-режиме.
64 @subsection Релиз 7.3.1
68 Исправлена проблема с возможно остающимся открытым файловым
69 дескриптором в online командах.
72 Существенно снижено потребление памяти MTH хэширования.
77 @subsection Релиз 7.3.0
81 Поправлены проблемы работоспособности на 32-бит системах с большими файлами.
84 Возможность использовать конфигурацию в виде директории с набором
85 файлов. Появилась команда @command{nncp-cfgdir}.
90 @subsection Релиз 7.2.1
94 Небольшие оптимизации в online командах.
99 @subsection Релиз 7.2.0
103 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
106 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
107 использовать его, а не игнорировать.
110 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
111 видящего свой собственный пакет.
114 Намного меньшее потребление памяти во время MTH хэширования когда
115 смещение равно нулю: когда пакет не является докачиванием, а например
116 проверяется @command{nncp-check} командой.
121 @subsection Релиз 7.1.1
125 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
130 @subsection Релиз 7.1.0
134 Появилась возможность мультивещательной (multicast) рассылки пакетов.
135 Реализовано всего лишь дополнительным типом простых пакетов и изменением
136 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
139 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
140 команд использующих временный файл (stdin и @option{-use-tmp}).
143 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
146 Исправлено некорректное генерирование @file{.hdr} при использовании
150 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
154 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
155 проверку в бесконечный цикл.
158 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
161 @command{nncp-pkt} может парсить @file{.hdr} файлы.
166 @subsection Релиз 7.0.0
170 Минимальная требуемая версия Go 1.13.
173 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
174 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
175 изменение формата шифрованных файлов (всего что находится в spool
176 области) и формата @file{.meta} файла при chunked передаче.
178 Текущая реализация далека от оптимальной: в ней нет распараллеливания
179 вычислений и имеет повышенное потребление памяти: около 512 KiB на
180 каждый 1 GiB данных файла. Будущая оптимизация производительности и
181 потребления памяти не должна привести к изменению формата пакетов. Но
182 это всё равно в несколько раз быстрее BLAKE2b.
185 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
186 чтения с диска только предшествующей части, а не полностью всего файла,
190 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
193 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
194 уменьшая количество примитивов. А также заголовок шифрованного файла
195 теперь является ассоциированными данными при шифровании.
198 MultiCast Discovery использует
199 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
202 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
205 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
208 Обновлены зависимые библиотеки.
213 @subsection Релиз 6.6.0
217 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
218 ожидают завершения всех процессов фоновой проверки контрольных сумм,
219 после того как соединение закрыто.
222 Добавлена возможность определения адреса через multicast оповещение в
223 локальной сети, так называемый MCD (MultiCast Discovery).
228 @subsection Релиз 6.5.0
232 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
235 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
238 Исправлена гонка при закрытии файловых дескрипторов во время завершения
239 работы online протокола, которая могла привести к ошибке записи
240 принятого фрагмента пакета.
243 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
244 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
249 @subsection Релиз 6.4.0
253 Исправлена возможная гонка в online протоколе, приводящая к падению
259 @subsection Релиз 6.3.0
263 Исправлено возможное падение программы во время показа прогресса online
269 @subsection Релиз 6.2.1
273 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
278 @subsection Релиз 6.2.0
282 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
285 Очередной рефакторинг и упрощение системы журналирования.
286 Не должно быть видимых изменений для конечного пользователя.
291 @subsection Релиз 6.1.0
295 Оптимизация: большинство команд теперь не держат открытыми файловые
296 дескрипторы. Прежде вы легко могли выйти за пределы максимально
297 допустимого количества открытых файлов, если у вас было много пакетов в
301 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
302 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
305 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
306 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
307 online демоны не выполнят проверку целостности.
310 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
311 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
314 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
315 файлах, рядом с самими пакетами. Это может существенно повысить скорость
316 получения списка пакетов на файловых системах с большим размером блока.
321 @subsection Релиз 6.0.0
325 Журнал использует человеко-читаемый и легко обрабатываемый машиной
326 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
327 записей, вместо структурированных строчек RFC 3339. Старый формат
328 журналов не поддерживается @command{nncp-log}.
331 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
332 @command{nncp-daemon}.
335 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
336 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
337 выражением содержащим секунды, это можно использовать как возможность
338 вызова только при появлении исходящих пакетов.
341 @command{nncp-cronexpr} команда позволяет проверить корректность и
342 ожидаемый результат от указанного cron выражения.
347 @subsection Релиз 5.6.0
351 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
352 во время него ежесекундно.
355 В @option{calls} секции конфигурации появились опции
356 @option{autotoss}, @option{autotoss-doseen},
357 @option{autotoss-nofile}, @option{autotoss-nofreq},
358 @option{autotoss-noexec}, @option{autotoss-notrns}.
359 Вы можете настраивать опции автоматического tosser для каждого вызова.
362 Использовать vendoring вместо переопределения @env{GOPATH} во время
363 установки tarball, так как текущая минимальная версия Go это 1.12,
364 поддерживающая модули.
369 @subsection Релиз 5.5.1
373 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
374 в @file{config} во время установки.
379 @subsection Релиз 5.5.0
383 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
384 @command{nncp-bundle}, @command{nncp-stat} командах.
387 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
390 У команды @command{nncp-exec} появились @option{-use-tmp} и
391 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
395 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
396 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
399 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
404 @subsection Релиз 5.4.1
408 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
413 @subsection Релиз 5.4.0
417 Обновлены зависимые библиотеки.
420 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
421 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
422 реализация @command{redo} включена в tarball.
427 @subsection Релиз 5.3.3
431 Больше различных проверок в коде на ошибки.
434 Обновлены зависимые библиотеки.
439 @subsection Релиз 5.3.2
443 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
444 котором соединение могло не учитывать факты прихода пакетов и обрывать
450 @subsection Релиз 5.3.1
454 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
455 использующими внешние команды (@verb{#"|somecmd"#}).
458 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
459 каждому пакету в spool.
464 @subsection Релиз 5.3.0
468 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
471 Исправлено не происходящее дополнение (padding) handshake сообщений.
474 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
477 SP протокол порождает меньше вызовов записей (соответственно, и TCP
481 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
482 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
485 Раз в минуту, если нет более никакого другого трафика, посылаются PING
486 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
487 более не работоспособно.
490 @command{nncp-toss} использует lock-file для предотвращения
491 одновременной обработки зашифрованных пакетов.
496 @subsection Релиз 5.2.1
500 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
505 @subsection Релиз 5.2.0
509 Большинство команд по умолчанию показывают однострочный прогресс
510 выполнения операции. Появились @option{-progress}, @option{-noprogress}
511 опции командной строки, @option{noprogress} опция конфигурационного
515 Исправлен некорректный код возврата @command{nncp-check} команды,
516 который возвращал ошибку когда всё хорошо.
519 Проверка свободного места для пакетов, во время выполнения
520 @command{nncp-bundle -rx}.
525 @subsection Релиз 5.1.2
529 Исправлена @strong{критичная} уязвимость: аутентификация online нод
530 могла приводить к некорректной идентификации удалённой стороны, позволяя
531 скачивать чужие зашифрованные пакеты.
534 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
535 публичный ключ Noise были поменяны местами, что приводило к
536 невозможности online аутентификации нод.
539 Явная синхронизация (fsync) директорий для гарантированного
540 переименования файлов.
545 @subsection Релиз 5.1.1
549 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
554 @subsection Релиз 5.1.0
558 @command{nncp-file} может отправлять директории, автоматически на лету
562 Во время создания исходящих сообщений проверяется наличие свободного
563 места на файловой системе.
566 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
567 конфигурационного файла заменены на структуру
568 @option{freq: @{path: @dots{}, minsize: @dots{}, chunked: @dots{}@}}.
571 Добавлена @option{freq.maxsize} опция конфигурационного файл,
572 запрещающая ответ на файловый запрос больше заданного размера.
575 Возможность оповещения об успешно выполненных командах (exec) через
576 @option{notify.exec} опцию конфигурационного файла.
581 @subsection Релиз 5.0.0
585 @strong{Несовместимое} изменение формата конфигурационного файла:
586 YAML заменён на Hjson, из-за его гораздо большей простоты, без
587 заметной потери функционала и удобства.
590 @strong{Несовместимое} изменение формата простых пакетов. Работа со
591 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
592 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
593 смотря на то, что версия библиотеки ещё не проверена временем.
596 Возможность соединяться с удалёнными нодами не только по TCP, но и через
597 pipe вызов сторонней команды.
600 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
601 комментариев. Можно использовать @option{-nocomments} опцию для старого
605 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
606 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
609 Возможность переопределить umask процесса через опцию конфигурационного
613 По умолчанию файлы и директории создаются с 666/777 правами доступа,
614 позволяя управлять ими @command{umask}-ом.
617 Обновлены зависимости.
620 Полное использование go модулей для управления зависимостями
621 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
624 Отмена автоматического использования более новых версий GNU GPL
625 (лицензия проекта GNU GPLv3-только).
630 @subsection Релиз 4.1
632 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
636 @subsection Релиз 4.0
640 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
641 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
642 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
643 отсылать дешифрованные данные внешней команде. Старые версии не
647 Проверка доступного места перед копированием во время работы
648 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
651 @command{nncp-call} имеет возможность только показывать список пакетов
652 на удалённой машине, без их передачи.
655 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
658 Восстановлена работоспособность @option{xxrate} настройки в
659 @option{calls} секции конфигурационного файла.
662 Зависимые библиотеки обновлены.
665 Небольшие исправления ошибок.
668 Начало использования @code{go.mod} подсистемы.
673 @subsection Релиз 3.4
675 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
679 @subsection Релиз 3.3
683 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
684 проверяют существование @file{.seen} файла и расценивают его как то, что
685 файл уже был скачан. Возможно передача данных была осуществлена
686 сторонним способом и удалённая сторона должна быть оповещена об этом.
689 Если более высокоприоритетный пакет попадает в спул, то
690 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
691 низкоприоритетные передачи.
694 К средствам связанным с online-соединениями (@command{nncp-daemon},
695 @command{nncp-call}, @command{nncp-caller}) добавлен простой
696 ограничитель скорости.
699 Возможность задания приоритета символьными обозначениями:
700 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
703 Изменены значения приоритетов по-умолчанию:
704 для @command{nncp-exec} с 64 на 96,
705 для @command{nncp-freq} с 64 на 160,
706 для @command{nncp-file} с 196 на 224.
711 @subsection Релиз 3.2
714 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
715 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
716 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
717 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
718 Явное добавление @file{NNCP/} директории в архив восстанавливает
719 работоспособность с корректными tar архивами.
723 @subsection Релиз 3.1
726 Возможность отключать пересылку через промежуточные ноды используя
727 @verb{|-via -|} опцию командной строки.
731 @subsection Релиз 3.0
735 @strong{Несовместимое} изменение формата простых пакетов. Работа со
736 старыми версиями не поддерживается.
739 Добавлена возможность удалённого исполнения команд, путём
740 конфигурирования @option{exec} опции конфигурационного файла и
741 использования команды @command{nncp-exec}:
744 Команда @command{nncp-mail} заменена более гибкой и широкой
745 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
746 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
748 @option{sendmail} опция конфигурационного файла заменена на более гибкую
749 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
754 Возможность переопределить @option{via} опцию конфигурации для целевого
755 узла через @option{-via} опцию командной строки для следующих команд:
756 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
759 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
763 Exec команды вызываются с дополнительными переменными окружения
764 @env{NNCP_NICE} и @env{NNCP_SELF}.
767 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
768 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
769 аргументом @option{-replynice}.
772 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
773 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
774 @option{-noexec}, @option{-notrns}.
777 По-умолчанию @command{nncp-file} команда для
778 @option{-minsize}/@option{-chunked} опций использует
779 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
780 Это можно отключить указав нулевое значение.
785 @subsection Релиз 2.0
789 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
790 Работа со старыми версиями не поддерживается.
793 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
794 Одним криптографическим примитивом меньше.
797 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
798 криптографическим примитивом меньше (предполагая, что BLAKE2X
799 практически идентичен BLAKE2).
804 @subsection Релиз 1.0
808 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
809 со старыми версиями не поддерживается.
812 @command{nncp-bundle} команда может создавать потоки зашифрованных
813 пакетов или потреблять их. Это полезно когда речь идёт о
814 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
815 без создания промежуточного подготовленного ISO образа или работа с
816 ленточными накопителями).
819 @command{nncp-toss} команда может создавать @file{.seen} файлы,
820 предотвращая приём дублированных пакетов.
823 В команде @command{nncp-call} разрешается иметь только одного
824 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
825 входящих пакетов могут создать много горутин.
828 Возможность переопределить путь до spool директории и файла журнала
829 через аргумент командной строки или переменную окружения.
832 @command{nncp-rm} команда может удалять все исходящие/входящие,
833 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
838 @subsection Релиз 0.12
840 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
844 @subsection Релиз 0.11
846 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
850 @subsection Релиз 0.10
853 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
854 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
858 @subsection Релиз 0.9
861 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
862 команды. Они игнорировались.
866 @subsection Релиз 0.8
869 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
870 @option{-minsize} для передачи без разбиения на части была в байтах, а
875 @subsection Релиз 0.7
879 Возможность предоставлять данные для @command{nncp-file} через
880 стандартный ввод, используя временный зашифрованный файл для этого.
883 Появилась возможность передачи файлов разбитых на части, с сопутствующей
884 @command{nncp-reass} командой и @option{freqchunked} опцией
885 конфигурационного файла. Полезно для передачи больших файлов через
886 маленькие устройства хранения.
889 @option{freqminsize} опция конфигурационного файла, аналогичная
893 Опция @option{-force} команды @command{nncp-xfer} переименована в
894 @option{-mkdir} для ясности.
897 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
900 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
901 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
902 имели общий префикс и были сгруппированы для удобства.
905 Появилась команда @command{nncp-cfgenc}, позволяющая
906 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
907 без использования OpenPGP или других подобных инструментов.
910 Обновлены зависимые криптографические библиотеки.
915 @subsection Релиз 0.6
917 @item Появилась небольшая команда @command{nncp-rm}.
918 @item Обновлены зависимые криптографические библиотеки.
922 @subsection Релиз 0.5
925 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
926 @command{nncp-file} и @command{nncp-freq} командах.
930 @subsection Релиз 0.4
934 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
935 @command{nncp-daemon}: иногда они могли падать с segmentation fault
936 ошибкой (данные не терялись).
939 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
940 это короче и удобнее для использования.
943 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
944 позволяющая создать минималистичный урезанный конфигурационный файл без
945 приватных ключей, что полезно во время использования @command{nncp-xfer}.
950 @subsection Релиз 0.3
952 @item Исправлена совместимость с Go 1.6.
956 @subsection Релиз 0.2
960 @strong{Несовместимое} изменение формата пакета (магическое число тоже
961 изменено): поле размера пакета шифруется и не посылается в открытом виде.
964 @option{-minsize} опция даёт возможность автоматически дополнять
965 исходящие пакеты до указанного минимального размера.
968 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
969 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
970 Удалённая сторона сразу же оповещается об этом.
973 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
974 неактивность в online соединении, когда оно должно быть отключено. Она
975 может быть использована для сохранения соединения на долгое время.
978 @option{-maxonlinetime} опция даёт возможность указания максимального
979 возможного времени жизни соединения.
982 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
986 @command{nncp-pkt} команда может разжимать данные.