Enviado em 28/01/2022 - 03:37h
Vim para relatar um problema terrível e grotesco, desesperador e sem solução, e a solução estúpida e altamente desrecomendável que o resolveu. O assunto está aqui para debate da comunidade, e não tanto para servir de referência para solução de problemas semelhantes, até mesmo porque era a pior solução de todos os tempos, que sabe-se lá porque zicas do destino, funcionou. Mas devia era ter destruído todo o sistema de vez. O tipo de estória que voce conta para os amigos para dizer que "isso existe, e pode acontecer".
O precedente não era dos melhores... Eu estava encarando o desafio de instalar o Cinelerra no Linux Mint 20 Ullyana. Quem conhece, sabe bem que o Cinelerra pode ser o melhor editor de vídeo, mas padece de uma distribuição amadora e um desenvolvimento irresponsável : Bugs de instalação à rodo, versões distribuídas sem configure ou makefile. Appimages que não funcionam porque não são reconhecidas como executáveis, por mais que voce mude as permissões no terminal ou na gui. Exigências de dependências, obsoletas ou experimentais e que continuam experimentais para sempre -- do tipo "a versão final vai sair no fim do mês, então vamos usar", mas essa versão final não sai nunca, porque os bugs dela parecem um impávido colosso, como o hino nacional... Não são terminadas nunca, e no fim ficam obsoletas antes mesmo de ser lançadas, substituídas por novas tecnologias que ao contrário delas, funcionam. Fora que se isso for pouco, o Cinelerra exige também pacotes git, vários deles, todos na mesma linha experimental. Imagine a irresponsabilidade de exigir gits, que além de experiementais, são frequentemente descontinuados sem aviso, além de instruções de instalações doentiamente mal-redigidas. As exigencias do cinelerra são absurdas : Instalar várias dezenas de dependências só para os gits, e inclui umas cacas já obsoletas e problemáticas como Vdpau ( aquele que só dá pau... ), Vaapi, e o inacreditável SHUTTLE USB support, que serve apenas para as placas de captura da marca SHUTTLE, e por isso não deveria ser dependência obrigatória. Da mesma forma, vdpau e vaapi só interessam à Nvidia... Devem ser patrocinadores do cinelerra... Fora a SHUTTLE ser odiada pela comunidade pelo descaso e estupidez com que trata o pessoal do Linux. Bom, batalhei muito e superei os obstáculos Vdpau support e Vaapi support e fui encarar o nojento usb support da shuttle, que exigia um git que pedia uma paulada de dependências para ser compilado, configurado e "makeado". Entre elas, o inocente Apache2, que tem um bug nojento à anos e ninguém resolve.
Bom, foi esse bug que me pegou. O apt-get travou porque o dpkg entrou em recursão e esgotou o cache do apt -- Nenhuma recursão infinita é de fato infinita, porque o cache disponível não é. Então quando o espaço disponível para o cache acaba, a aplicação apenas trava e a recursão acaba. E o cache do dpkg é generoso, mas limitado. Ficou apenas o aviso repetido por centenas de linhas de terminal : "Deep recursion on subroutine "main::rmdir_if_empty" at /usr/bin/deb-systemd-help, erro na linha 424". Ficou travado nesse erro sem conseguir sair dela, e sem finalizar a subrotina. Eram literalmente centenas de repetições dessa mesma linha. Sendo recursão, poderia ter sido milhares, mas como pontuei, o cache disponível não é infinito -- o dpkg no máximo instala até cerca de 30 dependências de uma vez, e poderia instalar mais, até 50, mas não consegue mais organizar a ordem de instalação -- Nenhuma solução destravaria o dpkg depois dessa. Era preciso fechar o terminal e matar o processo. Mas rodar --configure -a era inútil, porque ele apenas repetia a recursão e não saía disso. Eu fiz., matei o processo e tentei de novo. Inútil, o mesmo de novo. Outros comandos não eram aceitos, porque a Nerdalha Desenvolvedora que criou o Dpkg programaram a coisa para resolver tudo apenas com --configure -a. E quando o problema é o próprio configure -a ? Examinei a subrotina que travava a configuração do apache, no lugar e na linha indicada ( /usr/bin/deb-systemd-help , linha 424 ) e era assustador por ser um arquivo do systemd. Era além do meu conhecimento, que não é muito -- me considero "Iniciante Chique", o cara que continua iniciante, mas já tem idade suficiente pra já ter aprendido alguma coisa. Rodar configure -a era inútil, porque ele voltava à recursão, e a máquina se recusava a qualquer outra opção que não fosse executar "sudo dpkg --configure -a", à não ser apt clean, que foi necessário para limpar o cache do dpkg ou a máquina parava. Pensei que o único modo de se livrar disso seria eliminar o apache do dpkg, mas não encontrei onde ficam os arquivos temporários de instalação, o cache do dpkg. A nerdalha não pensou nisso como solução... Depois de meia hora ficou claro que eu teria que reinstalar o sistema -- e o meu sistema é todinho customizado à mão -- ou recorrer ao Timeshift, notório quebrador de Grub -- Isso porque o timeshift faz backup de todo o sistema, mas não inclui o grub nem o initramfs, porque esses não estão na Partição de Sistema, mas na Partição de Boot, que é separada; no diretório "boot" da partição de sistema só tem um link simbólico para o conteúdo da partição de boot, mas o timeshift não copia conteúdo via link simbólico. Então, se o seu grub quebra e voce tenta recuperar pelo timeshift, voce perde tudo e a máquina não inicia mais, e voce tem que reinstalar mesmo. Quando se configura o timeshift, é preciso incluir manualmente a partição de boot ( na opção "Incluir diretório/arquivos" ). Foi então pensando que eu teria que reinstalar tudo que me veio a idéia ruim que deu certo :
A recursão se devia a um problema dos scripts do apache com uma subrotina do /usr/bin/deb-systemd-help, certo ? E o nome "deb-systemd-help" sugere que ele não é um arquivo essencial do systemd, mas apenas um gerador de avisos em tela -- o famoso Verbose. Então mandei o /usr/bin/deb-systemd-help para a lixeira para deixá-lo indisponível para o sistema e fiz o dpkg configure -a. Desta vez ele rodou até o fim, sem nenhuma recursão, embora chiasse que não consequia encontrar o /usr/bin/deb-systemd-help. Mas completou o configure -a. Depois, restaurei o arquivo, da lixeira para o seu devido lugar.
Se eu fosse estúpido, ficaria todo orgulhoso de mim mesmo por meu brilhantismo. Mas não deu. Era estúpido mesmo. Funcionou, mas foi o equivalente à pular do alto de um prédio para não se suicidar. Mas achei que valia um relatório, porque já vi deslumbrados que acham que o apt é o Merlim, que faz mágica, e que é infalível. Quem tem prática sabe que o apt às vezes kg td, porque ele depende totalmente que as informações dos repositórios estejam corretas, e nem sempre estão. Quem pegou o lendário bug do build-essential no trusty Tahr, que quebrava a máquina toda vez que se tentava instalá-lo, por causa de um libstdc bugado e uma dependência circular; ou o lendário bug do Python em 2016, mais ou menos, em que os pacotes Python ficaram desencontrados durante meses, com um monte de versões diferentes dos mesmos pacotes que não funcionava estavelmente em conjunto em nenhuma versão. Resolver o problema como eu resolvi, pondo o sistema em alto risco, não é motivo para achar que acertou alguma coisa ou que teve a idéia certa. Não é uma questão de ser criativo ou de pensar fora da caixa. E quem ri por último, NÃO ri melhor; geralmente, é porque não entendeu a piada mesmo. É mais para pensar : estou no Linux desde os tempos do Lucid Linx ( que não é tanto tempo assim ), e nunca me conformei com a falta de salvaguardas do apt-get... Não deveria haver algum script semiautomático para lidar com aquela falhas comuns, como o problema das travas /var/lib/dpkg/lock-frontend, /var/lib/dpkg/lock, e /var/cache/apt/archives/lock ? Ao invés disso a Nerdalha Desenvolvedora e os Fanáticos da "Segurança" ficam criando dificuldades, como tirar a opção -B ( --force-breaks ) do dpkg para evitar "mau-uso" por parte de principiantes, proibir a instalação disso e daquilo, e outras alterações cosméticas que não resolvem os reais problemas do Linux, e apenas refletem os vícios pensamento dos nerds, como fazer as coisas de um determinado jeito apenas porque no achômetro deles é "o certo", mesmo quando é o jeito mais complicado, mas não resolve os reais problemas do Linux, como a instabilidade das permissões do Ubuntu, ou a falta de compatibilidade entre as permissões do FAT 32 e as do ext 4. Ou o lendário problema dos drivers em Linux, que funcionam mal pra caramba, desde sempre. Aliás, o segredo comercial do Windows, mantido à 7 chaves pela Microsoft desde os tempos de Darth Gates, não são os acordões feitos por debaixo dos panos com fabricantes de drivers ou de impressoras. Isso até existe, mas o grande segredo comercial do "Ruindows" é mesmo o seu refinado sistema de gerenciamento de drivers.
O precedente não era dos melhores... Eu estava encarando o desafio de instalar o Cinelerra no Linux Mint 20 Ullyana. Quem conhece, sabe bem que o Cinelerra pode ser o melhor editor de vídeo, mas padece de uma distribuição amadora e um desenvolvimento irresponsável : Bugs de instalação à rodo, versões distribuídas sem configure ou makefile. Appimages que não funcionam porque não são reconhecidas como executáveis, por mais que voce mude as permissões no terminal ou na gui. Exigências de dependências, obsoletas ou experimentais e que continuam experimentais para sempre -- do tipo "a versão final vai sair no fim do mês, então vamos usar", mas essa versão final não sai nunca, porque os bugs dela parecem um impávido colosso, como o hino nacional... Não são terminadas nunca, e no fim ficam obsoletas antes mesmo de ser lançadas, substituídas por novas tecnologias que ao contrário delas, funcionam. Fora que se isso for pouco, o Cinelerra exige também pacotes git, vários deles, todos na mesma linha experimental. Imagine a irresponsabilidade de exigir gits, que além de experiementais, são frequentemente descontinuados sem aviso, além de instruções de instalações doentiamente mal-redigidas. As exigencias do cinelerra são absurdas : Instalar várias dezenas de dependências só para os gits, e inclui umas cacas já obsoletas e problemáticas como Vdpau ( aquele que só dá pau... ), Vaapi, e o inacreditável SHUTTLE USB support, que serve apenas para as placas de captura da marca SHUTTLE, e por isso não deveria ser dependência obrigatória. Da mesma forma, vdpau e vaapi só interessam à Nvidia... Devem ser patrocinadores do cinelerra... Fora a SHUTTLE ser odiada pela comunidade pelo descaso e estupidez com que trata o pessoal do Linux. Bom, batalhei muito e superei os obstáculos Vdpau support e Vaapi support e fui encarar o nojento usb support da shuttle, que exigia um git que pedia uma paulada de dependências para ser compilado, configurado e "makeado". Entre elas, o inocente Apache2, que tem um bug nojento à anos e ninguém resolve.
Bom, foi esse bug que me pegou. O apt-get travou porque o dpkg entrou em recursão e esgotou o cache do apt -- Nenhuma recursão infinita é de fato infinita, porque o cache disponível não é. Então quando o espaço disponível para o cache acaba, a aplicação apenas trava e a recursão acaba. E o cache do dpkg é generoso, mas limitado. Ficou apenas o aviso repetido por centenas de linhas de terminal : "Deep recursion on subroutine "main::rmdir_if_empty" at /usr/bin/deb-systemd-help, erro na linha 424". Ficou travado nesse erro sem conseguir sair dela, e sem finalizar a subrotina. Eram literalmente centenas de repetições dessa mesma linha. Sendo recursão, poderia ter sido milhares, mas como pontuei, o cache disponível não é infinito -- o dpkg no máximo instala até cerca de 30 dependências de uma vez, e poderia instalar mais, até 50, mas não consegue mais organizar a ordem de instalação -- Nenhuma solução destravaria o dpkg depois dessa. Era preciso fechar o terminal e matar o processo. Mas rodar --configure -a era inútil, porque ele apenas repetia a recursão e não saía disso. Eu fiz., matei o processo e tentei de novo. Inútil, o mesmo de novo. Outros comandos não eram aceitos, porque a Nerdalha Desenvolvedora que criou o Dpkg programaram a coisa para resolver tudo apenas com --configure -a. E quando o problema é o próprio configure -a ? Examinei a subrotina que travava a configuração do apache, no lugar e na linha indicada ( /usr/bin/deb-systemd-help , linha 424 ) e era assustador por ser um arquivo do systemd. Era além do meu conhecimento, que não é muito -- me considero "Iniciante Chique", o cara que continua iniciante, mas já tem idade suficiente pra já ter aprendido alguma coisa. Rodar configure -a era inútil, porque ele voltava à recursão, e a máquina se recusava a qualquer outra opção que não fosse executar "sudo dpkg --configure -a", à não ser apt clean, que foi necessário para limpar o cache do dpkg ou a máquina parava. Pensei que o único modo de se livrar disso seria eliminar o apache do dpkg, mas não encontrei onde ficam os arquivos temporários de instalação, o cache do dpkg. A nerdalha não pensou nisso como solução... Depois de meia hora ficou claro que eu teria que reinstalar o sistema -- e o meu sistema é todinho customizado à mão -- ou recorrer ao Timeshift, notório quebrador de Grub -- Isso porque o timeshift faz backup de todo o sistema, mas não inclui o grub nem o initramfs, porque esses não estão na Partição de Sistema, mas na Partição de Boot, que é separada; no diretório "boot" da partição de sistema só tem um link simbólico para o conteúdo da partição de boot, mas o timeshift não copia conteúdo via link simbólico. Então, se o seu grub quebra e voce tenta recuperar pelo timeshift, voce perde tudo e a máquina não inicia mais, e voce tem que reinstalar mesmo. Quando se configura o timeshift, é preciso incluir manualmente a partição de boot ( na opção "Incluir diretório/arquivos" ). Foi então pensando que eu teria que reinstalar tudo que me veio a idéia ruim que deu certo :
A recursão se devia a um problema dos scripts do apache com uma subrotina do /usr/bin/deb-systemd-help, certo ? E o nome "deb-systemd-help" sugere que ele não é um arquivo essencial do systemd, mas apenas um gerador de avisos em tela -- o famoso Verbose. Então mandei o /usr/bin/deb-systemd-help para a lixeira para deixá-lo indisponível para o sistema e fiz o dpkg configure -a. Desta vez ele rodou até o fim, sem nenhuma recursão, embora chiasse que não consequia encontrar o /usr/bin/deb-systemd-help. Mas completou o configure -a. Depois, restaurei o arquivo, da lixeira para o seu devido lugar.
Se eu fosse estúpido, ficaria todo orgulhoso de mim mesmo por meu brilhantismo. Mas não deu. Era estúpido mesmo. Funcionou, mas foi o equivalente à pular do alto de um prédio para não se suicidar. Mas achei que valia um relatório, porque já vi deslumbrados que acham que o apt é o Merlim, que faz mágica, e que é infalível. Quem tem prática sabe que o apt às vezes kg td, porque ele depende totalmente que as informações dos repositórios estejam corretas, e nem sempre estão. Quem pegou o lendário bug do build-essential no trusty Tahr, que quebrava a máquina toda vez que se tentava instalá-lo, por causa de um libstdc bugado e uma dependência circular; ou o lendário bug do Python em 2016, mais ou menos, em que os pacotes Python ficaram desencontrados durante meses, com um monte de versões diferentes dos mesmos pacotes que não funcionava estavelmente em conjunto em nenhuma versão. Resolver o problema como eu resolvi, pondo o sistema em alto risco, não é motivo para achar que acertou alguma coisa ou que teve a idéia certa. Não é uma questão de ser criativo ou de pensar fora da caixa. E quem ri por último, NÃO ri melhor; geralmente, é porque não entendeu a piada mesmo. É mais para pensar : estou no Linux desde os tempos do Lucid Linx ( que não é tanto tempo assim ), e nunca me conformei com a falta de salvaguardas do apt-get... Não deveria haver algum script semiautomático para lidar com aquela falhas comuns, como o problema das travas /var/lib/dpkg/lock-frontend, /var/lib/dpkg/lock, e /var/cache/apt/archives/lock ? Ao invés disso a Nerdalha Desenvolvedora e os Fanáticos da "Segurança" ficam criando dificuldades, como tirar a opção -B ( --force-breaks ) do dpkg para evitar "mau-uso" por parte de principiantes, proibir a instalação disso e daquilo, e outras alterações cosméticas que não resolvem os reais problemas do Linux, e apenas refletem os vícios pensamento dos nerds, como fazer as coisas de um determinado jeito apenas porque no achômetro deles é "o certo", mesmo quando é o jeito mais complicado, mas não resolve os reais problemas do Linux, como a instabilidade das permissões do Ubuntu, ou a falta de compatibilidade entre as permissões do FAT 32 e as do ext 4. Ou o lendário problema dos drivers em Linux, que funcionam mal pra caramba, desde sempre. Aliás, o segredo comercial do Windows, mantido à 7 chaves pela Microsoft desde os tempos de Darth Gates, não são os acordões feitos por debaixo dos panos com fabricantes de drivers ou de impressoras. Isso até existe, mas o grande segredo comercial do "Ruindows" é mesmo o seu refinado sistema de gerenciamento de drivers.