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


Transforme seu Raspberry Pi em um Servidor de Desenvolvimento Completo (Debian 13 Trixie, ARM64)

  O Raspberry Pi evoluiu muito desde seus primeiros dias como uma placa para experimentos. Hoje, com o Debian 13 (Trixie) rodando em ARM64, ...