Giter Site home page Giter Site logo

jdk8-oracle-for-linux's People

Contributors

viniciusalopes avatar

Watchers

 avatar  avatar

Forkers

pablocaldas

jdk8-oracle-for-linux's Issues

Não faz download do jdk

Ao testar com o Debian Buster do Daniel Elíades, percebi que não estava conseguindo fazer o download do jdk diretamente da Oracle.

#!/usr/bin/env bash
# Template orgulhosamente criado por (Shell-Base)

#-----------HEADER-------------------------------------------------------------|
# AUTOR             : Vovolinux <[email protected]>
# HOMEPAGE          : https://vovolinux.com.br 
# DATA DE CRIAÇÃO   : 15/12/2019 às 21:07 
# PROGRAMA          : install-jdk8
# VERSÃO            : 1.0.4
# LICENÇA           : MIT - © 2020 - Vovolinux
# PEQUENA DESCRIÇÃO : Instalação do Java SE Development Kit 8 para GNU/Linux
# 
# FONTE: Install Oracle JDK 8 on Linux
#        <https://www.javahelps.com/2015/03/install-oracle-jdk-in-ubuntu.html>
# 
# CHANGELOG :
# 2020-09-22 - v1.0.4 - Vovolinux
#   - Adaptação para Debian GNU/Linux 10 (buster) (thanks Daniel Elyades Teimoso)
#     VER POR QUE NAO ESTA FUNCIONANDO O DOWNLOAD DO JDK. se for o caso, tirar do script.
#   - Download da versão : jdk-8u261-linux-x64   - 
#
# 2020-05-01 - v1.0.3 - Vovolinux:
#   - Removida a variável data_arquivo;
#   - Removida a variável data_log;
#   - Alterado o nome do arquivo de log;
#   - Revisão dos comentários de linha;
#   - Incluída a função oferece_download;
#   - Incluída a variável instruc_download;
#   - Incluída a função somente_root;
#   - Incluída a função dependencias;
#   - Movida a variavel distros para a sessão --- VARIÁVEIS ---;
#   - Método 'update()' renomeado para 'update_alternatives()';
#   - Incluída a exibição da fonte deste script no cabecalho;
#   - Melhoria na atualização de /etc/environment;
#
# 2020-04-26 - v1.0.2 - Vovolinux:
#   - Detecção de arquivos 'jdk-8u*-linux-*.tar.gz' no diretório do script.
#   - Detecção automáGica da versão do JDK a ser instalado.
#   - Incluída a opção de continuar mesmo que este script ainda não tenha
#     sido testado com a distribuição atual.
#   - Modularização de funções com scripts do projeto 'shell-util'
#     <https://github.com/Viniciusalopes/shell-util>
#   - Incluída a sessão --- DEPENDÊNCIAS ---
#
# 2019-12-15 - v1.0.1 - Vovolinux:
#   - Melhoria de comentários e aproveitamento de variáveis.
#   - Substituição de 'echo' por 'printf' e 'cat << EOF'.
#
#------------------------------------------------------------------------------|


#--------------------------------- VARIÁVEIS ---------------------------------->

### VARIÁVEIS DO SCRIPT ###

# Autor
autor='Vovolinux'

# Programa
programa='install-jdk8'

# Versão
versao='1.0.4'

# Ano atual
ano=$(date "+%Y")

# Informação de Copyryght
copyright="© ${ano} - ${autor}"

# Separador de linha
separador='-'

# Quantidade de colunas para exibição no CLI
colunas=80

# Repositório deste script
repositorio='https://github.com/Viniciusalopes/jdk8-oracle-for-linux'

# Fonte deste script
fonte='https://www.javahelps.com/2015/03/install-oracle-jdk-in-ubuntu.html'
info_fonte="FONTE: Install Oracle JDK 8 on Linux\n <${fonte}>"

# Mensagem de cabecalho
cabecalho="Script: "${programa}" v"${versao}" - "${copyright}"\nRepositório: <"${repositorio}">\n"${info_fonte}""
            
# Mensagem de rodapé
rodape=" Vovolinux: Sem trauma e sem teoria!"

# Distros testadas
distros=(
    'Ubuntu 20.04 LTS'
    'Ubuntu 19.10'
    'Linux Mint 19.3'
    'Linux Mint 19.2'
    'Debian GNU/Linux 10 (buster)'
)

