Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-doc
Path: blob/main/documentation/content/en/books/handbook/cutting-edge/_index.po
18099 views
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2026-02-22 15:58+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. type: YAML Front Matter: description
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1
#, no-wrap
msgid "Information about how to keep a FreeBSD system up-to-date with freebsd-update or Git, how to rebuild and reinstall the entire base system, etc"
msgstr ""

#. type: YAML Front Matter: part
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1
#, no-wrap
msgid "Part III. System Administration"
msgstr ""

#. type: YAML Front Matter: title
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1
#, no-wrap
msgid "Chapter 26. Updating and Upgrading FreeBSD"
msgstr ""

#. type: Title =
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:15
#, no-wrap
msgid "Updating and Upgrading FreeBSD"
msgstr ""

#. type: Title ==
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:53
#, no-wrap
msgid "Synopsis"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:60
msgid ""
"FreeBSD is under constant development between releases.  Some people prefer "
"to use the officially released versions, while others prefer to keep in sync "
"with the latest developments.  However, even official releases are often "
"updated with security and other critical fixes.  Regardless of the version "
"used, FreeBSD provides all the necessary tools to keep the system updated, "
"and allows for easy upgrades between versions.  This chapter describes how "
"to track the development system and the basic tools for keeping a FreeBSD "
"system up-to-date."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:62
msgid "Read this chapter to learn:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:64
msgid "How to keep a FreeBSD system up-to-date with freebsd-update or Git."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:65
msgid ""
"How to compare the state of an installed system against a known pristine "
"copy."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:66
msgid ""
"How to keep the installed documentation up-to-date with Git or documentation "
"ports."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:67
msgid ""
"The difference between the two development branches: FreeBSD-STABLE and "
"FreeBSD-CURRENT."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:68
msgid "How to rebuild and reinstall the entire base system."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:70
msgid "Before reading this chapter:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:72
msgid ""
"Properly set up the network connection (crossref:advanced-"
"networking[advanced-networking,Advanced Networking])."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:73
msgid ""
"Know how to install additional third-party software "
"(crossref:ports[ports,Installing Applications: Packages and Ports])."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:78
msgid ""
"Throughout this chapter, `git` is used to obtain and update FreeBSD "
"sources.  Optionally, the package:devel/git[] port or package may be used."
msgstr ""

