# Nachträglich von 32 Bit auf 64 Bit umstellen?

## 3PO

Hallo Zusammen,

ist eigentlich möglich, ein installiertes 32 Bit Gentoo nachträglich auf 64 Bit umzustellen?

Der Hintergrund ist ist der, dass ich gerne mehr RAM einbauen möchte und mir die die Neuinstallation und vorallem die ganze Konfiguration sparen möchte.

----------

## Finswimmer

Ich würde mir die world Datei und /etc sichern.

Dann neu installieren und anhand der world-Datei die gleichen Pakete instalieren.

/etc/ kopierst du auch zurück und die User legst du mit den gleichen IDs an.

Das ganze könntest du dann auch auf einer extra Partition/Festplatte machen, sodass du währenddessen noch ein System hast bzw. später, wenn es nicht gehen solltest, noch ein System zur Verfügung hast.

----------

## dermund

Hi 3PO,

Auf diesem Weg würde ich auch die Verzeichnisse /root, /home/..., noch mitsichern (.dot Dateien nicht vergessen) und natürlich alle Dateien die sich nicht an schon genannten Orten liegen, für dich aber einen persönlichen Wert haben (log-dateien, kernel-config, udev-helper, ...)

Um eine Neuinstallation/Neukompilierung wird man vermutlich nicht herumkommen.

----------

## 3PO

THX für die Tipps, aber gerade die Neuinstallation will ich mir ja ersparen.

Ich dachte das es so geht, dass ich eben in der make.conf umstelle auf 64Bit, dann:

```
emerge -e system

emerge -e system

emerge -e world
```

Das ganze evtl. in einer chroot machen?

Wie kann ich den festestellen, ob alle installierten Pakete auch unter 64 Bit laufen? Geht das im Vorfeld überhaupt?

BTW @ Finswimmer:

In einer extra Partion brauche ich das nicht zu machen, da ich mein System auf eine andere HDD gespiegelt habe, - Sicher ist sicher.  :Wink: 

----------

## ScytheMan

das geht imho nicht, da die cpu entweder im 32bit oder 64bit modus gestartet wird. 

z.b. kannst du mit einer 32bit livecd keinen chroot in eine 64bit install machen und umgekehrt.

----------

## manuels

von 32bit in ein 64bit zu chrooten, klappt nicht.

Ich denke aber schon, dass es andersrum geht, da der 64bit-Kernel doch 32-Bit-ELF support hat.

Oder irre ich mich?

----------

## firefly

 *ScytheMan wrote:*   

> das geht imho nicht, da die cpu entweder im 32bit oder 64bit modus gestartet wird. 
> 
> z.b. kannst du mit einer 32bit livecd keinen chroot in eine 64bit install machen und umgekehrt.

 

Eine 64Bit CPU kann auch im 64Bit modus 32Bit code ausführen, zumindestens solche CPUs, welche die AMD64/EMT64 x86 Erweiterung haben.

Ansonsten könntest du auf einem 64Bit multilib system keine 32Bit programme ausführen.

Nur in einem 32Bit System kann man keine 64Bit code direkt ausführen.

----------

## Treborius

 *3PO wrote:*   

> Hallo Zusammen,
> 
> ist eigentlich möglich, ein installiertes 32 Bit Gentoo nachträglich auf 64 Bit umzustellen?
> 
> Der Hintergrund ist ist der, dass ich gerne mehr RAM einbauen möchte und mir die die Neuinstallation und vorallem die ganze Konfiguration sparen möchte.

 

ich habe das mal versucht, und dachte das es eigentlich mit gentoo gehen müsste

bin aber gescheitert

läuft darauf hinaus, einen 64bit kernel mit 32bit unterstützung zu bauen,

diesen dann fürs 32bit system zu booten, dann ne 64bit toolchain bauen, 

und dann das system auf 64bit bauen

ich habs jedenfalls nicht geschafft (ist auch schon 2 jahre her)

----------

## Josef.95

Siehe zb auch im Thread Von 32 auf 64bit wechseln

----------

## 3PO

Also ich denke mal dass ich so vorgehen werde:

- Auf meinem System mit einer QX6700 CPU mit einer ia64 CD booten.

- Auf eine leere HDD Gentoo ia64 installieren

- /etc und wordfile auf die HDD kopieren

- CFLAGS, etc anpassen

- emerge -e system world

- emerge -avuDN world

Das sollte dann doch so funktionieren, oder?

----------

## firefly

 *3PO wrote:*   

> Also ich denke mal dass ich so vorgehen werde:
> 
> - Auf meinem System mit einer QX6700 CPU mit einer ia64 CD booten.
> 
> - Auf eine leere HDD Gentoo ia64 installieren
> ...

 

