consistent license, various updates
[buildscripts] / tor-browser
index 2c46a67161a05d29efb78556a04e83fb4c762539..923c4e3c4145502707fdfdda2f90d12f68895ee2 100755 (executable)
@@ -1,5 +1,12 @@
-#!/bin/bash -l
-# Copyright (C) 2016 Ian Kelling
+#!/bin/bash
+# I, Ian Kelling, follow the GNU license recommendations at
+# https://www.gnu.org/licenses/license-recommendations.en.html. They
+# recommend that small programs, < 300 lines, be licensed under the
+# Apache License 2.0. This file contains or is part of one or more small
+# programs. If a small program grows beyond 300 lines, I plan to switch
+# its license to GPL.
+
+# Copyright 2024 Ian Kelling
 
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-set -eE -o pipefail
-trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?"' ERR
+
+if [[ -s ~/.bashrc ]]; then . ~/.bashrc; fi
 
 
 # stable version is shown on:
 # https://dist.torproject.org/torbrowser/
+# except sometimes you get a new stable before it's
+# officially released, which is ok by me. for example,
+# right now, it has 6.5.2, but stable is 6.5.1.
+# we exclude verions with letters, as that seems to
+# be a relatively reliable indication of alpha/beta releases.
 
-ver=$(curl -s https://dist.torproject.org/torbrowser/ \
-          | sed -rn 's/.*href="([0-9]+\.[0-9]+\.[0-9]+).*/\1/p' \
-          | sort -Vr | head -n 1)
-
+# Their server has failed a few times on me, so do some retrying.
+for (( i=0; i <= 6 ; i++ )); do
+  c=$(curl -s https://dist.torproject.org/torbrowser/) && break
+  sleep 15
+done
+if [[ ! $c ]]; then
+  echo "$0: error: failed to curl tor directory listing" >&2
+  exit 1
+fi
+vers=($(printf "%s\n" "$c" | sed -rn 's#.*href="([0-9]+\.[0-9]+[.0-9]*)/.*#\1#p' | sort -Vr))
 
 # by default it has perms for just 1 non-root user, which is ok for now.
 
 cd /a/opt
 
-f=tor-browser-linux64-${ver}_en-US.tar.xz
-timestamp=$(stat -c %Y $f) ||:
-wget -N https://www.torproject.org/dist/torbrowser/$ver/$f
-new_timestamp=$(stat -c %Y $f) ||:
-if [[ $timestamp == $new_timestamp && -e /a/opt/tor-browser_en-US/Browser/start-tor-browser ]]; then
-    # already installed
-    exit 0
+dl() {
+  f=tor-browser-linux64-${ver}_ALL.tar.xz
+  if [[ -e $f ]]; then
+    timestamp=$(stat -c %Y $f)
+  else
+    timestamp=0
+  fi
+  ret=0
+  echo wget -nv -N https://www.torproject.org/dist/torbrowser/$ver/$f
+  wget -nv -N https://www.torproject.org/dist/torbrowser/$ver/$f || ret=$?
+}
+
+# some releases are for specific non-gnu oses
+for ((i=0; i<${#vers[@]}; i++)); do
+  ver=${vers[i]}
+  dl
+  # 8 is return code for 404.
+  if [[ $ret != 8 ]]; then
+    break
+  fi
+done
+
+new_timestamp=$(stat -c %Y $f)
+if [[ $timestamp != $new_timestamp || ! -e /a/opt/tor-browser/Browser/start-tor-browser ]]; then
+  # not already installed
+  rm -rf tor-browser
+  tar Jxf $f
+
+
+
+  ## begin handlers customization
+  ## the default file doesn't exist anymore. i customized it to open magnet links,
+  ## it might work with removing the default stuff and keeping the magnet link part,
+  ## but I'd have to test and I don't care that much.
+  # dest=/a/opt/tor-browser/Browser/TorBrowser/Data/Browser/profile.default/handlers.json
+  # orig=/p/c/tor-handlers-orig.json
+  # src=/p/c/tor-handlers.json
+  # if ! diff -q $src $dest &>/dev/null; then
+  #   echo "Error: handlers file changed. adjust based on upstream"
+  #   exit 1
+  # fi
+  # cp $src $dest
+  ## end handlers customization
+
+  cp /p/c/tor-user.js /a/opt/tor-browser/Browser/TorBrowser/Data/Browser/profile.default/user.js
+
 fi
-rm -rf tor-browser_en-US
-ex $f
 
 for x in tor-*.tar.xz; do
-    # cleanup old tarballs
-    [[ -e $x ]] || break
-    [[ $x != $f ]] || continue
-    command rm -f $x
+  # cleanup old tarballs
+  [[ -e $x ]] || break
+  [[ $x != $f ]] || continue
+  command rm -f $x
 done
-s lnf /a/opt/tor-browser_en-US/Browser/start-tor-browser /usr/local/bin