Re: update an older i386 CURRENT system to amd64 CURRENT

From: Trond Endrestøl <Trond.Endrestol_at_fagskolen.gjovik.no>
Date: Thu, 16 Mar 2017 15:23:32 +0100 (CET)
On Thu, 16 Mar 2017 12:41+0100, Matthias Apitz wrote:

> 
> 
> Hello,
> 
> I have an older FreeBSD 9.0-CURRENT system which I want to update to
> 12-CURRENT:
> 
> # uname -a
> FreeBSD vm-9Current 9.0-CURRENT FreeBSD 9.0-CURRENT #2 r220692: Sun Apr 17 03:28:12 CEST 2011     guru_at_tinyCurrent:/usr/obj/usr/src/sys/GENERIC i386
> 
> To do so without compiling everything from scratch, I transferred
> /usr/src (r314251) and /usr/obj to this server, the compilation of
> /usr/obj was done on an amd64 server and the same procedure (transfer
> of /usr/src and /usr/obj) was also used to update my C720 netbook; the
> difference is here that the host which should be update is i386.
> 
> The 'make installkernel' did not work:
>  
> # pwd
> /usr/src
> # file ../obj/usr/src/sys/GENERIC/kernel
> ../obj/usr/src/sys/GENERIC/kernel: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked (uses shared libs), not stripped
> 
> # make installkernel
> 
> --------------------------------------------------------------
> >>> Building an up-to-date bmake(1)
> --------------------------------------------------------------
> sh /usr/src/tools/install.sh -s -o root -g wheel -m 555   make
> /usr/obj/usr/src/make.i386/bmake
> --------------------------------------------------------------
> >>> Installing kernel GENERIC
> --------------------------------------------------------------
> cd /usr/obj/usr/src/sys/GENERIC;  MAKEOBJDIRPREFIX=/usr/obj
> MACHINE_ARCH=i386  MACHINE=i386  CPUTYPE=
> GROFF_BIN_PATH=/usr/obj/usr/src/tmp/legacy/usr/bin
> GROFF_FONT_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/groff_font
> GROFF_TMAC_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/tmac CC="cc
> -isystem /usr/obj/usr/src/tmp/usr/include -L/usr/obj/usr/src/tmp/usr/lib
> -B/usr/obj/usr/src/tmp/usr/lib --sysroot=/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin" CXX="c++  -isystem
> /usr/obj/usr/src/tmp/usr/include -L/usr/obj/usr/src/tmp/usr/lib
> -B/usr/obj/usr/src/tmp/usr/lib --sysroot=/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin"  CPP="cpp -isystem
> /usr/obj/usr/src/tmp/usr/include -L/usr/obj/usr/src/tmp/usr/lib
> -B/usr/obj/usr/src/tmp/usr/lib --sysroot=/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin"  AS="as" AR="ar" LD="ld" LLVM_LINK=""
> NM=nm OBJCOPY="objcopy"  RANLIB=ranlib STRINGS=  SIZE="size"
> PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/usr/bin:/usr/obj/usr/src/tmp/legacy/bin:/usr/obj/usr/src/tmp/usr/sbin:/usr/obj/usr/src/tmp/usr/bin:/sbin:/bin:/usr/sbin:/usr/bin
> /usr/obj/usr/src/make.i386/bmake  KERNEL=kernel install
> cc: Exec format error
> bmake[1]: "/usr/src/share/mk/bsd.compiler.mk" line 145: Unable to
> determine compiler type for CC=cc -isystem
> /usr/obj/usr/src/tmp/usr/include -L/usr/obj/usr/src/tmp/usr/lib
> -B/usr/obj/usr/src/tmp/usr/lib --sysroot=/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin.  Consider setting COMPILER_TYPE.
> *** Error code 1
> 
> 
> Also the following did not work:
> 
> # make installkernel MACHINE_ARCH=amd64 MACHINE=amd64
> 
> --------------------------------------------------------------
> >>> Building an up-to-date bmake(1)
> --------------------------------------------------------------
> sh /usr/src/tools/install.sh -s -o root -g wheel -m 555   make
> /usr/obj/usr/src/make.amd64/bmake
> --------------------------------------------------------------
> >>> Installing kernel GENERIC
> --------------------------------------------------------------
> cd /usr/obj/usr/src/sys/GENERIC;  MAKEOBJDIRPREFIX=/usr/obj
> MACHINE_ARCH=amd64  MACHINE=amd64  CPUTYPE=
> GROFF_BIN_PATH=/usr/obj/usr/src/tmp/legacy/usr/bin
> GROFF_FONT_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/groff_font
> GROFF_TMAC_PATH=/usr/obj/usr/src/tmp/legacy/usr/share/tmac CC="cc
> -isystem /usr/obj/usr/src/tmp/usr/include -L/usr/obj/usr/src/tmp/usr/lib
> -B/usr/obj/usr/src/tmp/usr/lib --sysroot=/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin" CXX="c++  -isystem
> /usr/obj/usr/src/tmp/usr/include -L/usr/obj/usr/src/tmp/usr/lib
> -B/usr/obj/usr/src/tmp/usr/lib --sysroot=/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin"  CPP="cpp -isystem
> /usr/obj/usr/src/tmp/usr/include -L/usr/obj/usr/src/tmp/usr/lib
> -B/usr/obj/usr/src/tmp/usr/lib --sysroot=/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin"  AS="as" AR="ar" LD="ld" LLVM_LINK=""
> NM=nm OBJCOPY="objcopy"  RANLIB=ranlib STRINGS=  SIZE="size"
> PATH=/usr/obj/usr/src/tmp/legacy/usr/sbin:/usr/obj/usr/src/tmp/legacy/usr/bin:/usr/obj/usr/src/tmp/legacy/bin:/usr/obj/usr/src/tmp/usr/sbin:/usr/obj/usr/src/tmp/usr/bin:/sbin:/bin:/usr/sbin:/usr/bin
> /usr/obj/usr/src/make.i386/bmake  KERNEL=kernel install
> cc: Exec format error
> bmake[1]: "/usr/src/share/mk/bsd.compiler.mk" line 145: Unable to
> determine compiler type for CC=cc -isystem
> /usr/obj/usr/src/tmp/usr/include -L/usr/obj/usr/src/tmp/usr/lib
> -B/usr/obj/usr/src/tmp/usr/lib --sysroot=/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin.  Consider setting COMPILER_TYPE.
> *** Error code 1
> 
> 

