segunda-feira, 10 de fevereiro de 2025

Como Verificar uma Lista de IPs

Um domínio pode ser provido por muitos IPs distintos, então surgiu para mim a necessidade de determinar qual IP não estava respondendo.

O dig permite descobrir rapidamente quais IPs estão relacionados ao domínio no DNS.


dig +short some.random.domain
192.168.10.20
192.168.10.21
192.168.10.22
192.168.10.23

Faça de conta que a minha lista de IPs é bem grande. Quero testar todos, mas sem perder muito tempo em cada um. Para ser mais rápido com o ping, podemos usar umas opções incomuns:


ping -w 1 -c 2 192.168.10.20
PING 192.168.10.20 (192.168.10.20) 56(84) bytes of data.

--- 192.168.10.20 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

O -w 1 encerra a espera com 1s e o -c 2 emite apenas 2 pacotes ICMP. Ajuste conforme sua necessidade

Então, para percorrer toda a minha lista e apenas imprimir os IPs que não responderam, lançamos mão do xargs e do grep.


dig +short some.random.domain | \
  xargs -I{}  ping -w 1 -v -c 2 {} | \
  grep -B1 "0 received"
--- 192.168.10.20 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

O -B1 do grep nos permite mostrar a linha anterior ao resumo dos pacotes, já que o ping não coloca tudo na mesma linha.

segunda-feira, 27 de janeiro de 2025

Já Não Estou Aí

Um detalhe do filme Ainda Estou Aqui me colocou a pensar: a participação da trabalhadora doméstica Zezé.

As histórias da ditadura são quase sempre focadas em pessoas de classe média. É claro que a família Paiva sofreu muito, mas essas histórias já as conhecemos todas.

A Zezé vivia num quartinho de empregada dentro da casa dos Paiva. Isso chega a ser chocante: a estrutura social refletia ainda a escravidão: havia ali uma casa-grande e uma senzalinha.

A ditadura, não é óbvio para muitos, foi um movimento para impedir a modernização do Brasil. As reformas de base visavam preparar o país, que estava se urbanizando rapidamente, para a modernidade.

Esse freio provocou o crescimento desordenado das grandes cidades e jogou milhões de brasileiros na miséria urbana, sem moradia e sem educação. Mas além da violência por inação, a ditadura incentivou a violência policial nas periferias (Cidade de Deus é provavelmente o melhor filme sobre a ditadura) e deslocou milhares de nordestinos para ocupar as margens da rodovia transamazônica e lá os abandonou à própria sorte.

Eu não ignoro o sofrimento dos torturados, dos assassinados, e de suas famílias, mas a ditadura roubou o futuro de milhões de pessoas e essa história não é contada.

Essa classe média que se compadece com o sofrimento dos Paiva, faz alguma coisa para tornar o país mais justo? Um morador da periferia vive a violência todos os dias. Uma pessoa morta há 50 anos não vai comovê-lo. A polícia continua torturando e matando e a classe média aplaude.

A muito custo, os governos de esquerda conseguem umas vagas na universidade para negros, um dinheirinho para aliviar a fome dos mais necessitados, e reconhecer as uniões homoafetivas. Mudar realmente a matriz social do país, até hoje com marcas da escravidão, não inspira da mesma forma que a Comissão da Verdade inspira. No fundo, estamos só maquiando um porco.

Se formos a Brasília, poderemos ver faxineiras trocando o uniforme sob viadutos e um metrô que chega a centenas de metros do aeroporto e subitamente muda de direção. Nos ministérios não há lugar para a faxineira terceirizada trocar de roupa (quem dirá tomar um banho) e o transporte de massa não vai até o aeroporto, porque, obviamente, os trabalhadores não precisam ir até lá (sequer os que lá trabalham, aparentemente). A infraestrutura é pensada para separar.

Até hoje, apartamentos são construídos com o quarto da empregada.

Por não discutirmos essas coisas, temos uma classe popular que almeja tornar-se classe média e uma classe média que, em grande parte, quer manter a distância. Já ninguém imagina um país diferente.

