Red Hat Training

A Red Hat training course is available for RHEL 8

Capítulo 15. Linguagens de programação dinâmica, servidores web, servidores de banco de dados

15.1. Linguagens de programação dinâmica

15.1.1. Mudanças notáveis em Python

15.1.1.1. Python 3 é o padrão Python implementação no RHEL 8

O Red Hat Enterprise Linux 8 é distribuído com Python 3.6. O pacote pode não ser instalado por default. Para instalar Python 3.6, use o comando yum install python3.

Python 2.7 está disponível no pacote python2. Entretanto, Python 2 terá um ciclo de vida mais curto e seu objetivo é facilitar uma transição mais suave para Python 3 para os clientes.

Nem o pacote padrão python nem o executável não versionado /usr/bin/python são distribuídos com o RHEL 8. Os clientes são aconselhados a usar diretamente python3 ou python2. Alternativamente, os administradores podem configurar o comando python não versionado usando o comando alternatives.

Para detalhes, veja Usando o Python no Red Hat Enterprise Linux 8.

15.1.1.2. Migrando de Python 2 para Python 3

Como desenvolvedor, você pode querer migrar seu antigo código escrito em Python 2 para Python 3. Para mais informações sobre como migrar grandes bases de código para Python 3, veja The Conservative Python 3 Porting Guide.

Note que após esta migração, o código Python 2 original torna-se interpretável pelo intérprete Python 3 e permanece interpretável também para o intérprete Python 2.

15.1.2. Configurando o Python não versionado

Os administradores do sistema podem configurar o comando python não versionado, localizado em /usr/bin/python, usando o comando alternatives. Note que o pacote necessário, python3, python38, ou python2, precisa ser instalado antes de configurar o comando não versionado para a respectiva versão.

Importante

O executável /usr/bin/python é controlado pelo sistema alternatives. Quaisquer alterações manuais podem ser sobrescritas após uma atualização.

Comandos adicionais relacionados ao Python, tais como pip3, não possuem variantes não versionadas configuráveis.

15.1.2.1. Configurando o comando python não versionado diretamente

Para configurar o comando não versionado python diretamente para uma versão selecionada do Python, use este procedimento.

Procedimento

  • Para configurar o comando não versionado python para Python 3.6, execute este comando:

    # alternativas --set python /usr/bin/python3
  • Para configurar o comando não versionado python para Python 3.8, use o seguinte comando:

    # alternativas --set python /usr/bin/python3.8
  • Para configurar o comando não versionado python para Python 2, use:

    # alternativas --set python /usr/bin/python2

15.1.2.2. Configurando o comando python não versionado para a versão Python requerida interativamente

Você também pode configurar o comando python não versionado para a versão Python exigida de forma interativa.

Para configurar o comando não versionado python de forma interativa, use este procedimento.

Procedimento

  1. Executar o seguinte comando:

    # alternativas --config python
  2. Selecione a versão desejada da lista fornecida.
  3. Para reiniciar esta configuração e remover o comando python não versionado, execute:

    # alternativas --auto python

15.1.2.3. Os scripts Python devem especificar a versão principal em hashbangs no tempo de construção RPM

No RHEL 8, os scripts Python executáveis devem usar hashbangs (shebangs) especificando explicitamente pelo menos a principal versão Python.

O script /usr/lib/rpm/redhat/brp-mangle-shebangs buildroot policy (BRP) é executado automaticamente ao construir qualquer pacote RPM. Este script tenta corrigir hashbangs em todos os arquivos executáveis. Quando o script encontra hashbangs Python ambíguos que não especificam a versão principal do Python, ele gera erros e a construção do RPM falha. Exemplos de tais hashbangs ambíguos incluem:

  • #! /usr/bin/python
  • #! /usr/bin/env python

Para modificar hashbangs nos scripts Python causando estes erros de construção em tempo de construção RPM, use o script pathfix.py do pacote platform-python-devel:

pathfix.py -pn -i %{__python3} PATH ...

Múltiplos PATHs podem ser especificados. Se um PATH é um diretório, pathfix.py escaneia recursivamente qualquer script Python que corresponda ao padrão ^[a-zA-Z0-9_] \.py$, e não apenas aqueles com um hashbang ambíguo. Adicione o comando para rodar pathfix.py à seção %prep ou ao final da seção %install.

Para mais informações, consulte Manuseio de hashbangs em scripts Python.

15.1.2.4. Python não está disponível o pacote net-snmp

O conjunto de ferramentas Net-SNMP não oferece vínculo para Python 3, que é a implementação padrão Python no RHEL 8. Consequentemente, python-net-snmp, python2-net-snmp, ou python3-net-snmp pacotes não estão disponíveis no RHEL 8.

15.1.2.5. Recursos adicionais

15.1.3. Mudanças notáveis em PHP

O Red Hat Enterprise Linux 8 é distribuído com PHP 7.2. Esta versão introduz as seguintes mudanças principais sobre PHP 5.4, que está disponível no RHEL 7:

  • PHP utiliza o FastCGI Process Manager (FPM) por padrão (seguro para uso com um threaded httpd)
  • As variáveis php_value e php-flag não devem mais ser usadas nos arquivos de configuração httpd; em vez disso, elas devem ser definidas na configuração do pool /etc/php-fpm.d/*.conf
  • PHP os erros de script e avisos são registrados no arquivo /var/log/php-fpm/www-error.log ao invés de /var/log/httpd/error.log
  • Ao alterar a variável de configuração do PHP max_execution_time, a configuração httpd ProxyTimeout deve ser aumentada para corresponder
  • O usuário executando scripts PHP agora está configurado na configuração do pool FPM (o arquivo /etc/php-fpm.d/www.conf; o usuário apache é o padrão)
  • O serviço php-fpm precisa ser reiniciado após uma mudança de configuração ou após a instalação de uma nova extensão
  • A extensão zip foi movida do pacote php-common para um pacote separado, php-pecl-zip

As seguintes extensões foram removidas:

  • aspell
  • mysql (note que as extensões mysqli e pdo_mysql ainda estão disponíveis, fornecidas pelo pacote php-mysqlnd )
  • memcache

15.1.4. Mudanças notáveis em Perl

Perl 5.26, distribuído com a RHEL 8, introduz as seguintes mudanças em relação à versão disponível na RHEL 7:

  • Unicode 9.0 é agora suportado.
  • São fornecidas novas sondas op-entry, loading-file, e loaded-file SystemTap .
  • O mecanismo de cópia-em-escrita é usado ao atribuir escalares para melhorar o desempenho.
  • O módulo IO::Socket::IP para lidar com soquetes IPv4 e IPv6 foi adicionado de forma transparente.
  • O módulo Config::Perl::V para acessar os dados perl -V de forma estruturada foi adicionado.
  • Um novo pacote perl-App-cpanminus foi adicionado, que contém o utilitário cpanm para obter, extrair, construir e instalar módulos do repositório Comprehensive Perl Archive Network (CPAN).
  • O diretório atual . foi removido do caminho de busca do módulo @INC por razões de segurança.
  • A declaração do agora retorna uma advertência de depreciação quando falha em carregar um arquivo por causa da mudança de comportamento descrita acima.
  • A chamada do subroutine(LIST) não é mais suportada e resulta em um erro de sintaxe.
  • Os hashes são randomizados por padrão agora. A ordem na qual chaves e valores são retornados de um hash muda em cada execução perl. Para desabilitar a randomização, defina a variável de ambiente PERL_PERTURB_KEYS para 0.
  • Não é mais permitido o uso de caracteres não-formatados no formato { em padrões de expressão regular.
  • O suporte de escopo léxico para a variável $_ foi removido.
  • A utilização do operador defined em uma matriz ou hash resulta em um erro fatal.
  • A importação de funções do módulo UNIVERSAL resulta em um erro fatal.
  • As ferramentas find2perl, s2p, a2p, c2ph, e pstruct foram removidas.
  • A instalação ${^ENCODING} foi removida. O modo padrão do pragma encoding não é mais suportado. Para escrever o código fonte em outras codificações além de UTF-8, use a opção de codificação Filter.
  • A embalagem perl está agora alinhada com o upstream. O pacote perl também instala módulos centrais, enquanto o intérprete /usr/bin/perl é fornecido pelo pacote perl-interpreter. Em versões anteriores, o pacote perl incluía apenas um intérprete mínimo, enquanto que o pacote perl-core incluía tanto o intérprete quanto os módulos principais.
  • O módulo IO::Socket::SSL Perl não carrega mais um certificado de autoridade de certificado do arquivo ./certs/my-ca.pem ou do diretório ./ca, uma chave privada do servidor do arquivo ./certs/server-key.pem, um certificado do servidor do arquivo ./certs/server-cert.pem, uma chave privada do cliente do arquivo ./certs/client-key.pem, e um certificado do cliente do arquivo ./certs/client-cert.pem. Especifique os caminhos para os arquivos explicitamente em seu lugar.

15.1.5. Mudanças notáveis em Ruby

A RHEL 8 fornece Ruby 2.5, que introduz inúmeras novas características e melhorias em relação a Ruby 2.0.0, disponível na RHEL 7. As mudanças notáveis incluem:

  • Foi adicionado um coletor de lixo incremental.
  • A sintaxe Refinements foi adicionada.
  • Os símbolos são agora coletados de lixo.
  • Os níveis de segurança $SAFE=2 e $SAFE=3 estão agora obsoletos.
  • As classes Fixnum e Bignum foram unificadas na classe Integer.
  • O desempenho foi melhorado otimizando a classe Hash, melhorando o acesso às variáveis de instância, e a classe Mutex sendo menor e mais rápida.
  • Certas APIs antigas foram depreciadas.
  • Bibliotecas agrupadas, tais como RubyGems, Rake, RDoc, Psych, Minitest, e test-unit, foram atualizadas.
  • Outras bibliotecas, como mathn, DL, ext/tk, e XMLRPC, que anteriormente eram distribuídas com Ruby, são depreciadas ou não estão mais incluídas.
  • O esquema de versão SemVer é agora usado para a versão Ruby.

15.1.6. Mudanças notáveis em SWIG

RHEL 8 inclui o Empacotador Simplificado e o Gerador de Interface (SWIG) versão 3.0, que fornece inúmeras novas características, melhorias e correções de bugs sobre a versão 2.0 distribuída no RHEL 7. Mais notavelmente, o suporte ao padrão C 11 foi implementado. SWIG agora suporta também Go 1.6, PHP 7, Octave 4.2, e Python 3.5.

15.1.7. Node.js novo na RHEL

Node.js, uma plataforma de desenvolvimento de software para a construção de aplicações de rede rápidas e escaláveis na linguagem de programação JavaScript, é fornecida pela primeira vez na RHEL. Anteriormente, estava disponível apenas como uma Coleção de Software. A RHEL 8 fornece Node.js 10.

15.1.8. Tcl

Tool command language (Tcl) é uma linguagem de programação dinâmica. O intérprete para esta linguagem, juntamente com a biblioteca C, é fornecido pelo pacote tcl.

Usando Tcl emparelhado com Tk (Tcl/Tk) permite a criação de aplicações GUI em várias plataformas Tk é fornecido pelo pacote tk.

Note que Tk pode se referir a qualquer um dos seguintes itens:

  • Um kit de ferramentas de programação para várias linguagens
  • Uma biblioteca Tk C disponível para várias línguas, tais como C, Ruby, Perl e Python
  • Um intérprete de desejos que instancia um console Tk
  • Uma extensão Tk que acrescenta uma série de novos comandos a um determinado intérprete Tcl

15.1.8.1. Mudanças notáveis no Tcl/Tk 8.6

O RHEL 8 é distribuído com Tcl/Tk version 8.6que proporciona múltiplas mudanças notáveis sobre Tcl/Tk version 8.5:

  • Apoio à programação orientada a objetos
  • Implementação de avaliação sem empilhamento
  • Tratamento melhorado de exceções
  • Coleta de pacotes de terceiros construídos e instalados com Tcl
  • Operações com múltiplas roscas habilitadas
  • Suporte a scripts com base em banco de dados SQL
  • Suporte a redes IPv6
  • Compressão Zlib embutida
  • Processamento de listas

    Dois novos comandos, lmap e dict map estão disponíveis, que permitem a expressão de transformações sobre Tcl contêineres.

  • Canais empilhados por roteiro

    Dois novos comandos, chan push e chan pop estão disponíveis, que permitem adicionar ou remover transformações de ou para os canais de E/S.

Para informações mais detalhadas sobre Tcl/Tk version 8.6 mudanças e novas resistências, veja os seguintes recursos:

Se você precisar migrar para Tcl/Tk 8.6ver Migrando para Tcl/Tk 8.6.