MAKEINFO ?= makeinfo
-nncp.info: *.texi
+nncp.info: *.texi pedro.txt
$(MAKEINFO) -o nncp.info index.texi
CSS != cat style.css
-nncp.html: *.texi
+nncp.html: *.texi pedro.txt
rm -f nncp.html/*.html
$(MAKEINFO) --html \
--set-customization-variable CSS_LINES='$(CSS)' \
@node Об утилитах
@section Подробнее об утилитах NNCP
-NNCP (Node to Node copy) это набор утилит упрощающий безопасный обмен
-файлами и почтой в режиме сохранить-и-переслать.
+@strong{NNCP} (Node to Node copy) это набор утилит упрощающий безопасный
+обмен файлами и почтой в режиме сохранить-и-переслать.
Эти утилиты предназначены помочь с построением однораговых
@url{https://ru.wikipedia.org/wiki/DTN, устойчивых к разрывам} сетей
-NNCP (Node to Node copy) is a collection of utilities simplifying
-secure store-and-forward files and mail exchanging.
+@strong{NNCP} (Node to Node copy) is a collection of utilities
+simplifying secure store-and-forward files and mail exchanging.
See also this page @ref{Об утилитах, on russian}.
@end itemize
Technically bundle is valid POSIX.1-2001 (pax)
-@url{http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=5, tar archive},
+@url{http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html, tar archive},
with directory/files hierarchy identical to that is used in
@ref{nncp-xfer}: @file{NNCP/RECIPIENT/SENDER/PACKET}. So bundle can also
be created by manual tar-ing of @command{nncp-xfer} resulting directory.
% dd if=/dev/cd0 bs=2048 | nncp-bundle -rx -delete
@end verbatim
-@option{-dryrun} option prevents any writing to the spool. This is
+@option{-dryrun} option prevents any writes to the spool. This is
useful when you need to see what packets will pass by and possibly check
their integrity.
@multitable {XXXXX} {XXXX KiB} {link sign} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
@headitem Version @tab Size @tab Tarball @tab SHA256 checksum
+@item @ref{Release 3.1, 3.1} @tab 1145 KiB
+@tab @url{download/nncp-3.1.tar.xz, link} @url{download/nncp-3.1.tar.xz.sig, sign}
+@tab @code{B9344516 4230B58E 8AAADAA2 066F37F2 493CCB71 B025126B BCAD8FAD 6535149F}
+
@item @ref{Release 3.0, 3.0} @tab 993 KiB
@tab @url{download/nncp-3.0.tar.xz, link} @url{download/nncp-3.0.tar.xz.sig, sign}
@tab @code{248B2257 2F576E79 A19672E9 B82EB649 18FC95A9 194408C0 67EA4DD3 0468286D}
@end copying
@node Top
-@top NNCP
+@top
+
+@verbatiminclude pedro.txt
@include about.texi
@node Новости
@section Новости
+@node Релиз 3.2
+@subsection Релиз 3.2
+@itemize
+@item
+@strong{Несовместимое} изменение формата @emph{bundle} архивов и
+работоспособность @command{nncp-bundle} команды с Go 1.10+. Bundle
+должен быть корректным tar архивом, но Go 1.9 делал его недействительным
+из-за длинных путей внутри. NNCP нечаянно был зависим от этой баги.
+Явное добавление @file{NNCP/} директории в архив восстанавливает
+работоспособность с корректными tar архивами.
+@end itemize
+
@node Релиз 3.1
@subsection Релиз 3.1
@itemize
See also this page @ref{Новости, on russian}.
+@node Release 3.2
+@section Release 3.2
+@itemize
+@item
+@strong{Incompatible} @emph{bundle} archive format changes and
+@command{nncp-bundle} workability with Go 1.10+. Bundles must be
+valid tar archives, but Go 1.9 made them invalid because of long paths
+inside. NNCP accidentally was dependant on that bug. Explicit adding of
+@file{NNCP/} directory in archive restores workability with valid tar
+archives.
+@end itemize
+
@node Release 3.1
@section Release 3.1
@itemize
--- /dev/null
+ ____/\____
+ (__________)
+ (oo)\_______
+ (__)\ . . )\/\
+ U ||----v||
+ || ||
+ _ _ _ /+ ____/+___
+| \ | | \ | |/ ___| _ \
+| \| | \| | | | |_) |
+| |\ | |\ | |___| __/
+|_| \_|_| \_|\____|_|
golang.org/x/sys/LICENSE
golang.org/x/sys/PATENTS
golang.org/x/sys/README.md
+golang.org/x/sys/cpu
golang.org/x/sys/unix
EOF
tar cfCI - src $tmp/includes | tar xfC - $tmp
doTx = flag.Bool("tx", false, "Transfer packets")
doDelete = flag.Bool("delete", false, "Delete transferred packets")
doCheck = flag.Bool("check", false, "Check integrity while receiving")
- dryRun = flag.Bool("dryrun", false, "Do not writings")
+ dryRun = flag.Bool("dryrun", false, "Do no writes")
spoolPath = flag.String("spool", "", "Override path to spool")
logPath = flag.String("log", "", "Override path to logfile")
quiet = flag.Bool("quiet", false, "Print only errors")
continue
}
if err = tarWr.WriteHeader(&tar.Header{
+ Format: tar.FormatUSTAR,
+ Name: nncp.NNCPBundlePrefix,
+ Mode: 0700,
+ Typeflag: tar.TypeDir,
+ }); err != nil {
+ log.Fatalln("Error writing tar header:", err)
+ }
+ if err = tarWr.WriteHeader(&tar.Header{
+ Format: tar.FormatPAX,
Name: strings.Join([]string{
nncp.NNCPBundlePrefix,
nodeId.String(),
ctx.SelfId.String(),
pktName,
}, "/"),
- Mode: 0440,
+ Mode: 0400,
Size: job.Size,
Typeflag: tar.TypeReg,
}); err != nil {
}
continue
}
+ if entry.Typeflag != tar.TypeDir {
+ ctx.LogD("nncp-bundle", sds, "Expected NNCP/")
+ continue
+ }
+ entry, err = tarR.Next()
+ if err != nil {
+ if err != io.EOF {
+ ctx.LogD(
+ "nncp-bundle",
+ nncp.SdsAdd(sds, nncp.SDS{"err": err}),
+ "error reading tar",
+ )
+ }
+ continue
+ }
sds["pkt"] = entry.Name
if entry.Size < nncp.PktEncOverhead {
ctx.LogD("nncp-bundle", sds, "Too small packet")