Afinal, o que o filme agrega? Ele tem boas atuações e ele conta uma história interessante, mas ele não agrega nada à discussão e, no fundo, prega para convertidos. Talvez o Walter Salles tenha colocado a cena da Zezé em seu quartinho para provocar alguma reflexão. Pelo menos comigo, funcionou.

Ainda Estou Aqui recebeu três indicações ao Oscar. Sim, é bom ter um filme nacional reconhecido no mundo, mas nós precisamos dessa confirmação para saber que ele é bom? Nós realmente dependemos da confirmação da indústria que apoia a superestrutura e que convence nossos compatriotas de que lá é o centro do mundo e que aqui somos apenas coadjuvantes na periferia do mundo deles?

Alimentar esse auê sobre o Oscar, temo que apenas alimente a máquina de ilusões que sustenta nosso atraso através do filtro de histórias que devem ou não ser contadas.

E que fim levou a Zezé? Os filhos dela terão conseguido estudar num CIEP (sim, veja bem, fomos capazes de acabar com esse projeto mesmo em tempos democráticos)?

domingo, 26 de janeiro de 2025

Adeus, Windows.

Recentemente, passei vários dias e muitas horas tentando descobrir por que um laptop com Windows 10 falhava aleatoriamente com tela azul e um erro relacionado a drivers (KMODE Exception not handled).

O laptop possui um i5-2450M com 16GB de RAM. É uma boa máquina, com recursos mais que suficientes para as necessidades do dono. Curiosamente, entretanto, a CPU não está entre as aprovadas para o Windows 10.

Além disso, o Windows 11 não admite ser instalado nesse laptop.

Experimentei o Ubuntu Mate nessa máquina e tudo funcionou perfeitamente.

A minha única saída foi voltar para o Windows 7 e instalar as últimas versões do Chrome e do Firefox que ainda rodam nessa versão.

Eu estou acostumado a baixar arquivos .iso de Linux ou algum BSD, gravar com dd num pendrive e fazer o boot, mas o Windows não permite essa facilidade e exige que o .iso seja gravado no pendrive com um software, claro, específico do Windows.

Resolvi que não tenho mais tempo a perder com um software tão maligno que é projetado para tornar obsoletas máquinas perfeitamente úteis.

Se algum amigo ou parente pedir uma ajuda para instalar Linux ou qualquer BSD, eu o farei e essa será minha contribuição na luta contra os abusos do capitalismo tardio.

Instalar Windows, no entanto, nunca mais farei por ninguém.

A pessoa para quem eu estava dedicando meu tempo tem grande apego ao Excel. Eu pensei, então, que talvez fosse possível rodar o Excel no Linux com o Wine, porque, de qualquer forma, o Windows 7 é uma solução temporária: logo os navegadores estarão obsoletos. Pedi, então, a mídia de instalação do Office. Recebi uma mídia do Windows 10 e outra do Windows 7: "veja o que tem aí". Eu me senti um pouco ofendido e não foi a primeira vez que eu me deparei com um usuário que, apesar de insistir no Windows, transfere completamente o custo de configurar e manter o micro.

Usuários de Windows, via de regra, o são por pura inércia e por dependerem do trabalho de outros (remunerado ou não). Cansei disso. Eu escolhi o Linux pela liberdade que ele provê. Houve uma época em que usar o Linux exigia sacrifícios, mas essa época já passou. O sacríficio agora está em insistir com a empresa de Redmond.

segunda-feira, 14 de outubro de 2024

Webex com LXC

O Webex parou de funcionar no Ubuntu 22.04 quando eu atualizei o kernel e continuou dando problema quando fiz o upgrade para 24.04.

Ele inicia e até chega a rodar por uns minutos, mas acaba por encerrar sem dar nenhuma explicação. A comunicação não é mesmo o forte dele, porque ele não funciona no root, mas não indica nenhum motivo.

Sem muita esperança, resolvi experimentar rodar dentro de um contêiner LXC.

Vamos ao básico: instalar o LXD.


