Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Mar 2017 15:23:32 +0100 (CET)
From:      =?ISO-8859-1?Q?Trond_Endrest=F8l?= <Trond.Endrestol@fagskolen.gjovik.no>
To:        Matthias Apitz <guru@unixarea.de>
Cc:        freebsd-current@freebsd.org
Subject:   Re: update an older i386 CURRENT system to amd64 CURRENT
Message-ID:  <alpine.BSF.2.20.1703161458130.533@mail.fig.ol.no>
In-Reply-To: <20170316114126.GA4724@c720-r314251>
References:  <20170316114126.GA4724@c720-r314251>

next in thread | previous in thread | raw e-mail | index | archive | help
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@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.      |
+-------------------------------+------------------------------------+
From owner-freebsd-current@freebsd.org  Thu Mar 16 14:25:26 2017
Return-Path: <owner-freebsd-current@freebsd.org>
Delivered-To: freebsd-current@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 12F43D0F374
 for <freebsd-current@mailman.ysv.freebsd.org>;
 Thu, 16 Mar 2017 14:25:26 +0000 (UTC)
 (envelope-from allanjude@freebsd.org)
Received: from mx1.scaleengine.net (mx1.scaleengine.net [209.51.186.6])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id E00281BFD
 for <freebsd-current@freebsd.org>; Thu, 16 Mar 2017 14:25:25 +0000 (UTC)
 (envelope-from allanjude@freebsd.org)
Received: from [10.1.1.2] (unknown [10.1.1.2])
 (Authenticated sender: allanjude.freebsd@scaleengine.com)
 by mx1.scaleengine.net (Postfix) with ESMTPSA id 7974813610
 for <freebsd-current@freebsd.org>; Thu, 16 Mar 2017 14:25:17 +0000 (UTC)
Subject: Re: update an older i386 CURRENT system to amd64 CURRENT
To: freebsd-current@freebsd.org
References: <20170316114126.GA4724@c720-r314251>
From: Allan Jude <allanjude@freebsd.org>
Message-ID: <f1d5bbd7-6a3c-76f9-b597-4414590a0f78@freebsd.org>
Date: Thu, 16 Mar 2017 10:25:10 -0400
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101
 Thunderbird/45.7.1
MIME-Version: 1.0
In-Reply-To: <20170316114126.GA4724@c720-r314251>
Content-Type: multipart/signed; micalg=pgp-sha1;
 protocol="application/pgp-signature";
 boundary="FqfIBlfq5GnG1vhCDDs0ImO11Xuf1bpi7"
X-BeenThere: freebsd-current@freebsd.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Discussions about the use of FreeBSD-current
 <freebsd-current.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-current>, 
 <mailto:freebsd-current-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-current/>;
List-Post: <mailto:freebsd-current@freebsd.org>
List-Help: <mailto:freebsd-current-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-current>, 
 <mailto:freebsd-current-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Thu, 16 Mar 2017 14:25:26 -0000

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--FqfIBlfq5GnG1vhCDDs0ImO11Xuf1bpi7
Content-Type: multipart/mixed; boundary="tlEtkw8j8lSjxwC76Ixw4NjKAKHlJUiol";
 protected-headers="v1"
From: Allan Jude <allanjude@freebsd.org>
To: freebsd-current@freebsd.org
Message-ID: <f1d5bbd7-6a3c-76f9-b597-4414590a0f78@freebsd.org>
Subject: Re: update an older i386 CURRENT system to amd64 CURRENT
References: <20170316114126.GA4724@c720-r314251>
In-Reply-To: <20170316114126.GA4724@c720-r314251>

--tlEtkw8j8lSjxwC76Ixw4NjKAKHlJUiol
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

On 2017-03-16 07:41, Matthias Apitz wrote:
>=20
>=20
> Hello,
>=20
> I have an older FreeBSD 9.0-CURRENT system which I want to update to
> 12-CURRENT:
>=20
> # uname -a
> FreeBSD vm-9Current 9.0-CURRENT FreeBSD 9.0-CURRENT #2 r220692: Sun Apr=
 17 03:28:12 CEST 2011     guru@tinyCurrent:/usr/obj/usr/src/sys/GENERIC =