### VARIÁVEIS DO SISTEMA OPERACIONAL ###

# Hardware da máquina (arquitetura) para compor o nome do arquivo_tar_gz
if [[ $(uname -m) = "x86_64" ]]; then
    arquitetura="x64"
else
    arquitetura="i586"
fi

### VARIÁVEIS PARA LINKS WEB ###

# Caminho para download dos scripts auxiliares de shell-util
raw_shell_util='https://raw.githubusercontent.com/Viniciusalopes/jdk8-oracle-for-linux/master/shell-util/'

# Link para download do jdk
download='https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html'

### VARIÁVEIS DE DIRETÓRIOS E ARQUIVOS ###

# Diretório para scripts auxiliares e dependências
dir_shell_util='/tmp/shell-util'

# Diretório de instalação
dir_lib_jvm='/usr/lib/jvm'

# Arquivo de instalação do jdk
arquivo_tar_gz="jdk-8u*-linux-${arquitetura}.tar.gz"

# Diretório do arquivo de log
dir_log='/var/log/install-jdk-vovolinux'

# Arquivo de log
log=''

# Instruções para download caso não encontre o arquivo 
instruc_download=">> Faça o download manualmente em:\n   ${download}\n>> e salve o arquivo no diretório:\n   '${PWD}/'.\n"

# Versão do jdk
vjdk=''

# Número da versão do jdk
num_vjdk='261'

# Versão da compilação (build)
build_jdk='b12'

# Key para download
download_key='a4634525489241b9a9e1aa73d9e118e6'

# Dependências e scripts auxiliares
sources=('so')

#------------------------------- FIM-VARIÁVEIS --------------------------------<


#-------------------------------- DEPENDÊNCIAS -------------------------------->

# Verifica dependências, faz o download se for o caso, e importa em seguida.
dependencias()
{
    # Linha de separação
    local _linha="--------------------------------------------------------------------------------"
    
    printf %b "Verificando dependências...\n"

    # Cria o diretório temporário para scripts auxiliares se não existir
    if ! [[ -d ${dir_shell_util} ]]; then
        mkdir -v "${dir_shell_util}"
    fi

    # Define a dependência para download
    dep="${dir_shell_util}/${sources[0]}"

    printf %b "${_linha}\n> ${dep} -> "

    # Download 
    if [[ -f ${dep} ]]; then
        printf %b "OK\n"
        source "${dep}"
    else
        printf %b "Não encontrada.\n"
        wget -v ${raw_shell_util}/${sources[0]} -O "${dep}"

        # Encerra se não conseguir fazer o download do arquivo
        if [[ $? -ne 0 ]]; then
            rm -rf "${dep}"
            exit 1
        fi

        # Inclui a dependencia principal
        printf %b "> ${dep} -> "
        source "${dep}"
        printf %b "OK\n"
    fi

    # Dependencias de Operações com texto, Menus e específicas para o jdk8
    sources=('texto' 'menu')

    # Inclui demais dependencias de sources()
    get_sources "${dir_shell_util}" "${raw_shell_util}" ""
}

#------------------------------------------------------------------------------|


#----------------------------------- FUNÇÕES ---------------------------------->

# Encerra o script se não estiver sendo executado como r00t.
somente_root()
{
    # é root?
    [[ ${UID} -ne 0 ]] && {  
        printf %b "Execute como r00t.\n"
        exit 1
    }
}

# Oferece uma versão para download pelo terminal
# Step 1:
# Download the latest JDK(jdk-8u241-linux-x64.tar.gz) from this official site.
oferece_download(){

    local _arquivo="jdk-8u${num_vjdk}-linux-${arquitetura}.tar.gz"

    # Se o arquivo já foi baixado, atualiza o arquivo_tar_gz e encerra a função
    if [[ -f ${_arquivo} ]]; then
        arquivo_tar_gz=${_arquivo}
        return 0
    fi

#    local _cookie='Cookie: oraclelicense=accept-securebackup-cookie'
#    local _url='https://download.oracle.com/otn-pub/java/jdk/8u251-b08'
#    local _key='3d5a2bb8f8d4428bbe94aed7ec7ae784'
    local _cookie='Cookie: oraclelicense=accept-securebackup-cookie'
    local _url="https://download.oracle.com/otn-pub/java/jdk/8u${num_vjdk}-${build_jdk}"

    printf %b "Este programa pode fazer o download do arquivo '${_arquivo}'\n"
    pergunta_sn "Deseja fazer o download automaGicamente?"

    if [[ $? -eq 1 ]]; then
        printf %b "Ouquei...\n\n${instruc_download}"
        printf %b "$(sessao_texto "${separador}" "${colunas}" "${rodape}")\n"
        exit 1
    else
        wget --no-cookies --no-check-certificate --header "\"${_cookie}\"" "${_url}/${download_key}/${_arquivo}"
	echo "\"${_cookie}\"" "${_url}/${download_key}/${_arquivo}"
	exit 0
    fi
}

