5 @subsection Релиз 7.2.0
9 Появилась @command{nncp-trns} команда для ручного создания транзитных пакетов.
12 Если у целевой ноды транзитного пакета задан @option{via} маршрут, то
13 использовать его, а не игнорировать.
16 Не отправлять multicast пакет оригинатору сообщения, очевидно точно
17 видящего свой собственный пакет.
22 @subsection Релиз 7.1.1
26 Исправлено падение при fsync директорий после создания @file{.seen} файлов.
31 @subsection Релиз 7.1.0
35 Появилась возможность мультивещательной (multicast) рассылки пакетов.
36 Реализовано всего лишь дополнительным типом простых пакетов и изменением
37 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
40 Исправлена работоспособность @command{nncp-file} и @command{nncp-exec}
41 команд использующих временный файл (stdin и @option{-use-tmp}).
44 Исправлен пропадающий плохой код возврата в @command{nncp-exec} команде.
47 Исправлено некорректное генерирование @file{.hdr} при использовании
51 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
55 У @command{nncp-check} команды появилась @option{-cycle} опция, вводящая
56 проверку в бесконечный цикл.
59 У @command{nncp-rm} команды можно указывать alias-ы имён нод.
62 @command{nncp-pkt} может парсить @file{.hdr} файлы.
67 @subsection Релиз 7.0.0
71 Минимальная требуемая версия Go 1.13.
74 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
75 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
76 изменение формата шифрованных файлов (всего что находится в spool
77 области) и формата @file{.meta} файла при chunked передаче.
79 Текущая реализация далека от оптимальной: в ней нет распараллеливания
80 вычислений и имеет повышенное потребление памяти: около 512 KiB на
81 каждый 1 GiB данных файла. Будущая оптимизация производительности и
82 потребления памяти не должна привести к изменению формата пакетов. Но
83 это всё равно в несколько раз быстрее BLAKE2b.
86 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
87 чтения с диска только предшествующей части, а не полностью всего файла,
91 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
94 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
95 уменьшая количество примитивов. А также заголовок шифрованного файла
96 теперь является ассоциированными данными при шифровании.
99 MultiCast Discovery использует
100 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
103 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
106 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
109 Обновлены зависимые библиотеки.
114 @subsection Релиз 6.6.0
118 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
119 ожидают завершения всех процессов фоновой проверки контрольных сумм,
120 после того как соединение закрыто.
123 Добавлена возможность определения адреса через multicast оповещение в
124 локальной сети, так называемый MCD (MultiCast Discovery).
129 @subsection Релиз 6.5.0
133 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
136 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
139 Исправлена гонка при закрытии файловых дескрипторов во время завершения
140 работы online протокола, которая могла привести к ошибке записи
141 принятого фрагмента пакета.
144 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
145 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
150 @subsection Релиз 6.4.0
154 Исправлена возможная гонка в online протоколе, приводящая к падению
160 @subsection Релиз 6.3.0
164 Исправлено возможное падение программы во время показа прогресса online
170 @subsection Релиз 6.2.1
174 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
179 @subsection Релиз 6.2.0
183 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
186 Очередной рефакторинг и упрощение системы журналирования.
187 Не должно быть видимых изменений для конечного пользователя.
192 @subsection Релиз 6.1.0
196 Оптимизация: большинство команд теперь не держат открытыми файловые
197 дескрипторы. Прежде вы легко могли выйти за пределы максимально
198 допустимого количества открытых файлов, если у вас было много пакетов в
202 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
203 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
206 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
207 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
208 online демоны не выполнят проверку целостности.
211 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
212 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
215 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
216 файлах, рядом с самими пакетами. Это может существенно повысить скорость
217 получения списка пакетов на файловых системах с большим размером блока.
222 @subsection Релиз 6.0.0
226 Журнал использует человеко-читаемый и легко обрабатываемый машиной
227 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
228 записей, вместо структурированных строчек RFC 3339. Старый формат
229 журналов не поддерживается @command{nncp-log}.
232 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
233 @command{nncp-daemon}.
236 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
237 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
238 выражением содержащим секунды, это можно использовать как возможность
239 вызова только при появлении исходящих пакетов.
242 @command{nncp-cronexpr} команда позволяет проверить корректность и
243 ожидаемый результат от указанного cron выражения.
248 @subsection Релиз 5.6.0
252 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
253 во время него ежесекундно.
256 В @option{calls} секции конфигурации появились опции
257 @option{autotoss}, @option{autotoss-doseen},
258 @option{autotoss-nofile}, @option{autotoss-nofreq},
259 @option{autotoss-noexec}, @option{autotoss-notrns}.
260 Вы можете настраивать опции автоматического tosser для каждого вызова.
263 Использовать vendoring вместо переопределения @env{GOPATH} во время
264 установки tarball, так как текущая минимальная версия Go это 1.12,
265 поддерживающая модули.
270 @subsection Релиз 5.5.1
274 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
275 в @file{config} во время установки.
280 @subsection Релиз 5.5.0
284 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
285 @command{nncp-bundle}, @command{nncp-stat} командах.
288 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
291 У команды @command{nncp-exec} появились @option{-use-tmp} и
292 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
296 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
297 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
300 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
305 @subsection Релиз 5.4.1
309 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
314 @subsection Релиз 5.4.0
318 Обновлены зависимые библиотеки.
321 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
322 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
323 реализация @command{redo} включена в tarball.
328 @subsection Релиз 5.3.3
332 Больше различных проверок в коде на ошибки.
335 Обновлены зависимые библиотеки.
340 @subsection Релиз 5.3.2
344 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
345 котором соединение могло не учитывать факты прихода пакетов и обрывать
351 @subsection Релиз 5.3.1
355 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
356 использующими внешние команды (@verb{#"|somecmd"#}).
359 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
360 каждому пакету в spool.
365 @subsection Релиз 5.3.0
369 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
372 Исправлено не происходящее дополнение (padding) handshake сообщений.
375 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
378 SP протокол порождает меньше вызовов записей (соответственно, и TCP
382 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
383 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
386 Раз в минуту, если нет более никакого другого трафика, посылаются PING
387 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
388 более не работоспособно.
391 @command{nncp-toss} использует lock-file для предотвращения
392 одновременной обработки зашифрованных пакетов.
397 @subsection Релиз 5.2.1
401 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
406 @subsection Релиз 5.2.0
410 Большинство команд по умолчанию показывают однострочный прогресс
411 выполнения операции. Появились @option{-progress}, @option{-noprogress}
412 опции командной строки, @option{noprogress} опция конфигурационного
416 Исправлен некорректный код возврата @command{nncp-check} команды,
417 который возвращал ошибку когда всё хорошо.
420 Проверка свободного места для пакетов, во время выполнения
421 @command{nncp-bundle -rx}.
426 @subsection Релиз 5.1.2
430 Исправлена @strong{критичная} уязвимость: аутентификация online нод
431 могла приводить к некорректной идентификации удалённой стороны, позволяя
432 скачивать чужие зашифрованные пакеты.
435 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
436 публичный ключ Noise были поменяны местами, что приводило к
437 невозможности online аутентификации нод.
440 Явная синхронизация (fsync) директорий для гарантированного
441 переименования файлов.
446 @subsection Релиз 5.1.1
450 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
455 @subsection Релиз 5.1.0
459 @command{nncp-file} может отправлять директории, автоматически на лету
463 Во время создания исходящих сообщений проверяется наличие свободного
464 места на файловой системе.
467 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
468 конфигурационного файла заменены на структуру
469 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
472 Добавлена @option{freq.maxsize} опция конфигурационного файл,
473 запрещающая ответ на файловый запрос больше заданного размера.
476 Возможность оповещения об успешно выполненных командах (exec) через
477 @option{notify.exec} опцию конфигурационного файла.
482 @subsection Релиз 5.0.0
486 @strong{Несовместимое} изменение формата конфигурационного файла:
487 YAML заменён на Hjson, из-за его гораздо большей простоты, без
488 заметной потери функционала и удобства.
491 @strong{Несовместимое} изменение формата простых пакетов. Работа со
492 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
493 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
494 смотря на то, что версия библиотеки ещё не проверена временем.
497 Возможность соединяться с удалёнными нодами не только по TCP, но и через
498 pipe вызов сторонней команды.
501 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
502 комментариев. Можно использовать @option{-nocomments} опцию для старого
506 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
507 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
510 Возможность переопределить umask процесса через опцию конфигурационного
514 По умолчанию файлы и директории создаются с 666/777 правами доступа,
515 позволяя управлять ими @command{umask}-ом.
518 Обновлены зависимости.
521 Полное использование go модулей для управления зависимостями
522 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
525 Отмена автоматического использования более новых версий GNU GPL
526 (лицензия проекта GNU GPLv3-только).
531 @subsection Релиз 4.1
533 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
537 @subsection Релиз 4.0
541 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
542 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
543 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
544 отсылать дешифрованные данные внешней команде. Старые версии не
548 Проверка доступного места перед копированием во время работы
549 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
552 @command{nncp-call} имеет возможность только показывать список пакетов
553 на удалённой машине, без их передачи.
556 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
559 Восстановлена работоспособность @option{xxrate} настройки в
560 @option{calls} секции конфигурационного файла.
563 Зависимые библиотеки обновлены.
566 Небольшие исправления ошибок.
569 Начало использования @code{go.mod} подсистемы.
574 @subsection Релиз 3.4
576 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
580 @subsection Релиз 3.3
584 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
585 проверяют существование @file{.seen} файла и расценивают его как то, что
586 файл уже был скачан. Возможно передача данных была осуществлена
587 сторонним способом и удалённая сторона должна быть оповещена об этом.
590 Если более высокоприоритетный пакет попадает в спул, то
591 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
592 низкоприоритетные передачи.
595 К средствам связанным с online-соединениями (@command{nncp-daemon},
596 @command{nncp-call}, @command{nncp-caller}) добавлен простой
597 ограничитель скорости.
600 Возможность задания приоритета символьными обозначениями:
601 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
604 Изменены значения приоритетов по-умолчанию:
605 для @command{nncp-exec} с 64 на 96,
606 для @command{nncp-freq} с 64 на 160,
607 для @command{nncp-file} с 196 на 224.
612 @subsection Релиз 3.2
615 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
616 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
617 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
618 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
619 Явное добавление @file{NNCP/} директории в архив восстанавливает
620 работоспособность с корректными tar архивами.
624 @subsection Релиз 3.1
627 Возможность отключать пересылку через промежуточные ноды используя
628 @verb{|-via -|} опцию командной строки.
632 @subsection Релиз 3.0
636 @strong{Несовместимое} изменение формата простых пакетов. Работа со
637 старыми версиями не поддерживается.
640 Добавлена возможность удалённого исполнения команд, путём
641 конфигурирования @option{exec} опции конфигурационного файла и
642 использования команды @command{nncp-exec}:
645 Команда @command{nncp-mail} заменена более гибкой и широкой
646 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
647 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
649 @option{sendmail} опция конфигурационного файла заменена на более гибкую
650 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
655 Возможность переопределить @option{via} опцию конфигурации для целевого
656 узла через @option{-via} опцию командной строки для следующих команд:
657 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
660 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
664 Exec команды вызываются с дополнительными переменными окружения
665 @env{NNCP_NICE} и @env{NNCP_SELF}.
668 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
669 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
670 аргументом @option{-replynice}.
673 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
674 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
675 @option{-noexec}, @option{-notrns}.
678 По-умолчанию @command{nncp-file} команда для
679 @option{-minsize}/@option{-chunked} опций использует
680 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
681 Это можно отключить указав нулевое значение.
686 @subsection Релиз 2.0
690 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
691 Работа со старыми версиями не поддерживается.
694 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
695 Одним криптографическим примитивом меньше.
698 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
699 криптографическим примитивом меньше (предполагая, что BLAKE2X
700 практически идентичен BLAKE2).
705 @subsection Релиз 1.0
709 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
710 со старыми версиями не поддерживается.
713 @command{nncp-bundle} команда может создавать потоки зашифрованных
714 пакетов или потреблять их. Это полезно когда речь идёт о
715 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
716 без создания промежуточного подготовленного ISO образа или работа с
717 ленточными накопителями).
720 @command{nncp-toss} команда может создавать @file{.seen} файлы,
721 предотвращая приём дублированных пакетов.
724 В команде @command{nncp-call} разрешается иметь только одного
725 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
726 входящих пакетов могут создать много горутин.
729 Возможность переопределить путь до spool директории и файла журнала
730 через аргумент командной строки или переменную окружения.
733 @command{nncp-rm} команда может удалять все исходящие/входящие,
734 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
739 @subsection Релиз 0.12
741 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
745 @subsection Релиз 0.11
747 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
751 @subsection Релиз 0.10
754 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
755 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
759 @subsection Релиз 0.9
762 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
763 команды. Они игнорировались.
767 @subsection Релиз 0.8
770 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
771 @option{-minsize} для передачи без разбиения на части была в байтах, а
776 @subsection Релиз 0.7
780 Возможность предоставлять данные для @command{nncp-file} через
781 стандартный ввод, используя временный зашифрованный файл для этого.
784 Появилась возможность передачи файлов разбитых на части, с сопутствующей
785 @command{nncp-reass} командой и @option{freqchunked} опцией
786 конфигурационного файла. Полезно для передачи больших файлов через
787 маленькие устройства хранения.
790 @option{freqminsize} опция конфигурационного файла, аналогичная
794 Опция @option{-force} команды @command{nncp-xfer} переименована в
795 @option{-mkdir} для ясности.
798 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
801 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
802 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
803 имели общий префикс и были сгруппированы для удобства.
806 Появилась команда @command{nncp-cfgenc}, позволяющая
807 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
808 без использования OpenPGP или других подобных инструментов.
811 Обновлены зависимые криптографические библиотеки.
816 @subsection Релиз 0.6
818 @item Появилась небольшая команда @command{nncp-rm}.
819 @item Обновлены зависимые криптографические библиотеки.
823 @subsection Релиз 0.5
826 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
827 @command{nncp-file} и @command{nncp-freq} командах.
831 @subsection Релиз 0.4
835 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
836 @command{nncp-daemon}: иногда они могли падать с segmentation fault
837 ошибкой (данные не терялись).
840 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
841 это короче и удобнее для использования.
844 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
845 позволяющая создать минималистичный урезанный конфигурационный файл без
846 приватных ключей, что полезно во время использования @command{nncp-xfer}.
851 @subsection Релиз 0.3
853 @item Исправлена совместимость с Go 1.6.
857 @subsection Релиз 0.2
861 @strong{Несовместимое} изменение формата пакета (магическое число тоже
862 изменено): поле размера пакета шифруется и не посылается в открытом виде.
865 @option{-minsize} опция даёт возможность автоматически дополнять
866 исходящие пакеты до указанного минимального размера.
869 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
870 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
871 Удалённая сторона сразу же оповещается об этом.
874 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
875 неактивность в online соединении, когда оно должно быть отключено. Она
876 может быть использована для сохранения соединения на долгое время.
879 @option{-maxonlinetime} опция даёт возможность указания максимального
880 возможного времени жизни соединения.
883 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
887 @command{nncp-pkt} команда может разжимать данные.