5 @subsection Релиз 7.5.1
9 NNCP собирается на NetBSD.
14 @subsection Релиз 7.5.0
18 @command{nncp-daemon} соблюдает UCSPI-TCP интерфейс, благодаря чему в
19 журнале будет присутствовать адрес удалённой системы (при запуске под
20 совместимой утилитой). Желательно применять @option{-ucspi} опцию вместо
24 @command{nncp-call} может быть UCSPI-TCP клиентом, используя
25 @option{-ucspi} опцию.
28 Не выходить если не получается слушать на каком-либо MCD сетевом
29 интерфейсе -- только предупреждать об ошибке.
34 @subsection Релиз 7.4.0
38 Исправлена работоспособность MCD при одновременном использовании
39 @command{nncp-daemon} и @command{nncp-caller}.
44 @subsection Релиз 7.3.2
48 @command{hjson-cli} утилита теперь собирается в vendor-режиме.
53 @subsection Релиз 7.3.1
57 Исправлена проблема с возможно остающимся открытым файловым
58 дескриптором в online командах.
61 Существенно снижено потребление памяти MTH хэширования.
66 @subsection Релиз 7.3.0
70 Поправлены проблемы работоспособности на 32-бит системах с большими файлами.
73 Возможность использовать конфигурацию в виде директории с набором
74 файлов. Появилась команда @command{nncp-cfgdir}.
79 @subsection Релиз 7.2.1
83 Небольшие оптимизации в online командах.
88 @subsection Релиз 7.2.0
92 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
95 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
96 использовать его, а не игнорировать.
99 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
100 видящего свой собственный пакет.
103 Намного меньшее потребление памяти во время MTH хэширования когда
104 смещение равно нулю: когда пакет не является докачиванием, а например
105 проверяется @command{nncp-check} командой.
110 @subsection Релиз 7.1.1
114 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
119 @subsection Релиз 7.1.0
123 Появилась возможность мультивещательной (multicast) рассылки пакетов.
124 Реализовано всего лишь дополнительным типом простых пакетов и изменением
125 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
128 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
129 команд использующих временный файл (stdin и @option{-use-tmp}).
132 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
135 Исправлено некорректное генерирование @file{.hdr} при использовании
139 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
143 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
144 проверку в бесконечный цикл.
147 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
150 @command{nncp-pkt} может парсить @file{.hdr} файлы.
155 @subsection Релиз 7.0.0
159 Минимальная требуемая версия Go 1.13.
162 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
163 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
164 изменение формата шифрованных файлов (всего что находится в spool
165 области) и формата @file{.meta} файла при chunked передаче.
167 Текущая реализация далека от оптимальной: в ней нет распараллеливания
168 вычислений и имеет повышенное потребление памяти: около 512 KiB на
169 каждый 1 GiB данных файла. Будущая оптимизация производительности и
170 потребления памяти не должна привести к изменению формата пакетов. Но
171 это всё равно в несколько раз быстрее BLAKE2b.
174 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
175 чтения с диска только предшествующей части, а не полностью всего файла,
179 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
182 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
183 уменьшая количество примитивов. А также заголовок шифрованного файла
184 теперь является ассоциированными данными при шифровании.
187 MultiCast Discovery использует
188 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
191 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
194 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
197 Обновлены зависимые библиотеки.
202 @subsection Релиз 6.6.0
206 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
207 ожидают завершения всех процессов фоновой проверки контрольных сумм,
208 после того как соединение закрыто.
211 Добавлена возможность определения адреса через multicast оповещение в
212 локальной сети, так называемый MCD (MultiCast Discovery).
217 @subsection Релиз 6.5.0
221 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
224 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
227 Исправлена гонка при закрытии файловых дескрипторов во время завершения
228 работы online протокола, которая могла привести к ошибке записи
229 принятого фрагмента пакета.
232 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
233 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
238 @subsection Релиз 6.4.0
242 Исправлена возможная гонка в online протоколе, приводящая к падению
248 @subsection Релиз 6.3.0
252 Исправлено возможное падение программы во время показа прогресса online
258 @subsection Релиз 6.2.1
262 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
267 @subsection Релиз 6.2.0
271 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
274 Очередной рефакторинг и упрощение системы журналирования.
275 Не должно быть видимых изменений для конечного пользователя.
280 @subsection Релиз 6.1.0
284 Оптимизация: большинство команд теперь не держат открытыми файловые
285 дескрипторы. Прежде вы легко могли выйти за пределы максимально
286 допустимого количества открытых файлов, если у вас было много пакетов в
290 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
291 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
294 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
295 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
296 online демоны не выполнят проверку целостности.
299 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
300 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
303 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
304 файлах, рядом с самими пакетами. Это может существенно повысить скорость
305 получения списка пакетов на файловых системах с большим размером блока.
310 @subsection Релиз 6.0.0
314 Журнал использует человеко-читаемый и легко обрабатываемый машиной
315 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
316 записей, вместо структурированных строчек RFC 3339. Старый формат
317 журналов не поддерживается @command{nncp-log}.
320 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
321 @command{nncp-daemon}.
324 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
325 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
326 выражением содержащим секунды, это можно использовать как возможность
327 вызова только при появлении исходящих пакетов.
330 @command{nncp-cronexpr} команда позволяет проверить корректность и
331 ожидаемый результат от указанного cron выражения.
336 @subsection Релиз 5.6.0
340 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
341 во время него ежесекундно.
344 В @option{calls} секции конфигурации появились опции
345 @option{autotoss}, @option{autotoss-doseen},
346 @option{autotoss-nofile}, @option{autotoss-nofreq},
347 @option{autotoss-noexec}, @option{autotoss-notrns}.
348 Вы можете настраивать опции автоматического tosser для каждого вызова.
351 Использовать vendoring вместо переопределения @env{GOPATH} во время
352 установки tarball, так как текущая минимальная версия Go это 1.12,
353 поддерживающая модули.
358 @subsection Релиз 5.5.1
362 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
363 в @file{config} во время установки.
368 @subsection Релиз 5.5.0
372 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
373 @command{nncp-bundle}, @command{nncp-stat} командах.
376 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
379 У команды @command{nncp-exec} появились @option{-use-tmp} и
380 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
384 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
385 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
388 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
393 @subsection Релиз 5.4.1
397 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
402 @subsection Релиз 5.4.0
406 Обновлены зависимые библиотеки.
409 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
410 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
411 реализация @command{redo} включена в tarball.
416 @subsection Релиз 5.3.3
420 Больше различных проверок в коде на ошибки.
423 Обновлены зависимые библиотеки.
428 @subsection Релиз 5.3.2
432 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
433 котором соединение могло не учитывать факты прихода пакетов и обрывать
439 @subsection Релиз 5.3.1
443 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
444 использующими внешние команды (@verb{#"|somecmd"#}).
447 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
448 каждому пакету в spool.
453 @subsection Релиз 5.3.0
457 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
460 Исправлено не происходящее дополнение (padding) handshake сообщений.
463 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
466 SP протокол порождает меньше вызовов записей (соответственно, и TCP
470 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
471 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
474 Раз в минуту, если нет более никакого другого трафика, посылаются PING
475 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
476 более не работоспособно.
479 @command{nncp-toss} использует lock-file для предотвращения
480 одновременной обработки зашифрованных пакетов.
485 @subsection Релиз 5.2.1
489 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
494 @subsection Релиз 5.2.0
498 Большинство команд по умолчанию показывают однострочный прогресс
499 выполнения операции. Появились @option{-progress}, @option{-noprogress}
500 опции командной строки, @option{noprogress} опция конфигурационного
504 Исправлен некорректный код возврата @command{nncp-check} команды,
505 который возвращал ошибку когда всё хорошо.
508 Проверка свободного места для пакетов, во время выполнения
509 @command{nncp-bundle -rx}.
514 @subsection Релиз 5.1.2
518 Исправлена @strong{критичная} уязвимость: аутентификация online нод
519 могла приводить к некорректной идентификации удалённой стороны, позволяя
520 скачивать чужие зашифрованные пакеты.
523 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
524 публичный ключ Noise были поменяны местами, что приводило к
525 невозможности online аутентификации нод.
528 Явная синхронизация (fsync) директорий для гарантированного
529 переименования файлов.
534 @subsection Релиз 5.1.1
538 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
543 @subsection Релиз 5.1.0
547 @command{nncp-file} может отправлять директории, автоматически на лету
551 Во время создания исходящих сообщений проверяется наличие свободного
552 места на файловой системе.
555 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
556 конфигурационного файла заменены на структуру
557 @option{freq: @{path: @dots{}, minsize: @dots{}, chunked: @dots{}@}}.
560 Добавлена @option{freq.maxsize} опция конфигурационного файл,
561 запрещающая ответ на файловый запрос больше заданного размера.
564 Возможность оповещения об успешно выполненных командах (exec) через
565 @option{notify.exec} опцию конфигурационного файла.
570 @subsection Релиз 5.0.0
574 @strong{Несовместимое} изменение формата конфигурационного файла:
575 YAML заменён на Hjson, из-за его гораздо большей простоты, без
576 заметной потери функционала и удобства.
579 @strong{Несовместимое} изменение формата простых пакетов. Работа со
580 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
581 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
582 смотря на то, что версия библиотеки ещё не проверена временем.
585 Возможность соединяться с удалёнными нодами не только по TCP, но и через
586 pipe вызов сторонней команды.
589 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
590 комментариев. Можно использовать @option{-nocomments} опцию для старого
594 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
595 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
598 Возможность переопределить umask процесса через опцию конфигурационного
602 По умолчанию файлы и директории создаются с 666/777 правами доступа,
603 позволяя управлять ими @command{umask}-ом.
606 Обновлены зависимости.
609 Полное использование go модулей для управления зависимостями
610 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
613 Отмена автоматического использования более новых версий GNU GPL
614 (лицензия проекта GNU GPLv3-только).
619 @subsection Релиз 4.1
621 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
625 @subsection Релиз 4.0
629 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
630 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
631 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
632 отсылать дешифрованные данные внешней команде. Старые версии не
636 Проверка доступного места перед копированием во время работы
637 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
640 @command{nncp-call} имеет возможность только показывать список пакетов
641 на удалённой машине, без их передачи.
644 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
647 Восстановлена работоспособность @option{xxrate} настройки в
648 @option{calls} секции конфигурационного файла.
651 Зависимые библиотеки обновлены.
654 Небольшие исправления ошибок.
657 Начало использования @code{go.mod} подсистемы.
662 @subsection Релиз 3.4
664 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
668 @subsection Релиз 3.3
672 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
673 проверяют существование @file{.seen} файла и расценивают его как то, что
674 файл уже был скачан. Возможно передача данных была осуществлена
675 сторонним способом и удалённая сторона должна быть оповещена об этом.
678 Если более высокоприоритетный пакет попадает в спул, то
679 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
680 низкоприоритетные передачи.
683 К средствам связанным с online-соединениями (@command{nncp-daemon},
684 @command{nncp-call}, @command{nncp-caller}) добавлен простой
685 ограничитель скорости.
688 Возможность задания приоритета символьными обозначениями:
689 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
692 Изменены значения приоритетов по-умолчанию:
693 для @command{nncp-exec} с 64 на 96,
694 для @command{nncp-freq} с 64 на 160,
695 для @command{nncp-file} с 196 на 224.
700 @subsection Релиз 3.2
703 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
704 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
705 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
706 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
707 Явное добавление @file{NNCP/} директории в архив восстанавливает
708 работоспособность с корректными tar архивами.
712 @subsection Релиз 3.1
715 Возможность отключать пересылку через промежуточные ноды используя
716 @verb{|-via -|} опцию командной строки.
720 @subsection Релиз 3.0
724 @strong{Несовместимое} изменение формата простых пакетов. Работа со
725 старыми версиями не поддерживается.
728 Добавлена возможность удалённого исполнения команд, путём
729 конфигурирования @option{exec} опции конфигурационного файла и
730 использования команды @command{nncp-exec}:
733 Команда @command{nncp-mail} заменена более гибкой и широкой
734 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
735 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
737 @option{sendmail} опция конфигурационного файла заменена на более гибкую
738 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
743 Возможность переопределить @option{via} опцию конфигурации для целевого
744 узла через @option{-via} опцию командной строки для следующих команд:
745 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
748 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
752 Exec команды вызываются с дополнительными переменными окружения
753 @env{NNCP_NICE} и @env{NNCP_SELF}.
756 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
757 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
758 аргументом @option{-replynice}.
761 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
762 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
763 @option{-noexec}, @option{-notrns}.
766 По-умолчанию @command{nncp-file} команда для
767 @option{-minsize}/@option{-chunked} опций использует
768 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
769 Это можно отключить указав нулевое значение.
774 @subsection Релиз 2.0
778 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
779 Работа со старыми версиями не поддерживается.
782 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
783 Одним криптографическим примитивом меньше.
786 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
787 криптографическим примитивом меньше (предполагая, что BLAKE2X
788 практически идентичен BLAKE2).
793 @subsection Релиз 1.0
797 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
798 со старыми версиями не поддерживается.
801 @command{nncp-bundle} команда может создавать потоки зашифрованных
802 пакетов или потреблять их. Это полезно когда речь идёт о
803 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
804 без создания промежуточного подготовленного ISO образа или работа с
805 ленточными накопителями).
808 @command{nncp-toss} команда может создавать @file{.seen} файлы,
809 предотвращая приём дублированных пакетов.
812 В команде @command{nncp-call} разрешается иметь только одного
813 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
814 входящих пакетов могут создать много горутин.
817 Возможность переопределить путь до spool директории и файла журнала
818 через аргумент командной строки или переменную окружения.
821 @command{nncp-rm} команда может удалять все исходящие/входящие,
822 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
827 @subsection Релиз 0.12
829 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
833 @subsection Релиз 0.11
835 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
839 @subsection Релиз 0.10
842 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
843 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
847 @subsection Релиз 0.9
850 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
851 команды. Они игнорировались.
855 @subsection Релиз 0.8
858 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
859 @option{-minsize} для передачи без разбиения на части была в байтах, а
864 @subsection Релиз 0.7
868 Возможность предоставлять данные для @command{nncp-file} через
869 стандартный ввод, используя временный зашифрованный файл для этого.
872 Появилась возможность передачи файлов разбитых на части, с сопутствующей
873 @command{nncp-reass} командой и @option{freqchunked} опцией
874 конфигурационного файла. Полезно для передачи больших файлов через
875 маленькие устройства хранения.
878 @option{freqminsize} опция конфигурационного файла, аналогичная
882 Опция @option{-force} команды @command{nncp-xfer} переименована в
883 @option{-mkdir} для ясности.
886 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
889 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
890 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
891 имели общий префикс и были сгруппированы для удобства.
894 Появилась команда @command{nncp-cfgenc}, позволяющая
895 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
896 без использования OpenPGP или других подобных инструментов.
899 Обновлены зависимые криптографические библиотеки.
904 @subsection Релиз 0.6
906 @item Появилась небольшая команда @command{nncp-rm}.
907 @item Обновлены зависимые криптографические библиотеки.
911 @subsection Релиз 0.5
914 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
915 @command{nncp-file} и @command{nncp-freq} командах.
919 @subsection Релиз 0.4
923 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
924 @command{nncp-daemon}: иногда они могли падать с segmentation fault
925 ошибкой (данные не терялись).
928 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
929 это короче и удобнее для использования.
932 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
933 позволяющая создать минималистичный урезанный конфигурационный файл без
934 приватных ключей, что полезно во время использования @command{nncp-xfer}.
939 @subsection Релиз 0.3
941 @item Исправлена совместимость с Go 1.6.
945 @subsection Релиз 0.2
949 @strong{Несовместимое} изменение формата пакета (магическое число тоже
950 изменено): поле размера пакета шифруется и не посылается в открытом виде.
953 @option{-minsize} опция даёт возможность автоматически дополнять
954 исходящие пакеты до указанного минимального размера.
957 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
958 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
959 Удалённая сторона сразу же оповещается об этом.
962 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
963 неактивность в online соединении, когда оно должно быть отключено. Она
964 может быть использована для сохранения соединения на долгое время.
967 @option{-maxonlinetime} опция даёт возможность указания максимального
968 возможного времени жизни соединения.
971 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
975 @command{nncp-pkt} команда может разжимать данные.