Como converter um sistema Debian de 32 bits (x86) para 64 bits

36

Eu tenho um sistema de 32 bits que roda em um processador de 64 bits. Como faço para convertê-lo em 64 bits, sem reinstalar? Eu já vi em algum lugar que é possível como resultado do novo framework Multiarch .

tshepang
fonte
5
Estou interessado em respostas para esta pergunta. Eu tenho um sistema de 32 bits em uma máquina com capacidade de 64 bits (que agora tem mais de 6 anos, mas ainda está no momento). O único motivo pelo qual usei 32 bits quando instalei originalmente esta máquina em 2007 foi porque eu queria executar aplicativos de 32 bits nela. Com o novo multiarch, se bem entendi, aplicativos de 32 bits podem ser facilmente instalados em uma máquina de 64 bits. Portanto, seria bom converter em 64 bits para chiado, mas não sei o quão difícil seria. A sugestão de @ bahamat de usar uma VM parece boa. Se eu conseguir uma conversão bem-sucedida, responderei aqui.
Faheem Mitha
1
parece ser um bom guia
tshepang 03/03
Pergunta semelhante no AU: askubuntu.com/q/5018/178596
Wilf

Respostas:

8

TL; DR: É factível, mas complicado. Eu descrevi uma alternativa na parte inferior.

Agora, a descrição longa e leve-a com um grão de sal, pois talvez eu não tenha tomado o melhor caminho:

É possível, e aqui está o que eu fiz nas últimas duas noites: Há uma entrada no wiki que descreve o estilo da velha escola sem o suporte a multiarcas. É útil para corrigir pacotes quebrados.

Para migrar seu sistema básico, faça o seguinte :

$ dpkg --print-architecture
i386
# dpkg --add-architecture amd64
$ dpkg --print-foreign-architectures
amd64
# apt-get update
# apt-get download gcc-4.6-base:amd64 libgcc1:amd64 libc6:amd64 \
          libselinux1:amd64 zlib1g:amd64 libbz2-1.0:amd64 dpkg:amd64
# dpkg -i gcc-4.6-base*.deb libgcc*.deb libc*.deb libselinux*.deb \
          libbz2*.deb zlib*.deb dpkg*.deb
$ dpkg --print-architecture
amd64
$ dpkg --print-foreign-architectures
i386

Alguns de seus pacotes são então amd64, mas a maioria permanece i386. apt-get upgradecuidará de alguns pacotes, apt-get -f installreparará alguns erros, mas ainda assim a maioria dos pacotes permanecerá i386. Se você quiser lidar com isso, pule a parte complicada;)

Usar dpkg --get-selections | grep :i386retornará todos os seus pacotes, que você ainda precisará migrar.

Minha próxima idéia era fazer:

# apt-get install `dpkg --get-selections \
  | grep i386 \
  | awk {'gsub(/:i386/, ":amd64"); print $1'}`

Mas acabou sendo uma péssima idéia: alguns pacotes não estão disponíveis no amd64 (por exemplo, libc6-i686), o apt-get ficará confuso e muitos pacotes serão instalados nas duas versões. Muito trabalho manual no aptitude deve ser feito.

Mais dificuldades: alguns pacotes essenciais podem ser substituídos, para que você sempre tenha os binários instalados para instalação, mas alguns pacotes terão que ser removidos e instalados novamente, por exemplo, eu tive esse problema com o tar. Esqueci os pacotes em outro sistema, extraí os pacotes ar p package.deb data.tar.gz | tar zxe editei os scparquivos extraídos scp -r ./* root@other_computer:/, para que os binários estejam disponíveis novamente. Enxágue e repita e os scparquivos editados serão substituídos.

O que eu faria

Fiz o seguinte, sempre que troquei de sistema:

Fazer backup /home, /etc(e talvez /var, /usr/local, alguns outros arquivos que foram alterados, /root, ..., YMMV).

Obtenha uma lista de pacotes instalados dpkg --get-selections > packageliste copie também o arquivo resultante packagelist.

Em seguida, faça uma reinstalação limpa do Debian, crie todos os usuários novamente, talvez funções, etc.

Reinstale todos os pacotes com dpkg --set-selections < packagelist; apt-get -f install.

Copie de volta os diretórios, arquivos e backups, e você estará pronto.

Uma desvantagem dessa abordagem: todos os seus pacotes, incluindo bibliotecas, serão marcados como instalados manualmente, para que não sejam desinstalados, quando nenhum pacote mais depender deles.

Resíduo
fonte
1
"O que eu faria em vez disso" ... cara, eu tinha certeza de que o OP perguntou sem reinstalar: /
Braiam 3/13/13
@Braiam O OP provavelmente queria fazer isso sem reinstalar. Eu estava apenas relatando minha experiência pessoal fazendo isso. A rota alternativa é mais simples para mim, e talvez eu tenha cometido alguns erros ao converter o sistema.
Residuum
6
Para marcar pacotes instalados automaticamente, você pode ter usado apt-mark showautopara exportar a lista de instalação automática e apt-mark automarcá-los na nova instalação.
Adrian Clerc
Obrigado por escrever sua experiência. "Se você quiser lidar com isso, pule a parte complicada;)" E se meu objetivo for apenas desenvolver software x86_64e não me importo se meus pacotes de sistema não estão usando o processador de 64 bits de maneira ideal ? Também estou executando um sistema operacional de 32 bits. Eu acho que eu pensei que o meu processador foi de 32-bit quando eu fiz primeiro a instalar :(
jberryman
7

As outras respostas aqui mostram que, embora isso seja teoricamente possível, é muito complexo e provavelmente não vale o esforço. No entanto, você pode fazer uma instalação limpa e tornar o processo relativamente indolor, se você continuar $HOMEigual.

O processo geral será

  1. Faça um backup da sua lista de pacotes instalados e da lista de pacotes instalados automaticamente.

    dpkg --get-selections '*' > package.list
    apt-mark showauto >auto.list
    

    Observe que você também pode remover a arquitetura de qualquer nome de pacote que você instalou usando o multiarch :

    dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
    
  2. Se você /homeé uma partição separada, apenas certifique-se de não formatá-la durante o processo de instalação. Se não estiver em uma partição separada, faça um backup do qual você possa restaurar posteriormente:

    tar cvzf home_backup.tgz $HOME/
    
  3. Depois de instalar seu novo sistema, instale os pacotes ausentes

    sudo dpkg --set-selections < package.list 
    sudo apt-get update
    sudo apt-get dist-upgrade
    sudo apt-mark auto $(cat auto.list)
    
  4. Restaure o seu $ HOME. Copie o arquivo tgz e extraia-o no diretório $ HOME:

    tar xvzf home_backup.tgz
    

Você também pode querer dar uma olhada nas ferramentas que o Mint fornece para facilitar isso. Todos devem ser instaláveis ​​no Ubuntu também.

terdon
fonte
4

É teoricamente possível, mas provavelmente traiçoeiro. O Debian multiarch no momento suporta bibliotecas multiarch, mas não binários. Então tem isso.

O sistema entende principalmente sua própria arquitetura dpkg-architecture(que na verdade é um script perl, mas extrai as informações do arco e as exibe), que também afirma poder definir a arquitetura.


AVISO: EU NÃO O FIZ NEM NEM MESMO TENTOU !!!


O processo aproximado seria:

  1. Instale a variante multiarca de todas as suas bibliotecas (o mais importante libgcc1)
  2. Use dpkg-architecture -aamd64para mudar seu arco (observe que pode reclamar sobre o GCC)
  3. Faça o download e prepare todos os componentes necessários (veja a seguir)
  4. Forçar a instalação da variante amd64 dpkge das dependências
  5. Forçar a instalação de variantes amd64 de pacotes essenciais do sistema básico, incluindo apt-geto kernel (observe que pode reclamar MUITO)
  6. Reiniciar
  7. Presumivelmente, instale o restante do sistema com apt-get

Essas etapas são baseadas no que eu sei sobre o design do Debian ter usado quase exclusivamente entre as distribuições Linux nos últimos 12 anos (incluindo as que foram usadas debtakeoveranteriormente) e a abordagem que eu adotaria. Portanto, considere isso por sua conta e risco . Seu sistema pode ficar inutilizável a qualquer momento após a tentativa da etapa 4. Pode ser a alternativa para as etapas 4 e 5 debbootstrap.

Mais importante, sugiro tentar isso em uma VM antes de fazer qualquer coisa com a qual você se preocupe.

Boa sorte, e que a força esteja com você .

bahamat
fonte
3

Não é uma resposta para a pergunta, mas pode ser difícil atualizar todos os pacotes do x86 para o amd64, mas é possível instalar pelo menos facilmente o pacote do kernel amd64, o que permitirá pelo menos executar aplicativos de 64 bits e máquinas e contêineres virtuais ( o que pode ser suficiente para o que você precisa).

Basta instalar o pacote amd64 linux-image com dpkg -i --force-architecture.

Stéphane Chazelas
fonte
1
--force-architecturenão é necessário, e o kernel amd64 pode ser instalado via apt no i386.
Jordanm
3

Existem alguns manuais por aí, mas quase nenhum mostra o que realmente esperar. Estou escrevendo isso em um laptop Debian Wheezy que acabei de atualizar de 32 bits para 64 e realmente funciona.

Segui estas instruções e elas foram realmente precisas sobre o que você realmente enfrentará:

http://blog.zugschlus.de/archives/972-How-to-amd64-an-i386-Debian-installation-with-multiarch.html

Uma recomendação é manter o sistema energizado durante todo o processo, não reinicialize, a menos que você tenha certeza de que migrou tudo e que tudo o que foi removido foi instalado novamente (especialmente os pacotes essenciais), ou não será possível executar o sistema novamente.

nigratruo
fonte
1
Interessante ler o que realmente está envolvido, mas depois de ler isso, acho que estou melhor com uma reinstalação. Obrigado.
Faheem Mitha
Esse link não está funcionando para mim - o recurso foi movido?
Toby Speight
Oh sim, você viu a data? Eu escrevi que em 2013, muitas vezes as coisas desaparecem na web em 6 anos. Infelizmente, a web ainda não possui uma função muito básica: mostrar links quebrados antes de clicar em um link.
nigratruo
1

Seguindo a ideia usando o awk , acabei usando:

dpkg --get-selections \               # get the list
 | grep -v deinstall \                # throw away deselected packages
 | grep ':i386' \                     # get the i386 arch packages
 | sed 's/install//g' \               # drop 'install' to get list
 | sed 's/:i386/:amd64/g' \           # replace i386 with amd64
 | while read package; do \           # iterate over the result
      apt-get -yf install $package; \ # install each one and fix dependencies
   done

Eu tive que executá-lo algumas vezes. dpkg --get-selectionsé simplesmente uma lista alfabética; portanto, os pacotes na parte superior que exigem pacotes na parte inferior serão ignorados. Se você quiser assistir quantas estão sendo instaladas, faça dpkg --get-selections | grep amd64 | wc -ldentro do whileloop.

Douglas La Rocca
fonte
-1

Tenho pouca experiência com o assunto, mas acredito que você está correto quando diz que a conversão de 32 para 64 deve ser capaz com o multi-arco. Eu seria cauteloso quanto ao quão bem esse novo sistema é suportado.

Aqui está um dos documentos que li que discutiram o assunto, talvez isso ajude você: https://wiki.ubuntu.com/MultiarchSpec

Observe a terceira história de usuário. Aqui está outro link sobre o mesmo tópico: https://help.ubuntu.com/community/MultiArch

Embora possa ser um pouco diferente entre o Debian e o Ubunutu, esse é um recurso essencial. Imagino que o Ubuntu e o Debian trabalhem em estreita colaboração para que essa estrutura funcione antes que o Ubuntu se afaste e faça algo do seu gosto.

Boa sorte!

CenterOrbit
fonte