5 @subsection Релиз 7.1.1
9 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
14 @subsection Релиз 7.1.0
18 Появилась возможность мультивещательной (multicast) рассылки пакетов.
19 Реализовано всего лишь дополнительным типом простых пакетов и изменением
20 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
23 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
24 команд использующих временный файл (stdin и @option{-use-tmp}).
27 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
30 Исправлено некорректное генерирование @file{.hdr} при использовании
34 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
38 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
39 проверку в бесконечный цикл.
42 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
45 @command{nncp-pkt} может парсить @file{.hdr} файлы.
50 @subsection Релиз 7.0.0
54 Минимальная требуемая версия Go 1.13.
57 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
58 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
59 изменение формата шифрованных файлов (всего что находится в spool
60 области) и формата @file{.meta} файла при chunked передаче.
62 Текущая реализация далека от оптимальной: в ней нет распараллеливания
63 вычислений и имеет повышенное потребление памяти: около 512 KiB на
64 каждый 1 GiB данных файла. Будущая оптимизация производительности и
65 потребления памяти не должна привести к изменению формата пакетов. Но
66 это всё равно в несколько раз быстрее BLAKE2b.
69 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
70 чтения с диска только предшествующей части, а не полностью всего файла,
74 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
77 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
78 уменьшая количество примитивов. А также заголовок шифрованного файла
79 теперь является ассоциированными данными при шифровании.
82 MultiCast Discovery использует
83 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
86 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
89 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
92 Обновлены зависимые библиотеки.
97 @subsection Релиз 6.6.0
101 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
102 ожидают завершения всех процессов фоновой проверки контрольных сумм,
103 после того как соединение закрыто.
106 Добавлена возможность определения адреса через multicast оповещение в
107 локальной сети, так называемый MCD (MultiCast Discovery).
112 @subsection Релиз 6.5.0
116 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
119 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
122 Исправлена гонка при закрытии файловых дескрипторов во время завершения
123 работы online протокола, которая могла привести к ошибке записи
124 принятого фрагмента пакета.
127 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
128 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
133 @subsection Релиз 6.4.0
137 Исправлена возможная гонка в online протоколе, приводящая к падению
143 @subsection Релиз 6.3.0
147 Исправлено возможное падение программы во время показа прогресса online
153 @subsection Релиз 6.2.1
157 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
162 @subsection Релиз 6.2.0
166 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
169 Очередной рефакторинг и упрощение системы журналирования.
170 Не должно быть видимых изменений для конечного пользователя.
175 @subsection Релиз 6.1.0
179 Оптимизация: большинство команд теперь не держат открытыми файловые
180 дескрипторы. Прежде вы легко могли выйти за пределы максимально
181 допустимого количества открытых файлов, если у вас было много пакетов в
185 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
186 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
189 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
190 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
191 online демоны не выполнят проверку целостности.
194 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
195 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
198 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
199 файлах, рядом с самими пакетами. Это может существенно повысить скорость
200 получения списка пакетов на файловых системах с большим размером блока.
205 @subsection Релиз 6.0.0
209 Журнал использует человеко-читаемый и легко обрабатываемый машиной
210 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
211 записей, вместо структурированных строчек RFC 3339. Старый формат
212 журналов не поддерживается @command{nncp-log}.
215 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
216 @command{nncp-daemon}.
219 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
220 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
221 выражением содержащим секунды, это можно использовать как возможность
222 вызова только при появлении исходящих пакетов.
225 @command{nncp-cronexpr} команда позволяет проверить корректность и
226 ожидаемый результат от указанного cron выражения.
231 @subsection Релиз 5.6.0
235 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
236 во время него ежесекундно.
239 В @option{calls} секции конфигурации появились опции
240 @option{autotoss}, @option{autotoss-doseen},
241 @option{autotoss-nofile}, @option{autotoss-nofreq},
242 @option{autotoss-noexec}, @option{autotoss-notrns}.
243 Вы можете настраивать опции автоматического tosser для каждого вызова.
246 Использовать vendoring вместо переопределения @env{GOPATH} во время
247 установки tarball, так как текущая минимальная версия Go это 1.12,
248 поддерживающая модули.
253 @subsection Релиз 5.5.1
257 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
258 в @file{config} во время установки.
263 @subsection Релиз 5.5.0
267 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
268 @command{nncp-bundle}, @command{nncp-stat} командах.
271 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
274 У команды @command{nncp-exec} появились @option{-use-tmp} и
275 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
279 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
280 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
283 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
288 @subsection Релиз 5.4.1
292 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
297 @subsection Релиз 5.4.0
301 Обновлены зависимые библиотеки.
304 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
305 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
306 реализация @command{redo} включена в tarball.
311 @subsection Релиз 5.3.3
315 Больше различных проверок в коде на ошибки.
318 Обновлены зависимые библиотеки.
323 @subsection Релиз 5.3.2
327 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
328 котором соединение могло не учитывать факты прихода пакетов и обрывать
334 @subsection Релиз 5.3.1
338 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
339 использующими внешние команды (@verb{#"|somecmd"#}).
342 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
343 каждому пакету в spool.
348 @subsection Релиз 5.3.0
352 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
355 Исправлено не происходящее дополнение (padding) handshake сообщений.
358 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
361 SP протокол порождает меньше вызовов записей (соответственно, и TCP
365 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
366 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
369 Раз в минуту, если нет более никакого другого трафика, посылаются PING
370 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
371 более не работоспособно.
374 @command{nncp-toss} использует lock-file для предотвращения
375 одновременной обработки зашифрованных пакетов.
380 @subsection Релиз 5.2.1
384 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
389 @subsection Релиз 5.2.0
393 Большинство команд по умолчанию показывают однострочный прогресс
394 выполнения операции. Появились @option{-progress}, @option{-noprogress}
395 опции командной строки, @option{noprogress} опция конфигурационного
399 Исправлен некорректный код возврата @command{nncp-check} команды,
400 который возвращал ошибку когда всё хорошо.
403 Проверка свободного места для пакетов, во время выполнения
404 @command{nncp-bundle -rx}.
409 @subsection Релиз 5.1.2
413 Исправлена @strong{критичная} уязвимость: аутентификация online нод
414 могла приводить к некорректной идентификации удалённой стороны, позволяя
415 скачивать чужие зашифрованные пакеты.
418 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
419 публичный ключ Noise были поменяны местами, что приводило к
420 невозможности online аутентификации нод.
423 Явная синхронизация (fsync) директорий для гарантированного
424 переименования файлов.
429 @subsection Релиз 5.1.1
433 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
438 @subsection Релиз 5.1.0
442 @command{nncp-file} может отправлять директории, автоматически на лету
446 Во время создания исходящих сообщений проверяется наличие свободного
447 места на файловой системе.
450 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
451 конфигурационного файла заменены на структуру
452 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
455 Добавлена @option{freq.maxsize} опция конфигурационного файл,
456 запрещающая ответ на файловый запрос больше заданного размера.
459 Возможность оповещения об успешно выполненных командах (exec) через
460 @option{notify.exec} опцию конфигурационного файла.
465 @subsection Релиз 5.0.0
469 @strong{Несовместимое} изменение формата конфигурационного файла:
470 YAML заменён на Hjson, из-за его гораздо большей простоты, без
471 заметной потери функционала и удобства.
474 @strong{Несовместимое} изменение формата простых пакетов. Работа со
475 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
476 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
477 смотря на то, что версия библиотеки ещё не проверена временем.
480 Возможность соединяться с удалёнными нодами не только по TCP, но и через
481 pipe вызов сторонней команды.
484 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
485 комментариев. Можно использовать @option{-nocomments} опцию для старого
489 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
490 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
493 Возможность переопределить umask процесса через опцию конфигурационного
497 По умолчанию файлы и директории создаются с 666/777 правами доступа,
498 позволяя управлять ими @command{umask}-ом.
501 Обновлены зависимости.
504 Полное использование go модулей для управления зависимостями
505 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
508 Отмена автоматического использования более новых версий GNU GPL
509 (лицензия проекта GNU GPLv3-только).
514 @subsection Релиз 4.1
516 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
520 @subsection Релиз 4.0
524 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
525 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
526 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
527 отсылать дешифрованные данные внешней команде. Старые версии не
531 Проверка доступного места перед копированием во время работы
532 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
535 @command{nncp-call} имеет возможность только показывать список пакетов
536 на удалённой машине, без их передачи.
539 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
542 Восстановлена работоспособность @option{xxrate} настройки в
543 @option{calls} секции конфигурационного файла.
546 Зависимые библиотеки обновлены.
549 Небольшие исправления ошибок.
552 Начало использования @code{go.mod} подсистемы.
557 @subsection Релиз 3.4
559 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
563 @subsection Релиз 3.3
567 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
568 проверяют существование @file{.seen} файла и расценивают его как то, что
569 файл уже был скачан. Возможно передача данных была осуществлена
570 сторонним способом и удалённая сторона должна быть оповещена об этом.
573 Если более высокоприоритетный пакет попадает в спул, то
574 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
575 низкоприоритетные передачи.
578 К средствам связанным с online-соединениями (@command{nncp-daemon},
579 @command{nncp-call}, @command{nncp-caller}) добавлен простой
580 ограничитель скорости.
583 Возможность задания приоритета символьными обозначениями:
584 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
587 Изменены значения приоритетов по-умолчанию:
588 для @command{nncp-exec} с 64 на 96,
589 для @command{nncp-freq} с 64 на 160,
590 для @command{nncp-file} с 196 на 224.
595 @subsection Релиз 3.2
598 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
599 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
600 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
601 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
602 Явное добавление @file{NNCP/} директории в архив восстанавливает
603 работоспособность с корректными tar архивами.
607 @subsection Релиз 3.1
610 Возможность отключать пересылку через промежуточные ноды используя
611 @verb{|-via -|} опцию командной строки.
615 @subsection Релиз 3.0
619 @strong{Несовместимое} изменение формата простых пакетов. Работа со
620 старыми версиями не поддерживается.
623 Добавлена возможность удалённого исполнения команд, путём
624 конфигурирования @option{exec} опции конфигурационного файла и
625 использования команды @command{nncp-exec}:
628 Команда @command{nncp-mail} заменена более гибкой и широкой
629 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
630 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
632 @option{sendmail} опция конфигурационного файла заменена на более гибкую
633 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
638 Возможность переопределить @option{via} опцию конфигурации для целевого
639 узла через @option{-via} опцию командной строки для следующих команд:
640 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
643 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
647 Exec команды вызываются с дополнительными переменными окружения
648 @env{NNCP_NICE} и @env{NNCP_SELF}.
651 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
652 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
653 аргументом @option{-replynice}.
656 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
657 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
658 @option{-noexec}, @option{-notrns}.
661 По-умолчанию @command{nncp-file} команда для
662 @option{-minsize}/@option{-chunked} опций использует
663 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
664 Это можно отключить указав нулевое значение.
669 @subsection Релиз 2.0
673 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
674 Работа со старыми версиями не поддерживается.
677 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
678 Одним криптографическим примитивом меньше.
681 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
682 криптографическим примитивом меньше (предполагая, что BLAKE2X
683 практически идентичен BLAKE2).
688 @subsection Релиз 1.0
692 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
693 со старыми версиями не поддерживается.
696 @command{nncp-bundle} команда может создавать потоки зашифрованных
697 пакетов или потреблять их. Это полезно когда речь идёт о
698 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
699 без создания промежуточного подготовленного ISO образа или работа с
700 ленточными накопителями).
703 @command{nncp-toss} команда может создавать @file{.seen} файлы,
704 предотвращая приём дублированных пакетов.
707 В команде @command{nncp-call} разрешается иметь только одного
708 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
709 входящих пакетов могут создать много горутин.
712 Возможность переопределить путь до spool директории и файла журнала
713 через аргумент командной строки или переменную окружения.
716 @command{nncp-rm} команда может удалять все исходящие/входящие,
717 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
722 @subsection Релиз 0.12
724 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
728 @subsection Релиз 0.11
730 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
734 @subsection Релиз 0.10
737 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
738 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
742 @subsection Релиз 0.9
745 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
746 команды. Они игнорировались.
750 @subsection Релиз 0.8
753 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
754 @option{-minsize} для передачи без разбиения на части была в байтах, а
759 @subsection Релиз 0.7
763 Возможность предоставлять данные для @command{nncp-file} через
764 стандартный ввод, используя временный зашифрованный файл для этого.
767 Появилась возможность передачи файлов разбитых на части, с сопутствующей
768 @command{nncp-reass} командой и @option{freqchunked} опцией
769 конфигурационного файла. Полезно для передачи больших файлов через
770 маленькие устройства хранения.
773 @option{freqminsize} опция конфигурационного файла, аналогичная
777 Опция @option{-force} команды @command{nncp-xfer} переименована в
778 @option{-mkdir} для ясности.
781 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
784 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
785 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
786 имели общий префикс и были сгруппированы для удобства.
789 Появилась команда @command{nncp-cfgenc}, позволяющая
790 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
791 без использования OpenPGP или других подобных инструментов.
794 Обновлены зависимые криптографические библиотеки.
799 @subsection Релиз 0.6
801 @item Появилась небольшая команда @command{nncp-rm}.
802 @item Обновлены зависимые криптографические библиотеки.
806 @subsection Релиз 0.5
809 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
810 @command{nncp-file} и @command{nncp-freq} командах.
814 @subsection Релиз 0.4
818 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
819 @command{nncp-daemon}: иногда они могли падать с segmentation fault
820 ошибкой (данные не терялись).
823 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
824 это короче и удобнее для использования.
827 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
828 позволяющая создать минималистичный урезанный конфигурационный файл без
829 приватных ключей, что полезно во время использования @command{nncp-xfer}.
834 @subsection Релиз 0.3
836 @item Исправлена совместимость с Go 1.6.
840 @subsection Релиз 0.2
844 @strong{Несовместимое} изменение формата пакета (магическое число тоже
845 изменено): поле размера пакета шифруется и не посылается в открытом виде.
848 @option{-minsize} опция даёт возможность автоматически дополнять
849 исходящие пакеты до указанного минимального размера.
852 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
853 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
854 Удалённая сторона сразу же оповещается об этом.
857 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
858 неактивность в online соединении, когда оно должно быть отключено. Она
859 может быть использована для сохранения соединения на долгое время.
862 @option{-maxonlinetime} опция даёт возможность указания максимального
863 возможного времени жизни соединения.
866 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
870 @command{nncp-pkt} команда может разжимать данные.