ja nur dass du nicht ia64 verwenden solltest, sondern x86_64 bzw. amd64. Hinter der Bezeichnung [url="http://de.wikipedia.org/wiki/IA-64"]ia64[/url] steckt eine reine 64Bit Architektur von Intel.

----------

## 3PO

Dann habe ich das falsch gelesen:   :Embarassed: 

 *Quote:*   

>  [...] Die ia64-Architektur ist nur für Intel Itanium-Prozessoren gedacht, um die 64-bit-Unterstützung (EM64T) von Intel Pentium, Celeron oder Core-Prozessoren zu nutzen, verwenden Sie bitte amd64 ...

 

D.h. für einen Atom 330, oder eine QX6700 CPU muss man amd64 verwenden, wenn man ein 64 Bit OS will?

----------

## dermund

 *Quote:*   

> D.h. für einen Atom 330, oder eine QX6700 CPU muss man amd64 verwenden, wenn man ein 64 Bit OS will?

 

Ja, das ist richtig.

----------

## 3PO

So, bin endlich mal dazu gekommen das zu testen, leider aber funktioniert das nicht.   :Sad: 

Ich habe folgendes vom alten auf den neuen PC kopiert

```
/etc/make.conf

/etc/portage

/usr/portage

/usr/local/portage

/var/lib/portage
```

mache ich auf dem alten PC ein "emerge -ave world" habe ich folgende Ausgabe:

```
Total: 1501 packages (2 upgrades, 1499 reinstalls), Size of downloads: 44,367 kB
```

Und auf dem Neuen:

```
Total: 413 packages (1 upgrade, 412 new), Size of downloads: 543,118 kB
```

Wieso fehlen da knapp 1100 Pakete?

----------

## manuels

Komisch, kannst du mal ein paar Kandidaten posten, die er nicht installieren will?

----------

## 3PO

@ manuels,

wie finde ich das am besten heraus.

Ist eigentlich die o.g. Methode richtig, oder habe ich evtl. etwas vergessen?

----------

## mv

 *3PO wrote:*   

> Ich habe folgendes vom alten auf den neuen PC kopiert
> 
> ```
> /etc/make.conf
> 
> ...

 

Ich nehme an, Du hast in der make.conf auch ARCH korrigiert? Hoffentlich auch CHOST (und CFLAGS, CXXFLAGS, ...).

 *Quote:*   

> Wieso fehlen da knapp 1100 Pakete?

 

Das kann vielei Gründe haben, die auch zusammen auftauchen können:  Da Du ja kaum etwas installiert hast, nimmt portage bei den Dependencies jeweils die Defaults, und nicht unbedingt das, was Du früher installiert hattest. Dadurch kann ein ganz neuer Dependency-Baum entstehen.  Pakete, die als x86 markiert waren, sind nun ~amd64 statt amd64 (und auch nicht in einer stabilen Version verfügbar). Auch dadurch kann portage gezwungen sein, andere Dependencies zu wählen.  Wie im letzten Punkt für Pakete aus dem world-File. Wie sich portage da verhält, weiß ich nicht: Möglicherweise ignoriert portage die entsprechenden Pakete, wenn sie in keiner stabilen Version da sind.  Andere Versionen der Pakete können ganz andere Abhängigkeiten haben.  Bestimmte USE-Flags oder Pakete sind für amd64 maskiert; schon ein maskiertes USE-Flag kann einen Riesenzweig des Baumes abschneiden. Hast Du die alte Maschine noch? Gib dort mal 

```
eix-installed-after -i '*' >packages-slots.txt
```

 und von 

```
eix-installed-after '-i=' '*' >packages-versions.txt
```

 ein und kopiere die packages-*.txt files. Mach statt Deinem emerge -ave world lieber 

```
emerge -1av $(cat packages-slots.txt)
```

 (bzw., wenn Du auf Versionsgleichheit Wert legst package-versions statt packages-slots) ein. (Die -1 ist sehr wichtig, damit die Pakete nicht alle in der world-Datei enden - mach sicherheitshalber lieber auch ein Backup dieser Datei). Das Kommando wird vermutlich nicht glatt gehen, sondern gibt Dir sicher etliche Fehler bzgl. maskierter Pakete aus, für die Du dann durch Einträge in /etc/portage/package.accept_keywords nachhelfen kannst. Das wird sicher eine satte Liste von Einträgen werden, und vielleicht musst Du auch an den USE-Flags herumspielen. Nach erfolgreichem emerge ist dann ein emerge --depclean fällig, um die Pakete, die Du nicht in den Abhängigkeiten hast, wieder los zu werden (wenn Du vorher auf dem ursprünglichen System ein emerge --depclean ausgeführt hast, sollten das nicht allzu viele sein).

----------

## 3PO

1000 THX @ mv,

natülich habe ich das "alte" System noch, das läuft ja produktiv. Das mit der Umstallung auf 64 Bit ist ja nur ein Versuch.  :Wink: 

CHOST, CFLAGS, etc habe ich gesetzt.

ARCH habe ich (noch) nicht gestet, - sollte ich das tun?

Beim "alten" System lief ein:

```
eix-sync

