Disabling components of packages

Haiku's package manager presents installed packages as a read-only filesystem, so unlike other systems, it is not possible to just delete or rename a problematic driver or library. However, individual packaged files can be prevented from being exposed at boot time.

In the Boot Options menu, there is a "Disable components" option available to accomplish this. However, this method will only let you disable components of the main (haiku) system package, and only until the next time you reboot.

Let's go through the few steps needed:

  1. Figure out which package contains the file that you want to disable, and whether the file is in a package located in the system or user file hierarchy. You can find the containing package name with "Get info" from Tracker's context menu on that file; look for SYS:PACKAGE in its "Attributes" tab.
  2. Next, create a text file named packages in /boot/system/settings, or in /boot/home/config/settings. (The first folder is used for disabling components in system packages, the second for user packages.)
  3. Inside the packages file, we put something like:
    Package package_name {
    	BlockedEntries {
    		path/to/blocked/entry
    		...
    	}
    }
    
    • package_name is the name of the package without version, for example haiku.
    • path/to/blocked/entry is the relative path to the installation location, e.g. add-ons/Translators/FooTranslator.

Any disabled entries will be ignored by packagefs and will no longer appear in the file system, until they are removed from the BlockedEntries list and the system rebooted again.

Example

To disable the intel_extreme driver and the xhci driver, which are both part of the haiku system package, the we create a /boot/system/settings/packages and give it the following content:

Package haiku  {
	BlockedEntries {
		add-ons/kernel/drivers/bin/intel_extreme
		add-ons/kernel/busses/usb/xhci
	}
}

We then save the file and reboot. Once Haiku starts again, the file will be ignored by packagefs when the package is mounted.