Solved What is ctfmerge and why is it preventing me from building a kernel?

See initial thread: Thread unable-to-buildkernel-and-other-odd-behavior.54613. I don't mean to create duplicates, but this seems like it should be a separate topic.

The machine I'm using has an AMD Phenom II Quad Core with 16 GB of RAM and a 6 TB ZFS pool. FreeBSD 8.x-RELEASE was initially installed awhile ago, upgraded through binary updates to 9.x-RELEASE. I did a clean install with 10.0-RELEASE, using a fresh ZFS pool. 10.1-RELEASE was installed again through freebsd-update upgrade -r 10.1-RELEASE and I've been using that release for quite some time. I decided to upgrade to 10.2-RELEASE recently, using freebsd-update upgrade -r 10.2-RELEASE. It sort of worked (see above thread).

That's when things got weird. After installation, I upgraded my basejail to use the same 10.2-RELEASE. I went to rebuild all installed ports on both the main OS and each jail. Everything in the jails built correctly. Many problems were encountered in the main OS. Notably, service ntpd start would hang, with truss saying it was stuck on a call to vfork(). lang/python27 wouldn't build because it would get stuck on a check to see if threads were available. lang/python27 rebuilt fine in all of the jails, using the stock base.txz image downloaded from ezjail-admin(8).

I decided to grab 10-STABLE from SVN and build a world and a kernel. World built fine. Kernel always got stuck on ctfmerge. The CPU state remained in utmx.

My solution was to boot into 10.2-RELEASE live DVD, mount the ZFS pool, chroot into that pool, then make buildworld and make buildkernel. After a reboot, I was going to install the kernel and continue with a normal installation from source. I tried this on a VirtualBox VM and everything went smoothly.

However, on my actual machine ctfmerge still got stuck when I was using the live DVD. My assumption was that something went wrong with freebsd-update(8), causing issues with the kernel, which prevented me from building. I figured that if I used the live DVD's kernel, I could at least build the new kernel from source and install it after booting back into the OS.

What's going on? If it's a hardware failure, why would there be no problems in the jails? Can I use base.txz and extract it somehow, without destroying my existing ZFS pools? Is it safe to downgrade to 10.1-STABLE? Can I transfer the kernel I built on VirtualBox to my machine and install it?
 
Last edited by a moderator:
After finding the same issue in a mailing list, I realized this was caused by a potentially corrupt version of Clang. By using the live DVD and chrooting into my existing OS, I was probably using that same version of Clang.

Instead, I made a fresh jail (which I know had a good version of the basejail) and mounted /usr/src and /usr/obj with nullfs. This allowed me to buildworld and buildkernel using the version of Clang inside the jail. ctfmerge did not get stuck this time and I was able to do a full upgrade afterwards. Lesson learned...I don't like freebsd-update.
 
Back
Top