#!/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. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. 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. # 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 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 for x in tor-*.tar.xz; do # cleanup old tarballs [[ -e $x ]] || break [[ $x != $f ]] || continue command rm -f $x done