Configurando DOTNET Core e instalando VSCode no Linux

Instalação e configuração das tecnologias DOTNET Core e VSCode para a plataforma Linux.

[ Hits: 11.199 ]

Por: Tiago Zaniquelli em 23/05/2017


Introdução



Em novembro do ano passado, uma surpresa tomou conta do mundo da informática, a toda poderosa Microsoft, oficialmente, tornou-se membro Platinum da Linux Foundation. Testamos o passo a passo do próprio site da Microsoft para instalação do DOTNET Core em ambiente GNU/Linux e resolvemos alguns problemas encontrados.

Os erros encontrados, seria muito legal a Microsoft corrigir, mas de qualquer forma, a impressão é que realmente estão fazendo um trabalho bem legal em migrar as tecnologias acima para a plataforma Linux.

Tamanha surpresa tomou conta dos sites de informática do Brasil e do Mundo, ao fazer uma pesquisa rápida sobre o assunto, selecionei apenas alguns, mas a lista é grande dos diversos meios que resolveram noticiar e comentar sobre a notícia.

Abaixo, algumas notícias de alguns sites pelo Brasil e pelo mundo:
  • Microsoft torna-se membro platinum da Linux Foundation [1]
  • O improvável aconteceu: Microsoft se junta à Linux Foundation [2]
  • Microsoft se une a Linux Foundation e manifesta apoio ao Software Livre [3]
  • Microsoft joins the Linux Foundation [4]
  • Microsoft é a mais nova integrante da Linux Foundation [5]
  • Microsoft Fortifies Commitment to Open Source, Becomes Linux Foundation Platinum Member [6]
  • Microsoft joins the Linux Foundation [7]
  • O que significa a entrada da Microsoft para a Linux Foundation? [8]

Com essa notícia vieram algumas especulações, o que será migrado para o Linux? SQL Server? ASPNET Core? Visual Studio?

A ideia inicial desse artigo é ser uma trilogia onde o primeiro artigo será este. O segundo artigo, uma aplicação ASPNET Core MVC simples. E o terceiro e último, uma aplicação ASPNET Core API com acesso a BD Postgres.

Ambiente

Os testes abaixo foram realizados em uma máquina 64 bits rodando a distribuição Kali Linux (Rolling Release) totalmente atualizado, o que foi um pequeno problema que irei relatar mais adiante.

Instalando DOTNET

O próprio site da Microsoft [9] possui um passo a passo bem interessante sobre como instalar o SDK DOTNET no Linux. No meu caso, como estou utilizando uma máquina com Kali, escolhi seguir o passo a passo da distribuição Debian (para quem não sabe o Kali, é baseado no Debian).

Abaixo, o passo a passo comentado:

sudo apt-get install curl libunwind8 gettext    
# instalará os pacotes necessários para a continuação da instalação (atenção: verifique se a distribuição Linux que esteja utilizando possui o apt-get, caso contrário, utilize o gerenciador de pacotes apropriado)

curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=843453
# download do DOTNET Core

sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet    
# criará a pasta /opt/dotnet e copiará os arquivos descompactados para ela

sudo ln -s /opt/dotnet/dotnet /usr/local/bin    
# criará um link do DOTNET na pasta "bin" do Linux

Pronto, feito os passos acima, seu DOTNET Core está configurado no Linux. Agora iremos testá-lo. Para isso, execute o comando abaixo:

dotnet --help

Ao executar o comando acima, deverá exibir as seguintes opções, conforme ilustra a imagem 1.
Linux: Configurando DOTNET Core e Instalando VSCode no Linux
Mas, esse seria o mundo perfeito e, no meu caso, não foi o que aconteceu. Ao invés de aparecer a imagem1, o que apareceu foi a seguinte mensagem:

Failed to initialize CoreCLR, HRESULT: 0x80131500
Após algumas pesquisas na internet, descobri que era necessário instalar mais um pacote:

sudo apt-get install icu-devtools

Fiz a instalação, porém, continuou sem funcionar. Algumas novas pesquisas e descobri que o pacote estava certo, mas era necessário a versão 52.1 do pacote, e utilizando o apt-get, o comando instala a versão mais atual, que é a 57.1-5.

Então, mais uma vez pesquisei na internet e achei o pacote necessário:
Realizei a instalação, executei novamente dotnet --help e apareceu a imagem 1. Hora de ir para a segunda parte do teste e criar uma aplicação Hello World. Para isso, continuei seguindo o site da Microsoft [9].

dotnet new console -o hello

O resultado da aplicação hello criada com sucesso, deveria ser algo parecido com a imagem 2.
Linux: Configurando DOTNET Core e Instalando VSCode no Linux
Vai parecer repetitivo, mas o mundo não é tão perfeito assim, não na primeira tentativa. E quando executei o comando acima, tive o resultado abaixo.

