terça-feira, 25 de novembro de 2025

Desabilitar ModemManager no Ubuntu

 ModemManager provides a unified, high-level interface to control all kinds of modems:

  • 4G/5G modems (LTE/NR)
  • 3G modems
  • NB-IoT / Cat-M1 modules
  • USB dongles and embedded PCIe modems
  • Serial, QMI, MBIM, Qualcomm, Sierra, Huawei, Fibocom, Quectel…


Contudo as vezes você está rodando uma instalação que não precisa disto, por exemplo, dentro de uma máquina virtual. Você pode desativar o ModemManager no Ubuntu sem problemas, caso não precise dele.

A maneira mais comun de desativá-lo é utilizando os comandos:

$ sudo systemctl stop ModemManager
$ sudo systemctl disable ModemManager


Instalar o pyenv no Ubuntu

 O pyenv é uma ferramenta popular de linha de comando que permite instalar, gerenciar e alternar entre várias versões do Python no mesmo sistema sem depender de ambientes virtuais.


O que o pyenv resolve

Seu sistema operacional (linux ou Mac) geralmente vem com uma versão padrão do Python. Contudo ele vem com uma versão específica instalada. Por exemplo, você pode precisar do Python 3.8 para um projeto, do 3.12 para outro e talvez também do PyPy ou Miniconda.

Instalar várias versões do Python manualmente é trabalhoso. Além disto, alterar a versão global do Python geralmente quebra as ferramentas do sistema.

O pyenv resolve tudo isso permitindo que você:

  • Instale várias versões: pyenv install 3.12.1
  • Defina a versão global: pyenv global 3.10.0
  • Defina uma versão local (por projeto): pyenv local 3.9.18
  • Use automaticamente a versão correta com base no arquivo .python-version


Instalação passo a passo do PyENV no Ubuntu

As instruções a seguir irão ajudar na instalação do PyENV no Ubuntu. Estes passos foram testados no Ubuntu 22 e 24.

1) Atualizar pacotes do sistema: Comece atualizando a lista de pacotes do sistema para garantir o acesso às versões mais recentes dos softwares:

sudo apt update


2) Instalar dependências necessárias: O PyENV pode exigir certas dependências para funcionar de forma otimizada. Você pode instalar esses pacotes usando o seguinte comando:

sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev


3) Instalando o PyENV: Use o comando abaixo para fazer o download e executar o script de instalação do PyENV:

curl https://pyenv.run | bash


Nota: pode ser que você precise instalar git no seu computador

sudo apt install git


4) Configurando o ambiente: Você precisa alterar .bashrc como mostrado abaixo. Estas instruções irão aparecer ao final do script acima.

echo -e 'export PYENV_ROOT="$HOME/.pyenv"\nexport PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'eval "$(pyenv init --path)"\neval "$(pyenv init -)"' >> ~/.bashrc





quinta-feira, 15 de maio de 2025

Como usar o Windsurf com VSCode via conexão SSH

A combinação Vscode com Windsurf é muito boa pois permite autocorreção de alta qualidade do seu código. Contudo, estou acessando uma VM remotamente via SSH e o Windsurf não consegue fazer login. Se acesso diremente a GUI da VM, o Vscode abre e o Windsurf loga normalmente, excluindo assim algum problema de configuração ou instalação dos dois.

Note que ao solicitar o login do Windsurf, aparece na tela da console SSH a seguinte mensagem de erro: "X11 connection rejected because of wrong authentication.".

Esse erro geralmente significa que há um problema com a autenticação de encaminhamento do X11.

O que fazer então?

1. Verifique seu arquivo .Xauthority

Execute ls -al ~/.Xauthority para ver se o arquivo existe. Se estiver ausente ou tiver permissões incorretas, você pode regenerá-lo executando: xauth generate $DISPLAY. Se for isto, faça a correção e reinicie a sessão SSH.

2. Garanta que o encaminhamento (forwarding) está habilitado tanto no servidor como no cliente.

- No servidor, você precisa conferir no arquivo /etc/ssh/sshd_config se as linha abaixo existem:

X11Forwarding yes
X11UseLocalhost yes

Faça a correção se necessário e reinicie o serviço SSH com o comando sudo systemctl restart sshd.

- No cliente, abra o arquivo /etc/ssh/ssh_config e confira as seguinte linhas:

ForwardX11 yes
ForwardX11Trusted yes

3. Garanta que exista a variável de ambiente XAUTHORITY. Você pode usar o comando `env` para listar todas. Se não existir, abra o arquivo ~/.bashrc com um editor de textos e acrescente a seguinte linha ao final do arquivo.

export XAUTHORITY=$HOME/.Xauthority


No meu caso, faltavam as configurações de ForwardX11Trusted e XAUTHORITY.
Acrescentando as duas opções, o Windsurf foi capaz de abrir a tela de login corretamente.

Permitir que o shell em WSL possa acessar uma VM do Hyper-V

Se você tentar acessar uma VM do Hyper-V utilizando a console do WSL no Windows, você verá que não irá funcionar, mesmo que o Powershell você consiga pingar a VM. O WSL 2 roda em uma máquina virtual leve e tem seu próprio endereço IP interno. Para acessar serviços rodando no WSL a partir da VM (ou vice-versa), você precisa garantir que as duas faixas de IP conversem entre si. 

Por exemplo, minha VM é um Ubuntu e o IP retornado pelo comando `ip address` é mostrado abaixo:


Se tento acessar via shell do WSL, o ping não funciona


Para resolver isto entre o command prompt do Windows ou no powershell e entre com o comando `ipconfig`. Você verá um conjunto de adaptadores de rede com diversos endereços. No meu caso, a informação importante estava no final da lista, como mostrado abaixo. O primeiro adaptador é do Hyper-V e o segundo é para o WSL.



São necessários dois comandos para liberar o acesso à estas redes. Você precisa entrar comandos abaixo no PowerShell em modo administrador para ter as permissões de liberação.

Set-NetIPInterface -ifAlias "vEthernet (Default Switch)" -Forwarding enable
Set-NetIPInterface -ifAlias "vEthernet (WSL (Hyper-V firewall))" -Forwarding enable


Estes dois comandos não retornam nenhum informação indicando que eles funcionaram (veja abaixo).


Contudo, você verá que o ping no WSL irá começar a responder.





terça-feira, 7 de janeiro de 2025

Apt mostra que acesso a IP é proibido

Ao tentar atualizar os pacotes instalados no ubuntu, a mensagem de erro mostrada abaixo foi gerada pelo apt. Nenhuma alteração havia sido feita no servidor que pudesse ter causado o problema.


root@server:/etc# apt -y upgrade

Lendo listas de pacotes... Pronto

Construindo árvore de dependências... Pronto

Lendo informação de estado... Pronto

Calculando atualização... Pronto

Os pacotes a seguir serão atualizados:

  apparmor apt apt-utils base-files language-pack-en language-pack-en-base language-pack-gnome-en

  language-pack-gnome-en-base language-pack-gnome-pt language-pack-gnome-pt-base language-pack-pt

  language-pack-pt-base libapparmor1 libapt-pkg6.0 libmm-glib0 libpcap0.8 modemmanager python-apt-common python3-apt

  python3-distupgrade python3-update-manager ubuntu-advantage-tools ubuntu-desktop ubuntu-desktop-minimal

  ubuntu-drivers-common ubuntu-minimal ubuntu-pro-client ubuntu-pro-client-l10n ubuntu-release-upgrader-core

  ubuntu-release-upgrader-gtk ubuntu-standard update-manager update-manager-core

33 pacotes atualizados, 0 pacotes novos instalados, 0 a serem removidos e 0 não atualizados.

É preciso baixar 13,3 MB de arquivos.

Depois desta operação, 303 kB adicionais de espaço em disco serão usados.

Err:1 http://br.archive.ubuntu.com/ubuntu jammy-updates/main amd64 base-files amd64 12ubuntu4.7

  403  Forbidden [IP: 208.91.112.55 80]

Err:2 http://br.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libapt-pkg6.0 amd64 2.4.13

  403  Forbidden [IP: 208.91.112.55 80]



A primeira providencia foi verificar a conectividade com o site. O dns resolvia o endereço corretamente e o endereço respondia a ping.

