--- /dev/null Tue May 26 22:44:46 2026 +++ net/i2pd/patches/patch-contrib_i2pd_conf Tue May 26 22:04:38 2026 @@ -0,0 +1,46 @@ +--- contrib/i2pd.conf.orig ++++ contrib/i2pd.conf +@@ -8,16 +8,16 @@ + + ## Tunnels config file + ## Default: ~/.i2pd/tunnels.conf or /var/lib/i2pd/tunnels.conf +-# tunconf = /var/lib/i2pd/tunnels.conf ++tunconf = /var/i2pd/tunnels.conf + + ## Tunnels config files path + ## Use that path to store separated tunnels in different config files. + ## Default: ~/.i2pd/tunnels.d or /var/lib/i2pd/tunnels.d +-# tunnelsdir = /var/lib/i2pd/tunnels.d ++tunnelsdir = /var/i2pd/tunnels.d + + ## Path to certificates used for verifying .su3, families + ## Default: ~/.i2pd/certificates or /var/lib/i2pd/certificates +-# certsdir = /var/lib/i2pd/certificates ++certsdir = /var/i2pd/certificates + + ## Where to write pidfile (default: /run/i2pd.pid, not used in Windows) + # pidfile = /run/i2pd.pid +@@ -30,12 +30,12 @@ + ## * stdout - print log entries to stdout + ## * file - log entries to a file + ## * syslog - use syslog, see man 3 syslog +-# log = file ++log = syslog + ## Path to logfile (default: autodetect) + # logfile = /var/log/i2pd/i2pd.log + ## Log messages above this level (debug, info, *warn, error, critical, none) + ## If you set it to none, logging will be disabled +-# loglevel = warn ++loglevel = error + ## Write full CLF-formatted date and time to log (default: write only time) + # logclftime = true + +@@ -122,7 +122,7 @@ + [http] + ## Web Console settings + ## Enable the Web Console (default: true) +-# enabled = true ++enabled = false + ## Address and port service will listen on (default: 127.0.0.1:7070) + # address = 127.0.0.1 + # port = 7070 --- /dev/null Tue May 26 22:44:46 2026 +++ net/i2pd/patches/patch-contrib_tunnels_conf Tue May 26 22:04:38 2026 @@ -0,0 +1,22 @@ +--- contrib/tunnels.conf.orig ++++ contrib/tunnels.conf +@@ -1,11 +1,11 @@ +-[IRC-ILITA] +-type = client +-address = 127.0.0.1 +-port = 6668 +-destination = irc.ilita.i2p +-destinationport = 6667 +-keys = irc-keys.dat +-i2p.streaming.profile=2 ++#[IRC-ILITA] ++#type = client ++#address = 127.0.0.1 ++#port = 6668 ++#destination = irc.ilita.i2p ++#destinationport = 6667 ++#keys = irc-keys.dat ++#i2p.streaming.profile=2 + + #[IRC-IRC2P] + #type = client Index: net/i2pd/Makefile =================================================================== RCS file: /cvs/ports/net/i2pd/Makefile,v diff -u -p -u -p -r1.33 Makefile --- net/i2pd/Makefile 21 Feb 2026 14:20:20 -0000 1.33 +++ net/i2pd/Makefile 26 May 2026 20:44:48 -0000 @@ -2,7 +2,7 @@ COMMENT = client for the I2P anonymous n GH_ACCOUNT = PurpleI2P GH_PROJECT = i2pd -GH_TAGNAME = 2.59.0 +GH_TAGNAME = 2.60.0 CATEGORIES = net HOMEPAGE = https://i2pd.website @@ -14,7 +14,7 @@ PERMIT_PACKAGE = Yes WANTLIB += ${COMPILER_LIBCXX} WANTLIB += boost_filesystem-mt boost_program_options-mt -WANTLIB += boost_atomic-mt c crypto m miniupnpc ssl z +WANTLIB += boost_atomic-mt boost_container-mt c crypto m miniupnpc ssl z COMPILER = base-clang ports-gcc MODULES = devel/cmake @@ -32,6 +32,7 @@ post-install: ${INSTALL_DATA_DIR} ${PREFIX}/include/i2pd ${INSTALL_DATA} ${WRKDIST}/libi2pd{,_client}/*.h \ ${PREFIX}/include/i2pd + ${INSTALL_DATA_DIR} ${LOCALSTATEDIR}/lib/i2pd .for dir in family reseed ${INSTALL_DATA_DIR} ${PREFIX}/share/examples/i2pd/certificates/${dir} ${INSTALL_DATA} ${WRKDIST}/contrib/certificates/${dir}/* \ Index: net/i2pd/distinfo =================================================================== RCS file: /cvs/ports/net/i2pd/distinfo,v diff -u -p -u -p -r1.26 distinfo --- net/i2pd/distinfo 21 Feb 2026 14:20:20 -0000 1.26 +++ net/i2pd/distinfo 26 May 2026 20:44:48 -0000 @@ -1,2 +1,2 @@ -SHA256 (i2pd-2.59.0.tar.gz) = Dr6wXk82qzgJRJVhoJXcdnrYIaxqYclWI6tJvk/9OYs= -SIZE (i2pd-2.59.0.tar.gz) = 743516 +SHA256 (i2pd-2.60.0.tar.gz) = 7zIQDF/99NI9/nii9sCPZVdP15+ZLrKsjP6gtkQN6r0= +SIZE (i2pd-2.60.0.tar.gz) = 763177 Index: net/i2pd/pkg/PLIST =================================================================== RCS file: /cvs/ports/net/i2pd/pkg/PLIST,v diff -u -p -u -p -r1.18 PLIST --- net/i2pd/pkg/PLIST 21 Feb 2026 14:20:20 -0000 1.18 +++ net/i2pd/pkg/PLIST 26 May 2026 20:44:48 -0000 @@ -1,5 +1,5 @@ @newgroup _i2pd:838 -@newuser _i2pd:838:838::i2pd account:${LOCALSTATEDIR}/lib/i2pd:/sbin/nologin +@newuser _i2pd:838:838::i2pd account:${LOCALSTATEDIR}/i2pd:/sbin/nologin @rcscript ${RCDIR}/i2pd @bin bin/i2pd include/i2pd/ @@ -72,11 +72,14 @@ include/i2pd/version.h @owner _i2pd @group _i2pd @sample ${SYSCONFDIR}/i2pd/ -@sample ${LOCALSTATEDIR}/lib/i2pd/ -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/ -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/family/ -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/ -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/router/ +@sample ${LOCALSTATEDIR}/i2pd/ +@cwd ${LOCALSTATEDIR} +lib/i2pd/ +@cwd ${PREFIX} +@sample ${LOCALSTATEDIR}/i2pd/certificates/ +@sample ${LOCALSTATEDIR}/i2pd/certificates/family/ +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/ +@sample ${LOCALSTATEDIR}/i2pd/certificates/router/ @owner @group @static-lib lib/libi2pdlang.a @@ -87,139 +90,144 @@ share/examples/i2pd/certificates/family/ share/examples/i2pd/certificates/family/gostcoin.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/family/gostcoin.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/family/gostcoin.crt @owner @group share/examples/i2pd/certificates/family/i2p-dev.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/family/i2p-dev.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/family/i2p-dev.crt @owner @group share/examples/i2pd/certificates/family/i2pd-dev.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/family/i2pd-dev.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/family/i2pd-dev.crt @owner @group share/examples/i2pd/certificates/family/mca2-i2p.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/family/mca2-i2p.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/family/mca2-i2p.crt @owner @group share/examples/i2pd/certificates/family/stormycloud.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/family/stormycloud.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/family/stormycloud.crt @owner @group share/examples/i2pd/certificates/family/volatile.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/family/volatile.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/family/volatile.crt @owner @group share/examples/i2pd/certificates/reseed/ -@owner _i2pd -@group _i2pd -@sample ${LOCALSTATEDIR}/lib/ -@owner -@group share/examples/i2pd/certificates/reseed/acetone_at_mail.i2p.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/acetone_at_mail.i2p.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/acetone_at_mail.i2p.crt @owner @group share/examples/i2pd/certificates/reseed/admin_at_stormycloud.org.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/admin_at_stormycloud.org.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/admin_at_stormycloud.org.crt @owner @group share/examples/i2pd/certificates/reseed/creativecowpat_at_mail.i2p.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/creativecowpat_at_mail.i2p.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/creativecowpat_at_mail.i2p.crt @owner @group share/examples/i2pd/certificates/reseed/diyarciftci_at_protonmail.com.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/diyarciftci_at_protonmail.com.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/diyarciftci_at_protonmail.com.crt @owner @group share/examples/i2pd/certificates/reseed/echelon3_at_mail.i2p.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/echelon3_at_mail.i2p.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/echelon3_at_mail.i2p.crt @owner @group share/examples/i2pd/certificates/reseed/hankhill19580_at_gmail.com.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/hankhill19580_at_gmail.com.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/hankhill19580_at_gmail.com.crt @owner @group share/examples/i2pd/certificates/reseed/i2p-reseed_at_mk16.de.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/i2p-reseed_at_mk16.de.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/i2p-reseed_at_mk16.de.crt @owner @group share/examples/i2pd/certificates/reseed/igor_at_novg.net.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/igor_at_novg.net.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/igor_at_novg.net.crt @owner @group share/examples/i2pd/certificates/reseed/lazygravy_at_mail.i2p.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/lazygravy_at_mail.i2p.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/lazygravy_at_mail.i2p.crt @owner @group share/examples/i2pd/certificates/reseed/orignal_at_mail.i2p.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/orignal_at_mail.i2p.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/orignal_at_mail.i2p.crt @owner @group share/examples/i2pd/certificates/reseed/r4sas-reseed_at_mail.i2p.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/r4sas-reseed_at_mail.i2p.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/r4sas-reseed_at_mail.i2p.crt @owner @group share/examples/i2pd/certificates/reseed/rambler_at_mail.i2p.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/rambler_at_mail.i2p.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/rambler_at_mail.i2p.crt @owner @group share/examples/i2pd/certificates/reseed/reseed_at_diva.exchange.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/reseed_at_diva.exchange.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/reseed_at_diva.exchange.crt @owner @group share/examples/i2pd/certificates/reseed/sahil_at_mail.i2p.crt @owner _i2pd @group _i2pd -@sample ${LOCALSTATEDIR}/lib/i2pd/certificates/reseed/sahil_at_mail.i2p.crt +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/sahil_at_mail.i2p.crt +@owner +@group +share/examples/i2pd/certificates/reseed/vserod1488_at_proton.me.crt +@owner _i2pd +@group _i2pd +@sample ${LOCALSTATEDIR}/i2pd/certificates/reseed/vserod1488_at_proton.me.crt @owner @group share/examples/i2pd/i2pd.conf +@mode 0640 @owner _i2pd @group _i2pd @sample ${SYSCONFDIR}/i2pd/i2pd.conf +@mode @owner @group share/examples/i2pd/tunnels.conf +@mode 0640 @owner _i2pd @group _i2pd @sample ${SYSCONFDIR}/i2pd/tunnels.conf +@mode @owner @group share/examples/login.conf.d/i2pd Index: net/i2pd/pkg/README =================================================================== RCS file: /cvs/ports/net/i2pd/pkg/README,v diff -u -p -u -p -r1.4 README --- net/i2pd/pkg/README 16 Apr 2024 15:22:32 -0000 1.4 +++ net/i2pd/pkg/README 26 May 2026 20:44:48 -0000 @@ -14,7 +14,7 @@ For a regular node, you should raise the # echo "kern.maxfiles=8192" >> /etc/sysctl.conf If you intend to run a floodfill, you should raise this limit even more: - + # sysctl kern.maxfiles=16000 # echo "kern.maxfiles=16000" >> /etc/sysctl.conf @@ -24,3 +24,47 @@ and also edit /etc/login.conf.d/i2pd: :openfiles-cur=8192:\ :openfiles-max=8192:\ :tc=daemon: + +The HTTP interface +================== + +On OpenBSD, i2pd's HTTP interface is disabled by default, because it +allows any user on the system to perform actions on the daemon, such +as shutting it down, or access private data, such as the router +identity and the tunnels' B32 addresses. + +If you want to use this interface anyway, you can reenable it in +/etc/i2pd/i2pd.conf under the [http] section. + + +Graceful shutdown +================= + +It is good practice to shutdown the i2pd daemon gracefully, to avoid +immediatly severing all connections, which would disconnect all +your peers and affect the overall operation of the I2P network. + +You can initiate a graceful shutdown without the HTTP interface by +sending a signal to the i2pd daemon like this: + + kill -INT $(cat /var/i2pd/i2pd.pid) + +When it shuts down gracefully, the i2pd daemon waits for all transit +tunnels to expire, which usually takes 10 minutes. + + +Logging +======= + +By default, the OpenBSD port of ${PKGSTEM} sends its log messages to +syslogd(8), which writes them to the /var/log/daemon file. + +The default log level of ${PKGSTEM} ("warn") can be very verbose. You +may want to reduce this log verbosity by changing the "loglevel" +parameter in /etc/i2pd/i2pd.conf. + +If you want log messages to be written to another file, e.g. +/var/i2pd/i2pd.log, you can change the "log" and "logfile" parameters +in /etc/i2pd/i2pd.conf. To have this log file rotated automatically, +see `man 8 newsyslog.conf`, and please take into account that the i2pd +daemon should be restarted gracefully at each rotation. Index: net/i2pd/pkg/i2pd.rc =================================================================== RCS file: /cvs/ports/net/i2pd/pkg/i2pd.rc,v diff -u -p -u -p -r1.4 i2pd.rc --- net/i2pd/pkg/i2pd.rc 11 Mar 2022 19:46:04 -0000 1.4 +++ net/i2pd/pkg/i2pd.rc 26 May 2026 20:44:48 -0000 @@ -2,7 +2,12 @@ daemon="${TRUEPREFIX}/bin/i2pd --daemon" daemon_user="_i2pd" -daemon_flags="--service --datadir=${LOCALSTATEDIR}/lib/i2pd --conf=${SYSCONFDIR}/i2pd/i2pd.conf --tunconf=${SYSCONFDIR}/i2pd/tunnels.conf --tunnelsdir=${SYSCONFDIR}/i2pd/tunnels.d" +daemon_flags="--service \ + --datadir=${LOCALSTATEDIR}/i2pd \ + --conf=${SYSCONFDIR}/i2pd/i2pd.conf \ + --tunconf=${SYSCONFDIR}/i2pd/tunnels.conf \ + --tunnelsdir=${SYSCONFDIR}/i2pd/tunnels.d \ + --certsdir=${LOCALSTATEDIR}/i2pd/certificates" . /etc/rc.d/rc.subr