sudo snap install lxd
sudp lxd init

O init vai fazer um monte de perguntas. As respostas default servem.

Como vai ser preciso usar o X11 do hospedeiro, é preciso criar um profile. Primeiro, cria-se um arquivo gui.txt com essas configurações:


config:
  environment.DISPLAY: :0
  environment.PULSE_SERVER: unix:/home/ubuntu/pulse-native
  nvidia.driver.capabilities: all
  nvidia.runtime: "true"
  user.user-data: |
    #cloud-config
    runcmd: 
      - 'sed -i "s/; enable-shm = yes/enable-shm = no/g" /etc/pulse/client.conf'
    packages:
      - x11-apps
      - mesa-utils
      - pulseaudio
    write_files:
      - owner: root:root
        permissions: '0644'
        append: true
        content: |
          PULSE_SERVER=unix:/home/ubuntu/pulse-native
        path: /etc/environment
description: GUI LXD profile
devices:
  PASocket1:
    bind: container
    connect: unix:/run/user/1000/pulse/native
    listen: unix:/home/ubuntu/pulse-native
    security.gid: "1000"
    security.uid: "1000"
    uid: "1000"
    gid: "1000"
    mode: "0777"
    type: proxy
  X0:
    bind: container
    connect: unix:@/tmp/.X11-unix/X1
    listen: unix:@/tmp/.X11-unix/X0
    security.gid: "1000"
    security.uid: "1000"
    type: proxy
  mygpu:
    type: gpu
name: x11
used_by: []

Com isso, podemos criar um profile e, finalmente, um contêiner (como root):


lxc profile create gui
cat gui.txt | lxc profile edit gui
lxc launch --profile default --profile gui ubuntu:22.04 jammy

Jammy vai ser o nome do nosso contêiner. Pode ser que o launch falhe inicialmente, mas o start o coloca de pé novamente:


lxc start jammy

Agora temos que criar um user, copiar o Webex.deb para dentro do contêiner, instalar e, finalmente, rodar:


xhost +
sudo lxc file push Webex.deb jammy/
sudo lxc exec jammy bash
# dentro do contêiner
cd /
apt install /Webex.deb
adduser armando
su armando
# como armando
export DISPLAY=:0
/opt/Webex/bin/CiscoCollabHost %U

Como o usuário armando foi criado depois, precisamos pegar o seu id e editar algumas linhas no profile para que o áudio funcione. Como é o primeiro usuário criado, ele ficou com o id 1001.


name: gui
description: GUI LXD profile
config:
  environment.DISPLAY: :0
  environment.PULSE_SERVER: unix:/home/armando/pulse-native
  nvidia.driver.capabilities: all
  nvidia.runtime: "true"
  user.user-data: |
    #cloud-config
    runcmd:
      - 'sed -i "s/; enable-shm = yes/enable-shm = no/g" /etc/pulse/client.conf'
    packages:
      - x11-apps
      - mesa-utils
      - pulseaudio
    write_files:
      - owner: root:root
        permissions: '0644'
        append: true
        content: |
          PULSE_SERVER=unix:/home/armando/pulse-native
        path: /etc/environment
devices:
  PASocket1:
    bind: container
    connect: unix:/run/user/1000/pulse/native
    gid: "1001"
    listen: unix:/home/armando/pulse-native
    mode: "0777"
    security.gid: "1000"
    security.uid: "1000"
    type: proxy
    uid: "1001"
  X0:
    bind: container
    connect: unix:@/tmp/.X11-unix/X1
    listen: unix:@/tmp/.X11-unix/X0
    security.gid: "1000"
    security.uid: "1000"
    type: proxy
  mygpu:
    type: gpu
used_by:
- /1.0/instances/jammy


Após editar o profile, é preciso parar e iniciar novamente o contêiner.


sudo lxc profile edit gui
sudo lxc stop jammy
sudo lxc start jammy

Para executar rapidamente o webex, pode-se criar um .sh com um comando assim:


sudo lxc exec jammy -- su -c ./webex.sh -l armando

