5 @subsection Релиз 7.1.0
9 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
10 команд использующих временный файл (stdin и @option{-use-tmp}).
13 Исправлено некорректное генерирование @file{.hdr} при использовании
17 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
21 @command{nncp-pkt} может парсить @file{.hdr} файлы.
24 Появилась возможность мультивещательной (multicast) рассылки пакетов.
25 Реализовано всего лишь дополнительным типом простых пакетов и изменением
26 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
31 @subsection Релиз 7.0.0
35 Минимальная требуемая версия Go 1.13.
38 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
39 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
40 изменение формата шифрованных файлов (всего что находится в spool
41 области) и формата @file{.meta} файла при chunked передаче.
43 Текущая реализация далека от оптимальной: в ней нет распараллеливания
44 вычислений и имеет повышенное потребление памяти: около 512 KiB на
45 каждый 1 GiB данных файла. Будущая оптимизация производительности и
46 потребления памяти не должна привести к изменению формата пакетов. Но
47 это всё равно в несколько раз быстрее BLAKE2b.
50 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
51 чтения с диска только предшествующей части, а не полностью всего файла,
55 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
58 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
59 уменьшая количество примитивов. А также заголовок шифрованного файла
60 теперь является ассоциированными данными при шифровании.
63 MultiCast Discovery использует
64 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
67 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
70 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
73 Обновлены зависимые библиотеки.
78 @subsection Релиз 6.6.0
82 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
83 ожидают завершения всех процессов фоновой проверки контрольных сумм,
84 после того как соединение закрыто.
87 Добавлена возможность определения адреса через multicast оповещение в
88 локальной сети, так называемый MCD (MultiCast Discovery).
93 @subsection Релиз 6.5.0
97 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
100 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
103 Исправлена гонка при закрытии файловых дескрипторов во время завершения
104 работы online протокола, которая могла привести к ошибке записи
105 принятого фрагмента пакета.
108 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
109 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
114 @subsection Релиз 6.4.0
118 Исправлена возможная гонка в online протоколе, приводящая к падению
124 @subsection Релиз 6.3.0
128 Исправлено возможное падение программы во время показа прогресса online
134 @subsection Релиз 6.2.1
138 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
143 @subsection Релиз 6.2.0
147 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
150 Очередной рефакторинг и упрощение системы журналирования.
151 Не должно быть видимых изменений для конечного пользователя.
156 @subsection Релиз 6.1.0
160 Оптимизация: большинство команд теперь не держат открытыми файловые
161 дескрипторы. Прежде вы легко могли выйти за пределы максимально
162 допустимого количества открытых файлов, если у вас было много пакетов в
166 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
167 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
170 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
171 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
172 online демоны не выполнят проверку целостности.
175 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
176 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
179 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
180 файлах, рядом с самими пакетами. Это может существенно повысить скорость
181 получения списка пакетов на файловых системах с большим размером блока.
186 @subsection Релиз 6.0.0
190 Журнал использует человеко-читаемый и легко обрабатываемый машиной
191 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
192 записей, вместо структурированных строчек RFC 3339. Старый формат
193 журналов не поддерживается @command{nncp-log}.
196 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
197 @command{nncp-daemon}.
200 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
201 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
202 выражением содержащим секунды, это можно использовать как возможность
203 вызова только при появлении исходящих пакетов.
206 @command{nncp-cronexpr} команда позволяет проверить корректность и
207 ожидаемый результат от указанного cron выражения.
212 @subsection Релиз 5.6.0
216 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
217 во время него ежесекундно.
220 В @option{calls} секции конфигурации появились опции
221 @option{autotoss}, @option{autotoss-doseen},
222 @option{autotoss-nofile}, @option{autotoss-nofreq},
223 @option{autotoss-noexec}, @option{autotoss-notrns}.
224 Вы можете настраивать опции автоматического tosser для каждого вызова.
227 Использовать vendoring вместо переопределения @env{GOPATH} во время
228 установки tarball, так как текущая минимальная версия Go это 1.12,
229 поддерживающая модули.
234 @subsection Релиз 5.5.1
238 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
239 в @file{config} во время установки.
244 @subsection Релиз 5.5.0
248 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
249 @command{nncp-bundle}, @command{nncp-stat} командах.
252 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
255 У команды @command{nncp-exec} появились @option{-use-tmp} и
256 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
260 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
261 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
264 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
269 @subsection Релиз 5.4.1
273 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
278 @subsection Релиз 5.4.0
282 Обновлены зависимые библиотеки.
285 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
286 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
287 реализация @command{redo} включена в tarball.
292 @subsection Релиз 5.3.3
296 Больше различных проверок в коде на ошибки.
299 Обновлены зависимые библиотеки.
304 @subsection Релиз 5.3.2
308 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
309 котором соединение могло не учитывать факты прихода пакетов и обрывать
315 @subsection Релиз 5.3.1
319 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
320 использующими внешние команды (@verb{#"|somecmd"#}).
323 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
324 каждому пакету в spool.
329 @subsection Релиз 5.3.0
333 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
336 Исправлено не происходящее дополнение (padding) handshake сообщений.
339 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
342 SP протокол порождает меньше вызовов записей (соответственно, и TCP
346 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
347 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
350 Раз в минуту, если нет более никакого другого трафика, посылаются PING
351 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
352 более не работоспособно.
355 @command{nncp-toss} использует lock-file для предотвращения
356 одновременной обработки зашифрованных пакетов.
361 @subsection Релиз 5.2.1
365 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
370 @subsection Релиз 5.2.0
374 Большинство команд по умолчанию показывают однострочный прогресс
375 выполнения операции. Появились @option{-progress}, @option{-noprogress}
376 опции командной строки, @option{noprogress} опция конфигурационного
380 Исправлен некорректный код возврата @command{nncp-check} команды,
381 который возвращал ошибку когда всё хорошо.
384 Проверка свободного места для пакетов, во время выполнения
385 @command{nncp-bundle -rx}.
390 @subsection Релиз 5.1.2
394 Исправлена @strong{критичная} уязвимость: аутентификация online нод
395 могла приводить к некорректной идентификации удалённой стороны, позволяя
396 скачивать чужие зашифрованные пакеты.
399 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
400 публичный ключ Noise были поменяны местами, что приводило к
401 невозможности online аутентификации нод.
404 Явная синхронизация (fsync) директорий для гарантированного
405 переименования файлов.
410 @subsection Релиз 5.1.1
414 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
419 @subsection Релиз 5.1.0
423 @command{nncp-file} может отправлять директории, автоматически на лету
427 Во время создания исходящих сообщений проверяется наличие свободного
428 места на файловой системе.
431 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
432 конфигурационного файла заменены на структуру
433 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
436 Добавлена @option{freq.maxsize} опция конфигурационного файл,
437 запрещающая ответ на файловый запрос больше заданного размера.
440 Возможность оповещения об успешно выполненных командах (exec) через
441 @option{notify.exec} опцию конфигурационного файла.
446 @subsection Релиз 5.0.0
450 @strong{Несовместимое} изменение формата конфигурационного файла:
451 YAML заменён на Hjson, из-за его гораздо большей простоты, без
452 заметной потери функционала и удобства.
455 @strong{Несовместимое} изменение формата простых пакетов. Работа со
456 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
457 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
458 смотря на то, что версия библиотеки ещё не проверена временем.
461 Возможность соединяться с удалёнными нодами не только по TCP, но и через
462 pipe вызов сторонней команды.
465 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
466 комментариев. Можно использовать @option{-nocomments} опцию для старого
470 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
471 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
474 Возможность переопределить umask процесса через опцию конфигурационного
478 По умолчанию файлы и директории создаются с 666/777 правами доступа,
479 позволяя управлять ими @command{umask}-ом.
482 Обновлены зависимости.
485 Полное использование go модулей для управления зависимостями
486 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
489 Отмена автоматического использования более новых версий GNU GPL
490 (лицензия проекта GNU GPLv3-только).
495 @subsection Релиз 4.1
497 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
501 @subsection Релиз 4.0
505 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
506 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
507 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
508 отсылать дешифрованные данные внешней команде. Старые версии не
512 Проверка доступного места перед копированием во время работы
513 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
516 @command{nncp-call} имеет возможность только показывать список пакетов
517 на удалённой машине, без их передачи.
520 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
523 Восстановлена работоспособность @option{xxrate} настройки в
524 @option{calls} секции конфигурационного файла.
527 Зависимые библиотеки обновлены.
530 Небольшие исправления ошибок.
533 Начало использования @code{go.mod} подсистемы.
538 @subsection Релиз 3.4
540 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
544 @subsection Релиз 3.3
548 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
549 проверяют существование @file{.seen} файла и расценивают его как то, что
550 файл уже был скачан. Возможно передача данных была осуществлена
551 сторонним способом и удалённая сторона должна быть оповещена об этом.
554 Если более высокоприоритетный пакет попадает в спул, то
555 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
556 низкоприоритетные передачи.
559 К средствам связанным с online-соединениями (@command{nncp-daemon},
560 @command{nncp-call}, @command{nncp-caller}) добавлен простой
561 ограничитель скорости.
564 Возможность задания приоритета символьными обозначениями:
565 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
568 Изменены значения приоритетов по-умолчанию:
569 для @command{nncp-exec} с 64 на 96,
570 для @command{nncp-freq} с 64 на 160,
571 для @command{nncp-file} с 196 на 224.
576 @subsection Релиз 3.2
579 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
580 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
581 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
582 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
583 Явное добавление @file{NNCP/} директории в архив восстанавливает
584 работоспособность с корректными tar архивами.
588 @subsection Релиз 3.1
591 Возможность отключать пересылку через промежуточные ноды используя
592 @verb{|-via -|} опцию командной строки.
596 @subsection Релиз 3.0
600 @strong{Несовместимое} изменение формата простых пакетов. Работа со
601 старыми версиями не поддерживается.
604 Добавлена возможность удалённого исполнения команд, путём
605 конфигурирования @option{exec} опции конфигурационного файла и
606 использования команды @command{nncp-exec}:
609 Команда @command{nncp-mail} заменена более гибкой и широкой
610 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
611 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
613 @option{sendmail} опция конфигурационного файла заменена на более гибкую
614 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
619 Возможность переопределить @option{via} опцию конфигурации для целевого
620 узла через @option{-via} опцию командной строки для следующих команд:
621 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
624 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
628 Exec команды вызываются с дополнительными переменными окружения
629 @env{NNCP_NICE} и @env{NNCP_SELF}.
632 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
633 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
634 аргументом @option{-replynice}.
637 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
638 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
639 @option{-noexec}, @option{-notrns}.
642 По-умолчанию @command{nncp-file} команда для
643 @option{-minsize}/@option{-chunked} опций использует
644 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
645 Это можно отключить указав нулевое значение.
650 @subsection Релиз 2.0
654 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
655 Работа со старыми версиями не поддерживается.
658 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
659 Одним криптографическим примитивом меньше.
662 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
663 криптографическим примитивом меньше (предполагая, что BLAKE2X
664 практически идентичен BLAKE2).
669 @subsection Релиз 1.0
673 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
674 со старыми версиями не поддерживается.
677 @command{nncp-bundle} команда может создавать потоки зашифрованных
678 пакетов или потреблять их. Это полезно когда речь идёт о
679 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
680 без создания промежуточного подготовленного ISO образа или работа с
681 ленточными накопителями).
684 @command{nncp-toss} команда может создавать @file{.seen} файлы,
685 предотвращая приём дублированных пакетов.
688 В команде @command{nncp-call} разрешается иметь только одного
689 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
690 входящих пакетов могут создать много горутин.
693 Возможность переопределить путь до spool директории и файла журнала
694 через аргумент командной строки или переменную окружения.
697 @command{nncp-rm} команда может удалять все исходящие/входящие,
698 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
703 @subsection Релиз 0.12
705 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
709 @subsection Релиз 0.11
711 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
715 @subsection Релиз 0.10
718 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
719 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
723 @subsection Релиз 0.9
726 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
727 команды. Они игнорировались.
731 @subsection Релиз 0.8
734 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
735 @option{-minsize} для передачи без разбиения на части была в байтах, а
740 @subsection Релиз 0.7
744 Возможность предоставлять данные для @command{nncp-file} через
745 стандартный ввод, используя временный зашифрованный файл для этого.
748 Появилась возможность передачи файлов разбитых на части, с сопутствующей
749 @command{nncp-reass} командой и @option{freqchunked} опцией
750 конфигурационного файла. Полезно для передачи больших файлов через
751 маленькие устройства хранения.
754 @option{freqminsize} опция конфигурационного файла, аналогичная
758 Опция @option{-force} команды @command{nncp-xfer} переименована в
759 @option{-mkdir} для ясности.
762 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
765 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
766 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
767 имели общий префикс и были сгруппированы для удобства.
770 Появилась команда @command{nncp-cfgenc}, позволяющая
771 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
772 без использования OpenPGP или других подобных инструментов.
775 Обновлены зависимые криптографические библиотеки.
780 @subsection Релиз 0.6
782 @item Появилась небольшая команда @command{nncp-rm}.
783 @item Обновлены зависимые криптографические библиотеки.
787 @subsection Релиз 0.5
790 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
791 @command{nncp-file} и @command{nncp-freq} командах.
795 @subsection Релиз 0.4
799 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
800 @command{nncp-daemon}: иногда они могли падать с segmentation fault
801 ошибкой (данные не терялись).
804 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
805 это короче и удобнее для использования.
808 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
809 позволяющая создать минималистичный урезанный конфигурационный файл без
810 приватных ключей, что полезно во время использования @command{nncp-xfer}.
815 @subsection Релиз 0.3
817 @item Исправлена совместимость с Go 1.6.
821 @subsection Релиз 0.2
825 @strong{Несовместимое} изменение формата пакета (магическое число тоже
826 изменено): поле размера пакета шифруется и не посылается в открытом виде.
829 @option{-minsize} опция даёт возможность автоматически дополнять
830 исходящие пакеты до указанного минимального размера.
833 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
834 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
835 Удалённая сторона сразу же оповещается об этом.
838 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
839 неактивность в online соединении, когда оно должно быть отключено. Она
840 может быть использована для сохранения соединения на долгое время.
843 @option{-maxonlinetime} опция даёт возможность указания максимального
844 возможного времени жизни соединения.
847 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
851 @command{nncp-pkt} команда может разжимать данные.