emerge -avuDN world
```

anstandslos durch.

Nach Deiner Methode sieht das nun so aus:

```
....

Total: 428 packages (1 upgrade, 427 new), Size of downloads: 121,620 kB

Portage tree and overlays:

 [0] /usr/portage

 [1] /usr/local/portage

 * Error: circular dependencies:

(dev-util/cmake-2.8.1-r2::gentoo, ebuild scheduled for merge) depends on

 (x11-libs/qt-gui-4.7.1-r1::gentoo, ebuild scheduled for merge) (buildtime)

  (net-print/cups-1.4.4-r2::gentoo, ebuild scheduled for merge) (buildtime)

   (dev-lang/php-5.3.5::gentoo, ebuild scheduled for merge) (buildtime)

    (virtual/mysql-5.1::gentoo, ebuild scheduled for merge) (buildtime)

     (dev-db/mysql-5.1.51::gentoo, ebuild scheduled for merge) (runtime)

      (dev-util/cmake-2.8.1-r2::gentoo, ebuild scheduled for merge) (buildtime)

It might be possible to break this cycle

by applying any of the following changes:

- dev-util/cmake-2.8.1-r2 (Change USE: -qt4)

- x11-libs/qt-gui-4.7.1-r1 (Change USE: -cups)

- net-print/cups-1.4.4-r2 (Change USE: -php)

Note that this change can be reverted, once the package has been installed.

Note that the dependency graph contains a lot of cycles.

Several changes might be required to resolve all cycles.

Temporarily changing some use flag for all packages might be the better option.

 * IMPORTANT: 2 news items need reading for repository 'gentoo'.

 * Use eselect news to read news items.

vdr01 var #
```

Obwohl in der "packages-slots.txt" 1611 Pakete drin stehen.

Ausserdem wundert mich die "circular dependencies", denn die gibt es auf dem alten System nicht.

----------

## manuels

Bin mir nicht sicher, aber ich glaube, dass Portage mittels ARCH die architekturspezifischen Aktionen, die in den ebuilds beschrieben sind, aktiviert.

Daher denke ich, dass es wichtig ist ARCH zu setzen und deine unterschiedlichen Package-Anzahlen hier durch resultieren.

 *Quote:*   

> wie finde ich das am besten heraus.

 

hätte jetzt an ein

```
emerge ... | sort > arch32

emerge ... | sort > arch64

diff arch64 arch32 
```

gedacht.

----------

## 3PO

Wenn ich ARCH="amd64" setze, dann kommt die die selbe Fehlermeldung wie oben.

----------

## 3PO

Nach dem ich nun folgendes in die "/etc/portage/package.use" eingetragen habe,

```
[...]

dev-util/cmake -qt4

x11-libs/qt-gui -cups

net-print/cups -php
```

sieht es nun so aus:

```
....

Total: 1478 packages (1456 new, 8 in new slots, 14 reinstalls), Size of downloads: 464,026 kB

Portage tree and overlays:

 [0] /usr/portage

 [1] /usr/local/portage

Would you like to merge these packages? [Yes/No]

