FreeBSD Handbook
Prev | Chapter 25 Updating and Upgrading FreeBSD | Next

# 25.8 Deleting obsolete files, directories and libraries

Based on notes provided by Anton Shterenlikht.

As a part of the FreeBSD development lifecycle, it happens from time to time that files and their contents become obsolete. This may be because their functionality is implemented elsewhere, the version number of the library has changed or it was removed from the system entirely. This includes old files, libraries and directories, which should be removed when updating the system. The benefit for the user is that the system is not cluttered with old files which take up unnecessary space on the storage (and backup) medium. Additionally, if the old library had a security or stability issue, you should update to the newer library to keep your system safe and prevent crashes caused by the old library implementation. The files, directories, and libraries that are considered obsolete are listed in `/usr/src/ObsoleteFiles.inc`. The following instructions will help you removing these obsolete files during the system upgrade process.

We assume you are following the steps outlined in Section 25.7.1. After the `make `installworld`` and the subsequent `mergemaster` commands have finished successfully, you should check for obsolete files and libraries as follows:

    # cd /usr/src
    # make check-old

If any obsolete files are found, they can be deleted using the following commands:

    # make delete-old

> Tip: See `/usr/src/Makefile` for more targets of interest.

A prompt is displayed before deleting each obsolete file. You can skip the prompt and let the system remove these files automatically by using the `BATCH_DELETE_OLD_FILES` make-variable as follows:

    # make -DBATCH_DELETE_OLD_FILES delete-old

You can also achieve the same goal by piping these commands through `yes` like this:

    # yes|make delete-old

> Warning: Deleting obsolete files will break applications that still depend on those obsolete files. This is especially true for old libraries. In most cases, you need to recompile the programs, ports, or libraries that used the old library before `make `delete-old-libs`` is executed.

Utilities for checking shared library dependencies are available from the Ports Collection in `sysutils/libchk` or `sysutils/bsdadminscripts`.

Obsolete shared libraries can conflict with newer libraries, causing messages like these:

    /usr/bin/ld: warning: libz.so.4, needed by /usr/local/lib/libtiff.so, may conflict with libz.so.5
    /usr/bin/ld: warning: librpcsvc.so.4, needed by /usr/local/lib/libXext.so, may conflict with librpcsvc.so.5

To solve these problems, determine which port installed the library:

    # pkg_info -W  /usr/local/lib/libtiff.so
    /usr/local/lib/libtiff.so was installed by package tiff-3.9.4
    # pkg_info -W /usr/local/lib/libXext.so
    /usr/local/lib/libXext.so was installed by package libXext-1.1.1,1

Then deinstall, rebuild and reinstall the port. The `ports-mgmt/portmaster` and `ports-mgmt/portupgrade` utilities can be used to automate this process. After you've made sure that all ports are rebuilt and do not use the old libraries anymore, you can delete them using the following command:

    # make delete-old-libs

Prev | Home | Next
Rebuilding world | Up | Tracking for Multiple Machines