Mind Bending

Aproximadamente um ano atras o Arch Linux abandonou o /lib em prol do /usr/lib. Muitos reclamaram, se debateram e xingaram muito no twitter, mas nada mudou o fato do /lib ser migrado. Muito bem irmãos Arch Linux, agora é a vez do /bin ser migrado.

/bin is phasing out

Desde a época da migração do /lib foi noticiado que este era apenas o inicio de uma grande remodelagem do sistema de arquivos. O fato é que este procedimento não foi inventado ou iniciado pelo Arch Linux, mas sim solicitado pelos desenvolvedores do grupo Freedesktop e, consequentemente, essas mudanças entrarão em vigor não somente no Arch Linux mas em vários outras distribuições GNU/Linux.

Migrando

Muito bem, como eu acabei me atrasando pra escrever esse artigo acredito que muitos já tenham se deparado com o problema, caso negativo basta você usar o comando sudo pacman -Suy. Ao final da atualização você verá a seguinte mensagem:

erro: falha em submeter a transação (arquivos conflitantes)
filesystem: /bin existe no sistema de arquivos
filesystem: /sbin existe no sistema de arquivos
filesystem: /usr/sbin existe no sistema de arquivos
Ocorreram erros e, portanto, nenhum pacote foi atualizado.

Atenção Nesta atualização, nunca (eu disse nunca) use a força pequeno Obi-Wan (estou me referindo ao comando --force) pois isso resultará na quebra de sistema.

Isso simplesmente quer dizer que ele não pode concluir toda a atualização devido ao conflito do /bin, /sbin e /usr/sbin. Tudo que devemos fazer é esvaziar completamente esses diretórios.

A princípio todos os pacotes oficiais já estão corrigidos, com isso devemos nos preocupar apenas com pacotes não oficiais, como por exemplo os pacotes do AUR e outros manualmente instalados. Para consultar todos os pacotes "não oficiais" que possuem arquivos nesse diretório utilize o seguinte comando:

$ sudo pacman -Qqo /bin /sbin /usr/sbin | pacman -Qm -
uml_utilities 20070815-5

No meu caso havia apenas o pacote uml_utilities. Neste ponto temos duas opções:

  • Mover manualmente os arquivos do /bin e do /sbin para o diertório /usr/sbin;
  • Desinstalar esses pacotes para reinstalá-los posteriormente.

A primeira opção envolve em você manipular esses diretórios manualmente, o que é meio arriscado, logo optei pela segunda opção: Desinstalar os pacotes. Para isso utilize um comando simples e comum para qualquer usuários Arch Linux: sudo pacman -Rns uml_utilities. Após remover os pacotes listados consulte se existe mais alguma coisa repetindo o comando sudo pacman -Qqo /bin /sbin /usr/sbin | pacman -Qm -.

Por último vamos procurar por pacotes instalados de repositórios não oficiais. Para saber quais repositórios não oficiais você possui, consulte o arquivo /etc/pacman.conf e descarte os repositórios oficiais (para mais uma demonstração dos repositórios padrões consulte essa página da Wiki). Muito bem, para mim havia o archlinuxfr, o qual utilizo para instalar o yaourt. Desta forma, para consultar os pacotes do archlinuxfr que devem ser adequados utilize o seguinte comando:

$ paclist archlinuxfr | awk ' { print $1 } ' | pacman -Ql - | grep ' /s\?bin/\| /usr/sbin/'

Importante notar que o comando acima consulta somente o archlinuxfr, se você possuir outro repositório consulte por ele também substituindo o nome do repositório.

Muito bem, aqui temos um ponto importante. Se no seu arquivo /etc/pacman.conf existir algum pacote em IgnorePkg ou IgnoreGroup você deverá mover os arquivos em /bin ou /sbin manualmente. Para listar os arquivos vinculados a um pacote utilize o seguinte comando:

$ pacman -Ql package_name

Muito bem, feito tudo isso, só para ter certeza que não haverá nenhum arquivo nos diretórios mencionado utilize o seguinte comando: find /bin /sbin /usr/sbin -exec pacman -Qo -- {} + >/dev/null

Por último vamos atualizar o sistema ignorando os pacotes filesystem e bash:

$ sudo pacman -Syu --ignore filesystem,bash
:: Sincronizando a base de dados de pacotes...
 core está atualizado
 extra está atualizado
 community está atualizado
 multilib está atualizado
:: Iniciando atualização completa do sistema...
atenção: bash: ignorando atualização do pacote (4.2.045-1 => 4.2.045-4)
atenção: filesystem: ignorando atualização do pacote (2013.03-2 => 2013.05-2)
resolvendo dependências...
procurando por conflitos inter-relacionados...
(...)

Muito bem, agora podemos atualizar o bash:

$ sudo pacman -S bash
resolvendo dependências...
procurando por conflitos inter-relacionados...

Pacotes (1): bash-4.2.045-4

Tamanho total instalado:   3,51 MiB
Alteração no tamanho:    -0,10 MiB

:: Continuar a instalação? [S/n] s
(1/1) verificando chaves no chaveiro                [########] 100%
(1/1) verificando integridade do pacote             [########] 100%
(1/1) carregando arquivos do pacote                 [########] 100%
(1/1) verificando conflitos de arquivo              [########] 100%
(1/1) verificando espaço em disco disponível        [########] 100%
(1/1) atualizando bash                              [########] 100%

Por último atualize todo o sistema:

$ sudo pacman -Su
:: Iniciando atualização completa do sistema...
resolvendo dependências...
procurando por conflitos inter-relacionados...

Pacotes (1): filesystem-2013.05-2

Tamanho total instalado:   0,01 MiB
Alteração no tamanho:    -0,30 MiB

:: Continuar a instalação? [S/n] s
(1/1) verificando chaves no chaveiro             [#########] 100%
(1/1) verificando integridade do pacote          [#########] 100%
(1/1) carregando arquivos do pacote              [#########] 100%
(1/1) verificando conflitos de arquivo           [#########] 100%
(1/1) verificando espaço em disco disponível     [#########] 100%
(1/1) atualizando filesystem                     [#########] 100%

Pronto, ao final tudo deve ter corrido bem. Agora que todo o sistema está atualizado, reinstale aqueles pacotes que foram removidos.

Para finalizar reinicie seu computador, acenda 3 velas, realize um sacrifício celta com aquele seu CD do Windows XP pirata, rogue seu santo padrinho e reverencie 7 vezes o gabinete do seu computador durante o carregamento do bootloader. No fim, garanto que seu sistema voltará normalmente.

Boas Novas

Após toda esse trabalho temos uma boa notícia, conforme proposta original na lista de discussão oficial do Arch Linux Dev essa migração foi a última. Ou pelo menos a última dessa série :).

Magnun

Magnun

Engenheiro de telecomunicações por formação, mas trabalha com suporte à infraestrutura GNU/Linux, e nas horas vagas é Programador OpenSource (Python e C) desenhista e escritor do Mind Bending Blog.


Comments

comments powered by Disqus