Instalar o SDK ou o runtime do .NET no Debian e tudo mais

Olá pessoal

fonte: https://mastigado.wordpress.com

Hoje deixarei umas dicas do próprio site da Microsoft de como instalar tanto o SDK ou o runtime do .Net (6, 7, 8) no Debian e também algumas dicas pra gente poder se virar em como construir aplicações .Net no Debian. O intuito desse post é que ele vire uma referência para consulta na plataforma DotNet no Linux.

Instalação e configuração de pacotes da Microsoft para plataforma DotNet

Para baixar e instalar o pacote da Microsoft


wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

Para instalar o SDK do .Net (para mudar versão é só trocar o 8 pelo 7 ou pelo 6)


apt-get update 
apt-get install -y dotnet-sdk-8.0

Para instalar o Asp Net Core Runtime para o .Net


apt-get update 
apt-get install -y aspnetcore-runtime-8.0

Para instalar o Runtime para o .Net (sem Asp Net Core)


apt-get install -y dotnet-runtime-8.0

Configuração/Criação de um projeto DotNet em Linux

Para ver a versão do dotnet instalada


dotnet -- version

Para criar uma nova aplicação DotNet

1º – Criando a solution

 
dotnet new sln -o DotNetApp

2º – Entrando no diretório da solution

 
cd DotNetApp/

3º – Criando um novo projeto do tipo Web API (a partir do dotnet 8 é preciso colocar o sufixo –use-controllers para tê-los)

 
dotnet new webapi -o DotNetAppWebApi --use-controllers

4º – Vinculando o novo projeto à solution (para remover o projeto use o comando remove ao invés de add)

 
dotnet sln add ./DotNetAppWebApi/DotNetAppWebApi.csproj 

5º – Entrando no diretório projeto

 
cd DotNetAppWebApi

6º – Alterando o arquivo Program.cs (Use o comando Ctrl + o para salvar o arquivo quando terminar a alteração)

 
nano Program.cs 

7º – Comentando a linha referente a https (pois precisa de certificado)

 
// app.UseHttpsRedirection(); 

