5 @subsection Релиз 7.5.0
9 @command{nncp-daemon} соблюдает UCSPI-TCP интерфейс, благодаря чему в
10 журнале будет присутствовать адрес удалённой системы (при запуске под
11 совместимой утилитой). Желательно применять @option{-ucspi} опцию вместо
15 @command{nncp-call} может быть UCSPI-TCP клиентом, используя
16 @option{-ucspi} опцию.
19 Не выходить если не получается слушать на каком-либо MCD сетевом
20 интерфейсе -- только предупреждать об ошибке.
25 @subsection Релиз 7.4.0
29 Исправлена работоспособность MCD при одновременном использовании
30 @command{nncp-daemon} и @command{nncp-caller}.
35 @subsection Релиз 7.3.2
39 @command{hjson-cli} утилита теперь собирается в vendor-режиме.
44 @subsection Релиз 7.3.1
48 Исправлена проблема с возможно остающимся открытым файловым
49 дескриптором в online командах.
52 Существенно снижено потребление памяти MTH хэширования.
57 @subsection Релиз 7.3.0
61 Поправлены проблемы работоспособности на 32-бит системах с большими файлами.
64 Возможность использовать конфигурацию в виде директории с набором
65 файлов. Появилась команда @command{nncp-cfgdir}.
70 @subsection Релиз 7.2.1
74 Небольшие оптимизации в online командах.
79 @subsection Релиз 7.2.0
83 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
86 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
87 использовать его, а не игнорировать.
90 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
91 видящего свой собственный пакет.
94 Намного меньшее потребление памяти во время MTH хэширования когда
95 смещение равно нулю: когда пакет не является докачиванием, а например
96 проверяется @command{nncp-check} командой.
101 @subsection Релиз 7.1.1
105 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
110 @subsection Релиз 7.1.0
114 Появилась возможность мультивещательной (multicast) рассылки пакетов.
115 Реализовано всего лишь дополнительным типом простых пакетов и изменением
116 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
119 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
120 команд использующих временный файл (stdin и @option{-use-tmp}).
123 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
126 Исправлено некорректное генерирование @file{.hdr} при использовании
130 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
134 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
135 проверку в бесконечный цикл.
138 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
141 @command{nncp-pkt} может парсить @file{.hdr} файлы.
146 @subsection Релиз 7.0.0
150 Минимальная требуемая версия Go 1.13.
153 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
154 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
155 изменение формата шифрованных файлов (всего что находится в spool
156 области) и формата @file{.meta} файла при chunked передаче.
158 Текущая реализация далека от оптимальной: в ней нет распараллеливания
159 вычислений и имеет повышенное потребление памяти: около 512 KiB на
160 каждый 1 GiB данных файла. Будущая оптимизация производительности и
161 потребления памяти не должна привести к изменению формата пакетов. Но
162 это всё равно в несколько раз быстрее BLAKE2b.
165 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
166 чтения с диска только предшествующей части, а не полностью всего файла,
170 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
173 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
174 уменьшая количество примитивов. А также заголовок шифрованного файла
175 теперь является ассоциированными данными при шифровании.
178 MultiCast Discovery использует
179 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
182 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
185 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
188 Обновлены зависимые библиотеки.
193 @subsection Релиз 6.6.0
197 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
198 ожидают завершения всех процессов фоновой проверки контрольных сумм,
199 после того как соединение закрыто.
202 Добавлена возможность определения адреса через multicast оповещение в
203 локальной сети, так называемый MCD (MultiCast Discovery).
208 @subsection Релиз 6.5.0
212 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
215 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
218 Исправлена гонка при закрытии файловых дескрипторов во время завершения
219 работы online протокола, которая могла привести к ошибке записи
220 принятого фрагмента пакета.
223 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
224 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
229 @subsection Релиз 6.4.0
233 Исправлена возможная гонка в online протоколе, приводящая к падению
239 @subsection Релиз 6.3.0
243 Исправлено возможное падение программы во время показа прогресса online
249 @subsection Релиз 6.2.1
253 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
258 @subsection Релиз 6.2.0
262 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
265 Очередной рефакторинг и упрощение системы журналирования.
266 Не должно быть видимых изменений для конечного пользователя.
271 @subsection Релиз 6.1.0
275 Оптимизация: большинство команд теперь не держат открытыми файловые
276 дескрипторы. Прежде вы легко могли выйти за пределы максимально
277 допустимого количества открытых файлов, если у вас было много пакетов в
281 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
282 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
285 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
286 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
287 online демоны не выполнят проверку целостности.
290 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
291 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
294 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
295 файлах, рядом с самими пакетами. Это может существенно повысить скорость
296 получения списка пакетов на файловых системах с большим размером блока.
301 @subsection Релиз 6.0.0
305 Журнал использует человеко-читаемый и легко обрабатываемый машиной
306 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
307 записей, вместо структурированных строчек RFC 3339. Старый формат
308 журналов не поддерживается @command{nncp-log}.
311 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
312 @command{nncp-daemon}.
315 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
316 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
317 выражением содержащим секунды, это можно использовать как возможность
318 вызова только при появлении исходящих пакетов.
321 @command{nncp-cronexpr} команда позволяет проверить корректность и
322 ожидаемый результат от указанного cron выражения.
327 @subsection Релиз 5.6.0
331 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
332 во время него ежесекундно.
335 В @option{calls} секции конфигурации появились опции
336 @option{autotoss}, @option{autotoss-doseen},
337 @option{autotoss-nofile}, @option{autotoss-nofreq},
338 @option{autotoss-noexec}, @option{autotoss-notrns}.
339 Вы можете настраивать опции автоматического tosser для каждого вызова.
342 Использовать vendoring вместо переопределения @env{GOPATH} во время
343 установки tarball, так как текущая минимальная версия Go это 1.12,
344 поддерживающая модули.
349 @subsection Релиз 5.5.1
353 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
354 в @file{config} во время установки.
359 @subsection Релиз 5.5.0
363 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
364 @command{nncp-bundle}, @command{nncp-stat} командах.
367 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
370 У команды @command{nncp-exec} появились @option{-use-tmp} и
371 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
375 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
376 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
379 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
384 @subsection Релиз 5.4.1
388 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
393 @subsection Релиз 5.4.0
397 Обновлены зависимые библиотеки.
400 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
401 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
402 реализация @command{redo} включена в tarball.
407 @subsection Релиз 5.3.3
411 Больше различных проверок в коде на ошибки.
414 Обновлены зависимые библиотеки.
419 @subsection Релиз 5.3.2
423 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
424 котором соединение могло не учитывать факты прихода пакетов и обрывать
430 @subsection Релиз 5.3.1
434 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
435 использующими внешние команды (@verb{#"|somecmd"#}).
438 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
439 каждому пакету в spool.
444 @subsection Релиз 5.3.0
448 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
451 Исправлено не происходящее дополнение (padding) handshake сообщений.
454 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
457 SP протокол порождает меньше вызовов записей (соответственно, и TCP
461 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
462 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
465 Раз в минуту, если нет более никакого другого трафика, посылаются PING
466 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
467 более не работоспособно.
470 @command{nncp-toss} использует lock-file для предотвращения
471 одновременной обработки зашифрованных пакетов.
476 @subsection Релиз 5.2.1
480 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
485 @subsection Релиз 5.2.0
489 Большинство команд по умолчанию показывают однострочный прогресс
490 выполнения операции. Появились @option{-progress}, @option{-noprogress}
491 опции командной строки, @option{noprogress} опция конфигурационного
495 Исправлен некорректный код возврата @command{nncp-check} команды,
496 который возвращал ошибку когда всё хорошо.
499 Проверка свободного места для пакетов, во время выполнения
500 @command{nncp-bundle -rx}.
505 @subsection Релиз 5.1.2
509 Исправлена @strong{критичная} уязвимость: аутентификация online нод
510 могла приводить к некорректной идентификации удалённой стороны, позволяя
511 скачивать чужие зашифрованные пакеты.
514 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
515 публичный ключ Noise были поменяны местами, что приводило к
516 невозможности online аутентификации нод.
519 Явная синхронизация (fsync) директорий для гарантированного
520 переименования файлов.
525 @subsection Релиз 5.1.1
529 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
534 @subsection Релиз 5.1.0
538 @command{nncp-file} может отправлять директории, автоматически на лету
542 Во время создания исходящих сообщений проверяется наличие свободного
543 места на файловой системе.
546 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
547 конфигурационного файла заменены на структуру
548 @option{freq: @{path: @dots{}, minsize: @dots{}, chunked: @dots{}@}}.
551 Добавлена @option{freq.maxsize} опция конфигурационного файл,
552 запрещающая ответ на файловый запрос больше заданного размера.
555 Возможность оповещения об успешно выполненных командах (exec) через
556 @option{notify.exec} опцию конфигурационного файла.
561 @subsection Релиз 5.0.0
565 @strong{Несовместимое} изменение формата конфигурационного файла:
566 YAML заменён на Hjson, из-за его гораздо большей простоты, без
567 заметной потери функционала и удобства.
570 @strong{Несовместимое} изменение формата простых пакетов. Работа со
571 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
572 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
573 смотря на то, что версия библиотеки ещё не проверена временем.
576 Возможность соединяться с удалёнными нодами не только по TCP, но и через
577 pipe вызов сторонней команды.
580 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
581 комментариев. Можно использовать @option{-nocomments} опцию для старого
585 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
586 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
589 Возможность переопределить umask процесса через опцию конфигурационного
593 По умолчанию файлы и директории создаются с 666/777 правами доступа,
594 позволяя управлять ими @command{umask}-ом.
597 Обновлены зависимости.
600 Полное использование go модулей для управления зависимостями
601 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
604 Отмена автоматического использования более новых версий GNU GPL
605 (лицензия проекта GNU GPLv3-только).
610 @subsection Релиз 4.1
612 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
616 @subsection Релиз 4.0
620 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
621 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
622 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
623 отсылать дешифрованные данные внешней команде. Старые версии не
627 Проверка доступного места перед копированием во время работы
628 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
631 @command{nncp-call} имеет возможность только показывать список пакетов
632 на удалённой машине, без их передачи.
635 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
638 Восстановлена работоспособность @option{xxrate} настройки в
639 @option{calls} секции конфигурационного файла.
642 Зависимые библиотеки обновлены.
645 Небольшие исправления ошибок.
648 Начало использования @code{go.mod} подсистемы.
653 @subsection Релиз 3.4
655 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
659 @subsection Релиз 3.3
663 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
664 проверяют существование @file{.seen} файла и расценивают его как то, что
665 файл уже был скачан. Возможно передача данных была осуществлена
666 сторонним способом и удалённая сторона должна быть оповещена об этом.
669 Если более высокоприоритетный пакет попадает в спул, то
670 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
671 низкоприоритетные передачи.
674 К средствам связанным с online-соединениями (@command{nncp-daemon},
675 @command{nncp-call}, @command{nncp-caller}) добавлен простой
676 ограничитель скорости.
679 Возможность задания приоритета символьными обозначениями:
680 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
683 Изменены значения приоритетов по-умолчанию:
684 для @command{nncp-exec} с 64 на 96,
685 для @command{nncp-freq} с 64 на 160,
686 для @command{nncp-file} с 196 на 224.
691 @subsection Релиз 3.2
694 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
695 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
696 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
697 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
698 Явное добавление @file{NNCP/} директории в архив восстанавливает
699 работоспособность с корректными tar архивами.
703 @subsection Релиз 3.1
706 Возможность отключать пересылку через промежуточные ноды используя
707 @verb{|-via -|} опцию командной строки.
711 @subsection Релиз 3.0
715 @strong{Несовместимое} изменение формата простых пакетов. Работа со
716 старыми версиями не поддерживается.
719 Добавлена возможность удалённого исполнения команд, путём
720 конфигурирования @option{exec} опции конфигурационного файла и
721 использования команды @command{nncp-exec}:
724 Команда @command{nncp-mail} заменена более гибкой и широкой
725 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
726 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
728 @option{sendmail} опция конфигурационного файла заменена на более гибкую
729 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
734 Возможность переопределить @option{via} опцию конфигурации для целевого
735 узла через @option{-via} опцию командной строки для следующих команд:
736 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
739 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
743 Exec команды вызываются с дополнительными переменными окружения
744 @env{NNCP_NICE} и @env{NNCP_SELF}.
747 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
748 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
749 аргументом @option{-replynice}.
752 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
753 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
754 @option{-noexec}, @option{-notrns}.
757 По-умолчанию @command{nncp-file} команда для
758 @option{-minsize}/@option{-chunked} опций использует
759 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
760 Это можно отключить указав нулевое значение.
765 @subsection Релиз 2.0
769 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
770 Работа со старыми версиями не поддерживается.
773 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
774 Одним криптографическим примитивом меньше.
777 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
778 криптографическим примитивом меньше (предполагая, что BLAKE2X
779 практически идентичен BLAKE2).
784 @subsection Релиз 1.0
788 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
789 со старыми версиями не поддерживается.
792 @command{nncp-bundle} команда может создавать потоки зашифрованных
793 пакетов или потреблять их. Это полезно когда речь идёт о
794 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
795 без создания промежуточного подготовленного ISO образа или работа с
796 ленточными накопителями).
799 @command{nncp-toss} команда может создавать @file{.seen} файлы,
800 предотвращая приём дублированных пакетов.
803 В команде @command{nncp-call} разрешается иметь только одного
804 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
805 входящих пакетов могут создать много горутин.
808 Возможность переопределить путь до spool директории и файла журнала
809 через аргумент командной строки или переменную окружения.
812 @command{nncp-rm} команда может удалять все исходящие/входящие,
813 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
818 @subsection Релиз 0.12
820 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
824 @subsection Релиз 0.11
826 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
830 @subsection Релиз 0.10
833 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
834 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
838 @subsection Релиз 0.9
841 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
842 команды. Они игнорировались.
846 @subsection Релиз 0.8
849 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
850 @option{-minsize} для передачи без разбиения на части была в байтах, а
855 @subsection Релиз 0.7
859 Возможность предоставлять данные для @command{nncp-file} через
860 стандартный ввод, используя временный зашифрованный файл для этого.
863 Появилась возможность передачи файлов разбитых на части, с сопутствующей
864 @command{nncp-reass} командой и @option{freqchunked} опцией
865 конфигурационного файла. Полезно для передачи больших файлов через
866 маленькие устройства хранения.
869 @option{freqminsize} опция конфигурационного файла, аналогичная
873 Опция @option{-force} команды @command{nncp-xfer} переименована в
874 @option{-mkdir} для ясности.
877 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
880 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
881 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
882 имели общий префикс и были сгруппированы для удобства.
885 Появилась команда @command{nncp-cfgenc}, позволяющая
886 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
887 без использования OpenPGP или других подобных инструментов.
890 Обновлены зависимые криптографические библиотеки.
895 @subsection Релиз 0.6
897 @item Появилась небольшая команда @command{nncp-rm}.
898 @item Обновлены зависимые криптографические библиотеки.
902 @subsection Релиз 0.5
905 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
906 @command{nncp-file} и @command{nncp-freq} командах.
910 @subsection Релиз 0.4
914 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
915 @command{nncp-daemon}: иногда они могли падать с segmentation fault
916 ошибкой (данные не терялись).
919 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
920 это короче и удобнее для использования.
923 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
924 позволяющая создать минималистичный урезанный конфигурационный файл без
925 приватных ключей, что полезно во время использования @command{nncp-xfer}.
930 @subsection Релиз 0.3
932 @item Исправлена совместимость с Go 1.6.
936 @subsection Релиз 0.2
940 @strong{Несовместимое} изменение формата пакета (магическое число тоже
941 изменено): поле размера пакета шифруется и не посылается в открытом виде.
944 @option{-minsize} опция даёт возможность автоматически дополнять
945 исходящие пакеты до указанного минимального размера.
948 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
949 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
950 Удалённая сторона сразу же оповещается об этом.
953 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
954 неактивность в online соединении, когда оно должно быть отключено. Она
955 может быть использована для сохранения соединения на долгое время.
958 @option{-maxonlinetime} опция даёт возможность указания максимального
959 возможного времени жизни соединения.
962 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
966 @command{nncp-pkt} команда может разжимать данные.