diff --git a/documentation/content/en/articles/building-products/_index.adoc b/documentation/content/en/articles/building-products/_index.adoc index 30c7355e55c7..4ace1173e816 100644 --- a/documentation/content/en/articles/building-products/_index.adoc +++ b/documentation/content/en/articles/building-products/_index.adoc @@ -111,7 +111,7 @@ FreeBSD makes an excellent foundation on which to build products: * The project offers exceptional transparency into its workings, allowing organizations using its code to plan effectively for the future. * The culture of the FreeBSD project, carried over from the Computer Science Research Group at The University of California, Berkeley - crossref:building-products[McKu1999-1,"Why you should use a BSD style license for your Open Source Project"], fosters high-quality work. Some features in FreeBSD define the state of the art. + crossref:building-products[McKu1999-1,"Twenty Years of Berkeley Unix: From AT&T-Owned to Freely Redistributable"], fosters high-quality work. Some features in FreeBSD define the state of the art. crossref:building-products[GoldGab2005,"Innovation Happens Elsewhere: Open Source as Business Strategy"] examines the business reasons for using open-source in greater detail. For organizations, the benefits of using FreeBSD components in their products include a shorter time to market, lower development costs and lower development risks. @@ -163,7 +163,7 @@ FreeBSD's in-kernel Netgraph (man:netgraph[4]) framework allows kernel networkin + FreeBSD supports a number of filesystems, and its native UFS2 filesystem supports soft updates, snapshots and very large filesystem sizes (16TB per - filesystem) crossref:building-products[McKu1999,"Why you should use a BSD style license for your Open Source Project"]. + filesystem) crossref:building-products[McKu1999,"Soft Updates: A Technique for Eliminating Most Synchronous Writes in the Fast Filesystem"]. + FreeBSD's in-kernel GEOM (man:geom[4]) framework allows kernel storage modules to be composed in flexible ways. * Over {numports} ported applications, both commercial and open-source, managed via the FreeBSD ports collection. diff --git a/documentation/content/en/books/handbook/kernelconfig/_index.adoc b/documentation/content/en/books/handbook/kernelconfig/_index.adoc index 0aadc0f2d2c8..a763eb0b4e0f 100644 --- a/documentation/content/en/books/handbook/kernelconfig/_index.adoc +++ b/documentation/content/en/books/handbook/kernelconfig/_index.adoc @@ -89,6 +89,13 @@ This has a number of benefits, such as: * Lower memory usage. A custom kernel often uses less memory than the [.filename]#GENERIC# kernel by omitting unused features and device drivers. This is important because the kernel code remains resident in physical memory at all times, preventing that memory from being used by applications. For this reason, a custom kernel is useful on a system with a small amount of RAM. * Additional hardware support. A custom kernel can add support for devices which are not present in the [.filename]#GENERIC# kernel. +[WARNING] +==== +When building a custom kernel, it is important to note that non-default configurations are less thoroughly tested than the GENERIC configuration. +While customizing the kernel can provide specific benefits it also increases the risk of encountering build or runtime issues. +Custom kernel configurations are recommended only for advanced users who have a specific reason for making changes and are willing to engage in the debugging process if necessary. +==== + Before building a custom kernel, consider the reason for doing so. If there is a need for specific hardware support, it may already exist as a module. diff --git a/documentation/content/en/books/handbook/preface/_index.adoc b/documentation/content/en/books/handbook/preface/_index.adoc index ffe371a2dc5e..23f4cd2c19eb 100644 --- a/documentation/content/en/books/handbook/preface/_index.adoc +++ b/documentation/content/en/books/handbook/preface/_index.adoc @@ -259,7 +259,7 @@ An _italic_ font is used for filenames, URLs, emphasized text, and the first usa `Monospace`:: A `monospaced` font is used for error messages, commands, environment variables, names of ports, hostnames, user names, group names, device names, variables, and code fragments. -Bold:: +*Bold*:: A *bold* font is used for applications, commands, and keys. [[preface-conv-commands]] diff --git a/documentation/content/en/books/handbook/virtualization/_index.adoc b/documentation/content/en/books/handbook/virtualization/_index.adoc index cd1c614ee4b9..8c2cb783df8e 100644 --- a/documentation/content/en/books/handbook/virtualization/_index.adoc +++ b/documentation/content/en/books/handbook/virtualization/_index.adoc @@ -4,7 +4,7 @@ part: Part III. System Administration prev: books/handbook/filesystems next: books/handbook/l10n description: Virtualization software allows multiple operating systems to run simultaneously on the same computer -tags: ["virtualization", "Parallels", "VMware", "VirtualBox", "bhyve", "XEN"] +tags: ["virtualization", "Parallels", "VMware", "VirtualBox", "QEMU", "bhyve", "XEN"] showBookMenu: true weight: 28 path: "/books/handbook/virtualization/" @@ -61,6 +61,7 @@ After reading this chapter, you will know: ** Parallels Desktop(Apple(R) macOS(R)) ** VMware Fusion(Apple(R) macOS(R)) ** VirtualBox(TM)(Microsoft(R) Windows(R), Intel(R)-based Apple(R) macOS(R), Linux) +** QEMU(FreeBSD) ** bhyve(FreeBSD) * How to tune a FreeBSD system for best performance under virtualization. @@ -496,6 +497,797 @@ perm pass* 0660 # service devfs restart .... +[[qemu-virtualization-host-guest]] +== Virtualization with QEMU on FreeBSD + +link:https://www.qemu.org[QEMU] is a generic machine emulator and virtualizer that is completely open source software. +It is developed by a large, active community and provides support for FreeBSD, OpenBSD, and NetBSD as well as other operating systems. + +From the link:https://www.qemu.org/docs/master/[QEMU documentation]: + +* QEMU can be used in several different ways. +The most common is for System Emulation, where it provides a virtual model of an entire machine (CPU, memory, and emulated devices) to run a guest OS. +In this mode the CPU may be fully emulated, or it may work with a hypervisor such as `KVM`, `Xen` or `Hypervisor.Framework` to allow the guest to run directly on the host CPU. + +* The second supported way to use QEMU is User Mode Emulation, where QEMU can launch processes compiled for one CPU on another CPU. +In this mode the CPU is always emulated. + +* QEMU also provides a number of standalone command line utilities, such as the man:qemu-img[1] disk image utility that allows one to create, convert, and modify disk images. + +QEMU can emulate a wide number of architectures including `Arm(TM)`, `i386`, `x86_64`, `MIPS(TM)`, `s390X`, `SPARC(TM)` (Sparc(TM) and Sparc64(TM)), and others. +The list of link:https://www.qemu.org/docs/master/system/targets.html#system-targets-ref[QEMU System Emulator Targets] is regularly kept up to date. + +This section describes how to use QEMU for both System Emulation and User Mode Emulation on FreeBSD, and provides examples of using QMEU commands and command line utilities. + +[[qemu-installing-qemu-software]] +=== Installing QEMU Software +QEMU is available as a FreeBSD package or as a port in package:emulators/qemu[]. +The package build includes sane options and defaults for most users and is the recommended method of installation. + +[source,shell] +.... +# pkg install qemu +.... + +The package installation includes several dependencies. +Once the installation is complete, create a link to the host version of QEMU that will be used most often. +If the host is an Intel(TM) or AMD(TM) 64 bit system that will be: + +[source,shell] +.... +# ln -s /usr/local/bin/qemu-system-x86_64 /usr/local/bin/qemu +.... + +Test the installation by running the following command as a non-root user: + +[source,shell] +.... +% qemu +.... +This brings up a window with QEMU actively trying to boot from hard disk, floppy disk, DVD/CD, and PXE. +Nothing has been set up yet, so the command will produce several errors and end +with "No bootable device" as shown in +crossref:virtualization[qemu-nullboot,Figure {counter:figure}]. +However, it does show that the QEMU software has been installed correctly. + +[[qemu-nullboot]] +.QEMU with no bootable image +image::qemu-freebsd01.png[QEMU with no bootable image] + +[[qemu-virtual-machine-install]] +=== Virtual Machine Install + +[NOTE] +==== +QEMU is under very active development. +Features and command options can change from one version to the next. +This section provides examples developed with QEMU version 9.0.1 (Summer, 2024). +When in doubt, always consult the link:https://www.qemu.org/docs/master/[QEMU Documentation] particularly the link:https://www.qemu.org/docs/master/about/index.html[About QEMU] page which has links to supported build platforms, emulation, deprecated features, and removed features. +==== + +Follow the steps below to create two virtual machines named "*left*", and "*right*". +Most commands can be performed without root privileges. + +. Create a test environment to work with QEMU: ++ +[source,shell] +.... +% mkdir -p ~/QEMU ~/QEMU/SCRIPTS ~/QEMU/ISO ~/QEMU/VM +.... ++ +The [.filename]#SCRIPTS# directory is for startup scripts and utilities. +The [.filename]#ISO# directory is for the guest ISO boot images. +The [.filename]#VM# directory is where the virtual machine images (`VMs`) will reside. + +. Download a recent copy of FreeBSD into [.filename]#~/QEMU/ISO#: ++ +[source,shell] +.... +% cd ~/QEMU/ISO +% fetch https://download.freebsd.org/releases/ISO-IMAGES/14.1/FreeBSD-14.1-RELEASE-amd64-bootonly.iso +.... ++ +Once the download is complete create a shorthand link. +This shorthand link is used in the startup scripts below. ++ +[source,shell] +.... +% ln -s FreeBSD-14.1-RELEASE-amd64-bootonly.iso fbsd.iso +.... +. Change directory to the location for virtual machines ([.filename]#~/QEMU/VM#). +Run man:qemu-img[1] to create the disk images for the “left” VM: ++ +[source,shell] +.... +% cd ~/QEMU/VM +% qemu-img create -f raw left.img 15G +.... ++ +The QEMU `raw` format is designed for performance. +The format is straightforward and has no overhead which makes it faster, especially for high performance or high throughput scenarios. +The use case is for maximum performance where no additional features, such as snapshots, are needed. +This format is used in the script for the "left" VM below. ++ +A separate format is `qcow2` which uses QEMU's "copy on write" technique for managing disk space. +This technique does not require a complete 15G disk, just a stub version that is managed directly by the VM. +The disk grows dynamically as the VM writes to it. +This format supports snapshots, compression, and encryption. +The use case for this format is for development, testing, and scenarios with the need of these advanced features. +This format is used in the script for the "right" VM below. ++ +Run man:qemu-img[1] again to create the disk image for the "right" VM using `qcow2`: ++ +[source,shell] +.... +% qemu-img create -f qcow2 -o preallocation=full,cluster_size=512K,lazy_refcounts=on right.qcow2 20G +.... ++ +To see the actual size of the file use: ++ +[source,shell] +.... +% du -Ah right.qcow2 +.... ++ +. Set up networking for both virtual machines with the following commands. +In this example the host network interface is `em0`. +If necessary, change it to fit the interface for the host system. +This must be done after every host machine restart to enable the QEMU guest VMs to communicate. ++ +[source,shell] +.... +# ifconfig tap0 create +# ifconfig tap1 create +# sysctl net.link.tap.up_on_open=1 +net.link.tap.up_on_open: 0 -> 1 +# sysctl net.link.tap.user_open=1 +net.link.tap.user_open: 0 -> 1 +# ifconfig bridge0 create +# ifconfig bridge0 addm tap0 addm tap1 addm em0 +# ifconfig bridge0 up +.... ++ +The above commands create two man:tap[4] devices (`tap0`, `tap1`) and one man:if_bridge[4] device (`bridge0`). +Then, they add the `tap` devices and the local host interface (`em0`) to the `bridge`, and set two man:sysctl[8] entries to allow for normal users to open the tap device. +These commands will allow the virtual machines to talk to the network stack on the host. ++ +. Change to [.filename]#~/QEMU/SCRIPTS#, use the following script to start the first virtual machine, "left". +This script uses the QEMU raw disk format. ++ +[.programlisting] +.... +/usr/local/bin/qemu-system-x86_64 -monitor none \ + -cpu qemu64 \ + -vga std \ + -m 4096 \ + -smp 4 \ + -cdrom ../ISO/fbsd.iso \ + -boot order=cd,menu=on \ + -blockdev driver=file,aio=threads,node-name=imgleft,filename=../VM/left.img \ + -blockdev driver=raw,node-name=drive0,file=imgleft \ + -device virtio-blk-pci,drive=drive0,bootindex=1 \ + -netdev tap,id=nd0,ifname=tap0,script=no,downscript=no,br=bridge0 \ + -device e1000,netdev=nd0,mac=02:20:6c:65:66:74 \ + -name \"left\" +.... + +[TIP] +==== +Save the above into a file (for example `left.sh`) and simply run: % `/bin/sh left.sh` +==== + +QEMU will start up a virtual machine in a separate window and boot the FreeBSD +iso as shown in crossref:virtualization[qemu-newboot-loader-menu,Figure {counter:figure}]. +All command options such as `-cpu` and `-boot` are fully described in the QEMU man page man:qemu[1]. + +[[qemu-newboot-loader-menu]] +.FreeBSD Boot Loader Menu +image::qemu-freebsd02.png[The FreeBSD loader menu.] + +[TIP] +==== +If the mouse is clicked in the QEMU console window, QEMU will “grab” the mouse +as shown in crossref:virtualization[qemu-grab,Figure {counter:figure}]. +Type kbd:[Ctl]+kbd:[Alt]+kbd:[G]” to release the mouse. +==== + +[[qemu-grab]] +.When QEMU Has Grabbed the Mouse +image::qemu-freebsd03.png[When QEMU has grabbed the mouse] + +[NOTE] +==== +On FreeBSD, an initial QEMU installation can be somewhat slow. +This is because the emulator writes filesystem formatting and metadata during the disk first use. +Subsequent operations are generally much faster. +==== + +During the installation there are several points to note: + +* Select to use UFS as the filesystem. +ZFS does not perform well with small memory sizes. +* For networking use DHCP. +If desired, configure IPv6 if supported by the local LAN. +* When adding the default user, ensure they are a member of the *wheel* group. + +Once the installation completes, the virtual machine reboots into the newly installed FreeBSD image. + +Login as `root` and update the system as follows: + +[source,shell] +.... +# freebsd-update fetch install +# reboot +.... + +[NOTE] +==== +After a successful installation, QEMU will boot the operating system installed on the disk, and not the installation program. +==== + +[NOTE] +==== +QEMU supports a ```-runas``` option. +For added security, include the option "-runas your_user_name" in the script listing above. +See man:qemu[1] for details. +==== + +Login as `root` again and add any packages desired. +To utilize the X Window system in the guest, see the section "Using the X Window System" below. + +This completes the setup of the "left" VM. + +To install the "right" VM, run the following script. +This script has the modifications needed for tap1, format=qcow2, the image filename, the MAC address, and the terminal window name. +If desired, include the "-runas" parameter as described in the above note. + +[.programlisting] +.... + +/usr/local/bin/qemu-system-x86_64 -monitor none \ + -cpu qemu64 \ + -vga cirrus \ + -m 4096 -smp 4 \ + -cdrom ../ISO/fbsd.iso \ + -boot order=cd,menu=on \ + -drive if=none,id=drive0,cache=writeback,aio=threads,format=qcow2,discard=unmap,file=../VM/right.qcow2 \ + -device virtio-blk-pci,drive=drive0,bootindex=1 \ + -netdev tap,id=nd0,ifname=tap1,script=no,downscript=no,br=bridge0 \ + -device e1000,netdev=nd0,mac=02:72:69:67:68:74 \ + -name \"right\" +.... + +Once the installation is complete, the "left" and "right" machines can communicate with each other and with the host. +If there are strict firewall rules on the host, consider adding or modifying rules to allow the bridge and tap devices to communicate with each other. + +[[qemu-usage-tips]] +=== Usage Tips +[[qemu-setting-up-x-windows]] +==== Using the X Window System + +crossref:x11[x-install,Installing Xorg] describes how to set up the `X Window` system. +Refer to that guide for initial `X Window` setup then consult crossref:desktop[desktop,Desktop Environments] on how to set up a complete desktop. + +This section demonstrates use of the XFCE desktop. + +Once the installation is complete, login as a regular user, then type: + +[source,shell] +.... +% startx +.... + +The XFCE4 window manager should start up and present a functioning graphical +desktop as in crossref:virtualization[qemu-two-qemu,Figure {counter:figure}]. +On initial startup, it may take up to a minute to display the desktop. +See the documentation at the link:https://www.xfce.org[XFCE website] for usage details. +[[qemu-two-qemu]] +.Both QEMU VMs +image::qemu-freebsd04.png[Both QEMU VMs] + +[TIP] +==== +Adding more memory to the guest system may speed up the graphical user interface. +==== + +Here, the "left" VM has had the `X Window` system installed, while the "right" VM is still in text mode. + +[[qemu-using-qemu-window]] +==== Using the QEMU Window + +The QEMU window functions as a full FreeBSD console, and is capable of running multiple virtual terminals, just like a bare-metal system. + +To switch to another virtual console, click into the QEMU window and type kbd:[Alt+F2] or kbd:[Alt+F3]. +FreeBSD should switch to another virtual console. +crossref:virtualization[qemu-console-ttyv3,Figure {counter:figure}] shows the "left" VM displaying the virtual console on `ttyv3`. +[[qemu-console-ttyv3]] +.Switching to Another Virtual Console in the QEMU Window +image::qemu-freebsd05.png[Switching to Another Virtual Console in the QEMU Window] + +[TIP] +==== +The host current desktop manager or window manager may be already setup for another function with the kbd:[Alt+F1], kbd:[Alt+F2] key sequences. +If so, try typing kbd:[Ctl+Alt+F1], kbd:[Ctl+Alt+F2], or some other similar key combination. +Check the window manager or desktop manager documentation for details. +==== + +[[qemu-using-qemu-window-menus]] +==== Using the QEMU Window Menus + +Another feature of the QEMU window is the `View` menu and the Zoom controls. +The most useful is `Zoom to Fit`. +When this menu selection is clicked, it is then possible to resize the QEMU window by clicking the window corner controls and resizing the window. +crossref:virtualization[qemu-zoom-to-fit,Figure {counter:figure}] shows the effect of resizing the "left" window while in graphics mode. + +[[qemu-zoom-to-fit]] +.Using the View Menu `Zoom to Fit` Option +image::qemu-freebsd06.png[Using the View Menu `Zoom to Fit` Option] + +[[qemu-other-qemu-window-menu-options]] +==== Other QEMU Window Menu Options + +Also shown in the `View` menu are + +* `cirrus-vga`, `serial0`, and `parallel0` options. +These allow for switching input/output to the selected device. + +The QEMU window `Machine` menu allows for four types of control over the guest VM: + +* `Pause` allows for pausing the QEMU virtual machine. +This may be helpful in freezing a fast scrolling window. +* `Reset` immediately resets the virtual machine back at cold "power on" state. +As with a real machine, it is not recommended unless absolutely necessary. +* `Power Down` simulates an ACPI shutdown signal and the operating system goes through a graceful shutdown. +* `Quit` powers off the virtual machine immediately - also not recommended unless necessary. + +[[qemu-adding-serial-port-to-guest-vm]] +=== Adding a Serial Port Interface to a Guest VM + +To implement a serial console, a guest VM running FreeBSD needs to insert +[.programlisting] +.... +console="comconsole" +.... +in [.filename]#/boot/loader.conf# to allow the use of the FreeBSD serial console. + +The updated configuration below shows how to implement the serial console on the guest VM. +Run the script to start the VM. +[.programlisting] +.... +# left+serial.sh +echo +echo "NOTE: telnet startup server running on guest VM!" +echo "To start QEMU, start another session and telnet to localhost port 4410" +echo + +/usr/local/bin/qemu-system-x86_64 -monitor none \ + -serial telnet:localhost:4410,server=on,wait=on\ + -cpu qemu64 \ + -vga std \ + -m 4096 \ + -smp 4 \ + -cdrom ../ISO/fbsd.iso \ + -boot order=cd,menu=on \ + -blockdev driver=file,aio=threads,node-name=imgleft,filename=../VM/left.img \ + -blockdev driver=raw,node-name=drive0,file=imgleft \ + -device virtio-blk-pci,drive=drive0,bootindex=1 \ + -netdev tap,id=nd0,ifname=tap0,script=no,downscript=no,br=bridge0 \ + -device e1000,netdev=nd0,mac=02:20:6c:65:66:74 \ + -name \"left\" +.... +[[qemu-left-serial-port]] +.Enabling a Serial Port over TCP +image::qemu-freebsd07.png[] + +In crossref:virtualization[qemu-notes-on-serial-console,Figure {counter:figure}], the serial port is redirected to a TCP port on the host system at VM startup and the QEMU monitor waits (`wait=on`) to activate the guest VM until a man:telnet[1] connection occurs on the indicated localhost port. +After receiving a connection from a separate session, the FreeBSD system starts booting and looks for a console directive in [.filename]#/boot/loader.conf#. +With the directive "console=comconsole", FreeBSD starts up a console session on a serial port. +The QEMU monitor detects this and directs the necessary character I/O on that serial port to the telnet session on the host. +The system boots and once finished, login prompts are enabled on the serial port (`ttyu0`) and on the console (`ttyv0`). + +It is important to note that the this serial redirect over TCP takes place outside the virtual machine. +There is no interaction with any network on the virtual machine and therefore it is not subject to any firewall rules. +Think of it like a dumb terminal sitting on an RS-232 or USB port on a real machine. + +[[qemu-notes-on-serial-console]] +==== Notes on Using the Serial Console + +On the serial console, if the window is resized, execute man:resizewin[1] to update the terminal size. + +It may be desirable (even necessary) to stop syslog message from being sent to the console (both the QEMU console and the serial port). +Consult man:syslog.conf[5] for details on redirecting console messages. + +[NOTE] +==== +Once the [.filename]#/boot.loader.conf# has been updated to permit a serial console, +the guest VM will attempt to boot from the serial port every time. +Ensure that the serial port is enabled as shown in the listing above, or update the [.filename]#/boot/loader.conf# file to not require a serial console. +==== + +[[qemu-user-mode-emulation]] +=== QEMU User Mode Emulation + +QEMU also supports running applications that are precompiled on an architecture different from the host CPU. +For example, it is possible to run a Sparc64 architecture operating system on an x86_64 host. +This is demonstrated in the next section. + +[[qemu-sparc64-user-mode-emulation]] +==== Setting up a SPARC64 Guest VM on an x86_64 Host + +Setting up a new VM with an architecture different from the host involves several steps: + +* Getting the software that will run on the guest VM +* Creating a new disk image for the guest VM +* Setting up a new QEMU script with the new architecture +* Performing the install + +In the following procedure a copy of OpenBSD 6.8 SPARC64 software is used for this QEMU User Mode Emulation exercise. + +[NOTE] +==== +Not all versions of OpenBSD Sparc64 work on QEMU. +OpenBSD version 6.8 is known to work and was selected as the example for this section. +==== + +. Download OpenBSD 6.8 Sparc64 from an OpenBSD archive. ++ +On the OpenBSD download sites, only the most current versions are maintained. +It is necessary to search an archive to obtain past releases. ++ +[source,shell] +.... +% cd ~/QEMU/ISO +% fetch https://mirror.planetunix.net/pub/OpenBSD-archive/6.8/sparc64/install68.iso +.... + +. Creating a new disk image for the Sparc64 VM is similar to the "right" VM above. +This case uses the QEMU qcow2 format for the disk: ++ +[source,shell] +.... +% cd ~/QEMU/VM +qemu-img create -f qcow2 -o preallocation=full,lazy_refcounts=on sparc64.qcow2 16G +.... + +. Use the script below for the new Sparc64 architecture. +As with the above example, run the script, then start a new session and `telnet` to localhost on the port indicated: ++ +[.programlisting] +.... +echo +echo "NOTE: telnet startup server running on guest VM!" +echo "To start QEMU, start another session and telnet to localhost port 4410" +echo + +/usr/local/bin/qemu-system-sparc64 \ + -serial telnet:localhost:4410,server=on,wait=on \ + -machine sun4u,usb=off \ + -smp 1,sockets=1,cores=1,threads=1 \ + -rtc base=utc \ + -m 1024 \ + -boot d \ + -drive file=../VM/sparc64.qcow2,if=none,id=drive-ide0-0-1,format=qcow2,cache=none \ + -cdrom ../ISO/install68.iso \ + -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-1,id=ide0-0-1 \ + -msg timestamp=on \ + -net nic,model=sunhme -net user \ + -nographic \ + -name \"sparc64\" +.... + +Note the following: + +* The `-boot d` option boots from the QEMU CDROM device which is set as `-cdrom ../ISO/install68.iso`. +* As before, the `telnet` server option is set to wait for a separate connection on port 4410. +Start up another session and use man:telnet[1] to connect to localhost on port 4410. +* The script sets the `-nographic` option meaning there is only serial port I/O. +There is no graphical interface. +* Networking is not set up through the man:tap[4] / man:if_bridge[4] combination. +This example uses a separate method of QEMU networking known as "Serial Line Internet Protocol" (SLIRP), sometimes referred to as "User Mode Networking". +Documentation on this and other QEMU networking methods is here: link:https://wiki.qemu.org/Documentation/Networking[QEMU Networking Documentation] + +If everything is set correctly, the system will boot as shown in +crossref:virtualization[qemu-sparc64-boot-cdrom-installation,Figure {counter:figure}]. +[[qemu-sparc64-boot-cdrom-installation]] +.QEMU Booting OpenBSD 6.8 Sparc64 from CDROM During User Mode Emulation +image::qemu-freebsd08.png[] + +Once the system is installed, modify the script and change the boot parameter to `-boot c`. +This will indicate to QEMU to boot from the supplied hard disk, not the CDROM. + +The installed system can be used just like any other guest virtual machine. +However, the underlying architecture of the guest is Sparc64, not x86_64. + +[TIP] +==== +If the system is halted at the OpenBios console prompt `0 >`, enter `power-off` to exit the system. +==== +crossref:virtualization[qemu-sparc64-login-to-installed-system,Figure {counter:figure}] shows a root login to the installed system and running man:uname[1]. + +[[qemu-sparc64-login-to-installed-system]] +.QEMU Booting from CDROM During User Mode Emulation +image::qemu-freebsd09.png[] + +[[qemu-using-qemu-monitor]] +=== Using the QEMU Monitor + +The link:https://www.qemu.org/docs/master/system/monitor.html[QEMU monitor] controls a running QEMU emulator (guest VM). + +Using the monitor, it is possible to: + +* Dynamically remove or insert devices, including disks, network interfaces, CD-ROMs, or floppies +* Freeze/unfreeze the guest VM, and save or restore its state from a disk file +* Gather information about the state of the VM and devices +* Change device settings on the fly + +As well as many other operations. + +The most common uses of the monitor are to examine the state of the VM, and to add, delete, or change devices. +Some operations such as migrations are only available under hypervisor accelerators such as KVM, Xen, etc. and are not supported on FreeBSD hosts. + +When using a graphical desktop environment, the simplest way to use the QEMU monitor is the `-monitor stdio` option when launching QEMU from a terminal session. + +[.programlisting] +.... +# /usr/local/bin/qemu-system-x86_64 -monitor stdio \ + -cpu qemu64 \ + -vga cirrus \ + -m 4096 -smp 4 \ + ... +.... + +This results in a new prompt `(qemu)` in the terminal window as shown in +crossref:virtualization[qemu-monitor-operation,Figure {counter:figure}]. + +[[qemu-monitor-operation]] +.QEMU Monitor Prompt and "stop" Command +image::qemu-freebsd13.png[] + +The image also shows the `stop` command freezing the system during the FreeBSD boot sequence. +The system will remain frozen until the `cont` command is entered in the monitor. + +[[qemu-adding-new-disk]] +==== Adding a New Disk to the VM + +To add a new disk to a running VM, the disk needs to be prepared as above: + +[source, shell] +.... +% cd ~/QEMU/VM +% qemu-img create -f raw new10G.img 10G +.... + +crossref:virtualization[qemu-add-new-disk-figure,Figure {counter:figure}] shows the monitor command sequence needed to add a new disk in the VM. +Once the device has been added with the `device_add` command in the monitor it shows up on the FreeBSD system console shown in the lower part of the figure. +The disk can be configured as needed. + +Note that the new disk must be added to the startup script if it is to be used after a VM reboot. + +[[qemu-add-new-disk-figure]] +.QEMU Monitor Commands to Add a New Disk +image::qemu-freebsd14.png[] + +[[qemu-using-monitor-manage-snapshots]] +==== Using the QEMU Monitor to Manage Snapshots + +QEMU's documentation describes several similar concepts when using the term *snapshot*. +There is the `-snapshot` option on the command line which refers to using a drive or portion of a drive to contain a copy of a device. +Then there are the monitor commands `snapshot_blkdev` and `snapshot_blkdev_internal` which describe the actual act of copying the blockdev device. +Finally, there are the monitor commands `savevm`, `loadvm`, and `delvm` commands which refer to creating and saving, loading, or deleting a copy of an entire virtual machine. +Along with the latter, the monitor `info snapshots` command lists out details of recent snapshots. + +This section will focus on creating, saving, and loading a complete VM image and will use the term *snapshot* for this purpose. + +To start, recreate the "left" VM from scratch, this time using the `qcow2` format. + +[source, shell] +.... +% cd ~/QEMU/VM +% rm left.img +% qemu-img create -f qcow2 left.qcow2 16G # Clean file for a new FreeBSD installation. +% cd ../SCRIPTS +# /bin/sh left.sh # See the below program listing. +.... + +Once the installation is complete, reboot, this time using the `-monitor stdio` option to allow use of the monitor. + +[.programlisting] +.... +# left VM script. +/usr/local/bin/qemu-system-x86_64 -monitor stdio \ + -cpu qemu64 \ + -vga std \ + -m 4096 \ + -smp 4 \ + -cdrom ../ISO/fbsd.iso \ + -boot order=cd,menu=on \ + -blockdev driver=file,aio=threads,node-name=imgleft,filename=../VM/left.qcow2 \ + -blockdev driver=qcow2,node-name=drive0,file=imgleft \ + -device virtio-blk-pci,drive=drive0,bootindex=1 \ + -netdev tap,id=nd0,ifname=tap0,script=no,downscript=no,br=bridge0 \ + -device e1000,netdev=nd0,mac=02:20:6c:65:66:74 \ + -name \"left\" +.... + +To demonstrate snapshots, the following procedure can be used: + +. Install FreeBSD from scratch +. Prepare the environment and take a snapshot with the `savevm` monitor command +. Install several packages +. Shut down the system +. Restart a bare QEMU instance and utilize the monitor command `loadvm` to restore the VM +. Observe that the restored VM does not have any packages + +During the "Prepare the environment" step, in a separate virtual console (ttyv1), an editing session with man:vi[1] is initiated simulating user activity. +Additional programs may be started if desired. +The snapshot should account for the state of all applications running at the time the snapshot is taken. + +crossref:virtualization[qemu-using-monitor-snapshots,Figure {counter:figure}] shows the newly installed FreeBSD system with no packages, and separately, the editing session on ttyv1. +The man:vi[1] editor is currently in `insert` mode with the typist typing the word "broadcast". + +[[qemu-using-monitor-snapshots]] +.QEMU VM Before First Snapshot +image::qemu-freebsd15.png[] + +To generate the snapshot, enter `savevm` in the monitor. +Be sure to give it a tag (such as `original_install`). + +[source,shell] +.... +QEMU 9.0.1 monitor - type 'help' for more information +(qemu) +(qemu) savevm original_install +.... + +Next, in the main console window, install a package, such as man:zip[1] which has no dependencies. +Once that completes, renter the monitor and create another snapshot (`snap1_pkg+zip`). + +crossref:virtualization[qemu-after-monitor-snapshots,Figure {counter:figure}] shows the results of the above commands and the output of the `info shapshots` command. + +[[qemu-after-monitor-snapshots]] +.QEMU Using Monitor Commands for Snapshots +image::qemu-freebsd16.png[] + +Reboot the system, and before FreeBSD starts up, switch to the monitor and enter `stop`. +The VM will stop. + +Enter `loadvm` with the tag you used above (here `original_install`). + +[source, shell] +.... +QEMU 9.0.1 monitor - type 'help' for more information +(qemu) stop +(qemu) loadvm original_install +(qemu) cont +.... + +Immediately, the VM screen will switch to the exact moment the `savevm` command was entered above. +Note that the VM is still stopped. + +Enter `cont` to start the VM, switch to the editing session on `ttyv1`, and type one letter on the keyboard. +The editor, still in insert mode, should respond accordingly. +Any other programs running at the time the snapshot was taken should be unaffected. + +The above steps show how a snapshot can be taken, the system modified, and then "rolled back" by restoring the previous snapshot. + +By default QEMU stores snapshot data in the same file as the image. +View the list of snapshots with man:qemu-img[1] as shown below in +crossref:virtualization[qemu-examine-monitor-snapshots,Figure {counter:figure}]. + +[[qemu-examine-monitor-snapshots]] +.QEMU Using man:qemu-img[1] to Examine Snapshots +image::qemu-freebsd17.png[] + +[[qemu-using-qemu-usb-devices]] +=== Using QEMU USB Devices + +QEMU supports the creation of virtual USB devices that are backed by an image file. +These are virtual USB devices that can be partitioned, formatted, mounted, and used just like a real USB device. + +[.programlisting] +.... +/usr/local/bin/qemu-system-x86_64 -monitor stdio \ + -cpu qemu64 \ + -vga cirrus \ + -m 4096 -smp 4 \ + -cdrom ../ISO/fbsd.iso \ + -boot order=cd,menu=on \ + -drive if=none,id=usbstick,format=raw,file=../VM/foo.img \ + -usb \ + -device usb-ehci,id=ehci \ + -device usb-storage,bus=ehci.0,drive=usbstick \ + -device usb-mouse \ + -blockdev driver=file,node-name=img1,filename=../VM/right.qcow2 \ + -blockdev driver=qcow2,node-name=drive0,file=img1 \ + -device virtio-blk-pci,drive=drive0,bootindex=1 \ + -netdev tap,id=nd0,ifname=tap1,script=no,downscript=no,br=bridge0 \ + -device e1000,netdev=nd0,mac=02:72:69:67:68:74 \ + -name \"right\" +.... + +This configuration includes a `-drive` specification with the `id=usbstick`, raw format, and an image file (must be created by man:qemu-img[1]). +The next line contains the `-device usb-ehci` specification for a USB EHCI controller, with `id=ehci`. +Finally, a `-device usb-storage` specification ties the above drive to the EHCI USB bus. + +When the system is booted, FreeBSD will recognize a USB hub, add the attached +USB device, and assign it to `da0` as shown in +crossref:virtualization[qemu-usb-internal-storage,Figure {counter:figure}]. + +[[qemu-usb-internal-storage]] +.QEMU Created USB Hub and Mass Storage Device +image::qemu-freebsd12.png[] + +The device is ready to be partitioned with man:gpart[8], and formatted with man:newfs[8]. +Because the USB device is backed by a man:qemu-img[1] created file, data written to the device will persist across reboots. + +[[qemu-using-host-usb-devices]] +=== Using Host USB Devices via Passthrough + +QEMU USB passthrough support is listed as experimental in version 9.0.1 (Summer, 2024). +However, the following steps show how a USB stick mounted on the host can be used by the guest VM. + +For more information and examples, see: + +* link:https://www.qemu.org/docs/master/system/devices/usb.html[] + +The upper part of crossref:virtualization[qemu-usb-passthrough,Figure {counter:figure}] shows the QEMU monitor commands: + +* `info usbhost` shows information about all USB devices on the host system. +Find the desired USB device on the host system and note the two hexadecimal values on that line. +(In the example below the host USB device is a Memorex Mini, with vendorid 0718, and productid 0619.) +Use the two values shown by the `info usbhost` command in the `device_add` step below. +* `device_add` adds a USB device to the guest VM. + +[[qemu-usb-passthrough]] +.QEMU Monitor Commands to Access a USB Device on the Host +image::qemu-freebsd18.png[] + +As before, once `device_add` completes, the FreeBSD kernel recognizes a new USB device, as shown in the lower half of the . + +Using the new device is shown in +crossref:virtualization[qemu-usb-passthrough2,Figure {counter:figure}]. + +[[qemu-usb-passthrough2]] +.Using the Host USB Device via Passthrough +image::qemu-freebsd19.png[] + +If the USB device is formatted as a FAT16 or FAT32 filesystem it can be mounted as an MS-DOS(TM) filesystem with man:mount_msdosfs[8] as in the example shown. +The `/etc/hosts` file is copied to the newly mounted drive and checksums are taken to verify the integrity of the file on the USB device. +The device is then unmounted with man:umount[8]. + +If the USB device is formatted with NTFS it is necessary to install the `fusefs-ntfs` package and use man:ntfs-3g[8] to access the device: + +[source, shell] +.... +# pkg install fusefs-ntfs +# kldload fusefs +# gpart show da1 +# ntfs-3g /dev/da1s1 /mnt + +Access the drive as needed. When finished: + +# umount /mnt +.... + +Change the above device identifiers to match the installed hardware. +Consult man:ntfs-3g[8] for additional information on working with NTFS filesystems. + +[[qemu-summary]] +=== QEMU on FreeBSD Summary + +As noted above, QEMU works with several different hypervisor accelerators. + +The list of link:https://www.qemu.org/docs/master/system/introduction.html#virtualisation-accelerators[Virtualization Accelerators] supported by QEMU includes: + +* `KVM` on Linux supporting 64 bit Arm, MIPS, PPC, RISC-V, s390x, and x86 +* `Xen` on Linux as dom0 supporting Arm, x86 +* `Hypervisor Framework (hvf)` on MacOS supporting x86 and Arm (both 64 bit only) +* `Windows Hypervisor Platform (whpx)` on Windows supporting x86 +* `NetBSD Virutal Machine Monitor (nvmm)` on NetBSD supporting x86 +* `Tiny Code Generator (tcg)` on Linux and other POSIX, Windows, MacOS supporting Arm, x86, Loongarch64, MIPS, PPC, s390x, and Sparc64. + +All the examples in this section used the `Tiny Code Generator (tcg)` accelerator as that is the only supported accelerator on FreeBSD at present. + [[virtualization-host-bhyve]] == FreeBSD as a Host with bhyve @@ -602,7 +1394,7 @@ Now the guest can be started from the virtual disk: [[virtualization-bhyve-linux]] === Creating a Linux(R) Guest -Linux guests can be booted either like any other regular crossref:virtualization[virtualization-bhyve-uefi,"UEFI-based guest"] virtual machine, or alternatively, you can make use of the package:sysutils/grub2-bhyve[] port. +Linux guests can be booted either like any other regular crossref:virtualization[virtualization-bhyve-uefi,"UEFI-based guest"] virtual machine, or alternatively, you can make use of the package:sysutils/grub2-bhyve[] port. To do this, first ensure that the port is installed, then create a file to use as the virtual disk for the guest machine: diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd01.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd01.png new file mode 100644 index 000000000000..27fea7c4a129 Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd01.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd02.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd02.png new file mode 100644 index 000000000000..d2af3821919c Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd02.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd03.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd03.png new file mode 100644 index 000000000000..7759729fbc3a Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd03.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd04.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd04.png new file mode 100644 index 000000000000..1230b050b63e Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd04.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd05.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd05.png new file mode 100644 index 000000000000..8f01e6a32439 Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd05.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd06.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd06.png new file mode 100644 index 000000000000..d521a9b1e9de Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd06.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd07.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd07.png new file mode 100644 index 000000000000..5e0fd7e90241 Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd07.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd08.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd08.png new file mode 100644 index 000000000000..b549d094be61 Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd08.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd09.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd09.png new file mode 100644 index 000000000000..67520c0ea3f8 Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd09.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd12.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd12.png new file mode 100644 index 000000000000..21592fa04d07 Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd12.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd13.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd13.png new file mode 100644 index 000000000000..b36c4f366574 Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd13.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd14.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd14.png new file mode 100644 index 000000000000..4154d7c99d6e Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd14.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd15.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd15.png new file mode 100644 index 000000000000..7b61a2badb25 Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd15.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd16.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd16.png new file mode 100644 index 000000000000..651896e0bb83 Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd16.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd17.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd17.png new file mode 100644 index 000000000000..0cae95147ba6 Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd17.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd18.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd18.png new file mode 100644 index 000000000000..e34f36f7ae1e Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd18.png differ diff --git a/documentation/static/images/books/handbook/virtualization/qemu-freebsd19.png b/documentation/static/images/books/handbook/virtualization/qemu-freebsd19.png new file mode 100644 index 000000000000..f7222892c992 Binary files /dev/null and b/documentation/static/images/books/handbook/virtualization/qemu-freebsd19.png differ diff --git a/website/archetypes/release/hardware.adoc b/website/archetypes/release/hardware.adoc index 74816a4209c6..cfc89b5cf567 100644 --- a/website/archetypes/release/hardware.adoc +++ b/website/archetypes/release/hardware.adoc @@ -78,6 +78,16 @@ AWS / Annapurna Labs: * Graviton 2 * Graviton 3 +NXP Semiconductors: + +* LS1028A SoC +* LS1046A SoC +* LS1088A SoC +* LX2160A SoC +* Conclusive Engineering WHLE-LS1 +* SolidRun HoneyComb LX2 +* Traverse Technologies Ten64 + Raspberry Pi, more info about the support at the link:https://wiki.freebsd.org/arm/Raspberry%20Pi[Raspberry Pi Wiki page]: * Raspberry Pi 3 @@ -88,6 +98,8 @@ RockChip (64-bit), more info about the support at the link:https://wiki.freebsd. * RK3328 SoC * RK3399 SoC * NanoPC-T4 +* NanoPi R2S +* NanoPi R2S-Plus * NanoPi R4S * Radxa * Pinebook Pro diff --git a/website/content/en/administration.adoc b/website/content/en/administration.adoc index 71e9c44f5b51..b884803eeb09 100644 --- a/website/content/en/administration.adoc +++ b/website/content/en/administration.adoc @@ -86,7 +86,6 @@ Its secondary responsibility is to coordinate among the committers and developer The https://www.freebsd.org/portmgr/charter/[portmgr team charter] describes the duties and responsibilities of the Ports Management Team in greater detail. * {bapt} -* {bofh} * {mat} (Cluster Administration Team Liaison) * {pizzamig} * {rene} diff --git a/website/content/en/releases/13.4R/relnotes.adoc b/website/content/en/releases/13.4R/relnotes.adoc index 43156e49eb23..b63bc2a77e18 100644 --- a/website/content/en/releases/13.4R/relnotes.adoc +++ b/website/content/en/releases/13.4R/relnotes.adoc @@ -279,6 +279,7 @@ This section covers changes to the FreeBSD Ports Collection, package infrastruct === Packaging Changes The DVD package set has been modernized. + package:archivers/unzip[] has been removed as it is in base now. package:emulators/linux_base-c7[] has been removed as it is unlikely to be useful without other Linux packages being installed. @@ -298,9 +299,9 @@ FreeBSD 15.0 is not expected to include support for 32-bit platforms other than The armv6, i386, and powerpc platforms are deprecated and will be removed. 64-bit systems will still be able to run older 32-bit binaries. -The project expect to support armv7 as a Tier 2 architecture in FreeBSD 15.0 and stable/15. -However, the project also anticipate that armv7 may be removed in FreeBSD 16.0. -The project will provide an update on the status of armv7 for both 15.x and 16.x at the time of 15.0 release. +The FreeBSD Project expects to support armv7 as a Tier 2 architecture in FreeBSD 15.0 and stable/15. +However, the Project also anticipates that armv7 may be removed in FreeBSD 16.0. +The Project will provide an update on the status of armv7 for both 15.x and 16.x at the time of 15.0 release. Support for executing 32-bit binaries on 64-bit platforms via the `COMPAT_FREEBSD32` option will continue for at least the stable/15 and stable/16 branches. Support for compiling individual 32-bit applications via `cc -m32` will also continue for at least the stable/15 branch, which includes suitable headers in [.filename]#/usr/include# and libraries in [.filename]#/usr/lib32#. @@ -314,8 +315,7 @@ However, all 32-bit platforms are Tier-2 or Tier-3, and support for individual p With the current support schedule, stable/14 will reach end of life (EOL) around 5 years after the release of FreeBSD 14.0-RELEASE. The EOL of stable/14 will mark the end of support for deprecated 32-bit platforms, including source releases, pre-built packages, and support for building applications from ports. -With the release of {releasePrev} in November 2023, support for deprecated 32-bit platforms will end in November 2028. +With the release of 14.0-RELEASE in November 2023, support for deprecated 32-bit platforms will end in November 2028. -The project may choose to alter this approach when FreeBSD 15.0 is released by extending some level of support for one or more of the deprecated platforms in 15.0 or later. +The Project may choose to alter this approach when FreeBSD 15.0 is released by extending some level of support for one or more of the deprecated platforms in 15.0 or later. Any alterations will be driven by community feedback and committed efforts to support these platforms. -Use FreeBSD {releasePrev} and following minor releases, or the stable/14 branch, to migrate off 32-bit platforms. diff --git a/website/content/en/releases/_index.adoc b/website/content/en/releases/_index.adoc index 849ebc8298a3..3266bf07b792 100644 --- a/website/content/en/releases/_index.adoc +++ b/website/content/en/releases/_index.adoc @@ -35,7 +35,6 @@ Production: * *Release {rel133-current}* ({rel133-current-date}) _link:{u-rel133-announce}[Announcement] : link:{u-rel133-notes}[Release Notes] : link:{u-rel133-installation}[Installation Instructions] : link:{u-rel133-hardware}[Hardware Compatibility List] : link:{u-rel133-readme}[Readme] : link:{u-rel133-errata}[Errata] : link:{u-rel133-signatures}[Signed Checksums]_ * *Release {rel134-current}* ({rel134-current-date}) _link:{u-rel134-announce}[Announcement] : link:{u-rel134-notes}[Release Notes] : link:{u-rel134-installation}[Installation Instructions] : link:{u-rel134-hardware}[Hardware Compatibility List] : link:{u-rel134-readme}[Readme] : link:{u-rel134-errata}[Errata] : link:{u-rel134-signatures}[Signed Checksums]_ -* *Release {rel140-current}* ({rel140-current-date}) _link:{u-rel140-announce}[Announcement] : link:{u-rel140-notes}[Release Notes] : link:{u-rel140-installation}[Installation Instructions] : link:{u-rel140-hardware}[Hardware Compatibility List] : link:{u-rel140-readme}[Readme] : link:{u-rel140-errata}[Errata] : link:{u-rel140-signatures}[Signed Checksums]_ * *Release {rel141-current}* ({rel141-current-date}) _link:{u-rel141-announce}[Announcement] : link:{u-rel141-notes}[Release Notes] : link:{u-rel141-installation}[Installation Instructions] : link:{u-rel141-hardware}[Hardware Compatibility List] : link:{u-rel141-readme}[Readme] : link:{u-rel141-errata}[Errata] : link:{u-rel141-signatures}[Signed Checksums]_ //// @@ -56,6 +55,7 @@ The latest snapshots from our link:{handbook}cutting-edge/#stable[FreeBSD-STABLE For historical information about branches, release dates, types, and EOL dates, see link:../security/unsupported/[Unsupported Releases]. +* *14.0* ({rel140-current-date}) _link:{u-rel140-announce}[Announcement] : link:{u-rel140-notes}[Release Notes] : link:{u-rel140-installation}[Installation Instructions] : link:{u-rel140-hardware}[Hardware Compatibility List] : link:{u-rel140-readme}[Readme] : link:{u-rel140-errata}[Errata] : link:{u-rel140-signatures}[Signed Checksums]_ * *13.2* ({rel132-current-date}) _link:{u-rel132-announce}[Announcement] : link:{u-rel132-notes}[Release Notes] : link:{u-rel132-installation}[Installation Instructions] : link:{u-rel132-hardware}[Hardware Compatibility List] : link:{u-rel132-readme}[Readme] : link:{u-rel132-errata}[Errata] : link:{u-rel132-signatures}[Signed Checksums]_ * *13.1* ({rel131-current-date}) _link:{u-rel131-announce}[Announcement] : link:{u-rel131-notes}[Release Notes] : link:{u-rel131-installation}[Installation Instructions] : link:{u-rel131-hardware}[Hardware Compatibility List] : link:{u-rel131-readme}[Readme] : link:{u-rel131-errata}[Errata] : link:{u-rel131-signatures}[Signed Checksums]_ * *{rel130-current}* ({rel130-current-date}) _link:{u-rel130-announce}[Announcement] : link:{u-rel130-notes}[Release Notes] : link:{u-rel130-installation}[Installation Instructions] : link:{u-rel130-hardware}[Hardware Compatibility List] : link:{u-rel130-readme}[Readme] : link:{u-rel130-errata}[Errata] : link:{u-rel130-signatures}[Signed Checksums]_ diff --git a/website/content/en/releng/_index.adoc b/website/content/en/releng/_index.adoc index a9f6fe301875..f3ed9665280c 100644 --- a/website/content/en/releng/_index.adoc +++ b/website/content/en/releng/_index.adoc @@ -33,6 +33,16 @@ General information about committing to -STABLE. |=== |Date |Event |Information |December 2024 |FreeBSD 14.2 |link:../releases/14.2R/schedule/[Target Schedule] +|March 2025 |FreeBSD 13.5 | +|June 2025 |FreeBSD 14.3 | +|December 2025 |FreeBSD 15.0 | +|March 2026 |FreeBSD 14.4 | +|June 2026 |FreeBSD 15.1 | +|September 2026 |FreeBSD 14.5 | +|December 2026 |FreeBSD 15.2 | +|March 2027 |FreeBSD 14.6 | +|June 2027 |FreeBSD 15.3 | +|December 2027 |FreeBSD 16.0 | |=== [[freeze]] @@ -47,7 +57,7 @@ This table lists the code freeze status for major branches of the `src/` reposit |`main` |Open |committers |Active development branch for 15.0-CURRENT. |`stable/14` |Open |committers |Development branch for FreeBSD 14-STABLE. |`releng/14.1` |Frozen |security-officer@FreeBSD.org |FreeBSD 14.1 supported errata fix branch. -|`releng/14.0` |Frozen |security-officer@FreeBSD.org |FreeBSD 14.0 supported errata fix branch. +|`releng/14.0` |Frozen |security-officer@FreeBSD.org |FreeBSD 14.0 errata fix branch (not officially supported). |`stable/13` |Open |committers |Development branch for FreeBSD 13-STABLE. |`releng/13.4` |Frozen |security-officer@FreeBSD.org |FreeBSD 13.4 supported errata fix branch. |`releng/13.3` |Frozen |security-officer@FreeBSD.org |FreeBSD 13.3 supported errata fix branch. diff --git a/website/content/en/security/_index.adoc b/website/content/en/security/_index.adoc index 7c6724775397..d9270002f57f 100644 --- a/website/content/en/security/_index.adoc +++ b/website/content/en/security/_index.adoc @@ -105,7 +105,6 @@ link:unsupported[Older releases] are not supported and users are strongly encour |Branch |Release |Release Date |Expected EoL |stable/14 |n/a |n/a |November 30, 2028 |releng/14.1 |14.1-RELEASE |June 4, 2024 |March 31, 2025 -|releng/14.0 |14.0-RELEASE |November 20, 2023 |September 30, 2024 |stable/13 |n/a |n/a |April 30, 2026 |releng/13.4 |13.4-RELEASE |September 17, 2024 |June 30, 2025 |releng/13.3 |13.3-RELEASE |March 5, 2024 |December 31, 2024 diff --git a/website/content/en/security/unsupported.adoc b/website/content/en/security/unsupported.adoc index 3d6dc05d8f6c..b1502ae77d32 100644 --- a/website/content/en/security/unsupported.adoc +++ b/website/content/en/security/unsupported.adoc @@ -61,4 +61,5 @@ The following releases are no longer supported but are listed here for reference |releng/13.0 |13.0-RELEASE |n/a |April 13, 2021 |August 31, 2022 |releng/13.1 |13.1-RELEASE |n/a |May 16, 2022 |July 31, 2023 |releng/13.2 |13.2-RELEASE |n/a |April 11, 2023 |June 30, 2024 +|releng/14.0 |14.0-RELEASE |n/a |November 20, 2023|September 30, 2024 |=== diff --git a/website/content/en/status/report-2024-07-2024-09/eim-nat.adoc b/website/content/en/status/report-2024-07-2024-09/eim-nat.adoc new file mode 100644 index 000000000000..dadd78f027e2 --- /dev/null +++ b/website/content/en/status/report-2024-07-2024-09/eim-nat.adoc @@ -0,0 +1,21 @@ +=== Endpoint-Independent NAT + +Contact: Tom Jones + +This project aims to add support for Endpoint-Independent Mappings for UDP to the pf and ipfw firewalls. + +End Point Independent NAT enables applications behind a NAT speaking to multiple remote hosts to receive the same mappings. +This allows an application without any NAT traversal mechanisms to work around NAT issues to perform peer discovery. +From the remote hosts perspective the NAT is transparent and it is as-if there is no NAT at all. +This form of NAT has been given several names over the last few decades and might be known as 'full-cone' NAT. + +Patches to pf landed in early September based on work by Damjan Jovanovic and Naman Sood with updates to work on pf in main. +The patches add a new 'endpoint-independent' suffix to UDP pf nat rules. + +ipfw support for endpoint-independent is going to be made available via libalias, allowing any system which uses libalias for address translation to benefit from the change. +There is an in-progress review https://reviews.freebsd.org/D46689[D46689] to add support to libalias. + +The in-progress change and the committed pf change could both benefit from testing in more and diverse environments. + +Sponsor: The FreeBSD Foundation +Sponsor: Tailscale diff --git a/website/content/en/status/report-2024-07-2024-09/wireless.adoc b/website/content/en/status/report-2024-07-2024-09/wireless.adoc new file mode 100644 index 000000000000..220b14c72877 --- /dev/null +++ b/website/content/en/status/report-2024-07-2024-09/wireless.adoc @@ -0,0 +1,26 @@ +=== Wireless Update + +Links: + +link:https://bugs.freebsd.org/bugzilla/showdependencytree.cgi?id=277512&hide_resolved=0[Categorised Wireless Problem Reports] URL: link:https://bugs.freebsd.org/bugzilla/showdependencytree.cgi?id=277512&hide_resolved=0[] + +Contact: Bjoern A. Zeeb + +Contact: The FreeBSD wireless mailing list + +The ongoing wireless efforts are trying to bring more support for recent chipsets as well as newer standards. + +With man:iwlwifi[4] and man:rtw88[4] being supported we received patches and initial reports for rtw89 and ath10k working for some people. +Additionally ath11k, ath12k and various chipsets supported by mt76 are waiting for someone to find the time to finish compat code, test and debug. + +Work is ongoing to update drivers to Linux v6.11 using the now bootstrapped vendor branches, which should help maintenance a lot in the future. +One particular focus for this update is also to find ways to minimize incompatibilities between wireless compat code versions in order to support multiple Linux versions as needed. + +After the native kern_malloc changes got committed, LinuxKPI is seeing ongoing work for memory allocation to play better by the rules set out in Linux which should help with DMA problems seen. +There is further work pending to add missing bus_dmamap_sync() calls. + +There is work to support man:rtw88[4] SDIO devices (being tested on an r2s-plus) and ongoing work to stabilize updated USB support which should start landing once the driver updates have finished. +Lastly there are more updates in the queue to finish 11n support for LinuxKPI 802.11 compat code as well as improving native net80211 code. + +If you have questions or feedback please use the link:https://lists.freebsd.org/subscription/freebsd-wireless[freebsd-wireless mailing list]. +That way everyone will see, be able to join in, and the answers will be publicly archived. + +Sponsor: The FreeBSD Foundation diff --git a/website/content/en/where.adoc b/website/content/en/where.adoc index 204ac03706f0..afa22ae030df 100644 --- a/website/content/en/where.adoc +++ b/website/content/en/where.adoc @@ -93,59 +93,6 @@ a| |=== -[[download-rel140]] -=== FreeBSD {rel140-current}-RELEASE - -[.tblbasic] -[.tblDownload] -[width="100%",cols="25%,25%,25%,25%",options="header",] -|=== -|Installer |VM |SD Card |Documentation -a| -* link:{url-rel}/amd64/amd64/ISO-IMAGES/{rel140-current}/[amd64] -* link:{url-rel}/i386/i386/ISO-IMAGES/{rel140-current}/[i386] -* link:{url-rel}/powerpc/powerpc/ISO-IMAGES/{rel140-current}/[powerpc] -* link:{url-rel}/powerpc/powerpc64/ISO-IMAGES/{rel140-current}/[powerpc64] -* link:{url-rel}/powerpc/powerpc64le/ISO-IMAGES/{rel140-current}/[powerpc64le] -* link:{url-rel}/powerpc/powerpcspe/ISO-IMAGES/{rel140-current}/[powerpcspe] -* link:{url-rel}/arm/armv7/ISO-IMAGES/{rel140-current}/[armv7] -* link:{url-rel}/arm64/aarch64/ISO-IMAGES/{rel140-current}/[aarch64] -* link:{url-rel}/riscv/riscv64/ISO-IMAGES/{rel140-current}/[riscv64] - -a| -* link:{url-rel}/VM-IMAGES/README.txt[README] -* link:{url-rel}/VM-IMAGES/{rel140-current}-RELEASE/amd64/Latest/[amd64] -* link:{url-rel}/VM-IMAGES/{rel140-current}-RELEASE/i386/Latest/[i386] -* link:{url-rel}/VM-IMAGES/{rel140-current}-RELEASE/aarch64/Latest/[aarch64] -* link:{url-rel}/VM-IMAGES/{rel140-current}-RELEASE/riscv64/Latest/[riscv64] -* link:{url-rel}/CI-IMAGES/{rel140-current}-RELEASE/amd64/Latest/[amd64] (BASIC-CI) - -a| -* aarch64 -* {blank} -** link:{url-rel}/arm64/aarch64/ISO-IMAGES/{rel140-current}/[PINE64-LTS] -** link:{url-rel}/arm64/aarch64/ISO-IMAGES/{rel140-current}/[ROCK64] -** link:{url-rel}/arm64/aarch64/ISO-IMAGES/{rel140-current}/[ROCKPRO64] -** link:{url-rel}/arm64/aarch64/ISO-IMAGES/{rel140-current}/[RPI] (3/4) -* armv7 -* {blank} -** link:{url-rel}/arm/armv7/ISO-IMAGES/{rel140-current}/[GENERICSD] -* riscv64 -* {blank} -** link:{url-rel}/riscv/riscv64/ISO-IMAGES/{rel140-current}/[GENERICSD] - -a| -* {blank} -* link:../releases/#current[Released]: {rel140-current-date} -* link:{u-rel140-notes}[Release Notes] -* link:{u-rel140-readme}[Readme] -* link:{u-rel140-hardware}[Hardware Compatibility List] -* link:{u-rel140-installation}[Installation Instructions] -* link:{u-rel140-errata}[Errata] -* link:{u-rel140-signatures}[Signed Checksums] - -|=== - [[download-rel134]] === FreeBSD {rel134-current}-RELEASE [.tblbasic] @@ -286,11 +233,11 @@ Installer and SD card images are available for link:{url-snapshot}/amd64/amd64/I VM images are available for link:{url-snapshot}/VM-IMAGES/{rel141-current}-STABLE/amd64/Latest/[amd64], link:{url-snapshot}/VM-IMAGES/{rel141-current}-STABLE/i386/Latest/[i386], link:{url-snapshot}/VM-IMAGES/{rel141-current}-STABLE/aarch64/Latest/[aarch64], and link:{url-snapshot}/VM-IMAGES/{rel141-current}-STABLE/riscv64/Latest/[riscv64]. -=== FreeBSD {rel133-current}-STABLE +=== FreeBSD {rel134-current}-STABLE -Installer and SD card images are available for link:{url-snapshot}/amd64/amd64/ISO-IMAGES/{rel133-current}/[amd64], link:{url-snapshot}/i386/i386/ISO-IMAGES/{rel133-current}/[i386], link:{url-snapshot}/powerpc/powerpc/ISO-IMAGES/{rel133-current}/[powerpc], link:{url-snapshot}/powerpc/powerpc64/ISO-IMAGES/{rel133-current}/[powerpc64], link:{url-snapshot}/powerpc/powerpc64le/ISO-IMAGES/{rel133-current}/[powerpc64le], link:{url-snapshot}/powerpc/powerpcspe/ISO-IMAGES/{rel133-current}/[powerpcspe], link:{url-snapshot}/arm/armv6/ISO-IMAGES/{rel133-current}/[armv6], link:{url-snapshot}/arm/armv7/ISO-IMAGES/{rel133-current}/[armv7], link:{url-snapshot}/arm64/aarch64/ISO-IMAGES/{rel133-current}/[aarch64], and link:{url-snapshot}/riscv/riscv64/ISO-IMAGES/{rel133-current}/[riscv64]. +Installer and SD card images are available for link:{url-snapshot}/amd64/amd64/ISO-IMAGES/{rel134-current}/[amd64], link:{url-snapshot}/i386/i386/ISO-IMAGES/{rel134-current}/[i386], link:{url-snapshot}/powerpc/powerpc/ISO-IMAGES/{rel134-current}/[powerpc], link:{url-snapshot}/powerpc/powerpc64/ISO-IMAGES/{rel134-current}/[powerpc64], link:{url-snapshot}/powerpc/powerpc64le/ISO-IMAGES/{rel134-current}/[powerpc64le], link:{url-snapshot}/powerpc/powerpcspe/ISO-IMAGES/{rel134-current}/[powerpcspe], link:{url-snapshot}/arm/armv6/ISO-IMAGES/{rel134-current}/[armv6], link:{url-snapshot}/arm/armv7/ISO-IMAGES/{rel134-current}/[armv7], link:{url-snapshot}/arm64/aarch64/ISO-IMAGES/{rel134-current}/[aarch64], and link:{url-snapshot}/riscv/riscv64/ISO-IMAGES/{rel134-current}/[riscv64]. -VM images are available for link:{url-snapshot}/VM-IMAGES/{rel133-current}-STABLE/amd64/Latest/[amd64], link:{url-snapshot}/VM-IMAGES/{rel133-current}-STABLE/i386/Latest/[i386], link:{url-snapshot}/VM-IMAGES/{rel133-current}-STABLE/aarch64/Latest/[aarch64], and link:{url-snapshot}/VM-IMAGES/{rel133-current}-STABLE/riscv64/Latest/[riscv64]. +VM images are available for link:{url-snapshot}/VM-IMAGES/{rel134-current}-STABLE/amd64/Latest/[amd64], link:{url-snapshot}/VM-IMAGES/{rel134-current}-STABLE/i386/Latest/[i386], link:{url-snapshot}/VM-IMAGES/{rel134-current}-STABLE/aarch64/Latest/[aarch64], and link:{url-snapshot}/VM-IMAGES/{rel134-current}-STABLE/riscv64/Latest/[riscv64]. [[install]] == Installation diff --git a/website/data/en/events/events2025.toml b/website/data/en/events/events2025.toml new file mode 100644 index 000000000000..6b77cc4ed4d5 --- /dev/null +++ b/website/data/en/events/events2025.toml @@ -0,0 +1,38 @@ +# Sort events by start date, with more recent events lower in the file +year = 2025 + +[[events]] +id = "asiabsdcon-2025" +name = "AsiaBSDCon 2025" +url = "https://2025.asiabsdcon.org/" +startDate = "2025-03-20" +endDate = "2025-03-23" +countryCode = "JP" +country = "Japan" +city = "Tokyo" +site = "Tokyo University of Science" +description = "AsiaBSDCon is a conference for users and developers on BSD based systems. The conference is for anyone developing, deploying and using systems based on FreeBSD, NetBSD, OpenBSD, DragonFlyBSD, Darwin and MacOS X. AsiaBSDCon is a technical conference and aims to collect the best technical papers and presentations available to ensure that the latest developments in our open source community are shared with the widest possible audience." + +[[events]] +id = "bsdcan-2025" +name = "BSDCan 2025" +url = "https://www.bsdcan.org/2025/" +startDate = "2025-06-11" +endDate = "2025-06-14" +countryCode = "CA" +country = "Canada" +city = "Ottawa" +site = "University of Ottawa" +description = "A four day BSD conference held in Ottawa, Canada. BSDCan hosts talks and tutorials on a range of topics based around the BSD family of operating systems." + +[[events]] +id = "eurobsdcon-2025" +name = "EuroBSDcon 2025" +url = "https://2025.eurobsdcon.org" +startDate = "2025-09-25" +endDate = "2025-09-28" +countryCode = "HR" +country = "Croatia" +city = "Zagreb" +site = "TBA" +description = "EuroBSDcon is the European annual technical conference gathering users and developers working on and with 4.4BSD (Berkeley Software Distribution) based operating systems family and related projects." diff --git a/website/static/security/advisory-template.txt b/website/static/security/advisory-template.txt index 406684788574..817233fc976e 100644 --- a/website/static/security/advisory-template.txt +++ b/website/static/security/advisory-template.txt @@ -10,10 +10,9 @@ Announced: 2024-XX-XX Credits: Affects: + 13.3 and later.", "FreeBSD 13.x", or "FreeBSD 14.1"> Corrected: 2024-XX-XX XX:XX:XX UTC (stable/14, 14.1-STABLE) 2024-XX-XX XX:XX:XX UTC (releng/14.1, 14.1-RELEASE-pXX) - 2024-XX-XX XX:XX:XX UTC (releng/14.0, 14.0-RELEASE-pXX) 2024-XX-XX XX:XX:XX UTC (stable/13, 13.4-STABLE) 2024-XX-XX XX:XX:XX UTC (releng/13.4, 13.4-RELEASE-pXX) 2024-XX-XX XX:XX:XX UTC (releng/13.3, 13.3-RELEASE-pXX) diff --git a/website/static/security/errata-template.txt b/website/static/security/errata-template.txt index f0cda1da47d3..49c68ee34f4c 100644 --- a/website/static/security/errata-template.txt +++ b/website/static/security/errata-template.txt @@ -10,10 +10,9 @@ Announced: 2024-XX-XX Credits: Affects: + 13.3 and later.", "FreeBSD 13.x", or "FreeBSD 14.1"> Corrected: 2024-XX-XX XX:XX:XX UTC (stable/14, 14.1-STABLE) 2024-XX-XX XX:XX:XX UTC (releng/14.1, 14.1-RELEASE-pXX) - 2024-XX-XX XX:XX:XX UTC (releng/14.0, 14.0-RELEASE-pXX) 2024-XX-XX XX:XX:XX UTC (stable/13, 13.4-STABLE) 2024-XX-XX XX:XX:XX UTC (releng/13.4, 13.4-RELEASE-pXX) 2024-XX-XX XX:XX:XX UTC (releng/13.3, 13.3-RELEASE-pXX) diff --git a/website/themes/beastie/layouts/index.html b/website/themes/beastie/layouts/index.html index 70bc0c5580d8..9c6caee343fc 100755 --- a/website/themes/beastie/layouts/index.html +++ b/website/themes/beastie/layouts/index.html @@ -68,8 +68,7 @@

  • {{ i18n "legacy" }}: {{ index $.Site.Data.releases "rel133-current" }}, - {{ index $.Site.Data.releases "rel134-current" }}, - {{ index $.Site.Data.releases "rel140-current" }} + {{ index $.Site.Data.releases "rel134-current" }}
  • {{ $betaUpcoming := index $.Site.Data.releases "beta-upcoming" }} {{ if ne $betaUpcoming "IGNORE" }} diff --git a/website/themes/beastie/layouts/partials/sidenav.html b/website/themes/beastie/layouts/partials/sidenav.html index 8c4613b49e5d..622c10cc2b72 100644 --- a/website/themes/beastie/layouts/partials/sidenav.html +++ b/website/themes/beastie/layouts/partials/sidenav.html @@ -58,7 +58,6 @@