```

Bin ja mal gespannt, wie oft ich "resumen" muss...  :Smile: Last edited by 3PO on Wed Jan 12, 2011 6:51 pm; edited 1 time in total

----------

## mv

 *3PO wrote:*   

> Wenn ich ARCH="amd64" setze, dann kommt die die selbe Fehlermeldung wie oben.

 

Sorry, ich meinte ACCEPT_KEYWORDS (nicht ARCH). Es ist OK, wenn es nicht gesetzt wird. ARCH sollte automatisch gesetzt werden: Ich hoffe, Du hast ein amd64-profile ausgewählt?!

Zur rekursiven Abhängigkeit: Das ist klar, weil cmake so ein Bloat-Mist ist; um cmake mit qt-Support bauen zu können, brauchst Du qt. qt selbst braucht aber cmake, um gebaut zu werden. Daher musst Du zunächst cmake ohne qt bauen (mit USE="-qt"), und sobald das erledigt ist, qt bauen, und kannst dann erst anschließend cmake mit qt-Support bauen.

----------

## firefly

 *mv wrote:*   

>  *3PO wrote:*   Wenn ich ARCH="amd64" setze, dann kommt die die selbe Fehlermeldung wie oben. 
> 
> Sorry, ich meinte ACCEPT_KEYWORDS (nicht ARCH). Es ist OK, wenn es nicht gesetzt wird. ARCH sollte automatisch gesetzt werden: Ich hoffe, Du hast ein amd64-profile ausgewählt?!
> 
> Zur rekursiven Abhängigkeit: Das ist klar, weil cmake so ein Bloat-Mist ist; um cmake mit qt-Support bauen zu können, brauchst Du qt. qt selbst braucht aber cmake, um gebaut zu werden. Daher musst Du zunächst cmake ohne qt bauen (mit USE="-qt"), und sobald das erledigt ist, qt bauen, und kannst dann erst anschließend cmake mit qt-Support bauen.

 

Das stimmt nicht  :Wink:  Qt wird nicht mit cmake gebaut, dass hat was eigenes und nennt sich qmake. laut ausgabe von Portage ist hier mysql das problem, denn anscheinend wird mysql 5.1.51 mit cmake gebaut.

----------

## mv

 *firefly wrote:*   

> Das stimmt nicht ;) Qt wird nicht mit cmake gebaut, dass hat was eigenes und nennt sich qmake.

 

Stimmt. Aber qt-webkit beispielsweise hängt von phonon ab, das wiederum cmake benötigt (falls man nicht auf qt-phonon ausweicht). Vermutlich gibt es noch etliche weitere indirekte Abhängigkeiten von cmake. Eine ist ja gefunden worden:

 *Quote:*   

> laut ausgabe von Portage ist hier mysql das problem, denn anscheinend wird mysql 5.1.51 mit cmake gebaut.

 

Aber es ist sehr wahrscheinlich, dass das nicht die einzige ist.

----------

## fuchur

 *3PO wrote:*   

> So, bin endlich mal dazu gekommen das zu testen, leider aber funktioniert das nicht.  
> 
> Ich habe folgendes vom alten auf den neuen PC kopiert
> 
> ```
> ...

 

Was dir fehlt ist die Datei

```
/var/lib/portage/world
```

vom alten System.

Portage < sys-apps/portage-2.2 schaut meines Wissens in diese Datei um zu überprüfen

was Installiert ist.

MfG

----------

## mv

 *fuchur wrote:*   

> Was dir fehlt ist die Datei
> 
> ```
> /var/lib/portage/world
> ```
> ...

 

Nein, er schrieb doch, dass er /var/lib/portage kopiert hat.

----------

## fuchur

Hi

 *mv wrote:*   

>  *fuchur wrote:*   Was dir fehlt ist die Datei
> 
> ```
> /var/lib/portage/world
> ```
> ...

 

Da hast du recht, aber meines wissen ist es so das die Datei /var/lib/portage/world bei

portage < 2.2 die einzige Datei ist wo emerge nachschaut was installiert ist. Es kann ja 

sein das es bei einer höheren portage Version anders ist, und war auch nur als Tip gedacht

um das noch einmal zu überprüfen.

MfG

----------

## 3PO

 *fuchur wrote:*   

> Was dir fehlt ist die Datei
> 
> ```
> /var/lib/portage/world
> ```
> ...

 

Das eigentlich nicht sein, da ich ich, wie oben geschrieben, das komplette Verzeichnis "var/lib/portage" übernommen habe.

BTW: Ich verwende Portage 2.2.x

----------

## 3PO

Gibt es eigenlich eine Möglichkeit, hier:

```
emerge -1av $(cat packages-slots.txt)
```

noch einen Parameter hinzuzufügen der folgendes macht?

--> "Installiere nur nicht installierte Pakete" (Also mache kein "remerge")

----------

## Finswimmer

 *3PO wrote:*   

> Gibt es eigenlich eine Möglichkeit, hier:
> 
> ```
> emerge -1av $(cat packages-slots.txt)
> ```
> ...

 

 *Quote:*   

> --noreplace (-n short option)
> 
>               Skip the packages specified on the command-line that have
> 
>               already been installed.  Without this option, any packages,
> ...

 

----------

## 3PO

THX @ Finswimmer,

"--noreplace" habe ich total übersehen in "man emerge".   :Embarassed: 

----------

## 3PO

Nach dem nun alle ca. 1700 Pakete wieder installiert sind und nur ca. 15 unwichtige zicken gemacht haben, möchte ich mich mal an dieser Stelle ein fettes Dankeschön an alle Helfer aussprechen!  :Smile: 

Wie kann ich denn den "Autostart", also alles was und "rc-update -s" gelistet ist, einfach übernehmen?

--> Ich verwende baselayout 2, bzw. openRC.

----------

## musv

 *3PO wrote:*   

> Wie kann ich denn den "Autostart", also alles was und "rc-update -s" gelistet ist, einfach übernehmen?

 

Die Start-Stop-Scripte sind in /etc/init.d, die Links auf die Scripte in den entsprechenden Unterordnern (=Runlevels) von /etc/init.d.

----------