#. type: Title ==
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:81
#, no-wrap
msgid "FreeBSD Update"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:85
msgid ""
"Applying security patches in a timely manner and upgrading to a newer "
"release of an operating system are important aspects of ongoing system "
"administration.  FreeBSD includes a utility called `freebsd-update` which "
"can be used to perform both these tasks."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:89
msgid ""
"This utility supports binary security and errata updates to FreeBSD, without "
"the need to manually compile and install the patch or a new kernel.  Binary "
"updates are available for all architectures and releases currently supported "
"by the security team.  The list of supported releases and their estimated "
"end-of-life dates are listed at https://www.FreeBSD.org/security/[https://"
"www.FreeBSD.org/security/]."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:93
msgid ""
"This utility also supports operating system upgrades to minor point releases "
"as well as upgrades to another release branch.  Before upgrading to a new "
"release, review its release announcement as it contains important "
"information pertinent to the release.  Release announcements are available "
"from https://www.FreeBSD.org/releases/[https://www.FreeBSD.org/releases/]."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:97
msgid ""
"If a man:crontab[5] utilizing the features of man:freebsd-update[8] exists, "
"it must be disabled before upgrading the operating system."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:100
msgid ""
"This section describes the configuration file used by `freebsd-update`, "
"demonstrates how to apply a security patch and how to upgrade to a minor or "
"major operating system release, and discusses some of the considerations "
"when upgrading the operating system."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:102
#, no-wrap
msgid "The Configuration File"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:107
msgid ""
"The default configuration file for `freebsd-update` works as-is.  Some users "
"may wish to tweak the default configuration in [.filename]#/etc/freebsd-"
"update.conf#, allowing better control of the process.  The comments in this "
"file explain the available options, but the following may require a bit more "
"explanation:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:112
#, no-wrap
msgid ""
"# Components of the base system which should be kept updated.\n"
"Components world kernel\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:119
msgid ""
"This parameter controls which parts of FreeBSD will be kept up-to-date.  The "
"default is to update the entire base system and the kernel.  Individual "
"components can instead be specified, such as `src/base` or `src/sys`.  "
"However, the best option is to leave this at the default as changing it to "
"include specific items requires every needed item to be listed.  Over time, "
"this could have disastrous consequences as source code and binaries may "
"become out of sync."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:125
#, no-wrap
msgid ""
"# Paths which start with anything matching an entry in an IgnorePaths\n"
"# statement will be ignored.\n"
"IgnorePaths /boot/kernel/linker.hints\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:129
msgid ""
"To leave specified directories, such as [.filename]#/bin# or [.filename]#/"
"sbin#, untouched during the update process, add their paths to this "
"statement.  This option may be used to prevent `freebsd-update` from "
"overwriting local modifications."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:136
#, no-wrap
msgid ""
"# Paths which start with anything matching an entry in an UpdateIfUnmodified\n"
"# statement will only be updated if the contents of the file have not been\n"
"# modified by the user (unless changes are merged; see below).\n"
"UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:141
msgid ""
"This option will only update unmodified configuration files in the specified "
"directories.  Any changes made by the user will prevent the automatic "
"updating of these files.  There is another option, `KeepModifiedMetadata`, "
"which will instruct `freebsd-update` to save the changes during the merge."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:147
#, no-wrap
msgid ""
"# When upgrading to a new FreeBSD release, files which match MergeChanges\n"
"# will have any local changes merged into the version from the new release.\n"
"MergeChanges /etc/ /var/named/etc/ /boot/device.hints\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:153
msgid ""
"List of directories with configuration files that `freebsd-update` should "
"attempt to merge.  The file merge process is a series of man:diff[1] "
"patches.  Merges are either accepted, open an editor, or cause `freebsd-"
"update` to abort.  When in doubt, backup [.filename]#/etc# and just accept "
"the merges."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:159
#, no-wrap
msgid ""
"# Directory in which to store downloaded updates and temporary\n"
"# files used by FreeBSD Update.\n"
"# WorkDir /var/db/freebsd-update\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:163
msgid ""
"This directory is where all patches and temporary files are placed.  In "
"cases where the user is doing a version upgrade, this location should have "
"at least a gigabyte of disk space available."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:171
#, no-wrap
msgid ""
"# When upgrading between releases, should the list of Components be\n"
"# read strictly (StrictComponents yes) or merely as a list of components\n"
"# which *might* be installed of which FreeBSD Update should figure out\n"
"# which actually are installed and upgrade those (StrictComponents no)?\n"
"# StrictComponents no\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:175
msgid ""
"When this option is set to `yes`, `freebsd-update` will assume that the "
"`Components` list is complete and will not attempt to make changes outside "
"of the list.  Effectively, `freebsd-update` will attempt to update every "
"file which belongs to the `Components` list."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:177
msgid "Refer to man:freebsd-update.conf[5] for more details."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:179
#, no-wrap
msgid "Applying Security Patches"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:183
msgid ""
"The process of applying FreeBSD security patches has been simplified, "
"allowing an administrator to keep a system fully patched using `freebsd-"
"update`.  More information about FreeBSD security advisories can be found in "
"crossref:security[security-advisories,\"FreeBSD Security Advisories\"]."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:187
msgid ""
"FreeBSD security patches may be downloaded and installed using the following "
"commands.  The first command will determine if any outstanding patches are "
"available, and if so, will list the files that will be modified if the "
"patches are applied.  The second command will apply the patches."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:192
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:290
#, no-wrap
msgid ""
"# freebsd-update fetch\n"
"# freebsd-update install\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:196
msgid ""
"If the update applies any kernel patches, the system will need a reboot in "
"order to boot into the patched kernel.  If the patch was applied to any "
"running binaries, the affected applications should be restarted so that the "
"patched version of the binary is used."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:202
msgid ""
"Usually, the user needs to be prepared to reboot the system.  To know if the "
"system requires a reboot due to a kernel update, execute the commands "
"`freebsd-version -k` and `uname -r`.  Reboot the system if the outputs "
"differ."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:205
msgid ""
"The system can be configured to automatically check for updates once every "
"day by adding this entry to [.filename]#/etc/crontab#:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:209
#, no-wrap
msgid "@daily                                  root    freebsd-update cron\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:213
msgid ""
"If patches exist, they will automatically be downloaded but will not be "
"applied.  The `root` user will be sent an email so that the patches may be "
"reviewed and manually installed with `freebsd-update install`."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:215
msgid ""
"If anything goes wrong, `freebsd-update` has the ability to roll back the "
"last set of changes with the following command:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:220
#, no-wrap
msgid ""
"# freebsd-update rollback\n"
"Uninstalling updates... done.\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:223
msgid ""
"Again, the system should be restarted if the kernel or any kernel modules "
"were modified and any affected binaries should be restarted."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:228
msgid ""
"Only the [.filename]#GENERIC# kernel can be automatically updated by "
"`freebsd-update`.  If a custom kernel is installed, it will have to be "
"rebuilt and reinstalled after `freebsd-update` finishes installing the "
"updates.  The default kernel name is _GENERIC_.  The man:uname[1] command "
"may be used to verify its installation."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:234
msgid ""
"Always keep a copy of the [.filename]#GENERIC# kernel in [.filename]#/boot/"
"GENERIC#.  It will be helpful in diagnosing a variety of problems and in "
"performing version upgrades.  Refer to crossref:cutting-edge[freebsd-update-"
"custom-kernel-9x, Custom Kernels with FreeBSD 9.X and Later] for "
"instructions on how to get a copy of the [.filename]#GENERIC# kernel."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:239
msgid ""
"Unless the default configuration in [.filename]#/etc/freebsd-update.conf# "
"has been changed, `freebsd-update` will install the updated kernel sources "
"along with the rest of the updates.  Rebuilding and reinstalling a new "
"custom kernel can then be performed in the usual way."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:246
msgid ""
"The updates distributed by `freebsd-update` do not always involve the "
"kernel.  It is not necessary to rebuild a custom kernel if the kernel "
"sources have not been modified by `freebsd-update install`.  However, "
"`freebsd-update` will always update [.filename]#/usr/src/sys/conf/"
"newvers.sh#.  The current patch level, as indicated by the `-p` number "
"reported by `uname -r`, is obtained from this file.  Rebuilding a custom "
"kernel, even if nothing else changed, allows `uname` to accurately report "
"the current patch level of the system.  This is particularly helpful when "
"maintaining multiple systems, as it allows for a quick assessment of the "
"updates installed in each one."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:248
#, no-wrap
msgid "Performing Minor and Major Version Upgrades"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:251
msgid ""
"Upgrades from one minor version of FreeBSD to another are called _minor "
"version_ upgrades. An example:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:253
msgid "FreeBSD 13.1 to 13.2."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:255
msgid "_Major version_ upgrades increase the major version number. An example:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:257
msgid "FreeBSD 13.2 to 14.0."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:259
msgid ""
"Both types of upgrade can be performed by providing `freebsd-update` with a "
"release version target."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:265
msgid ""
"After each new `RELEASE`, FreeBSD package build servers will, for a limited "
"period, *not* use the newer version of the operating system.  This provides "
"continuity for the many users who do not upgrade immediately after a release "
"announcement.  For example:"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:267
msgid ""
"packages for users of 13.1 and 13.2 will be built on a server running 13.1, "
"until 13.1 reaches end of life"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:269
msgid "and, critically:"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:271
msgid "a kernel module that is built on 13.1 might *not* be suitable for 13.2."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:273
msgid ""
"So, with any minor or major OS upgrade, if the package requirements include "
"any kernel module:"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:275
#, no-wrap
msgid "*be prepared to build the module from source*.\n"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:282
msgid ""
"If the system is running a custom kernel, make sure that a copy of the "
"[.filename]#GENERIC# kernel exists in [.filename]#/boot/GENERIC# before "
"starting the upgrade.  Refer to crossref:cutting-edge[freebsd-update-custom-"
"kernel-9x, Custom Kernels with FreeBSD 9.X and Later] for instructions on "
"how to get a copy of the [.filename]#GENERIC# kernel."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:285
msgid ""
"Before upgrading to a new version, ensure the existing FreeBSD installation "
"is up to date with respect to security and errata patches:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:293
msgid ""
"The following command, when run on a FreeBSD 13.1 system, will upgrade it to "
"FreeBSD 13.2:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:297
#, no-wrap
msgid "# freebsd-update -r 13.2-RELEASE upgrade\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:302
msgid ""
"After the command has been received, `freebsd-update` will evaluate the "
"configuration file and current system in an attempt to gather the "
"information necessary to perform the upgrade.  A screen listing will display "
"which components have and have not been detected.  For example:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:309
#, no-wrap
msgid ""
"Looking up update.FreeBSD.org mirrors... 1 mirrors found.\n"
"Fetching metadata signature for 13.1-RELEASE from update1.FreeBSD.org... done.\n"
"Fetching metadata index... done.\n"
"Inspecting system... done.\n"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:315
#, no-wrap
msgid ""
"The following components of FreeBSD seem to be installed:\n"
"kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games\n"
"src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue\n"
"src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin\n"
"world/base world/info world/lib32 world/manpages\n"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:319
#, no-wrap
msgid ""
"The following components of FreeBSD do not seem to be installed:\n"
"kernel/generic world/catpages world/dict world/doc world/games\n"
"world/proflibs\n"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:321
#, no-wrap
msgid "Does this look reasonable (y/n)? y\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:325
msgid ""
"At this point, `freebsd-update` will attempt to download all files required "
"for the upgrade.  In some cases, the user may be prompted with questions "
"regarding what to install or how to proceed."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:327
msgid ""
"When using a custom kernel, the above step will produce a warning similar to "
"the following:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:334
#, no-wrap
msgid ""
"WARNING: This system is running a \"MYKERNEL\" kernel, which is not a\n"
"kernel configuration distributed as part of FreeBSD 13.1-RELEASE.\n"
"This kernel will not be updated: you MUST update the kernel manually\n"
"before running \"/usr/sbin/freebsd-update install\"\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:338
msgid ""
"This warning may be safely ignored at this point.  The updated "
"[.filename]#GENERIC# kernel will be used as an intermediate step in the "
"upgrade process."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:347
msgid ""
"Once all the patches have been downloaded to the local system, they will be "
"applied.  This process may take a while, depending on the speed and workload "
"of the machine.  Configuration files will then be merged.  The merging "
"process requires some user intervention as a file may be merged or an editor "
"may appear on screen for a manual merge.  The results of every successful "
"merge will be shown to the user as the process continues.  A failed or "
"ignored merge will cause the process to abort.  Users may wish to make a "
"backup of [.filename]#/etc# and manually merge important files, such as "
"[.filename]#master.passwd# or [.filename]#group# at a later time."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:354
msgid ""
"The system is not being altered yet as all patching and merging is happening "
"in another directory.  Once all patches have been applied successfully, all "
"configuration files have been merged and it seems the process will go "
"smoothly, the changes can be committed to disk by the user using the "
"following command:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:358
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:394
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:471
#, no-wrap
msgid "# freebsd-update install\n"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:365
msgid ""
"The kernel and kernel modules will be patched first.  If the system is "
"running with a custom kernel, use man:nextboot[8] to set the kernel for the "
"next boot to the updated [.filename]#/boot/GENERIC#:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:369
#, no-wrap
msgid "# nextboot -k GENERIC\n"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:378
msgid ""
"Before rebooting with the [.filename]#GENERIC# kernel, make sure it contains "
"all the drivers required for the system to boot properly and connect to the "
"network, if the machine being updated is accessed remotely.  In particular, "
"if the running custom kernel contains built-in functionality usually "
"provided by kernel modules, make sure to temporarily load these modules into "
"the [.filename]#GENERIC# kernel using the [.filename]#/boot/loader.conf# "
"facility.  It is recommended to disable non-essential services as well as "
"any disk and network mounts until the upgrade process is complete."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:381
msgid "The machine should now be restarted with the updated kernel:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:385
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1088
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1235
#, no-wrap
msgid "# shutdown -r now\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:390
msgid ""
"Once the system has come back online, restart `freebsd-update` using the "
"following command.  Since the state of the process has been saved, `freebsd-"
"update` will not start from the beginning, but will instead move on to the "
"next phase and remove all old shared libraries and object files."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:399
msgid ""
"Depending upon whether any library version numbers were bumped, there may "
"only be two install phases instead of three."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:404
msgid ""
"The upgrade is now complete.  If this was a major version upgrade, reinstall "
"all ports and packages as described in crossref:cutting-edge[freebsdupdate-"
"portsrebuild, Upgrading Packages After a Major Version Upgrade]."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:406
#, no-wrap
msgid "Custom Kernels with FreeBSD 9.X and Later"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:411
msgid ""
"Before using `freebsd-update`, ensure that a copy of the "
"[.filename]#GENERIC# kernel exists in [.filename]#/boot/GENERIC#.  If a "
"custom kernel has only been built once, the kernel in [.filename]#/boot/"
"kernel.old# is the `GENERIC` kernel.  Simply rename this directory to "
"[.filename]#/boot/GENERIC#."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:415
msgid ""
"If a custom kernel has been built more than once or if it is unknown how "
"many times the custom kernel has been built, obtain a copy of the `GENERIC` "
"kernel that matches the current version of the operating system.  If "
"physical access to the system is available, a copy of the `GENERIC` kernel "
"can be installed from the installation media:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:421
#, no-wrap
msgid ""
"# mount /media\n"
"# cd /media/usr/freebsd-dist\n"
"# tar -C/ -xvf kernel.txz boot/kernel/kernel\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:424
msgid ""
"Alternately, the `GENERIC` kernel may be rebuilt and installed from source:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:429
#, no-wrap
msgid ""
"# cd /usr/src\n"
"# make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:434
msgid ""
"For this kernel to be identified as the `GENERIC` kernel by `freebsd-"
"update`, the [.filename]#GENERIC# configuration file must not have been "
"modified in any way.  It is also suggested that the kernel is built without "
"any other special options."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:436
msgid ""
"Rebooting into the [.filename]#GENERIC# kernel is not required as `freebsd-"
"update` only needs [.filename]#/boot/GENERIC# to exist."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:438
#, no-wrap
msgid "Upgrading Packages After a Major Version Upgrade"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:445
msgid ""
"Generally, installed applications will continue to work without problems "
"after minor version upgrades.  Major versions use different Application "
"Binary Interfaces (ABIs), which will break most third-party applications.  "
"After a major version upgrade, all installed packages and ports need to be "
"upgraded.  Packages can be upgraded using `pkg upgrade`.  To upgrade "
"installed ports, use a utility such as package:ports-mgmt/portmaster[]."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:449
msgid ""
"A forced upgrade of all installed packages will replace the packages with "
"fresh versions from the repository even if the version number has not "
"increased.  This is required because of the ABI version change when "
"upgrading between major versions of FreeBSD.  The forced upgrade can be "
"accomplished by performing:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:453
#, no-wrap
msgid "# pkg-static upgrade -f\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:456
msgid ""
"A rebuild of all applications installed from the ports collection can be "
"accomplished with this command:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:460
#, no-wrap
msgid "# portmaster -af\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:464
msgid ""
"This command will display the configuration screens for each application "
"that has configurable options and wait for the user to interact with those "
"screens.  To prevent this behavior, and use only the default options, "
"include `-G` in the above command."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:467
msgid ""
"Once the software upgrades are complete, finish the upgrade process with a "
"final call to `freebsd-update` in order to tie up all the loose ends in the "
"upgrade process:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:475
msgid ""
"If the [.filename]#GENERIC# kernel was temporarily used, this is the time to "
"build and install a new custom kernel using the instructions in "
"crossref:kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:478
msgid ""
"Reboot the machine into the new FreeBSD version.  The upgrade process is now "
"complete."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:480
#, no-wrap
msgid "System State Comparison"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:484
msgid ""
"The state of the installed FreeBSD version against a known good copy can be "
"tested using `freebsd-update IDS`.  This command evaluates the current "
"version of system utilities, libraries, and configuration files and can be "
"used as a built-in Intrusion Detection System (IDS)."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:492
msgid ""
"This command is not a replacement for a real IDS such as package:security/"
"snort[].  As `freebsd-update` stores data on disk, the possibility of "
"tampering is evident.  While this possibility may be reduced using "
"`kern.securelevel` and by storing the `freebsd-update` data on a read-only "
"file system when not in use, a better solution would be to compare the "
"system against a secure disk, such as a DVD or securely stored external USB "
"disk device.  An alternative method for providing IDS functionality using a "
"built-in utility is described in crossref:security[security-ids,\"Binary "
"Verification\"]"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:495
msgid ""
"To begin the comparison, specify the output file to save the results to:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:499
#, no-wrap
msgid "# freebsd-update IDS >> outfile.ids\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:502
msgid ""
"The system will now be inspected and a lengthy listing of files, along with "
"the SHA256 hash values for both the known value in the release and the "
"current installation, will be sent to the specified output file."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:505
msgid ""
"The entries in the listing are extremely long, but the output format may be "
"easily parsed.  For instance, to obtain a list of all files which differ "
"from those in the release, issue the following command:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:513
#, no-wrap
msgid ""
"# cat outfile.ids | awk '{ print $1 }' | more\n"
"/etc/master.passwd\n"
"/etc/motd\n"
"/etc/passwd\n"
"/etc/pf.conf\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:520
msgid ""
"This sample output has been truncated as many more files exist.  Some files "
"have natural modifications.  For example, [.filename]#/etc/passwd# will be "
"modified if users have been added to the system.  Kernel modules may differ "
"as `freebsd-update` may have updated them.  To exclude specific files or "
"directories, add them to the `IDSIgnorePaths` option in [.filename]#/etc/"
"freebsd-update.conf#."
msgstr ""

