For some weeks now on the #ict channel of the IOTA Discord we have been experimenting with ICT and Raspberry PI or virtual machines with 512MB of RAM.

Today we’ll see if it’s possible to install ICT on an Android phone (e.g. the phone with the broken display we had in the drawer).

Telefono Android con il display guasto

Needed software:

Let’s install UserLAnd and ConnectBot on our Android phone, we install Debian GNU/Linux and via ConnectBot we connect to the local SSH session.

UserLAnd su Android

SSH connection

We install net-tools necessary to discover our IP address and be able to connect to the SSH session from our computer via Putty or bash in Linux.

sudo apt install net-tools
Installiamo network-tools

We display the IP address of our phone:

ifconfig
Indirizzo IP

Fine. Open your favorite SSH client and connect from the PC to port 2022 for example from the bash con:

ssh [email protected] -p 2022

in my example with:

ssh [email protected] -p 2022

Now that we can use a serious keyboard we install the necessary tools:

sudo apt install --assume-yes nano gnupg2 screen

oracle-java8-jdk

We install oracle-java8-jdk from the team ppa webupd8, we add the repo:

sudo nano /etc/apt/sources.list.d/weupd8team.list
deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main
deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main
java

Save by pressing ctrl + o then Enter then exit with ctrl + x.

Let’s add the public key:

sudo apt-key adv --no-tty --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886

We update the repositories and install java:

sudo apt update && sudo apt install --assume-yes oracle-java8-installer

Now I follow the comprehensive lambtho guide on medium with some necessary modifications

sudo nano setup-ict.sh
#!/bin/bash

apt-get --assume-yes install git
git clone https://github.com/Come-from-beyond/Ict.git
cd Ict
javac src/cfb/ict/*.java
PROPERTIES_FILE="ict.properties"
echo "host = 0.0.0.0" > $PROPERTIES_FILE
echo "port = 14265" >> $PROPERTIES_FILE
echo "" >> $PROPERTIES_FILE
echo "//Discord neighbor: <username>#<userid>" >> $PROPERTIES_FILE
echo "neighborAHost = ?.?.?.?" >> $PROPERTIES_FILE
echo "neighborAPort = 14265" >> $PROPERTIES_FILE
echo "" >> $PROPERTIES_FILE
echo "//Discord neighbor: <username>#<userid>" >> $PROPERTIES_FILE
echo "neighborBHost = ?.?.?.?" >> $PROPERTIES_FILE
echo "neighborBPort = 14265" >> $PROPERTIES_FILE
echo "">> $PROPERTIES_FILE
echo "//Discord neighbor: <username>#<userid>" >> $PROPERTIES_FILE
echo "neighborCHost := ?.?.?.?" >> $PROPERTIES_FILE
echo "neighborCPort = 14265" >> $PROPERTIES_FILE

echo "ICT app installed!"
echo "Open 'ict.properties' and add three neighbor ip-addresses"
echo "Extra note: You may need to ensure that your firewall doesn't block UDP-traffic on port 14265."
echo "Start ICT with command: './run-ict.sh'"

Save by pressing ctrl + o then Enter then exit with ctrl + x.

And install:

sudo bash setup-ict.sh

Find neighbors for your ICT

ICT requires at least one neighbour to function properly. You can add up to three. Go to the #ICT channel of the IOTA Discord server and ask users to add your node. Start a private discussion with interested parties and exchange your public IP if it is static or your DNS. When you have found i you need to add it to the ict.properties file.

sudo nano Ict/ict.properties

Replace the ?.?.?.? with your neighbors IP or DNS (e.g. something like 12.34.56.789 or myNeighbor.ddns.net ). Note that you can also edit the fields <username>#<userID> with the discord handle of the neighbors to keep track of them easily. Once your neighbors added, save and exit using ctrl + o then Enter then ctrl + x .

Update ICT

We can now create a script that will update easily ICT when needed. Create the script using:

sudo nano update-ict.sh

And copy/past the following

#!/bin/bash

cd Ict
git pull
javac src/cfb/ict/*.java

echo "ICT app updated!"
echo "Start ICT with command: './run-ict.sh'"

As always, save and exit using ctrl + o then Enter then ctrl + x.

When a new update of ICT will be out, you will simply have to type:

sudo bash update-ict.sh

to update, and then restart ICT after that.

Note that this update script may run into problems in the future, depending on the changes made to the ICT source code. If you are experimenting some problems with the update, do not hesitate to visit the #ICT channel on IOTA’s discord.

Execute ICT

The last script to create will run ICT. Type in:

sudo nano run-ict.sh

And then copy/paste the following:

#!/bin/bash

cd Ict/src
java cfb.ict.Ict ../ict.properties

Non dimenticarsi di salvare ed uscire utilizzando ctrl + O seguito da Invio ed infine ctrl + X.

Do not forget to save and exit using ctrl + O then Enter then ctrl + X .

You can now run that script with sudo bash run-ict.sh . However, that script will need you to stay connected. Then as the next step we will start ICT in a virtual screen with screen.

Start with screen

This part differs completely from the lambtho guide in that systemd does not turn on android (if you find a solution let me know)

We start a session with screen:

screen -S ict

We’ll be on the command line, start ICT now:

sudo bash run-ict.sh

Once started we will see the DNS/IP addresses of our neighbors.

ICT dal terminale

Now we wait for the messages

ICT dal terminale con messaggi

To exit the screen session press the key combination ctrl + a and d

To return to the session write:

screen -r ict

Here is the view from the phone:

Screen
UserLAnd con screen ed ICT

For those who want to experiment with a free Google VPS there are the following guides in English:

https://medium.com/@hbmy289/how-to-set-up-a-free-micro-vps-on-google-cloud-platform-bddee893ac09

https://medium.com/@hbmy289/how-to-setup-an-ict-node-on-a-free-google-micro-vps-842f475d51a


The original guide by lambtho: https://medium.com/@lambtho/iota-ict-installation-tutorial-c079a1ca3b7d


It is possible to support me on Patreon https://www.patreon.com/antonionardella

For further information in Italian or German, find my contact details on this page.
If you have found my free translation/guide useful, I gladly accept donations 😉

IOTA:
QOQJDKYIZYKWASNNILZHDCTWDM9RZXZV9DUJFDRFWKRYPRMTYPEXDIVMHVRCNXRSBIJCJYMJ9EZ9USHHWKEVEOSOZB
BTC:
1BFgqtMC2nfRxPRge5Db3gkYK7kDwWRF79

I can’t guarantee anything and I’m free from any responsibility.


Also published on Medium.