abntex / limarka

Escreva seu trabalho de conclusão de curso com as normas da ABNT em Markdown
https://github.com/abntex/limarka/wiki
MIT License
407 stars 41 forks source link

Criar um instalador automático #161

Open guiscaranse opened 6 years ago

guiscaranse commented 6 years ago

Criei essa issue para estudar a possibilidade de construir um instalador automático do Limarka. Acredito que o correto seria buscar e instalar os pacotes necessários, testá-los e instalar o Limarka por cima.

gjvnq commented 5 years ago

Para Debian/Ubuntu deve ser bem fácil.

Para macOS acho possível criar um script que instale tudo automaticamente.

Já para o Windows, a melhor opção me parece ser algo como o NSIS.

Vou tentar criar os instaladores e se conseguir eu respondo aqui.

edusantana commented 5 years ago

O arquivo .travis.yml contém instruções de instalação que são testadas automaticamente no linux, através do travis.

cauachagas commented 5 years ago

Acho que uma solução interessante seria usar o Anaconda/Miniconda, que apesar de ligado ao python, serve como gerenciador de programas multiplataforma. Inclusive diferenciando a instalação do programas por plataforma (osx, Linux, Windows)

Olhei rapidamente, o Anaconda tem repositórios com o programas: pandoc, ruby, texlive (também há o miktex), Perl, latexmk.

Nunca mexi nessa parte de repositório, mas pelo o que sei, a maioria só clona/indica de repositórios mais usados (conda-forge e anaconda) pra instalar as dependências. No caso do limarka, só teria que adicionar num repositório a pasta com as gems.

Enfim. Criando um repositório "repo-limarka", dava pra instalar tudo com um único comando

conda install -c repo-limarka limarka

Eu usuária o miniconda, cujo instalador é pequeno (uns 40mb) e basicamente só instala o python. Depois é só o usuário usar o comando acima.

guiscaranse commented 5 years ago

Hm, pode ser uma solução interessante. Na verdade, uma vez o limarka adicionado no repositório, podemos apenas criar um instalador leve com o miniconda que rode os comandos, verifique dependencias e etc. (Para usuários pouco experientes)

cauachagas commented 5 years ago

Justamente, é isso que o Anaconda/miniconda faz, @guiscaranse. Sempre instala os pacotes atuais, no momento da instalação /ou quando pedido pra atualizar. Em outras palavras, se o limarka lançar uma atualização ou se o usuário digitar "conda update limarka " (acho que é assim), ele atualiza os binários.

Terça feira, eu posso tentar vasculhar verificações. Do que eu testei, o limarka tem algumas dependências que precisam ser compiladas, quando instaladas com o "gem install" (precisam de compiladores (uns 70mb [gcc blá-blá-blá ]). Verei se colando o Ruby do Anaconda/Miniconda no path e substituindo o ruby do sistema pelo instalada, se funciona. Se funcionar, é só colocar no futuro repositório do limarka (não tenho experiência no assunto do Anaconda/Miniconda). Posso tentar criar esse repositório, mas estou sem tempo (tempo efetivo). Por isso dá pra colocar essa issue como uma implementação a ser considerada sem muita prioridade. Sinceramente, acho que é a situação mais trivial. Já fiz instalações quer eram triviais no Linux que era difíceis no windows (por exemplo, o jmol) e vice-versa, sem precisar de compilação. Além disso, dá pra adicionar instalacoes do osx, que não tenho contato.

guiscaranse commented 5 years ago

Mas eu estou me referindo ao usuário básico @cauachagas, com pouca instrução e conhecimentos de linha de comandos. Estava me referindo a fazer um instalador visual que implementasse o miniconda/anaconda de fundo para que esse tipo de usuário também pudesse instalar o limarka sem precisar mexer no anaconda/miniconda.

edusantana commented 5 years ago

Para auxiliar nos scripts de instalação:

#!/usr/bin/env sh

while getopts ":a:" opt; do
  case $opt in
    a)
      echo "-a was triggered, Parameter: $OPTARG" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Opção -$OPTARG requer argumento." >&2
      exit 1
      ;;
  esac
