5 @subsection Релиз 7.2.0
9 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
12 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
13 использовать его, а не игнорировать.
16 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
17 видящего свой собственный пакет.
20 Намного меньшее потребление памяти во время MTH хэширования когда
21 смещение равно нулю: когда пакет не является докачиванием, а например
22 проверяется @command{nncp-check} командой.
27 @subsection Релиз 7.1.1
31 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
36 @subsection Релиз 7.1.0
40 Появилась возможность мультивещательной (multicast) рассылки пакетов.
41 Реализовано всего лишь дополнительным типом простых пакетов и изменением
42 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
45 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
46 команд использующих временный файл (stdin и @option{-use-tmp}).
49 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
52 Исправлено некорректное генерирование @file{.hdr} при использовании
56 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
60 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
61 проверку в бесконечный цикл.
64 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
67 @command{nncp-pkt} может парсить @file{.hdr} файлы.
72 @subsection Релиз 7.0.0
76 Минимальная требуемая версия Go 1.13.
79 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
80 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
81 изменение формата шифрованных файлов (всего что находится в spool
82 области) и формата @file{.meta} файла при chunked передаче.
84 Текущая реализация далека от оптимальной: в ней нет распараллеливания
85 вычислений и имеет повышенное потребление памяти: около 512 KiB на
86 каждый 1 GiB данных файла. Будущая оптимизация производительности и
87 потребления памяти не должна привести к изменению формата пакетов. Но
88 это всё равно в несколько раз быстрее BLAKE2b.
91 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
92 чтения с диска только предшествующей части, а не полностью всего файла,
96 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
99 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
100 уменьшая количество примитивов. А также заголовок шифрованного файла
101 теперь является ассоциированными данными при шифровании.
104 MultiCast Discovery использует
105 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
108 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
111 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
114 Обновлены зависимые библиотеки.
119 @subsection Релиз 6.6.0
123 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
124 ожидают завершения всех процессов фоновой проверки контрольных сумм,
125 после того как соединение закрыто.
128 Добавлена возможность определения адреса через multicast оповещение в
129 локальной сети, так называемый MCD (MultiCast Discovery).
134 @subsection Релиз 6.5.0
138 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
141 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
144 Исправлена гонка при закрытии файловых дескрипторов во время завершения
145 работы online протокола, которая могла привести к ошибке записи
146 принятого фрагмента пакета.
149 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
150 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
155 @subsection Релиз 6.4.0
159 Исправлена возможная гонка в online протоколе, приводящая к падению
165 @subsection Релиз 6.3.0
169 Исправлено возможное падение программы во время показа прогресса online
175 @subsection Релиз 6.2.1
179 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
184 @subsection Релиз 6.2.0
188 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
191 Очередной рефакторинг и упрощение системы журналирования.
192 Не должно быть видимых изменений для конечного пользователя.
197 @subsection Релиз 6.1.0
201 Оптимизация: большинство команд теперь не держат открытыми файловые
202 дескрипторы. Прежде вы легко могли выйти за пределы максимально
203 допустимого количества открытых файлов, если у вас было много пакетов в
207 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
208 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
211 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
212 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
213 online демоны не выполнят проверку целостности.
216 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
217 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
220 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
221 файлах, рядом с самими пакетами. Это может существенно повысить скорость
222 получения списка пакетов на файловых системах с большим размером блока.
227 @subsection Релиз 6.0.0
231 Журнал использует человеко-читаемый и легко обрабатываемый машиной
232 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
233 записей, вместо структурированных строчек RFC 3339. Старый формат
234 журналов не поддерживается @command{nncp-log}.
237 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
238 @command{nncp-daemon}.
241 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
242 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
243 выражением содержащим секунды, это можно использовать как возможность
244 вызова только при появлении исходящих пакетов.
247 @command{nncp-cronexpr} команда позволяет проверить корректность и
248 ожидаемый результат от указанного cron выражения.
253 @subsection Релиз 5.6.0
257 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
258 во время него ежесекундно.
261 В @option{calls} секции конфигурации появились опции
262 @option{autotoss}, @option{autotoss-doseen},
263 @option{autotoss-nofile}, @option{autotoss-nofreq},
264 @option{autotoss-noexec}, @option{autotoss-notrns}.
265 Вы можете настраивать опции автоматического tosser для каждого вызова.
268 Использовать vendoring вместо переопределения @env{GOPATH} во время
269 установки tarball, так как текущая минимальная версия Go это 1.12,
270 поддерживающая модули.
275 @subsection Релиз 5.5.1
279 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
280 в @file{config} во время установки.
285 @subsection Релиз 5.5.0
289 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
290 @command{nncp-bundle}, @command{nncp-stat} командах.
293 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
296 У команды @command{nncp-exec} появились @option{-use-tmp} и
297 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
301 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
302 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
305 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
310 @subsection Релиз 5.4.1
314 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
319 @subsection Релиз 5.4.0
323 Обновлены зависимые библиотеки.
326 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
327 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
328 реализация @command{redo} включена в tarball.
333 @subsection Релиз 5.3.3
337 Больше различных проверок в коде на ошибки.
340 Обновлены зависимые библиотеки.
345 @subsection Релиз 5.3.2
349 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
350 котором соединение могло не учитывать факты прихода пакетов и обрывать
356 @subsection Релиз 5.3.1
360 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
361 использующими внешние команды (@verb{#"|somecmd"#}).
364 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
365 каждому пакету в spool.
370 @subsection Релиз 5.3.0
374 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
377 Исправлено не происходящее дополнение (padding) handshake сообщений.
380 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
383 SP протокол порождает меньше вызовов записей (соответственно, и TCP
387 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
388 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
391 Раз в минуту, если нет более никакого другого трафика, посылаются PING
392 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
393 более не работоспособно.
396 @command{nncp-toss} использует lock-file для предотвращения
397 одновременной обработки зашифрованных пакетов.
402 @subsection Релиз 5.2.1
406 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
411 @subsection Релиз 5.2.0
415 Большинство команд по умолчанию показывают однострочный прогресс
416 выполнения операции. Появились @option{-progress}, @option{-noprogress}
417 опции командной строки, @option{noprogress} опция конфигурационного
421 Исправлен некорректный код возврата @command{nncp-check} команды,
422 который возвращал ошибку когда всё хорошо.
425 Проверка свободного места для пакетов, во время выполнения
426 @command{nncp-bundle -rx}.
431 @subsection Релиз 5.1.2
435 Исправлена @strong{критичная} уязвимость: аутентификация online нод
436 могла приводить к некорректной идентификации удалённой стороны, позволяя
437 скачивать чужие зашифрованные пакеты.
440 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
441 публичный ключ Noise были поменяны местами, что приводило к
442 невозможности online аутентификации нод.
445 Явная синхронизация (fsync) директорий для гарантированного
446 переименования файлов.
451 @subsection Релиз 5.1.1
455 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
460 @subsection Релиз 5.1.0
464 @command{nncp-file} может отправлять директории, автоматически на лету
468 Во время создания исходящих сообщений проверяется наличие свободного
469 места на файловой системе.
472 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
473 конфигурационного файла заменены на структуру
474 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
477 Добавлена @option{freq.maxsize} опция конфигурационного файл,
478 запрещающая ответ на файловый запрос больше заданного размера.
481 Возможность оповещения об успешно выполненных командах (exec) через
482 @option{notify.exec} опцию конфигурационного файла.
487 @subsection Релиз 5.0.0
491 @strong{Несовместимое} изменение формата конфигурационного файла:
492 YAML заменён на Hjson, из-за его гораздо большей простоты, без
493 заметной потери функционала и удобства.
496 @strong{Несовместимое} изменение формата простых пакетов. Работа со
497 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
498 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
499 смотря на то, что версия библиотеки ещё не проверена временем.
502 Возможность соединяться с удалёнными нодами не только по TCP, но и через
503 pipe вызов сторонней команды.
506 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
507 комментариев. Можно использовать @option{-nocomments} опцию для старого
511 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
512 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
515 Возможность переопределить umask процесса через опцию конфигурационного
519 По умолчанию файлы и директории создаются с 666/777 правами доступа,
520 позволяя управлять ими @command{umask}-ом.
523 Обновлены зависимости.
526 Полное использование go модулей для управления зависимостями
527 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
530 Отмена автоматического использования более новых версий GNU GPL
531 (лицензия проекта GNU GPLv3-только).
536 @subsection Релиз 4.1
538 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
542 @subsection Релиз 4.0
546 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
547 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
548 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
549 отсылать дешифрованные данные внешней команде. Старые версии не
553 Проверка доступного места перед копированием во время работы
554 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
557 @command{nncp-call} имеет возможность только показывать список пакетов
558 на удалённой машине, без их передачи.
561 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
564 Восстановлена работоспособность @option{xxrate} настройки в
565 @option{calls} секции конфигурационного файла.
568 Зависимые библиотеки обновлены.
571 Небольшие исправления ошибок.
574 Начало использования @code{go.mod} подсистемы.
579 @subsection Релиз 3.4
581 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
585 @subsection Релиз 3.3
589 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
590 проверяют существование @file{.seen} файла и расценивают его как то, что
591 файл уже был скачан. Возможно передача данных была осуществлена
592 сторонним способом и удалённая сторона должна быть оповещена об этом.
595 Если более высокоприоритетный пакет попадает в спул, то
596 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
597 низкоприоритетные передачи.
600 К средствам связанным с online-соединениями (@command{nncp-daemon},
601 @command{nncp-call}, @command{nncp-caller}) добавлен простой
602 ограничитель скорости.
605 Возможность задания приоритета символьными обозначениями:
606 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
609 Изменены значения приоритетов по-умолчанию:
610 для @command{nncp-exec} с 64 на 96,
611 для @command{nncp-freq} с 64 на 160,
612 для @command{nncp-file} с 196 на 224.
617 @subsection Релиз 3.2
620 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
621 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
622 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
623 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
624 Явное добавление @file{NNCP/} директории в архив восстанавливает
625 работоспособность с корректными tar архивами.
629 @subsection Релиз 3.1
632 Возможность отключать пересылку через промежуточные ноды используя
633 @verb{|-via -|} опцию командной строки.
637 @subsection Релиз 3.0
641 @strong{Несовместимое} изменение формата простых пакетов. Работа со
642 старыми версиями не поддерживается.
645 Добавлена возможность удалённого исполнения команд, путём
646 конфигурирования @option{exec} опции конфигурационного файла и
647 использования команды @command{nncp-exec}:
650 Команда @command{nncp-mail} заменена более гибкой и широкой
651 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
652 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
654 @option{sendmail} опция конфигурационного файла заменена на более гибкую
655 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
660 Возможность переопределить @option{via} опцию конфигурации для целевого
661 узла через @option{-via} опцию командной строки для следующих команд:
662 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
665 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
669 Exec команды вызываются с дополнительными переменными окружения
670 @env{NNCP_NICE} и @env{NNCP_SELF}.
673 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
674 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
675 аргументом @option{-replynice}.
678 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
679 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
680 @option{-noexec}, @option{-notrns}.
683 По-умолчанию @command{nncp-file} команда для
684 @option{-minsize}/@option{-chunked} опций использует
685 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
686 Это можно отключить указав нулевое значение.
691 @subsection Релиз 2.0
695 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
696 Работа со старыми версиями не поддерживается.
699 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
700 Одним криптографическим примитивом меньше.
703 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
704 криптографическим примитивом меньше (предполагая, что BLAKE2X
705 практически идентичен BLAKE2).
710 @subsection Релиз 1.0
714 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
715 со старыми версиями не поддерживается.
718 @command{nncp-bundle} команда может создавать потоки зашифрованных
719 пакетов или потреблять их. Это полезно когда речь идёт о
720 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
721 без создания промежуточного подготовленного ISO образа или работа с
722 ленточными накопителями).
725 @command{nncp-toss} команда может создавать @file{.seen} файлы,
726 предотвращая приём дублированных пакетов.
729 В команде @command{nncp-call} разрешается иметь только одного
730 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
731 входящих пакетов могут создать много горутин.
734 Возможность переопределить путь до spool директории и файла журнала
735 через аргумент командной строки или переменную окружения.
738 @command{nncp-rm} команда может удалять все исходящие/входящие,
739 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
744 @subsection Релиз 0.12
746 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
750 @subsection Релиз 0.11
752 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
756 @subsection Релиз 0.10
759 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
760 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
764 @subsection Релиз 0.9
767 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
768 команды. Они игнорировались.
772 @subsection Релиз 0.8
775 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
776 @option{-minsize} для передачи без разбиения на части была в байтах, а
781 @subsection Релиз 0.7
785 Возможность предоставлять данные для @command{nncp-file} через
786 стандартный ввод, используя временный зашифрованный файл для этого.
789 Появилась возможность передачи файлов разбитых на части, с сопутствующей
790 @command{nncp-reass} командой и @option{freqchunked} опцией
791 конфигурационного файла. Полезно для передачи больших файлов через
792 маленькие устройства хранения.
795 @option{freqminsize} опция конфигурационного файла, аналогичная
799 Опция @option{-force} команды @command{nncp-xfer} переименована в
800 @option{-mkdir} для ясности.
803 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
806 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
807 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
808 имели общий префикс и были сгруппированы для удобства.
811 Появилась команда @command{nncp-cfgenc}, позволяющая
812 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
813 без использования OpenPGP или других подобных инструментов.
816 Обновлены зависимые криптографические библиотеки.
821 @subsection Релиз 0.6
823 @item Появилась небольшая команда @command{nncp-rm}.
824 @item Обновлены зависимые криптографические библиотеки.
828 @subsection Релиз 0.5
831 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
832 @command{nncp-file} и @command{nncp-freq} командах.
836 @subsection Релиз 0.4
840 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
841 @command{nncp-daemon}: иногда они могли падать с segmentation fault
842 ошибкой (данные не терялись).
845 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
846 это короче и удобнее для использования.
849 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
850 позволяющая создать минималистичный урезанный конфигурационный файл без
851 приватных ключей, что полезно во время использования @command{nncp-xfer}.
856 @subsection Релиз 0.3
858 @item Исправлена совместимость с Go 1.6.
862 @subsection Релиз 0.2
866 @strong{Несовместимое} изменение формата пакета (магическое число тоже
867 изменено): поле размера пакета шифруется и не посылается в открытом виде.
870 @option{-minsize} опция даёт возможность автоматически дополнять
871 исходящие пакеты до указанного минимального размера.
874 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
875 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
876 Удалённая сторона сразу же оповещается об этом.
879 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
880 неактивность в online соединении, когда оно должно быть отключено. Она
881 может быть использована для сохранения соединения на долгое время.
884 @option{-maxonlinetime} опция даёт возможность указания максимального
885 возможного времени жизни соединения.
888 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
892 @command{nncp-pkt} команда может разжимать данные.