Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Criar um instalador automático #161

Open
guiscaranse opened this issue Sep 5, 2018 · 13 comments
Open

Criar um instalador automático #161

guiscaranse opened this issue Sep 5, 2018 · 13 comments

Comments

@guiscaranse
Copy link

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
Copy link

gjvnq commented Oct 17, 2018

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
Copy link
Member

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

@cauachagas
Copy link
Collaborator

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
Copy link
Author

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
Copy link
Collaborator

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
Copy link
Author

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
Copy link
Member

edusantana commented Jun 19, 2019

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
Copy link
Collaborator

cauachagas commented Jun 20, 2019

@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
Copy link
Member

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

@cauachagas
Copy link
Collaborator

  • Fazer instalação de maneira silenciosa. Só apresentar mensagem de término/erro de instação;
  • Opção de instalar, além das dependências mínimas do Limarka, os pacotes adicionais recomendadas no TinyTex (coloquei o texliveonfly e o shipunov, por exemplo);
  • Opção de colocar manualmente outros pacotes no TinyTex. Tipo script.sh -ARGUMENTO pacote1 pacote2.

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

@edusantana
Copy link
Member

httpsgetopts_tutorial

@edusantana
Copy link
Member

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

cauachagas pushed a commit to cauachagas/limarka that referenced this issue Jun 21, 2019
cauachagas pushed a commit that referenced this issue Jun 21, 2019
cauachagas pushed a commit that referenced this issue Jun 21, 2019
@edusantana
Copy link
Member

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants