5 @subsection Релиз 7.1.0
9 Исправлено некорректное генерирование @file{.hdr} при использовании
13 У @command{nncp-rm} команды появилась @option{-all} опция, применяемая
17 @command{nncp-pkt} может парсить @file{.hdr} файлы.
20 Появилась возможность мультивещательной (multicast) рассылки пакетов.
21 Реализовано всего лишь дополнительным типом простых пакетов и изменением
22 @command{nncp-toss}, @command{nncp-file} и @command{nncp-exec} команд.
27 @subsection Релиз 7.0.0
31 Минимальная требуемая версия Go 1.13.
34 Хэширование с BLAKE3 на базе деревьев Меркле (Merkle Tree Hashing, MTH)
35 используется вместо BLAKE2b. Из-за этого, обратно @strong{несовместимое}
36 изменение формата шифрованных файлов (всего что находится в spool
37 области) и формата @file{.meta} файла при chunked передаче.
39 Текущая реализация далека от оптимальной: в ней нет распараллеливания
40 вычислений и имеет повышенное потребление памяти: около 512 KiB на
41 каждый 1 GiB данных файла. Будущая оптимизация производительности и
42 потребления памяти не должна привести к изменению формата пакетов. Но
43 это всё равно в несколько раз быстрее BLAKE2b.
46 Из-за использования MTH, докачиваемые в online режиме файлы потребуют
47 чтения с диска только предшествующей части, а не полностью всего файла,
51 Добавлена @command{nncp-hash} утилита для вычисления MTH хэша файла.
54 В шифрованных пакетах BLAKE2 KDF и XOF функции заменены на BLAKE3. Ещё
55 уменьшая количество примитивов. А также заголовок шифрованного файла
56 теперь является ассоциированными данными при шифровании.
59 MultiCast Discovery использует
60 @verb{|ff02::4e4e:4350|} адрес вместо @verb{|ff02::1|}.
63 @command{nncp-cfgenc} ошибочно трижды спрашивал парольную фразу при шифровании.
66 @command{nncp-stat} выводит сводку о частично скачанных пакетах.
69 Обновлены зависимые библиотеки.
74 @subsection Релиз 6.6.0
78 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}
79 ожидают завершения всех процессов фоновой проверки контрольных сумм,
80 после того как соединение закрыто.
83 Добавлена возможность определения адреса через multicast оповещение в
84 локальной сети, так называемый MCD (MultiCast Discovery).
89 @subsection Релиз 6.5.0
93 Исправлено падение в @command{nncp-daemon} когда SP рукопожатие не было успешно.
96 Исправлено возможное игнорирование плохого кода возврата автоматического tosser.
99 Исправлена гонка при закрытии файловых дескрипторов во время завершения
100 работы online протокола, которая могла привести к ошибке записи
101 принятого фрагмента пакета.
104 Убирать показ прогресса передачи пакетов когда вызов уже завершён в
105 @command{nncp-daemon}, @command{nncp-call} и @command{nncp-caller}.
110 @subsection Релиз 6.4.0
114 Исправлена возможная гонка в online протоколе, приводящая к падению
120 @subsection Релиз 6.3.0
124 Исправлено возможное падение программы во время показа прогресса online
130 @subsection Релиз 6.2.1
134 В трёх местах сообщений журналов по ошибке остались лишние @code{%s}.
139 @subsection Релиз 6.2.0
143 Возвращена работоспособность @option{-autotoss*} опций @command{nncp-caller}.
146 Очередной рефакторинг и упрощение системы журналирования.
147 Не должно быть видимых изменений для конечного пользователя.
152 @subsection Релиз 6.1.0
156 Оптимизация: большинство команд теперь не держат открытыми файловые
157 дескрипторы. Прежде вы легко могли выйти за пределы максимально
158 допустимого количества открытых файлов, если у вас было много пакетов в
162 Оптимизация: не закрывать файловый дескриптор файла который мы качаем.
163 Прежде каждый его кусочек приводил к дорогим open/close вызовам.
166 Скачиваемые в режиме online файлы теперь сохраняются с @file{.nock}
167 суффиксом (non-checksummed), ожидая пока либо @command{nncp-check}, либо
168 online демоны не выполнят проверку целостности.
171 Оптимизация: для файлов, скачивание которых не было продолжено, сразу же
172 вычисляет контрольная сумма, пропуская промежуточный @file{.nock} шаг.
175 Возможность хранения заголовков зашифрованных пакетов в @file{.hdr}
176 файлах, рядом с самими пакетами. Это может существенно повысить скорость
177 получения списка пакетов на файловых системах с большим размером блока.
182 @subsection Релиз 6.0.0
186 Журнал использует человеко-читаемый и легко обрабатываемый машиной
187 @url{https://www.gnu.org/software/recutils/, recfile} формат для своих
188 записей, вместо структурированных строчек RFC 3339. Старый формат
189 журналов не поддерживается @command{nncp-log}.
192 Работоспособность @option{-autotoss*} опции с @option{-inetd} режимом
193 @command{nncp-daemon}.
196 @option{when-tx-exists} опция вызова в конфигурационном файле позволяет
197 делать вызов только если имеются исходящие сообщения. Совмещённая с cron
198 выражением содержащим секунды, это можно использовать как возможность
199 вызова только при появлении исходящих пакетов.
202 @command{nncp-cronexpr} команда позволяет проверить корректность и
203 ожидаемый результат от указанного cron выражения.
208 @subsection Релиз 5.6.0
212 @option{-autotoss*} опции запускают tosser не после завершения вызова, а
213 во время него ежесекундно.
216 В @option{calls} секции конфигурации появились опции
217 @option{autotoss}, @option{autotoss-doseen},
218 @option{autotoss-nofile}, @option{autotoss-nofreq},
219 @option{autotoss-noexec}, @option{autotoss-notrns}.
220 Вы можете настраивать опции автоматического tosser для каждого вызова.
223 Использовать vendoring вместо переопределения @env{GOPATH} во время
224 установки tarball, так как текущая минимальная версия Go это 1.12,
225 поддерживающая модули.
230 @subsection Релиз 5.5.1
234 Уважать @env{BINDIR}, @env{INFODIR} и @env{DOCDIR} переменные окружения
235 в @file{config} во время установки.
240 @subsection Релиз 5.5.0
244 Исправления ошибок в @command{nncp-call(er)}/@command{nncp-daemon},
245 @command{nncp-bundle}, @command{nncp-stat} командах.
248 У команды @command{nncp-rm} появились @option{-dryrun} и @option{-older} опции.
251 У команды @command{nncp-exec} появились @option{-use-tmp} и
252 @option{-nocompress} опции. Несжатые пакеты не совместимы с предыдущими
256 У команд @command{nncp-call}, @command{nncp-caller} и @command{nncp-daemon}
257 появились @option{-autotoss*} опции для запуска tosser после завершения звонка.
260 Обновлены зависимые библиотеки. Минимальная требуемая версия Go 1.12.
265 @subsection Релиз 5.4.1
269 Исправлена ошибка с учётом @code{SENDMAIL} переменной при сборке.
274 @subsection Релиз 5.4.0
278 Обновлены зависимые библиотеки.
281 Система сборки переведена с Makefile-ов на @url{http://cr.yp.to/redo.html, redo}.
282 Это не должно повлиять на мейнтейнеров пакетов, так как минимальная
283 реализация @command{redo} включена в tarball.
288 @subsection Релиз 5.3.3
292 Больше различных проверок в коде на ошибки.
295 Обновлены зависимые библиотеки.
300 @subsection Релиз 5.3.2
304 Исправлена некорректная логика @option{onlinedeadline} timeout-а, при
305 котором соединение могло не учитывать факты прихода пакетов и обрывать
311 @subsection Релиз 5.3.1
315 Исправлена работоспособность @option{onlinedeadline} с адресами вызова
316 использующими внешние команды (@verb{#"|somecmd"#}).
319 @command{nncp-stat} имеет опцию @option{-pkt} показывающую информацию по
320 каждому пакету в spool.
325 @subsection Релиз 5.3.0
329 Сообщения прогресса содержат префикс, поясняющий выполняемое действие.
332 Исправлено не происходящее дополнение (padding) handshake сообщений.
335 Завершать все порождаемые в SP протоколе горутины, меньше утечек памяти.
338 SP протокол порождает меньше вызовов записей (соответственно, и TCP
342 Проверять @option{onlinedeadline} и @option{maxonlinetime} ежесекундно,
343 независимо от чтения из сокета (раз в 10 секунд в худшем случае).
346 Раз в минуту, если нет более никакого другого трафика, посылаются PING
347 пакеты в SP-соединении. Это позволит быстрее понимать что соединение
348 более не работоспособно.
351 @command{nncp-toss} использует lock-file для предотвращения
352 одновременной обработки зашифрованных пакетов.
357 @subsection Релиз 5.2.1
361 Исправлена обработка ошибки SP протокола, иногда вызывающая панику программы.
366 @subsection Релиз 5.2.0
370 Большинство команд по умолчанию показывают однострочный прогресс
371 выполнения операции. Появились @option{-progress}, @option{-noprogress}
372 опции командной строки, @option{noprogress} опция конфигурационного
376 Исправлен некорректный код возврата @command{nncp-check} команды,
377 который возвращал ошибку когда всё хорошо.
380 Проверка свободного места для пакетов, во время выполнения
381 @command{nncp-bundle -rx}.
386 @subsection Релиз 5.1.2
390 Исправлена @strong{критичная} уязвимость: аутентификация online нод
391 могла приводить к некорректной идентификации удалённой стороны, позволяя
392 скачивать чужие зашифрованные пакеты.
395 Исправлена ошибка: в новосозданных конфигурационных файлах, приватный
396 публичный ключ Noise были поменяны местами, что приводило к
397 невозможности online аутентификации нод.
400 Явная синхронизация (fsync) директорий для гарантированного
401 переименования файлов.
406 @subsection Релиз 5.1.1
410 Исправлена работоспособность @command{nncp-file} с @option{-chunked 0} опцией.
415 @subsection Релиз 5.1.0
419 @command{nncp-file} может отправлять директории, автоматически на лету
423 Во время создания исходящих сообщений проверяется наличие свободного
424 места на файловой системе.
427 @option{freq}, @option{freqminsize}, @option{freqchunked} опции
428 конфигурационного файла заменены на структуру
429 @option{freq: @{path: ..., minsize: ..., chunked: ...@}}.
432 Добавлена @option{freq.maxsize} опция конфигурационного файл,
433 запрещающая ответ на файловый запрос больше заданного размера.
436 Возможность оповещения об успешно выполненных командах (exec) через
437 @option{notify.exec} опцию конфигурационного файла.
442 @subsection Релиз 5.0.0
446 @strong{Несовместимое} изменение формата конфигурационного файла:
447 YAML заменён на Hjson, из-за его гораздо большей простоты, без
448 заметной потери функционала и удобства.
451 @strong{Несовместимое} изменение формата простых пакетов. Работа со
452 старыми версиями не поддерживается. @code{zlib} сжатие заменено на
453 @code{Zstandard}, так как оно значительно быстрее и эффективнее, не
454 смотря на то, что версия библиотеки ещё не проверена временем.
457 Возможность соединяться с удалёнными нодами не только по TCP, но и через
458 pipe вызов сторонней команды.
461 @command{nncp-cfgnew} генерирует конфигурационный файл с множеством
462 комментариев. Можно использовать @option{-nocomments} опцию для старого
466 Дубликаты имён файлов имеют суффикс @file{.CTR}, вместо @file{CTR},
467 чтобы избежать возможных коллизий с @file{.nncp.chunkCTR}.
470 Возможность переопределить umask процесса через опцию конфигурационного
474 По умолчанию файлы и директории создаются с 666/777 правами доступа,
475 позволяя управлять ими @command{umask}-ом.
478 Обновлены зависимости.
481 Полное использование go модулей для управления зависимостями
482 (используется @code{go.cypherpunks.ru/nncp/v5} namespace).
485 Отмена автоматического использования более новых версий GNU GPL
486 (лицензия проекта GNU GPLv3-только).
491 @subsection Релиз 4.1
493 @item Восстановлена работоспособность на GNU/Linux системах и Go версии 1.10.
497 @subsection Релиз 4.0
501 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов:
502 используется AEAD режим шифрования с 128 КиБ блоками, так как раньше
503 @command{nncp-toss} не проверял MAC зашифрованного пакета прежде чем
504 отсылать дешифрованные данные внешней команде. Старые версии не
508 Проверка доступного места перед копированием во время работы
509 @command{nncp-xfer}, @command{nncp-daemon}, @command{nncp-call(er)}.
512 @command{nncp-call} имеет возможность только показывать список пакетов
513 на удалённой машине, без их передачи.
516 @command{nncp-call} имеет возможность передавать только чётко указанные пакеты.
519 Восстановлена работоспособность @option{xxrate} настройки в
520 @option{calls} секции конфигурационного файла.
523 Зависимые библиотеки обновлены.
526 Небольшие исправления ошибок.
529 Начало использования @code{go.mod} подсистемы.
534 @subsection Релиз 3.4
536 @item @command{nncp-daemon} может быть запущен как @command{inetd}-служба.
540 @subsection Релиз 3.3
544 @command{nncp-daemon}, @command{nncp-call}, @command{nncp-caller}
545 проверяют существование @file{.seen} файла и расценивают его как то, что
546 файл уже был скачан. Возможно передача данных была осуществлена
547 сторонним способом и удалённая сторона должна быть оповещена об этом.
550 Если более высокоприоритетный пакет попадает в спул, то
551 @command{nncp-daemon} добавит его в очередь отправки первым, прерывая
552 низкоприоритетные передачи.
555 К средствам связанным с online-соединениями (@command{nncp-daemon},
556 @command{nncp-call}, @command{nncp-caller}) добавлен простой
557 ограничитель скорости.
560 Возможность задания приоритета символьными обозначениями:
561 @verb{|NORMAL|}, @verb{|BULK+10|}, @verb{|PRIORITY-5|}, итд.
564 Изменены значения приоритетов по-умолчанию:
565 для @command{nncp-exec} с 64 на 96,
566 для @command{nncp-freq} с 64 на 160,
567 для @command{nncp-file} с 196 на 224.
572 @subsection Релиз 3.2
575 @strong{Несовместимое} изменение формата @emph{bundle} архивов и
576 работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
577 должен быть корректным tar архивом, но Go 1.9 делал его недействительным
578 из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
579 Явное добавление @file{NNCP/} директории в архив восстанавливает
580 работоспособность с корректными tar архивами.
584 @subsection Релиз 3.1
587 Возможность отключать пересылку через промежуточные ноды используя
588 @verb{|-via -|} опцию командной строки.
592 @subsection Релиз 3.0
596 @strong{Несовместимое} изменение формата простых пакетов. Работа со
597 старыми версиями не поддерживается.
600 Добавлена возможность удалённого исполнения команд, путём
601 конфигурирования @option{exec} опции конфигурационного файла и
602 использования команды @command{nncp-exec}:
605 Команда @command{nncp-mail} заменена более гибкой и широкой
606 @command{nncp-exec}. Вместо вызова @verb{|nncp-mail NODE RECIPIENT|}
607 нужно использовать @verb{|nncp-exec NODE sendmail RECIPIENT|}.
609 @option{sendmail} опция конфигурационного файла заменена на более гибкую
610 @option{exec}. @verb{|sendmail: [...]|} нужно заменить на @verb{|exec:
615 Возможность переопределить @option{via} опцию конфигурации для целевого
616 узла через @option{-via} опцию командной строки для следующих команд:
617 @command{nncp-file}, @command{nncp-freq}, @command{nncp-exec}.
620 Chunked файлы, меньшего размера чем указанный chunk, отправляются просто
624 Exec команды вызываются с дополнительными переменными окружения
625 @env{NNCP_NICE} и @env{NNCP_SELF}.
628 Отправляемые файлы в ответ на запрос имеют приоритет указанный в запросе.
629 Указать их желаемый приоритет во время вызова @command{nncp-freq} можно
630 аргументом @option{-replynice}.
633 Команде @command{nncp-toss} можно сказать не обрабатывать определённые
634 типы пакетов, за счёт опций @option{-nofile}, @option{-nofreq},
635 @option{-noexec}, @option{-notrns}.
638 По-умолчанию @command{nncp-file} команда для
639 @option{-minsize}/@option{-chunked} опций использует
640 @option{FreqMinSize}/@option{FreqChunked} из конфигурационного файла.
641 Это можно отключить указав нулевое значение.
646 @subsection Релиз 2.0
650 @strong{Несовместимое} изменение формата зашифрованных и eblob пакетов.
651 Работа со старыми версиями не поддерживается.
654 Алгоритм шифрования Twofish заменён на ChaCha20. Он намного быстрее.
655 Одним криптографическим примитивом меньше.
658 HKDF-BLAKE2b-256 KDF алгоритм заменён на BLAKE2Xb XOF. Ещё одним
659 криптографическим примитивом меньше (предполагая, что BLAKE2X
660 практически идентичен BLAKE2).
665 @subsection Релиз 1.0
669 @strong{Несовместимое} изменение формата зашифрованных пакетов. Работа
670 со старыми версиями не поддерживается.
673 @command{nncp-bundle} команда может создавать потоки зашифрованных
674 пакетов или потреблять их. Это полезно когда речь идёт о
675 @code{stdin}/@code{stdout} методах передачи (например запись на CD-ROM
676 без создания промежуточного подготовленного ISO образа или работа с
677 ленточными накопителями).
680 @command{nncp-toss} команда может создавать @file{.seen} файлы,
681 предотвращая приём дублированных пакетов.
684 В команде @command{nncp-call} разрешается иметь только одного
685 обработчика контрольной суммы в фоне. Это полезно когда тысячи маленьких
686 входящих пакетов могут создать много горутин.
689 Возможность переопределить путь до spool директории и файла журнала
690 через аргумент командной строки или переменную окружения.
693 @command{nncp-rm} команда может удалять все исходящие/входящие,
694 @file{.seen}, @file{.part}, @file{.lock} и временные файлы.
699 @subsection Релиз 0.12
701 @item Команда sendmail вызывается с @env{NNCP_SENDER} переменной окружения.
705 @subsection Релиз 0.11
707 @item Вывод команды @command{nncp-stat} отсортирован по имени ноды.
711 @subsection Релиз 0.10
714 @file{DST} аргумент @command{nncp-freq} команды теперь опционален.
715 По-умолчанию будет подставлен последний элемент @file{SRC} пути.
719 @subsection Релиз 0.9
722 Исправлена обработка @option{-rx}/@option{-tx} опций @command{nncp-call}
723 команды. Они игнорировались.
727 @subsection Релиз 0.8
730 Небольшое исправление ошибки в команде @command{nncp-file}, где опция
731 @option{-minsize} для передачи без разбиения на части была в байтах, а
736 @subsection Релиз 0.7
740 Возможность предоставлять данные для @command{nncp-file} через
741 стандартный ввод, используя временный зашифрованный файл для этого.
744 Появилась возможность передачи файлов разбитых на части, с сопутствующей
745 @command{nncp-reass} командой и @option{freqchunked} опцией
746 конфигурационного файла. Полезно для передачи больших файлов через
747 маленькие устройства хранения.
750 @option{freqminsize} опция конфигурационного файла, аналогичная
754 Опция @option{-force} команды @command{nncp-xfer} переименована в
755 @option{-mkdir} для ясности.
758 Опция @option{-minsize} задаётся в KiB, а не байтах, для удобства.
761 Команда @command{nncp-newcfg} переименована в @command{nncp-cfgnew},
762 а @command{nncp-mincfg} в @command{nncp-cfgmin}, для того чтобы они
763 имели общий префикс и были сгруппированы для удобства.
766 Появилась команда @command{nncp-cfgenc}, позволяющая
767 шифровать/дешифровать конфигурационный файл, чтобы безопасно его хранить
768 без использования OpenPGP или других подобных инструментов.
771 Обновлены зависимые криптографические библиотеки.
776 @subsection Релиз 0.6
778 @item Появилась небольшая команда @command{nncp-rm}.
779 @item Обновлены зависимые криптографические библиотеки.
783 @subsection Релиз 0.5
786 Тривиальное небольшое исправление в значениях приоритетов по-умолчанию в
787 @command{nncp-file} и @command{nncp-freq} командах.
791 @subsection Релиз 0.4
795 Небольшое исправление в @command{nncp-call}, @command{nncp-caller},
796 @command{nncp-daemon}: иногда они могли падать с segmentation fault
797 ошибкой (данные не терялись).
800 @command{nncp-newnode} переименована в @command{nncp-newcfg} --
801 это короче и удобнее для использования.
804 Появилась команда @command{nncp-mincfg}: вспомогательная утилита
805 позволяющая создать минималистичный урезанный конфигурационный файл без
806 приватных ключей, что полезно во время использования @command{nncp-xfer}.
811 @subsection Релиз 0.3
813 @item Исправлена совместимость с Go 1.6.
817 @subsection Релиз 0.2
821 @strong{Несовместимое} изменение формата пакета (магическое число тоже
822 изменено): поле размера пакета шифруется и не посылается в открытом виде.
825 @option{-minsize} опция даёт возможность автоматически дополнять
826 исходящие пакеты до указанного минимального размера.
829 @command{nncp-daemon} и @command{nncp-call}/@command{nncp-caller} всегда
830 в фоне проверяют появление исходящих @emph{tx} пакетов пока подключены.
831 Удалённая сторона сразу же оповещается об этом.
834 @option{-onlinedeadline} опция даёт возможность выставления timeout-а на
835 неактивность в online соединении, когда оно должно быть отключено. Она
836 может быть использована для сохранения соединения на долгое время.
839 @option{-maxonlinetime} опция даёт возможность указания максимального
840 возможного времени жизни соединения.
843 Появилась @command{nncp-caller} команда: клиент TCP-демона работающий по
847 @command{nncp-pkt} команда может разжимать данные.