AW: FreeBSD 5.3; howto migrate from i386 to amd64 mode

Meyendriesch, Burkard Burkard.Meyendriesch at t-systems.com
Thu Dec 16 00:42:05 PST 2004


On Wednesday 15 December 2004 18:07, Peter Wemm wrote: 
>
>On Wednesday 15 December 2004 12:20 am, Meyendriesch, Burkard wrote:
>> ...
>> Can someone please tell me the correct procedure to get my system
>> work in amd64 mode without complete re-installation.
>> ...
> 
> There are ways, but it is painful.  You do not want to do 
> what I'm going 
> to post below..  Really. :-)
> 
> 1) buildworld/buildkernel
> 2) turn off swap  (either swapoff or reboot with no swap)
> 3) newfs /dev/ad0s1b (or wherever)
> 4) mount /dev/ad0s1b /mnt
> 5) cd /usr/src; make installworld DESTDIR=/mnt
> 6) cd /usr/src/etc;  make distribution DESTDIR=/mnt
> 7) cp /etc/fstab /mnt/etc/fstab
> 8) copy your 64 bit kernel to /boot/kernel.amd64 or wherever you like
> 9) reboot
> 10) break into loader prompt
> 11) load /boot/kernel.amd64
> 12) set vfs.root.mountfrom="ufs:/dev/ad0s1b"
> 13) boot -s
> 14) now you're in single user on a small mini-install in your swap
> 15) mount your original file systems under /mnt.  all of 
> them.  you'll 
> have to do this part by hand.  read the /etc/fstab for the list.
> 16) up till this point, you are not committed.  #17 is the 
> point of no 
> return
> 17) you will have to mess with symlinks to make this work. 
> but what you 
> want is:
>   cd /usr/src; make installworld DESTDIR=/mnt
>   cd /usr/src; make installkernel DESTDIR=/mnt
> you might need to use 'make -k' to get this to run through completely.
> The problem is that you built with srcdir=/usr/src and 
> objdir=/usr/obj.  
> So the obj files were in /usr/obj/usr/src/... and now they're 
> in /mnt/usr/obj/usr/src.  Since the installworld is running 
> from /mnt/usr/src, it will expect to find its obj files 
> in /usr/obj/mnt/usr/src.  You can try a mkdir -p /usr/obj/mnt/usr and 
> then symlink from /usr/obj/mnt/usr/src -> /mnt/usr/obj/usr/src.  
> Experimentation will be needed.
> 18) reboot
> 19) make sure you're in the 64 bit kernel and boot.  Cross 
> fingers and 
> everything else that can be crossed.
> 20) just to be safe, do another installworld while in 64 bit mode in 
> case something got skipped due to 'make -k' mode.
> 
> Warning: I probably forgot some critical points.  I did this sort of 
> thing a few times about 6-12 months ago and my instructions above are 
> entirely from memory.  If you try it, you will need to be 
> able to work 
> your way out of the mess if you get stuck.
> 
> If you try it, you'd better have the reinstall CD handy.  You might 
> still need it.  You can hose yourself.
> 
> If anybody would like to try a 32->64 transition on a fresh 
> i386 install 
> and take proper notes for a howto or a walkthrough, that might be a 
> good thing.
> 
> Since you're presumably running on kernel.old right now, make 
> sure you 
> save it somewhere safe that you can get to.
> 
> The reason why it hangs are for many reasons.
> 1) our syscall translation is relatively primitive.  It works pretty 
> well for 32 bit application level programs, but not for system 
> programs.  eg: mount, init, etc.  sysctl is broken for 32 bit 
> binaries 
> because their idea of a 'long' doesn't match the kernel.  The mount 
> interface has got binary blobs of data being passed around that we do 
> not translate.
> 2) Right now, 32 bit binaries use the i386_userldt() facility 
> in their 
> early startup, which the amd64 kernel does not implement.  We have to 
> use a custom 32-bit build of ld-elf.so.1 and libc.so.6 that 
> implements 
> the thread-local-storage features via mechanisms that are available.  
> So what is most likely happening is that /sbin/init is hanging or 
> locking up, and as a result you see nothing.
> 3) the 32 bit syscall layer isn't bug free.  I've run into some apps 
> that should work but don't.  Obviously things are not right yet.
> 
Peter,

thanks a lot for your detailed instructions! I'll try thi procedure
in my holydays after Christmas. Afterwards I'll give you a feedback.

Burkard


More information about the freebsd-amd64 mailing list