diff --git a/src/freedombone-app-ipfs b/src/freedombone-app-ipfs index b6975926..1fdd7d2a 100755 --- a/src/freedombone-app-ipfs +++ b/src/freedombone-app-ipfs @@ -201,7 +201,74 @@ function configure_firewall_for_ipfs { echo 'configure_firewall_for_ipfs' >> $COMPLETION_FILE } +function mesh_install_ipfs_js { + if grep -Fxq "mesh_install_ipfs_js" $COMPLETION_FILE; then + return + fi + + chroot ${rootdir} apt-get -y install npm + chroot ${rootdir} apt-get -y install libpam0g-dev fuse + + chroot ${rootdir} npm cache clean -f + chroot ${rootdir} npm install -g n + chroot ${rootdir} n ${IPFS_NODE_VERSION} + chroot ${rootdir} npm install ronin@${IPFS_JS_RONIN_VERSION} --global + chroot ${rootdir} npm install ipfs@${IPFS_JS_VERSION} --global + + IPFS_PATH=/usr/local/bin + + if [ ! -f ${rootdir}$IPFS_PATH/jsipfs ]; then + exit 637292 + fi + + # directories to mount to + if [ ! -d ${rootdir}/ipfs ]; then + chroot ${rootdir} mkdir /ipfs + chroot ${rootdir} mkdir /ipns + chroot ${rootdir} chown $MY_USERNAME:$MY_USERNAME /ipfs + chroot ${rootdir} chown $MY_USERNAME:$MY_USERNAME /ipns + fi + + if [ -f ${rootdir}/etc/fuse.conf ]; then + chroot ${rootdir} chown $MY_USERNAME:$MY_USERNAME /etc/fuse.conf + fi + if [ -f ${rootdir}/dev/fuse ]; then + chroot ${rootdir} chown $MY_USERNAME:$MY_USERNAME /dev/fuse + fi + + IPFS_DAEMON_NAME=ipfs + IPFS_DAEMON_FILE=${rootdir}/etc/systemd/system/${IPFS_DAEMON_NAME}.service + echo '[Unit]' > $IPFS_DAEMON_FILE + echo 'Description=IPFS javascript daemon' >> $IPFS_DAEMON_FILE + echo 'After=syslog.target' >> $IPFS_DAEMON_FILE + echo 'After=network.target' >> $IPFS_DAEMON_FILE + echo '' >> $IPFS_DAEMON_FILE + echo '[Service]' >> $IPFS_DAEMON_FILE + echo 'Type=simple' >> $IPFS_DAEMON_FILE + echo "User=$MY_USERNAME" >> $IPFS_DAEMON_FILE + echo "Group=$MY_USERNAME" >> $IPFS_DAEMON_FILE + echo "WorkingDirectory=/home/$MY_USERNAME" >> $IPFS_DAEMON_FILE + echo "ExecStart=${IPFS_PATH}/jsipfs daemon --mount" >> $IPFS_DAEMON_FILE + echo 'Restart=on-failure' >> $IPFS_DAEMON_FILE + echo "Environment=\"USER=$MY_USERNAME\" \"HOME=/home/$MY_USERNAME\"" >> $IPFS_DAEMON_FILE + echo '' >> $IPFS_DAEMON_FILE + echo '[Install]' >> $IPFS_DAEMON_FILE + echo 'WantedBy=multi-user.target' >> $IPFS_DAEMON_FILE + + chroot ${rootdir} systemctl enable ${IPFS_DAEMON_NAME} + chroot ${rootdir} systemctl daemon-reload + + function_check create_avahi_service + create_avahi_service ipfs "ipfs" udp $IPFS_PORT "IPFS_PEER_ID" + + echo 'mesh install_ipfs_js' >> $COMPLETION_FILE +} + function install_ipfs_js { + if [[ $SYSTEM_TYPE == "$VARIANT_MESH" ]]; then + mesh_install_ipfs_js + return + fi if grep -Fxq "install_ipfs_js" $COMPLETION_FILE; then return fi diff --git a/src/freedombone-image-customise b/src/freedombone-image-customise index c8d4d1f3..b3b82716 100755 --- a/src/freedombone-image-customise +++ b/src/freedombone-image-customise @@ -550,6 +550,7 @@ initialise_mesh() { install_tomb install_tox install_web_server + install_ipfs if [ $ENABLE_ZERONET ]; then install_zeronet fi diff --git a/src/freedombone-image-mesh b/src/freedombone-image-mesh index 3acca083..ed55eee5 100755 --- a/src/freedombone-image-mesh +++ b/src/freedombone-image-mesh @@ -723,6 +723,36 @@ function setup_amnesic_data { fi } +function setup_ipfs { + IPFS_PATH=/usr/local/bin + IPFS_KEY_LENGTH=2048 + + su -c "$IPFS_PATH/jsipfs init -b $IPFS_KEY_LENGTH" - $MY_USERNAME + if [ ! -d ${rootdir}/home/$MY_USERNAME/.ipfs ]; then + echo "IPFS could not be initialised for user $MY_USERNAME" >> $INSTALL_LOG + exit 7358 + fi + + TEMP_IPFS_ID=/tmp/ipfsid + su -c "echo $($IPFS_PATH/jsipfs id | grep '\"ID\":' | awk -F '\"' '{print $4}') > $TEMP_IPFS_ID" - $MY_USERNAME + if [ ! -f $TEMP_IPFS_ID ]; then + echo 'No IPFS identity was created' >> $INSTALL_LOG + exit 37895 + fi + + IPFS_PEER_ID=$(cat $TEMP_IPFS_ID) + if [ ${#IPFS_PEER_ID} -lt 10 ]; then + echo 'Invalid IPFS peer ID' >> $INSTALL_LOG + echo "$IPFS_PEER_ID" >> $INSTALL_LOG + exit 74782 + fi + + # TODO in avahi service for ipfs replace IPFS_PEER_ID + + rm $TEMP_IPFS_ID + echo 'IPFS installed with ID $IPFS_PEER_ID' >> $INSTALL_LOG +} + # whether to reset the identity set_new_identity= if [ $2 ]; then @@ -778,6 +808,7 @@ if [ -f $MESH_INSTALL_SETUP ]; then fi configure_toxcore create_tox_user + setup_ipfs mesh_amnesic if [ ! -f $MESH_AMNESIC ]; then