#. type: Title ==
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:522
#, no-wrap
msgid "Updating Bootcode"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:525
msgid ""
"The following manuals describe the upgrade process of bootcode and boot "
"loaders: man:gpart[8], man:gptboot[8], man:gptzfsboot[8], and "
"man:loader.efi[8]."
msgstr ""

#. type: Title ==
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:527
#, no-wrap
msgid "Updating the Documentation Set"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:531
msgid ""
"Documentation is an integral part of the FreeBSD operating system.  While an "
"up-to-date version of the FreeBSD documentation is always available on the "
"FreeBSD web site (link:https://docs.FreeBSD.org[Documentation Portal]), it "
"can be handy to have an up-to-date, local copy of the FreeBSD website, "
"handbooks, FAQ, and articles."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:533
msgid ""
"This section describes how to use either source or the FreeBSD Ports "
"Collection to keep a local copy of the FreeBSD documentation up-to-date."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:536
msgid ""
"For information on editing and submitting corrections to the documentation, "
"refer to the FreeBSD Documentation Project Primer for New Contributors "
"(extref:{fdp-primer}[FreeBSD Documentation Project Primer for New "
"Contributors])."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:538
#, no-wrap
msgid "Updating Documentation from Source"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:542
msgid ""
"Rebuilding the FreeBSD documentation from source requires a collection of "
"tools which are not part of the FreeBSD base system.  The required tools can "
"be installed following extref:{fdp-primer}overview[these steps, overview-"
"quick-start] from the FreeBSD Documentation Project Primer."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:544
msgid ""
"Once installed, use `git` to fetch a clean copy of the documentation source:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:548
#, no-wrap
msgid "# git clone https://git.FreeBSD.org/doc.git /usr/doc\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:552
msgid ""
"The initial download of the documentation sources may take a while.  Let it "
"run until it completes."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:554
msgid "Future updates of the documentation sources may be fetched by running:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:558
#, no-wrap
msgid "# git pull\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:562
msgid ""
"Once an up-to-date snapshot of the documentation sources has been fetched to "
"[.filename]#/usr/doc#, everything is ready for an update of the installed "
"documentation."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:564
msgid "A full update may be performed by typing:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:569
#, no-wrap
msgid ""
"# cd /usr/doc\n"
"# make\n"
msgstr ""

