Instalar o Navegador Tor em qualquer distribuição Linux

Publicado por bruno (última atualização em 12/05/2020)

[ Hits: 1.790 ]

Download tor.sh




Necessário ter a ferramenta CURL instalada em seu sistema.

Debian/Ubuntu:

$ sudo apt install -y curl
  
Fedora:

$ sudo dnf install -y curl
  
SuSE:

$ sudo zypper install -y curl
    
ArchLinux:

$ sudo pacman -S --noconfirm curl
    
Download e execução:

$ curl -sSL -o tor.sh https://raw.github.com/Brunopvh/torbrowser/master/tor.sh
$ chmod +x tor.sh
$ ./tor.sh --install
$ ./tor.sh --help

Fontes:

https://www.torproject.org/
https://support.torproject.org/tbb/how-to-verify-signature/

  



Esconder código-fonte

#!/usr/bin/env bash
#
VERSION='2020-05-07'
#
#-----------------------| INFO |-------------------------------#
# Este script baixa e instala a ultima versão do no em qualquer
# distribuição linux. 
#  Requerimentos: bash curl 
#
#-----------------------| GITHUB |-----------------------------#
# https://github.com/Brunopvh/torbrowser
# git clone https://github.com/Brunopvh/torbrowser.git
#
#-----------------------| Projeto Tor |-----------------------#
# https://www.torproject.org/pt-BR/download/
# https://terminalroot.com.br/2015/08/45-exemplos-de-variaveis-e-arrays-em_19.html
# 


Red='\033[0;31m'
Green='\033[0;32m'
Yellow='\033[0;33m'
White='\033[0;37m'
Reset='\033[m'

#=============================================================#
_c()
{
   if [[ -z $2 ]]; then
      echo -e "\033[1;$1m"
   elif [[ $2 ]]; then
      echo -e "\033[$2;$1m"
   fi
}

#=============================================================#
_msg()
{
   echo -e "[>] $@"
}

_red()
{
   echo -e "${Red}[!] $@${Reset}"
}

_green()
{
   echo -e "${Green}[*] $@${Reset}"
}

_yellow()
{
   echo -e "${Yellow}[+] $@${Reset}"
}

#=============================================================#

usage()
{
cat << EOF
     Use: $(basename $0) --help|--install|--remove|--version|--downloadonly

       -h|--help               Mostra ajuda.
       -i|--install            Instala a ultima versão do torbrowser.
       -r|--remove             Desistala o torbrowser.
       -v|--version            Mostra a versão deste programa.
       -d|--downloadonly       Apenas baixa o torbrowser.
       -u|--update             Baixar atualização do navegador Tor se houver atualização disponivel.
EOF
exit 0
}

[[ -z $1 ]] && usage

space_line='-----------------------------------------------'

#=============================================================#
# Verifiacar se um executável existe
_WHICH()
{
   # $1 = executável a verificar.
   if [[ -x $(which "$1" 2> /dev/null) ]]; then
      return 0
   else
      return 1
   fi
}

#=============================================================#
# Requisitos
#=============================================================#
# Usuário não pode ser o root.
if [[ $(id -u) == '0' ]]; then
   _red "Usuário não pode ser o 'root' saindo"
   exit 1
fi

# Necessário ter a ferramenta Curl.
if ! _WHICH 'curl'; then
   _red "Instale a ferramenta: curl"
   exit 1
fi

#=============================================================#
# Arquivos e diretórios
#=============================================================#
dir_dow="$HOME/.cache/downloads"
dir_temp="/tmp/space_tor_$USER"
dir_unpack="$dir_temp/unpack"

mkdir -p "$HOME/.local/bin"
mkdir -p "$HOME/.local/share/applications"
mkdir -p "$dir_dow"
mkdir -p "$dir_temp"
mkdir -p "$dir_unpack"


declare -A array_tor_dirs
array_tor_dirs=(
   [tor_destination]="$HOME/.local/bin/torbrowser-amd64"
   [tor_exec]="$HOME/.local/bin/torbrowser"
   [tor_file_desktop]="$HOME/.local/share/applications/start-tor-browser.desktop"
)


