mirror of
https://github.com/go-i2p/reseed-tools.git
synced 2025-09-19 19:09:40 -04:00
Compare commits
35 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
f89dd04d13 | ||
![]() |
7b5270eb70 | ||
![]() |
1f31b5551b | ||
![]() |
fbeb8c43b3 | ||
![]() |
15681930fa | ||
![]() |
b34b866cec | ||
![]() |
d01fdd5911 | ||
![]() |
1563e66dd5 | ||
![]() |
2a676d60eb | ||
![]() |
a339a6ab35 | ||
![]() |
b6ace31668 | ||
![]() |
94ba4191ca | ||
![]() |
09e2f36bea | ||
![]() |
4aaa95cdb0 | ||
![]() |
92dc4dba3d | ||
![]() |
3a54f075fd | ||
![]() |
4136cfb7be | ||
![]() |
5ab8bc07b1 | ||
![]() |
8c369acad2 | ||
![]() |
b25f2b65c9 | ||
![]() |
6b31cdac25 | ||
![]() |
0f6c289409 | ||
![]() |
b7cff2d050 | ||
![]() |
f29c5b3590 | ||
![]() |
ec7b186718 | ||
![]() |
9df9b988f3 | ||
![]() |
aeb54da5de | ||
![]() |
749647487a | ||
![]() |
aaa65f3d03 | ||
![]() |
baec0780c9 | ||
![]() |
634f84b575 | ||
![]() |
e94e17701c | ||
![]() |
c4f606a775 | ||
![]() |
9c919297b7 | ||
![]() |
7e875acae7 |
103
CHANGELOG.html
103
CHANGELOG.html
@@ -7,6 +7,7 @@
|
|||||||
<meta name="description" content="reseed-tools" />
|
<meta name="description" content="reseed-tools" />
|
||||||
<meta name="keywords" content="master" />
|
<meta name="keywords" content="master" />
|
||||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="navbar">
|
<div id="navbar">
|
||||||
@@ -16,6 +17,11 @@
|
|||||||
<div id="shownav">
|
<div id="shownav">
|
||||||
<div id="hidenav">
|
<div id="hidenav">
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="..">
|
||||||
|
Up one level ^
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="index.html">
|
<a href="index.html">
|
||||||
index
|
index
|
||||||
@@ -27,13 +33,58 @@
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="DOCKER.html">
|
<a href="content/index.html">
|
||||||
DOCKER
|
content/index.html
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="EXAMPLES.html">
|
<a href="docs/index.html">
|
||||||
EXAMPLES
|
docs/index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/DEBIAN.html">
|
||||||
|
docs/DEBIAN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/DOCKER.html">
|
||||||
|
docs/DOCKER
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/EXAMPLES.html">
|
||||||
|
docs/EXAMPLES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/PLUGIN.html">
|
||||||
|
docs/PLUGIN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/index.html">
|
||||||
|
docs/index
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/SERVICES.html">
|
||||||
|
docs/SERVICES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/TLS.html">
|
||||||
|
docs/TLS
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/index.html">
|
||||||
|
docs/index.html
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -44,20 +95,23 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<a id="returnhome" href="/">
|
||||||
|
/
|
||||||
|
</a>
|
||||||
<p>
|
<p>
|
||||||
2021-12-16
|
2021-12-16
|
||||||
* app.Version = “0.2.11”
|
* app.Version = “0.2.11”
|
||||||
* include license file in plugin
|
* include license file in plugin
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
2021-12-14
|
2021-12-14
|
||||||
* app.Version = “0.2.10”
|
* app.Version = “0.2.10”
|
||||||
* restart changelog
|
* restart changelog
|
||||||
* fix websiteURL in plugin.config
|
* fix websiteURL in plugin.config
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
2019-04-21
|
2019-04-21
|
||||||
* app.Version = “0.1.7”
|
* app.Version = “0.1.7”
|
||||||
* enabling TLS 1.3
|
* enabling TLS 1.3
|
||||||
<em>
|
<em>
|
||||||
only
|
only
|
||||||
@@ -66,42 +120,56 @@
|
|||||||
<p>
|
<p>
|
||||||
2016-12-21
|
2016-12-21
|
||||||
* deactivating previous random time delta, makes only sense when patching ri too
|
* deactivating previous random time delta, makes only sense when patching ri too
|
||||||
* app.Version = “0.1.6”
|
* app.Version = “0.1.6”
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
2016-10-09
|
2016-10-09
|
||||||
* seed the math random generator with time.Now().UnixNano()
|
* seed the math random generator with time.Now().UnixNano()
|
||||||
* added 6h+6h random time delta at su3-age to increase anonymity
|
* added 6h+6h random time delta at su3-age to increase anonymity
|
||||||
* app.Version = “0.1.5”
|
* app.Version = “0.1.5”
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
2016-05-15
|
2016-05-15
|
||||||
* README.md updated
|
* README.md updated
|
||||||
* allowed routerInfos age increased from 96 to 192 hours
|
* allowed routerInfos age increased from 96 to 192 hours
|
||||||
* app.Version = “0.1.4”
|
* app.Version = “0.1.4”
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
2016-03-05
|
2016-03-05
|
||||||
* app.Version = “0.1.3”
|
* app.Version = “0.1.3”
|
||||||
* CRL creation added
|
* CRL creation added
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
2016-01-31
|
2016-01-31
|
||||||
* allowed TLS ciphers updated (hardened)
|
* allowed TLS ciphers updated (hardened)
|
||||||
* TLS certificate generation: RSA 4096 –> ECDSAWithSHA512 384bit secp384r1
|
* TLS certificate generation: RSA 4096 –> ECDSAWithSHA512 384bit secp384r1
|
||||||
* ECDHE handshake: only CurveP384 + CurveP521, default CurveP256 removed
|
* ECDHE handshake: only CurveP384 + CurveP521, default CurveP256 removed
|
||||||
* TLS certificate valid: 2y –> 5y
|
* TLS certificate valid: 2y –> 5y
|
||||||
* throttled.PerDay(4) –> PerHour(4), to enable limited testing
|
* throttled.PerDay(4) –> PerHour(4), to enable limited testing
|
||||||
* su3 RebuildInterval: 24h –> 90h, higher anonymity for the running i2p-router
|
* su3 RebuildInterval: 24h –> 90h, higher anonymity for the running i2p-router
|
||||||
* numRi per su3 file: 75 –> 77
|
* numRi per su3 file: 75 –> 77
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
2016-01
|
2016-01
|
||||||
* fork from
|
* fork from
|
||||||
<a href="https://i2pgit.org/idk/reseed-tools" rel="nofollow">
|
<a href="https://i2pgit.org/idk/reseed-tools">
|
||||||
https://i2pgit.org/idk/reseed-tools
|
https://i2pgit.org/idk/reseed-tools
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
<div id="sourcecode">
|
||||||
|
<span id="sourcehead">
|
||||||
|
<strong>
|
||||||
|
Get the source code:
|
||||||
|
</strong>
|
||||||
|
</span>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://i2pgit.org/idk/reseed-tools">
|
||||||
|
Source Repository: (https://i2pgit.org/idk/reseed-tools)
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<a href="#show">
|
<a href="#show">
|
||||||
Show license
|
Show license
|
||||||
@@ -139,6 +207,7 @@ THE SOFTWARE.
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<a href="https://geti2p.net/">
|
<a href="https://geti2p.net/">
|
||||||
|
<img src="i2plogo.png"></img>
|
||||||
I2P
|
I2P
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
15
CHANGELOG.md
15
CHANGELOG.md
@@ -1,3 +1,18 @@
|
|||||||
|
2023-01-27
|
||||||
|
* app.Version = "0.2.32"
|
||||||
|
* This changelog has been inadequately updated.
|
||||||
|
* At this time, there have been features added.
|
||||||
|
* All flags but signer will be filled in with default values or left unused.
|
||||||
|
* signer may be configured with an environment variable.
|
||||||
|
* A fake homepage is served when a user-agent does not match eepget.
|
||||||
|
* Static resources have been embedded in the binary to support the homepage.
|
||||||
|
* ACME support has been added.
|
||||||
|
* Support for operating an `.onion` service has been added.
|
||||||
|
* Support for operating an in-network(`.b32.i2p`) interface to the reseed has been added.
|
||||||
|
* Reseed servers can monitor eachother on a rate-limited basis.
|
||||||
|
* Support has been added for running as an I2P plugin.
|
||||||
|
* Limited support has been added for Debian packages.
|
||||||
|
|
||||||
2021-12-16
|
2021-12-16
|
||||||
* app.Version = "0.2.11"
|
* app.Version = "0.2.11"
|
||||||
* include license file in plugin
|
* include license file in plugin
|
||||||
|
143
Makefile
143
Makefile
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
VERSION=0.2.30
|
VERSION=0.2.33
|
||||||
APP=reseed-tools
|
APP=reseed-tools
|
||||||
USER_GH=eyedeekay
|
USER_GH=eyedeekay
|
||||||
CGO_ENABLED=0
|
CGO_ENABLED=0
|
||||||
@@ -13,7 +13,7 @@ GOARCH?="amd64"
|
|||||||
ARG=-v -tags netgo -ldflags '-w -extldflags "-static"'
|
ARG=-v -tags netgo -ldflags '-w -extldflags "-static"'
|
||||||
|
|
||||||
#MIN_GO_VERSION=`ls /usr/lib/go-1.14 2>/dev/null >/dev/null && echo 1.14`
|
#MIN_GO_VERSION=`ls /usr/lib/go-1.14 2>/dev/null >/dev/null && echo 1.14`
|
||||||
MIN_GO_VERSION?=1.15
|
MIN_GO_VERSION?=1.16
|
||||||
|
|
||||||
I2P_UID=$(shell id -u i2psvc)
|
I2P_UID=$(shell id -u i2psvc)
|
||||||
I2P_GID=$(shell id -g i2psvc)
|
I2P_GID=$(shell id -g i2psvc)
|
||||||
@@ -24,16 +24,7 @@ echo:
|
|||||||
@echo "type make version to do release $(APP) $(VERSION) $(GOOS) $(GOARCH) $(MIN_GO_VERSION) $(I2P_UID) $(I2P_GID)"
|
@echo "type make version to do release $(APP) $(VERSION) $(GOOS) $(GOARCH) $(MIN_GO_VERSION) $(I2P_UID) $(I2P_GID)"
|
||||||
|
|
||||||
index:
|
index:
|
||||||
@echo "<!DOCTYPE html>" > index.html
|
edgar
|
||||||
@echo "<html>" >> index.html
|
|
||||||
@echo "<head>" >> index.html
|
|
||||||
@echo " <title>Reseed Tools</title>" >> index.html
|
|
||||||
@echo " <link rel=\"stylesheet\" type=\"text/css\" href =\"/style.css\" />" >> index.html
|
|
||||||
@echo "</head>" >> index.html
|
|
||||||
@echo "<body>" >> index.html
|
|
||||||
pandoc README.md >> index.html
|
|
||||||
@echo "</body>" >> index.html
|
|
||||||
@echo "</html>" >> index.html
|
|
||||||
|
|
||||||
build:
|
build:
|
||||||
go build $(ARG) -o reseed-tools-$(GOOS)-$(GOARCH)
|
go build $(ARG) -o reseed-tools-$(GOOS)-$(GOARCH)
|
||||||
@@ -52,19 +43,20 @@ install:
|
|||||||
install -m644 etc/default/reseed /etc/default/reseed
|
install -m644 etc/default/reseed /etc/default/reseed
|
||||||
install -m755 etc/init.d/reseed /etc/init.d/reseed
|
install -m755 etc/init.d/reseed /etc/init.d/reseed
|
||||||
mkdir -p /etc/systemd/system/reseed.service.d/
|
mkdir -p /etc/systemd/system/reseed.service.d/
|
||||||
|
mkdir -p /var/lib/i2p/
|
||||||
mkdir -p /var/lib/i2p/i2p-config/reseed/
|
mkdir -p /var/lib/i2p/i2p-config/reseed/
|
||||||
install -g i2psvc -o i2psvc -d /var/lib/i2p/i2p-config/reseed/
|
install -g i2psvc -o i2psvc -d /var/lib/i2p/i2p-config/reseed/
|
||||||
cp -r content /var/lib/i2p/i2p-config/reseed/content
|
cp -r reseed/content /var/lib/i2p/i2p-config/reseed/content
|
||||||
chown -R i2psvc:i2psvc /var/lib/i2p/i2p-config/reseed/
|
chown -R i2psvc:i2psvc /var/lib/i2p/i2p-config/reseed/
|
||||||
install -m644 etc/systemd/system/reseed.service.d/override.conf /etc/systemd/system/reseed.service.d/override.conf
|
install -m644 etc/systemd/system/reseed.service.d/override.conf /etc/systemd/system/reseed.service.d/override.conf
|
||||||
install -m644 etc/systemd/system/reseed.service.d/reseed.service /etc/systemd/system/reseed.service
|
install -m644 etc/systemd/system/reseed.service /etc/systemd/system/reseed.service
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
rm /usr/bin/reseed-tools
|
rm /usr/bin/reseed-tools
|
||||||
rm /etc/default/reseed
|
rm /etc/default/reseed
|
||||||
rm /etc/init.d/reseed
|
rm /etc/init.d/reseed
|
||||||
rm /etc/systemd/system/reseed.service.d/reseed.conf
|
rm /etc/systemd/system/reseed.service.d/reseed.conf
|
||||||
rm /etc/systemd/system/reseed.service.d/reseed.service
|
rm /etc/systemd/system/reseed.service
|
||||||
rm -rf /var/lib/i2p/i2p-config/reseed/
|
rm -rf /var/lib/i2p/i2p-config/reseed/
|
||||||
|
|
||||||
checkinstall: build
|
checkinstall: build
|
||||||
@@ -196,72 +188,72 @@ upload: tar
|
|||||||
gothub upload -R -s $(GITHUB_TOKEN) -u $(USER_GH) -r $(APP) -t v$(VERSION) -f ../reseed-tools.tar.xz -n "reseed-tools.tar.xz"
|
gothub upload -R -s $(GITHUB_TOKEN) -u $(USER_GH) -r $(APP) -t v$(VERSION) -f ../reseed-tools.tar.xz -n "reseed-tools.tar.xz"
|
||||||
|
|
||||||
binary:
|
binary:
|
||||||
GOOS=darwin GOARCH=amd64 make build
|
##export GOOS=darwin; export GOARCH=amd64; make build
|
||||||
GOOS=darwin GOARCH=arm64 make build
|
###export GOOS=darwin; export GOARCH=arm64; make build
|
||||||
GOOS=linux GOARCH=386 make build
|
export GOOS=linux; export GOARCH=amd64; make build
|
||||||
GOOS=linux GOARCH=amd64 make build
|
export GOOS=linux; export GOARCH=386; make build
|
||||||
GOOS=linux GOARCH=arm make build
|
export GOOS=linux; export GOARCH=arm; make build
|
||||||
GOOS=linux GOARCH=arm64 make build
|
export GOOS=linux; export GOARCH=arm64; make build
|
||||||
GOOS=openbsd GOARCH=amd64 make build
|
export GOOS=openbsd; export GOARCH=amd64; make build
|
||||||
GOOS=freebsd GOARCH=386 make build
|
export GOOS=freebsd; export GOARCH=386; make build
|
||||||
GOOS=freebsd GOARCH=amd64 make build
|
export GOOS=freebsd; export GOARCH=amd64; make build
|
||||||
GOOS=windows GOARCH=amd64 make build
|
export GOOS=windows; export GOARCH=amd64; make build
|
||||||
GOOS=windows GOARCH=386 make build
|
export GOOS=windows; export GOARCH=386; make build
|
||||||
|
|
||||||
plugins: binary
|
plugins:
|
||||||
GOOS=darwin GOARCH=amd64 make su3s
|
#export GOOS=darwin; export GOARCH=amd64; make su3s
|
||||||
GOOS=darwin GOARCH=arm64 make su3s
|
#export GOOS=darwin; export GOARCH=arm64; make su3s
|
||||||
GOOS=linux GOARCH=386 make su3s
|
export GOOS=linux; export GOARCH=amd64; make su3s
|
||||||
GOOS=linux GOARCH=amd64 make su3s
|
export GOOS=linux; export GOARCH=386; make su3s
|
||||||
GOOS=linux GOARCH=arm make su3s
|
export GOOS=linux; export GOARCH=arm; make su3s
|
||||||
GOOS=linux GOARCH=arm64 make su3s
|
export GOOS=linux; export GOARCH=arm64; make su3s
|
||||||
GOOS=openbsd GOARCH=amd64 make su3s
|
export GOOS=openbsd; export GOARCH=amd64; make su3s
|
||||||
GOOS=freebsd GOARCH=386 make su3s
|
export GOOS=freebsd; export GOARCH=386; make su3s
|
||||||
GOOS=freebsd GOARCH=amd64 make su3s
|
export GOOS=freebsd; export GOARCH=amd64; make su3s
|
||||||
GOOS=windows GOARCH=amd64 make su3s
|
export GOOS=windows; export GOARCH=amd64; make su3s
|
||||||
GOOS=windows GOARCH=386 make su3s
|
export GOOS=windows; export GOARCH=386; make su3s
|
||||||
|
|
||||||
upload-bin:
|
upload-bin:
|
||||||
GOOS=darwin GOARCH=amd64 make upload-single-bin
|
#export GOOS=darwin; export GOARCH=amd64; make upload-single-bin
|
||||||
GOOS=darwin GOARCH=arm64 make upload-single-bin
|
#export GOOS=darwin; export GOARCH=arm64; make upload-single-bin
|
||||||
GOOS=linux GOARCH=386 make upload-single-bin
|
export GOOS=linux; export GOARCH=386; make upload-single-bin
|
||||||
GOOS=linux GOARCH=amd64 make upload-single-bin
|
export GOOS=linux; export GOARCH=amd64; make upload-single-bin
|
||||||
GOOS=linux GOARCH=arm make upload-single-bin
|
export GOOS=linux; export GOARCH=arm; make upload-single-bin
|
||||||
GOOS=linux GOARCH=arm64 make upload-single-bin
|
export GOOS=linux; export GOARCH=arm64; make upload-single-bin
|
||||||
GOOS=openbsd GOARCH=amd64 make upload-single-bin
|
export GOOS=openbsd; export GOARCH=amd64; make upload-single-bin
|
||||||
GOOS=freebsd GOARCH=386 make upload-single-bin
|
export GOOS=freebsd; export GOARCH=386; make upload-single-bin
|
||||||
GOOS=freebsd GOARCH=amd64 make upload-single-bin
|
export GOOS=freebsd; export GOARCH=amd64; make upload-single-bin
|
||||||
GOOS=windows GOARCH=amd64 make upload-single-bin
|
export GOOS=windows; export GOARCH=amd64; make upload-single-bin
|
||||||
GOOS=windows GOARCH=386 make upload-single-bin
|
export GOOS=windows; export GOARCH=386; make upload-single-bin
|
||||||
|
|
||||||
rm-su3s:
|
rm-su3s:
|
||||||
rm *.su3 -f
|
rm *.su3 -f
|
||||||
|
|
||||||
download-su3s:
|
download-su3s:
|
||||||
GOOS=darwin GOARCH=amd64 make download-single-su3
|
#export GOOS=darwin; export GOARCH=amd64; make download-single-su3
|
||||||
GOOS=darwin GOARCH=arm64 make download-single-su3
|
#export GOOS=darwin; export GOARCH=arm64; make download-single-su3
|
||||||
GOOS=linux GOARCH=386 make download-single-su3
|
export GOOS=linux; export GOARCH=386; make download-single-su3
|
||||||
GOOS=linux GOARCH=amd64 make download-single-su3
|
export GOOS=linux; export GOARCH=amd64; make download-single-su3
|
||||||
GOOS=linux GOARCH=arm make download-single-su3
|
export GOOS=linux; export GOARCH=arm; make download-single-su3
|
||||||
GOOS=linux GOARCH=arm64 make download-single-su3
|
export GOOS=linux; export GOARCH=arm64; make download-single-su3
|
||||||
GOOS=openbsd GOARCH=amd64 make download-single-su3
|
export GOOS=openbsd; export GOARCH=amd64; make download-single-su3
|
||||||
GOOS=freebsd GOARCH=386 make download-single-su3
|
export GOOS=freebsd; export GOARCH=386; make download-single-su3
|
||||||
GOOS=freebsd GOARCH=amd64 make download-single-su3
|
export GOOS=freebsd; export GOARCH=amd64; make download-single-su3
|
||||||
GOOS=windows GOARCH=amd64 make download-single-su3
|
export GOOS=windows; export GOARCH=amd64; make download-single-su3
|
||||||
GOOS=windows GOARCH=386 make download-single-su3
|
export GOOS=windows; export GOARCH=386; make download-single-su3
|
||||||
|
|
||||||
upload-su3s:
|
upload-su3s:
|
||||||
GOOS=darwin GOARCH=amd64 make upload-single-su3
|
#export GOOS=darwin; export GOARCH=amd64; make upload-single-su3
|
||||||
GOOS=darwin GOARCH=arm64 make upload-single-su3
|
#export GOOS=darwin; export GOARCH=arm64; make upload-single-su3
|
||||||
GOOS=linux GOARCH=386 make upload-single-su3
|
export GOOS=linux; export GOARCH=386; make upload-single-su3
|
||||||
GOOS=linux GOARCH=amd64 make upload-single-su3
|
export GOOS=linux; export GOARCH=amd64; make upload-single-su3
|
||||||
GOOS=linux GOARCH=arm make upload-single-su3
|
export GOOS=linux; export GOARCH=arm; make upload-single-su3
|
||||||
GOOS=linux GOARCH=arm64 make upload-single-su3
|
export GOOS=linux; export GOARCH=arm64; make upload-single-su3
|
||||||
GOOS=openbsd GOARCH=amd64 make upload-single-su3
|
export GOOS=openbsd; export GOARCH=amd64; make upload-single-su3
|
||||||
GOOS=freebsd GOARCH=386 make upload-single-su3
|
export GOOS=freebsd; export GOARCH=386; make upload-single-su3
|
||||||
GOOS=freebsd GOARCH=amd64 make upload-single-su3
|
export GOOS=freebsd; export GOARCH=amd64; make upload-single-su3
|
||||||
GOOS=windows GOARCH=amd64 make upload-single-su3
|
export GOOS=windows; export GOARCH=amd64; make upload-single-su3
|
||||||
GOOS=windows GOARCH=386 make upload-single-su3
|
export GOOS=windows; export GOARCH=386; make upload-single-su3
|
||||||
|
|
||||||
download-single-su3:
|
download-single-su3:
|
||||||
wget-ds "https://github.com/eyedeekay/reseed-tools/releases/download/v$(VERSION)/reseed-tools-$(GOOS)-$(GOARCH).su3"
|
wget-ds "https://github.com/eyedeekay/reseed-tools/releases/download/v$(VERSION)/reseed-tools-$(GOOS)-$(GOARCH).su3"
|
||||||
@@ -277,7 +269,7 @@ upload-single-su3:
|
|||||||
|
|
||||||
tmp/content:
|
tmp/content:
|
||||||
mkdir -p tmp
|
mkdir -p tmp
|
||||||
cp -rv content tmp/content
|
cp -rv reseed/content tmp/content
|
||||||
echo "you@mail.i2p" > tmp/signer
|
echo "you@mail.i2p" > tmp/signer
|
||||||
|
|
||||||
tmp/lib:
|
tmp/lib:
|
||||||
@@ -285,11 +277,12 @@ tmp/lib:
|
|||||||
# cp "$(HOME)/build/shellservice.jar" tmp/lib/shellservice.jar
|
# cp "$(HOME)/build/shellservice.jar" tmp/lib/shellservice.jar
|
||||||
|
|
||||||
tmp/LICENSE:
|
tmp/LICENSE:
|
||||||
cp LICENSE.md tmp/LICENSE
|
cp LICENSE tmp/LICENSE
|
||||||
|
|
||||||
SIGNER_DIR=$(HOME)/i2p-go-keys/
|
SIGNER_DIR=$(HOME)/i2p-go-keys/
|
||||||
|
|
||||||
su3s: tmp/content tmp/lib tmp/LICENSE
|
su3s: tmp/content tmp/lib tmp/LICENSE build
|
||||||
|
rm -f plugin.yaml client.yaml
|
||||||
i2p.plugin.native -name=reseed-tools-$(GOOS)-$(GOARCH) \
|
i2p.plugin.native -name=reseed-tools-$(GOOS)-$(GOARCH) \
|
||||||
-signer=hankhill19580@gmail.com \
|
-signer=hankhill19580@gmail.com \
|
||||||
-signer-dir=$(SIGNER_DIR) \
|
-signer-dir=$(SIGNER_DIR) \
|
||||||
@@ -309,7 +302,7 @@ su3s: tmp/content tmp/lib tmp/LICENSE
|
|||||||
-targetos="$(GOOS)" \
|
-targetos="$(GOOS)" \
|
||||||
-res=tmp/ \
|
-res=tmp/ \
|
||||||
-license=MIT
|
-license=MIT
|
||||||
unzip -o reseed-tools-$(GOOS)-$(GOARCH).zip -d reseed-tools-$(GOOS)-$(GOARCH)-zip
|
#unzip -o reseed-tools-$(GOOS)-$(GOARCH).zip -d reseed-tools-$(GOOS)-$(GOARCH)-zip
|
||||||
|
|
||||||
#export sumbblinux=`sha256sum "../reseed-tools-linux.su3"`
|
#export sumbblinux=`sha256sum "../reseed-tools-linux.su3"`
|
||||||
#export sumbbwindows=`sha256sum "../reseed-tools-windows.su3"`
|
#export sumbbwindows=`sha256sum "../reseed-tools-windows.su3"`
|
||||||
|
68
README.md
68
README.md
@@ -29,33 +29,6 @@ as an I2P Plugin. It will attempt to configure itself automatically. You should
|
|||||||
make sure to set the `--signer` flag or the `RESEED_EMAIL` environment variable
|
make sure to set the `--signer` flag or the `RESEED_EMAIL` environment variable
|
||||||
to configure your signing keys/contact info.
|
to configure your signing keys/contact info.
|
||||||
|
|
||||||
#### Plugin install URL's
|
|
||||||
|
|
||||||
Plugin releases are available inside of i2p at http://idk.i2p/reseed-tools/
|
|
||||||
and via the github mirror at https://github.com/eyedeekay/reseed-tools/releases.
|
|
||||||
These can be installed by adding them on the
|
|
||||||
[http://127.0.0.1:7657/configplugins](http://127.0.0.1:7657/configplugins).
|
|
||||||
|
|
||||||
After installing the plugin, you should immediately edit the `$PLUGIN/signer`
|
|
||||||
file in order to set your `--signer` email, which is used to name your keys.
|
|
||||||
You can find the `$PLUGIN` directory in your I2P config directory, which is
|
|
||||||
usually `$HOME/.i2p` on Unixes.
|
|
||||||
|
|
||||||
This will allow the developers to contact you if your reseed has issues
|
|
||||||
and will authenticate your reseed to the I2P routers that use it.
|
|
||||||
|
|
||||||
- darwin/amd64: [http://idk.i2p/reseed-tools/reseed-tools-darwin-amd64.su3](http://idk.i2p/reseed-tools/reseed-tools-darwin-amd64.su3)
|
|
||||||
- darwin/arm64: [http://idk.i2p/reseed-tools/reseed-tools-darwin-arm64.su3](http://idk.i2p/reseed-tools/reseed-tools-darwin-arm64.su3)
|
|
||||||
- linux/386: [http://idk.i2p/reseed-tools/reseed-tools-linux-386.su3](http://idk.i2p/reseed-tools/reseed-tools-linux-386.su3)
|
|
||||||
- linux/amd64: [http://idk.i2p/reseed-tools/reseed-tools-linux-amd64.su3](http://idk.i2p/reseed-tools/reseed-tools-linux-amd64.su3)
|
|
||||||
- linux/arm: [http://idk.i2p/reseed-tools/reseed-tools-linux-arm.su3](http://idk.i2p/reseed-tools/reseed-tools-linux-arm.su3)
|
|
||||||
- linux/arm64: [http://idk.i2p/reseed-tools/reseed-tools-linux-arm64.su3](http://idk.i2p/reseed-tools/reseed-tools-linux-arm64.su3)
|
|
||||||
- openbsd/amd64: [http://idk.i2p/reseed-tools/reseed-tools-openbsd-amd64.su3](http://idk.i2p/reseed-tools/reseed-tools-openbsd-amd64.su3)
|
|
||||||
- freebsd/386: [http://idk.i2p/reseed-tools/reseed-tools-freebsd-386.su3](http://idk.i2p/reseed-tools/reseed-tools-freebsd-386.su3)
|
|
||||||
- freebsd/amd64: [http://idk.i2p/reseed-tools/reseed-tools-freebsd-amd64.su3](http://idk.i2p/reseed-tools/reseed-tools-freebsd-amd64.su3)
|
|
||||||
- windows/amd64: [http://idk.i2p/reseed-tools/reseed-tools-windows-amd64.su3](http://idk.i2p/reseed-tools/reseed-tools-windows-amd64.su3)
|
|
||||||
- windows/386: [http://idk.i2p/reseed-tools/reseed-tools-windows-386.su3](http://idk.i2p/reseed-tools/reseed-tools-windows-386.su3)
|
|
||||||
|
|
||||||
### Installation(From Source)
|
### Installation(From Source)
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -70,46 +43,13 @@ sudo make install
|
|||||||
|
|
||||||
#### Debian/Ubuntu note:
|
#### Debian/Ubuntu note:
|
||||||
|
|
||||||
|
It is possible to create a `.deb` package using [these instructions](docs/DEBIAN.md).
|
||||||
|
|
||||||
Debian users who are running I2P as a system service must also run the
|
Debian users who are running I2P as a system service must also run the
|
||||||
`reseed-tools` as the same user. This is so that the reseed-tools can access
|
`reseed-tools` as the same user. This is so that the reseed-tools can access
|
||||||
the I2P service's netDb directory. On Debian and Ubuntu, that user is `i2psvc`
|
the I2P service's netDb directory. On Debian and Ubuntu, that user is `i2psvc`
|
||||||
and the netDb directory is: `/var/lib/i2p/i2p-config/netDb`.
|
and the netDb directory is: `/var/lib/i2p/i2p-config/netDb`.
|
||||||
|
|
||||||
##### Service Integration
|
|
||||||
|
|
||||||
Support for running as a system service as part of the reseed package
|
|
||||||
is new. PR's that improve integration are welcome.
|
|
||||||
|
|
||||||
###### Systemd Service
|
|
||||||
|
|
||||||
A systemd service is provided which should work with the I2P Debian package
|
|
||||||
when reseed-tools is installed in `/usr/bin/reseed-tools`. If you install with
|
|
||||||
`make install` this service is also installed. This service will cause the
|
|
||||||
bundles to regenerate every 12 hours.
|
|
||||||
|
|
||||||
The contact email for your reseed should be added in:
|
|
||||||
`/etc/systemd/system/reseed.d/reseed.conf`.
|
|
||||||
|
|
||||||
Self-signed certificates will be auto-generated for these services. To change
|
|
||||||
this you should edit the `/etc/systemd/system/reseed.d/reseed.service`.
|
|
||||||
|
|
||||||
- To enable starting the reseed service automatically with the system: `sudo systemctl enable reseed.service`
|
|
||||||
- To run the service manually: `sudo sysctl start reseed.service`
|
|
||||||
- To reload the systemd services: `sudo systemctl daemon-reload`
|
|
||||||
- To view the status/logs: `sudo journalctl -u reseed.service`
|
|
||||||
|
|
||||||
###### SysV Service
|
|
||||||
|
|
||||||
An initscript is also provided. The initscript, unlike the systemd service,
|
|
||||||
cannot schedule itself to restart. You should restart the service roughly once
|
|
||||||
a day to ensure that the information does not expire.
|
|
||||||
|
|
||||||
The contact email for your reseed should be added in:
|
|
||||||
`/etc/init.d/reseed`.
|
|
||||||
|
|
||||||
Self-signed certificates will be auto-generated for these services. To change
|
|
||||||
this you should edit the `/etc/init.d/reseed`.
|
|
||||||
|
|
||||||
## Example Commands:
|
## Example Commands:
|
||||||
|
|
||||||
### Without a webserver, standalone with TLS support
|
### Without a webserver, standalone with TLS support
|
||||||
@@ -131,5 +71,5 @@ If you are using a reverse proxy server it may provide the TLS certificate inste
|
|||||||
reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --port=8443 --ip=127.0.0.1 --trustProxy
|
reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --port=8443 --ip=127.0.0.1 --trustProxy
|
||||||
```
|
```
|
||||||
|
|
||||||
- **Usage** [More examples can be found here.](EXAMPLES.md)
|
- **Usage** [More examples can be found here.](docs/EXAMPLES.md)
|
||||||
- **Docker** [Docker examples can be found here](DOCKER.md)
|
- **Docker** [Docker examples can be found here](docs/DOCKER.md)
|
||||||
|
@@ -3,20 +3,20 @@ package cmd
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli/v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewKeygenCommand() cli.Command {
|
func NewKeygenCommand() *cli.Command {
|
||||||
return cli.Command{
|
return &cli.Command{
|
||||||
Name: "keygen",
|
Name: "keygen",
|
||||||
Usage: "Generate keys for reseed su3 signing and TLS serving.",
|
Usage: "Generate keys for reseed su3 signing and TLS serving.",
|
||||||
Action: keygenAction,
|
Action: keygenAction,
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "signer",
|
Name: "signer",
|
||||||
Usage: "Generate a private key and certificate for the given su3 signing ID (ex. something@mail.i2p)",
|
Usage: "Generate a private key and certificate for the given su3 signing ID (ex. something@mail.i2p)",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "tlsHost",
|
Name: "tlsHost",
|
||||||
Usage: "Generate a self-signed TLS certificate and private key for the given host",
|
Usage: "Generate a self-signed TLS certificate and private key for the given host",
|
||||||
},
|
},
|
||||||
@@ -24,20 +24,20 @@ func NewKeygenCommand() cli.Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func keygenAction(c *cli.Context) {
|
func keygenAction(c *cli.Context) error {
|
||||||
signerID := c.String("signer")
|
signerID := c.String("signer")
|
||||||
tlsHost := c.String("tlsHost")
|
tlsHost := c.String("tlsHost")
|
||||||
trustProxy := c.Bool("trustProxy")
|
trustProxy := c.Bool("trustProxy")
|
||||||
|
|
||||||
if signerID == "" && tlsHost == "" {
|
if signerID == "" && tlsHost == "" {
|
||||||
fmt.Println("You must specify either --tlsHost or --signer")
|
fmt.Println("You must specify either --tlsHost or --signer")
|
||||||
return
|
return fmt.Errorf("You must specify either --tlsHost or --signer")
|
||||||
}
|
}
|
||||||
|
|
||||||
if signerID != "" {
|
if signerID != "" {
|
||||||
if err := createSigningCertificate(signerID); nil != err {
|
if err := createSigningCertificate(signerID); nil != err {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,8 +45,9 @@ func keygenAction(c *cli.Context) {
|
|||||||
if tlsHost != "" {
|
if tlsHost != "" {
|
||||||
if err := createTLSCertificate(tlsHost); nil != err {
|
if err := createTLSCertificate(tlsHost); nil != err {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
@@ -21,7 +21,7 @@ import (
|
|||||||
"github.com/eyedeekay/sam3"
|
"github.com/eyedeekay/sam3"
|
||||||
"github.com/libp2p/go-libp2p"
|
"github.com/libp2p/go-libp2p"
|
||||||
"github.com/libp2p/go-libp2p-core/host"
|
"github.com/libp2p/go-libp2p-core/host"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli/v3"
|
||||||
"i2pgit.org/idk/reseed-tools/reseed"
|
"i2pgit.org/idk/reseed-tools/reseed"
|
||||||
|
|
||||||
"github.com/eyedeekay/checki2cp/getmeanetdb"
|
"github.com/eyedeekay/checki2cp/getmeanetdb"
|
||||||
@@ -47,132 +47,143 @@ func getHostName() string {
|
|||||||
return strings.Replace(hostname, "\n", "", -1)
|
return strings.Replace(hostname, "\n", "", -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewReseedCommand() cli.Command {
|
func providedReseeds(c *cli.Context) []string {
|
||||||
|
reseedArg := c.StringSlice("friends")
|
||||||
|
reseed.AllReseeds = reseedArg
|
||||||
|
return reseed.AllReseeds
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewReseedCommand() *cli.Command {
|
||||||
ndb, err := getmeanetdb.WhereIstheNetDB()
|
ndb, err := getmeanetdb.WhereIstheNetDB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
return cli.Command{
|
return &cli.Command{
|
||||||
Name: "reseed",
|
Name: "reseed",
|
||||||
Usage: "Start a reseed server",
|
Usage: "Start a reseed server",
|
||||||
Action: reseedAction,
|
Action: reseedAction,
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "signer",
|
Name: "signer",
|
||||||
Value: getDefaultSigner(),
|
Value: getDefaultSigner(),
|
||||||
Usage: "Your su3 signing ID (ex. something@mail.i2p)",
|
Usage: "Your su3 signing ID (ex. something@mail.i2p)",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "tlsHost",
|
Name: "tlsHost",
|
||||||
Value: getHostName(),
|
Value: getHostName(),
|
||||||
Usage: "The public hostname used on your TLS certificate",
|
Usage: "The public hostname used on your TLS certificate",
|
||||||
},
|
},
|
||||||
cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: "onion",
|
Name: "onion",
|
||||||
Usage: "Present an onionv3 address",
|
Usage: "Present an onionv3 address",
|
||||||
},
|
},
|
||||||
cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: "singleOnion",
|
Name: "singleOnion",
|
||||||
Usage: "Use a faster, but non-anonymous single-hop onion",
|
Usage: "Use a faster, but non-anonymous single-hop onion",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "onionKey",
|
Name: "onionKey",
|
||||||
Value: "onion.key",
|
Value: "onion.key",
|
||||||
Usage: "Specify a path to an ed25519 private key for onion",
|
Usage: "Specify a path to an ed25519 private key for onion",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "key",
|
Name: "key",
|
||||||
Usage: "Path to your su3 signing private key",
|
Usage: "Path to your su3 signing private key",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "netdb",
|
Name: "netdb",
|
||||||
Value: ndb,
|
Value: ndb,
|
||||||
Usage: "Path to NetDB directory containing routerInfos",
|
Usage: "Path to NetDB directory containing routerInfos",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "tlsCert",
|
Name: "tlsCert",
|
||||||
Usage: "Path to a TLS certificate",
|
Usage: "Path to a TLS certificate",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "tlsKey",
|
Name: "tlsKey",
|
||||||
Usage: "Path to a TLS private key",
|
Usage: "Path to a TLS private key",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "ip",
|
Name: "ip",
|
||||||
Value: "0.0.0.0",
|
Value: "0.0.0.0",
|
||||||
Usage: "IP address to listen on",
|
Usage: "IP address to listen on",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "port",
|
Name: "port",
|
||||||
Value: "8443",
|
Value: "8443",
|
||||||
Usage: "Port to listen on",
|
Usage: "Port to listen on",
|
||||||
},
|
},
|
||||||
cli.IntFlag{
|
&cli.IntFlag{
|
||||||
Name: "numRi",
|
Name: "numRi",
|
||||||
Value: 77,
|
Value: 77,
|
||||||
Usage: "Number of routerInfos to include in each su3 file",
|
Usage: "Number of routerInfos to include in each su3 file",
|
||||||
},
|
},
|
||||||
cli.IntFlag{
|
&cli.IntFlag{
|
||||||
Name: "numSu3",
|
Name: "numSu3",
|
||||||
Value: 50,
|
Value: 50,
|
||||||
Usage: "Number of su3 files to build (0 = automatic based on size of netdb)",
|
Usage: "Number of su3 files to build (0 = automatic based on size of netdb)",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "interval",
|
Name: "interval",
|
||||||
Value: "90h",
|
Value: "90h",
|
||||||
Usage: "Duration between SU3 cache rebuilds (ex. 12h, 15m)",
|
Usage: "Duration between SU3 cache rebuilds (ex. 12h, 15m)",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "prefix",
|
Name: "prefix",
|
||||||
Value: "",
|
Value: "",
|
||||||
Usage: "Prefix path for the HTTP(S) server. (ex. /netdb)",
|
Usage: "Prefix path for the HTTP(S) server. (ex. /netdb)",
|
||||||
},
|
},
|
||||||
cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: "trustProxy",
|
Name: "trustProxy",
|
||||||
Usage: "If provided, we will trust the 'X-Forwarded-For' header in requests (ex. behind cloudflare)",
|
Usage: "If provided, we will trust the 'X-Forwarded-For' header in requests (ex. behind cloudflare)",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "blacklist",
|
Name: "blacklist",
|
||||||
Value: "",
|
Value: "",
|
||||||
Usage: "Path to a txt file containing a list of IPs to deny connections from.",
|
Usage: "Path to a txt file containing a list of IPs to deny connections from.",
|
||||||
},
|
},
|
||||||
cli.DurationFlag{
|
&cli.DurationFlag{
|
||||||
Name: "stats",
|
Name: "stats",
|
||||||
Value: 0,
|
Value: 0,
|
||||||
Usage: "Periodically print memory stats.",
|
Usage: "Periodically print memory stats.",
|
||||||
},
|
},
|
||||||
cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: "p2p",
|
Name: "p2p",
|
||||||
Usage: "Listen for reseed request via libp2p",
|
Usage: "Listen for reseed request via libp2p",
|
||||||
},
|
},
|
||||||
cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: "i2p",
|
Name: "i2p",
|
||||||
Usage: "Listen for reseed request inside the I2P network",
|
Usage: "Listen for reseed request inside the I2P network",
|
||||||
},
|
},
|
||||||
cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: "yes",
|
Name: "yes",
|
||||||
Usage: "Automatically answer 'yes' to self-signed SSL generation",
|
Usage: "Automatically answer 'yes' to self-signed SSL generation",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "samaddr",
|
Name: "samaddr",
|
||||||
Value: "127.0.0.1:7656",
|
Value: "127.0.0.1:7656",
|
||||||
Usage: "Use this SAM address to set up I2P connections for in-network reseed",
|
Usage: "Use this SAM address to set up I2P connections for in-network reseed",
|
||||||
},
|
},
|
||||||
cli.BoolFlag{
|
&cli.StringSliceFlag{
|
||||||
|
Name: "friends",
|
||||||
|
Value: cli.NewStringSlice(reseed.AllReseeds...),
|
||||||
|
Usage: "Ping other reseed servers and display the result on the homepage to provide information about reseed uptime.",
|
||||||
|
},
|
||||||
|
&cli.BoolFlag{
|
||||||
Name: "acme",
|
Name: "acme",
|
||||||
Usage: "Automatically generate a TLS certificate with the ACME protocol, defaults to Let's Encrypt",
|
Usage: "Automatically generate a TLS certificate with the ACME protocol, defaults to Let's Encrypt",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "acmeserver",
|
Name: "acmeserver",
|
||||||
Value: "https://acme-staging-v02.api.letsencrypt.org/directory",
|
Value: "https://acme-staging-v02.api.letsencrypt.org/directory",
|
||||||
Usage: "Use this server to issue a certificate with the ACME protocol",
|
Usage: "Use this server to issue a certificate with the ACME protocol",
|
||||||
},
|
},
|
||||||
cli.IntFlag{
|
&cli.IntFlag{
|
||||||
Name: "ratelimit",
|
Name: "ratelimit",
|
||||||
Value: 4,
|
Value: 4,
|
||||||
Usage: "Maximum number of reseed bundle requests per-IP address, per-hour.",
|
Usage: "Maximum number of reseed bundle requests per-IP address, per-hour.",
|
||||||
},
|
},
|
||||||
cli.IntFlag{
|
&cli.IntFlag{
|
||||||
Name: "ratelimitweb",
|
Name: "ratelimitweb",
|
||||||
Value: 40,
|
Value: 40,
|
||||||
Usage: "Maxiumum number of web-visits per-IP address, per-hour",
|
Usage: "Maxiumum number of web-visits per-IP address, per-hour",
|
||||||
@@ -236,27 +247,28 @@ func fileExists(filename string) bool {
|
|||||||
return !info.IsDir()
|
return !info.IsDir()
|
||||||
}
|
}
|
||||||
|
|
||||||
func reseedAction(c *cli.Context) {
|
func reseedAction(c *cli.Context) error {
|
||||||
|
providedReseeds(c)
|
||||||
netdbDir := c.String("netdb")
|
netdbDir := c.String("netdb")
|
||||||
if netdbDir == "" {
|
if netdbDir == "" {
|
||||||
fmt.Println("--netdb is required")
|
fmt.Println("--netdb is required")
|
||||||
return
|
return fmt.Errorf("--netdb is required")
|
||||||
}
|
}
|
||||||
|
|
||||||
signerID := c.String("signer")
|
signerID := c.String("signer")
|
||||||
if signerID == "" || signerID == "you@mail.i2p" {
|
if signerID == "" || signerID == "you@mail.i2p" {
|
||||||
fmt.Println("--signer is required")
|
fmt.Println("--signer is required")
|
||||||
return
|
return fmt.Errorf("--signer is required")
|
||||||
}
|
}
|
||||||
if !strings.Contains(signerID, "@") {
|
if !strings.Contains(signerID, "@") {
|
||||||
if !fileExists(signerID) {
|
if !fileExists(signerID) {
|
||||||
fmt.Println("--signer must be an email address or a file containing an email address.")
|
fmt.Println("--signer must be an email address or a file containing an email address.")
|
||||||
return
|
return fmt.Errorf("--signer must be an email address or a file containing an email address.")
|
||||||
}
|
}
|
||||||
bytes, err := ioutil.ReadFile(signerID)
|
bytes, err := ioutil.ReadFile(signerID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("--signer must be an email address or a file containing an email address.")
|
fmt.Println("--signer must be an email address or a file containing an email address.")
|
||||||
return
|
return fmt.Errorf("--signer must be an email address or a file containing an email address.")
|
||||||
}
|
}
|
||||||
signerID = string(bytes)
|
signerID = string(bytes)
|
||||||
}
|
}
|
||||||
@@ -390,7 +402,7 @@ func reseedAction(c *cli.Context) {
|
|||||||
reloadIntvl, err := time.ParseDuration(c.String("interval"))
|
reloadIntvl, err := time.ParseDuration(c.String("interval"))
|
||||||
if nil != err {
|
if nil != err {
|
||||||
fmt.Printf("'%s' is not a valid time interval.\n", reloadIntvl)
|
fmt.Printf("'%s' is not a valid time interval.\n", reloadIntvl)
|
||||||
return
|
return fmt.Errorf("'%s' is not a valid time interval.\n", reloadIntvl)
|
||||||
}
|
}
|
||||||
|
|
||||||
signerKey := c.String("key")
|
signerKey := c.String("key")
|
||||||
@@ -451,6 +463,7 @@ func reseedAction(c *cli.Context) {
|
|||||||
log.Printf("HTTP server starting on\n")
|
log.Printf("HTTP server starting on\n")
|
||||||
reseedHTTP(c, reseeder)
|
reseedHTTP(c, reseeder)
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func reseedHTTPS(c *cli.Context, tlsCert, tlsKey string, reseeder *reseed.ReseederImpl) {
|
func reseedHTTPS(c *cli.Context, tlsCert, tlsKey string, reseeder *reseed.ReseederImpl) {
|
||||||
|
@@ -8,7 +8,7 @@ import (
|
|||||||
"os/user"
|
"os/user"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli/v3"
|
||||||
"i2pgit.org/idk/reseed-tools/reseed"
|
"i2pgit.org/idk/reseed-tools/reseed"
|
||||||
"i2pgit.org/idk/reseed-tools/su3"
|
"i2pgit.org/idk/reseed-tools/su3"
|
||||||
)
|
)
|
||||||
@@ -35,23 +35,23 @@ func I2PHome() string {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSu3VerifyCommand() cli.Command {
|
func NewSu3VerifyCommand() *cli.Command {
|
||||||
return cli.Command{
|
return &cli.Command{
|
||||||
Name: "verify",
|
Name: "verify",
|
||||||
Usage: "Verify a Su3 file",
|
Usage: "Verify a Su3 file",
|
||||||
Description: "Verify a Su3 file",
|
Description: "Verify a Su3 file",
|
||||||
Action: su3VerifyAction,
|
Action: su3VerifyAction,
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
cli.BoolFlag{
|
&cli.BoolFlag{
|
||||||
Name: "extract",
|
Name: "extract",
|
||||||
Usage: "Also extract the contents of the su3",
|
Usage: "Also extract the contents of the su3",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "signer",
|
Name: "signer",
|
||||||
Value: getDefaultSigner(),
|
Value: getDefaultSigner(),
|
||||||
Usage: "Your su3 signing ID (ex. something@mail.i2p)",
|
Usage: "Your su3 signing ID (ex. something@mail.i2p)",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
&cli.StringFlag{
|
||||||
Name: "keystore",
|
Name: "keystore",
|
||||||
Value: filepath.Join(I2PHome(), "/certificates/reseed"),
|
Value: filepath.Join(I2PHome(), "/certificates/reseed"),
|
||||||
Usage: "Path to the keystore",
|
Usage: "Path to the keystore",
|
||||||
@@ -60,21 +60,21 @@ func NewSu3VerifyCommand() cli.Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func su3VerifyAction(c *cli.Context) {
|
func su3VerifyAction(c *cli.Context) error {
|
||||||
su3File := su3.New()
|
su3File := su3.New()
|
||||||
|
|
||||||
data, err := ioutil.ReadFile(c.Args().Get(0))
|
data, err := ioutil.ReadFile(c.Args().Get(0))
|
||||||
if nil != err {
|
if nil != err {
|
||||||
panic(err)
|
return err
|
||||||
}
|
}
|
||||||
if err := su3File.UnmarshalBinary(data); err != nil {
|
if err := su3File.UnmarshalBinary(data); err != nil {
|
||||||
panic(err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println(su3File.String())
|
fmt.Println(su3File.String())
|
||||||
absPath, err := filepath.Abs(c.String("keystore"))
|
absPath, err := filepath.Abs(c.String("keystore"))
|
||||||
if nil != err {
|
if nil != err {
|
||||||
panic(err)
|
return err
|
||||||
}
|
}
|
||||||
keyStorePath := filepath.Dir(absPath)
|
keyStorePath := filepath.Dir(absPath)
|
||||||
reseedDir := filepath.Base(absPath)
|
reseedDir := filepath.Base(absPath)
|
||||||
@@ -90,11 +90,11 @@ func su3VerifyAction(c *cli.Context) {
|
|||||||
cert, err := ks.DirReseederCertificate(reseedDir, su3File.SignerID)
|
cert, err := ks.DirReseederCertificate(reseedDir, su3File.SignerID)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := su3File.VerifySignature(cert); nil != err {
|
if err := su3File.VerifySignature(cert); nil != err {
|
||||||
panic(err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("Signature is valid for signer '%s'\n", su3File.SignerID)
|
fmt.Printf("Signature is valid for signer '%s'\n", su3File.SignerID)
|
||||||
@@ -103,4 +103,5 @@ func su3VerifyAction(c *cli.Context) {
|
|||||||
// @todo: don't assume zip
|
// @todo: don't assume zip
|
||||||
ioutil.WriteFile("extracted.zip", su3File.BodyBytes(), 0755)
|
ioutil.WriteFile("extracted.zip", su3File.BodyBytes(), 0755)
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
179
docs/DEBIAN.html
Normal file
179
docs/DEBIAN.html
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>
|
||||||
|
I2P Reseed Tools
|
||||||
|
</title>
|
||||||
|
<meta name="author" content="eyedeekay" />
|
||||||
|
<meta name="description" content="reseed-tools" />
|
||||||
|
<meta name="keywords" content="master" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="navbar">
|
||||||
|
<a href="#shownav">
|
||||||
|
Show navigation
|
||||||
|
</a>
|
||||||
|
<div id="shownav">
|
||||||
|
<div id="hidenav">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="..">
|
||||||
|
Up one level ^
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="DEBIAN.html">
|
||||||
|
DEBIAN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="DOCKER.html">
|
||||||
|
DOCKER
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="EXAMPLES.html">
|
||||||
|
EXAMPLES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="PLUGIN.html">
|
||||||
|
PLUGIN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="SERVICES.html">
|
||||||
|
SERVICES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="TLS.html">
|
||||||
|
TLS
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<br>
|
||||||
|
<a href="#hidenav">
|
||||||
|
Hide Navigation
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="returnhome" href="/">
|
||||||
|
/
|
||||||
|
</a>
|
||||||
|
<h1>
|
||||||
|
Debian and Ubuntu Packages
|
||||||
|
</h1>
|
||||||
|
<p>
|
||||||
|
It’s possible to generate a package which is compatible with Debian and Ubuntu,
|
||||||
|
using the command:
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">
|
||||||
|
make checkinstall
|
||||||
|
sudo apt-get install ./reseed-tools_0.2.30-1_amd64.deb
|
||||||
|
</code></pre>
|
||||||
|
<p>
|
||||||
|
This requires you to have
|
||||||
|
<code>
|
||||||
|
fakeroot
|
||||||
|
</code>
|
||||||
|
and
|
||||||
|
<code>
|
||||||
|
checkinstall
|
||||||
|
</code>
|
||||||
|
installed. Use the command
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">
|
||||||
|
sudo apt-get install fakeroot checkinstall
|
||||||
|
</code></pre>
|
||||||
|
<p>
|
||||||
|
to install them.
|
||||||
|
</p>
|
||||||
|
<div id="sourcecode">
|
||||||
|
<span id="sourcehead">
|
||||||
|
<strong>
|
||||||
|
Get the source code:
|
||||||
|
</strong>
|
||||||
|
</span>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://i2pgit.org/idk/reseed-tools">
|
||||||
|
Source Repository: (https://i2pgit.org/idk/reseed-tools)
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="#show">
|
||||||
|
Show license
|
||||||
|
</a>
|
||||||
|
<div id="show">
|
||||||
|
<div id="hide">
|
||||||
|
<pre><code>Copyright (c) 2014 Matt Drollette
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
</code></pre>
|
||||||
|
<a href="#hide">
|
||||||
|
Hide license
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<iframe src="https://snowflake.torproject.org/embed.html" width="320" height="240" frameborder="0" scrolling="no"></iframe>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="https://geti2p.net/">
|
||||||
|
<img src="i2plogo.png"></img>
|
||||||
|
I2P
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
19
docs/DEBIAN.md
Normal file
19
docs/DEBIAN.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# Debian and Ubuntu Packages
|
||||||
|
|
||||||
|
It's possible to generate a package which is compatible with Debian and Ubuntu,
|
||||||
|
using the command:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
|
||||||
|
make checkinstall
|
||||||
|
sudo apt-get install ./reseed-tools_0.2.30-1_amd64.deb
|
||||||
|
```
|
||||||
|
|
||||||
|
This requires you to have `fakeroot` and `checkinstall` installed. Use the command
|
||||||
|
|
||||||
|
```sh
|
||||||
|
|
||||||
|
sudo apt-get install fakeroot checkinstall
|
||||||
|
```
|
||||||
|
|
||||||
|
to install them.
|
@@ -7,6 +7,7 @@
|
|||||||
<meta name="description" content="reseed-tools" />
|
<meta name="description" content="reseed-tools" />
|
||||||
<meta name="keywords" content="master" />
|
<meta name="keywords" content="master" />
|
||||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="navbar">
|
<div id="navbar">
|
||||||
@@ -17,13 +18,32 @@
|
|||||||
<div id="hidenav">
|
<div id="hidenav">
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<a href="index.html">
|
<a href="..">
|
||||||
index
|
Up one level ^
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="CHANGELOG.html">
|
<a href=""></a>
|
||||||
CHANGELOG
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="DEBIAN.html">
|
||||||
|
DEBIAN
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
@@ -36,6 +56,31 @@
|
|||||||
EXAMPLES
|
EXAMPLES
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="PLUGIN.html">
|
||||||
|
PLUGIN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="SERVICES.html">
|
||||||
|
SERVICES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="TLS.html">
|
||||||
|
TLS
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
<a href="#hidenav">
|
<a href="#hidenav">
|
||||||
@@ -44,9 +89,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<h3>
|
<a id="returnhome" href="/">
|
||||||
|
/
|
||||||
|
</a>
|
||||||
|
<h1>
|
||||||
Docker
|
Docker
|
||||||
</h3>
|
</h1>
|
||||||
<p>
|
<p>
|
||||||
To make it easier to deploy reseeds, it is possible to run this software as a
|
To make it easier to deploy reseeds, it is possible to run this software as a
|
||||||
Docker image. Because the software requires access to a network database to host
|
Docker image. Because the software requires access to a network database to host
|
||||||
@@ -57,7 +105,7 @@
|
|||||||
<p>
|
<p>
|
||||||
When you run a reseed under Docker in this fashion, it will automatically
|
When you run a reseed under Docker in this fashion, it will automatically
|
||||||
generate a self-signed certificate for your reseed server in a Docker volume
|
generate a self-signed certificate for your reseed server in a Docker volume
|
||||||
mamed reseed-keys.
|
named reseed-keys.
|
||||||
<em>
|
<em>
|
||||||
Back up this directory
|
Back up this directory
|
||||||
</em>
|
</em>
|
||||||
@@ -65,12 +113,13 @@
|
|||||||
to reproduce.
|
to reproduce.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Please note that Docker is not currently compatible with .onion reseeds unless
|
Additional flags can be passed to the application in the Docker container by
|
||||||
you pass the –network=host tag.
|
appending them to the command. Please note that Docker is not currently
|
||||||
|
compatible with .onion reseeds unless you pass the –network=host tag.
|
||||||
</p>
|
</p>
|
||||||
<h4>
|
<h2>
|
||||||
If I2P is running as your user, do this:
|
If I2P is running as your user, do this:
|
||||||
</h4>
|
</h2>
|
||||||
<pre><code> docker run -itd \
|
<pre><code> docker run -itd \
|
||||||
--name reseed \
|
--name reseed \
|
||||||
--publish 443:8443 \
|
--publish 443:8443 \
|
||||||
@@ -80,9 +129,9 @@
|
|||||||
eyedeekay/reseed \
|
eyedeekay/reseed \
|
||||||
--signer $YOUR_EMAIL_HERE
|
--signer $YOUR_EMAIL_HERE
|
||||||
</code></pre>
|
</code></pre>
|
||||||
<h4>
|
<h2>
|
||||||
If I2P is running as another user, do this:
|
If I2P is running as another user, do this:
|
||||||
</h4>
|
</h2>
|
||||||
<pre><code> docker run -itd \
|
<pre><code> docker run -itd \
|
||||||
--name reseed \
|
--name reseed \
|
||||||
--user $(I2P_UID) \
|
--user $(I2P_UID) \
|
||||||
@@ -94,18 +143,18 @@
|
|||||||
eyedeekay/reseed \
|
eyedeekay/reseed \
|
||||||
--signer $YOUR_EMAIL_HERE
|
--signer $YOUR_EMAIL_HERE
|
||||||
</code></pre>
|
</code></pre>
|
||||||
<h4>
|
<h2>
|
||||||
<strong>
|
<strong>
|
||||||
Debian/Ubuntu and Docker
|
Debian/Ubuntu and Docker
|
||||||
</strong>
|
</strong>
|
||||||
</h4>
|
</h2>
|
||||||
<p>
|
<p>
|
||||||
In many cases I2P will be running as the Debian system user
|
In many cases I2P will be running as the Debian system user
|
||||||
<code>
|
<code>
|
||||||
i2psvc
|
i2psvc
|
||||||
</code>
|
</code>
|
||||||
. This
|
. This
|
||||||
is the case for all installs where Debian’s Advanced Packaging Tool(apt) was
|
is the case for all installs where Debian’s Advanced Packaging Tool(apt) was
|
||||||
used to peform the task. If you used
|
used to peform the task. If you used
|
||||||
<code>
|
<code>
|
||||||
apt-get install
|
apt-get install
|
||||||
@@ -124,6 +173,20 @@
|
|||||||
eyedeekay/reseed \
|
eyedeekay/reseed \
|
||||||
--signer $YOUR_EMAIL_HERE
|
--signer $YOUR_EMAIL_HERE
|
||||||
</code></pre>
|
</code></pre>
|
||||||
|
<div id="sourcecode">
|
||||||
|
<span id="sourcehead">
|
||||||
|
<strong>
|
||||||
|
Get the source code:
|
||||||
|
</strong>
|
||||||
|
</span>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://i2pgit.org/idk/reseed-tools">
|
||||||
|
Source Repository: (https://i2pgit.org/idk/reseed-tools)
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<a href="#show">
|
<a href="#show">
|
||||||
Show license
|
Show license
|
||||||
@@ -161,6 +224,7 @@ THE SOFTWARE.
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<a href="https://geti2p.net/">
|
<a href="https://geti2p.net/">
|
||||||
|
<img src="i2plogo.png"></img>
|
||||||
I2P
|
I2P
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
@@ -1,4 +1,4 @@
|
|||||||
### Docker
|
# Docker
|
||||||
|
|
||||||
To make it easier to deploy reseeds, it is possible to run this software as a
|
To make it easier to deploy reseeds, it is possible to run this software as a
|
||||||
Docker image. Because the software requires access to a network database to host
|
Docker image. Because the software requires access to a network database to host
|
||||||
@@ -8,13 +8,14 @@ and group inside the container as I2P.
|
|||||||
|
|
||||||
When you run a reseed under Docker in this fashion, it will automatically
|
When you run a reseed under Docker in this fashion, it will automatically
|
||||||
generate a self-signed certificate for your reseed server in a Docker volume
|
generate a self-signed certificate for your reseed server in a Docker volume
|
||||||
mamed reseed-keys. *Back up this directory*, if it is lost it is impossible
|
named reseed-keys. *Back up this directory*, if it is lost it is impossible
|
||||||
to reproduce.
|
to reproduce.
|
||||||
|
|
||||||
Please note that Docker is not currently compatible with .onion reseeds unless
|
Additional flags can be passed to the application in the Docker container by
|
||||||
you pass the --network=host tag.
|
appending them to the command. Please note that Docker is not currently
|
||||||
|
compatible with .onion reseeds unless you pass the --network=host tag.
|
||||||
|
|
||||||
#### If I2P is running as your user, do this:
|
## If I2P is running as your user, do this:
|
||||||
|
|
||||||
docker run -itd \
|
docker run -itd \
|
||||||
--name reseed \
|
--name reseed \
|
||||||
@@ -25,7 +26,7 @@ you pass the --network=host tag.
|
|||||||
eyedeekay/reseed \
|
eyedeekay/reseed \
|
||||||
--signer $YOUR_EMAIL_HERE
|
--signer $YOUR_EMAIL_HERE
|
||||||
|
|
||||||
#### If I2P is running as another user, do this:
|
## If I2P is running as another user, do this:
|
||||||
|
|
||||||
docker run -itd \
|
docker run -itd \
|
||||||
--name reseed \
|
--name reseed \
|
||||||
@@ -38,7 +39,7 @@ you pass the --network=host tag.
|
|||||||
eyedeekay/reseed \
|
eyedeekay/reseed \
|
||||||
--signer $YOUR_EMAIL_HERE
|
--signer $YOUR_EMAIL_HERE
|
||||||
|
|
||||||
#### **Debian/Ubuntu and Docker**
|
## **Debian/Ubuntu and Docker**
|
||||||
|
|
||||||
In many cases I2P will be running as the Debian system user ```i2psvc```. This
|
In many cases I2P will be running as the Debian system user ```i2psvc```. This
|
||||||
is the case for all installs where Debian's Advanced Packaging Tool(apt) was
|
is the case for all installs where Debian's Advanced Packaging Tool(apt) was
|
@@ -7,6 +7,7 @@
|
|||||||
<meta name="description" content="reseed-tools" />
|
<meta name="description" content="reseed-tools" />
|
||||||
<meta name="keywords" content="master" />
|
<meta name="keywords" content="master" />
|
||||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="navbar">
|
<div id="navbar">
|
||||||
@@ -17,13 +18,32 @@
|
|||||||
<div id="hidenav">
|
<div id="hidenav">
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<a href="index.html">
|
<a href="..">
|
||||||
index
|
Up one level ^
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="CHANGELOG.html">
|
<a href=""></a>
|
||||||
CHANGELOG
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="DEBIAN.html">
|
||||||
|
DEBIAN
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
@@ -36,6 +56,31 @@
|
|||||||
EXAMPLES
|
EXAMPLES
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="PLUGIN.html">
|
||||||
|
PLUGIN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="SERVICES.html">
|
||||||
|
SERVICES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="TLS.html">
|
||||||
|
TLS
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
<a href="#hidenav">
|
<a href="#hidenav">
|
||||||
@@ -44,6 +89,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<a id="returnhome" href="/">
|
||||||
|
/
|
||||||
|
</a>
|
||||||
<h2>
|
<h2>
|
||||||
Example Commands:
|
Example Commands:
|
||||||
</h2>
|
</h2>
|
||||||
@@ -57,17 +105,6 @@
|
|||||||
</h3>
|
</h3>
|
||||||
<pre><code>./reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --p2p
|
<pre><code>./reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --p2p
|
||||||
</code></pre>
|
</code></pre>
|
||||||
<h3>
|
|
||||||
Without a webserver, standalone, upload a single signed .su3 to github
|
|
||||||
</h3>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
This one isn’t working yet, I’ll get to it eventually, I’ve got a cooler idea now.
|
|
||||||
<code>
|
|
||||||
./reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --github --ghrepo=reseed-tools --ghuser=eyedeekay
|
|
||||||
</code>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<h3>
|
<h3>
|
||||||
Without a webserver, standalone, in-network reseed
|
Without a webserver, standalone, in-network reseed
|
||||||
</h3>
|
</h3>
|
||||||
@@ -83,11 +120,20 @@
|
|||||||
</h3>
|
</h3>
|
||||||
<pre><code>./reseed-tools reseed --tlsHost=your-domain.tld --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --onion --p2p
|
<pre><code>./reseed-tools reseed --tlsHost=your-domain.tld --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --onion --p2p
|
||||||
</code></pre>
|
</code></pre>
|
||||||
<h3>
|
<div id="sourcecode">
|
||||||
Without a webserver, standalone, Regular TLS, OnionV3 with TLS, I2P In-Network reseed, and LibP2P, self-supervising
|
<span id="sourcehead">
|
||||||
</h3>
|
<strong>
|
||||||
<pre><code>./reseed-tools reseed --tlsHost=your-domain.tld --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --onion --p2p --littleboss=start
|
Get the source code:
|
||||||
</code></pre>
|
</strong>
|
||||||
|
</span>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://i2pgit.org/idk/reseed-tools">
|
||||||
|
Source Repository: (https://i2pgit.org/idk/reseed-tools)
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<a href="#show">
|
<a href="#show">
|
||||||
Show license
|
Show license
|
||||||
@@ -125,6 +171,7 @@ THE SOFTWARE.
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<a href="https://geti2p.net/">
|
<a href="https://geti2p.net/">
|
||||||
|
<img src="i2plogo.png"></img>
|
||||||
I2P
|
I2P
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
@@ -13,14 +13,6 @@
|
|||||||
./reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --p2p
|
./reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --p2p
|
||||||
```
|
```
|
||||||
|
|
||||||
### Without a webserver, standalone, upload a single signed .su3 to github
|
|
||||||
|
|
||||||
* This one isn't working yet, I'll get to it eventually, I've got a cooler idea now.
|
|
||||||
|
|
||||||
```
|
|
||||||
./reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --github --ghrepo=reseed-tools --ghuser=eyedeekay
|
|
||||||
```
|
|
||||||
|
|
||||||
### Without a webserver, standalone, in-network reseed
|
### Without a webserver, standalone, in-network reseed
|
||||||
|
|
||||||
```
|
```
|
||||||
@@ -38,9 +30,3 @@
|
|||||||
```
|
```
|
||||||
./reseed-tools reseed --tlsHost=your-domain.tld --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --onion --p2p
|
./reseed-tools reseed --tlsHost=your-domain.tld --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --onion --p2p
|
||||||
```
|
```
|
||||||
|
|
||||||
### Without a webserver, standalone, Regular TLS, OnionV3 with TLS, I2P In-Network reseed, and LibP2P, self-supervising
|
|
||||||
|
|
||||||
```
|
|
||||||
./reseed-tools reseed --tlsHost=your-domain.tld --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --onion --p2p --littleboss=start
|
|
||||||
```
|
|
263
docs/PLUGIN.html
Normal file
263
docs/PLUGIN.html
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>
|
||||||
|
I2P Reseed Tools
|
||||||
|
</title>
|
||||||
|
<meta name="author" content="eyedeekay" />
|
||||||
|
<meta name="description" content="reseed-tools" />
|
||||||
|
<meta name="keywords" content="master" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="navbar">
|
||||||
|
<a href="#shownav">
|
||||||
|
Show navigation
|
||||||
|
</a>
|
||||||
|
<div id="shownav">
|
||||||
|
<div id="hidenav">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="..">
|
||||||
|
Up one level ^
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="DEBIAN.html">
|
||||||
|
DEBIAN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="DOCKER.html">
|
||||||
|
DOCKER
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="EXAMPLES.html">
|
||||||
|
EXAMPLES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="PLUGIN.html">
|
||||||
|
PLUGIN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="SERVICES.html">
|
||||||
|
SERVICES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="TLS.html">
|
||||||
|
TLS
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<br>
|
||||||
|
<a href="#hidenav">
|
||||||
|
Hide Navigation
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="returnhome" href="/">
|
||||||
|
/
|
||||||
|
</a>
|
||||||
|
<h1>
|
||||||
|
Plugin install URL’s
|
||||||
|
</h1>
|
||||||
|
<p>
|
||||||
|
Plugin releases are available inside of i2p at
|
||||||
|
<a href="http://idk.i2p/reseed-tools/">
|
||||||
|
http://idk.i2p/reseed-tools/
|
||||||
|
</a>
|
||||||
|
and via the github mirror at
|
||||||
|
<a href="https://github.com/eyedeekay/reseed-tools/releases">
|
||||||
|
https://github.com/eyedeekay/reseed-tools/releases
|
||||||
|
</a>
|
||||||
|
.
|
||||||
|
These can be installed by adding them on the
|
||||||
|
<a href="http://127.0.0.1:7657/configplugins">
|
||||||
|
http://127.0.0.1:7657/configplugins
|
||||||
|
</a>
|
||||||
|
.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
After installing the plugin, you should immediately edit the
|
||||||
|
<code>
|
||||||
|
$PLUGIN/signer
|
||||||
|
</code>
|
||||||
|
file in order to set your
|
||||||
|
<code>
|
||||||
|
--signer
|
||||||
|
</code>
|
||||||
|
email, which is used to name your keys.
|
||||||
|
You can find the
|
||||||
|
<code>
|
||||||
|
$PLUGIN
|
||||||
|
</code>
|
||||||
|
directory in your I2P config directory, which is
|
||||||
|
usually
|
||||||
|
<code>
|
||||||
|
$HOME/.i2p
|
||||||
|
</code>
|
||||||
|
on Unixes.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
This will allow the developers to contact you if your reseed has issues
|
||||||
|
and will authenticate your reseed to the I2P routers that use it.
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
darwin/amd64:
|
||||||
|
<a href="http://idk.i2p/reseed-tools/reseed-tools-darwin-amd64.su3">
|
||||||
|
http://idk.i2p/reseed-tools/reseed-tools-darwin-amd64.su3
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
darwin/arm64:
|
||||||
|
<a href="http://idk.i2p/reseed-tools/reseed-tools-darwin-arm64.su3">
|
||||||
|
http://idk.i2p/reseed-tools/reseed-tools-darwin-arm64.su3
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
linux/386:
|
||||||
|
<a href="http://idk.i2p/reseed-tools/reseed-tools-linux-386.su3">
|
||||||
|
http://idk.i2p/reseed-tools/reseed-tools-linux-386.su3
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
linux/amd64:
|
||||||
|
<a href="http://idk.i2p/reseed-tools/reseed-tools-linux-amd64.su3">
|
||||||
|
http://idk.i2p/reseed-tools/reseed-tools-linux-amd64.su3
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
linux/arm:
|
||||||
|
<a href="http://idk.i2p/reseed-tools/reseed-tools-linux-arm.su3">
|
||||||
|
http://idk.i2p/reseed-tools/reseed-tools-linux-arm.su3
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
linux/arm64:
|
||||||
|
<a href="http://idk.i2p/reseed-tools/reseed-tools-linux-arm64.su3">
|
||||||
|
http://idk.i2p/reseed-tools/reseed-tools-linux-arm64.su3
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
openbsd/amd64:
|
||||||
|
<a href="http://idk.i2p/reseed-tools/reseed-tools-openbsd-amd64.su3">
|
||||||
|
http://idk.i2p/reseed-tools/reseed-tools-openbsd-amd64.su3
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
freebsd/386:
|
||||||
|
<a href="http://idk.i2p/reseed-tools/reseed-tools-freebsd-386.su3">
|
||||||
|
http://idk.i2p/reseed-tools/reseed-tools-freebsd-386.su3
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
freebsd/amd64:
|
||||||
|
<a href="http://idk.i2p/reseed-tools/reseed-tools-freebsd-amd64.su3">
|
||||||
|
http://idk.i2p/reseed-tools/reseed-tools-freebsd-amd64.su3
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
windows/amd64:
|
||||||
|
<a href="http://idk.i2p/reseed-tools/reseed-tools-windows-amd64.su3">
|
||||||
|
http://idk.i2p/reseed-tools/reseed-tools-windows-amd64.su3
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
windows/386:
|
||||||
|
<a href="http://idk.i2p/reseed-tools/reseed-tools-windows-386.su3">
|
||||||
|
http://idk.i2p/reseed-tools/reseed-tools-windows-386.su3
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div id="sourcecode">
|
||||||
|
<span id="sourcehead">
|
||||||
|
<strong>
|
||||||
|
Get the source code:
|
||||||
|
</strong>
|
||||||
|
</span>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://i2pgit.org/idk/reseed-tools">
|
||||||
|
Source Repository: (https://i2pgit.org/idk/reseed-tools)
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="#show">
|
||||||
|
Show license
|
||||||
|
</a>
|
||||||
|
<div id="show">
|
||||||
|
<div id="hide">
|
||||||
|
<pre><code>Copyright (c) 2014 Matt Drollette
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
</code></pre>
|
||||||
|
<a href="#hide">
|
||||||
|
Hide license
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<iframe src="https://snowflake.torproject.org/embed.html" width="320" height="240" frameborder="0" scrolling="no"></iframe>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="https://geti2p.net/">
|
||||||
|
<img src="i2plogo.png"></img>
|
||||||
|
I2P
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
26
docs/PLUGIN.md
Normal file
26
docs/PLUGIN.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Plugin install URL's
|
||||||
|
|
||||||
|
Plugin releases are available inside of i2p at http://idk.i2p/reseed-tools/
|
||||||
|
and via the github mirror at https://github.com/eyedeekay/reseed-tools/releases.
|
||||||
|
These can be installed by adding them on the
|
||||||
|
[http://127.0.0.1:7657/configplugins](http://127.0.0.1:7657/configplugins).
|
||||||
|
|
||||||
|
After installing the plugin, you should immediately edit the `$PLUGIN/signer`
|
||||||
|
file in order to set your `--signer` email, which is used to name your keys.
|
||||||
|
You can find the `$PLUGIN` directory in your I2P config directory, which is
|
||||||
|
usually `$HOME/.i2p` on Unixes.
|
||||||
|
|
||||||
|
This will allow the developers to contact you if your reseed has issues
|
||||||
|
and will authenticate your reseed to the I2P routers that use it.
|
||||||
|
|
||||||
|
- darwin/amd64: [http://idk.i2p/reseed-tools/reseed-tools-darwin-amd64.su3](http://idk.i2p/reseed-tools/reseed-tools-darwin-amd64.su3)
|
||||||
|
- darwin/arm64: [http://idk.i2p/reseed-tools/reseed-tools-darwin-arm64.su3](http://idk.i2p/reseed-tools/reseed-tools-darwin-arm64.su3)
|
||||||
|
- linux/386: [http://idk.i2p/reseed-tools/reseed-tools-linux-386.su3](http://idk.i2p/reseed-tools/reseed-tools-linux-386.su3)
|
||||||
|
- linux/amd64: [http://idk.i2p/reseed-tools/reseed-tools-linux-amd64.su3](http://idk.i2p/reseed-tools/reseed-tools-linux-amd64.su3)
|
||||||
|
- linux/arm: [http://idk.i2p/reseed-tools/reseed-tools-linux-arm.su3](http://idk.i2p/reseed-tools/reseed-tools-linux-arm.su3)
|
||||||
|
- linux/arm64: [http://idk.i2p/reseed-tools/reseed-tools-linux-arm64.su3](http://idk.i2p/reseed-tools/reseed-tools-linux-arm64.su3)
|
||||||
|
- openbsd/amd64: [http://idk.i2p/reseed-tools/reseed-tools-openbsd-amd64.su3](http://idk.i2p/reseed-tools/reseed-tools-openbsd-amd64.su3)
|
||||||
|
- freebsd/386: [http://idk.i2p/reseed-tools/reseed-tools-freebsd-386.su3](http://idk.i2p/reseed-tools/reseed-tools-freebsd-386.su3)
|
||||||
|
- freebsd/amd64: [http://idk.i2p/reseed-tools/reseed-tools-freebsd-amd64.su3](http://idk.i2p/reseed-tools/reseed-tools-freebsd-amd64.su3)
|
||||||
|
- windows/amd64: [http://idk.i2p/reseed-tools/reseed-tools-windows-amd64.su3](http://idk.i2p/reseed-tools/reseed-tools-windows-amd64.su3)
|
||||||
|
- windows/386: [http://idk.i2p/reseed-tools/reseed-tools-windows-386.su3](http://idk.i2p/reseed-tools/reseed-tools-windows-386.su3)
|
91
docs/README.md
Normal file
91
docs/README.md
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
Configure an I2P Reseed Server Very Rapidly on Debian and Ubuntu
|
||||||
|
================================================================
|
||||||
|
|
||||||
|
It is possible to easily and automatically configure a reseed server
|
||||||
|
with a self-signed certificate on any Debian-based operating system,
|
||||||
|
including Ubuntu and it's downstreams. This is achieved using the `checkinstall`
|
||||||
|
tool to set up the software dependencies and the operating system to
|
||||||
|
run the `I2P` service and the `reseed` service.
|
||||||
|
|
||||||
|
Using a binary package
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
If you do not wish to build from source, you can use a binary package
|
||||||
|
from me. This package is built from this repo with the `make checkinstall`
|
||||||
|
target and uploaded by me. I build it on an up-to-date Debian `sid` system
|
||||||
|
at tag time. It contains a static binary and files for configuring it as a
|
||||||
|
system service.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
|
||||||
|
wget https://github.com/eyedeekay/reseed-tools/releases/download/v0.2.30/reseed-tools_0.2.30-1_amd64.deb
|
||||||
|
# Obtain the checksum from the release web page
|
||||||
|
echo "38941246e980dfc0456e066f514fc96a4ba25d25a7ef993abd75130770fa4d4d reseed-tools_0.2.30-1_amd64.deb" > SHA256SUMS
|
||||||
|
sha256sums -c SHA256SUMS
|
||||||
|
sudo apt-get install ./reseed-tools_0.2.30-1_amd64.deb
|
||||||
|
```
|
||||||
|
|
||||||
|
Building the `.deb` package from the source(Optional)
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
If your software is too old, it's possible that the binary package I build will
|
||||||
|
not work for you. It's very easy to generate your own from the source code in this
|
||||||
|
repository.
|
||||||
|
|
||||||
|
\\**1.** Install the build dependencies
|
||||||
|
|
||||||
|
```sh
|
||||||
|
|
||||||
|
sudo apt-get install fakeroot checkinstall go git make
|
||||||
|
```
|
||||||
|
|
||||||
|
\\**2.** Clone the source code
|
||||||
|
|
||||||
|
```sh
|
||||||
|
|
||||||
|
git clone https://i2pgit.org/idk/reseed-tools ~/go/src/i2pgit.org/idk/reseed-tools
|
||||||
|
```
|
||||||
|
|
||||||
|
\\**3.** Generate the `.deb` package using the `make checkinstall` target
|
||||||
|
|
||||||
|
```sh
|
||||||
|
|
||||||
|
cd ~/go/src/i2pgit.org/idk/reseed-tools
|
||||||
|
make checkinstall
|
||||||
|
```
|
||||||
|
|
||||||
|
\\**4.** Install the `.deb` package
|
||||||
|
|
||||||
|
```sh
|
||||||
|
|
||||||
|
sudo apt-get install ./reseed-tools_*.deb
|
||||||
|
```
|
||||||
|
|
||||||
|
Running the Service
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
\\**1.** First, ensure that the I2P service is already running. The longer the better,
|
||||||
|
if you have to re-start the service, or if the service has very few peers, allow it to
|
||||||
|
run for 24 hours before advancing to step **2.**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
|
||||||
|
sudo systemctl start i2p
|
||||||
|
# or, if you use sysvinit
|
||||||
|
sudo service i2p start
|
||||||
|
```
|
||||||
|
|
||||||
|
\\**2.** Once your I2P router is "Well-Integrated," start the reseed service.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
|
||||||
|
sudo systemctl start reseed
|
||||||
|
# or, if you use sysvinit
|
||||||
|
sudo service reseed start
|
||||||
|
```
|
||||||
|
|
||||||
|
Your reseed will auto-configure with a self-signed certificate on port `:8443`. The
|
||||||
|
certificates themselves are available in `/var/lib/i2p/i2p-config/reseed`. When
|
||||||
|
you are ready, you should copy the `*.crt` files from that directory and share them
|
||||||
|
witth the I2P community on [`zzz.i2p`](http://zzz.i2p). These will allow I2P users
|
||||||
|
to authenticate your reseed services and secure the I2P network.
|
254
docs/SERVICES.html
Normal file
254
docs/SERVICES.html
Normal file
@@ -0,0 +1,254 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>
|
||||||
|
I2P Reseed Tools
|
||||||
|
</title>
|
||||||
|
<meta name="author" content="eyedeekay" />
|
||||||
|
<meta name="description" content="reseed-tools" />
|
||||||
|
<meta name="keywords" content="master" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="navbar">
|
||||||
|
<a href="#shownav">
|
||||||
|
Show navigation
|
||||||
|
</a>
|
||||||
|
<div id="shownav">
|
||||||
|
<div id="hidenav">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="..">
|
||||||
|
Up one level ^
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="DEBIAN.html">
|
||||||
|
DEBIAN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="DOCKER.html">
|
||||||
|
DOCKER
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="EXAMPLES.html">
|
||||||
|
EXAMPLES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="PLUGIN.html">
|
||||||
|
PLUGIN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="SERVICES.html">
|
||||||
|
SERVICES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="TLS.html">
|
||||||
|
TLS
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<br>
|
||||||
|
<a href="#hidenav">
|
||||||
|
Hide Navigation
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="returnhome" href="/">
|
||||||
|
/
|
||||||
|
</a>
|
||||||
|
<h1>
|
||||||
|
Service Integration
|
||||||
|
</h1>
|
||||||
|
<p>
|
||||||
|
Support for running as a system service as part of the reseed package
|
||||||
|
is new. PR’s that improve integration are welcome.
|
||||||
|
</p>
|
||||||
|
<h2>
|
||||||
|
Systemd Service
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
A systemd service is provided which should work with the I2P Debian package
|
||||||
|
when reseed-tools is installed in
|
||||||
|
<code>
|
||||||
|
/usr/bin/reseed-tools
|
||||||
|
</code>
|
||||||
|
. If you install with
|
||||||
|
<code>
|
||||||
|
make install
|
||||||
|
</code>
|
||||||
|
this service is also installed. This service will cause the
|
||||||
|
bundles to regenerate every 12 hours.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The contact email for your reseed should be added in:
|
||||||
|
<code>
|
||||||
|
/etc/systemd/system/reseed.service.d/override.conf
|
||||||
|
</code>
|
||||||
|
.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Self-signed certificates will be auto-generated for these services. To change
|
||||||
|
this you should edit the
|
||||||
|
<code>
|
||||||
|
/etc/systemd/system/reseed.service
|
||||||
|
</code>
|
||||||
|
. For instance:
|
||||||
|
</p>
|
||||||
|
<pre><code>ExecStart=/usr/bin/reseed-tools reseed --yes=true --netdb=/var/lib/i2p/i2p-config/netDb --trustProxy --ip=127.0.0.1
|
||||||
|
</code></pre>
|
||||||
|
<p>
|
||||||
|
to disable self-signed certificate generation.
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
To enable starting the reseed service automatically with the system:
|
||||||
|
<code>
|
||||||
|
sudo systemctl enable reseed.service
|
||||||
|
</code>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
To run the service manually:
|
||||||
|
<code>
|
||||||
|
sudo sysctl start reseed.service
|
||||||
|
</code>
|
||||||
|
<br />
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
To reload the systemd services:
|
||||||
|
<code>
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
</code>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
To view the status/logs:
|
||||||
|
<code>
|
||||||
|
sudo journalctl -u reseed.service
|
||||||
|
</code>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h2>
|
||||||
|
SysV Service
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
An initscript is also provided. The initscript, unlike the systemd service,
|
||||||
|
cannot schedule itself to restart. You should restart the service roughly once
|
||||||
|
a day to ensure that the information does not expire.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
The contact email for your reseed should be added in:
|
||||||
|
<code>
|
||||||
|
/etc/init.d/reseed
|
||||||
|
</code>
|
||||||
|
.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Self-signed certificates will be auto-generated for these services.
|
||||||
|
To change this you should edit the
|
||||||
|
<code>
|
||||||
|
/etc/default/reseed
|
||||||
|
</code>
|
||||||
|
.
|
||||||
|
Create a
|
||||||
|
<code>
|
||||||
|
MORE_OPTIONS=""
|
||||||
|
</code>
|
||||||
|
field. For instance:
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">MORE_OPTIONS="--trustProxy --ip=127.0.0.1"
|
||||||
|
</code></pre>
|
||||||
|
<p>
|
||||||
|
will disable self-signed certificate generation.
|
||||||
|
</p>
|
||||||
|
<div id="sourcecode">
|
||||||
|
<span id="sourcehead">
|
||||||
|
<strong>
|
||||||
|
Get the source code:
|
||||||
|
</strong>
|
||||||
|
</span>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://i2pgit.org/idk/reseed-tools">
|
||||||
|
Source Repository: (https://i2pgit.org/idk/reseed-tools)
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="#show">
|
||||||
|
Show license
|
||||||
|
</a>
|
||||||
|
<div id="show">
|
||||||
|
<div id="hide">
|
||||||
|
<pre><code>Copyright (c) 2014 Matt Drollette
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
</code></pre>
|
||||||
|
<a href="#hide">
|
||||||
|
Hide license
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<iframe src="https://snowflake.torproject.org/embed.html" width="320" height="240" frameborder="0" scrolling="no"></iframe>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="https://geti2p.net/">
|
||||||
|
<img src="i2plogo.png"></img>
|
||||||
|
I2P
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
47
docs/SERVICES.md
Normal file
47
docs/SERVICES.md
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# Service Integration
|
||||||
|
|
||||||
|
Support for running as a system service as part of the reseed package
|
||||||
|
is new. PR's that improve integration are welcome.
|
||||||
|
|
||||||
|
## Systemd Service
|
||||||
|
|
||||||
|
A systemd service is provided which should work with the I2P Debian package
|
||||||
|
when reseed-tools is installed in `/usr/bin/reseed-tools`. If you install with
|
||||||
|
`make install` this service is also installed. This service will cause the
|
||||||
|
bundles to regenerate every 12 hours.
|
||||||
|
|
||||||
|
The contact email for your reseed should be added in:
|
||||||
|
`/etc/systemd/system/reseed.service.d/override.conf`.
|
||||||
|
|
||||||
|
Self-signed certificates will be auto-generated for these services. To change
|
||||||
|
this you should edit the `/etc/systemd/system/reseed.service`. For instance:
|
||||||
|
|
||||||
|
```
|
||||||
|
ExecStart=/usr/bin/reseed-tools reseed --yes=true --netdb=/var/lib/i2p/i2p-config/netDb --trustProxy --ip=127.0.0.1
|
||||||
|
```
|
||||||
|
|
||||||
|
to disable self-signed certificate generation.
|
||||||
|
|
||||||
|
- To enable starting the reseed service automatically with the system: `sudo systemctl enable reseed.service`
|
||||||
|
- To run the service manually: `sudo sysctl start reseed.service`
|
||||||
|
- To reload the systemd services: `sudo systemctl daemon-reload`
|
||||||
|
- To view the status/logs: `sudo journalctl -u reseed.service`
|
||||||
|
|
||||||
|
## SysV Service
|
||||||
|
|
||||||
|
An initscript is also provided. The initscript, unlike the systemd service,
|
||||||
|
cannot schedule itself to restart. You should restart the service roughly once
|
||||||
|
a day to ensure that the information does not expire.
|
||||||
|
|
||||||
|
The contact email for your reseed should be added in:
|
||||||
|
`/etc/init.d/reseed`.
|
||||||
|
|
||||||
|
Self-signed certificates will be auto-generated for these services.
|
||||||
|
To change this you should edit the `/etc/default/reseed`.
|
||||||
|
Create a `MORE_OPTIONS=""` field. For instance:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
MORE_OPTIONS="--trustProxy --ip=127.0.0.1"
|
||||||
|
```
|
||||||
|
|
||||||
|
will disable self-signed certificate generation.
|
263
docs/TLS.html
Normal file
263
docs/TLS.html
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>
|
||||||
|
I2P Reseed Tools
|
||||||
|
</title>
|
||||||
|
<meta name="author" content="eyedeekay" />
|
||||||
|
<meta name="description" content="reseed-tools" />
|
||||||
|
<meta name="keywords" content="master" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="navbar">
|
||||||
|
<a href="#shownav">
|
||||||
|
Show navigation
|
||||||
|
</a>
|
||||||
|
<div id="shownav">
|
||||||
|
<div id="hidenav">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="..">
|
||||||
|
Up one level ^
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="DEBIAN.html">
|
||||||
|
DEBIAN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="DOCKER.html">
|
||||||
|
DOCKER
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="EXAMPLES.html">
|
||||||
|
EXAMPLES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="PLUGIN.html">
|
||||||
|
PLUGIN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="SERVICES.html">
|
||||||
|
SERVICES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="TLS.html">
|
||||||
|
TLS
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<br>
|
||||||
|
<a href="#hidenav">
|
||||||
|
Hide Navigation
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="returnhome" href="/">
|
||||||
|
/
|
||||||
|
</a>
|
||||||
|
<h1>
|
||||||
|
TLS Configuration for your Reseed Server
|
||||||
|
</h1>
|
||||||
|
<p>
|
||||||
|
By default,
|
||||||
|
<code>
|
||||||
|
reseed-tools
|
||||||
|
</code>
|
||||||
|
will generate self-signed certificates for your reseed service.
|
||||||
|
This is so that it can use TLS by default, and so that it can offer self-signed certificates when operating in
|
||||||
|
<code>
|
||||||
|
.onion
|
||||||
|
</code>
|
||||||
|
mode.
|
||||||
|
It is also possible to configure
|
||||||
|
<code>
|
||||||
|
reseed-tools
|
||||||
|
</code>
|
||||||
|
without TLS certificates,
|
||||||
|
or to configure it to use ACME in order to automtically obtain a certificate from Let’s Encrypt.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
I2P does not rely on TLS Certificate Authorities to authenticate reseed servers.
|
||||||
|
Instead, the certificates are effectively “Pinned” in the software, after manual review by the I2P developers and the community.
|
||||||
|
It is acceptable to use self-signed certificates in this fashion because they are not summarily trusted.
|
||||||
|
A self-signed certificate which is not configured in the I2P software will not work when serving a reseed to an I2P router.
|
||||||
|
</p>
|
||||||
|
<h2>
|
||||||
|
Disable TLS
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
If you do this, it is highly recommended that you use a reverse proxy such as
|
||||||
|
<code>
|
||||||
|
Apache2
|
||||||
|
</code>
|
||||||
|
or
|
||||||
|
<code>
|
||||||
|
nginx
|
||||||
|
</code>
|
||||||
|
to provide a TLS connection to clients.
|
||||||
|
Alternatively, you could run
|
||||||
|
<code>
|
||||||
|
reseed-tools
|
||||||
|
</code>
|
||||||
|
as an
|
||||||
|
<code>
|
||||||
|
.onion
|
||||||
|
</code>
|
||||||
|
service and rely on Tor for encryption and authentication.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You can disable automatic TLS configuration with the
|
||||||
|
<code>
|
||||||
|
--trustProxy
|
||||||
|
</code>
|
||||||
|
flag like this:
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">
|
||||||
|
./reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --trustProxy --ip=127.0.0.1
|
||||||
|
</code></pre>
|
||||||
|
<h2>
|
||||||
|
Setup Self-Signed TLS non-interactively
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
If you don’t want to interactively configure TLS but still want to use self-signed certificates, you can pass the
|
||||||
|
<code>
|
||||||
|
--yes
|
||||||
|
</code>
|
||||||
|
flag, which will use the defaults for all config values.
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">
|
||||||
|
./reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --yes
|
||||||
|
</code></pre>
|
||||||
|
<h2>
|
||||||
|
Use ACME to acquire TLS certificate
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
Instead of self-signed certificates, if you want to chain up to a TLS CA, you can.
|
||||||
|
To automate this process using an ACME CA, like Let’s Encrypt, you can use the
|
||||||
|
<code>
|
||||||
|
--acme
|
||||||
|
</code>
|
||||||
|
flag.
|
||||||
|
Be sure to change the
|
||||||
|
<code>
|
||||||
|
--acmeserver
|
||||||
|
</code>
|
||||||
|
option in order to use a
|
||||||
|
<strong>
|
||||||
|
production
|
||||||
|
</strong>
|
||||||
|
ACME server, as
|
||||||
|
the software defaults to a
|
||||||
|
<strong>
|
||||||
|
staging
|
||||||
|
</strong>
|
||||||
|
ACME server for testing purposes.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
This functionality is new and may have issues. Please file bug reports at (i2pgit)[
|
||||||
|
<a href="https://i2pgit.org/idk/reseed-tools)">
|
||||||
|
https://i2pgit.org/idk/reseed-tools)
|
||||||
|
</a>
|
||||||
|
or
|
||||||
|
<a href="https://github.com/eyedeekay/reseed-tools">
|
||||||
|
github
|
||||||
|
</a>
|
||||||
|
.
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">
|
||||||
|
./reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --acme --acmeserver="https://acme-v02.api.letsencrypt.org/directory"
|
||||||
|
</code></pre>
|
||||||
|
<div id="sourcecode">
|
||||||
|
<span id="sourcehead">
|
||||||
|
<strong>
|
||||||
|
Get the source code:
|
||||||
|
</strong>
|
||||||
|
</span>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://i2pgit.org/idk/reseed-tools">
|
||||||
|
Source Repository: (https://i2pgit.org/idk/reseed-tools)
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="#show">
|
||||||
|
Show license
|
||||||
|
</a>
|
||||||
|
<div id="show">
|
||||||
|
<div id="hide">
|
||||||
|
<pre><code>Copyright (c) 2014 Matt Drollette
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
</code></pre>
|
||||||
|
<a href="#hide">
|
||||||
|
Hide license
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<iframe src="https://snowflake.torproject.org/embed.html" width="320" height="240" frameborder="0" scrolling="no"></iframe>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="https://geti2p.net/">
|
||||||
|
<img src="i2plogo.png"></img>
|
||||||
|
I2P
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
50
docs/TLS.md
Normal file
50
docs/TLS.md
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
TLS Configuration for your Reseed Server
|
||||||
|
========================================
|
||||||
|
|
||||||
|
By default, `reseed-tools` will generate self-signed certificates for your reseed service.
|
||||||
|
This is so that it can use TLS by default, and so that it can offer self-signed certificates when operating in `.onion` mode.
|
||||||
|
It is also possible to configure `reseed-tools` without TLS certificates,
|
||||||
|
or to configure it to use ACME in order to automtically obtain a certificate from Let's Encrypt.
|
||||||
|
|
||||||
|
I2P does not rely on TLS Certificate Authorities to authenticate reseed servers.
|
||||||
|
Instead, the certificates are effectively "Pinned" in the software, after manual review by the I2P developers and the community.
|
||||||
|
It is acceptable to use self-signed certificates in this fashion because they are not summarily trusted.
|
||||||
|
A self-signed certificate which is not configured in the I2P software will not work when serving a reseed to an I2P router.
|
||||||
|
|
||||||
|
Disable TLS
|
||||||
|
-----------
|
||||||
|
|
||||||
|
If you do this, it is highly recommended that you use a reverse proxy such as `Apache2` or `nginx` to provide a TLS connection to clients.
|
||||||
|
Alternatively, you could run `reseed-tools` as an `.onion` service and rely on Tor for encryption and authentication.
|
||||||
|
|
||||||
|
You can disable automatic TLS configuration with the `--trustProxy` flag like this:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
|
||||||
|
./reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --trustProxy --ip=127.0.0.1
|
||||||
|
```
|
||||||
|
|
||||||
|
Setup Self-Signed TLS non-interactively
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
If you don't want to interactively configure TLS but still want to use self-signed certificates, you can pass the `--yes` flag, which will use the defaults for all config values.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
|
||||||
|
./reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --yes
|
||||||
|
```
|
||||||
|
|
||||||
|
Use ACME to acquire TLS certificate
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
Instead of self-signed certificates, if you want to chain up to a TLS CA, you can.
|
||||||
|
To automate this process using an ACME CA, like Let's Encrypt, you can use the `--acme` flag.
|
||||||
|
Be sure to change the `--acmeserver` option in order to use a **production** ACME server, as
|
||||||
|
the software defaults to a **staging** ACME server for testing purposes.
|
||||||
|
|
||||||
|
This functionality is new and may have issues. Please file bug reports at (i2pgit)[https://i2pgit.org/idk/reseed-tools) or [github](https://github.com/eyedeekay/reseed-tools).
|
||||||
|
|
||||||
|
```sh
|
||||||
|
|
||||||
|
./reseed-tools reseed --signer=you@mail.i2p --netdb=/home/i2p/.i2p/netDb --acme --acmeserver="https://acme-v02.api.letsencrypt.org/directory"
|
||||||
|
```
|
318
docs/index.html
Normal file
318
docs/index.html
Normal file
@@ -0,0 +1,318 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>
|
||||||
|
I2P Reseed Tools
|
||||||
|
</title>
|
||||||
|
<meta name="author" content="eyedeekay" />
|
||||||
|
<meta name="description" content="reseed-tools" />
|
||||||
|
<meta name="keywords" content="master" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="navbar">
|
||||||
|
<a href="#shownav">
|
||||||
|
Show navigation
|
||||||
|
</a>
|
||||||
|
<div id="shownav">
|
||||||
|
<div id="hidenav">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="..">
|
||||||
|
Up one level ^
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href=""></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="DEBIAN.html">
|
||||||
|
DEBIAN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="DOCKER.html">
|
||||||
|
DOCKER
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="EXAMPLES.html">
|
||||||
|
EXAMPLES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="PLUGIN.html">
|
||||||
|
PLUGIN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="SERVICES.html">
|
||||||
|
SERVICES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="TLS.html">
|
||||||
|
TLS
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<br>
|
||||||
|
<a href="#hidenav">
|
||||||
|
Hide Navigation
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a id="returnhome" href="/">
|
||||||
|
/
|
||||||
|
</a>
|
||||||
|
<h1>
|
||||||
|
Configure an I2P Reseed Server Very Rapidly on Debian and Ubuntu
|
||||||
|
</h1>
|
||||||
|
<p>
|
||||||
|
It is possible to easily and automatically configure a reseed server
|
||||||
|
with a self-signed certificate on any Debian-based operating system,
|
||||||
|
including Ubuntu and it’s downstreams. This is achieved using the
|
||||||
|
<code>
|
||||||
|
checkinstall
|
||||||
|
</code>
|
||||||
|
tool to set up the software dependencies and the operating system to
|
||||||
|
run the
|
||||||
|
<code>
|
||||||
|
I2P
|
||||||
|
</code>
|
||||||
|
service and the
|
||||||
|
<code>
|
||||||
|
reseed
|
||||||
|
</code>
|
||||||
|
service.
|
||||||
|
</p>
|
||||||
|
<h2>
|
||||||
|
Using a binary package
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
If you do not wish to build from source, you can use a binary package
|
||||||
|
from me. This package is built from this repo with the
|
||||||
|
<code>
|
||||||
|
make checkinstall
|
||||||
|
</code>
|
||||||
|
target and uploaded by me. I build it on an up-to-date Debian
|
||||||
|
<code>
|
||||||
|
sid
|
||||||
|
</code>
|
||||||
|
system
|
||||||
|
at tag time. It contains a static binary and files for configuring it as a
|
||||||
|
system service.
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">
|
||||||
|
wget https://github.com/eyedeekay/reseed-tools/releases/download/v0.2.30/reseed-tools_0.2.30-1_amd64.deb
|
||||||
|
# Obtain the checksum from the release web page
|
||||||
|
echo "38941246e980dfc0456e066f514fc96a4ba25d25a7ef993abd75130770fa4d4d reseed-tools_0.2.30-1_amd64.deb" > SHA256SUMS
|
||||||
|
sha256sums -c SHA256SUMS
|
||||||
|
sudo apt-get install ./reseed-tools_0.2.30-1_amd64.deb
|
||||||
|
</code></pre>
|
||||||
|
<h2>
|
||||||
|
Building the
|
||||||
|
<code>
|
||||||
|
.deb
|
||||||
|
</code>
|
||||||
|
package from the source(Optional)
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
If your software is too old, it’s possible that the binary package I build will
|
||||||
|
not work for you. It’s very easy to generate your own from the source code in this
|
||||||
|
repository.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
\
|
||||||
|
<strong>
|
||||||
|
1.
|
||||||
|
</strong>
|
||||||
|
Install the build dependencies
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">
|
||||||
|
sudo apt-get install fakeroot checkinstall go git make
|
||||||
|
</code></pre>
|
||||||
|
<p>
|
||||||
|
\
|
||||||
|
<strong>
|
||||||
|
2.
|
||||||
|
</strong>
|
||||||
|
Clone the source code
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">
|
||||||
|
git clone https://i2pgit.org/idk/reseed-tools ~/go/src/i2pgit.org/idk/reseed-tools
|
||||||
|
</code></pre>
|
||||||
|
<p>
|
||||||
|
\
|
||||||
|
<strong>
|
||||||
|
3.
|
||||||
|
</strong>
|
||||||
|
Generate the
|
||||||
|
<code>
|
||||||
|
.deb
|
||||||
|
</code>
|
||||||
|
package using the
|
||||||
|
<code>
|
||||||
|
make checkinstall
|
||||||
|
</code>
|
||||||
|
target
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">
|
||||||
|
cd ~/go/src/i2pgit.org/idk/reseed-tools
|
||||||
|
make checkinstall
|
||||||
|
</code></pre>
|
||||||
|
<p>
|
||||||
|
\
|
||||||
|
<strong>
|
||||||
|
4.
|
||||||
|
</strong>
|
||||||
|
Install the
|
||||||
|
<code>
|
||||||
|
.deb
|
||||||
|
</code>
|
||||||
|
package
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">
|
||||||
|
sudo apt-get install ./reseed-tools_*.deb
|
||||||
|
</code></pre>
|
||||||
|
<h2>
|
||||||
|
Running the Service
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
\
|
||||||
|
<strong>
|
||||||
|
1.
|
||||||
|
</strong>
|
||||||
|
First, ensure that the I2P service is already running. The longer the better,
|
||||||
|
if you have to re-start the service, or if the service has very few peers, allow it to
|
||||||
|
run for 24 hours before advancing to step
|
||||||
|
<strong>
|
||||||
|
2.
|
||||||
|
</strong>
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">
|
||||||
|
sudo systemctl start i2p
|
||||||
|
# or, if you use sysvinit
|
||||||
|
sudo service i2p start
|
||||||
|
</code></pre>
|
||||||
|
<p>
|
||||||
|
\
|
||||||
|
<strong>
|
||||||
|
2.
|
||||||
|
</strong>
|
||||||
|
Once your I2P router is “Well-Integrated,” start the reseed service.
|
||||||
|
</p>
|
||||||
|
<pre><code class="language-sh">
|
||||||
|
sudo systemctl start reseed
|
||||||
|
# or, if you use sysvinit
|
||||||
|
sudo service reseed start
|
||||||
|
</code></pre>
|
||||||
|
<p>
|
||||||
|
Your reseed will auto-configure with a self-signed certificate on port
|
||||||
|
<code>
|
||||||
|
:8443
|
||||||
|
</code>
|
||||||
|
. The
|
||||||
|
certificates themselves are available in
|
||||||
|
<code>
|
||||||
|
/var/lib/i2p/i2p-config/reseed
|
||||||
|
</code>
|
||||||
|
. When
|
||||||
|
you are ready, you should copy the
|
||||||
|
<code>
|
||||||
|
*.crt
|
||||||
|
</code>
|
||||||
|
files from that directory and share them
|
||||||
|
witth the I2P community on
|
||||||
|
<a href="http://zzz.i2p">
|
||||||
|
<code>
|
||||||
|
zzz.i2p
|
||||||
|
</code>
|
||||||
|
</a>
|
||||||
|
. These will allow I2P users
|
||||||
|
to authenticate your reseed services and secure the I2P network.
|
||||||
|
</p>
|
||||||
|
<div id="sourcecode">
|
||||||
|
<span id="sourcehead">
|
||||||
|
<strong>
|
||||||
|
Get the source code:
|
||||||
|
</strong>
|
||||||
|
</span>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://i2pgit.org/idk/reseed-tools">
|
||||||
|
Source Repository: (https://i2pgit.org/idk/reseed-tools)
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="#show">
|
||||||
|
Show license
|
||||||
|
</a>
|
||||||
|
<div id="show">
|
||||||
|
<div id="hide">
|
||||||
|
<pre><code>Copyright (c) 2014 Matt Drollette
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
</code></pre>
|
||||||
|
<a href="#hide">
|
||||||
|
Hide license
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<iframe src="https://snowflake.torproject.org/embed.html" width="320" height="240" frameborder="0" scrolling="no"></iframe>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="https://geti2p.net/">
|
||||||
|
<img src="i2plogo.png"></img>
|
||||||
|
I2P
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
15
docs/showhider.css
Normal file
15
docs/showhider.css
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/* edgar showhider CSS file */
|
||||||
|
#show {display:none; }
|
||||||
|
#hide {display:block; }
|
||||||
|
#show:target {display: block; }
|
||||||
|
#hide:target {display: none; }
|
||||||
|
|
||||||
|
#shownav {display:none; }
|
||||||
|
#hidenav {display:block; }
|
||||||
|
#shownav:target {display: block; }
|
||||||
|
#hidenav:target {display: none; }
|
||||||
|
|
||||||
|
#donate {display:none; }
|
||||||
|
#hidedonate {display:block; }
|
||||||
|
#donate:target {display: block; }
|
||||||
|
#hidedonate:target {display: none; }
|
165
docs/style.css
Normal file
165
docs/style.css
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
/* edgar default CSS file */
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: "Roboto";
|
||||||
|
font-family: monospace;
|
||||||
|
text-align: justify;
|
||||||
|
background-color: #373636;
|
||||||
|
color: whitesmoke;
|
||||||
|
font-size: 1.15em;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
width: 55%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol {
|
||||||
|
width: 55%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-top: 1%;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
max-width: 90%;
|
||||||
|
margin-top: 1%;
|
||||||
|
margin-left: 3%;
|
||||||
|
margin-right: 3%;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
float: left;
|
||||||
|
top: 5%;
|
||||||
|
left: 5%;
|
||||||
|
max-width: 60%;
|
||||||
|
display: inline;
|
||||||
|
padding-right: 2%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inline {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-button:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-button:active {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
font-family: monospace;
|
||||||
|
border-radius: 5%;
|
||||||
|
padding: 1%;
|
||||||
|
border-color: darkgray;
|
||||||
|
font-size: .9em;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #C6D9FE;
|
||||||
|
padding: 1%;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li {
|
||||||
|
color: #C6D9FE;
|
||||||
|
}
|
||||||
|
|
||||||
|
iframe {
|
||||||
|
background: aliceblue;
|
||||||
|
border-radius: 15%;
|
||||||
|
margin: 2%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
width: 36vw;
|
||||||
|
height: 64vh;
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.editor-toolbar a {
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none !important;
|
||||||
|
color: whitesmoke !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#feed {
|
||||||
|
width: 60vw;
|
||||||
|
height: unset !important;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
float: right;
|
||||||
|
background-color: #373636;
|
||||||
|
color: whitesmoke;
|
||||||
|
border: #C6D9FE solid 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thread-post,
|
||||||
|
.thread {
|
||||||
|
color: whitesmoke !important;
|
||||||
|
background-color: #373636;
|
||||||
|
border: 1px solid darkgray;
|
||||||
|
font-size: inherit;
|
||||||
|
padding-top: 1%;
|
||||||
|
padding-bottom: 1%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thread-post {
|
||||||
|
margin-left: 4%;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
text-align: center;
|
||||||
|
color: whitesmoke !important;
|
||||||
|
background-color: #373636;
|
||||||
|
border: 1px solid darkgray;
|
||||||
|
font: normal normal normal 14px/1 FontAwesome;
|
||||||
|
font-size: inherit;
|
||||||
|
padding-top: 1%;
|
||||||
|
padding-bottom: 1%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thread-hash {
|
||||||
|
text-align: right;
|
||||||
|
color: whitesmoke !important;
|
||||||
|
background-color: #373636;
|
||||||
|
border: 1px solid darkgray;
|
||||||
|
font-size: inherit;
|
||||||
|
padding-top: 1%;
|
||||||
|
padding-bottom: 1%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-body {
|
||||||
|
text-align: left;
|
||||||
|
color: whitesmoke !important;
|
||||||
|
font-size: inherit;
|
||||||
|
padding-top: 1%;
|
||||||
|
padding-bottom: 1%;
|
||||||
|
}
|
||||||
|
#show {display:none; }
|
||||||
|
#hide {display:block; }
|
||||||
|
#show:target {display: block; }
|
||||||
|
#hide:target {display: none; }
|
||||||
|
|
||||||
|
#shownav {display:none; }
|
||||||
|
#hidenav {display:block; }
|
||||||
|
#shownav:target {display: block; }
|
||||||
|
#hidenav:target {display: none; }
|
||||||
|
|
||||||
|
#navbar {
|
||||||
|
float: right;
|
||||||
|
width: 15%;
|
||||||
|
}
|
||||||
|
#returnhome {
|
||||||
|
font-size: xxx-large;
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
display: inline;
|
||||||
|
}
|
@@ -1,11 +1,11 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
### BEGIN INIT INFO
|
### BEGIN INIT INFO
|
||||||
# Provides: samcatd
|
# Provides: reseed
|
||||||
# Required-Start: $local_fs $network $named $time $syslog
|
# Required-Start: $local_fs $network $named $time $syslog
|
||||||
# Required-Stop: $local_fs $network $named $time $syslog
|
# Required-Stop: $local_fs $network $named $time $syslog
|
||||||
# Default-Start: 2 3 4 5
|
# Default-Start: 2 3 4 5
|
||||||
# Default-Stop: 0 1 6
|
# Default-Stop: 0 1 6
|
||||||
# Description: <DESCRIPTION>
|
# Description: an I2P reseed server
|
||||||
### END INIT INFO
|
### END INIT INFO
|
||||||
|
|
||||||
SCRIPT='/usr/bin/reseed-tools'
|
SCRIPT='/usr/bin/reseed-tools'
|
||||||
|
15
go.mod
15
go.mod
@@ -1,13 +1,14 @@
|
|||||||
module i2pgit.org/idk/reseed-tools
|
module i2pgit.org/idk/reseed-tools
|
||||||
|
|
||||||
go 1.13
|
go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/cretz/bine v0.1.0
|
github.com/cretz/bine v0.2.0
|
||||||
github.com/eyedeekay/checki2cp v0.0.21
|
github.com/eyedeekay/checki2cp v0.0.21
|
||||||
github.com/eyedeekay/go-i2pd v0.0.0-20220213070306-9807541b2dfc
|
github.com/eyedeekay/go-i2pd v0.0.0-20220213070306-9807541b2dfc
|
||||||
github.com/eyedeekay/i2pkeys v0.0.0-20220310055120-b97558c06ac8
|
github.com/eyedeekay/i2pkeys v0.33.0
|
||||||
github.com/eyedeekay/sam3 v0.33.2
|
github.com/eyedeekay/sam3 v0.33.5
|
||||||
|
github.com/eyedeekay/unembed v0.0.0-20230123014222-9916b121855b
|
||||||
github.com/go-acme/lego/v4 v4.3.1
|
github.com/go-acme/lego/v4 v4.3.1
|
||||||
github.com/gorilla/handlers v1.5.1
|
github.com/gorilla/handlers v1.5.1
|
||||||
github.com/justinas/alice v1.2.0
|
github.com/justinas/alice v1.2.0
|
||||||
@@ -16,9 +17,10 @@ require (
|
|||||||
github.com/libp2p/go-libp2p-gostream v0.3.1
|
github.com/libp2p/go-libp2p-gostream v0.3.1
|
||||||
github.com/libp2p/go-libp2p-http v0.2.0
|
github.com/libp2p/go-libp2p-http v0.2.0
|
||||||
github.com/throttled/throttled/v2 v2.7.1
|
github.com/throttled/throttled/v2 v2.7.1
|
||||||
github.com/urfave/cli v1.22.5
|
github.com/urfave/cli/v3 v3.0.0-alpha
|
||||||
gitlab.com/golang-commonmark/markdown v0.0.0-20191127184510-91b5b3c99c19
|
gitlab.com/golang-commonmark/markdown v0.0.0-20191127184510-91b5b3c99c19
|
||||||
golang.org/x/text v0.3.5
|
golang.org/x/crypto v0.5.0 // indirect
|
||||||
|
golang.org/x/text v0.6.0
|
||||||
)
|
)
|
||||||
|
|
||||||
replace github.com/libp2p/go-libp2p => github.com/libp2p/go-libp2p v0.13.0
|
replace github.com/libp2p/go-libp2p => github.com/libp2p/go-libp2p v0.13.0
|
||||||
@@ -29,4 +31,3 @@ replace github.com/libp2p/go-libp2p-gostream => github.com/libp2p/go-libp2p-gost
|
|||||||
|
|
||||||
replace github.com/libp2p/go-libp2p-http => github.com/libp2p/go-libp2p-http v0.2.0
|
replace github.com/libp2p/go-libp2p-http => github.com/libp2p/go-libp2p-http v0.2.0
|
||||||
|
|
||||||
//replace github.com/eyedeekay/go-i2pd v0.0.0-20220213070306-9807541b2dfc => ./go-i2pd
|
|
||||||
|
68
go.sum
68
go.sum
@@ -40,8 +40,9 @@ github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQ
|
|||||||
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
|
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
|
||||||
github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvdeRAgDr0izn4z5Ij88=
|
github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvdeRAgDr0izn4z5Ij88=
|
||||||
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
|
||||||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
github.com/BurntSushi/toml v1.1.0 h1:ksErzDEI1khOiGPgpwuI7x2ebx/uXQNw7xJpn9Eq1+I=
|
||||||
|
github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||||
github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks=
|
github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks=
|
||||||
@@ -101,10 +102,11 @@ github.com/cpu/goacmedns v0.1.1/go.mod h1:MuaouqEhPAHxsbqjgnck5zeghuwBP1dLnPoobe
|
|||||||
github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
|
github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
|
||||||
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
|
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
|
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/cretz/bine v0.1.0 h1:1/fvhLE+fk0bPzjdO5Ci+0ComYxEMuB1JhM4X5skT3g=
|
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
|
||||||
github.com/cretz/bine v0.1.0/go.mod h1:6PF6fWAvYtwjRGkAuDEJeWNOv3a2hUouSP/yRYXmvHw=
|
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
|
github.com/cretz/bine v0.2.0 h1:8GiDRGlTgz+o8H9DSnsl+5MeBK4HsExxgl6WgzOCuZo=
|
||||||
|
github.com/cretz/bine v0.2.0/go.mod h1:WU4o9QR9wWp8AVKtTM1XD5vUHkEqnf2vVSo6dBqbetI=
|
||||||
github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
|
github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4=
|
||||||
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
@@ -142,13 +144,15 @@ github.com/eyedeekay/go-i2pd v0.0.0-20220213070306-9807541b2dfc/go.mod h1:Yg8xCW
|
|||||||
github.com/eyedeekay/goSam v0.32.31-0.20210122211817-f97683379f23/go.mod h1:UgJnih/LpotwKriwVPOEa6yPDM2NDdVrKfLtS5DOLPE=
|
github.com/eyedeekay/goSam v0.32.31-0.20210122211817-f97683379f23/go.mod h1:UgJnih/LpotwKriwVPOEa6yPDM2NDdVrKfLtS5DOLPE=
|
||||||
github.com/eyedeekay/i2pd v0.3.0-1stbinrelease.0.20210702172028-5d01ee95810a/go.mod h1:4qJhWn+yNrWRbqFHhU8kl7JgbcW1hm3PMgvlPlxO3gg=
|
github.com/eyedeekay/i2pd v0.3.0-1stbinrelease.0.20210702172028-5d01ee95810a/go.mod h1:4qJhWn+yNrWRbqFHhU8kl7JgbcW1hm3PMgvlPlxO3gg=
|
||||||
github.com/eyedeekay/i2pkeys v0.0.0-20220310052025-204d4ae6dcae/go.mod h1:W9KCm9lqZ+Ozwl3dwcgnpPXAML97+I8Jiht7o5A8YBM=
|
github.com/eyedeekay/i2pkeys v0.0.0-20220310052025-204d4ae6dcae/go.mod h1:W9KCm9lqZ+Ozwl3dwcgnpPXAML97+I8Jiht7o5A8YBM=
|
||||||
github.com/eyedeekay/i2pkeys v0.0.0-20220310055120-b97558c06ac8 h1:9QLD6ZWn1Evc0bT971aArjkit94+s5FMc2stDfEpen4=
|
github.com/eyedeekay/i2pkeys v0.33.0 h1:5SzUyWxNjV6AvYv/WaI8J4dSgAfv7/WEps6pDLe2YSs=
|
||||||
github.com/eyedeekay/i2pkeys v0.0.0-20220310055120-b97558c06ac8/go.mod h1:W9KCm9lqZ+Ozwl3dwcgnpPXAML97+I8Jiht7o5A8YBM=
|
github.com/eyedeekay/i2pkeys v0.33.0/go.mod h1:W9KCm9lqZ+Ozwl3dwcgnpPXAML97+I8Jiht7o5A8YBM=
|
||||||
github.com/eyedeekay/ramp v0.0.0-20190429201811-305b382042ab/go.mod h1:h7mvUAMgZ/rtRDUOkvKTK+8LnDMeUhJSoa5EPdB51fc=
|
github.com/eyedeekay/ramp v0.0.0-20190429201811-305b382042ab/go.mod h1:h7mvUAMgZ/rtRDUOkvKTK+8LnDMeUhJSoa5EPdB51fc=
|
||||||
github.com/eyedeekay/sam3 v0.32.2/go.mod h1:Y3igFVzN4ybqkkpfUWULGhw7WRp8lieq0ORXbLBbcZM=
|
github.com/eyedeekay/sam3 v0.32.2/go.mod h1:Y3igFVzN4ybqkkpfUWULGhw7WRp8lieq0ORXbLBbcZM=
|
||||||
github.com/eyedeekay/sam3 v0.32.32/go.mod h1:qRA9KIIVxbrHlkj+ZB+OoxFGFgdKeGp1vSgPw26eOVU=
|
github.com/eyedeekay/sam3 v0.32.32/go.mod h1:qRA9KIIVxbrHlkj+ZB+OoxFGFgdKeGp1vSgPw26eOVU=
|
||||||
github.com/eyedeekay/sam3 v0.33.2 h1:WP+fD4oPxiE0cA+gTKRNiZo3SrGI2+5FkzrnU/6Mmz4=
|
github.com/eyedeekay/sam3 v0.33.5 h1:mY2MmEG4W35AOpG/G7DOdAhFZWRwFxlm+NmIoub1Xnw=
|
||||||
github.com/eyedeekay/sam3 v0.33.2/go.mod h1:sPtlI4cRm7wD0UywOzLPvvdY1G++vBSK3n+jiIGqWlU=
|
github.com/eyedeekay/sam3 v0.33.5/go.mod h1:sPtlI4cRm7wD0UywOzLPvvdY1G++vBSK3n+jiIGqWlU=
|
||||||
|
github.com/eyedeekay/unembed v0.0.0-20230123014222-9916b121855b h1:QyCSwbHpkJtKGvIvHsvvlbDkf7/3a8qUlaa4rEr8myQ=
|
||||||
|
github.com/eyedeekay/unembed v0.0.0-20230123014222-9916b121855b/go.mod h1:A6dZU88muI132XMrmdM0+cc2yIuwmhwgRfyrU54DjPc=
|
||||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
|
||||||
github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ=
|
github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ=
|
||||||
@@ -217,7 +221,6 @@ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:x
|
|||||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||||
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
|
|
||||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||||
github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
@@ -666,8 +669,9 @@ github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE
|
|||||||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
||||||
github.com/russross/blackfriday v2.0.0+incompatible h1:cBXrhZNUf9C+La9/YpS+UHpUT8YD6Td9ZMSU9APFcsk=
|
github.com/russross/blackfriday v2.0.0+incompatible h1:cBXrhZNUf9C+La9/YpS+UHpUT8YD6Td9ZMSU9APFcsk=
|
||||||
github.com/russross/blackfriday v2.0.0+incompatible/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
github.com/russross/blackfriday v2.0.0+incompatible/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
||||||
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
|
|
||||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
|
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||||
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||||
github.com/sacloud/libsacloud v1.36.2/go.mod h1:P7YAOVmnIn3DKHqCZcUKYUXmSwGBm3yS7IBEjKVSrjg=
|
github.com/sacloud/libsacloud v1.36.2/go.mod h1:P7YAOVmnIn3DKHqCZcUKYUXmSwGBm3yS7IBEjKVSrjg=
|
||||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||||
@@ -727,6 +731,8 @@ github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0o
|
|||||||
github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU=
|
github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU=
|
||||||
github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||||
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
||||||
|
github.com/urfave/cli/v3 v3.0.0-alpha h1:Cbc2CVsHVveE6SvoyOetqQKYNhxKsgp3bTlqH1nyi1Q=
|
||||||
|
github.com/urfave/cli/v3 v3.0.0-alpha/go.mod h1:o9y/j7PxPajDAEl+kKAdwePXiN/ZA5IDRjCCa8/Wu6s=
|
||||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||||
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
|
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
|
||||||
github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
|
github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
|
||||||
@@ -742,9 +748,12 @@ github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQ
|
|||||||
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
|
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
|
||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||||
|
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
|
||||||
|
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
|
||||||
github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE=
|
github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE=
|
||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
github.com/zserge/lorca v0.1.9/go.mod h1:bVmnIbIRlOcoV285KIRSe4bUABKi7R7384Ycuum6e4A=
|
github.com/zserge/lorca v0.1.9/go.mod h1:bVmnIbIRlOcoV285KIRSe4bUABKi7R7384Ycuum6e4A=
|
||||||
gitlab.com/golang-commonmark/html v0.0.0-20191124015941-a22733972181 h1:K+bMSIx9A7mLES1rtG+qKduLIXq40DAzYHtb0XuCukA=
|
gitlab.com/golang-commonmark/html v0.0.0-20191124015941-a22733972181 h1:K+bMSIx9A7mLES1rtG+qKduLIXq40DAzYHtb0XuCukA=
|
||||||
gitlab.com/golang-commonmark/html v0.0.0-20191124015941-a22733972181/go.mod h1:dzYhVIwWCtzPAa4QP98wfB9+mzt33MSmM8wsKiMi2ow=
|
gitlab.com/golang-commonmark/html v0.0.0-20191124015941-a22733972181/go.mod h1:dzYhVIwWCtzPAa4QP98wfB9+mzt33MSmM8wsKiMi2ow=
|
||||||
@@ -802,8 +811,11 @@ golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPh
|
|||||||
golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY=
|
|
||||||
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||||
|
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
|
||||||
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
|
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
|
||||||
|
golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||||
@@ -834,8 +846,9 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
|
|||||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||||
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
|
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
|
||||||
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@@ -867,8 +880,12 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL
|
|||||||
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d h1:1aflnvSoWWLI2k/dMUAl5lvU1YO4Mb4hz0gh+1rjcxU=
|
|
||||||
golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
|
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
|
golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
|
||||||
|
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
|
||||||
golang.org/x/oauth2 v0.0.0-20170912212905-13449ad91cb2/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20170912212905-13449ad91cb2/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
@@ -883,8 +900,9 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck=
|
|
||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=
|
||||||
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20180622082034-63fc586f45fe/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180622082034-63fc586f45fe/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@@ -935,18 +953,27 @@ golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20200918174421-af09f7315aff/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200918174421-af09f7315aff/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201110211018-35f3e6cf4a65/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201110211018-35f3e6cf4a65/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
|
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
|
||||||
|
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
|
golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k=
|
||||||
|
golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/time v0.0.0-20170424234030-8be79e1e0910/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20170424234030-8be79e1e0910/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
@@ -993,8 +1020,9 @@ golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapK
|
|||||||
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
||||||
golang.org/x/tools v0.0.0-20200410194907-79a7a3126eef/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
golang.org/x/tools v0.0.0-20200410194907-79a7a3126eef/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
golang.org/x/tools v0.0.0-20201125231158-b5590deeca9b h1:Lq5JUTFhiybGVf28jB6QRpqd13/JPOaCnET17PVzYJE=
|
|
||||||
golang.org/x/tools v0.0.0-20201125231158-b5590deeca9b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201125231158-b5590deeca9b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
|
golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
|
||||||
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@@ -1055,7 +1083,6 @@ google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ
|
|||||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||||
google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
|
|
||||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
@@ -1087,8 +1114,9 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
BIN
i2plogo.png
Normal file
BIN
i2plogo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
308
index.html
308
index.html
@@ -7,6 +7,7 @@
|
|||||||
<meta name="description" content="reseed-tools" />
|
<meta name="description" content="reseed-tools" />
|
||||||
<meta name="keywords" content="master" />
|
<meta name="keywords" content="master" />
|
||||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="navbar">
|
<div id="navbar">
|
||||||
@@ -16,6 +17,11 @@
|
|||||||
<div id="shownav">
|
<div id="shownav">
|
||||||
<div id="hidenav">
|
<div id="hidenav">
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="..">
|
||||||
|
Up one level ^
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="index.html">
|
<a href="index.html">
|
||||||
index
|
index
|
||||||
@@ -27,13 +33,58 @@
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="DOCKER.html">
|
<a href="content/index.html">
|
||||||
DOCKER
|
content/index.html
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="EXAMPLES.html">
|
<a href="docs/index.html">
|
||||||
EXAMPLES
|
docs/index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="index.html">
|
||||||
|
index.html
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/DEBIAN.html">
|
||||||
|
docs/DEBIAN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/DOCKER.html">
|
||||||
|
docs/DOCKER
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/EXAMPLES.html">
|
||||||
|
docs/EXAMPLES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/PLUGIN.html">
|
||||||
|
docs/PLUGIN
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/index.html">
|
||||||
|
docs/index
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/SERVICES.html">
|
||||||
|
docs/SERVICES
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/TLS.html">
|
||||||
|
docs/TLS
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="docs/index.html">
|
||||||
|
docs/index.html
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -44,13 +95,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<a id="returnhome" href="/">
|
||||||
|
/
|
||||||
|
</a>
|
||||||
<h1>
|
<h1>
|
||||||
<a href="/">
|
I2P Reseed Tools
|
||||||
I2P Reseed Tools
|
|
||||||
</a>
|
|
||||||
</h1>
|
</h1>
|
||||||
<p>
|
<p>
|
||||||
<img src="content/images/reseed.png" alt="Reseed Tools Poster"/>
|
<img src="content/images/reseed.png" alt="Reseed Tools Poster" />
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
This tool provides a secure and efficient reseed server for the I2P network.
|
This tool provides a secure and efficient reseed server for the I2P network.
|
||||||
@@ -60,7 +112,7 @@
|
|||||||
<p>
|
<p>
|
||||||
Standard reseeds are distributed with the I2P packages. To get your reseed
|
Standard reseeds are distributed with the I2P packages. To get your reseed
|
||||||
included, apply on
|
included, apply on
|
||||||
<a href="http://zzz.i2p" rel="nofollow">
|
<a href="http://zzz.i2p">
|
||||||
zzz.i2p
|
zzz.i2p
|
||||||
</a>
|
</a>
|
||||||
.
|
.
|
||||||
@@ -82,7 +134,7 @@
|
|||||||
</code>
|
</code>
|
||||||
are required to build the project.
|
are required to build the project.
|
||||||
Precompiled binaries for most platforms are available at my github mirror
|
Precompiled binaries for most platforms are available at my github mirror
|
||||||
<a href="https://github.com/eyedeekay/i2p-tools-1" rel="nofollow">
|
<a href="https://github.com/eyedeekay/i2p-tools-1">
|
||||||
https://github.com/eyedeekay/i2p-tools-1
|
https://github.com/eyedeekay/i2p-tools-1
|
||||||
</a>
|
</a>
|
||||||
.
|
.
|
||||||
@@ -90,7 +142,7 @@
|
|||||||
<p>
|
<p>
|
||||||
In order to install the build-dependencies on Ubuntu or Debian, you may use:
|
In order to install the build-dependencies on Ubuntu or Debian, you may use:
|
||||||
</p>
|
</p>
|
||||||
<pre><code>sudo apt-get install golang-go git make
|
<pre><code class="language-sh">sudo apt-get install golang-go git make
|
||||||
</code></pre>
|
</code></pre>
|
||||||
<h2>
|
<h2>
|
||||||
Installation
|
Installation
|
||||||
@@ -109,118 +161,6 @@
|
|||||||
environment variable
|
environment variable
|
||||||
to configure your signing keys/contact info.
|
to configure your signing keys/contact info.
|
||||||
</p>
|
</p>
|
||||||
<h4>
|
|
||||||
Plugin install URL’s
|
|
||||||
</h4>
|
|
||||||
<p>
|
|
||||||
Plugin releases are available inside of i2p at
|
|
||||||
<a href="http://idk.i2p/reseed-tools/" rel="nofollow">
|
|
||||||
http://idk.i2p/reseed-tools/
|
|
||||||
</a>
|
|
||||||
and via the github mirror at
|
|
||||||
<a href="https://github.com/eyedeekay/reseed-tools/releases" rel="nofollow">
|
|
||||||
https://github.com/eyedeekay/reseed-tools/releases
|
|
||||||
</a>
|
|
||||||
.
|
|
||||||
These can be installed by adding them on the
|
|
||||||
<a href="http://127.0.0.1:7657/configplugins" rel="nofollow">
|
|
||||||
http://127.0.0.1:7657/configplugins
|
|
||||||
</a>
|
|
||||||
.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
After installing the plugin, you should immediately edit the
|
|
||||||
<code>
|
|
||||||
$PLUGIN/signer
|
|
||||||
</code>
|
|
||||||
file in order to set your
|
|
||||||
<code>
|
|
||||||
--signer
|
|
||||||
</code>
|
|
||||||
email, which is used to name your keys.
|
|
||||||
You can find the
|
|
||||||
<code>
|
|
||||||
$PLUGIN
|
|
||||||
</code>
|
|
||||||
directory in your I2P config directory, which is
|
|
||||||
usually
|
|
||||||
<code>
|
|
||||||
$HOME/.i2p
|
|
||||||
</code>
|
|
||||||
on Unixes.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
This will allow the developers to contact you if your reseed has issues
|
|
||||||
and will authenticate your reseed to the I2P routers that use it.
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
darwin/amd64:
|
|
||||||
<a href="http://idk.i2p/reseed-tools/reseed-tools-darwin-amd64.su3" rel="nofollow">
|
|
||||||
http://idk.i2p/reseed-tools/reseed-tools-darwin-amd64.su3
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
darwin/arm64:
|
|
||||||
<a href="http://idk.i2p/reseed-tools/reseed-tools-darwin-arm64.su3" rel="nofollow">
|
|
||||||
http://idk.i2p/reseed-tools/reseed-tools-darwin-arm64.su3
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
linux/386:
|
|
||||||
<a href="http://idk.i2p/reseed-tools/reseed-tools-linux-386.su3" rel="nofollow">
|
|
||||||
http://idk.i2p/reseed-tools/reseed-tools-linux-386.su3
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
linux/amd64:
|
|
||||||
<a href="http://idk.i2p/reseed-tools/reseed-tools-linux-amd64.su3" rel="nofollow">
|
|
||||||
http://idk.i2p/reseed-tools/reseed-tools-linux-amd64.su3
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
linux/arm:
|
|
||||||
<a href="http://idk.i2p/reseed-tools/reseed-tools-linux-arm.su3" rel="nofollow">
|
|
||||||
http://idk.i2p/reseed-tools/reseed-tools-linux-arm.su3
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
linux/arm64:
|
|
||||||
<a href="http://idk.i2p/reseed-tools/reseed-tools-linux-arm64.su3" rel="nofollow">
|
|
||||||
http://idk.i2p/reseed-tools/reseed-tools-linux-arm64.su3
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
openbsd/amd64:
|
|
||||||
<a href="http://idk.i2p/reseed-tools/reseed-tools-openbsd-amd64.su3" rel="nofollow">
|
|
||||||
http://idk.i2p/reseed-tools/reseed-tools-openbsd-amd64.su3
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
freebsd/386:
|
|
||||||
<a href="http://idk.i2p/reseed-tools/reseed-tools-freebsd-386.su3" rel="nofollow">
|
|
||||||
http://idk.i2p/reseed-tools/reseed-tools-freebsd-386.su3
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
freebsd/amd64:
|
|
||||||
<a href="http://idk.i2p/reseed-tools/reseed-tools-freebsd-amd64.su3" rel="nofollow">
|
|
||||||
http://idk.i2p/reseed-tools/reseed-tools-freebsd-amd64.su3
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
windows/amd64:
|
|
||||||
<a href="http://idk.i2p/reseed-tools/reseed-tools-windows-amd64.su3" rel="nofollow">
|
|
||||||
http://idk.i2p/reseed-tools/reseed-tools-windows-amd64.su3
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
windows/386:
|
|
||||||
<a href="http://idk.i2p/reseed-tools/reseed-tools-windows-386.su3" rel="nofollow">
|
|
||||||
http://idk.i2p/reseed-tools/reseed-tools-windows-386.su3
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<h3>
|
<h3>
|
||||||
Installation(From Source)
|
Installation(From Source)
|
||||||
</h3>
|
</h3>
|
||||||
@@ -236,13 +176,24 @@ sudo make install
|
|||||||
<h4>
|
<h4>
|
||||||
Debian/Ubuntu note:
|
Debian/Ubuntu note:
|
||||||
</h4>
|
</h4>
|
||||||
|
<p>
|
||||||
|
It is possible to create a
|
||||||
|
<code>
|
||||||
|
.deb
|
||||||
|
</code>
|
||||||
|
package using
|
||||||
|
<a href="docs/DEBIAN.md">
|
||||||
|
these instructions
|
||||||
|
</a>
|
||||||
|
.
|
||||||
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Debian users who are running I2P as a system service must also run the
|
Debian users who are running I2P as a system service must also run the
|
||||||
<code>
|
<code>
|
||||||
reseed-tools
|
reseed-tools
|
||||||
</code>
|
</code>
|
||||||
as the same user. This is so that the reseed-tools can access
|
as the same user. This is so that the reseed-tools can access
|
||||||
the I2P service’s netDb directory. On Debian and Ubuntu, that user is
|
the I2P service’s netDb directory. On Debian and Ubuntu, that user is
|
||||||
<code>
|
<code>
|
||||||
i2psvc
|
i2psvc
|
||||||
</code>
|
</code>
|
||||||
@@ -252,94 +203,6 @@ sudo make install
|
|||||||
</code>
|
</code>
|
||||||
.
|
.
|
||||||
</p>
|
</p>
|
||||||
<h5>
|
|
||||||
Service Integration
|
|
||||||
</h5>
|
|
||||||
<p>
|
|
||||||
Support for running as a system service as part of the reseed package
|
|
||||||
is new. PR’s that improve integration are welcome.
|
|
||||||
</p>
|
|
||||||
<h6>
|
|
||||||
Systemd Service
|
|
||||||
</h6>
|
|
||||||
<p>
|
|
||||||
A systemd service is provided which should work with the I2P Debian package
|
|
||||||
when reseed-tools is installed in
|
|
||||||
<code>
|
|
||||||
/usr/bin/reseed-tools
|
|
||||||
</code>
|
|
||||||
. If you install with
|
|
||||||
<code>
|
|
||||||
make install
|
|
||||||
</code>
|
|
||||||
this service is also installed. This service will cause the
|
|
||||||
bundles to regenerate every 12 hours.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
The contact email for your reseed should be added in:
|
|
||||||
<code>
|
|
||||||
/etc/systemd/system/reseed.d/reseed.conf
|
|
||||||
</code>
|
|
||||||
.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Self-signed certificates will be auto-generated for these services. To change
|
|
||||||
this you should edit the
|
|
||||||
<code>
|
|
||||||
/etc/systemd/system/reseed.d/reseed.service
|
|
||||||
</code>
|
|
||||||
.
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
To enable starting the reseed service automatically with the system:
|
|
||||||
<code>
|
|
||||||
sudo systemctl enable reseed.service
|
|
||||||
</code>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
To run the service manually:
|
|
||||||
<code>
|
|
||||||
sudo sysctl start reseed.service
|
|
||||||
</code>
|
|
||||||
<br/>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
To reload the systemd services:
|
|
||||||
<code>
|
|
||||||
sudo systemctl daemon-reload
|
|
||||||
</code>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
To view the status/logs:
|
|
||||||
<code>
|
|
||||||
sudo journalctl -u reseed.service
|
|
||||||
</code>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<h6>
|
|
||||||
SysV Service
|
|
||||||
</h6>
|
|
||||||
<p>
|
|
||||||
An initscript is also provided. The initscript, unlike the systemd service,
|
|
||||||
cannot schedule itself to restart. You should restart the service roughly once
|
|
||||||
a day to ensure that the information does not expire.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
The contact email for your reseed should be added in:
|
|
||||||
<code>
|
|
||||||
/etc/init.d/reseed
|
|
||||||
</code>
|
|
||||||
.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Self-signed certificates will be auto-generated for these services. To change
|
|
||||||
this you should edit the
|
|
||||||
<code>
|
|
||||||
/etc/init.d/reseed
|
|
||||||
</code>
|
|
||||||
.
|
|
||||||
</p>
|
|
||||||
<h2>
|
<h2>
|
||||||
Example Commands:
|
Example Commands:
|
||||||
</h2>
|
</h2>
|
||||||
@@ -347,7 +210,7 @@ sudo make install
|
|||||||
Without a webserver, standalone with TLS support
|
Without a webserver, standalone with TLS support
|
||||||
</h3>
|
</h3>
|
||||||
<p>
|
<p>
|
||||||
If this is your first time running a reseed server (ie. you don’t have any existing keys),
|
If this is your first time running a reseed server (ie. you don’t have any existing keys),
|
||||||
you can simply run the command and follow the prompts to create the appropriate keys, crl and certificates.
|
you can simply run the command and follow the prompts to create the appropriate keys, crl and certificates.
|
||||||
Afterwards an HTTPS reseed server will start on the default port and generate 6 files in your current directory
|
Afterwards an HTTPS reseed server will start on the default port and generate 6 files in your current directory
|
||||||
(a TLS key, certificate and crl, and a su3-file signing key, certificate and crl).
|
(a TLS key, certificate and crl, and a su3-file signing key, certificate and crl).
|
||||||
@@ -367,7 +230,7 @@ sudo make install
|
|||||||
<strong>
|
<strong>
|
||||||
Usage
|
Usage
|
||||||
</strong>
|
</strong>
|
||||||
<a href="EXAMPLES.md" rel="nofollow">
|
<a href="docs/EXAMPLES.md">
|
||||||
More examples can be found here.
|
More examples can be found here.
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -375,11 +238,25 @@ sudo make install
|
|||||||
<strong>
|
<strong>
|
||||||
Docker
|
Docker
|
||||||
</strong>
|
</strong>
|
||||||
<a href="DOCKER.md" rel="nofollow">
|
<a href="docs/DOCKER.md">
|
||||||
Docker examples can be found here
|
Docker examples can be found here
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<div id="sourcecode">
|
||||||
|
<span id="sourcehead">
|
||||||
|
<strong>
|
||||||
|
Get the source code:
|
||||||
|
</strong>
|
||||||
|
</span>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://i2pgit.org/idk/reseed-tools">
|
||||||
|
Source Repository: (https://i2pgit.org/idk/reseed-tools)
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<a href="#show">
|
<a href="#show">
|
||||||
Show license
|
Show license
|
||||||
@@ -417,6 +294,7 @@ THE SOFTWARE.
|
|||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<a href="https://geti2p.net/">
|
<a href="https://geti2p.net/">
|
||||||
|
<img src="i2plogo.png"></img>
|
||||||
I2P
|
I2P
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
13
main.go
13
main.go
@@ -4,7 +4,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli/v3"
|
||||||
"i2pgit.org/idk/reseed-tools/cmd"
|
"i2pgit.org/idk/reseed-tools/cmd"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -19,12 +19,15 @@ func main() {
|
|||||||
|
|
||||||
app := cli.NewApp()
|
app := cli.NewApp()
|
||||||
app.Name = "reseed-tools"
|
app.Name = "reseed-tools"
|
||||||
app.Version = "0.2.9"
|
app.Version = "0.2.33"
|
||||||
app.Usage = "I2P tools and reseed server"
|
app.Usage = "I2P tools and reseed server"
|
||||||
app.Author = "eyedeekay"
|
auth := &cli.Author{
|
||||||
app.Email = "hankhill19580@gmail.com"
|
Name: "eyedeekay",
|
||||||
|
Email: "hankhill19580@gmail.com",
|
||||||
|
}
|
||||||
|
app.Authors = append(app.Authors, auth)
|
||||||
app.Flags = []cli.Flag{}
|
app.Flags = []cli.Flag{}
|
||||||
app.Commands = []cli.Command{
|
app.Commands = []*cli.Command{
|
||||||
cmd.NewReseedCommand(),
|
cmd.NewReseedCommand(),
|
||||||
cmd.NewSu3VerifyCommand(),
|
cmd.NewSu3VerifyCommand(),
|
||||||
cmd.NewKeygenCommand(),
|
cmd.NewKeygenCommand(),
|
||||||
|
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
INIT=$(file /sbin/init 2>&1 | grep systemd)
|
INIT=$(file /sbin/init 2>&1 | grep systemd)
|
||||||
if [ ! -z "$INIT" ]; then
|
if [ ! -z "$INIT" ]; then
|
||||||
systemctl disable reseed.service
|
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
0
reseed/content/script.js
Normal file
0
reseed/content/script.js
Normal file
@@ -19,6 +19,10 @@ h3 {
|
|||||||
width: 55%;
|
width: 55%;
|
||||||
margin-left: 45%;
|
margin-left: 45%;
|
||||||
}
|
}
|
||||||
|
h4 {
|
||||||
|
width: 55%;
|
||||||
|
margin-left: 45%;
|
||||||
|
}
|
||||||
ul {
|
ul {
|
||||||
width: 55%;
|
width: 55%;
|
||||||
display: block;
|
display: block;
|
||||||
@@ -37,6 +41,10 @@ p {
|
|||||||
margin-left: 45%;
|
margin-left: 45%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pingtest {
|
||||||
|
margin-left: 45%;
|
||||||
|
}
|
||||||
|
|
||||||
img {
|
img {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
margin-top: 3%;
|
margin-top: 3%;
|
@@ -1,6 +1,8 @@
|
|||||||
package reseed
|
package reseed
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"embed"
|
||||||
|
_ "embed"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
@@ -8,10 +10,14 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/eyedeekay/unembed"
|
||||||
"gitlab.com/golang-commonmark/markdown"
|
"gitlab.com/golang-commonmark/markdown"
|
||||||
"golang.org/x/text/language"
|
"golang.org/x/text/language"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:embed content
|
||||||
|
var f embed.FS
|
||||||
|
|
||||||
var SupportedLanguages = []language.Tag{
|
var SupportedLanguages = []language.Tag{
|
||||||
language.English,
|
language.English,
|
||||||
language.Russian,
|
language.Russian,
|
||||||
@@ -30,7 +36,17 @@ var SupportedLanguages = []language.Tag{
|
|||||||
var CachedLanguagePages = map[string]string{}
|
var CachedLanguagePages = map[string]string{}
|
||||||
var CachedDataPages = map[string][]byte{}
|
var CachedDataPages = map[string][]byte{}
|
||||||
|
|
||||||
var BaseContentPath, ContentPathError = ContentPath()
|
func StableContentPath() (string, error) {
|
||||||
|
var BaseContentPath, ContentPathError = ContentPath()
|
||||||
|
if _, err := os.Stat(BaseContentPath); os.IsNotExist(err) {
|
||||||
|
if err := unembed.Unembed(f, BaseContentPath); err != nil {
|
||||||
|
return "", err
|
||||||
|
} else {
|
||||||
|
return BaseContentPath, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return BaseContentPath, ContentPathError
|
||||||
|
}
|
||||||
|
|
||||||
var matcher = language.NewMatcher(SupportedLanguages)
|
var matcher = language.NewMatcher(SupportedLanguages)
|
||||||
|
|
||||||
@@ -61,6 +77,7 @@ func ContentPath() (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (srv *Server) HandleARealBrowser(w http.ResponseWriter, r *http.Request) {
|
func (srv *Server) HandleARealBrowser(w http.ResponseWriter, r *http.Request) {
|
||||||
|
_, ContentPathError := StableContentPath()
|
||||||
if ContentPathError != nil {
|
if ContentPathError != nil {
|
||||||
http.Error(w, "403 Forbidden", http.StatusForbidden)
|
http.Error(w, "403 Forbidden", http.StatusForbidden)
|
||||||
return
|
return
|
||||||
@@ -79,21 +96,20 @@ func (srv *Server) HandleARealBrowser(w http.ResponseWriter, r *http.Request) {
|
|||||||
base, _ := tag.Base()
|
base, _ := tag.Base()
|
||||||
log.Printf("base: '%s'\n", base)
|
log.Printf("base: '%s'\n", base)
|
||||||
|
|
||||||
switch r.URL.Path {
|
if strings.HasSuffix(r.URL.Path, "style.css") {
|
||||||
case "/style.css":
|
|
||||||
w.Header().Set("Content-Type", "text/css")
|
w.Header().Set("Content-Type", "text/css")
|
||||||
HandleAFile(w, "", "style.css")
|
HandleAFile(w, "", "style.css")
|
||||||
case "/script.js":
|
} else if strings.HasSuffix(r.URL.Path, "script.js") {
|
||||||
w.Header().Set("Content-Type", "text/javascript")
|
w.Header().Set("Content-Type", "text/javascript")
|
||||||
HandleAFile(w, "", "script.js")
|
HandleAFile(w, "", "script.js")
|
||||||
default:
|
} else {
|
||||||
image := strings.Replace(r.URL.Path, "/", "", -1)
|
image := strings.Replace(r.URL.Path, "/", "", -1)
|
||||||
if strings.HasPrefix(image, "images") {
|
if strings.HasPrefix(image, "images") {
|
||||||
w.Header().Set("Content-Type", "image/png")
|
w.Header().Set("Content-Type", "image/png")
|
||||||
HandleAFile(w, "images", strings.TrimPrefix(strings.TrimPrefix(r.URL.Path, "/"), "images"))
|
HandleAFile(w, "images", strings.TrimPrefix(strings.TrimPrefix(r.URL.Path, "/"), "images"))
|
||||||
} else if strings.HasPrefix(image, "ping") {
|
} else if strings.HasPrefix(image, "ping") {
|
||||||
PingEverybody()
|
PingEverybody()
|
||||||
http.Redirect(w, r, "/readout", http.StatusFound)
|
http.Redirect(w, r, "/", http.StatusFound)
|
||||||
} else if strings.HasPrefix(image, "readout") {
|
} else if strings.HasPrefix(image, "readout") {
|
||||||
w.Header().Set("Content-Type", "text/html")
|
w.Header().Set("Content-Type", "text/html")
|
||||||
w.Write([]byte(header))
|
w.Write([]byte(header))
|
||||||
@@ -116,6 +132,7 @@ func (srv *Server) HandleARealBrowser(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func HandleAFile(w http.ResponseWriter, dirPath, file string) {
|
func HandleAFile(w http.ResponseWriter, dirPath, file string) {
|
||||||
|
BaseContentPath, _ := StableContentPath()
|
||||||
file = filepath.Join(dirPath, file)
|
file = filepath.Join(dirPath, file)
|
||||||
if _, prs := CachedDataPages[file]; !prs {
|
if _, prs := CachedDataPages[file]; !prs {
|
||||||
path := filepath.Join(BaseContentPath, file)
|
path := filepath.Join(BaseContentPath, file)
|
||||||
@@ -133,6 +150,7 @@ func HandleAFile(w http.ResponseWriter, dirPath, file string) {
|
|||||||
|
|
||||||
func HandleALocalizedFile(w http.ResponseWriter, dirPath string) {
|
func HandleALocalizedFile(w http.ResponseWriter, dirPath string) {
|
||||||
if _, prs := CachedLanguagePages[dirPath]; !prs {
|
if _, prs := CachedLanguagePages[dirPath]; !prs {
|
||||||
|
BaseContentPath, _ := StableContentPath()
|
||||||
dir := filepath.Join(BaseContentPath, "lang", dirPath)
|
dir := filepath.Join(BaseContentPath, "lang", dirPath)
|
||||||
files, err := ioutil.ReadDir(dir)
|
files, err := ioutil.ReadDir(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -5,20 +5,22 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Ping requests an `.su3` from another reseed server and return true if
|
// Ping requests an ".su3" from another reseed server and return true if
|
||||||
// the reseed server is alive If the reseed server is not alive, returns
|
// the reseed server is alive If the reseed server is not alive, returns
|
||||||
// false and the status of the request as an error
|
// false and the status of the request as an error
|
||||||
func Ping(url string) (bool, error) {
|
func Ping(urlInput string) (bool, error) {
|
||||||
if strings.HasSuffix(url, "i2pseeds.su3") {
|
if !strings.HasSuffix(urlInput, "i2pseeds.su3") {
|
||||||
url = url + "i2pseeds.su3"
|
urlInput = fmt.Sprintf("%s%s", urlInput, "i2pseeds.su3")
|
||||||
}
|
}
|
||||||
req, err := http.NewRequest("GET", url, nil)
|
log.Println("Pinging:", urlInput)
|
||||||
|
req, err := http.NewRequest("GET", urlInput, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@@ -35,20 +37,33 @@ func Ping(url string) (bool, error) {
|
|||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func PingWriteContent(url string) error {
|
func trimPath(s string) string {
|
||||||
|
tmp := strings.ReplaceAll(s, "https://", "")
|
||||||
|
tmp = strings.ReplaceAll(s, "http://", "")
|
||||||
|
tmp = strings.ReplaceAll(s, "/", "")
|
||||||
|
return tmp
|
||||||
|
}
|
||||||
|
|
||||||
|
func PingWriteContent(urlInput string) error {
|
||||||
|
log.Println("Calling PWC", urlInput)
|
||||||
date := time.Now().Format("2006-01-02")
|
date := time.Now().Format("2006-01-02")
|
||||||
path := strings.Replace(url, "http://", "", 1)
|
u, err := url.Parse(urlInput)
|
||||||
path = strings.Replace(path, "https://", "", 1)
|
if err != nil {
|
||||||
path = strings.Replace(path, "/", "", -1)
|
log.Println("PWC", err)
|
||||||
|
return fmt.Errorf("PingWriteContent:%s", err)
|
||||||
|
}
|
||||||
|
path := trimPath(u.Host)
|
||||||
|
log.Println("Calling PWC path", path)
|
||||||
|
BaseContentPath, _ := StableContentPath()
|
||||||
path = filepath.Join(BaseContentPath, path+"-"+date+".ping")
|
path = filepath.Join(BaseContentPath, path+"-"+date+".ping")
|
||||||
if _, err := os.Stat(path); err != nil {
|
if _, err := os.Stat(path); err != nil {
|
||||||
result, err := Ping(url)
|
result, err := Ping(urlInput)
|
||||||
if result {
|
if result {
|
||||||
log.Printf("Ping: %s OK", url)
|
log.Printf("Ping: %s OK", urlInput)
|
||||||
err := ioutil.WriteFile(path, []byte("Alive: Status OK"), 0644)
|
err := ioutil.WriteFile(path, []byte("Alive: Status OK"), 0644)
|
||||||
return err
|
return err
|
||||||
} else {
|
} else {
|
||||||
log.Printf("Ping: %s %s", url, err)
|
log.Printf("Ping: %s %s", urlInput, err)
|
||||||
err := ioutil.WriteFile(path, []byte("Dead: "+err.Error()), 0644)
|
err := ioutil.WriteFile(path, []byte("Dead: "+err.Error()), 0644)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -57,7 +72,7 @@ func PingWriteContent(url string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: make this a configuration option
|
// TODO: make this a configuration option
|
||||||
var AllReseeds = []string{
|
/*var AllReseeds = []string{
|
||||||
"https://banana.incognet.io/",
|
"https://banana.incognet.io/",
|
||||||
"https://i2p.novg.net/",
|
"https://i2p.novg.net/",
|
||||||
"https://i2pseed.creativecowpat.net:8443/",
|
"https://i2pseed.creativecowpat.net:8443/",
|
||||||
@@ -66,16 +81,43 @@ var AllReseeds = []string{
|
|||||||
"https://reseed.memcpy.io/",
|
"https://reseed.memcpy.io/",
|
||||||
"https://reseed.onion.im/",
|
"https://reseed.onion.im/",
|
||||||
"https://reseed2.i2p.net/",
|
"https://reseed2.i2p.net/",
|
||||||
|
}*/
|
||||||
|
|
||||||
|
var AllReseeds = []string{
|
||||||
|
"https://banana.incognet.io/",
|
||||||
|
"https://i2p.novg.net/",
|
||||||
|
"https://i2pseed.creativecowpat.net:8443/",
|
||||||
|
"https://reseed-fr.i2pd.xyz/",
|
||||||
|
"https://reseed-pl.i2pd.xyz/",
|
||||||
|
"https://reseed.diva.exchange/",
|
||||||
|
"https://reseed.i2pgit.org/",
|
||||||
|
"https://reseed.memcpy.io/",
|
||||||
|
"https://reseed.onion.im/",
|
||||||
|
"https://reseed2.i2p.net/",
|
||||||
|
"https://www2.mk16.de/",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func yday() time.Time {
|
||||||
|
today := time.Now()
|
||||||
|
yesterday := today.Add(-24 * time.Hour)
|
||||||
|
return yesterday
|
||||||
|
}
|
||||||
|
|
||||||
|
var lastPing = yday()
|
||||||
|
|
||||||
func PingEverybody() []string {
|
func PingEverybody() []string {
|
||||||
|
if lastPing.After(yday()) {
|
||||||
|
log.Println("Your ping was rate-limited")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
lastPing = time.Now()
|
||||||
var nonerrs []string
|
var nonerrs []string
|
||||||
for _, url := range AllReseeds {
|
for _, urlInput := range AllReseeds {
|
||||||
err := PingWriteContent(url)
|
err := PingWriteContent(urlInput)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
nonerrs = append(nonerrs, url)
|
nonerrs = append(nonerrs, urlInput)
|
||||||
} else {
|
} else {
|
||||||
nonerrs = append(nonerrs, err.Error()+"-"+url)
|
nonerrs = append(nonerrs, err.Error()+"-"+urlInput)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nonerrs
|
return nonerrs
|
||||||
@@ -85,6 +127,7 @@ func PingEverybody() []string {
|
|||||||
func GetPingFiles() ([]string, error) {
|
func GetPingFiles() ([]string, error) {
|
||||||
var files []string
|
var files []string
|
||||||
date := time.Now().Format("2006-01-02")
|
date := time.Now().Format("2006-01-02")
|
||||||
|
BaseContentPath, _ := StableContentPath()
|
||||||
err := filepath.Walk(BaseContentPath, func(path string, info os.FileInfo, err error) error {
|
err := filepath.Walk(BaseContentPath, func(path string, info os.FileInfo, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -104,8 +147,8 @@ func ReadOut(w http.ResponseWriter) {
|
|||||||
pinglist, err := GetPingFiles()
|
pinglist, err := GetPingFiles()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
fmt.Fprintf(w, "<h3>Reseed Server Statuses</h3>")
|
fmt.Fprintf(w, "<h3>Reseed Server Statuses</h3>")
|
||||||
fmt.Fprintf(w, "<div><p>This feature is experimental and may not always provide accurate results.</p></div>")
|
fmt.Fprintf(w, "<div class=\"pingtest\">This feature is experimental and may not always provide accurate results.</div>")
|
||||||
fmt.Fprintf(w, "</div><p><ul>")
|
fmt.Fprintf(w, "<div class=\"homepage\"><p><ul>")
|
||||||
for _, file := range pinglist {
|
for _, file := range pinglist {
|
||||||
ping, err := ioutil.ReadFile(file)
|
ping, err := ioutil.ReadFile(file)
|
||||||
host := strings.Replace(file, ".ping", "", 1)
|
host := strings.Replace(file, ".ping", "", 1)
|
||||||
|
15
showhider.css
Normal file
15
showhider.css
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/* edgar showhider CSS file */
|
||||||
|
#show {display:none; }
|
||||||
|
#hide {display:block; }
|
||||||
|
#show:target {display: block; }
|
||||||
|
#hide:target {display: none; }
|
||||||
|
|
||||||
|
#shownav {display:none; }
|
||||||
|
#hidenav {display:block; }
|
||||||
|
#shownav:target {display: block; }
|
||||||
|
#hidenav:target {display: none; }
|
||||||
|
|
||||||
|
#donate {display:none; }
|
||||||
|
#hidedonate {display:block; }
|
||||||
|
#donate:target {display: block; }
|
||||||
|
#hidedonate:target {display: none; }
|
10
style.css
10
style.css
@@ -36,6 +36,7 @@ img {
|
|||||||
left: 5%;
|
left: 5%;
|
||||||
max-width: 60%;
|
max-width: 60%;
|
||||||
display: inline;
|
display: inline;
|
||||||
|
padding-right: 2%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline {
|
.inline {
|
||||||
@@ -153,5 +154,12 @@ input {
|
|||||||
|
|
||||||
#navbar {
|
#navbar {
|
||||||
float: right;
|
float: right;
|
||||||
width: 10%;
|
width: 15%;
|
||||||
|
}
|
||||||
|
#returnhome {
|
||||||
|
font-size: xxx-large;
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
display: inline;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user