5 @subsection Релиз 7.2.0
9 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
12 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
13 использовать его, а не игнорировать.
18 @subsection Релиз 7.1.1
22 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
27 @subsection Релиз 7.1.0
31 Появилась возможность мультивещательной (multicast) рассылки пакетов.
32 Реализовано всего лишь дополнительным типом простых пакетов и изменением
33 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
36 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
37 команд использующих временный файл (stdin и @option{-use-tmp}).
40 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
43 Исправлено некорректное генерирование @file{.hdr} при использовании
47 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
51 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
52 проверку в бесконечный цикл.
55 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
58 @command{nncp-pkt} может парсить @file{.hdr} файлы.
63 @subsection Релиз 7.0.0
67 Минимальная требуемая версия Go 1.13.
70 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
71 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
72 изменение формата шифрованных файлов (всего что находится в spool
73 области) и формата @file{.meta} файла при chunked передаче.
75 Текущая реализация далека от оптимальной: в ней нет распараллеливания
76 вычислений и имеет повышенное потребление памяти: около 512 KiB на
77 каждый 1 GiB данных файла. Будущая оптимизация производительности и
78 потребления памяти не должна привести к изменению формата пакетов. Но
79 это всё равно в несколько раз быстрее BLAKE2b.
82 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
83 чтения с диска только предшествующей части, а не полностью всего файла,
87 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
90 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
91 уменьшая количество примитивов. А также заголовок шифрованного файла
92 теперь является ассоциированными данными при шифровании.
95 MultiCast Discovery использует
96 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
99 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
102 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
105 Обновлены зависимые библиотеки.
110 @subsection Релиз 6.6.0
114 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
115 ожидают завершения всех процессов фоновой проверки контрольных сумм,
116 после того как соединение закрыто.
119 Добавлена возможность определения адреса через multicast оповещение в
120 локальной сети, так называемый MCD (MultiCast Discovery).
125 @subsection Релиз 6.5.0
129 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
132 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
135 Исправлена гонка при закрытии файловых дескрипторов во время завершения
136 работы online протокола, которая могла привести к ошибке записи
137 принятого фрагмента пакета.
140 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
141 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
146 @subsection Релиз 6.4.0
150 Исправлена возможная гонка в online протоколе, приводящая к падению
156 @subsection Релиз 6.3.0
160 Исправлено возможное падение программы во время показа прогресса online
166 @subsection Релиз 6.2.1
170 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
175 @subsection Релиз 6.2.0
179 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
182 Очередной рефакторинг и упрощение системы журналирования.
183 Не должно быть видимых изменений для конечного пользователя.
188 @subsection Релиз 6.1.0
192 Оптимизация: большинство команд теперь не держат открытыми файловые
193 дескрипторы. Прежде вы легко могли выйти за пределы максимально
194 допустимого количества открытых файлов, если у вас было много пакетов в
198 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
199 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
202 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
203 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
204 online демоны не выполнят проверку целостности.
207 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
208 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
211 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
212 файлах, рядом с самими пакетами. Это может существенно повысить скорость
213 получения списка пакетов на файловых системах с большим размером блока.
218 @subsection Релиз 6.0.0
222 Журнал использует человеко-читаемый и легко обрабатываемый машиной
223 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
224 записей, вместо структурированных строчек RFC 3339. Старый формат
225 журналов не поддерживается @command{nncp-log}.
228 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
229 @command{nncp-daemon}.
232 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
233 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
234 выражением содержащим секунды, это можно использовать как возможность
235 вызова только при появлении исходящих пакетов.
238 @command{nncp-cronexpr} команда позволяет проверить корректность и
239 ожидаемый результат от указанного cron выражения.
244 @subsection Релиз 5.6.0
248 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
249 во время него ежесекундно.
252 В @option{calls} секции конфигурации появились опции
253 @option{autotoss}, @option{autotoss-doseen},
254 @option{autotoss-nofile}, @option{autotoss-nofreq},
255 @option{autotoss-noexec}, @option{autotoss-notrns}.
256 Вы можете настраивать опции автоматического tosser для каждого вызова.
259 Использовать vendoring вместо переопределения @env{GOPATH} во время
260 установки tarball, так как текущая минимальная версия Go это 1.12,
261 поддерживающая модули.
266 @subsection Релиз 5.5.1
270 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
271 в @file{config} во время установки.
276 @subsection Релиз 5.5.0
280 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
281 @command{nncp-bundle}, @command{nncp-stat} командах.
284 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
287 У команды @command{nncp-exec} появились @option{-use-tmp} и
288 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
292 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
293 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
296 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
301 @subsection Релиз 5.4.1
305 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
310 @subsection Релиз 5.4.0
314 Обновлены зависимые библиотеки.
317 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
318 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
319 реализация @command{redo} включена в tarball.
324 @subsection Релиз 5.3.3
328 Больше различных проверок в коде на ошибки.
331 Обновлены зависимые библиотеки.
336 @subsection Релиз 5.3.2
340 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
341 котором соединение могло не учитывать факты прихода пакетов и обрывать
347 @subsection Релиз 5.3.1
351 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
352 использующими внешние команды (@verb{#"|somecmd"#}).
355 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
356 каждому пакету в spool.
361 @subsection Релиз 5.3.0
365 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
368 Исправлено не происходящее дополнение (padding) handshake сообщений.
371 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
374 SP протокол порождает меньше вызовов записей (соответственно, и TCP
378 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
379 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
382 Раз в минуту, если нет более никакого другого трафика, посылаются PING
383 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
384 более не работоспособно.
387 @command{nncp-toss} использует lock-file для предотвращения
388 одновременной обработки зашифрованных пакетов.
393 @subsection Релиз 5.2.1
397 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
402 @subsection Релиз 5.2.0
406 Большинство команд по умолчанию показывают однострочный прогресс
407 выполнения операции. Появились @option{-progress}, @option{-noprogress}
408 опции командной строки, @option{noprogress} опция конфигурационного
412 Исправлен некорректный код возврата @command{nncp-check} команды,
413 который возвращал ошибку когда всё хорошо.
416 Проверка свободного места для пакетов, во время выполнения
417 @command{nncp-bundle -rx}.
422 @subsection Релиз 5.1.2
426 Исправлена @strong{критичная} уязвимость: аутентификация online нод
427 могла приводить к некорректной идентификации удалённой стороны, позволяя
428 скачивать чужие зашифрованные пакеты.
431 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
432 публичный ключ Noise были поменяны местами, что приводило к
433 невозможности online аутентификации нод.
436 Явная синхронизация (fsync) директорий для гарантированного
437 переименования файлов.
442 @subsection Релиз 5.1.1
446 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
451 @subsection Релиз 5.1.0
455 @command{nncp-file} может отправлять директории, автоматически на лету
459 Во время создания исходящих сообщений проверяется наличие свободного
460 места на файловой системе.
463 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
464 конфигурационного файла заменены на структуру
465 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
468 Добавлена @option{freq.maxsize} опция конфигурационного файл,
469 запрещающая ответ на файловый запрос больше заданного размера.
472 Возможность оповещения об успешно выполненных командах (exec) через
473 @option{notify.exec} опцию конфигурационного файла.
478 @subsection Релиз 5.0.0
482 @strong{Несовместимое} изменение формата конфигурационного файла:
483 YAML заменён на Hjson, из-за его гораздо большей простоты, без
484 заметной потери функционала и удобства.
487 @strong{Несовместимое} изменение формата простых пакетов. Работа со
488 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
489 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
490 смотря на то, что версия библиотеки ещё не проверена временем.
493 Возможность соединяться с удалёнными нодами не только по TCP, но и через
494 pipe вызов сторонней команды.
497 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
498 комментариев. Можно использовать @option{-nocomments} опцию для старого
502 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
503 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
506 Возможность переопределить umask процесса через опцию конфигурационного
510 По умолчанию файлы и директории создаются с 666/777 правами доступа,
511 позволяя управлять ими @command{umask}-ом.
514 Обновлены зависимости.
517 Полное использование go модулей для управления зависимостями
518 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
521 Отмена автоматического использования более новых версий GNU GPL
522 (лицензия проекта GNU GPLv3-только).
527 @subsection Релиз 4.1
529 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
533 @subsection Релиз 4.0
537 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
538 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
539 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
540 отсылать дешифрованные данные внешней команде. Старые версии не
544 Проверка доступного места перед копированием во время работы
545 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
548 @command{nncp-call} имеет возможность только показывать список пакетов
549 на удалённой машине, без их передачи.
552 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
555 Восстановлена работоспособность @option{xxrate} настройки в
556 @option{calls} секции конфигурационного файла.
559 Зависимые библиотеки обновлены.
562 Небольшие исправления ошибок.
565 Начало использования @code{go.mod} подсистемы.
570 @subsection Релиз 3.4
572 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
576 @subsection Релиз 3.3
580 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
581 проверяют существование @file{.seen} файла и расценивают его как то, что
582 файл уже был скачан. Возможно передача данных была осуществлена
583 сторонним способом и удалённая сторона должна быть оповещена об этом.
586 Если более высокоприоритетный пакет попадает в спул, то
587 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
588 низкоприоритетные передачи.
591 К средствам связанным с online-соединениями (@command{nncp-daemon},
592 @command{nncp-call}, @command{nncp-caller}) добавлен простой
593 ограничитель скорости.
596 Возможность задания приоритета символьными обозначениями:
597 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
600 Изменены значения приоритетов по-умолчанию:
601 для @command{nncp-exec} с 64 на 96,
602 для @command{nncp-freq} с 64 на 160,
603 для @command{nncp-file} с 196 на 224.
608 @subsection Релиз 3.2
611 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
612 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
613 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
614 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
615 Явное добавление @file{NNCP/} директории в архив восстанавливает
616 работоспособность с корректными tar архивами.
620 @subsection Релиз 3.1
623 Возможность отключать пересылку через промежуточные ноды используя
624 @verb{|-via -|} опцию командной строки.
628 @subsection Релиз 3.0
632 @strong{Несовместимое} изменение формата простых пакетов. Работа со
633 старыми версиями не поддерживается.
636 Добавлена возможность удалённого исполнения команд, путём
637 конфигурирования @option{exec} опции конфигурационного файла и
638 использования команды @command{nncp-exec}:
641 Команда @command{nncp-mail} заменена более гибкой и широкой
642 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
643 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
645 @option{sendmail} опция конфигурационного файла заменена на более гибкую
646 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
651 Возможность переопределить @option{via} опцию конфигурации для целевого
652 узла через @option{-via} опцию командной строки для следующих команд:
653 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
656 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
660 Exec команды вызываются с дополнительными переменными окружения
661 @env{NNCP_NICE} и @env{NNCP_SELF}.
664 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
665 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
666 аргументом @option{-replynice}.
669 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
670 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
671 @option{-noexec}, @option{-notrns}.
674 По-умолчанию @command{nncp-file} команда для
675 @option{-minsize}/@option{-chunked} опций использует
676 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
677 Это можно отключить указав нулевое значение.
682 @subsection Релиз 2.0
686 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
687 Работа со старыми версиями не поддерживается.
690 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
691 Одним криптографическим примитивом меньше.
694 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
695 криптографическим примитивом меньше (предполагая, что BLAKE2X
696 практически идентичен BLAKE2).
701 @subsection Релиз 1.0
705 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
706 со старыми версиями не поддерживается.
709 @command{nncp-bundle} команда может создавать потоки зашифрованных
710 пакетов или потреблять их. Это полезно когда речь идёт о
711 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
712 без создания промежуточного подготовленного ISO образа или работа с
713 ленточными накопителями).
716 @command{nncp-toss} команда может создавать @file{.seen} файлы,
717 предотвращая приём дублированных пакетов.
720 В команде @command{nncp-call} разрешается иметь только одного
721 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
722 входящих пакетов могут создать много горутин.
725 Возможность переопределить путь до spool директории и файла журнала
726 через аргумент командной строки или переменную окружения.
729 @command{nncp-rm} команда может удалять все исходящие/входящие,
730 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
735 @subsection Релиз 0.12
737 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
741 @subsection Релиз 0.11
743 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
747 @subsection Релиз 0.10
750 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
751 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
755 @subsection Релиз 0.9
758 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
759 команды. Они игнорировались.
763 @subsection Релиз 0.8
766 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
767 @option{-minsize} для передачи без разбиения на части была в байтах, а
772 @subsection Релиз 0.7
776 Возможность предоставлять данные для @command{nncp-file} через
777 стандартный ввод, используя временный зашифрованный файл для этого.
780 Появилась возможность передачи файлов разбитых на части, с сопутствующей
781 @command{nncp-reass} командой и @option{freqchunked} опцией
782 конфигурационного файла. Полезно для передачи больших файлов через
783 маленькие устройства хранения.
786 @option{freqminsize} опция конфигурационного файла, аналогичная
790 Опция @option{-force} команды @command{nncp-xfer} переименована в
791 @option{-mkdir} для ясности.
794 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
797 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
798 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
799 имели общий префикс и были сгруппированы для удобства.
802 Появилась команда @command{nncp-cfgenc}, позволяющая
803 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
804 без использования OpenPGP или других подобных инструментов.
807 Обновлены зависимые криптографические библиотеки.
812 @subsection Релиз 0.6
814 @item Появилась небольшая команда @command{nncp-rm}.
815 @item Обновлены зависимые криптографические библиотеки.
819 @subsection Релиз 0.5
822 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
823 @command{nncp-file} и @command{nncp-freq} командах.
827 @subsection Релиз 0.4
831 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
832 @command{nncp-daemon}: иногда они могли падать с segmentation fault
833 ошибкой (данные не терялись).
836 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
837 это короче и удобнее для использования.
840 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
841 позволяющая создать минималистичный урезанный конфигурационный файл без
842 приватных ключей, что полезно во время использования @command{nncp-xfer}.
847 @subsection Релиз 0.3
849 @item Исправлена совместимость с Go 1.6.
853 @subsection Релиз 0.2
857 @strong{Несовместимое} изменение формата пакета (магическое число тоже
858 изменено): поле размера пакета шифруется и не посылается в открытом виде.
861 @option{-minsize} опция даёт возможность автоматически дополнять
862 исходящие пакеты до указанного минимального размера.
865 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
866 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
867 Удалённая сторона сразу же оповещается об этом.
870 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
871 неактивность в online соединении, когда оно должно быть отключено. Она
872 может быть использована для сохранения соединения на долгое время.
875 @option{-maxonlinetime} опция даёт возможность указания максимального
876 возможного времени жизни соединения.
879 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
883 @command{nncp-pkt} команда может разжимать данные.