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 .
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 .
Odpowiedzi:
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 upgrade
zajmie się niektórymi pakietami, apt-get -f install
naprawi 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 :i386
zwró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 zx
a następnie wyedytowałem scp
wyodrębnione pliki przez scp -r ./* root@other_computer:/
, więc pliki binarne są ponownie dostępne. Opłucz i powtórz, a scp
pliki 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/local
niektóre inne pliki, które uległy zmianie, /root
, ..., YMMV).
Uzyskaj listę zainstalowanych pakietów dpkg --get-selections > packagelist
i 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.
apt-mark showauto
wyeksportować listę automatycznie zainstalowanych pakietów i apt-mark auto
oznaczyć je w nowej instalacji.
x86_64
i 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ę :(
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 $HOME
taki sam.
Ogólny proces będzie
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
Jeśli twoja /home
oddzielna 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/
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)
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.
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ę.
Z grubsza proces byłby:
libgcc1
)dpkg-architecture -aamd64
aby przesunąć łuk (uwaga, może to narzekać na GCC)dpkg
i zależnościapt-get
i jądra (uwaga, może to DUŻO narzekać)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ą .
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
.
--force-architecture
nie jest potrzebne, a jądro amd64 można zainstalować za pośrednictwem apt na i386.
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.
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-selections
jest 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 -l
w while
pętli.
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!