Ajuda com instalação do PHP usando o asdf
Recentemente encontrei no youtube uma ferramenta muito boa que gerencia versões de linguagens de programação em ambiente Linux, ele é o asdf. Instalei o asdf no ubuntu e fui usa-lo para instalar o PHP. Porém estou enfrentando um problema com várias libs que o php usa, libs como o gdlib, openssl e etc. A instalação fica lenta porque quando falta uma dessas libs tenho que ir no google, pesquisar como instalar aquela lib e depois voltar para instalação do php e depois dá outro erro porque falta outra lib e tenho q ficar re-pesquisando sempre. Alguém sabe onde tem alguma lista com todas essas libs necessárias para que eu possa instalar tudo de uma vez?
Bom dia! Como o php usa muita extensões em C é preciso ter essas dependências. Recomendo tbm aprender a usar o pecl para instalação de outras extensões que tu for adicionar.
Fiz um teste aqui usando o PHP em duas versões (7.4.33 e 8.1.25) usando a instalação com o Pecl: PHP_WITHOUT_PEAR=yes asdf install php <version>
Versão | Dependências |
---|---|
8.1.25 | base-devel*, re2c, gd, oniguruma, postgresql-libs, libzip |
A versão 7.4.33 não consegui instalar pois não tem compatibilidade com OpenSSL 3+ (e eu nao posso fazer downgrade desse pacote no momento)
Achei uma solução que é compilar o OpenSSL 1 em uma pasta e usar ela para rodar o php 7.4: https://github.com/asdf-community/asdf-php/issues/131
*O base-devel é tipo o build-essential pro Arch
Na documentação do plugin
https://github.com/asdf-community/asdf-php
Você encontra um arquivo .yml
para a criação de uma imagem, e lá tem especificado os pacotes necessários bem como o S.O em que esses pacotes são necessários, nesse caso o Ubuntu.
Posso te adiantar aqui: sudo apt update && sudo apt install -y autoconf bison build-essential curl gettext git libgd-dev libcurl4-openssl-dev libedit-dev libicu-dev libjpeg-dev libmysqlclient-dev libonig-dev libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libxml2-dev libzip-dev openssl pkg-config re2c zlib1g-dev
Note o seguinte, os pacotes necessários podem variar de sistema operacional para sistema operacional, pois alguns deles podem vir com alguns pacotes já pré-instalado outros não, pode haver variação na versão desses pacotes etc. Na duvída, estude e faça uso de containers para garantir que sempre terá um ambiente padrão para o PHP.
Entenda melhor a proposta do ASDF
O asdf é composto por plugins criados por diversos desenvolvedores, geralmente utilizando shell-script (mas pode haver outras linguagens), porém cada plugin é um projeto a parte específico mas que atende a especificação do ASDF, ou seja, o plugin tem que ser capaz de gerenciar o ciclo de vida do Runtime/Ferramenta.
Exemplo:
- Listagem de todas as versões da ferramenta para download
- Instalação de uma versão
- Remoção de uma versão
Entre outras funções. O problema é que tem ferramentas que tem uma complexidade extra na instalação, pois são instaladas no seu sistema via compilação, como é o caso do PHP e do PostgreSQL. O motivo disso pode ser que, para gerenciar o ciclo de vida dessas ferramentas, é necessariao utilizar a abordagem de instalação via compilação (visto que uma instalação via pacote poderia sujar o sistema e fugir do controle do ASDF).
Dicas
- Sempre tente entender como o plugin que você está utilizando funciona, leia o README e nunca confie 100%, lembre-se, os plugins são criados por desenvolvedores, e por vezes, um ou outro desenvolvedor (bem pouco).
- Começe a pensar em conteinerização, Docker é um bom começo.