i386
>=20
> 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.
>=20
> The 'make installkernel' did not work:
> =20
> # pwd
> /usr/src
> # file ../obj/usr/src/sys/GENERIC/kernel
> ../obj/usr/src/sys/GENERIC/kernel: ELF 64-bit LSB executable, x86-64, v=
ersion 1 (FreeBSD), dynamically linked (uses shared libs), not stripped
>=20
> # make installkernel
>=20
> --------------------------------------------------------------
>>>> 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=3D/usr/obj
> MACHINE_ARCH=3Di386  MACHINE=3Di386  CPUTYPE=3D
> GROFF_BIN_PATH=3D/usr/obj/usr/src/tmp/legacy/usr/bin
> GROFF_FONT_PATH=3D/usr/obj/usr/src/tmp/legacy/usr/share/groff_font
> GROFF_TMAC_PATH=3D/usr/obj/usr/src/tmp/legacy/usr/share/tmac CC=3D"cc
> -isystem /usr/obj/usr/src/tmp/usr/include -L/usr/obj/usr/src/tmp/usr/li=
b
> -B/usr/obj/usr/src/tmp/usr/lib --sysroot=3D/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin" CXX=3D"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=3D/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin"  CPP=3D"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=3D/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin"  AS=3D"as" AR=3D"ar" LD=3D"ld" LLVM_LIN=
K=3D""
> NM=3Dnm OBJCOPY=3D"objcopy"  RANLIB=3Dranlib STRINGS=3D  SIZE=3D"size"
> PATH=3D/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:/u=
sr/obj/usr/src/tmp/usr/bin:/sbin:/bin:/usr/sbin:/usr/bin
> /usr/obj/usr/src/make.i386/bmake  KERNEL=3Dkernel install
> cc: Exec format error
> bmake[1]: "/usr/src/share/mk/bsd.compiler.mk" line 145: Unable to
> determine compiler type for CC=3Dcc -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=3D/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin.  Consider setting COMPILER_TYPE.
> *** Error code 1
>=20
>=20
> Also the following did not work:
>=20
> # make installkernel MACHINE_ARCH=3Damd64 MACHINE=3Damd64
>=20
> --------------------------------------------------------------
>>>> 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=3D/usr/obj
> MACHINE_ARCH=3Damd64  MACHINE=3Damd64  CPUTYPE=3D
> GROFF_BIN_PATH=3D/usr/obj/usr/src/tmp/legacy/usr/bin
> GROFF_FONT_PATH=3D/usr/obj/usr/src/tmp/legacy/usr/share/groff_font
> GROFF_TMAC_PATH=3D/usr/obj/usr/src/tmp/legacy/usr/share/tmac CC=3D"cc
> -isystem /usr/obj/usr/src/tmp/usr/include -L/usr/obj/usr/src/tmp/usr/li=
b
> -B/usr/obj/usr/src/tmp/usr/lib --sysroot=3D/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin" CXX=3D"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=3D/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin"  CPP=3D"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=3D/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin"  AS=3D"as" AR=3D"ar" LD=3D"ld" LLVM_LIN=
K=3D""
> NM=3Dnm OBJCOPY=3D"objcopy"  RANLIB=3Dranlib STRINGS=3D  SIZE=3D"size"
> PATH=3D/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:/u=
sr/obj/usr/src/tmp/usr/bin:/sbin:/bin:/usr/sbin:/usr/bin
> /usr/obj/usr/src/make.i386/bmake  KERNEL=3Dkernel install
> cc: Exec format error
> bmake[1]: "/usr/src/share/mk/bsd.compiler.mk" line 145: Unable to
> determine compiler type for CC=3Dcc -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=3D/usr/obj/usr/src/tmp
> -B/usr/obj/usr/src/tmp/usr/bin.  Consider setting COMPILER_TYPE.
> *** Error code 1
>=20
>=20
> Is there a way to use this /usr/src and pre-compiled /usr/obj on an i38=
6
> host for update? Or do I have to use a complete recompile or even
> reinstall, based on a 64-bit memstick system?
>=20
> Thanks
>=20
> 	matthias
>=20
>=20

The problem is that the build system has built a cross compiler in
/usr/obj that it uses to do the building etc, and it is 64bit. Your
32bit OS cannot run it (gives Exec format error).

You could try (untested, might eat your lunch, and kick your dog)
On the AMD64 host:

mkdir /tmp/amd64
make installkernel DESTDIR=3D/tmp/amd64

Then manually copy that kernel & modules into /boot/kernel on the i386
system, and reboot into it.

Then you'll have a 64bit kernel, and your old i386 world.

Then you should be able to do the make installkernel / installworld from
the /usr/src and /usr/obj you transferred

--=20
Allan Jude


--tlEtkw8j8lSjxwC76Ixw4NjKAKHlJUiol--

--FqfIBlfq5GnG1vhCDDs0ImO11Xuf1bpi7
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (MingW32)

iQIcBAEBAgAGBQJYyqBMAAoJEBmVNT4SmAt+DgoQALpOopsrWD/eq7LKe9TH4zb3
LL/pUC5CDDspXzv8MkvMyi7xV9t8utcDhpwOA5n7NntSfNI7nY+4oVQcPRvKZqHh
v2j0Ox/SLBz/f0v2GExMOUIDZnVaFFUAWmrImbl75vbipwIs3TH8Yzgci8COvnE+
6DdfdPBHccSfw44u3YZn0f5o8qhDB+Obnu0qXXEuisEOsf3XYFeu6au+LXu+Mn7K
tD9hbx3OhAAb0P63OKNAD9mWMRHKN4kpwgPoRTbwcuCMrYWk5XgQbrrz5J90cOL4
yPGOm6vamdcnhRBY662oDj9tbxi1eQjeBngupU4AhDwHDZhajr1b2CMeFI4q9+hv
SDhVwhS13h3llkRP1r49Eb+WSi+TQfVKsDajaoZA6v7He89mUUL1KPqDLyEatTfR
Uc0tUdi89qczfIyi7fLolHht5C0LtwN/rahozbwDAGQqaXvjjV5s6+zPHl4/uLR1
66iqVgZRQdzh8DhYuxN6NuerkO2UDsX+M+X/hxc4WSXZm4yUqWYlQl31xQhYXAhU
X0RuyG3DZFHsUdMN/WPu0flFNQ9Pdno8+mKmHGVALPVddAHUBM49V3MHCZpqfuiR
+VIGHqMQ+prXyZaPBa+Nt5JJXgNQHDz4hs/CSFC78BgGoMfWU9CRLzW96KdGPabm
cJNflhGi75LjOfoDle97
=p48b
-----END PGP SIGNATURE-----

--FqfIBlfq5GnG1vhCDDs0ImO11Xuf1bpi7--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.2.20.1703161458130.533>