Jak przekonwertować 32-bitowy (x86) system oparty na Debianie na 64-bit


36

Mam system 32-bitowy, który działa na 64-bitowym procesorze. Jak przekonwertować go na wersję 64-bitową bez ponownej instalacji? Widziałem gdzieś, że jest to wykonalne dzięki nowej ramie Multiarch .


5
Jestem zainteresowany odpowiedziami na to pytanie. Mam 32-bitowy system na 64-bitowej maszynie (która ma teraz ponad 6 lat, ale na razie jeszcze działa). Jedynym powodem, dla którego korzystałem z wersji 32-bitowej podczas pierwszej instalacji tego komputera w 2007 roku, było to, że chciałem uruchomić na nim aplikacje 32-bitowe. Z nowym multiarch, o ile dobrze rozumiem, aplikacje 32-bitowe można łatwo zainstalować na komputerze 64-bitowym. Byłoby miło przekonwertować na 64-bitowy dla wheezy, ale nie wiem, jak trudne byłoby to. Sugestia @ bahamat dotycząca używania maszyny wirtualnej brzmi dobrze. Jeśli uda mi się pomyślnie zakończyć konwersję, odpowiem tutaj.
Faheem Mitha


Podobne pytanie na temat AU: askubuntu.com/q/5018/178596
Wilf

Odpowiedzi:


8

TL; DR: To wykonalne, ale skomplikowane. Na dole przedstawiłem alternatywę.

Teraz długi opis i weź go z odrobiną soli, ponieważ być może nie wybrałem najlepszej drogi:

Jest to możliwe, a oto co zrobiłem przez ostatnie dwie noce: Istnieje wpis wiki opisujący oldschoolowy sposób bez wsparcia dla wielu kursów. Jest to pomocne w naprawianiu uszkodzonych pakietów.

Aby przeprowadzić migrację systemu podstawowego, wykonaj następujące czynności :

$ 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

Niektóre z twoich pakietów to amd64, ale większość pozostanie i386. apt-get upgradezajmie się niektórymi pakietami, apt-get -f installnaprawi niektóre błędy, ale nadal większość pakietów pozostanie i386. Jeśli chcesz sobie z tym poradzić, pomiń trudną część;)

Użycie dpkg --get-selections | grep :i386zwróci wszystkie twoje pakiety, które nadal będziesz musiał migrować.

Moim następnym pomysłem było:

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

Okazało się to jednak złym pomysłem: niektóre pakiety nie są dostępne w amd64 (np. Libc6-i686), apt-get będzie zdezorientowany, a wiele pakietów zostanie zainstalowanych w obu wersjach. Trzeba wykonać dużo pracy manualnej.