8º – Construindo o projeto e executando (o parâmetro –urls http://*:5000 é para permitir que a aplicação execute não apenas em localhost e para definir em qual porta rodará)

 
dotnet run --project DotNetAppWebApi.csproj --urls http://*:5000 

Abra seu seu navegador e digite localhost e o número da porta que informou (se o navegador estiver instalado na mesma máquina que está rodando a aplicação, ou o número IP do seu servidor e deverá ver algo como o que está abaixo.

Instalação e Configuração do SQL Server no Debian Linux

1º – Atualize seu apt e todos os seus pacotes instalados

 
apt update & apt upgrade

2º – Agora instale pacotes dependentes e confirme tudo o que aparecer

 
apt install gnupg2 apt-transport-https wget curl

3º – Adicione a chave do repositório do SQL Server

 
wget -q -O- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /usr/share/keyrings/microsoft.gpg > /dev/null 2>&1

4º – Adicione o repositório do SQL Server

 
echo "deb [signed-by=/usr/share/keyrings/microsoft.gpg arch=amd64,armhf,arm64] https://packages.microsoft.com/ubuntu/22.04/mssql-server-2022 jammy main" | \
tee /etc/apt/sources.list.d/mssql-server-2022.list

5º – Atualize seu apt novamente

 
 apt update

6º – Instale o SQL Server

 
apt-get install -y mssql-server

7º – Complete a instalação com o próximo comando (atenção na hora de marcar o tipo de instalação, escolha a free, opção 3 e marque o idioma English para evitar problemas de compatibilidade com outras bases de dados)

 
/opt/mssql/bin/mssql-conf setup

8º – Verifique o status do servidor do SQL Server e se ele está rodando

systemctl is-enabled mssql-server
systemctl status mssql-server

9º – Instale o UFW (Firewall descomplicado) Preciso fazer uma ressalva sobre esse UFW. Ele realmente parece ser um firewall simplificado nos comandos, mas você tem que saber que a partir do momento que você instala esse cara, todas as portas abertas que você já utilizava até então em inúmeros programas que foram configurados por você, se fecharão automaticamente. A impressão que ele me passa é que ele zera a tabela Iptables e por isso passei sufoco e tive de reabrir porta por porta usando somente os comandos do UFW. Então se você já está acostumado com o Iptables, não sei se é uma boa ideia esse programa, mas ele não é difícil de se trabalhar. Apesar de você não precisar instalar este programa, o resto do tutorial usará ele, mas se você sabe colocar as regras necessárias no programa Iptables basta só observar qual porta estou utilizando e ignorar essas chamadas que farei sobre ele.

 
apt install ufw

10º – No UFW você pode criar a regra apenas informando o nome do serviço, ou informando a porta com o protocolo desejado ou colocando a porta para a rede desejada

ufw allow OpenSSH

ufw allow 1433/tcp
ufw allow from 192.168.1.0/24 to any port 1433

11º – Confirme com o comando como iniciar e habilitar o UFW no Linux

 
ufw enable

12º – Visualizando o status do UFW (tive de abrir várias portas no desespero depois instalar esse cara)

 
ufw status

13º – Adicionando as chaves o SQL Tools para o client SQL Server (adicionando as chaves necessárias para instalá-lo)

 
echo "deb [signed-by=/usr/share/keyrings/microsoft.gpg arch=amd64,armhf,arm64] https://packages.microsoft.com/ubuntu/22.04/prod jammy main" | \
tee /etc/apt/sources.list.d/prod.list

14º – Atualizando novamente o apt

 
apt update

15º – Instalando o MS SQL Tools (marque que aceita os termos na tela que virá)

 
apt install mssql-tools unixodbc-dev

16º – Criando um link simbólico para o diretório onde estão binários necessários para executar alguns comandos

 
ls -ah /opt/mssql-tools/bin

17º – Coloque no PATH do sistema o diretório bin do mssql-tools  ( e de outros também)

 
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> /etc/environment
echo 'export PATH="$PATH:/usr/sbin"' >> /etc/environment

18º – Para ver os resultados imediatamente

 
source /etc/environment
echo $PATH

19º – Rode os comandos para localizar os binários

 
which sqlcmd
which bcp

20º – É possível executar os comandos seguintes para visualizar os parâmetros utilizáveis

 
sqlcmd -?
bcp -?

Pessoal a partir daqui você já pode se conectar ao SQL Server no Linux via programa (gratuíto) da MS chamado SQL Server Management Studio, que na verdade é apenas mais um de tantos clients de banco existentes. Portanto se você quiser também conectar-se via Linux, você pode.

Logando no SQL Server via terminal Linux

21º – Agora vamos logar no SQL Server com as credenciais que criamos anteriormente

sqlcmd -S localhost -U SA -p

22º – Em seguida podemos usar o comando para vermos a versão do banco de dados

select @@version
go

23º – Também podemos verificar quais são as bases de dados que contam no banco

select name from sys.databases;
go

Observações:

fonte: https://learn.microsoft.com/pt-br/dotnet/core/install/linux-debian

fonte: https://mastigado.wordpress.com

fonte: https://stackoverflow.com/questions/77700061/why-is-dotnet-new-webapi-command-not-producing-the-controllers-folder

fonte: https://www.reddit.com/r/dotnet/comments/r5tipr/aspnet_cannot_access_my_api_from_the_internet/?rdt=62548

fonte: https://www.howtoforge.com/how-to-install-microsoft-sql-server-on-debian-12/

fonte https://cdndevolutions.blob.core.windows.net/documents/how-to/how-to-set-up-rdm-enterprise-with-a-sql-express-data-source-on-linux.pdf

fonte: https://categoriaoutros.com.br/?p=7876

fonte: https://www.hostinger.com.br/tutoriais/firewall-ubuntu-ufw

Tentar conviver com ZSH que não desinstala (uninstall_oh_my_zsh: command not found)

Pessoal, essa dica rápida é pra quem tentou desinstalar essa lib (ZSH) e não conseguiu (e talvez não consiga nunca) e tenha que conviver com ela enquanto não formatar seu Linux.

fonte: https://mastigado.worpress.com

Pra você que executou, no Debian (por exemplo), apt remove zsh ou apt purge zsh –purge e depois disso, ao reiniciar, não consegue mais logar no Linux porque toda a hora em que loga ele volta para a tela de login, vai aqui alguma dicas.

– JAMAIS INSTALE NOVAMENTE ESSE TAL DE ZSH. NÃO TENTE MUDAR SEU SHELL NOVAMENTE SÓ PRA FICAR COLORIDO COMO NUM ARCO ÍRIS!

– O comando que o Github oficial do ZSH diz pra você executar para desinstalar essa lib (uninstall_oh_my_zsh) não funcionou pra mim!

– Para tentar se livrar dessa lib (ZSH) entre no Linux em Recovery Mode (logo quando ligar a máquina).

– Após digitar sua senha de root, digite o seguinte comando no terminal:


bash

– Execute os comandos abaixo para jogar a conf do bash original para o bash do ZSH (para que a conf do ZSH não ficar somente desabilitada no usuário root, você pode fazer o comando também na pasta home de cada usuário).


rm -rf ~/.oh-my-zsh
rm ~/.zshrc
cp ~/.zshrc.pre-oh-my-zsh ~/.zshrc
source ~/.zshrc

 6º – E por último, a parte triste vem agora, instale novamente o ZSH para você conseguir voltar a logar no seu sistema operacional.


apt install zsh

Depois disso você pode usar o bash original mas com este ZSH instalado sem se manifestar. Lembre-se que ele vai ficar tipo um vírus que fica adormecido no seu corpo até você morrer ou até você reinstalar o Linux. Lembrando que existe outra forma de removê-lo definitivamentemas não serei eu que farei isso aqui pois só de ficar com o login bloqueado você já entra em desespero. Por isso lembre-se: nada de frú frú com terminal colorido novamente! Você não precisa desse troço porque um dos pontos negativos desse tal de ZSH é que nele não funcionam todos os comandos Linux como no bash original.

Você pode tentar mudar o bash para o original novamente, mas aconselho deixar esse ZSH aí se tiver muitos problemas para retirá-lo.


chsh -s /bin/bash

chsh

fonte: https://mastigado.worpress.com

fonte: https://stackoverflow.com/questions/9813983/troubles-uninstalling-oh-my-zsh

fonte: https://www.youtube.com/watch?v=hLxr9hLfO0Q

fonte: https://stackoverflow.com/questions/13046192/changing-default-shell-in-linux

Zerar timeout de aplicação com SQL Server

fonte: https://mastigado.wordpress.com

Ao se depararem com este erro abaixo em sua aplicação, não temas!

System.Data.SqlClient.SqlException: ‘Tempo Limite de Execução Expirado. O período de tempo limite terminou antes da conclusão da operação ou o servidor não está respondendo.’

Você pode resolver isso de forma fácil:

1 – Chapuletando um timeout zero no meio no seu comando SqlCommand (somente onde está com a linha indicada por <———–).


try
{
this.conexaosqlclient.Open();

SqlCommand cmd = new SqlCommand(sql, this.conexaosqlclient);

cmd.CommandTimeout = 0;   // <-------------

cmd.Parameters.Add("@codigo", SqlDbType.Int);
cmd.Parameters["@codigo"].Value = codigo;

reader = cmd.ExecuteReader();

E caso não de certo, faça também o procedimento de zerar o timeout no banco de dados.


USE AdventureWorks2022;
GO
EXEC sp_configure 'remote query timeout', 0 ;
GO
RECONFIGURE ;
GO

E aí só partir para o abraço. Se a sua aplicação não estava conseguindo executar determinada consulta, provavelmente agora ela executará, mas pode demorar para executar (tenha paciência). Só faço este procedimento em casos extremos.

fonte: https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-remote-query-timeout-server-configuration-option?view=sql-server-ver16

fonte: https://mastigado.wordpress.com

Como fazer download do conteúdo um diretório na Web?

fonte: https://mastigado.wordpress.com

Olá pessoal!

Essa dica de hoje vai para aquelas pessoas que precisam baixar arquivos de um diretório na Web assim como fazíamos com um antigo software chamado GetRight.

Pois bem! Abra o terminal (do Linux) no diretório de sua escolha e digite o comando abaixo. Fique atento se a página principal é mesmo uma index.html.


wget -r -np -nH --cut-dirs=3 -R index.html http://hostname/aaa/bbb/ccc/ddd/

Depois disso é só correr para o abraço.

fonte: https://stackoverflow.com/questions/23446635/how-to-download-http-directory-with-all-files-and-sub-directories-as-they-appear

fonte: https://mastigado.wordpress.com

Configurar Worker em Net 6

Olá pessoal!

fonte: https://mastigado.wordpress.com

Hoje faremos um breve projeto Worker no Visual Studio.

1º – Escolha um projeto Worker no Visual Studio

2º – Coloque o nome do projeto

3º –  Abra a classe Program

E adicione a tag para que o Worker funcione no Windows


public class Program
{
   public static void Main(string[] args)
   {
      IHost host = Host.CreateDefaultBuilder(args)
        .UseWindowsService(options =>
        {
           options.ServiceName = "Nome do meu Worker";
        })
        .ConfigureServices(services =>
        {
           services.AddHostedService<Worker>();
        })
        .Build();

        host.Run();
   }
}

4º – Insira seu código dentro do método ExecuteAsync (de preferência dentro do loop)

5º – Instale o serviço utilizando a linha de comando abaixo


C:\Sistemas\Executavel> sc.exe create "Nome do meu Worker" binpath="C:\Sistemas\Executavel\meu_worker.exe"

Para desinstalá-lo execute o comando abaixo


C:\Sistemas\Executavel> sc.exe delete "Nome do meu Worker" binpath="C:\Sistemas\Executavel\meu_worker.exe"

E para paralisá-lo


C:\Sistemas\Executavel> sc.exe stop "Nome do meu Worker" binpath="C:\Sistemas\Executavel\meu_worker.exe"

Para caso aconteça erros na instalação

1º – Reescreva as aspas (” “) no meio do terminal. Isso é necessário para quando damos Ctrl + C e Ctrl  + V no código.

2º – Quando colocar o binpath de um espaçamento entre o sinal de igualdade e a primeira aspa, como está abaixo


C:\Sistemas\Executavel> sc.exe create "Nome do meu Worker" binpath= "C:\Sistemas\Executavel\meu_worker.exe"

Pronto! Agora é só ir até a área de Serviços do Windows e iniciar seu serviço a partir de lá.

fonte: https://mastigado.wordpress.com

fonte: https://stackoverflow.com/questions/16174736/cannot-get-sc-exe-to-work-for-my-program

fonte: https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/sc-create

Como enviar ctrl+alt+del usando Remote Desktop (área de trabalho remota)?

O que é Ctrl + Alt + Del? Quando devo usar o comando?

Olá pessoal!

Essa dica é simples, mas salva quem está remoto e teve sua senha expirada numa rede corporativa.

É só pressionar Ctrl + Alt + End.

fonte: https://serverfault.com/questions/57222/how-to-send-ctrlaltdel-using-remote-desktop

fonte: https://blog.codinghorror.com/remote-desktop-tips-and-tricks/

Princípio da Inversão de Dependência

 

HTTP Status Codes

fonte: https://codewithsloba.com/

DateTime no C# e .NET

Começando com DateTime

O DateTime no C# é um tipo de dados struct. Com isto sabemos que ele é composto por outros tipos e métodos, além de ser iniciado com um valor padrão.

Para criar um DateTime fazemos da segunte forma:

var date = new DateTime();

Por serem tipos de valor, os DateTimes não são nulos e por padrão sempre iniciam com um valor como foi citado antes. Então vamos vericiar qual o valor inicial da nossa variável assim:

Console.WriteLine(date);
// 1/1/0001 12:00:00 AM

Estes são os valores iniciais de um DateTime. Precisamos entender também que o formato é retornado de acordo com a cultura do sistema sob o qual o código foi executado, a menos que uma configuração seja aplicada para modificar este comportamento.
Obtendo data e hora atual com DateTime

Agora que sabemos como criar a nossa váriavel, temos a opção de atribuir e exibir a data atual. Fazemos isto utilizando a propriedade DateTime.Now.

Para exibir a data e hora local:

var date = DateTime.Now();
Console.WriteLine(date);
// 6/17/2021 8:10:09 AM

Para exibir a data e hora global UTC (Coordinated universal time ou tempo universal coordenado):

var date = DateTime.UtcNow();
Console.WriteLine(date);
// 6/17/2021 11:10:09 AM

Note que ele retornou corretamente a data e hora do momento em que o código foi executado, porém exibiu o mês antes do dia e o horário em formato AM/PM. Este padrão é chamado de cultura e entenderemos ele mais a frente.
Formatando um DateTime

No C# o DateTime formata os valores com base no sistema sob o qual o código está sendo executado, caso necessário você pode modificar este comportamento através de configurações personalizadas no seu projeto.

Para atribuir valores a nossa variável DateTime basta passar os valores como parâmetro:

var date = new DateTime(2020, 07, 02, 22, 59, 59);
// 7/2/2020 10:59:59 PM

Acima seguimos os parâmetros (ano, mês, dia, hora, minutos, segundos) para outros paramêtros culte a documentação dos Construtores DateTime (link no final do artigo).

Nos exemplos anteriores você viu como exibir a data. Agora Veremos algumas formas de exibição diferentes.

Lembra quando foi dito antes que o DateTime é um struct e contém outros tipos e métodos? Podemos explorar a estrutura para obter por exemplo:

O dia da semana em que a data acima cairá:

Console.WriteLine(date.DayOfWeek);
// Thursday

Valor avulsos:

Console.WriteLine(date.Month);
// 7

Recomendamos que antes de desenvolver um novo parâmetro/método, verifique a existência dele na documentação do DateTime (link no final do artigo).

Podemos também utilizar alguns caracteres (“Y” para ano, “M” para mês, “d” para dia, “H” para hora, “m” para minutos, “s” para segundos, “f” para fração de segundos e “z” para a timezone) para formatar nosso DateTime através da interpolação de strings:

var formattedDate = String.Format("{0:dd/MM/yyyy HH:mm:ss ff z}", date);
// 02/07/2020 22:59:59 00 -3

Existem outras formatações como o ERC (Eurepean research council):

var formattedDate = String.Format("{0:r}", date);
// Thu, 02 Jul 2020 22:59:59 GMT

E o Sortible:

var formattedDate = String.Format("{0:s}", date);
// 2020-07-02T22:59:59

Manipulação de datas com DateTime

Até aqui aprendemos a definir e exibir de várias formas as datas e horas. Em situações em que precisamos calcular datas e horas nós podemos utilizar alguns métodos já existentes no DateTime.

Para atribuir valores ao nosso DateTime basta passar os valores como parâmetro:

var date = DateTime.Now();
date.AddDays(2);
// 6/19/2021 11:10:09 AM

Para remover valores do nosso DateTime:

var date = DateTime.Now();
Console.WriteLine(date.AddDays(-20));
// 5/30/2020 11:10:09 AM

Podemos ver que ao retirar uma quantidade de dias maior que a data atual ele lidou com a regressão do mês. Usar o método existente é a forma correta de utilização da ferramenta.
Cultures e TimeZones UTC no DateTime

Como sabemos, os horários são diferentes de acordo com a região do planeta em que estamos. Dentro do C# lidamos com estas diferenças através da classe TimeZoneInfo.

Os formatos de data e hora utilizados por certas regiões são chamados de culturas e lidamos com eles dentro do C# através da classe CultureInfo.

No início citamos que o retorno de nossa data não estava no padrão esperado (Brasileiro), então este é o momento para corrigir. A estrutura para isto está dentro do System e podemos passar as informações necess[arias] por parâmetro dentro do método DateTime.UtcNow().

Logo em seguida precisamos converter o resultado para uma string através do método ToString() e dentro deste método passamos como parâmetro o método CreateSpecificCulture. Este recebe como parâmetro a cultura que precisamos. Ficando assim:


using System;
using System.Globalization;

Console.WriteLine(DateTime.UtcNow.ToString(CultureInfo.CreateSpecificCulture("pt-BR")));

fonte: https://balta.io/blog/datetime-csharp-dotnet

WGET – error: the certificate doesn’t have a know issuer

Olá para todos!

fonte: https://mastigado.wordpress.com

Essa dica básica vai para todos que precisam utilizar o comando wget no Linux mas que acabam tendo problema com certificado (error: the certificate doesn’t have a know issuer). Para fazer isso é só desabilitá-lo na chamada.


wget --no-check-certificate https://download/url

fonte: https://mastigado.wordpress.com

https://unix.stackexchange.com/questions/334905/how-do-i-fix-wget-on-an-http-url-not-trusted-errors-in-kali

https://stackoverflow.com/questions/9224298/how-do-i-fix-certificate-errors-when-running-wget-on-an-https-url-in-cygwin