# Extrai o arquivo_tar_gz
# Step 2:
# sudo mkdir /usr/lib/jvm
# 
# Step 3:
# Enter the following command to change the directory.
# 
# Step 4:
# Extract the jdk-8u*-linux-*.tar.gz file in that directory.
extrai_arquivo()
{
    # Atualiza a variável do nome do arquivo de log
    log="${dir_log}/install-jdk_${versao}_${autor}_$(date_format Ymd_HMS).log"

    # Cria o diretório
    if [[ -e "./${arquivo_tar_gz}" ]]; then
        # Step 3:
        # Enter the following command to change the directory.
        if ! [[ -e "${dir_lib_jvm}" ]]; then
            printf %b ">> Criando diretório jvm...\n"
            mkdir -v "${dir_lib_jvm}"
        fi
        
        # Cria o diretório do arquivo de log se não existir
        if ! [[ -e "${dir_log}" ]]; then
            printf %b ">> Criando diretório de log...\n"
            mkdir -v ${dir_log}
        fi

        separa "${separador}" "${colunas}"

        # Extrai para o diretório criado e grava no log
        # Step 4:
        # Extract the jdk-8u*-linux-*.tar.gz file in that directory.
        
        printf %b ">> Extraindo '$arquivo_tar_gz...'\nLOG da extração:\n->${log}\n"
        cat << EOF >> ${log}
$(printf %b "$(sessao_texto "${separador}" "${colunas}" "${cabecalho}")")
$(date_format Y-m-d_H:M:S) - Iniciando extração do arquivo
Arquivo: ${arquivo_tar_gz}
Local da extração: ${PWD}/
$(separa "-" 80)
EOF
        tar -xvzf ${arquivo_tar_gz} -C ${dir_lib_jvm} >> $log
        printf %b "$(sessao_texto "${separador}" "${colunas}" "$(date_format Y-m-d_H:M:S) Fim.\n${rodape}")" >> $log
    fi
}

# Atualiza /etc/environment
# Step 5:
# Enter the following command to open the environment variables file.
# 
# Step 6:
# In the opened file, add the following bin folders to the existing PATH variable.

atualiza_env()
{
    # Backup de /etc/environment
    separa "${separador}" "${colunas}"
    printf %b ">> Atualizando /etc/environment...\n"
    local _arquivo_bkp="/etc/environment_$(date_format Ymd_HMS)_bkp"
    cp -v /etc/environment "${_arquivo_bkp}"
    
    # Converte o texto da variável PATH em um array()
    #   NOTA: O array() já é declarado na função to_array()
    to_array ";:" $(cat /etc/environment | grep "PATH=\"" | cut -d \" -f2)

    # Se for Debian, '/etc/environment' é vazio, então preencho com o valor de $PATH
    if [[ ${#array[@]} -eq "0" ]]; then
    	to_array ";:" ${PATH}
    fi

    # Paths que serão incluídos
    local _paths=(
        "${dir_lib_jvm}/${vjdk}/bin"
        "${dir_lib_jvm}/${vjdk}/db/bin"
        "${dir_lib_jvm}/${vjdk}/jre/bin"
    )

    # Inclui o $_paths em $array se nao existir
    for p in "${_paths[@]}"; do
        array_contem "${p}" 
        [[ $? -eq 1 ]] && array+=("${p}")
    done

    # Composição da linha PATH
    local _path="PATH=\""

    for a in "${array[@]}"; do 
        _path="${_path}${a}:"
    done
    
    # Troca o : por " no final
    _path=$(substitui_no_final "${_path}" ":" "\"")
 
    local _flags=(
        "# DATA DA ATUALIZAÇÃO:"
        "PATH=\""
        "J2SDKDIR=\""
        "J2REDIR=\""
        "JAVA_HOME=\""
        "DERBY_HOME=\""
    )

    # Salva o conteúdo do arquivo em array() de linhas
    file_to_array /etc/environment
    
    # Novo conteúdo de '/etc/environment'
    cat << EOF > /etc/environment
# UPDATE BY: Vovolinux <${repositorio}>
# DATA DA ATUALIZAÇÃO: $(date_format Y-m-d_H:M:S)
${_path}
J2SDKDIR="${dir_lib_jvm}/${vjdk}"
J2REDIR="${dir_lib_jvm}/${vjdk}/jre"
JAVA_HOME="${dir_lib_jvm}/${vjdk}"
DERBY_HOME="${dir_lib_jvm}/${vjdk}/db"
EOF
    # Busca variáveis no arquivo não foram modificadas
    for linha in "${array[@]}"; do # Para cada linha de '/etc/environment'
        local _encontrou=1
        for f in "${_flags[@]}"; do     # Para cada flag
            texto_contem "${linha}" "${f}"  # Testa se a linha contém a flag
            if [[ $? -eq 0 ]]; then
                _encontrou=0
            fi
        done
        
        # Inclui as linhas que não foram modificadas e já estavam no arquivo
        if [[ $_encontrou -ne 0 ]]; then
            printf %b "${linha}\n" >> /etc/environment 
        fi
    done
}

# install, set e list, para informar o sistema sobre a localização do Java. 
# Step 7:
# Enter the following commands to inform the system about the Java's location. Depending on your JDK version, the paths can be different.
#
# Step 8:
# To verify the setup enter the following commands and make sure that they print the location of java and javac as you have provided in the previous step.
update_alternatives()
{
    # Comandos no terminal:
    separa "${separador}" "${colunas}"
    printf %b ">> Configurando o Java...\n"
    update-alternatives --install "/usr/bin/java" "java" "${dir_lib_jvm}/${vjdk}/bin/java" 0
    update-alternatives --set java ${dir_lib_jvm}/${vjdk}/bin/java
    update-alternatives --list java
    update-alternatives --install "/usr/bin/javac" "javac" "${dir_lib_jvm}/${vjdk}/bin/javac" 0
    update-alternatives --set javac ${dir_lib_jvm}/${vjdk}/bin/javac
    update-alternatives --list javac
    printf %b "\n"
}

mensagem_final()
{
    cat << EOF
$(separa "${separador}" "${colunas}")
A instalação terminou.
Caso o seu Netbeans já esteja instalado, atualize o valor de 'netbeans_jdkhome'
no arquivo '~/netbeans-v.v/etc/netbeans.conf'.

Exemplo:
    netbeans_jdkhome="${dir_lib_jvm}/${vjdk}"
$(sessao_texto "${separador}" "${colunas}" "${rodape}")

EOF
}

#--------------------------------- FIM-FUNÇÕES --------------------------------<

# Programa começa aqui :)

# Encerra se não for r00t
somente_root

# Verifica dependências
dependencias

# Imprime o cabeçalho
printf %b "$(sessao_texto "${separador}" "${colunas}" "${cabecalho}")\n"

# Verifica se o script já foi testado com a distribuição atual
verifica_distro "${dir_shell_util}/menu"

# Oferece o download automáGico ;)
oferece_download

# Verifica se o arquivo está no mesmo diretório do script e atualiza a variável 'arquivo_tar_gz'
arquivo_tar_gz=$(require "${PWD}" "${arquivo_tar_gz}" "${instruc_download}")

# Encerra caso o require não encontre o arquivo_tar_gz na mesma pasta do script
if [[ $? -ne 0 ]]; then
    printf %b "${arquivo_tar_gz}\n"
    printf %b "$(sessao_texto "${separador}" "${colunas}" "${rodape}")\n"
    exit 1
fi

printf %b ">> Verificando a versão do jdk8 -> "

# Atualiza a variavel com a versão do jdk baixado
vjdk=$(tar -tzf ${arquivo_tar_gz} | grep jre/LICENSE | cut -d '/' -f1)
printf %b "${vjdk}\n"

# Extrai o arquivo tar_gz
extrai_arquivo

# Atualiza /etc/environment
atualiza_env

# Instala, seta e verifica o java.
update_alternatives

# Exibe a versão instalada
java -version

# Exibe a mensagem final (rodapé)
mensagem_final

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.