done
cauachagas commented 5 years ago

@edusantana, pelo o que entendi, esse seu modelo serve para adicionar parâmetros, certo? Como adaptar esse meu script com o que você mandou?

#!/usr/bin/env sh

echo "Instalação do Pandoc..."

echo "Obs: Este script sempre instala a ultima versão do Pandoc"
# Adaptado de https://blog.markvincze.com/download-artifacts-from-a-latest-github-release-in-sh-and-powershell/
repo="jgm/pandoc"
releases="https://github.com/$repo/releases"
release=$(curl -L -s -H 'Accept: application/json' $releases/latest)
tag=$(echo $release | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/')
# Somente nos arquivos ".deb" é adicionado o "-1" 
file="pandoc-$tag-1-amd64.deb"
wget echo $releases/download/$tag/$file && sudo dpkg -i $file.deb

echo "Instalação do TinyTeX..."

wget -qO- "https://yihui.name/gh/tinytex/tools/install-unx.sh" | sh

echo -e "\n\n# TinyTeX" >> ~/.bashrc
# Alguns binários não são linkados em "~/bin"
echo "export "PATH"=$"PATH":~/.TinyTeX/bin/x86_64-linux" >> ~/.bashrc
source ~/.bashrc

tlmgr install memoir abntex2 lastpage microtype lipsum pdfpages ifetex textcase enumitem xcolor babel-portuges listings 

# Pacotes adicionais
# shipunov. Melhor quadros https://github.com/abntex/limarka/issues/183
# texliveonfly. Instalar pacotes automáticamente https://github.com/abntex/limarka/issues/184
# tlmgr install shipunov texliveonfly

versao=$( lsb_release -rs)
# Ubuntu 17.10 < já estão descontuados.
# Somente a LTS 16.04 é mantida
# Comparação de floats https://stackoverflow.com/questions/8654051/how-to-compare-two-floating-point-numbers-in-bash/31087503#31087503
if (( $(echo "${versao::4} < 18.1" |bc -l) )); then
    if [ $( lsb_release -cs) == Bionic ]; then
        sudo add-apt-repository ppa:malteworld/ppa
        echo "Atualizando repositórios"
        if ! sudo apt-get update
        then
            echo "Não foi possível atualizar os repositórios. Verifique seu arquivo /etc/apt/sources.list"
            exit 1
        fi
        echo "Atualização de repositórios feita com sucesso"
    fi
    sudo apt-get install pdftk 
else
    # Ubuntu >= 18.10 
    sudo apt-get install pdftk-java
fi

sudo apt-get install ruby-full poppler-utils xclip make gcc

echo "Instalação das dependências do Limarka finalizada"

if ! sudo gem install limarka
then
    echo "Não foi possível instalar o limarka"
    exit 1
fi

# Se optar por não usar sudo deverá adicionar o caminho dos binários
# Um exemplo é dado abaixo
#gem install limarka
#echo -e "\n\n# RUBY GEMS BIN" >> ~/.bashrc
#echo export "PATH"=$"PATH":$~/.gem/ruby/2.x.x/bin >> ~/.bashrc

Quero colocar opções de adicionar pacotes adicionais no TinyTex, por exemplo.

Não cheguei a testar o script (usando Manjaro). Se alguém puder testar, seria uma boa contribuição.

edusantana commented 5 years ago

@cauachagas quais as opções que gostaria que o seu script tenha?

cauachagas commented 5 years ago

Não tenho muita criatividade para pensar em outras coisas. Desculpe :grimacing:

edusantana commented 5 years ago

httpsgetopts_tutorial

edusantana commented 5 years ago

@cauachagas fiz esse script bin/instalador.sh que estou utilizando nos testes do limarka. Basta atualizar para as outras alternativas.

edusantana commented 5 years ago

Criar uma fórmula brew para instalação automática do limarka.