Więcej trudności: niektóre niezbędne pakiety można wymienić, aby zawsze mieć zainstalowane pliki binarne do instalacji, ale niektóre pakiety będą musiały zostać usunięte i ponownie zainstalowane, np. Miałem problem z tar. Zapomniałem pakietów w innym systemie, wyodrębniłem pakiety przez, ar p package.deb data.tar.gz | tar zxa następnie wyedytowałem scpwyodrębnione pliki przez scp -r ./* root@other_computer:/, więc pliki binarne są ponownie dostępne. Opłucz i powtórz, a scppliki ed zostaną zastąpione.

Co bym zamiast tego zrobił

Za każdym razem, gdy zmieniałem system, robiłem następujące rzeczy:

Kopii zapasowej /home, /etc(a może /var, /usr/localniektóre inne pliki, które uległy zmianie, /root, ..., YMMV).

Uzyskaj listę zainstalowanych pakietów dpkg --get-selections > packagelisti skopiuj również wynikowy plik packagelist.

Następnie wykonaj czystą ponowną instalację Debiana, ponownie utwórz wszystkich użytkowników, może role itp.

Ponownie zainstaluj wszystkie pakiety za pomocą dpkg --set-selections < packagelist; apt-get -f install.

Skopiuj z powrotem kopie zapasowe katalogów, plików i gotowe.

Jedna wada tego podejścia: wszystkie twoje pakiety, w tym biblioteki, zostaną oznaczone jako zainstalowane ręcznie, więc nie zostaną odinstalowane, gdy żaden pakiet już od nich nie zależy.


1
„Co bym zamiast tego zrobił” ... człowieku, byłem pewien, że OP zapytał bez ponownej instalacji: /
Braiam

@Braiam OP najprawdopodobniej chciał to zrobić bez ponownej instalacji. Właśnie to robiłem. Alternatywna trasa jest dla mnie prostsza i być może popełniłem błędy podczas konwersji systemu.
Residuum

6
Aby oznaczyć automatycznie zainstalowane pakiety, można było apt-mark showautowyeksportować listę automatycznie zainstalowanych pakietów i apt-mark autooznaczyć je w nowej instalacji.
Adrien Clerc

Dziękujemy za napisanie swojego doświadczenia. „Jeśli chcesz sobie z tym poradzić, pomiń trudną część;)” Co jeśli moim celem jest po prostu tworzenie oprogramowania x86_64i nie przejmuj się, czy moje pakiety systemowe nie wykorzystują optymalnie 64-bitowego procesora ? Używam również 32-bitowego systemu operacyjnego. Myślę, że myślałem, że mój procesor był 32-bitowy, kiedy pierwszy raz wykonałem instalację :(
jberryman

7

Inne odpowiedzi tutaj pokazują, że chociaż jest to teoretycznie możliwe, jest bardzo złożone i prawdopodobnie nie warte wysiłku. Możesz jednak wykonać czystą instalację i uczynić ten proces stosunkowo bezbolesnym, jeśli pozostaniesz $HOMEtaki sam.

Ogólny proces będzie

  1. Wykonaj kopię zapasową listy zainstalowanych pakietów i listy automatycznie zainstalowanych pakietów.

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

    Zauważ, że możesz również chcieć usunąć architekturę z nazw pakietów, które zainstalowałeś za pomocą multiarch :

    dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
    
  2. Jeśli twoja /homeoddzielna partycja, pamiętaj, aby jej nie sformatować podczas procesu instalacji. Jeśli nie znajduje się na osobnej partycji, wykonaj kopię zapasową, którą możesz przywrócić później:

    tar cvzf home_backup.tgz $HOME/
    
  3. Po zainstalowaniu nowego systemu zainstaluj brakujące pakiety

    sudo dpkg --set-selections < package.list 
    sudo apt-get update
    sudo apt-get dist-upgrade
    sudo apt-mark auto $(cat auto.list)
    
  4. Przywróć swój $ HOME. Skopiuj plik tgz i wypakuj go do katalogu $ HOME:

    tar xvzf home_backup.tgz
    

Możesz także rzucić okiem na narzędzia, które zapewnia Mint, aby to ułatwić. Wszystkie powinny być również instalowalne na Ubuntu.


4

Teoretycznie jest to możliwe, ale prawdopodobnie zdradzieckie. Debian Multiarch obecnie obsługuje biblioteki wielu bibliotek, ale nie binaria. Więc to jest to.

System przede wszystkim rozumie swoją własną architekturę dpkg-architecture(która jest w rzeczywistości skryptem perla, ale wyodrębnia informacje o łuku i wyświetla je), która również twierdzi, że jest w stanie ustawić architekturę.


OSTRZEŻENIE: NIE ROBIŁEM TEGO NORMY NAWET PRÓBY !!!


Z grubsza proces byłby:

  1. Zainstaluj wariant wielu bibliotek wszystkich bibliotek (co najważniejsze libgcc1)
  2. Użyj, dpkg-architecture -aamd64aby przesunąć łuk (uwaga, może to narzekać na GCC)
  3. Pobierz i ustaw wszystkie wymagane komponenty (patrz dalej)
  4. Wymuś instalację wariantu amd64 dpkgi zależności
  5. Wymuś instalowanie wariantów amd64 podstawowych pakietów systemu podstawowego, w tym apt-geti jądra (uwaga, może to DUŻO narzekać)
  6. Restart
  7. Prawdopodobnie zainstaluj resztę systemu za pomocą apt-get

Kroki te są oparte na tym, co wiem o projekcie Debiana, który używał go prawie wyłącznie wśród dystrybucji Linuksa w ciągu ostatnich 12 lat (w tym wcześniej go używał debtakeover) oraz podejściu, które wybrałbym. Rozważ to na własne ryzyko . Twój system może stać się bezużyteczny w dowolnym momencie po wykonaniu kroku 4. Alternatywą dla kroków 4 i 5 może być debbootstrap.

Co najważniejsze, zdecydowanie sugeruję wypróbowanie tego na maszynie wirtualnej przed zrobieniem tego na czymkolwiek, na czym ci zależy.

Powodzenia i niech Moc będzie z Tobą .


3

Nie jest to odpowiedź na pytanie, ale uaktualnienie wszystkich pakietów z x86 do amd64 może być trudne, ale możesz przynajmniej łatwo zainstalować pakiet jądra amd64, który pozwoli przynajmniej uruchomić 64-bitowe aplikacje oraz maszyny wirtualne i kontenery ( co może wystarczyć na to, czego potrzebujesz).

Wystarczy zainstalować pakiet Linux-image amd64 za pomocą dpkg -i --force-architecture.


1
--force-architecturenie jest potrzebne, a jądro amd64 można zainstalować za pośrednictwem apt na i386.
Jordan

3

Istnieje wiele instrukcji, ale prawie nie pokazują, czego naprawdę można się spodziewać. Piszę to na laptopie Debian Wheezy, który właśnie ukończyłem aktualizację z wersji 32-bitowej na 64 i rzeczywiście działa.

Postępowałem zgodnie z tymi instrukcjami i były one bardzo dokładne w kwestii tego, z czym się faktycznie spotkasz:

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

Zaleca się, aby system był zasilany przez cały proces, nie uruchamiaj ponownie komputera, chyba że masz pewność, że przeprowadziłeś migrację wszystkiego i że wszystko, co zostało usunięte, zostało ponownie zainstalowane (szczególnie niezbędne pakiety), albo nie uruchomisz systemu ponownie.


1
Interesujące jest przeczytanie, co jest w rzeczywistości zaangażowane, ale po przeczytaniu tego, myślę, że lepiej mi się na ponownej instalacji. Dzięki.
Faheem Mitha

Ten link nie działa dla mnie - czy zasób został przeniesiony?
Toby Speight

O tak, widziałeś datę? Napisałem, że w 2013 roku rzeczy często znikają w sieci po 6 latach. Niestety, sieć wciąż nie ma bardzo podstawowej funkcji: pokazywanie uszkodzonych linków przed kliknięciem linku.
nigratruo

1

Zgodnie z pomysłem za pomocą awk , skończyłem na użyciu:

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

Musiałem uruchomić go kilka razy. dpkg --get-selectionsjest po prostu listą alfabetyczną, więc pakiety u góry, które wymagają pakietów u dołu, zostaną pominięte. Jeśli chcesz zobaczyć, ile jest instalowanych, zrób to dpkg --get-selections | grep amd64 | wc -lw whilepętli.


-1

Mam niewielkie doświadczenie w tej sprawie, ale uważam, że masz rację, gdy mówisz, że konwersja z 32 na 64 powinna być możliwa przy użyciu wielu łuków. Byłbym jednak ostrożny, jeśli chodzi o wsparcie tego nowego systemu.

Oto jeden z przeczytanych przeze mnie dokumentów, który omawiał tę sprawę, być może pomoże ci to: https://wiki.ubuntu.com/MultiarchSpec

Zwróć uwagę na trzecie historie użytkowników. Oto kolejny link na ten sam temat: https://help.ubuntu.com/community/MultiArch

Mimo, że może to być nieco inna różnica między Debianem a Ubunutu, jest to podstawowa funkcja. Wyobrażam sobie, że Ubuntu i Debian będą ściśle współpracować, aby ta struktura działała w terenie, zanim Ubuntu odejdzie i zrobi coś własnego.

Powodzenia!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.