#=============================================================#
# Função para desistalar o tor.
#=============================================================#
_uninstall()
{
   _msg "Desistalando navegador Tor"

   for c in "${array_tor_dirs[@]}"; do
      if [[ -d "$c" ]] || [[ -f "$c" ]] || [[ -L "$c" ]]; then
         _msg "Removendo: $c"
         rm -rf "$c"
      else
         _red "Não encontrado: $c"
      fi
   done
}

#=============================================================#

case "$1" in
   -h|--help) usage; exit;;
   -r|--remove) _uninstall; exit;;
   -v|--version) echo -e "$(basename $0) V${VERSION}"; exit 0;;
esac

ShowLogo()
{
   local GithubScriptTor='https://github.com/Brunopvh/torbrowser'
   
   _msg "$space_line"
   _msg "$(basename $0) V${VERSION}"
   _msg "${Yellow}A${Reset}utor: Bruno Chaves"
   _msg "${Yellow}G${Reset}ihub: $GithubScriptTor"
   _msg "$space_line"
}

ShowLogo

# url = domain/version/name
# echo "${tor_server_dir:17:5}" -> Retornar 5 caracteres apartir da posição 17.
# /dist/torbrowser/9.0.9/tor-browser-linux64-9.0.9_en-US.tar.xz
#
_msg "${Yellow}A${Reset}guarde" 
tor_page='https://www.torproject.org/download/'
tor_domain='https://dist.torproject.org/torbrowser'
tor_html=$(grep -m 1 'torbrowser.*linux.*64.*tar' <<< $(curl -sSL "$tor_page"))
tor_server_dir=$(echo "$tor_html" | sed 's/.*="//g;s/">.*//g')
tor_file_name="$(basename $tor_server_dir)"
tor_version=$(echo "$tor_server_dir" | cut -d '/' -f 4)
tor_url_dow="$tor_domain/$tor_version/$tor_file_name" # Formar a URL apartir dos dados obtidos.
tor_url_asc="${tor_url_dow}.asc"

tor_path_file="$dir_dow/$tor_file_name" # Local onde o arquivo será baixado.
tor_path_file_asc="${tor_path_file}.asc"


# Inserir ~/.local/bin em PATH.
echo "$PATH" | grep -q "$HOME/.local/bin" || {
   PATH="$HOME/.local/bin:$PATH"
}

#=============================================================#
# Funções para configurar o PATH do usuário.
#=============================================================#
path_bash()
{
   # Criar o arquivo ~/.bashrc se não existir
   if [ ! -f "$HOME/.bashrc" ]; then
      echo ' ' >> "$HOME/.bashrc"
   fi

   # Se a linha de configuração já existir, encerrar a função aqui.
   grep "$HOME/.local/bin" "$HOME/.bashrc" 1> /dev/null && return 0

   # Continuar
   echo "Configurando o arquivo [$HOME/.bashrc]"
   echo "export PATH=$PATH" >> "$HOME/.bashrc"
}

path_zsh()
{
   # Criar o arquivo ~/.zshrc se não existir
   if [ ! -f "$HOME/.zshrc" ]; then
      echo ' ' >> "$HOME/.zshrc"
   fi

   # Se a linha de configuração já existir, encerrar a função aqui.
   grep "$HOME/.local/bin" "$HOME/.zshrc" 1> /dev/null && return 0

   # Continuar
   echo "Configurando o arquivo [$HOME/.zshrc]"
   echo "export PATH=$PATH" >> "$HOME/.zshrc"
}


_CURL()
{
   # $1 = url
   # $2 = destino

   local url="$1"
   local file="$2"

   if [[ -f "$file" ]]; then
      _msg "Arquivo encontrado em [$file]"
      return 0
   fi

   _msg "Baixando [$url]"
   _msg "Destino [$file]"

   if curl -# -SL "$url" -o "$file"; then
      return 0
   else
      _red "Falha no download"
      rm -rf "$file" 2> /dev/null
      return 1
   fi
}