#. type: Title ==
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:572
#, no-wrap
msgid "Tracking a Development Branch"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:575
msgid ""
"FreeBSD has two development branches: FreeBSD-CURRENT and FreeBSD-STABLE."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:577
msgid ""
"This section provides an explanation of each branch and its intended "
"audience, as well as how to keep a system up-to-date with each respective "
"branch."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:579
#, no-wrap
msgid "Using FreeBSD-CURRENT"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:583
msgid ""
"FreeBSD-CURRENT is the \"bleeding edge\" of FreeBSD development and FreeBSD-"
"CURRENT users are expected to have a high degree of technical skill.  Less "
"technical users who wish to track a development branch should track FreeBSD-"
"STABLE instead."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:587
msgid ""
"FreeBSD-CURRENT is the very latest source code for FreeBSD and includes "
"works in progress, experimental changes, and transitional mechanisms that "
"might or might not be present in the next official release.  While many "
"FreeBSD developers compile the FreeBSD-CURRENT source code daily, there are "
"short periods of time when the source may not be buildable.  These problems "
"are resolved as quickly as possible, but whether or not FreeBSD-CURRENT "
"brings disaster or new functionality can be a matter of when the source code "
"was synced."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:589
msgid "FreeBSD-CURRENT is made available for three primary interest groups:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:591
msgid ""
"Members of the FreeBSD community who are actively working on some part of "
"the source tree."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:592
msgid ""
"Members of the FreeBSD community who are active testers. They are willing to "
"spend time solving problems, making topical suggestions on changes and the "
"general direction of FreeBSD, and submitting patches."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:593
msgid ""
"Users who wish to keep an eye on things, use the current source for "
"reference purposes, or make the occasional comment or code contribution."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:597
msgid ""
"FreeBSD-CURRENT should _not_ be considered a fast-track to getting new "
"features before the next release as pre-release features are not yet fully "
"tested and most likely contain bugs.  It is not a quick way of getting bug "
"fixes as any given commit is just as likely to introduce new bugs as to fix "
"existing ones.  FreeBSD-CURRENT is not in any way \"officially supported\"."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:599
msgid "To track FreeBSD-CURRENT:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:601
msgid ""
"Join the {freebsd-current} and the {dev-commits-src-main} lists. This is "
"_essential_ in order to see the comments that people are making about the "
"current state of the system and to receive important bulletins about the "
"current state of FreeBSD-CURRENT."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:603
msgid ""
"The {dev-commits-src-main} list records the commit log entry for each change "
"as it is made, along with any pertinent information on possible side effects."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:606
msgid ""
"To join these lists, go to {mailing-lists}, click on the list to subscribe "
"to, and follow the instructions.  In order to track changes to the whole "
"source tree, not just the changes to FreeBSD-CURRENT, subscribe to the {dev-"
"commits-src-all}."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:607
msgid ""
"Synchronize with the FreeBSD-CURRENT sources. Typically, `git` is used to "
"check out the -CURRENT code from the `main` branch of the FreeBSD Git "
"repository (see crossref:mirrors[git,“Using Git”] for details)."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:608
msgid ""
"Due to the size of the repository, some users choose to only synchronize the "
"sections of source that interest them or which they are contributing patches "
"to. However, users that plan to compile the operating system from source "
"must download _all_ of FreeBSD-CURRENT, not just selected portions."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:612
msgid ""
"Before compiling FreeBSD-CURRENT, read [.filename]#/usr/src/Makefile# very "
"carefully and follow the instructions in crossref:cutting-edge[makeworld, "
"Updating FreeBSD from Source].  Read the {freebsd-current} and [.filename]#/"
"usr/src/UPDATING# to stay up-to-date on other bootstrapping procedures that "
"sometimes become necessary on the road to the next release."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:613
msgid ""
"Be active! FreeBSD-CURRENT users are encouraged to submit their suggestions "
"for enhancements or bug fixes. Suggestions with accompanying code are always "
"welcome."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:615
#, no-wrap
msgid "Using FreeBSD-STABLE"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:622
msgid ""
"FreeBSD-STABLE is the development branch from which major releases are "
"made.  Changes go into this branch at a slower pace and with the general "
"assumption that they have first been tested in FreeBSD-CURRENT.  This is "
"_still_ a development branch and, at any given time, the sources for FreeBSD-"
"STABLE may or may not be suitable for general use.  It is simply another "
"engineering development track, not a resource for end-users.  Users who do "
"not have the resources to perform testing should instead run the most recent "
"release of FreeBSD."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:624
msgid ""
"Those interested in tracking or contributing to the FreeBSD development "
"process, especially as it relates to the next release of FreeBSD, should "
"consider following FreeBSD-STABLE."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:629
msgid ""
"While the FreeBSD-STABLE branch should compile and run at all times, this "
"cannot be guaranteed.  Since more people run FreeBSD-STABLE than FreeBSD-"
"CURRENT, it is inevitable that bugs and corner cases will sometimes be found "
"in FreeBSD-STABLE that were not apparent in FreeBSD-CURRENT.  For this "
"reason, one should not blindly track FreeBSD-STABLE.  It is particularly "
"important _not_ to update any production servers to FreeBSD-STABLE without "
"thoroughly testing the code in a development or testing environment."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:631
msgid "To track FreeBSD-STABLE:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:633
msgid ""
"Join the {freebsd-stable} in order to stay informed of build dependencies "
"that may appear in FreeBSD-STABLE or any other issues requiring special "
"attention. Developers will also make announcements in this mailing list when "
"they are contemplating some controversial fix or update, giving the users a "
"chance to respond if they have any issues to raise concerning the proposed "
"change."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:637
msgid ""
"Join the relevant git list for the branch being tracked.  For example, users "
"tracking the {betarel-current-major}-STABLE branch should join the {dev-"
"commits-src-branches}.  This list records the commit log entry for each "
"change as it is made, along with any pertinent information on possible side "
"effects."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:640
msgid ""
"To join these lists, go to {mailing-lists}, click on the list to subscribe "
"to, and follow the instructions.  In order to track changes for the whole "
"source tree, subscribe to {dev-commits-src-all}."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:641
msgid ""
"To install a new FreeBSD-STABLE system, install the most recent FreeBSD-"
"STABLE release from the crossref:mirrors[mirrors,FreeBSD mirror sites] or "
"use a monthly snapshot built from FreeBSD-STABLE. Refer to link:https://"
"www.FreeBSD.org/snapshots/[www.freebsd.org/snapshots] for more information "
"about snapshots."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:644
msgid ""
"To compile or upgrade an existing FreeBSD system to FreeBSD-STABLE, use "
"`git` to check out the source for the desired branch.  Branch names, such as "
"`stable/13`, are listed at link:https://www.FreeBSD.org/releng/"
"[www.freebsd.org/releng]."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:647
msgid ""
"Before compiling or upgrading to FreeBSD-STABLE , read [.filename]#/usr/src/"
"Makefile# carefully and follow the instructions in crossref:cutting-"
"edge[makeworld, Updating FreeBSD from Source]. Read the {freebsd-stable} and "
"[.filename]#/usr/src/UPDATING# to keep up-to-date on other bootstrapping "
"procedures that sometimes become necessary on the road to the next release."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:649
#, no-wrap
msgid "The N-number"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:653
msgid ""
"When tracking down bugs it is important to know which versions of the source "
"code have been used to create the system exhibiting an issue.  FreeBSD "
"provides version information compiled into the kernel.  man:uname[1] "
"retrieves this information, for example:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:657
#, no-wrap
msgid ""
"% uname -v\n"
"FreeBSD 14.0-CURRENT #112 main-n247514-031260d64c18: Tue Jun 22 20:43:19 MDT 2021     fred@machine:/usr/home/fred/obj/usr/home/fred/git/head/amd64.amd64/sys/FRED\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:660
msgid ""
"The final field gives information regarding the kernel name, the person that "
"built it, and the location that it was compiled in.  Looking at the 4th "
"field, it is made up of several parts:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:663
#, no-wrap
msgid "main-n247514-031260d64c18\n"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:668
#, no-wrap
msgid ""
"main\t\t<.>\n"
"n247514\t\t<.>\n"
"031260d64c18\t<.>\n"
"\t\t<.>\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:672
msgid ""
"Git branch name.  Note: comparisons of n-numbers are only valid on branches "
"published by the project (`main`, `stable/XX` and `releng/XX`).  Local "
"branches will have n-numbers that will overlap commits of their parent "
"branch."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:673
msgid ""
"The n-number is a linear count of commits back to the start of the Git "
"repository starting with the Git hash included in the line."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:674
msgid "Git hash of the checked out tree"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:676
msgid ""
"Sometimes a suffix of `-dirty` is present when the kernel was built in a "
"tree with uncommitted changes.  It is absent in this example because the "
"FRED kernel was built from a pristine checkout."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:679
msgid ""
"The `git rev-list` command is used to find the n-number corresponding to a "
"Git hash.  For example:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:683
#, no-wrap
msgid ""
"% git rev-list --first-parent --count 031260d64c18 <.>\n"
"247514 <.>\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:685
msgid "git hash to translate (the hash from the above example is reused)"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:686
msgid "The n-number."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:692
msgid ""
"Usually this number is not all that important.  However, when bug fixes are "
"committed, this number makes it easy to quickly determine whether the fix is "
"present in the currently running system.  Developers will often refer to the "
"hash of the commit (or provide a URL which has that hash), but not the n-"
"number since the hash is the easily visible identifier for a change while "
"the n-number is not.  Security advisories and errata notices will also note "
"an n-number, which can be directly compared against the system.  When "
"shallow Git clones are used, n-numbers cannot be compared reliably, as the "
"git rev-list command counts all revisions in the repository, which a shallow "
"clone omits."
msgstr ""

#. type: Title ==
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:694
#, no-wrap
msgid "Updating FreeBSD from Source"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:700
msgid ""
"Updating FreeBSD by compiling from source offers several advantages over "
"binary updates.  Code can be built with options to take advantage of "
"specific hardware.  Parts of the base system can be built with non-default "
"settings, or left out entirely where they are not needed or desired.  The "
"build process takes longer to update a system than just installing binary "
"updates, but allows complete customization to produce a tailored version of "
"FreeBSD."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:702
#, no-wrap
msgid "Quick Start"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:706
msgid ""
"This is a quick reference for the typical steps used to update FreeBSD by "
"building from source.  Later sections describe the process in more detail."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:711
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1019
msgid ""
"When switching from man:mergemaster[8] to man:etcupdate[8], the first run "
"might merge changes incorrectly generating spurious conflicts.  To prevent "
"this, perform the following steps *before* updating sources and building the "
"new world:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:716
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1024
#, no-wrap
msgid ""
"# etcupdate extract <.>\n"
"# etcupdate diff <.>\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:719
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1027
msgid ""
"Bootstrap the database of stock [.filename]#/etc# files; for more "
"information see man:etcupdate[8]."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:721
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1029
msgid ""
"Check the diff after bootstrapping. Trim any local changes that are no "
"longer needed to reduce the chance of conflicts in future updates."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:726
msgid "Update and Build"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:740
#, no-wrap
msgid ""
"# git -C /usr/src pull <.>\n"
"check /usr/src/UPDATING  <.>\n"
"# cd /usr/src          <.>\n"
"# make -j4 buildworld  <.>\n"
"# make -j4 kernel      <.>\n"
"# shutdown -r now      <.>\n"
"# etcupdate -p         <.>\n"
"# cd /usr/src          <.>\n"
"# make installworld    <.>\n"
"# etcupdate -B         <.>\n"
"# shutdown -r now      <.>\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:744
msgid ""
"Get the latest version of the source. See crossref:cutting-edge[updating-src-"
"obtaining-src, Updating the Source] for more information on obtaining and "
"updating source."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:746
msgid ""
"Check [.filename]#/usr/src/UPDATING# for any manual steps required before or "
"after building from source."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:748
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:758
msgid "Go to the source directory."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:750
msgid "Compile the world, everything except the kernel."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:752
msgid ""
"Compile and install the kernel. This is equivalent to `make buildkernel "
"installkernel`."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:754
msgid "Reboot the system to the new kernel."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:756
msgid ""
"Update and merge configuration files in [.filename]#/etc/# required before "
"installworld."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:760
msgid "Install the world."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:762
msgid "Update and merge configuration files in [.filename]#/etc/#."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:764
msgid "Restart the system to use the newly-built world and kernel."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:767
#, no-wrap
msgid "Preparing for a Source Update"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:770
msgid ""
"Read [.filename]#/usr/src/UPDATING#. Any manual steps that must be performed "
"before or after an update are described in this file."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:772
#, no-wrap
msgid "Updating the Source"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:777
msgid ""
"FreeBSD source code is located in [.filename]#/usr/src/#.  The preferred "
"method of updating this source is through the Git version control system.  "
"Verify that the source code is under version control:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:784
#, no-wrap
msgid ""
"# cd /usr/src\n"
"# git remote --v\n"
"origin  https://git.freebsd.org/src.git (fetch)\n"
"origin  https://git.freebsd.org/src.git (push)\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:787
msgid ""
"This indicates that [.filename]#/usr/src/# is under version control and can "
"be updated with man:git[1]:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:792
#, no-wrap
msgid "# git -C /usr/src pull\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:796
msgid ""
"The update process can take some time if the directory has not been updated "
"recently.  After it finishes, the source code is up to date and the build "
"process described in the next section can begin."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:800
msgid "Obtaining the source:"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:803
msgid ""
"If the output says `fatal: not a git repository`, the files there are "
"missing or were installed with a different method.  A new checkout of the "
"source is required."
msgstr ""

#. type: Block title
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:806
#, no-wrap
msgid "FreeBSD Versions and Repository Branches"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:810
#, no-wrap
msgid "uname&#160;&#8209;r Output"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:811
#, no-wrap
msgid "Repository Path"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:813
#, no-wrap
msgid "Description"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:814
#, no-wrap
msgid "`_X.Y_-RELEASE`"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:815
#, no-wrap
msgid "`releng/_X.Y_`"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:817
#, no-wrap
msgid "The Release version plus only critical security and bug fix patches. This branch is recommended for most users."
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:818
#, no-wrap
msgid "`_X.Y_-STABLE`"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:819
#, no-wrap
msgid "`stable/_X_`"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:825
#, no-wrap
msgid ""
"The Release version plus all additional development on that branch. _STABLE_ refers to the Applications Binary Interface (ABI) not changing, so software compiled for earlier versions still runs. For example, software compiled to run on FreeBSD 10.1 will still run on FreeBSD 10-STABLE compiled later.\n"
"\n"
"STABLE branches occasionally have bugs or incompatibilities which might affect users, although these are typically fixed quickly."
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:826
#, no-wrap
msgid "`_X_-CURRENT`"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:827
#, no-wrap
msgid "`main`"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:828
#, no-wrap
msgid "The latest unreleased development version of FreeBSD. The CURRENT branch can have major bugs or incompatibilities and is recommended only for advanced users."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:831
msgid "Determine which version of FreeBSD is being used with man:uname[1]:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:836
#, no-wrap
msgid ""
"# uname -r\n"
"13.2-RELEASE\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:840
msgid ""
"Based on crossref:cutting-edge[updating-src-obtaining-src-repopath,FreeBSD "
"Versions and Repository Branches], the source used to update `13.2-RELEASE` "
"has a repository path of `releng/13.2`.  That path is used when checking out "
"the source:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:845
#, no-wrap
msgid ""
"# mv /usr/src /usr/src.bak <.>\n"
"# git clone --branch releng/13.2 https://git.FreeBSD.org/src.git /usr/src <.>\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:848
msgid ""
"Move the old directory out of the way. If there are no local modifications "
"in this directory, it can be deleted."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:850
msgid ""
"The path from crossref:cutting-edge[updating-src-obtaining-src-"
"repopath,FreeBSD Versions and Repository Branches] is added to the "
"repository URL. The third parameter is the destination directory for the "
"source code on the local system."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:852
#, no-wrap
msgid "Building from Source"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:857
msgid ""
"The _world_, or all of the operating system except the kernel, is compiled.  "
"This is done first to provide up-to-date tools to build the kernel.  Then "
"the kernel itself is built:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:863
#, no-wrap
msgid ""
"# cd /usr/src\n"
"# make buildworld\n"
"# make buildkernel\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:866
msgid "The compiled code is written to [.filename]#/usr/obj#."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:869
msgid ""
"These are the basic steps.  Additional options to control the build are "
"described below."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:871
#, no-wrap
msgid "Performing a Clean Build"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:876
msgid ""
"Some versions of the FreeBSD build system leave previously-compiled code in "
"the temporary object directory, [.filename]#/usr/obj#.  This can speed up "
"later builds by avoiding recompiling code that has not changed.  To force a "
"clean rebuild of everything, use `cleanworld` before starting a build:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:880
#, no-wrap
msgid "# make cleanworld\n"
msgstr ""

#. type: Title ====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:883
#, no-wrap
msgid "Setting the Number of Jobs"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:890
msgid ""
"Increasing the number of build jobs on multi-core processors can improve "
"build speed.  Determine the number of cores with `sysctl hw.ncpu`.  "
"Processors vary, as do the build systems used with different versions of "
"FreeBSD, so testing is the only sure method to tell how a different number "
"of jobs affects the build speed.  For a starting point, consider values "
"between half and double the number of cores.  The number of jobs is "
"specified with `-j`."
msgstr ""

#. type: Block title
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:892
#, no-wrap
msgid "Increasing the Number of Build Jobs"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:896
msgid "Building the world and kernel with four jobs:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:900
#, no-wrap
msgid "# make -j4 buildworld buildkernel\n"
msgstr ""

#. type: Title ====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:905
#, no-wrap
msgid "Building Only the Kernel"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:910
msgid ""
"A `buildworld` must be completed if the source code has changed.  After "
"that, a `buildkernel` to build a kernel can be run at any time.  To build "
"just the kernel:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:915
#, no-wrap
msgid ""
"# cd /usr/src\n"
"# make buildkernel\n"
msgstr ""

#. type: Title ====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:918
#, no-wrap
msgid "Building a Custom Kernel"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:923
msgid ""
"The standard FreeBSD kernel is based on a _kernel config file_ called "
"[.filename]#GENERIC#.  The [.filename]#GENERIC# kernel includes the most "
"commonly-needed device drivers and options.  Sometimes it is useful or "
"necessary to build a custom kernel, adding or removing device drivers or "
"options to fit a specific need."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:925
msgid ""
"For example, someone developing a small embedded computer with severely "
"limited RAM could remove unneeded device drivers or options to make the "
"kernel slightly smaller."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:928
msgid ""
"Kernel config files are located in [.filename]#/usr/src/sys/arch/conf/#, "
"where _arch_ is the output from `uname -m`.  On most computers, that is "
"`amd64`, giving a config file directory of [.filename]#/usr/src/sys/amd64/"
"conf/#."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:934
msgid ""
"[.filename]#/usr/src# can be deleted or recreated, so it is preferable to "
"keep custom kernel config files in a separate directory, like [.filename]#/"
"root#.  Link the kernel config file into the [.filename]#conf# directory.  "
"If that directory is deleted or overwritten, the kernel config can be re-"
"linked into the new one."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:938
msgid ""
"A custom config file can be created by copying the [.filename]#GENERIC# "
"config file.  In this example, the new custom kernel is for a storage "
"server, so is named [.filename]#STORAGESERVER#:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:944
#, no-wrap
msgid ""
"# cp /usr/src/sys/amd64/conf/GENERIC /root/STORAGESERVER\n"
"# cd /usr/src/sys/amd64/conf\n"
"# ln -s /root/STORAGESERVER .\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:947
msgid ""
"[.filename]#/root/STORAGESERVER# is then edited, adding or removing devices "
"or options as shown in man:config[5]."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:949
msgid ""
"The custom kernel is built by setting `KERNCONF` to the kernel config file "
"on the command line:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:953
#, no-wrap
msgid "# make buildkernel KERNCONF=STORAGESERVER\n"
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:956
#, no-wrap
msgid "Installing the Compiled Code"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:959
msgid ""
"After the `buildworld` and `buildkernel` steps have been completed, the new "
"kernel and world are installed:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:968
#, no-wrap
msgid ""
"# cd /usr/src\n"
"# make installkernel\n"
"# shutdown -r now\n"
"# cd /usr/src\n"
"# make installworld\n"
"# shutdown -r now\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:971
msgid ""
"If a custom kernel was built, `KERNCONF` must also be set to use the new "
"custom kernel:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:980
#, no-wrap
msgid ""
"# cd /usr/src\n"
"# make installkernel KERNCONF=STORAGESERVER\n"
"# shutdown -r now\n"
"# cd /usr/src\n"
"# make installworld\n"
"# shutdown -r now\n"
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:983
#, no-wrap
msgid "Completing the Update"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:987
msgid ""
"A few final tasks complete the update.  Any modified configuration files are "
"merged with the new versions, outdated libraries are located and removed, "
"then the system is restarted."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:989
#, no-wrap
msgid "Merging Configuration Files with man:etcupdate[8]"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:994
msgid ""
"man:etcupdate[8] is a tool for managing updates to files that are not "
"updated as part of an installworld such as files located in [.filename]#/etc/"
"#.  It manages updates by doing a three-way merge of changes made to these "
"files against the local versions.  man:etcupdate[8] is designed to minimize "
"the amount of user intervention."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:999
msgid ""
"In general, man:etcupdate[8] does not need any specific arguments for its "
"job.  There is however a handy in between command for sanity checking what "
"will be done the first time man:etcupdate[8] is used:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1003
#, no-wrap
msgid "# etcupdate diff\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1006
msgid "This command allows the user to audit configuration changes."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1009
msgid ""
"If man:etcupdate[8] is not able to merge a file automatically, the merge "
"conflicts can be resolved with manual interaction by issuing:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1013
#, no-wrap
msgid "# etcupdate resolve\n"
msgstr ""

#. type: Title ====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1032
#, no-wrap
msgid "Checking for Outdated Files and Libraries"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1036
msgid ""
"Some obsolete files or directories can remain after an update.  These files "
"can be located:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1040
#, no-wrap
msgid "# make check-old\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1043
msgid "and deleted:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1047
#, no-wrap
msgid "# make delete-old\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1051
msgid "Some obsolete libraries can also remain.  These can be detected with:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1055
#, no-wrap
msgid "# make check-old-libs\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1058
msgid "and deleted with"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1062
#, no-wrap
msgid "# make delete-old-libs\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1066
msgid ""
"Programs which were still using those old libraries will stop working when "
"the library has been deleted.  These programs must be rebuilt or replaced "
"after deleting the old libraries."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1072
msgid ""
"When all the old files or directories are known to be safe to delete, "
"pressing kbd:[y] and kbd:[Enter] to delete each file can be avoided by "
"setting `BATCH_DELETE_OLD_FILES` in the command.  For example:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1076
#, no-wrap
msgid "# make BATCH_DELETE_OLD_FILES=yes delete-old-libs\n"
msgstr ""

#. type: Title ====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1081
#, no-wrap
msgid "Restarting After the Update"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1084
msgid ""
"The last step after updating is to restart the computer so all the changes "
"take effect:"
msgstr ""

#. type: Title ==
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1091
#, no-wrap
msgid "Updating FreeBSD with packages"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1097
msgid ""
"Starting from 14.0-RELEASE, the FreeBSD project has published a set of "
"packages of the base system, using man:pkg[8].  The convenience of pkg is no "
"longer limited to the FreeBSD ports collection.  man:pkg[8] can be used for "
"FreeBSD itself.  Base packages, and usage thereof, were traditionally "
"referred to as _pkgbase_."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1100
msgid ""
"Publication of official packages began in link:https://lists.freebsd.org/"
"archives/freebsd-pkgbase/2023-October/000221.html[October 2023].  Their use "
"with FreeBSD 14 is currently experimental."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1102
msgid ""
"Starting from 15.0-RELEASE, man:freebsd-base[7] will be supported as a tech "
"preview for:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1104
msgid "installation"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1105
msgid "minor upgrades"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1106
msgid "major upgrades"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1108
msgid "freebsd-base will eventually replace:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1110
msgid ""
"tarball distribution sets, such as `base.txz` or `kernel.txz`, which are "
"historically used for installation of the OS with man:bsdinstall[8]"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1111
msgid "man:freebsd-update[8] for updates to the OS."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1113
msgid "The current plan is for freebsd-update to work with pkg."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1117
msgid ""
"The replacement of distribution sets will take some time, until freebsd-base "
"is fully stable!"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1121
msgid ""
"Base System packages complement crossref:cutting-edge[makeworld,\"building "
"and installing from source\"], which is still available for those who wish "
"to build their own custom kernels or userland.  It is also possible to build "
"custom base system packages from local sources, as well as just relying on "
"officially provided packages."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1122
#, no-wrap
msgid "Converting a Host to use freebsd-base"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1126
msgid ""
"FreeBSD 14.0-RELEASE or later can be converted to use base packages.  "
"Earlier versions must be upgraded with freebsd-update before conversion."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1129
msgid ""
"For conversion, the FreeBSD Foundation-sponsored link:https://github.com/"
"FreeBSDFoundation/pkgbasify[pkgbasify] tool is recommended.  Follow the "
"instructions given there."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1131
msgid "man:freebsd-update[8] will be enhanced to use pkg and pkgbasify."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1136
msgid ""
"Note that this migration requires up to 5GiB additional free space, to "
"download, unpack, and relocate any conflicting files.  The pkgbasify tool "
"does not check for this and it is the responsibility of the user to ensure "
"that enough space is available before running the migration."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1139
msgid ""
"man:pkgbasify[8] (or whatever outcome link:https://reviews.freebsd.org/"
"D51594[D51594] or link:https://wiki.freebsd.org/WantedPorts#O-P[port "
"request] will have) performs 6 main tasks:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1141
msgid "Creates a backup boot environment (ZFS only) with man:bectl[8]"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1142
msgid "Creates the new package repository config files"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1143
msgid "Upgrades existing system components such as base, kernel, lib32, debug"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1144
msgid "Merges existing and new config files"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1145
msgid "Updates passwd and capabilities databases"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1146
msgid "Restarts sshd immediately"
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1147
#, no-wrap
msgid "Upgrading a Host using freebsd-base"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1152
msgid ""
"This is still in development, so please be careful especially when "
"converting an existing system to use freebsd-base."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1155
msgid ""
"Create a folder for custom pkg repository config files, if there is none "
"present already."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1159
#, no-wrap
msgid "# mkdir -p /usr/local/etc/pkg/repos/\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1162
msgid ""
"For using the freebsd-base repository, create a pkg repository configuration "
"file called `FreeBSD-base.conf`:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1173
#, no-wrap
msgid ""
"FreeBSD-base {\n"
"    url = \"pkg+https://pkg.freebsd.org/${ABI}/base_release_${VERSION_MINOR}\";\n"
"    mirror_type = \"srv\";\n"
"    signature_type = \"fingerprints\";\n"
"    fingerprints = \"/usr/share/keys/pkg\";\n"
"    enabled = yes;\n"
"}\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1176
msgid ""
"for more information on specific configuration options see man:pkg.conf[5]."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1178
msgid ""
"There are different branches to choose from (by changing the url "
"accordingly):"
msgstr ""

#. type: Block title
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1180
#, no-wrap
msgid "Base system package Branches"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1184
#, no-wrap
msgid "Branch"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1185
#, no-wrap
msgid "Frequency"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1187
#, no-wrap
msgid "URL"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1188
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1192
#, no-wrap
msgid "main"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1189
#, no-wrap
msgid "twice daily - 12:00 and 00:00 UTC"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1191
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1199
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1215
#, no-wrap
msgid "`pkg+https://pkg.freebsd.org/${ABI}/base_latest`"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1193
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1201
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1217
#, no-wrap
msgid "weekly – Sunday at 12:00 UTC"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1195
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1203
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1218
#, no-wrap
msgid "`pkg+https://pkg.freebsd.org/${ABI}/base_weekly`"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1196
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1200
#, no-wrap
msgid "stable/14"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1197
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1205
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1209
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1213
#, no-wrap
msgid "twice daily – 12:00 and 00:00 UTC"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1204
#, no-wrap
msgid "releng/14.3"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1207
#, no-wrap
msgid "`pkg+https://pkg.freebsd.org/${ABI}/base_release_3`"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1208
#, no-wrap
msgid "releng/15.0"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1211
#, no-wrap
msgid "`pkg+https://pkg.freebsd.org/${ABI}/base_release_0`"
msgstr ""

#. type: Table
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1212
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1216
#, no-wrap
msgid "stable/15"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1221
msgid ""
"To upgrade the system, change the configuration file according to the "
"desired release, and run:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1226
#, no-wrap
msgid ""
"# pkg update -r FreeBSD-base\n"
"# pkg upgrade -r FreeBSD-base\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1229
msgid "check, if these packages are correct and accept the changes."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1231
msgid "Reboot the OS executing the following command:"
msgstr ""

#. type: Title ====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1238
#, no-wrap
msgid "Major Upgrades"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1241
msgid ""
"With ZFS, boot environments allow an upgrade to be performed without "
"interrupting running software.  If the system does not use root-on-ZFS: "
"backup before upgrading."
msgstr ""

#. type: Title =====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1242
#, no-wrap
msgid "Preparations"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1244
msgid ""
"Change `/usr/local/etc/pkg/repos/FreeBSD-base.conf` to target the correct "
"major release like `base_release_0` for 15.0-RELEASE, to look like this:"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1248
msgid "This file might change to be included in RELEASE with a different path."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1259
#, no-wrap
msgid ""
"FreeBSD-base {\n"
"    url = \"pkg+https://pkg.freebsd.org/${ABI}/base_release_0\";\n"
"    mirror_type = \"srv\";\n"
"    signature_type = \"fingerprints\";\n"
"    fingerprints = \"/usr/share/keys/pkg\";\n"
"    enabled = yes;\n"
"}\n"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1267
msgid ""
"As pkgbase with FreeBSD 14 is experimental, so is a pkgbase major upgrade to "
"15.  At the time of this writing in some edge-cases the major upgrade "
"removes pkg and therefore segfaults.  This is considered a (link:https://"
"github.com/freebsd/pkg/issues/2475[known issue]) for 15.0-RELEASE.  To work "
"around this issue, lock pkg before upgrading."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1271
#, no-wrap
msgid "# pkg -c /mnt/upgrade lock pkg\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1274
msgid ""
"An experimental major upgrade from FreeBSD 14, to 15 (or 16.0-CURRENT), "
"should be followed by installation of meta package `FreeBSD-set-minimal`."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1278
msgid "Save a list of the non-base packages in case they are needed later:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1282
#, no-wrap
msgid "pkg prime-origins | sort -u > /var/tmp/pkg-prime-origins.txt\n"
msgstr ""

#. type: Title =====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1285
#, no-wrap
msgid "major upgrade with zfs"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1287
msgid ""
"Create a boot environment using man:bectl[8] and name it according to the "
"version upgrading to"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1290
#, no-wrap
msgid "# bectl create 15.0-RELEASE\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1293
msgid ""
"Create a directory then mount the new boot environment there to enable "
"working with pkg man:chroot[8] and rootdir."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1298
#, no-wrap
msgid ""
"# mkdir /mnt/upgrade\n"
"# bectl mount 15.0-RELEASE /mnt/upgrade\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1301
msgid ""
"The next step will upgrade the boot environment to the specified version."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1305
msgid ""
"This step might remove non-base packages, which could include the running "
"desktop environment."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1309
msgid ""
"Set the environment variable ABI to upgrade the major version (replace amd64 "
"with the architecture and 15 with the targeted version).  Set the pkg-static "
"chroot directory to the boot environment mountpoint."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1313
#, no-wrap
msgid "# env ABI=FreeBSD:15:amd64 pkg-static -c /mnt/upgrade upgrade -r FreeBSD-base\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1316
msgid ""
"There will be a prompt asking about ignoring the version mismatch looking "
"like this:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1324
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1372
#, no-wrap
msgid ""
"Newer FreeBSD version for package FreeBSD-zoneinfo:\n"
"To ignore this error set IGNORE_OSVERSION=yes\n"
"- package: 1500058\n"
"- running userland: 1500000\n"
"Ignore the mismatch and continue? [y/N]:\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1327
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1375
msgid "Check and confirm that."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1329
msgid ""
"To check if that was successful, chroot into the mountpoint of the boot "
"environment and run `freebsd-version -ku`."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1335
#, no-wrap
msgid ""
"# chroot /mnt/upgrade\n"
"# freebsd-version -ku\n"
"# exit\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1338
msgid "Activate the boot environment temporarily and reboot."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1342
#, no-wrap
msgid ""
"# bectl activate -t 15.0-RELEASE\n"
"# shutdown -r now\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1346
msgid ""
"If the system does not work as expected: restart the OS to cease using the "
"temporarily active boot environment.  The next boot will reuse the pre-"
"upgrade environment."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1348
msgid ""
"If the system runs stable after reboot, don't forget to permanently activate "
"this boot environment to prevent accidentally booting the old system."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1352
#, no-wrap
msgid "bectl activate 15.0-RELEASE\n"
msgstr ""

#. type: Title =====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1355
#, no-wrap
msgid "major upgrade without zfs"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1357
msgid ""
"Set the environment variable ABI to upgrade the major version (replace amd64 "
"with the architecture and 15 with the targeted version)."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1361
#, no-wrap
msgid "# env ABI=FreeBSD:15:amd64 pkg-static upgrade -r FreeBSD-base\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1364
msgid ""
"There will be a prompt to ask about ignoring the version mismatch looking "
"like this:"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1377
msgid "To check if the upgrade was successful, run `freebsd-version -ku`."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1379
msgid "Then reboot."
msgstr ""

#. type: Title =====
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1380
#, no-wrap
msgid "Post-upgrade tasks"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1382
msgid ""
"If pkg was locked during the update as a workaround remove the lock like "
"this:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1385
#, no-wrap
msgid "# pkg unlock pkg\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1388
msgid ""
"After upgrading to a new major version, updates and upgrades of installed "
"packages to match the ABI version may be necessary."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1392
#, no-wrap
msgid "# pkg upgrade\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1395
msgid ""
"Consider getting help from link:https://www.freebsd.org/support/[FreeBSD "
"Support] when experiencing issues."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1397
#, no-wrap
msgid "Manually building pkgbase and publishing it to the local network"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1400
msgid "When building custom pkgbase packages clone the FreeBSD source tree:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1405
#, no-wrap
msgid ""
"# cd /usr/src\n"
"# git clone https://github.com/freebsd/freebsd-src.git /usr/src\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1408
msgid "Check out the branch for the release to build packages for:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1412
#, no-wrap
msgid "# git checkout releng/14.3\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1416
msgid ""
"Start the building process, depending on the resources available this could "
"take some while.  Set the parallel processes according to the CPU core count."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1418
msgid "This example is written for an 8 core CPU:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1422
#, no-wrap
msgid "# make -j8 buildworld && make -j8 buildkernel && make -j8 packages\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1425
msgid ""
"When building frequently, consider using package:devel/ccache[] to speed up "
"subsequent builds from the cache."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1427
msgid ""
"After building, the packages will get saved into `/usr/obj/usr/src/repo/"
"FreeBSD:14:amd64/14.3p2` or something like that, depending on the version "
"build."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1429
msgid ""
"To publish these packages to the network set up a nginx service and use this "
"location in the http server configuration:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1436
#, no-wrap
msgid ""
" location /FreeBSD:14:amd64 {\n"
"   alias /usr/obj/usr/src/repo/FreeBSD:14:amd64/;\n"
"   autoindex on;\n"
" }\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1439
msgid "And reload the nginx service."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1441
msgid ""
"When not using https, use a small configuration file on the clients to "
"target the pkgbase version just built by editing `/usr/local/etc/pkg/repos/"
"upgrade.conf`:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1448
#, no-wrap
msgid ""
"upgrade: {\n"
"\turl         = http://ip.of.the.server/FreeBSD:14:amd64/14.3p2\n"
"\tenabled     = yes\n"
"}\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1451
msgid ""
"and use it as written above (but use -r upgrade instead of FreeBSD-base)."
msgstr ""

#. type: Title ==
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1453
#, no-wrap
msgid "Tracking for Multiple Machines"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1459
msgid ""
"When multiple machines need to track the same source tree, it is a waste of "
"disk space, network bandwidth, and CPU cycles to have each system download "
"the sources and rebuild everything.  The solution is to have one machine do "
"most of the work, while the rest of the machines mount that work via NFS.  "
"This section outlines a method of doing so.  For more information about "
"using NFS, refer to crossref:network-servers[network-nfs,\"Network File "
"System (NFS)\"]."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1464
msgid ""
"First, identify a set of machines which will run the same set of binaries, "
"known as a _build set_.  Each machine can have a custom kernel, but will run "
"the same userland binaries.  From that set, choose a machine to be the "
"_build machine_ that the world and kernel are built on.  Ideally, this is a "
"fast machine that has sufficient spare CPU to run `make buildworld` and "
"`make buildkernel`."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1468
msgid ""
"Select a machine to be the _test machine_, which will test software updates "
"before they are put into production.  This _must_ be a machine that can "
"afford to be down for an extended period of time.  It can be the build "
"machine, but need not be."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1471
msgid ""
"All the machines in this build set need to mount [.filename]#/usr/obj# and "
"[.filename]#/usr/src# from the build machine via NFS.  For multiple build "
"sets, [.filename]#/usr/src# should be on one build machine, and NFS mounted "
"on the rest."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1477
msgid ""
"Ensure that [.filename]#/etc/make.conf# and [.filename]#/etc/src.conf# on "
"all the machines in the build set agree with the build machine.  That means "
"that the build machine must build all the parts of the base system that any "
"machine in the build set is going to install.  Also, each build machine "
"should have its kernel name set with `KERNCONF` in [.filename]#/etc/"
"make.conf#, and the build machine should list them all in its `KERNCONF`, "
"listing its own kernel first.  The build machine must have the kernel "
"configuration files for each machine in its [.filename]#/usr/src/sys/arch/"
"conf#."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1485
msgid ""
"On the build machine, build the kernel and world as described in "
"crossref:cutting-edge[makeworld, Updating FreeBSD from Source], but do not "
"install anything on the build machine.  Instead, install the built kernel on "
"the test machine.  On the test machine, mount [.filename]#/usr/src# and "
"[.filename]#/usr/obj# via NFS.  Then, run `shutdown now` to go to single-"
"user mode in order to install the new kernel and world and run `etcupdate` "
"as usual.  When done, reboot to return to normal multi-user operations."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1488
msgid ""
"After verifying that everything on the test machine is working properly, use "
"the same procedure to install the new software on each of the other machines "
"in the build set."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1496
msgid ""
"The same methodology can be used for the ports tree.  The first step is to "
"share [.filename]#/usr/ports# via NFS to all the machines in the build set.  "
"To configure [.filename]#/etc/make.conf# to share distfiles, set `DISTDIR` "
"to a common shared directory that is writable by whichever user `root` is "
"mapped to by the NFS mount.  Each machine should set `WRKDIRPREFIX` to a "
"local build directory, if ports are to be built locally.  Alternately, if "
"the build system is to build and distribute packages to the machines in the "
"build set, set `PACKAGES` on the build system to a directory similar to "
"`DISTDIR`."
msgstr ""

#. type: Title ==
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1498
#, no-wrap
msgid "Building on non-FreeBSD Hosts"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1502
msgid ""
"Historically, building required a FreeBSD host.  Nowadays, FreeBSD can be "
"built on Linux and macOS."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1508
msgid ""
"To build on a non-FreeBSD host, the `tools/build/make.py` script is "
"recommended.  This script acts as a wrapper around `bmake`, which is the "
"make implementation used by FreeBSD.  It ensures that the necessary tooling, "
"including the actual FreeBSD's man:make[1], is bootstrapped and that the "
"build environment is properly configured.  In particular, it sets the "
"external toolchain variables, such as `XCC`, `XLD`, and others.  "
"Additionally, the script can pass any additional command arguments, such as "
"`-j 4` for parallel builds or specific make targets, to `bmake`."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1513
msgid ""
"A recent version of `bmake` can be used instead of the `tools/build/make.py` "
"script as well.  In that case, however, required environment variables need "
"to be set manually (the easiest way to obtain a list of them is by running "
"`tools/build/make.py --debug`)."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1517
msgid ""
"Otherwise, the list of prerequisites for building FreeBSD is rather short.  "
"In fact, it boils down to installing a couple of dependencies."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1520
msgid ""
"On macOS, the only dependency is LLVM.  The necessary dependencies can be "
"installed with package manager (e.g., link:https://brew.sh/[Homebrew]):"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1524
#, no-wrap
msgid "brew install llvm\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1527
msgid ""
"On a Linux distributions, install link:https://clang.llvm.org/[Clang] "
"version 10.0 or newer and the headers for libarchive and libbz2 (often "
"packaged as libarchive-dev and libbz2-dev)."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1529
msgid ""
"Once the dependencies are installed, the host should be able to build "
"FreeBSD."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1531
msgid ""
"For example, the following `tools/build/make.py` invocation builds the world:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1535
#, no-wrap
msgid "MAKEOBJDIRPREFIX=/tmp/obj tools/build/make.py -j 8 TARGET=arm64 TARGET_ARCH=aarch64 buildworld\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1540
msgid ""
"It builds the world for target `aarch64:arm64` on 8 CPUs and uses "
"[.filename]#/tmp/obj# for object files.  Note that the variables "
"`MAKEOBJDIRPREFIX`, `TARGET`, and `TARGET_ARCH` are mandatory when building "
"on non-FreeBSD hosts.  Also, make sure to create the object directory "
"pointed to by the `MAKEOBJDIRPREFIX` environment variable."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/handbook/cutting-edge/_index.adoc:1541
msgid "Refer to man:arch[7] and man:build[7] for more details."
msgstr ""