# 12.0-RELEASE: 'make buildworld' fails



## olafz (Dec 12, 2018)

I have installed a fresh copy of src.tgz of 12.0-RELEASE. As usual, I tried a 'make buildworld' on my 11.2-RELEASE-p6 system, but it fails now:

```
ranlib -D libc_nonshared.a
--- lib/libc__L ---
make[4]: "/usr/src/lib/libc/Makefile" line 187: amd64 libc requires linker ifunc support
*** [lib/libc__L] Error code 1
```
My /etc/src.conf:

```
WITH_CCACHE_BUILD=YES
WITHOUT_CROSS_COMPILER=YES
```
My /etc/make.conf:

```
KERNCONF=FB64
MODULES_OVERRIDE=accf_http accf_data tmpfs

OPTIONS_UNSET= NIS
OPTIONS_UNSET+= X11
OPTIONS_UNSET+= WAYLAND
OPTIONS_UNSET+= DOCS
OPTIONS_UNSET+= DEBUG
```
Nothing too special, I assume. Do you have an idea what's wrong here?


----------



## SirDice (Dec 12, 2018)

olafz said:


> I have installed a fresh copy of src.tgz of 12.0-RELEASE.


I would recommend using svn(1) or svnlite(1) instead, base/releng/12.0 will get you 12.0-RELEASE plus errata and security updates. There aren't any at the moment but I'm fairly certain they're going to happen some time in the future.


olafz said:


> on my 11.2-RELEASE-p6 system


As you're going from one release to another, why not use freebsd-update(8)?


If I recall correctly you'll have to remove the WITHOUT_CROSS_COMPILER for this change. I would also try a build without CCACHE.


----------



## oz42 (Dec 12, 2018)

Thank you!

I have tried to do the upgrade from source. freebsd-update() is quite slow when it touches every single file in /usr/src, so I have downloaded and extracted the source tarball.
Next, I will try to do a binary update and then rebuild all.


----------



## yuripv (Dec 12, 2018)

src.conf(5):

```
WITHOUT_CROSS_COMPILER
             Set to not build any cross compiler in the cross-tools stage of
             buildworld.  When compiling a different version of FreeBSD than
             what is installed on the system, provide an alternate compiler
             with XCC to ensure success.
```


----------



## olafz (Dec 13, 2018)

I am just wondering why I need a cross compiler for ARM or SPARC64 when I upgrade an AMD64 system.


----------



## zirias@ (Dec 13, 2018)

olafz said:


> I am just wondering why I need a cross compiler for ARM or SPARC64 when I upgrade an AMD64 system.


I don't think that means a cross compiler for a different hardware platform, just for a "different" OS. Reading further in the manpages, this option also skips any "bootstrapping" process when building compilers (which normally means building the compiler three times, first using the host's compiler, second the one built in the first step and last the one built in the second step, the results of the second and third build should be the same). The "cross" compiler will have the correct specs for building code for the new release.


----------



## ShelLuser (Dec 13, 2018)

oz42 said:


> freebsd-update() is quite slow when it touches every single file in /usr/src, so I have downloaded and extracted the source tarball.


Keep in mind that you can finetune what freebsd-update should and shouldn't include by editing /etc/freebsd-update.conf. I assume you already know but still wanted to mention this.

And another vote for using svnlite to grab your sourcetree instead. It's really easy: `# svnlite co https://svn.freebsd.org/base/releng/12.0 /usr/src`.

Also: did you make sure to clean out /usr/obj before building? That too could have been of some influence.


----------



## olafz (Dec 13, 2018)

Hm. After some problems I ran a `freebsd-update rollback`, now the system was 11.1-RELEASE. But anyway, it was still running.

I have deleted /etc/src.conf, updating from source now went fine... sort of. But when /usr/obj reached a size of 7.7 GB, the disk was full.

So upgrading to 12.0-RELEASE from source is no longer a good idea for small virtual servers. Not even for this one with a BIG disk (20 GB). 

So I tried upgrading "binary only" with 
	
	



```
Components world kernel
```
 in /etc/freebsd-update.conf. In a first step, to 11.2-RELEASE. Result:

```
The following file will be removed, as it no longer exists in
FreeBSD 11.2-RELEASE: /etc/defaults/rc.conf
Does this look reasonable (y/n)? y

The following file will be removed, as it no longer exists in
FreeBSD 11.2-RELEASE: /etc/devd.conf
Does this look reasonable (y/n)? y

The following file will be removed, as it no longer exists in
FreeBSD 11.2-RELEASE: /etc/devd/asus.conf
Does this look reasonable (y/n)? y

The following file will be removed, as it no longer exists in
FreeBSD 11.2-RELEASE: /etc/devfs.conf
Does this look reasonable (y/n)? y

The following file will be removed, as it no longer exists in
FreeBSD 11.2-RELEASE: /etc/dhclient.conf
Does this look reasonable (y/n)? y

The following file will be removed, as it no longer exists in
FreeBSD 11.2-RELEASE: /etc/disktab
Does this look reasonable (y/n)? y

The following file will be removed, as it no longer exists in
FreeBSD 11.2-RELEASE: /etc/fbtab
Does this look reasonable (y/n)? y

The following file will be removed, as it no longer exists in
FreeBSD 11.2-RELEASE: /etc/gettytab
Does this look reasonable (y/n)? y
```
If you ansrwer 'n', the tool just stops working.

To me, it seems that freebsd-update () has either a lot of bugs, or very little to no error handling. It should never destroy a system that is running happily.

Whatever, I cannot trust this tool any longer.

Is there another way that I can go?


----------



## SirDice (Dec 13, 2018)

Before doing a new upgrade attempt, clear out /var/db/freebsd-update/. I think you may have a collection of various upgrade attempts and that could potentially confuse the system.


----------



## olafz (Jan 16, 2019)

Finally I had to learn it the hard way.

Updating to 12.0-RELEASE from sources will never happen, my small VPSes often have 10 GB storage only, and `make buildworld` needs about 8 GB space in /var. So they will stay at 11.2-RELEASE.

I tried to do a binary only update (`Components world kernel`). Finally, it ended with a 12.0-RELEASE system with broken PAM setup. I assume it's a freebsd-update() bug: it only installs the PAM files that it finds on the target system and not just everything. The reason is that my system was built from sources with a 84 line long src.conf with many WITHOUT_ statements.


----------



## olli@ (Jan 16, 2019)

SirDice said:


> I would recommend using svn(1) or svnlite(1) instead, base/releng/12.0 will get you 12.0-RELEASE plus errata and security updates.


By the way, you can also use `svnup` (net/svnup). If you just need the source tree, but not the SVN meta data, this is more efficient than svn(1) or svnlite(1). Just type `svnup release` to get releng/12.0, or `svnup stable` to get stable/12. See /usr/local/etc/svnup.conf and the manual pages svnup(1) and svnup.conf(5).


----------



## SirDice (Jan 16, 2019)

Ah, yes. Forgot about that one. It's the SVN equivalent of the old 'csup' command (which I used quite frequently until FreeBSD switched to subversion).


----------