Unhandled Exception: System.TypeInitializationException: The type initializer for 'Crypto' threw an exception. ---> System.TypeInitializationException: The type initializer for 'CryptoInitializer' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'System.Security.Cryptography.Native.OpenSsl': The specified module could not be found.
(Exception from HRESULT: 0x8007007E)
   at Interop.CryptoInitializer.EnsureOpenSslInitialized()
   at Interop.CryptoInitializer..cctor()
   --- End of inner exception stack trace ---
   at Interop.Crypto..cctor()
   --- End of inner exception stack trace ---
   at Interop.Crypto.GetRandomBytes(Byte* buf, Int32 num)
   at System.IO.Path.GetCryptoRandomBytesOpenSsl(Byte* bytes, Int32 byteCount)
   at System.IO.Path.GetCryptoRandomBytes(Byte* bytes, Int32 byteCount)
   at System.IO.Path.GetRandomFileName()
   at Microsoft.DotNet.InternalAbstractions.TemporaryDirectory..ctor()
   at Microsoft.Extensions.EnvironmentAbstractions.DirectoryWrapper.CreateTemporaryDirectory()
   at Microsoft.DotNet.Configurer.NuGetPackagesArchiver..ctor()
   at Microsoft.DotNet.Cli.Program.ConfigureDotNetForFirstTimeUse(INuGetCacheSentinel nugetCacheSentinel)
   at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, ITelemetry telemetryClient)
   at Microsoft.DotNet.Cli.Program.Main(String[] args)
Aborted


E lá vamos mais uma vez pesquisar soluções pela internet e, depois de várias pesquisas, eis que encontro o site[10], o qual já deu a dica de todos os problemas que iria enfrentar pela frente e, mais uma vez, os problemas eram as versões dos pacotes instalados. Entretanto fui ao estilo Jack, por partes.

Primeiramente, resolvi a "libssl", a do meu computador estava 1.0.2 e precisava da 1.0.0, então baixei no site e instalei-a:
Executei novamente dotnet new console -o hello e agora sim tive o resultado esperado na imagem 2. Entrei no diretório da aplicação cd hello e executei o seguinte comando:

dotnet restore
Linux: Configurando DOTNET Core e Instalando VSCode no Linux
E finalmente, iremos testar o HelloWorld criado pelo template e finalizarmos o nosso teste, com o comando:

dotnet run

No meu teste, ao executar o comando acima, ao invés de exibir a mensagem Hello World, apresentou um problema de segmentação, conforme ilustra a imagem 4.
Linux: Configurando DOTNET Core e Instalando VSCode no Linux
Como eu quis ir por partes, não fiz o downgrade do pacote "libcurl3", conforme o site [10] solicitava. Esse pacote, no meu caso, deu um pouco mais de trabalho, encontrei o pacote no site:
... e realizei o download. Para instalar, realizei os seguintes procedimentos:

# dpkg --force-downgrade -i libcurl3_7.38.0-4+deb8u5_amd64.deb    
# forcei para que fosse feito o downgrade

# apt-mark hold libcurl3    
# marquei o pacote libcurl3 para que ele não seja atualizado, isso evita que ao utilizar o comando apt-get upgrade, ele seja atualizado.

Após realizar os procedimentos acima, executei novamente o comando dotnet run e finalmente exibiu a tão esperada mensagem Hello World, conforme ilustra a imagem 5.
Linux: Configurando DOTNET Core e Instalando VSCode no Linux
    Próxima página

Páginas do artigo
   1. Introdução
   2. Instalando o VSCode
Outros artigos deste autor

Criando aplicação MVC utilizando DOTNET Core no GNU/Linux

Seja Legal, não use softwares piratas!

Linux, aí vamos nós!

Criando uma WEBApi utilizando dotnet core e vscode

Convergência entre segurança física e lógica

Leitura recomendada

Por que utilizar o software livre na educação?

Sistemas Operacionais, Kernel e Shell

Bash - O interpretador de comandos

Listando os serviços Linux com o Systemctl

Gerenciamento de pacotes Debian - principais comandos LPIC-1

  
Comentários
[1] Comentário enviado por danilo3610 em 24/05/2017 - 08:47h

Muito bom o artigo,
Consegui instalar e testei o funcionamento.
Só falta integrar ao monodevelop. No VSCode o projeto Hello abriu direito.

[2] Comentário enviado por euflaviosantos em 09/08/2018 - 22:11h

Obrigado pelo ótimo tutorial!

Só queria fazer uma observação: se ele pudesse ser atualizado com o tar.gz do .net core 2, seria bacana também, pois eu apanhei a beça pra fazer isso! Mas, em linhas gerais, é só trocar o pacote do 1.0.1 pelo pacote do outro!

https://www.microsoft.com/net/download/thank-you/dotnet-sdk-2.1.302-linux-x64-binaries


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts