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-check} команды появилась @option{-cycle} опция, вводящая
25 проверку в бесконечный цикл.
28 @command{nncp-pkt} может парсить @file{.hdr} файлы.
31 Появилась возможность мультивещательной (multicast) рассылки пакетов.
32 Реализовано всего лишь дополнительным типом простых пакетов и изменением
33 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
38 @subsection Релиз 7.0.0
42 Минимальная требуемая версия Go 1.13.
45 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
46 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
47 изменение формата шифрованных файлов (всего что находится в spool
48 области) и формата @file{.meta} файла при chunked передаче.
50 Текущая реализация далека от оптимальной: в ней нет распараллеливания
51 вычислений и имеет повышенное потребление памяти: около 512 KiB на
52 каждый 1 GiB данных файла. Будущая оптимизация производительности и
53 потребления памяти не должна привести к изменению формата пакетов. Но
54 это всё равно в несколько раз быстрее BLAKE2b.
57 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
58 чтения с диска только предшествующей части, а не полностью всего файла,
62 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
65 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
66 уменьшая количество примитивов. А также заголовок шифрованного файла
67 теперь является ассоциированными данными при шифровании.
70 MultiCast Discovery использует
71 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
74 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
77 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
80 Обновлены зависимые библиотеки.
85 @subsection Релиз 6.6.0
89 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
90 ожидают завершения всех процессов фоновой проверки контрольных сумм,
91 после того как соединение закрыто.
94 Добавлена возможность определения адреса через multicast оповещение в
95 локальной сети, так называемый MCD (MultiCast Discovery).
100 @subsection Релиз 6.5.0
104 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
107 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
110 Исправлена гонка при закрытии файловых дескрипторов во время завершения
111 работы online протокола, которая могла привести к ошибке записи
112 принятого фрагмента пакета.
115 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
116 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
121 @subsection Релиз 6.4.0
125 Исправлена возможная гонка в online протоколе, приводящая к падению
131 @subsection Релиз 6.3.0
135 Исправлено возможное падение программы во время показа прогресса online
141 @subsection Релиз 6.2.1
145 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
150 @subsection Релиз 6.2.0
154 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
157 Очередной рефакторинг и упрощение системы журналирования.
158 Не должно быть видимых изменений для конечного пользователя.
163 @subsection Релиз 6.1.0
167 Оптимизация: большинство команд теперь не держат открытыми файловые
168 дескрипторы. Прежде вы легко могли выйти за пределы максимально
169 допустимого количества открытых файлов, если у вас было много пакетов в
173 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
174 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
177 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
178 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
179 online демоны не выполнят проверку целостности.
182 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
183 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
186 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
187 файлах, рядом с самими пакетами. Это может существенно повысить скорость
188 получения списка пакетов на файловых системах с большим размером блока.
193 @subsection Релиз 6.0.0
197 Журнал использует человеко-читаемый и легко обрабатываемый машиной
198 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
199 записей, вместо структурированных строчек RFC 3339. Старый формат
200 журналов не поддерживается @command{nncp-log}.
203 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
204 @command{nncp-daemon}.
207 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
208 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
209 выражением содержащим секунды, это можно использовать как возможность
210 вызова только при появлении исходящих пакетов.
213 @command{nncp-cronexpr} команда позволяет проверить корректность и
214 ожидаемый результат от указанного cron выражения.
219 @subsection Релиз 5.6.0
223 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
224 во время него ежесекундно.
227 В @option{calls} секции конфигурации появились опции
228 @option{autotoss}, @option{autotoss-doseen},
229 @option{autotoss-nofile}, @option{autotoss-nofreq},
230 @option{autotoss-noexec}, @option{autotoss-notrns}.
231 Вы можете настраивать опции автоматического tosser для каждого вызова.
234 Использовать vendoring вместо переопределения @env{GOPATH} во время
235 установки tarball, так как текущая минимальная версия Go это 1.12,
236 поддерживающая модули.
241 @subsection Релиз 5.5.1
245 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
246 в @file{config} во время установки.
251 @subsection Релиз 5.5.0
255 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
256 @command{nncp-bundle}, @command{nncp-stat} командах.
259 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
262 У команды @command{nncp-exec} появились @option{-use-tmp} и
263 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
267 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
268 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
271 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
276 @subsection Релиз 5.4.1
280 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
285 @subsection Релиз 5.4.0
289 Обновлены зависимые библиотеки.
292 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
293 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
294 реализация @command{redo} включена в tarball.
299 @subsection Релиз 5.3.3
303 Больше различных проверок в коде на ошибки.
306 Обновлены зависимые библиотеки.
311 @subsection Релиз 5.3.2
315 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
316 котором соединение могло не учитывать факты прихода пакетов и обрывать
322 @subsection Релиз 5.3.1
326 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
327 использующими внешние команды (@verb{#"|somecmd"#}).
330 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
331 каждому пакету в spool.
336 @subsection Релиз 5.3.0
340 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
343 Исправлено не происходящее дополнение (padding) handshake сообщений.
346 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
349 SP протокол порождает меньше вызовов записей (соответственно, и TCP
353 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
354 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
357 Раз в минуту, если нет более никакого другого трафика, посылаются PING
358 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
359 более не работоспособно.
362 @command{nncp-toss} использует lock-file для предотвращения
363 одновременной обработки зашифрованных пакетов.
368 @subsection Релиз 5.2.1
372 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
377 @subsection Релиз 5.2.0
381 Большинство команд по умолчанию показывают однострочный прогресс
382 выполнения операции. Появились @option{-progress}, @option{-noprogress}
383 опции командной строки, @option{noprogress} опция конфигурационного
387 Исправлен некорректный код возврата @command{nncp-check} команды,
388 который возвращал ошибку когда всё хорошо.
391 Проверка свободного места для пакетов, во время выполнения
392 @command{nncp-bundle -rx}.
397 @subsection Релиз 5.1.2
401 Исправлена @strong{критичная} уязвимость: аутентификация online нод
402 могла приводить к некорректной идентификации удалённой стороны, позволяя
403 скачивать чужие зашифрованные пакеты.
406 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
407 публичный ключ Noise были поменяны местами, что приводило к
408 невозможности online аутентификации нод.
411 Явная синхронизация (fsync) директорий для гарантированного
412 переименования файлов.
417 @subsection Релиз 5.1.1
421 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
426 @subsection Релиз 5.1.0
430 @command{nncp-file} может отправлять директории, автоматически на лету
434 Во время создания исходящих сообщений проверяется наличие свободного
435 места на файловой системе.
438 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
439 конфигурационного файла заменены на структуру
440 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
443 Добавлена @option{freq.maxsize} опция конфигурационного файл,
444 запрещающая ответ на файловый запрос больше заданного размера.
447 Возможность оповещения об успешно выполненных командах (exec) через
448 @option{notify.exec} опцию конфигурационного файла.
453 @subsection Релиз 5.0.0
457 @strong{Несовместимое} изменение формата конфигурационного файла:
458 YAML заменён на Hjson, из-за его гораздо большей простоты, без
459 заметной потери функционала и удобства.
462 @strong{Несовместимое} изменение формата простых пакетов. Работа со
463 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
464 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
465 смотря на то, что версия библиотеки ещё не проверена временем.
468 Возможность соединяться с удалёнными нодами не только по TCP, но и через
469 pipe вызов сторонней команды.
472 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
473 комментариев. Можно использовать @option{-nocomments} опцию для старого
477 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
478 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
481 Возможность переопределить umask процесса через опцию конфигурационного
485 По умолчанию файлы и директории создаются с 666/777 правами доступа,
486 позволяя управлять ими @command{umask}-ом.
489 Обновлены зависимости.
492 Полное использование go модулей для управления зависимостями
493 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
496 Отмена автоматического использования более новых версий GNU GPL
497 (лицензия проекта GNU GPLv3-только).
502 @subsection Релиз 4.1
504 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
508 @subsection Релиз 4.0
512 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
513 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
514 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
515 отсылать дешифрованные данные внешней команде. Старые версии не
519 Проверка доступного места перед копированием во время работы
520 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
523 @command{nncp-call} имеет возможность только показывать список пакетов
524 на удалённой машине, без их передачи.
527 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
530 Восстановлена работоспособность @option{xxrate} настройки в
531 @option{calls} секции конфигурационного файла.
534 Зависимые библиотеки обновлены.
537 Небольшие исправления ошибок.
540 Начало использования @code{go.mod} подсистемы.
545 @subsection Релиз 3.4
547 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
551 @subsection Релиз 3.3
555 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
556 проверяют существование @file{.seen} файла и расценивают его как то, что
557 файл уже был скачан. Возможно передача данных была осуществлена
558 сторонним способом и удалённая сторона должна быть оповещена об этом.
561 Если более высокоприоритетный пакет попадает в спул, то
562 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
563 низкоприоритетные передачи.
566 К средствам связанным с online-соединениями (@command{nncp-daemon},
567 @command{nncp-call}, @command{nncp-caller}) добавлен простой
568 ограничитель скорости.
571 Возможность задания приоритета символьными обозначениями:
572 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
575 Изменены значения приоритетов по-умолчанию:
576 для @command{nncp-exec} с 64 на 96,
577 для @command{nncp-freq} с 64 на 160,
578 для @command{nncp-file} с 196 на 224.
583 @subsection Релиз 3.2
586 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
587 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
588 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
589 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
590 Явное добавление @file{NNCP/} директории в архив восстанавливает
591 работоспособность с корректными tar архивами.
595 @subsection Релиз 3.1
598 Возможность отключать пересылку через промежуточные ноды используя
599 @verb{|-via -|} опцию командной строки.
603 @subsection Релиз 3.0
607 @strong{Несовместимое} изменение формата простых пакетов. Работа со
608 старыми версиями не поддерживается.
611 Добавлена возможность удалённого исполнения команд, путём
612 конфигурирования @option{exec} опции конфигурационного файла и
613 использования команды @command{nncp-exec}:
616 Команда @command{nncp-mail} заменена более гибкой и широкой
617 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
618 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
620 @option{sendmail} опция конфигурационного файла заменена на более гибкую
621 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
626 Возможность переопределить @option{via} опцию конфигурации для целевого
627 узла через @option{-via} опцию командной строки для следующих команд:
628 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
631 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
635 Exec команды вызываются с дополнительными переменными окружения
636 @env{NNCP_NICE} и @env{NNCP_SELF}.
639 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
640 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
641 аргументом @option{-replynice}.
644 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
645 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
646 @option{-noexec}, @option{-notrns}.
649 По-умолчанию @command{nncp-file} команда для
650 @option{-minsize}/@option{-chunked} опций использует
651 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
652 Это можно отключить указав нулевое значение.
657 @subsection Релиз 2.0
661 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
662 Работа со старыми версиями не поддерживается.
665 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
666 Одним криптографическим примитивом меньше.
669 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
670 криптографическим примитивом меньше (предполагая, что BLAKE2X
671 практически идентичен BLAKE2).
676 @subsection Релиз 1.0
680 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
681 со старыми версиями не поддерживается.
684 @command{nncp-bundle} команда может создавать потоки зашифрованных
685 пакетов или потреблять их. Это полезно когда речь идёт о
686 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
687 без создания промежуточного подготовленного ISO образа или работа с
688 ленточными накопителями).
691 @command{nncp-toss} команда может создавать @file{.seen} файлы,
692 предотвращая приём дублированных пакетов.
695 В команде @command{nncp-call} разрешается иметь только одного
696 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
697 входящих пакетов могут создать много горутин.
700 Возможность переопределить путь до spool директории и файла журнала
701 через аргумент командной строки или переменную окружения.
704 @command{nncp-rm} команда может удалять все исходящие/входящие,
705 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
710 @subsection Релиз 0.12
712 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
716 @subsection Релиз 0.11
718 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
722 @subsection Релиз 0.10
725 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
726 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
730 @subsection Релиз 0.9
733 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
734 команды. Они игнорировались.
738 @subsection Релиз 0.8
741 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
742 @option{-minsize} для передачи без разбиения на части была в байтах, а
747 @subsection Релиз 0.7
751 Возможность предоставлять данные для @command{nncp-file} через
752 стандартный ввод, используя временный зашифрованный файл для этого.
755 Появилась возможность передачи файлов разбитых на части, с сопутствующей
756 @command{nncp-reass} командой и @option{freqchunked} опцией
757 конфигурационного файла. Полезно для передачи больших файлов через
758 маленькие устройства хранения.
761 @option{freqminsize} опция конфигурационного файла, аналогичная
765 Опция @option{-force} команды @command{nncp-xfer} переименована в
766 @option{-mkdir} для ясности.
769 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
772 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
773 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
774 имели общий префикс и были сгруппированы для удобства.
777 Появилась команда @command{nncp-cfgenc}, позволяющая
778 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
779 без использования OpenPGP или других подобных инструментов.
782 Обновлены зависимые криптографические библиотеки.
787 @subsection Релиз 0.6
789 @item Появилась небольшая команда @command{nncp-rm}.
790 @item Обновлены зависимые криптографические библиотеки.
794 @subsection Релиз 0.5
797 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
798 @command{nncp-file} и @command{nncp-freq} командах.
802 @subsection Релиз 0.4
806 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
807 @command{nncp-daemon}: иногда они могли падать с segmentation fault
808 ошибкой (данные не терялись).
811 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
812 это короче и удобнее для использования.
815 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
816 позволяющая создать минималистичный урезанный конфигурационный файл без
817 приватных ключей, что полезно во время использования @command{nncp-xfer}.
822 @subsection Релиз 0.3
824 @item Исправлена совместимость с Go 1.6.
828 @subsection Релиз 0.2
832 @strong{Несовместимое} изменение формата пакета (магическое число тоже
833 изменено): поле размера пакета шифруется и не посылается в открытом виде.
836 @option{-minsize} опция даёт возможность автоматически дополнять
837 исходящие пакеты до указанного минимального размера.
840 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
841 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
842 Удалённая сторона сразу же оповещается об этом.
845 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
846 неактивность в online соединении, когда оно должно быть отключено. Она
847 может быть использована для сохранения соединения на долгое время.
850 @option{-maxonlinetime} опция даёт возможность указания максимального
851 возможного времени жизни соединения.
854 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
858 @command{nncp-pkt} команда может разжимать данные.