Depois de um tempo, a conclusão foi que algo estava corrompido no meu repositório apt local. 

A sulução é simples. Bastou remover as listas do repositório, usando

sudo rm -fr /var/lib/apt/lists/*


e fazendo a atualização novamente

sudo apt -y update

sudo apt -y upgrade



quinta-feira, 26 de setembro de 2024

Forçar o apt a utilizar somente IPv4

 Neste post mostramos como configurar o apt-get para usar somente IPv4 (ou IPv6).

Os passos mostrados aqui foram testados no Ubuntu.


Opção de linha de comando

Se você quiser forçar o apt-get a usar IPv4 ou IPv6 somente uma vez, você pode usar um parametro no comando apt-get. Este recurso está disponível após a versão 0.9.7.9~exp1 do apt-get.

Para verificar se sua versão do apt-get é mais recente, execute:

sudo apt-get --version


Se a versão for igual ou superior, você pode forçar o IPv4 com:

sudo apt-get -o Acquire::ForceIPv4=true update


ou forçar o IPv6 com:

sudo apt-get -o Acquire::ForceIPv6=true update


Isso atualizará os repositórios, resolvendo as URLs em /etc/apt/sources.list para IPv4  (ou IPv6) somente.


Opção persistente alterando a configuração

Para tornar a configuração, crie o arquivo 99force-ipv4 em /etc/apt/apt.conf.d/. Você precisa ser `root` para editá-lo. Coloque o seguinte conteúdo no arqivo:

Acquire::ForceIPv4 "true";


Salve o arquivo e pronto. 

Se quiser forçar o IPv6, altere o nome do arquivo de 99force-ipv4 para 99force-ipv4 e o método para ForceIPv6 nas configurações.


quinta-feira, 1 de agosto de 2024

Habilitar SSH no raspberry diretamente no cartão SD (... e definir o IP da rede cabeada)

Se você utiliza o Raspberry Pi Imager, você pode configurar o acesso ao raspberry via "Edit settings" conforme mostrado abaixo:


Na primeira aba, você pode configurar a conexão do raspberry a sua rede WiFi e o usuário padrão.


Já na próxima aba, habilite o SSH.



Contudo isto não configura o endereço IP da rede cabeada. Felizmente, isso é fácil de fazer. Com o cartão SD ainda conectado, abra a partição de inicialização (bootfs) e edite o arquivo "cmdline.txt" neste diretório utilizando um editor de texto. Você deve colocar no final do texto existem ip=x.x.x.x, onde x.x.x.x é o endereço que você deseja (veja um exemplo abaixo):



quarta-feira, 31 de julho de 2024

Abrir images HEIC no Image Viewer

 O visualizador padrão do Ubuntu é o Image Viewer.

Contudo ele não suporta por padrão as images HEIC (que baixo do meu iPhone).

Para vê-las é preciso instalar o pacote heif-gdk-pixbuf (não precisa de PPA).


Instalação

Abra um terminal no Ubuntu e execute os comandos abaixo. Isto irá instalar as bibliotecas libheif1 e libde265-0.

sudo apt -y install heif-gdk-pixbuf
sudo apt -y install heif-thumbnailer
sudo apt -y install libheif1:amd64


Normalmente basta o primeiro comando para instalar tudo. As duas linhas seguintes normalmente não precisam ser digitadas.



sexta-feira, 12 de julho de 2024

Clonando um repositorio com git+ssh

 

Primeiro precisamos criar a chave de criptografia para acessar o repositório:

mkdir github-keys
cd github-keys
ssh-keygen -o -t ed25519 -C “ssh@github.com” -f ~/github-keys/id_ed25519_github_ssh
chmod 600 id_ed25519_github_ssh*
cp id_ed25519_github_ssh ~/.ssh


Agora você precisa ir na sua conta do github para dar o acesso via chave.

Selecione Settings (esta opção aparece quando você clica no seu avatar no canto superior direito da janela). Esta opção irá abrir uma tela similar a mostrada abaixo. Selecione "SSH and GPG keys" e clique no botão "New SSH key".


Preencha os campos colocando no campo da chave o conteudo do arquivo da chave pública que você gerou no passo anterior (id_ed25519_github_ssh.pub neste exemplo).


Pronto. Agora podemos testar se o acesso está funcionando. 

Vamos tentar uma chamada SSH informando explicitamente a chave de criptografia no comando:

ssh -i ~/.ssh/id_ed25519_github_ssh -T git@github.com


Se tudo funcionar você irá ver um conjunto de linhas semelhante ao mostrado abaixo:

Warning: No xauth data; using fake authentication data for X11 forwarding.
X11 forwarding request failed on channel 0
Hi h3dema! You've successfully authenticated, but GitHub does not provide shell access.


Se não funcionar, acrescente -v ao comando ssh para ver mais detalhes. Pode ser que, por exemplo, o nome do arquivo com a chave privada esteja errada, ou pode ser permissão de acesso, etc.


Se o comando funcionou, faça novo teste sem informar a chave explicitamente.

ssh -T git@github.com


No meu caso, na primeira vez que tentei o comando acima retornou:

git@github.com: Permission denied (publickey).


Usando o -v, descobri que o ssh não estava identificando a chave correta.

O GitHub sugere instalar um SSH agent forwarding.

Eu preferi, ao invés disto, criar um arquivo de configuração.

Criei o arquivo ~/.ssh/config e acrescentei as seguinte linhas

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_github_ssh


Agora o comando funciona:




Criar um ambiente virtual usando PyENV + virtualenv

 Você adicionou o PyENV no seu computador (veja o nosso post).

Agora precisa criar o ambiente virtual onde irá trabalhar.

Portanto, precisa decidir qual versão do Python irá adiciona.

Depois de configurar o PyENV, você pode instalar as versões Python de sua escolha.

Você pode visualizar as versões disponíveis do Python usando o seguinte comando. Ele irá apresentar  uma extensa lista de opções. Selecione a versão desejada desta lista.

pyenv install --list


Instalação da versão Python

Por exemplo, para instalar o Python 3.9.19 basta digitar o comando abaixo que irá baixar e configurar o Python 3.9.19.
pyenv install 3.9.19



Selecionar uma versão instalada como padrão

Você selecionar entre as diversas versões do Python instaladas pelo PyENV, qual é a versão o padrão para comandos Python.
pyenv global 3.9.19
Isto fará que o Python 3.9.19 será seu padrão de instalação.
Você também pode definir como a versão local de um projeto específico executando o seguinte comando no diretório deste projeto.
pyenv local 3.9.19


Criar um ambiente virtual

Vamos testarse o comando pyenv virtualenv funciona. Nesse caso, ele deve retornar "nenhum nome virtualenv fornecido", pois é necessário especificar um nome de ambiente para criá-lo.


Depois de instalar a versão do Python, como mostramos acima, você irá criar um ambiente digitando:
pyenv virtualenv <versão_python> <nome_do_ambiente>

Portanto, no nosso caso o comando será pois queremos a versão 3.9.19 do Python e vamos chamar o ambiente virtual pelo nome do nosso projeto
pyenv virtualenv 3.9.19 moviq-segmentation



Para usar um ambiente virtual existente, você pode ativá-lo digitando: 
pyenv activate <nome_do_ambiente>


E para sair do ambiente virtual atual, você pode desativá-lo digitando o comando:
source deactivate

No nosso exemplo os comandos são
pyenv activate moviq-segmentation
pyenv deactivate

Note que a linha de comando passa a ter uma indicação do ambiente ativo.


Visão geral dos comandos

Resumindo os principais subcomandos do PyENV que você irá utilizar são:

  • pyenv install: para instalar uma nova versão do Python
  • pyenv update: Para atualizar o pyenv
  • pyenv virtualenv: Para criar um novo ambiente virtual Python
  • pyenv activate: Para ativar um ambiente virtual criado anteriormente.
  • source deactivate: Para desativar o ambiente virtual atualmente em uso.
  • pyenv virtualenv-delete: apaga um ambiente virtual
  • pyenv uninstall: para desinstalar uma versão do Python.

Instalar do PyENV no Ubuntu

Os passos mostrados neste post irão guiá-lo através do processo de instalação do PyENV no Ubuntu. Os passos mostrados abaixo foram testados no Ubuntu 22 bem como  na mesma versão rodada no ambiente WSL do Windows.


Passo 1:

Comece atualizando a lista de pacotes do sistema para garantir o acesso às versões de software mais recentes:

sudo apt -y update


Passo 2: 

Instale as dependências necessárias para o PyENV.

Normalmente ele irá exigir certas dependências para funcionar de maneira ideal. 

Você pode instalá-los usando o seguinte comando:

sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev


Passo 3: 

Se o seu shell padrão for Bash, os comandos abaixo anexam duas linhas ao seu arquivo ~/.bashrc:

echo -e 'export PYENV_ROOT="$HOME/.pyenv"\nexport PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

echo -e 'eval "$(pyenv init --path)"\neval "$(pyenv init -)"' >> ~/.bashrc


Se você utiliza outro kernel, os comandos são diferentes e não são mostrados neste post.


Passo 4:

A linha de comando abaixo irá baixar e executar o script do instalador PyENV:

curl https://pyenv.run | bash


Se depois da instalação você vir a mensagem de erro 

/usr/bin/env: ‘bash\r’: No such file or directory

Faça o seguinte procedimento para corrigir.

O conjunto de comandos irá resolver o problema substituindo todos os caracteres de retorno de carro (\r) por nada:

cd ~/.pyenv && find . -type f | xargs sed -i $'s/\r$//' && cd -


Se você chamar o pyenv agora, ele irá funcionar. Por exemplo, abaixo vemos como ver a versão do programa e um exemplo da saída no meu computador.

$ pyenv --version
pyenv 2.4.7


segunda-feira, 10 de junho de 2024

Gerenciando máquinas virtuais usando virt-manager

Para começar, verifique se sua CPU suporta tecnologia de virtualização. Seu sistema precisa ter um processador Intel VT-x (vmx) ou AMD-V (svm). Para verificar isso, execute o seguinte comando egrep. A saída do comando deverá ser maior que 0, se a virtualização for suportada.

egrep -c '(vmx|svm)' /proc/cpuinfo


Verifique se a virtualização KVM é suportada usando `kvm-ok`. Se este comando estiver faltando,, instale o pacote cpu-checker da seguinte maneira:

sudo apt install cpu-checker -y


Para verificar a compatibilidade do seu sistema, execute o seguinte comando:

kvm-ok


Para instalar, atualize as listas de pacotes e repositórios e, em seguida, instale o QEMU/KVM junto com outros pacotes de virtualização da seguinte maneira:

sudo apt update

sudo apt install qemu-kvm virt-manager virtinst libvirt-clients bridge-utils libvirt-daemon-system -y

Iniciando a virtualização

Neste ponto, instalamos o QEMU e todos os pacotes essenciais de virtualização. A próxima etapa é iniciar e ativar o daemon de virtualização libvirtd. Portanto, execute os seguintes comandos para habilitá-lo/iniciá-lo:

sudo systemctl enable --now libvirtd

sudo systemctl start libvirtd


Para verificar se o serviço de virtualização está funcionando, basta executar o seguinte comando:

sudo systemctl status libvirtd


Ajustar as permissões

Finalmente, se você deseja adicionar o usuário atualmente logado aos grupos kvm e libvirt para que ele possa gerenciar as máquinas virtuais, basta inserir os dois comandos a seguir:

sudo usermod -aG kvm $USER

sudo usermod -aG libvirt $USER

Você precisa fazer logoff e logon para receber as permissões corretas.


Virt-manager

Você pode iniciar a ferramenta QEMU/KVM GUI, que é o Virtual Machine Manager na linha de comando digitando:

virt-manager

A tela inicial é:


Se você receber uma mensagem de erro e você adicionou seu usuário aos grupos (como mostrado anteriormente), pode ser que você esqueceu de fazer logoff e logon para que o usuário possa receber estas opções.


Desabilitar ModemManager no Ubuntu

 ModemManager provides a unified, high-level interface to control all kinds of modems: 4G/5G modems (LTE/NR) 3G modems NB-IoT / Cat-M1 modul...