_unpack()
{
   local path_file="$tor_path_file"

   # Limpar o conteúdo do diretório antes de descomprimir.
   cd "$dir_unpack" && rm -rf * 1> /dev/null
   echo -ne "[>] Descompactando: $path_file "
   #_msg "Destino: [$dir_unpack]"

   # Detectar a extensão do arquivo.
   if [[ "${path_file: -6}" == 'tar.gz' ]]; then      # tar.gz, 6 ultimos caracteres.
      type_file='tar.gz'
   elif [[ "${path_file: -7}" == 'tar.bz2' ]]; then   # tar.bz2
      type_file='tar.bz2'
   elif [[ "${path_file: -6}" == 'tar.xz' ]]; then    # tar.xz
      type_file='tar.xz'
   elif [[ "${path_file: -4}" == '.zip' ]]; then      # .zip
      type_file='.zip'
   else
      _red "Arquivo não suportado: [$path_file]"
      return 1
   fi

   # Descomprimir.
   case "$type_file" in
      'tar.gz') tar -zxvf "$path_file" -C "$dir_unpack" 1> /dev/null || return 1;;
      'tar.bz2') tar -jxvf "$path_file" -C "$dir_unpack" 1> /dev/null || return 1;;
      'tar.xz') tar -Jxf "$path_file" -C "$dir_unpack" 1> /dev/null || return 1;;
      '.zip') unzip "$path_file" -d "$dir_unpack" 1> /dev/null || return 1;;
      *) return 1;;
   esac
   echo -e "${Yellow}OK${Reset}"
   return 0
}


_gpg_check()
{
   # https://support.torproject.org/tbb/how-to-verify-signature/
   # gpg --auto-key-locate nodefault,wkd --locate-keys torbrowser@torproject.org
   # gpg --output ./tor.keyring --export 0xEF6E286DDA85EA2A4BA7DE684E2C6E8793298290
   #
   local url_tor_key='https://openpgpkey.torproject.org/.well-known/openpgpkey/torproject.org/hu/kounek7zrdx745qydx6p59t9mqjpuhdf'
   local path_keyring="$dir_temp/tor.keyring"

   # Verificar se gpg está instalado no sistema.
   if ! _WHICH 'gpg'; then
      _red "Instale o pacote [gpg] para verificar assinaturas"
      return 1
   fi 

   
   # Verificar se gpgv está instalado no sistema.
   if ! _WHICH 'gpgv'; then
      _red "Instale o pacote [gpgv] para verificar assinaturas"
      return 1
   fi 


   # Remover arquivo .keyring antigo se existir.
   if [[ -f "$path_keyring" ]]; then rm "$path_keyring"; fi
   if [[ -f "$tor_path_file_asc" ]]; then rm "$tor_path_file_asc"; fi
   
   _CURL "$tor_url_asc" "$tor_path_file_asc" || return 1
   
   echo -ne "[>] Importando key "
   if curl -Ss "$url_tor_key" -o - | gpg --import - 1> /dev/null 2>&1; then
      echo -e "${Yellow}OK${Reset}"
   else
      echo ' '
      _red "Falha gpg --import"
   fi
   
   
   _msg "Gerando arquivo: $path_keyring"   
   gpg --output "$path_keyring" --export 0xEF6E286DDA85EA2A4BA7DE684E2C6E8793298290 || {
      _red "Falha ao tentar gerar o arquivo tor.keyring"
      return 1
   }

   echo -ne "[>] Executando: gpgv --keyring "
   if gpgv --keyring $path_keyring $tor_path_file_asc $tor_path_file 1> /dev/null 2>&1; then
      echo -e "${Yellow}OK${Reset}"
      return 0
   else
      echo ' '
      _red "Falha na verificação de integridade, prosseguir com a instalação mesmo assim [s/n]?: "
      read -t 10 -n 1 sn
      [[ "${sn,,}" == 's' ]] || return 1
      return 0
   fi
}


_install_tor()
{
   if _WHICH 'torbrowser'; then
      _msg "TorBrowser já instalado use ${Yellow}--remove${Reset} para desinstalar"
      return 0
   fi

   _CURL "$tor_url_dow" "$tor_path_file" || return 1

   for a in "${@}"; do
      if [[ "$a" == '-d' ]] || [[ "$a" == '--downloadonly' ]]; then
         _yellow "Somente baixar - $tor_path_file"
         return 0
         break
      fi
   done

   _gpg_check || return 1
   _unpack || return 1

   _msg "Instalando em: ${array_tor_dirs[tor_destination]}"
   cd "$dir_unpack"
   mv $(ls -d tor-*) "${array_tor_dirs[tor_destination]}"
   chmod -R u+x "${array_tor_dirs[tor_destination]}"
   cd "${array_tor_dirs[tor_destination]}" 
   ./start-tor-browser.desktop --register-app 1> /dev/null # Gerar arquivo .desktop

   # Gerar script para chamada via linha de comando.
   touch "${array_tor_dirs[tor_exec]}"
   echo '#!/usr/bin/env bash' > "${array_tor_dirs[tor_exec]}" # ~/.local/bin/torbrowser
   echo -e "\ncd ${array_tor_dirs[tor_destination]} \n"  >> "${array_tor_dirs[tor_exec]}"
   echo './start-tor-browser.desktop "$@"' >> "${array_tor_dirs[tor_exec]}"

   # Gravar a versão atual no arquivo .desktop
   echo -e "Version=${tor_version}" >> "${array_tor_dirs[tor_file_desktop]}"

   chmod u+x "${array_tor_dirs[tor_file_desktop]}"
   chmod u+x "${array_tor_dirs[tor_exec]}"

   cp -u "${array_tor_dirs[tor_file_desktop]}" ~/Desktop/ 2> /dev/null
   cp -u "${array_tor_dirs[tor_file_desktop]}" ~/'Área de trabalho'/ 2> /dev/null
   cp -u "${array_tor_dirs[tor_file_desktop]}" ~/'Área de Trabalho'/ 2> /dev/null

   _msg "Configurando PATH"
   path_bash
   path_zsh

   Bash_Shell=$(command -v bash 2> /dev/null)
   Zsh_Shell=$(command -v zsh 2> /dev/null)

   if [ -x "$Bash_Shell" ]; then bash -c ". $HOME/.bashrc"; fi
   if [ -x "$Zsh_Shell" ]; then zsh -c ". ~/.zshrc"; fi


   if _WHICH 'torbrowser'; then
      _msg "TorBrowser instalado com sucesso"
      torbrowser # Abrir o navegador.
   else
      _red "Falha na instalação de TorBrowser"
      return 1
   fi
}



# Verificar se existe atualização disponível.
_check_update()
{
   # Filtrar apenas a versão no arquivo .desktop
   if [[ -f "${array_tor_dirs[tor_file_desktop]}" ]]; then
      version_instaled=$(grep '^Version=' "${array_tor_dirs[tor_file_desktop]}" | sed 's/.*=//g')
   else
      version_instaled='0'
   fi
   
   if [[ "$tor_version" != "$version_instaled" ]]; then
      _msg "Nova versão disponível - $tor_version"
      _msg "Baixando atualização"
      _CURL "$tor_url_dow" "$tor_path_file"
      _msg "Atualização baixada com sucesso use ${Yellow}bash $(basename $0) --install${Reset} para instalar."
   else
      _msg "Não existem atualizações disponiveis"
   fi
}



while [[ $1 ]]; do
   case "$1" in
      -d|--downloadonly) _CURL "$tor_url_dow" "$tor_path_file";;
      -i|--install) _install_tor "$@";;
      -u|--update) _check_update;;
      *) usage; break;;
   esac
   shift
done

exit 

Scripts recomendados

Backup de vários servidores, diferenciado a rotina pela aplicação

Filtrando processos facilmente com psaux ( ps aux + grep + wc -l)

Pós-instalação do Ubuntu 18.04 LTS (codecs, ferramentas do sistema e dev.)

Bloqueando o acesso à internet

SSSR - configure Samba no Damn Small Linux e DSL-N


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts