update an older i386 CURRENT system to amd64 CURRENT
Trond Endrestøl
Trond.Endrestol at fagskolen.gjovik.no
Thu Mar 16 14:23:55 UTC 2017
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. |
+-------------------------------+------------------------------------+
More information about the freebsd-current
mailing list