Install I2P on Raspberry Pi
Install i2p on Raspberry Pi
See also
Assumptions
- In this manual, the IP address of the Raspberry PI machine within the local network is assumed to be '192.168.1.2'.
- The installation was done as user 'pi'
- After configuring to start automatically, I2P will run as user 'i2psvc'
- The assumed port for I2P is 25001. Don't use this value.
Install
- See: https://deb.i2p.net/
Pre-install packages:
sudo apt update sudo apt install -y apt-transport-https lsb-release curl
Add repository, add the key and install. This will ensure you will also receive updates:
#Add repository to sources echo "deb https://deb.i2p.net/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/i2p.list #Download key to 'i2p-archive-keyring.gpg ' curl -o i2p-archive-keyring.gpg https://geti2p.net/_static/i2p-archive-keyring.gpg #Display the key gpg --keyid-format long --import --import-options show-only --with-fingerprint i2p-archive-keyring.gpg #Verify the key: #7840 E761 0F28 B904 7535 49D7 67EC E560 5BCF 1346 #Copy the keyring to the keyrings directory: sudo cp i2p-archive-keyring.gpg /usr/share/keyrings #Create symlink to the key sudo ln -sf /usr/share/keyrings/i2p-archive-keyring.gpg /etc/apt/trusted.gpg.d/i2p-archive-keyring.gpg #Update sudo apt update #Upgrade (if applicable) sudo apt upgrade #Install sudo apt install -y i2p i2p-keyring
If you want to start and test as current user:
i2prouter start i2prouter status
Note:
- This way the I2P router will start and run as current user, settings and files are stored here /home/pi/.i2p/clients.config
- i2prouter should NOT never be started with sudo
- See below to read how to start i2p automatically and run as user 'i2psvc'
Test
Install terminal based browser and check if the config page is working:
sudo apt install w3m w3m http://127.0.0.1:7657/confignet
Upgrade
After upgrading I2P, the service needs to be restarted. Go to the console and click restart.
sudo apt update sudo apt upgrade i2p i2p-keyring
Start I2P automatically
Note: i2prouter should be started as a regular pi user. Do NOT start the router with sudo. If you use below configuration script the default user is 'i2psvc'.
sudo dpkg-reconfigure i2p
Default answers will be fine.
sudo service i2p start
Config folder:
sudo nano /var/lib/i2p/i2p-config/clients.config
Access config from another machine
Add the system's IP (192.168.1.2) to allow access from other machines:
#local run sudo nano /home/pi/.i2p/clients.config #service run sudo nano +3 /var/lib/i2p/i2p-config/clients.config
Edit line to be:
... clientApp.0.args=7657 ::1,127.0.0.1,192.168.1.2 ./webapps/ ...
After the first time initialization the configuration is moved to directory /var/lib/i2p/i2p-config/clients.config.d/ and the file clients.config is renamed to clients.config.bak. The configuration has now multiple files that can be modified. Edit the these files (multiple) to work with 192.168.1.2:
sudo -i nano /var/lib/i2p/i2p-config/clients.config.d/*-clients.config
For de addressbook:
sudo nano +11 /var/lib/i2p/i2p-config/addressbook/config.txt
Edit line to be:
... proxy_host=192.168.1.2 ...
Optionally add and require a username and password:
- http://192.168.1.2:7657/configui
- Enter username
- Enter password
- Click 'Add User'
Firewall/router settings
Note: this port is a random number, keep it private, it could be used to find your real IP adres.
Network > Port 25001
Use the documentation for your router, login to your router's Administrator page
WAN Port Forwarding From port 25001 To port 25001 To IP 192.168.1.2 Protocol: TCP & UDP
My I2P settings
Disable [-] Enable [+]
Clients:
- [+] Application tunnels
- [-] BOB application bridge
- [+] I2P Router Console
- [-] I2P webserver (eepsite)
- [-] Open Router Console in web browser at startup
- [-] SAM application bridge
Hidden Services Manager - go into the service and configure it to start automatically or not. To change the IP address from 127.0.0.1 to 192.168.1.2:
- Stop the service
- Select the IP address
- Save
- Start the service
I2P Hidden Services:
- [-] I2P webserver
I2P Client Tunnels:
- [+] I2P HTTP Proxy
- [-] I2P HTTPS Proxy
- [-] Irc2P
- [-] mtn.i2p-projekt.i2p
- [-] pop3.postman.i2p
- [-] smtp.postman.i2p
Web Apps:
- [+] Torrents
- [+] Hidden Services Manager
- [-] Identification Image Generator
- [+] I2P Router Console
- [+] Addressbook
Bandwidth (example):
- 800 In
- 300 Out
- 10% share
Other settings:
- Changed the I2P HTTP Proxy interface from '127.0.0.1' to '192.168.1.2'. Combined with the 'http://192.168.1.2/proxy.pac' and settings in Firefox we can now access '.i2p' websites with this browser from an other machine.
I2P router Snark settings
- Configuration
- Data directory (example):
- /media/data/i2psnark
- Data directory (example):
You will need some storage, see below option.
Firefox browsing I2P websites
Note: I2P HTTP Proxy interface needs to changed from '127.0.0.1' to '192.168.1.2'.
A PAC file is used to redirect websites with a '.I2P' extension. You may make this file available via a webserver, for example http://192.168.1.2/proxy.pac.
sudo nano /var/www/html/proxy.pac
function FindProxyForURL(url, host) {
// i2p via proxy or DIRECT if unavailable
if (shExpMatch(host, "*.i2p")) {
return "PROXY 192.168.1.2:4444; DIRECT";
}
// All other requests DIRECT:
return "DIRECT";
}
To configure your Firefox webbrowser:
- go to > Preferences > Advanced > Network > Connection Settings
- Check the 'Automatic proxy configuration URL':
- Enter: http://192.168.1.2/proxy.pac
Format a DATA partition as exFAT, allowing larger than 4Gb files
Install packages:
sudo apt install exfat-utils
List devices:
sudo lsblk
In my case:
- device /dev/mmcblk0
- Partition 1 is the RPi boot partition
- Partition 2 is the RPi root partition
- Partition 3 will be the DATA partition - ALL DATA WILL BE ERASED
Remove mount:
sudo umount /media/data
Edit the partition tables, accept defaults mostly - ALL DATA WILL BE ERASED:
sudo fdisk /dev/mmcblk0
'p' - print partitions 'd' - delete partition - 3 'n' - new partition - 3 't' - change partition type - 3 7 (HPFS/NTFS/exFAT) 'w' - write and quit
Format - ALL DATA WILL BE ERASED, mount:
#Format sudo mkfs.exfat -n Data /dev/mmcblk0p3 #Mount sudo mount /dev/mmcblk0p3 /media/data #i2psnark data directory mkdir /media/data/i2psnark
To mount automatically at boot it needs to be added to fstab:
sudo nano /etc/fstab
#Device Mountpoint FilesystemType MountOptions BackupDump(0) FsckOrder(2) /dev/mmcblk0p3 /media/data exfat-fuse defaults,noatime 0 2
Write permissions for i2pSnark:
id i2psvc uid=108(i2psvc) gid=113(i2psvc) groups=113(i2psvc) sudo umount /media/data sudo nano /ets/fstab /dev/mmcblk0p3 /media/data exfat defaults,uid=108,gid=113,noatime 0 2 #reload fstab sudo systemctl daemon-reload #test fstab sudo mount /media/data #allow others to write: sudo adduser user1 i2psvc
Set the immutable-attribute to prevent writing to a folder that is meant as a mountpoint. This can not be done while mounted:
sudo umount /media/data sudo chattr +i /media/data sudo mount /media/data
Troubleshooting
Network problem after reboot
After a reboot the configuration would show a network error and continue to do so until the service was restarted.
To give is some more time a delay was added in the service definition.
sudo nano /lib/systemd/system/i2p.service [Service] ... ExecStartPre=-/bin/sleep 20 ... sudo systemctl daemon-reload
Upgrade: deb uses unknown compression (zst)
i2p upgrade ... dpkg-deb: error: archive '/var/cache/apt/archives/i2p-keyring_2023.10.01_all.deb' uses unknown compression for member 'control.tar.zst', giving up ...
Problem: compression zst is not yet supported by Debian deb. Fix: recreate deb with supported compression
# install zst compression tool sudo apt install zstd #The original file: cd cp /var/cache/apt/archives/i2p-keyring_2023.10.01_all.deb . # extract files 'control.tar.zst' and 'data.tar.zst' from deb: ar x i2p-keyring_2023.10.01_all.deb # compress and rename with 'xz' zstd -d < control.tar.zst| xz > control.tar.xz zstd -d < data.tar.zst| xz > data.tar.xz # recreate deb ar -m -c -a sdsd i2p-keyring_2023.10.01_all_repacked.deb debian-binary control.tar.xz data.tar.xz # cleanup files rm debian-binary control.tar.xz data.tar.xz control.tar.zst data.tar.zst # resulting files ls i2p-keyring_2023.10.01_all.deb i2p-keyring_2023.10.01_all_repacked.deb # install the deb and try upgrade again sudo dpkg -i --force-overwrite i2p-keyring_2023.10.01_all_repacked.deb sudo apt upgrade