Como editar RPMFUSION pra usar mirrors de um país

geraldossk
editado October 8 em Tutoriais

Um pouco de contexto (se quiser apenas aprender a configurar pode seguir pro tópico da solução)

Ultimamente temos observado no grupo do telegram da comunidade fedora brasil que tem aumentado o número de usuários com problemas em relação à instalação e utilização do repositório rpmfusion.
Pesquisando mais a fundo nós descobrimos que todos os problemas eram causados por erros relacionados aos espelhos (mirrors) que são servidores locais que hospedam os pacotes do rpmfusion (e são mantidos por terceiros). Em um caso a falha era originada devido a um desses mirrors estar com um pacote de configuração errado, em outro caso era o certificado do site que estava expirado e em outro era chave de criptografia defasada. Teve ocasiões em que não se conseguia nem instalar os repositórios devido à essas questões (rodando aquele comando do dnf install disponibilizado no site do rpmfusion)
Mas aí vem a pergunta: ué, basta trocar o mirror né, o dnf não faz isso automaticamente ao detectar um problema? Pois é, ele faz sim mas pra isso ocorrer com sucesso ele precisa ter mirrors de qualidade pra onde apontar, e aqui no BR nós infelizmente não contamos com nenhum mirror, nenhum mesmo (lembre-se que estamos falando do rpmfusion, não dos repositórios oficiais fedora).
O que o dnf acaba achando pra se conectar no BR são mirrors do Chile, Equador e Colombia.
Você pode conferir isso pessoalmente abrindo um terminal e rodando o comando abaixo pra ver a saída que o metalink encontra:

curl "https://mirrors.rpmfusion.org/metalink?repo=nonfree-fedora-40&arch=x86_64&content=appstream&country=BR"

Observe na saída as linhas que iniciam com no campo onde diz: "location=XX"

Veja que mesmo rodando o comando pedindo mirrors BR ele só encontra esses de CO (Colombia), CL (Chile) e EC (Equador).
Se rodarmos o comando pedindo mirrors dos EUA (US) veja quantos ele encontra:

E tudo isso está mesmo nos EUA.
Sabemos que essas falhas encontradas são transitórias e em seguida não houve mais problemas, possivelmente devido a alguma atualização de configurações, mas de tempos em tempos aparece ainda alguém no grupo informando problemas com o rpmfusion e quando vamos ver o log, lá está algum desses mirrrors problemáticos.

=====================================

Solução

Pra não se incomodar mais com isso nós criamos e testamos um procedimento bem simples que edita os arquivos de configuração dos repositórios rpmfusion para que o dnf procure por mirrors especificamente em um país, e não se deixe levar pelo seu IP range apenas (o que sempre vai apontar que você está no Brasil e portanto vai usar os mirrors com problema).

Para editar os repo RPM Fusion de modo a buscar só mirrors dos EUA (abra um terminal e proceda da seguinte forma):

Faça backup dos repositorios atuais (regra de ouro pra quem gosta de ficar editando arquivo de config): cp -R /etc/yum.repos.d/ backup

Entre na pasta correta onde ficam os arquivos de config dos repositórios: cd /etc/yum.repos.d/

Por fim rode o comando a seguir, que irá editar todos os arquivos que iniciam com "rpmfusion" e irá adicionar &country=US no local correto dos arquivos:

sudo sed -r -i s/'(^metalink.*basearch)/\1\&country=US/' rpmfusion*

Após fazer isso você pode atualizar o cache do seu dnf com o comando sudo dnf upgrade --refresh

=====================================

Obs: Aqui nesse exemplo a gente usou o país EUA (US) pra configurar os repositórios, mas você pode usar outros códigos também se preferir:
Alemanha = DE
Reino Unido = UK
Itália = IT
E assim por diante (você irá usar essas duas letras do código do país pra substituir o "US" nessa parte do código mostrado anteriormente: &country=US
Por exemplo, a seguir vamos usar DE neste campo, para que o dnf procure especificamente mirrors da Alemanha: sudo sed -r -i s/'(^metalink.*basearch)/\1\&country=DE/' rpmfusion*

Caso você já tenha editado os repositórios e queira trocar por outro país, rode o comando abaixo usando o novo código de país desejado no lugar do "US":

sudo sed -r -i 's/\&country=.*/\&country=US/' rpmfusion*

Caso você queira reverter tudo totalmente e voltar ao modo original dos metalinks, sem apontar nenhum país em específico, rode esse comando (lembre-se de que você precisa estar com o terminal aberto na pasta onde ficam esses arquivos de configuração (/etc/yum.repos.d/):

sudo sed -r -i 's/\&country=.*//' rpmfusion*

=====================================

Instalando do zero

E se eu nem conseguir instalar os repositórios pois os mirrors tão com problema, como faço pra resolver?

Bom caso isso aconteça uma das saídas é rodar o comando abaixo, que vai apontar diretamente pra o servidor central do rpmfusion.org pra baixar os pacotes de instalação dos repositórios rpmfusion.

sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

Esse comando vai instalar os repo free e nonfree, independente de arquitetura de processador e de versão do fedora (testado com sucesso pro F40 e F41).
Claro que esse comando só vai instalar o rpmfusion de forma padrão, ou seja, depois disso se você quiser que o dnf use mirrors de um país específico você vai ter que rodar os comandos que nós demonstramos no tópico "SOLUÇÃO".

=====================================

Como checar que agora o dnf tá usando a nova configuração?

No caso se você está usando do F40 ou F39 (versões que usam ainda o dnf4) basta limpar o cache do dnf com o comando sudo dnf clean all em seguida buscar instalar algo do rpmfusion, ou só rodar um sudo dnf upgrade --refresh pro dnf refazer seu cache. Depois disso pode rodar o seguinte comando:

sudo cat /var/log/dnf.librepo.log

Com isso você verá uma relação de repositórios que o dnf usou pra atualizar o cache (não só do rpmfusion mas também o que ele usou pros repositórios oficiais do fedora.
Veja na imagem abaixo como o dnf buscou mirrors dos EUA pro rpmfusion nesse caso:

Caso você já esteja no F41, usando portanto o dnf5, então o comando pra checar se o dnf usou corretamente os repositórios do país escolhido é: sudo cat /var/log/dnf5.log

=====================================

Agradecimentos especiais ao amigo Fernando Debian pelo auxílio com a sintaxe do sed e ao Marcos Farias pelo apoio.