diff --git a/src/freedombone-app-scuttlebot b/src/freedombone-app-scuttlebot index 301b0c31eff8dedcbf50839647ca94ed5760d028..ff6ce53fe44a052ea53db8e31c366b020a1e58a0 100755 --- a/src/freedombone-app-scuttlebot +++ b/src/freedombone-app-scuttlebot @@ -33,17 +33,12 @@ IN_DEFAULT_INSTALL=0 SHOW_ON_ABOUT=0 SHOW_CLEARNET_ADDRESS_ON_ABOUT=0 -SCUTTLEBOT_DOMAIN_NAME= -SCUTTLEBOT_CODE= -SCUTTLEBOT_VERSION='11.2.0' +SCUTTLEBOT_VERSION='13.0.0' +SCUTTLEBOT_REPLICATE_NODES=5 SCUTTLEBOT_PORT=8010 SCUTTLEBOT_ONION_PORT=8623 -GIT_SSB_PORT=7718 -NGINX_GIT_SSB_PORT=7719 scuttlebot_variables=(MY_USERNAME - SCUTTLEBOT_DOMAIN_NAME - SCUTTLEBOT_CODE DEFAULT_DOMAIN_NAME SYSTEM_TYPE) @@ -130,9 +125,18 @@ function upgrade_scuttlebot { return fi - if ! npm upgrade -g scuttlebot@${SCUTTLEBOT_VERSION} --save; then - return - fi + cat <<EOF > /usr/bin/upgrade_scuttlebot +#!/bin/bash +cd /etc/scuttlebot || exit 1 +if ! npm upgrade -g scuttlebot@${SCUTTLEBOT_VERSION} --save; then + exit 2 +fi +exit 0 +EOF + chmod +x /usr/bin/upgrade_scuttlebot + su -c '/usr/bin/upgrade_scuttlebot' - scuttlebot + rm /usr/bin/upgrade_scuttlebot + sed -i "s|scuttlebot version.*|scuttlebot version:${SCUTTLEBOT_VERSION}|g" "${COMPLETION_FILE}" } @@ -171,18 +175,9 @@ function restore_remote_scuttlebot { function remove_scuttlebot { firewall_remove ${SCUTTLEBOT_PORT} - firewall_remove ${GIT_SSB_PORT} - - if [ $SCUTTLEBOT_DOMAIN_NAME ]; then - nginx_dissite ${SCUTTLEBOT_DOMAIN_NAME} - rm /etc/nginx/sites-available/${SCUTTLEBOT_DOMAIN_NAME} - fi - systemctl stop git_ssb systemctl stop scuttlebot - systemctl disable git_ssb systemctl disable scuttlebot - rm /etc/systemd/system/git_ssb.service rm /etc/systemd/system/scuttlebot.service systemctl daemon-reload @@ -191,174 +186,11 @@ function remove_scuttlebot { if [ -d /etc/scuttlebot ]; then rm -rf /etc/scuttlebot fi - if [ -f /usr/bin/git-ssb-create ]; then - rm /usr/bin/git-ssb-create - fi remove_completion_param install_scuttlebot sed -i '/scuttlebot /d' "$COMPLETION_FILE" } -function git_ssb_script { - if [[ "$1" == "mesh" ]]; then - # shellcheck disable=SC2154 - git_ssb_script_name=$rootdir/usr/bin/git-ssb-create - git_ssb_daemon_filename=$rootdir/etc/systemd/system/git_ssb.service - else - git_ssb_script_name=/usr/bin/git-ssb-create - git_ssb_daemon_filename=/etc/systemd/system/git_ssb.service - fi - { echo '#!/bin/bash'; - echo "reponame=\"\$1\""; - echo ''; - echo "if [[ \"\$reponame\" != \"\" ]]; then"; - echo " mkdir \$reponame"; - echo " cd \$reponame"; - echo ' git init'; - echo " git ssb create ssb \$reponame"; - echo ' git push --tags ssb master'; - echo 'fi'; - echo 'exit 0'; } > $git_ssb_script_name - chmod +x $git_ssb_script_name - - { echo '[Unit]'; - echo 'Description=Git SSB (SSB git web interface)'; - echo 'After=syslog.target'; - echo 'After=network.target'; - echo 'After=scuttlebot.target'; - echo ''; - echo '[Service]'; - echo 'Type=simple'; - echo 'User=scuttlebot'; - echo 'Group=scuttlebot'; - echo "WorkingDirectory=/etc/scuttlebot"; - echo "ExecStart=/usr/bin/git ssb web --public localhost:$GIT_SSB_PORT"; - echo 'Restart=always'; - echo 'Environment="USER=scuttlebot"'; - echo ''; - echo '[Install]'; - echo 'WantedBy=multi-user.target'; } > $git_ssb_daemon_filename -} - -function scuttlebot_git_setup { - if [[ "$1" == "mesh" ]]; then - - if [ ! -d "$rootdir/root/.npm-global/lib/node_modules/git-ssb/node_modules/git-ssb-web/highlight" ]; then - mkdir "$rootdir/root/.npm-global/lib/node_modules/git-ssb/node_modules/git-ssb-web/highlight" - fi - if [ ! -f "$rootdir/root/.npm-global/lib/node_modules/git-ssb/node_modules/highlight.js/styles/foundation.css" ]; then - echo $'Could not find foundation.css' - exit 347687245 - fi - cp "$rootdir/root/.npm-global/lib/node_modules/git-ssb/node_modules/highlight.js/styles/foundation.css" "$rootdir/root/.npm-global/lib/node_modules/git-ssb/node_modules/git-ssb-web/highlight/foundation.css" - - git_ssb_nginx_site=$rootdir/etc/nginx/sites-available/git_ssb - { echo 'server {'; - echo " listen $NGINX_GIT_SSB_PORT default_server;"; - echo " server_name P${PEER_ID}.local;"; - echo ''; - echo ' access_log /dev/null;'; - echo ' error_log /dev/null;'; - echo ''; - echo ' add_header X-XSS-Protection "1; mode=block";'; - echo ' add_header X-Content-Type-Options nosniff;'; - echo ' add_header X-Frame-Options SAMEORIGIN;'; } > "$git_ssb_nginx_site" - else - if [ ! $SCUTTLEBOT_DOMAIN_NAME ]; then - exit 7357225 - fi - - if [ ! -d /root/.npm-global/lib/node_modules/git-ssb/node_modules/git-ssb-web/highlight ]; then - mkdir /root/.npm-global/lib/node_modules/git-ssb/node_modules/git-ssb-web/highlight - fi - if [ ! -f /root/.npm-global/lib/node_modules/git-ssb/node_modules/highlight.js/styles/foundation.css ]; then - echo $'Could not find foundation.css' - exit 347687245 - fi - cp /root/.npm-global/lib/node_modules/git-ssb/node_modules/highlight.js/styles/foundation.css /root/.npm-global/lib/node_modules/git-ssb/node_modules/git-ssb-web/highlight/foundation.css - - git_ssb_nginx_site=/etc/nginx/sites-available/${SCUTTLEBOT_DOMAIN_NAME} - function_check nginx_http_redirect - nginx_http_redirect $SCUTTLEBOT_DOMAIN_NAME "index index.html" - { echo 'server {'; - echo ' listen 443 ssl;'; - echo ' #listen [::]:443 ssl;'; - echo " server_name $SCUTTLEBOT_DOMAIN_NAME;"; - echo ''; } >> $git_ssb_nginx_site - function_check nginx_compress - nginx_compress $SCUTTLEBOT_DOMAIN_NAME - echo '' >> "$git_ssb_nginx_site" - echo ' # Security' >> "$git_ssb_nginx_site" - function_check nginx_ssl - nginx_ssl $SCUTTLEBOT_DOMAIN_NAME - - function_check nginx_security_options - nginx_security_options $SCUTTLEBOT_DOMAIN_NAME - fi - - { echo ''; - echo ' root /root/.npm-global/lib/node_modules/git-ssb/node_modules/git-ssb-web;'; - echo ''; - echo ' location = / {'; - echo " proxy_pass http://localhost:${GIT_SSB_PORT};"; - echo " proxy_set_header X-Real-IP \$remote_addr;"; - echo " proxy_set_header Host \$host;"; - echo " proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;"; - echo ' proxy_http_version 1.1;'; - echo " proxy_set_header Upgrade \$http_upgrade;"; - echo ' proxy_set_header Connection upgrade;'; - echo ' }'; - echo '}'; } >> $git_ssb_nginx_site - - if [ "$SCUTTLEBOT_ONION_HOSTNAME" ]; then - { echo ''; - echo 'server {'; - echo " listen 127.0.0.1:${SCUTTLEBOT_ONION_PORT} default_server;"; - echo ' port_in_redirect off;'; - echo " server_name ${SCUTTLEBOT_ONION_HOSTNAME};"; - echo ''; - echo ' access_log /dev/null;'; - echo ' error_log /dev/null;'; - echo ''; - echo ' add_header X-XSS-Protection "1; mode=block";'; - echo ' add_header X-Content-Type-Options nosniff;'; - echo ' add_header X-Frame-Options SAMEORIGIN;'; - echo ''; - echo ' root /root/.npm-global/lib/node_modules/git-ssb/node_modules/git-ssb-web;'; - echo ''; - echo ' location = / {'; - echo " proxy_pass http://localhost:${GIT_SSB_PORT};"; - echo " proxy_set_header X-Real-IP \$remote_addr;"; - echo " proxy_set_header Host \$host;"; - echo " proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;"; - echo ' proxy_http_version 1.1;'; - echo " proxy_set_header Upgrade \$http_upgrade;"; - echo ' proxy_set_header Connection upgrade;'; - echo ' }'; - echo '}'; } >> $git_ssb_nginx_site - fi - if [[ "$1" != "mesh" ]]; then - nginx_ensite git_ssb - fi -} - -function mesh_install_dat { - get_npm_arch - mesh_setup_npm - - cat <<EOF > "$rootdir/usr/bin/install_dat" -#!/bin/bash -npm install --arch=$NPM_ARCH -g dat -EOF - chroot "$rootdir" /bin/chmod +x /usr/bin/install_dat - chroot "$rootdir" /usr/bin/install_dat - rm "$rootdir/usr/bin/install_dat" -} - -function install_dat { - npm install -g dat -} - function mesh_install_scuttlebot { #shellcheck disable=SC2153 if [[ "$VARIANT" != "meshclient" && "$VARIANT" != "meshusb" ]]; then @@ -367,8 +199,6 @@ function mesh_install_scuttlebot { SCUTTLEBOT_ONION_HOSTNAME= - mesh_install_dat - # shellcheck disable=SC2086 chroot "$rootdir" $INSTALL_PACKAGES libsodium23 @@ -400,24 +230,6 @@ EOF exit 528253 fi - cat <<EOF > "$rootdir/usr/bin/install_git_ssb" -#!/bin/bash -npm config set prefix '~/.npm-global' -export PATH=~/.npm-global/bin:$PATH -export NPM_CONFIG_PREFIX=~/.npm-global -source ~/.profile -if ! npm install --arch=$NPM_ARCH -g git-ssb; then - exit 1 -fi -if ! npm install --arch=$NPM_ARCH -g git-remote-ssb; then - exit 2 -fi -exit 0 -EOF - chroot "$rootdir" /bin/chmod +x /usr/bin/install_git_ssb - chroot "$rootdir" /usr/bin/install_git_ssb - rm "$rootdir/usr/bin/install_git_ssb" - # daemon { echo '[Unit]'; echo 'Description=Scuttlebot (messaging system)'; @@ -435,9 +247,11 @@ EOF echo ''; echo '[Install]'; echo 'WantedBy=multi-user.target'; } > "$rootdir/etc/systemd/system/scuttlebot.service" +} - scuttlebot_git_setup mesh - git_ssb_script mesh +function enable_mdns { + # files gw_name myhostname mdns4_minimal [NOTFOUND=return] dns + sed -i "s|hosts:.*|hosts: files mdns4_minimal dns mdns4 mdns|g" /etc/nsswitch.conf } function install_scuttlebot { @@ -446,9 +260,10 @@ function install_scuttlebot { $INSTALL_PACKAGES libsodium23 - if [ ! -d /etc/scuttlebot ]; then - mkdir -p /etc/scuttlebot + if [ -d /etc/scuttlebot ]; then + rm -rf /etc/scuttlebot fi + mkdir -p /etc/scuttlebot # an unprivileged user to install and run as useradd -d /etc/scuttlebot/ scuttlebot @@ -471,10 +286,6 @@ EOF exit 528253 fi - install_dat - npm install -g git-ssb - npm install -g git-remote-ssb - # daemon { echo '[Unit]'; echo 'Description=Scuttlebot (messaging system)'; @@ -495,15 +306,22 @@ EOF chown -R scuttlebot:scuttlebot /etc/scuttlebot - # files gw_name myhostname mdns4_minimal [NOTFOUND=return] dns - sed -i "s|hosts:.*|hosts: files mdns4_minimal dns mdns4 mdns|g" /etc/nsswitch.conf + enable_mdns # start the daemon systemctl enable scuttlebot.service systemctl daemon-reload systemctl start scuttlebot.service - sleep 3 + # wait for the config to be created + scuttlebot_ctr=10 + until [ $scuttlebot_ctr -gt 0 ]; do + if [ -d /etc/scuttlebot/.ssb ]; then + break + fi + sleep 3 + scuttlebot_ctr=$((scuttlebot_ctr-1)) + done if [ ! -d /etc/scuttlebot/.ssb ]; then echo $'Scuttlebot config not generated' @@ -527,8 +345,8 @@ EOF echo ' "pub": true,'; echo ' "local": true,'; echo ' "friends": {'; - echo ' "dunbar": 150,'; - echo ' "hops": 3'; + echo " \"dunbar\": ${SCUTTLEBOT_REPLICATE_NODES},"; + echo ' "hops": 1'; echo ' },'; echo ' "gossip": {'; echo ' "connections": 2'; @@ -542,19 +360,6 @@ EOF systemctl restart scuttlebot.service firewall_add scuttlebot ${SCUTTLEBOT_PORT} - firewall_add git_ssb ${GIT_SSB_PORT} - - scuttlebot_git_setup - git_ssb_script - - systemctl enable git_ssb.service - systemctl daemon-reload - systemctl start git_ssb.service - - function_check create_site_certificate - create_site_certificate ${SCUTTLEBOT_DOMAIN_NAME} 'yes' - - systemctl restart nginx if ! grep -q "scuttlebot version:" "${COMPLETION_FILE}"; then echo "scuttlebot version:${SCUTTLEBOT_VERSION}" >> "${COMPLETION_FILE}"