5 @subsection Релиз 7.1.0
9 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
10 команд использующих временный файл (stdin и @option{-use-tmp}).
13 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
16 Исправлено некорректное генерирование @file{.hdr} при использовании
20 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
24 @command{nncp-pkt} может парсить @file{.hdr} файлы.
27 Появилась возможность мультивещательной (multicast) рассылки пакетов.
28 Реализовано всего лишь дополнительным типом простых пакетов и изменением
29 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
34 @subsection Релиз 7.0.0
38 Минимальная требуемая версия Go 1.13.
41 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
42 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
43 изменение формата шифрованных файлов (всего что находится в spool
44 области) и формата @file{.meta} файла при chunked передаче.
46 Текущая реализация далека от оптимальной: в ней нет распараллеливания
47 вычислений и имеет повышенное потребление памяти: около 512 KiB на
48 каждый 1 GiB данных файла. Будущая оптимизация производительности и
49 потребления памяти не должна привести к изменению формата пакетов. Но
50 это всё равно в несколько раз быстрее BLAKE2b.
53 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
54 чтения с диска только предшествующей части, а не полностью всего файла,
58 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
61 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
62 уменьшая количество примитивов. А также заголовок шифрованного файла
63 теперь является ассоциированными данными при шифровании.
66 MultiCast Discovery использует
67 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
70 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
73 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
76 Обновлены зависимые библиотеки.
81 @subsection Релиз 6.6.0
85 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
86 ожидают завершения всех процессов фоновой проверки контрольных сумм,
87 после того как соединение закрыто.
90 Добавлена возможность определения адреса через multicast оповещение в
91 локальной сети, так называемый MCD (MultiCast Discovery).
96 @subsection Релиз 6.5.0
100 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
103 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
106 Исправлена гонка при закрытии файловых дескрипторов во время завершения
107 работы online протокола, которая могла привести к ошибке записи
108 принятого фрагмента пакета.
111 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
112 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
117 @subsection Релиз 6.4.0
121 Исправлена возможная гонка в online протоколе, приводящая к падению
127 @subsection Релиз 6.3.0
131 Исправлено возможное падение программы во время показа прогресса online
137 @subsection Релиз 6.2.1
141 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
146 @subsection Релиз 6.2.0
150 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
153 Очередной рефакторинг и упрощение системы журналирования.
154 Не должно быть видимых изменений для конечного пользователя.
159 @subsection Релиз 6.1.0
163 Оптимизация: большинство команд теперь не держат открытыми файловые
164 дескрипторы. Прежде вы легко могли выйти за пределы максимально
165 допустимого количества открытых файлов, если у вас было много пакетов в
169 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
170 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
173 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
174 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
175 online демоны не выполнят проверку целостности.
178 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
179 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
182 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
183 файлах, рядом с самими пакетами. Это может существенно повысить скорость
184 получения списка пакетов на файловых системах с большим размером блока.
189 @subsection Релиз 6.0.0
193 Журнал использует человеко-читаемый и легко обрабатываемый машиной
194 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
195 записей, вместо структурированных строчек RFC 3339. Старый формат
196 журналов не поддерживается @command{nncp-log}.
199 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
200 @command{nncp-daemon}.
203 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
204 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
205 выражением содержащим секунды, это можно использовать как возможность
206 вызова только при появлении исходящих пакетов.
209 @command{nncp-cronexpr} команда позволяет проверить корректность и
210 ожидаемый результат от указанного cron выражения.
215 @subsection Релиз 5.6.0
219 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
220 во время него ежесекундно.
223 В @option{calls} секции конфигурации появились опции
224 @option{autotoss}, @option{autotoss-doseen},
225 @option{autotoss-nofile}, @option{autotoss-nofreq},
226 @option{autotoss-noexec}, @option{autotoss-notrns}.
227 Вы можете настраивать опции автоматического tosser для каждого вызова.
230 Использовать vendoring вместо переопределения @env{GOPATH} во время
231 установки tarball, так как текущая минимальная версия Go это 1.12,
232 поддерживающая модули.
237 @subsection Релиз 5.5.1
241 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
242 в @file{config} во время установки.
247 @subsection Релиз 5.5.0
251 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
252 @command{nncp-bundle}, @command{nncp-stat} командах.
255 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
258 У команды @command{nncp-exec} появились @option{-use-tmp} и
259 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
263 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
264 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
267 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
272 @subsection Релиз 5.4.1
276 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
281 @subsection Релиз 5.4.0
285 Обновлены зависимые библиотеки.
288 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
289 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
290 реализация @command{redo} включена в tarball.
295 @subsection Релиз 5.3.3
299 Больше различных проверок в коде на ошибки.
302 Обновлены зависимые библиотеки.
307 @subsection Релиз 5.3.2
311 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
312 котором соединение могло не учитывать факты прихода пакетов и обрывать
318 @subsection Релиз 5.3.1
322 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
323 использующими внешние команды (@verb{#"|somecmd"#}).
326 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
327 каждому пакету в spool.
332 @subsection Релиз 5.3.0
336 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
339 Исправлено не происходящее дополнение (padding) handshake сообщений.
342 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
345 SP протокол порождает меньше вызовов записей (соответственно, и TCP
349 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
350 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
353 Раз в минуту, если нет более никакого другого трафика, посылаются PING
354 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
355 более не работоспособно.
358 @command{nncp-toss} использует lock-file для предотвращения
359 одновременной обработки зашифрованных пакетов.
364 @subsection Релиз 5.2.1
368 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
373 @subsection Релиз 5.2.0
377 Большинство команд по умолчанию показывают однострочный прогресс
378 выполнения операции. Появились @option{-progress}, @option{-noprogress}
379 опции командной строки, @option{noprogress} опция конфигурационного
383 Исправлен некорректный код возврата @command{nncp-check} команды,
384 который возвращал ошибку когда всё хорошо.
387 Проверка свободного места для пакетов, во время выполнения
388 @command{nncp-bundle -rx}.
393 @subsection Релиз 5.1.2
397 Исправлена @strong{критичная} уязвимость: аутентификация online нод
398 могла приводить к некорректной идентификации удалённой стороны, позволяя
399 скачивать чужие зашифрованные пакеты.
402 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
403 публичный ключ Noise были поменяны местами, что приводило к
404 невозможности online аутентификации нод.
407 Явная синхронизация (fsync) директорий для гарантированного
408 переименования файлов.
413 @subsection Релиз 5.1.1
417 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
422 @subsection Релиз 5.1.0
426 @command{nncp-file} может отправлять директории, автоматически на лету
430 Во время создания исходящих сообщений проверяется наличие свободного
431 места на файловой системе.
434 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
435 конфигурационного файла заменены на структуру
436 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
439 Добавлена @option{freq.maxsize} опция конфигурационного файл,
440 запрещающая ответ на файловый запрос больше заданного размера.
443 Возможность оповещения об успешно выполненных командах (exec) через
444 @option{notify.exec} опцию конфигурационного файла.
449 @subsection Релиз 5.0.0
453 @strong{Несовместимое} изменение формата конфигурационного файла:
454 YAML заменён на Hjson, из-за его гораздо большей простоты, без
455 заметной потери функционала и удобства.
458 @strong{Несовместимое} изменение формата простых пакетов. Работа со
459 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
460 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
461 смотря на то, что версия библиотеки ещё не проверена временем.
464 Возможность соединяться с удалёнными нодами не только по TCP, но и через
465 pipe вызов сторонней команды.
468 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
469 комментариев. Можно использовать @option{-nocomments} опцию для старого
473 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
474 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
477 Возможность переопределить umask процесса через опцию конфигурационного
481 По умолчанию файлы и директории создаются с 666/777 правами доступа,
482 позволяя управлять ими @command{umask}-ом.
485 Обновлены зависимости.
488 Полное использование go модулей для управления зависимостями
489 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
492 Отмена автоматического использования более новых версий GNU GPL
493 (лицензия проекта GNU GPLv3-только).
498 @subsection Релиз 4.1
500 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
504 @subsection Релиз 4.0
508 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
509 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
510 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
511 отсылать дешифрованные данные внешней команде. Старые версии не
515 Проверка доступного места перед копированием во время работы
516 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
519 @command{nncp-call} имеет возможность только показывать список пакетов
520 на удалённой машине, без их передачи.
523 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
526 Восстановлена работоспособность @option{xxrate} настройки в
527 @option{calls} секции конфигурационного файла.
530 Зависимые библиотеки обновлены.
533 Небольшие исправления ошибок.
536 Начало использования @code{go.mod} подсистемы.
541 @subsection Релиз 3.4
543 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
547 @subsection Релиз 3.3
551 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
552 проверяют существование @file{.seen} файла и расценивают его как то, что
553 файл уже был скачан. Возможно передача данных была осуществлена
554 сторонним способом и удалённая сторона должна быть оповещена об этом.
557 Если более высокоприоритетный пакет попадает в спул, то
558 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
559 низкоприоритетные передачи.
562 К средствам связанным с online-соединениями (@command{nncp-daemon},
563 @command{nncp-call}, @command{nncp-caller}) добавлен простой
564 ограничитель скорости.
567 Возможность задания приоритета символьными обозначениями:
568 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
571 Изменены значения приоритетов по-умолчанию:
572 для @command{nncp-exec} с 64 на 96,
573 для @command{nncp-freq} с 64 на 160,
574 для @command{nncp-file} с 196 на 224.
579 @subsection Релиз 3.2
582 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
583 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
584 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
585 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
586 Явное добавление @file{NNCP/} директории в архив восстанавливает
587 работоспособность с корректными tar архивами.
591 @subsection Релиз 3.1
594 Возможность отключать пересылку через промежуточные ноды используя
595 @verb{|-via -|} опцию командной строки.
599 @subsection Релиз 3.0
603 @strong{Несовместимое} изменение формата простых пакетов. Работа со
604 старыми версиями не поддерживается.
607 Добавлена возможность удалённого исполнения команд, путём
608 конфигурирования @option{exec} опции конфигурационного файла и
609 использования команды @command{nncp-exec}:
612 Команда @command{nncp-mail} заменена более гибкой и широкой
613 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
614 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
616 @option{sendmail} опция конфигурационного файла заменена на более гибкую
617 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
622 Возможность переопределить @option{via} опцию конфигурации для целевого
623 узла через @option{-via} опцию командной строки для следующих команд:
624 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
627 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
631 Exec команды вызываются с дополнительными переменными окружения
632 @env{NNCP_NICE} и @env{NNCP_SELF}.
635 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
636 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
637 аргументом @option{-replynice}.
640 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
641 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
642 @option{-noexec}, @option{-notrns}.
645 По-умолчанию @command{nncp-file} команда для
646 @option{-minsize}/@option{-chunked} опций использует
647 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
648 Это можно отключить указав нулевое значение.
653 @subsection Релиз 2.0
657 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
658 Работа со старыми версиями не поддерживается.
661 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
662 Одним криптографическим примитивом меньше.
665 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
666 криптографическим примитивом меньше (предполагая, что BLAKE2X
667 практически идентичен BLAKE2).
672 @subsection Релиз 1.0
676 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
677 со старыми версиями не поддерживается.
680 @command{nncp-bundle} команда может создавать потоки зашифрованных
681 пакетов или потреблять их. Это полезно когда речь идёт о
682 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
683 без создания промежуточного подготовленного ISO образа или работа с
684 ленточными накопителями).
687 @command{nncp-toss} команда может создавать @file{.seen} файлы,
688 предотвращая приём дублированных пакетов.
691 В команде @command{nncp-call} разрешается иметь только одного
692 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
693 входящих пакетов могут создать много горутин.
696 Возможность переопределить путь до spool директории и файла журнала
697 через аргумент командной строки или переменную окружения.
700 @command{nncp-rm} команда может удалять все исходящие/входящие,
701 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
706 @subsection Релиз 0.12
708 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
712 @subsection Релиз 0.11
714 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
718 @subsection Релиз 0.10
721 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
722 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
726 @subsection Релиз 0.9
729 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
730 команды. Они игнорировались.
734 @subsection Релиз 0.8
737 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
738 @option{-minsize} для передачи без разбиения на части была в байтах, а
743 @subsection Релиз 0.7
747 Возможность предоставлять данные для @command{nncp-file} через
748 стандартный ввод, используя временный зашифрованный файл для этого.
751 Появилась возможность передачи файлов разбитых на части, с сопутствующей
752 @command{nncp-reass} командой и @option{freqchunked} опцией
753 конфигурационного файла. Полезно для передачи больших файлов через
754 маленькие устройства хранения.
757 @option{freqminsize} опция конфигурационного файла, аналогичная
761 Опция @option{-force} команды @command{nncp-xfer} переименована в
762 @option{-mkdir} для ясности.
765 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
768 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
769 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
770 имели общий префикс и были сгруппированы для удобства.
773 Появилась команда @command{nncp-cfgenc}, позволяющая
774 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
775 без использования OpenPGP или других подобных инструментов.
778 Обновлены зависимые криптографические библиотеки.
783 @subsection Релиз 0.6
785 @item Появилась небольшая команда @command{nncp-rm}.
786 @item Обновлены зависимые криптографические библиотеки.
790 @subsection Релиз 0.5
793 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
794 @command{nncp-file} и @command{nncp-freq} командах.
798 @subsection Релиз 0.4
802 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
803 @command{nncp-daemon}: иногда они могли падать с segmentation fault
804 ошибкой (данные не терялись).
807 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
808 это короче и удобнее для использования.
811 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
812 позволяющая создать минималистичный урезанный конфигурационный файл без
813 приватных ключей, что полезно во время использования @command{nncp-xfer}.
818 @subsection Релиз 0.3
820 @item Исправлена совместимость с Go 1.6.
824 @subsection Релиз 0.2
828 @strong{Несовместимое} изменение формата пакета (магическое число тоже
829 изменено): поле размера пакета шифруется и не посылается в открытом виде.
832 @option{-minsize} опция даёт возможность автоматически дополнять
833 исходящие пакеты до указанного минимального размера.
836 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
837 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
838 Удалённая сторона сразу же оповещается об этом.
841 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
842 неактивность в online соединении, когда оно должно быть отключено. Она
843 может быть использована для сохранения соединения на долгое время.
846 @option{-maxonlinetime} опция даёт возможность указания максимального
847 возможного времени жизни соединения.
850 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
854 @command{nncp-pkt} команда может разжимать данные.