ports from portsnap wont work ...

Stefan Esser se at freebsd.org
Thu Jun 5 06:53:49 UTC 2014


Am 05.06.2014 02:11, schrieb Nenhum_de_Nos:
> 
> On Wed, June 4, 2014 03:46, Stefan Esser wrote:
>> Am 04.06.2014 07:22, schrieb Matthias Andree:
>>> Am 04.06.2014 04:44, schrieb Nenhum_de_Nos:
>>>> hail,
>>>>
>>>> two of my machines got this:
>>>
>>> [long list of substitution failures from the 'make' command]
>>>
>>> What operating systems runs on those machines?  I suspect it's a version
>>> that is no longer supported, see <http://www.freebsd.org/security/#sup>
>>>
>>> Chances are you need to upgrade the system to a supported version first.
>>
>> Or, if you cannot upgrade the system right now, install bmake (the make
>> program used in supported releases) in addition to fmake (the "old" make
>> used in no longer supported FreeBSD versions). You'll find bmake as a
>> package or you might still be able to build the devel/bmake port.
>>
>> You should keep the old make program around as "fmake" and can install
>> the new one as "make" for the ports system.
>>
>> This does not make your system supported, if it wasn't before, but you
>> could gain some time to prepare the upgrade to a supported system ...
> 
> no good for me :(

Hmmm, too bad, this used to work ... :(

> phoenix# ls -l *make*
> -r-xr-xr-x  1 root  wheel  423984 Jun  4 21:06 fmake
> -r-xr-xr-x  1 root  wheel  423984 Apr 25 22:06 make
> -r-xr-xr-x  1 root  wheel  215776 Apr 25 21:58 makeinfo
> -r-xr-xr-x  1 root  wheel   18584 Apr 25 22:06 makewhatis
> phoenix# rm make
> phoenix# ln -s /usr/local/bin/bmake make
> phoenix# cd -
> phoenix# make
> make: "/usr/ports/textproc/libmrss/Makefile" line 23: Could not find bsd.port.mk
> make: Fatal errors encountered -- cannot continue
> make: stopped in /usr/ports/textproc/libmrss
> 
> did I do it right ?

Yes, this should have worked. You still have the copy of the system's
make as fmake, and I guess that you'll see similar problems with that,
too.

Hmmm, I'm wondering, whether the bmake from ports does not use the
Makefile includes from /usr/share/mk by default?

You could try again with "make -I /usr/share/mk", just to see whether
make uses the bsd.port.mk that ought to be in that directory.


But there have been complex changes to the .mk files in that directory
and in /usr/ports/Mk, a few weeks ago, which aim to clean up the port
options handling.

And while you got the new files in /usr/ports/mk when you updated the
ports tree, you probably missed to corresponding changes to files in
/usr/share/mk ...

But I cannot easily tell this. You can grab bsd.port*.mk from a
supported release (e.g. 8.4) via svnweb and place these files in
/usr/share/mk. But I cannot guarantee, that this will work.


Warner Losh (imp at freebsd.org) made the changes to the .mk files, and
they are important on and useful on the path forward. And they were
performed in such a way, that all supported versions grok them. But
not using a supported version has always meant, that you are bound to
the last ports tree before support ended. Updating to a newer ports
tree may introduce new features, that have never been backported to
the unsupported release.


And in fact, feature updates are often held back and delayed because
of being incompatible (and hard to fix) in older releases - as was the
case with the change from fmake to bmake.

New releases are created for a reason: There are changes that can not
be backported into older releases without API/ABI changes or violation
of POLA. In the case of the ports system, such changes can only be
applied, when all incompatible releases have been declared EOL.


IIRC, you are on an unsupported version in the 8.x series. You should
be able to update kernel and world to 8.4 in place and on a running
system (unless it is under such high load throughout the day, that
you cannot compile on this system). You should follow the procedure
detailed in the handbook to upgrade, and of course have a backup in
case of unforeseen problems. Ports from any 8.x release will still
work without recompilation (within one release, all versions should
be upwards binary compatible, i.e. have a stale ABI).

If your system has enough RAM and CPU, you could even install a newer
release in a jail and test your ports, then copy over the kernel and
world from the jail to the base system (use "make installworld" with
an object directory that points into the compiled world in the jail
to install the already built world into the jail host without the
need for another buildworld/buildkernel).

If you are using a GENERIC kernel and an unmodified older 8.x version,
you could also use freebsd-update to go to a newer release (again,
after creating backups - on a ZFS system a snapshot might suffice if
you have an alternate boot media for the new release at hand, in case
you want to re-instantiate the snapshot as your working file-system).

Regards, STefan


More information about the freebsd-stable mailing list