5 @subsection Релиз 7.0.0
9 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
10 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
11 изменение формата шифрованных файлов (всего что находится в spool
12 области) и формата @file{.meta} файла при chunked передаче.
14 Текущая реализация далека от оптимальной: в ней нет распараллеливания
15 вычислений и имеет повышенное потребление памяти: около 512 KiB на
16 каждый 1 GiB данных файла. Будущая оптимизация производительности и
17 потребления памяти не должна привести к изменению формата пакетов. Но
18 это всё равно в несколько раз быстрее BLAKE2b.
21 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
22 чтения с диска только предшествующей части, а не полностью всего файла,
26 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
29 MultiCast Discovery использует
30 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
33 Обновлены зависимые библиотеки.
38 @subsection Релиз 6.6.0
42 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
43 ожидают завершения всех процессов фоновой проверки контрольных сумм,
44 после того как соединение закрыто.
47 Добавлена возможность определения адреса через multicast оповещение в
48 локальной сети, так называемый MCD (MultiCast Discovery).
53 @subsection Релиз 6.5.0
57 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
60 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
63 Исправлена гонка при закрытии файловых дескрипторов во время завершения
64 работы online протокола, которая могла привести к ошибке записи
65 принятого фрагмента пакета.
68 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
69 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
74 @subsection Релиз 6.4.0
78 Исправлена возможная гонка в online протоколе, приводящая к падению
84 @subsection Релиз 6.3.0
88 Исправлено возможное падение программы во время показа прогресса online
94 @subsection Релиз 6.2.1
98 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
103 @subsection Релиз 6.2.0
107 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
110 Очередной рефакторинг и упрощение системы журналирования.
111 Не должно быть видимых изменений для конечного пользователя.
116 @subsection Релиз 6.1.0
120 Оптимизация: большинство команд теперь не держат открытыми файловые
121 дескрипторы. Прежде вы легко могли выйти за пределы максимально
122 допустимого количества открытых файлов, если у вас было много пакетов в
126 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
127 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
130 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
131 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
132 online демоны не выполнят проверку целостности.
135 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
136 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
139 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
140 файлах, рядом с самими пакетами. Это может существенно повысить скорость
141 получения списка пакетов на файловых системах с большим размером блока.
146 @subsection Релиз 6.0.0
150 Журнал использует человеко-читаемый и легко обрабатываемый машиной
151 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
152 записей, вместо структурированных строчек RFC 3339. Старый формат
153 журналов не поддерживается @command{nncp-log}.
156 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
157 @command{nncp-daemon}.
160 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
161 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
162 выражением содержащим секунды, это можно использовать как возможность
163 вызова только при появлении исходящих пакетов.
166 @command{nncp-cronexpr} команда позволяет проверить корректность и
167 ожидаемый результат от указанного cron выражения.
172 @subsection Релиз 5.6.0
176 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
177 во время него ежесекундно.
180 В @option{calls} секции конфигурации появились опции
181 @option{autotoss}, @option{autotoss-doseen},
182 @option{autotoss-nofile}, @option{autotoss-nofreq},
183 @option{autotoss-noexec}, @option{autotoss-notrns}.
184 Вы можете настраивать опции автоматического tosser для каждого вызова.
187 Использовать vendoring вместо переопределения @env{GOPATH} во время
188 установки tarball, так как текущая минимальная версия Go это 1.12,
189 поддерживающая модули.
194 @subsection Релиз 5.5.1
198 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
199 в @file{config} во время установки.
204 @subsection Релиз 5.5.0
208 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
209 @command{nncp-bundle}, @command{nncp-stat} командах.
212 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
215 У команды @command{nncp-exec} появились @option{-use-tmp} и
216 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
220 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
221 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
224 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
229 @subsection Релиз 5.4.1
233 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
238 @subsection Релиз 5.4.0
242 Обновлены зависимые библиотеки.
245 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
246 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
247 реализация @command{redo} включена в tarball.
252 @subsection Релиз 5.3.3
256 Больше различных проверок в коде на ошибки.
259 Обновлены зависимые библиотеки.
264 @subsection Релиз 5.3.2
268 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
269 котором соединение могло не учитывать факты прихода пакетов и обрывать
275 @subsection Релиз 5.3.1
279 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
280 использующими внешние команды (@verb{#"|somecmd"#}).
283 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
284 каждому пакету в spool.
289 @subsection Релиз 5.3.0
293 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
296 Исправлено не происходящее дополнение (padding) handshake сообщений.
299 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
302 SP протокол порождает меньше вызовов записей (соответственно, и TCP
306 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
307 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
310 Раз в минуту, если нет более никакого другого трафика, посылаются PING
311 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
312 более не работоспособно.
315 @command{nncp-toss} использует lock-file для предотвращения
316 одновременной обработки зашифрованных пакетов.
321 @subsection Релиз 5.2.1
325 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
330 @subsection Релиз 5.2.0
334 Большинство команд по умолчанию показывают однострочный прогресс
335 выполнения операции. Появились @option{-progress}, @option{-noprogress}
336 опции командной строки, @option{noprogress} опция конфигурационного
340 Исправлен некорректный код возврата @command{nncp-check} команды,
341 который возвращал ошибку когда всё хорошо.
344 Проверка свободного места для пакетов, во время выполнения
345 @command{nncp-bundle -rx}.
350 @subsection Релиз 5.1.2
354 Исправлена @strong{критичная} уязвимость: аутентификация online нод
355 могла приводить к некорректной идентификации удалённой стороны, позволяя
356 скачивать чужие зашифрованные пакеты.
359 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
360 публичный ключ Noise были поменяны местами, что приводило к
361 невозможности online аутентификации нод.
364 Явная синхронизация (fsync) директорий для гарантированного
365 переименования файлов.
370 @subsection Релиз 5.1.1
374 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
379 @subsection Релиз 5.1.0
383 @command{nncp-file} может отправлять директории, автоматически на лету
387 Во время создания исходящих сообщений проверяется наличие свободного
388 места на файловой системе.
391 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
392 конфигурационного файла заменены на структуру
393 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
396 Добавлена @option{freq.maxsize} опция конфигурационного файл,
397 запрещающая ответ на файловый запрос больше заданного размера.
400 Возможность оповещения об успешно выполненных командах (exec) через
401 @option{notify.exec} опцию конфигурационного файла.
406 @subsection Релиз 5.0.0
410 @strong{Несовместимое} изменение формата конфигурационного файла:
411 YAML заменён на Hjson, из-за его гораздо большей простоты, без
412 заметной потери функционала и удобства.
415 @strong{Несовместимое} изменение формата простых пакетов. Работа со
416 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
417 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
418 смотря на то, что версия библиотеки ещё не проверена временем.
421 Возможность соединяться с удалёнными нодами не только по TCP, но и через
422 pipe вызов сторонней команды.
425 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
426 комментариев. Можно использовать @option{-nocomments} опцию для старого
430 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
431 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
434 Возможность переопределить umask процесса через опцию конфигурационного
438 По умолчанию файлы и директории создаются с 666/777 правами доступа,
439 позволяя управлять ими @command{umask}-ом.
442 Обновлены зависимости.
445 Полное использование go модулей для управления зависимостями
446 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
449 Отмена автоматического использования более новых версий GNU GPL
450 (лицензия проекта GNU GPLv3-только).
455 @subsection Релиз 4.1
457 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
461 @subsection Релиз 4.0
465 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
466 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
467 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
468 отсылать дешифрованные данные внешней команде. Старые версии не
472 Проверка доступного места перед копированием во время работы
473 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
476 @command{nncp-call} имеет возможность только показывать список пакетов
477 на удалённой машине, без их передачи.
480 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
483 Восстановлена работоспособность @option{xxrate} настройки в
484 @option{calls} секции конфигурационного файла.
487 Зависимые библиотеки обновлены.
490 Небольшие исправления ошибок.
493 Начало использования @code{go.mod} подсистемы.
498 @subsection Релиз 3.4
500 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
504 @subsection Релиз 3.3
508 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
509 проверяют существование @file{.seen} файла и расценивают его как то, что
510 файл уже был скачан. Возможно передача данных была осуществлена
511 сторонним способом и удалённая сторона должна быть оповещена об этом.
514 Если более высокоприоритетный пакет попадает в спул, то
515 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
516 низкоприоритетные передачи.
519 К средствам связанным с online-соединениями (@command{nncp-daemon},
520 @command{nncp-call}, @command{nncp-caller}) добавлен простой
521 ограничитель скорости.
524 Возможность задания приоритета символьными обозначениями:
525 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
528 Изменены значения приоритетов по-умолчанию:
529 для @command{nncp-exec} с 64 на 96,
530 для @command{nncp-freq} с 64 на 160,
531 для @command{nncp-file} с 196 на 224.
536 @subsection Релиз 3.2
539 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
540 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
541 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
542 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
543 Явное добавление @file{NNCP/} директории в архив восстанавливает
544 работоспособность с корректными tar архивами.
548 @subsection Релиз 3.1
551 Возможность отключать пересылку через промежуточные ноды используя
552 @verb{|-via -|} опцию командной строки.
556 @subsection Релиз 3.0
560 @strong{Несовместимое} изменение формата простых пакетов. Работа со
561 старыми версиями не поддерживается.
564 Добавлена возможность удалённого исполнения команд, путём
565 конфигурирования @option{exec} опции конфигурационного файла и
566 использования команды @command{nncp-exec}:
569 Команда @command{nncp-mail} заменена более гибкой и широкой
570 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
571 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
573 @option{sendmail} опция конфигурационного файла заменена на более гибкую
574 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
579 Возможность переопределить @option{via} опцию конфигурации для целевого
580 узла через @option{-via} опцию командной строки для следующих команд:
581 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
584 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
588 Exec команды вызываются с дополнительными переменными окружения
589 @env{NNCP_NICE} и @env{NNCP_SELF}.
592 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
593 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
594 аргументом @option{-replynice}.
597 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
598 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
599 @option{-noexec}, @option{-notrns}.
602 По-умолчанию @command{nncp-file} команда для
603 @option{-minsize}/@option{-chunked} опций использует
604 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
605 Это можно отключить указав нулевое значение.
610 @subsection Релиз 2.0
614 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
615 Работа со старыми версиями не поддерживается.
618 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
619 Одним криптографическим примитивом меньше.
622 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
623 криптографическим примитивом меньше (предполагая, что BLAKE2X
624 практически идентичен BLAKE2).
629 @subsection Релиз 1.0
633 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
634 со старыми версиями не поддерживается.
637 @command{nncp-bundle} команда может создавать потоки зашифрованных
638 пакетов или потреблять их. Это полезно когда речь идёт о
639 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
640 без создания промежуточного подготовленного ISO образа или работа с
641 ленточными накопителями).
644 @command{nncp-toss} команда может создавать @file{.seen} файлы,
645 предотвращая приём дублированных пакетов.
648 В команде @command{nncp-call} разрешается иметь только одного
649 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
650 входящих пакетов могут создать много горутин.
653 Возможность переопределить путь до spool директории и файла журнала
654 через аргумент командной строки или переменную окружения.
657 @command{nncp-rm} команда может удалять все исходящие/входящие,
658 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
663 @subsection Релиз 0.12
665 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
669 @subsection Релиз 0.11
671 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
675 @subsection Релиз 0.10
678 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
679 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
683 @subsection Релиз 0.9
686 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
687 команды. Они игнорировались.
691 @subsection Релиз 0.8
694 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
695 @option{-minsize} для передачи без разбиения на части была в байтах, а
700 @subsection Релиз 0.7
704 Возможность предоставлять данные для @command{nncp-file} через
705 стандартный ввод, используя временный зашифрованный файл для этого.
708 Появилась возможность передачи файлов разбитых на части, с сопутствующей
709 @command{nncp-reass} командой и @option{freqchunked} опцией
710 конфигурационного файла. Полезно для передачи больших файлов через
711 маленькие устройства хранения.
714 @option{freqminsize} опция конфигурационного файла, аналогичная
718 Опция @option{-force} команды @command{nncp-xfer} переименована в
719 @option{-mkdir} для ясности.
722 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
725 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
726 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
727 имели общий префикс и были сгруппированы для удобства.
730 Появилась команда @command{nncp-cfgenc}, позволяющая
731 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
732 без использования OpenPGP или других подобных инструментов.
735 Обновлены зависимые криптографические библиотеки.
740 @subsection Релиз 0.6
742 @item Появилась небольшая команда @command{nncp-rm}.
743 @item Обновлены зависимые криптографические библиотеки.
747 @subsection Релиз 0.5
750 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
751 @command{nncp-file} и @command{nncp-freq} командах.
755 @subsection Релиз 0.4
759 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
760 @command{nncp-daemon}: иногда они могли падать с segmentation fault
761 ошибкой (данные не терялись).
764 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
765 это короче и удобнее для использования.
768 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
769 позволяющая создать минималистичный урезанный конфигурационный файл без
770 приватных ключей, что полезно во время использования @command{nncp-xfer}.
775 @subsection Релиз 0.3
777 @item Исправлена совместимость с Go 1.6.
781 @subsection Релиз 0.2
785 @strong{Несовместимое} изменение формата пакета (магическое число тоже
786 изменено): поле размера пакета шифруется и не посылается в открытом виде.
789 @option{-minsize} опция даёт возможность автоматически дополнять
790 исходящие пакеты до указанного минимального размера.
793 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
794 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
795 Удалённая сторона сразу же оповещается об этом.
798 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
799 неактивность в online соединении, когда оно должно быть отключено. Она
800 может быть использована для сохранения соединения на долгое время.
803 @option{-maxonlinetime} опция даёт возможность указания максимального
804 возможного времени жизни соединения.
807 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
811 @command{nncp-pkt} команда может разжимать данные.