E dentro do contêiner, em /home/armando, um outro webex.sh com esses comandos (já citados acima):


export DISPLAY=:0
/opt/Webex/bin/CiscoCollabHost %U

E com isso pode-se quebrar um galho enquanto a Cisco não atualiza o software.

segunda-feira, 7 de outubro de 2024

Migração de uma Instância de Oracle Apex

O Apex é uma ferramenta low-code muito interessante e conveniente. Infelizmente, é oferecida pela Oracle.

Como tudo é que é produzido pela empresa, ela oferece muitas facilidades para os programadores, mas é deficiente na administração.

Por algum motivo misterioso, ou talvez simplesmente fruto da complexidade desnecessária que a Oracle julga interessante aplicar a tudo, não é possível usar o Data Pump para exportar e importar os schemas do Apex.

O zip de instalação oferece um par de classes para exportar partes do Apex: oracle.apex.APEXExport.class e oracle.apex.APEXExportSplitter.class

Ele oferece várias opções, mas não uma maneira de exportar tudo de uma vez e, o mais curioso, não oferece uma maneira de exportar as configurações da instância. É preciso exportar primeiro os workspaces e então as aplicações:


java -cp .:ojdbc8.jar oracle.apex.APEXExport  \
  -db mydb.mycompany.com:1521/apex.mydb.mycompany.com \
  -user system \
  -password hard2crack \
  -expWorkspace

java -cp .:ojdbc8.jar oracle.apex.APEXExport  \
  -db mydb.mycompany.com:1521/apex.mydb.mycompany.com \
  -user system \
  -password hard2crack \
  -instance
  

Isso vai gerar um arquivo w123.sql para cada workspace e um arquivo f123.sql para cada aplicação.

Enquanto isso, recomendo guardar cópias das páginas de configuração da instância.

Então, no servidor destino, é preciso rodar uns comandos.

Em primeiro lugar, se já existe uma instância do Apex, é preciso remover todos os workspaces antes de carregar os novos:


begin
  -- Verifique os ids das aplicações a serem exportadas
  for w in (select * from  apex_workspaces where workspace_id>1000) loop
    APEX_INSTANCE_ADMIN.REMOVE_WORKSPACE(p_workspace=>w.workspace);  
  end loop;
end;

Depois, pode-se carregar os workspaces e as aplicações:


. ./mynewdb.env

ls -1a  w*sql | xargs -I{} sqlplus / as sysdba @{}
ls -1a  f*sql | xargs -I{} sqlplus / as sysdba @{}

Conforme o tamanho de sua instância, isso pode demorar.

Como nem as menores coisas da Oracle estão livre de bugs, problemas, e poréns, a configuração de autenticações com Web Credentials, não funciona e o campo client-id não foi copiado.


update wwv_credentials
set client_id='my-id'
where client_id is null

Como prêmio final, os nomes das aplicações saíram com erro de codificação e precisaram ser corrigidos manualmente.

quinta-feira, 6 de junho de 2024

Cisco Secure Client sobre ARM com QEMU

Eu vinha trabalhando remotamente de maneira ecologica quando a firma decidiu implementar 2FA com o Cisco Secure Client e o Duo.

Minha opção ecológica era usar pequenos SBCs ARM, que utilizam quantidades irrisórias de energia. Dá para deixá-las ligadas o ano todo com R$10.

Infelizmente a Cisco não compartilha do meu entusiasmo com o ARM e não oferece binários compatíveis.

Como o Linux é um Sistema Operacional de verdade, eu tinha certeza que com um pouco de teimosia encontraria uma solução prática.

A solução veio na forma do QEMU.

É preciso instalar o qemu-user-static, o suporte multi-plataformas (binfmt), e algumas bibliotecas que o Secure Client necessita.


  # Como root ou com sudo

  # QEMU e binfmt
  apt install binfmt-support qemu-user-static
  update-binfmts --display
  dpkg --add-architecture amd64
  
  # libs necessárias para o Secure Client
  apt install libc6:amd64
  apt install libgtk-3-0:amd64
  apt install libxml2:amd64
  apt install libwebkit2gtk-4.0-37:amd64
  
  # instalar o secure-client
  ./cisco-secure-client-linux64-5.0.05040-core-vpn-webdeploy-k9.sh
  