> Is there a way to use this /usr/src and pre-compiled /usr/obj on an i386
> host for update? Or do I have to use a complete recompile or even
> reinstall, based on a 64-bit memstick system?

I have in the past successfully migrated i386 to amd64 by cheating a 
bit:

overwriting select parts of the base system with their amd64 
counterparts from a snapshot (CD or memorystick) while exempting a few 
vital directories, /boot (not when replacing the kernel), /etc, /root, 
and /var.

Since you're running the GENERIC kernel, all you need is the latest 
-current snapshot.

Here are my notes from when I was "researching (and perfecting?)" the 
methodology:

http://ximalas.info/2015/01/17/migrating-freebsd-from-i386-to-amd64/

YMMV, but this was less of a hassle than following 
https://wiki.freebsd.org/amd64/i386Migration.

Last Easter I transformed four systems from 9-stable i386 UFS to 
10-stable amd64 ZFS, using hardware I had selected for replacing the 
old hardware. The old systems were transferred to the new systems 
using tar and nc. That way the old systems kept humming while I 
recompiled base, ports, etc, on their replacements.

Here are three things I didn't do/tried before "going live" last year:

recursively copying /usr/local/lib to /usr/local/lib/compat/lib32,

creating /usr/local/libdata/ldconfig/lib32 containing the line 
"/usr/local/lib/compat/lib32", and

running ldconfig -R.

When all parts of the new systems was in amd64 shape, I removed 
/usr/local/lib/compat/lib32 and /usr/local/libdata/ldconfig/lib32.

-- 
+-------------------------------+------------------------------------+
| Vennlig hilsen,               | Best regards,                      |
| Trond Endrestøl,              | Trond Endrestøl,                   |
| IT-ansvarlig,                 | System administrator,              |
| Fagskolen Innlandet,          | Gjøvik Technical College, Norway,  |
| tlf. mob.   952 62 567,       | Cellular...: +47 952 62 567,       |
| sentralbord 61 14 54 00.      | Switchboard: +47 61 14 54 00.      |
+-------------------------------+------------------------------------+
Received on Thu Mar 16 2017 - 13:23:55 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:10 UTC