5 @subsection Релиз 7.5.0
9 @command{nncp-daemon} соблюдает UCSPI-TCP интерфейс, благодаря чему в
10 журнале будет присутствовать адрес удалённой системы (при запуске под
11 совместимой утилитой). Желательно применять @option{-ucspi} опцию вместо
17 @subsection Релиз 7.4.0
21 Исправлена работоспособность MCD при одновременном использовании
22 @command{nncp-daemon} и @command{nncp-caller}.
27 @subsection Релиз 7.3.2
31 @command{hjson-cli} утилита теперь собирается в vendor-режиме.
36 @subsection Релиз 7.3.1
40 Исправлена проблема с возможно остающимся открытым файловым
41 дескриптором в online командах.
44 Существенно снижено потребление памяти MTH хэширования.
49 @subsection Релиз 7.3.0
53 Поправлены проблемы работоспособности на 32-бит системах с большими файлами.
56 Возможность использовать конфигурацию в виде директории с набором
57 файлов. Появилась команда @command{nncp-cfgdir}.
62 @subsection Релиз 7.2.1
66 Небольшие оптимизации в online командах.
71 @subsection Релиз 7.2.0
75 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
78 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
79 использовать его, а не игнорировать.
82 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
83 видящего свой собственный пакет.
86 Намного меньшее потребление памяти во время MTH хэширования когда
87 смещение равно нулю: когда пакет не является докачиванием, а например
88 проверяется @command{nncp-check} командой.
93 @subsection Релиз 7.1.1
97 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
102 @subsection Релиз 7.1.0
106 Появилась возможность мультивещательной (multicast) рассылки пакетов.
107 Реализовано всего лишь дополнительным типом простых пакетов и изменением
108 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
111 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
112 команд использующих временный файл (stdin и @option{-use-tmp}).
115 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
118 Исправлено некорректное генерирование @file{.hdr} при использовании
122 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
126 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
127 проверку в бесконечный цикл.
130 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
133 @command{nncp-pkt} может парсить @file{.hdr} файлы.
138 @subsection Релиз 7.0.0
142 Минимальная требуемая версия Go 1.13.
145 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
146 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
147 изменение формата шифрованных файлов (всего что находится в spool
148 области) и формата @file{.meta} файла при chunked передаче.
150 Текущая реализация далека от оптимальной: в ней нет распараллеливания
151 вычислений и имеет повышенное потребление памяти: около 512 KiB на
152 каждый 1 GiB данных файла. Будущая оптимизация производительности и
153 потребления памяти не должна привести к изменению формата пакетов. Но
154 это всё равно в несколько раз быстрее BLAKE2b.
157 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
158 чтения с диска только предшествующей части, а не полностью всего файла,
162 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
165 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
166 уменьшая количество примитивов. А также заголовок шифрованного файла
167 теперь является ассоциированными данными при шифровании.
170 MultiCast Discovery использует
171 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
174 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
177 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
180 Обновлены зависимые библиотеки.
185 @subsection Релиз 6.6.0
189 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
190 ожидают завершения всех процессов фоновой проверки контрольных сумм,
191 после того как соединение закрыто.
194 Добавлена возможность определения адреса через multicast оповещение в
195 локальной сети, так называемый MCD (MultiCast Discovery).
200 @subsection Релиз 6.5.0
204 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
207 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
210 Исправлена гонка при закрытии файловых дескрипторов во время завершения
211 работы online протокола, которая могла привести к ошибке записи
212 принятого фрагмента пакета.
215 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
216 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
221 @subsection Релиз 6.4.0
225 Исправлена возможная гонка в online протоколе, приводящая к падению
231 @subsection Релиз 6.3.0
235 Исправлено возможное падение программы во время показа прогресса online
241 @subsection Релиз 6.2.1
245 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
250 @subsection Релиз 6.2.0
254 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
257 Очередной рефакторинг и упрощение системы журналирования.
258 Не должно быть видимых изменений для конечного пользователя.
263 @subsection Релиз 6.1.0
267 Оптимизация: большинство команд теперь не держат открытыми файловые
268 дескрипторы. Прежде вы легко могли выйти за пределы максимально
269 допустимого количества открытых файлов, если у вас было много пакетов в
273 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
274 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
277 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
278 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
279 online демоны не выполнят проверку целостности.
282 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
283 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
286 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
287 файлах, рядом с самими пакетами. Это может существенно повысить скорость
288 получения списка пакетов на файловых системах с большим размером блока.
293 @subsection Релиз 6.0.0
297 Журнал использует человеко-читаемый и легко обрабатываемый машиной
298 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
299 записей, вместо структурированных строчек RFC 3339. Старый формат
300 журналов не поддерживается @command{nncp-log}.
303 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
304 @command{nncp-daemon}.
307 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
308 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
309 выражением содержащим секунды, это можно использовать как возможность
310 вызова только при появлении исходящих пакетов.
313 @command{nncp-cronexpr} команда позволяет проверить корректность и
314 ожидаемый результат от указанного cron выражения.
319 @subsection Релиз 5.6.0
323 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
324 во время него ежесекундно.
327 В @option{calls} секции конфигурации появились опции
328 @option{autotoss}, @option{autotoss-doseen},
329 @option{autotoss-nofile}, @option{autotoss-nofreq},
330 @option{autotoss-noexec}, @option{autotoss-notrns}.
331 Вы можете настраивать опции автоматического tosser для каждого вызова.
334 Использовать vendoring вместо переопределения @env{GOPATH} во время
335 установки tarball, так как текущая минимальная версия Go это 1.12,
336 поддерживающая модули.
341 @subsection Релиз 5.5.1
345 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
346 в @file{config} во время установки.
351 @subsection Релиз 5.5.0
355 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
356 @command{nncp-bundle}, @command{nncp-stat} командах.
359 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
362 У команды @command{nncp-exec} появились @option{-use-tmp} и
363 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
367 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
368 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
371 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
376 @subsection Релиз 5.4.1
380 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
385 @subsection Релиз 5.4.0
389 Обновлены зависимые библиотеки.
392 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
393 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
394 реализация @command{redo} включена в tarball.
399 @subsection Релиз 5.3.3
403 Больше различных проверок в коде на ошибки.
406 Обновлены зависимые библиотеки.
411 @subsection Релиз 5.3.2
415 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
416 котором соединение могло не учитывать факты прихода пакетов и обрывать
422 @subsection Релиз 5.3.1
426 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
427 использующими внешние команды (@verb{#"|somecmd"#}).
430 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
431 каждому пакету в spool.
436 @subsection Релиз 5.3.0
440 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
443 Исправлено не происходящее дополнение (padding) handshake сообщений.
446 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
449 SP протокол порождает меньше вызовов записей (соответственно, и TCP
453 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
454 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
457 Раз в минуту, если нет более никакого другого трафика, посылаются PING
458 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
459 более не работоспособно.
462 @command{nncp-toss} использует lock-file для предотвращения
463 одновременной обработки зашифрованных пакетов.
468 @subsection Релиз 5.2.1
472 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
477 @subsection Релиз 5.2.0
481 Большинство команд по умолчанию показывают однострочный прогресс
482 выполнения операции. Появились @option{-progress}, @option{-noprogress}
483 опции командной строки, @option{noprogress} опция конфигурационного
487 Исправлен некорректный код возврата @command{nncp-check} команды,
488 который возвращал ошибку когда всё хорошо.
491 Проверка свободного места для пакетов, во время выполнения
492 @command{nncp-bundle -rx}.
497 @subsection Релиз 5.1.2
501 Исправлена @strong{критичная} уязвимость: аутентификация online нод
502 могла приводить к некорректной идентификации удалённой стороны, позволяя
503 скачивать чужие зашифрованные пакеты.
506 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
507 публичный ключ Noise были поменяны местами, что приводило к
508 невозможности online аутентификации нод.
511 Явная синхронизация (fsync) директорий для гарантированного
512 переименования файлов.
517 @subsection Релиз 5.1.1
521 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
526 @subsection Релиз 5.1.0
530 @command{nncp-file} может отправлять директории, автоматически на лету
534 Во время создания исходящих сообщений проверяется наличие свободного
535 места на файловой системе.
538 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
539 конфигурационного файла заменены на структуру
540 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
543 Добавлена @option{freq.maxsize} опция конфигурационного файл,
544 запрещающая ответ на файловый запрос больше заданного размера.
547 Возможность оповещения об успешно выполненных командах (exec) через
548 @option{notify.exec} опцию конфигурационного файла.
553 @subsection Релиз 5.0.0
557 @strong{Несовместимое} изменение формата конфигурационного файла:
558 YAML заменён на Hjson, из-за его гораздо большей простоты, без
559 заметной потери функционала и удобства.
562 @strong{Несовместимое} изменение формата простых пакетов. Работа со
563 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
564 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
565 смотря на то, что версия библиотеки ещё не проверена временем.
568 Возможность соединяться с удалёнными нодами не только по TCP, но и через
569 pipe вызов сторонней команды.
572 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
573 комментариев. Можно использовать @option{-nocomments} опцию для старого
577 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
578 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
581 Возможность переопределить umask процесса через опцию конфигурационного
585 По умолчанию файлы и директории создаются с 666/777 правами доступа,
586 позволяя управлять ими @command{umask}-ом.
589 Обновлены зависимости.
592 Полное использование go модулей для управления зависимостями
593 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
596 Отмена автоматического использования более новых версий GNU GPL
597 (лицензия проекта GNU GPLv3-только).
602 @subsection Релиз 4.1
604 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
608 @subsection Релиз 4.0
612 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
613 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
614 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
615 отсылать дешифрованные данные внешней команде. Старые версии не
619 Проверка доступного места перед копированием во время работы
620 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
623 @command{nncp-call} имеет возможность только показывать список пакетов
624 на удалённой машине, без их передачи.
627 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
630 Восстановлена работоспособность @option{xxrate} настройки в
631 @option{calls} секции конфигурационного файла.
634 Зависимые библиотеки обновлены.
637 Небольшие исправления ошибок.
640 Начало использования @code{go.mod} подсистемы.
645 @subsection Релиз 3.4
647 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
651 @subsection Релиз 3.3
655 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
656 проверяют существование @file{.seen} файла и расценивают его как то, что
657 файл уже был скачан. Возможно передача данных была осуществлена
658 сторонним способом и удалённая сторона должна быть оповещена об этом.
661 Если более высокоприоритетный пакет попадает в спул, то
662 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
663 низкоприоритетные передачи.
666 К средствам связанным с online-соединениями (@command{nncp-daemon},
667 @command{nncp-call}, @command{nncp-caller}) добавлен простой
668 ограничитель скорости.
671 Возможность задания приоритета символьными обозначениями:
672 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
675 Изменены значения приоритетов по-умолчанию:
676 для @command{nncp-exec} с 64 на 96,
677 для @command{nncp-freq} с 64 на 160,
678 для @command{nncp-file} с 196 на 224.
683 @subsection Релиз 3.2
686 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
687 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
688 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
689 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
690 Явное добавление @file{NNCP/} директории в архив восстанавливает
691 работоспособность с корректными tar архивами.
695 @subsection Релиз 3.1
698 Возможность отключать пересылку через промежуточные ноды используя
699 @verb{|-via -|} опцию командной строки.
703 @subsection Релиз 3.0
707 @strong{Несовместимое} изменение формата простых пакетов. Работа со
708 старыми версиями не поддерживается.
711 Добавлена возможность удалённого исполнения команд, путём
712 конфигурирования @option{exec} опции конфигурационного файла и
713 использования команды @command{nncp-exec}:
716 Команда @command{nncp-mail} заменена более гибкой и широкой
717 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
718 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
720 @option{sendmail} опция конфигурационного файла заменена на более гибкую
721 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
726 Возможность переопределить @option{via} опцию конфигурации для целевого
727 узла через @option{-via} опцию командной строки для следующих команд:
728 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
731 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
735 Exec команды вызываются с дополнительными переменными окружения
736 @env{NNCP_NICE} и @env{NNCP_SELF}.
739 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
740 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
741 аргументом @option{-replynice}.
744 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
745 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
746 @option{-noexec}, @option{-notrns}.
749 По-умолчанию @command{nncp-file} команда для
750 @option{-minsize}/@option{-chunked} опций использует
751 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
752 Это можно отключить указав нулевое значение.
757 @subsection Релиз 2.0
761 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
762 Работа со старыми версиями не поддерживается.
765 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
766 Одним криптографическим примитивом меньше.
769 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
770 криптографическим примитивом меньше (предполагая, что BLAKE2X
771 практически идентичен BLAKE2).
776 @subsection Релиз 1.0
780 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
781 со старыми версиями не поддерживается.
784 @command{nncp-bundle} команда может создавать потоки зашифрованных
785 пакетов или потреблять их. Это полезно когда речь идёт о
786 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
787 без создания промежуточного подготовленного ISO образа или работа с
788 ленточными накопителями).
791 @command{nncp-toss} команда может создавать @file{.seen} файлы,
792 предотвращая приём дублированных пакетов.
795 В команде @command{nncp-call} разрешается иметь только одного
796 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
797 входящих пакетов могут создать много горутин.
800 Возможность переопределить путь до spool директории и файла журнала
801 через аргумент командной строки или переменную окружения.
804 @command{nncp-rm} команда может удалять все исходящие/входящие,
805 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
810 @subsection Релиз 0.12
812 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
816 @subsection Релиз 0.11
818 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
822 @subsection Релиз 0.10
825 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
826 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
830 @subsection Релиз 0.9
833 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
834 команды. Они игнорировались.
838 @subsection Релиз 0.8
841 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
842 @option{-minsize} для передачи без разбиения на части была в байтах, а
847 @subsection Релиз 0.7
851 Возможность предоставлять данные для @command{nncp-file} через
852 стандартный ввод, используя временный зашифрованный файл для этого.
855 Появилась возможность передачи файлов разбитых на части, с сопутствующей
856 @command{nncp-reass} командой и @option{freqchunked} опцией
857 конфигурационного файла. Полезно для передачи больших файлов через
858 маленькие устройства хранения.
861 @option{freqminsize} опция конфигурационного файла, аналогичная
865 Опция @option{-force} команды @command{nncp-xfer} переименована в
866 @option{-mkdir} для ясности.
869 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
872 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
873 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
874 имели общий префикс и были сгруппированы для удобства.
877 Появилась команда @command{nncp-cfgenc}, позволяющая
878 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
879 без использования OpenPGP или других подобных инструментов.
882 Обновлены зависимые криптографические библиотеки.
887 @subsection Релиз 0.6
889 @item Появилась небольшая команда @command{nncp-rm}.
890 @item Обновлены зависимые криптографические библиотеки.
894 @subsection Релиз 0.5
897 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
898 @command{nncp-file} и @command{nncp-freq} командах.
902 @subsection Релиз 0.4
906 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
907 @command{nncp-daemon}: иногда они могли падать с segmentation fault
908 ошибкой (данные не терялись).
911 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
912 это короче и удобнее для использования.
915 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
916 позволяющая создать минималистичный урезанный конфигурационный файл без
917 приватных ключей, что полезно во время использования @command{nncp-xfer}.
922 @subsection Релиз 0.3
924 @item Исправлена совместимость с Go 1.6.
928 @subsection Релиз 0.2
932 @strong{Несовместимое} изменение формата пакета (магическое число тоже
933 изменено): поле размера пакета шифруется и не посылается в открытом виде.
936 @option{-minsize} опция даёт возможность автоматически дополнять
937 исходящие пакеты до указанного минимального размера.
940 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
941 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
942 Удалённая сторона сразу же оповещается об этом.
945 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
946 неактивность в online соединении, когда оно должно быть отключено. Она
947 может быть использована для сохранения соединения на долгое время.
950 @option{-maxonlinetime} опция даёт возможность указания максимального
951 возможного времени жизни соединения.
954 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
958 @command{nncp-pkt} команда может разжимать данные.