E agora posso trabalhar gastando ínfimo 1,1W de CPU.

Espero que, com a chegada dos laptops com Snapdragon X Elite, a Cisco ofereça os binários para Linux/ARM.

sexta-feira, 19 de abril de 2024

Dias Perfeitos

O novo filme de Wim Wenders me agradou por alguns motivos distintos.

Em primeiro lugar, as cidades japonesas me atraem por toda a infraestrutura que oferecem. Tenho a impressão de que deve ser possível morar dentro de uma loja de conveniência japonesa (recomendo o livro Uma Questão de Conveniência de Sayaka Murata). Algumas pessoas são atraídas pelas tradições japonesas, eu curto mais são as modernidades.

Em segundo lugar, os banheiros. Eles foram projetados por grandes arquitetos e demonstram que a infraestrutura das cidades também pode ser interessante. E que, sendo interessante, a cidade fica mais rica.

Em último lugar, a ideia do filme.

Algumas empresas japonesas fabricam produtos que considero melhores por serem mais conservadores. Em especial, os carros da Toyota e as impressoras Brother têm menos novidades supérfluas e são bastante confiáveis. A confiabilidade é o que me interessa.

O consumismo ocidental é confundido com materialismo, mas a busca por novidades e marcas não é materialismo. Certos objetos eu desejo pela função apenas; a marca, a cor, ou os acessórios não são importantes.

Os carros Kei nunca seriam aceitos no Brasil (eu adoraria ter um para andar na cidade). As pessoas buscam atributos irrelevantes para a utilidade do carro: querem se sentir mais ricas, ou mais másculas, ou mais poderosas. O carro Kei é essencialmente um carro para locomoção e nada mais.

O herói desse filme parece ter encontrado uma maneira bem simples de viver. Ele lê um livro por vez, toma banho numa casa de banhos, lava as roupas numa lavanderia, come no mesmo restaurante todos os dias. As coisas interessantes da vida dele chegam sem serem convidadas.

Num ponto o filme falha: as fitas cassetes não duram tanto tempo. Eu sei porque tenho algumas ainda. Depois de uns 20 anos, elas começam a estragar. E mesmo que sobrevivam, está quase impossível achar onde tocá-las.

Então, as minhas ressalvas à ideia do filme são duas:

Primeiro, manter o status quo exige energia. As mudanças vão nos empurrando de tal sorte que nem sempre vale a pena manter tudo parado.

Em segundo lugar, nem tudo merece ser preservado. As fitas cassetes serviram seu papel, mas hoje em dia elas são, junto com os LPs, lixo plástico. Um único pen-drive armazena milhares de discos e consome menos recursos por isso.

Então, o filme está a nos mostrar uma noção de vida mais simples, mas usa uma artimanha que esconde um desperdício bárbaro. A ideia é o que conta, eu sei, mas este é um blog sobre tecnologia. Continuar a usar fitas cassete em 2024 é como ter uma Mercedes de 1950: é muito bonito, mas exige tempo e recursos que não valem realmente a pena (para a maior parte das pessoas).

Hirayama, o personagem central do filme, usa câmeras com filme. Talvez em Tóquio ainda exista onde revelar filme, mas em cidades com menos de 30 milhões de habitantes, talvez seja difícil.

Em resumo, eu gostei da noção do filme de que devemos procurar uma maneira mais simples de viver. Vejo muitas pessoas sofrendo por quererem ter tudo ao mesmo tempo. Por outro lado, acho que o filme errou nos detalhes, porque usou artefatos que, embora nos remetam a tempos mais simples (ou seria apenas uma ilusão da nossa memória?), na realidade complicariam bastante a vida de quem quer usá-los ainda hoje. Eis a magia do cinema, sempre a nos iludir.