diff --git a/860/Developer-Guide_Build-Switches/index.html b/860/Developer-Guide_Build-Switches/index.html index 229792c6..e2f30c22 100644 --- a/860/Developer-Guide_Build-Switches/index.html +++ b/860/Developer-Guide_Build-Switches/index.html @@ -2777,11 +2777,11 @@ root filesystem subvolume:
Welcome to the official documentation of Armbian Linux, a highly optimized base operating system specialized for single board computers (SBCs) and its extensive build framework.
"},{"location":"#how-is-the-documentation-structured","title":"How is the documentation structured?","text":"The table of contents in the sidebar and the links at the top of the page should let you easily access the documentation for your topic of interest.
If you are new to Armbian, the Introduction and the Getting Started sections provide everything you need to know about the project, where to find the resources for your board, and a tutorial for everything you need to get Armbian running and configured.
It then continues on to Advanced Configuration tasks and tools for advanced users. The topics in this section cover a wide range of tasks: configuring the system or the network without using armbian-config, configuring your device automatically at first boot, and creating a custom image using the Armbian Build Framework.
If you have read through the documentation and still need help, check out our Troubleshooting advice.
"},{"location":"#where-to-find-additional-help","title":"Where to find additional help?","text":"If you still cannot find what you need here, visit the Armbian forum where your input can also help us improving this documentation.
"},{"location":"#how-to-report-a-problem-in-this-documentation","title":"How to report a problem in this documentation?","text":"If you come across an issue in these pages, you can either report it here, or follow these instructions to suggest a fix yourself.
"},{"location":"#what-is-armbian","title":"What is Armbian?","text":"Armbian\u2019s goal is to provide a highly optimized base operating system specialized for single board computers. It embodies extremely lightweight hardware features with a well-known and supported Debian-based user-space experience, an extensive build framework, and it is suitable for industrial or home use.
Armbian is not a Linux distribution itself. Instead, we use Debian GNU/Linux and Ubuntu Linux as base for the images, that our users can download and deploy. We build our own set of optimized kernels for each board, and then provide an extensive and customizable framework to build, adjust, and configure these images. This framework is the heart of the project.
graph LR\n A[Hardware] --> B{50 x Armbian kernel};\n B --> X[\"point release\"];\n X ---->|minimal| E[Debian or Ubuntu];\n X ---->|server| F[Debian or Ubuntu];\n X -->|desktop| H[Debian or Ubuntu];\n H -->Q[XFCE];\n H -->W[Gnome];\n H -->R[KDE];\n H -->T[Cinnamon];\n"},{"location":"#key-features","title":"Key features","text":"As a user, you can simply download one of our images, deploy and run it on your SBC. As an advanced user, a manufacturer or provider, you can create fully configured custom images for your board or product.
In any case, you will get these key advantages:
/var/log is mounted as compressed device (zram, lzo) and the log2ram service saves the logs to disk daily and on shutdown/tmp is mounted as tmpfs (and can be optionally compressed)/etc/init.d/armhwinfo)/etc/fstab)Armbian distributes stable images for many different single board computers (SBCs). But not each model receives the same amount of support and maintenance. This might be due to lack of man-power, lack of support by the manufacturer, etc. We have therefore a system that shows the support status for each board:
Platinum Support
At least one person is providing constant maintenance and support.
Standard Support
Support is not secured, but it is still overall good.
Community maintained
Most of the images for boards in this category will also work, but no warranty can be given as Armbian does not monitor their status.
Supported / maintained is not a guarantee, though. It merely implies that a particular SBC is at a high level of software maturity and has a named maintainer. Due to the complexity and lack of cooperation in the ecosystem, it is unlikely that all specialized functionalities (like 3D, VE, I\u00b2C\u2026) are always available.
For more information see the Board Support Guide
"},{"location":"#where-to-find-images-and-sources","title":"Where to find images and sources?","text":"Our main website is https://www.armbian.com/. It is the default site for our users, and it contains the download section with all images, information about the support status for each board, links to our forum and this documentation.
The project sources are hosted on GitHub and are organized in separate Git repositories. These are the resources for developers and participants, e.g. users helping with testing.
"},{"location":"#how-can-you-contribute","title":"How can you contribute?","text":"If you want to contribute to our project, please read the collaboration notes.
Unit testingAll software targets and functions are automatically tested to catch as many problems as possible.
"},{"location":"Board_Maintainers_Procedures_and_Guidelines/","title":"Board Maintainers Procedures and Guidelines","text":"Board Maintainers Procedures and GuidelinesThis topic should give you as new board maintainers a brief overview about what you should do, must do, and can do. What you as maintainer can expect from Armbian and what we expect from you.
Requirements:
Even though you became a maintainer already just to make sure everything is set.
If you are a new maintainer, please make sure you have submitted your IDs and information using our maintainer registry form: Here
Maintaining:
So all requirements are met and you are a maintainer now. Now what?
Maintainers must not necessarily be persons with development experience. They act as a intersection between end-users and the development team and serve the developers in best-effort manner. They are encouraged to answer basic/simple user questions (if possible, also best effort) without having to bother the development team. They are allowed to record bugs but are not allowed to escalate bugs. Team leaders do.
Take note that it is still up to development team's discretion what gets attention since Armbian has to plan carefully how to spend its very limited resources.
Jira and Forum expectations:
Low priority issues are usually attended to and patched by the community. If the issue has existed for more than a release, you can create a Jira ticket for it. However the expectation is the issue will be low priority and may not be processed for some time. Issues such as, but not limited to, should be considered low priority:
For high priority items you can create a Jira ticket so that when developers are able, they can process it. If you are going to create a Jira ticket, please be sure to collect as much information about the issue as possible first. If more information will be needed to process the issue, you should reply to the user asking for that additional information and make sure it is included in the ticket. Issues like these should be considered a higher priority:
What should you do if you run into an issue on the forum?
What should you do if there is a long standing Jira ticket?
Losing support status:
As mentioned in the board support rules the support status of a board will be revoked for at least the current and upcoming release cycle(s) if a \"must\" of the Maintaining section above is not fulfilled.
As an example: August 30th is release date for 22.08 release, sign-off dead line is 21th. If maintainer misses the RC sign-off window the board is demoted to CSC for both 22.08 and 22.11 releases.
The development team may grant exceptions on their discretion.
Armbian's assistance:
If you have questions about maintainer-ship or want to learn more deeper insights about the build framework and such Armbian will provide you with all information in best-effort. If time allows we can explain and teach you personally various aspects about the project. Otherwise, if you want to learn more about the build framework, dive in, play with it and read the documenenation. Also if you have other concerns please do not hesitate to reach out via forums, IRC or Discord. Armbian cares about the people who care about Armbian\u00a0
"},{"location":"Community_Forums/","title":"Forums","text":"https://forum.armbian.com/
"},{"location":"Community_Github/","title":"Main project repositories","text":""},{"location":"Community_Github/#armbian-build","title":"Armbian Build","text":"armbian/build
Framework can build generic Armbian or custom Linux image.
"},{"location":"Community_Github/#armbian-config","title":"Armbian Config","text":"armbian/configng
Utility for configuring:
armbian/os
Armbian OS assembly line:
armbian/community
Armbian OS community assembly line:
armbian/distribution
Armbian OS with pre-installed applications:
Armbian short announcements are done via \ud835\udd4f (formerly known as Twitter): https://twitter.com/armbian and https://fosstodon.org/@armbian
"},{"location":"Community_IRC/#irc-channel-discord-matrix","title":"IRC Channel / Discord / Matrix","text":""},{"location":"Community_IRC/#overview","title":"\ud83d\udc4f Overview","text":"As announced in the forums everyone interested can communicate in realtime using the internet relay chat (or IRC for short). Well known IRC clients for CLI are Weechat or Irssi and for GUI Hexchat or Konversation. Mature clients for Matrix: Element or FluffyChat.
Besides that communication is also possible via Discord or Matrix (closed beta).
"},{"location":"Community_IRC/#how-to-connect","title":"\ud83d\udd0c How to connect","text":""},{"location":"Community_IRC/#irc","title":"IRC","text":"Libera network:
irc.libera.chat 6697 / non-encrypted: 6667 OFTC network:
irc.oftc.net 6697 / non-encrypted: 6667 #armbian and #armbian-announcements are available onlyIn order to enter main #armbian channels registration with Nickserv is mandatory on Libera. Check Libera Chat documentation for further information.
Simply click here: https://discord.com/invite/armbian
Channels starting with #armbian- are relayed between Discord and Libera IRC so it does not matter if you join IRC or Discord as both ends receive your messages. Check #welcome-and-rules for more information. The main #armbian channel and #armbian-announcements are relayed between Discord, Libera, OFTC and Matrix.
matrix.armbian.com#armbian:matrix.armbian.com and #armbian-announcements:matrix.armbian.com are available onlyForums registration terms and rules apply for our chats: https://forum.armbian.com/terms
"},{"location":"Community_IRC/#channels-depending-on-platform-only-a-limited-selection-might-be-available","title":"\ud83d\udcac Channels (depending on platform only a limited selection might be available)","text":"#armbian is the project\u2019s main channel. Issue tracking, peer-to-peer user support or upcoming release planning talks.#armbian-announcements : important messages from the Armbian team. You definitely want to idle here. Moderated channel#armbian-devel : build engine development topics#armbian-desktop : desktop environment development#armbian-csc unsupported/stating board talk#armbian-allwinner Allwinner-related SoC talk#armbian-amlogic Amlogic-related SoC talk#armbian-broadcom Broadcom-related SoC talk#armbian-rockchip Rockchip-related SoC talk#armbian-offtopic General chit chat, whatever that does not fit other channels#armbian-commits Whenever a new interaction with a repository on Github happens it will be announced. Moderated channelBesides the services offered by IRC (like Nickserv or Chanserv) Armbian has set up some own services (on Libera only).
ArmbianGithub
DC-IRC
#armbian- as well as #armbian.ArmbianHelper
,g Allwinner H6 panfrost.nonprofit, .sed, .contribute, .rtfm, .fortune, .sunxi, .meson, help, help irc, .tvboxes-- at the beginning and the bot will translate your message regardless of the source language into English. Note: This services will be activated manually on demand (like planned meetings for example) since its backend generates cost.@armbian/staff/lanefu or @user/username?/away [reason] command as intended. For an explanation please have a look at the ZNC Wiki.If you have any questions, comments regarding the IRC channels and/or services or found an issue in this documentation for think you can enhance it get in touch with Werner either via forums, IRC or Discord.
"},{"location":"Developer-Guide_Adding-Board-Family/","title":"Adding a new board or board family","text":"There are no detailed instructions on how to add a new board or even a whole new board family to the build script yet. However there are a few commits / pull requests that give clues how to achieve that like
Builds kernel and device tree (where applicable) and places it to the output/debs
Usage: Bash
./compile.sh kernel BOARD=nanopi-r5c BRANCH=edge\n"},{"location":"Developer-Guide_Build-Commands/#kernel-config","title":"kernel-config","text":"Automatically call kernel\u2019s make menuconfig (add or remove modules or features)
Usage: Bash
./compile.sh kernel-config BOARD=nanopi-r5c BRANCH=edge\n"},{"location":"Developer-Guide_Build-Commands/#dts-check","title":"dts-check","text":"Validate dts files and improve board & patch development overall.
This option validates the dts/dtb file for the selected board against the device tree bindings and outputs the validation logs to the user. It can be used when adding a new board, developing or improving a dts file.
Usage: Bash
./compile.sh dts-check BOARD=nanopi-r5c BRANCH=edge \n"},{"location":"Developer-Guide_Build-Commands/#inventory-boards","title":"inventory-boards","text":"Outputs a one-board-per-line CSV inventory of boards.
Sets TARGETS_FILE to something that doesn\u2019t exist, so the default-targets.yaml is used (so same list for everyone, save for userpatched-boards)
Usage: Bash
./compile.sh inventory-boards\n Outputs /info/boards-inventory.csv"},{"location":"Developer-Guide_Build-Commands/#kernel-dtb","title":"kernel-dtb","text":"Builds only DTB and outputs full preprocessed dts source
Outputs preprocessed DTS source for the board in question to output/ also outputs the same preprocessed DTS source, ran through dtc with input and output DTS formats for \u201cnormalized\u201d comparisons
Usage: Bash
./compile.sh kernel-dtb BOARD=xxxxx BRANCH=edge\n"},{"location":"Developer-Guide_Build-Commands/#uboot-patch","title":"uboot-patch","text":"Create patch files for u-boot.
The output patch files are written to output/patch/u-boot-${LINUXFAMILY}-${BRANCH}.patch. To use them in subsequent builds they must be copied to the appropriate directories in the patch/u-boot directory. See: user-provided patches
Any uncommitted changes in the work tree and index are committed to establish a clean work tree. It would be best if there are no uncommitted changes when running uboot-patch.
If there is an existing patch file at the output path specified above, it may be applied before continuing work.
When the prompt Press <ENTER\\> after you are done editing in ${pwd} appears, in a separate window, navigate to the specified directory and make any required changes. When changes are complete, return to the window running the uboot-patch command and press <ENTER>.
A patch to recreate the changes introduced to the u-boot tree is presented and the prompt \u201cAre you happy with this patch?\u201d. You can respond yes to accept the patch as-is and generate the output patch file, stop to abort the command without producing the output patch file, or anything else to loop back, to make further changes.
Instead of creating them while running uboot-patch, new device tree files should be created in the relevant dt directory under patch/u-boot and new _defconfig files should be created in the relevant configs directory under patch/u-boot. While the uboot-patch command will add these new files to the patch if they are created while running uboot-patch, this is not the preferred way of adding these files.
Prepares git, applies patches to git, and rewrites them back from git same as kernel, it does git archeology for mbox-less patches, etc.
Note: MAINTAINER and MAINTAINEREMAIL should be set.
Usage: Bash
./compile.sh rewrite-uboot-patches BOARD=xxxx BRANCH=edge \n"},{"location":"Developer-Guide_Build-Commands/#rewrite-kernel-patches","title":"rewrite-kernel-patches","text":"Prepares git, applies patches to git, and rewrites them back from git same as kernel, it does git archeology for mbox-less patches, etc.
Usage: Bash
./compile.sh rewrite-kernel-patches BOARD=xxxx BRANCH=edge \n"},{"location":"Developer-Guide_Build-Commands/#targets","title":"targets","text":"Generates output/info/git_sources.json file containing URL, branch, and commit hash combo.
The easiest way to generate file for all devices is to run ./compile.sh targets. Then, at the time of release, we will copy the output/info/git_sources.json file to config/sources/git_sources.json. Once the file is copied, the hash information from the file will be used to fetch resources for git repositories where branches are specified instead of tags or commits.
Usage: Bash
./compile.sh targets\n"},{"location":"Developer-Guide_Build-Preparation/","title":"Armbian Build Framework Quick Start Guide","text":""},{"location":"Developer-Guide_Build-Preparation/#requirements","title":"Requirements","text":"git clone https://github.com/armbian/build\ncd build \n Note
--branch=v24.11gitGraph\n commit\n commit\n checkout main\n commit id: \"v24.08\" tag: \"v24.08\"\n branch v24.08\n commit\n commit\n commit\n commit\n checkout main\n commit id: \"v24.11\" tag: \"v24.11\"\n branch v24.11\n commit\n commit\n commit\n commit\n checkout main\n commit\n commit\n commit\n commit\n commit\n commit\n commit id: \"main\" type: REVERSE tag: \"Trunk\""},{"location":"Developer-Guide_Build-Preparation/#interactive","title":"Interactive","text":"Run framework:
Bash./compile.sh\n Video "},{"location":"Developer-Guide_Build-Preparation/#cli","title":"CLI","text":"Bash./compile.sh [command] [switch...] [config...]\n Troubleshooting: \u2018unknown terminal type\u2019 error
When running the script, especially from modern terminal emulators (like Ghostty, Kitty, WezTerm), you might encounter an error like
\u2018xterm-ghostty\u2019: unknown terminal type
Quick workaround: you can force a more common terminal type before running the script: Bash
env TERM=xterm-256color ./compile.sh\n Only one command can be specified.
Switches are parameter settings that are used by the build framework itself (e.g. DEBUG=yes) or the specific command.
Config files are bash shell scripts that are sourced in the order specified. They are primarily used to set switches but might also set hook functions. They must be located in the userpatches directory and must be named config-${arg}.conf or config-${arg}.conf.sh (where ${arg} is the argument from the command line): one or the other, but not both.
Switches set on the commandline override settings from the config files, regardless of the order they appear on the comandline.
Comprehensive list of build Commands and Switches
Example:
Bash./compile.sh build \\\nBOARD=uefi-x86 \\\nBRANCH=current \\\nBUILD_DESKTOP=yes \\\nBUILD_MINIMAL=no \\\nDESKTOP_APPGROUPS_SELECTED='browsers chat desktop_tools' \\\nDESKTOP_ENVIRONMENT=gnome \\\nDESKTOP_ENVIRONMENT_CONFIG_NAME=config_base \\\nKERNEL_CONFIGURE=no \\\nRELEASE=noble\n Or, using config file userpatches/config-myboard.conf that sets all these switches:
./compile.sh build \\\nmyboard\n Interpretation?
This command will generate Ubuntu 24.04 Noble based Gnome desktop environment image for Intel based hardware (uefi-x86). Besides bare desktop, it will contain packages from browsers and desktop_tool sections and it will use unchanged kernel from current kernel branch.
"},{"location":"Developer-Guide_Build-Preparation/#logging","title":"Logging","text":"Logs are written to output/logs. Old logs (all but the current build) are compressed and moved to output/logs/archive.
Log formats are:
For much more verbose logs set switch \u2018DEBUG=yes\u2019.
"},{"location":"Developer-Guide_Build-Preparation/#github-actions","title":"GitHub Actions","text":"If you do not have the proper equipment to build images on your own, you can use our GitHub Action.
"},{"location":"Developer-Guide_Build-Switches/","title":"Build Switches","text":"These parameters are meant to be applied to the ./compile.sh command. They are all optional. They can also be added to your build configuration file to save time. Default values are marked bold if applicable.
BOARD ( string )
Set the name of the board manually to skip the dialog prompt. Name of the board is a filename without extension.
BRANCH ( string )
vendorlegacycurrent (recommended)edgeSet kernel and U-Boot branch manually to skip dialog prompt
Note
Some branches may not be available for all devices.
RELEASE ( string )
bookwormtrixiesidjammynobleSet packages release base manually to skip dialog prompt. Check here for currently available releases.
Note
Only stable and/or LTS upstream Debian or Ubuntu releases are officially supported. Others might work or not.
BUILD_MINIMAL ( string )
yes: build a bare CLI image suitable for application deployment. This option is not compatible with BUILD_DESKTOP=\"yes\"no: (default)BSPFREEZE ( string )
yes: freeze (from upgrade) armbian firmware packages when building images (U-Boot, kernel, DTB, BSP)no: (default)INSTALL_HEADERS ( string )
yes: pre-install kernel headersno: (default)NETWORKING_STACK ( string )
network-managersystemd-networkdnone (to not-add any networking extensions)Installs desired networking stack. If the parameter is undefined, it sets systemd-networkd for minimal images (MINIMAL=yes) and network-manager for the rest. Time synchronization is also changed; chrony is installed with network-manager, while systemd-timesyncd is used with systemd-networkd. In both cases, we control network settings using Netplan.
Build switch example
Bash./compile.sh NETWORKING_STACK=\"network-manager\"\n"},{"location":"Developer-Guide_Build-Switches/#host-environment","title":"Host environment","text":"EXPERT ( string )
yesShow development features and boards regardless of their support status in interactive mode.
CLEAN_LEVEL ( comma-separated list )
Defines what should be cleaned. Changing this option can be useful when rebuilding images or building more than one image
make-atf = make clean for ATF, if it is built.make-uboot = make clean for uboot, if it is built.make-kernel = make clean for the kernel if it is built. very slow.debs, alldebs = delete all packages in \u201c./output/debs\u201dimages = delete \u201c./output/images\u201dcache = delete \u201c./output/cache\u201dsources = delete cache/sources (all downloaded sources)oldcache = remove old cached rootfs except for the newest 8 filesextras = delete additional packages for the current release in output/debs/extraCARD_DEVICE ( string )
/dev/sdXAfter successful compilation, do a verified burn of the image to the specified storage device (flash media / SD card).
PREFER_DOCKER ( string ) - yes (default) - no
Docker assisted compilation is on by default. Set to no if you prefer running compilation natively.
DOCKER_ARMBIAN_BASE_IMAGE ( string )
ubuntu:jammy (default)ubuntu:nobledebian:bookwormDefines the build host when using a Docker container (default). Here, you can see which other options are available.
string )If enabled (true), the Docker build container will receive Docker credentials from the host (${HOME}/.docker/config.json) and the OCI_TARGET_BASE environment variable.
string )lib/functions/configuration/main-config.sh)Select the target for pull/push OCI cached images. If not set, default is used.
GHCR_MIRROR_ADDRESS ( string )
The default mirror address for ghcr.io, set by GHCR_MIRROR=dockerproxy, is ghcr.dockerproxy.com. When this address is unavailable, an alternative address can be set with GHCR_MIRROR_ADDRESS.
Example:
Bash./compile.sh GHCR_MIRROR=dockerproxy GHCR_MIRROR_ADDRESS=ghcr.libcuda.so\n KERNEL_COMPILER ( string )
The compiler used to compile the kernel. Usually, this option is set by the board config, but it can be set to clang to use LLVM to compile the kernel.
Example:
Bash./compile.sh KERNEL_COMPILER=clang\n OPENSSHD_REGENERATE_HOST_KEYS ( boolean )
- false (skip armbian-firstrun\u2019s OpenSSH host keys deletion and regeneration (eg: to let cloud-init set the SSH host keys) - true (execute armbian-firstrun\u2019s OpenSSH host keys deletion + regeneration)
Manage OpenSSH host key regeneration at armbian-firstrun service.
Example:
Bash./compile.sh OPENSSHD_REGENERATE_HOST_KEYS=false\n"},{"location":"Developer-Guide_Build-Switches/#filesystem","title":"Filesystem","text":"ROOTFS_TYPE ( string )
ext4 (default)f2fsbtrfsnilfs2xfsnfsCreate image with different root filesystems instead of default ext4. Requires setting FIXED_IMAGE_SIZE to something smaller than the size of your SD card for F2FS
BTRFS_COMPRESSION ( string )
lzononezlib (default)zstdWhen choosing ROOTFS_TYPE=btrfs, select btrfs filesystem compression method and compression level. By default, the compression is zlib.
Note
The script does not check the legality of the input variable (compression ratio). Input like zlib:1234 is legal to the script but illegal to the kernel. Beware that setting this option does affect image creation only (shrinking disk size) and will not adjust /etc/fstab, so it is up to the user to later edit /etc/fstab if compression in daily operation is also wanted (beware of severe performance penalties with random IO patterns and heavy compression algorithms!).
BTRFS_ROOT_SUBVOLUME ( string )
When using a BTRFS image as a file system, the volume / is placed on btrfs subvolume @. The same subvolume is set as default for mounting without specifying the subvol=@ option at the time the image is mounted.
Using BTRFS_ROOT_SUBVOLUME, you can set a different name for the root filesystem subvolume:
./compile.sh ROOTFS_TYPE=btrfs BTRFS_ROOT_SUBVOLUME=@root\n CRYPTROOT_ENABLE ( string )
LUKS (Linux Unified Key Setup) is a specification for block device encryption. It establishes an on-disk format for the data, as well as a passphrase/key management policy. LUKS uses the kernel device mapper subsystem via the dm-crypt module.
When enabled, you need to provide additional information:CRYPTROOT_PASSPHRASE=\"MYSECRECTPASS\" # Mandatory\nCRYPTROOT_AUTOUNLOCK=\"yes\" # Default: no. If set to yes you can omit CRYPTROOT_PASSPHRASE to do unattended unlocking\nCRYPTROOT_SSH_UNLOCK=\"yes\" # Default: yes\nCRYPTROOT_SSH_UNLOCK_PORT=\"2222\" # Default: 2022\nCRYPTROOT_MAPPER=armbian-root` # Default: armbian-root\nCRYPTROOT_PARAMETERS=\"custom cryptsetup options\" # Default: --pbkdf pbkdf2\n Tips and warnings
$USERPATCHES_PATH/dropbear_authorized_keys or they will be generated in output/images/*.key file=; separate switches with spacesINCLUDE_HOME_DIR ( string )
yesno (default)Include directories created inside /home in final image.
ENABLE_EXTENSIONS ( comma-separated list )
Extensions allows to extend the Armbian build system without overloading the core with specific functionality. Extensions, stored in folder extensions are called
Build switch example
Bash./compile.sh \\\nbuild \\\nBOARD=uefi-x86 \\\nBRANCH=current \\\nBUILD_DESKTOP=no \\\nBUILD_MINIMAL=no \\\nKERNEL_CONFIGURE=no \\\nRELEASE=noble \\\nENABLE_EXTENSIONS=mesa-vpu,nvidia \\\n CONSOLE_AUTOLOGIN ( string )
yes (default)noAutomatically login as root for local consoles at first run. Disable if your security threat model requires.
CPUTHREADS ( string )
Allows the user to override CTHREADS if CPUTHREADS is defined and a valid positive integer.
If not defined, defaults to 150% the number of CPU Threads available to maximize compilation speed.
USE_CCACHE ( string )
yesno (default)Use a C compiler cache. Generally not needed due to git-worktree . Can slow performance on clean builds.
PRIVATE_CCACHE ( string )
yesno (default)Use $DEST/ccache as ccache home directory. Setting yes to this will enable CCACHE as well.
KERNEL_BTF
yesnoDefault is to auto-detect based on build host available RAM. If not enough RAM available, use =no to accept building without BTF debug information, or use =yes to force building with BTF even if low RAM. Family code can set this to opt-out of BTF. For more information on BTF see https://docs.kernel.org/bpf/btf.html
ARTIFACT_IGNORE_CACHE ( string )
yesno (default)Enforce building from source instead of using pre-built artifacts.
SKIP_ARMBIAN_REPO ( string )
yesno (default)Enforce building without Armbian repository. Suitable for developing new releases or making custom images that don\u2019t need Armbian repository.
SECTOR_SIZE ( value ) - 512 (default, for SD/EMMC/\u2026) - 4096 (for UFS, requires util-linux >2.41. Tested on Debian Trixie host)
Enforce sfdisk to align partition sector sizes.
SHARE_LOG ( string )
yesno (default)Automatically upload full build logs for debugging to one of Armbian\u2019s paste servers at the end of the build process.
Example:
Bash./compile.sh SHARE_LOG=yes\n"},{"location":"Developer-Guide_Build-Switches/#build-options-below-need-to-be-retested-and-added-above-could-be-deprecated","title":"Build options below need to be retested and added above (COULD BE DEPRECATED)","text":"DO NOT USE! Obsolete documentation, new documentation above is in progress.
kernel-patch / uboot-patch / atf-patch CLI commands instead.output directory. If you want these patches included in a normal run (without CREATE_PATCHES to say), these files must be copied to the appropriate directories. Also, see user-provided patches.string ): bind mount cache/rootfs to defined folderstring ): bind mount cache/toolchain path to defined folderuserpatches folderoutput/debug/*.logyes in containers, but can be overriddengooglesource.com mirror for downloading mainline kernel sources, which may be faster than git.kernel.org depending on your locationgit.denx.de depending on your locationinteger ): create an image file of this size (in megabytes) instead of minimalinteger 96 ): set size (in megabytes) for separate /boot filesystem. Used if ROOTFS_TYPE set to non-ext4IPv4 address ): the DNS resolver used inside the build chroot. Does not affect the final image. Default: 1.0.0.1china | bfsu ): select download mirror for toolchain and debian/ubuntu packageschina: use mirrors.tuna.tsinghua.edu.cn; it will be very fast thanks to Tsinghua Universitybfsu: use mirrors.bfsu.edu.cn, the mirror of Beijing Foreign Studies Universityyes | no | http URL ): configures use of apt-cacher-ng, a cache for debian/ubuntu/etc apt repositories.yes sets up an automatically managed apt-cacher-ng instance on the build host. This mode is incompatible with container builds.apt-cacher-ng instance, e.g. \"http://apt-cacher.example.com:3142\"google | tuna | bfsu ): select mainline mirror of linux-stable.gitgoogle: use the mirror provided by Google, the same as USE_MAINLINE_GOOGLE_MIRROR=yestuna: use the mirror provided by Tsinghua Universitybfsu: use the mirror provided by Beijing Foreign Studies University, which is similar to tunagit.kernel.org, which may be very slow for mainland China usersgithub | gitee : select mainline mirror of u-boot.gitgithub: use the mirror provided by github, the same as USE_GITHUB_UBOOT_MIRROR=yesgitee: use the mirror provided by Gitee, a Chinese git servicessource.denx.de, which may be very slow for mainland China usersfastgit | gitclone | cnpmjs ): select download mirror for GitHub hosted repositoryfastgit: use the mirror provided by fastgit.orggitclone: use the mirror provided by gitclone.comcnpmjs: use the mirror provided by cnpmjs.orgchina ): select mirrors based on regional setting, will not overwrite explicitly specified mirror optionchina: MAINLINE_MIRROR=tuna, UBOOT_MIRROR=gitee, GITHUB_MIRROR=fastgit, DOWNLOAD_MIRROR=chinaEXTRAWIFIinteger, -20 to 19 ): automatically propagated from the initial compile.sh\u2019s nice value.debootstrap, else use mmdebstrapThis method works for building u-boot and kernel packages as well as building full OS images. Note! To write fresh-builded image directly to sdcard or other block device you have to enable Docker run in privileged mode. Uncomment line DOCKER_FLAGS+=(--privileged) in file userpatches\\config-docker.conf or your own docker-config file.
Building additional packages (EXTERNAL_NEW) is not supported.
Installation (https://docs.docker.com/engine/install/)
"},{"location":"Developer-Guide_Building-with-Docker/#details","title":"Details","text":"There are 3 options to start build process:
1. By passing configuration file name (config-<conf_name>.conf), stored in userpatches directory, as an argument: Text Only
./compile.sh docker <conf_name>\n 2. By passing addtional line arguments to compile.sh after docker: Text Only./compile.sh docker KERNEL_ONLY=yes BOARD=cubietruck BRANCH=current KERNEL_CONFIGURE=yes\n 3. Interactively run inside docker container Text Only./compile.sh docker-shell BOARD=rockpi-4a BRANCH=edge RELEASE=jammy\n The process creates and runs a named Docker container armbian with two named volumes armbian-cache and armbian-ccache, and mounts local directories output and userpatches.
Options 1 and 2 compile the same as without Docker but in separate environment to prevent changes to the base system.
The dockerfile of the created container is placed in userpatches directory, and all container-related options can be changed in userpatches/config-docker.conf file. Templates of both files are located in the config/templates directory.
The docker-shell interactive mode is useful for when you need to do more than just \u201cmake an image.\u201d This mode allows you to edit U-Boot and kernel sources before and after applying patches, investigate compilation errors, and so on.
This mode also allows you to manually run individual steps of the build process.
First, start docker-shell on the host build system: Text Only
@droid:~/armbian$ ./compile.sh docker-shell RELEASE=bullseye BOARD=rockpi-4a BRANCH=edge\n From there, RELEASE=bullseye BOARD=rockpi-4a BRANCH=edge are passed into shell and will be set into envirounment variables. Next, we can simply start building an image: Text Only
root@75ec76203b65:~/armbian# ./compile.sh\n Alternatively, you can run any function defined in the compile.sh script. For example, to compile U-Boot, prepare the environment with: Text Only
./compile.sh default prepare_host compile_sunxi_tools install_rkbin_tools\n Then, build U-Boot: Text Only./compile.sh default compile_uboot\n To compile only the source code as it is without patching or modifications, run: Text Only./compile.sh default COMPILE_ONLY=yes compile_uboot\n Note that you must enter docker-shell after a docker build, as you must download all of the required toolchains and sourcecodes beforehand."},{"location":"Developer-Guide_Building-with-Multipass/","title":"Building with Multipass","text":"In order to build an Armbian image from scratch, whether for development purposes or to apply user customizations on top of a base image, a build environment is required. Per the Armbian documentation, Ubuntu 24.04 is the officially supported build platform.
Multipass that is designed for quick and painless provisioning of Ubuntu VMs.
"},{"location":"Developer-Guide_Building-with-Multipass/#creating-a-vm-and-preparing-for-build","title":"Creating a VM and preparing for build","text":"Multipass is available for macOS, Windows and Linux platforms.
Once you have multipass installed, a Jammy (22.04) instance with 4 CPUs, 4GB of RAM and 25GB of space available can be provisioned with a single command:
Bashmultipass launch --cpus 4 --disk 25G --mem 4G --name jammy\n"},{"location":"Developer-Guide_Building-with-Multipass/#clone-the-build-repo","title":"Clone the build repo","text":"You can run commands direct on the instance to clone the build repo:
Bashmultipass exec jammy -- bash -c \"git clone --depth 1 https://github.com/armbian/build\" \n"},{"location":"Developer-Guide_Building-with-Multipass/#use-an-instance","title":"Use an instance","text":"Then you can get a shell to the instance and run the build as needed:
BashC:\\> multipass shell armbian\nWelcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.4.0-48-generic x86_64)\nLast login: Tue Jan 30 12:23:08 2024 from 172.22.111.1\n# Let's get building! \nubuntu@armbian:~$ cd build\nubuntu@armbian:~/build$ ./compile.sh BOARD=orangepizero ... etc\n"},{"location":"Developer-Guide_Building-with-Multipass/#share-data-with-an-instance","title":"Share data with an instance","text":"The recommended way to share data between your host and an instance with Multipass is the command:mount Bash
multipass mount /my/dir jammy\nmultipass info jammy\n Mounts: /my/dir => /my/dir
From this point on will be available inside the instance./my/dir
"},{"location":"Developer-Guide_Extensions-Hooks/","title":"Extension Hooks","text":"post_family_config","text":"give the config a chance to override the family/arch defaults
This hook is called after the family configuration (sources/families/xxx.conf) is sourced. Since the family can override values from the user configuration and the board configuration, it is often used to in turn override those.
Also known as (for backwards compatibility only):
config_tweaks_post_family_configuser_config","text":"Invoke function with user override
Allows for overriding configuration values set anywhere else. It is called after sourcing the lib.config file if it exists, but before assembling any package lists.
extension_prepare_config","text":"allow extensions to prepare their own config, after user config is done
Implementors should preserve variable values pre-set, but can default values an/or validate them. This runs after user_config. Don\u2019t change anything not coming from other variables or meant to be configured by the user.
"},{"location":"Developer-Guide_Extensions-Hooks/#post_aggregate_packages","title":"post_aggregate_packages","text":"For final user override, using a function, after all aggregations are done
Called after aggregating all package lists, before the end of compilation.sh. Packages will still be installed after this is called, so it is the last chance to confirm or change any packages.
Also known as (for backwards compatibility only):
user_config_post_aggregate_packagespost_determine_cthreads","text":"give config a chance modify CTHREADS programatically. A build server may work better with hyperthreads-1 for example.
Called early, before any compilation work starts.
Also known as (for backwards compatibility only):
config_post_determine_cthreadsadd_host_dependencies","text":"run before installing host dependencies
you can add packages to install, space separated, to ${EXTRA_BUILD_DEPS} here.
"},{"location":"Developer-Guide_Extensions-Hooks/#fetch_sources_tools","title":"fetch_sources_tools","text":"fetch host-side sources needed for tools and build
Run early to fetch_from_repo or otherwise obtain sources for needed tools.
"},{"location":"Developer-Guide_Extensions-Hooks/#build_host_tools","title":"build_host_tools","text":"build needed tools for the build, host-side
After sources are fetched, build host-side tools needed for the build.
"},{"location":"Developer-Guide_Extensions-Hooks/#pre_install_distribution_specific","title":"pre_install_distribution_specific","text":"give config a chance to act before install_distribution_specific
Called after create_rootfs_cache (prepare basic rootfs: unpack cache or create from scratch) but before install_distribution_specific (install distribution and board specific applications).
Also known as (for backwards compatibility only):
config_pre_install_distribution_specificpre_install_kernel_debs","text":"called before installing the Armbian-built kernel deb packages
It is not too late to unset KERNELSOURCE here and avoid kernel install.
post_install_kernel_debs","text":"allow config to do more with the installed kernel/headers
Called after packages, u-boot, kernel and headers installed in the chroot, but before the BSP is installed. If KERNELSOURCE is (still?) unset after this, Armbian-built firmware will not be installed.
post_family_tweaks","text":"customize the tweaks made by $LINUXFAMILY-specific family_tweaks
It is run after packages are installed in the rootfs, but before enabling additional services. It allows implementors access to the rootfs (${SDCARD}) in its pristine state after packages are installed.
pre_customize_image","text":"run before customize-image.sh
This hook is called before customize-image.sh is executed and before the overlay is mounted. It thus can be used for the same purposes as customize-image.sh without the overlay.
Also known as (for backwards compatibility only):
image_tweaks_pre_customizepost_customize_image","text":"post customize-image.sh hook
Run after the customize-image.sh script is run, and the overlay is unmounted.
Also known as (for backwards compatibility only):
image_tweaks_post_customizepost_post_debootstrap_tweaks","text":"run after removing diversions and qemu with chroot unmounted
Last chance to touch the ${SDCARD} filesystem before it is copied to the final media. It is too late to run any chrooted commands, since the supporting filesystems are already unmounted.
Also known as (for backwards compatibility only):
config_post_debootstrap_tweakspre_prepare_partitions","text":"allow custom options for mkfs
Good time to change stuff like mkfs opts, types etc.
Also known as (for backwards compatibility only):
prepare_partitions_customprepare_image_size","text":"allow dynamically determining the size based on the $rootfs_size
Called after ${rootfs_size} is known, but before ${FIXED_IMAGE_SIZE} is taken into account. A good spot to determine FIXED_IMAGE_SIZE based on rootfs_size. UEFISIZE can be set to 0 for no UEFI partition, or to a size in MiB to include one. Last chance to set USE_HOOK_FOR_PARTITION=yes and then implement create_partition_table hook_point.
Also known as (for backwards compatibility only):
config_prepare_image_sizepost_create_partitions","text":"called after all partitions are created, but not yet formatted
"},{"location":"Developer-Guide_Extensions-Hooks/#format_partitions","title":"format_partitions","text":"if you created your own partitions, this would be a good time to format them
The loop device is mounted, so ${LOOP}p1 is it\u2019s first partition etc.
"},{"location":"Developer-Guide_Extensions-Hooks/#pre_update_initramfs","title":"pre_update_initramfs","text":"allow config to hack into the initramfs create process
Called after rsync has synced both /root and /root on the target, but before calling update_initramfs.
Also known as (for backwards compatibility only):
config_pre_update_initramfspre_umount_final_image","text":"allow config to hack into the image before the unmount
Called before unmounting both /root and /boot.
Also known as (for backwards compatibility only):
config_pre_umount_final_imagepost_umount_final_image","text":"allow config to hack into the image after the unmount
Called after unmounting both /root and /boot.
Also known as (for backwards compatibility only):
config_post_umount_final_imagepost_build_image","text":"custom post build hook
Called after the final .img file is built, before it is (possibly) written to an SD writer.
${FINAL_IMAGE_FILE} It is the last possible chance to modify $CARD_DEVICE.run_after_build","text":"hook for function to run after build, i.e. to change owner of $SRC
Really one of the last hooks ever called. The build has ended. Congratulations.
extension_metadata_ready","text":"meta-Meta time!
Implement this hook to work with/on the meta-data made available by the extension manager. Interesting stuff to process:
\"${EXTENSION_MANAGER_TMP_DIR}/hook_point_calls.txt\" contains a list of all hook points called, in order.${EXTENSION_MANAGER_TMP_DIR}/hook_point.orig.md contains the hook documentation at the call site (inline docs), hopefully in Markdown format. - ${EXTENSION_MANAGER_TMP_DIR}/hook_point.compat contains the compatibility names for the hooks. - ${EXTENSION_MANAGER_TMP_DIR}/hook_point.exports contains exported environment variables. - ${EXTENSION_MANAGER_TMP_DIR}/hook_point.vars contains all environment variables.${defined_hook_point_functions} is a map of all the defined hook point functions and their extension information.${hook_point_function_trace_sources} is a map of all the hook point functions that were really called during the build and their BASH_SOURCE information.${hook_point_function_trace_lines} is the same, but BASH_LINENO info. After this hook is done, the ${EXTENSION_MANAGER_TMP_DIR} will be removed.\u201cI\u2019m gonna create a prepare_bootloader hook [in core] so we can refactor u-boot [into an extension]\u201d
The extensions framework allows the board/family developers, extension authors, and users to extend the Armbian build system without overloading the core with specific functionality.
It\u2019s a simple framework, written in Bash, that works based on function naming conventions. It provides the core and the extensions with tracing and debugging, (error control,?) inline documentation and very simple dependency resolution.
"},{"location":"Developer-Guide_Extensions/#terminology","title":"Terminology","text":"lib/ directory plus compile.sh and some others. It\u2019s the spine of the build system.extensions/ or userpatches/extensions/ directory, but could one day be in a separate repository too.call_extension_method(). This will discover all enabled extension methods implementations, order them, and call them one by one. - The Armbian core already has quite a few of these in strategic spots. - More are coming as they\u2019re identified.The Armbian core build system has an extension method called run_after_build, also known as the \u201crun_after_build hook\u201d. You can find it in lib/main.sh around line 546.
# in lib/main.sh:546\ncall_extension_method \"run_after_build\" [...]\n"},{"location":"Developer-Guide_Extensions/#extension-method-implementation","title":"Extension method implementation","text":"Consider the following function:
Bashfunction run_after_build__say_congratulations() { \n echo \"Congrats, the build is finished!\"\n}\n Such a function is an \u201cextension method implementation\u201d called say_congratulations for the extension method run_after_build.
A file userpatches/extensions/be-festive.sh containing the above function is an \u201cextension\u201d called be-festive.
An user of the build system can enable that extension by adding a call to enable_extension \"be-festive\" on his configuration file, or by passing ENABLE_EXTENSIONS=be-festive as a parameter to the build.
An extension method implementation is just a Bash function that follows the pattern run_after_build__say_congratulations where
run_after_build is the name of the extension method.__ is a marker/separator \u2013 very important \u2013 two underscores, not one, not three.say_congratulations is the name of the extension method implementation, and should be unique.The system will \u201cmagically\u201d compose a single run_after_build() function, based on all the hook functions that begin with run_after_build__.
Hook functions will be sorted by their numerical value; hook functions that do not begin with a number will receive 500_ prefix automatically.
So the examples run_after_build__do_this and run_after_build__500_do_this are equivalent, and will run
run_after_build__900_do_smth_elserun_after_build__300_do_even_another_thingA extension is Bash source file that contains exclusively:
__ separator) - other internal functions (for structure and clarity if needed)enable_extension \"another-extension\" at the top of the file. - that\u2019s a very simple dependency system, one extension can enable another.Specifically, extension files should not contain any code outside of functions \u2013 they should do nothing when sourced.
Extensions can be official Armbian fragments and live in /extensions, or can be user-specific in /userpatches/extensions.
An extension could be implemented in any of the following file/dir structures:
/extensions/our-ext.sh - an official, single-file extension./userpatches/extensions/my-ext.sh - a user-specific, single-file extension./extensions/our-dir-ext/our-dir-ext.sh - an official, directory-based extension./userpatches/extensions/my-dir-ext/my-dir-ext.sh - a user-specific, directory-based extensions.The official extensions can be used by boards, family includes, etc, while the user-specific extensions can only be used by userpatches code or via ENABLE_EXTENSIONS=my-ext,my-dir-ext build parameter.
They\u2019re the same, except:
${EXTENSION_DIR} environment variable.${EXTENSION_DIR} allows for easy moving and PR\u2019ing of user extensions.Any function making use of the extension framework [generally of the form hook_name__individual_function] can be skipped in a board or family config, by way of
unset -f hook_name__individual_function\n Doing so is at the board/family maintainer\u2019s own risk and doing so is officially unsupported. Consider splitting the function into pieces so that only the part the board/family cannot tolerate is skipped.
"},{"location":"Developer-Guide_Overview/","title":"Overview","text":""},{"location":"Developer-Guide_Overview/#what-it-does","title":"What it does?","text":"graph LR\n A[./compile.sh] --> B{Change<br>kernel<br>config};\n B ---> |yes| C[\"HW\"];\n B ---> |no| C[\"HW\"];\n C ---> |branch| D[\"legacy<br>vendor<br>current<br>edge\"];\n D --> |base| E[\"Debian<br>Ubuntu\"];\n E ---> |type| F[\"CLI\"];\n F ---> |type| G[\"Server\"];\n F ---> |type| H[\"Minimal\"];\n E ---> I[\"Desktop\"];\n I ---> K[\"XFCE\"];\n I ---> L[\"Gnome\"];\n I ---> M[\"Cinammon\"];\n I ---> N[\"KDE Neon\"];"},{"location":"Developer-Guide_Overview/#key-advantages","title":"Key Advantages","text":"Check other similarities, advantages and disadvantages compared with leading industry standard build software.
Function Armbian Yocto Buildroot Target general purpose embedded embedded / IOT U-boot and kernel compiled from sources compiled from sources compiled from sources Board support maintenance \u00a0 complete outside outside Root file system Debian or Ubuntu based custom custom Package manager APT any none Configurability limited large large Initramfs support yes yes yes Getting started quick very slow slow Cross compilation yes yes yes"},{"location":"Developer-Guide_Overview/#framework-structure","title":"Framework Structure","text":"Text Only\u251c\u2500\u2500 cache Work / cache directory\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 aptcache Packages\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 ccache C/C++ compiler\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 docker Docker last pull\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 git-bare Minimal Git\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 git-bundles Full Git\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 initrd Ram disk\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 memoize Git status\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 patch Kernel drivers patch\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 pip Python\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 rootfs Compressed userspaces\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 sources Kernel, u-boot and other sources\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 tools Additional tools like ORAS\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 utility\n\u251c\u2500\u2500 config Packages repository configurations\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 targets.conf Board build target configuration\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 boards Board configurations\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 bootenv Initial boot loaders environments per family\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 bootscripts Initial Boot loaders scripts per family\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 cli CLI packages configurations per distribution\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 desktop Desktop packages configurations per distribution\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 distributions Distributions settings\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 kernel Kernel build configurations per family\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 sources Kernel and u-boot sources locations and scripts\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 templates User configuration templates which populate userpatches\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 torrents External compiler and rootfs cache torrents\n\u251c\u2500\u2500 extensions Extend build system with specific functionality\n\u251c\u2500\u2500 lib Main build framework libraries\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 functions\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 artifacts\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 bsp\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 cli\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 compilation\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 configuration\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 general\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 host\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 image\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 logging\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 main\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 rootfs\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 tools\n\u251c\u2500\u2500 output Build artifact\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 deb Deb packages\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 images Bootable images - RAW or compressed\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 debug Patch and build logs\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 config Kernel configuration export location\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 patch Created patches location\n\u251c\u2500\u2500 packages Support scripts, binary blobs, packages\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 blobs Wallpapers, various configs, closed source bootloaders\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 bsp-cli Automatically added to armbian-bsp-cli package\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 bsp-desktop Automatically added to armbian-bsp-desktopo package\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 bsp Scripts and configs overlay for rootfs\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 extras-buildpkgs Optional compilation and packaging engine\n\u251c\u2500\u2500 patch Collection of patches\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 atf ARM trusted firmware\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 kernel Linux kernel patches\n| |\u00a0\u00a0 \u2514\u2500\u2500 family-branch Per kernel family and branch\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 misc Linux kernel packaging patches\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 u-boot Universal boot loader patches\n| \u251c\u2500\u2500 u-boot-board For specific board\n| \u00a0\u00a0 \u2514\u2500\u2500 u-boot-family For entire kernel family\n\u251c\u2500\u2500 tools Tools for dealing with kernel patches and configs\n\u2514\u2500\u2500 userpatches User: configuration patching area\n \u251c\u2500\u2500 config-example.conf User: example user config file\n \u251c\u2500\u2500 customize-image.sh User: script will execute just before closing the image\n \u00a0\u00a0 \u251c\u2500\u2500 atf User: ARM trusted firmware\n \u00a0\u00a0 \u251c\u2500\u2500 extensions User: Extend build system with specific functionality\n \u00a0\u00a0 \u251c\u2500\u2500 kernel User: Linux kernel per kernel family\n \u00a0\u00a0 \u251c\u2500\u2500 misc User: various\n \u00a0\u00a0 \u2514\u2500\u2500 u-boot User: universal boot loader patches\n"},{"location":"Developer-Guide_User-Configurations/","title":"User Configuration","text":""},{"location":"Developer-Guide_User-Configurations/#user-provided-patches","title":"User provided patches","text":"You can add your own patches outside the build script. Place your patches inside the appropriate directory, for kernel or u-boot. There are no limitations except that all patches must have the file name extension .patch. userpatches directory structure mirrors directory structure of patch. Look for the hint at the beginning of patching process to select the proper directory for patches. Example:
[ o.k. ] Started patching process for [ kernel sunxi-edge 4.4.0-rc6 ]\n[ o.k. ] Looking for user patches in [ userpatches/kernel/sunxi-edge ]\n Patches with the same file name and path in the userpatches directory tree override those in the patch directory. To replace a patch provided by Armbian maintainers, copy it from patch to the corresponding directory in userpatches and edit it to your needs. To disable a patch, create an empty file in the corresponding directory in userpatches.
A configuration file named userpatches/config-<something>.conf.sh (.conf also allowed) is a bash script that is sourced during the build if ./compile.sh something is issued. All parameters which normally are passed via command line can be used (PARAM1=value1 PARAM2=value) by using the same syntax, one separate line per PARAM. Command-line parameters still can override what is in the config file. More advanced use cases can use conditionals, define functions to implement hooks, source other/common config files, etc. A few, quite complex, examples can be found here.
userpatches/firstboot.conf\n When detected, the system displays an informational alert and applies the first config configuration.
"},{"location":"Developer-Guide_User-Configurations/#legacy-user-provided-configuration-deprecated-support-for-this-will-be-removed-at-some-point","title":"Legacy user provided configuration (deprecated, support for this will be removed at some point)","text":"If the file userpatches/lib.config exists, it will be called and can override the particular kernel and u-boot versions. For a comprehensive list of available variables, look through lib/functions/configuration/main-config.sh. Some examples of what you can change:
[[ $LINUXFAMILY == sunxi64 && $BRANCH == edge ]] && BOOTBRANCH='tag:v2017.09' # conditionally change u-boot git branch/tag\nKERNELBRANCH=\"tag:v5.4.28\" #always change to this kernel tag\n"},{"location":"Developer-Guide_User-Configurations/#user-provided-kernel-config","title":"User provided kernel config","text":"If the file userpatches/linux-$LINUXFAMILY-$BRANCH.config exists, it will be used instead of the default one from config. Look for the hint at the beginning of the kernel compilation process to select the proper config file name. Example:
[ o.k. ] Compiling current kernel [ 5.10.47 ]\n[ o.k. ] Using kernel config provided by user [ userpatches/linux-rockchip64-current.config ]\n"},{"location":"Developer-Guide_User-Configurations/#user-provided-sources-config-overrides","title":"User provided sources config overrides","text":"If file userpatches/sources/$LINUXFAMILY.conf exists, it will be used in addition to the default one from config/sources. Look for the hint at the beginning of the compilation process to select the proper config file name. Please note that there are some exceptions for LINUXFAMILY like sunxi (32-bit mainline sunxi) and sunxi64 (64-bit mainline sunxi)
Example:
Text Only[ o.k. ] Adding user provided sunxi64 overrides\n"},{"location":"Developer-Guide_User-Configurations/#user-provided-image-customization-script","title":"User provided image customization script","text":"You can run additional commands to customize the created image. Edit this file:
Text Onlyuserpatches/customize-image.sh\n and place your code here. You may test the values of variables noted in the file to use different commands for different configurations. Those commands will be executed in a chroot environment just before finalizing the image.
To add files to the image easily, put them in userpatches/overlay and access them in /tmp/overlay from customize-image.sh
Be advised that even though you are compiling an image on an amd64 machine, any additional apt packages you configure or commands you run in customize-image.sh will be automatically installed/executed/virtualized for the architecture of the build target SBC.
"},{"location":"Developer-Guide_User-Configurations/#partitioning-of-the-sd-card","title":"Partitioning of the SD card","text":"In case you define $FIXED_IMAGE_SIZE at build time the partition containing the rootfs will be made of this size. Default behaviour when this is not defined is to shrink the partition to minimum size at build time and expand it to the card\u2019s maximum capacity at boot time (leaving an unpartitioned spare area of ~5% when the size is 4GB or less to help the SD card\u2019s controller with wear leveling and garbage collection on old/slow cards).
You can prevent the partition expansion from within customize-image.sh by a touch /root/.no_rootfs_resize or configure the resize operation by either a percentage or a sector count using /root/.rootfs_resize (50% will use only half of the card\u2019s size if the image size doesn\u2019t exceed this or 3887103s for example will use sector 3887103 as partition end. Values without either % or s will be ignored).
Overview:
"},{"location":"Developer-Guide_Welcome/#ansi-logging","title":"(ANSI) Logging","text":"Log output is stored in output/logs and provided in a few different formats. ANSI coloring is applied to both the screen and the log files themselves. Please add SHARE_LOG=yes to automatically upload logs to our paste service and provide us with the given url when reporting issues. That will allows us to check the logs on a web browser and keep to correct formatting.
General CLI syntax: ./compile.sh PARAM=value OTHER_PARAM=other_value [<configfile> <configfile> ...] [<command>]
command defaults to build if not specified; could also be kernel-config or u-boot etc\u2026<command> (system will check & bomb if so)default config \u2013 you have to be explicitdocker config \u2013 Docker is fully auto-managed now. The system will complain if you have one.PARAM=value, <configfile> or <command> can be applied in any order.config-default.conf, config file name needs to be specified in the command line","text":"userpatches/config-xyz.conf \u2013 but the name has to be provided to the build system to, like ./compile.sh BOARD=xxx xyz; otherwise works the same.The armbian/build system is currently undergoing refactoring to improve its structure. Previously, the build system was a single, very complex bash script that mixed the building of .deb packages with the creation of images.
This was reworked into a 1-to-N image-to-artifact dependency tree; a certain image build will depend on N possible \u201cartifacts\u201d. Artifacts are either .deb packages, a .tar of multiple .deb packages, or a rootfs.tar.zstd. Each artifact can be individually built, and has a specific name and a version.
Each artifact is also now cached by default using OCI storage at ghcr.io (GitHub Container Registry). To achieve consistent caching, each artifact produces a version that includes hashes of its composing files, variables, patches, hooks, external git SHA1 references, etc. That way we can consistently check the remote OCI cache for previously-built artifacts, and possibly save image builders from having to build heavy packages just to produce an image.
"},{"location":"Developer-Guide_Welcome/#tldr-about-artifacts-and-caching","title":"TL;DR about artifacts and caching:","text":"KERNEL_ONLY=yes and KERNEL_ONLY=no are deprecated. Use the kernel CLI command instead.ARTIFACT_IGNORE_CACHE=yes can help with false positives. Please also report the problem, with a complete logfile.compile.sh will prefer to use Docker if it detects Docker is installed and working. - This handles Docker Desktop and Rancher Desktop (in Docker emulation mode) under macOS/Darwin, including Apple M1/M2. - You don\u2019t need and actually can\u2019t have the old docker config file.sudo to run the build as root.sudo.During the build, depending on which local or remote caches are hit, it might be necessary to build the Linux Kernel from scratch.
The kernel\u2019s git repo is huge. Most build systems resort to fetching \u201cshallow\u201d trees directly from upstream git servers, to save bandwidth. Unfortunately that creates immense extra CPU load on the git servers. To avoid this problem, Armbian produces daily automated git tree exports cached in ghcr.io OCI repositories, and only uses git fetch to update the relatively small new changes from the upstream git server.
There are two types of cached Kernel git trees:
full is a complete git tree, including all of Torvald\u2019s master and all of the currently-supported stable branches. - full is very large download and requires a lot of disk space. - full is more useful over time and when building multiple different kernels on the same machine, like for CI servers or developer workstations.shallow is a shallow tree for a specific stable branch - shallow is a much smaller download and requires less disk space - shallow is appropriate for restricted devices like SBCs which will build a single kernel**TL;DR: ** KERNEL_GIT=full or KERNEL_GIT=shallow or let the system decide for you.
Before cloning the repo, consider forking it first. This will allow you to make changes and submit pull requests. You will need a GitHub account to do this; see GitHub\u2019s documentation for more information. If you fork, make sure to keep your fork up-to-date with the main repo, by rebasing your fork.
"},{"location":"Developer-Guide_Welcome/#some-really-confusing-stuff-still-remains","title":"Some really confusing stuff still remains","text":"This is (by far) not a complete list:
We can build u-boot twice, using UBOOT_TARGET_MAP. Some example I did in https://github.com/armbian/build/blob/main/config/boards/odroidhc4.conf#L15-L20 may help.
This topic should give you as a developer a brief overview about what you should do, must do, aswell as can and can not do. What you as devepoler can expect from Armbian and what we expect from you.
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#Requirements","title":"Requirements:","text":"
Even though you may already be a developer, just to make sure, here is an outline of the expectations for this process:
Review Approve Merge Github ID Armbian Github Organisation Collaborator Armbian Github Organisation MemberArmbian Organization Members are required to have:
You should know development basics like how to get an Armbian image running on your hardware, do basic debugging, building a kernel and how to use the Armbian build system.
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#Code-Review","title":"Code Review:","text":"
Some helpful guidelines for pull requests and code reviews
It has often been said that programming is part art, part science - that is because lots of times there is no single, simple solution to a problem. Or if there is, we might not know about it. There is also an infamous joke that if there are n developers in the room, then there are n+1 opinions on how things should be done. That being said, here are some guidelines that should prevent friction when submitting or reviewing code.
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#The-most-important-thing","title":"The most important thing","text":"The code has to work.Unless you open a PR (\u201cpull request\u201d) as a work in progress, the code should be built and tested on a device or emulator. Do not rely on CI test automation!
If you have touched the build files and changed build setup, it is useful to test the whole build from scratch (clean build) and all of the types and flavours. If you updated external libraries, test the pertaining features. If you changed the build version, make a build and test that the version is correct.
Having people review your code is one thing, but you should not expect them to also test the code for you when not explicitly asked for.
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#Context","title":"Context","text":"One important thing that lots of guidelines forget to mention is the context of the pull request: Sometimes it is a big refactor, sometimes it is a new feature, sometimes it is a bugfix. Some of those might be more urgent than others, and sometimes you might be under pressure to ship ASAP so the code might not be perfect or there will not be any tests or code might not be extendable. That is ok.
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#Everyone","title":"Everyone","text":"If a pull request is fundamentally ready, but needs only trivial fixes (such as typos), consider demonstrating a bias for action by making those changes directly without going back to the author. You can do this by using the suggest changes feature to apply your own suggestions to the pull request.
Note that:
Authors are not authorized to merge their own pull requests and need to seek approval from another maintainer / developer to merge.
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#Armbians-Assistance","title":"Armbian's Assistance","text":"If you have questions about being a developer or want to learn more and deeper insights about the build framework, Armbian will try to guide you to the appropriate documentation or information in a best-effort fashion. If time allows, at our descrection, we will try our best to explain and teach you personally various aspects about our processes. If best effort guidance is not enough, contact us for professional assistance.
If you have any concerns please do not hesitate to reach out via forums, IRC or Discord. Armbian cares about the people who care about Armbian
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#References--Sources","title":"References / Sources:","text":"The Armbian mirror system is designed to efficiently distribute files, ensuring users get the best available server based on geographic proximity and server availability. This document outlines the mirroring system\u2019s operational flow, technical specifications for mirrors, and how to contribute a new server.
"},{"location":"Mirrors/#operational-flow","title":"Operational Flow","text":"User Request
https://dl.armbian.com). Redirector Server Processing
Mirror Assignment
Download from Assigned Mirror
If you would like to contribute to the Armbian project by providing a mirror, follow these steps:
"},{"location":"Mirrors/#1-choose-the-target-and-set-up-an-httphttps-hostname","title":"1. Choose the target and set up an HTTP/HTTPS hostname","text":"- The mirror must be accessible via HTTP, and HTTPS is preferred.
"},{"location":"Mirrors/#2-set-up-synchronization-via-rsync","title":"2. Set up synchronization viarsync","text":"- Sync files from one of the official repositories using the following commands:
Content Command Required Space Current imagesrsync -av rsync://rsync.armbian.com/dl 556G Packages rsync -av rsync://rsync.armbian.com/apt 84G Archived images rsync -av rsync://rsync.armbian.com/archive 1.9T Very old images rsync -av rsync://rsync.armbian.com/oldarchive 5.4T - Set up a cron job to sync every 2-4 hours.
"},{"location":"Mirrors/#3-inform-us-about-your-mirror","title":"3. Inform us about your mirror","text":"- Once your server is configured, contact us via the contact form to integrate it into the official redirector system.
Contributing a mirror helps improve Armbian\u2019s file distribution, ensuring faster and more reliable downloads for the global community.
"},{"location":"Mirrors/#current-mirrors","title":"Current Mirrors","text":"Site Time Zone Flag Speed Packages Images Archive Rsync Atomo\u00a0Networks Europe/Rome 2500\u00a0Mbps Auroradev\u00a0Chicago America/Chicago 1000\u00a0Mbps Auroradev\u00a0Las\u00a0Vegas America/Los_Angeles 10000\u00a0Mbps Nardol Europe/Paris 1000\u00a0Mbps Systemonachip Europe/Vienna 1000\u00a0Mbps Distrohub Europe/Kiev 1000\u00a0Mbps SBC\u00a0mirror\u00a0Spain Europe/Madrid 1000\u00a0Mbps Hetzner\u00a0Germany Europe/Berlin 1000\u00a0Mbps Imola Europe/Ljubljana 1000\u00a0Mbps Kspace\u00a0Estonia Europe/Tallinn 10000\u00a0Mbps AARNet Australia/Sydney 100000\u00a0Mbps Albony Asia/Kolkata 1000\u00a0Mbps Macarne\u00a0LLC Europe/Amsterdam 50000\u00a0Mbps Hostiko Europe/Kiev 20000\u00a0Mbps ISCAS Asia/Shanghai 10000\u00a0Mbps OSS\u00a0Planet Asia/Taipei 1000\u00a0Mbps Digital\u00a0Streaming\u00a0Co. Asia/Taipei 50000\u00a0Mbps VineHost.NET Europe/London 1000\u00a0Mbps Yandex Europe/Moscow 10000\u00a0Mbps Alibaba\u00a0Mirrors Asia/Shanghai 10000\u00a0Mbps BFSU Asia/Shanghai 10000\u00a0Mbps c0urier.net Europe/Copenhagen 1000\u00a0Mbps CSTCloud Asia/Shanghai 10000\u00a0Mbps dotsrc.org Europe/Copenhagen 20000\u00a0Mbps Jevin\u00a0Canders\u00a0LLC America/New_York 10000\u00a0Mbps Lahansons America/Los_Angeles 10000\u00a0Mbps Nanjing\u00a0University Asia/Shanghai 10000\u00a0Mbps Shandong\u00a0University Asia/Shanghai 10000\u00a0Mbps Shanghai\u00a0Tech\u00a0University Asia/Shanghai 10000\u00a0Mbps SUSTech Asia/Shanghai 10000\u00a0Mbps Tsinghua\u00a0University Asia/Shanghai 10000\u00a0Mbps USTC Asia/Shanghai 10000\u00a0Mbps Zhejiang\u00a0University Asia/Shanghai 500\u00a0Mbps Netcup\u00a0Germany Europe/Berlin 2500\u00a0Mbps Netcup\u00a0Germany Europe/Berlin 2500\u00a0Mbps Netcup\u00a0Germany Europe/Berlin 2500\u00a0Mbps JetHome Europe/Moscow 2000\u00a0Mbps Xogium Europe/Paris 500\u00a0Mbps"},{"location":"Process_Armbian-Task-Tracking/","title":"Armbian Task Management","text":""},{"location":"Process_Armbian-Task-Tracking/#overview","title":"Overview","text":"TLDR; Keep task discussions in the forum. GitHub Issues are just for task metadata.
Tasks associated with code will have an issue created in GitHub, but all dialog regarding tasks will reside on the forum in a topic containing the github Issue ID of the task.
"},{"location":"Process_Armbian-Task-Tracking/#what-is-a-task","title":"What is a task?","text":"A task is something actionable that results in some sort of tangible output. ex: code, documentation, QA findings.
Example sources of tasks include: feature requests, bugs, QA, general following of development roadmap.
Not all support issues are tasks, but a support issue can generate a task.
"},{"location":"Process_Armbian-Task-Tracking/#task-creation-procedure","title":"Task Creation Procedure","text":"[ISSUE_ID] - Issue Name - Create comment on GitHub Issue with the following Content:
Text Only Please keep all discussion for this issue on the forum topic available below:\n\n [URL](URL)\n -
Lock comments on GitHub Issue
GitHub Issues provide an easy method to track and filter tasks by using tags and milestones. Issues also make it easy to easily associate commits and merge requests with a task. Effectively we just use GitHub issues for the metadata for reporting.
"},{"location":"Process_Armbian-Task-Tracking/#labels","title":"Labels","text":"Use labels identify the purpose of a task.
bug is used to tag tasks that address Armbian-level bugsnot-our-bug is used to identify tasks that are bugs in upstream code. They are not Armbian bugs, but may impact Armbian.enhancement is used to identify tasks that are new features for Armbian.Use milestones to divide tasks into claimed and unclaimed work.
claimed tasks milestone contains tasks which have been assigned.unclaimed tasks milestone contains tasks that need an owner.Sometimes support discussions can become tasks. A forum admin can assist in moving the topic to Tasks forum group. A cooresponding issue will need to be created.
"},{"location":"Process_Armbian-Task-Tracking/#future-process-improvements","title":"Future Process Improvements","text":"Enhancements desired for this process (This should be a task!)
"},{"location":"Process_Armbian-Task-Tracking/#issue-hook","title":"Issue Hook","text":"Ideally we can have a forum topic created upon issue creation. This will save some time.
"},{"location":"Process_CI/","title":"Automation for developers and maintainers","text":"Core automation for generating images for release are held at armbian/os
"},{"location":"Process_CI/#prepare-build-lists","title":"Prepare build lists","text":""},{"location":"Process_CI/#recommended-images","title":"Recommended images","text":"Recommended images on download pages are defined via regular expression mapping file https://github.com/armbian/os/blob/main/exposed.map (for changes sent PR to this file)
Example:
Text Onlybananapim7/archive/Armbian_[0-9].*Bananapim7_noble_vendor_[0-9]*.[0-9]*.[0-9]*_gnome-kisak_desktop.img.xz\nbananapim7/archive/Armbian_[0-9].*Bananapim7_bookworm_vendor_[0-9]*.[0-9]*.[0-9]*_minimal.img.xz\n "},{"location":"Process_CI/#build-templates","title":"Build templates","text":"They have definitions on what kind of images we want to build - for section or for one specific board:
YAMLuserpatches/targets-release-apps.template\nuserpatches/targets-release-community-maintained.template\nuserpatches/targets-release-nightly.template\nuserpatches/targets-release-standard-support.template\n From those templates we are autogenerating YAML files, which are passed to build matrix as input. Make sure to review generated YAML files if they have wanted build targets with correct exensions enabled.
"},{"location":"Process_CI/#grouping-logic","title":"Grouping logic","text":"Boards are automatically divided into sections and each section is appendend to certain build scenario (minimal Debian image, Ubuntu testing with KDE, \u2026), which is defined in template.
Section Condition standard-support-slow-hdmi HAS_VIDEO_OUTPUT = yes AND ARCH = armhf standard-support-fast-hdmi HAS_VIDEO_OUTPUT = yes AND ARCH = arm64 standard-support-headless HAS_VIDEO_OUTPUT = no standard-support-riscv64 ARCH = riscv64Example: if you want automated images without a desktop, add HAS_VIDEO_OUTPUT=no in board config file. Automation will only build two CLI images, Ubuntu server and Debian minimal. Which is suitable for hardware that will most likely be used headless.
Autogeneration is excluded for boards that are on blacklists:
YAMLuserpatches/targets-automation.blacklist\nuserpatches/targets-automation-nightly.blacklist\n We do this if we are not happy with the automation outcomes and want to define build targets in the template.
"},{"location":"Process_CI/#extensions","title":"Extensions","text":"Each board variant can have additional extensions and they are defined in this file:
Text Onlyuserpatches/targets-extensions.map\n Example:
Text Onlykhadas-edge2,legacy:vendor:,ENABLE_EXTENSIONS=\"image-output-oowow,v4l2loopback-dkms,mesa-vpu\"\n"},{"location":"Process_CI/#kernel-descriptions-for-download-pages","title":"Kernel Descriptions for Download Pages?","text":"Each kernel branch can include an optional description, stored in kernel-description.json.
Unfortunatelly this part does not have testing at PR stage.
"},{"location":"Process_CI/#prepare-standard-support-images-for-release","title":"Prepare Standard Support images for release","text":"InfoManual executing permissions are tied to release manager role.
This build workflow is executed manually when making:
Notes:
Bump version: Select if you want to trigger system wide version bump. Version override: Set version under which you want to release images.
Images versions are stored in JSON files: - https://github.com/armbian/os/blob/main/stable.json - https://github.com/armbian/os/blob/main/nightly.json
"},{"location":"Process_CI/#3-run-workflow","title":"3. Run workflow","text":"(Workflow takes around 15 minutes to complete. In case of network issues it can also take hours)
Generated images are uploaded to incoming folder https://rsync.armbian.com/incoming/ under your GitHub username and once they are confirmed working, please notify @igorpecovnik to move them to official download pages. Once images are moved to main download section, automation refreshes download pages index within 15-30 minutes.
"},{"location":"Process_CI/#aditional-options","title":"Aditional options","text":"Generates stable images defined in targets-release-standard-support.yaml.
We are generating several images for each download / hardware target. They are automatically sorted by sections:
Images generation can be customized:
This build workflow is executed manually when making:
Notes:
Version override: Use this feature if you want to keep them under the same version, but not lower then last released.
"},{"location":"Process_CI/#3-run-workflow_1","title":"3. Run workflow","text":"(Workflow takes around 15 minutes to complete. In case of network issues it can also take hours)
Generated images are hosted at GitHub https://github.com/armbian/distribution/releases and released at once. Automation refreshes download pages within 15-30 minutes after/if workflow finished succesfully.
"},{"location":"Process_CI/#aditional-options_1","title":"Aditional options","text":"Generates dedicated application images defined in targets-release-apps.yaml. This file is autogenerated from targets-release-apps.template. (You always edit template)
Images generation can be customized:
This pulls packages from build framework OCI cache located at GitHub and from various 3rd party repositories such as Chrome, Chromium, Code, Discord, (latest) ZFS, Thunderbird, Zoom, \u2026 and pushes them to:
apt.armbian.com (only new packages are added)beta.armbian.com (whole repository is recreated from scratch)Action is executed automatically when artifact generations completes. Or manually.
"},{"location":"Process_CI/#2-include-artifacts-from-generated-images","title":"2. Include artifacts from generated image(s)","text":"When - [ ] Add https://netcup.armbian.com/partial/ to stable repo
is selected.
"},{"location":"Process_CI/#3-run-workflow_2","title":"3. Run workflow","text":"(Workflow takes around 60 minutes to complete)
"},{"location":"Process_CI/#build-all-artifacts-cronjob","title":"Build all artifacts (cronjob)","text":"Generates all build artifacts cache for targets defined in targets-all-not-eos.yaml. This build job runs every 8 hours and can also be run manually when needed.
This build job needs to be successfully completed in order to proceed generating any OS images!
"},{"location":"Process_CI/#build-rolling-release-images-cronjob","title":"Build Rolling Release Images (cronjob)","text":"Generates all nighly (Rolling Release) images defined in targets-release-nightly.yaml. This file is autogenerated from targets-release-nightly.template.
This build job runs every day at 9 a.m. UTC and can also be run manually when needed. Download pages are refreshed automatically after successful build.
"},{"location":"Process_CI/#watchdog-cronjob","title":"Watchdog (cronjob)","text":"Runs every 15 minutes and re-trigger failed builds six (6) times before finally gives out. This addresses various instabilities when building many artifacts on different hardware:
Smoke testing is preliminary testing to reveal simple failures severe enough to, for example, reject a prospective software release. Our test case is constructed of three steps:
Automatically label new pull request based on the paths of files which are being changed. Configuration file can be found in:
Text Only .github/labeler.yml\n"},{"location":"Process_CI/#full-distro-test-builds-cronjobrelease-manager","title":"Full distro test builds (cronjob/release manager)","text":"Generates all supported build combinations (minimal, cli, desktops) for x86 architecture to check package level changes inconsistency and dependencies.
Options:
Generates artifacts at Pull Requests code. Build starts when label of Pull Request is set to \u201cBuild\u201d. Requires administration privileges.
"},{"location":"Process_CI/#lint-on-shell-scripts-pr","title":"Lint on shell scripts (PR)","text":"Run ShellCheck on changed shell scripts and report problems within. Linting runs automatically on pull requests.
"},{"location":"Process_CI/#update-tools-in-build-scripts-cronjobadmin","title":"Update tools in build scripts (cronjob/admin)","text":"Some of our scripts download tools from a repo. These cannot be bumped by Dependabot, so this workflow is a self-created Dependabot to bump versions of those tools to stay up-to-date. This workflow only creates a PR if the version was actually updated. To add a new tool, it just needs to be added to the matrix in the script by filling out all the variables.
"},{"location":"Process_CI/#scorecards-security-scan-pr","title":"Scorecards security scan (PR)","text":"Scorecards is an automated tool that assesses a number of important heuristics (\u201cchecks\u201d) associated with software security and assigns each check a score of 0-10. You can use these scores to understand specific areas to improve in order to strengthen the security posture of your project. You can also assess the risks that dependencies introduce, and make informed decisions about accepting these risks, evaluating alternative solutions, or working with the maintainers to make improvements.
"},{"location":"Process_CI/#kernel-hardening-analysis-pr","title":"Kernel hardening analysis (PR)","text":"This analysis checks kernel configs and run if changed. There are plenty of security hardening options for the Linux kernel. A lot of them are not enabled by the major distros. We have to enable these options ourselves to make our systems more secure.
"},{"location":"Process_Contribute/","title":"Collaborate on the project","text":""},{"location":"Process_Contribute/#overview","title":"Overview","text":"If it is a new feature request, do not start the coding first. Remember to open an issue to discuss the new feature. If you want to add code to someone else pull request. Also check collection of git tips which will make your life easier.
If you are struggling, check WEB or CLI step-by-step guide on contributing.
"},{"location":"Process_Contribute/#source-code","title":"Source code","text":"There are no detailed instructions on how to add a new board or even a whole new board family to the build script yet. However there are a few commits / pull requests that give clues how to achieve that like
If you are interested in being a maintainer please review Board Support Rules. Then apply here and wait for acceptance. Once accepted you will be added to our infrastructure. For this reason we need additional information to complete your registration process.
Requirements?
Maintainers must not necessarily be persons with development experience. They act as a intersection between end-users and the development team and serve the developers in best-effort manner. They are encouraged to answer basic/simple user questions (if possible, also best effort) without having to bother the development team. They are allowed to record bugs but are not allowed to escalate bugs. Team leaders do.
Take note that it is still up to development team\u2019s discretion what gets attention since Armbian has to plan carefully how to spend its very limited resources.
What are we looking for?
If something does not work, this is fine and normal. The important part is that it is documented and we get notified about the issues. Known problems should be placed into the Jira ticket and link placed to the board download page. While not required, you should have a build environment setup so you can build images with the most recent images and test them right away. Your feedback, either positive or negative, is very welcome. You are free to add comments to every commit and pull request.
Ideally you have multiple microSD cards laying around to test regular updates on current releases and nightly without having to re-flash the same card every time to switch between branches.
Alternatively you can use auto-built images - they are placed at the ever end of each board download pages under \u201cRolling releases\u201d.
This role has additional permission that allows preparation of images for release.
Release managers: https://github.com/orgs/armbian/teams/release-manager
"},{"location":"Process_Managing_Workflow/","title":"Jira","text":"Jira where development work is entered and prioritized. https://armbian.atlassian.net/
"},{"location":"Process_Managing_Workflow/#issue-types","title":"Issue Types","text":"When creating issues, try to assign issue type most appropriate. Issue type can be changed later so don\u2019t worry too much. If possible assign to a \u201cFix Version\u201d aka Release.
The easiest way to follow the work queue Upcoming Release Kanban Board. This board lists only work select for the upcoming release.
Use the filter buttons at top to quickly see unassigned work, work assigned to you, bugs, and work recently updated.
Work is listed in 3 columns, and sorted by priority.
Columns: * Todo * Work prioritized to be done next * Pick up any task from this column * In Progress * Work In Progress * Done * Shows recently completed work. Has time limit to keep board clean
"},{"location":"Process_Managing_Workflow/#managing-work","title":"Managing Work","text":"All issues for an upcoming release are assigned a \u201cFix Version\u201d to indicate release number.
"},{"location":"Process_Managing_Workflow/#backlog","title":"Backlog","text":"With the Kanban Board, there are 2 states for the Upcoming Release backlog.
All issues for an upcoming release are assigned a \u201cFix Version\u201d to indicate release number.
"},{"location":"Process_Managing_Workflow/#mobile-access","title":"Mobile access","text":"You can download the app for Android or iOS.
"},{"location":"Process_Release-Model/","title":"Release Model","text":""},{"location":"Process_Release-Model/#rolling-releases","title":"Rolling releases","text":"Armbian provides automated daily rolling releases of small selection of images for all supported targets. Images are available at respective board download pages: https://www.armbian.com/download. Armbian also populates its own packages repository so updates are available as an upgrade for existing installations.
"},{"location":"Process_Release-Model/#point-releases","title":"Point releases","text":"Armbian runs \u201ctrain\u201d based point releases. Whatever is ready to board the train, does so. Whatever is not has to wait for the next train. This enables us to have a predictable release cycles making it easy to plan. It also puts the responsibility on developers to make sure they have features ready on time.
Armbian releases quarterly at the end of February, May, August, November. Offset is because we all know that nothing happens for half of December. At the beginning of a release cycle, we have a planning meeting and two weeks before the end of the release we freeze integration of new features.
"},{"location":"Process_Release-Model/#release-cycle","title":"Release Cycle","text":"Releases last three months. Each release starts with a meeting for planning. After planning, developers and development teams build their deliverable using whatever methods (scrum, kanban, waterfall, \u2026 ) they want but shall commit their code frequently, leading up to the last 2 weeks. The project does not accept \u201cdumps\u201d of code at the end. Commit early and often on master. Two weeks before the release date, we halt feature integration and only allow bug fixes. At some point during those two weeks, we start the release candidate process. This process starts by pulling a branch off master that will become the release branch. That frees up master for development on the next release. On the release candidate branch we work on bug fixes, and choose \u201crelease candidate\u201d, RC, tags. The software at that tag is a candidate for release, and it is submitted to automated and manual tests on real hardware. If automated tests are passing, we can officially tag it as the release. If it does not, we enter another bug fix cycle and create a new release candidate. We iterate until we have a candidate that can be the formal release. Usually, this takes 2-3 cycles and 1-3 weeks of time.
Development epics, stories and bugs for each release are tracked through Jira.
"},{"location":"Process_Release-Model/#release-branching-versioning-and-tags","title":"Release Branching, Versioning and Tags","text":"Branches in Armbian follow this convention:
main branch. This is the latest and greatest branch, but is always \u201cstable\u201d and \u201cdeployable\u201d. All tests always pass on this branch.Each Armbian release will have the following version format:
Format: <major>.<minor>.<revision>
<major> and <minor> version are incremented at the end of the release cycles while <revision> is incremented for a fix.
by https://www.codenamegenerator.com from unusual animals
"},{"location":"Process_Release-Model/#release-coordinating","title":"Release Coordinating","text":""},{"location":"Process_Release-Model/#summary","title":"Summary","text":"A release starts as a RC branch cut from main at freeze time. Once a RC branch is cut, main can be unfrozen and development can continue. RC branch is a rolling release that accepts bug fixes. The bug fixes should be cherry-picked back to main branch. Once the RC is stable, a final release as a branch named after its version. A release is never merged to main. Once a release is complete, it only should be updated for severe bugs and security vulnerabilities. A release is only maintained until the next release.
Armbian 24.02 (Kereru) Release ThreadText Only
Release Candidate Code Freeze Date: YYYY-MM-DD\nRelease Date: YYYY-MM-DD\nRelease Candidate Branch Link: URL\nRelease Changelog: URL\nRelease Coordinator: @yourname\nTesting Tracking Sheet: https://example.com/link (google sheets)\n\nThe goal of this thread is to discuss testing, bugfixes, and the overall quality of the release. Once the release is complete, this thread should be locked and unpinned. \n - Before Code Freeze \u2013 Make note in the thread the incomplete Jira issues tagged for the release example - After test images are procuded, engage in community for assistants wih testing.. forums, Twitter, etc. share this tool"},{"location":"Process_Release-Model/#2-release-candidate-branch-management","title":"2. Release Candidate Branch Management","text":"version-rc ex: v20.02.0-rcmain branch version to the NEXT release version with -trunk ex. If RC is v20.02.0-rc main becomes v20.05.0-trunk./compile.sh targets\ncp output/info/git_sources.json config/sources/\n following by commiting this code to build framework.Armbian Linux provides optimized Debian and Ubuntu Linux images for ARM-based SBCs. There is an incredible ecosystem of small computing platforms that are powerful alternatives to the Raspberry Pi. Armbian\u2019s mission is to provide a uniform system offering that is trustworthy to run on any of the dozens of OS-neglected ARM single board computers.
"},{"location":"Quick_facts/#challenges","title":"Challenges","text":""},{"location":"Quick_facts/#armbian-is-the-opposite-of-raspbian","title":"Armbian is the opposite of Raspbian","text":"Raspbian has dozens of contributors to focus on a single SBC platform. Armbian has a dozen contributors to focus on 100+ SBCs spread over 30 platforms.
"},{"location":"Quick_facts/#balancing-development-and-support","title":"Balancing Development and Support","text":"Given the point above, resources are thin. Armbian developers have to focus on the core mission of maintaining the Armbian Build Platform. We heavily rely on other members of the community to support each other. Although Armbian does provide a lot of user friendly features, the reality is that Armbian is for more advanced users. If you are really struggling with your SBC, you may want to consider first getting more comfortable with Raspbian Linux on the Raspberry Pi.
"},{"location":"Quick_facts/#more-sbcs-continuously-coming-to-market","title":"More SBCs continuously coming to market","text":"SBC and TV Box manufacturers love to design and ship new products. Unfortunately they do not like to spend time on software and instead rely on community projects such as Armbian to fill in the gaps.
"},{"location":"Quick_facts/#benefits","title":"Benefits","text":""},{"location":"Quick_facts/#simple","title":"Simple","text":"BASH or ZSH shell, standard Debian/Ubuntu utilities. Common and specific features can be with minimalistic menu-driven utility. Login is possible via serial, HDMI/VGA or SSH.
"},{"location":"Quick_facts/#light","title":"Light","text":"No bloatware or spyware. Special utilities are completely optional. Suitable for newcomers and professionals.
"},{"location":"Quick_facts/#optimized","title":"Optimized","text":"A distributed image is compacted to real data size and starts at around of 1G. Size is optimized for SD card usage. Bigger is better. Installing applications later severely reduces the life of your SD card. They were not designed for this type of usage.
"},{"location":"Quick_facts/#fast","title":"Fast","text":"Boards are optimized on kernel and userspace level. DVFS optimization, memory log caching, browser profile memory caching, swap usage tuning, garbage commit delay. Our system runs almost read-only and is one of the the fastest Linux for many development boards in just about every case.
"},{"location":"Quick_facts/#secure","title":"Secure","text":"Security level is on a stock Debian/Ubuntu level and can be hardened with the configuration utility. It provides a good starting point for industrial or home usage. The system is regularly inspected by professionals within the community. Each official stable build is thoroughly tested. Images are a direct base for all 3rd party builders.
"},{"location":"Quick_facts/#supported","title":"Supported","text":"Providing long term updates, security fixes, documentation, user support.
"},{"location":"Quick_facts/#smart","title":"Smart","text":"Deep understanding how boards work, how operating system work and how hardware should be designed to run better. Involved in board design. Experience in Linux since early 90\u2019. Specialized in ARM development boards since 2013.
"},{"location":"Quick_facts/#open","title":"Open","text":"Open source build script and kernel development, maintenance and distribution for more than 30 different ARM and ARM64 Linux kernels. Powerful build and software development tools. Can run in fully parallel mode. Can run under Docker.
"},{"location":"Release_Board-Maintainers/","title":"Board Maintainers","text":""},{"location":"Release_Board-Maintainers/#how-to-become-a-maintainer","title":"How to become a maintainer?","text":"If you are interested in being a maintainer please review Board Support Rules. Then apply here and wait for acceptance. Once accepted you will be added to our infrastruture. For this reason we need additional information to complete your registration process.
Requirements?
Maintainers must not necessarily be persons with development experience. They act as a intersection between end-users and the development team and serve the developers in best-effort manner. They are encouraged to answer basic/simple user questions (if possible, also best effort) without having to bother the development team. They are allowed to record bugs but are not allowed to escalate bugs. Team leaders do.
Take note that it is still up to development team\u2019s discretion what gets attention since Armbian has to plan carefully how to spend its very limited resources.
What are we looking for?
If something does not work, this is fine and normal. The important part is that it is documented and we get notified about the issues. Known problems should be placed into the Jira ticket and link placed to the board download page. While not required, you should have a build environment setup so you can build images with the most recent images and test them right away. Your feedback, either positive or negative, is very welcome. You are free to add comments to every commit and pull request.
Ideally you have multiple microSD cards laying around to test regular updates on current releases and nightly without having to re-flash the same card every time to switch between branches.
Alternatively you can use auto-built images - they are placed at the ever end of each board download pages under \u201cRolling releases\u201d.
edge Linux-6.16.y`. by @pyavitz in armbian/build#8709edge to rc5. by @EvilOlaf in armbian/build#8908All-repository triage role. by @igorpecovnik in armbian/armbian.github.io#66inventory-artifacts cli. by @rpardini in armbian/build#8910vendor uboot. by @EvilOlaf in armbian/build#8807edge to 6.18-rc4, rewrite patches. by @EvilOlaf in armbian/build#8864current. by @EvilOlaf in armbian/build#8912Work in progress label for maintainers synhronization. by @igorpecovnik in armbian/build#8551EDGE to linux-6.17.y. by @pyavitz in armbian/build#8784uboot-config now prints diff with pre-menuconfig defconfig. by @rpardini in armbian/build#8855Fixups. by @pyavitz in armbian/build#8303Update linux-6.6.95 to 99. by @pyavitz in armbian/build#8411Revert bluetooth changes from last PR. by @pyavitz in armbian/build#8344Update u-boot to v2025.01 and fixup bluetooth. by @pyavitz in armbian/build#8339improve SDIO WiFi speeds and set default CPUFREQ speeds. by @pyavitz in armbian/build#8495edge to 6.16.0-rc7. by @EvilOlaf in armbian/build#8406lan* and wan* interfaces as well. by @djurny in armbian/build#8259User-Guide_Autoconfig.md. by @ZoomRmc in armbian/documentation#758rtl8723ds bluetooth support. by @pyavitz in armbian/build#8351Switch back to u-boot-v2024.10. by @pyavitz in armbian/build#8216make clean fails (logs to bitbucket), do it again, but show the logs. by @rpardini in armbian/build#8241music into media and sort the alphabetically . by @igorpecovnik in armbian/configng#611CONFIG_RANDOMIZE_BASE=y. by @pyavitz in armbian/build#8354current and edge dts. by @EvilOlaf in armbian/build#8343current. by @mdziekon in armbian/build#8430CONFIG_NETKIT=y. by @rpardini in armbian/build#8237edge to 6.15.y. by @EvilOlaf in armbian/build#8297edge to 6.16. by @EvilOlaf in armbian/build#8390chroot_sdcard_custom_with_apt_logic() for reuse. by @rpardini in armbian/build#8245EDGE support. by @pyavitz in armbian/build#8481Update to linux-6.6.93. by @pyavitz in armbian/build#8274Enable audio support. by @pyavitz in armbian/build#8221Add INPUT_TOUCHSCREEN and INPUT_MISC. by @pyavitz in armbian/build#8385Enable Armbian auto-patch, add BPI-M4-Zero to DT dir and set PANFROST/LIMA to =m. by @pyavitz in armbian/build#8394Enable CONFIG_PPS_CLIENT_*. by @pyavitz in armbian/build#8409Update CONFIG_CAN_* and CONFIG_CPU_FREQ_*. by @pyavitz in armbian/build#8383kde-neon to stable, switch support to csc. by @EvilOlaf in armbian/build#8519current RT config file. by @jsuhaas22 in armbian/build#8280add the most up-to-date regulatory.db. by @pyavitz in armbian/firmware#111quartz64a: bump u-boot to v2025.04 final and make it fancy. by @rpardini in armbian/build#8250Enable GPU and add Audio nodes by @pyavitz in armbian/build!8191sunxi: mmc: Improve reset procedure by @pyavitz in armbian/build!7943Fixup patch name association by @pyavitz in armbian/build!8099v2025.04 (drop -rc4) from u-boot patch folder name; bump v2025.04-rc4 -> v2025.04-rc5 by @rpardini in armbian/build!8035current builds by @EvilOlaf in armbian/build!7993edge u-boot to mainline by @EvilOlaf in armbian/build!8082lib.config from README.me, create proper example by @EvilOlaf in armbian/build!8090Add CONFIG_NFT_FLOW_OFFLOAD=m by @pyavitz in armbian/build!7951Add CONFIG_TUN=m by @pyavitz in armbian/build!8162Enable PPPoe Module by @pyavitz in armbian/build!8073current u-boot to v2025.01 by @EvilOlaf in armbian/build!8012Automatic board configs status synchronise by @github-actions in armbian/build!7496edge from 6.11 to 6.12 via rename by @rpardini in armbian/build!7490WIREGUARD is deprecated by @EvilOlaf in armbian/build!7520Automatic board configs status synchronise by @github-actions in armbian/build!7508Enable i2c2 via overlay by @pyavitz in armbian/build!7540Automatic board configs status synchronise by @github-actions in armbian/build!7534branch:rk-6.1-rkr4.1 by @rpardini in armbian/build!7546Automatic board configs status synchronise by @github-actions in armbian/build!7545platform_install.sh (created from functions like write_uboot_platform) for shellcheck errors by @rpardini in armbian/build!7509Automatic board configs status synchronise by @github-actions in armbian/build!7561Automatic board configs status synchronise by @github-actions in armbian/build!7564Add overlay support and pin ctrl by @pyavitz in armbian/build!7568Acquire-By-Hash by @igorpecovnik in armbian/build!7574Automatic board configs status synchronise by @github-actions in armbian/build!7573Automatic board configs status synchronise by @github-actions in armbian/build!7594edge to 6.12 via copy by @The-going in armbian/build!7577Automatic board configs status synchronise by @github-actions in armbian/build!7624<vendor>/<board>.dtb format by @rpardini in armbian/build!7620lib/functions/general/oci-oras.sh by @github-actions in armbian/build!7586Update kernel to 6.6.y and other fixups by @pyavitz in armbian/build!7616rk356x-fix-pcie2-reset.patch by @rpardini in armbian/build!7645argument list too long errors when too many git changes present; fixes #6993 by @rpardini in armbian/build!7644if_error_find_files_sdcard if looking for full paths (shows DKMS log correctly) by @rpardini in armbian/build!7653oldconfig to olddefconfig for less messy output; better logging by @rpardini in armbian/build!7654rock-s0 / rockpi-s: quote board vars by @rpardini in armbian/build!7650LINUXFAMILY=bcm2712 as it is exactly the same as bcm2711 by @rpardini in armbian/build!7642rk35xx/legacy: rewrite-kernel-patches & rewrite-kernel-config, no changes by @rpardini in armbian/build!7658Automatic board configs status synchronise by @github-actions in armbian/build!7669Update to linux-6.6.70 & overclock to 1.8GHz by @pyavitz in armbian/build!7685Enable FW_LOADER_COMPRESS support by @pyavitz in armbian/build!7694Pull branch instead of commit by @pyavitz in armbian/build!7722post_armbian_repo_customize_image and post_repo_customize_image by @rpardini in armbian/build!7719CONFIG_CFG80211=m and CONFIG_MAC80211=m on 6.13+ by @rpardini in armbian/build!7728lib/functions/general/oci-oras.sh by @github-actions in armbian/build!7707lib/functions/general/bat-cat.sh by @github-actions in armbian/build!7706Automatic board configs status synchronise by @github-actions in armbian/build!7735Automatic board configs status synchronise by @github-actions in armbian/build!7743edge u-boot to 2025.01 by @EvilOlaf in armbian/build!7770Update DTS and Defconfig by @pyavitz in armbian/build!7773patch fail fixup by @pyavitz in armbian/build!7777Update to tag k1-bl-v2.1-release by @pyavitz in armbian/build!7780current by @EvilOlaf in armbian/build!7768Automatic board configs status synchronise by @github-actions in armbian/build!7781Update u-boot to v2025.01 by @pyavitz in armbian/build!7788Update u-boot to v2025.01 by @pyavitz in armbian/build!7789KERNEL_BTF=no to opt-out of BTF/CO-RE type-info on low-RAM machines by @rpardini in armbian/build!7675HAS_VIDEO_OUTPUT by @EvilOlaf in armbian/build!7810Automatic board configs status synchronise by @github-actions in armbian/build!7806General update to improve overall support by @pyavitz in armbian/build!7833current by @EvilOlaf in armbian/build!7842setexpr; patch 2025.01 for fileenv; enable squashfs support by @rpardini in armbian/build!7769BOARD_MAINTAINER=\"pyavitz\" by @pyavitz in armbian/build!78706.1-rkr3: sync FriendlyElec\u2019s DTs from vendor (common, R6S, R6C, T6, CM3588) + add T6-LTS DT by @rpardini in armbian/linux-rockchip!209BPI-M4-Zero updates, fixups and rev2 support by @pyavitz in armbian/build!7317sun50i-h616-light dt overlay fix to 6.10 by @JohnTheCoolingFan in armbian/build!7204curl with --fail flag so server 400/500 errors actually trigger a retry by @rpardini in armbian/build!7487Fixup U-Boot and Linux DTS/DTSI and add WiFi / BT overlay by @pyavitz in armbian/build!7332Improve support by @pyavitz in armbian/build!7355improve SDIO WiFi speeds by @pyavitz in armbian/build!7193BOOTPATCHDIR and bump to 2024.10 by @ColorfulRhino in armbian/build!7377lib/tools/shellfmt.sh by @github-actions in armbian/build!7255lib/tools/shellfmt.sh by @github-actions in armbian/build!7433WIREGUARD once and for all by @EvilOlaf in armbian/build!7452iostat error on MINIMAL by @EvilOlaf in armbian/build!7454sun50i-h616-light device tree overlay by @JohnTheCoolingFan in armbian/build!7183update to u-boot-v2024.07 by @pyavitz in armbian/build!7328CONFIG_KPROBES by @rpardini in armbian/build!7162CONFIG_INPUT_PWM_BEEPER=m by @rpardini in armbian/build!7167dt folder overwrite pre-existing files (DTs that landed upstream) by @rpardini in armbian/build!72710001-general-add-overlay-support.patch by @rpardini in armbian/build!7240<&fan> alias for device tree by @alexl83 in armbian/build!7151wip/sc8280xp-6.11 (final) from -rc5 by @rpardini in armbian/build!7260Userspace Switching armbian-config to new generation. by @igorpecovnik in armbian/build!7189Userspace: UX changes at MOTD and first login by @igorpecovnik in armbian/build!7174current branch (6.8) by @ColorfulRhinoadd_host_dependencies by @rpardinii2c8-m2 overlay by @rpardinicurrent kernel branch for some boards by @ColorfulRhinoNETWORKING_STACK to control network exts; allow \u201cnone\u201d; fix typo by @rpardinidts-check command and use Pip for some Python packages instead of APT by @ColorfulRhinoorphan_file (FEATURE_C12) for ext4 filesystems on 1.47+ e2fsprogs host by @rpardiniTask template for project management by @ColorfulRhinocsc status by @rpardini# prefix by @ColorfulRhinofw version 0xb5d66dcb by @pyavitz-u: rationalize paste server retrying, use ANSI dmesg by @rpardinimedia boards into the rockchip64 family by @ColorfulRhinoBOARDFAMILY rk322x (now integrated into the rockchip family) by @ColorfulRhinopackages/extras-buildpkgs by @ColorfulRhinoedge branch (6.9.y) by picking DT from linux-rockchip#for-next & using Kwiboo\u2019s 24.07 u-boot by @rpardiniwireless at firstlogin script by @igorpecovnikpipetty in place of unbuffer by @rpardinis5p6818 board family by @ColorfulRhinonext-dev-v2024.03 by @rpardinilegacy kernel target from board configs by @ColorfulRhinolegacy kernel 4.4 support by @ColorfulRhinofixups by @pyavitzNETWORKING_STACK in main config and add armhf support to Trixie by @ColorfulRhinoshellfmt and add board configs to formatting list by @ColorfulRhinowip/sc8280xp-6.10-rc6; add fprintd back to Trixie; fixes by @rpardiniu-boot-radxa-rk35xx scheme by @rpardiniu-boot-radxa-rk35xx scheme by @rpardinicommit mount option for btrfs and ext4 to 120 by @ColorfulRhinolegacy 4.19 to current 6.6 kernel by @ColorfulRhinowip/sc8280xp-6.10-rc7 by @rpardini6.10-rc7 by @rpardiniBump u-boot to v2024.07 by @pyavitzupdate to BL v1.0.8 by @pyavitzuboot_cflags variable to before its first use by @ColorfulRhinoFixups by @pyavitzlib/functions/general/shellcheck.sh by @github-actionslib/functions/general/oci-oras.sh by @github-actionslib/functions/general/bat-cat.sh by @github-actionsHOME to be set (fixes download-artifact) by @rpardiniwrite_uboot_platform: eMMC Support by @pyavitzuse actual u-boot.bin by @pyavitzdrv-spi-spidev-remove-warnings.patch by @alexl83drv-spi-spidev-remove-warnings.patch by @alexl83CONFIG_SECURITY_DMESG_RESTRICT kernel option by @alexl83build@armbian for kernel builds by @ColorfulRhinoedge kernel from 6.10 to 6.11-rc and current from 6.8 to 6.10 by @efectnCONFIG_SECURITY_DMESG_RESTRICT kernel option by @alexl83rfkill-bt device node to Radxa Rock-5B by @alexl83remove fan control by @pyavitzRe-brand as Amper & update u-boot to v2024.04 by @pyavitzSolved Bugs
Updated images for Orangepi Zero
Solved Bugs
Solved Bugs
Closed Tasks
ZFS updated to v2.0.4 (tested on 32bit Odroid HC1 and 64bit N2, Focal and Bionic userland) Added Hirsute CLI images with EDGE Linux 5.12.y for most of the boards
"},{"location":"Release_Changelog/#v2105-2021-05-09","title":"v21.05 (2021-05-09)","text":"Solved Bugs
Finished projects
Closed Tasks
Added Nvidia Jetson Nano (community supported target)
Rebuild images for Odroid N2, H4, HC4
"},{"location":"Release_Changelog/#v21023-2021-03-09","title":"v21.02.3 (2021-03-09)","text":"All kernels received upstream updates
All images has been rebuilt
Fixed reboot troubles on meson64 family (Odroid N2, C2, H4, HC4)
ZSH upgrade fixed
Type-C DP support for the NanoPC T4
Allwinner a20 fail to init hdmi in many cases / fixed (all images need to be rebuilt)
All kernels received upstream updates
Finished projects
Solved bugs
Closed task
All images rebuild due to torrent system corruption
"},{"location":"Release_Changelog/#v20119-2021-01-23","title":"v20.11.9 (2021-01-23)","text":"Broken Nanopi Neo buster image rebuild, adding Station M1 and P1 legacy images, Odroid XU4 update
"},{"location":"Release_Changelog/#v20118-2021-01-17","title":"v20.11.8 (2021-01-17)","text":"all images were rebuilt - we had a few corrupted ones in previous build
"},{"location":"Release_Changelog/#v20116-2021-01-03","title":"v20.11.6 (2021-01-03)","text":"AR-566 - Add Nanopi R4S preview images
"},{"location":"Release_Changelog/#v20114-2020-12-15","title":"v20.11.4 (2020-12-15)","text":"Bugfix release
Finished projects
Solved bugs
Closed tasks
Added WIP images for Odroid HC4 Updated images for Odroid C4, N2, C2, Lafrite, Lepotato, KVIM1
"},{"location":"Release_Changelog/#v200813-2020-10-19","title":"v20.08.13 (2020-10-19)","text":"Known bugs:
Finished projects
Solved bugs
Closed tasks
never released/skipped
"},{"location":"Release_Changelog/#v20054-2020-06-16","title":"v20.05.4 (2020-06-16)","text":"Kagu
Finished projects
Solved bugs
Closed tasks
Chiru
Tasks
Bugs
Stories
Tasks
Bugs
Stories
Build script:
Armbian-config:
Build script:
Armbian-config:
Build script:
Armbian-config:
Infrastructure:
Changes overview:
General:
vm.swappiness has been changed from 0 to 100 (if you run databases on your board you might want to revert this change in /etc/sysctl.conf),Family:
Board:
Build script:
Infrastructure:
Known bugs:
linux-source-${BRANCH}-${LINUXFAMILY}, i.e. linux-source-sunxi-next)Desktop images:
armbian-config:
armbian-configBuild script:
End of support notice
Following boards are no longer receiving support and updates since this version:
armbian-add-overlay helper for compiling and activating DT overlays (new images only)/var/log contents on shutdown/etc/default/armbian-motd for disabling MOTD componentsarmbian-config dialog-based configuration program (WIP)End of support notice
Following boards are no longer receiving support and updates since this version:
Known problems:
sun7i-a20-bananapi-m1-plus.dtb, boot script adjusting may be required for existing imagesDesktop images:
Build script:
LD_LIBRARY_PATHKnown problems:
Desktop images:
VDPAU_OSD=1Build script:
Added additional packages, not installed by default:
Known problems:
u-boot and armbian-install.sh fixes)Images:
Build script:
Known bugs:
sudo armbianmonitor -b)sudo h3disp in a terminal to get the idea.and a bunch of small fixes.
"},{"location":"Release_Changelog/#v44-2015-10-01","title":"v4.4 (2015-10-01)","text":"Images:
Script:
Images:
Build script:
While the underlying operating system offers tools and processes to make customizations, the preferred method to change most settings is using the interactive armbian-config tool which is shipped with all Armbian images. It also provides means to install preconfigured applications and advanced services.
Usually, all of the following commands require elevated permissions, and must be run as root or prefixed by the sudo command.
"},{"location":"User-Guide_Advanced-Configuration/#keyboard-layout","title":"Keyboard layout","text":"This is typically handled by armbian-config. For some corner cases, changing the keyboard layout can also be done with:
Bashdpkg-reconfigure keyboard-configuration\n If the chosen standard is not available with the previous command, you may also need to set the keymap config.
Bash# Check the actual keymap config\nlocalectl status | grep -i keymap\n\n# Set the desired keymap config. In the example below it is set to 'br-abnt2'\nlocalectl set-keymap br-abnt2\n"},{"location":"User-Guide_Advanced-Configuration/#system-language","title":"System language","text":"This is typically handled by armbian-config. If necessary, to handle it with system tools, for Debian run:
Bashdpkg-reconfigure locales\n And for Ubuntu
Bashupdate-locale LANG=[options] && dpkg-reconfigure locales\n"},{"location":"User-Guide_Advanced-Configuration/#console-font-and-codepage","title":"Console font and codepage","text":"Bashdpkg-reconfigure console-setup\n"},{"location":"User-Guide_Advanced-Configuration/#time-zone","title":"Time zone","text":"This is typically handled by armbian-config. If necessary, one can also run:
Bashdpkg-reconfigure tzdata\n"},{"location":"User-Guide_Advanced-Configuration/#default-sound-output","title":"Default sound output","text":"Note
In recent versions of Debian and Ubuntu, pulseaudio got replaced by pipewire. The following suggestions won\u2019t work in that case.
To check the available sound output options (\u201csinks\u201d) with pulseaudio:
Bashpacmd list-sinks | less\n The default sink will be marked with an asterisk \u201c*\u201c. Press q to exit.
To define a new default sound output:
Bashpacmd set-default-sink <NAME-OF-DESIRED-OPTION>\n The name of HDMI sound output devices may change accordingly to the device. If you don\u2019t want to deal with different names, you can run:
Bashpacmd set-default-sink $(pactl list short sinks | grep -i 'hdmi' | awk '{print $2}')\n The command to define the default sink is not persistent. To make it persistent, add it to the file ~/.bashrc.
In rare cases, some SunXi/Allwinner boards failed to detect Full-HD support for HDMI and boot with only 720p. This issue should now be resolved, and the following steps are provided only for reference if it still occurs.
Legacy versions
Open the /boot/boot.cmd file with an editor of your choice (e.g. nano) and add or change the disp.screen0_output_mode option to the kernel command line. For a fixed mode (e.g. 1280x720 at 60 Hz), set it to:
disp.screen0_output_mode=1280x720p60\n Then run
Bashmkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr\n"},{"location":"User-Guide_Advanced-Configuration/#enable-a-custom-screen-resolution-within-xorg","title":"Enable a custom screen resolution within X.Org","text":"Sometimes, not all desired resolutions are supported out of the box. The following short howto shows how to enable a custom resolution and add it to your X.Org configuration. It is based on this forum post by user @maxlinux2000 (Thanks!). The xrandr and cvt commands must be executed as the current user in a graphical session, not by the root user!
First, find the matching HDMI output (the x11-xserver-utils package must be installed):
xrandr --listmonitors\n Then, calculate the VESA CVT mode line. The following command does this for a custom resolution of 1440x900.
Bashcvt 1440 900\n The command will output a new modeline. For our example, it may look like this:
Text Only# 1440x900 59.89 Hz (CVT 1.30MA) hsync: 55.93 kHz; pclk: 106.50 MHz\nModeline \"1440x900_60.00\" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync )\n The new modeline can then be used directly to create and add the new mode, and enable it. The following commands will do that for the output device HDMI-1.
Bashxrandr --newmode \"1440x900_60.00\" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync\nxrandr --addmode HDMI-1 1440x900_60.00\nxrandr --output HDMI-1 --mode 1440x900_60.00\n If it works well, the new mode can also be added to X.Org\u2019s configuration in /etc/X11/xorg.conf.d/ to make it permanently available/active. Otherwise, these commands will have to be executed after every reboot. To load this resolution automatically after starting the device, add the following section to e.g. /etc/X11/xorg.conf.d/40-monitor.conf (create the file if it does not exist):
Section \"Monitor\"\n Identifier \"HDMI-1\"\n Modeline \"1440x900_60.00\" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync\n Option \"PreferredMode\" \"1440x900\"\nEndSection\n After a restart, the graphical session should automatically be shown in the chosen resolution.
"},{"location":"User-Guide_Advanced-Configuration/#alter-the-cpu-frequency","title":"Alter the CPU frequency","text":"Legacy versions
Some boards allow to adjust the CPU speed by editing the file /etc/default/cpufrequtils and alter the min_speed and/or max_speed variable. Changing these values require restarting cpufrequtils.service to activate the new settings:
systemctl restart cpufrequtils.service\n"},{"location":"User-Guide_Advanced-Configuration/#swap-for-experts","title":"Swap for experts","text":"By default, Armbian implements ZRAM (writing nothing to \u2018disk\u2019, but compressing memory pages in RAM). In case you often run into out-of-memory (OOM) errors and your device has some capable storage (e.g. a securely attached NVMe or SATA SSD), you might want to use ZSWAP instead.
Check whether your kernel has zswap enabled. If yes, the following command
Bashdmesg | grep zswap\n should return some output. If that is the case, create a swapfile or a swap partition the traditional way: edit /etc/default/armbian-zram-config so that it reads SWAP=false. Reboot, and you\u2019re done.
Zswap performs a lot better than the combination of ZRAM and \u2018swap on disk\u2019 in parallel.
"},{"location":"User-Guide_Advanced-Configuration/#switch-or-downgrade-kernels","title":"Switch or downgrade kernels","text":"This is typically handled by armbian-config.
Basharmbian-config --cmd KER001\n In rare cases, it can be necessary to downgrade a kernel package, e.g. to fall back to a previous version.
Danger
Version dependencies between packages can create serious conflicts when attempting a package downgrade. If you force anything here, you can easily destroy your system beyond the point of repair. Don\u2019t use that command lightly and better ask twice.
Bashapt install linux-image-current-rockchip64=25.5\n"},{"location":"User-Guide_Advanced-Configuration/#build-a-wireless-driver","title":"Build a wireless driver","text":"The kernels provided by the project should contain the drivers, modules, and firmware to support most commonly used network devices/dongles. If you encounter that you have to build your own module and load it, the following example shows the general procedure because most modules follow the same structure and setup. It is, however, rarely necessary to build and load so-called \u201cout-of-tree\u201d kernel modules as shown in this example. Even the module we use here as an example is already supported by the current kernels.
First, building a module always requires having the kernel headers installed. The correct version can be installed with:
Basharmbian-config --cmd HEAD01\n Then download the driver\u2019s sources. Most drivers can probably be found in a Git repository like in our example.
Bashgit clone https://github.com/morrownr/8821au-20210708.git\ncd 8821au-20210708\n The build and install instructions can usually be found on the driver\u2019s homepage or in a file called README.md in the source. Read these instructions carefully. Usually, the following commands will suffice and result in an output as shown below.
make\nmake install\n Build log Text Onlymake ARCH=arm64 CROSS_COMPILE= -C /lib/modules/6.6.62-current-sunxi64/build M=/root/8821au-20210708 modules\nmake[1]: Entering directory '/usr/src/linux-headers-6.6.62-current-sunxi64'\n CC [M] /root/8821au-20210708/core/rtw_cmd.o\n CC [M] /root/8821au-20210708/core/rtw_security.o\n CC [M] /root/8821au-20210708/core/rtw_debug.o\n CC [M] /root/8821au-20210708/core/rtw_io.o\n CC [M] /root/8821au-20210708/core/rtw_ioctl_query.o\n CC [M] /root/8821au-20210708/core/rtw_ioctl_set.o\n CC [M] /root/8821au-20210708/core/rtw_ieee80211.o\n CC [M] /root/8821au-20210708/core/rtw_mlme.o\n CC [M] /root/8821au-20210708/core/rtw_mlme_ext.o\n ...\n [ goes on for a while ]\n ...\n LD [M] /root/8821au-20210708/8821au.o\n MODPOST /root/8821au-20210708/Module.symvers\n CC [M] /root/8821au-20210708/8821au.mod.o\n LD [M] /root/8821au-20210708/8821au.ko\nmake[1]: Leaving directory '/usr/src/linux-headers-6.6.62-current-sunxi64'\n If make succeeded, attempt to load the driver and check the dmesg output.
insmod 8821au.ko\nusbcore: registered new interface driver rtl8821au\n If everything was successful, plug the USB wireless adaptor in and proceed with the network configuration.
"},{"location":"User-Guide_Advanced-Configuration/#toggle-boot-output","title":"Toggle boot output","text":"Boot parameters are edited or changed directly in /boot/boot.cmd (not recommended) or via variables in /boot/armbianEnv.txt:
- console=both\n+ console=serial\n To disable the console entirely (also not recommended and only as an example) one would set console=none.
To recompile boot.cmd to boot.scr if it was changed:
mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr\n And reboot.
The serial console on imx6 boards is ttymxc0 (Hummingboard, Cubox-i) or ttymxc1 (Udoo).
To change the boot verbosity, alter the verbosity= line in /boot/armbianEnv.txt. The lower the value, the lower the verbosity. The default is 1 and the maximum is 7.
Legacy versions
Using Armbian from version 5.05 to 5.20, you have to touch or delete /boot/.force-verbose to increase the boot verbosity.
If your SBC behaves strange, the first step is to check the power supply and the integrity of the boot media as detailed in the Troubleshooting section. Also, run
Basharmbianmonitor -c \"$HOME\"\n Then look into your kernel logs. Armbian also provides a tool that grabs some information and pastes it to an online pasteboard service. Please increase the boot verbosity to its maximum level (verbosity=7) as shown above, reboot and then run:
sudo armbianmonitor -u\n Then copy and past the URL of your log to the forum, mail, etc.
"},{"location":"User-Guide_Advanced-Configuration/#apt-mirror-selection","title":"APT mirror selection","text":"Armbian has its own APT repository http://apt.armbian.com and mirrors for armbian-specific packages. The default domain is a round-robin to all mirrors. If you are having trouble updating or expereince slow speeds, you may want to choose a specific mirror.
First, make sure that you have the jq package installed:
apt install -y jq\n To get a list of available mirrors from our https://apt.armbian.com/mirrors endpoint in JSON format, run:
curl -s http://apt.armbian.com/mirrors | jq\n You will see a result set similar to this (shortened), listing mirrors by region:
JSON{\n \"AS\": [\n \"http://mirror.twds.com.tw/armbian-apt/\",\n \"http://mirror.albony.in/armbian/\",\n \"http://jp.mirrors.naho.moe/armbian/\",\n ...\n ],\n \"EU\": [\n \"http://netcup-02.armbian.com/apt/\",\n \"http://fi.mirror.armbian.de/apt/\",\n \"http://armbian.nardol.ovh/apt/\",\n ...\n ],\n \"NA\": [\n \"http://mirrors.jevincanders.net/armbian/apt/\"\n ],\n \"OC\": [\n \"http://au.sbcmirror.org/armbian/apt/\"\n ],\n \"default\": [\n \"http://mirrors.jevincanders.net/armbian/apt/\",\n \"http://netcup-02.armbian.com/apt/\",\n \"http://fi.mirror.armbian.de/apt/\",\n ...\n ]\n}\n Choose a mirror, edit /etc/apt/sources.list.d/armbian.sources, and replace the URL http(s)://apt.armbian.com with your preferred mirror.
Install either the minimal package \u2026
Basharmbian-config --CON001\n \u2026 or the fully featured one.
Basharmbian-config --CON002\n To test if Docker works correctly:
Bashdocker run hello-world\n If you get that kind of output, then Docker install went fine:
BashHello from Docker!\nThis message shows that your installation appears to be working correctly.\n"},{"location":"User-Guide_Armbian-Config/","title":"Armbian Config","text":"flowchart LR\n A[armbian-config] -----> B[\"System\"];\n A[armbian-config] -----> C[\"Network\"];\n A[armbian-config] -----> D[\"Localisation\"];\n A[armbian-config] -----> E[\"Software\"];\n A[armbian-config] -----> F[\"Help\"]; Utility for configuring your board, adjusting services, and installing applications. It comes with Armbian by default.
To start the Armbian configuration utility, use the following command: Text Only
armbian-config\n"},{"location":"User-Guide_Armbian-Config/#adding-a-new-feature","title":"Adding a new feature","text":"Please check instructions.
"},{"location":"User-Guide_Armbian-Config/#sources","title":"Sources","text":"armbian/configng
"},{"location":"User-Guide_Armbian-Config/#installation-on-3rd-party-linux-os","title":"Installation on 3rd party Linux OS","text":"This tool is tailored to works best with Armbian Linux but it has also been automatically tested on:
In theory it should work on any systemd APT based Linux distributions such as: Linux Mint, Elementary OS, Kali Linux, MX Linux, Parrot OS, Proxmox, Raspberry Pi OS, \u2026
Text Onlywget -qO - https://apt.armbian.com/armbian.key | gpg --dearmor | \\\nsudo tee /usr/share/keyrings/armbian.gpg > /dev/null\ncat << EOF | sudo tee /etc/apt/sources.list.d/armbian-config.sources > /dev/null\nTypes: deb\nURIs: https://github.armbian.com/configng\nSuites: stable\nComponents: main\nSigned-By: /usr/share/keyrings/armbian.gpg\nEOF\nsudo apt update\nsudo apt -y install armbian-config\n"},{"location":"User-Guide_Armbian-Software/","title":"Armbian Software","text":"Lightweight, Secure, and Optimized Services for Embedded Systems
"},{"location":"User-Guide_Armbian-Software/#overview","title":"Overview","text":"Armbian Software, accessible via the armbian-config utility, empowers you to quickly deploy a variety of preconfigured applications and advanced services \u2014 from diagnostic tools and media servers to dashboards and container orchestration platforms. Most services are offered as Docker containers optimized specifically for Armbian OS and supported hardware, while a subset is available as native installations for lightweight or performance-critical setups.
Each installation is isolated and designed with clean setup and teardown in mind. Key features include:
All configurations are streamlined to work out of the box, reducing the need for manual intervention or deep technical know-how.
"},{"location":"User-Guide_Armbian-Software/#security-and-management","title":"Security and Management","text":"Every service runs on a dedicated Docker network bridge, isolating app traffic for enhanced security and performance. Key management benefits include:
journalctl or Docker logs These features make the platform suitable for both prototyping and long-term deployments. However, a few specific services \u2014 typically those requiring low-level hardware access or advanced networking features \u2014 may still need to run directly on the host network rather than within an isolated Docker bridge.
"},{"location":"User-Guide_Armbian-Software/#hardware-support","title":"Hardware Support","text":"Architecture Support Level Notes x86_64 \u2705 Full Ideal for servers, mini PCs arm64 \u2705 Full Ideal for servers and SBCs armhf \u26a0\ufe0f Partial Limited by upstream container support riscv64 \u26a0\ufe0f Partial Experimental, growing ecosystemInstallations may include hardware specific tuning for optimal performance.
"},{"location":"User-Guide_Armbian-Software/#why-use-it","title":"Why Use It","text":"Most in-circuit and GPIO based interfaces (SPI, I2C, I2S, UART, \u2026) don\u2019t have a mechanism for detecting and identifying devices connected to the bus, so Linux kernel has to be told explicitly about the device and its configuration details.
While Device Tree is a way of describing hardware configuration to the kernel, Device Tree overlays are a way for modifying the DT in order to provide the kernel and kernel drivers with details about external devices or to activate interfaces disabled by default.
Note: from the Linux kernel maintainer perspective all unused in-circuit type interfaces that use GPIO pins should be disabled by default and all pins on pin headers or soldering pads will be configured as standard GPIOs.
Note: from the Linux kernel maintainer perspective all dedicated interfaces like USB, Ethernet or analog audio that are wired to soldering pads or a pin headers instead of specialized sockets (like USB socket, Ethernet socket or 3.5mm jack) will be left disabled by default.
"},{"location":"User-Guide_Armbian_overlays/#armbian-specific-notes","title":"Armbian specific notes","text":"README.<soc-id>-overlays in /boot/dtb/overlay/ (32-bit SoCs) or /boot/dtb/allwinner/overlay/ (64-bit SoCs) for a list of provided overlays, their required and optional parametersoverlays= line in /boot/armbianEnv.txt, separated with spaces/boot/armbianEnv.txt, one per line/boot/armbianEnv.txt if you want to change the default value, one per line.dts extension) on the devicecompatible string to match your SoC if necessaryarmbian-add-overlay <overlay_file.dts> as root, i.e. sudo armbian-add-overlay sht15.dtsoverlay_prefix - prefix for the DT and overlay file names, set at OS image creation timeoverlays - list of overlays to activate from kernel directoryuser_overlays - list of overlays to activate from /boot/overlay-user/ directoryparam_* - overlay parametersOverlays can be loaded from 2 locations:
/boot/dtb/overlay/ (/boot/dtb/allwinner/overlay/ for 64-bit SoCs) - kernel provided overlays/boot/overlay-user/ - user provided overlaysMain differences between these locations:
<prefix>-<name>, for example sun8i-h3-i2c0.dtbo, where sun8i-h3 is the prefix and i2c0 is the namei2c0), and the prefix is set at OS image creation timeadafruit13m.dtbo overlay name would be adafruit13mDT overlays are activated by editing u-boot environment file /boot/armbianEnv.txt
overlays variableuser_overlays variableoverlays line and one user_overlays line can be present in the environment fileSome overlays have additional parameters that can be set.
Parameters marked as \u201cRequired\u201d have to be set if overlay with these parameters is activated, other parameters are not mandatory if default value is suitable.
Parameters are set by adding their name and value to /boot/armbianEnv.txt, each parameter should be added on a new line.
Please refer to README.<SoC_prefix>-overlays files in /boot/dtb/overlay/ (/boot/dtb/allwinner/overlay/ for 64-bit SoCs) directory for supported parameters, i.e. README.sun8i-h3-overlays for H3 based boards.
Parameters of type pin require special format:
P, a letter that signifies the pin bank and a number of the pin in the bankPA9, PG12; bad - pa2, PG08SoCs may contain multiple bus controllers of the same type, i.e. Allwinner H3 contains 2 SPI controllers and Allwinner A20 contains 4 SPI controllers.
Please refer to your board documentation and schematic to determine what pins are wired to the pin headers and thus what bus number should be used in each case.
"},{"location":"User-Guide_Armbian_overlays/#overlay-pinmux-conflicts","title":"Overlay pinmux conflicts","text":"Some controllers may share the SoC pins in some configurations. For example on Allwinner H3 UART 3 and SPI 1 use the same pins - PA13, PA14, PA15, PA16. In this case activating both UART 3 and SPI 1 would result in a conflict, and on practice only one interface (either SPI or UART) will be accessible on these pins.
Please check the SoC specific README, board schematic, SoC datasheet or other documentation if you are unsure about possible conflicts if activating multiple overlays for the controllers that use shared (muxed) pins.
"},{"location":"User-Guide_Armbian_overlays/#overlay-device-endpoint-conflicts","title":"Overlay device endpoint conflicts","text":"Overlays for devices that use addresses or similar mechanisms (i.e. SPI chip selects) can\u2019t be activated simultaneously if addresses (chip selects) are identical.
For example A20 SPI controller 1 has only one hardware chip select, so spi-spidev and spi-jedec-nor overlays cannot be activated both if they would use the same bus number and chip select.
Device Tree overlays for different platforms and SoCs are not directly compatible. This, for example, means that overlays for H3 may need some changes to work on A20, and that Raspberry Pi overlays will need adjustments in order to be used on Allwinner based boards.
Rework may include changing labels, references (phandles) and pinconf bindings.
"},{"location":"User-Guide_Armbian_overlays/#notes-regarding-spi-and-i2s-overlays","title":"Notes regarding SPI and I2S overlays","text":"Activating a device on SPI or I2S bus may require more than one overlay. In case a bus overlay like spi0 or i2s0 exist for the target SoC they need to be activated in addition to a slave device overlay (provided or custom/user-made). Please note that these overlays (spi0, i2s0) do not enable any slave devices (like spidev or I2S codec). In some cases it might be necessary to change param_spidev_spi_bus to 1.
As overlays and overlay parameters are applied by the u-boot, it is impossible to get any debugging information (such as error messages) from the OS.
Serial console on UART 0 is required to debug DT overlay related problems.
"},{"location":"User-Guide_Armbian_overlays/#example-bootarmbianenvtxt-contents","title":"Example/boot/armbianEnv.txt contents:","text":"Text Onlyverbosity=1\nconsole=serial\noverlay_prefix=sun8i-h3\nrootdev=UUID=bd0ded76-1188-4b52-a20a-64f326c1f193\nrootfstype=ext4\noverlays=w1-gpio uart1 i2c0 spi-spidev\nparam_w1_pin=PA20\nparam_w1_pin_int_pullup=1\nparam_uart1_rtscts=1\nparam_spidev_spi_bus=0\n"},{"location":"User-Guide_Armbian_overlays/#example-of-serial-console-log-when-using-several-overlays","title":"Example of serial console log when using several overlays:","text":"Text Only## Executing script at 43100000\nU-boot loaded from SD\nBoot script loaded from mmc\n265 bytes read in 182 ms (1000 Bytes/s)\n5074230 bytes read in 532 ms (9.1 MiB/s)\n5702664 bytes read in 579 ms (9.4 MiB/s)\nFound mainline kernel configuration\n32724 bytes read in 269 ms (118.2 KiB/s)\n882 bytes read in 277 ms (2.9 KiB/s)\nApplying kernel provided DT overlay sun8i-h3-w1-gpio.dtbo\n506 bytes read in 326 ms (1000 Bytes/s)\nApplying kernel provided DT overlay sun8i-h3-uart1.dtbo\n374 bytes read in 377 ms (0 Bytes/s)\nApplying kernel provided DT overlay sun8i-h3-i2c0.dtbo\n788 bytes read in 347 ms (2 KiB/s)\nApplying kernel provided DT overlay sun8i-h3-spi-spidev.dtbo\n4327 bytes read in 268 ms (15.6 KiB/s)\nApplying kernel provided DT fixup script (sun8i-h3-fixup.scr)\n## Executing script at 44000000\ntmp_bank=A\ntmp_pin=20\n## Loading init Ramdisk from Legacy Image at 43300000 ...\n Image Name: uInitrd\n Image Type: ARM Linux RAMDisk Image (gzip compressed)\n Data Size: 5074166 Bytes = 4.8 MiB\n Load Address: 00000000\n Entry Point: 00000000\n Verifying Checksum ... OK\n## Flattened Device Tree blob at 43000000\n Booting using the fdt blob at 0x43000000\n reserving fdt memory region: addr=43000000 size=9000\n Loading Ramdisk to 49b29000, end 49fffcf6 ... OK\n Loading Device Tree to 49b1d000, end 49b28fff ... OK\n\nStarting kernel ...\n"},{"location":"User-Guide_Autoconfig/","title":"Automatic first boot configuration","text":""},{"location":"User-Guide_Autoconfig/#reading-presets-from-local-config","title":"Reading presets from local config","text":"It is possible to configure your device automatically at first boot. Settings like: root password, IP address, connecting to wireless.
After flashing an image to boot media, mount it and add a file containing your config to /root/.not_logged_in_yet
You may also mount the image and edit it prior to flashing, if this is preferable.
"},{"location":"User-Guide_Autoconfig/#loading-a-remote-config","title":"Loading a remote config","text":"It is also possible to load this config file from a remote server, as above, however the only directive you should include is:
/root/.not_logged_in_yetPRESET_CONFIGURATION=\"http://path/to/config/file\"\n"},{"location":"User-Guide_Autoconfig/#configuration-directives","title":"Configuration directives","text":"key=\"value\" format. Caution
No validation of this network config is performed, wrong settings will lead to broken network. Armbian supports netplan.io, this is the preferred config method. See netplan guides for various example configurations. Netplan config is stored in /etc/netplan/.
[default] | option Description: PRESET_CONFIGURATION http://path/to/config/file See Loading a remote config PRESET_NET_CHANGE_DEFAULTS [0] | 1 Change default network settingsif unset, no network changes will be applied PRESET_NET_ETHERNET_ENABLED 0 | 1 Enable Ethernet, ignored if WiFi enabled PRESET_NET_WIFI_ENABLED 0 | 1 Enable WiFi, takes priority over Ethernet PRESET_NET_WIFI_SSID MySSID WiFi SSID PRESET_NET_WIFI_KEY MyWPA-PSK WiFi Pre-Shared Key (Password), stored in plaintext PRESET_NET_WIFI_COUNTRYCODE CC Country code, required for WiFie.g. GB, US, DE; see Wikipedia/ISO_3166 PRESET_CONNECT_WIRELESS Y | n Set to Y for interactive mode, n uses values from file PRESET_NET_USE_STATIC [0] | 1 Use the static IP provided, DHCP is the defaultLeaving any value unset will result in a broken config PRESET_NET_STATIC_IP xxx.xxx.xxx.xxx Static IPv4 address, dotted decimal notation PRESET_NET_STATIC_MASK xxx.xxx.xxx.xxx Subnet mask, typically 255.255.255.0 PRESET_NET_STATIC_GATEWAY xxx.xxx.xxx.xxx Default gateway address PRESET_NET_STATIC_DNS x.x.x.x x.x.x.x DNS Servers to use, separated by a space. If unsure:CloudFlare is 1.1.1.1 1.0.0.1Google is 8.8.8.8 8.8.4.4 SET_LANG_BASED_ON_LOCATION Y | n \u201cSet user language based on your location?\u201d PRESET_LOCALE locale Locale e.g. en_GB.UTF-8, de_DE.UTF-8, zh_TW.UTF-8 PRESET_TIMEZONE timezone Timezone e.g. Etc/UTC, PRESET_ROOT_PASSWORD [1234] | password Preset root passwordStored in plaintext, SSH keys are safer! PRESET_ROOT_KEY https://path/to/key.file Fetches public key from specified URL for root user PRESET_USER_NAME username Username to create PRESET_USER_PASSWORD password Preset created user passwordStored in plaintext, SSH keys are safer! PRESET_USER_KEY https://path/to/key.file Fetches public key from specified URL for created user PRESET_DEFAULT_REALNAME Real Name RealName to use for created user PRESET_USER_SHELL shell Currently only bash (default) or zsh (armbian-zsh) supported"},{"location":"User-Guide_Autoconfig/#sample-config-file","title":"Sample config file","text":"The following is an example configuration, it may be used as a template
/root/.not_logged_in_yet#/root/.not_logged_in_yet\n# Network Settings\nPRESET_NET_CHANGE_DEFAULTS=\"1\"\n## Ethernet\nPRESET_NET_ETHERNET_ENABLED=\"1\" # Ignored due to WiFi\n## WiFi\nPRESET_NET_WIFI_ENABLED=\"1\"\nPRESET_NET_WIFI_SSID=\"MySSID\"\nPRESET_NET_WIFI_KEY=\"MyWiFiKEY\"\nPRESET_NET_WIFI_COUNTRYCODE=\"GB\"\nPRESET_CONNECT_WIRELESS=\"n\"\n## Static IP\nPRESET_NET_USE_STATIC=\"1\"\nPRESET_NET_STATIC_IP=\"192.168.0.100\"\nPRESET_NET_STATIC_MASK=\"255.255.255.0\"\nPRESET_NET_STATIC_GATEWAY=\"192.168.0.1\"\nPRESET_NET_STATIC_DNS=\"8.8.8.8 8.8.4.4\"\n\n# System\nSET_LANG_BASED_ON_LOCATION=\"y\"\nPRESET_LOCALE=\"en_US.UTF-8\"\nPRESET_TIMEZONE=\"Etc/UTC\"\n\n# Root\nPRESET_ROOT_PASSWORD=\"RootPassword\"\nPRESET_ROOT_KEY=\"\"\n\n# User\nPRESET_USER_NAME=\"armbian\"\nPRESET_USER_PASSWORD=\"UserPassword\"\nPRESET_USER_KEY=\"\"\nPRESET_DEFAULT_REALNAME=\"Armbian user\"\nPRESET_USER_SHELL=\"bash\"\n Tip If you want to use first run automatic configuration at build time, check this GitHub pull request.
tl;dr;
cp extensions/preset-firstrun.sh userpatches/extensions/userpatches/extensions/preset-firstrun.sh according to your situationENABLE_EXTENSIONS=preset-firstrun/root/provisioning.sh is executed once as root after the first successful login, either manual or automated. It\u2019s used to perform final system setup tasks like installing packages, configuring the system, or enabling services.
The example script updates package lists, installs htop, sets a custom hostname.
/root/provisioning.sh#!/bin/bash\nset -e\necho \"Provisioning started\"\napt update && apt install -y htop\nhostnamectl set-hostname my-device\necho \"Provisioning complete\"\n"},{"location":"User-Guide_Board-Support-Rules/","title":"Board support Rules","text":""},{"location":"User-Guide_Board-Support-Rules/#overview","title":"Overview","text":"Support definitions, criteria and relationships for:
Platinum support is reserved for business relationships with the Armbian project and is out of the scope of this document.
"},{"location":"User-Guide_Board-Support-Rules/#contact-us","title":"Contact us","text":"Please contact Armbian management for more information.
"},{"location":"User-Guide_Board-Support-Rules/#standard-support","title":"Standard Support","text":""},{"location":"User-Guide_Board-Support-Rules/#benefits","title":"Benefits","text":"For a SBC to be considered supported:
Community maintained devices are not under active supervision or development. Support status is unknown to Armbian team. It represents combined former CSC (community supported configuration) and EOS (end of support). Can be removed from Armbian code base at any time. Left as a courtesy in case a community member wants to attempt to resurrect maintenance.
Community maintained SBCs are exclusively supported by the community.
"},{"location":"User-Guide_Board-Support-Rules/#benefits_1","title":"Benefits","text":"Work in progress (WIP) status is for when a maintainer has committed to a SBC, but is not ready to ship stable images.
"},{"location":"User-Guide_Board-Support-Rules/#benefits_2","title":"Benefits","text":"All benefits of Community Supported SBCs apply to Staging as well.
Armbian is a lightweight Linux distribution optimized for single board computers (SBCs). It provides a reliable, standardized Debian or Ubuntu-based environment tailored to work across many different ARM devices.
In addition to prebuilt images, Armbian includes a powerful build framework that lets you customize kernel versions, desktop environments, and other system components to fit your needs.
"},{"location":"User-Guide_FAQ/#why-no-universal-image","title":"Why no universal image?","text":"The x86 architecture includes BIOS or UEFI, providing a standardized interface. In contrast, most SBCs lack such consistency. Although the ARM ecosystem is improving via ARM ServerReady and SystemReady certifications, adoption is limited. Vendors often have tight budgets and minimal engineering resources, and there\u2019s little incentive to go beyond basic boot functionality.
Instead of following standards, vendors usually fork U-Boot and apply minimal changes needed to boot their boards.
"},{"location":"User-Guide_FAQ/#why-does-armbian-need-help","title":"Why does Armbian need help?","text":"Building and maintaining support for diverse custom hardware requires substantial time, infrastructure, and expertise\u2014similar to commercial software development, but without licensing revenue. Armbian supports a wide range of ARM-based boards, often with minimal or no vendor assistance and limited user contributions. As a result, our team takes on the full responsibility for board bring-up, patching, testing, and ongoing maintenance, largely funded out of pocket.
In addition to the software, we maintain forums, documentation, and user support, all of which demand consistent effort. A dedicated group of just 10\u201315 volunteers sustains the project in their spare time. While some projects repackage and redistribute our work, the core maintenance responsibility remains with us.
We also face commercial entities that leverage our work\u2014sometimes contributing only superficial changes\u2014adding further pressure to our limited resources. That\u2019s why we kindly ask for your support in helping us sustain and grow Armbian.
"},{"location":"User-Guide_FAQ/#why-things-stop-working","title":"Why things stop working?","text":"Vendors often base their software on fixed, vendor-specific LTS kernels and custom U-Boot forks, which may lack long-term upstream maintenance or open-source availability.
Armbian, by contrast, tracks and contributes to mainline kernel development to provide modern features and improved security. However, if drivers are not upstreamed or properly ported, certain hardware functions may not work or may break over time.
Our development focus is on maintaining the CURRENT kernel branch, which is selected for having sufficient maturity and stability for general use. EDGE kernels, as the name implies, are based on the latest upstream kernel versions \u2014 often including release candidates \u2014 and are not suitable for production deployment. These kernels are assembled for early adopters and development purposes only. Their experimental nature means higher risk of regressions and broken functionality.
Due to limited resources, Armbian prioritizes basic functionality and integration testing, not full validation of all features across all supported devices. While we do identify many issues, some remain unresolved for extended periods \u2014 sometimes months or even years \u2014 due to a significant shortage of development capacity.
"},{"location":"User-Guide_FAQ/#what-do-wip-eos-csc-mean","title":"What do WIP, EOS, CSC mean?","text":"These indicate support status:
Absolutely! Non-technical help is equally valuable. Without community help, developers must do everything: run infrastructure, moderate forums, answer support, manage partnerships, and fundraise\u2014on top of development.
https://www.armbian.com/contact/
You can help with documentation, moderation, translations, outreach, fundraising, or promotion\u2014freeing developers to focus on what they do best.
"},{"location":"User-Guide_FAQ/#why-no-support-for-old-os","title":"Why no support for old OS?","text":"Armbian has limited resources, unlike larger projects. Supporting outdated OS releases like Ubuntu Focal or Debian Buster, which may lack upstream maintenance, diverts resources from improving current versions.
We focus only on the latest stable releases of Debian and Ubuntu.
"},{"location":"User-Guide_FAQ/#why-no-support-for-tv-boxes","title":"Why no support for TV boxes?","text":"A few vendors provide schematics, upstream support, and occasional assistance, which helps. But most TV boxes lack documentation, change hardware without notice, and use closed-source bootloaders.
Nearly all Armbian images for these devices are unofficial community hacks. Despite the large market, the cost of support is high, and public interest in sustaining it is low. Supporting these devices would be unsustainable for our small team.
"},{"location":"User-Guide_FAQ/#will-my-board-be-supported","title":"Will my board be supported?","text":"Maybe. Official support depends on factors like documentation, SoC vendor transparency, sample availability, and\u2014most critically\u2014a willing maintainer.
When vendors collaborate with Armbian, the chance of support significantly increases.
"},{"location":"User-Guide_FAQ/#which-wifi-works-right-away","title":"Which WiFi works right away?","text":"WiFi compatibility depends on Linux kernel driver support. Adapters using Intel, Atheros, or Realtek chipsets tend to work better out of the box.
For performance and compatibility details, see: https://docs.armbian.com/WifiPerformance/
Note: Results may vary by board, due to power limits, USB/PCI quirks, and driver maturity.
"},{"location":"User-Guide_FAQ/#why-is-my-image-not-listed","title":"Why is my image not listed?","text":"Creating and maintaining images for all combinations of kernel, userspace, and desktop across all boards is technically and financially unfeasible. We provide a carefully chosen set of default images per board.
However, using the Armbian build framework, you can easily create custom images. It\u2019s well-documented and accessible to moderately experienced users.
If enough users show interest in a specific configuration, we may adjust build targets accordingly.
"},{"location":"User-Guide_FAQ/#can-i-upgrade-to-a-new-armbian-release","title":"Can I upgrade to a new Armbian release?","text":"Yes! The simple armbian-upgrade command, which is an alias for apt update && apt upgrade, will upgrade all Armbian-related core packages (firmware, kernel, BSP) to the most recent version available \u2014 just as it will upgrade the underlying distribution packages.
Distribution upgrades (e.g. Bookworm \u2192 Trixie, Jammy \u2192 Noble) are outside the scope of Armbian support. If you attempt such an upgrade, we cannot assist if problems occur.
An experimental upgrade option is available in armbian-config, but it is provided as-is and without support.
Keep in mind:
If you decide to proceed, always ensure you have a full backup of your system so you can recover in case the upgrade fails.
"},{"location":"User-Guide_Getting-Started/","title":"Armbian Getting Started Guide","text":"Before you start, please make sure you have:
You will also need an existing operating system and a SD card writer tool. We recommend using USBImager because it can validate written data saving you from corrupted SD card contents.
Warning
Make sure you use a good, reliable and fast SD card. If you encounter boot or stability issues, in over 95 percent of all cases these are either caused by an insufficient power supply, or they are related to the SD card. This can be due to a bad card, bad card reader, something went wrong when burning the image, the card turns out to be too slow to boot, etc. Armbian can simply not run on unreliable hardware.
Checking your SD card with either F3 or H2testw is mandatory if you run into problems. Since counterfeit SD cards are still an issue, we also highly recommend checking your card with these tools directly after purchase.
Most SD cards are only optimised for sequential reads/writes as it is common with digital cameras. This is what the speed class is about. The SD Association defined Application Performance Class as a standard for random IO performance.
Application Performance Class Pictograph Minimum Random Read Minimum Random Write Minimum Sustained (Seq. Write) Class 1 (A1) 1500 4k IOPS 500 4k IOPS 10MBytes/sec Class 2 (A2) 4000 4k IOPS 2000 4k IOPS 10MBytes/secWe recommend SD cards that are rated at least A1 and fulfill at least speed class C10 or higher (U1/U3, etc.). For example:
In case you chose an SD card that was already in use before, please consider resetting it back to \u2018factory default\u2019 performance with SD Formatter before burning Armbian to it (explanation in the forum). Detailed information regarding \u2018factory default\u2019 SD card performance.
New users
Some users might find it easier to follow this video tutorial.
Some word of advice, though. The video has been created a few years ago. You might therefore find differences between this video and our current site. So, in doubt, also follow the sections below while watching the video.
"},{"location":"User-Guide_Getting-Started/#download-the-image","title":"Download the image","text":"If your hardware is supported, you must download an image for your board. All of our system images can be found at https://www.armbian.com/download/ or at one of our many mirrors. You will find that there are different types of images, either using Debian GNU/Linux or Ubuntu as their base operating system.
"},{"location":"User-Guide_Getting-Started/#debian-or-ubuntu","title":"Debian or Ubuntu","text":"If you have no special preferences or requirements, we recommend using an Ubuntu based Armbian image.
"},{"location":"User-Guide_Getting-Started/#minimal-server-or-desktop","title":"Minimal, Server, or Desktop","text":"For each board, we usually provide these types of images:
For some boards we provide only minimal images due to their hardware limitations.
"},{"location":"User-Guide_Getting-Started/#vendor-current-edge-or-legacy","title":"Vendor, Current, Edge, or Legacy","text":"In some cases we provide images with different firmware. They differ in the level of hardware support and can be classified as follows:
Use the following images only if these are the only ones provided, or if you want to participate in testing:
The level of kernel support, however, always depends on the board family. If in your specific case something does not work well, you are always free to try an image with another kernel included, or change the kernel with armbian-config.
"},{"location":"User-Guide_Getting-Started/#rolling-releases","title":"Rolling releases","text":"Rolling releases are suitable for Linux enthusiasts who want cutting edge packages and have the skills to fix the damage that a bad update might cause. If you want stability in a production environment or low headaches as a novice user, skip rolling releases. They are not at a suitable support quality level!
graph LR\n A[Hardware] --> B{Armbian kernel};\n B -->|legacy| C[\"rolling release\"];\n B -->|vendor| C[\"rolling release\"];\n B -->|current| C[\"rolling release\"];\n B -->|edge| C[\"rolling release\"];\n B -->|legacy| X[\"point release\"];\n B -->|vendor| X[\"point release\"];\n B -->|current| X[\"point release\"];\n B -->|edge| X[\"point release\"];\n\n\n C ---->|minimal| E[Debian or Ubuntu];\n C ---->|server| F[Debian or Ubuntu];\n C ---->|desktop| G[Debian or Ubuntu];\n\n X ---->|minimal| E[Debian or Ubuntu];\n X ---->|server| F[Debian or Ubuntu];\n X ---->|desktop| G[Debian or Ubuntu]; Danger
Do not use rolling release or edge images in a productive environment. Their purpose is testing and providing constructive feedback to developers.
"},{"location":"User-Guide_Getting-Started/#download-and-verification","title":"Download and verification","text":"After you have determined the image you want, the download for each image consists of three separate files:
After you have downloaded these files, we recommend checking the integrity and the authenticity of the compressed image file.
How to check the download integrity?
Since it might happen that your download got somehow corrupted, we publish a checksum/hash for each of our images. You can compare the image\u2019s SHA-256 hash with the one contained in the .sha file.
On Windows, you can download and use the QuickHash GUI and follow the instructions in the gui. Linux and macOS users can simply do this in the directory with the compressed image and the checksum file:
Bashsha256sum -c Armbian_25.2.1_Bananapicm4io_bookworm_current_6.12.13_minimal.img.xz.sha\n The integrity is verified if the output looks something like this:
BashArmbian_25.2.1_Bananapicm4io_bookworm_current_6.12.13_minimal.img.xz: OK\n How to check the download authenticity?
All our images are digitally signed. It is therefore possible to check their authenticity. Linux and macOS user might need to install the required tools first: for Debian/Ubuntu, this can be done via sudo apt-get install gnupg, and for macOS use brew install gnupg. Windows users can install GnuPG from here. To check the authenticity, you will need the public key that was used to sign the images. This key can be retrieved from a keyserver or from the Debian/Ubuntu package repository (this step only needs to be done once):
# download public keys either from a keyserver\ngpg --keyserver hkp://keyserver.ubuntu.com --recv-key DF00FAF1C577104B50BF1D0093D6889F9F0E78D5\ngpg --keyserver hkp://keyserver.ubuntu.com --recv-key 8CFA83D13EB2181EEF5843E41EB30FAF236099FE\n# or from the repository server\nwget -O- https://apt.armbian.com/armbian.key | gpg --import -\n To perform the verfification, run the command shown below.
Bashgpg --verify Armbian_25.2.1_Bananapicm4io_bookworm_current_6.12.13_minimal.img.xz.asc\n While the output can very depending on the GnuPG version, it should result in a response similar to the one below. It is safe to ignore the message WARNING: This key is not certified with a trusted signature!.
gpg: Signature made Thu Feb 13 11:53:18 2025 CET\ngpg: using RSA key DF00FAF1C577104B50BF1D0093D6889F9F0E78D5\ngpg: Good signature from \"Igor Pecovnik <igor@++++++++++++.com>\" [unknown]\ngpg: aka \"Igor Pecovnik (Ljubljana, Slovenia) <igor.++++++++++++@gmail.com>\" [unknown]\ngpg: WARNING: This key is not certified with a trusted signature!\ngpg: There is no indication that the signature belongs to the owner.\nPrimary key fingerprint: DF00 FAF1 C577 104B 50BF 1D00 93D6 889F 9F0E 78D5\n If something is wrong, the output will look something like this:
Bashgpg: Signature made Thu Feb 13 11:53:18 2025 CET\ngpg: using RSA key DF00FAF1C577104B50BF1D0093D6889F9F0E78D5\ngpg: BAD signature from \"Igor Pecovnik <igor@++++++++++++>\" [unknown]\n"},{"location":"User-Guide_Getting-Started/#deploy-the-image","title":"Deploy the image","text":"There are multiple ways to deploy the image to your board. The easiest and most common option is to write the Armbian Image to your SD-Card.
"},{"location":"User-Guide_Getting-Started/#flash-to-sd-card","title":"Flash to SD Card","text":"Write the .xz compressed image with a tool like USBImager onto your micro-SD card or USB drive (if booting from it is supported). Unlike other tools, it can validate written data saving you from corrupted SD card contents.
Other tools
We are aware that there are many programs that can be used for this step. But, they usually cannot validate the written data to catch a bad card, a faulty card reader, problems writing the image. etc. Issues like these have caused too many error reports. Thus, please follow our advice and don\u2019t use other tools, especially if you are a novice user.
Due to known issues, balenaEtcher can no longer be recommended as an alternative at this time.
"},{"location":"User-Guide_Getting-Started/#flash-to-internal-memory","title":"Flash to Internal Memory","text":"Flash to Internal Memory allows you to write Armbian image directly to the device\u2019s built\u2011in storage. This process completely replaces the existing system and erases all current data on the target drive. Use with caution, as once started, the operation cannot be undone.
"},{"location":"User-Guide_Getting-Started/#rockchip","title":"Rockchip","text":"When a Rockchip device is placed into Maskrom mode, you can use rkdeveloptool to flash an image directly to its internal storage (eMMC, UFS, or SPI) over USB.
Install requirements for rkdeveloptool
sudo apt-get update\nsudo apt-get install -y build-essential git wget\nsudo apt-get install -y libudev-dev libusb-1.0-0-dev dh-autoreconf pkg-config libusb-1.0\n Download & Compile rkdeveloptool
git clone https://github.com/rockchip-linux/rkdeveloptool\ncd rkdeveloptool\nautoreconf -i\n./configure\nmake -j $(nproc)\n Optionally install rkdeveloptool systemwide:
sudo cp rkdeveloptool /usr/local/sbin/\n First make sure you have brew installed. Then you can run the following commands to install rkdeveloptool:
Install requirements
Bashbrew install automake autoconf libusb pkg-config git wget\n Download & Compile rkdeveloptool
git clone https://github.com/rockchip-linux/rkdeveloptool\ncd rkdeveloptool\nautoreconf -i\n./configure\nmake -j $(nproc)\n Optionally install rkdeveloptool systemwide:
cp rkdeveloptool /opt/homebrew/bin/\n rkdeveloptool ld to list all connected devicesunxz Armbian-YourBoard.img.xzrkdeveloptool db RK3XXX_loader.bin which stands for download bootrkdeveloptool ef which stands for erase flashsudo rkdeveloptool wl 0 Armbian-YourBoard.img (make sure the file ends with .img)sudo rkdeveloptool rd which stands for (power) reset deviceIf you used an SD card insert it into a slot and power on the board. With the cheapest board, the first boot (with DHCP) can take up to two minutes with a class 10 SD card.
"},{"location":"User-Guide_Getting-Started/#first-login","title":"First login","text":"The first boot will log you in automatically if you have connected a display via HDMI or if you are connected to the serial console. For SSH, you need to login as root and use the password 1234. If you need to find your board\u2019s IP address, you can use this tool.
After logging in, you will be prompted to change the default password. You will then be asked to create a normal user account that will have sudo permissions. Beware, at this stage, the keyboard is using the QWERTY layout. In case you have no wired network connection and there is a wireless adaptor detected, the system will prompt you to connect.
Text OnlyWelcome to Armbian!\n\nDocumentation: https://docs.armbian.com/ | Community support: https://forum.armbian.com/\n\nIP address: Network connection timeout!\n\nCreate root password: ********\nRepeat root password: ********\n\nShell: BASH\n\nCreating a new user account. Press <Ctrl-C> to abort\n\nPlease provide a username (eg. your first name): jane\nCreate user (Jane) password: ********\nRepeat user (Jane) password: ********\n\nPlease provide your real name: Jane\n\nDear Jane, your account jane has been created and is sudo enabled.\nPlease use this account for your daily work from now on.\n\nInternet connection was not detected.\n\nConnect via wireless? [Y/n] y\n\nMultiple wireless adaptors detected. Choose primary:\n\n1 wlx00e032cxxx94\n2 wlx60fb00yyyc4a\n\nEnter a number of wireles adaptor: 1\n\nDetected wireless networks:\n\n1 NETWORK\n2 MY-WIFI\n3 Caatsanddogs\n\nEnter a number of SSID: 3\n\nEnter a password for MY-WIFI: password\n\nProbing internet connection (9)\n\nDetected timezone: Europe/Ljubljana\n\nSet user language based on your location? [Y/n] y\n\nGenerating locales: sl_SI.UTF-8\nroot@bananapim2pro:~#\n Automated config These settings can be pre-loaded, see Autoconfig
"},{"location":"User-Guide_Getting-Started/#first-steps","title":"First steps","text":"You can customize your Armbian Linux before or after installing it onto your device\u2019s hard-drive. In many cases, you probably want to apply some basic customizations like adjusting the keyboard layout, the timezone, etc., so you can use the same SD card again if necessary. Or you want to adjust your system or hardware configuration or install preconfigured applications and advanced services.
Please note that the typical tool for all tasks is armbian-config. The section Advanced Configuration contains a selection of tasks that require a deeper understanding of the operating system.
"},{"location":"User-Guide_Getting-Started/#configuration","title":"Configuration","text":"Typical tasks include for example:
You can quickly and easily install popular software too! It is ready to run and optimized for Armbian. Here are few highlights:
At this stage, nothing has been installed onto the board\u2019s internal drive yet. Using the installer, one can now decide where to install the boot loader and the rest of the system. The installer supports various combinations depending on the availability of onboard eMMC and/or attached SATA, NVME, or USB storage.
Armbian Installer support those storage scenarios:
Start the install script, make your choice, and follow the instructions:
Text Onlyarmbian-install\n After you have decided for an option, you can choose between the following file systems:
For novice users, a sensible default is ext4.
Congratulation. You have successfully installed Armbian onto your board!
"},{"location":"User-Guide_Getting-Started/#update-the-system","title":"Update the system","text":"The operating system consists of two parts that must be updated separately.
"},{"location":"User-Guide_Getting-Started/#update-the-armbian-os","title":"Update the Armbian OS","text":"For the base operating system, use the APT package manager to keep the packages up to date.
Text Onlyapt update\napt upgrade\n The Update process can take quite some time in case you are using an old or a cheap SD card and/or experience heavy load.
Users with a desktop will find graphical tools that allow one to update the system packages without using the command line.
Armbian provides a firmware package freeze feature to provide you with the possibility to upgrade all packages but the firmware. This prevents unpleasant surprises on functionality regressions that can come with kernel upgrades. To enable or disable this feature, look for
Text OnlyEnable Armbian kernel/firmware upgrades / Disable Armbian kernel upgrades\n within armbian-config.
If the kernel was upgraded during this process, you will be prompted to reboot at the next login.
Upgrade the Armbian OS
When a new major release of Debian or Ubuntu is out, we recommend to start with a fresh image. While it is possible to do what is called a \u201cdist-upgrade\u201d, the process is largerly in the domain of the underlaying Debian or Ubuntu user space. We provide only an experimental Distribution upgrades feature for armbian-config.
Userspaces distribution upgrades are neither tested nor supported. Therefore Armbian cannot provide any support if something goes wrong.
"},{"location":"User-Guide_Getting-Started/#update-the-boot-loader","title":"Update the boot loader","text":"The second part that can be updated is the boot loader.
First, update all packages as described in the previous section. Then run:
Bashsudo armbian-install\n and select:
Text OnlyInstall/Update the bootloader on SD/eMMC\n"},{"location":"User-Guide_Getting-Started/#troubleshooting","title":"Troubleshooting","text":"If you experience an issue during any of the steps mentioned in this section, please first check out our Troubleshooting and Recovery guide.
"},{"location":"User-Guide_Getting-Started/#how-to-report-bugs","title":"How to report bugs","text":"If you are certain you have found a bug, fill out our bug reporting form and follow its instructions to collect the necessary information and how/where to provide them depending on the type of issue. Please understand that any reports lacking these fundamental diagnostics might be ignored.
"},{"location":"User-Guide_Networking/","title":"Networking","text":""},{"location":"User-Guide_Networking/#networking","title":"Networking","text":"Armbian uses Netplan.io to describe networking configurations. Netplan is a utility to easily configure Linux networking, using a declarative approach. If you want to configure your network manually, it is as simple as editing and creating Netplan yaml files (see the yaml configuration reference at the Netplan docs).
Netplan is used to configure networks on all Armbian images since Release 24.05, no matter if minimal, CLI or desktop, Debian or Ubuntu. However, the networking backends are different based on if you choose a minimal image or not.
"},{"location":"User-Guide_Networking/#minimal-images","title":"Minimal images","text":"Netplan renderer: networkd
Minimal images are using the systemd-networkd backend, which has a smaller footprint compared to Network-Manager which is used in all non-minimal images. systemd-networkd is a system daemon that manages network configurations. It detects and configures network devices as they appear; it can also create virtual network devices. This service is great for simple connections, but can also be useful to set up complex network configurations.
All ethernet interfaces are configured for DHCP and will automatically receive an IP address from your router.
/etc/netplan/10-dhcp-all-interfaces.yaml:
network:\n version: 2\n renderer: networkd\n ethernets:\n all-eth-interfaces:\n match:\n name: \"e*\"\n dhcp4: yes\n dhcp6: yes\n ipv6-privacy: yes\n"},{"location":"User-Guide_Networking/#configuration-examples","title":"Configuration examples","text":""},{"location":"User-Guide_Networking/#setting-a-fixed-ip-address","title":"Setting a fixed IP address","text":"When creating an additional .yaml file be sure to remove the default file (/etc/netplan/10-dhcp-all-interfaces.yaml) as the default will overide.
The following example configures a static IP 192.168.1.199 for the eth0 interface. Please adjust as necessary.
How to find your device\u2019s Ethernet interface?
Use command:
Bash
ip addr\n It is usually something like eth0, enp4s3 or lan. /etc/netplan/20-static-ip.yaml:
network:\n version: 2\n renderer: networkd\n ethernets:\n eth0: # Change this to your ethernet interface\n addresses:\n - 192.168.1.199/24\n routes:\n - to: default\n via: 192.168.1.1\n nameservers:\n addresses:\n - 9.9.9.9\n - 1.1.1.1\n See also the Netplan docs for reference.
"},{"location":"User-Guide_Networking/#connecting-to-wifi-network","title":"Connecting to WiFI network","text":"It is recommended to make a separate config file for wireless network.
Create the following file:
sudo nano /etc/netplan/30-wifis-dhcp.yaml:
network:\n version: 2\n renderer: networkd\n wifis:\n wlan0:\n dhcp4: true\n dhcp6: true\n access-points:\n \"Your-SSID\":\n password: \"your-password\"\n Replace SSID with the name of the network you want to connect to and wlan0 with the wifi interface used on your system.
How to find your device\u2019s WiFi interface?
Use command:
Bash
iw dev | awk '$1==\"Interface\"{print $2}'\n It is usually something like wlan0, wlo1 or wlx12334c47dec3. If you get blank response, it means your WiFi device / dongle is not supported by the kernel. See also the Netplan docs for reference.
"},{"location":"User-Guide_Networking/#applying-your-configuration","title":"Applying your configuration","text":"Once you are done configuring your network, it is time to test syntax and apply it.
"},{"location":"User-Guide_Networking/#fix-file-permissions","title":"Fix file permissions","text":"According to the Netplan docs, the permissions must be restricted to the root user.
sudo chmod 600 /etc/netplan/*.yaml\n"},{"location":"User-Guide_Networking/#test-syntax","title":"Test syntax","text":"This will verify the syntax and test if your device can connect
Bash
sudo netplan try\n If there are no warmings or errors and you hit ENTER as suggested the changes will be made and the next, nextplan apply, step can be skipped."},{"location":"User-Guide_Networking/#apply-the-configuration","title":"Apply the configuration","text":"Bashsudo netplan apply\n"},{"location":"User-Guide_Networking/#cli-and-desktop-images","title":"CLI and desktop images","text":"Netplan renderer: Network Manager
Server CLI and desktop images are using the Network-Manager backend. You can use similar methods for configuring your network as with the networkd backend used on minimal images.
The following example configures a static IP 192.168.1.199 for the eth0 interface. Please adjust the example to your likings.
How to find your device\u2019s Ethernet interface?
Use command:
Bash
ip addr\n It is usually something like eth0, enp4s3 or lan. /etc/netplan/20-static-ip.yaml:
network:\n version: 2\n renderer: NetworkManager # Different than 'networkd'\n ethernets:\n eth0: # Change this to your ethernet interface\n addresses:\n - 192.168.1.199/24\n routes:\n - to: default\n via: 192.168.1.1\n nameservers:\n addresses:\n - 9.9.9.9\n - 1.1.1.1\n See also the Netplan docs for reference.
Alternatively, you can also use Network-Manager directly via the command line or GUI tools on your desktop:
Bashnmtui-edit eth0\n Display screenshot Replace eth0 with the name of your Ethernet Interface.
For connecting to a wireless network, you can use the same method as mention above for use with networkd on minimal images. Just make sure to replace renderer: networkd with renderer: NetworkManager.
Alternatively, you can also use Network-Manager directly via the command line or GUI tools on your desktop:
Bashnmtui-connect SSID\n Display screenshot Replace SSID with the name of your wireless network.
First aid video guide:
If you are experiencing at least one of these problems:
lsusb output)and you are using a stable Armbian image, then most likely you have one of two common problems - powering issue or SD card issue.
Note that
If you experience strange network problems, especially if you are running several of these SOC-boards with the same operating system, then the problems may be sourced by not having a real hardware MAC address. The operating systems try to generate a hardware MAC address from the CPUid, but what if that SOC has no CPUid either?
Then you have to do it manually. Depending on system and network installation, there are several possibilities:
/boot/armbianEnv.txt and add a line:Text Only ethaddr=XX:XX:XX:XX:XX:XX\n but that file is interpreted by u-boot, which happens early in boot process, but not every u-boot is able to read that file.
/etc/network/interfaces. Add these lines:Text Only auto eth0\n iface eth0 inet dhcp\n hwaddress ether XX:XX:XX:XX:XX:XX\n /etc/Networkmanager/system-connections is a file Wired connection 1.nmconnection. Change entry cloned-mac-address of group [ethernet] :Text Only [connection]\n id=Wired connection 1\n type=ethernet\n\n [ethernet]\n cloned-mac-address=XX:XX:XX:XX:XX:XX\n Some combination of boards/kernel versions does not support 4k resolution. This may cause black screen on connecting the board to 4k resolution devices. A workaround to solve this without changing the kernel is forcing the video mode to 1080p. Add this directive to the /boot/armbianEnv.txt and reboot your system:
extraargs=video=HDMI-A-1:1920x1080@60\n In 95 percent of all cases it is either a faulty/fraud/counterfeit SD card or an insufficient power supply that is causing all sorts of does not work issues! So, please, make sure you checked the sections above before proceeding.
The following options are presented in (more or less) increasing levels of despair. But keep heart! :) And proceed in order.
"},{"location":"User-Guide_Troubleshooting/#u-boot-shell-access","title":"U-Boot Shell Access","text":"If you broke the system you can try to get in this way. You have to get to u-boot command prompt, using either a serial adapter or monitor and usb keyboard.
After switching power on or rebooting, when u-boot loads up, press some key on the keyboard (or send some key presses via terminal) to abort default boot sequence and get to the command prompt:
Bash SessionU-Boot SPL 2015.07-dirty (Oct 01 2015 - 15:05:21)\n...\nHit any key to stop autoboot: 0\nsunxi#\n Enter the following commands, replacing root device path if necessary.
boot.cmd for your device for commands related to legacy kernel.For serial:
Bash Sessionsunxi# setenv bootargs init=/bin/bash root=/dev/mmcblk0p1 rootwait console=ttyS0,115200\n For monitor:
Bash Sessionsunxi# setenv bootargs init=/bin/bash root=/dev/mmcblk0p1 rootwait console=tty1\n Then:
Bash Sessionsunxi# ext4load mmc 0 0x49000000 /boot/dtb/${fdtfile}\nsunxi# ext4load mmc 0 0x46000000 /boot/zImage\nsunxi# env set fdt_high ffffffff\nsunxi# bootz 0x46000000 - 0x49000000\n System should eventually boot to bash shell:
Bash Sessionroot@host:/#\n Now you can try to fix your broken system.
"},{"location":"User-Guide_Troubleshooting/#replacing-boot","title":"Replacing /boot","text":"When something goes terribly wrong and you are not able to boot the system (and cannot gain access via u-boot as outlined above), this is the way to proceed. You will need some Debian based Linux machine where you can mount the failed SD card. With this procedure you will reinstall the kernel and hardware settings. In most cases this should be enough to unbrick the board.
It is recommended to issue a filesystem check before mounting. Replace X and Y below with your device and partition(s), respectively (if not a flash based device, it may even be /dev/sdXY, etc).
/ # fsck /dev/mmcblkXpY -f\n Mount the SD card.
Bash Session/ # cd /mnt\n/mnt # mkdir sdcard\n/mnt # mount /dev/mmcblkXpY /mnt/sdcard\n Make another temporary directory somewhere else (in our example ~/tmp/recovery) and download the Linux root, kernel, firmware and dtb packages for your board and currently used OS.
/mnt $ cd\n~ $ mkdir -p tmp/recovery\n~ $ cd tmp/recovery\n\n(Root file system):\n~/tmp/recovery $ wget https://apt.armbian.com/pool/main/l/linux-focal-root-current-nanopineo2/linux-focal-root-current-nanopineo2_20.08.13_arm64.deb\n\n(Kernel):\n~/tmp/recovery $ wget https://apt.armbian.com/pool/main/l/linux-5.8.16-sunxi64/linux-image-current-sunxi64_20.08.13_arm64.deb\n\n(Firmware):\n~/tmp/recovery $ wget https://apt.armbian.com/pool/main/a/armbian-firmware/armbian-firmware_20.08.13_all.deb\n\n(Device Tree Binary (DTB)):\n~/tmp/recovery $ wget https://apt.armbian.com/pool/main/l/linux-5.8.16-sunxi64/linux-dtb-current-sunxi64_20.08.13_arm64.deb\n Extract all the Debian packages (.deb files) to the mounted sd card.
~/tmp/recovery # for f in *.deb; do dpkg -x $f /mnt/sdcard; done\n Navigate to /mnt/sdcard/boot and create symlinks:
~/tmp/recovery # cd /mnt/sdcard/boot\n/mnt/sdcard/boot # ln -s vmlinuz-5.8.16-sunxi64 zImage\n/mnt/sdcard/boot # ln -s uInitrd-5.8.16-sunxi64 uInitrd\n/mnt/sdcard/boot # ln -s dtb-5.8.16 dtb\n If you upgrade from some very old build, you might need to update your boot script.
u-boot-tools package on your host system./mnt/sdcard/boot # wget https://raw.githubusercontent.com/armbian/build/master/config/bootscripts/boot-sunxi.cmd\n/mnt/sdcard/boot # mv boot-sunxi.cmd boot.cmd\n/mnt/sdcard/boot # mkimage -C none -A arm -T script -d boot.cmd boot.scr\n Unmount SD card.
Bash Session/mnt/sdcard/boot # cd /\n/ # umount /mnt/sdcard\n Move it to the board and power on. Check serial output for errors if problems persist.
"},{"location":"User-Guide_Troubleshooting/#flashing-boot-loader","title":"Flashing boot loader","text":"Sometimes we need to flash boot loader from some other Linux. Attach an SD card reader with your SD card and proceed this way:
Bash Session/mnt $ cd\n~ $ mkdir -p tmp/recovery\n~ $ cd tmp/recovery\n~ $ wget https://imola.armbian.com/apt/pool/main/l/linux-u-boot-nanopineo2-current/linux-u-boot-current-nanopineo2_20.08.13_arm64.deb\n~ $ dpkg-deb -x linux-u-boot-current-nanopineo2_20.08.13_arm64.deb pack\n~ $ source pack/usr/lib/u-boot/platform_install.sh\n~ $ write_uboot_platform pack/usr/lib/linux-u-boot-nanopineo2-current /dev/XXX # replace XXX with the actual device /dev/sdb\n Move it to the board and power on. Check serial output for errors if problems persist.
"},{"location":"WifiPerformance/","title":"Testing the speed of wireless adapters","text":"All wireless adapters were tested under consistent conditions - each positioned in close proximity (1-2m) and connected to the same wireless access point (AP). The adapters utilized various interface types, including USB, SDIO, and PCI, to evaluate performance across different hardware configurations.
"},{"location":"WifiPerformance/#test-equipment","title":"Test Equipment","text":"
Overview of the WiFi performance test process:
\u26a1 Power On Devices \u2514\u2500 Embedded WiFi-capable devices and USB wireless adapters are powered on.
\ud83c\udf10 Configure Wireless Connection \u2514\u2500 Devices are configured to connect to a predefined access point (SSID).
\ud83d\udcf6 Connect to WiFi Network \u2514\u2500 Network connectivity is validated to ensure the device is routable.
\ud83d\udcca Measure Performance (iperf3) \u251c\u2500 Perform reverse (-R) and forward iperf3 tests \u2514\u2500 Measure throughput and link quality.
\ud83d\udd0d Collect System & Network Info \u251c\u2500 Extract link details (e.g. bitrate, signal strength) \u2514\u2500 Record system version, kernel, architecture.
\ud83d\udd01 Restore Wired Network \u2514\u2500 Reapply original routes and configuration.
\u2601\ufe0f Upload Test Results \u2514\u2500 Summary, logs, and system info are uploaded as artifacts.
\ud83d\udcf4 Power Off Devices \u2514\u2500 All test devices are safely powered down after testing completes.
This section presents the performance test results, including key metrics and technical details from the test execution. Test Date: 2025-08-22 22:29 UTC
"},{"location":"WifiPerformance/#ac","title":"AC","text":""},{"location":"WifiPerformance/#broadcom-4345","title":"Broadcom 4345","text":"OS: Armbian v25.2.2, 6.12.15-current-bcm2711
Chipset Class Average forward speed Average reverse speed BCM4345 AC 53.7 Mbits/sec 51.3 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.152 port 50517 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 5.91 MBytes 49.6 Mbits/sec \n[ 5] 1.00-2.00 sec 5.97 MBytes 50.1 Mbits/sec \n[ 5] 2.00-3.00 sec 6.02 MBytes 50.5 Mbits/sec \n[ 5] 3.00-4.00 sec 6.05 MBytes 50.7 Mbits/sec \n[ 5] 4.00-5.00 sec 6.13 MBytes 51.5 Mbits/sec \n[ 5] 5.00-6.00 sec 6.13 MBytes 51.4 Mbits/sec \n[ 5] 6.00-7.00 sec 6.08 MBytes 51.0 Mbits/sec \n[ 5] 7.00-8.00 sec 6.05 MBytes 50.7 Mbits/sec \n[ 5] 8.00-9.00 sec 6.07 MBytes 50.9 Mbits/sec \n[ 5] 9.00-10.00 sec 6.10 MBytes 51.2 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.02 sec 64.1 MBytes 53.7 Mbits/sec 0 sender\n[ 5] 0.00-10.00 sec 60.5 MBytes 50.8 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.152 port 58709 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 7.56 MBytes 63.4 Mbits/sec 0 395 KBytes \n[ 5] 1.00-2.00 sec 6.09 MBytes 51.1 Mbits/sec 0 594 KBytes \n[ 5] 2.00-3.00 sec 6.22 MBytes 52.2 Mbits/sec 0 814 KBytes \n[ 5] 3.00-4.00 sec 6.25 MBytes 52.4 Mbits/sec 0 867 KBytes \n[ 5] 4.00-5.00 sec 6.25 MBytes 52.4 Mbits/sec 0 969 KBytes \n[ 5] 5.00-6.00 sec 6.25 MBytes 52.4 Mbits/sec 0 969 KBytes \n[ 5] 6.00-7.00 sec 5.00 MBytes 41.9 Mbits/sec 0 969 KBytes \n[ 5] 7.00-8.00 sec 6.25 MBytes 52.4 Mbits/sec 0 969 KBytes \n[ 5] 8.00-9.00 sec 5.00 MBytes 41.9 Mbits/sec 0 969 KBytes \n[ 5] 9.00-10.00 sec 6.25 MBytes 52.4 Mbits/sec 0 969 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 61.1 MBytes 51.3 Mbits/sec 0 sender\n[ 5] 0.00-10.03 sec 58.5 MBytes 48.9 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437\nRX: 152679 bytes (415 packets)\nTX: 84283 bytes (522 packets)\nsignal: -33 dBm\nrx bitrate: 72.2 MBit/s\ntx bitrate: 72.2 MBit/s\n"},{"location":"WifiPerformance/#compex-wle900vx","title":"Compex WLE900VX","text":"OS: Armbian v25.08.0-trunk, 6.12.28-edge-mvebu
Chipset Class Average forward speed Average reverse speed QCA9880 AC 103 Mbits/sec 91.5 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.151 port 60127 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 11.6 MBytes 97.5 Mbits/sec \n[ 5] 1.00-2.00 sec 12.1 MBytes 102 Mbits/sec \n[ 5] 2.00-3.00 sec 12.1 MBytes 101 Mbits/sec \n[ 5] 3.00-4.00 sec 12.1 MBytes 102 Mbits/sec \n[ 5] 4.00-5.00 sec 12.1 MBytes 102 Mbits/sec \n[ 5] 5.00-6.00 sec 12.1 MBytes 102 Mbits/sec \n[ 5] 6.00-7.00 sec 11.9 MBytes 99.7 Mbits/sec \n[ 5] 7.00-8.00 sec 12.0 MBytes 100 Mbits/sec \n[ 5] 8.00-9.00 sec 12.1 MBytes 101 Mbits/sec \n[ 5] 9.00-10.00 sec 12.2 MBytes 103 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.06 sec 123 MBytes 103 Mbits/sec 295 sender\n[ 5] 0.00-10.00 sec 120 MBytes 101 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.151 port 53591 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 10.9 MBytes 91.7 Mbits/sec 0 419 KBytes \n[ 5] 1.00-2.00 sec 11.4 MBytes 95.4 Mbits/sec 0 488 KBytes \n[ 5] 2.00-3.00 sec 11.4 MBytes 95.9 Mbits/sec 0 566 KBytes \n[ 5] 3.00-4.00 sec 11.1 MBytes 92.8 Mbits/sec 0 566 KBytes \n[ 5] 4.00-5.00 sec 11.6 MBytes 97.0 Mbits/sec 0 566 KBytes \n[ 5] 5.00-6.00 sec 10.9 MBytes 91.7 Mbits/sec 0 592 KBytes \n[ 5] 6.00-7.00 sec 11.6 MBytes 97.5 Mbits/sec 0 592 KBytes \n[ 5] 7.00-8.00 sec 11.4 MBytes 95.9 Mbits/sec 0 631 KBytes \n[ 5] 8.00-9.00 sec 9.32 MBytes 78.2 Mbits/sec 0 676 KBytes \n[ 5] 9.00-10.00 sec 9.38 MBytes 78.7 Mbits/sec 0 707 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 109 MBytes 91.5 Mbits/sec 0 sender\n[ 5] 0.00-10.02 sec 108 MBytes 90.0 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437\nRX: 98916 bytes (394 packets)\nTX: 52049 bytes (224 packets)\nsignal: -40 dBm\nrx bitrate: 144.4 MBit/s MCS 15 short GI\n"},{"location":"WifiPerformance/#edup-ep-ac1681","title":"EDUP EP-AC1681","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed RTL88x2BU AC 84.8 Mbits/sec 68.4 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.132 port 40459 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 9.50 MBytes 79.6 Mbits/sec \n[ 5] 1.00-2.00 sec 9.88 MBytes 82.8 Mbits/sec \n[ 5] 2.00-3.00 sec 10.2 MBytes 86.0 Mbits/sec \n[ 5] 3.00-4.00 sec 10.0 MBytes 83.9 Mbits/sec \n[ 5] 4.00-5.00 sec 10.2 MBytes 86.0 Mbits/sec \n[ 5] 5.00-6.00 sec 10.1 MBytes 84.9 Mbits/sec \n[ 5] 6.00-7.00 sec 10.2 MBytes 86.0 Mbits/sec \n[ 5] 7.00-8.00 sec 9.88 MBytes 82.8 Mbits/sec \n[ 5] 8.00-9.00 sec 10.1 MBytes 84.9 Mbits/sec \n[ 5] 9.00-10.00 sec 9.88 MBytes 82.8 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 101 MBytes 84.8 Mbits/sec 1 sender\n[ 5] 0.00-10.00 sec 100 MBytes 84.0 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.132 port 56627 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 10.8 MBytes 90.1 Mbits/sec 0 495 KBytes \n[ 5] 1.00-2.00 sec 8.88 MBytes 74.4 Mbits/sec 0 677 KBytes \n[ 5] 2.00-3.00 sec 8.38 MBytes 70.2 Mbits/sec 0 677 KBytes \n[ 5] 3.00-4.00 sec 7.00 MBytes 58.7 Mbits/sec 0 754 KBytes \n[ 5] 4.00-5.00 sec 8.50 MBytes 71.3 Mbits/sec 0 754 KBytes \n[ 5] 5.00-6.00 sec 7.00 MBytes 58.7 Mbits/sec 0 754 KBytes \n[ 5] 6.00-7.00 sec 8.38 MBytes 70.3 Mbits/sec 0 844 KBytes \n[ 5] 7.00-8.00 sec 7.12 MBytes 59.8 Mbits/sec 0 844 KBytes \n[ 5] 8.00-9.00 sec 8.50 MBytes 71.3 Mbits/sec 0 844 KBytes \n[ 5] 9.00-10.00 sec 7.00 MBytes 58.7 Mbits/sec 0 844 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 81.5 MBytes 68.4 Mbits/sec 0 sender\n[ 5] 0.00-10.04 sec 79.2 MBytes 66.2 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437.0\nRX: 194931 bytes (471 packets)\nTX: 97054 bytes (525 packets)\nsignal: -39 dBm\nrx bitrate: 130.0 MBit/s MCS 15\ntx bitrate: 144.4 MBit/s MCS 15 short GI\n"},{"location":"WifiPerformance/#realtek-8821cu-1","title":"Realtek 8821CU #1","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed RTL8821CU AC 134 Mbits/sec 203 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.131 port 33397 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 10.0 MBytes 83.8 Mbits/sec \n[ 5] 1.00-2.00 sec 14.8 MBytes 124 Mbits/sec \n[ 5] 2.00-3.00 sec 17.0 MBytes 143 Mbits/sec \n[ 5] 3.00-4.00 sec 15.2 MBytes 128 Mbits/sec \n[ 5] 4.00-5.00 sec 15.4 MBytes 129 Mbits/sec \n[ 5] 5.00-6.00 sec 17.5 MBytes 147 Mbits/sec \n[ 5] 6.00-7.00 sec 17.4 MBytes 146 Mbits/sec \n[ 5] 7.00-8.00 sec 17.1 MBytes 144 Mbits/sec \n[ 5] 8.00-9.00 sec 17.5 MBytes 147 Mbits/sec \n[ 5] 9.00-10.00 sec 17.2 MBytes 145 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 160 MBytes 134 Mbits/sec 6 sender\n[ 5] 0.00-10.00 sec 159 MBytes 133 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.131 port 41881 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 25.0 MBytes 209 Mbits/sec 50 286 KBytes \n[ 5] 1.00-2.00 sec 24.9 MBytes 209 Mbits/sec 0 345 KBytes \n[ 5] 2.00-3.00 sec 23.9 MBytes 200 Mbits/sec 0 393 KBytes \n[ 5] 3.00-4.00 sec 24.0 MBytes 201 Mbits/sec 0 424 KBytes \n[ 5] 4.00-5.00 sec 24.0 MBytes 201 Mbits/sec 0 445 KBytes \n[ 5] 5.00-6.00 sec 23.9 MBytes 200 Mbits/sec 0 462 KBytes \n[ 5] 6.00-7.00 sec 24.1 MBytes 202 Mbits/sec 0 474 KBytes \n[ 5] 7.00-8.00 sec 24.8 MBytes 208 Mbits/sec 0 477 KBytes \n[ 5] 8.00-9.00 sec 22.8 MBytes 191 Mbits/sec 0 481 KBytes \n[ 5] 9.00-10.00 sec 24.8 MBytes 207 Mbits/sec 0 488 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 242 MBytes 203 Mbits/sec 50 sender\n[ 5] 0.00-10.02 sec 240 MBytes 201 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 89639 bytes (286 packets)\nTX: 69319 bytes (273 packets)\nsignal: -44 dBm\nrx bitrate: 390.0 MBit/s VHT-MCS 9 80MHz VHT-NSS 1\ntx bitrate: 433.3 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 1\n"},{"location":"WifiPerformance/#realtek-8821cu-2","title":"Realtek 8821CU #2","text":"OS: Armbian v25.5.1, 6.12.28-current-meson64
Chipset Class Average forward speed Average reverse speed RTL8821CU AC 256 Mbits/sec 253 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.150 port 51227 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 27.9 MBytes 234 Mbits/sec \n[ 5] 1.00-2.00 sec 34.1 MBytes 286 Mbits/sec \n[ 5] 2.00-3.00 sec 33.0 MBytes 277 Mbits/sec \n[ 5] 3.00-4.00 sec 31.4 MBytes 263 Mbits/sec \n[ 5] 4.00-5.00 sec 26.1 MBytes 219 Mbits/sec \n[ 5] 5.00-6.00 sec 28.9 MBytes 242 Mbits/sec \n[ 5] 6.00-7.00 sec 30.2 MBytes 254 Mbits/sec \n[ 5] 7.00-8.00 sec 27.9 MBytes 234 Mbits/sec \n[ 5] 8.00-9.00 sec 30.4 MBytes 255 Mbits/sec \n[ 5] 9.00-10.00 sec 32.5 MBytes 273 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 306 MBytes 256 Mbits/sec 138 sender\n[ 5] 0.00-10.00 sec 302 MBytes 254 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.150 port 50725 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 32.8 MBytes 274 Mbits/sec 0 2.22 MBytes \n[ 5] 1.00-2.00 sec 30.9 MBytes 259 Mbits/sec 0 2.22 MBytes \n[ 5] 2.00-3.00 sec 31.0 MBytes 260 Mbits/sec 0 2.22 MBytes \n[ 5] 3.00-4.00 sec 29.5 MBytes 247 Mbits/sec 0 2.96 MBytes \n[ 5] 4.00-5.00 sec 30.2 MBytes 254 Mbits/sec 58 851 KBytes \n[ 5] 5.00-6.00 sec 28.0 MBytes 235 Mbits/sec 154 457 KBytes \n[ 5] 6.00-7.00 sec 29.4 MBytes 246 Mbits/sec 0 512 KBytes \n[ 5] 7.00-8.00 sec 30.6 MBytes 257 Mbits/sec 0 561 KBytes \n[ 5] 8.00-9.00 sec 29.5 MBytes 247 Mbits/sec 0 594 KBytes \n[ 5] 9.00-10.00 sec 29.8 MBytes 249 Mbits/sec 0 619 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 302 MBytes 253 Mbits/sec 212 sender\n[ 5] 0.00-10.01 sec 299 MBytes 250 Mbits/sec receiver\n\niperf Done.\n Text Only\n"},{"location":"WifiPerformance/#realtek-88x2cs","title":"Realtek 88X2CS","text":"OS: Armbian v25.8.1, 6.12.42-current-meson64
Chipset Class Average forward speed Average reverse speed RTL88X2CS AC 104 Mbits/sec 192 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.136 port 46429 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 11.1 MBytes 93.2 Mbits/sec \n[ 5] 1.00-2.00 sec 11.9 MBytes 99.7 Mbits/sec \n[ 5] 2.00-3.00 sec 13.2 MBytes 111 Mbits/sec \n[ 5] 3.00-4.00 sec 13.4 MBytes 112 Mbits/sec \n[ 5] 4.00-5.00 sec 12.4 MBytes 104 Mbits/sec \n[ 5] 5.00-6.00 sec 12.6 MBytes 106 Mbits/sec \n[ 5] 6.00-7.00 sec 12.8 MBytes 107 Mbits/sec \n[ 5] 7.00-8.00 sec 12.2 MBytes 103 Mbits/sec \n[ 5] 8.00-9.00 sec 10.5 MBytes 88.1 Mbits/sec \n[ 5] 9.00-10.00 sec 11.0 MBytes 92.3 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 124 MBytes 104 Mbits/sec 83 sender\n[ 5] 0.00-10.00 sec 121 MBytes 102 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.136 port 57695 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 23.2 MBytes 195 Mbits/sec 0 5.21 MBytes \n[ 5] 1.00-2.00 sec 25.8 MBytes 216 Mbits/sec 0 5.21 MBytes \n[ 5] 2.00-3.00 sec 23.0 MBytes 193 Mbits/sec 0 5.21 MBytes \n[ 5] 3.00-4.00 sec 23.2 MBytes 195 Mbits/sec 0 5.21 MBytes \n[ 5] 4.00-5.00 sec 21.5 MBytes 180 Mbits/sec 0 5.21 MBytes \n[ 5] 5.00-6.00 sec 24.1 MBytes 202 Mbits/sec 0 5.21 MBytes \n[ 5] 6.00-7.00 sec 23.5 MBytes 197 Mbits/sec 61 2.60 MBytes \n[ 5] 7.00-8.00 sec 21.4 MBytes 179 Mbits/sec 64 1.31 MBytes \n[ 5] 8.00-9.00 sec 21.1 MBytes 177 Mbits/sec 92 205 KBytes \n[ 5] 9.00-10.00 sec 21.5 MBytes 180 Mbits/sec 0 321 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 228 MBytes 192 Mbits/sec 217 sender\n[ 5] 0.00-10.01 sec 225 MBytes 189 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 183705 bytes (369 packets)\nTX: 100341 bytes (481 packets)\nsignal: -39 dBm\nrx bitrate: 780.0 MBit/s VHT-MCS 9 80MHz VHT-NSS 2\ntx bitrate: 866.7 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 2\n"},{"location":"WifiPerformance/#ax","title":"AX","text":""},{"location":"WifiPerformance/#ampak-6275p","title":"Ampak 6275P","text":"OS: Armbian v25.8.0-trunk.149, 6.12.33-current-rockchip64
Chipset Class Average forward speed Average reverse speed AP6275P AX 437 Mbits/sec 452 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.149 port 37781 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 43.1 MBytes 361 Mbits/sec \n[ 5] 1.00-2.00 sec 48.1 MBytes 404 Mbits/sec \n[ 5] 2.00-3.00 sec 53.8 MBytes 451 Mbits/sec \n[ 5] 3.00-4.00 sec 52.0 MBytes 437 Mbits/sec \n[ 5] 4.00-5.00 sec 55.8 MBytes 468 Mbits/sec \n[ 5] 5.00-6.00 sec 55.6 MBytes 466 Mbits/sec \n[ 5] 6.00-7.00 sec 54.3 MBytes 455 Mbits/sec \n[ 5] 7.00-8.00 sec 51.0 MBytes 427 Mbits/sec \n[ 5] 8.00-9.00 sec 54.9 MBytes 460 Mbits/sec \n[ 5] 9.00-10.00 sec 50.3 MBytes 422 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 522 MBytes 437 Mbits/sec 310 sender\n[ 5] 0.00-10.00 sec 519 MBytes 435 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.149 port 41501 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 68.0 MBytes 570 Mbits/sec 323 749 KBytes \n[ 5] 1.00-2.00 sec 65.0 MBytes 545 Mbits/sec 1 482 KBytes \n[ 5] 2.00-3.00 sec 58.8 MBytes 493 Mbits/sec 0 635 KBytes \n[ 5] 3.00-4.00 sec 45.0 MBytes 377 Mbits/sec 24 311 KBytes \n[ 5] 4.00-5.00 sec 35.0 MBytes 294 Mbits/sec 3 296 KBytes \n[ 5] 5.00-6.00 sec 22.5 MBytes 189 Mbits/sec 68 249 KBytes \n[ 5] 6.00-7.00 sec 45.0 MBytes 377 Mbits/sec 0 438 KBytes \n[ 5] 7.00-8.00 sec 57.5 MBytes 482 Mbits/sec 0 597 KBytes \n[ 5] 8.00-9.00 sec 68.8 MBytes 577 Mbits/sec 0 745 KBytes \n[ 5] 9.00-10.00 sec 73.8 MBytes 619 Mbits/sec 0 878 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 539 MBytes 452 Mbits/sec 419 sender\n[ 5] 0.00-10.01 sec 537 MBytes 450 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500\nRX: 61458 bytes (126 packets)\nTX: 54154 bytes (196 packets)\nsignal: -33 dBm\nrx bitrate: 1200.9 MBit/s\ntx bitrate: 1200.9 MBit/s\n"},{"location":"WifiPerformance/#comfast-cf953ax","title":"Comfast CF953AX","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed MT7921AU AX 103 Mbits/sec 107 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.148 port 47657 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 12.0 MBytes 101 Mbits/sec \n[ 5] 1.00-2.00 sec 12.5 MBytes 105 Mbits/sec \n[ 5] 2.00-3.00 sec 12.1 MBytes 102 Mbits/sec \n[ 5] 3.00-4.00 sec 11.9 MBytes 99.6 Mbits/sec \n[ 5] 4.00-5.00 sec 12.0 MBytes 101 Mbits/sec \n[ 5] 5.00-6.00 sec 11.8 MBytes 98.6 Mbits/sec \n[ 5] 6.00-7.00 sec 11.8 MBytes 98.6 Mbits/sec \n[ 5] 7.00-8.00 sec 12.4 MBytes 104 Mbits/sec \n[ 5] 8.00-9.00 sec 11.9 MBytes 99.6 Mbits/sec \n[ 5] 9.00-10.00 sec 12.1 MBytes 102 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 123 MBytes 103 Mbits/sec 265 sender\n[ 5] 0.00-10.00 sec 120 MBytes 101 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.148 port 41445 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.01 sec 13.9 MBytes 116 Mbits/sec 0 416 KBytes \n[ 5] 1.01-2.00 sec 12.1 MBytes 102 Mbits/sec 0 580 KBytes \n[ 5] 2.00-3.02 sec 13.1 MBytes 108 Mbits/sec 0 652 KBytes \n[ 5] 3.02-4.01 sec 12.6 MBytes 108 Mbits/sec 0 735 KBytes \n[ 5] 4.01-5.05 sec 14.2 MBytes 114 Mbits/sec 0 782 KBytes \n[ 5] 5.05-6.02 sec 13.8 MBytes 119 Mbits/sec 0 782 KBytes \n[ 5] 6.02-7.01 sec 11.6 MBytes 99.2 Mbits/sec 0 782 KBytes \n[ 5] 7.01-8.06 sec 12.6 MBytes 100 Mbits/sec 0 782 KBytes \n[ 5] 8.06-9.04 sec 10.8 MBytes 92.5 Mbits/sec 0 782 KBytes \n[ 5] 9.04-10.01 sec 12.9 MBytes 111 Mbits/sec 0 782 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 128 MBytes 107 Mbits/sec 0 sender\n[ 5] 0.00-10.01 sec 124 MBytes 104 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 146917 bytes (453 packets)\nTX: 79810 bytes (491 packets)\nsignal: -37 dBm\nrx bitrate: 1200.9 MBit/s 80MHz HE-MCS 11 HE-NSS 2 HE-GI 0 HE-DCM 0\ntx bitrate: 1200.9 MBit/s 80MHz HE-MCS 11 HE-NSS 2 HE-GI 0 HE-DCM 0\n"},{"location":"WifiPerformance/#intel-ax200","title":"Intel AX200","text":"OS: Armbian v25.2.2, 6.12.15-current-rockchip64
Chipset Class Average forward speed Average reverse speed AX200 AX 644 Mbits/sec 485 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.147 port 51665 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 107 MBytes 898 Mbits/sec \n[ 5] 1.00-2.00 sec 107 MBytes 900 Mbits/sec \n[ 5] 2.00-3.00 sec 96.1 MBytes 806 Mbits/sec \n[ 5] 3.00-4.00 sec 70.1 MBytes 588 Mbits/sec \n[ 5] 4.00-5.00 sec 62.9 MBytes 527 Mbits/sec \n[ 5] 5.00-6.00 sec 61.0 MBytes 512 Mbits/sec \n[ 5] 6.00-7.00 sec 77.5 MBytes 650 Mbits/sec \n[ 5] 7.00-8.00 sec 68.4 MBytes 574 Mbits/sec \n[ 5] 8.00-9.00 sec 57.8 MBytes 484 Mbits/sec \n[ 5] 9.00-10.00 sec 56.5 MBytes 474 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 768 MBytes 644 Mbits/sec 434 sender\n[ 5] 0.00-10.00 sec 765 MBytes 641 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.147 port 43967 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 30.1 MBytes 252 Mbits/sec 0 2.58 MBytes \n[ 5] 1.00-2.00 sec 55.5 MBytes 466 Mbits/sec 124 745 KBytes \n[ 5] 2.00-3.00 sec 73.6 MBytes 618 Mbits/sec 50 557 KBytes \n[ 5] 3.00-4.00 sec 81.5 MBytes 684 Mbits/sec 0 740 KBytes \n[ 5] 4.00-5.00 sec 72.5 MBytes 608 Mbits/sec 1 465 KBytes \n[ 5] 5.00-6.00 sec 47.4 MBytes 397 Mbits/sec 0 595 KBytes \n[ 5] 6.00-7.00 sec 71.9 MBytes 603 Mbits/sec 10 397 KBytes \n[ 5] 7.00-8.00 sec 58.2 MBytes 489 Mbits/sec 0 573 KBytes \n[ 5] 8.00-9.00 sec 54.9 MBytes 460 Mbits/sec 24 216 KBytes \n[ 5] 9.00-10.00 sec 32.4 MBytes 271 Mbits/sec 0 375 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 578 MBytes 485 Mbits/sec 209 sender\n[ 5] 0.00-10.01 sec 576 MBytes 482 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 38883 bytes (169 packets)\nTX: 53625 bytes (188 packets)\nsignal: -29 dBm\nrx bitrate: 1200.9 MBit/s 160MHz HE-MCS 11 HE-NSS 1 HE-GI 0 HE-DCM 0\ntx bitrate: 490.0 MBit/s 160MHz HE-MCS 3 HE-NSS 2 HE-GI 2 HE-DCM 0\n"},{"location":"WifiPerformance/#realtek-8852ae","title":"Realtek 8852AE","text":"OS: Armbian v25.8.1, 6.12.42-current-rockchip64
Chipset Class Average forward speed Average reverse speed RTL8852AE AX 541 Mbits/sec 539 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.135 port 44147 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 71.1 MBytes 596 Mbits/sec \n[ 5] 1.00-2.00 sec 73.1 MBytes 613 Mbits/sec \n[ 5] 2.00-3.00 sec 49.2 MBytes 412 Mbits/sec \n[ 5] 3.00-4.00 sec 62.4 MBytes 523 Mbits/sec \n[ 5] 4.00-5.00 sec 69.2 MBytes 581 Mbits/sec \n[ 5] 5.00-6.00 sec 73.1 MBytes 614 Mbits/sec \n[ 5] 6.00-7.00 sec 77.7 MBytes 651 Mbits/sec \n[ 5] 7.00-8.00 sec 75.6 MBytes 634 Mbits/sec \n[ 5] 8.00-9.00 sec 43.7 MBytes 366 Mbits/sec \n[ 5] 9.00-10.00 sec 46.7 MBytes 392 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 645 MBytes 541 Mbits/sec 205 sender\n[ 5] 0.00-10.00 sec 642 MBytes 538 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.135 port 35269 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 91.2 MBytes 765 Mbits/sec 441 2.81 MBytes \n[ 5] 1.00-2.00 sec 88.8 MBytes 744 Mbits/sec 0 2.81 MBytes \n[ 5] 2.00-3.00 sec 82.5 MBytes 692 Mbits/sec 457 757 KBytes \n[ 5] 3.00-4.00 sec 66.2 MBytes 556 Mbits/sec 11 317 KBytes \n[ 5] 4.00-5.00 sec 61.2 MBytes 514 Mbits/sec 0 529 KBytes \n[ 5] 5.00-6.00 sec 53.8 MBytes 451 Mbits/sec 34 240 KBytes \n[ 5] 6.00-7.00 sec 30.0 MBytes 252 Mbits/sec 30 112 KBytes \n[ 5] 7.00-8.00 sec 35.0 MBytes 294 Mbits/sec 0 337 KBytes \n[ 5] 8.00-9.00 sec 63.8 MBytes 535 Mbits/sec 0 544 KBytes \n[ 5] 9.00-10.00 sec 70.0 MBytes 585 Mbits/sec 0 707 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 642 MBytes 539 Mbits/sec 973 sender\n[ 5] 0.00-10.01 sec 640 MBytes 536 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500\nRX: 129681 bytes (490 packets)\nTX: 60051 bytes (222 packets)\nsignal: -30 dBm\nrx bitrate: 1200.9 MBit/s 80MHz HE-MCS 11 HE-NSS 2 HE-GI 0 HE-DCM 0\ntx bitrate: 1200.9 MBit/s 80MHz HE-MCS 11 HE-NSS 2 HE-GI 0 HE-DCM 0\n"},{"location":"WifiPerformance/#realtek-8852bs","title":"Realtek 8852BS","text":"OS: Armbian v25.8.1, 6.6.99-current-spacemit
Chipset Class Average forward speed Average reverse speed RTL8852BS AX 389 Mbits/sec 365 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.134 port 45169 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 41.9 MBytes 351 Mbits/sec \n[ 5] 1.00-2.00 sec 53.0 MBytes 445 Mbits/sec \n[ 5] 2.00-3.00 sec 52.2 MBytes 438 Mbits/sec \n[ 5] 3.00-4.00 sec 51.5 MBytes 432 Mbits/sec \n[ 5] 4.00-5.00 sec 47.8 MBytes 401 Mbits/sec \n[ 5] 5.00-6.00 sec 40.9 MBytes 343 Mbits/sec \n[ 5] 6.00-7.00 sec 31.5 MBytes 264 Mbits/sec \n[ 5] 7.00-8.00 sec 45.2 MBytes 380 Mbits/sec \n[ 5] 8.00-9.00 sec 48.5 MBytes 407 Mbits/sec \n[ 5] 9.00-10.00 sec 48.5 MBytes 407 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 464 MBytes 389 Mbits/sec 238 sender\n[ 5] 0.00-10.00 sec 461 MBytes 387 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.134 port 56765 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 32.9 MBytes 275 Mbits/sec 12 447 KBytes \n[ 5] 1.00-2.00 sec 42.4 MBytes 355 Mbits/sec 0 509 KBytes \n[ 5] 2.00-3.00 sec 41.8 MBytes 350 Mbits/sec 0 568 KBytes \n[ 5] 3.00-4.00 sec 41.4 MBytes 347 Mbits/sec 0 624 KBytes \n[ 5] 4.00-5.00 sec 46.5 MBytes 390 Mbits/sec 0 676 KBytes \n[ 5] 5.00-6.00 sec 43.6 MBytes 366 Mbits/sec 0 724 KBytes \n[ 5] 6.00-7.00 sec 47.4 MBytes 397 Mbits/sec 0 772 KBytes \n[ 5] 7.00-8.00 sec 47.4 MBytes 397 Mbits/sec 0 817 KBytes \n[ 5] 8.00-9.00 sec 47.2 MBytes 396 Mbits/sec 0 854 KBytes \n[ 5] 9.00-10.00 sec 44.6 MBytes 374 Mbits/sec 0 889 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 436 MBytes 365 Mbits/sec 12 sender\n[ 5] 0.00-10.01 sec 434 MBytes 363 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 50231 bytes (137 packets)\nTX: 51503 bytes (217 packets)\n"},{"location":"WifiPerformance/#n","title":"N","text":""},{"location":"WifiPerformance/#alfa-rt3572","title":"Alfa RT3572","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed RT3572 N 85.5 Mbits/sec 43.9 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.146 port 55069 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 8.75 MBytes 73.3 Mbits/sec \n[ 5] 1.00-2.00 sec 9.12 MBytes 76.6 Mbits/sec \n[ 5] 2.00-3.00 sec 9.00 MBytes 75.4 Mbits/sec \n[ 5] 3.00-4.00 sec 9.75 MBytes 81.8 Mbits/sec \n[ 5] 4.00-5.00 sec 8.75 MBytes 73.4 Mbits/sec \n[ 5] 5.00-6.00 sec 10.0 MBytes 83.9 Mbits/sec \n[ 5] 6.00-7.00 sec 10.8 MBytes 90.2 Mbits/sec \n[ 5] 7.00-8.00 sec 11.0 MBytes 92.3 Mbits/sec \n[ 5] 8.00-9.00 sec 11.6 MBytes 97.4 Mbits/sec \n[ 5] 9.00-10.00 sec 9.62 MBytes 80.8 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 102 MBytes 85.5 Mbits/sec 40 sender\n[ 5] 0.00-10.00 sec 98.4 MBytes 82.5 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.146 port 42775 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 7.00 MBytes 58.7 Mbits/sec 0 192 KBytes \n[ 5] 1.00-2.00 sec 5.50 MBytes 46.1 Mbits/sec 0 214 KBytes \n[ 5] 2.00-3.00 sec 4.88 MBytes 40.9 Mbits/sec 0 214 KBytes \n[ 5] 3.00-4.00 sec 5.25 MBytes 44.0 Mbits/sec 1 165 KBytes \n[ 5] 4.00-5.00 sec 5.00 MBytes 41.9 Mbits/sec 0 180 KBytes \n[ 5] 5.00-6.00 sec 5.12 MBytes 43.0 Mbits/sec 0 198 KBytes \n[ 5] 6.00-7.00 sec 4.75 MBytes 39.8 Mbits/sec 0 198 KBytes \n[ 5] 7.00-8.00 sec 5.25 MBytes 44.0 Mbits/sec 0 212 KBytes \n[ 5] 8.00-9.00 sec 4.88 MBytes 40.9 Mbits/sec 0 212 KBytes \n[ 5] 9.00-10.00 sec 4.75 MBytes 39.8 Mbits/sec 0 212 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 52.4 MBytes 43.9 Mbits/sec 1 sender\n[ 5] 0.00-10.00 sec 51.5 MBytes 43.2 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 190803 bytes (598 packets)\nTX: 94368 bytes (547 packets)\nsignal: -17 dBm\nrx bitrate: 150.0 MBit/s MCS 7 40MHz short GI\ntx bitrate: 300.0 MBit/s MCS 15 40MHz short GI\n"},{"location":"WifiPerformance/#atheros-ar9271","title":"Atheros AR9271","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed AR9271 N 50.8 Mbits/sec 44.7 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.129 port 38349 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 5.62 MBytes 47.1 Mbits/sec \n[ 5] 1.00-2.00 sec 5.50 MBytes 46.1 Mbits/sec \n[ 5] 2.00-3.00 sec 5.75 MBytes 48.2 Mbits/sec \n[ 5] 3.00-4.00 sec 5.62 MBytes 47.2 Mbits/sec \n[ 5] 4.00-5.00 sec 5.62 MBytes 47.2 Mbits/sec \n[ 5] 5.00-6.00 sec 5.75 MBytes 48.2 Mbits/sec \n[ 5] 6.00-7.00 sec 5.88 MBytes 49.3 Mbits/sec \n[ 5] 7.00-8.00 sec 5.62 MBytes 47.2 Mbits/sec \n[ 5] 8.00-9.00 sec 5.62 MBytes 47.2 Mbits/sec \n[ 5] 9.00-10.00 sec 5.75 MBytes 48.2 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 60.6 MBytes 50.8 Mbits/sec 8 sender\n[ 5] 0.00-10.00 sec 56.8 MBytes 47.6 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.129 port 51923 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 6.25 MBytes 52.4 Mbits/sec 0 208 KBytes \n[ 5] 1.00-2.00 sec 5.00 MBytes 41.9 Mbits/sec 0 230 KBytes \n[ 5] 2.00-3.00 sec 5.62 MBytes 47.2 Mbits/sec 0 250 KBytes \n[ 5] 3.00-4.00 sec 5.62 MBytes 47.2 Mbits/sec 0 263 KBytes \n[ 5] 4.00-5.00 sec 5.00 MBytes 41.9 Mbits/sec 0 263 KBytes \n[ 5] 5.00-6.00 sec 5.00 MBytes 41.9 Mbits/sec 0 263 KBytes \n[ 5] 6.00-7.00 sec 5.12 MBytes 43.0 Mbits/sec 0 263 KBytes \n[ 5] 7.00-8.00 sec 5.50 MBytes 46.1 Mbits/sec 0 263 KBytes \n[ 5] 8.00-9.00 sec 5.12 MBytes 43.0 Mbits/sec 0 263 KBytes \n[ 5] 9.00-10.00 sec 5.00 MBytes 41.9 Mbits/sec 0 263 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 53.2 MBytes 44.7 Mbits/sec 0 sender\n[ 5] 0.00-10.02 sec 52.2 MBytes 43.7 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437.0\nRX: 102557 bytes (363 packets)\nTX: 49880 bytes (208 packets)\nsignal: -52 dBm\nrx bitrate: 72.2 MBit/s MCS 7 short GI\ntx bitrate: 72.2 MBit/s MCS 7 short GI\n"},{"location":"WifiPerformance/#broadcom-43430","title":"Broadcom 43430","text":"OS: Armbian v25.5.1, 6.12.23-current-sunxi
Chipset Class Average forward speed Average reverse speed BCM43430 N 51.2 Mbits/sec 37.2 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.145 port 37887 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 5.40 MBytes 45.3 Mbits/sec \n[ 5] 1.00-2.00 sec 6.04 MBytes 50.7 Mbits/sec \n[ 5] 2.00-3.00 sec 5.94 MBytes 49.8 Mbits/sec \n[ 5] 3.00-4.00 sec 5.99 MBytes 50.2 Mbits/sec \n[ 5] 4.00-5.00 sec 6.07 MBytes 50.9 Mbits/sec \n[ 5] 5.00-6.00 sec 5.94 MBytes 49.8 Mbits/sec \n[ 5] 6.00-7.00 sec 6.08 MBytes 51.0 Mbits/sec \n[ 5] 7.00-8.00 sec 5.54 MBytes 46.5 Mbits/sec \n[ 5] 8.00-9.00 sec 5.44 MBytes 45.6 Mbits/sec \n[ 5] 9.00-10.00 sec 5.81 MBytes 48.7 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.03 sec 61.2 MBytes 51.2 Mbits/sec 131 sender\n[ 5] 0.00-10.00 sec 58.2 MBytes 48.9 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.145 port 58533 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 5.06 MBytes 42.5 Mbits/sec 0 181 KBytes \n[ 5] 1.00-2.00 sec 4.54 MBytes 38.1 Mbits/sec 0 198 KBytes \n[ 5] 2.00-3.00 sec 4.47 MBytes 37.5 Mbits/sec 0 198 KBytes \n[ 5] 3.00-4.00 sec 4.47 MBytes 37.5 Mbits/sec 0 198 KBytes \n[ 5] 4.00-5.00 sec 4.47 MBytes 37.5 Mbits/sec 0 208 KBytes \n[ 5] 5.00-6.00 sec 4.29 MBytes 36.0 Mbits/sec 0 208 KBytes \n[ 5] 6.00-7.00 sec 3.60 MBytes 30.2 Mbits/sec 0 239 KBytes \n[ 5] 7.00-8.00 sec 4.41 MBytes 37.0 Mbits/sec 0 239 KBytes \n[ 5] 8.00-9.00 sec 4.60 MBytes 38.6 Mbits/sec 1 199 KBytes \n[ 5] 9.00-10.00 sec 4.47 MBytes 37.5 Mbits/sec 0 216 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 44.4 MBytes 37.2 Mbits/sec 1 sender\n[ 5] 0.00-10.02 sec 43.8 MBytes 36.6 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437\nRX: 83933 bytes (269 packets)\nTX: 65367 bytes (297 packets)\nsignal: -54 dBm\nrx bitrate: 72.2 MBit/s\ntx bitrate: 72.2 MBit/s\n"},{"location":"WifiPerformance/#broadcom-43455","title":"Broadcom 43455","text":"OS: Armbian v25.2.3, 6.12.22-current-x86
Chipset Class Average forward speed Average reverse speed BCM43455 N 47.2 Mbits/sec 50.8 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.144 port 37015 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 5.90 MBytes 49.4 Mbits/sec \n[ 5] 1.00-2.00 sec 5.23 MBytes 43.9 Mbits/sec \n[ 5] 2.00-3.00 sec 5.06 MBytes 42.4 Mbits/sec \n[ 5] 3.00-4.00 sec 5.81 MBytes 48.7 Mbits/sec \n[ 5] 4.00-5.00 sec 6.46 MBytes 54.2 Mbits/sec \n[ 5] 5.00-6.00 sec 5.30 MBytes 44.4 Mbits/sec \n[ 5] 6.00-7.00 sec 5.51 MBytes 46.2 Mbits/sec \n[ 5] 7.00-8.00 sec 4.28 MBytes 35.9 Mbits/sec \n[ 5] 8.00-9.00 sec 6.34 MBytes 53.2 Mbits/sec \n[ 5] 9.00-10.00 sec 4.98 MBytes 41.8 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.19 sec 57.4 MBytes 47.2 Mbits/sec 291 sender\n[ 5] 0.00-10.00 sec 54.9 MBytes 46.0 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.144 port 33731 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 6.55 MBytes 54.9 Mbits/sec 0 199 KBytes \n[ 5] 1.00-2.00 sec 6.21 MBytes 52.2 Mbits/sec 0 243 KBytes \n[ 5] 2.00-3.00 sec 6.21 MBytes 52.1 Mbits/sec 0 276 KBytes \n[ 5] 3.00-4.00 sec 6.21 MBytes 52.1 Mbits/sec 0 294 KBytes \n[ 5] 4.00-5.00 sec 5.59 MBytes 46.9 Mbits/sec 0 294 KBytes \n[ 5] 5.00-6.00 sec 5.72 MBytes 47.9 Mbits/sec 0 294 KBytes \n[ 5] 6.00-7.00 sec 6.28 MBytes 52.7 Mbits/sec 0 311 KBytes \n[ 5] 7.00-8.00 sec 5.84 MBytes 48.9 Mbits/sec 0 311 KBytes \n[ 5] 8.00-9.00 sec 5.59 MBytes 47.0 Mbits/sec 0 311 KBytes \n[ 5] 9.00-10.00 sec 6.40 MBytes 53.7 Mbits/sec 0 311 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 60.6 MBytes 50.8 Mbits/sec 0 sender\n[ 5] 0.00-10.01 sec 59.1 MBytes 49.5 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500\nRX: 53511 bytes (137 packets)\nTX: 50848 bytes (242 packets)\nsignal: -45 dBm\nrx bitrate: 433.3 MBit/s\ntx bitrate: 433.3 MBit/s\n"},{"location":"WifiPerformance/#ralink-rt5370","title":"Ralink RT5370","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed RT5370 N 46.5 Mbits/sec 38.4 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.143 port 43847 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 4.62 MBytes 38.8 Mbits/sec \n[ 5] 1.00-2.00 sec 5.12 MBytes 43.0 Mbits/sec \n[ 5] 2.00-3.00 sec 5.38 MBytes 45.1 Mbits/sec \n[ 5] 3.00-4.00 sec 5.38 MBytes 45.1 Mbits/sec \n[ 5] 4.00-5.00 sec 5.25 MBytes 44.0 Mbits/sec \n[ 5] 5.00-6.00 sec 5.38 MBytes 45.1 Mbits/sec \n[ 5] 6.00-7.00 sec 5.38 MBytes 45.1 Mbits/sec \n[ 5] 7.00-8.00 sec 5.38 MBytes 45.1 Mbits/sec \n[ 5] 8.00-9.00 sec 5.50 MBytes 46.1 Mbits/sec \n[ 5] 9.00-10.00 sec 5.62 MBytes 47.2 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.02 sec 55.5 MBytes 46.5 Mbits/sec 0 sender\n[ 5] 0.00-10.00 sec 53.0 MBytes 44.5 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.143 port 41709 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 5.75 MBytes 48.2 Mbits/sec 0 264 KBytes \n[ 5] 1.00-2.00 sec 5.00 MBytes 41.9 Mbits/sec 0 419 KBytes \n[ 5] 2.00-3.00 sec 4.88 MBytes 40.9 Mbits/sec 0 455 KBytes \n[ 5] 3.00-4.00 sec 4.25 MBytes 35.7 Mbits/sec 0 488 KBytes \n[ 5] 4.00-5.00 sec 4.00 MBytes 33.5 Mbits/sec 0 488 KBytes \n[ 5] 5.00-6.00 sec 4.50 MBytes 37.8 Mbits/sec 0 550 KBytes \n[ 5] 6.00-7.00 sec 3.75 MBytes 31.5 Mbits/sec 0 550 KBytes \n[ 5] 7.00-8.00 sec 5.62 MBytes 47.2 Mbits/sec 0 550 KBytes \n[ 5] 8.00-9.00 sec 4.50 MBytes 37.7 Mbits/sec 0 550 KBytes \n[ 5] 9.00-10.00 sec 3.50 MBytes 29.3 Mbits/sec 0 550 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 45.8 MBytes 38.4 Mbits/sec 0 sender\n[ 5] 0.00-10.01 sec 43.6 MBytes 36.6 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437.0\nRX: 80744 bytes (339 packets)\nTX: 55518 bytes (210 packets)\nsignal: -33 dBm\nrx bitrate: 72.2 MBit/s MCS 7 short GI\ntx bitrate: 72.2 MBit/s MCS 7 short GI\n"},{"location":"WifiPerformance/#ralink-rt5572","title":"Ralink RT5572","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed RT5572 N 65.1 Mbits/sec 49.0 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.142 port 57105 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 6.12 MBytes 51.3 Mbits/sec \n[ 5] 1.00-2.00 sec 7.38 MBytes 61.9 Mbits/sec \n[ 5] 2.00-3.00 sec 9.38 MBytes 78.6 Mbits/sec \n[ 5] 3.00-4.00 sec 6.62 MBytes 55.5 Mbits/sec \n[ 5] 4.00-5.00 sec 8.00 MBytes 67.0 Mbits/sec \n[ 5] 5.00-6.00 sec 6.25 MBytes 52.5 Mbits/sec \n[ 5] 6.00-7.00 sec 9.25 MBytes 77.5 Mbits/sec \n[ 5] 7.00-8.00 sec 7.50 MBytes 62.9 Mbits/sec \n[ 5] 8.00-9.00 sec 7.25 MBytes 60.8 Mbits/sec \n[ 5] 9.00-10.00 sec 7.88 MBytes 66.1 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 77.6 MBytes 65.1 Mbits/sec 1 sender\n[ 5] 0.00-10.00 sec 75.6 MBytes 63.4 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.142 port 60063 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 6.50 MBytes 54.5 Mbits/sec 0 191 KBytes \n[ 5] 1.00-2.00 sec 6.00 MBytes 50.3 Mbits/sec 0 199 KBytes \n[ 5] 2.00-3.00 sec 5.75 MBytes 48.2 Mbits/sec 0 199 KBytes \n[ 5] 3.00-4.00 sec 5.75 MBytes 48.2 Mbits/sec 0 206 KBytes \n[ 5] 4.00-5.00 sec 5.75 MBytes 48.3 Mbits/sec 0 206 KBytes \n[ 5] 5.00-6.00 sec 5.25 MBytes 44.1 Mbits/sec 0 206 KBytes \n[ 5] 6.00-7.00 sec 5.75 MBytes 48.2 Mbits/sec 0 225 KBytes \n[ 5] 7.00-8.00 sec 5.88 MBytes 49.3 Mbits/sec 0 225 KBytes \n[ 5] 8.00-9.00 sec 6.12 MBytes 51.4 Mbits/sec 0 293 KBytes \n[ 5] 9.00-10.00 sec 5.62 MBytes 47.1 Mbits/sec 0 293 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 58.4 MBytes 49.0 Mbits/sec 0 sender\n[ 5] 0.00-10.00 sec 56.8 MBytes 47.6 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 96933 bytes (406 packets)\nTX: 59777 bytes (286 packets)\nsignal: -28 dBm\nrx bitrate: 180.0 MBit/s MCS 12 40MHz short GI\ntx bitrate: 300.0 MBit/s MCS 15 40MHz short GI\n"},{"location":"WifiPerformance/#realtek-8188cus","title":"Realtek 8188CUS","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed RTL8192CU N 19.2 Mbits/sec 37.8 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.141 port 46113 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 1.75 MBytes 14.7 Mbits/sec \n[ 5] 1.00-2.00 sec 2.00 MBytes 16.8 Mbits/sec \n[ 5] 2.00-3.00 sec 2.12 MBytes 17.8 Mbits/sec \n[ 5] 3.00-4.00 sec 2.12 MBytes 17.8 Mbits/sec \n[ 5] 4.00-5.00 sec 2.00 MBytes 16.8 Mbits/sec \n[ 5] 5.00-6.00 sec 1.88 MBytes 15.7 Mbits/sec \n[ 5] 6.00-7.00 sec 2.00 MBytes 16.8 Mbits/sec \n[ 5] 7.00-8.00 sec 2.00 MBytes 16.8 Mbits/sec \n[ 5] 8.00-9.00 sec 2.00 MBytes 16.8 Mbits/sec \n[ 5] 9.00-10.00 sec 1.75 MBytes 14.7 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 22.9 MBytes 19.2 Mbits/sec 0 sender\n[ 5] 0.00-10.00 sec 19.6 MBytes 16.5 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.141 port 58385 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 4.12 MBytes 34.6 Mbits/sec 0 205 KBytes \n[ 5] 1.00-2.00 sec 4.38 MBytes 36.7 Mbits/sec 0 328 KBytes \n[ 5] 2.00-3.00 sec 3.88 MBytes 32.5 Mbits/sec 0 413 KBytes \n[ 5] 3.00-4.00 sec 5.12 MBytes 43.0 Mbits/sec 0 471 KBytes \n[ 5] 4.00-5.00 sec 4.00 MBytes 33.6 Mbits/sec 0 471 KBytes \n[ 5] 5.00-6.00 sec 5.00 MBytes 41.9 Mbits/sec 5 365 KBytes \n[ 5] 6.00-7.00 sec 5.00 MBytes 41.9 Mbits/sec 0 407 KBytes \n[ 5] 7.00-8.00 sec 4.75 MBytes 39.8 Mbits/sec 0 438 KBytes \n[ 5] 8.00-9.00 sec 4.88 MBytes 40.9 Mbits/sec 0 458 KBytes \n[ 5] 9.00-10.00 sec 4.00 MBytes 33.5 Mbits/sec 0 458 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 45.1 MBytes 37.8 Mbits/sec 5 sender\n[ 5] 0.00-10.02 sec 43.1 MBytes 36.1 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437.0\nRX: 91384 bytes (324 packets)\nTX: 61293 bytes (226 packets)\nsignal: -40 dBm\nrx bitrate: 52.0 MBit/s MCS 5\ntx bitrate: 72.2 MBit/s MCS 7 short GI\n"},{"location":"WifiPerformance/#realtek-8723bs","title":"Realtek 8723BS","text":"OS: Armbian v25.2.1, 6.12.13-current-rockchip
Chipset Class Average forward speed Average reverse speed RTL8723BS N 29.4 Mbits/sec 22.7 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.140 port 57017 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 4.04 MBytes 33.9 Mbits/sec \n[ 5] 1.00-2.00 sec 3.47 MBytes 29.1 Mbits/sec \n[ 5] 2.00-3.00 sec 2.18 MBytes 18.3 Mbits/sec \n[ 5] 3.00-4.00 sec 3.95 MBytes 33.2 Mbits/sec \n[ 5] 4.00-5.00 sec 3.27 MBytes 27.5 Mbits/sec \n[ 5] 5.00-6.00 sec 2.61 MBytes 21.9 Mbits/sec \n[ 5] 6.00-7.00 sec 3.75 MBytes 31.5 Mbits/sec \n[ 5] 7.00-8.00 sec 3.75 MBytes 31.5 Mbits/sec \n[ 5] 8.00-9.00 sec 831 KBytes 6.81 Mbits/sec \n[ 5] 9.00-10.00 sec 4.00 MBytes 33.6 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 35.1 MBytes 29.4 Mbits/sec 47 sender\n[ 5] 0.00-10.00 sec 31.8 MBytes 26.7 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.140 port 55955 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 4.91 MBytes 41.2 Mbits/sec 0 263 KBytes \n[ 5] 1.00-2.00 sec 3.73 MBytes 31.3 Mbits/sec 0 443 KBytes \n[ 5] 2.00-3.00 sec 2.98 MBytes 25.0 Mbits/sec 0 510 KBytes \n[ 5] 3.00-4.00 sec 2.67 MBytes 22.4 Mbits/sec 0 612 KBytes \n[ 5] 4.00-5.00 sec 2.11 MBytes 17.7 Mbits/sec 0 716 KBytes \n[ 5] 5.00-6.00 sec 2.42 MBytes 20.3 Mbits/sec 0 778 KBytes \n[ 5] 6.00-7.00 sec 3.60 MBytes 30.2 Mbits/sec 0 778 KBytes \n[ 5] 7.00-8.00 sec 1.74 MBytes 14.6 Mbits/sec 0 847 KBytes \n[ 5] 8.00-9.00 sec 1.86 MBytes 15.6 Mbits/sec 0 872 KBytes \n[ 5] 9.00-10.00 sec 1018 KBytes 8.34 Mbits/sec 0 921 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 27.0 MBytes 22.7 Mbits/sec 0 sender\n[ 5] 0.00-10.01 sec 26.0 MBytes 21.8 Mbits/sec receiver\n\niperf Done.\n Text Only\n"},{"location":"WifiPerformance/#uwe-5622","title":"UWE 5622","text":"OS: Armbian v25.8.0-trunk.154, 6.12.30-current-sunxi64
Chipset Class Average forward speed Average reverse speed UWE5622 N 134 Mbits/sec 137 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.138 port 39627 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 15.4 MBytes 129 Mbits/sec \n[ 5] 1.00-2.00 sec 15.7 MBytes 132 Mbits/sec \n[ 5] 2.00-3.00 sec 16.4 MBytes 137 Mbits/sec \n[ 5] 3.00-4.00 sec 16.6 MBytes 139 Mbits/sec \n[ 5] 4.00-5.00 sec 13.7 MBytes 115 Mbits/sec \n[ 5] 5.00-6.00 sec 14.8 MBytes 124 Mbits/sec \n[ 5] 6.00-7.00 sec 16.0 MBytes 134 Mbits/sec \n[ 5] 7.00-8.00 sec 16.3 MBytes 137 Mbits/sec \n[ 5] 8.00-9.00 sec 16.2 MBytes 136 Mbits/sec \n[ 5] 9.00-10.00 sec 16.6 MBytes 140 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 160 MBytes 134 Mbits/sec 116 sender\n[ 5] 0.00-10.00 sec 158 MBytes 132 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.138 port 42441 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 18.1 MBytes 152 Mbits/sec 0 362 KBytes \n[ 5] 1.00-2.00 sec 16.6 MBytes 139 Mbits/sec 0 362 KBytes \n[ 5] 2.00-3.00 sec 16.6 MBytes 139 Mbits/sec 0 362 KBytes \n[ 5] 3.00-4.00 sec 15.9 MBytes 133 Mbits/sec 0 362 KBytes \n[ 5] 4.00-5.00 sec 16.7 MBytes 140 Mbits/sec 0 362 KBytes \n[ 5] 5.00-6.00 sec 16.6 MBytes 139 Mbits/sec 0 362 KBytes \n[ 5] 6.00-7.00 sec 16.6 MBytes 139 Mbits/sec 0 362 KBytes \n[ 5] 7.00-8.00 sec 16.1 MBytes 135 Mbits/sec 0 362 KBytes \n[ 5] 8.00-9.00 sec 16.0 MBytes 134 Mbits/sec 12 209 KBytes \n[ 5] 9.00-10.00 sec 14.2 MBytes 119 Mbits/sec 7 129 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 163 MBytes 137 Mbits/sec 19 sender\n[ 5] 0.00-10.01 sec 162 MBytes 136 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500\nRX: 67614130 bytes (64446 packets)\n"},{"location":"WifiPerformance/#xradio-xr819","title":"Xradio XR819","text":"OS: Armbian v25.5.1, 6.16.0-edge-sunxi
Chipset Class Average forward speed Average reverse speed XR819 N 8.01 Mbits/sec 5.98 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.130 port 59335 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 624 KBytes 5.11 Mbits/sec \n[ 5] 1.00-2.00 sec 700 KBytes 5.73 Mbits/sec \n[ 5] 2.00-3.00 sec 716 KBytes 5.86 Mbits/sec \n[ 5] 3.00-4.00 sec 687 KBytes 5.63 Mbits/sec \n[ 5] 4.00-5.00 sec 676 KBytes 5.54 Mbits/sec \n[ 5] 5.00-6.00 sec 701 KBytes 5.75 Mbits/sec \n[ 5] 6.00-7.00 sec 761 KBytes 6.23 Mbits/sec \n[ 5] 7.00-8.00 sec 676 KBytes 5.54 Mbits/sec \n[ 5] 8.00-9.00 sec 725 KBytes 5.94 Mbits/sec \n[ 5] 9.00-10.00 sec 663 KBytes 5.43 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.07 sec 9.62 MBytes 8.01 Mbits/sec 0 sender\n[ 5] 0.00-10.00 sec 6.77 MBytes 5.68 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.130 port 59255 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 556 KBytes 4.55 Mbits/sec 2 22.6 KBytes \n[ 5] 1.00-2.00 sec 390 KBytes 3.20 Mbits/sec 1 21.2 KBytes \n[ 5] 2.00-3.00 sec 539 KBytes 4.41 Mbits/sec 0 32.5 KBytes \n[ 5] 3.00-4.00 sec 694 KBytes 5.69 Mbits/sec 0 39.6 KBytes \n[ 5] 4.00-5.00 sec 769 KBytes 6.30 Mbits/sec 0 48.1 KBytes \n[ 5] 5.00-6.00 sec 837 KBytes 6.86 Mbits/sec 0 53.7 KBytes \n[ 5] 6.00-7.00 sec 816 KBytes 6.68 Mbits/sec 1 42.4 KBytes \n[ 5] 7.00-8.00 sec 837 KBytes 6.86 Mbits/sec 0 50.9 KBytes \n[ 5] 8.00-9.00 sec 987 KBytes 8.09 Mbits/sec 0 55.1 KBytes \n[ 5] 9.00-10.00 sec 880 KBytes 7.20 Mbits/sec 0 55.1 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 7.13 MBytes 5.98 Mbits/sec 4 sender\n[ 5] 0.00-10.04 sec 7.00 MBytes 5.85 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437\nRX: 51356 bytes (125 packets)\nTX: 59397 bytes (269 packets)\nsignal: -38 dBm\nrx bitrate: 9.0 MBit/s\ntx bitrate: 58.5 MBit/s MCS 6\n"},{"location":"WifiPerformance/#failed-devices","title":"Failed Devices","text":"Commercial Name Chip Class AIC8800 AIC8800 AX BrosTrend 1800 RTL8852AU AX Mediatek MT7925 MT7925 AX Mediatek MT7925E #1 MT7925E AX Mediatek MT7925E #2 MT7925E AX Ralink MT7601U MT7601U N Realtek 8188EU RTL8192CU N Realtek 8811AU RTL8812AU AC Realtek 8812AU RTL8812AU AC Realtek 8814AU RTL8814AU AC Realtek 8852BE RTL8852BE AX Realtek RT2870 RTL2870 N"},{"location":"WifiPerformance/#contribute","title":"Contribute","text":"This guide provides step-by-step instructions to add a new device (SBC SDIO, PCI or USB adapter) to the wireless testing infrastructure.
"},{"location":"WifiPerformance/#1-prepare-the-host-machine","title":"1. Prepare the Host Machine","text":"sudo hostnamectl set-hostname rtl3070\n"},{"location":"WifiPerformance/#2-identify-network-interfaces","title":"2. Identify Network Interfaces","text":"ip link or iw dev to list available interfaces.wlan0, wlxMAC, etc.).Warning
This step is only necessary if your network device does not have a predictable interface name.
wl<MAC> to avoid interface conflicts./etc/udev/rules.d/70-persistent-net.rules:SUBSYSTEM==\"net\", ACTION==\"add\", ATTR{address}==\"xx:xx:xx:xx:xx:xx\", NAME=\"wl<MAC>\"\n"},{"location":"WifiPerformance/#4-get-vpn-access","title":"4. Get VPN access","text":"The TAILSCALE_AUTH_KEY and access credentials for NetBox must be provided by the Armbian administration team. For assistance, please contact us via https://www.armbian.com/contact/.
ci) with sudo privilegesiperf3 for network performance testing#!/bin/bash\n\nset -e\n\nUSERNAME=\"ci\"\nKEY_URL=\"https://github.armbian.com/ci.asc\"\nTAILSCALE_AUTH_KEY=\"tskey-auth-kXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"\n\necho \"[+] Creating user '$USERNAME' without password\"\nuseradd -m -s /bin/bash \"$USERNAME\"\npasswd -d \"$USERNAME\"\nusermod -aG sudo \"$USERNAME\"\n\necho \"[+] Setting up SSH key from $KEY_URL\"\nSSH_DIR=\"/home/$USERNAME/.ssh\"\nmkdir -p \"$SSH_DIR\"\ncurl -fsSL \"$KEY_URL\" -o \"$SSH_DIR/authorized_keys\"\nchmod 700 \"$SSH_DIR\"\nchmod 600 \"$SSH_DIR/authorized_keys\"\nchown -R \"$USERNAME:$USERNAME\" \"$SSH_DIR\"\n\necho \"[+] Disabling password authentication in SSH config\"\nsed -i 's/^#*\\s*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config\nsed -i 's/^#*\\s*PermitEmptyPasswords.*/PermitEmptyPasswords no/' /etc/ssh/sshd_config\nsystemctl restart ssh\n\necho \"[+] Installing Tailscale\"\ncurl -fsSL https://tailscale.com/install.sh | sh\n\necho \"[+] Bringing up Tailscale with provided auth key\"\ntailscale up --auth-key=\"$TAILSCALE_AUTH_KEY\"\n\necho \"[+] Installing iperf3 (non-interactive, no daemon)\"\nexport DEBIAN_FRONTEND=noninteractive\napt-get update -qq\napt-get install -yqq iperf3\n\necho \"[\u2714] Setup complete. User '$USERNAME' added, SSH key installed, Tailscale connected.\"\n"},{"location":"WifiPerformance/#6-register-your-location","title":"6. Register Your Location","text":"Access: https://netbox.armbian.com/dcim/sites/
Warning
Make sure to check if site is not already define to not clutter database!
Update Relevant InformationYour SSIDIP address that runs iperf3 server and can be accessible from wireless clientAdd new device type
Relevant dataWarning
Skip this step if WiFi SoC already exists in database.
"},{"location":"WifiPerformance/#8-register-device","title":"8. Register Device","text":"Relevant datatailscale0virtualThen select interface tailscale0 and add IP address. Copy IP address from your device (example: 100.115.0.58/32) and select: Make this the primary IP for the device/VM
Run the Wireless Performance Autotest workflow to verify whether the newly added device has been included in the test pool.
"},{"location":"WifiPerformance/#other-resources","title":"Other resources","text":"First try to install application manually. If it works on Debian or Ubuntu, proceed. In this example we will be using test.
git clone https://github.com/armbian/configng\n"},{"location":"Contribute/Armbian-config/#design-menu","title":"Design menu","text":"Predict which commands you expect to have in the menu. For installing an application, we usually need two, install and uninstall. Armbian-config stores menu in JSON files, so you need to select appropriate file. This one we will place under Software -> Management.
{\n \"id\": \"MAN005\",\n \"description\": \"Webmin web-based management tool\",\n \"short\": \"Webmin\",\n \"module\": \"module_webmin\",\n \"command\": [\n \"see_menu module_webmin\"\n ],\n \"status\": \"Stable\",\n \"author\": \"@Tearran\",\n \"condition\": \"\"\n}\n Field name Function Notes id unique identifier Select higher number. If you will select existing, application will fail to run description menu descriptor This will be displayed in the menu short docs menu descriptor This will over-ride description in the rendering of documentation module link json entry with module Used for documentation generation - read info from module_options prompt confirmation text Some features needs confirmation before proceeding command executes function What should be run after we select and agree (optional) status Stable|Disabled Control if function is shown to users in the menu author GitHub handle Developer or maintainer of this functionality condition controlling display Under what conditions we show this menu item Note
Pay attention to JSON structure. JSON validator at pull request will break in case spaces or commas will be placed wrong.
"},{"location":"Contribute/Armbian-config/#module-code","title":"Module code","text":"Place module functions, each into its file, following by file naming convention, into one of the folders:
Folder location: tools/modulesdocs\nfunctions\nnetwork\nruntime\nsoftware\nsystem\n File location: tools/template/module_software_template.shdeclare -A module_options\nmodule_options+=(\n [\"module_template,author\"]=\"@armbian\"\n [\"module_template,feature\"]=\"module_template\"\n [\"module_template,example\"]=\"install remove help\"\n [\"module_template,desc\"]=\"Example module unattended interface.\"\n [\"module_template,status\"]=\"review\"\n)\n\nfunction module_template() {\n local title=\"test\"\n local condition=$(which \"$title\" 2>/dev/null)\n\n # Convert the example string to an array\n local commands\n IFS=' ' read -r -a commands <<< \"${module_options[\"module_template,example\"]}\"\n\n case \"$1\" in\n \"${commands[0]}\")\n echo \"Installing $title...\"\n # Installation logic here\n ;;\n \"${commands[1]}\")\n echo \"Removing $title...\"\n # Removal logic here\n ;;\n \"${commands[2]}\")\n echo -e \"\\nUsage: ${module_options[\"module_template,feature\"]} <command>\"\n echo -e \"Commands: ${module_options[\"module_template,example\"]}\"\n echo \"Available commands:\"\n echo -e \"\\tinstall\\t- Install $title.\"\n echo -e \"\\tremove\\t- Remove $title.\"\n echo\n ;;\n *)\n ${module_options[\"module_template,feature\"]} ${commands[2]}\n ;;\n esac\n }\n\n# uncomment to test the module\n#module_template \"$1\"\n Note
Pay attention to coding style structure. If you use modern IDE, this will be done automatically.
"},{"location":"Contribute/Armbian-config/#manual-testing","title":"Manual testing","text":"Whenever you are making changes to the JSON or modules structure, make sure to join JSON segments into main JSON file and fun. This you do with a command: Python
tools/config-assemble.sh -p\n Python is required to run this tool. Bashsudo sudo bin/armbian-config --cmd\n"},{"location":"Contribute/Armbian-config/#unit-tests","title":"Unit tests","text":"This part is optional but highly recommended for at least install functionality. Our CI infrastructure will test this feature at pull request, on general code changes (push to main branch) and daily. It will test feature on latest Debian and Ubuntu images. Unit tests have simple design:
Name of the config file is function id (unique identifier) CON004.conf
File location: tests/CON004.conf
ENABLED=true\nRELEASE=\"bookworm:jammy:noble\"\nCONDITION=\"test=\\$(docker container ls -a | grep portainer )\"\n Make sure to add a test condition that makes sense. It has to return 0 when test succeeds and 1 if fails. Variable Function Description ENABLED false / true If test is live or not PREINSTALL cmd to run specific test dependencies CONDITION main test verification must return 0 for test success RELEASE bookworm:jammy:noble\u201d run on specific or leave empty to run on all"},{"location":"Contribute/Armbian-config/#pull-request","title":"Pull request","text":"When your solution works locally and you prepare unit tests its time to submit a pull request. Fix your code and unit tests until all pull request checks becomes green.
Examples:
Documentation is generated automatically after your pull request is merged. But as automated documentation might not be satisfactory, you can add cover image, header and footer. You can use markdown elements with enhancements from https://squidfunk.github.io/mkdocs-material/
"},{"location":"Contribute/Armbian-config/#cover-image","title":"Cover image","text":"Once code works perfectly, look for cover image. It can be .png or .webp. Place image to the tools/include/images/CON004.webp
Portainer simplifies your Docker container management via Portainer web interface. It enables faster deploy of the applications and it gives real time visibility.\n"},{"location":"Contribute/Armbian-config/#footer","title":"Footer","text":"Footer: tools/include/markdown/CON004-footer.md=== \"Access to the web interface\"\n\n The web interface is accessible via port **9002**:\n\n - URL = `http://<your.IP>:9002`\n"},{"location":"User-Guide_Armbian-Config/Localisation/","title":"Localisation","text":""},{"location":"User-Guide_Armbian-Config/Localisation/#change-global-timezone","title":"Change Global timezone","text":"Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd GTZ001"},{"location":"User-Guide_Armbian-Config/Localisation/#change-locales-reconfigure-the-language-and-character-set","title":"Change Locales reconfigure the language and character set","text":"Edit: footer header Status: Stable
armbian-config --cmd LOC001"},{"location":"User-Guide_Armbian-Config/Localisation/#change-keyboard-layout","title":"Change Keyboard layout","text":"Edit: footer header Status: Stable
armbian-config --cmd KEY001"},{"location":"User-Guide_Armbian-Config/Localisation/#change-system-hostname","title":"Change System Hostname","text":"Edit: footer header Status: Stable
armbian-config --cmd HOS001"},{"location":"User-Guide_Armbian-Config/Network/","title":"Fixed and wireless network settings","text":""},{"location":"User-Guide_Armbian-Config/Network/#basic-setup","title":"Basic setup","text":"Basic network setup
graph LR\n A{Select interface} --> B[Configure];\n A{Select interface} --> C[Drop];\n C ---->A;\n B -->F[DHCP];\n B ---->G[Static];\n G ------>| MAC, IP, route, GW, DNS|H[Configured];\n F -->| MAC | H[Configured]; Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd BNS001 Select Interface: Choose the desired network interface, such as:
eth0 for wired Ethernetwlan0 for wireless connectionsIf selecting a wireless interface:
IP Address Configuration: Choose between:
192.168.1.10/24).0.0.0.0/0.192.168.1.1).9.9.9.9, but you can specify another.Finalize Configuration:
If you experience issues or prefer full control, follow the manual networking setup guide.
Remove Fallback DHCP Configuration:armbian-config --cmd BNS002\n"},{"location":"User-Guide_Armbian-Config/Network/#view-configuration","title":"View configuration","text":"View Network Configuration
View Network Configuration allows you to display the system\u2019s active network settings as a Netplan YAML configuration. This shows interfaces, IP addresses, gateways, DNS servers, and other networking details in a clean, human-readable format. Useful for verifying, troubleshooting, or manually editing network setup on systems that use Netplan for managing network interfaces.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd VNS001"},{"location":"User-Guide_Armbian-Config/Network/#advanced","title":"Advanced","text":"Advanced bridged network configuration
Edit: footer header Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
"},{"location":"User-Guide_Armbian-Config/Network/#add-or-change","title":"Add or Change","text":"Add / change interface
graph LR\n A[Network] --> B[Add / Change interface];\n A[Network] --> O[Revert to defaults];\n A[Network] --> P[Show configuration];\n B ---->E[Wired];\n B ---->F[Wireless];\n E -->R[DHCP];\n E -->T[Static];\n E -->S[Spoof MAC];\n F -->X[Station];\n F -->W[Access point]; Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd NEA002 Wired device checkWireless device check In order to configure your network devices, they need to be supported the kernel.
To verify, use command:
Baship addr\n It is usually something like eth0, enp4s3 or lan.
In order to configure your wireless network devices, they need to be supported the kernel.
To verify, use command:
Bashiw dev | awk '$1==\"Interface\"{print $2}'\n It is usually something like wlan0, wlo1 or wlx12334c47dec3. If you get blank response, it means your WiFi device / dongle is not supported by the kernel.
armbian-config --cmd NEA003\n Show configuration:armbian-config --cmd NEA004\n Show active status:armbian-config --cmd NEA005\n"},{"location":"User-Guide_Armbian-Config/System/","title":"System wide and admin settings","text":""},{"location":"User-Guide_Armbian-Config/System/#hardware","title":"Hardware","text":"Alternative kernels, headers, overlays, bootenv
Edit: footer header
"},{"location":"User-Guide_Armbian-Config/System/#alternative-kernels","title":"Alternative kernels","text":"Use alternative kernels
Switching between different kernel versions can significantly impact the functionality of your device. A newer or older kernel may introduce changes to hardware compatibility, drivers, and system stability. Some features may stop working, while others may improve or be reintroduced.
Kernel changes carry inherent risks!
Precautions Before Switching Kernels Before switching kernels, it is strongly recommended to:
Recovery Steps if Boot Fails If your device fails to boot after a kernel change, you may need to:
Exercise caution when switching kernels, especially on production systems or devices with limited recovery options.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd KER001"},{"location":"User-Guide_Armbian-Config/System/#kernel-headers","title":"Kernel Headers","text":"Install Linux headers
Kernel headers are files required to build modules (drivers) or software that interfaces directly with the Linux kernel. Installing headers ensures compatibility when compiling custom drivers, DKMS modules (like ZFS, WireGuard), or updating third-party software that requires access to kernel internals. The installed headers match your running kernel version and are critical for system extensions and hardware support.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd HEAD01 Remove Linux headers:armbian-config --cmd HEAD02\n"},{"location":"User-Guide_Armbian-Config/System/#device-tree-overlays","title":"Device Tree Overlays","text":"Manage device tree overlays
Device Tree Overlays allow you to dynamically modify the Linux device tree at runtime, without rebuilding the kernel. They are used to enable or configure specific hardware features (like GPIO pins, I\u00b2C, SPI, sensors, displays) on single-board computers. Overlays are small snippets that can add, change, or remove parts of the hardware description, making it flexible to adapt the system for different peripherals without recompiling the full device tree.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd DTO001"},{"location":"User-Guide_Armbian-Config/System/#odroid-boards-config","title":"Odroid Boards Config","text":"Select Odroid board configuration
Edit: footer header Status: Preview Architecture: armhf
armbian-config --cmd ODR001"},{"location":"User-Guide_Armbian-Config/System/#boot-environment","title":"Boot Environment","text":"Edit the boot environment
Edit the boot environment allows you to modify critical boot settings stored in /boot/armbianEnv.txt. You can adjust options such as root filesystem location, kernel parameters, overlays, boot targets, or enable advanced features like early serial console. This is essential for fine-tuning hardware support, troubleshooting, or optimizing system startup behavior.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd BOOT01"},{"location":"User-Guide_Armbian-Config/System/#storage","title":"Storage","text":"Install to internal media, ZFS, NFS, read-only rootfs
Edit: footer header Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
"},{"location":"User-Guide_Armbian-Config/System/#install","title":"Install","text":"Copy the running Armbian system to another device
Use this option to transfer your current live Armbian system to another storage device (eMMC, SSD, USB, etc.). This copies your existing installation exactly as it is \u2014 including settings, installed packages, and user data.
Edit: footer header Status: Preview Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd STO001"},{"location":"User-Guide_Armbian-Config/System/#download-and-flash","title":"Download and flash","text":"Download a fresh, official Armbian OS image and write it to a device
What can this tool do?
Edit: footer header Status: Preview Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik
armbian-config --cmd FLASH1 Remove cached images:armbian-config --cmd FLASH2\n"},{"location":"User-Guide_Armbian-Config/System/#read-only-fs","title":"Read Only FS","text":"Enable read only filesystem
Read-only filesystem is enabled using overlayroot, a utility that places a temporary writable layer over the system root filesystem. Changes made during runtime are redirected into RAM or an alternative writable storage, while the underlying system remains untouched. This ensures that after a reboot, the system returns to a clean original state. It\u2019s ideal for kiosks, appliances, SD card-based systems, and scenarios where long-term filesystem durability and recovery are critical.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd ROO001 Disable read only filesystem:armbian-config --cmd ROO002\n"},{"location":"User-Guide_Armbian-Config/System/#nfs","title":"NFS","text":"Enable Network filesystem (NFS) support
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd NETF01 Disable Network filesystem (NFS) support:armbian-config --cmd NETF02\n"},{"location":"User-Guide_Armbian-Config/System/#nfs-server","title":"NFS server","text":"Enable network filesystem (NFS) daemon
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd NETF04 Configure network filesystem (NFS) daemon:armbian-config --cmd NETF05\n Remove network filesystem (NFS) daemon:armbian-config --cmd NETF06\n Show network filesystem (NFS) daemon clients:armbian-config --cmd NETF07\n"},{"location":"User-Guide_Armbian-Config/System/#find-nfs-servers","title":"Find NFS servers","text":"Find NFS servers in subnet and mount shares
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd NETF09 Show and manage NFS mounts:armbian-config --cmd NETF10\n"},{"location":"User-Guide_Armbian-Config/System/#zfs","title":"ZFS","text":"ZFS filesystem - enable support
ZFS is an advanced, high-performance file system and volume manager designed for data integrity, scalability, and ease of use. It offers features like copy-on-write snapshots, native compression, data deduplication, automatic repair, and efficient storage pooling. Originally developed by Sun Microsystems, ZFS is ideal for handling large amounts of data reliably with minimal maintenance.
When enabling ZFS support, Armbian checks if the running kernel can support ZFS, installs matching kernel headers if necessary, and builds the ZFS DKMS (Dynamic Kernel Module Support) module automatically.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd ZFS001"},{"location":"User-Guide_Armbian-Config/System/#key-features","title":"Key Features","text":""},{"location":"User-Guide_Armbian-Config/System/#data-integrity","title":"Data Integrity","text":"armbian-config --cmd ZFS002\n"},{"location":"User-Guide_Armbian-Config/System/#ssh-daemon","title":"SSH daemon","text":"Manage SSH daemon options, enable 2FA
Edit: footer header
"},{"location":"User-Guide_Armbian-Config/System/#native","title":"Native","text":"Disable root login
Manage native SSH daemon allows you to configure SSH server settings such as login security, authentication methods, and connection restrictions. It also enables setting up Two-Factor Authentication (2FA) to further secure SSH access using time-based codes (TOTP), adding an extra layer of protection beyond passwords.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd ACC001 Enable root login:armbian-config --cmd ACC002\n Disable password login:armbian-config --cmd ACC003\n Enable password login:armbian-config --cmd ACC004\n Disable Public key authentication login:armbian-config --cmd ACC005\n Enable Public key authentication login:armbian-config --cmd ACC006\n Disable OTP authentication:armbian-config --cmd ACC007\n Enable OTP authentication:armbian-config --cmd ACC008\n Generate new OTP authentication QR code:armbian-config --cmd ACC009\n Show OTP authentication QR code:armbian-config --cmd ACC010\n Disable last login banner:armbian-config --cmd ACC011\n Enable last login banner:armbian-config --cmd ACC012\n"},{"location":"User-Guide_Armbian-Config/System/#containerised","title":"Containerised","text":"Sandboxed & containerised SSH server
Sandboxed & containerised SSH server allows ssh access without giving keys to the entire server. Giving ssh access via private key often means giving full access to the server. This container creates a limited and sandboxed environment that others can ssh into. The users only have access to the folders mapped and the processes running inside this container.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SSH001 Access to SSH serverDirectoriesView logs ssh username@<your.IP> -p 2222/armbian/openssh-server/armbian/openssh-server/configUSER_DEFINEDdocker logs -f openssh-server\n Remove sandboxed SSH server:armbian-config --cmd SSH002\n Purge sandboxed SSH server with data folder:armbian-config --cmd SSH003\n"},{"location":"User-Guide_Armbian-Config/System/#shell-and-motd","title":"Shell and MOTD","text":"Change shell, adjust MOTD
Edit: footer header
"},{"location":"User-Guide_Armbian-Config/System/#change-shell","title":"Change shell","text":"Change shell system wide to ZSH
ZSH is a powerful and customizable shell designed to be an enhanced replacement for BASH. When combined with Oh My Zsh, which is integrated in armbian-zsh, it offers an extensive plugin system, beautiful themes, and productivity features like autosuggestions, syntax highlighting, and easier navigation.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd SHELL1 Change shell system wide to BASH:armbian-config --cmd SHELL2\n"},{"location":"User-Guide_Armbian-Config/System/#adjust-motd","title":"Adjust MOTD","text":"Adjust welcome screen (motd)
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd MOTD01"},{"location":"User-Guide_Armbian-Config/System/#os-updates","title":"OS Updates","text":"OS updates and distribution upgrades
Edit: footer header Status: Active
"},{"location":"User-Guide_Armbian-Config/System/#firmware","title":"Firmware","text":"Enable Armbian firmware upgrades
Enable Armbian firmware upgrades manages whether the Armbian firmware (kernel + u-boot + firmware) packages are held or unheld in the package manager. By removing or setting the hold, it controls if firmware updates are applied automatically through regular apt update and apt upgrade processes. This allows users to either freeze the firmware version for stability or enable updates for improved hardware support.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd UPD001 Disable Armbian firmware upgrades:armbian-config --cmd UPD002\n"},{"location":"User-Guide_Armbian-Config/System/#rolling","title":"Rolling","text":"Switch system to rolling packages repository
The daily rolling repository offers frequently updated packages directly from development branches. It provides access to the latest features, bug fixes, and hardware support improvements but may introduce instability or regressions. This channel is intended for testing, development, and users who need the newest updates at the cost of reduced stability.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd ROLLIN"},{"location":"User-Guide_Armbian-Config/System/#stable","title":"Stable","text":"Switch system to stable packages repository
The stable repository provides thoroughly tested packages intended for production use. Updates from this channel prioritize stability, long-term reliability, and minimal risk, ensuring systems remain secure and operational without unexpected changes. Only critical bug fixes and essential improvements are introduced after extensive testing.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd STABLE"},{"location":"User-Guide_Armbian-Config/System/#stable-distro-upgrade","title":"Stable Distro Upgrade","text":"Distribution upgrade to latest stable / LTS
Stable / LTS upgrades move your system to a newer release of Debian or Ubuntu, bringing updated system packages along with long-term security fixes and bug patches. This makes them the safest choice for reliable, everyday use.
Risks of Stable Upgrades
Distribution upgrades are experimental and not supported by Armbian. Use at your own risk.
Even LTS \u2192 LTS upgrades (e.g., Debian Bookworm \u2192 Trixie, Ubuntu Jammy \u2192 Noble) carry some risks:
Because Armbian integrates upstream Debian/Ubuntu with custom board support packages, upgrades may still trigger unexpected breakage on some devices.
Edit: footer header Status: Stable
armbian-config --cmd STD001 Best Practices
Distribution upgrade to rolling unstable
Non-LTS releases are intended for developers, testers, and enthusiasts who want the latest features \u2014 not for production systems.
Risks of Unstable Upgrades
Distribution upgrades are experimental and not supported by Armbian. Use at your own risk.
Edit: footer header Status: Stable
armbian-config --cmd UNS001"},{"location":"User-Guide_Armbian-Config/System/#docker-images","title":"Docker images","text":"Enable automating Docker container base images updating
Watchtower is a lightweight tool that automatically monitors and updates running Docker containers whenever a new image version becomes available. It checks remote registries for updated images, pulls them, stops the old containers, and restarts them using the updated versions \u2014 all without manual intervention. Watchtower is fully configurable, allowing you to control update frequency, select specific containers, and manage notification settings.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd WTC001 Disable automating Docker container base images updating:armbian-config --cmd WTC002\n"},{"location":"User-Guide_Armbian-Config/System/#packages","title":"Packages","text":"Enable automatic package updates.
Unattended upgrades automatically install security updates and important package updates on your system without requiring manual intervention. It helps keep your system secure, stable, and up-to-date by silently applying patches. The behavior is fully configurable \u2014 you can control which packages are upgraded, set reboot options, and customize notifications or logging.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd UNAT01 Configure automatic package updates:armbian-config --cmd UNAT02\n Disable automatic package updates:armbian-config --cmd UNAT03\n"},{"location":"User-Guide_Armbian-Software/Armbian/","title":"Armbian infrastructure services","text":""},{"location":"User-Guide_Armbian-Software/Armbian/#cdn-router","title":"CDN router","text":"Router for repository mirror automation
The Armbian Router is an intelligent redirector system that optimizes file downloads by automatically directing users to the best available mirror. It evaluates each download request based on geographic location, server health, and file availability, ensuring faster downloads, balanced load distribution, and high availability. This core service underpins Armbian\u2019s scalable mirror network, seamlessly routing traffic to improve performance and reliability for end users worldwide.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd ART001 Remove CDN router:armbian-config --cmd ART002\n"},{"location":"User-Guide_Armbian-Software/Armbian/#gh-runners","title":"GH runners","text":"GitHub runners for Armbian automation
This module automates the installation, removal, and status checking of GitHub self-hosted runners for the Armbian project. It supports batch operations and user input through dialog prompts when running interactively.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd GHR001 Supported Commands install Installs one or more GitHub runners using the provided configuration or interactively prompted values.purge / remove Removes runners based on the provided runner name series and target organization or repository.status Quietly checks if any actions.runner services are currently running on the system.gh_token GitHub token with admin rights to manage self-hosted runners. runner_name Name prefix for the runner series (default: armbian). start Start index of the runner series (e.g., 01). stop End index of the runner series (e.g., 05). label_primary Labels for the first runner (default: alfa). label_secondary Labels for additional runners (default: fast,images). organisation GitHub organization name (default: armbian). owner GitHub user or organization owner (used for repo-level runners). repository GitHub repository name (used for repo-level runners). Behavior dialog only in interactive mode.start to stop).actions.runner.install and actions.runner.remove helpers.0 if any runner services are active, 1 otherwise (for scripting use).armbian-config --cmd GHR002\n"},{"location":"User-Guide_Armbian-Software/Armbian/#rsyncd-server","title":"Rsyncd server","text":"Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd RSD001 Remove Armbian rsyncd server:armbian-config --cmd RSD002\n"},{"location":"User-Guide_Armbian-Software/Backup/","title":"Backup solutions for your data","text":""},{"location":"User-Guide_Armbian-Software/Backup/#duplicati","title":"Duplicati","text":"Duplicati install
Duplicati is a versatile and secure backup tool designed for everyone, including:
Duplicati offers powerful features such as strong AES-256 encryption, backup scheduling, and flexible storage support (local folders, NAS, cloud providers like Google Drive, Dropbox, S3, and more). Through its web-based interface, users can easily configure, monitor, and restore backups from any browser.
Thanks to Duplicati\u2019s smart design \u2014 working through standard protocols and containerized deployment \u2014 it fits seamlessly into any environment, from personal setups to enterprise infrastructures.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DPL001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8200:
http://<your.IP>:8200/armbian/duplicati/armbian/duplicati/config/armbian/duplicati/backupsdocker logs -f duplicati\n Duplicati remove:armbian-config --cmd DPL002\n Duplicati purge with data folder:armbian-config --cmd DPL003\n"},{"location":"User-Guide_Armbian-Software/Containers/","title":"Docker containerization and KVM virtual machines","text":""},{"location":"User-Guide_Armbian-Software/Containers/#docker","title":"Docker","text":"Docker minimal
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd CON001 What is Docker? Docker helps developers build, share, run, and verify applications anywhere - without tedious environment configuration or management.
Docker engine:armbian-config --cmd CON002\n Docker remove:armbian-config --cmd CON003\n Docker purge with all images, containers, and volumes:armbian-config --cmd CON004\n"},{"location":"User-Guide_Armbian-Software/Containers/#portainer","title":"Portainer","text":"Portainer container management platform
Portainer simplifies your Docker container management via Portainer web interface. It enables faster deploy of the applications and it gives real time visibility.
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @schwar3kat Documentation: Link
armbian-config --cmd POR001 Access to the web interface The web interface is accessible via port 9002:
http://<your.IP>:9002armbian-config --cmd POR002\n Portainer purge with with data folder:armbian-config --cmd POR003\n"},{"location":"User-Guide_Armbian-Software/DNS/","title":"Network-wide ad blockers servers","text":""},{"location":"User-Guide_Armbian-Software/DNS/#adguardhome","title":"AdGuardHome","text":"AdGuardHome DNS sinkhole
AdGuard Home is a network-wide software that functions as a DNS server and ad blocker. It blocks ads, trackers, and malicious websites at the DNS level, meaning it filters content for all devices connected to the network. It also provides additional features like parental controls, logging, and privacy protections. Essentially, it acts as a gateway between your devices and the internet, blocking unwanted content before it even reaches your devices.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd ADG001 Access to the web interfaceDirectoriesUsageBlack and white listsView logs The web interface is accessible via port 3000:
https://<your.IP>:3000/armbian/adguardhome//armbian/adguardhome/confdir/armbian/adguardhome/workdirThere are many sites in the web giving blocklists and whitelists for AdGuard Home. They can be used when you want to have more blocking as the standard installation gives you. Here are some examples:
docker logs -f adguardhome\n AdGuardHome remove:armbian-config --cmd ADG002\n AdGuardHome purge with data folder:armbian-config --cmd ADG003\n"},{"location":"User-Guide_Armbian-Software/DNS/#pi-hole","title":"Pi-hole","text":"Pi-hole DNS ad blocker with Unbound support
Pi-hole is a network-wide ad blocker that acts as a DNS (Domain Name System) sinkhole. It blocks connections to known ad servers, trackers, and malicious domains across all devices in your network, without requiring any browser extensions or client-side software.
"},{"location":"User-Guide_Armbian-Software/DNS/#pi-hole-explained","title":"Pi-hole Explained","text":"Pi-hole offers an effective and centralized way to enhance privacy and reduce unwanted content across your entire network.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd PIH001 Access the web interface The web interface of Pi-hole can be accessed via:
http://<your.IP>:8811/adminarmbian-configarmbian-config --cmd PIH002\n Pi-hole remove:armbian-config --cmd PIH003\n Pi-hole purge with data folder:armbian-config --cmd PIH004\n"},{"location":"User-Guide_Armbian-Software/DNS/#unbound","title":"Unbound","text":"Unbound caching DNS resolver
Unbound is a high-performance, open-source DNS resolver. It primarily serves to resolve domain names into IP addresses for devices on a network. Unlike regular DNS servers, Unbound performs DNS lookups directly and securely, providing features like DNSSEC validation (ensuring data integrity) and privacy protections. It\u2019s often used to improve speed, security, and privacy by resolving queries locally rather than relying on external DNS services.
Edit: footer header Status: Stable Architecture: x86-64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd UNB001 Default DNS portDirectoriesView logs /armbian/unbound//armbian/unbound/docker logs -f unbound\n Unbound remove:armbian-config --cmd UNB002\n Unbound purge with data folder:armbian-config --cmd UNB003\n"},{"location":"User-Guide_Armbian-Software/Database/","title":"SQL database servers and web interface managers","text":""},{"location":"User-Guide_Armbian-Software/Database/#mysql","title":"MySQL","text":"MySQL SQL database server
MySQL is one of the world\u2019s most widely used open-source database servers. Trusted for decades in web, cloud, and enterprise applications.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd MYSQL1 ConfigurationDirectoriesView logs Database access configuration is done at first install:
<your.IP>/armbian/mysql/armbian/mysql/datadocker logs -f mysql\n MySQL remove:armbian-config --cmd MYSQL2\n MySQL purge with data folder:armbian-config --cmd MYSQL3\n"},{"location":"User-Guide_Armbian-Software/Database/#mariadb","title":"Mariadb","text":"Mariadb SQL database server
MariaDB is a fast, open-source relational database server developed by the original creators of MySQL. It is designed to be fully compatible with MySQL while offering improved performance, enhanced security, and additional features.
MariaDB supports a wide range of storage engines, advanced SQL capabilities, and both single-node and clustered deployments. It is widely used in web, cloud, and
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DAT001 ConfigurationDirectoriesView logs Database access configuration is done at first install: - create root password - create database - create normal user - create password for normal user
<your.IP>:3307/armbian/mariadb/armbian/mariadb/configdocker logs -f mariadb\n Mariadb remove:armbian-config --cmd DAT002\n Mariadb purge with data folder:armbian-config --cmd DAT003\n"},{"location":"User-Guide_Armbian-Software/Database/#phpmyadmin","title":"phpMyAdmin","text":"phpMyAdmin web interface manager
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd MYA001 phpMyAdmin remove:armbian-config --cmd MYA002\n phpMyAdmin purge with data folder:armbian-config --cmd MYA003\n"},{"location":"User-Guide_Armbian-Software/Database/#postgresql","title":"PostgreSQL","text":"PostgreSQL install
PostgreSQL is a powerful, open-source object-relational database system known for its robustness, feature richness, and reliability.
It is designed for everyone, including:
PostgreSQL offers strong ACID compliance, concurrency, rich data types, full-text search, JSON support, and extensibility through stored procedures and custom functions. It is trusted globally in financial, government, and web-scale applications.
Thanks to its proven architecture and open-source nature, PostgreSQL fits seamlessly in projects of all sizes.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd PGSQL1 Access to the databaseDirectoriesView logs PostgreSQL is accessible via port 5432:
postgresql://<your.IP>:5432armbianarmbianarmbian/armbian/postgres/datadocker logs -f postgres\n PostgreSQL remove:armbian-config --cmd PGSQL2\n PostgreSQL purge with data folder:armbian-config --cmd PGSQL3\n"},{"location":"User-Guide_Armbian-Software/Database/#redis","title":"Redis","text":"Redis install
Redis is an open-source, in-memory data structure store, used as a database, cache, and message broker. It supports a variety of data structures such as strings, hashes, lists, sets, and sorted sets.
Key Features: - Extremely fast performance with in-memory storage - Persistence options (snapshotting and AOF) - Pub/Sub messaging capabilities - Built-in replication and high availability - Simple API and wide client support
Redis is widely used for real-time applications, caching layers, session stores, and lightweight queues across industries and platforms.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd REDIS1 Access to the serviceDirectoriesView logs Redis server is accessible on port 6379:
redis://<your.IP>:6379/armbian/redis/datadocker logs -f redis\n Redis remove:armbian-config --cmd REDIS2\n Redis purge with data folder:armbian-config --cmd REDIS3\n"},{"location":"User-Guide_Armbian-Software/Desktops/","title":"Desktop Environments","text":""},{"location":"User-Guide_Armbian-Software/Desktops/#xfce-desktop","title":"XFCE desktop","text":""},{"location":"User-Guide_Armbian-Software/Desktops/#xfce-desktop-install","title":"XFCE desktop Install","text":"XFCE is a lightweight, fast, and user-friendly desktop environment for Linux, offering a classic interface, essential apps, and customization. It prioritizes performance, simplicity, and efficiency.
Install XFCE:
Xfce is a lightweight desktop environment for UNIX-like operating systems. It aims to be fast and low on system resources, while still being visually appealing and user friendly.
Command: Text Only
armbian-config --cmd XFCE01\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#uninstall","title":"Uninstall","text":"Command: Text Only
armbian-config --cmd XFCE02\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#enable-autologin","title":"Enable autologin","text":"Command: Text Only
armbian-config --cmd XFCE03\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#disable-autologin","title":"Disable autologin","text":"Command: Text Only
armbian-config --cmd XFCE04\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#gnome-desktop","title":"Gnome desktop","text":""},{"location":"User-Guide_Armbian-Software/Desktops/#gnome-desktop-install","title":"Gnome desktop Install","text":"GNOME is a modern, user-friendly desktop environment for Linux, offering a clean interface, essential apps, and customization through extensions. It prioritizes simplicity, accessibility, and efficiency.
Command: Text Only
armbian-config --cmd GNOME01\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#uninstall_1","title":"Uninstall","text":"Command: Text Only
armbian-config --cmd GNOME02\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#enable-autologin_1","title":"Enable autologin","text":"Command: Text Only
armbian-config --cmd GNOME03\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#disable-autologin_1","title":"Disable autologin","text":"Command: Text Only
armbian-config --cmd GNOME04\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#improve-application-search-speed","title":"Improve application search speed","text":"Command: Text Only
armbian-config --cmd Xapian\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/DevTools/","title":"Applications and tools for development","text":""},{"location":"User-Guide_Armbian-Software/DevTools/#git-cli","title":"Git CLI","text":"Install tools for cloning and managing repositories (git)
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd GIT001 Remove tools for cloning and managing repositories (git):armbian-config --cmd GIT002\n"},{"location":"User-Guide_Armbian-Software/Downloaders/","title":"Download apps for movies, TV shows, music and subtitles","text":""},{"location":"User-Guide_Armbian-Software/Downloaders/#bazarr","title":"Bazarr","text":"Bazarr automatic subtitles downloader for Sonarr and Radarr
Bazarr is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd BAZ001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 6767:
https://<your.IP>:6767/armbian/bazarr/armbian/bazarr/config/armbian/bazarr/movies /armbian/bazarr/tvdocker logs -f bazarr\n Bazarr remove:armbian-config --cmd BAZ002\n Bazarr purge with data folder:armbian-config --cmd BAZ003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#deluge","title":"Deluge","text":"Deluge BitTorrent client
Deluge\u2060 is a lightweight, Free Software, cross-platform BitTorrent client.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DEL001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8112:
https://<your.IP>:8112/armbian/deluge/armbian/deluge/config/armbian/deluge/downloadsdocker logs -f deluge\n Deluge remove:armbian-config --cmd DEL002\n Deluge purge with data folder:armbian-config --cmd DEL003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#qbittorrent","title":"qBittorrent","text":"qBittorrent BitTorrent client
The Qbittorrent\u2060 project aims to provide an open-source software alternative to \u00b5Torrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DOW001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8090:
https://<your.IP>:8090/armbian/qbittorrent/armbian/qbittorrent/config/armbian/qbittorrent/downloadsdocker logs -f qbittorrent\n qBittorrent remove:armbian-config --cmd DOW002\n qBittorrent purge with data folder:armbian-config --cmd DOW003\n Prowlarr:armbian-config --cmd DOW025\n Access to the web interfaceDirectoriesView logs The web interface is accessible via port 9696:
https://<your.IP>:9696/armbian/prowlarr/armbian/prowlarr/configdocker logs -f prowlarr\n Prowlarr remove:armbian-config --cmd DOW026\n Prowlarr purge with data folder:armbian-config --cmd DOW027\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#jellyseerr","title":"Jellyseerr","text":"Jellyseerr Jellyfin/Emby/Plex integration install
Jellyseerr is a free and open source software application for managing requests for your media library. It is a fork of Overseerr built to bring support for Jellyfin & Emby media servers!
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd JEL001 Jellyseerr remove:armbian-config --cmd JEL002\n Jellyseerr purge with data folder:armbian-config --cmd JEL003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#lidarr","title":"Lidarr","text":"Lidarr automatic music downloader
Lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd LID001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8686:
https://<your.IP>:8686/armbian/lidarr/armbian/lidarr/config/armbian/lidarr/downloads /armbian/lidarr/musicdocker logs -f lidarr\n Lidarr remove:armbian-config --cmd LID002\n Lidarr purge with data folder:armbian-config --cmd LID003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#medusa","title":"Medusa","text":"Medusa automatic downloader for TV shows
Medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd MDS001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8081:
https://<your.IP>:8081/armbian/medusa/armbian/medusa/config/armbian/medusa/downloads/armbian/medusa/downloads/tvdocker logs -f medusa\n Medusa TV shows downloader remove:armbian-config --cmd MDS002\n Medusa TV shows downloader purge:armbian-config --cmd MDS003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#radarr","title":"Radarr","text":"Radarr automatic downloader for movies
Radarr - A fork of Sonarr to work with movies \u00e0 la Couchpotato.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd RAD001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7878:
https://<your.IP>:7878/armbian/radarr/armbian/radarr/config/armbian/radarr/movies/armbian/radarr/clientdocker logs -f radarr\n Radarr remove:armbian-config --cmd RAD002\n Radarr purge with data folder:armbian-config --cmd RAD003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#readarr","title":"Readarr","text":"Readarr automatic downloader for Ebooks
Readarr - Book Manager and Automation (Sonarr for Ebooks)
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd RDR001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8787:
https://<your.IP>:8787/armbian/readarr/armbian/readarr/config/armbian/readarr/books /armbian/readarr/clientdocker logs -f readarr\n Readarr remove:armbian-config --cmd RDR002\n Readarr purge with data folder:armbian-config --cmd RDR003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#sabnzbd","title":"SABnzbd","text":"SABnzbd newsgroup downloader
Sabnzbd\u2060 makes Usenet as simple and streamlined as possible by automating everything we can. All you have to do is add an .nzb. SABnzbd takes over from there, where it will be automatically downloaded, verified, repaired, extracted and filed away with zero human interaction.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SABN01 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8380:
https://<your.IP>:8380/armbian/sabnzbd/armbian/sabnzbd/config/armbian/sabnzbd/downloads/armbian/sabnzbd/incompletedocker logs -f sabnzbd\n SABnzbd remove:armbian-config --cmd SABN02\n SABnzbd purge with data folder:armbian-config --cmd SABN03\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#sonarr","title":"Sonarr","text":"Sonarr automatic downloader for TV shows
Sonarr (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SON001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8989:
https://<your.IP>:8989/armbian/sonarr/armbian/sonarr/config/armbian/sonarr/tvseries/armbian/sonarr/clientdocker logs -f sonarr\n Sonarr remove:armbian-config --cmd SON002\n Sonarr purge with data folder:armbian-config --cmd SON003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#transmission","title":"Transmission","text":"Transmission BitTorrent client
Transmission\u2060 is designed for easy, powerful use. Transmission has the features you want from a BitTorrent client: encryption, a web interface, peer exchange, magnet links, DHT, \u00b5TP, UPnP and NAT-PMP port forwarding, webseed support, watch directories, tracker editing, global and per-torrent speed limits, and more.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd TRA001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 9091:
https://<your.IP>:9091/armbian/transmission/armbian/transmission/config/armbian/transmission/downloads/armbian/transmission/watchdocker logs -f transmission\n Transmission remove:armbian-config --cmd TRA002\n Transmission purge with data folder:armbian-config --cmd TRA003\n"},{"location":"User-Guide_Armbian-Software/Finance/","title":"Manage your finances","text":""},{"location":"User-Guide_Armbian-Software/Finance/#actual-budget","title":"Actual Budget","text":"Do your finances with Actual Budget
Actual Budget is a free, open-source personal finance app built around the envelope budgeting method.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd ABU001 Warning: HTTPS Certificate Required
After initially installing the Actual server, you might get stuck at the step: \u201cInitializing the connection to the local database\u2026\u201d
The issue is due to the server not having an HTTPS certificate. After activating an HTTPS certificate for the Actual server, everything should work fine.
If you still encounter issues even after setting up HTTPS, we highly recommend reaching out to the Actual Budget Discord server \u2014 the developers and community there are very kind and helpful.
Actual Budget remove:armbian-config --cmd ABU002\n Actual Budget purge with data folder:armbian-config --cmd ABU003\n"},{"location":"User-Guide_Armbian-Software/HomeAutomation/","title":"Home Automation for control home appliances","text":""},{"location":"User-Guide_Armbian-Software/HomeAutomation/#domoticz","title":"Domoticz","text":"Domoticz open source home automation
Domoticz is an open-source home automation platform that allows you to control and monitor smart devices in your home. It supports a wide range of devices, including lights, sensors, thermostats, and cameras. Through its web interface or mobile app, you can set up automation rules and schedules, providing greater convenience and energy efficiency. It\u2019s customizable, flexible, and can be run on a variety of hardware platforms supported by Armbian.
Access to the web interfaceDirectoriesAdvanced setupThe web interface is accessible via port 8780:
https://<your.IP>:8780/armbian/domoticz/dev/ttyUSB0) to Docker container is enabled by defaultEdit: footer header Status: Preview Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DOM001 Domoticz remove:armbian-config --cmd DOM002\n Domoticz purge with data folder:armbian-config --cmd DOM003\n"},{"location":"User-Guide_Armbian-Software/HomeAutomation/#evcc","title":"EVCC","text":"EVCC - solar charging automation
evcc is an energy management system with a focus on electromobility. The software controls your EV charger or smart plug. It communicates with your vehicle, inverter or home storage to make intelligent charging decisions. The software is open source and community-driven.
Edit: footer header Status: Preview Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd EVCC01 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7070:
https://<your.IP>:7070/armbian/evcc/armbian/evcc/evcc.yamldocker logs -f evcc\n EVCC - solar charging automation remove:armbian-config --cmd EVCC02\n EVCC purge with data folder:armbian-config --cmd EVCC03\n"},{"location":"User-Guide_Armbian-Software/HomeAutomation/#openhab","title":"openHAB","text":"openHAB empowering the smart home
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd HAB001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 2080:
https://<your.IP>:2080/armbian/openhab/armbian/openhab/conf/armbian/openhab/userdata/armbian/openhab/addonsSee also openHAB file locations.
Bashdocker logs -f openhab\n openHAB remove:armbian-config --cmd HAB002\n openHAB purge with data folder:armbian-config --cmd HAB003\n"},{"location":"User-Guide_Armbian-Software/HomeAutomation/#home-assistant","title":"Home Assistant","text":"Home Assistant open source home automation
Home Assistant is an open source smart home platform that allows you to connect your smart home devices like your TV, fan, cameras, thermostats, lights, and sensors. As a user, you can build intricate automation using Home Assistant\u2019s user-friendly, unified web-based user interface.
Perfect to run on any single board computer with 4 cores and at least 512Mb of memory. Armbian installation is optimised to run from SD/eMMC media, but it is recommended to use SSD.
Limited support
The supervised installation method on Armbian is not officially supported by the Home Assistant project. Additionally, installation on hardware that is not officially supported is also outside the scope of support provided by the Armbian team.
You are welcome to report high-level application issues that are reproducible on the official Home Assistant Operating System (HAOS) within the Home Assistant Community. For any topics related to single-board computer hardware, you may use the Armbian Community Forums; however, please be aware that official support from the Armbian team is not guaranteed.
While the Home Assistant team deprecated the Supervised installation method, the Armbian team will continue to provide and maintain it, as long as automated installation tests succeed and the required maintenance remains manageable.
Edit: footer header Status: Preview Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd HAS001 Access to the web interfaceDirectoriesArmbian advantages The web interface is accessible via port 8123:
https://<your.IP>:8123Home Assistant on Armbian runs supervised in a Docker container. This secures same functionality as stock HAOS.
/armbian/haosarmbian-config --cmd HAS002\n Home Assistant purge with data folder:armbian-config --cmd HAS003\n"},{"location":"User-Guide_Armbian-Software/Management/","title":"Remote File & Management tools","text":""},{"location":"User-Guide_Armbian-Software/Management/#cockpit","title":"Cockpit","text":"Cockpit OS and VM management tool
Cockpit is a web-based graphical interface for servers, intended for everyone.
Here\u2019s a subset of tasks you can perform on each host running Cockpit
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd CPT001 Access to the web interfaceVideo instructions The web interface is accessible via port 9890:
https://<your.IP>:9890armbian-config --cmd CPT002\n Purge Cockpit with virtual machines:armbian-config --cmd CPT003\n"},{"location":"User-Guide_Armbian-Software/Management/#homepage","title":"Homepage","text":"Install Homepage startpage / application dashboard
gethomepage is a fast, fully static, highly customizable application dashboard built for modern self-hosted environments. With a fully proxied architecture and zero runtime, it delivers exceptional speed, security, and simplicity for organizing and accessing your services.
It supports over 100 service integrations and multiple languages, offering live status displays and dynamic resource monitoring out-of-the-box. Configuration is effortless via YAML files or automatic Docker label discovery, making setup and management seamless.
Key Features
Whether you\u2019re running a small homelab or a full server fleet, gethomepage offers a sleek, powerful, and secure way to stay organized.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd HPG001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 3021:
https://<your.IP>:3021Configuration: Please reffer to official manual https://gethomepage.dev/configs/
/armbian/homepage/armbian/homepage/configdocker logs -f homepage\n Remove Homepage:armbian-config --cmd HPG002\n Purge Homepage with data folder:armbian-config --cmd HPG003\n"},{"location":"User-Guide_Armbian-Software/Management/#netbox","title":"NetBox","text":"NetBox infrastructure resource modeling install
NetBox is an open-source infrastructure resource modeling (IRM) tool used for managing and documenting networks and data center assets.
Requirements (installed automatically)
Key Features
Originally developed by DigitalOcean, NetBox is widely adopted by network engineers and sysadmins to maintain source-of-truth data for automation.
Official Website
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NBOX01 Access to the serviceDefault credentialsDirectoriesView logsManage the service NetBox is accessible via HTTP on port 8222:
http://<your.IP>:8222http://<your.IP>:8222/api/admin/armbian/netbox/config//armbian/netbox/scripts//armbian/netbox/reports/docker logs -f netbox\n Bashdocker exec -it netbox bash\n NetBox remove:armbian-config --cmd NBOX02\n NetBox purge with data folder:armbian-config --cmd NBOX03\n"},{"location":"User-Guide_Armbian-Software/Management/#samba","title":"Samba","text":"SAMBA Remote File share
Samba is an open-source software suite that enables seamless file and printer sharing between Linux/Unix servers and Windows clients. It allows a Linux machine to act as a domain controller, file server, or print server within a Windows network environment, supporting cross-platform interoperability.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd SMB001"},{"location":"User-Guide_Armbian-Software/Management/#webmin","title":"Webmin","text":"Webmin web-based management tool
Webmin is a web-based system administration tool for Unix-like servers. It provides an easy-to-use browser interface to manage users, configure services, edit files, monitor system performance, and control almost every aspect of your server \u2014 without needing to touch the command line.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd WBM001 Access to the web interface The web interface is accessible via port 10000:
https://<your.IP>:10000Emby organizes video, music, live TV, and photos
Emby organizes video, music, live TV, and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone emby Media Server.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @schwar3kat Documentation: Link
armbian-config --cmd EMB001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8091:
https://<your.IP>:8091/armbian/emby/armbian/emby/config/armbian/emby/tvshows /armbian/emby/moviesdocker logs -f emby\n Emby server remove:armbian-config --cmd EMB002\n Emby server purge with data folder:armbian-config --cmd EMB003\n"},{"location":"User-Guide_Armbian-Software/Media/#filebrowser","title":"Filebrowser","text":"Filebrowser provides a web-based file manager accessible via a browser
Filebrowser is a lightweight, web-based file manager that gives you direct access to your files from any browser. It allows users to upload, delete, preview, rename, and organize files and folders \u2014 all through a clean, responsive interface.
Key Features
Official site: https://filebrowser.org
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd FIL001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8095:
http://<your.IP>:8095/armbian/filebrowser/armbian/filebrowser/srv/armbian/filebrowser/database/armbian/filebrowser/filebrowser.json/armbian/filebrowser/brandingdocker logs -f filebrowser\n Filebrowser container remove:armbian-config --cmd FIL002\n Filebrowser container purge with data folder:armbian-config --cmd FIL003\n"},{"location":"User-Guide_Armbian-Software/Media/#hastebin","title":"Hastebin","text":"Hastebin Paste Server
Hastebin is a fast and simple self-hosted pastebin server. It allows users to quickly share text snippets like logs, code, or notes via a web interface or API. Hastebin is lightweight, easy to deploy with Docker, and ideal for teams needing private, temporary paste storage.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @efectn Documentation: Link
armbian-config --cmd HPS001 Hastebin remove:armbian-config --cmd HPS002\n Hastebin purge with data folder:armbian-config --cmd HPS003\n"},{"location":"User-Guide_Armbian-Software/Media/#immich","title":"Immich","text":"Immich - high-performance self-hosted photo and video backup solution
Immich is a self-hosted photo and video backup solution, designed for individuals and families who want:
Thanks to Immich being built with modern technologies like NestJS, TypeScript, and machine learning integrations, users enjoy a smooth, intelligent media experience. Whether you\u2019re a casual user backing up phone photos or a tech-savvy person managing media across multiple devices, Immich provides the flexibility and control of a cloud solution\u2014on your own server.
Summary
Edit: footer header Status: Preview Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd IMM001 Access to the serviceDefault credentialsDirectoriesView logsImmich vs Google Photos vs Synology Photos Immich is accessible via HTTP on port 8077:
http://<your.IP>:8077/armbian/immich/photos/upload//armbian/immich/photos/thumbs//armbian/immich/photos/profile//armbian/immich/photos/library//armbian/immich/photos/encoded-video//armbian/immich/photos/backups/docker logs -f immich\n Feature / Aspect Immich Google Photos Synology Photos Hosting Self-hosted Cloud (Google infrastructure) Self-hosted (on Synology NAS) Privacy & Control Full control, private data storage Data stored and analyzed by Google Full control within your NAS environment Automatic Uploads Yes (via mobile app) Yes (via mobile app) Yes (via mobile app or Synology Drive) Facial Recognition Yes (on-device) Yes (cloud-based) Yes (on-device) Object & Scene Detection Yes (limited but improving) Yes (advanced AI) Yes (basic) Web Interface Yes (modern and responsive) Yes Yes Mobile Apps Yes (iOS & Android) Yes (iOS & Android) Yes (iOS & Android) Albums & Sharing Yes (with public and private sharing) Yes (advanced sharing options) Yes Multi-user Support Yes Limited (mostly single user) Yes (multi-user, tied to NAS users) Backup Original Quality Yes (no compression) Only with paid storage Yes (NAS dependent) Offline Access Limited (depends on app setup) Yes (with sync) Yes Open Source Yes No No Hardware Requirement Any Docker-capable server or NAS N/A (runs on Google\u2019s cloud) Synology NAS required Price Free (self-hosted, you pay for hardware) Free (with limitations) / Paid for storage Included with NAS, hardware cost required Immich remove:armbian-config --cmd IMM002\n Immich purge with data folder:armbian-config --cmd IMM003\n"},{"location":"User-Guide_Armbian-Software/Media/#jellyfin","title":"Jellyfin","text":"Jellyfin Media System
Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby\u2019s 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it.
Edit: footer header Status: Preview Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd JMS001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8096:
http://<your.IP>:8096/armbian/jellyfin/armbian/jellyfin/config/armbian/jellyfin/tvseries/armbian/jellyfin/moviesdocker logs -f jellyfin\n Jellyfin remove:armbian-config --cmd JMS002\n Jellyfin purge with data folder:armbian-config --cmd JMS003\n"},{"location":"User-Guide_Armbian-Software/Media/#navidrome","title":"Navidrome","text":"Navidrome music server and streamer compatible with Subsonic/Airsonic
Navidrome is a modern, lightweight, and self-hosted music server and streamer. It\u2019s designed to be compatible with the Subsonic and Airsonic APIs, making it a drop-in replacement for users of those systems. With Navidrome, you can stream your personal music collection from anywhere using any compatible Subsonic client (mobile or desktop). It supports multi-user access, real-time updates, album artwork, and is built with performance and simplicity in mind\u2014perfect for organizing and accessing large music libraries.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NAV001 Navidrome remove:armbian-config --cmd NAV002\n Navidrome purge with data folder:armbian-config --cmd NAV003\n"},{"location":"User-Guide_Armbian-Software/Media/#nextcloud","title":"Nextcloud","text":"Nextcloud content collaboration platform
Nextcloud gives you access to all your files wherever you are. Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NCT001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 1443:
https://<your.IP>:1443/armbian/nextcloud/armbian/nextcloud/config/armbian/nextcloud/datadocker logs -f nextcloud\n Nextcloud remove:armbian-config --cmd NCT002\n Nextcloud purge with data folder:armbian-config --cmd NCT003\n"},{"location":"User-Guide_Armbian-Software/Media/#omv","title":"OMV","text":"Deploy NAS using OpenMediaVault
OpenMediaVault (OMV) is a powerful, open-source network-attached storage (NAS) operating system built on the Debian Linux distribution. It is designed to provide a simple and intuitive web-based interface for managing storage devices and network services, making it ideal for home users, small offices, and even advanced users looking for a customizable and efficient NAS solution.
OMV supports a wide range of features, including various file systems (EXT4, XFS, BTRFS, etc.), software RAID configurations, scheduled backups, and user and group management. It offers support for common network protocols such as SMB/CIFS (Windows file sharing), NFS, FTP, and SSH, enabling seamless file access across different platforms.
Through its modular design, OpenMediaVault can be easily extended with plugins, allowing users to add functionality like Docker support, media servers, cloud synchronization tools, BitTorrent clients, and more. The system is designed for stability and ease of use, with regular updates and a strong community supporting development and troubleshooting.
Whether used on a dedicated server, a Raspberry Pi, or virtualized hardware, OMV provides a flexible and reliable way to build your own custom NAS.
Warning: installation works only on Debian (bookworm) based Armbian image.
Edit: footer header Status: Stable Architecture: amd64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd OMV001 Access to the web interfaceDirectoriesUsagePlugins and Add-onsView logs The OpenMediaVault web interface is accessible via the default HTTP port:
http://<your.IP>:80/etc/openmediavault//srv/dev-disk-by-.../OpenMediaVault supports a wide range of community plugins:
openmediavault-compose or omv-extrasInstall plugins through the web interface after enabling OMV-Extras.
Bashjournalctl -u openmediavault-engined\ntail -f /var/log/syslog\n OpenMediaVault remove:armbian-config --cmd OMV002\n"},{"location":"User-Guide_Armbian-Software/Media/#owncloud","title":"Owncloud","text":"Owncloud share files and folders, easy and secure
ownCloud is a free and open-source software project for content collaboration and sharing and syncing of files in distributed and federated enterprise scenarios.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd OWC001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7787:
http://<your.IP>:7787/armbian/owncloud/armbian/owncloud/config/armbian/owncloud/datadocker logs -f owncloud\n Owncloud remove:armbian-config --cmd OWC002\n Owncloud purge with data folder:armbian-config --cmd OWC003\n"},{"location":"User-Guide_Armbian-Software/Media/#syncthing","title":"Syncthing","text":"Syncthing continuous file synchronization
Syncthing replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it\u2019s transmitted over the Internet.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd STC001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8884:
https://<your.IP>:8884/armbian/syncthing/armbian/syncthing/config/armbian/syncthing/data1 /armbian/syncthing/data2docker logs -f syncthing\n Syncthing remove:armbian-config --cmd STC002\n Syncthing purge with data folder:armbian-config --cmd STC003\n"},{"location":"User-Guide_Armbian-Software/Media/#stirling","title":"Stirling","text":"Stirling PDF tools for viewing and editing PDF files
Stirling-PDF is a robust, locally hosted web-based PDF manipulation tool using Docker. It enables you to carry out various operations on PDF files, including splitting, merging, converting, reorganizing, adding images, rotating, compressing, and more. This locally hosted web application has evolved to encompass a comprehensive set of features, addressing all your PDF requirements.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd STR001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8075:
https://<your.IP>:8075/armbian/stirlingdocker logs -f stirling-pdf\n Stirling PDF remove:armbian-config --cmd STR002\n Stirling PDF purge with data folder:armbian-config --cmd STR003\n"},{"location":"User-Guide_Armbian-Software/Monitoring/","title":"Real-time monitoring, collecting metrics, up-time status","text":""},{"location":"User-Guide_Armbian-Software/Monitoring/#grafana","title":"Grafana","text":"Grafana data analytics
Grafana is a multi-platform open source analytics and interactive visualization web application. It can produce charts, graphs, and alerts for the web when connected to supported data sources.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd GRA001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 3022:
https://<your.IP>:3022/armbian/grafanadocker logs -f grafana\n Grafana remove:armbian-config --cmd GRA002\n Grafana purge with data folder:armbian-config --cmd GRA003\n"},{"location":"User-Guide_Armbian-Software/Monitoring/#netalertx","title":"NetAlertX","text":"NetAlertX network scanner & notification framework
NetAlertX is an open-source network monitoring and intruder detection tool designed to provide visibility into your Wi-Fi or LAN network. It scans your network for connected devices and alerts you when new or unknown devices are detected, helping you monitor unauthorized access and maintain network security.
Key Features:
NetAlertX is actively maintained and supports various installation methods, including Docker and bare-metal setups. It serves as a proactive solution for maintaining network health and preventing issues before they escalate, providing peace of mind for individuals and small businesses alike.
For more information and installation guides, visit the official NetAlertX documentation.
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NAX001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 20211:
https://<your.IP>:20211/armbian/netalertx/configdocker logs -f netalertx\n NetAlertX network scanner remove:armbian-config --cmd NAX002\n NetAlertX network scanner purge with data folder:armbian-config --cmd NAX003\n"},{"location":"User-Guide_Armbian-Software/Monitoring/#netdata","title":"Netdata","text":"Netdata - monitoring real-time metrics
Netdata is a partially open source tool designed to collect real-time metrics, such as CPU usage, disk activity, bandwidth usage, website visits, etc., and then display them in live, easy-to-interpret charts.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NTD001 Netdata remove:armbian-config --cmd NTD002\n Netdata purge with data folder:armbian-config --cmd NTD003\n"},{"location":"User-Guide_Armbian-Software/Monitoring/#prometheus","title":"Prometheus","text":"Prometheus monitoring and alerting toolkit
Prometheus is an open-source monitoring and alerting toolkit designed for reliability and scalability. It collects and stores time-series data, provides powerful query capabilities, and enables real-time alerts based on defined conditions. Commonly used in cloud and containerized environments, Prometheus integrates seamlessly with Kubernetes and other modern infrastructure.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @efectn Documentation: Link
armbian-config --cmd PRO001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 9191:
http://<your.IP>:9191/armbian/prometheusdocker logs -f prometheus\n Prometheus remove:armbian-config --cmd PRO002\n Prometheus purge with data folder:armbian-config --cmd PRO003\n"},{"location":"User-Guide_Armbian-Software/Monitoring/#uptime-kuma","title":"Uptime Kuma","text":"Uptime Kuma self-hosted monitoring tool
Uptime Kuma is a self-hosted monitoring tool similar to \"Uptime Robot\". It provides a beautiful, easy-to-use web dashboard to monitor HTTP(s), TCP, Ping, and more types of services.
You can receive instant notifications when a service goes down via Telegram, Discord, Slack, email, and many other integrations.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd UPK001 Access to the web interfaceFeatures The web interface is accessible via port 3001:
https://<your.IP>:3001armbian-config --cmd UPK002\n Uptime Kuma purge with data folder:armbian-config --cmd UPK003\n"},{"location":"User-Guide_Armbian-Software/Music/","title":"Music servers and streamers","text":""},{"location":"User-Guide_Armbian-Software/Music/#navidrome","title":"Navidrome","text":"Navidrome music server and streamer compatible with Subsonic/Airsonic
Navidrome is a modern, lightweight, and self-hosted music server and streamer. It\u2019s designed to be compatible with the Subsonic and Airsonic APIs, making it a drop-in replacement for users of those systems. With Navidrome, you can stream your personal music collection from anywhere using any compatible Subsonic client (mobile or desktop). It supports multi-user access, real-time updates, album artwork, and is built with performance and simplicity in mind\u2014perfect for organizing and accessing large music libraries.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NAV001 Navidrome remove:armbian-config --cmd NAV002\n Navidrome purge with data folder:armbian-config --cmd NAV003\n"},{"location":"User-Guide_Armbian-Software/Netconfig/","title":"Console network tools for measuring load and bandwidth","text":""},{"location":"User-Guide_Armbian-Software/Netconfig/#avahi-daemon","title":"avahi-daemon","text":"avahi-daemon hostname broadcast via mDNS
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd AVH001 avahi-daemon remove:armbian-config --cmd AVH002\n"},{"location":"User-Guide_Armbian-Software/Netconfig/#iperf3","title":"iperf3","text":"iperf3 bandwidth measuring tool
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd IPR001 iperf3 remove:armbian-config --cmd IPR002\n"},{"location":"User-Guide_Armbian-Software/Netconfig/#iptraf-ng","title":"iptraf-ng","text":"iptraf-ng IP LAN monitor
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd IPT001 iptraf-ng remove:armbian-config --cmd IPT002\n"},{"location":"User-Guide_Armbian-Software/Netconfig/#nload","title":"nload","text":"nload - realtime console network usage monitor
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NLD001 nload - remove:armbian-config --cmd NLD002\n"},{"location":"User-Guide_Armbian-Software/Printing/","title":"Tools for printing and 3D printing","text":""},{"location":"User-Guide_Armbian-Software/Printing/#octoprint","title":"OctoPrint","text":"OctoPrint web-based 3D printers management tool
OctoPrint is an open source 3D printer controller application, which provides a web interface for the connected printers. It displays printers status and key parameters and allows user to schedule prints and remotely control the printer.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd OCT001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7981:
https://<your.IP>:7981/armbian/octoprintdocker logs -f octoprint\n OctoPrint remove:armbian-config --cmd OCT002\n OctoPrint purge with data folder:armbian-config --cmd OCT003\n"},{"location":"User-Guide_Armbian-Software/Software/","title":"Run/Install 3rd party applications","text":""},{"location":"User-Guide_Armbian-Software/Software/#armbian-infrastructure-services","title":"Armbian infrastructure services","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#cdn-router","title":"CDN router","text":"Router for repository mirror automation
The Armbian Router is an intelligent redirector system that optimizes file downloads by automatically directing users to the best available mirror. It evaluates each download request based on geographic location, server health, and file availability, ensuring faster downloads, balanced load distribution, and high availability. This core service underpins Armbian\u2019s scalable mirror network, seamlessly routing traffic to improve performance and reliability for end users worldwide.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd ART001 Remove CDN router:armbian-config --cmd ART002\n"},{"location":"User-Guide_Armbian-Software/Software/#gh-runners","title":"GH runners","text":"GitHub runners for Armbian automation
This module automates the installation, removal, and status checking of GitHub self-hosted runners for the Armbian project. It supports batch operations and user input through dialog prompts when running interactively.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd GHR001 Supported Commands install Installs one or more GitHub runners using the provided configuration or interactively prompted values.purge / remove Removes runners based on the provided runner name series and target organization or repository.status Quietly checks if any actions.runner services are currently running on the system.gh_token GitHub token with admin rights to manage self-hosted runners. runner_name Name prefix for the runner series (default: armbian). start Start index of the runner series (e.g., 01). stop End index of the runner series (e.g., 05). label_primary Labels for the first runner (default: alfa). label_secondary Labels for additional runners (default: fast,images). organisation GitHub organization name (default: armbian). owner GitHub user or organization owner (used for repo-level runners). repository GitHub repository name (used for repo-level runners). Behavior dialog only in interactive mode.start to stop).actions.runner.install and actions.runner.remove helpers.0 if any runner services are active, 1 otherwise (for scripting use).armbian-config --cmd GHR002\n"},{"location":"User-Guide_Armbian-Software/Software/#rsyncd-server","title":"Rsyncd server","text":"Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd RSD001 Remove Armbian rsyncd server:armbian-config --cmd RSD002\n"},{"location":"User-Guide_Armbian-Software/Software/#backup-solutions-for-your-data","title":"Backup solutions for your data","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#duplicati","title":"Duplicati","text":"Duplicati install
Duplicati is a versatile and secure backup tool designed for everyone, including:
Duplicati offers powerful features such as strong AES-256 encryption, backup scheduling, and flexible storage support (local folders, NAS, cloud providers like Google Drive, Dropbox, S3, and more). Through its web-based interface, users can easily configure, monitor, and restore backups from any browser.
Thanks to Duplicati\u2019s smart design \u2014 working through standard protocols and containerized deployment \u2014 it fits seamlessly into any environment, from personal setups to enterprise infrastructures.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DPL001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8200:
http://<your.IP>:8200/armbian/duplicati/armbian/duplicati/config/armbian/duplicati/backupsdocker logs -f duplicati\n Duplicati remove:armbian-config --cmd DPL002\n Duplicati purge with data folder:armbian-config --cmd DPL003\n"},{"location":"User-Guide_Armbian-Software/Software/#docker-containerization-and-kvm-virtual-machines","title":"Docker containerization and KVM virtual machines","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#docker","title":"Docker","text":"Docker minimal
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd CON001 What is Docker? Docker helps developers build, share, run, and verify applications anywhere - without tedious environment configuration or management.
Docker engine:armbian-config --cmd CON002\n Docker remove:armbian-config --cmd CON003\n Docker purge with all images, containers, and volumes:armbian-config --cmd CON004\n"},{"location":"User-Guide_Armbian-Software/Software/#portainer","title":"Portainer","text":"Portainer container management platform
Portainer simplifies your Docker container management via Portainer web interface. It enables faster deploy of the applications and it gives real time visibility.
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @schwar3kat Documentation: Link
armbian-config --cmd POR001 Access to the web interface The web interface is accessible via port 9002:
http://<your.IP>:9002armbian-config --cmd POR002\n Portainer purge with with data folder:armbian-config --cmd POR003\n"},{"location":"User-Guide_Armbian-Software/Software/#network-wide-ad-blockers-servers","title":"Network-wide ad blockers servers","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#adguardhome","title":"AdGuardHome","text":"AdGuardHome DNS sinkhole
AdGuard Home is a network-wide software that functions as a DNS server and ad blocker. It blocks ads, trackers, and malicious websites at the DNS level, meaning it filters content for all devices connected to the network. It also provides additional features like parental controls, logging, and privacy protections. Essentially, it acts as a gateway between your devices and the internet, blocking unwanted content before it even reaches your devices.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd ADG001 Access to the web interfaceDirectoriesUsageBlack and white listsView logs The web interface is accessible via port 3000:
https://<your.IP>:3000/armbian/adguardhome//armbian/adguardhome/confdir/armbian/adguardhome/workdirThere are many sites in the web giving blocklists and whitelists for AdGuard Home. They can be used when you want to have more blocking as the standard installation gives you. Here are some examples:
docker logs -f adguardhome\n AdGuardHome remove:armbian-config --cmd ADG002\n AdGuardHome purge with data folder:armbian-config --cmd ADG003\n"},{"location":"User-Guide_Armbian-Software/Software/#pi-hole","title":"Pi-hole","text":"Pi-hole DNS ad blocker with Unbound support
Pi-hole is a network-wide ad blocker that acts as a DNS (Domain Name System) sinkhole. It blocks connections to known ad servers, trackers, and malicious domains across all devices in your network, without requiring any browser extensions or client-side software.
"},{"location":"User-Guide_Armbian-Software/Software/#pi-hole-explained","title":"Pi-hole Explained","text":"Pi-hole offers an effective and centralized way to enhance privacy and reduce unwanted content across your entire network.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd PIH001 Access the web interface The web interface of Pi-hole can be accessed via:
http://<your.IP>:8811/adminarmbian-configarmbian-config --cmd PIH002\n Pi-hole remove:armbian-config --cmd PIH003\n Pi-hole purge with data folder:armbian-config --cmd PIH004\n"},{"location":"User-Guide_Armbian-Software/Software/#unbound","title":"Unbound","text":"Unbound caching DNS resolver
Unbound is a high-performance, open-source DNS resolver. It primarily serves to resolve domain names into IP addresses for devices on a network. Unlike regular DNS servers, Unbound performs DNS lookups directly and securely, providing features like DNSSEC validation (ensuring data integrity) and privacy protections. It\u2019s often used to improve speed, security, and privacy by resolving queries locally rather than relying on external DNS services.
Edit: footer header Status: Stable Architecture: x86-64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd UNB001 Default DNS portDirectoriesView logs /armbian/unbound//armbian/unbound/docker logs -f unbound\n Unbound remove:armbian-config --cmd UNB002\n Unbound purge with data folder:armbian-config --cmd UNB003\n"},{"location":"User-Guide_Armbian-Software/Software/#sql-database-servers-and-web-interface-managers","title":"SQL database servers and web interface managers","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#mysql","title":"MySQL","text":"MySQL SQL database server
MySQL is one of the world\u2019s most widely used open-source database servers. Trusted for decades in web, cloud, and enterprise applications.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd MYSQL1 ConfigurationDirectoriesView logs Database access configuration is done at first install:
<your.IP>/armbian/mysql/armbian/mysql/datadocker logs -f mysql\n MySQL remove:armbian-config --cmd MYSQL2\n MySQL purge with data folder:armbian-config --cmd MYSQL3\n"},{"location":"User-Guide_Armbian-Software/Software/#mariadb","title":"Mariadb","text":"Mariadb SQL database server
MariaDB is a fast, open-source relational database server developed by the original creators of MySQL. It is designed to be fully compatible with MySQL while offering improved performance, enhanced security, and additional features.
MariaDB supports a wide range of storage engines, advanced SQL capabilities, and both single-node and clustered deployments. It is widely used in web, cloud, and
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DAT001 ConfigurationDirectoriesView logs Database access configuration is done at first install: - create root password - create database - create normal user - create password for normal user
<your.IP>:3307/armbian/mariadb/armbian/mariadb/configdocker logs -f mariadb\n Mariadb remove:armbian-config --cmd DAT002\n Mariadb purge with data folder:armbian-config --cmd DAT003\n"},{"location":"User-Guide_Armbian-Software/Software/#phpmyadmin","title":"phpMyAdmin","text":"phpMyAdmin web interface manager
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd MYA001 phpMyAdmin remove:armbian-config --cmd MYA002\n phpMyAdmin purge with data folder:armbian-config --cmd MYA003\n"},{"location":"User-Guide_Armbian-Software/Software/#postgresql","title":"PostgreSQL","text":"PostgreSQL install
PostgreSQL is a powerful, open-source object-relational database system known for its robustness, feature richness, and reliability.
It is designed for everyone, including:
PostgreSQL offers strong ACID compliance, concurrency, rich data types, full-text search, JSON support, and extensibility through stored procedures and custom functions. It is trusted globally in financial, government, and web-scale applications.
Thanks to its proven architecture and open-source nature, PostgreSQL fits seamlessly in projects of all sizes.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd PGSQL1 Access to the databaseDirectoriesView logs PostgreSQL is accessible via port 5432:
postgresql://<your.IP>:5432armbianarmbianarmbian/armbian/postgres/datadocker logs -f postgres\n PostgreSQL remove:armbian-config --cmd PGSQL2\n PostgreSQL purge with data folder:armbian-config --cmd PGSQL3\n"},{"location":"User-Guide_Armbian-Software/Software/#redis","title":"Redis","text":"Redis install
Redis is an open-source, in-memory data structure store, used as a database, cache, and message broker. It supports a variety of data structures such as strings, hashes, lists, sets, and sorted sets.
Key Features: - Extremely fast performance with in-memory storage - Persistence options (snapshotting and AOF) - Pub/Sub messaging capabilities - Built-in replication and high availability - Simple API and wide client support
Redis is widely used for real-time applications, caching layers, session stores, and lightweight queues across industries and platforms.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd REDIS1 Access to the serviceDirectoriesView logs Redis server is accessible on port 6379:
redis://<your.IP>:6379/armbian/redis/datadocker logs -f redis\n Redis remove:armbian-config --cmd REDIS2\n Redis purge with data folder:armbian-config --cmd REDIS3\n"},{"location":"User-Guide_Armbian-Software/Software/#applications-and-tools-for-development","title":"Applications and tools for development","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#git-cli","title":"Git CLI","text":"Install tools for cloning and managing repositories (git)
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd GIT001 Remove tools for cloning and managing repositories (git):armbian-config --cmd GIT002\n"},{"location":"User-Guide_Armbian-Software/Software/#download-apps-for-movies-tv-shows-music-and-subtitles","title":"Download apps for movies, TV shows, music and subtitles","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#bazarr","title":"Bazarr","text":"Bazarr automatic subtitles downloader for Sonarr and Radarr
Bazarr is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd BAZ001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 6767:
https://<your.IP>:6767/armbian/bazarr/armbian/bazarr/config/armbian/bazarr/movies /armbian/bazarr/tvdocker logs -f bazarr\n Bazarr remove:armbian-config --cmd BAZ002\n Bazarr purge with data folder:armbian-config --cmd BAZ003\n"},{"location":"User-Guide_Armbian-Software/Software/#deluge","title":"Deluge","text":"Deluge BitTorrent client
Deluge\u2060 is a lightweight, Free Software, cross-platform BitTorrent client.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DEL001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8112:
https://<your.IP>:8112/armbian/deluge/armbian/deluge/config/armbian/deluge/downloadsdocker logs -f deluge\n Deluge remove:armbian-config --cmd DEL002\n Deluge purge with data folder:armbian-config --cmd DEL003\n"},{"location":"User-Guide_Armbian-Software/Software/#qbittorrent","title":"qBittorrent","text":"qBittorrent BitTorrent client
The Qbittorrent\u2060 project aims to provide an open-source software alternative to \u00b5Torrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DOW001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8090:
https://<your.IP>:8090/armbian/qbittorrent/armbian/qbittorrent/config/armbian/qbittorrent/downloadsdocker logs -f qbittorrent\n qBittorrent remove:armbian-config --cmd DOW002\n qBittorrent purge with data folder:armbian-config --cmd DOW003\n Prowlarr:armbian-config --cmd DOW025\n Access to the web interfaceDirectoriesView logs The web interface is accessible via port 9696:
https://<your.IP>:9696/armbian/prowlarr/armbian/prowlarr/configdocker logs -f prowlarr\n Prowlarr remove:armbian-config --cmd DOW026\n Prowlarr purge with data folder:armbian-config --cmd DOW027\n"},{"location":"User-Guide_Armbian-Software/Software/#jellyseerr","title":"Jellyseerr","text":"Jellyseerr Jellyfin/Emby/Plex integration install
Jellyseerr is a free and open source software application for managing requests for your media library. It is a fork of Overseerr built to bring support for Jellyfin & Emby media servers!
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd JEL001 Jellyseerr remove:armbian-config --cmd JEL002\n Jellyseerr purge with data folder:armbian-config --cmd JEL003\n"},{"location":"User-Guide_Armbian-Software/Software/#lidarr","title":"Lidarr","text":"Lidarr automatic music downloader
Lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd LID001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8686:
https://<your.IP>:8686/armbian/lidarr/armbian/lidarr/config/armbian/lidarr/downloads /armbian/lidarr/musicdocker logs -f lidarr\n Lidarr remove:armbian-config --cmd LID002\n Lidarr purge with data folder:armbian-config --cmd LID003\n"},{"location":"User-Guide_Armbian-Software/Software/#medusa","title":"Medusa","text":"Medusa automatic downloader for TV shows
Medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd MDS001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8081:
https://<your.IP>:8081/armbian/medusa/armbian/medusa/config/armbian/medusa/downloads/armbian/medusa/downloads/tvdocker logs -f medusa\n Medusa TV shows downloader remove:armbian-config --cmd MDS002\n Medusa TV shows downloader purge:armbian-config --cmd MDS003\n"},{"location":"User-Guide_Armbian-Software/Software/#radarr","title":"Radarr","text":"Radarr automatic downloader for movies
Radarr - A fork of Sonarr to work with movies \u00e0 la Couchpotato.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd RAD001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7878:
https://<your.IP>:7878/armbian/radarr/armbian/radarr/config/armbian/radarr/movies/armbian/radarr/clientdocker logs -f radarr\n Radarr remove:armbian-config --cmd RAD002\n Radarr purge with data folder:armbian-config --cmd RAD003\n"},{"location":"User-Guide_Armbian-Software/Software/#readarr","title":"Readarr","text":"Readarr automatic downloader for Ebooks
Readarr - Book Manager and Automation (Sonarr for Ebooks)
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd RDR001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8787:
https://<your.IP>:8787/armbian/readarr/armbian/readarr/config/armbian/readarr/books /armbian/readarr/clientdocker logs -f readarr\n Readarr remove:armbian-config --cmd RDR002\n Readarr purge with data folder:armbian-config --cmd RDR003\n"},{"location":"User-Guide_Armbian-Software/Software/#sabnzbd","title":"SABnzbd","text":"SABnzbd newsgroup downloader
Sabnzbd\u2060 makes Usenet as simple and streamlined as possible by automating everything we can. All you have to do is add an .nzb. SABnzbd takes over from there, where it will be automatically downloaded, verified, repaired, extracted and filed away with zero human interaction.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SABN01 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8380:
https://<your.IP>:8380/armbian/sabnzbd/armbian/sabnzbd/config/armbian/sabnzbd/downloads/armbian/sabnzbd/incompletedocker logs -f sabnzbd\n SABnzbd remove:armbian-config --cmd SABN02\n SABnzbd purge with data folder:armbian-config --cmd SABN03\n"},{"location":"User-Guide_Armbian-Software/Software/#sonarr","title":"Sonarr","text":"Sonarr automatic downloader for TV shows
Sonarr (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SON001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8989:
https://<your.IP>:8989/armbian/sonarr/armbian/sonarr/config/armbian/sonarr/tvseries/armbian/sonarr/clientdocker logs -f sonarr\n Sonarr remove:armbian-config --cmd SON002\n Sonarr purge with data folder:armbian-config --cmd SON003\n"},{"location":"User-Guide_Armbian-Software/Software/#transmission","title":"Transmission","text":"Transmission BitTorrent client
Transmission\u2060 is designed for easy, powerful use. Transmission has the features you want from a BitTorrent client: encryption, a web interface, peer exchange, magnet links, DHT, \u00b5TP, UPnP and NAT-PMP port forwarding, webseed support, watch directories, tracker editing, global and per-torrent speed limits, and more.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd TRA001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 9091:
https://<your.IP>:9091/armbian/transmission/armbian/transmission/config/armbian/transmission/downloads/armbian/transmission/watchdocker logs -f transmission\n Transmission remove:armbian-config --cmd TRA002\n Transmission purge with data folder:armbian-config --cmd TRA003\n"},{"location":"User-Guide_Armbian-Software/Software/#manage-your-finances","title":"Manage your finances","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#actual-budget","title":"Actual Budget","text":"Do your finances with Actual Budget
Actual Budget is a free, open-source personal finance app built around the envelope budgeting method.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd ABU001 Warning: HTTPS Certificate Required
After initially installing the Actual server, you might get stuck at the step: \u201cInitializing the connection to the local database\u2026\u201d
The issue is due to the server not having an HTTPS certificate. After activating an HTTPS certificate for the Actual server, everything should work fine.
If you still encounter issues even after setting up HTTPS, we highly recommend reaching out to the Actual Budget Discord server \u2014 the developers and community there are very kind and helpful.
Actual Budget remove:armbian-config --cmd ABU002\n Actual Budget purge with data folder:armbian-config --cmd ABU003\n"},{"location":"User-Guide_Armbian-Software/Software/#home-automation-for-control-home-appliances","title":"Home Automation for control home appliances","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#domoticz","title":"Domoticz","text":"Domoticz open source home automation
Domoticz is an open-source home automation platform that allows you to control and monitor smart devices in your home. It supports a wide range of devices, including lights, sensors, thermostats, and cameras. Through its web interface or mobile app, you can set up automation rules and schedules, providing greater convenience and energy efficiency. It\u2019s customizable, flexible, and can be run on a variety of hardware platforms supported by Armbian.
Access to the web interfaceDirectoriesAdvanced setupThe web interface is accessible via port 8780:
https://<your.IP>:8780/armbian/domoticz/dev/ttyUSB0) to Docker container is enabled by defaultEdit: footer header Status: Preview Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DOM001 Domoticz remove:armbian-config --cmd DOM002\n Domoticz purge with data folder:armbian-config --cmd DOM003\n"},{"location":"User-Guide_Armbian-Software/Software/#evcc","title":"EVCC","text":"EVCC - solar charging automation
evcc is an energy management system with a focus on electromobility. The software controls your EV charger or smart plug. It communicates with your vehicle, inverter or home storage to make intelligent charging decisions. The software is open source and community-driven.
Edit: footer header Status: Preview Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd EVCC01 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7070:
https://<your.IP>:7070/armbian/evcc/armbian/evcc/evcc.yamldocker logs -f evcc\n EVCC - solar charging automation remove:armbian-config --cmd EVCC02\n EVCC purge with data folder:armbian-config --cmd EVCC03\n"},{"location":"User-Guide_Armbian-Software/Software/#openhab","title":"openHAB","text":"openHAB empowering the smart home
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd HAB001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 2080:
https://<your.IP>:2080/armbian/openhab/armbian/openhab/conf/armbian/openhab/userdata/armbian/openhab/addonsSee also openHAB file locations.
Bashdocker logs -f openhab\n openHAB remove:armbian-config --cmd HAB002\n openHAB purge with data folder:armbian-config --cmd HAB003\n"},{"location":"User-Guide_Armbian-Software/Software/#home-assistant","title":"Home Assistant","text":"Home Assistant open source home automation
Home Assistant is an open source smart home platform that allows you to connect your smart home devices like your TV, fan, cameras, thermostats, lights, and sensors. As a user, you can build intricate automation using Home Assistant\u2019s user-friendly, unified web-based user interface.
Perfect to run on any single board computer with 4 cores and at least 512Mb of memory. Armbian installation is optimised to run from SD/eMMC media, but it is recommended to use SSD.
Limited support
The supervised installation method on Armbian is not officially supported by the Home Assistant project. Additionally, installation on hardware that is not officially supported is also outside the scope of support provided by the Armbian team.
You are welcome to report high-level application issues that are reproducible on the official Home Assistant Operating System (HAOS) within the Home Assistant Community. For any topics related to single-board computer hardware, you may use the Armbian Community Forums; however, please be aware that official support from the Armbian team is not guaranteed.
While the Home Assistant team deprecated the Supervised installation method, the Armbian team will continue to provide and maintain it, as long as automated installation tests succeed and the required maintenance remains manageable.
Edit: footer header Status: Preview Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd HAS001 Access to the web interfaceDirectoriesArmbian advantages The web interface is accessible via port 8123:
https://<your.IP>:8123Home Assistant on Armbian runs supervised in a Docker container. This secures same functionality as stock HAOS.
/armbian/haosarmbian-config --cmd HAS002\n Home Assistant purge with data folder:armbian-config --cmd HAS003\n"},{"location":"User-Guide_Armbian-Software/Software/#remote-file-management-tools","title":"Remote File & Management tools","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#cockpit","title":"Cockpit","text":"Cockpit OS and VM management tool
Cockpit is a web-based graphical interface for servers, intended for everyone.
Here\u2019s a subset of tasks you can perform on each host running Cockpit
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd CPT001 Access to the web interfaceVideo instructions The web interface is accessible via port 9890:
https://<your.IP>:9890armbian-config --cmd CPT002\n Purge Cockpit with virtual machines:armbian-config --cmd CPT003\n"},{"location":"User-Guide_Armbian-Software/Software/#homepage","title":"Homepage","text":"Install Homepage startpage / application dashboard
gethomepage is a fast, fully static, highly customizable application dashboard built for modern self-hosted environments. With a fully proxied architecture and zero runtime, it delivers exceptional speed, security, and simplicity for organizing and accessing your services.
It supports over 100 service integrations and multiple languages, offering live status displays and dynamic resource monitoring out-of-the-box. Configuration is effortless via YAML files or automatic Docker label discovery, making setup and management seamless.
Key Features
Whether you\u2019re running a small homelab or a full server fleet, gethomepage offers a sleek, powerful, and secure way to stay organized.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd HPG001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 3021:
https://<your.IP>:3021Configuration: Please reffer to official manual https://gethomepage.dev/configs/
/armbian/homepage/armbian/homepage/configdocker logs -f homepage\n Remove Homepage:armbian-config --cmd HPG002\n Purge Homepage with data folder:armbian-config --cmd HPG003\n"},{"location":"User-Guide_Armbian-Software/Software/#netbox","title":"NetBox","text":"NetBox infrastructure resource modeling install
NetBox is an open-source infrastructure resource modeling (IRM) tool used for managing and documenting networks and data center assets.
Requirements (installed automatically)
Key Features
Originally developed by DigitalOcean, NetBox is widely adopted by network engineers and sysadmins to maintain source-of-truth data for automation.
Official Website
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NBOX01 Access to the serviceDefault credentialsDirectoriesView logsManage the service NetBox is accessible via HTTP on port 8222:
http://<your.IP>:8222http://<your.IP>:8222/api/admin/armbian/netbox/config//armbian/netbox/scripts//armbian/netbox/reports/docker logs -f netbox\n Bashdocker exec -it netbox bash\n NetBox remove:armbian-config --cmd NBOX02\n NetBox purge with data folder:armbian-config --cmd NBOX03\n"},{"location":"User-Guide_Armbian-Software/Software/#samba","title":"Samba","text":"SAMBA Remote File share
Samba is an open-source software suite that enables seamless file and printer sharing between Linux/Unix servers and Windows clients. It allows a Linux machine to act as a domain controller, file server, or print server within a Windows network environment, supporting cross-platform interoperability.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd SMB001"},{"location":"User-Guide_Armbian-Software/Software/#webmin","title":"Webmin","text":"Webmin web-based management tool
Webmin is a web-based system administration tool for Unix-like servers. It provides an easy-to-use browser interface to manage users, configure services, edit files, monitor system performance, and control almost every aspect of your server \u2014 without needing to touch the command line.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd WBM001 Access to the web interface The web interface is accessible via port 10000:
https://<your.IP>:10000Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#emby","title":"Emby","text":"Emby organizes video, music, live TV, and photos
Emby organizes video, music, live TV, and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone emby Media Server.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @schwar3kat Documentation: Link
armbian-config --cmd EMB001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8091:
https://<your.IP>:8091/armbian/emby/armbian/emby/config/armbian/emby/tvshows /armbian/emby/moviesdocker logs -f emby\n Emby server remove:armbian-config --cmd EMB002\n Emby server purge with data folder:armbian-config --cmd EMB003\n"},{"location":"User-Guide_Armbian-Software/Software/#filebrowser","title":"Filebrowser","text":"Filebrowser provides a web-based file manager accessible via a browser
Filebrowser is a lightweight, web-based file manager that gives you direct access to your files from any browser. It allows users to upload, delete, preview, rename, and organize files and folders \u2014 all through a clean, responsive interface.
Key Features
Official site: https://filebrowser.org
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd FIL001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8095:
http://<your.IP>:8095/armbian/filebrowser/armbian/filebrowser/srv/armbian/filebrowser/database/armbian/filebrowser/filebrowser.json/armbian/filebrowser/brandingdocker logs -f filebrowser\n Filebrowser container remove:armbian-config --cmd FIL002\n Filebrowser container purge with data folder:armbian-config --cmd FIL003\n"},{"location":"User-Guide_Armbian-Software/Software/#hastebin","title":"Hastebin","text":"Hastebin Paste Server
Hastebin is a fast and simple self-hosted pastebin server. It allows users to quickly share text snippets like logs, code, or notes via a web interface or API. Hastebin is lightweight, easy to deploy with Docker, and ideal for teams needing private, temporary paste storage.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @efectn Documentation: Link
armbian-config --cmd HPS001 Hastebin remove:armbian-config --cmd HPS002\n Hastebin purge with data folder:armbian-config --cmd HPS003\n"},{"location":"User-Guide_Armbian-Software/Software/#immich","title":"Immich","text":"Immich - high-performance self-hosted photo and video backup solution
Immich is a self-hosted photo and video backup solution, designed for individuals and families who want:
Thanks to Immich being built with modern technologies like NestJS, TypeScript, and machine learning integrations, users enjoy a smooth, intelligent media experience. Whether you\u2019re a casual user backing up phone photos or a tech-savvy person managing media across multiple devices, Immich provides the flexibility and control of a cloud solution\u2014on your own server.
Summary
Edit: footer header Status: Preview Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd IMM001 Access to the serviceDefault credentialsDirectoriesView logsImmich vs Google Photos vs Synology Photos Immich is accessible via HTTP on port 8077:
http://<your.IP>:8077/armbian/immich/photos/upload//armbian/immich/photos/thumbs//armbian/immich/photos/profile//armbian/immich/photos/library//armbian/immich/photos/encoded-video//armbian/immich/photos/backups/docker logs -f immich\n Feature / Aspect Immich Google Photos Synology Photos Hosting Self-hosted Cloud (Google infrastructure) Self-hosted (on Synology NAS) Privacy & Control Full control, private data storage Data stored and analyzed by Google Full control within your NAS environment Automatic Uploads Yes (via mobile app) Yes (via mobile app) Yes (via mobile app or Synology Drive) Facial Recognition Yes (on-device) Yes (cloud-based) Yes (on-device) Object & Scene Detection Yes (limited but improving) Yes (advanced AI) Yes (basic) Web Interface Yes (modern and responsive) Yes Yes Mobile Apps Yes (iOS & Android) Yes (iOS & Android) Yes (iOS & Android) Albums & Sharing Yes (with public and private sharing) Yes (advanced sharing options) Yes Multi-user Support Yes Limited (mostly single user) Yes (multi-user, tied to NAS users) Backup Original Quality Yes (no compression) Only with paid storage Yes (NAS dependent) Offline Access Limited (depends on app setup) Yes (with sync) Yes Open Source Yes No No Hardware Requirement Any Docker-capable server or NAS N/A (runs on Google\u2019s cloud) Synology NAS required Price Free (self-hosted, you pay for hardware) Free (with limitations) / Paid for storage Included with NAS, hardware cost required Immich remove:armbian-config --cmd IMM002\n Immich purge with data folder:armbian-config --cmd IMM003\n"},{"location":"User-Guide_Armbian-Software/Software/#jellyfin","title":"Jellyfin","text":"Jellyfin Media System
Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby\u2019s 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it.
Edit: footer header Status: Preview Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd JMS001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8096:
http://<your.IP>:8096/armbian/jellyfin/armbian/jellyfin/config/armbian/jellyfin/tvseries/armbian/jellyfin/moviesdocker logs -f jellyfin\n Jellyfin remove:armbian-config --cmd JMS002\n Jellyfin purge with data folder:armbian-config --cmd JMS003\n"},{"location":"User-Guide_Armbian-Software/Software/#navidrome","title":"Navidrome","text":"Navidrome music server and streamer compatible with Subsonic/Airsonic
Navidrome is a modern, lightweight, and self-hosted music server and streamer. It\u2019s designed to be compatible with the Subsonic and Airsonic APIs, making it a drop-in replacement for users of those systems. With Navidrome, you can stream your personal music collection from anywhere using any compatible Subsonic client (mobile or desktop). It supports multi-user access, real-time updates, album artwork, and is built with performance and simplicity in mind\u2014perfect for organizing and accessing large music libraries.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NAV001 Navidrome remove:armbian-config --cmd NAV002\n Navidrome purge with data folder:armbian-config --cmd NAV003\n"},{"location":"User-Guide_Armbian-Software/Software/#nextcloud","title":"Nextcloud","text":"Nextcloud content collaboration platform
Nextcloud gives you access to all your files wherever you are. Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NCT001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 1443:
https://<your.IP>:1443/armbian/nextcloud/armbian/nextcloud/config/armbian/nextcloud/datadocker logs -f nextcloud\n Nextcloud remove:armbian-config --cmd NCT002\n Nextcloud purge with data folder:armbian-config --cmd NCT003\n"},{"location":"User-Guide_Armbian-Software/Software/#omv","title":"OMV","text":"Deploy NAS using OpenMediaVault
OpenMediaVault (OMV) is a powerful, open-source network-attached storage (NAS) operating system built on the Debian Linux distribution. It is designed to provide a simple and intuitive web-based interface for managing storage devices and network services, making it ideal for home users, small offices, and even advanced users looking for a customizable and efficient NAS solution.
OMV supports a wide range of features, including various file systems (EXT4, XFS, BTRFS, etc.), software RAID configurations, scheduled backups, and user and group management. It offers support for common network protocols such as SMB/CIFS (Windows file sharing), NFS, FTP, and SSH, enabling seamless file access across different platforms.
Through its modular design, OpenMediaVault can be easily extended with plugins, allowing users to add functionality like Docker support, media servers, cloud synchronization tools, BitTorrent clients, and more. The system is designed for stability and ease of use, with regular updates and a strong community supporting development and troubleshooting.
Whether used on a dedicated server, a Raspberry Pi, or virtualized hardware, OMV provides a flexible and reliable way to build your own custom NAS.
Warning: installation works only on Debian (bookworm) based Armbian image.
Edit: footer header Status: Stable Architecture: amd64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd OMV001 Access to the web interfaceDirectoriesUsagePlugins and Add-onsView logs The OpenMediaVault web interface is accessible via the default HTTP port:
http://<your.IP>:80/etc/openmediavault//srv/dev-disk-by-.../OpenMediaVault supports a wide range of community plugins:
openmediavault-compose or omv-extrasInstall plugins through the web interface after enabling OMV-Extras.
Bashjournalctl -u openmediavault-engined\ntail -f /var/log/syslog\n OpenMediaVault remove:armbian-config --cmd OMV002\n"},{"location":"User-Guide_Armbian-Software/Software/#owncloud","title":"Owncloud","text":"Owncloud share files and folders, easy and secure
ownCloud is a free and open-source software project for content collaboration and sharing and syncing of files in distributed and federated enterprise scenarios.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd OWC001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7787:
http://<your.IP>:7787/armbian/owncloud/armbian/owncloud/config/armbian/owncloud/datadocker logs -f owncloud\n Owncloud remove:armbian-config --cmd OWC002\n Owncloud purge with data folder:armbian-config --cmd OWC003\n"},{"location":"User-Guide_Armbian-Software/Software/#syncthing","title":"Syncthing","text":"Syncthing continuous file synchronization
Syncthing replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it\u2019s transmitted over the Internet.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd STC001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8884:
https://<your.IP>:8884/armbian/syncthing/armbian/syncthing/config/armbian/syncthing/data1 /armbian/syncthing/data2docker logs -f syncthing\n Syncthing remove:armbian-config --cmd STC002\n Syncthing purge with data folder:armbian-config --cmd STC003\n"},{"location":"User-Guide_Armbian-Software/Software/#stirling","title":"Stirling","text":"Stirling PDF tools for viewing and editing PDF files
Stirling-PDF is a robust, locally hosted web-based PDF manipulation tool using Docker. It enables you to carry out various operations on PDF files, including splitting, merging, converting, reorganizing, adding images, rotating, compressing, and more. This locally hosted web application has evolved to encompass a comprehensive set of features, addressing all your PDF requirements.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd STR001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8075:
https://<your.IP>:8075/armbian/stirlingdocker logs -f stirling-pdf\n Stirling PDF remove:armbian-config --cmd STR002\n Stirling PDF purge with data folder:armbian-config --cmd STR003\n"},{"location":"User-Guide_Armbian-Software/Software/#real-time-monitoring-collecting-metrics-up-time-status","title":"Real-time monitoring, collecting metrics, up-time status","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#grafana","title":"Grafana","text":"Grafana data analytics
Grafana is a multi-platform open source analytics and interactive visualization web application. It can produce charts, graphs, and alerts for the web when connected to supported data sources.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd GRA001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 3022:
https://<your.IP>:3022/armbian/grafanadocker logs -f grafana\n Grafana remove:armbian-config --cmd GRA002\n Grafana purge with data folder:armbian-config --cmd GRA003\n"},{"location":"User-Guide_Armbian-Software/Software/#netalertx","title":"NetAlertX","text":"NetAlertX network scanner & notification framework
NetAlertX is an open-source network monitoring and intruder detection tool designed to provide visibility into your Wi-Fi or LAN network. It scans your network for connected devices and alerts you when new or unknown devices are detected, helping you monitor unauthorized access and maintain network security.
Key Features:
NetAlertX is actively maintained and supports various installation methods, including Docker and bare-metal setups. It serves as a proactive solution for maintaining network health and preventing issues before they escalate, providing peace of mind for individuals and small businesses alike.
For more information and installation guides, visit the official NetAlertX documentation.
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NAX001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 20211:
https://<your.IP>:20211/armbian/netalertx/configdocker logs -f netalertx\n NetAlertX network scanner remove:armbian-config --cmd NAX002\n NetAlertX network scanner purge with data folder:armbian-config --cmd NAX003\n"},{"location":"User-Guide_Armbian-Software/Software/#netdata","title":"Netdata","text":"Netdata - monitoring real-time metrics
Netdata is a partially open source tool designed to collect real-time metrics, such as CPU usage, disk activity, bandwidth usage, website visits, etc., and then display them in live, easy-to-interpret charts.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NTD001 Netdata remove:armbian-config --cmd NTD002\n Netdata purge with data folder:armbian-config --cmd NTD003\n"},{"location":"User-Guide_Armbian-Software/Software/#prometheus","title":"Prometheus","text":"Prometheus monitoring and alerting toolkit
Prometheus is an open-source monitoring and alerting toolkit designed for reliability and scalability. It collects and stores time-series data, provides powerful query capabilities, and enables real-time alerts based on defined conditions. Commonly used in cloud and containerized environments, Prometheus integrates seamlessly with Kubernetes and other modern infrastructure.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @efectn Documentation: Link
armbian-config --cmd PRO001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 9191:
http://<your.IP>:9191/armbian/prometheusdocker logs -f prometheus\n Prometheus remove:armbian-config --cmd PRO002\n Prometheus purge with data folder:armbian-config --cmd PRO003\n"},{"location":"User-Guide_Armbian-Software/Software/#uptime-kuma","title":"Uptime Kuma","text":"Uptime Kuma self-hosted monitoring tool
Uptime Kuma is a self-hosted monitoring tool similar to \"Uptime Robot\". It provides a beautiful, easy-to-use web dashboard to monitor HTTP(s), TCP, Ping, and more types of services.
You can receive instant notifications when a service goes down via Telegram, Discord, Slack, email, and many other integrations.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd UPK001 Access to the web interfaceFeatures The web interface is accessible via port 3001:
https://<your.IP>:3001armbian-config --cmd UPK002\n Uptime Kuma purge with data folder:armbian-config --cmd UPK003\n"},{"location":"User-Guide_Armbian-Software/Software/#console-network-tools-for-measuring-load-and-bandwidth","title":"Console network tools for measuring load and bandwidth","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#avahi-daemon","title":"avahi-daemon","text":"avahi-daemon hostname broadcast via mDNS
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd AVH001 avahi-daemon remove:armbian-config --cmd AVH002\n"},{"location":"User-Guide_Armbian-Software/Software/#iperf3","title":"iperf3","text":"iperf3 bandwidth measuring tool
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd IPR001 iperf3 remove:armbian-config --cmd IPR002\n"},{"location":"User-Guide_Armbian-Software/Software/#iptraf-ng","title":"iptraf-ng","text":"iptraf-ng IP LAN monitor
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd IPT001 iptraf-ng remove:armbian-config --cmd IPT002\n"},{"location":"User-Guide_Armbian-Software/Software/#nload","title":"nload","text":"nload - realtime console network usage monitor
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NLD001 nload - remove:armbian-config --cmd NLD002\n"},{"location":"User-Guide_Armbian-Software/Software/#tools-for-printing-and-3d-printing","title":"Tools for printing and 3D printing","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#octoprint","title":"OctoPrint","text":"OctoPrint web-based 3D printers management tool
OctoPrint is an open source 3D printer controller application, which provides a web interface for the connected printers. It displays printers status and key parameters and allows user to schedule prints and remotely control the printer.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd OCT001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7981:
https://<your.IP>:7981/armbian/octoprintdocker logs -f octoprint\n OctoPrint remove:armbian-config --cmd OCT002\n OctoPrint purge with data folder:armbian-config --cmd OCT003\n"},{"location":"User-Guide_Armbian-Software/Software/#virtual-private-network-tools","title":"Virtual Private Network tools","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#wireguard","title":"WireGuard","text":"WireGuard VPN server
WireGuard is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. Regarded as the most secure, easiest to use, and simplest VPN solution in the industry.
Edit: footer header Status: Enabled Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd WRG001 ServerClientAccess to the server from internetDirectoriesView logs Launch armbian-config --cmd WRG001.
When prompted, enter a comma-separated list of peer names (e.g., laptop,phone,router).
Peer configuration files will be created in
Text Only/armbian/wireguard/config/wg_confs/peer_laptop.conf\n Scan the QR code (for mobile) or transfer .conf to your client system.
Connect the client using the configuration.
Launch armbian-config --cmd WRG002.
You will be asked to edit or paste a valid WireGuard configuration.
Provide the client configuration in this format:
[Interface]\nAddress = 10.13.13.2/32\nPrivateKey = <your-private-key>\nDNS = 1.1.1.1\n\n[Peer]\nPublicKey = <server-public-key>\nEndpoint = your.server.com:51820\nAllowedIPs = 0.0.0.0/0\nPersistentKeepalive = 25\n The configuration will be saved to:
Text Only/armbian/wireguard/config/wg_confs/client.conf\n When prompted, enter the local LAN subnets you wish to route via VPN (e.g., 10.0.10.0/24,192.168.0.0/16).
The VPN container will be started and routing rules will be generated accordingly.
Routing will be restored automatically on boot via systemd service.
Remember to open/forward the port 51820 (UDP) through NAT on your router.
/armbian/wireguard/armbian/wireguard/configdocker logs -f wireguard\n WireGuard VPN client:armbian-config --cmd WRG002\n WireGuard remove:armbian-config --cmd WRG003\n WireGuard VPN server QR codes for clients:armbian-config --cmd WRG004\n WireGuard purge with data folder:armbian-config --cmd WRG005\n"},{"location":"User-Guide_Armbian-Software/Software/#zerotier","title":"ZeroTier","text":"ZeroTier connect devices over your own private network in the world.
Edit: footer header Status: Stable
armbian-config --cmd ZTR001"},{"location":"User-Guide_Armbian-Software/Software/#web-server-lemp-reverse-proxy-lets-encrypt-ssl","title":"Web server, LEMP, reverse proxy, Let\u2019s Encrypt SSL","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#swag","title":"SWAG","text":"SWAG reverse proxy
SWAG - Secure Web Application Gateway sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let\u2019s Encrypt). It also contains fail2ban for intrusion prevention.
After entering required information, your server will have auto updating SSL secured website! To this website you can attach several services, for example: https://my.server.com/netdata will run Netdata instance.
RequirementsDirectoriesAdvanced setup/armbian/swag/config//armbian/swag/config/www//armbian/swag/config/nginx/proxy-confs/Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SWAG01 SWAG reverse proxy .htpasswd set:armbian-config --cmd SWAG02\n SWAG remove:armbian-config --cmd SWAG03\n SWAG purge with data folder:armbian-config --cmd SWAG04\n"},{"location":"User-Guide_Armbian-Software/Software/#ghost","title":"Ghost","text":"Ghost CMS install
Ghost is a powerful open-source publishing platform designed for professional publishing, newsletters, and modern blogs. It\u2019s built on Node.js and provides a clean, fast, and customizable CMS experience.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd GHOST1 ConfigurationDirectoriesView logs Initial setup includes:
9190http://<your.IP>:9190/ghost (or behind reverse proxy like SWAG)http://<your.IP>:9190/armbian/ghostdocker logs -f ghost\n Ghost CMS remove:armbian-config --cmd GHOST2\n Ghost CMS purge with data folder:armbian-config --cmd GHOST3\n"},{"location":"User-Guide_Armbian-Software/VPN/","title":"Virtual Private Network tools","text":""},{"location":"User-Guide_Armbian-Software/VPN/#wireguard","title":"WireGuard","text":"WireGuard VPN server
WireGuard is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. Regarded as the most secure, easiest to use, and simplest VPN solution in the industry.
Edit: footer header Status: Enabled Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd WRG001 ServerClientAccess to the server from internetDirectoriesView logs Launch armbian-config --cmd WRG001.
When prompted, enter a comma-separated list of peer names (e.g., laptop,phone,router).
Peer configuration files will be created in
Text Only/armbian/wireguard/config/wg_confs/peer_laptop.conf\n Scan the QR code (for mobile) or transfer .conf to your client system.
Connect the client using the configuration.
Launch armbian-config --cmd WRG002.
You will be asked to edit or paste a valid WireGuard configuration.
Provide the client configuration in this format:
[Interface]\nAddress = 10.13.13.2/32\nPrivateKey = <your-private-key>\nDNS = 1.1.1.1\n\n[Peer]\nPublicKey = <server-public-key>\nEndpoint = your.server.com:51820\nAllowedIPs = 0.0.0.0/0\nPersistentKeepalive = 25\n The configuration will be saved to:
Text Only/armbian/wireguard/config/wg_confs/client.conf\n When prompted, enter the local LAN subnets you wish to route via VPN (e.g., 10.0.10.0/24,192.168.0.0/16).
The VPN container will be started and routing rules will be generated accordingly.
Routing will be restored automatically on boot via systemd service.
Remember to open/forward the port 51820 (UDP) through NAT on your router.
/armbian/wireguard/armbian/wireguard/configdocker logs -f wireguard\n WireGuard VPN client:armbian-config --cmd WRG002\n WireGuard remove:armbian-config --cmd WRG003\n WireGuard VPN server QR codes for clients:armbian-config --cmd WRG004\n WireGuard purge with data folder:armbian-config --cmd WRG005\n"},{"location":"User-Guide_Armbian-Software/VPN/#zerotier","title":"ZeroTier","text":"ZeroTier connect devices over your own private network in the world.
Edit: footer header Status: Stable
armbian-config --cmd ZTR001"},{"location":"User-Guide_Armbian-Software/WebHosting/","title":"Web server, LEMP, reverse proxy, Let\u2019s Encrypt SSL","text":""},{"location":"User-Guide_Armbian-Software/WebHosting/#swag","title":"SWAG","text":"SWAG reverse proxy
SWAG - Secure Web Application Gateway sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let\u2019s Encrypt). It also contains fail2ban for intrusion prevention.
After entering required information, your server will have auto updating SSL secured website! To this website you can attach several services, for example: https://my.server.com/netdata will run Netdata instance.
RequirementsDirectoriesAdvanced setup/armbian/swag/config//armbian/swag/config/www//armbian/swag/config/nginx/proxy-confs/Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SWAG01 SWAG reverse proxy .htpasswd set:armbian-config --cmd SWAG02\n SWAG remove:armbian-config --cmd SWAG03\n SWAG purge with data folder:armbian-config --cmd SWAG04\n"},{"location":"User-Guide_Armbian-Software/WebHosting/#ghost","title":"Ghost","text":"Ghost CMS install
Ghost is a powerful open-source publishing platform designed for professional publishing, newsletters, and modern blogs. It\u2019s built on Node.js and provides a clean, fast, and customizable CMS experience.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd GHOST1 ConfigurationDirectoriesView logs Initial setup includes:
9190http://<your.IP>:9190/ghost (or behind reverse proxy like SWAG)http://<your.IP>:9190/armbian/ghostdocker logs -f ghost\n Ghost CMS remove:armbian-config --cmd GHOST2\n Ghost CMS purge with data folder:armbian-config --cmd GHOST3\n"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Armbian OS","text":""},{"location":"#preface","title":"Preface","text":"Welcome to the official documentation of Armbian Linux, a highly optimized base operating system specialized for single board computers (SBCs) and its extensive build framework.
"},{"location":"#how-is-the-documentation-structured","title":"How is the documentation structured?","text":"The table of contents in the sidebar and the links at the top of the page should let you easily access the documentation for your topic of interest.
If you are new to Armbian, the Introduction and the Getting Started sections provide everything you need to know about the project, where to find the resources for your board, and a tutorial for everything you need to get Armbian running and configured.
It then continues on to Advanced Configuration tasks and tools for advanced users. The topics in this section cover a wide range of tasks: configuring the system or the network without using armbian-config, configuring your device automatically at first boot, and creating a custom image using the Armbian Build Framework.
If you have read through the documentation and still need help, check out our Troubleshooting advice.
"},{"location":"#where-to-find-additional-help","title":"Where to find additional help?","text":"If you still cannot find what you need here, visit the Armbian forum where your input can also help us improving this documentation.
"},{"location":"#how-to-report-a-problem-in-this-documentation","title":"How to report a problem in this documentation?","text":"If you come across an issue in these pages, you can either report it here, or follow these instructions to suggest a fix yourself.
"},{"location":"#what-is-armbian","title":"What is Armbian?","text":"Armbian\u2019s goal is to provide a highly optimized base operating system specialized for single board computers. It embodies extremely lightweight hardware features with a well-known and supported Debian-based user-space experience, an extensive build framework, and it is suitable for industrial or home use.
Armbian is not a Linux distribution itself. Instead, we use Debian GNU/Linux and Ubuntu Linux as base for the images, that our users can download and deploy. We build our own set of optimized kernels for each board, and then provide an extensive and customizable framework to build, adjust, and configure these images. This framework is the heart of the project.
graph LR\n A[Hardware] --> B{50 x Armbian kernel};\n B --> X[\"point release\"];\n X ---->|minimal| E[Debian or Ubuntu];\n X ---->|server| F[Debian or Ubuntu];\n X -->|desktop| H[Debian or Ubuntu];\n H -->Q[XFCE];\n H -->W[Gnome];\n H -->R[KDE];\n H -->T[Cinnamon];\n"},{"location":"#key-features","title":"Key features","text":"As a user, you can simply download one of our images, deploy and run it on your SBC. As an advanced user, a manufacturer or provider, you can create fully configured custom images for your board or product.
In any case, you will get these key advantages:
/var/log is mounted as compressed device (zram, lzo) and the log2ram service saves the logs to disk daily and on shutdown/tmp is mounted as tmpfs (and can be optionally compressed)/etc/init.d/armhwinfo)/etc/fstab)Armbian distributes stable images for many different single board computers (SBCs). But not each model receives the same amount of support and maintenance. This might be due to lack of man-power, lack of support by the manufacturer, etc. We have therefore a system that shows the support status for each board:
Platinum Support
At least one person is providing constant maintenance and support.
Standard Support
Support is not secured, but it is still overall good.
Community maintained
Most of the images for boards in this category will also work, but no warranty can be given as Armbian does not monitor their status.
Supported / maintained is not a guarantee, though. It merely implies that a particular SBC is at a high level of software maturity and has a named maintainer. Due to the complexity and lack of cooperation in the ecosystem, it is unlikely that all specialized functionalities (like 3D, VE, I\u00b2C\u2026) are always available.
For more information see the Board Support Guide
"},{"location":"#where-to-find-images-and-sources","title":"Where to find images and sources?","text":"Our main website is https://www.armbian.com/. It is the default site for our users, and it contains the download section with all images, information about the support status for each board, links to our forum and this documentation.
The project sources are hosted on GitHub and are organized in separate Git repositories. These are the resources for developers and participants, e.g. users helping with testing.
"},{"location":"#how-can-you-contribute","title":"How can you contribute?","text":"If you want to contribute to our project, please read the collaboration notes.
Unit testingAll software targets and functions are automatically tested to catch as many problems as possible.
"},{"location":"Board_Maintainers_Procedures_and_Guidelines/","title":"Board Maintainers Procedures and Guidelines","text":"Board Maintainers Procedures and GuidelinesThis topic should give you as new board maintainers a brief overview about what you should do, must do, and can do. What you as maintainer can expect from Armbian and what we expect from you.
Requirements:
Even though you became a maintainer already just to make sure everything is set.
If you are a new maintainer, please make sure you have submitted your IDs and information using our maintainer registry form: Here
Maintaining:
So all requirements are met and you are a maintainer now. Now what?
Maintainers must not necessarily be persons with development experience. They act as a intersection between end-users and the development team and serve the developers in best-effort manner. They are encouraged to answer basic/simple user questions (if possible, also best effort) without having to bother the development team. They are allowed to record bugs but are not allowed to escalate bugs. Team leaders do.
Take note that it is still up to development team's discretion what gets attention since Armbian has to plan carefully how to spend its very limited resources.
Jira and Forum expectations:
Low priority issues are usually attended to and patched by the community. If the issue has existed for more than a release, you can create a Jira ticket for it. However the expectation is the issue will be low priority and may not be processed for some time. Issues such as, but not limited to, should be considered low priority:
For high priority items you can create a Jira ticket so that when developers are able, they can process it. If you are going to create a Jira ticket, please be sure to collect as much information about the issue as possible first. If more information will be needed to process the issue, you should reply to the user asking for that additional information and make sure it is included in the ticket. Issues like these should be considered a higher priority:
What should you do if you run into an issue on the forum?
What should you do if there is a long standing Jira ticket?
Losing support status:
As mentioned in the board support rules the support status of a board will be revoked for at least the current and upcoming release cycle(s) if a \"must\" of the Maintaining section above is not fulfilled.
As an example: August 30th is release date for 22.08 release, sign-off dead line is 21th. If maintainer misses the RC sign-off window the board is demoted to CSC for both 22.08 and 22.11 releases.
The development team may grant exceptions on their discretion.
Armbian's assistance:
If you have questions about maintainer-ship or want to learn more deeper insights about the build framework and such Armbian will provide you with all information in best-effort. If time allows we can explain and teach you personally various aspects about the project. Otherwise, if you want to learn more about the build framework, dive in, play with it and read the documenenation. Also if you have other concerns please do not hesitate to reach out via forums, IRC or Discord. Armbian cares about the people who care about Armbian\u00a0
"},{"location":"Community_Forums/","title":"Forums","text":"https://forum.armbian.com/
"},{"location":"Community_Github/","title":"Main project repositories","text":""},{"location":"Community_Github/#armbian-build","title":"Armbian Build","text":"armbian/build
Framework can build generic Armbian or custom Linux image.
"},{"location":"Community_Github/#armbian-config","title":"Armbian Config","text":"armbian/configng
Utility for configuring:
armbian/os
Armbian OS assembly line:
armbian/community
Armbian OS community assembly line:
armbian/distribution
Armbian OS with pre-installed applications:
Armbian short announcements are done via \ud835\udd4f (formerly known as Twitter): https://twitter.com/armbian and https://fosstodon.org/@armbian
"},{"location":"Community_IRC/#irc-channel-discord-matrix","title":"IRC Channel / Discord / Matrix","text":""},{"location":"Community_IRC/#overview","title":"\ud83d\udc4f Overview","text":"As announced in the forums everyone interested can communicate in realtime using the internet relay chat (or IRC for short). Well known IRC clients for CLI are Weechat or Irssi and for GUI Hexchat or Konversation. Mature clients for Matrix: Element or FluffyChat.
Besides that communication is also possible via Discord or Matrix (closed beta).
"},{"location":"Community_IRC/#how-to-connect","title":"\ud83d\udd0c How to connect","text":""},{"location":"Community_IRC/#irc","title":"IRC","text":"Libera network:
irc.libera.chat 6697 / non-encrypted: 6667 OFTC network:
irc.oftc.net 6697 / non-encrypted: 6667 #armbian and #armbian-announcements are available onlyIn order to enter main #armbian channels registration with Nickserv is mandatory on Libera. Check Libera Chat documentation for further information.
Simply click here: https://discord.com/invite/armbian
Channels starting with #armbian- are relayed between Discord and Libera IRC so it does not matter if you join IRC or Discord as both ends receive your messages. Check #welcome-and-rules for more information. The main #armbian channel and #armbian-announcements are relayed between Discord, Libera, OFTC and Matrix.
matrix.armbian.com#armbian:matrix.armbian.com and #armbian-announcements:matrix.armbian.com are available onlyForums registration terms and rules apply for our chats: https://forum.armbian.com/terms
"},{"location":"Community_IRC/#channels-depending-on-platform-only-a-limited-selection-might-be-available","title":"\ud83d\udcac Channels (depending on platform only a limited selection might be available)","text":"#armbian is the project\u2019s main channel. Issue tracking, peer-to-peer user support or upcoming release planning talks.#armbian-announcements : important messages from the Armbian team. You definitely want to idle here. Moderated channel#armbian-devel : build engine development topics#armbian-desktop : desktop environment development#armbian-csc unsupported/stating board talk#armbian-allwinner Allwinner-related SoC talk#armbian-amlogic Amlogic-related SoC talk#armbian-broadcom Broadcom-related SoC talk#armbian-rockchip Rockchip-related SoC talk#armbian-offtopic General chit chat, whatever that does not fit other channels#armbian-commits Whenever a new interaction with a repository on Github happens it will be announced. Moderated channelBesides the services offered by IRC (like Nickserv or Chanserv) Armbian has set up some own services (on Libera only).
ArmbianGithub
DC-IRC
#armbian- as well as #armbian.ArmbianHelper
,g Allwinner H6 panfrost.nonprofit, .sed, .contribute, .rtfm, .fortune, .sunxi, .meson, help, help irc, .tvboxes-- at the beginning and the bot will translate your message regardless of the source language into English. Note: This services will be activated manually on demand (like planned meetings for example) since its backend generates cost.@armbian/staff/lanefu or @user/username?/away [reason] command as intended. For an explanation please have a look at the ZNC Wiki.If you have any questions, comments regarding the IRC channels and/or services or found an issue in this documentation for think you can enhance it get in touch with Werner either via forums, IRC or Discord.
"},{"location":"Developer-Guide_Adding-Board-Family/","title":"Adding a new board or board family","text":"There are no detailed instructions on how to add a new board or even a whole new board family to the build script yet. However there are a few commits / pull requests that give clues how to achieve that like
Builds kernel and device tree (where applicable) and places it to the output/debs
Usage: Bash
./compile.sh kernel BOARD=nanopi-r5c BRANCH=edge\n"},{"location":"Developer-Guide_Build-Commands/#kernel-config","title":"kernel-config","text":"Automatically call kernel\u2019s make menuconfig (add or remove modules or features)
Usage: Bash
./compile.sh kernel-config BOARD=nanopi-r5c BRANCH=edge\n"},{"location":"Developer-Guide_Build-Commands/#dts-check","title":"dts-check","text":"Validate dts files and improve board & patch development overall.
This option validates the dts/dtb file for the selected board against the device tree bindings and outputs the validation logs to the user. It can be used when adding a new board, developing or improving a dts file.
Usage: Bash
./compile.sh dts-check BOARD=nanopi-r5c BRANCH=edge \n"},{"location":"Developer-Guide_Build-Commands/#inventory-boards","title":"inventory-boards","text":"Outputs a one-board-per-line CSV inventory of boards.
Sets TARGETS_FILE to something that doesn\u2019t exist, so the default-targets.yaml is used (so same list for everyone, save for userpatched-boards)
Usage: Bash
./compile.sh inventory-boards\n Outputs /info/boards-inventory.csv"},{"location":"Developer-Guide_Build-Commands/#kernel-dtb","title":"kernel-dtb","text":"Builds only DTB and outputs full preprocessed dts source
Outputs preprocessed DTS source for the board in question to output/ also outputs the same preprocessed DTS source, ran through dtc with input and output DTS formats for \u201cnormalized\u201d comparisons
Usage: Bash
./compile.sh kernel-dtb BOARD=xxxxx BRANCH=edge\n"},{"location":"Developer-Guide_Build-Commands/#uboot-patch","title":"uboot-patch","text":"Create patch files for u-boot.
The output patch files are written to output/patch/u-boot-${LINUXFAMILY}-${BRANCH}.patch. To use them in subsequent builds they must be copied to the appropriate directories in the patch/u-boot directory. See: user-provided patches
Any uncommitted changes in the work tree and index are committed to establish a clean work tree. It would be best if there are no uncommitted changes when running uboot-patch.
If there is an existing patch file at the output path specified above, it may be applied before continuing work.
When the prompt Press <ENTER\\> after you are done editing in ${pwd} appears, in a separate window, navigate to the specified directory and make any required changes. When changes are complete, return to the window running the uboot-patch command and press <ENTER>.
A patch to recreate the changes introduced to the u-boot tree is presented and the prompt \u201cAre you happy with this patch?\u201d. You can respond yes to accept the patch as-is and generate the output patch file, stop to abort the command without producing the output patch file, or anything else to loop back, to make further changes.
Instead of creating them while running uboot-patch, new device tree files should be created in the relevant dt directory under patch/u-boot and new _defconfig files should be created in the relevant configs directory under patch/u-boot. While the uboot-patch command will add these new files to the patch if they are created while running uboot-patch, this is not the preferred way of adding these files.
Prepares git, applies patches to git, and rewrites them back from git same as kernel, it does git archeology for mbox-less patches, etc.
Note: MAINTAINER and MAINTAINEREMAIL should be set.
Usage: Bash
./compile.sh rewrite-uboot-patches BOARD=xxxx BRANCH=edge \n"},{"location":"Developer-Guide_Build-Commands/#rewrite-kernel-patches","title":"rewrite-kernel-patches","text":"Prepares git, applies patches to git, and rewrites them back from git same as kernel, it does git archeology for mbox-less patches, etc.
Usage: Bash
./compile.sh rewrite-kernel-patches BOARD=xxxx BRANCH=edge \n"},{"location":"Developer-Guide_Build-Commands/#targets","title":"targets","text":"Generates output/info/git_sources.json file containing URL, branch, and commit hash combo.
The easiest way to generate file for all devices is to run ./compile.sh targets. Then, at the time of release, we will copy the output/info/git_sources.json file to config/sources/git_sources.json. Once the file is copied, the hash information from the file will be used to fetch resources for git repositories where branches are specified instead of tags or commits.
Usage: Bash
./compile.sh targets\n"},{"location":"Developer-Guide_Build-Preparation/","title":"Armbian Build Framework Quick Start Guide","text":""},{"location":"Developer-Guide_Build-Preparation/#requirements","title":"Requirements","text":"git clone https://github.com/armbian/build\ncd build \n Note
--branch=v24.11gitGraph\n commit\n commit\n checkout main\n commit id: \"v24.08\" tag: \"v24.08\"\n branch v24.08\n commit\n commit\n commit\n commit\n checkout main\n commit id: \"v24.11\" tag: \"v24.11\"\n branch v24.11\n commit\n commit\n commit\n commit\n checkout main\n commit\n commit\n commit\n commit\n commit\n commit\n commit id: \"main\" type: REVERSE tag: \"Trunk\""},{"location":"Developer-Guide_Build-Preparation/#interactive","title":"Interactive","text":"Run framework:
Bash./compile.sh\n Video "},{"location":"Developer-Guide_Build-Preparation/#cli","title":"CLI","text":"Bash./compile.sh [command] [switch...] [config...]\n Troubleshooting: \u2018unknown terminal type\u2019 error
When running the script, especially from modern terminal emulators (like Ghostty, Kitty, WezTerm), you might encounter an error like
\u2018xterm-ghostty\u2019: unknown terminal type
Quick workaround: you can force a more common terminal type before running the script: Bash
env TERM=xterm-256color ./compile.sh\n Only one command can be specified.
Switches are parameter settings that are used by the build framework itself (e.g. DEBUG=yes) or the specific command.
Config files are bash shell scripts that are sourced in the order specified. They are primarily used to set switches but might also set hook functions. They must be located in the userpatches directory and must be named config-${arg}.conf or config-${arg}.conf.sh (where ${arg} is the argument from the command line): one or the other, but not both.
Switches set on the commandline override settings from the config files, regardless of the order they appear on the comandline.
Comprehensive list of build Commands and Switches
Example:
Bash./compile.sh build \\\nBOARD=uefi-x86 \\\nBRANCH=current \\\nBUILD_DESKTOP=yes \\\nBUILD_MINIMAL=no \\\nDESKTOP_APPGROUPS_SELECTED='browsers chat desktop_tools' \\\nDESKTOP_ENVIRONMENT=gnome \\\nDESKTOP_ENVIRONMENT_CONFIG_NAME=config_base \\\nKERNEL_CONFIGURE=no \\\nRELEASE=noble\n Or, using config file userpatches/config-myboard.conf that sets all these switches:
./compile.sh build \\\nmyboard\n Interpretation?
This command will generate Ubuntu 24.04 Noble based Gnome desktop environment image for Intel based hardware (uefi-x86). Besides bare desktop, it will contain packages from browsers and desktop_tool sections and it will use unchanged kernel from current kernel branch.
"},{"location":"Developer-Guide_Build-Preparation/#logging","title":"Logging","text":"Logs are written to output/logs. Old logs (all but the current build) are compressed and moved to output/logs/archive.
Log formats are:
For much more verbose logs set switch \u2018DEBUG=yes\u2019.
"},{"location":"Developer-Guide_Build-Preparation/#github-actions","title":"GitHub Actions","text":"If you do not have the proper equipment to build images on your own, you can use our GitHub Action.
"},{"location":"Developer-Guide_Build-Switches/","title":"Build Switches","text":"These parameters are meant to be applied to the ./compile.sh command. They are all optional. They can also be added to your build configuration file to save time. Default values are marked bold if applicable.
BOARD ( string )
Set the name of the board manually to skip the dialog prompt. Name of the board is a filename without extension.
BRANCH ( string )
vendorlegacycurrent (recommended)edgeSet kernel and U-Boot branch manually to skip dialog prompt
Note
Some branches may not be available for all devices.
RELEASE ( string )
bookwormtrixiesidjammynobleSet packages release base manually to skip dialog prompt. Check here for currently available releases.
Note
Only stable and/or LTS upstream Debian or Ubuntu releases are officially supported. Others might work or not.
BUILD_MINIMAL ( string )
yes: build a bare CLI image suitable for application deployment. This option is not compatible with BUILD_DESKTOP=\"yes\"no: (default)BSPFREEZE ( string )
yes: freeze (from upgrade) armbian firmware packages when building images (U-Boot, kernel, DTB, BSP)no: (default)INSTALL_HEADERS ( string )
yes: pre-install kernel headersno: (default)NETWORKING_STACK ( string )
network-managersystemd-networkdnone (to not-add any networking extensions)Installs desired networking stack. If the parameter is undefined, it sets systemd-networkd for minimal images (MINIMAL=yes) and network-manager for the rest. Time synchronization is also changed; chrony is installed with network-manager, while systemd-timesyncd is used with systemd-networkd. In both cases, we control network settings using Netplan.
Build switch example
Bash./compile.sh NETWORKING_STACK=\"network-manager\"\n"},{"location":"Developer-Guide_Build-Switches/#host-environment","title":"Host environment","text":"EXPERT ( string )
yesShow development features and boards regardless of their support status in interactive mode.
CLEAN_LEVEL ( comma-separated list )
Defines what should be cleaned. Changing this option can be useful when rebuilding images or building more than one image
make-atf = make clean for ATF, if it is built.make-uboot = make clean for uboot, if it is built.make-kernel = make clean for the kernel if it is built. very slow.debs, alldebs = delete all packages in \u201c./output/debs\u201dimages = delete \u201c./output/images\u201dcache = delete \u201c./output/cache\u201dsources = delete cache/sources (all downloaded sources)oldcache = remove old cached rootfs except for the newest 8 filesextras = delete additional packages for the current release in output/debs/extraCARD_DEVICE ( string )
/dev/sdXAfter successful compilation, do a verified burn of the image to the specified storage device (flash media / SD card).
PREFER_DOCKER ( string ) - yes (default) - no
Docker assisted compilation is on by default. Set to no if you prefer running compilation natively.
DOCKER_ARMBIAN_BASE_IMAGE ( string )
ubuntu:jammy (default)ubuntu:nobledebian:bookwormDefines the build host when using a Docker container (default). Here, you can see which other options are available.
string )If enabled (true), the Docker build container will receive Docker credentials from the host (${HOME}/.docker/config.json) and the OCI_TARGET_BASE environment variable.
string )lib/functions/configuration/main-config.sh)Select the target for pull/push OCI cached images. If not set, default is used.
GHCR_MIRROR_ADDRESS ( string )
The default mirror address for ghcr.io, set by GHCR_MIRROR=dockerproxy, is ghcr.dockerproxy.com. When this address is unavailable, an alternative address can be set with GHCR_MIRROR_ADDRESS.
Example:
Bash./compile.sh GHCR_MIRROR=dockerproxy GHCR_MIRROR_ADDRESS=ghcr.libcuda.so\n KERNEL_COMPILER ( string )
The compiler used to compile the kernel. Usually, this option is set by the board config, but it can be set to clang to use LLVM to compile the kernel.
Example:
Bash./compile.sh KERNEL_COMPILER=clang\n OPENSSHD_REGENERATE_HOST_KEYS ( boolean )
- false (skip armbian-firstrun\u2019s OpenSSH host keys deletion and regeneration (eg: to let cloud-init set the SSH host keys) - true (execute armbian-firstrun\u2019s OpenSSH host keys deletion + regeneration)
Manage OpenSSH host key regeneration at armbian-firstrun service.
Example:
Bash./compile.sh OPENSSHD_REGENERATE_HOST_KEYS=false\n"},{"location":"Developer-Guide_Build-Switches/#filesystem","title":"Filesystem","text":"ROOTFS_TYPE ( string )
ext4 (default)f2fsbtrfsnilfs2xfsnfsCreate image with different root filesystems instead of default ext4. Requires setting FIXED_IMAGE_SIZE to something smaller than the size of your SD card for F2FS
BTRFS_COMPRESSION ( string )
lzononezlib (default)zstdWhen choosing ROOTFS_TYPE=btrfs, select btrfs filesystem compression method and compression level. By default, the compression is zlib.
Note
The script does not check the legality of the input variable (compression ratio). Input like zlib:1234 is legal to the script but illegal to the kernel. Beware that setting this option does affect image creation only (shrinking disk size) and will not adjust /etc/fstab, so it is up to the user to later edit /etc/fstab if compression in daily operation is also wanted (beware of severe performance penalties with random IO patterns and heavy compression algorithms!).
BTRFS_ROOT_SUBVOLUME ( string )
When using a BTRFS image as a file system, the volume / is placed on btrfs subvolume @. The same subvolume is set as default for mounting without specifying the subvol=@ option at the time the image is mounted.
Using BTRFS_ROOT_SUBVOLUME, you can set a different name for the root filesystem subvolume:
./compile.sh ROOTFS_TYPE=btrfs BTRFS_ROOT_SUBVOLUME=@root\n CRYPTROOT_ENABLE ( string )
LUKS (Linux Unified Key Setup) is a specification for block device encryption. It establishes an on-disk format for the data, as well as a passphrase/key management policy. LUKS uses the kernel device mapper subsystem via the dm-crypt module.
When enabled, you need to provide additional information:CRYPTROOT_PASSPHRASE=\"MYSECRECTPASS\" # Mandatory\nCRYPTROOT_AUTOUNLOCK=\"yes\" # Default: no. If set to yes you can omit CRYPTROOT_PASSPHRASE to do unattended unlocking\nCRYPTROOT_SSH_UNLOCK=\"yes\" # Default: yes\nCRYPTROOT_SSH_UNLOCK_PORT=\"2222\" # Default: 2022\nCRYPTROOT_MAPPER=armbian-root` # Default: armbian-root\nCRYPTROOT_PARAMETERS=\"custom cryptsetup options\" # Default: --pbkdf pbkdf2\n Tips and warnings
$USERPATCHES_PATH/dropbear_authorized_keys or they will be generated in output/images/*.key file=; separate switches with spacesINCLUDE_HOME_DIR ( string )
yesno (default)Include directories created inside /home in final image.
ENABLE_EXTENSIONS ( comma-separated list )
Extensions allows to extend the Armbian build system without overloading the core with specific functionality. Extensions, stored in folder extensions are called
Build switch example
Bash./compile.sh \\\nbuild \\\nBOARD=uefi-x86 \\\nBRANCH=current \\\nBUILD_DESKTOP=no \\\nBUILD_MINIMAL=no \\\nKERNEL_CONFIGURE=no \\\nRELEASE=noble \\\nENABLE_EXTENSIONS=mesa-vpu,nvidia \\\n CONSOLE_AUTOLOGIN ( string )
yes (default)noAutomatically login as root for local consoles at first run. Disable if your security threat model requires.
CPUTHREADS ( string )
Allows the user to override CTHREADS if CPUTHREADS is defined and a valid positive integer.
If not defined, defaults to 150% the number of CPU Threads available to maximize compilation speed.
USE_CCACHE ( string )
yesno (default)Use a C compiler cache. Generally not needed due to git-worktree . Can slow performance on clean builds.
PRIVATE_CCACHE ( string )
yesno (default)Use $DEST/ccache as ccache home directory. Setting yes to this will enable CCACHE as well.
KERNEL_BTF
yesnoDefault is to auto-detect based on build host available RAM. If not enough RAM available, use =no to accept building without BTF debug information, or use =yes to force building with BTF even if low RAM. Family code can set this to opt-out of BTF. For more information on BTF see https://docs.kernel.org/bpf/btf.html
ARTIFACT_IGNORE_CACHE ( string )
yesno (default)Enforce building from source instead of using pre-built artifacts.
SKIP_ARMBIAN_REPO ( string )
yesno (default)Enforce building without Armbian repository. Suitable for developing new releases or making custom images that don\u2019t need Armbian repository.
SECTOR_SIZE ( value ) - 512 (default, for SD/EMMC/\u2026) - 4096 (for UFS, requires util-linux >2.41. Tested on Debian Trixie host)
Enforce sfdisk to align partition sector sizes.
SHARE_LOG ( string )
yesno (default)Automatically upload full build logs for debugging to one of Armbian\u2019s paste servers at the end of the build process.
Example:
Bash./compile.sh SHARE_LOG=yes\n"},{"location":"Developer-Guide_Build-Switches/#build-options-below-need-to-be-retested-and-added-above-could-be-deprecated","title":"Build options below need to be retested and added above (COULD BE DEPRECATED)","text":"DO NOT USE! Obsolete documentation, new documentation above is in progress.
kernel-patch / uboot-patch / atf-patch CLI commands instead.output directory. If you want these patches included in a normal run (without CREATE_PATCHES to say), these files must be copied to the appropriate directories. Also, see user-provided patches.string ): bind mount cache/rootfs to defined folderstring ): bind mount cache/toolchain path to defined folderuserpatches folderoutput/debug/*.logyes in containers, but can be overriddengooglesource.com mirror for downloading mainline kernel sources, which may be faster than git.kernel.org depending on your locationgit.denx.de depending on your locationinteger ): create an image file of this size (in megabytes) instead of minimalinteger 96 ): set size (in megabytes) for separate /boot filesystem. Used if ROOTFS_TYPE set to non-ext4IPv4 address ): the DNS resolver used inside the build chroot. Does not affect the final image. Default: 1.0.0.1china | bfsu ): select download mirror for toolchain and debian/ubuntu packageschina: use mirrors.tuna.tsinghua.edu.cn; it will be very fast thanks to Tsinghua Universitybfsu: use mirrors.bfsu.edu.cn, the mirror of Beijing Foreign Studies Universityyes | no | http URL ): configures use of apt-cacher-ng, a cache for debian/ubuntu/etc apt repositories.yes sets up an automatically managed apt-cacher-ng instance on the build host. This mode is incompatible with container builds.apt-cacher-ng instance, e.g. \"http://apt-cacher.example.com:3142\"google | tuna | bfsu ): select mainline mirror of linux-stable.gitgoogle: use the mirror provided by Google, the same as USE_MAINLINE_GOOGLE_MIRROR=yestuna: use the mirror provided by Tsinghua Universitybfsu: use the mirror provided by Beijing Foreign Studies University, which is similar to tunagit.kernel.org, which may be very slow for mainland China usersgithub | gitee : select mainline mirror of u-boot.gitgithub: use the mirror provided by github, the same as USE_GITHUB_UBOOT_MIRROR=yesgitee: use the mirror provided by Gitee, a Chinese git servicessource.denx.de, which may be very slow for mainland China usersfastgit | gitclone | cnpmjs ): select download mirror for GitHub hosted repositoryfastgit: use the mirror provided by fastgit.orggitclone: use the mirror provided by gitclone.comcnpmjs: use the mirror provided by cnpmjs.orgchina ): select mirrors based on regional setting, will not overwrite explicitly specified mirror optionchina: MAINLINE_MIRROR=tuna, UBOOT_MIRROR=gitee, GITHUB_MIRROR=fastgit, DOWNLOAD_MIRROR=chinaEXTRAWIFIinteger, -20 to 19 ): automatically propagated from the initial compile.sh\u2019s nice value.debootstrap, else use mmdebstrapThis method works for building u-boot and kernel packages as well as building full OS images. Note! To write fresh-builded image directly to sdcard or other block device you have to enable Docker run in privileged mode. Uncomment line DOCKER_FLAGS+=(--privileged) in file userpatches\\config-docker.conf or your own docker-config file.
Building additional packages (EXTERNAL_NEW) is not supported.
Installation (https://docs.docker.com/engine/install/)
"},{"location":"Developer-Guide_Building-with-Docker/#details","title":"Details","text":"There are 3 options to start build process:
1. By passing configuration file name (config-<conf_name>.conf), stored in userpatches directory, as an argument: Text Only
./compile.sh docker <conf_name>\n 2. By passing addtional line arguments to compile.sh after docker: Text Only./compile.sh docker KERNEL_ONLY=yes BOARD=cubietruck BRANCH=current KERNEL_CONFIGURE=yes\n 3. Interactively run inside docker container Text Only./compile.sh docker-shell BOARD=rockpi-4a BRANCH=edge RELEASE=jammy\n The process creates and runs a named Docker container armbian with two named volumes armbian-cache and armbian-ccache, and mounts local directories output and userpatches.
Options 1 and 2 compile the same as without Docker but in separate environment to prevent changes to the base system.
The dockerfile of the created container is placed in userpatches directory, and all container-related options can be changed in userpatches/config-docker.conf file. Templates of both files are located in the config/templates directory.
The docker-shell interactive mode is useful for when you need to do more than just \u201cmake an image.\u201d This mode allows you to edit U-Boot and kernel sources before and after applying patches, investigate compilation errors, and so on.
This mode also allows you to manually run individual steps of the build process.
First, start docker-shell on the host build system: Text Only
@droid:~/armbian$ ./compile.sh docker-shell RELEASE=bullseye BOARD=rockpi-4a BRANCH=edge\n From there, RELEASE=bullseye BOARD=rockpi-4a BRANCH=edge are passed into shell and will be set into envirounment variables. Next, we can simply start building an image: Text Only
root@75ec76203b65:~/armbian# ./compile.sh\n Alternatively, you can run any function defined in the compile.sh script. For example, to compile U-Boot, prepare the environment with: Text Only
./compile.sh default prepare_host compile_sunxi_tools install_rkbin_tools\n Then, build U-Boot: Text Only./compile.sh default compile_uboot\n To compile only the source code as it is without patching or modifications, run: Text Only./compile.sh default COMPILE_ONLY=yes compile_uboot\n Note that you must enter docker-shell after a docker build, as you must download all of the required toolchains and sourcecodes beforehand."},{"location":"Developer-Guide_Building-with-Multipass/","title":"Building with Multipass","text":"In order to build an Armbian image from scratch, whether for development purposes or to apply user customizations on top of a base image, a build environment is required. Per the Armbian documentation, Ubuntu 24.04 is the officially supported build platform.
Multipass that is designed for quick and painless provisioning of Ubuntu VMs.
"},{"location":"Developer-Guide_Building-with-Multipass/#creating-a-vm-and-preparing-for-build","title":"Creating a VM and preparing for build","text":"Multipass is available for macOS, Windows and Linux platforms.
Once you have multipass installed, a Jammy (22.04) instance with 4 CPUs, 4GB of RAM and 25GB of space available can be provisioned with a single command:
Bashmultipass launch --cpus 4 --disk 25G --mem 4G --name jammy\n"},{"location":"Developer-Guide_Building-with-Multipass/#clone-the-build-repo","title":"Clone the build repo","text":"You can run commands direct on the instance to clone the build repo:
Bashmultipass exec jammy -- bash -c \"git clone --depth 1 https://github.com/armbian/build\" \n"},{"location":"Developer-Guide_Building-with-Multipass/#use-an-instance","title":"Use an instance","text":"Then you can get a shell to the instance and run the build as needed:
BashC:\\> multipass shell armbian\nWelcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.4.0-48-generic x86_64)\nLast login: Tue Jan 30 12:23:08 2024 from 172.22.111.1\n# Let's get building! \nubuntu@armbian:~$ cd build\nubuntu@armbian:~/build$ ./compile.sh BOARD=orangepizero ... etc\n"},{"location":"Developer-Guide_Building-with-Multipass/#share-data-with-an-instance","title":"Share data with an instance","text":"The recommended way to share data between your host and an instance with Multipass is the command:mount Bash
multipass mount /my/dir jammy\nmultipass info jammy\n Mounts: /my/dir => /my/dir
From this point on will be available inside the instance./my/dir
"},{"location":"Developer-Guide_Extensions-Hooks/","title":"Extension Hooks","text":"post_family_config","text":"give the config a chance to override the family/arch defaults
This hook is called after the family configuration (sources/families/xxx.conf) is sourced. Since the family can override values from the user configuration and the board configuration, it is often used to in turn override those.
Also known as (for backwards compatibility only):
config_tweaks_post_family_configuser_config","text":"Invoke function with user override
Allows for overriding configuration values set anywhere else. It is called after sourcing the lib.config file if it exists, but before assembling any package lists.
extension_prepare_config","text":"allow extensions to prepare their own config, after user config is done
Implementors should preserve variable values pre-set, but can default values an/or validate them. This runs after user_config. Don\u2019t change anything not coming from other variables or meant to be configured by the user.
"},{"location":"Developer-Guide_Extensions-Hooks/#post_aggregate_packages","title":"post_aggregate_packages","text":"For final user override, using a function, after all aggregations are done
Called after aggregating all package lists, before the end of compilation.sh. Packages will still be installed after this is called, so it is the last chance to confirm or change any packages.
Also known as (for backwards compatibility only):
user_config_post_aggregate_packagespost_determine_cthreads","text":"give config a chance modify CTHREADS programatically. A build server may work better with hyperthreads-1 for example.
Called early, before any compilation work starts.
Also known as (for backwards compatibility only):
config_post_determine_cthreadsadd_host_dependencies","text":"run before installing host dependencies
you can add packages to install, space separated, to ${EXTRA_BUILD_DEPS} here.
"},{"location":"Developer-Guide_Extensions-Hooks/#fetch_sources_tools","title":"fetch_sources_tools","text":"fetch host-side sources needed for tools and build
Run early to fetch_from_repo or otherwise obtain sources for needed tools.
"},{"location":"Developer-Guide_Extensions-Hooks/#build_host_tools","title":"build_host_tools","text":"build needed tools for the build, host-side
After sources are fetched, build host-side tools needed for the build.
"},{"location":"Developer-Guide_Extensions-Hooks/#pre_install_distribution_specific","title":"pre_install_distribution_specific","text":"give config a chance to act before install_distribution_specific
Called after create_rootfs_cache (prepare basic rootfs: unpack cache or create from scratch) but before install_distribution_specific (install distribution and board specific applications).
Also known as (for backwards compatibility only):
config_pre_install_distribution_specificpre_install_kernel_debs","text":"called before installing the Armbian-built kernel deb packages
It is not too late to unset KERNELSOURCE here and avoid kernel install.
post_install_kernel_debs","text":"allow config to do more with the installed kernel/headers
Called after packages, u-boot, kernel and headers installed in the chroot, but before the BSP is installed. If KERNELSOURCE is (still?) unset after this, Armbian-built firmware will not be installed.
post_family_tweaks","text":"customize the tweaks made by $LINUXFAMILY-specific family_tweaks
It is run after packages are installed in the rootfs, but before enabling additional services. It allows implementors access to the rootfs (${SDCARD}) in its pristine state after packages are installed.
pre_customize_image","text":"run before customize-image.sh
This hook is called before customize-image.sh is executed and before the overlay is mounted. It thus can be used for the same purposes as customize-image.sh without the overlay.
Also known as (for backwards compatibility only):
image_tweaks_pre_customizepost_customize_image","text":"post customize-image.sh hook
Run after the customize-image.sh script is run, and the overlay is unmounted.
Also known as (for backwards compatibility only):
image_tweaks_post_customizepost_post_debootstrap_tweaks","text":"run after removing diversions and qemu with chroot unmounted
Last chance to touch the ${SDCARD} filesystem before it is copied to the final media. It is too late to run any chrooted commands, since the supporting filesystems are already unmounted.
Also known as (for backwards compatibility only):
config_post_debootstrap_tweakspre_prepare_partitions","text":"allow custom options for mkfs
Good time to change stuff like mkfs opts, types etc.
Also known as (for backwards compatibility only):
prepare_partitions_customprepare_image_size","text":"allow dynamically determining the size based on the $rootfs_size
Called after ${rootfs_size} is known, but before ${FIXED_IMAGE_SIZE} is taken into account. A good spot to determine FIXED_IMAGE_SIZE based on rootfs_size. UEFISIZE can be set to 0 for no UEFI partition, or to a size in MiB to include one. Last chance to set USE_HOOK_FOR_PARTITION=yes and then implement create_partition_table hook_point.
Also known as (for backwards compatibility only):
config_prepare_image_sizepost_create_partitions","text":"called after all partitions are created, but not yet formatted
"},{"location":"Developer-Guide_Extensions-Hooks/#format_partitions","title":"format_partitions","text":"if you created your own partitions, this would be a good time to format them
The loop device is mounted, so ${LOOP}p1 is it\u2019s first partition etc.
"},{"location":"Developer-Guide_Extensions-Hooks/#pre_update_initramfs","title":"pre_update_initramfs","text":"allow config to hack into the initramfs create process
Called after rsync has synced both /root and /root on the target, but before calling update_initramfs.
Also known as (for backwards compatibility only):
config_pre_update_initramfspre_umount_final_image","text":"allow config to hack into the image before the unmount
Called before unmounting both /root and /boot.
Also known as (for backwards compatibility only):
config_pre_umount_final_imagepost_umount_final_image","text":"allow config to hack into the image after the unmount
Called after unmounting both /root and /boot.
Also known as (for backwards compatibility only):
config_post_umount_final_imagepost_build_image","text":"custom post build hook
Called after the final .img file is built, before it is (possibly) written to an SD writer.
${FINAL_IMAGE_FILE} It is the last possible chance to modify $CARD_DEVICE.run_after_build","text":"hook for function to run after build, i.e. to change owner of $SRC
Really one of the last hooks ever called. The build has ended. Congratulations.
extension_metadata_ready","text":"meta-Meta time!
Implement this hook to work with/on the meta-data made available by the extension manager. Interesting stuff to process:
\"${EXTENSION_MANAGER_TMP_DIR}/hook_point_calls.txt\" contains a list of all hook points called, in order.${EXTENSION_MANAGER_TMP_DIR}/hook_point.orig.md contains the hook documentation at the call site (inline docs), hopefully in Markdown format. - ${EXTENSION_MANAGER_TMP_DIR}/hook_point.compat contains the compatibility names for the hooks. - ${EXTENSION_MANAGER_TMP_DIR}/hook_point.exports contains exported environment variables. - ${EXTENSION_MANAGER_TMP_DIR}/hook_point.vars contains all environment variables.${defined_hook_point_functions} is a map of all the defined hook point functions and their extension information.${hook_point_function_trace_sources} is a map of all the hook point functions that were really called during the build and their BASH_SOURCE information.${hook_point_function_trace_lines} is the same, but BASH_LINENO info. After this hook is done, the ${EXTENSION_MANAGER_TMP_DIR} will be removed.\u201cI\u2019m gonna create a prepare_bootloader hook [in core] so we can refactor u-boot [into an extension]\u201d
The extensions framework allows the board/family developers, extension authors, and users to extend the Armbian build system without overloading the core with specific functionality.
It\u2019s a simple framework, written in Bash, that works based on function naming conventions. It provides the core and the extensions with tracing and debugging, (error control,?) inline documentation and very simple dependency resolution.
"},{"location":"Developer-Guide_Extensions/#terminology","title":"Terminology","text":"lib/ directory plus compile.sh and some others. It\u2019s the spine of the build system.extensions/ or userpatches/extensions/ directory, but could one day be in a separate repository too.call_extension_method(). This will discover all enabled extension methods implementations, order them, and call them one by one. - The Armbian core already has quite a few of these in strategic spots. - More are coming as they\u2019re identified.The Armbian core build system has an extension method called run_after_build, also known as the \u201crun_after_build hook\u201d. You can find it in lib/main.sh around line 546.
# in lib/main.sh:546\ncall_extension_method \"run_after_build\" [...]\n"},{"location":"Developer-Guide_Extensions/#extension-method-implementation","title":"Extension method implementation","text":"Consider the following function:
Bashfunction run_after_build__say_congratulations() { \n echo \"Congrats, the build is finished!\"\n}\n Such a function is an \u201cextension method implementation\u201d called say_congratulations for the extension method run_after_build.
A file userpatches/extensions/be-festive.sh containing the above function is an \u201cextension\u201d called be-festive.
An user of the build system can enable that extension by adding a call to enable_extension \"be-festive\" on his configuration file, or by passing ENABLE_EXTENSIONS=be-festive as a parameter to the build.
An extension method implementation is just a Bash function that follows the pattern run_after_build__say_congratulations where
run_after_build is the name of the extension method.__ is a marker/separator \u2013 very important \u2013 two underscores, not one, not three.say_congratulations is the name of the extension method implementation, and should be unique.The system will \u201cmagically\u201d compose a single run_after_build() function, based on all the hook functions that begin with run_after_build__.
Hook functions will be sorted by their numerical value; hook functions that do not begin with a number will receive 500_ prefix automatically.
So the examples run_after_build__do_this and run_after_build__500_do_this are equivalent, and will run
run_after_build__900_do_smth_elserun_after_build__300_do_even_another_thingA extension is Bash source file that contains exclusively:
__ separator) - other internal functions (for structure and clarity if needed)enable_extension \"another-extension\" at the top of the file. - that\u2019s a very simple dependency system, one extension can enable another.Specifically, extension files should not contain any code outside of functions \u2013 they should do nothing when sourced.
Extensions can be official Armbian fragments and live in /extensions, or can be user-specific in /userpatches/extensions.
An extension could be implemented in any of the following file/dir structures:
/extensions/our-ext.sh - an official, single-file extension./userpatches/extensions/my-ext.sh - a user-specific, single-file extension./extensions/our-dir-ext/our-dir-ext.sh - an official, directory-based extension./userpatches/extensions/my-dir-ext/my-dir-ext.sh - a user-specific, directory-based extensions.The official extensions can be used by boards, family includes, etc, while the user-specific extensions can only be used by userpatches code or via ENABLE_EXTENSIONS=my-ext,my-dir-ext build parameter.
They\u2019re the same, except:
${EXTENSION_DIR} environment variable.${EXTENSION_DIR} allows for easy moving and PR\u2019ing of user extensions.Any function making use of the extension framework [generally of the form hook_name__individual_function] can be skipped in a board or family config, by way of
unset -f hook_name__individual_function\n Doing so is at the board/family maintainer\u2019s own risk and doing so is officially unsupported. Consider splitting the function into pieces so that only the part the board/family cannot tolerate is skipped.
"},{"location":"Developer-Guide_Overview/","title":"Overview","text":""},{"location":"Developer-Guide_Overview/#what-it-does","title":"What it does?","text":"graph LR\n A[./compile.sh] --> B{Change<br>kernel<br>config};\n B ---> |yes| C[\"HW\"];\n B ---> |no| C[\"HW\"];\n C ---> |branch| D[\"legacy<br>vendor<br>current<br>edge\"];\n D --> |base| E[\"Debian<br>Ubuntu\"];\n E ---> |type| F[\"CLI\"];\n F ---> |type| G[\"Server\"];\n F ---> |type| H[\"Minimal\"];\n E ---> I[\"Desktop\"];\n I ---> K[\"XFCE\"];\n I ---> L[\"Gnome\"];\n I ---> M[\"Cinammon\"];\n I ---> N[\"KDE Neon\"];"},{"location":"Developer-Guide_Overview/#key-advantages","title":"Key Advantages","text":"Check other similarities, advantages and disadvantages compared with leading industry standard build software.
Function Armbian Yocto Buildroot Target general purpose embedded embedded / IOT U-boot and kernel compiled from sources compiled from sources compiled from sources Board support maintenance \u00a0 complete outside outside Root file system Debian or Ubuntu based custom custom Package manager APT any none Configurability limited large large Initramfs support yes yes yes Getting started quick very slow slow Cross compilation yes yes yes"},{"location":"Developer-Guide_Overview/#framework-structure","title":"Framework Structure","text":"Text Only\u251c\u2500\u2500 cache Work / cache directory\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 aptcache Packages\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 ccache C/C++ compiler\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 docker Docker last pull\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 git-bare Minimal Git\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 git-bundles Full Git\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 initrd Ram disk\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 memoize Git status\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 patch Kernel drivers patch\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 pip Python\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 rootfs Compressed userspaces\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 sources Kernel, u-boot and other sources\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 tools Additional tools like ORAS\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 utility\n\u251c\u2500\u2500 config Packages repository configurations\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 targets.conf Board build target configuration\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 boards Board configurations\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 bootenv Initial boot loaders environments per family\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 bootscripts Initial Boot loaders scripts per family\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 cli CLI packages configurations per distribution\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 desktop Desktop packages configurations per distribution\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 distributions Distributions settings\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 kernel Kernel build configurations per family\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 sources Kernel and u-boot sources locations and scripts\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 templates User configuration templates which populate userpatches\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 torrents External compiler and rootfs cache torrents\n\u251c\u2500\u2500 extensions Extend build system with specific functionality\n\u251c\u2500\u2500 lib Main build framework libraries\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 functions\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 artifacts\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 bsp\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 cli\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 compilation\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 configuration\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 general\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 host\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 image\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 logging\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 main\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 rootfs\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 tools\n\u251c\u2500\u2500 output Build artifact\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 deb Deb packages\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 images Bootable images - RAW or compressed\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 debug Patch and build logs\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 config Kernel configuration export location\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 patch Created patches location\n\u251c\u2500\u2500 packages Support scripts, binary blobs, packages\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 blobs Wallpapers, various configs, closed source bootloaders\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 bsp-cli Automatically added to armbian-bsp-cli package\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 bsp-desktop Automatically added to armbian-bsp-desktopo package\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 bsp Scripts and configs overlay for rootfs\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 extras-buildpkgs Optional compilation and packaging engine\n\u251c\u2500\u2500 patch Collection of patches\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 atf ARM trusted firmware\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 kernel Linux kernel patches\n| |\u00a0\u00a0 \u2514\u2500\u2500 family-branch Per kernel family and branch\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 misc Linux kernel packaging patches\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 u-boot Universal boot loader patches\n| \u251c\u2500\u2500 u-boot-board For specific board\n| \u00a0\u00a0 \u2514\u2500\u2500 u-boot-family For entire kernel family\n\u251c\u2500\u2500 tools Tools for dealing with kernel patches and configs\n\u2514\u2500\u2500 userpatches User: configuration patching area\n \u251c\u2500\u2500 config-example.conf User: example user config file\n \u251c\u2500\u2500 customize-image.sh User: script will execute just before closing the image\n \u00a0\u00a0 \u251c\u2500\u2500 atf User: ARM trusted firmware\n \u00a0\u00a0 \u251c\u2500\u2500 extensions User: Extend build system with specific functionality\n \u00a0\u00a0 \u251c\u2500\u2500 kernel User: Linux kernel per kernel family\n \u00a0\u00a0 \u251c\u2500\u2500 misc User: various\n \u00a0\u00a0 \u2514\u2500\u2500 u-boot User: universal boot loader patches\n"},{"location":"Developer-Guide_User-Configurations/","title":"User Configuration","text":""},{"location":"Developer-Guide_User-Configurations/#user-provided-patches","title":"User provided patches","text":"You can add your own patches outside the build script. Place your patches inside the appropriate directory, for kernel or u-boot. There are no limitations except that all patches must have the file name extension .patch. userpatches directory structure mirrors directory structure of patch. Look for the hint at the beginning of patching process to select the proper directory for patches. Example:
[ o.k. ] Started patching process for [ kernel sunxi-edge 4.4.0-rc6 ]\n[ o.k. ] Looking for user patches in [ userpatches/kernel/sunxi-edge ]\n Patches with the same file name and path in the userpatches directory tree override those in the patch directory. To replace a patch provided by Armbian maintainers, copy it from patch to the corresponding directory in userpatches and edit it to your needs. To disable a patch, create an empty file in the corresponding directory in userpatches.
A configuration file named userpatches/config-<something>.conf.sh (.conf also allowed) is a bash script that is sourced during the build if ./compile.sh something is issued. All parameters which normally are passed via command line can be used (PARAM1=value1 PARAM2=value) by using the same syntax, one separate line per PARAM. Command-line parameters still can override what is in the config file. More advanced use cases can use conditionals, define functions to implement hooks, source other/common config files, etc. A few, quite complex, examples can be found here.
userpatches/firstboot.conf\n When detected, the system displays an informational alert and applies the first config configuration.
"},{"location":"Developer-Guide_User-Configurations/#legacy-user-provided-configuration-deprecated-support-for-this-will-be-removed-at-some-point","title":"Legacy user provided configuration (deprecated, support for this will be removed at some point)","text":"If the file userpatches/lib.config exists, it will be called and can override the particular kernel and u-boot versions. For a comprehensive list of available variables, look through lib/functions/configuration/main-config.sh. Some examples of what you can change:
[[ $LINUXFAMILY == sunxi64 && $BRANCH == edge ]] && BOOTBRANCH='tag:v2017.09' # conditionally change u-boot git branch/tag\nKERNELBRANCH=\"tag:v5.4.28\" #always change to this kernel tag\n"},{"location":"Developer-Guide_User-Configurations/#user-provided-kernel-config","title":"User provided kernel config","text":"If the file userpatches/linux-$LINUXFAMILY-$BRANCH.config exists, it will be used instead of the default one from config. Look for the hint at the beginning of the kernel compilation process to select the proper config file name. Example:
[ o.k. ] Compiling current kernel [ 5.10.47 ]\n[ o.k. ] Using kernel config provided by user [ userpatches/linux-rockchip64-current.config ]\n"},{"location":"Developer-Guide_User-Configurations/#user-provided-sources-config-overrides","title":"User provided sources config overrides","text":"If file userpatches/sources/$LINUXFAMILY.conf exists, it will be used in addition to the default one from config/sources. Look for the hint at the beginning of the compilation process to select the proper config file name. Please note that there are some exceptions for LINUXFAMILY like sunxi (32-bit mainline sunxi) and sunxi64 (64-bit mainline sunxi)
Example:
Text Only[ o.k. ] Adding user provided sunxi64 overrides\n"},{"location":"Developer-Guide_User-Configurations/#user-provided-image-customization-script","title":"User provided image customization script","text":"You can run additional commands to customize the created image. Edit this file:
Text Onlyuserpatches/customize-image.sh\n and place your code here. You may test the values of variables noted in the file to use different commands for different configurations. Those commands will be executed in a chroot environment just before finalizing the image.
To add files to the image easily, put them in userpatches/overlay and access them in /tmp/overlay from customize-image.sh
Be advised that even though you are compiling an image on an amd64 machine, any additional apt packages you configure or commands you run in customize-image.sh will be automatically installed/executed/virtualized for the architecture of the build target SBC.
"},{"location":"Developer-Guide_User-Configurations/#partitioning-of-the-sd-card","title":"Partitioning of the SD card","text":"In case you define $FIXED_IMAGE_SIZE at build time the partition containing the rootfs will be made of this size. Default behaviour when this is not defined is to shrink the partition to minimum size at build time and expand it to the card\u2019s maximum capacity at boot time (leaving an unpartitioned spare area of ~5% when the size is 4GB or less to help the SD card\u2019s controller with wear leveling and garbage collection on old/slow cards).
You can prevent the partition expansion from within customize-image.sh by a touch /root/.no_rootfs_resize or configure the resize operation by either a percentage or a sector count using /root/.rootfs_resize (50% will use only half of the card\u2019s size if the image size doesn\u2019t exceed this or 3887103s for example will use sector 3887103 as partition end. Values without either % or s will be ignored).
Overview:
"},{"location":"Developer-Guide_Welcome/#ansi-logging","title":"(ANSI) Logging","text":"Log output is stored in output/logs and provided in a few different formats. ANSI coloring is applied to both the screen and the log files themselves. Please add SHARE_LOG=yes to automatically upload logs to our paste service and provide us with the given url when reporting issues. That will allows us to check the logs on a web browser and keep to correct formatting.
General CLI syntax: ./compile.sh PARAM=value OTHER_PARAM=other_value [<configfile> <configfile> ...] [<command>]
command defaults to build if not specified; could also be kernel-config or u-boot etc\u2026<command> (system will check & bomb if so)default config \u2013 you have to be explicitdocker config \u2013 Docker is fully auto-managed now. The system will complain if you have one.PARAM=value, <configfile> or <command> can be applied in any order.config-default.conf, config file name needs to be specified in the command line","text":"userpatches/config-xyz.conf \u2013 but the name has to be provided to the build system to, like ./compile.sh BOARD=xxx xyz; otherwise works the same.The armbian/build system is currently undergoing refactoring to improve its structure. Previously, the build system was a single, very complex bash script that mixed the building of .deb packages with the creation of images.
This was reworked into a 1-to-N image-to-artifact dependency tree; a certain image build will depend on N possible \u201cartifacts\u201d. Artifacts are either .deb packages, a .tar of multiple .deb packages, or a rootfs.tar.zstd. Each artifact can be individually built, and has a specific name and a version.
Each artifact is also now cached by default using OCI storage at ghcr.io (GitHub Container Registry). To achieve consistent caching, each artifact produces a version that includes hashes of its composing files, variables, patches, hooks, external git SHA1 references, etc. That way we can consistently check the remote OCI cache for previously-built artifacts, and possibly save image builders from having to build heavy packages just to produce an image.
"},{"location":"Developer-Guide_Welcome/#tldr-about-artifacts-and-caching","title":"TL;DR about artifacts and caching:","text":"KERNEL_ONLY=yes and KERNEL_ONLY=no are deprecated. Use the kernel CLI command instead.ARTIFACT_IGNORE_CACHE=yes can help with false positives. Please also report the problem, with a complete logfile.compile.sh will prefer to use Docker if it detects Docker is installed and working. - This handles Docker Desktop and Rancher Desktop (in Docker emulation mode) under macOS/Darwin, including Apple M1/M2. - You don\u2019t need and actually can\u2019t have the old docker config file.sudo to run the build as root.sudo.During the build, depending on which local or remote caches are hit, it might be necessary to build the Linux Kernel from scratch.
The kernel\u2019s git repo is huge. Most build systems resort to fetching \u201cshallow\u201d trees directly from upstream git servers, to save bandwidth. Unfortunately that creates immense extra CPU load on the git servers. To avoid this problem, Armbian produces daily automated git tree exports cached in ghcr.io OCI repositories, and only uses git fetch to update the relatively small new changes from the upstream git server.
There are two types of cached Kernel git trees:
full is a complete git tree, including all of Torvald\u2019s master and all of the currently-supported stable branches. - full is very large download and requires a lot of disk space. - full is more useful over time and when building multiple different kernels on the same machine, like for CI servers or developer workstations.shallow is a shallow tree for a specific stable branch - shallow is a much smaller download and requires less disk space - shallow is appropriate for restricted devices like SBCs which will build a single kernel**TL;DR: ** KERNEL_GIT=full or KERNEL_GIT=shallow or let the system decide for you.
Before cloning the repo, consider forking it first. This will allow you to make changes and submit pull requests. You will need a GitHub account to do this; see GitHub\u2019s documentation for more information. If you fork, make sure to keep your fork up-to-date with the main repo, by rebasing your fork.
"},{"location":"Developer-Guide_Welcome/#some-really-confusing-stuff-still-remains","title":"Some really confusing stuff still remains","text":"This is (by far) not a complete list:
We can build u-boot twice, using UBOOT_TARGET_MAP. Some example I did in https://github.com/armbian/build/blob/main/config/boards/odroidhc4.conf#L15-L20 may help.
This topic should give you as a developer a brief overview about what you should do, must do, aswell as can and can not do. What you as devepoler can expect from Armbian and what we expect from you.
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#Requirements","title":"Requirements:","text":"
Even though you may already be a developer, just to make sure, here is an outline of the expectations for this process:
Review Approve Merge Github ID Armbian Github Organisation Collaborator Armbian Github Organisation MemberArmbian Organization Members are required to have:
You should know development basics like how to get an Armbian image running on your hardware, do basic debugging, building a kernel and how to use the Armbian build system.
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#Code-Review","title":"Code Review:","text":"
Some helpful guidelines for pull requests and code reviews
It has often been said that programming is part art, part science - that is because lots of times there is no single, simple solution to a problem. Or if there is, we might not know about it. There is also an infamous joke that if there are n developers in the room, then there are n+1 opinions on how things should be done. That being said, here are some guidelines that should prevent friction when submitting or reviewing code.
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#The-most-important-thing","title":"The most important thing","text":"The code has to work.Unless you open a PR (\u201cpull request\u201d) as a work in progress, the code should be built and tested on a device or emulator. Do not rely on CI test automation!
If you have touched the build files and changed build setup, it is useful to test the whole build from scratch (clean build) and all of the types and flavours. If you updated external libraries, test the pertaining features. If you changed the build version, make a build and test that the version is correct.
Having people review your code is one thing, but you should not expect them to also test the code for you when not explicitly asked for.
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#Context","title":"Context","text":"One important thing that lots of guidelines forget to mention is the context of the pull request: Sometimes it is a big refactor, sometimes it is a new feature, sometimes it is a bugfix. Some of those might be more urgent than others, and sometimes you might be under pressure to ship ASAP so the code might not be perfect or there will not be any tests or code might not be extendable. That is ok.
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#Everyone","title":"Everyone","text":"If a pull request is fundamentally ready, but needs only trivial fixes (such as typos), consider demonstrating a bias for action by making those changes directly without going back to the author. You can do this by using the suggest changes feature to apply your own suggestions to the pull request.
Note that:
Authors are not authorized to merge their own pull requests and need to seek approval from another maintainer / developer to merge.
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#Armbians-Assistance","title":"Armbian's Assistance","text":"If you have questions about being a developer or want to learn more and deeper insights about the build framework, Armbian will try to guide you to the appropriate documentation or information in a best-effort fashion. If time allows, at our descrection, we will try our best to explain and teach you personally various aspects about our processes. If best effort guidance is not enough, contact us for professional assistance.
If you have any concerns please do not hesitate to reach out via forums, IRC or Discord. Armbian cares about the people who care about Armbian
"},{"location":"Development-Code_Review_Procedures_and_Guidelines/#References--Sources","title":"References / Sources:","text":"The Armbian mirror system is designed to efficiently distribute files, ensuring users get the best available server based on geographic proximity and server availability. This document outlines the mirroring system\u2019s operational flow, technical specifications for mirrors, and how to contribute a new server.
"},{"location":"Mirrors/#operational-flow","title":"Operational Flow","text":"User Request
https://dl.armbian.com). Redirector Server Processing
Mirror Assignment
Download from Assigned Mirror
If you would like to contribute to the Armbian project by providing a mirror, follow these steps:
"},{"location":"Mirrors/#1-choose-the-target-and-set-up-an-httphttps-hostname","title":"1. Choose the target and set up an HTTP/HTTPS hostname","text":"- The mirror must be accessible via HTTP, and HTTPS is preferred.
"},{"location":"Mirrors/#2-set-up-synchronization-via-rsync","title":"2. Set up synchronization viarsync","text":"- Sync files from one of the official repositories using the following commands:
Content Command Required Space Current imagesrsync -av rsync://rsync.armbian.com/dl 556G Packages rsync -av rsync://rsync.armbian.com/apt 84G Archived images rsync -av rsync://rsync.armbian.com/archive 1.9T Very old images rsync -av rsync://rsync.armbian.com/oldarchive 5.4T - Set up a cron job to sync every 2-4 hours.
"},{"location":"Mirrors/#3-inform-us-about-your-mirror","title":"3. Inform us about your mirror","text":"- Once your server is configured, contact us via the contact form to integrate it into the official redirector system.
Contributing a mirror helps improve Armbian\u2019s file distribution, ensuring faster and more reliable downloads for the global community.
"},{"location":"Mirrors/#current-mirrors","title":"Current Mirrors","text":"Site Time Zone Flag Speed Packages Images Archive Rsync Atomo\u00a0Networks Europe/Rome 2500\u00a0Mbps Auroradev\u00a0Chicago America/Chicago 1000\u00a0Mbps Auroradev\u00a0Las\u00a0Vegas America/Los_Angeles 10000\u00a0Mbps Nardol Europe/Paris 1000\u00a0Mbps Systemonachip Europe/Vienna 1000\u00a0Mbps Distrohub Europe/Kiev 1000\u00a0Mbps SBC\u00a0mirror\u00a0Spain Europe/Madrid 1000\u00a0Mbps Hetzner\u00a0Germany Europe/Berlin 1000\u00a0Mbps Imola Europe/Ljubljana 1000\u00a0Mbps Kspace\u00a0Estonia Europe/Tallinn 10000\u00a0Mbps AARNet Australia/Sydney 100000\u00a0Mbps Albony Asia/Kolkata 1000\u00a0Mbps Macarne\u00a0LLC Europe/Amsterdam 50000\u00a0Mbps Hostiko Europe/Kiev 20000\u00a0Mbps ISCAS Asia/Shanghai 10000\u00a0Mbps OSS\u00a0Planet Asia/Taipei 1000\u00a0Mbps Digital\u00a0Streaming\u00a0Co. Asia/Taipei 50000\u00a0Mbps VineHost.NET Europe/London 1000\u00a0Mbps Yandex Europe/Moscow 10000\u00a0Mbps Alibaba\u00a0Mirrors Asia/Shanghai 10000\u00a0Mbps BFSU Asia/Shanghai 10000\u00a0Mbps c0urier.net Europe/Copenhagen 1000\u00a0Mbps CSTCloud Asia/Shanghai 10000\u00a0Mbps dotsrc.org Europe/Copenhagen 20000\u00a0Mbps Jevin\u00a0Canders\u00a0LLC America/New_York 10000\u00a0Mbps Lahansons America/Los_Angeles 10000\u00a0Mbps Nanjing\u00a0University Asia/Shanghai 10000\u00a0Mbps Shandong\u00a0University Asia/Shanghai 10000\u00a0Mbps Shanghai\u00a0Tech\u00a0University Asia/Shanghai 10000\u00a0Mbps SUSTech Asia/Shanghai 10000\u00a0Mbps Tsinghua\u00a0University Asia/Shanghai 10000\u00a0Mbps USTC Asia/Shanghai 10000\u00a0Mbps Zhejiang\u00a0University Asia/Shanghai 500\u00a0Mbps Netcup\u00a0Germany Europe/Berlin 2500\u00a0Mbps Netcup\u00a0Germany Europe/Berlin 2500\u00a0Mbps Netcup\u00a0Germany Europe/Berlin 2500\u00a0Mbps JetHome Europe/Moscow 2000\u00a0Mbps Xogium Europe/Paris 500\u00a0Mbps"},{"location":"Process_Armbian-Task-Tracking/","title":"Armbian Task Management","text":""},{"location":"Process_Armbian-Task-Tracking/#overview","title":"Overview","text":"TLDR; Keep task discussions in the forum. GitHub Issues are just for task metadata.
Tasks associated with code will have an issue created in GitHub, but all dialog regarding tasks will reside on the forum in a topic containing the github Issue ID of the task.
"},{"location":"Process_Armbian-Task-Tracking/#what-is-a-task","title":"What is a task?","text":"A task is something actionable that results in some sort of tangible output. ex: code, documentation, QA findings.
Example sources of tasks include: feature requests, bugs, QA, general following of development roadmap.
Not all support issues are tasks, but a support issue can generate a task.
"},{"location":"Process_Armbian-Task-Tracking/#task-creation-procedure","title":"Task Creation Procedure","text":"[ISSUE_ID] - Issue Name - Create comment on GitHub Issue with the following Content:
Text Only Please keep all discussion for this issue on the forum topic available below:\n\n [URL](URL)\n -
Lock comments on GitHub Issue
GitHub Issues provide an easy method to track and filter tasks by using tags and milestones. Issues also make it easy to easily associate commits and merge requests with a task. Effectively we just use GitHub issues for the metadata for reporting.
"},{"location":"Process_Armbian-Task-Tracking/#labels","title":"Labels","text":"Use labels identify the purpose of a task.
bug is used to tag tasks that address Armbian-level bugsnot-our-bug is used to identify tasks that are bugs in upstream code. They are not Armbian bugs, but may impact Armbian.enhancement is used to identify tasks that are new features for Armbian.Use milestones to divide tasks into claimed and unclaimed work.
claimed tasks milestone contains tasks which have been assigned.unclaimed tasks milestone contains tasks that need an owner.Sometimes support discussions can become tasks. A forum admin can assist in moving the topic to Tasks forum group. A cooresponding issue will need to be created.
"},{"location":"Process_Armbian-Task-Tracking/#future-process-improvements","title":"Future Process Improvements","text":"Enhancements desired for this process (This should be a task!)
"},{"location":"Process_Armbian-Task-Tracking/#issue-hook","title":"Issue Hook","text":"Ideally we can have a forum topic created upon issue creation. This will save some time.
"},{"location":"Process_CI/","title":"Automation for developers and maintainers","text":"Core automation for generating images for release are held at armbian/os
"},{"location":"Process_CI/#prepare-build-lists","title":"Prepare build lists","text":""},{"location":"Process_CI/#recommended-images","title":"Recommended images","text":"Recommended images on download pages are defined via regular expression mapping file https://github.com/armbian/os/blob/main/exposed.map (for changes sent PR to this file)
Example:
Text Onlybananapim7/archive/Armbian_[0-9].*Bananapim7_noble_vendor_[0-9]*.[0-9]*.[0-9]*_gnome-kisak_desktop.img.xz\nbananapim7/archive/Armbian_[0-9].*Bananapim7_bookworm_vendor_[0-9]*.[0-9]*.[0-9]*_minimal.img.xz\n "},{"location":"Process_CI/#build-templates","title":"Build templates","text":"They have definitions on what kind of images we want to build - for section or for one specific board:
YAMLuserpatches/targets-release-apps.template\nuserpatches/targets-release-community-maintained.template\nuserpatches/targets-release-nightly.template\nuserpatches/targets-release-standard-support.template\n From those templates we are autogenerating YAML files, which are passed to build matrix as input. Make sure to review generated YAML files if they have wanted build targets with correct exensions enabled.
"},{"location":"Process_CI/#grouping-logic","title":"Grouping logic","text":"Boards are automatically divided into sections and each section is appendend to certain build scenario (minimal Debian image, Ubuntu testing with KDE, \u2026), which is defined in template.
Section Condition standard-support-slow-hdmi HAS_VIDEO_OUTPUT = yes AND ARCH = armhf standard-support-fast-hdmi HAS_VIDEO_OUTPUT = yes AND ARCH = arm64 standard-support-headless HAS_VIDEO_OUTPUT = no standard-support-riscv64 ARCH = riscv64Example: if you want automated images without a desktop, add HAS_VIDEO_OUTPUT=no in board config file. Automation will only build two CLI images, Ubuntu server and Debian minimal. Which is suitable for hardware that will most likely be used headless.
Autogeneration is excluded for boards that are on blacklists:
YAMLuserpatches/targets-automation.blacklist\nuserpatches/targets-automation-nightly.blacklist\n We do this if we are not happy with the automation outcomes and want to define build targets in the template.
"},{"location":"Process_CI/#extensions","title":"Extensions","text":"Each board variant can have additional extensions and they are defined in this file:
Text Onlyuserpatches/targets-extensions.map\n Example:
Text Onlykhadas-edge2,legacy:vendor:,ENABLE_EXTENSIONS=\"image-output-oowow,v4l2loopback-dkms,mesa-vpu\"\n"},{"location":"Process_CI/#kernel-descriptions-for-download-pages","title":"Kernel Descriptions for Download Pages?","text":"Each kernel branch can include an optional description, stored in kernel-description.json.
Unfortunatelly this part does not have testing at PR stage.
"},{"location":"Process_CI/#prepare-standard-support-images-for-release","title":"Prepare Standard Support images for release","text":"InfoManual executing permissions are tied to release manager role.
This build workflow is executed manually when making:
Notes:
Bump version: Select if you want to trigger system wide version bump. Version override: Set version under which you want to release images.
Images versions are stored in JSON files: - https://github.com/armbian/os/blob/main/stable.json - https://github.com/armbian/os/blob/main/nightly.json
"},{"location":"Process_CI/#3-run-workflow","title":"3. Run workflow","text":"(Workflow takes around 15 minutes to complete. In case of network issues it can also take hours)
Generated images are uploaded to incoming folder https://rsync.armbian.com/incoming/ under your GitHub username and once they are confirmed working, please notify @igorpecovnik to move them to official download pages. Once images are moved to main download section, automation refreshes download pages index within 15-30 minutes.
"},{"location":"Process_CI/#aditional-options","title":"Aditional options","text":"Generates stable images defined in targets-release-standard-support.yaml.
We are generating several images for each download / hardware target. They are automatically sorted by sections:
Images generation can be customized:
This build workflow is executed manually when making:
Notes:
Version override: Use this feature if you want to keep them under the same version, but not lower then last released.
"},{"location":"Process_CI/#3-run-workflow_1","title":"3. Run workflow","text":"(Workflow takes around 15 minutes to complete. In case of network issues it can also take hours)
Generated images are hosted at GitHub https://github.com/armbian/distribution/releases and released at once. Automation refreshes download pages within 15-30 minutes after/if workflow finished succesfully.
"},{"location":"Process_CI/#aditional-options_1","title":"Aditional options","text":"Generates dedicated application images defined in targets-release-apps.yaml. This file is autogenerated from targets-release-apps.template. (You always edit template)
Images generation can be customized:
This pulls packages from build framework OCI cache located at GitHub and from various 3rd party repositories such as Chrome, Chromium, Code, Discord, (latest) ZFS, Thunderbird, Zoom, \u2026 and pushes them to:
apt.armbian.com (only new packages are added)beta.armbian.com (whole repository is recreated from scratch)Action is executed automatically when artifact generations completes. Or manually.
"},{"location":"Process_CI/#2-include-artifacts-from-generated-images","title":"2. Include artifacts from generated image(s)","text":"When - [ ] Add https://netcup.armbian.com/partial/ to stable repo
is selected.
"},{"location":"Process_CI/#3-run-workflow_2","title":"3. Run workflow","text":"(Workflow takes around 60 minutes to complete)
"},{"location":"Process_CI/#build-all-artifacts-cronjob","title":"Build all artifacts (cronjob)","text":"Generates all build artifacts cache for targets defined in targets-all-not-eos.yaml. This build job runs every 8 hours and can also be run manually when needed.
This build job needs to be successfully completed in order to proceed generating any OS images!
"},{"location":"Process_CI/#build-rolling-release-images-cronjob","title":"Build Rolling Release Images (cronjob)","text":"Generates all nighly (Rolling Release) images defined in targets-release-nightly.yaml. This file is autogenerated from targets-release-nightly.template.
This build job runs every day at 9 a.m. UTC and can also be run manually when needed. Download pages are refreshed automatically after successful build.
"},{"location":"Process_CI/#watchdog-cronjob","title":"Watchdog (cronjob)","text":"Runs every 15 minutes and re-trigger failed builds six (6) times before finally gives out. This addresses various instabilities when building many artifacts on different hardware:
Smoke testing is preliminary testing to reveal simple failures severe enough to, for example, reject a prospective software release. Our test case is constructed of three steps:
Automatically label new pull request based on the paths of files which are being changed. Configuration file can be found in:
Text Only .github/labeler.yml\n"},{"location":"Process_CI/#full-distro-test-builds-cronjobrelease-manager","title":"Full distro test builds (cronjob/release manager)","text":"Generates all supported build combinations (minimal, cli, desktops) for x86 architecture to check package level changes inconsistency and dependencies.
Options:
Generates artifacts at Pull Requests code. Build starts when label of Pull Request is set to \u201cBuild\u201d. Requires administration privileges.
"},{"location":"Process_CI/#lint-on-shell-scripts-pr","title":"Lint on shell scripts (PR)","text":"Run ShellCheck on changed shell scripts and report problems within. Linting runs automatically on pull requests.
"},{"location":"Process_CI/#update-tools-in-build-scripts-cronjobadmin","title":"Update tools in build scripts (cronjob/admin)","text":"Some of our scripts download tools from a repo. These cannot be bumped by Dependabot, so this workflow is a self-created Dependabot to bump versions of those tools to stay up-to-date. This workflow only creates a PR if the version was actually updated. To add a new tool, it just needs to be added to the matrix in the script by filling out all the variables.
"},{"location":"Process_CI/#scorecards-security-scan-pr","title":"Scorecards security scan (PR)","text":"Scorecards is an automated tool that assesses a number of important heuristics (\u201cchecks\u201d) associated with software security and assigns each check a score of 0-10. You can use these scores to understand specific areas to improve in order to strengthen the security posture of your project. You can also assess the risks that dependencies introduce, and make informed decisions about accepting these risks, evaluating alternative solutions, or working with the maintainers to make improvements.
"},{"location":"Process_CI/#kernel-hardening-analysis-pr","title":"Kernel hardening analysis (PR)","text":"This analysis checks kernel configs and run if changed. There are plenty of security hardening options for the Linux kernel. A lot of them are not enabled by the major distros. We have to enable these options ourselves to make our systems more secure.
"},{"location":"Process_Contribute/","title":"Collaborate on the project","text":""},{"location":"Process_Contribute/#overview","title":"Overview","text":"If it is a new feature request, do not start the coding first. Remember to open an issue to discuss the new feature. If you want to add code to someone else pull request. Also check collection of git tips which will make your life easier.
If you are struggling, check WEB or CLI step-by-step guide on contributing.
"},{"location":"Process_Contribute/#source-code","title":"Source code","text":"There are no detailed instructions on how to add a new board or even a whole new board family to the build script yet. However there are a few commits / pull requests that give clues how to achieve that like
If you are interested in being a maintainer please review Board Support Rules. Then apply here and wait for acceptance. Once accepted you will be added to our infrastructure. For this reason we need additional information to complete your registration process.
Requirements?
Maintainers must not necessarily be persons with development experience. They act as a intersection between end-users and the development team and serve the developers in best-effort manner. They are encouraged to answer basic/simple user questions (if possible, also best effort) without having to bother the development team. They are allowed to record bugs but are not allowed to escalate bugs. Team leaders do.
Take note that it is still up to development team\u2019s discretion what gets attention since Armbian has to plan carefully how to spend its very limited resources.
What are we looking for?
If something does not work, this is fine and normal. The important part is that it is documented and we get notified about the issues. Known problems should be placed into the Jira ticket and link placed to the board download page. While not required, you should have a build environment setup so you can build images with the most recent images and test them right away. Your feedback, either positive or negative, is very welcome. You are free to add comments to every commit and pull request.
Ideally you have multiple microSD cards laying around to test regular updates on current releases and nightly without having to re-flash the same card every time to switch between branches.
Alternatively you can use auto-built images - they are placed at the ever end of each board download pages under \u201cRolling releases\u201d.
This role has additional permission that allows preparation of images for release.
Release managers: https://github.com/orgs/armbian/teams/release-manager
"},{"location":"Process_Managing_Workflow/","title":"Jira","text":"Jira where development work is entered and prioritized. https://armbian.atlassian.net/
"},{"location":"Process_Managing_Workflow/#issue-types","title":"Issue Types","text":"When creating issues, try to assign issue type most appropriate. Issue type can be changed later so don\u2019t worry too much. If possible assign to a \u201cFix Version\u201d aka Release.
The easiest way to follow the work queue Upcoming Release Kanban Board. This board lists only work select for the upcoming release.
Use the filter buttons at top to quickly see unassigned work, work assigned to you, bugs, and work recently updated.
Work is listed in 3 columns, and sorted by priority.
Columns: * Todo * Work prioritized to be done next * Pick up any task from this column * In Progress * Work In Progress * Done * Shows recently completed work. Has time limit to keep board clean
"},{"location":"Process_Managing_Workflow/#managing-work","title":"Managing Work","text":"All issues for an upcoming release are assigned a \u201cFix Version\u201d to indicate release number.
"},{"location":"Process_Managing_Workflow/#backlog","title":"Backlog","text":"With the Kanban Board, there are 2 states for the Upcoming Release backlog.
All issues for an upcoming release are assigned a \u201cFix Version\u201d to indicate release number.
"},{"location":"Process_Managing_Workflow/#mobile-access","title":"Mobile access","text":"You can download the app for Android or iOS.
"},{"location":"Process_Release-Model/","title":"Release Model","text":""},{"location":"Process_Release-Model/#rolling-releases","title":"Rolling releases","text":"Armbian provides automated daily rolling releases of small selection of images for all supported targets. Images are available at respective board download pages: https://www.armbian.com/download. Armbian also populates its own packages repository so updates are available as an upgrade for existing installations.
"},{"location":"Process_Release-Model/#point-releases","title":"Point releases","text":"Armbian runs \u201ctrain\u201d based point releases. Whatever is ready to board the train, does so. Whatever is not has to wait for the next train. This enables us to have a predictable release cycles making it easy to plan. It also puts the responsibility on developers to make sure they have features ready on time.
Armbian releases quarterly at the end of February, May, August, November. Offset is because we all know that nothing happens for half of December. At the beginning of a release cycle, we have a planning meeting and two weeks before the end of the release we freeze integration of new features.
"},{"location":"Process_Release-Model/#release-cycle","title":"Release Cycle","text":"Releases last three months. Each release starts with a meeting for planning. After planning, developers and development teams build their deliverable using whatever methods (scrum, kanban, waterfall, \u2026 ) they want but shall commit their code frequently, leading up to the last 2 weeks. The project does not accept \u201cdumps\u201d of code at the end. Commit early and often on master. Two weeks before the release date, we halt feature integration and only allow bug fixes. At some point during those two weeks, we start the release candidate process. This process starts by pulling a branch off master that will become the release branch. That frees up master for development on the next release. On the release candidate branch we work on bug fixes, and choose \u201crelease candidate\u201d, RC, tags. The software at that tag is a candidate for release, and it is submitted to automated and manual tests on real hardware. If automated tests are passing, we can officially tag it as the release. If it does not, we enter another bug fix cycle and create a new release candidate. We iterate until we have a candidate that can be the formal release. Usually, this takes 2-3 cycles and 1-3 weeks of time.
Development epics, stories and bugs for each release are tracked through Jira.
"},{"location":"Process_Release-Model/#release-branching-versioning-and-tags","title":"Release Branching, Versioning and Tags","text":"Branches in Armbian follow this convention:
main branch. This is the latest and greatest branch, but is always \u201cstable\u201d and \u201cdeployable\u201d. All tests always pass on this branch.Each Armbian release will have the following version format:
Format: <major>.<minor>.<revision>
<major> and <minor> version are incremented at the end of the release cycles while <revision> is incremented for a fix.
by https://www.codenamegenerator.com from unusual animals
"},{"location":"Process_Release-Model/#release-coordinating","title":"Release Coordinating","text":""},{"location":"Process_Release-Model/#summary","title":"Summary","text":"A release starts as a RC branch cut from main at freeze time. Once a RC branch is cut, main can be unfrozen and development can continue. RC branch is a rolling release that accepts bug fixes. The bug fixes should be cherry-picked back to main branch. Once the RC is stable, a final release as a branch named after its version. A release is never merged to main. Once a release is complete, it only should be updated for severe bugs and security vulnerabilities. A release is only maintained until the next release.
Armbian 24.02 (Kereru) Release ThreadText Only
Release Candidate Code Freeze Date: YYYY-MM-DD\nRelease Date: YYYY-MM-DD\nRelease Candidate Branch Link: URL\nRelease Changelog: URL\nRelease Coordinator: @yourname\nTesting Tracking Sheet: https://example.com/link (google sheets)\n\nThe goal of this thread is to discuss testing, bugfixes, and the overall quality of the release. Once the release is complete, this thread should be locked and unpinned. \n - Before Code Freeze \u2013 Make note in the thread the incomplete Jira issues tagged for the release example - After test images are procuded, engage in community for assistants wih testing.. forums, Twitter, etc. share this tool"},{"location":"Process_Release-Model/#2-release-candidate-branch-management","title":"2. Release Candidate Branch Management","text":"version-rc ex: v20.02.0-rcmain branch version to the NEXT release version with -trunk ex. If RC is v20.02.0-rc main becomes v20.05.0-trunk./compile.sh targets\ncp output/info/git_sources.json config/sources/\n following by commiting this code to build framework.Armbian Linux provides optimized Debian and Ubuntu Linux images for ARM-based SBCs. There is an incredible ecosystem of small computing platforms that are powerful alternatives to the Raspberry Pi. Armbian\u2019s mission is to provide a uniform system offering that is trustworthy to run on any of the dozens of OS-neglected ARM single board computers.
"},{"location":"Quick_facts/#challenges","title":"Challenges","text":""},{"location":"Quick_facts/#armbian-is-the-opposite-of-raspbian","title":"Armbian is the opposite of Raspbian","text":"Raspbian has dozens of contributors to focus on a single SBC platform. Armbian has a dozen contributors to focus on 100+ SBCs spread over 30 platforms.
"},{"location":"Quick_facts/#balancing-development-and-support","title":"Balancing Development and Support","text":"Given the point above, resources are thin. Armbian developers have to focus on the core mission of maintaining the Armbian Build Platform. We heavily rely on other members of the community to support each other. Although Armbian does provide a lot of user friendly features, the reality is that Armbian is for more advanced users. If you are really struggling with your SBC, you may want to consider first getting more comfortable with Raspbian Linux on the Raspberry Pi.
"},{"location":"Quick_facts/#more-sbcs-continuously-coming-to-market","title":"More SBCs continuously coming to market","text":"SBC and TV Box manufacturers love to design and ship new products. Unfortunately they do not like to spend time on software and instead rely on community projects such as Armbian to fill in the gaps.
"},{"location":"Quick_facts/#benefits","title":"Benefits","text":""},{"location":"Quick_facts/#simple","title":"Simple","text":"BASH or ZSH shell, standard Debian/Ubuntu utilities. Common and specific features can be with minimalistic menu-driven utility. Login is possible via serial, HDMI/VGA or SSH.
"},{"location":"Quick_facts/#light","title":"Light","text":"No bloatware or spyware. Special utilities are completely optional. Suitable for newcomers and professionals.
"},{"location":"Quick_facts/#optimized","title":"Optimized","text":"A distributed image is compacted to real data size and starts at around of 1G. Size is optimized for SD card usage. Bigger is better. Installing applications later severely reduces the life of your SD card. They were not designed for this type of usage.
"},{"location":"Quick_facts/#fast","title":"Fast","text":"Boards are optimized on kernel and userspace level. DVFS optimization, memory log caching, browser profile memory caching, swap usage tuning, garbage commit delay. Our system runs almost read-only and is one of the the fastest Linux for many development boards in just about every case.
"},{"location":"Quick_facts/#secure","title":"Secure","text":"Security level is on a stock Debian/Ubuntu level and can be hardened with the configuration utility. It provides a good starting point for industrial or home usage. The system is regularly inspected by professionals within the community. Each official stable build is thoroughly tested. Images are a direct base for all 3rd party builders.
"},{"location":"Quick_facts/#supported","title":"Supported","text":"Providing long term updates, security fixes, documentation, user support.
"},{"location":"Quick_facts/#smart","title":"Smart","text":"Deep understanding how boards work, how operating system work and how hardware should be designed to run better. Involved in board design. Experience in Linux since early 90\u2019. Specialized in ARM development boards since 2013.
"},{"location":"Quick_facts/#open","title":"Open","text":"Open source build script and kernel development, maintenance and distribution for more than 30 different ARM and ARM64 Linux kernels. Powerful build and software development tools. Can run in fully parallel mode. Can run under Docker.
"},{"location":"Release_Board-Maintainers/","title":"Board Maintainers","text":""},{"location":"Release_Board-Maintainers/#how-to-become-a-maintainer","title":"How to become a maintainer?","text":"If you are interested in being a maintainer please review Board Support Rules. Then apply here and wait for acceptance. Once accepted you will be added to our infrastruture. For this reason we need additional information to complete your registration process.
Requirements?
Maintainers must not necessarily be persons with development experience. They act as a intersection between end-users and the development team and serve the developers in best-effort manner. They are encouraged to answer basic/simple user questions (if possible, also best effort) without having to bother the development team. They are allowed to record bugs but are not allowed to escalate bugs. Team leaders do.
Take note that it is still up to development team\u2019s discretion what gets attention since Armbian has to plan carefully how to spend its very limited resources.
What are we looking for?
If something does not work, this is fine and normal. The important part is that it is documented and we get notified about the issues. Known problems should be placed into the Jira ticket and link placed to the board download page. While not required, you should have a build environment setup so you can build images with the most recent images and test them right away. Your feedback, either positive or negative, is very welcome. You are free to add comments to every commit and pull request.
Ideally you have multiple microSD cards laying around to test regular updates on current releases and nightly without having to re-flash the same card every time to switch between branches.
Alternatively you can use auto-built images - they are placed at the ever end of each board download pages under \u201cRolling releases\u201d.
edge Linux-6.16.y`. by @pyavitz in armbian/build#8709edge to rc5. by @EvilOlaf in armbian/build#8908All-repository triage role. by @igorpecovnik in armbian/armbian.github.io#66inventory-artifacts cli. by @rpardini in armbian/build#8910vendor uboot. by @EvilOlaf in armbian/build#8807edge to 6.18-rc4, rewrite patches. by @EvilOlaf in armbian/build#8864current. by @EvilOlaf in armbian/build#8912Work in progress label for maintainers synhronization. by @igorpecovnik in armbian/build#8551EDGE to linux-6.17.y. by @pyavitz in armbian/build#8784uboot-config now prints diff with pre-menuconfig defconfig. by @rpardini in armbian/build#8855Fixups. by @pyavitz in armbian/build#8303Update linux-6.6.95 to 99. by @pyavitz in armbian/build#8411Revert bluetooth changes from last PR. by @pyavitz in armbian/build#8344Update u-boot to v2025.01 and fixup bluetooth. by @pyavitz in armbian/build#8339improve SDIO WiFi speeds and set default CPUFREQ speeds. by @pyavitz in armbian/build#8495edge to 6.16.0-rc7. by @EvilOlaf in armbian/build#8406lan* and wan* interfaces as well. by @djurny in armbian/build#8259User-Guide_Autoconfig.md. by @ZoomRmc in armbian/documentation#758rtl8723ds bluetooth support. by @pyavitz in armbian/build#8351Switch back to u-boot-v2024.10. by @pyavitz in armbian/build#8216make clean fails (logs to bitbucket), do it again, but show the logs. by @rpardini in armbian/build#8241music into media and sort the alphabetically . by @igorpecovnik in armbian/configng#611CONFIG_RANDOMIZE_BASE=y. by @pyavitz in armbian/build#8354current and edge dts. by @EvilOlaf in armbian/build#8343current. by @mdziekon in armbian/build#8430CONFIG_NETKIT=y. by @rpardini in armbian/build#8237edge to 6.15.y. by @EvilOlaf in armbian/build#8297edge to 6.16. by @EvilOlaf in armbian/build#8390chroot_sdcard_custom_with_apt_logic() for reuse. by @rpardini in armbian/build#8245EDGE support. by @pyavitz in armbian/build#8481Update to linux-6.6.93. by @pyavitz in armbian/build#8274Enable audio support. by @pyavitz in armbian/build#8221Add INPUT_TOUCHSCREEN and INPUT_MISC. by @pyavitz in armbian/build#8385Enable Armbian auto-patch, add BPI-M4-Zero to DT dir and set PANFROST/LIMA to =m. by @pyavitz in armbian/build#8394Enable CONFIG_PPS_CLIENT_*. by @pyavitz in armbian/build#8409Update CONFIG_CAN_* and CONFIG_CPU_FREQ_*. by @pyavitz in armbian/build#8383kde-neon to stable, switch support to csc. by @EvilOlaf in armbian/build#8519current RT config file. by @jsuhaas22 in armbian/build#8280add the most up-to-date regulatory.db. by @pyavitz in armbian/firmware#111quartz64a: bump u-boot to v2025.04 final and make it fancy. by @rpardini in armbian/build#8250Enable GPU and add Audio nodes by @pyavitz in armbian/build!8191sunxi: mmc: Improve reset procedure by @pyavitz in armbian/build!7943Fixup patch name association by @pyavitz in armbian/build!8099v2025.04 (drop -rc4) from u-boot patch folder name; bump v2025.04-rc4 -> v2025.04-rc5 by @rpardini in armbian/build!8035current builds by @EvilOlaf in armbian/build!7993edge u-boot to mainline by @EvilOlaf in armbian/build!8082lib.config from README.me, create proper example by @EvilOlaf in armbian/build!8090Add CONFIG_NFT_FLOW_OFFLOAD=m by @pyavitz in armbian/build!7951Add CONFIG_TUN=m by @pyavitz in armbian/build!8162Enable PPPoe Module by @pyavitz in armbian/build!8073current u-boot to v2025.01 by @EvilOlaf in armbian/build!8012Automatic board configs status synchronise by @github-actions in armbian/build!7496edge from 6.11 to 6.12 via rename by @rpardini in armbian/build!7490WIREGUARD is deprecated by @EvilOlaf in armbian/build!7520Automatic board configs status synchronise by @github-actions in armbian/build!7508Enable i2c2 via overlay by @pyavitz in armbian/build!7540Automatic board configs status synchronise by @github-actions in armbian/build!7534branch:rk-6.1-rkr4.1 by @rpardini in armbian/build!7546Automatic board configs status synchronise by @github-actions in armbian/build!7545platform_install.sh (created from functions like write_uboot_platform) for shellcheck errors by @rpardini in armbian/build!7509Automatic board configs status synchronise by @github-actions in armbian/build!7561Automatic board configs status synchronise by @github-actions in armbian/build!7564Add overlay support and pin ctrl by @pyavitz in armbian/build!7568Acquire-By-Hash by @igorpecovnik in armbian/build!7574Automatic board configs status synchronise by @github-actions in armbian/build!7573Automatic board configs status synchronise by @github-actions in armbian/build!7594edge to 6.12 via copy by @The-going in armbian/build!7577Automatic board configs status synchronise by @github-actions in armbian/build!7624<vendor>/<board>.dtb format by @rpardini in armbian/build!7620lib/functions/general/oci-oras.sh by @github-actions in armbian/build!7586Update kernel to 6.6.y and other fixups by @pyavitz in armbian/build!7616rk356x-fix-pcie2-reset.patch by @rpardini in armbian/build!7645argument list too long errors when too many git changes present; fixes #6993 by @rpardini in armbian/build!7644if_error_find_files_sdcard if looking for full paths (shows DKMS log correctly) by @rpardini in armbian/build!7653oldconfig to olddefconfig for less messy output; better logging by @rpardini in armbian/build!7654rock-s0 / rockpi-s: quote board vars by @rpardini in armbian/build!7650LINUXFAMILY=bcm2712 as it is exactly the same as bcm2711 by @rpardini in armbian/build!7642rk35xx/legacy: rewrite-kernel-patches & rewrite-kernel-config, no changes by @rpardini in armbian/build!7658Automatic board configs status synchronise by @github-actions in armbian/build!7669Update to linux-6.6.70 & overclock to 1.8GHz by @pyavitz in armbian/build!7685Enable FW_LOADER_COMPRESS support by @pyavitz in armbian/build!7694Pull branch instead of commit by @pyavitz in armbian/build!7722post_armbian_repo_customize_image and post_repo_customize_image by @rpardini in armbian/build!7719CONFIG_CFG80211=m and CONFIG_MAC80211=m on 6.13+ by @rpardini in armbian/build!7728lib/functions/general/oci-oras.sh by @github-actions in armbian/build!7707lib/functions/general/bat-cat.sh by @github-actions in armbian/build!7706Automatic board configs status synchronise by @github-actions in armbian/build!7735Automatic board configs status synchronise by @github-actions in armbian/build!7743edge u-boot to 2025.01 by @EvilOlaf in armbian/build!7770Update DTS and Defconfig by @pyavitz in armbian/build!7773patch fail fixup by @pyavitz in armbian/build!7777Update to tag k1-bl-v2.1-release by @pyavitz in armbian/build!7780current by @EvilOlaf in armbian/build!7768Automatic board configs status synchronise by @github-actions in armbian/build!7781Update u-boot to v2025.01 by @pyavitz in armbian/build!7788Update u-boot to v2025.01 by @pyavitz in armbian/build!7789KERNEL_BTF=no to opt-out of BTF/CO-RE type-info on low-RAM machines by @rpardini in armbian/build!7675HAS_VIDEO_OUTPUT by @EvilOlaf in armbian/build!7810Automatic board configs status synchronise by @github-actions in armbian/build!7806General update to improve overall support by @pyavitz in armbian/build!7833current by @EvilOlaf in armbian/build!7842setexpr; patch 2025.01 for fileenv; enable squashfs support by @rpardini in armbian/build!7769BOARD_MAINTAINER=\"pyavitz\" by @pyavitz in armbian/build!78706.1-rkr3: sync FriendlyElec\u2019s DTs from vendor (common, R6S, R6C, T6, CM3588) + add T6-LTS DT by @rpardini in armbian/linux-rockchip!209BPI-M4-Zero updates, fixups and rev2 support by @pyavitz in armbian/build!7317sun50i-h616-light dt overlay fix to 6.10 by @JohnTheCoolingFan in armbian/build!7204curl with --fail flag so server 400/500 errors actually trigger a retry by @rpardini in armbian/build!7487Fixup U-Boot and Linux DTS/DTSI and add WiFi / BT overlay by @pyavitz in armbian/build!7332Improve support by @pyavitz in armbian/build!7355improve SDIO WiFi speeds by @pyavitz in armbian/build!7193BOOTPATCHDIR and bump to 2024.10 by @ColorfulRhino in armbian/build!7377lib/tools/shellfmt.sh by @github-actions in armbian/build!7255lib/tools/shellfmt.sh by @github-actions in armbian/build!7433WIREGUARD once and for all by @EvilOlaf in armbian/build!7452iostat error on MINIMAL by @EvilOlaf in armbian/build!7454sun50i-h616-light device tree overlay by @JohnTheCoolingFan in armbian/build!7183update to u-boot-v2024.07 by @pyavitz in armbian/build!7328CONFIG_KPROBES by @rpardini in armbian/build!7162CONFIG_INPUT_PWM_BEEPER=m by @rpardini in armbian/build!7167dt folder overwrite pre-existing files (DTs that landed upstream) by @rpardini in armbian/build!72710001-general-add-overlay-support.patch by @rpardini in armbian/build!7240<&fan> alias for device tree by @alexl83 in armbian/build!7151wip/sc8280xp-6.11 (final) from -rc5 by @rpardini in armbian/build!7260Userspace Switching armbian-config to new generation. by @igorpecovnik in armbian/build!7189Userspace: UX changes at MOTD and first login by @igorpecovnik in armbian/build!7174current branch (6.8) by @ColorfulRhinoadd_host_dependencies by @rpardinii2c8-m2 overlay by @rpardinicurrent kernel branch for some boards by @ColorfulRhinoNETWORKING_STACK to control network exts; allow \u201cnone\u201d; fix typo by @rpardinidts-check command and use Pip for some Python packages instead of APT by @ColorfulRhinoorphan_file (FEATURE_C12) for ext4 filesystems on 1.47+ e2fsprogs host by @rpardiniTask template for project management by @ColorfulRhinocsc status by @rpardini# prefix by @ColorfulRhinofw version 0xb5d66dcb by @pyavitz-u: rationalize paste server retrying, use ANSI dmesg by @rpardinimedia boards into the rockchip64 family by @ColorfulRhinoBOARDFAMILY rk322x (now integrated into the rockchip family) by @ColorfulRhinopackages/extras-buildpkgs by @ColorfulRhinoedge branch (6.9.y) by picking DT from linux-rockchip#for-next & using Kwiboo\u2019s 24.07 u-boot by @rpardiniwireless at firstlogin script by @igorpecovnikpipetty in place of unbuffer by @rpardinis5p6818 board family by @ColorfulRhinonext-dev-v2024.03 by @rpardinilegacy kernel target from board configs by @ColorfulRhinolegacy kernel 4.4 support by @ColorfulRhinofixups by @pyavitzNETWORKING_STACK in main config and add armhf support to Trixie by @ColorfulRhinoshellfmt and add board configs to formatting list by @ColorfulRhinowip/sc8280xp-6.10-rc6; add fprintd back to Trixie; fixes by @rpardiniu-boot-radxa-rk35xx scheme by @rpardiniu-boot-radxa-rk35xx scheme by @rpardinicommit mount option for btrfs and ext4 to 120 by @ColorfulRhinolegacy 4.19 to current 6.6 kernel by @ColorfulRhinowip/sc8280xp-6.10-rc7 by @rpardini6.10-rc7 by @rpardiniBump u-boot to v2024.07 by @pyavitzupdate to BL v1.0.8 by @pyavitzuboot_cflags variable to before its first use by @ColorfulRhinoFixups by @pyavitzlib/functions/general/shellcheck.sh by @github-actionslib/functions/general/oci-oras.sh by @github-actionslib/functions/general/bat-cat.sh by @github-actionsHOME to be set (fixes download-artifact) by @rpardiniwrite_uboot_platform: eMMC Support by @pyavitzuse actual u-boot.bin by @pyavitzdrv-spi-spidev-remove-warnings.patch by @alexl83drv-spi-spidev-remove-warnings.patch by @alexl83CONFIG_SECURITY_DMESG_RESTRICT kernel option by @alexl83build@armbian for kernel builds by @ColorfulRhinoedge kernel from 6.10 to 6.11-rc and current from 6.8 to 6.10 by @efectnCONFIG_SECURITY_DMESG_RESTRICT kernel option by @alexl83rfkill-bt device node to Radxa Rock-5B by @alexl83remove fan control by @pyavitzRe-brand as Amper & update u-boot to v2024.04 by @pyavitzSolved Bugs
Updated images for Orangepi Zero
Solved Bugs
Solved Bugs
Closed Tasks
ZFS updated to v2.0.4 (tested on 32bit Odroid HC1 and 64bit N2, Focal and Bionic userland) Added Hirsute CLI images with EDGE Linux 5.12.y for most of the boards
"},{"location":"Release_Changelog/#v2105-2021-05-09","title":"v21.05 (2021-05-09)","text":"Solved Bugs
Finished projects
Closed Tasks
Added Nvidia Jetson Nano (community supported target)
Rebuild images for Odroid N2, H4, HC4
"},{"location":"Release_Changelog/#v21023-2021-03-09","title":"v21.02.3 (2021-03-09)","text":"All kernels received upstream updates
All images has been rebuilt
Fixed reboot troubles on meson64 family (Odroid N2, C2, H4, HC4)
ZSH upgrade fixed
Type-C DP support for the NanoPC T4
Allwinner a20 fail to init hdmi in many cases / fixed (all images need to be rebuilt)
All kernels received upstream updates
Finished projects
Solved bugs
Closed task
All images rebuild due to torrent system corruption
"},{"location":"Release_Changelog/#v20119-2021-01-23","title":"v20.11.9 (2021-01-23)","text":"Broken Nanopi Neo buster image rebuild, adding Station M1 and P1 legacy images, Odroid XU4 update
"},{"location":"Release_Changelog/#v20118-2021-01-17","title":"v20.11.8 (2021-01-17)","text":"all images were rebuilt - we had a few corrupted ones in previous build
"},{"location":"Release_Changelog/#v20116-2021-01-03","title":"v20.11.6 (2021-01-03)","text":"AR-566 - Add Nanopi R4S preview images
"},{"location":"Release_Changelog/#v20114-2020-12-15","title":"v20.11.4 (2020-12-15)","text":"Bugfix release
Finished projects
Solved bugs
Closed tasks
Added WIP images for Odroid HC4 Updated images for Odroid C4, N2, C2, Lafrite, Lepotato, KVIM1
"},{"location":"Release_Changelog/#v200813-2020-10-19","title":"v20.08.13 (2020-10-19)","text":"Known bugs:
Finished projects
Solved bugs
Closed tasks
never released/skipped
"},{"location":"Release_Changelog/#v20054-2020-06-16","title":"v20.05.4 (2020-06-16)","text":"Kagu
Finished projects
Solved bugs
Closed tasks
Chiru
Tasks
Bugs
Stories
Tasks
Bugs
Stories
Build script:
Armbian-config:
Build script:
Armbian-config:
Build script:
Armbian-config:
Infrastructure:
Changes overview:
General:
vm.swappiness has been changed from 0 to 100 (if you run databases on your board you might want to revert this change in /etc/sysctl.conf),Family:
Board:
Build script:
Infrastructure:
Known bugs:
linux-source-${BRANCH}-${LINUXFAMILY}, i.e. linux-source-sunxi-next)Desktop images:
armbian-config:
armbian-configBuild script:
End of support notice
Following boards are no longer receiving support and updates since this version:
armbian-add-overlay helper for compiling and activating DT overlays (new images only)/var/log contents on shutdown/etc/default/armbian-motd for disabling MOTD componentsarmbian-config dialog-based configuration program (WIP)End of support notice
Following boards are no longer receiving support and updates since this version:
Known problems:
sun7i-a20-bananapi-m1-plus.dtb, boot script adjusting may be required for existing imagesDesktop images:
Build script:
LD_LIBRARY_PATHKnown problems:
Desktop images:
VDPAU_OSD=1Build script:
Added additional packages, not installed by default:
Known problems:
u-boot and armbian-install.sh fixes)Images:
Build script:
Known bugs:
sudo armbianmonitor -b)sudo h3disp in a terminal to get the idea.and a bunch of small fixes.
"},{"location":"Release_Changelog/#v44-2015-10-01","title":"v4.4 (2015-10-01)","text":"Images:
Script:
Images:
Build script:
While the underlying operating system offers tools and processes to make customizations, the preferred method to change most settings is using the interactive armbian-config tool which is shipped with all Armbian images. It also provides means to install preconfigured applications and advanced services.
Usually, all of the following commands require elevated permissions, and must be run as root or prefixed by the sudo command.
"},{"location":"User-Guide_Advanced-Configuration/#keyboard-layout","title":"Keyboard layout","text":"This is typically handled by armbian-config. For some corner cases, changing the keyboard layout can also be done with:
Bashdpkg-reconfigure keyboard-configuration\n If the chosen standard is not available with the previous command, you may also need to set the keymap config.
Bash# Check the actual keymap config\nlocalectl status | grep -i keymap\n\n# Set the desired keymap config. In the example below it is set to 'br-abnt2'\nlocalectl set-keymap br-abnt2\n"},{"location":"User-Guide_Advanced-Configuration/#system-language","title":"System language","text":"This is typically handled by armbian-config. If necessary, to handle it with system tools, for Debian run:
Bashdpkg-reconfigure locales\n And for Ubuntu
Bashupdate-locale LANG=[options] && dpkg-reconfigure locales\n"},{"location":"User-Guide_Advanced-Configuration/#console-font-and-codepage","title":"Console font and codepage","text":"Bashdpkg-reconfigure console-setup\n"},{"location":"User-Guide_Advanced-Configuration/#time-zone","title":"Time zone","text":"This is typically handled by armbian-config. If necessary, one can also run:
Bashdpkg-reconfigure tzdata\n"},{"location":"User-Guide_Advanced-Configuration/#default-sound-output","title":"Default sound output","text":"Note
In recent versions of Debian and Ubuntu, pulseaudio got replaced by pipewire. The following suggestions won\u2019t work in that case.
To check the available sound output options (\u201csinks\u201d) with pulseaudio:
Bashpacmd list-sinks | less\n The default sink will be marked with an asterisk \u201c*\u201c. Press q to exit.
To define a new default sound output:
Bashpacmd set-default-sink <NAME-OF-DESIRED-OPTION>\n The name of HDMI sound output devices may change accordingly to the device. If you don\u2019t want to deal with different names, you can run:
Bashpacmd set-default-sink $(pactl list short sinks | grep -i 'hdmi' | awk '{print $2}')\n The command to define the default sink is not persistent. To make it persistent, add it to the file ~/.bashrc.
In rare cases, some SunXi/Allwinner boards failed to detect Full-HD support for HDMI and boot with only 720p. This issue should now be resolved, and the following steps are provided only for reference if it still occurs.
Legacy versions
Open the /boot/boot.cmd file with an editor of your choice (e.g. nano) and add or change the disp.screen0_output_mode option to the kernel command line. For a fixed mode (e.g. 1280x720 at 60 Hz), set it to:
disp.screen0_output_mode=1280x720p60\n Then run
Bashmkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr\n"},{"location":"User-Guide_Advanced-Configuration/#enable-a-custom-screen-resolution-within-xorg","title":"Enable a custom screen resolution within X.Org","text":"Sometimes, not all desired resolutions are supported out of the box. The following short howto shows how to enable a custom resolution and add it to your X.Org configuration. It is based on this forum post by user @maxlinux2000 (Thanks!). The xrandr and cvt commands must be executed as the current user in a graphical session, not by the root user!
First, find the matching HDMI output (the x11-xserver-utils package must be installed):
xrandr --listmonitors\n Then, calculate the VESA CVT mode line. The following command does this for a custom resolution of 1440x900.
Bashcvt 1440 900\n The command will output a new modeline. For our example, it may look like this:
Text Only# 1440x900 59.89 Hz (CVT 1.30MA) hsync: 55.93 kHz; pclk: 106.50 MHz\nModeline \"1440x900_60.00\" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync )\n The new modeline can then be used directly to create and add the new mode, and enable it. The following commands will do that for the output device HDMI-1.
Bashxrandr --newmode \"1440x900_60.00\" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync\nxrandr --addmode HDMI-1 1440x900_60.00\nxrandr --output HDMI-1 --mode 1440x900_60.00\n If it works well, the new mode can also be added to X.Org\u2019s configuration in /etc/X11/xorg.conf.d/ to make it permanently available/active. Otherwise, these commands will have to be executed after every reboot. To load this resolution automatically after starting the device, add the following section to e.g. /etc/X11/xorg.conf.d/40-monitor.conf (create the file if it does not exist):
Section \"Monitor\"\n Identifier \"HDMI-1\"\n Modeline \"1440x900_60.00\" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync\n Option \"PreferredMode\" \"1440x900\"\nEndSection\n After a restart, the graphical session should automatically be shown in the chosen resolution.
"},{"location":"User-Guide_Advanced-Configuration/#alter-the-cpu-frequency","title":"Alter the CPU frequency","text":"Legacy versions
Some boards allow to adjust the CPU speed by editing the file /etc/default/cpufrequtils and alter the min_speed and/or max_speed variable. Changing these values require restarting cpufrequtils.service to activate the new settings:
systemctl restart cpufrequtils.service\n"},{"location":"User-Guide_Advanced-Configuration/#swap-for-experts","title":"Swap for experts","text":"By default, Armbian implements ZRAM (writing nothing to \u2018disk\u2019, but compressing memory pages in RAM). In case you often run into out-of-memory (OOM) errors and your device has some capable storage (e.g. a securely attached NVMe or SATA SSD), you might want to use ZSWAP instead.
Check whether your kernel has zswap enabled. If yes, the following command
Bashdmesg | grep zswap\n should return some output. If that is the case, create a swapfile or a swap partition the traditional way: edit /etc/default/armbian-zram-config so that it reads SWAP=false. Reboot, and you\u2019re done.
Zswap performs a lot better than the combination of ZRAM and \u2018swap on disk\u2019 in parallel.
"},{"location":"User-Guide_Advanced-Configuration/#switch-or-downgrade-kernels","title":"Switch or downgrade kernels","text":"This is typically handled by armbian-config.
Basharmbian-config --cmd KER001\n In rare cases, it can be necessary to downgrade a kernel package, e.g. to fall back to a previous version.
Danger
Version dependencies between packages can create serious conflicts when attempting a package downgrade. If you force anything here, you can easily destroy your system beyond the point of repair. Don\u2019t use that command lightly and better ask twice.
Bashapt install linux-image-current-rockchip64=25.5\n"},{"location":"User-Guide_Advanced-Configuration/#build-a-wireless-driver","title":"Build a wireless driver","text":"The kernels provided by the project should contain the drivers, modules, and firmware to support most commonly used network devices/dongles. If you encounter that you have to build your own module and load it, the following example shows the general procedure because most modules follow the same structure and setup. It is, however, rarely necessary to build and load so-called \u201cout-of-tree\u201d kernel modules as shown in this example. Even the module we use here as an example is already supported by the current kernels.
First, building a module always requires having the kernel headers installed. The correct version can be installed with:
Basharmbian-config --cmd HEAD01\n Then download the driver\u2019s sources. Most drivers can probably be found in a Git repository like in our example.
Bashgit clone https://github.com/morrownr/8821au-20210708.git\ncd 8821au-20210708\n The build and install instructions can usually be found on the driver\u2019s homepage or in a file called README.md in the source. Read these instructions carefully. Usually, the following commands will suffice and result in an output as shown below.
make\nmake install\n Build log Text Onlymake ARCH=arm64 CROSS_COMPILE= -C /lib/modules/6.6.62-current-sunxi64/build M=/root/8821au-20210708 modules\nmake[1]: Entering directory '/usr/src/linux-headers-6.6.62-current-sunxi64'\n CC [M] /root/8821au-20210708/core/rtw_cmd.o\n CC [M] /root/8821au-20210708/core/rtw_security.o\n CC [M] /root/8821au-20210708/core/rtw_debug.o\n CC [M] /root/8821au-20210708/core/rtw_io.o\n CC [M] /root/8821au-20210708/core/rtw_ioctl_query.o\n CC [M] /root/8821au-20210708/core/rtw_ioctl_set.o\n CC [M] /root/8821au-20210708/core/rtw_ieee80211.o\n CC [M] /root/8821au-20210708/core/rtw_mlme.o\n CC [M] /root/8821au-20210708/core/rtw_mlme_ext.o\n ...\n [ goes on for a while ]\n ...\n LD [M] /root/8821au-20210708/8821au.o\n MODPOST /root/8821au-20210708/Module.symvers\n CC [M] /root/8821au-20210708/8821au.mod.o\n LD [M] /root/8821au-20210708/8821au.ko\nmake[1]: Leaving directory '/usr/src/linux-headers-6.6.62-current-sunxi64'\n If make succeeded, attempt to load the driver and check the dmesg output.
insmod 8821au.ko\nusbcore: registered new interface driver rtl8821au\n If everything was successful, plug the USB wireless adaptor in and proceed with the network configuration.
"},{"location":"User-Guide_Advanced-Configuration/#toggle-boot-output","title":"Toggle boot output","text":"Boot parameters are edited or changed directly in /boot/boot.cmd (not recommended) or via variables in /boot/armbianEnv.txt:
- console=both\n+ console=serial\n To disable the console entirely (also not recommended and only as an example) one would set console=none.
To recompile boot.cmd to boot.scr if it was changed:
mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr\n And reboot.
The serial console on imx6 boards is ttymxc0 (Hummingboard, Cubox-i) or ttymxc1 (Udoo).
To change the boot verbosity, alter the verbosity= line in /boot/armbianEnv.txt. The lower the value, the lower the verbosity. The default is 1 and the maximum is 7.
Legacy versions
Using Armbian from version 5.05 to 5.20, you have to touch or delete /boot/.force-verbose to increase the boot verbosity.
If your SBC behaves strange, the first step is to check the power supply and the integrity of the boot media as detailed in the Troubleshooting section. Also, run
Basharmbianmonitor -c \"$HOME\"\n Then look into your kernel logs. Armbian also provides a tool that grabs some information and pastes it to an online pasteboard service. Please increase the boot verbosity to its maximum level (verbosity=7) as shown above, reboot and then run:
sudo armbianmonitor -u\n Then copy and past the URL of your log to the forum, mail, etc.
"},{"location":"User-Guide_Advanced-Configuration/#apt-mirror-selection","title":"APT mirror selection","text":"Armbian has its own APT repository http://apt.armbian.com and mirrors for armbian-specific packages. The default domain is a round-robin to all mirrors. If you are having trouble updating or expereince slow speeds, you may want to choose a specific mirror.
First, make sure that you have the jq package installed:
apt install -y jq\n To get a list of available mirrors from our https://apt.armbian.com/mirrors endpoint in JSON format, run:
curl -s http://apt.armbian.com/mirrors | jq\n You will see a result set similar to this (shortened), listing mirrors by region:
JSON{\n \"AS\": [\n \"http://mirror.twds.com.tw/armbian-apt/\",\n \"http://mirror.albony.in/armbian/\",\n \"http://jp.mirrors.naho.moe/armbian/\",\n ...\n ],\n \"EU\": [\n \"http://netcup-02.armbian.com/apt/\",\n \"http://fi.mirror.armbian.de/apt/\",\n \"http://armbian.nardol.ovh/apt/\",\n ...\n ],\n \"NA\": [\n \"http://mirrors.jevincanders.net/armbian/apt/\"\n ],\n \"OC\": [\n \"http://au.sbcmirror.org/armbian/apt/\"\n ],\n \"default\": [\n \"http://mirrors.jevincanders.net/armbian/apt/\",\n \"http://netcup-02.armbian.com/apt/\",\n \"http://fi.mirror.armbian.de/apt/\",\n ...\n ]\n}\n Choose a mirror, edit /etc/apt/sources.list.d/armbian.sources, and replace the URL http(s)://apt.armbian.com with your preferred mirror.
Install either the minimal package \u2026
Basharmbian-config --CON001\n \u2026 or the fully featured one.
Basharmbian-config --CON002\n To test if Docker works correctly:
Bashdocker run hello-world\n If you get that kind of output, then Docker install went fine:
BashHello from Docker!\nThis message shows that your installation appears to be working correctly.\n"},{"location":"User-Guide_Armbian-Config/","title":"Armbian Config","text":"flowchart LR\n A[armbian-config] -----> B[\"System\"];\n A[armbian-config] -----> C[\"Network\"];\n A[armbian-config] -----> D[\"Localisation\"];\n A[armbian-config] -----> E[\"Software\"];\n A[armbian-config] -----> F[\"Help\"]; Utility for configuring your board, adjusting services, and installing applications. It comes with Armbian by default.
To start the Armbian configuration utility, use the following command: Text Only
armbian-config\n"},{"location":"User-Guide_Armbian-Config/#adding-a-new-feature","title":"Adding a new feature","text":"Please check instructions.
"},{"location":"User-Guide_Armbian-Config/#sources","title":"Sources","text":"armbian/configng
"},{"location":"User-Guide_Armbian-Config/#installation-on-3rd-party-linux-os","title":"Installation on 3rd party Linux OS","text":"This tool is tailored to works best with Armbian Linux but it has also been automatically tested on:
In theory it should work on any systemd APT based Linux distributions such as: Linux Mint, Elementary OS, Kali Linux, MX Linux, Parrot OS, Proxmox, Raspberry Pi OS, \u2026
Text Onlywget -qO - https://apt.armbian.com/armbian.key | gpg --dearmor | \\\nsudo tee /usr/share/keyrings/armbian.gpg > /dev/null\ncat << EOF | sudo tee /etc/apt/sources.list.d/armbian-config.sources > /dev/null\nTypes: deb\nURIs: https://github.armbian.com/configng\nSuites: stable\nComponents: main\nSigned-By: /usr/share/keyrings/armbian.gpg\nEOF\nsudo apt update\nsudo apt -y install armbian-config\n"},{"location":"User-Guide_Armbian-Software/","title":"Armbian Software","text":"Lightweight, Secure, and Optimized Services for Embedded Systems
"},{"location":"User-Guide_Armbian-Software/#overview","title":"Overview","text":"Armbian Software, accessible via the armbian-config utility, empowers you to quickly deploy a variety of preconfigured applications and advanced services \u2014 from diagnostic tools and media servers to dashboards and container orchestration platforms. Most services are offered as Docker containers optimized specifically for Armbian OS and supported hardware, while a subset is available as native installations for lightweight or performance-critical setups.
Each installation is isolated and designed with clean setup and teardown in mind. Key features include:
All configurations are streamlined to work out of the box, reducing the need for manual intervention or deep technical know-how.
"},{"location":"User-Guide_Armbian-Software/#security-and-management","title":"Security and Management","text":"Every service runs on a dedicated Docker network bridge, isolating app traffic for enhanced security and performance. Key management benefits include:
journalctl or Docker logs These features make the platform suitable for both prototyping and long-term deployments. However, a few specific services \u2014 typically those requiring low-level hardware access or advanced networking features \u2014 may still need to run directly on the host network rather than within an isolated Docker bridge.
"},{"location":"User-Guide_Armbian-Software/#hardware-support","title":"Hardware Support","text":"Architecture Support Level Notes x86_64 \u2705 Full Ideal for servers, mini PCs arm64 \u2705 Full Ideal for servers and SBCs armhf \u26a0\ufe0f Partial Limited by upstream container support riscv64 \u26a0\ufe0f Partial Experimental, growing ecosystemInstallations may include hardware specific tuning for optimal performance.
"},{"location":"User-Guide_Armbian-Software/#why-use-it","title":"Why Use It","text":"Most in-circuit and GPIO based interfaces (SPI, I2C, I2S, UART, \u2026) don\u2019t have a mechanism for detecting and identifying devices connected to the bus, so Linux kernel has to be told explicitly about the device and its configuration details.
While Device Tree is a way of describing hardware configuration to the kernel, Device Tree overlays are a way for modifying the DT in order to provide the kernel and kernel drivers with details about external devices or to activate interfaces disabled by default.
Note: from the Linux kernel maintainer perspective all unused in-circuit type interfaces that use GPIO pins should be disabled by default and all pins on pin headers or soldering pads will be configured as standard GPIOs.
Note: from the Linux kernel maintainer perspective all dedicated interfaces like USB, Ethernet or analog audio that are wired to soldering pads or a pin headers instead of specialized sockets (like USB socket, Ethernet socket or 3.5mm jack) will be left disabled by default.
"},{"location":"User-Guide_Armbian_overlays/#armbian-specific-notes","title":"Armbian specific notes","text":"README.<soc-id>-overlays in /boot/dtb/overlay/ (32-bit SoCs) or /boot/dtb/allwinner/overlay/ (64-bit SoCs) for a list of provided overlays, their required and optional parametersoverlays= line in /boot/armbianEnv.txt, separated with spaces/boot/armbianEnv.txt, one per line/boot/armbianEnv.txt if you want to change the default value, one per line.dts extension) on the devicecompatible string to match your SoC if necessaryarmbian-add-overlay <overlay_file.dts> as root, i.e. sudo armbian-add-overlay sht15.dtsoverlay_prefix - prefix for the DT and overlay file names, set at OS image creation timeoverlays - list of overlays to activate from kernel directoryuser_overlays - list of overlays to activate from /boot/overlay-user/ directoryparam_* - overlay parametersOverlays can be loaded from 2 locations:
/boot/dtb/overlay/ (/boot/dtb/allwinner/overlay/ for 64-bit SoCs) - kernel provided overlays/boot/overlay-user/ - user provided overlaysMain differences between these locations:
<prefix>-<name>, for example sun8i-h3-i2c0.dtbo, where sun8i-h3 is the prefix and i2c0 is the namei2c0), and the prefix is set at OS image creation timeadafruit13m.dtbo overlay name would be adafruit13mDT overlays are activated by editing u-boot environment file /boot/armbianEnv.txt
overlays variableuser_overlays variableoverlays line and one user_overlays line can be present in the environment fileSome overlays have additional parameters that can be set.
Parameters marked as \u201cRequired\u201d have to be set if overlay with these parameters is activated, other parameters are not mandatory if default value is suitable.
Parameters are set by adding their name and value to /boot/armbianEnv.txt, each parameter should be added on a new line.
Please refer to README.<SoC_prefix>-overlays files in /boot/dtb/overlay/ (/boot/dtb/allwinner/overlay/ for 64-bit SoCs) directory for supported parameters, i.e. README.sun8i-h3-overlays for H3 based boards.
Parameters of type pin require special format:
P, a letter that signifies the pin bank and a number of the pin in the bankPA9, PG12; bad - pa2, PG08SoCs may contain multiple bus controllers of the same type, i.e. Allwinner H3 contains 2 SPI controllers and Allwinner A20 contains 4 SPI controllers.
Please refer to your board documentation and schematic to determine what pins are wired to the pin headers and thus what bus number should be used in each case.
"},{"location":"User-Guide_Armbian_overlays/#overlay-pinmux-conflicts","title":"Overlay pinmux conflicts","text":"Some controllers may share the SoC pins in some configurations. For example on Allwinner H3 UART 3 and SPI 1 use the same pins - PA13, PA14, PA15, PA16. In this case activating both UART 3 and SPI 1 would result in a conflict, and on practice only one interface (either SPI or UART) will be accessible on these pins.
Please check the SoC specific README, board schematic, SoC datasheet or other documentation if you are unsure about possible conflicts if activating multiple overlays for the controllers that use shared (muxed) pins.
"},{"location":"User-Guide_Armbian_overlays/#overlay-device-endpoint-conflicts","title":"Overlay device endpoint conflicts","text":"Overlays for devices that use addresses or similar mechanisms (i.e. SPI chip selects) can\u2019t be activated simultaneously if addresses (chip selects) are identical.
For example A20 SPI controller 1 has only one hardware chip select, so spi-spidev and spi-jedec-nor overlays cannot be activated both if they would use the same bus number and chip select.
Device Tree overlays for different platforms and SoCs are not directly compatible. This, for example, means that overlays for H3 may need some changes to work on A20, and that Raspberry Pi overlays will need adjustments in order to be used on Allwinner based boards.
Rework may include changing labels, references (phandles) and pinconf bindings.
"},{"location":"User-Guide_Armbian_overlays/#notes-regarding-spi-and-i2s-overlays","title":"Notes regarding SPI and I2S overlays","text":"Activating a device on SPI or I2S bus may require more than one overlay. In case a bus overlay like spi0 or i2s0 exist for the target SoC they need to be activated in addition to a slave device overlay (provided or custom/user-made). Please note that these overlays (spi0, i2s0) do not enable any slave devices (like spidev or I2S codec). In some cases it might be necessary to change param_spidev_spi_bus to 1.
As overlays and overlay parameters are applied by the u-boot, it is impossible to get any debugging information (such as error messages) from the OS.
Serial console on UART 0 is required to debug DT overlay related problems.
"},{"location":"User-Guide_Armbian_overlays/#example-bootarmbianenvtxt-contents","title":"Example/boot/armbianEnv.txt contents:","text":"Text Onlyverbosity=1\nconsole=serial\noverlay_prefix=sun8i-h3\nrootdev=UUID=bd0ded76-1188-4b52-a20a-64f326c1f193\nrootfstype=ext4\noverlays=w1-gpio uart1 i2c0 spi-spidev\nparam_w1_pin=PA20\nparam_w1_pin_int_pullup=1\nparam_uart1_rtscts=1\nparam_spidev_spi_bus=0\n"},{"location":"User-Guide_Armbian_overlays/#example-of-serial-console-log-when-using-several-overlays","title":"Example of serial console log when using several overlays:","text":"Text Only## Executing script at 43100000\nU-boot loaded from SD\nBoot script loaded from mmc\n265 bytes read in 182 ms (1000 Bytes/s)\n5074230 bytes read in 532 ms (9.1 MiB/s)\n5702664 bytes read in 579 ms (9.4 MiB/s)\nFound mainline kernel configuration\n32724 bytes read in 269 ms (118.2 KiB/s)\n882 bytes read in 277 ms (2.9 KiB/s)\nApplying kernel provided DT overlay sun8i-h3-w1-gpio.dtbo\n506 bytes read in 326 ms (1000 Bytes/s)\nApplying kernel provided DT overlay sun8i-h3-uart1.dtbo\n374 bytes read in 377 ms (0 Bytes/s)\nApplying kernel provided DT overlay sun8i-h3-i2c0.dtbo\n788 bytes read in 347 ms (2 KiB/s)\nApplying kernel provided DT overlay sun8i-h3-spi-spidev.dtbo\n4327 bytes read in 268 ms (15.6 KiB/s)\nApplying kernel provided DT fixup script (sun8i-h3-fixup.scr)\n## Executing script at 44000000\ntmp_bank=A\ntmp_pin=20\n## Loading init Ramdisk from Legacy Image at 43300000 ...\n Image Name: uInitrd\n Image Type: ARM Linux RAMDisk Image (gzip compressed)\n Data Size: 5074166 Bytes = 4.8 MiB\n Load Address: 00000000\n Entry Point: 00000000\n Verifying Checksum ... OK\n## Flattened Device Tree blob at 43000000\n Booting using the fdt blob at 0x43000000\n reserving fdt memory region: addr=43000000 size=9000\n Loading Ramdisk to 49b29000, end 49fffcf6 ... OK\n Loading Device Tree to 49b1d000, end 49b28fff ... OK\n\nStarting kernel ...\n"},{"location":"User-Guide_Autoconfig/","title":"Automatic first boot configuration","text":""},{"location":"User-Guide_Autoconfig/#reading-presets-from-local-config","title":"Reading presets from local config","text":"It is possible to configure your device automatically at first boot. Settings like: root password, IP address, connecting to wireless.
After flashing an image to boot media, mount it and add a file containing your config to /root/.not_logged_in_yet
You may also mount the image and edit it prior to flashing, if this is preferable.
"},{"location":"User-Guide_Autoconfig/#loading-a-remote-config","title":"Loading a remote config","text":"It is also possible to load this config file from a remote server, as above, however the only directive you should include is:
/root/.not_logged_in_yetPRESET_CONFIGURATION=\"http://path/to/config/file\"\n"},{"location":"User-Guide_Autoconfig/#configuration-directives","title":"Configuration directives","text":"key=\"value\" format. Caution
No validation of this network config is performed, wrong settings will lead to broken network. Armbian supports netplan.io, this is the preferred config method. See netplan guides for various example configurations. Netplan config is stored in /etc/netplan/.
[default] | option Description: PRESET_CONFIGURATION http://path/to/config/file See Loading a remote config PRESET_NET_CHANGE_DEFAULTS [0] | 1 Change default network settingsif unset, no network changes will be applied PRESET_NET_ETHERNET_ENABLED 0 | 1 Enable Ethernet, ignored if WiFi enabled PRESET_NET_WIFI_ENABLED 0 | 1 Enable WiFi, takes priority over Ethernet PRESET_NET_WIFI_SSID MySSID WiFi SSID PRESET_NET_WIFI_KEY MyWPA-PSK WiFi Pre-Shared Key (Password), stored in plaintext PRESET_NET_WIFI_COUNTRYCODE CC Country code, required for WiFie.g. GB, US, DE; see Wikipedia/ISO_3166 PRESET_CONNECT_WIRELESS Y | n Set to Y for interactive mode, n uses values from file PRESET_NET_USE_STATIC [0] | 1 Use the static IP provided, DHCP is the defaultLeaving any value unset will result in a broken config PRESET_NET_STATIC_IP xxx.xxx.xxx.xxx Static IPv4 address, dotted decimal notation PRESET_NET_STATIC_MASK xxx.xxx.xxx.xxx Subnet mask, typically 255.255.255.0 PRESET_NET_STATIC_GATEWAY xxx.xxx.xxx.xxx Default gateway address PRESET_NET_STATIC_DNS x.x.x.x x.x.x.x DNS Servers to use, separated by a space. If unsure:CloudFlare is 1.1.1.1 1.0.0.1Google is 8.8.8.8 8.8.4.4 SET_LANG_BASED_ON_LOCATION Y | n \u201cSet user language based on your location?\u201d PRESET_LOCALE locale Locale e.g. en_GB.UTF-8, de_DE.UTF-8, zh_TW.UTF-8 PRESET_TIMEZONE timezone Timezone e.g. Etc/UTC, PRESET_ROOT_PASSWORD [1234] | password Preset root passwordStored in plaintext, SSH keys are safer! PRESET_ROOT_KEY https://path/to/key.file Fetches public key from specified URL for root user PRESET_USER_NAME username Username to create PRESET_USER_PASSWORD password Preset created user passwordStored in plaintext, SSH keys are safer! PRESET_USER_KEY https://path/to/key.file Fetches public key from specified URL for created user PRESET_DEFAULT_REALNAME Real Name RealName to use for created user PRESET_USER_SHELL shell Currently only bash (default) or zsh (armbian-zsh) supported"},{"location":"User-Guide_Autoconfig/#sample-config-file","title":"Sample config file","text":"The following is an example configuration, it may be used as a template
/root/.not_logged_in_yet#/root/.not_logged_in_yet\n# Network Settings\nPRESET_NET_CHANGE_DEFAULTS=\"1\"\n## Ethernet\nPRESET_NET_ETHERNET_ENABLED=\"1\" # Ignored due to WiFi\n## WiFi\nPRESET_NET_WIFI_ENABLED=\"1\"\nPRESET_NET_WIFI_SSID=\"MySSID\"\nPRESET_NET_WIFI_KEY=\"MyWiFiKEY\"\nPRESET_NET_WIFI_COUNTRYCODE=\"GB\"\nPRESET_CONNECT_WIRELESS=\"n\"\n## Static IP\nPRESET_NET_USE_STATIC=\"1\"\nPRESET_NET_STATIC_IP=\"192.168.0.100\"\nPRESET_NET_STATIC_MASK=\"255.255.255.0\"\nPRESET_NET_STATIC_GATEWAY=\"192.168.0.1\"\nPRESET_NET_STATIC_DNS=\"8.8.8.8 8.8.4.4\"\n\n# System\nSET_LANG_BASED_ON_LOCATION=\"y\"\nPRESET_LOCALE=\"en_US.UTF-8\"\nPRESET_TIMEZONE=\"Etc/UTC\"\n\n# Root\nPRESET_ROOT_PASSWORD=\"RootPassword\"\nPRESET_ROOT_KEY=\"\"\n\n# User\nPRESET_USER_NAME=\"armbian\"\nPRESET_USER_PASSWORD=\"UserPassword\"\nPRESET_USER_KEY=\"\"\nPRESET_DEFAULT_REALNAME=\"Armbian user\"\nPRESET_USER_SHELL=\"bash\"\n Tip If you want to use first run automatic configuration at build time, check this GitHub pull request.
tl;dr;
cp extensions/preset-firstrun.sh userpatches/extensions/userpatches/extensions/preset-firstrun.sh according to your situationENABLE_EXTENSIONS=preset-firstrun/root/provisioning.sh is executed once as root after the first successful login, either manual or automated. It\u2019s used to perform final system setup tasks like installing packages, configuring the system, or enabling services.
The example script updates package lists, installs htop, sets a custom hostname.
/root/provisioning.sh#!/bin/bash\nset -e\necho \"Provisioning started\"\napt update && apt install -y htop\nhostnamectl set-hostname my-device\necho \"Provisioning complete\"\n"},{"location":"User-Guide_Board-Support-Rules/","title":"Board support Rules","text":""},{"location":"User-Guide_Board-Support-Rules/#overview","title":"Overview","text":"Support definitions, criteria and relationships for:
Platinum support is reserved for business relationships with the Armbian project and is out of the scope of this document.
"},{"location":"User-Guide_Board-Support-Rules/#contact-us","title":"Contact us","text":"Please contact Armbian management for more information.
"},{"location":"User-Guide_Board-Support-Rules/#standard-support","title":"Standard Support","text":""},{"location":"User-Guide_Board-Support-Rules/#benefits","title":"Benefits","text":"For a SBC to be considered supported:
Community maintained devices are not under active supervision or development. Support status is unknown to Armbian team. It represents combined former CSC (community supported configuration) and EOS (end of support). Can be removed from Armbian code base at any time. Left as a courtesy in case a community member wants to attempt to resurrect maintenance.
Community maintained SBCs are exclusively supported by the community.
"},{"location":"User-Guide_Board-Support-Rules/#benefits_1","title":"Benefits","text":"Work in progress (WIP) status is for when a maintainer has committed to a SBC, but is not ready to ship stable images.
"},{"location":"User-Guide_Board-Support-Rules/#benefits_2","title":"Benefits","text":"All benefits of Community Supported SBCs apply to Staging as well.
Armbian is a lightweight Linux distribution optimized for single board computers (SBCs). It provides a reliable, standardized Debian or Ubuntu-based environment tailored to work across many different ARM devices.
In addition to prebuilt images, Armbian includes a powerful build framework that lets you customize kernel versions, desktop environments, and other system components to fit your needs.
"},{"location":"User-Guide_FAQ/#why-no-universal-image","title":"Why no universal image?","text":"The x86 architecture includes BIOS or UEFI, providing a standardized interface. In contrast, most SBCs lack such consistency. Although the ARM ecosystem is improving via ARM ServerReady and SystemReady certifications, adoption is limited. Vendors often have tight budgets and minimal engineering resources, and there\u2019s little incentive to go beyond basic boot functionality.
Instead of following standards, vendors usually fork U-Boot and apply minimal changes needed to boot their boards.
"},{"location":"User-Guide_FAQ/#why-does-armbian-need-help","title":"Why does Armbian need help?","text":"Building and maintaining support for diverse custom hardware requires substantial time, infrastructure, and expertise\u2014similar to commercial software development, but without licensing revenue. Armbian supports a wide range of ARM-based boards, often with minimal or no vendor assistance and limited user contributions. As a result, our team takes on the full responsibility for board bring-up, patching, testing, and ongoing maintenance, largely funded out of pocket.
In addition to the software, we maintain forums, documentation, and user support, all of which demand consistent effort. A dedicated group of just 10\u201315 volunteers sustains the project in their spare time. While some projects repackage and redistribute our work, the core maintenance responsibility remains with us.
We also face commercial entities that leverage our work\u2014sometimes contributing only superficial changes\u2014adding further pressure to our limited resources. That\u2019s why we kindly ask for your support in helping us sustain and grow Armbian.
"},{"location":"User-Guide_FAQ/#why-things-stop-working","title":"Why things stop working?","text":"Vendors often base their software on fixed, vendor-specific LTS kernels and custom U-Boot forks, which may lack long-term upstream maintenance or open-source availability.
Armbian, by contrast, tracks and contributes to mainline kernel development to provide modern features and improved security. However, if drivers are not upstreamed or properly ported, certain hardware functions may not work or may break over time.
Our development focus is on maintaining the CURRENT kernel branch, which is selected for having sufficient maturity and stability for general use. EDGE kernels, as the name implies, are based on the latest upstream kernel versions \u2014 often including release candidates \u2014 and are not suitable for production deployment. These kernels are assembled for early adopters and development purposes only. Their experimental nature means higher risk of regressions and broken functionality.
Due to limited resources, Armbian prioritizes basic functionality and integration testing, not full validation of all features across all supported devices. While we do identify many issues, some remain unresolved for extended periods \u2014 sometimes months or even years \u2014 due to a significant shortage of development capacity.
"},{"location":"User-Guide_FAQ/#what-do-wip-eos-csc-mean","title":"What do WIP, EOS, CSC mean?","text":"These indicate support status:
Absolutely! Non-technical help is equally valuable. Without community help, developers must do everything: run infrastructure, moderate forums, answer support, manage partnerships, and fundraise\u2014on top of development.
https://www.armbian.com/contact/
You can help with documentation, moderation, translations, outreach, fundraising, or promotion\u2014freeing developers to focus on what they do best.
"},{"location":"User-Guide_FAQ/#why-no-support-for-old-os","title":"Why no support for old OS?","text":"Armbian has limited resources, unlike larger projects. Supporting outdated OS releases like Ubuntu Focal or Debian Buster, which may lack upstream maintenance, diverts resources from improving current versions.
We focus only on the latest stable releases of Debian and Ubuntu.
"},{"location":"User-Guide_FAQ/#why-no-support-for-tv-boxes","title":"Why no support for TV boxes?","text":"A few vendors provide schematics, upstream support, and occasional assistance, which helps. But most TV boxes lack documentation, change hardware without notice, and use closed-source bootloaders.
Nearly all Armbian images for these devices are unofficial community hacks. Despite the large market, the cost of support is high, and public interest in sustaining it is low. Supporting these devices would be unsustainable for our small team.
"},{"location":"User-Guide_FAQ/#will-my-board-be-supported","title":"Will my board be supported?","text":"Maybe. Official support depends on factors like documentation, SoC vendor transparency, sample availability, and\u2014most critically\u2014a willing maintainer.
When vendors collaborate with Armbian, the chance of support significantly increases.
"},{"location":"User-Guide_FAQ/#which-wifi-works-right-away","title":"Which WiFi works right away?","text":"WiFi compatibility depends on Linux kernel driver support. Adapters using Intel, Atheros, or Realtek chipsets tend to work better out of the box.
For performance and compatibility details, see: https://docs.armbian.com/WifiPerformance/
Note: Results may vary by board, due to power limits, USB/PCI quirks, and driver maturity.
"},{"location":"User-Guide_FAQ/#why-is-my-image-not-listed","title":"Why is my image not listed?","text":"Creating and maintaining images for all combinations of kernel, userspace, and desktop across all boards is technically and financially unfeasible. We provide a carefully chosen set of default images per board.
However, using the Armbian build framework, you can easily create custom images. It\u2019s well-documented and accessible to moderately experienced users.
If enough users show interest in a specific configuration, we may adjust build targets accordingly.
"},{"location":"User-Guide_FAQ/#can-i-upgrade-to-a-new-armbian-release","title":"Can I upgrade to a new Armbian release?","text":"Yes! The simple armbian-upgrade command, which is an alias for apt update && apt upgrade, will upgrade all Armbian-related core packages (firmware, kernel, BSP) to the most recent version available \u2014 just as it will upgrade the underlying distribution packages.
Distribution upgrades (e.g. Bookworm \u2192 Trixie, Jammy \u2192 Noble) are outside the scope of Armbian support. If you attempt such an upgrade, we cannot assist if problems occur.
An experimental upgrade option is available in armbian-config, but it is provided as-is and without support.
Keep in mind:
If you decide to proceed, always ensure you have a full backup of your system so you can recover in case the upgrade fails.
"},{"location":"User-Guide_Getting-Started/","title":"Armbian Getting Started Guide","text":"Before you start, please make sure you have:
You will also need an existing operating system and a SD card writer tool. We recommend using USBImager because it can validate written data saving you from corrupted SD card contents.
Warning
Make sure you use a good, reliable and fast SD card. If you encounter boot or stability issues, in over 95 percent of all cases these are either caused by an insufficient power supply, or they are related to the SD card. This can be due to a bad card, bad card reader, something went wrong when burning the image, the card turns out to be too slow to boot, etc. Armbian can simply not run on unreliable hardware.
Checking your SD card with either F3 or H2testw is mandatory if you run into problems. Since counterfeit SD cards are still an issue, we also highly recommend checking your card with these tools directly after purchase.
Most SD cards are only optimised for sequential reads/writes as it is common with digital cameras. This is what the speed class is about. The SD Association defined Application Performance Class as a standard for random IO performance.
Application Performance Class Pictograph Minimum Random Read Minimum Random Write Minimum Sustained (Seq. Write) Class 1 (A1) 1500 4k IOPS 500 4k IOPS 10MBytes/sec Class 2 (A2) 4000 4k IOPS 2000 4k IOPS 10MBytes/secWe recommend SD cards that are rated at least A1 and fulfill at least speed class C10 or higher (U1/U3, etc.). For example:
In case you chose an SD card that was already in use before, please consider resetting it back to \u2018factory default\u2019 performance with SD Formatter before burning Armbian to it (explanation in the forum). Detailed information regarding \u2018factory default\u2019 SD card performance.
New users
Some users might find it easier to follow this video tutorial.
Some word of advice, though. The video has been created a few years ago. You might therefore find differences between this video and our current site. So, in doubt, also follow the sections below while watching the video.
"},{"location":"User-Guide_Getting-Started/#download-the-image","title":"Download the image","text":"If your hardware is supported, you must download an image for your board. All of our system images can be found at https://www.armbian.com/download/ or at one of our many mirrors. You will find that there are different types of images, either using Debian GNU/Linux or Ubuntu as their base operating system.
"},{"location":"User-Guide_Getting-Started/#debian-or-ubuntu","title":"Debian or Ubuntu","text":"If you have no special preferences or requirements, we recommend using an Ubuntu based Armbian image.
"},{"location":"User-Guide_Getting-Started/#minimal-server-or-desktop","title":"Minimal, Server, or Desktop","text":"For each board, we usually provide these types of images:
For some boards we provide only minimal images due to their hardware limitations.
"},{"location":"User-Guide_Getting-Started/#vendor-current-edge-or-legacy","title":"Vendor, Current, Edge, or Legacy","text":"In some cases we provide images with different firmware. They differ in the level of hardware support and can be classified as follows:
Use the following images only if these are the only ones provided, or if you want to participate in testing:
The level of kernel support, however, always depends on the board family. If in your specific case something does not work well, you are always free to try an image with another kernel included, or change the kernel with armbian-config.
"},{"location":"User-Guide_Getting-Started/#rolling-releases","title":"Rolling releases","text":"Rolling releases are suitable for Linux enthusiasts who want cutting edge packages and have the skills to fix the damage that a bad update might cause. If you want stability in a production environment or low headaches as a novice user, skip rolling releases. They are not at a suitable support quality level!
graph LR\n A[Hardware] --> B{Armbian kernel};\n B -->|legacy| C[\"rolling release\"];\n B -->|vendor| C[\"rolling release\"];\n B -->|current| C[\"rolling release\"];\n B -->|edge| C[\"rolling release\"];\n B -->|legacy| X[\"point release\"];\n B -->|vendor| X[\"point release\"];\n B -->|current| X[\"point release\"];\n B -->|edge| X[\"point release\"];\n\n\n C ---->|minimal| E[Debian or Ubuntu];\n C ---->|server| F[Debian or Ubuntu];\n C ---->|desktop| G[Debian or Ubuntu];\n\n X ---->|minimal| E[Debian or Ubuntu];\n X ---->|server| F[Debian or Ubuntu];\n X ---->|desktop| G[Debian or Ubuntu]; Danger
Do not use rolling release or edge images in a productive environment. Their purpose is testing and providing constructive feedback to developers.
"},{"location":"User-Guide_Getting-Started/#download-and-verification","title":"Download and verification","text":"After you have determined the image you want, the download for each image consists of three separate files:
After you have downloaded these files, we recommend checking the integrity and the authenticity of the compressed image file.
How to check the download integrity?
Since it might happen that your download got somehow corrupted, we publish a checksum/hash for each of our images. You can compare the image\u2019s SHA-256 hash with the one contained in the .sha file.
On Windows, you can download and use the QuickHash GUI and follow the instructions in the gui. Linux and macOS users can simply do this in the directory with the compressed image and the checksum file:
Bashsha256sum -c Armbian_25.2.1_Bananapicm4io_bookworm_current_6.12.13_minimal.img.xz.sha\n The integrity is verified if the output looks something like this:
BashArmbian_25.2.1_Bananapicm4io_bookworm_current_6.12.13_minimal.img.xz: OK\n How to check the download authenticity?
All our images are digitally signed. It is therefore possible to check their authenticity. Linux and macOS user might need to install the required tools first: for Debian/Ubuntu, this can be done via sudo apt-get install gnupg, and for macOS use brew install gnupg. Windows users can install GnuPG from here. To check the authenticity, you will need the public key that was used to sign the images. This key can be retrieved from a keyserver or from the Debian/Ubuntu package repository (this step only needs to be done once):
# download public keys either from a keyserver\ngpg --keyserver hkp://keyserver.ubuntu.com --recv-key DF00FAF1C577104B50BF1D0093D6889F9F0E78D5\ngpg --keyserver hkp://keyserver.ubuntu.com --recv-key 8CFA83D13EB2181EEF5843E41EB30FAF236099FE\n# or from the repository server\nwget -O- https://apt.armbian.com/armbian.key | gpg --import -\n To perform the verfification, run the command shown below.
Bashgpg --verify Armbian_25.2.1_Bananapicm4io_bookworm_current_6.12.13_minimal.img.xz.asc\n While the output can very depending on the GnuPG version, it should result in a response similar to the one below. It is safe to ignore the message WARNING: This key is not certified with a trusted signature!.
gpg: Signature made Thu Feb 13 11:53:18 2025 CET\ngpg: using RSA key DF00FAF1C577104B50BF1D0093D6889F9F0E78D5\ngpg: Good signature from \"Igor Pecovnik <igor@++++++++++++.com>\" [unknown]\ngpg: aka \"Igor Pecovnik (Ljubljana, Slovenia) <igor.++++++++++++@gmail.com>\" [unknown]\ngpg: WARNING: This key is not certified with a trusted signature!\ngpg: There is no indication that the signature belongs to the owner.\nPrimary key fingerprint: DF00 FAF1 C577 104B 50BF 1D00 93D6 889F 9F0E 78D5\n If something is wrong, the output will look something like this:
Bashgpg: Signature made Thu Feb 13 11:53:18 2025 CET\ngpg: using RSA key DF00FAF1C577104B50BF1D0093D6889F9F0E78D5\ngpg: BAD signature from \"Igor Pecovnik <igor@++++++++++++>\" [unknown]\n"},{"location":"User-Guide_Getting-Started/#deploy-the-image","title":"Deploy the image","text":"There are multiple ways to deploy the image to your board. The easiest and most common option is to write the Armbian Image to your SD-Card.
"},{"location":"User-Guide_Getting-Started/#flash-to-sd-card","title":"Flash to SD Card","text":"Write the .xz compressed image with a tool like USBImager onto your micro-SD card or USB drive (if booting from it is supported). Unlike other tools, it can validate written data saving you from corrupted SD card contents.
Other tools
We are aware that there are many programs that can be used for this step. But, they usually cannot validate the written data to catch a bad card, a faulty card reader, problems writing the image. etc. Issues like these have caused too many error reports. Thus, please follow our advice and don\u2019t use other tools, especially if you are a novice user.
Due to known issues, balenaEtcher can no longer be recommended as an alternative at this time.
"},{"location":"User-Guide_Getting-Started/#flash-to-internal-memory","title":"Flash to Internal Memory","text":"Flash to Internal Memory allows you to write Armbian image directly to the device\u2019s built\u2011in storage. This process completely replaces the existing system and erases all current data on the target drive. Use with caution, as once started, the operation cannot be undone.
"},{"location":"User-Guide_Getting-Started/#rockchip","title":"Rockchip","text":"When a Rockchip device is placed into Maskrom mode, you can use rkdeveloptool to flash an image directly to its internal storage (eMMC, UFS, or SPI) over USB.
Install requirements for rkdeveloptool
sudo apt-get update\nsudo apt-get install -y build-essential git wget\nsudo apt-get install -y libudev-dev libusb-1.0-0-dev dh-autoreconf pkg-config libusb-1.0\n Download & Compile rkdeveloptool
git clone https://github.com/rockchip-linux/rkdeveloptool\ncd rkdeveloptool\nautoreconf -i\n./configure\nmake -j $(nproc)\n Optionally install rkdeveloptool systemwide:
sudo cp rkdeveloptool /usr/local/sbin/\n First make sure you have brew installed. Then you can run the following commands to install rkdeveloptool:
Install requirements
Bashbrew install automake autoconf libusb pkg-config git wget\n Download & Compile rkdeveloptool
git clone https://github.com/rockchip-linux/rkdeveloptool\ncd rkdeveloptool\nautoreconf -i\n./configure\nmake -j $(nproc)\n Optionally install rkdeveloptool systemwide:
cp rkdeveloptool /opt/homebrew/bin/\n rkdeveloptool ld to list all connected devicesunxz Armbian-YourBoard.img.xzrkdeveloptool db RK3XXX_loader.bin which stands for download bootrkdeveloptool ef which stands for erase flashsudo rkdeveloptool wl 0 Armbian-YourBoard.img (make sure the file ends with .img)sudo rkdeveloptool rd which stands for (power) reset deviceIf you used an SD card insert it into a slot and power on the board. With the cheapest board, the first boot (with DHCP) can take up to two minutes with a class 10 SD card.
"},{"location":"User-Guide_Getting-Started/#first-login","title":"First login","text":"The first boot will log you in automatically if you have connected a display via HDMI or if you are connected to the serial console. For SSH, you need to login as root and use the password 1234. If you need to find your board\u2019s IP address, you can use this tool.
After logging in, you will be prompted to change the default password. You will then be asked to create a normal user account that will have sudo permissions. Beware, at this stage, the keyboard is using the QWERTY layout. In case you have no wired network connection and there is a wireless adaptor detected, the system will prompt you to connect.
Text OnlyWelcome to Armbian!\n\nDocumentation: https://docs.armbian.com/ | Community support: https://forum.armbian.com/\n\nIP address: Network connection timeout!\n\nCreate root password: ********\nRepeat root password: ********\n\nShell: BASH\n\nCreating a new user account. Press <Ctrl-C> to abort\n\nPlease provide a username (eg. your first name): jane\nCreate user (Jane) password: ********\nRepeat user (Jane) password: ********\n\nPlease provide your real name: Jane\n\nDear Jane, your account jane has been created and is sudo enabled.\nPlease use this account for your daily work from now on.\n\nInternet connection was not detected.\n\nConnect via wireless? [Y/n] y\n\nMultiple wireless adaptors detected. Choose primary:\n\n1 wlx00e032cxxx94\n2 wlx60fb00yyyc4a\n\nEnter a number of wireles adaptor: 1\n\nDetected wireless networks:\n\n1 NETWORK\n2 MY-WIFI\n3 Caatsanddogs\n\nEnter a number of SSID: 3\n\nEnter a password for MY-WIFI: password\n\nProbing internet connection (9)\n\nDetected timezone: Europe/Ljubljana\n\nSet user language based on your location? [Y/n] y\n\nGenerating locales: sl_SI.UTF-8\nroot@bananapim2pro:~#\n Automated config These settings can be pre-loaded, see Autoconfig
"},{"location":"User-Guide_Getting-Started/#first-steps","title":"First steps","text":"You can customize your Armbian Linux before or after installing it onto your device\u2019s hard-drive. In many cases, you probably want to apply some basic customizations like adjusting the keyboard layout, the timezone, etc., so you can use the same SD card again if necessary. Or you want to adjust your system or hardware configuration or install preconfigured applications and advanced services.
Please note that the typical tool for all tasks is armbian-config. The section Advanced Configuration contains a selection of tasks that require a deeper understanding of the operating system.
"},{"location":"User-Guide_Getting-Started/#configuration","title":"Configuration","text":"Typical tasks include for example:
You can quickly and easily install popular software too! It is ready to run and optimized for Armbian. Here are few highlights:
At this stage, nothing has been installed onto the board\u2019s internal drive yet. Using the installer, one can now decide where to install the boot loader and the rest of the system. The installer supports various combinations depending on the availability of onboard eMMC and/or attached SATA, NVME, or USB storage.
Armbian Installer support those storage scenarios:
Start the install script, make your choice, and follow the instructions:
Text Onlyarmbian-install\n After you have decided for an option, you can choose between the following file systems:
For novice users, a sensible default is ext4.
Congratulation. You have successfully installed Armbian onto your board!
"},{"location":"User-Guide_Getting-Started/#update-the-system","title":"Update the system","text":"The operating system consists of two parts that must be updated separately.
"},{"location":"User-Guide_Getting-Started/#update-the-armbian-os","title":"Update the Armbian OS","text":"For the base operating system, use the APT package manager to keep the packages up to date.
Text Onlyapt update\napt upgrade\n The Update process can take quite some time in case you are using an old or a cheap SD card and/or experience heavy load.
Users with a desktop will find graphical tools that allow one to update the system packages without using the command line.
Armbian provides a firmware package freeze feature to provide you with the possibility to upgrade all packages but the firmware. This prevents unpleasant surprises on functionality regressions that can come with kernel upgrades. To enable or disable this feature, look for
Text OnlyEnable Armbian kernel/firmware upgrades / Disable Armbian kernel upgrades\n within armbian-config.
If the kernel was upgraded during this process, you will be prompted to reboot at the next login.
Upgrade the Armbian OS
When a new major release of Debian or Ubuntu is out, we recommend to start with a fresh image. While it is possible to do what is called a \u201cdist-upgrade\u201d, the process is largerly in the domain of the underlaying Debian or Ubuntu user space. We provide only an experimental Distribution upgrades feature for armbian-config.
Userspaces distribution upgrades are neither tested nor supported. Therefore Armbian cannot provide any support if something goes wrong.
"},{"location":"User-Guide_Getting-Started/#update-the-boot-loader","title":"Update the boot loader","text":"The second part that can be updated is the boot loader.
First, update all packages as described in the previous section. Then run:
Bashsudo armbian-install\n and select:
Text OnlyInstall/Update the bootloader on SD/eMMC\n"},{"location":"User-Guide_Getting-Started/#troubleshooting","title":"Troubleshooting","text":"If you experience an issue during any of the steps mentioned in this section, please first check out our Troubleshooting and Recovery guide.
"},{"location":"User-Guide_Getting-Started/#how-to-report-bugs","title":"How to report bugs","text":"If you are certain you have found a bug, fill out our bug reporting form and follow its instructions to collect the necessary information and how/where to provide them depending on the type of issue. Please understand that any reports lacking these fundamental diagnostics might be ignored.
"},{"location":"User-Guide_Networking/","title":"Networking","text":""},{"location":"User-Guide_Networking/#networking","title":"Networking","text":"Armbian uses Netplan.io to describe networking configurations. Netplan is a utility to easily configure Linux networking, using a declarative approach. If you want to configure your network manually, it is as simple as editing and creating Netplan yaml files (see the yaml configuration reference at the Netplan docs).
Netplan is used to configure networks on all Armbian images since Release 24.05, no matter if minimal, CLI or desktop, Debian or Ubuntu. However, the networking backends are different based on if you choose a minimal image or not.
"},{"location":"User-Guide_Networking/#minimal-images","title":"Minimal images","text":"Netplan renderer: networkd
Minimal images are using the systemd-networkd backend, which has a smaller footprint compared to Network-Manager which is used in all non-minimal images. systemd-networkd is a system daemon that manages network configurations. It detects and configures network devices as they appear; it can also create virtual network devices. This service is great for simple connections, but can also be useful to set up complex network configurations.
All ethernet interfaces are configured for DHCP and will automatically receive an IP address from your router.
/etc/netplan/10-dhcp-all-interfaces.yaml:
network:\n version: 2\n renderer: networkd\n ethernets:\n all-eth-interfaces:\n match:\n name: \"e*\"\n dhcp4: yes\n dhcp6: yes\n ipv6-privacy: yes\n"},{"location":"User-Guide_Networking/#configuration-examples","title":"Configuration examples","text":""},{"location":"User-Guide_Networking/#setting-a-fixed-ip-address","title":"Setting a fixed IP address","text":"When creating an additional .yaml file be sure to remove the default file (/etc/netplan/10-dhcp-all-interfaces.yaml) as the default will overide.
The following example configures a static IP 192.168.1.199 for the eth0 interface. Please adjust as necessary.
How to find your device\u2019s Ethernet interface?
Use command:
Bash
ip addr\n It is usually something like eth0, enp4s3 or lan. /etc/netplan/20-static-ip.yaml:
network:\n version: 2\n renderer: networkd\n ethernets:\n eth0: # Change this to your ethernet interface\n addresses:\n - 192.168.1.199/24\n routes:\n - to: default\n via: 192.168.1.1\n nameservers:\n addresses:\n - 9.9.9.9\n - 1.1.1.1\n See also the Netplan docs for reference.
"},{"location":"User-Guide_Networking/#connecting-to-wifi-network","title":"Connecting to WiFI network","text":"It is recommended to make a separate config file for wireless network.
Create the following file:
sudo nano /etc/netplan/30-wifis-dhcp.yaml:
network:\n version: 2\n renderer: networkd\n wifis:\n wlan0:\n dhcp4: true\n dhcp6: true\n access-points:\n \"Your-SSID\":\n password: \"your-password\"\n Replace SSID with the name of the network you want to connect to and wlan0 with the wifi interface used on your system.
How to find your device\u2019s WiFi interface?
Use command:
Bash
iw dev | awk '$1==\"Interface\"{print $2}'\n It is usually something like wlan0, wlo1 or wlx12334c47dec3. If you get blank response, it means your WiFi device / dongle is not supported by the kernel. See also the Netplan docs for reference.
"},{"location":"User-Guide_Networking/#applying-your-configuration","title":"Applying your configuration","text":"Once you are done configuring your network, it is time to test syntax and apply it.
"},{"location":"User-Guide_Networking/#fix-file-permissions","title":"Fix file permissions","text":"According to the Netplan docs, the permissions must be restricted to the root user.
sudo chmod 600 /etc/netplan/*.yaml\n"},{"location":"User-Guide_Networking/#test-syntax","title":"Test syntax","text":"This will verify the syntax and test if your device can connect
Bash
sudo netplan try\n If there are no warmings or errors and you hit ENTER as suggested the changes will be made and the next, nextplan apply, step can be skipped."},{"location":"User-Guide_Networking/#apply-the-configuration","title":"Apply the configuration","text":"Bashsudo netplan apply\n"},{"location":"User-Guide_Networking/#cli-and-desktop-images","title":"CLI and desktop images","text":"Netplan renderer: Network Manager
Server CLI and desktop images are using the Network-Manager backend. You can use similar methods for configuring your network as with the networkd backend used on minimal images.
The following example configures a static IP 192.168.1.199 for the eth0 interface. Please adjust the example to your likings.
How to find your device\u2019s Ethernet interface?
Use command:
Bash
ip addr\n It is usually something like eth0, enp4s3 or lan. /etc/netplan/20-static-ip.yaml:
network:\n version: 2\n renderer: NetworkManager # Different than 'networkd'\n ethernets:\n eth0: # Change this to your ethernet interface\n addresses:\n - 192.168.1.199/24\n routes:\n - to: default\n via: 192.168.1.1\n nameservers:\n addresses:\n - 9.9.9.9\n - 1.1.1.1\n See also the Netplan docs for reference.
Alternatively, you can also use Network-Manager directly via the command line or GUI tools on your desktop:
Bashnmtui-edit eth0\n Display screenshot Replace eth0 with the name of your Ethernet Interface.
For connecting to a wireless network, you can use the same method as mention above for use with networkd on minimal images. Just make sure to replace renderer: networkd with renderer: NetworkManager.
Alternatively, you can also use Network-Manager directly via the command line or GUI tools on your desktop:
Bashnmtui-connect SSID\n Display screenshot Replace SSID with the name of your wireless network.
First aid video guide:
If you are experiencing at least one of these problems:
lsusb output)and you are using a stable Armbian image, then most likely you have one of two common problems - powering issue or SD card issue.
Note that
If you experience strange network problems, especially if you are running several of these SOC-boards with the same operating system, then the problems may be sourced by not having a real hardware MAC address. The operating systems try to generate a hardware MAC address from the CPUid, but what if that SOC has no CPUid either?
Then you have to do it manually. Depending on system and network installation, there are several possibilities:
/boot/armbianEnv.txt and add a line:Text Only ethaddr=XX:XX:XX:XX:XX:XX\n but that file is interpreted by u-boot, which happens early in boot process, but not every u-boot is able to read that file.
/etc/network/interfaces. Add these lines:Text Only auto eth0\n iface eth0 inet dhcp\n hwaddress ether XX:XX:XX:XX:XX:XX\n /etc/Networkmanager/system-connections is a file Wired connection 1.nmconnection. Change entry cloned-mac-address of group [ethernet] :Text Only [connection]\n id=Wired connection 1\n type=ethernet\n\n [ethernet]\n cloned-mac-address=XX:XX:XX:XX:XX:XX\n Some combination of boards/kernel versions does not support 4k resolution. This may cause black screen on connecting the board to 4k resolution devices. A workaround to solve this without changing the kernel is forcing the video mode to 1080p. Add this directive to the /boot/armbianEnv.txt and reboot your system:
extraargs=video=HDMI-A-1:1920x1080@60\n In 95 percent of all cases it is either a faulty/fraud/counterfeit SD card or an insufficient power supply that is causing all sorts of does not work issues! So, please, make sure you checked the sections above before proceeding.
The following options are presented in (more or less) increasing levels of despair. But keep heart! :) And proceed in order.
"},{"location":"User-Guide_Troubleshooting/#u-boot-shell-access","title":"U-Boot Shell Access","text":"If you broke the system you can try to get in this way. You have to get to u-boot command prompt, using either a serial adapter or monitor and usb keyboard.
After switching power on or rebooting, when u-boot loads up, press some key on the keyboard (or send some key presses via terminal) to abort default boot sequence and get to the command prompt:
Bash SessionU-Boot SPL 2015.07-dirty (Oct 01 2015 - 15:05:21)\n...\nHit any key to stop autoboot: 0\nsunxi#\n Enter the following commands, replacing root device path if necessary.
boot.cmd for your device for commands related to legacy kernel.For serial:
Bash Sessionsunxi# setenv bootargs init=/bin/bash root=/dev/mmcblk0p1 rootwait console=ttyS0,115200\n For monitor:
Bash Sessionsunxi# setenv bootargs init=/bin/bash root=/dev/mmcblk0p1 rootwait console=tty1\n Then:
Bash Sessionsunxi# ext4load mmc 0 0x49000000 /boot/dtb/${fdtfile}\nsunxi# ext4load mmc 0 0x46000000 /boot/zImage\nsunxi# env set fdt_high ffffffff\nsunxi# bootz 0x46000000 - 0x49000000\n System should eventually boot to bash shell:
Bash Sessionroot@host:/#\n Now you can try to fix your broken system.
"},{"location":"User-Guide_Troubleshooting/#replacing-boot","title":"Replacing /boot","text":"When something goes terribly wrong and you are not able to boot the system (and cannot gain access via u-boot as outlined above), this is the way to proceed. You will need some Debian based Linux machine where you can mount the failed SD card. With this procedure you will reinstall the kernel and hardware settings. In most cases this should be enough to unbrick the board.
It is recommended to issue a filesystem check before mounting. Replace X and Y below with your device and partition(s), respectively (if not a flash based device, it may even be /dev/sdXY, etc).
/ # fsck /dev/mmcblkXpY -f\n Mount the SD card.
Bash Session/ # cd /mnt\n/mnt # mkdir sdcard\n/mnt # mount /dev/mmcblkXpY /mnt/sdcard\n Make another temporary directory somewhere else (in our example ~/tmp/recovery) and download the Linux root, kernel, firmware and dtb packages for your board and currently used OS.
/mnt $ cd\n~ $ mkdir -p tmp/recovery\n~ $ cd tmp/recovery\n\n(Root file system):\n~/tmp/recovery $ wget https://apt.armbian.com/pool/main/l/linux-focal-root-current-nanopineo2/linux-focal-root-current-nanopineo2_20.08.13_arm64.deb\n\n(Kernel):\n~/tmp/recovery $ wget https://apt.armbian.com/pool/main/l/linux-5.8.16-sunxi64/linux-image-current-sunxi64_20.08.13_arm64.deb\n\n(Firmware):\n~/tmp/recovery $ wget https://apt.armbian.com/pool/main/a/armbian-firmware/armbian-firmware_20.08.13_all.deb\n\n(Device Tree Binary (DTB)):\n~/tmp/recovery $ wget https://apt.armbian.com/pool/main/l/linux-5.8.16-sunxi64/linux-dtb-current-sunxi64_20.08.13_arm64.deb\n Extract all the Debian packages (.deb files) to the mounted sd card.
~/tmp/recovery # for f in *.deb; do dpkg -x $f /mnt/sdcard; done\n Navigate to /mnt/sdcard/boot and create symlinks:
~/tmp/recovery # cd /mnt/sdcard/boot\n/mnt/sdcard/boot # ln -s vmlinuz-5.8.16-sunxi64 zImage\n/mnt/sdcard/boot # ln -s uInitrd-5.8.16-sunxi64 uInitrd\n/mnt/sdcard/boot # ln -s dtb-5.8.16 dtb\n If you upgrade from some very old build, you might need to update your boot script.
u-boot-tools package on your host system./mnt/sdcard/boot # wget https://raw.githubusercontent.com/armbian/build/master/config/bootscripts/boot-sunxi.cmd\n/mnt/sdcard/boot # mv boot-sunxi.cmd boot.cmd\n/mnt/sdcard/boot # mkimage -C none -A arm -T script -d boot.cmd boot.scr\n Unmount SD card.
Bash Session/mnt/sdcard/boot # cd /\n/ # umount /mnt/sdcard\n Move it to the board and power on. Check serial output for errors if problems persist.
"},{"location":"User-Guide_Troubleshooting/#flashing-boot-loader","title":"Flashing boot loader","text":"Sometimes we need to flash boot loader from some other Linux. Attach an SD card reader with your SD card and proceed this way:
Bash Session/mnt $ cd\n~ $ mkdir -p tmp/recovery\n~ $ cd tmp/recovery\n~ $ wget https://imola.armbian.com/apt/pool/main/l/linux-u-boot-nanopineo2-current/linux-u-boot-current-nanopineo2_20.08.13_arm64.deb\n~ $ dpkg-deb -x linux-u-boot-current-nanopineo2_20.08.13_arm64.deb pack\n~ $ source pack/usr/lib/u-boot/platform_install.sh\n~ $ write_uboot_platform pack/usr/lib/linux-u-boot-nanopineo2-current /dev/XXX # replace XXX with the actual device /dev/sdb\n Move it to the board and power on. Check serial output for errors if problems persist.
"},{"location":"WifiPerformance/","title":"Testing the speed of wireless adapters","text":"All wireless adapters were tested under consistent conditions - each positioned in close proximity (1-2m) and connected to the same wireless access point (AP). The adapters utilized various interface types, including USB, SDIO, and PCI, to evaluate performance across different hardware configurations.
"},{"location":"WifiPerformance/#test-equipment","title":"Test Equipment","text":"
Overview of the WiFi performance test process:
\u26a1 Power On Devices \u2514\u2500 Embedded WiFi-capable devices and USB wireless adapters are powered on.
\ud83c\udf10 Configure Wireless Connection \u2514\u2500 Devices are configured to connect to a predefined access point (SSID).
\ud83d\udcf6 Connect to WiFi Network \u2514\u2500 Network connectivity is validated to ensure the device is routable.
\ud83d\udcca Measure Performance (iperf3) \u251c\u2500 Perform reverse (-R) and forward iperf3 tests \u2514\u2500 Measure throughput and link quality.
\ud83d\udd0d Collect System & Network Info \u251c\u2500 Extract link details (e.g. bitrate, signal strength) \u2514\u2500 Record system version, kernel, architecture.
\ud83d\udd01 Restore Wired Network \u2514\u2500 Reapply original routes and configuration.
\u2601\ufe0f Upload Test Results \u2514\u2500 Summary, logs, and system info are uploaded as artifacts.
\ud83d\udcf4 Power Off Devices \u2514\u2500 All test devices are safely powered down after testing completes.
This section presents the performance test results, including key metrics and technical details from the test execution. Test Date: 2025-08-22 22:29 UTC
"},{"location":"WifiPerformance/#ac","title":"AC","text":""},{"location":"WifiPerformance/#broadcom-4345","title":"Broadcom 4345","text":"OS: Armbian v25.2.2, 6.12.15-current-bcm2711
Chipset Class Average forward speed Average reverse speed BCM4345 AC 53.7 Mbits/sec 51.3 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.152 port 50517 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 5.91 MBytes 49.6 Mbits/sec \n[ 5] 1.00-2.00 sec 5.97 MBytes 50.1 Mbits/sec \n[ 5] 2.00-3.00 sec 6.02 MBytes 50.5 Mbits/sec \n[ 5] 3.00-4.00 sec 6.05 MBytes 50.7 Mbits/sec \n[ 5] 4.00-5.00 sec 6.13 MBytes 51.5 Mbits/sec \n[ 5] 5.00-6.00 sec 6.13 MBytes 51.4 Mbits/sec \n[ 5] 6.00-7.00 sec 6.08 MBytes 51.0 Mbits/sec \n[ 5] 7.00-8.00 sec 6.05 MBytes 50.7 Mbits/sec \n[ 5] 8.00-9.00 sec 6.07 MBytes 50.9 Mbits/sec \n[ 5] 9.00-10.00 sec 6.10 MBytes 51.2 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.02 sec 64.1 MBytes 53.7 Mbits/sec 0 sender\n[ 5] 0.00-10.00 sec 60.5 MBytes 50.8 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.152 port 58709 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 7.56 MBytes 63.4 Mbits/sec 0 395 KBytes \n[ 5] 1.00-2.00 sec 6.09 MBytes 51.1 Mbits/sec 0 594 KBytes \n[ 5] 2.00-3.00 sec 6.22 MBytes 52.2 Mbits/sec 0 814 KBytes \n[ 5] 3.00-4.00 sec 6.25 MBytes 52.4 Mbits/sec 0 867 KBytes \n[ 5] 4.00-5.00 sec 6.25 MBytes 52.4 Mbits/sec 0 969 KBytes \n[ 5] 5.00-6.00 sec 6.25 MBytes 52.4 Mbits/sec 0 969 KBytes \n[ 5] 6.00-7.00 sec 5.00 MBytes 41.9 Mbits/sec 0 969 KBytes \n[ 5] 7.00-8.00 sec 6.25 MBytes 52.4 Mbits/sec 0 969 KBytes \n[ 5] 8.00-9.00 sec 5.00 MBytes 41.9 Mbits/sec 0 969 KBytes \n[ 5] 9.00-10.00 sec 6.25 MBytes 52.4 Mbits/sec 0 969 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 61.1 MBytes 51.3 Mbits/sec 0 sender\n[ 5] 0.00-10.03 sec 58.5 MBytes 48.9 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437\nRX: 152679 bytes (415 packets)\nTX: 84283 bytes (522 packets)\nsignal: -33 dBm\nrx bitrate: 72.2 MBit/s\ntx bitrate: 72.2 MBit/s\n"},{"location":"WifiPerformance/#compex-wle900vx","title":"Compex WLE900VX","text":"OS: Armbian v25.08.0-trunk, 6.12.28-edge-mvebu
Chipset Class Average forward speed Average reverse speed QCA9880 AC 103 Mbits/sec 91.5 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.151 port 60127 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 11.6 MBytes 97.5 Mbits/sec \n[ 5] 1.00-2.00 sec 12.1 MBytes 102 Mbits/sec \n[ 5] 2.00-3.00 sec 12.1 MBytes 101 Mbits/sec \n[ 5] 3.00-4.00 sec 12.1 MBytes 102 Mbits/sec \n[ 5] 4.00-5.00 sec 12.1 MBytes 102 Mbits/sec \n[ 5] 5.00-6.00 sec 12.1 MBytes 102 Mbits/sec \n[ 5] 6.00-7.00 sec 11.9 MBytes 99.7 Mbits/sec \n[ 5] 7.00-8.00 sec 12.0 MBytes 100 Mbits/sec \n[ 5] 8.00-9.00 sec 12.1 MBytes 101 Mbits/sec \n[ 5] 9.00-10.00 sec 12.2 MBytes 103 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.06 sec 123 MBytes 103 Mbits/sec 295 sender\n[ 5] 0.00-10.00 sec 120 MBytes 101 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.151 port 53591 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 10.9 MBytes 91.7 Mbits/sec 0 419 KBytes \n[ 5] 1.00-2.00 sec 11.4 MBytes 95.4 Mbits/sec 0 488 KBytes \n[ 5] 2.00-3.00 sec 11.4 MBytes 95.9 Mbits/sec 0 566 KBytes \n[ 5] 3.00-4.00 sec 11.1 MBytes 92.8 Mbits/sec 0 566 KBytes \n[ 5] 4.00-5.00 sec 11.6 MBytes 97.0 Mbits/sec 0 566 KBytes \n[ 5] 5.00-6.00 sec 10.9 MBytes 91.7 Mbits/sec 0 592 KBytes \n[ 5] 6.00-7.00 sec 11.6 MBytes 97.5 Mbits/sec 0 592 KBytes \n[ 5] 7.00-8.00 sec 11.4 MBytes 95.9 Mbits/sec 0 631 KBytes \n[ 5] 8.00-9.00 sec 9.32 MBytes 78.2 Mbits/sec 0 676 KBytes \n[ 5] 9.00-10.00 sec 9.38 MBytes 78.7 Mbits/sec 0 707 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 109 MBytes 91.5 Mbits/sec 0 sender\n[ 5] 0.00-10.02 sec 108 MBytes 90.0 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437\nRX: 98916 bytes (394 packets)\nTX: 52049 bytes (224 packets)\nsignal: -40 dBm\nrx bitrate: 144.4 MBit/s MCS 15 short GI\n"},{"location":"WifiPerformance/#edup-ep-ac1681","title":"EDUP EP-AC1681","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed RTL88x2BU AC 84.8 Mbits/sec 68.4 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.132 port 40459 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 9.50 MBytes 79.6 Mbits/sec \n[ 5] 1.00-2.00 sec 9.88 MBytes 82.8 Mbits/sec \n[ 5] 2.00-3.00 sec 10.2 MBytes 86.0 Mbits/sec \n[ 5] 3.00-4.00 sec 10.0 MBytes 83.9 Mbits/sec \n[ 5] 4.00-5.00 sec 10.2 MBytes 86.0 Mbits/sec \n[ 5] 5.00-6.00 sec 10.1 MBytes 84.9 Mbits/sec \n[ 5] 6.00-7.00 sec 10.2 MBytes 86.0 Mbits/sec \n[ 5] 7.00-8.00 sec 9.88 MBytes 82.8 Mbits/sec \n[ 5] 8.00-9.00 sec 10.1 MBytes 84.9 Mbits/sec \n[ 5] 9.00-10.00 sec 9.88 MBytes 82.8 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 101 MBytes 84.8 Mbits/sec 1 sender\n[ 5] 0.00-10.00 sec 100 MBytes 84.0 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.132 port 56627 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 10.8 MBytes 90.1 Mbits/sec 0 495 KBytes \n[ 5] 1.00-2.00 sec 8.88 MBytes 74.4 Mbits/sec 0 677 KBytes \n[ 5] 2.00-3.00 sec 8.38 MBytes 70.2 Mbits/sec 0 677 KBytes \n[ 5] 3.00-4.00 sec 7.00 MBytes 58.7 Mbits/sec 0 754 KBytes \n[ 5] 4.00-5.00 sec 8.50 MBytes 71.3 Mbits/sec 0 754 KBytes \n[ 5] 5.00-6.00 sec 7.00 MBytes 58.7 Mbits/sec 0 754 KBytes \n[ 5] 6.00-7.00 sec 8.38 MBytes 70.3 Mbits/sec 0 844 KBytes \n[ 5] 7.00-8.00 sec 7.12 MBytes 59.8 Mbits/sec 0 844 KBytes \n[ 5] 8.00-9.00 sec 8.50 MBytes 71.3 Mbits/sec 0 844 KBytes \n[ 5] 9.00-10.00 sec 7.00 MBytes 58.7 Mbits/sec 0 844 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 81.5 MBytes 68.4 Mbits/sec 0 sender\n[ 5] 0.00-10.04 sec 79.2 MBytes 66.2 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437.0\nRX: 194931 bytes (471 packets)\nTX: 97054 bytes (525 packets)\nsignal: -39 dBm\nrx bitrate: 130.0 MBit/s MCS 15\ntx bitrate: 144.4 MBit/s MCS 15 short GI\n"},{"location":"WifiPerformance/#realtek-8821cu-1","title":"Realtek 8821CU #1","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed RTL8821CU AC 134 Mbits/sec 203 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.131 port 33397 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 10.0 MBytes 83.8 Mbits/sec \n[ 5] 1.00-2.00 sec 14.8 MBytes 124 Mbits/sec \n[ 5] 2.00-3.00 sec 17.0 MBytes 143 Mbits/sec \n[ 5] 3.00-4.00 sec 15.2 MBytes 128 Mbits/sec \n[ 5] 4.00-5.00 sec 15.4 MBytes 129 Mbits/sec \n[ 5] 5.00-6.00 sec 17.5 MBytes 147 Mbits/sec \n[ 5] 6.00-7.00 sec 17.4 MBytes 146 Mbits/sec \n[ 5] 7.00-8.00 sec 17.1 MBytes 144 Mbits/sec \n[ 5] 8.00-9.00 sec 17.5 MBytes 147 Mbits/sec \n[ 5] 9.00-10.00 sec 17.2 MBytes 145 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 160 MBytes 134 Mbits/sec 6 sender\n[ 5] 0.00-10.00 sec 159 MBytes 133 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.131 port 41881 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 25.0 MBytes 209 Mbits/sec 50 286 KBytes \n[ 5] 1.00-2.00 sec 24.9 MBytes 209 Mbits/sec 0 345 KBytes \n[ 5] 2.00-3.00 sec 23.9 MBytes 200 Mbits/sec 0 393 KBytes \n[ 5] 3.00-4.00 sec 24.0 MBytes 201 Mbits/sec 0 424 KBytes \n[ 5] 4.00-5.00 sec 24.0 MBytes 201 Mbits/sec 0 445 KBytes \n[ 5] 5.00-6.00 sec 23.9 MBytes 200 Mbits/sec 0 462 KBytes \n[ 5] 6.00-7.00 sec 24.1 MBytes 202 Mbits/sec 0 474 KBytes \n[ 5] 7.00-8.00 sec 24.8 MBytes 208 Mbits/sec 0 477 KBytes \n[ 5] 8.00-9.00 sec 22.8 MBytes 191 Mbits/sec 0 481 KBytes \n[ 5] 9.00-10.00 sec 24.8 MBytes 207 Mbits/sec 0 488 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 242 MBytes 203 Mbits/sec 50 sender\n[ 5] 0.00-10.02 sec 240 MBytes 201 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 89639 bytes (286 packets)\nTX: 69319 bytes (273 packets)\nsignal: -44 dBm\nrx bitrate: 390.0 MBit/s VHT-MCS 9 80MHz VHT-NSS 1\ntx bitrate: 433.3 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 1\n"},{"location":"WifiPerformance/#realtek-8821cu-2","title":"Realtek 8821CU #2","text":"OS: Armbian v25.5.1, 6.12.28-current-meson64
Chipset Class Average forward speed Average reverse speed RTL8821CU AC 256 Mbits/sec 253 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.150 port 51227 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 27.9 MBytes 234 Mbits/sec \n[ 5] 1.00-2.00 sec 34.1 MBytes 286 Mbits/sec \n[ 5] 2.00-3.00 sec 33.0 MBytes 277 Mbits/sec \n[ 5] 3.00-4.00 sec 31.4 MBytes 263 Mbits/sec \n[ 5] 4.00-5.00 sec 26.1 MBytes 219 Mbits/sec \n[ 5] 5.00-6.00 sec 28.9 MBytes 242 Mbits/sec \n[ 5] 6.00-7.00 sec 30.2 MBytes 254 Mbits/sec \n[ 5] 7.00-8.00 sec 27.9 MBytes 234 Mbits/sec \n[ 5] 8.00-9.00 sec 30.4 MBytes 255 Mbits/sec \n[ 5] 9.00-10.00 sec 32.5 MBytes 273 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 306 MBytes 256 Mbits/sec 138 sender\n[ 5] 0.00-10.00 sec 302 MBytes 254 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.150 port 50725 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 32.8 MBytes 274 Mbits/sec 0 2.22 MBytes \n[ 5] 1.00-2.00 sec 30.9 MBytes 259 Mbits/sec 0 2.22 MBytes \n[ 5] 2.00-3.00 sec 31.0 MBytes 260 Mbits/sec 0 2.22 MBytes \n[ 5] 3.00-4.00 sec 29.5 MBytes 247 Mbits/sec 0 2.96 MBytes \n[ 5] 4.00-5.00 sec 30.2 MBytes 254 Mbits/sec 58 851 KBytes \n[ 5] 5.00-6.00 sec 28.0 MBytes 235 Mbits/sec 154 457 KBytes \n[ 5] 6.00-7.00 sec 29.4 MBytes 246 Mbits/sec 0 512 KBytes \n[ 5] 7.00-8.00 sec 30.6 MBytes 257 Mbits/sec 0 561 KBytes \n[ 5] 8.00-9.00 sec 29.5 MBytes 247 Mbits/sec 0 594 KBytes \n[ 5] 9.00-10.00 sec 29.8 MBytes 249 Mbits/sec 0 619 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 302 MBytes 253 Mbits/sec 212 sender\n[ 5] 0.00-10.01 sec 299 MBytes 250 Mbits/sec receiver\n\niperf Done.\n Text Only\n"},{"location":"WifiPerformance/#realtek-88x2cs","title":"Realtek 88X2CS","text":"OS: Armbian v25.8.1, 6.12.42-current-meson64
Chipset Class Average forward speed Average reverse speed RTL88X2CS AC 104 Mbits/sec 192 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.136 port 46429 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 11.1 MBytes 93.2 Mbits/sec \n[ 5] 1.00-2.00 sec 11.9 MBytes 99.7 Mbits/sec \n[ 5] 2.00-3.00 sec 13.2 MBytes 111 Mbits/sec \n[ 5] 3.00-4.00 sec 13.4 MBytes 112 Mbits/sec \n[ 5] 4.00-5.00 sec 12.4 MBytes 104 Mbits/sec \n[ 5] 5.00-6.00 sec 12.6 MBytes 106 Mbits/sec \n[ 5] 6.00-7.00 sec 12.8 MBytes 107 Mbits/sec \n[ 5] 7.00-8.00 sec 12.2 MBytes 103 Mbits/sec \n[ 5] 8.00-9.00 sec 10.5 MBytes 88.1 Mbits/sec \n[ 5] 9.00-10.00 sec 11.0 MBytes 92.3 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 124 MBytes 104 Mbits/sec 83 sender\n[ 5] 0.00-10.00 sec 121 MBytes 102 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.136 port 57695 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 23.2 MBytes 195 Mbits/sec 0 5.21 MBytes \n[ 5] 1.00-2.00 sec 25.8 MBytes 216 Mbits/sec 0 5.21 MBytes \n[ 5] 2.00-3.00 sec 23.0 MBytes 193 Mbits/sec 0 5.21 MBytes \n[ 5] 3.00-4.00 sec 23.2 MBytes 195 Mbits/sec 0 5.21 MBytes \n[ 5] 4.00-5.00 sec 21.5 MBytes 180 Mbits/sec 0 5.21 MBytes \n[ 5] 5.00-6.00 sec 24.1 MBytes 202 Mbits/sec 0 5.21 MBytes \n[ 5] 6.00-7.00 sec 23.5 MBytes 197 Mbits/sec 61 2.60 MBytes \n[ 5] 7.00-8.00 sec 21.4 MBytes 179 Mbits/sec 64 1.31 MBytes \n[ 5] 8.00-9.00 sec 21.1 MBytes 177 Mbits/sec 92 205 KBytes \n[ 5] 9.00-10.00 sec 21.5 MBytes 180 Mbits/sec 0 321 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 228 MBytes 192 Mbits/sec 217 sender\n[ 5] 0.00-10.01 sec 225 MBytes 189 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 183705 bytes (369 packets)\nTX: 100341 bytes (481 packets)\nsignal: -39 dBm\nrx bitrate: 780.0 MBit/s VHT-MCS 9 80MHz VHT-NSS 2\ntx bitrate: 866.7 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 2\n"},{"location":"WifiPerformance/#ax","title":"AX","text":""},{"location":"WifiPerformance/#ampak-6275p","title":"Ampak 6275P","text":"OS: Armbian v25.8.0-trunk.149, 6.12.33-current-rockchip64
Chipset Class Average forward speed Average reverse speed AP6275P AX 437 Mbits/sec 452 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.149 port 37781 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 43.1 MBytes 361 Mbits/sec \n[ 5] 1.00-2.00 sec 48.1 MBytes 404 Mbits/sec \n[ 5] 2.00-3.00 sec 53.8 MBytes 451 Mbits/sec \n[ 5] 3.00-4.00 sec 52.0 MBytes 437 Mbits/sec \n[ 5] 4.00-5.00 sec 55.8 MBytes 468 Mbits/sec \n[ 5] 5.00-6.00 sec 55.6 MBytes 466 Mbits/sec \n[ 5] 6.00-7.00 sec 54.3 MBytes 455 Mbits/sec \n[ 5] 7.00-8.00 sec 51.0 MBytes 427 Mbits/sec \n[ 5] 8.00-9.00 sec 54.9 MBytes 460 Mbits/sec \n[ 5] 9.00-10.00 sec 50.3 MBytes 422 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 522 MBytes 437 Mbits/sec 310 sender\n[ 5] 0.00-10.00 sec 519 MBytes 435 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.149 port 41501 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 68.0 MBytes 570 Mbits/sec 323 749 KBytes \n[ 5] 1.00-2.00 sec 65.0 MBytes 545 Mbits/sec 1 482 KBytes \n[ 5] 2.00-3.00 sec 58.8 MBytes 493 Mbits/sec 0 635 KBytes \n[ 5] 3.00-4.00 sec 45.0 MBytes 377 Mbits/sec 24 311 KBytes \n[ 5] 4.00-5.00 sec 35.0 MBytes 294 Mbits/sec 3 296 KBytes \n[ 5] 5.00-6.00 sec 22.5 MBytes 189 Mbits/sec 68 249 KBytes \n[ 5] 6.00-7.00 sec 45.0 MBytes 377 Mbits/sec 0 438 KBytes \n[ 5] 7.00-8.00 sec 57.5 MBytes 482 Mbits/sec 0 597 KBytes \n[ 5] 8.00-9.00 sec 68.8 MBytes 577 Mbits/sec 0 745 KBytes \n[ 5] 9.00-10.00 sec 73.8 MBytes 619 Mbits/sec 0 878 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 539 MBytes 452 Mbits/sec 419 sender\n[ 5] 0.00-10.01 sec 537 MBytes 450 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500\nRX: 61458 bytes (126 packets)\nTX: 54154 bytes (196 packets)\nsignal: -33 dBm\nrx bitrate: 1200.9 MBit/s\ntx bitrate: 1200.9 MBit/s\n"},{"location":"WifiPerformance/#comfast-cf953ax","title":"Comfast CF953AX","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed MT7921AU AX 103 Mbits/sec 107 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.148 port 47657 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 12.0 MBytes 101 Mbits/sec \n[ 5] 1.00-2.00 sec 12.5 MBytes 105 Mbits/sec \n[ 5] 2.00-3.00 sec 12.1 MBytes 102 Mbits/sec \n[ 5] 3.00-4.00 sec 11.9 MBytes 99.6 Mbits/sec \n[ 5] 4.00-5.00 sec 12.0 MBytes 101 Mbits/sec \n[ 5] 5.00-6.00 sec 11.8 MBytes 98.6 Mbits/sec \n[ 5] 6.00-7.00 sec 11.8 MBytes 98.6 Mbits/sec \n[ 5] 7.00-8.00 sec 12.4 MBytes 104 Mbits/sec \n[ 5] 8.00-9.00 sec 11.9 MBytes 99.6 Mbits/sec \n[ 5] 9.00-10.00 sec 12.1 MBytes 102 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 123 MBytes 103 Mbits/sec 265 sender\n[ 5] 0.00-10.00 sec 120 MBytes 101 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.148 port 41445 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.01 sec 13.9 MBytes 116 Mbits/sec 0 416 KBytes \n[ 5] 1.01-2.00 sec 12.1 MBytes 102 Mbits/sec 0 580 KBytes \n[ 5] 2.00-3.02 sec 13.1 MBytes 108 Mbits/sec 0 652 KBytes \n[ 5] 3.02-4.01 sec 12.6 MBytes 108 Mbits/sec 0 735 KBytes \n[ 5] 4.01-5.05 sec 14.2 MBytes 114 Mbits/sec 0 782 KBytes \n[ 5] 5.05-6.02 sec 13.8 MBytes 119 Mbits/sec 0 782 KBytes \n[ 5] 6.02-7.01 sec 11.6 MBytes 99.2 Mbits/sec 0 782 KBytes \n[ 5] 7.01-8.06 sec 12.6 MBytes 100 Mbits/sec 0 782 KBytes \n[ 5] 8.06-9.04 sec 10.8 MBytes 92.5 Mbits/sec 0 782 KBytes \n[ 5] 9.04-10.01 sec 12.9 MBytes 111 Mbits/sec 0 782 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 128 MBytes 107 Mbits/sec 0 sender\n[ 5] 0.00-10.01 sec 124 MBytes 104 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 146917 bytes (453 packets)\nTX: 79810 bytes (491 packets)\nsignal: -37 dBm\nrx bitrate: 1200.9 MBit/s 80MHz HE-MCS 11 HE-NSS 2 HE-GI 0 HE-DCM 0\ntx bitrate: 1200.9 MBit/s 80MHz HE-MCS 11 HE-NSS 2 HE-GI 0 HE-DCM 0\n"},{"location":"WifiPerformance/#intel-ax200","title":"Intel AX200","text":"OS: Armbian v25.2.2, 6.12.15-current-rockchip64
Chipset Class Average forward speed Average reverse speed AX200 AX 644 Mbits/sec 485 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.147 port 51665 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 107 MBytes 898 Mbits/sec \n[ 5] 1.00-2.00 sec 107 MBytes 900 Mbits/sec \n[ 5] 2.00-3.00 sec 96.1 MBytes 806 Mbits/sec \n[ 5] 3.00-4.00 sec 70.1 MBytes 588 Mbits/sec \n[ 5] 4.00-5.00 sec 62.9 MBytes 527 Mbits/sec \n[ 5] 5.00-6.00 sec 61.0 MBytes 512 Mbits/sec \n[ 5] 6.00-7.00 sec 77.5 MBytes 650 Mbits/sec \n[ 5] 7.00-8.00 sec 68.4 MBytes 574 Mbits/sec \n[ 5] 8.00-9.00 sec 57.8 MBytes 484 Mbits/sec \n[ 5] 9.00-10.00 sec 56.5 MBytes 474 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 768 MBytes 644 Mbits/sec 434 sender\n[ 5] 0.00-10.00 sec 765 MBytes 641 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.147 port 43967 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 30.1 MBytes 252 Mbits/sec 0 2.58 MBytes \n[ 5] 1.00-2.00 sec 55.5 MBytes 466 Mbits/sec 124 745 KBytes \n[ 5] 2.00-3.00 sec 73.6 MBytes 618 Mbits/sec 50 557 KBytes \n[ 5] 3.00-4.00 sec 81.5 MBytes 684 Mbits/sec 0 740 KBytes \n[ 5] 4.00-5.00 sec 72.5 MBytes 608 Mbits/sec 1 465 KBytes \n[ 5] 5.00-6.00 sec 47.4 MBytes 397 Mbits/sec 0 595 KBytes \n[ 5] 6.00-7.00 sec 71.9 MBytes 603 Mbits/sec 10 397 KBytes \n[ 5] 7.00-8.00 sec 58.2 MBytes 489 Mbits/sec 0 573 KBytes \n[ 5] 8.00-9.00 sec 54.9 MBytes 460 Mbits/sec 24 216 KBytes \n[ 5] 9.00-10.00 sec 32.4 MBytes 271 Mbits/sec 0 375 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 578 MBytes 485 Mbits/sec 209 sender\n[ 5] 0.00-10.01 sec 576 MBytes 482 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 38883 bytes (169 packets)\nTX: 53625 bytes (188 packets)\nsignal: -29 dBm\nrx bitrate: 1200.9 MBit/s 160MHz HE-MCS 11 HE-NSS 1 HE-GI 0 HE-DCM 0\ntx bitrate: 490.0 MBit/s 160MHz HE-MCS 3 HE-NSS 2 HE-GI 2 HE-DCM 0\n"},{"location":"WifiPerformance/#realtek-8852ae","title":"Realtek 8852AE","text":"OS: Armbian v25.8.1, 6.12.42-current-rockchip64
Chipset Class Average forward speed Average reverse speed RTL8852AE AX 541 Mbits/sec 539 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.135 port 44147 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 71.1 MBytes 596 Mbits/sec \n[ 5] 1.00-2.00 sec 73.1 MBytes 613 Mbits/sec \n[ 5] 2.00-3.00 sec 49.2 MBytes 412 Mbits/sec \n[ 5] 3.00-4.00 sec 62.4 MBytes 523 Mbits/sec \n[ 5] 4.00-5.00 sec 69.2 MBytes 581 Mbits/sec \n[ 5] 5.00-6.00 sec 73.1 MBytes 614 Mbits/sec \n[ 5] 6.00-7.00 sec 77.7 MBytes 651 Mbits/sec \n[ 5] 7.00-8.00 sec 75.6 MBytes 634 Mbits/sec \n[ 5] 8.00-9.00 sec 43.7 MBytes 366 Mbits/sec \n[ 5] 9.00-10.00 sec 46.7 MBytes 392 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 645 MBytes 541 Mbits/sec 205 sender\n[ 5] 0.00-10.00 sec 642 MBytes 538 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.135 port 35269 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 91.2 MBytes 765 Mbits/sec 441 2.81 MBytes \n[ 5] 1.00-2.00 sec 88.8 MBytes 744 Mbits/sec 0 2.81 MBytes \n[ 5] 2.00-3.00 sec 82.5 MBytes 692 Mbits/sec 457 757 KBytes \n[ 5] 3.00-4.00 sec 66.2 MBytes 556 Mbits/sec 11 317 KBytes \n[ 5] 4.00-5.00 sec 61.2 MBytes 514 Mbits/sec 0 529 KBytes \n[ 5] 5.00-6.00 sec 53.8 MBytes 451 Mbits/sec 34 240 KBytes \n[ 5] 6.00-7.00 sec 30.0 MBytes 252 Mbits/sec 30 112 KBytes \n[ 5] 7.00-8.00 sec 35.0 MBytes 294 Mbits/sec 0 337 KBytes \n[ 5] 8.00-9.00 sec 63.8 MBytes 535 Mbits/sec 0 544 KBytes \n[ 5] 9.00-10.00 sec 70.0 MBytes 585 Mbits/sec 0 707 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 642 MBytes 539 Mbits/sec 973 sender\n[ 5] 0.00-10.01 sec 640 MBytes 536 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500\nRX: 129681 bytes (490 packets)\nTX: 60051 bytes (222 packets)\nsignal: -30 dBm\nrx bitrate: 1200.9 MBit/s 80MHz HE-MCS 11 HE-NSS 2 HE-GI 0 HE-DCM 0\ntx bitrate: 1200.9 MBit/s 80MHz HE-MCS 11 HE-NSS 2 HE-GI 0 HE-DCM 0\n"},{"location":"WifiPerformance/#realtek-8852bs","title":"Realtek 8852BS","text":"OS: Armbian v25.8.1, 6.6.99-current-spacemit
Chipset Class Average forward speed Average reverse speed RTL8852BS AX 389 Mbits/sec 365 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.134 port 45169 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 41.9 MBytes 351 Mbits/sec \n[ 5] 1.00-2.00 sec 53.0 MBytes 445 Mbits/sec \n[ 5] 2.00-3.00 sec 52.2 MBytes 438 Mbits/sec \n[ 5] 3.00-4.00 sec 51.5 MBytes 432 Mbits/sec \n[ 5] 4.00-5.00 sec 47.8 MBytes 401 Mbits/sec \n[ 5] 5.00-6.00 sec 40.9 MBytes 343 Mbits/sec \n[ 5] 6.00-7.00 sec 31.5 MBytes 264 Mbits/sec \n[ 5] 7.00-8.00 sec 45.2 MBytes 380 Mbits/sec \n[ 5] 8.00-9.00 sec 48.5 MBytes 407 Mbits/sec \n[ 5] 9.00-10.00 sec 48.5 MBytes 407 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 464 MBytes 389 Mbits/sec 238 sender\n[ 5] 0.00-10.00 sec 461 MBytes 387 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.134 port 56765 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 32.9 MBytes 275 Mbits/sec 12 447 KBytes \n[ 5] 1.00-2.00 sec 42.4 MBytes 355 Mbits/sec 0 509 KBytes \n[ 5] 2.00-3.00 sec 41.8 MBytes 350 Mbits/sec 0 568 KBytes \n[ 5] 3.00-4.00 sec 41.4 MBytes 347 Mbits/sec 0 624 KBytes \n[ 5] 4.00-5.00 sec 46.5 MBytes 390 Mbits/sec 0 676 KBytes \n[ 5] 5.00-6.00 sec 43.6 MBytes 366 Mbits/sec 0 724 KBytes \n[ 5] 6.00-7.00 sec 47.4 MBytes 397 Mbits/sec 0 772 KBytes \n[ 5] 7.00-8.00 sec 47.4 MBytes 397 Mbits/sec 0 817 KBytes \n[ 5] 8.00-9.00 sec 47.2 MBytes 396 Mbits/sec 0 854 KBytes \n[ 5] 9.00-10.00 sec 44.6 MBytes 374 Mbits/sec 0 889 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 436 MBytes 365 Mbits/sec 12 sender\n[ 5] 0.00-10.01 sec 434 MBytes 363 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 50231 bytes (137 packets)\nTX: 51503 bytes (217 packets)\n"},{"location":"WifiPerformance/#n","title":"N","text":""},{"location":"WifiPerformance/#alfa-rt3572","title":"Alfa RT3572","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed RT3572 N 85.5 Mbits/sec 43.9 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.146 port 55069 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 8.75 MBytes 73.3 Mbits/sec \n[ 5] 1.00-2.00 sec 9.12 MBytes 76.6 Mbits/sec \n[ 5] 2.00-3.00 sec 9.00 MBytes 75.4 Mbits/sec \n[ 5] 3.00-4.00 sec 9.75 MBytes 81.8 Mbits/sec \n[ 5] 4.00-5.00 sec 8.75 MBytes 73.4 Mbits/sec \n[ 5] 5.00-6.00 sec 10.0 MBytes 83.9 Mbits/sec \n[ 5] 6.00-7.00 sec 10.8 MBytes 90.2 Mbits/sec \n[ 5] 7.00-8.00 sec 11.0 MBytes 92.3 Mbits/sec \n[ 5] 8.00-9.00 sec 11.6 MBytes 97.4 Mbits/sec \n[ 5] 9.00-10.00 sec 9.62 MBytes 80.8 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 102 MBytes 85.5 Mbits/sec 40 sender\n[ 5] 0.00-10.00 sec 98.4 MBytes 82.5 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.146 port 42775 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 7.00 MBytes 58.7 Mbits/sec 0 192 KBytes \n[ 5] 1.00-2.00 sec 5.50 MBytes 46.1 Mbits/sec 0 214 KBytes \n[ 5] 2.00-3.00 sec 4.88 MBytes 40.9 Mbits/sec 0 214 KBytes \n[ 5] 3.00-4.00 sec 5.25 MBytes 44.0 Mbits/sec 1 165 KBytes \n[ 5] 4.00-5.00 sec 5.00 MBytes 41.9 Mbits/sec 0 180 KBytes \n[ 5] 5.00-6.00 sec 5.12 MBytes 43.0 Mbits/sec 0 198 KBytes \n[ 5] 6.00-7.00 sec 4.75 MBytes 39.8 Mbits/sec 0 198 KBytes \n[ 5] 7.00-8.00 sec 5.25 MBytes 44.0 Mbits/sec 0 212 KBytes \n[ 5] 8.00-9.00 sec 4.88 MBytes 40.9 Mbits/sec 0 212 KBytes \n[ 5] 9.00-10.00 sec 4.75 MBytes 39.8 Mbits/sec 0 212 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 52.4 MBytes 43.9 Mbits/sec 1 sender\n[ 5] 0.00-10.00 sec 51.5 MBytes 43.2 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 190803 bytes (598 packets)\nTX: 94368 bytes (547 packets)\nsignal: -17 dBm\nrx bitrate: 150.0 MBit/s MCS 7 40MHz short GI\ntx bitrate: 300.0 MBit/s MCS 15 40MHz short GI\n"},{"location":"WifiPerformance/#atheros-ar9271","title":"Atheros AR9271","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed AR9271 N 50.8 Mbits/sec 44.7 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.129 port 38349 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 5.62 MBytes 47.1 Mbits/sec \n[ 5] 1.00-2.00 sec 5.50 MBytes 46.1 Mbits/sec \n[ 5] 2.00-3.00 sec 5.75 MBytes 48.2 Mbits/sec \n[ 5] 3.00-4.00 sec 5.62 MBytes 47.2 Mbits/sec \n[ 5] 4.00-5.00 sec 5.62 MBytes 47.2 Mbits/sec \n[ 5] 5.00-6.00 sec 5.75 MBytes 48.2 Mbits/sec \n[ 5] 6.00-7.00 sec 5.88 MBytes 49.3 Mbits/sec \n[ 5] 7.00-8.00 sec 5.62 MBytes 47.2 Mbits/sec \n[ 5] 8.00-9.00 sec 5.62 MBytes 47.2 Mbits/sec \n[ 5] 9.00-10.00 sec 5.75 MBytes 48.2 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 60.6 MBytes 50.8 Mbits/sec 8 sender\n[ 5] 0.00-10.00 sec 56.8 MBytes 47.6 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.129 port 51923 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 6.25 MBytes 52.4 Mbits/sec 0 208 KBytes \n[ 5] 1.00-2.00 sec 5.00 MBytes 41.9 Mbits/sec 0 230 KBytes \n[ 5] 2.00-3.00 sec 5.62 MBytes 47.2 Mbits/sec 0 250 KBytes \n[ 5] 3.00-4.00 sec 5.62 MBytes 47.2 Mbits/sec 0 263 KBytes \n[ 5] 4.00-5.00 sec 5.00 MBytes 41.9 Mbits/sec 0 263 KBytes \n[ 5] 5.00-6.00 sec 5.00 MBytes 41.9 Mbits/sec 0 263 KBytes \n[ 5] 6.00-7.00 sec 5.12 MBytes 43.0 Mbits/sec 0 263 KBytes \n[ 5] 7.00-8.00 sec 5.50 MBytes 46.1 Mbits/sec 0 263 KBytes \n[ 5] 8.00-9.00 sec 5.12 MBytes 43.0 Mbits/sec 0 263 KBytes \n[ 5] 9.00-10.00 sec 5.00 MBytes 41.9 Mbits/sec 0 263 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 53.2 MBytes 44.7 Mbits/sec 0 sender\n[ 5] 0.00-10.02 sec 52.2 MBytes 43.7 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437.0\nRX: 102557 bytes (363 packets)\nTX: 49880 bytes (208 packets)\nsignal: -52 dBm\nrx bitrate: 72.2 MBit/s MCS 7 short GI\ntx bitrate: 72.2 MBit/s MCS 7 short GI\n"},{"location":"WifiPerformance/#broadcom-43430","title":"Broadcom 43430","text":"OS: Armbian v25.5.1, 6.12.23-current-sunxi
Chipset Class Average forward speed Average reverse speed BCM43430 N 51.2 Mbits/sec 37.2 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.145 port 37887 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 5.40 MBytes 45.3 Mbits/sec \n[ 5] 1.00-2.00 sec 6.04 MBytes 50.7 Mbits/sec \n[ 5] 2.00-3.00 sec 5.94 MBytes 49.8 Mbits/sec \n[ 5] 3.00-4.00 sec 5.99 MBytes 50.2 Mbits/sec \n[ 5] 4.00-5.00 sec 6.07 MBytes 50.9 Mbits/sec \n[ 5] 5.00-6.00 sec 5.94 MBytes 49.8 Mbits/sec \n[ 5] 6.00-7.00 sec 6.08 MBytes 51.0 Mbits/sec \n[ 5] 7.00-8.00 sec 5.54 MBytes 46.5 Mbits/sec \n[ 5] 8.00-9.00 sec 5.44 MBytes 45.6 Mbits/sec \n[ 5] 9.00-10.00 sec 5.81 MBytes 48.7 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.03 sec 61.2 MBytes 51.2 Mbits/sec 131 sender\n[ 5] 0.00-10.00 sec 58.2 MBytes 48.9 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.145 port 58533 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 5.06 MBytes 42.5 Mbits/sec 0 181 KBytes \n[ 5] 1.00-2.00 sec 4.54 MBytes 38.1 Mbits/sec 0 198 KBytes \n[ 5] 2.00-3.00 sec 4.47 MBytes 37.5 Mbits/sec 0 198 KBytes \n[ 5] 3.00-4.00 sec 4.47 MBytes 37.5 Mbits/sec 0 198 KBytes \n[ 5] 4.00-5.00 sec 4.47 MBytes 37.5 Mbits/sec 0 208 KBytes \n[ 5] 5.00-6.00 sec 4.29 MBytes 36.0 Mbits/sec 0 208 KBytes \n[ 5] 6.00-7.00 sec 3.60 MBytes 30.2 Mbits/sec 0 239 KBytes \n[ 5] 7.00-8.00 sec 4.41 MBytes 37.0 Mbits/sec 0 239 KBytes \n[ 5] 8.00-9.00 sec 4.60 MBytes 38.6 Mbits/sec 1 199 KBytes \n[ 5] 9.00-10.00 sec 4.47 MBytes 37.5 Mbits/sec 0 216 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 44.4 MBytes 37.2 Mbits/sec 1 sender\n[ 5] 0.00-10.02 sec 43.8 MBytes 36.6 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437\nRX: 83933 bytes (269 packets)\nTX: 65367 bytes (297 packets)\nsignal: -54 dBm\nrx bitrate: 72.2 MBit/s\ntx bitrate: 72.2 MBit/s\n"},{"location":"WifiPerformance/#broadcom-43455","title":"Broadcom 43455","text":"OS: Armbian v25.2.3, 6.12.22-current-x86
Chipset Class Average forward speed Average reverse speed BCM43455 N 47.2 Mbits/sec 50.8 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.144 port 37015 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 5.90 MBytes 49.4 Mbits/sec \n[ 5] 1.00-2.00 sec 5.23 MBytes 43.9 Mbits/sec \n[ 5] 2.00-3.00 sec 5.06 MBytes 42.4 Mbits/sec \n[ 5] 3.00-4.00 sec 5.81 MBytes 48.7 Mbits/sec \n[ 5] 4.00-5.00 sec 6.46 MBytes 54.2 Mbits/sec \n[ 5] 5.00-6.00 sec 5.30 MBytes 44.4 Mbits/sec \n[ 5] 6.00-7.00 sec 5.51 MBytes 46.2 Mbits/sec \n[ 5] 7.00-8.00 sec 4.28 MBytes 35.9 Mbits/sec \n[ 5] 8.00-9.00 sec 6.34 MBytes 53.2 Mbits/sec \n[ 5] 9.00-10.00 sec 4.98 MBytes 41.8 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.19 sec 57.4 MBytes 47.2 Mbits/sec 291 sender\n[ 5] 0.00-10.00 sec 54.9 MBytes 46.0 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.144 port 33731 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 6.55 MBytes 54.9 Mbits/sec 0 199 KBytes \n[ 5] 1.00-2.00 sec 6.21 MBytes 52.2 Mbits/sec 0 243 KBytes \n[ 5] 2.00-3.00 sec 6.21 MBytes 52.1 Mbits/sec 0 276 KBytes \n[ 5] 3.00-4.00 sec 6.21 MBytes 52.1 Mbits/sec 0 294 KBytes \n[ 5] 4.00-5.00 sec 5.59 MBytes 46.9 Mbits/sec 0 294 KBytes \n[ 5] 5.00-6.00 sec 5.72 MBytes 47.9 Mbits/sec 0 294 KBytes \n[ 5] 6.00-7.00 sec 6.28 MBytes 52.7 Mbits/sec 0 311 KBytes \n[ 5] 7.00-8.00 sec 5.84 MBytes 48.9 Mbits/sec 0 311 KBytes \n[ 5] 8.00-9.00 sec 5.59 MBytes 47.0 Mbits/sec 0 311 KBytes \n[ 5] 9.00-10.00 sec 6.40 MBytes 53.7 Mbits/sec 0 311 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 60.6 MBytes 50.8 Mbits/sec 0 sender\n[ 5] 0.00-10.01 sec 59.1 MBytes 49.5 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500\nRX: 53511 bytes (137 packets)\nTX: 50848 bytes (242 packets)\nsignal: -45 dBm\nrx bitrate: 433.3 MBit/s\ntx bitrate: 433.3 MBit/s\n"},{"location":"WifiPerformance/#ralink-rt5370","title":"Ralink RT5370","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed RT5370 N 46.5 Mbits/sec 38.4 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.143 port 43847 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 4.62 MBytes 38.8 Mbits/sec \n[ 5] 1.00-2.00 sec 5.12 MBytes 43.0 Mbits/sec \n[ 5] 2.00-3.00 sec 5.38 MBytes 45.1 Mbits/sec \n[ 5] 3.00-4.00 sec 5.38 MBytes 45.1 Mbits/sec \n[ 5] 4.00-5.00 sec 5.25 MBytes 44.0 Mbits/sec \n[ 5] 5.00-6.00 sec 5.38 MBytes 45.1 Mbits/sec \n[ 5] 6.00-7.00 sec 5.38 MBytes 45.1 Mbits/sec \n[ 5] 7.00-8.00 sec 5.38 MBytes 45.1 Mbits/sec \n[ 5] 8.00-9.00 sec 5.50 MBytes 46.1 Mbits/sec \n[ 5] 9.00-10.00 sec 5.62 MBytes 47.2 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.02 sec 55.5 MBytes 46.5 Mbits/sec 0 sender\n[ 5] 0.00-10.00 sec 53.0 MBytes 44.5 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.143 port 41709 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 5.75 MBytes 48.2 Mbits/sec 0 264 KBytes \n[ 5] 1.00-2.00 sec 5.00 MBytes 41.9 Mbits/sec 0 419 KBytes \n[ 5] 2.00-3.00 sec 4.88 MBytes 40.9 Mbits/sec 0 455 KBytes \n[ 5] 3.00-4.00 sec 4.25 MBytes 35.7 Mbits/sec 0 488 KBytes \n[ 5] 4.00-5.00 sec 4.00 MBytes 33.5 Mbits/sec 0 488 KBytes \n[ 5] 5.00-6.00 sec 4.50 MBytes 37.8 Mbits/sec 0 550 KBytes \n[ 5] 6.00-7.00 sec 3.75 MBytes 31.5 Mbits/sec 0 550 KBytes \n[ 5] 7.00-8.00 sec 5.62 MBytes 47.2 Mbits/sec 0 550 KBytes \n[ 5] 8.00-9.00 sec 4.50 MBytes 37.7 Mbits/sec 0 550 KBytes \n[ 5] 9.00-10.00 sec 3.50 MBytes 29.3 Mbits/sec 0 550 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 45.8 MBytes 38.4 Mbits/sec 0 sender\n[ 5] 0.00-10.01 sec 43.6 MBytes 36.6 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437.0\nRX: 80744 bytes (339 packets)\nTX: 55518 bytes (210 packets)\nsignal: -33 dBm\nrx bitrate: 72.2 MBit/s MCS 7 short GI\ntx bitrate: 72.2 MBit/s MCS 7 short GI\n"},{"location":"WifiPerformance/#ralink-rt5572","title":"Ralink RT5572","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed RT5572 N 65.1 Mbits/sec 49.0 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.142 port 57105 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 6.12 MBytes 51.3 Mbits/sec \n[ 5] 1.00-2.00 sec 7.38 MBytes 61.9 Mbits/sec \n[ 5] 2.00-3.00 sec 9.38 MBytes 78.6 Mbits/sec \n[ 5] 3.00-4.00 sec 6.62 MBytes 55.5 Mbits/sec \n[ 5] 4.00-5.00 sec 8.00 MBytes 67.0 Mbits/sec \n[ 5] 5.00-6.00 sec 6.25 MBytes 52.5 Mbits/sec \n[ 5] 6.00-7.00 sec 9.25 MBytes 77.5 Mbits/sec \n[ 5] 7.00-8.00 sec 7.50 MBytes 62.9 Mbits/sec \n[ 5] 8.00-9.00 sec 7.25 MBytes 60.8 Mbits/sec \n[ 5] 9.00-10.00 sec 7.88 MBytes 66.1 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 77.6 MBytes 65.1 Mbits/sec 1 sender\n[ 5] 0.00-10.00 sec 75.6 MBytes 63.4 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.142 port 60063 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 6.50 MBytes 54.5 Mbits/sec 0 191 KBytes \n[ 5] 1.00-2.00 sec 6.00 MBytes 50.3 Mbits/sec 0 199 KBytes \n[ 5] 2.00-3.00 sec 5.75 MBytes 48.2 Mbits/sec 0 199 KBytes \n[ 5] 3.00-4.00 sec 5.75 MBytes 48.2 Mbits/sec 0 206 KBytes \n[ 5] 4.00-5.00 sec 5.75 MBytes 48.3 Mbits/sec 0 206 KBytes \n[ 5] 5.00-6.00 sec 5.25 MBytes 44.1 Mbits/sec 0 206 KBytes \n[ 5] 6.00-7.00 sec 5.75 MBytes 48.2 Mbits/sec 0 225 KBytes \n[ 5] 7.00-8.00 sec 5.88 MBytes 49.3 Mbits/sec 0 225 KBytes \n[ 5] 8.00-9.00 sec 6.12 MBytes 51.4 Mbits/sec 0 293 KBytes \n[ 5] 9.00-10.00 sec 5.62 MBytes 47.1 Mbits/sec 0 293 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 58.4 MBytes 49.0 Mbits/sec 0 sender\n[ 5] 0.00-10.00 sec 56.8 MBytes 47.6 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500.0\nRX: 96933 bytes (406 packets)\nTX: 59777 bytes (286 packets)\nsignal: -28 dBm\nrx bitrate: 180.0 MBit/s MCS 12 40MHz short GI\ntx bitrate: 300.0 MBit/s MCS 15 40MHz short GI\n"},{"location":"WifiPerformance/#realtek-8188cus","title":"Realtek 8188CUS","text":"OS: Armbian v25.11.0-trunk.49, 6.12.42-current-x86
Chipset Class Average forward speed Average reverse speed RTL8192CU N 19.2 Mbits/sec 37.8 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.141 port 46113 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 1.75 MBytes 14.7 Mbits/sec \n[ 5] 1.00-2.00 sec 2.00 MBytes 16.8 Mbits/sec \n[ 5] 2.00-3.00 sec 2.12 MBytes 17.8 Mbits/sec \n[ 5] 3.00-4.00 sec 2.12 MBytes 17.8 Mbits/sec \n[ 5] 4.00-5.00 sec 2.00 MBytes 16.8 Mbits/sec \n[ 5] 5.00-6.00 sec 1.88 MBytes 15.7 Mbits/sec \n[ 5] 6.00-7.00 sec 2.00 MBytes 16.8 Mbits/sec \n[ 5] 7.00-8.00 sec 2.00 MBytes 16.8 Mbits/sec \n[ 5] 8.00-9.00 sec 2.00 MBytes 16.8 Mbits/sec \n[ 5] 9.00-10.00 sec 1.75 MBytes 14.7 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 22.9 MBytes 19.2 Mbits/sec 0 sender\n[ 5] 0.00-10.00 sec 19.6 MBytes 16.5 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.141 port 58385 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 4.12 MBytes 34.6 Mbits/sec 0 205 KBytes \n[ 5] 1.00-2.00 sec 4.38 MBytes 36.7 Mbits/sec 0 328 KBytes \n[ 5] 2.00-3.00 sec 3.88 MBytes 32.5 Mbits/sec 0 413 KBytes \n[ 5] 3.00-4.00 sec 5.12 MBytes 43.0 Mbits/sec 0 471 KBytes \n[ 5] 4.00-5.00 sec 4.00 MBytes 33.6 Mbits/sec 0 471 KBytes \n[ 5] 5.00-6.00 sec 5.00 MBytes 41.9 Mbits/sec 5 365 KBytes \n[ 5] 6.00-7.00 sec 5.00 MBytes 41.9 Mbits/sec 0 407 KBytes \n[ 5] 7.00-8.00 sec 4.75 MBytes 39.8 Mbits/sec 0 438 KBytes \n[ 5] 8.00-9.00 sec 4.88 MBytes 40.9 Mbits/sec 0 458 KBytes \n[ 5] 9.00-10.00 sec 4.00 MBytes 33.5 Mbits/sec 0 458 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 45.1 MBytes 37.8 Mbits/sec 5 sender\n[ 5] 0.00-10.02 sec 43.1 MBytes 36.1 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437.0\nRX: 91384 bytes (324 packets)\nTX: 61293 bytes (226 packets)\nsignal: -40 dBm\nrx bitrate: 52.0 MBit/s MCS 5\ntx bitrate: 72.2 MBit/s MCS 7 short GI\n"},{"location":"WifiPerformance/#realtek-8723bs","title":"Realtek 8723BS","text":"OS: Armbian v25.2.1, 6.12.13-current-rockchip
Chipset Class Average forward speed Average reverse speed RTL8723BS N 29.4 Mbits/sec 22.7 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.140 port 57017 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 4.04 MBytes 33.9 Mbits/sec \n[ 5] 1.00-2.00 sec 3.47 MBytes 29.1 Mbits/sec \n[ 5] 2.00-3.00 sec 2.18 MBytes 18.3 Mbits/sec \n[ 5] 3.00-4.00 sec 3.95 MBytes 33.2 Mbits/sec \n[ 5] 4.00-5.00 sec 3.27 MBytes 27.5 Mbits/sec \n[ 5] 5.00-6.00 sec 2.61 MBytes 21.9 Mbits/sec \n[ 5] 6.00-7.00 sec 3.75 MBytes 31.5 Mbits/sec \n[ 5] 7.00-8.00 sec 3.75 MBytes 31.5 Mbits/sec \n[ 5] 8.00-9.00 sec 831 KBytes 6.81 Mbits/sec \n[ 5] 9.00-10.00 sec 4.00 MBytes 33.6 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 35.1 MBytes 29.4 Mbits/sec 47 sender\n[ 5] 0.00-10.00 sec 31.8 MBytes 26.7 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.140 port 55955 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 4.91 MBytes 41.2 Mbits/sec 0 263 KBytes \n[ 5] 1.00-2.00 sec 3.73 MBytes 31.3 Mbits/sec 0 443 KBytes \n[ 5] 2.00-3.00 sec 2.98 MBytes 25.0 Mbits/sec 0 510 KBytes \n[ 5] 3.00-4.00 sec 2.67 MBytes 22.4 Mbits/sec 0 612 KBytes \n[ 5] 4.00-5.00 sec 2.11 MBytes 17.7 Mbits/sec 0 716 KBytes \n[ 5] 5.00-6.00 sec 2.42 MBytes 20.3 Mbits/sec 0 778 KBytes \n[ 5] 6.00-7.00 sec 3.60 MBytes 30.2 Mbits/sec 0 778 KBytes \n[ 5] 7.00-8.00 sec 1.74 MBytes 14.6 Mbits/sec 0 847 KBytes \n[ 5] 8.00-9.00 sec 1.86 MBytes 15.6 Mbits/sec 0 872 KBytes \n[ 5] 9.00-10.00 sec 1018 KBytes 8.34 Mbits/sec 0 921 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 27.0 MBytes 22.7 Mbits/sec 0 sender\n[ 5] 0.00-10.01 sec 26.0 MBytes 21.8 Mbits/sec receiver\n\niperf Done.\n Text Only\n"},{"location":"WifiPerformance/#uwe-5622","title":"UWE 5622","text":"OS: Armbian v25.8.0-trunk.154, 6.12.30-current-sunxi64
Chipset Class Average forward speed Average reverse speed UWE5622 N 134 Mbits/sec 137 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.138 port 39627 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 15.4 MBytes 129 Mbits/sec \n[ 5] 1.00-2.00 sec 15.7 MBytes 132 Mbits/sec \n[ 5] 2.00-3.00 sec 16.4 MBytes 137 Mbits/sec \n[ 5] 3.00-4.00 sec 16.6 MBytes 139 Mbits/sec \n[ 5] 4.00-5.00 sec 13.7 MBytes 115 Mbits/sec \n[ 5] 5.00-6.00 sec 14.8 MBytes 124 Mbits/sec \n[ 5] 6.00-7.00 sec 16.0 MBytes 134 Mbits/sec \n[ 5] 7.00-8.00 sec 16.3 MBytes 137 Mbits/sec \n[ 5] 8.00-9.00 sec 16.2 MBytes 136 Mbits/sec \n[ 5] 9.00-10.00 sec 16.6 MBytes 140 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.01 sec 160 MBytes 134 Mbits/sec 116 sender\n[ 5] 0.00-10.00 sec 158 MBytes 132 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.138 port 42441 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 18.1 MBytes 152 Mbits/sec 0 362 KBytes \n[ 5] 1.00-2.00 sec 16.6 MBytes 139 Mbits/sec 0 362 KBytes \n[ 5] 2.00-3.00 sec 16.6 MBytes 139 Mbits/sec 0 362 KBytes \n[ 5] 3.00-4.00 sec 15.9 MBytes 133 Mbits/sec 0 362 KBytes \n[ 5] 4.00-5.00 sec 16.7 MBytes 140 Mbits/sec 0 362 KBytes \n[ 5] 5.00-6.00 sec 16.6 MBytes 139 Mbits/sec 0 362 KBytes \n[ 5] 6.00-7.00 sec 16.6 MBytes 139 Mbits/sec 0 362 KBytes \n[ 5] 7.00-8.00 sec 16.1 MBytes 135 Mbits/sec 0 362 KBytes \n[ 5] 8.00-9.00 sec 16.0 MBytes 134 Mbits/sec 12 209 KBytes \n[ 5] 9.00-10.00 sec 14.2 MBytes 119 Mbits/sec 7 129 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 163 MBytes 137 Mbits/sec 19 sender\n[ 5] 0.00-10.01 sec 162 MBytes 136 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 5500\nRX: 67614130 bytes (64446 packets)\n"},{"location":"WifiPerformance/#xradio-xr819","title":"Xradio XR819","text":"OS: Armbian v25.5.1, 6.16.0-edge-sunxi
Chipset Class Average forward speed Average reverse speed XR819 N 8.01 Mbits/sec 5.98 Mbits/sec Forward mode (client to server)Reverse mode (server to client)Wireless link info Text OnlyConnecting to host 10.0.60.10, port 5201\nReverse mode, remote host 10.0.60.10 is sending\n[ 5] local 10.0.50.130 port 59335 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate\n[ 5] 0.00-1.00 sec 624 KBytes 5.11 Mbits/sec \n[ 5] 1.00-2.00 sec 700 KBytes 5.73 Mbits/sec \n[ 5] 2.00-3.00 sec 716 KBytes 5.86 Mbits/sec \n[ 5] 3.00-4.00 sec 687 KBytes 5.63 Mbits/sec \n[ 5] 4.00-5.00 sec 676 KBytes 5.54 Mbits/sec \n[ 5] 5.00-6.00 sec 701 KBytes 5.75 Mbits/sec \n[ 5] 6.00-7.00 sec 761 KBytes 6.23 Mbits/sec \n[ 5] 7.00-8.00 sec 676 KBytes 5.54 Mbits/sec \n[ 5] 8.00-9.00 sec 725 KBytes 5.94 Mbits/sec \n[ 5] 9.00-10.00 sec 663 KBytes 5.43 Mbits/sec \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.07 sec 9.62 MBytes 8.01 Mbits/sec 0 sender\n[ 5] 0.00-10.00 sec 6.77 MBytes 5.68 Mbits/sec receiver\n\niperf Done.\n Text OnlyConnecting to host 10.0.60.10, port 5201\n[ 5] local 10.0.50.130 port 59255 connected to 10.0.60.10 port 5201\n[ ID] Interval Transfer Bitrate Retr Cwnd\n[ 5] 0.00-1.00 sec 556 KBytes 4.55 Mbits/sec 2 22.6 KBytes \n[ 5] 1.00-2.00 sec 390 KBytes 3.20 Mbits/sec 1 21.2 KBytes \n[ 5] 2.00-3.00 sec 539 KBytes 4.41 Mbits/sec 0 32.5 KBytes \n[ 5] 3.00-4.00 sec 694 KBytes 5.69 Mbits/sec 0 39.6 KBytes \n[ 5] 4.00-5.00 sec 769 KBytes 6.30 Mbits/sec 0 48.1 KBytes \n[ 5] 5.00-6.00 sec 837 KBytes 6.86 Mbits/sec 0 53.7 KBytes \n[ 5] 6.00-7.00 sec 816 KBytes 6.68 Mbits/sec 1 42.4 KBytes \n[ 5] 7.00-8.00 sec 837 KBytes 6.86 Mbits/sec 0 50.9 KBytes \n[ 5] 8.00-9.00 sec 987 KBytes 8.09 Mbits/sec 0 55.1 KBytes \n[ 5] 9.00-10.00 sec 880 KBytes 7.20 Mbits/sec 0 55.1 KBytes \n- - - - - - - - - - - - - - - - - - - - - - - - -\n[ ID] Interval Transfer Bitrate Retr\n[ 5] 0.00-10.00 sec 7.13 MBytes 5.98 Mbits/sec 4 sender\n[ 5] 0.00-10.04 sec 7.00 MBytes 5.85 Mbits/sec receiver\n\niperf Done.\n Text Onlyfreq: 2437\nRX: 51356 bytes (125 packets)\nTX: 59397 bytes (269 packets)\nsignal: -38 dBm\nrx bitrate: 9.0 MBit/s\ntx bitrate: 58.5 MBit/s MCS 6\n"},{"location":"WifiPerformance/#failed-devices","title":"Failed Devices","text":"Commercial Name Chip Class AIC8800 AIC8800 AX BrosTrend 1800 RTL8852AU AX Mediatek MT7925 MT7925 AX Mediatek MT7925E #1 MT7925E AX Mediatek MT7925E #2 MT7925E AX Ralink MT7601U MT7601U N Realtek 8188EU RTL8192CU N Realtek 8811AU RTL8812AU AC Realtek 8812AU RTL8812AU AC Realtek 8814AU RTL8814AU AC Realtek 8852BE RTL8852BE AX Realtek RT2870 RTL2870 N"},{"location":"WifiPerformance/#contribute","title":"Contribute","text":"This guide provides step-by-step instructions to add a new device (SBC SDIO, PCI or USB adapter) to the wireless testing infrastructure.
"},{"location":"WifiPerformance/#1-prepare-the-host-machine","title":"1. Prepare the Host Machine","text":"sudo hostnamectl set-hostname rtl3070\n"},{"location":"WifiPerformance/#2-identify-network-interfaces","title":"2. Identify Network Interfaces","text":"ip link or iw dev to list available interfaces.wlan0, wlxMAC, etc.).Warning
This step is only necessary if your network device does not have a predictable interface name.
wl<MAC> to avoid interface conflicts./etc/udev/rules.d/70-persistent-net.rules:SUBSYSTEM==\"net\", ACTION==\"add\", ATTR{address}==\"xx:xx:xx:xx:xx:xx\", NAME=\"wl<MAC>\"\n"},{"location":"WifiPerformance/#4-get-vpn-access","title":"4. Get VPN access","text":"The TAILSCALE_AUTH_KEY and access credentials for NetBox must be provided by the Armbian administration team. For assistance, please contact us via https://www.armbian.com/contact/.
ci) with sudo privilegesiperf3 for network performance testing#!/bin/bash\n\nset -e\n\nUSERNAME=\"ci\"\nKEY_URL=\"https://github.armbian.com/ci.asc\"\nTAILSCALE_AUTH_KEY=\"tskey-auth-kXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"\n\necho \"[+] Creating user '$USERNAME' without password\"\nuseradd -m -s /bin/bash \"$USERNAME\"\npasswd -d \"$USERNAME\"\nusermod -aG sudo \"$USERNAME\"\n\necho \"[+] Setting up SSH key from $KEY_URL\"\nSSH_DIR=\"/home/$USERNAME/.ssh\"\nmkdir -p \"$SSH_DIR\"\ncurl -fsSL \"$KEY_URL\" -o \"$SSH_DIR/authorized_keys\"\nchmod 700 \"$SSH_DIR\"\nchmod 600 \"$SSH_DIR/authorized_keys\"\nchown -R \"$USERNAME:$USERNAME\" \"$SSH_DIR\"\n\necho \"[+] Disabling password authentication in SSH config\"\nsed -i 's/^#*\\s*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config\nsed -i 's/^#*\\s*PermitEmptyPasswords.*/PermitEmptyPasswords no/' /etc/ssh/sshd_config\nsystemctl restart ssh\n\necho \"[+] Installing Tailscale\"\ncurl -fsSL https://tailscale.com/install.sh | sh\n\necho \"[+] Bringing up Tailscale with provided auth key\"\ntailscale up --auth-key=\"$TAILSCALE_AUTH_KEY\"\n\necho \"[+] Installing iperf3 (non-interactive, no daemon)\"\nexport DEBIAN_FRONTEND=noninteractive\napt-get update -qq\napt-get install -yqq iperf3\n\necho \"[\u2714] Setup complete. User '$USERNAME' added, SSH key installed, Tailscale connected.\"\n"},{"location":"WifiPerformance/#6-register-your-location","title":"6. Register Your Location","text":"Access: https://netbox.armbian.com/dcim/sites/
Warning
Make sure to check if site is not already define to not clutter database!
Update Relevant InformationYour SSIDIP address that runs iperf3 server and can be accessible from wireless clientAdd new device type
Relevant dataWarning
Skip this step if WiFi SoC already exists in database.
"},{"location":"WifiPerformance/#8-register-device","title":"8. Register Device","text":"Relevant datatailscale0virtualThen select interface tailscale0 and add IP address. Copy IP address from your device (example: 100.115.0.58/32) and select: Make this the primary IP for the device/VM
Run the Wireless Performance Autotest workflow to verify whether the newly added device has been included in the test pool.
"},{"location":"WifiPerformance/#other-resources","title":"Other resources","text":"First try to install application manually. If it works on Debian or Ubuntu, proceed. In this example we will be using test.
git clone https://github.com/armbian/configng\n"},{"location":"Contribute/Armbian-config/#design-menu","title":"Design menu","text":"Predict which commands you expect to have in the menu. For installing an application, we usually need two, install and uninstall. Armbian-config stores menu in JSON files, so you need to select appropriate file. This one we will place under Software -> Management.
{\n \"id\": \"MAN005\",\n \"description\": \"Webmin web-based management tool\",\n \"short\": \"Webmin\",\n \"module\": \"module_webmin\",\n \"command\": [\n \"see_menu module_webmin\"\n ],\n \"status\": \"Stable\",\n \"author\": \"@Tearran\",\n \"condition\": \"\"\n}\n Field name Function Notes id unique identifier Select higher number. If you will select existing, application will fail to run description menu descriptor This will be displayed in the menu short docs menu descriptor This will over-ride description in the rendering of documentation module link json entry with module Used for documentation generation - read info from module_options prompt confirmation text Some features needs confirmation before proceeding command executes function What should be run after we select and agree (optional) status Stable|Disabled Control if function is shown to users in the menu author GitHub handle Developer or maintainer of this functionality condition controlling display Under what conditions we show this menu item Note
Pay attention to JSON structure. JSON validator at pull request will break in case spaces or commas will be placed wrong.
"},{"location":"Contribute/Armbian-config/#module-code","title":"Module code","text":"Place module functions, each into its file, following by file naming convention, into one of the folders:
Folder location: tools/modulesdocs\nfunctions\nnetwork\nruntime\nsoftware\nsystem\n File location: tools/template/module_software_template.shdeclare -A module_options\nmodule_options+=(\n [\"module_template,author\"]=\"@armbian\"\n [\"module_template,feature\"]=\"module_template\"\n [\"module_template,example\"]=\"install remove help\"\n [\"module_template,desc\"]=\"Example module unattended interface.\"\n [\"module_template,status\"]=\"review\"\n)\n\nfunction module_template() {\n local title=\"test\"\n local condition=$(which \"$title\" 2>/dev/null)\n\n # Convert the example string to an array\n local commands\n IFS=' ' read -r -a commands <<< \"${module_options[\"module_template,example\"]}\"\n\n case \"$1\" in\n \"${commands[0]}\")\n echo \"Installing $title...\"\n # Installation logic here\n ;;\n \"${commands[1]}\")\n echo \"Removing $title...\"\n # Removal logic here\n ;;\n \"${commands[2]}\")\n echo -e \"\\nUsage: ${module_options[\"module_template,feature\"]} <command>\"\n echo -e \"Commands: ${module_options[\"module_template,example\"]}\"\n echo \"Available commands:\"\n echo -e \"\\tinstall\\t- Install $title.\"\n echo -e \"\\tremove\\t- Remove $title.\"\n echo\n ;;\n *)\n ${module_options[\"module_template,feature\"]} ${commands[2]}\n ;;\n esac\n }\n\n# uncomment to test the module\n#module_template \"$1\"\n Note
Pay attention to coding style structure. If you use modern IDE, this will be done automatically.
"},{"location":"Contribute/Armbian-config/#manual-testing","title":"Manual testing","text":"Whenever you are making changes to the JSON or modules structure, make sure to join JSON segments into main JSON file and fun. This you do with a command: Python
tools/config-assemble.sh -p\n Python is required to run this tool. Bashsudo sudo bin/armbian-config --cmd\n"},{"location":"Contribute/Armbian-config/#unit-tests","title":"Unit tests","text":"This part is optional but highly recommended for at least install functionality. Our CI infrastructure will test this feature at pull request, on general code changes (push to main branch) and daily. It will test feature on latest Debian and Ubuntu images. Unit tests have simple design:
Name of the config file is function id (unique identifier) CON004.conf
File location: tests/CON004.conf
ENABLED=true\nRELEASE=\"bookworm:jammy:noble\"\nCONDITION=\"test=\\$(docker container ls -a | grep portainer )\"\n Make sure to add a test condition that makes sense. It has to return 0 when test succeeds and 1 if fails. Variable Function Description ENABLED false / true If test is live or not PREINSTALL cmd to run specific test dependencies CONDITION main test verification must return 0 for test success RELEASE bookworm:jammy:noble\u201d run on specific or leave empty to run on all"},{"location":"Contribute/Armbian-config/#pull-request","title":"Pull request","text":"When your solution works locally and you prepare unit tests its time to submit a pull request. Fix your code and unit tests until all pull request checks becomes green.
Examples:
Documentation is generated automatically after your pull request is merged. But as automated documentation might not be satisfactory, you can add cover image, header and footer. You can use markdown elements with enhancements from https://squidfunk.github.io/mkdocs-material/
"},{"location":"Contribute/Armbian-config/#cover-image","title":"Cover image","text":"Once code works perfectly, look for cover image. It can be .png or .webp. Place image to the tools/include/images/CON004.webp
Portainer simplifies your Docker container management via Portainer web interface. It enables faster deploy of the applications and it gives real time visibility.\n"},{"location":"Contribute/Armbian-config/#footer","title":"Footer","text":"Footer: tools/include/markdown/CON004-footer.md=== \"Access to the web interface\"\n\n The web interface is accessible via port **9002**:\n\n - URL = `http://<your.IP>:9002`\n"},{"location":"User-Guide_Armbian-Config/Localisation/","title":"Localisation","text":""},{"location":"User-Guide_Armbian-Config/Localisation/#change-global-timezone","title":"Change Global timezone","text":"Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd GTZ001"},{"location":"User-Guide_Armbian-Config/Localisation/#change-locales-reconfigure-the-language-and-character-set","title":"Change Locales reconfigure the language and character set","text":"Edit: footer header Status: Stable
armbian-config --cmd LOC001"},{"location":"User-Guide_Armbian-Config/Localisation/#change-keyboard-layout","title":"Change Keyboard layout","text":"Edit: footer header Status: Stable
armbian-config --cmd KEY001"},{"location":"User-Guide_Armbian-Config/Localisation/#change-system-hostname","title":"Change System Hostname","text":"Edit: footer header Status: Stable
armbian-config --cmd HOS001"},{"location":"User-Guide_Armbian-Config/Network/","title":"Fixed and wireless network settings","text":""},{"location":"User-Guide_Armbian-Config/Network/#basic-setup","title":"Basic setup","text":"Basic network setup
graph LR\n A{Select interface} --> B[Configure];\n A{Select interface} --> C[Drop];\n C ---->A;\n B -->F[DHCP];\n B ---->G[Static];\n G ------>| MAC, IP, route, GW, DNS|H[Configured];\n F -->| MAC | H[Configured]; Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd BNS001 Select Interface: Choose the desired network interface, such as:
eth0 for wired Ethernetwlan0 for wireless connectionsIf selecting a wireless interface:
IP Address Configuration: Choose between:
192.168.1.10/24).0.0.0.0/0.192.168.1.1).9.9.9.9, but you can specify another.Finalize Configuration:
If you experience issues or prefer full control, follow the manual networking setup guide.
Remove Fallback DHCP Configuration:armbian-config --cmd BNS002\n"},{"location":"User-Guide_Armbian-Config/Network/#view-configuration","title":"View configuration","text":"View Network Configuration
View Network Configuration allows you to display the system\u2019s active network settings as a Netplan YAML configuration. This shows interfaces, IP addresses, gateways, DNS servers, and other networking details in a clean, human-readable format. Useful for verifying, troubleshooting, or manually editing network setup on systems that use Netplan for managing network interfaces.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd VNS001"},{"location":"User-Guide_Armbian-Config/Network/#advanced","title":"Advanced","text":"Advanced bridged network configuration
Edit: footer header Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
"},{"location":"User-Guide_Armbian-Config/Network/#add-or-change","title":"Add or Change","text":"Add / change interface
graph LR\n A[Network] --> B[Add / Change interface];\n A[Network] --> O[Revert to defaults];\n A[Network] --> P[Show configuration];\n B ---->E[Wired];\n B ---->F[Wireless];\n E -->R[DHCP];\n E -->T[Static];\n E -->S[Spoof MAC];\n F -->X[Station];\n F -->W[Access point]; Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd NEA002 Wired device checkWireless device check In order to configure your network devices, they need to be supported the kernel.
To verify, use command:
Baship addr\n It is usually something like eth0, enp4s3 or lan.
In order to configure your wireless network devices, they need to be supported the kernel.
To verify, use command:
Bashiw dev | awk '$1==\"Interface\"{print $2}'\n It is usually something like wlan0, wlo1 or wlx12334c47dec3. If you get blank response, it means your WiFi device / dongle is not supported by the kernel.
armbian-config --cmd NEA003\n Show configuration:armbian-config --cmd NEA004\n Show active status:armbian-config --cmd NEA005\n"},{"location":"User-Guide_Armbian-Config/System/","title":"System wide and admin settings","text":""},{"location":"User-Guide_Armbian-Config/System/#hardware","title":"Hardware","text":"Alternative kernels, headers, overlays, bootenv
Edit: footer header
"},{"location":"User-Guide_Armbian-Config/System/#alternative-kernels","title":"Alternative kernels","text":"Use alternative kernels
Switching between different kernel versions can significantly impact the functionality of your device. A newer or older kernel may introduce changes to hardware compatibility, drivers, and system stability. Some features may stop working, while others may improve or be reintroduced.
Kernel changes carry inherent risks!
Precautions Before Switching Kernels Before switching kernels, it is strongly recommended to:
Recovery Steps if Boot Fails If your device fails to boot after a kernel change, you may need to:
Exercise caution when switching kernels, especially on production systems or devices with limited recovery options.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd KER001"},{"location":"User-Guide_Armbian-Config/System/#kernel-headers","title":"Kernel Headers","text":"Install Linux headers
Kernel headers are files required to build modules (drivers) or software that interfaces directly with the Linux kernel. Installing headers ensures compatibility when compiling custom drivers, DKMS modules (like ZFS, WireGuard), or updating third-party software that requires access to kernel internals. The installed headers match your running kernel version and are critical for system extensions and hardware support.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd HEAD01 Remove Linux headers:armbian-config --cmd HEAD02\n"},{"location":"User-Guide_Armbian-Config/System/#device-tree-overlays","title":"Device Tree Overlays","text":"Manage device tree overlays
Device Tree Overlays allow you to dynamically modify the Linux device tree at runtime, without rebuilding the kernel. They are used to enable or configure specific hardware features (like GPIO pins, I\u00b2C, SPI, sensors, displays) on single-board computers. Overlays are small snippets that can add, change, or remove parts of the hardware description, making it flexible to adapt the system for different peripherals without recompiling the full device tree.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd DTO001"},{"location":"User-Guide_Armbian-Config/System/#odroid-boards-config","title":"Odroid Boards Config","text":"Select Odroid board configuration
Edit: footer header Status: Preview Architecture: armhf
armbian-config --cmd ODR001"},{"location":"User-Guide_Armbian-Config/System/#boot-environment","title":"Boot Environment","text":"Edit the boot environment
Edit the boot environment allows you to modify critical boot settings stored in /boot/armbianEnv.txt. You can adjust options such as root filesystem location, kernel parameters, overlays, boot targets, or enable advanced features like early serial console. This is essential for fine-tuning hardware support, troubleshooting, or optimizing system startup behavior.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd BOOT01"},{"location":"User-Guide_Armbian-Config/System/#storage","title":"Storage","text":"Install to internal media, ZFS, NFS, read-only rootfs
Edit: footer header Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
"},{"location":"User-Guide_Armbian-Config/System/#install","title":"Install","text":"Copy the running Armbian system to another device
Use this option to transfer your current live Armbian system to another storage device (eMMC, SSD, USB, etc.). This copies your existing installation exactly as it is \u2014 including settings, installed packages, and user data.
Edit: footer header Status: Preview Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd STO001"},{"location":"User-Guide_Armbian-Config/System/#download-and-flash","title":"Download and flash","text":"Download a fresh, official Armbian OS image and write it to a device
What can this tool do?
Edit: footer header Status: Preview Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik
armbian-config --cmd FLASH1 Remove cached images:armbian-config --cmd FLASH2\n"},{"location":"User-Guide_Armbian-Config/System/#read-only-fs","title":"Read Only FS","text":"Enable read only filesystem
Read-only filesystem is enabled using overlayroot, a utility that places a temporary writable layer over the system root filesystem. Changes made during runtime are redirected into RAM or an alternative writable storage, while the underlying system remains untouched. This ensures that after a reboot, the system returns to a clean original state. It\u2019s ideal for kiosks, appliances, SD card-based systems, and scenarios where long-term filesystem durability and recovery are critical.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd ROO001 Disable read only filesystem:armbian-config --cmd ROO002\n"},{"location":"User-Guide_Armbian-Config/System/#nfs","title":"NFS","text":"Enable Network filesystem (NFS) support
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd NETF01 Disable Network filesystem (NFS) support:armbian-config --cmd NETF02\n"},{"location":"User-Guide_Armbian-Config/System/#nfs-server","title":"NFS server","text":"Enable network filesystem (NFS) daemon
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd NETF04 Configure network filesystem (NFS) daemon:armbian-config --cmd NETF05\n Remove network filesystem (NFS) daemon:armbian-config --cmd NETF06\n Show network filesystem (NFS) daemon clients:armbian-config --cmd NETF07\n"},{"location":"User-Guide_Armbian-Config/System/#find-nfs-servers","title":"Find NFS servers","text":"Find NFS servers in subnet and mount shares
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd NETF09 Show and manage NFS mounts:armbian-config --cmd NETF10\n"},{"location":"User-Guide_Armbian-Config/System/#zfs","title":"ZFS","text":"ZFS filesystem - enable support
ZFS is an advanced, high-performance file system and volume manager designed for data integrity, scalability, and ease of use. It offers features like copy-on-write snapshots, native compression, data deduplication, automatic repair, and efficient storage pooling. Originally developed by Sun Microsystems, ZFS is ideal for handling large amounts of data reliably with minimal maintenance.
When enabling ZFS support, Armbian checks if the running kernel can support ZFS, installs matching kernel headers if necessary, and builds the ZFS DKMS (Dynamic Kernel Module Support) module automatically.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd ZFS001"},{"location":"User-Guide_Armbian-Config/System/#key-features","title":"Key Features","text":""},{"location":"User-Guide_Armbian-Config/System/#data-integrity","title":"Data Integrity","text":"armbian-config --cmd ZFS002\n"},{"location":"User-Guide_Armbian-Config/System/#ssh-daemon","title":"SSH daemon","text":"Manage SSH daemon options, enable 2FA
Edit: footer header
"},{"location":"User-Guide_Armbian-Config/System/#native","title":"Native","text":"Disable root login
Manage native SSH daemon allows you to configure SSH server settings such as login security, authentication methods, and connection restrictions. It also enables setting up Two-Factor Authentication (2FA) to further secure SSH access using time-based codes (TOTP), adding an extra layer of protection beyond passwords.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd ACC001 Enable root login:armbian-config --cmd ACC002\n Disable password login:armbian-config --cmd ACC003\n Enable password login:armbian-config --cmd ACC004\n Disable Public key authentication login:armbian-config --cmd ACC005\n Enable Public key authentication login:armbian-config --cmd ACC006\n Disable OTP authentication:armbian-config --cmd ACC007\n Enable OTP authentication:armbian-config --cmd ACC008\n Generate new OTP authentication QR code:armbian-config --cmd ACC009\n Show OTP authentication QR code:armbian-config --cmd ACC010\n Disable last login banner:armbian-config --cmd ACC011\n Enable last login banner:armbian-config --cmd ACC012\n"},{"location":"User-Guide_Armbian-Config/System/#containerised","title":"Containerised","text":"Sandboxed & containerised SSH server
Sandboxed & containerised SSH server allows ssh access without giving keys to the entire server. Giving ssh access via private key often means giving full access to the server. This container creates a limited and sandboxed environment that others can ssh into. The users only have access to the folders mapped and the processes running inside this container.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SSH001 Access to SSH serverDirectoriesView logs ssh username@<your.IP> -p 2222/armbian/openssh-server/armbian/openssh-server/configUSER_DEFINEDdocker logs -f openssh-server\n Remove sandboxed SSH server:armbian-config --cmd SSH002\n Purge sandboxed SSH server with data folder:armbian-config --cmd SSH003\n"},{"location":"User-Guide_Armbian-Config/System/#shell-and-motd","title":"Shell and MOTD","text":"Change shell, adjust MOTD
Edit: footer header
"},{"location":"User-Guide_Armbian-Config/System/#change-shell","title":"Change shell","text":"Change shell system wide to ZSH
ZSH is a powerful and customizable shell designed to be an enhanced replacement for BASH. When combined with Oh My Zsh, which is integrated in armbian-zsh, it offers an extensive plugin system, beautiful themes, and productivity features like autosuggestions, syntax highlighting, and easier navigation.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd SHELL1 Change shell system wide to BASH:armbian-config --cmd SHELL2\n"},{"location":"User-Guide_Armbian-Config/System/#adjust-motd","title":"Adjust MOTD","text":"Adjust welcome screen (motd)
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd MOTD01"},{"location":"User-Guide_Armbian-Config/System/#os-updates","title":"OS Updates","text":"OS updates and distribution upgrades
Edit: footer header Status: Active
"},{"location":"User-Guide_Armbian-Config/System/#firmware","title":"Firmware","text":"Enable Armbian firmware upgrades
Enable Armbian firmware upgrades manages whether the Armbian firmware (kernel + u-boot + firmware) packages are held or unheld in the package manager. By removing or setting the hold, it controls if firmware updates are applied automatically through regular apt update and apt upgrade processes. This allows users to either freeze the firmware version for stability or enable updates for improved hardware support.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd UPD001 Disable Armbian firmware upgrades:armbian-config --cmd UPD002\n"},{"location":"User-Guide_Armbian-Config/System/#rolling","title":"Rolling","text":"Switch system to rolling packages repository
The daily rolling repository offers frequently updated packages directly from development branches. It provides access to the latest features, bug fixes, and hardware support improvements but may introduce instability or regressions. This channel is intended for testing, development, and users who need the newest updates at the cost of reduced stability.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd ROLLIN"},{"location":"User-Guide_Armbian-Config/System/#stable","title":"Stable","text":"Switch system to stable packages repository
The stable repository provides thoroughly tested packages intended for production use. Updates from this channel prioritize stability, long-term reliability, and minimal risk, ensuring systems remain secure and operational without unexpected changes. Only critical bug fixes and essential improvements are introduced after extensive testing.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd STABLE"},{"location":"User-Guide_Armbian-Config/System/#stable-distro-upgrade","title":"Stable Distro Upgrade","text":"Distribution upgrade to latest stable / LTS
Stable / LTS upgrades move your system to a newer release of Debian or Ubuntu, bringing updated system packages along with long-term security fixes and bug patches. This makes them the safest choice for reliable, everyday use.
Risks of Stable Upgrades
Distribution upgrades are experimental and not supported by Armbian. Use at your own risk.
Even LTS \u2192 LTS upgrades (e.g., Debian Bookworm \u2192 Trixie, Ubuntu Jammy \u2192 Noble) carry some risks:
Because Armbian integrates upstream Debian/Ubuntu with custom board support packages, upgrades may still trigger unexpected breakage on some devices.
Edit: footer header Status: Stable
armbian-config --cmd STD001 Best Practices
Distribution upgrade to rolling unstable
Non-LTS releases are intended for developers, testers, and enthusiasts who want the latest features \u2014 not for production systems.
Risks of Unstable Upgrades
Distribution upgrades are experimental and not supported by Armbian. Use at your own risk.
Edit: footer header Status: Stable
armbian-config --cmd UNS001"},{"location":"User-Guide_Armbian-Config/System/#docker-images","title":"Docker images","text":"Enable automating Docker container base images updating
Watchtower is a lightweight tool that automatically monitors and updates running Docker containers whenever a new image version becomes available. It checks remote registries for updated images, pulls them, stops the old containers, and restarts them using the updated versions \u2014 all without manual intervention. Watchtower is fully configurable, allowing you to control update frequency, select specific containers, and manage notification settings.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd WTC001 Disable automating Docker container base images updating:armbian-config --cmd WTC002\n"},{"location":"User-Guide_Armbian-Config/System/#packages","title":"Packages","text":"Enable automatic package updates.
Unattended upgrades automatically install security updates and important package updates on your system without requiring manual intervention. It helps keep your system secure, stable, and up-to-date by silently applying patches. The behavior is fully configurable \u2014 you can control which packages are upgraded, set reboot options, and customize notifications or logging.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd UNAT01 Configure automatic package updates:armbian-config --cmd UNAT02\n Disable automatic package updates:armbian-config --cmd UNAT03\n"},{"location":"User-Guide_Armbian-Software/Armbian/","title":"Armbian infrastructure services","text":""},{"location":"User-Guide_Armbian-Software/Armbian/#cdn-router","title":"CDN router","text":"Router for repository mirror automation
The Armbian Router is an intelligent redirector system that optimizes file downloads by automatically directing users to the best available mirror. It evaluates each download request based on geographic location, server health, and file availability, ensuring faster downloads, balanced load distribution, and high availability. This core service underpins Armbian\u2019s scalable mirror network, seamlessly routing traffic to improve performance and reliability for end users worldwide.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd ART001 Remove CDN router:armbian-config --cmd ART002\n"},{"location":"User-Guide_Armbian-Software/Armbian/#gh-runners","title":"GH runners","text":"GitHub runners for Armbian automation
This module automates the installation, removal, and status checking of GitHub self-hosted runners for the Armbian project. It supports batch operations and user input through dialog prompts when running interactively.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd GHR001 Supported Commands install Installs one or more GitHub runners using the provided configuration or interactively prompted values.purge / remove Removes runners based on the provided runner name series and target organization or repository.status Quietly checks if any actions.runner services are currently running on the system.gh_token GitHub token with admin rights to manage self-hosted runners. runner_name Name prefix for the runner series (default: armbian). start Start index of the runner series (e.g., 01). stop End index of the runner series (e.g., 05). label_primary Labels for the first runner (default: alfa). label_secondary Labels for additional runners (default: fast,images). organisation GitHub organization name (default: armbian). owner GitHub user or organization owner (used for repo-level runners). repository GitHub repository name (used for repo-level runners). Behavior dialog only in interactive mode.start to stop).actions.runner.install and actions.runner.remove helpers.0 if any runner services are active, 1 otherwise (for scripting use).armbian-config --cmd GHR002\n"},{"location":"User-Guide_Armbian-Software/Armbian/#rsyncd-server","title":"Rsyncd server","text":"Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd RSD001 Remove Armbian rsyncd server:armbian-config --cmd RSD002\n"},{"location":"User-Guide_Armbian-Software/Backup/","title":"Backup solutions for your data","text":""},{"location":"User-Guide_Armbian-Software/Backup/#duplicati","title":"Duplicati","text":"Duplicati install
Duplicati is a versatile and secure backup tool designed for everyone, including:
Duplicati offers powerful features such as strong AES-256 encryption, backup scheduling, and flexible storage support (local folders, NAS, cloud providers like Google Drive, Dropbox, S3, and more). Through its web-based interface, users can easily configure, monitor, and restore backups from any browser.
Thanks to Duplicati\u2019s smart design \u2014 working through standard protocols and containerized deployment \u2014 it fits seamlessly into any environment, from personal setups to enterprise infrastructures.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DPL001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8200:
http://<your.IP>:8200/armbian/duplicati/armbian/duplicati/config/armbian/duplicati/backupsdocker logs -f duplicati\n Duplicati remove:armbian-config --cmd DPL002\n Duplicati purge with data folder:armbian-config --cmd DPL003\n"},{"location":"User-Guide_Armbian-Software/Containers/","title":"Docker containerization and KVM virtual machines","text":""},{"location":"User-Guide_Armbian-Software/Containers/#docker","title":"Docker","text":"Docker minimal
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd CON001 What is Docker? Docker helps developers build, share, run, and verify applications anywhere - without tedious environment configuration or management.
Docker engine:armbian-config --cmd CON002\n Docker remove:armbian-config --cmd CON003\n Docker purge with all images, containers, and volumes:armbian-config --cmd CON004\n"},{"location":"User-Guide_Armbian-Software/Containers/#portainer","title":"Portainer","text":"Portainer container management platform
Portainer simplifies your Docker container management via Portainer web interface. It enables faster deploy of the applications and it gives real time visibility.
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @schwar3kat Documentation: Link
armbian-config --cmd POR001 Access to the web interface The web interface is accessible via port 9002:
http://<your.IP>:9002armbian-config --cmd POR002\n Portainer purge with with data folder:armbian-config --cmd POR003\n"},{"location":"User-Guide_Armbian-Software/DNS/","title":"Network-wide ad blockers servers","text":""},{"location":"User-Guide_Armbian-Software/DNS/#adguardhome","title":"AdGuardHome","text":"AdGuardHome DNS sinkhole
AdGuard Home is a network-wide software that functions as a DNS server and ad blocker. It blocks ads, trackers, and malicious websites at the DNS level, meaning it filters content for all devices connected to the network. It also provides additional features like parental controls, logging, and privacy protections. Essentially, it acts as a gateway between your devices and the internet, blocking unwanted content before it even reaches your devices.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd ADG001 Access to the web interfaceDirectoriesUsageBlack and white listsView logs The web interface is accessible via port 3000:
https://<your.IP>:3000/armbian/adguardhome//armbian/adguardhome/confdir/armbian/adguardhome/workdirThere are many sites in the web giving blocklists and whitelists for AdGuard Home. They can be used when you want to have more blocking as the standard installation gives you. Here are some examples:
docker logs -f adguardhome\n AdGuardHome remove:armbian-config --cmd ADG002\n AdGuardHome purge with data folder:armbian-config --cmd ADG003\n"},{"location":"User-Guide_Armbian-Software/DNS/#pi-hole","title":"Pi-hole","text":"Pi-hole DNS ad blocker with Unbound support
Pi-hole is a network-wide ad blocker that acts as a DNS (Domain Name System) sinkhole. It blocks connections to known ad servers, trackers, and malicious domains across all devices in your network, without requiring any browser extensions or client-side software.
"},{"location":"User-Guide_Armbian-Software/DNS/#pi-hole-explained","title":"Pi-hole Explained","text":"Pi-hole offers an effective and centralized way to enhance privacy and reduce unwanted content across your entire network.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd PIH001 Access the web interface The web interface of Pi-hole can be accessed via:
http://<your.IP>:8811/adminarmbian-configarmbian-config --cmd PIH002\n Pi-hole remove:armbian-config --cmd PIH003\n Pi-hole purge with data folder:armbian-config --cmd PIH004\n"},{"location":"User-Guide_Armbian-Software/DNS/#unbound","title":"Unbound","text":"Unbound caching DNS resolver
Unbound is a high-performance, open-source DNS resolver. It primarily serves to resolve domain names into IP addresses for devices on a network. Unlike regular DNS servers, Unbound performs DNS lookups directly and securely, providing features like DNSSEC validation (ensuring data integrity) and privacy protections. It\u2019s often used to improve speed, security, and privacy by resolving queries locally rather than relying on external DNS services.
Edit: footer header Status: Stable Architecture: x86-64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd UNB001 Default DNS portDirectoriesView logs /armbian/unbound//armbian/unbound/docker logs -f unbound\n Unbound remove:armbian-config --cmd UNB002\n Unbound purge with data folder:armbian-config --cmd UNB003\n"},{"location":"User-Guide_Armbian-Software/Database/","title":"SQL database servers and web interface managers","text":""},{"location":"User-Guide_Armbian-Software/Database/#mysql","title":"MySQL","text":"MySQL SQL database server
MySQL is one of the world\u2019s most widely used open-source database servers. Trusted for decades in web, cloud, and enterprise applications.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd MYSQL1 ConfigurationDirectoriesView logs Database access configuration is done at first install:
<your.IP>/armbian/mysql/armbian/mysql/datadocker logs -f mysql\n MySQL remove:armbian-config --cmd MYSQL2\n MySQL purge with data folder:armbian-config --cmd MYSQL3\n"},{"location":"User-Guide_Armbian-Software/Database/#mariadb","title":"Mariadb","text":"Mariadb SQL database server
MariaDB is a fast, open-source relational database server developed by the original creators of MySQL. It is designed to be fully compatible with MySQL while offering improved performance, enhanced security, and additional features.
MariaDB supports a wide range of storage engines, advanced SQL capabilities, and both single-node and clustered deployments. It is widely used in web, cloud, and
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DAT001 ConfigurationDirectoriesView logs Database access configuration is done at first install: - create root password - create database - create normal user - create password for normal user
<your.IP>:3307/armbian/mariadb/armbian/mariadb/configdocker logs -f mariadb\n Mariadb remove:armbian-config --cmd DAT002\n Mariadb purge with data folder:armbian-config --cmd DAT003\n"},{"location":"User-Guide_Armbian-Software/Database/#phpmyadmin","title":"phpMyAdmin","text":"phpMyAdmin web interface manager
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd MYA001 phpMyAdmin remove:armbian-config --cmd MYA002\n phpMyAdmin purge with data folder:armbian-config --cmd MYA003\n"},{"location":"User-Guide_Armbian-Software/Database/#postgresql","title":"PostgreSQL","text":"PostgreSQL install
PostgreSQL is a powerful, open-source object-relational database system known for its robustness, feature richness, and reliability.
It is designed for everyone, including:
PostgreSQL offers strong ACID compliance, concurrency, rich data types, full-text search, JSON support, and extensibility through stored procedures and custom functions. It is trusted globally in financial, government, and web-scale applications.
Thanks to its proven architecture and open-source nature, PostgreSQL fits seamlessly in projects of all sizes.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd PGSQL1 Access to the databaseDirectoriesView logs PostgreSQL is accessible via port 5432:
postgresql://<your.IP>:5432armbianarmbianarmbian/armbian/postgres/datadocker logs -f postgres\n PostgreSQL remove:armbian-config --cmd PGSQL2\n PostgreSQL purge with data folder:armbian-config --cmd PGSQL3\n"},{"location":"User-Guide_Armbian-Software/Database/#redis","title":"Redis","text":"Redis install
Redis is an open-source, in-memory data structure store, used as a database, cache, and message broker. It supports a variety of data structures such as strings, hashes, lists, sets, and sorted sets.
Key Features: - Extremely fast performance with in-memory storage - Persistence options (snapshotting and AOF) - Pub/Sub messaging capabilities - Built-in replication and high availability - Simple API and wide client support
Redis is widely used for real-time applications, caching layers, session stores, and lightweight queues across industries and platforms.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd REDIS1 Access to the serviceDirectoriesView logs Redis server is accessible on port 6379:
redis://<your.IP>:6379/armbian/redis/datadocker logs -f redis\n Redis remove:armbian-config --cmd REDIS2\n Redis purge with data folder:armbian-config --cmd REDIS3\n"},{"location":"User-Guide_Armbian-Software/Desktops/","title":"Desktop Environments","text":""},{"location":"User-Guide_Armbian-Software/Desktops/#xfce-desktop","title":"XFCE desktop","text":""},{"location":"User-Guide_Armbian-Software/Desktops/#xfce-desktop-install","title":"XFCE desktop Install","text":"XFCE is a lightweight, fast, and user-friendly desktop environment for Linux, offering a classic interface, essential apps, and customization. It prioritizes performance, simplicity, and efficiency.
Install XFCE:
Xfce is a lightweight desktop environment for UNIX-like operating systems. It aims to be fast and low on system resources, while still being visually appealing and user friendly.
Command: Text Only
armbian-config --cmd XFCE01\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#uninstall","title":"Uninstall","text":"Command: Text Only
armbian-config --cmd XFCE02\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#enable-autologin","title":"Enable autologin","text":"Command: Text Only
armbian-config --cmd XFCE03\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#disable-autologin","title":"Disable autologin","text":"Command: Text Only
armbian-config --cmd XFCE04\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#gnome-desktop","title":"Gnome desktop","text":""},{"location":"User-Guide_Armbian-Software/Desktops/#gnome-desktop-install","title":"Gnome desktop Install","text":"GNOME is a modern, user-friendly desktop environment for Linux, offering a clean interface, essential apps, and customization through extensions. It prioritizes simplicity, accessibility, and efficiency.
Command: Text Only
armbian-config --cmd GNOME01\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#uninstall_1","title":"Uninstall","text":"Command: Text Only
armbian-config --cmd GNOME02\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#enable-autologin_1","title":"Enable autologin","text":"Command: Text Only
armbian-config --cmd GNOME03\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#disable-autologin_1","title":"Disable autologin","text":"Command: Text Only
armbian-config --cmd GNOME04\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/Desktops/#improve-application-search-speed","title":"Improve application search speed","text":"Command: Text Only
armbian-config --cmd Xapian\n Author: @igorpecovnik
Status: Stable
"},{"location":"User-Guide_Armbian-Software/DevTools/","title":"Applications and tools for development","text":""},{"location":"User-Guide_Armbian-Software/DevTools/#git-cli","title":"Git CLI","text":"Install tools for cloning and managing repositories (git)
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd GIT001 Remove tools for cloning and managing repositories (git):armbian-config --cmd GIT002\n"},{"location":"User-Guide_Armbian-Software/Downloaders/","title":"Download apps for movies, TV shows, music and subtitles","text":""},{"location":"User-Guide_Armbian-Software/Downloaders/#bazarr","title":"Bazarr","text":"Bazarr automatic subtitles downloader for Sonarr and Radarr
Bazarr is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd BAZ001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 6767:
https://<your.IP>:6767/armbian/bazarr/armbian/bazarr/config/armbian/bazarr/movies /armbian/bazarr/tvdocker logs -f bazarr\n Bazarr remove:armbian-config --cmd BAZ002\n Bazarr purge with data folder:armbian-config --cmd BAZ003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#deluge","title":"Deluge","text":"Deluge BitTorrent client
Deluge\u2060 is a lightweight, Free Software, cross-platform BitTorrent client.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DEL001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8112:
https://<your.IP>:8112/armbian/deluge/armbian/deluge/config/armbian/deluge/downloadsdocker logs -f deluge\n Deluge remove:armbian-config --cmd DEL002\n Deluge purge with data folder:armbian-config --cmd DEL003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#qbittorrent","title":"qBittorrent","text":"qBittorrent BitTorrent client
The Qbittorrent\u2060 project aims to provide an open-source software alternative to \u00b5Torrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DOW001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8090:
https://<your.IP>:8090/armbian/qbittorrent/armbian/qbittorrent/config/armbian/qbittorrent/downloadsdocker logs -f qbittorrent\n qBittorrent remove:armbian-config --cmd DOW002\n qBittorrent purge with data folder:armbian-config --cmd DOW003\n Prowlarr:armbian-config --cmd DOW025\n Access to the web interfaceDirectoriesView logs The web interface is accessible via port 9696:
https://<your.IP>:9696/armbian/prowlarr/armbian/prowlarr/configdocker logs -f prowlarr\n Prowlarr remove:armbian-config --cmd DOW026\n Prowlarr purge with data folder:armbian-config --cmd DOW027\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#jellyseerr","title":"Jellyseerr","text":"Jellyseerr Jellyfin/Emby/Plex integration install
Jellyseerr is a free and open source software application for managing requests for your media library. It is a fork of Overseerr built to bring support for Jellyfin & Emby media servers!
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd JEL001 Jellyseerr remove:armbian-config --cmd JEL002\n Jellyseerr purge with data folder:armbian-config --cmd JEL003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#lidarr","title":"Lidarr","text":"Lidarr automatic music downloader
Lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd LID001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8686:
https://<your.IP>:8686/armbian/lidarr/armbian/lidarr/config/armbian/lidarr/downloads /armbian/lidarr/musicdocker logs -f lidarr\n Lidarr remove:armbian-config --cmd LID002\n Lidarr purge with data folder:armbian-config --cmd LID003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#medusa","title":"Medusa","text":"Medusa automatic downloader for TV shows
Medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd MDS001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8081:
https://<your.IP>:8081/armbian/medusa/armbian/medusa/config/armbian/medusa/downloads/armbian/medusa/downloads/tvdocker logs -f medusa\n Medusa TV shows downloader remove:armbian-config --cmd MDS002\n Medusa TV shows downloader purge:armbian-config --cmd MDS003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#radarr","title":"Radarr","text":"Radarr automatic downloader for movies
Radarr - A fork of Sonarr to work with movies \u00e0 la Couchpotato.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd RAD001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7878:
https://<your.IP>:7878/armbian/radarr/armbian/radarr/config/armbian/radarr/movies/armbian/radarr/clientdocker logs -f radarr\n Radarr remove:armbian-config --cmd RAD002\n Radarr purge with data folder:armbian-config --cmd RAD003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#readarr","title":"Readarr","text":"Readarr automatic downloader for Ebooks
Readarr - Book Manager and Automation (Sonarr for Ebooks)
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd RDR001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8787:
https://<your.IP>:8787/armbian/readarr/armbian/readarr/config/armbian/readarr/books /armbian/readarr/clientdocker logs -f readarr\n Readarr remove:armbian-config --cmd RDR002\n Readarr purge with data folder:armbian-config --cmd RDR003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#sabnzbd","title":"SABnzbd","text":"SABnzbd newsgroup downloader
Sabnzbd\u2060 makes Usenet as simple and streamlined as possible by automating everything we can. All you have to do is add an .nzb. SABnzbd takes over from there, where it will be automatically downloaded, verified, repaired, extracted and filed away with zero human interaction.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SABN01 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8380:
https://<your.IP>:8380/armbian/sabnzbd/armbian/sabnzbd/config/armbian/sabnzbd/downloads/armbian/sabnzbd/incompletedocker logs -f sabnzbd\n SABnzbd remove:armbian-config --cmd SABN02\n SABnzbd purge with data folder:armbian-config --cmd SABN03\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#sonarr","title":"Sonarr","text":"Sonarr automatic downloader for TV shows
Sonarr (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SON001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8989:
https://<your.IP>:8989/armbian/sonarr/armbian/sonarr/config/armbian/sonarr/tvseries/armbian/sonarr/clientdocker logs -f sonarr\n Sonarr remove:armbian-config --cmd SON002\n Sonarr purge with data folder:armbian-config --cmd SON003\n"},{"location":"User-Guide_Armbian-Software/Downloaders/#transmission","title":"Transmission","text":"Transmission BitTorrent client
Transmission\u2060 is designed for easy, powerful use. Transmission has the features you want from a BitTorrent client: encryption, a web interface, peer exchange, magnet links, DHT, \u00b5TP, UPnP and NAT-PMP port forwarding, webseed support, watch directories, tracker editing, global and per-torrent speed limits, and more.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd TRA001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 9091:
https://<your.IP>:9091/armbian/transmission/armbian/transmission/config/armbian/transmission/downloads/armbian/transmission/watchdocker logs -f transmission\n Transmission remove:armbian-config --cmd TRA002\n Transmission purge with data folder:armbian-config --cmd TRA003\n"},{"location":"User-Guide_Armbian-Software/Finance/","title":"Manage your finances","text":""},{"location":"User-Guide_Armbian-Software/Finance/#actual-budget","title":"Actual Budget","text":"Do your finances with Actual Budget
Actual Budget is a free, open-source personal finance app built around the envelope budgeting method.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd ABU001 Warning: HTTPS Certificate Required
After initially installing the Actual server, you might get stuck at the step: \u201cInitializing the connection to the local database\u2026\u201d
The issue is due to the server not having an HTTPS certificate. After activating an HTTPS certificate for the Actual server, everything should work fine.
If you still encounter issues even after setting up HTTPS, we highly recommend reaching out to the Actual Budget Discord server \u2014 the developers and community there are very kind and helpful.
Actual Budget remove:armbian-config --cmd ABU002\n Actual Budget purge with data folder:armbian-config --cmd ABU003\n"},{"location":"User-Guide_Armbian-Software/HomeAutomation/","title":"Home Automation for control home appliances","text":""},{"location":"User-Guide_Armbian-Software/HomeAutomation/#domoticz","title":"Domoticz","text":"Domoticz open source home automation
Domoticz is an open-source home automation platform that allows you to control and monitor smart devices in your home. It supports a wide range of devices, including lights, sensors, thermostats, and cameras. Through its web interface or mobile app, you can set up automation rules and schedules, providing greater convenience and energy efficiency. It\u2019s customizable, flexible, and can be run on a variety of hardware platforms supported by Armbian.
Access to the web interfaceDirectoriesAdvanced setupThe web interface is accessible via port 8780:
https://<your.IP>:8780/armbian/domoticz/dev/ttyUSB0) to Docker container is enabled by defaultEdit: footer header Status: Preview Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DOM001 Domoticz remove:armbian-config --cmd DOM002\n Domoticz purge with data folder:armbian-config --cmd DOM003\n"},{"location":"User-Guide_Armbian-Software/HomeAutomation/#evcc","title":"EVCC","text":"EVCC - solar charging automation
evcc is an energy management system with a focus on electromobility. The software controls your EV charger or smart plug. It communicates with your vehicle, inverter or home storage to make intelligent charging decisions. The software is open source and community-driven.
Edit: footer header Status: Preview Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd EVCC01 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7070:
https://<your.IP>:7070/armbian/evcc/armbian/evcc/evcc.yamldocker logs -f evcc\n EVCC - solar charging automation remove:armbian-config --cmd EVCC02\n EVCC purge with data folder:armbian-config --cmd EVCC03\n"},{"location":"User-Guide_Armbian-Software/HomeAutomation/#openhab","title":"openHAB","text":"openHAB empowering the smart home
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd HAB001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 2080:
https://<your.IP>:2080/armbian/openhab/armbian/openhab/conf/armbian/openhab/userdata/armbian/openhab/addonsSee also openHAB file locations.
Bashdocker logs -f openhab\n openHAB remove:armbian-config --cmd HAB002\n openHAB purge with data folder:armbian-config --cmd HAB003\n"},{"location":"User-Guide_Armbian-Software/HomeAutomation/#home-assistant","title":"Home Assistant","text":"Home Assistant open source home automation
Home Assistant is an open source smart home platform that allows you to connect your smart home devices like your TV, fan, cameras, thermostats, lights, and sensors. As a user, you can build intricate automation using Home Assistant\u2019s user-friendly, unified web-based user interface.
Perfect to run on any single board computer with 4 cores and at least 512Mb of memory. Armbian installation is optimised to run from SD/eMMC media, but it is recommended to use SSD.
Limited support
The supervised installation method on Armbian is not officially supported by the Home Assistant project. Additionally, installation on hardware that is not officially supported is also outside the scope of support provided by the Armbian team.
You are welcome to report high-level application issues that are reproducible on the official Home Assistant Operating System (HAOS) within the Home Assistant Community. For any topics related to single-board computer hardware, you may use the Armbian Community Forums; however, please be aware that official support from the Armbian team is not guaranteed.
While the Home Assistant team deprecated the Supervised installation method, the Armbian team will continue to provide and maintain it, as long as automated installation tests succeed and the required maintenance remains manageable.
Edit: footer header Status: Preview Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd HAS001 Access to the web interfaceDirectoriesArmbian advantages The web interface is accessible via port 8123:
https://<your.IP>:8123Home Assistant on Armbian runs supervised in a Docker container. This secures same functionality as stock HAOS.
/armbian/haosarmbian-config --cmd HAS002\n Home Assistant purge with data folder:armbian-config --cmd HAS003\n"},{"location":"User-Guide_Armbian-Software/Management/","title":"Remote File & Management tools","text":""},{"location":"User-Guide_Armbian-Software/Management/#cockpit","title":"Cockpit","text":"Cockpit OS and VM management tool
Cockpit is a web-based graphical interface for servers, intended for everyone.
Here\u2019s a subset of tasks you can perform on each host running Cockpit
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd CPT001 Access to the web interfaceVideo instructions The web interface is accessible via port 9890:
https://<your.IP>:9890armbian-config --cmd CPT002\n Purge Cockpit with virtual machines:armbian-config --cmd CPT003\n"},{"location":"User-Guide_Armbian-Software/Management/#homepage","title":"Homepage","text":"Install Homepage startpage / application dashboard
gethomepage is a fast, fully static, highly customizable application dashboard built for modern self-hosted environments. With a fully proxied architecture and zero runtime, it delivers exceptional speed, security, and simplicity for organizing and accessing your services.
It supports over 100 service integrations and multiple languages, offering live status displays and dynamic resource monitoring out-of-the-box. Configuration is effortless via YAML files or automatic Docker label discovery, making setup and management seamless.
Key Features
Whether you\u2019re running a small homelab or a full server fleet, gethomepage offers a sleek, powerful, and secure way to stay organized.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd HPG001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 3021:
https://<your.IP>:3021Configuration: Please reffer to official manual https://gethomepage.dev/configs/
/armbian/homepage/armbian/homepage/configdocker logs -f homepage\n Remove Homepage:armbian-config --cmd HPG002\n Purge Homepage with data folder:armbian-config --cmd HPG003\n"},{"location":"User-Guide_Armbian-Software/Management/#netbox","title":"NetBox","text":"NetBox infrastructure resource modeling install
NetBox is an open-source infrastructure resource modeling (IRM) tool used for managing and documenting networks and data center assets.
Requirements (installed automatically)
Key Features
Originally developed by DigitalOcean, NetBox is widely adopted by network engineers and sysadmins to maintain source-of-truth data for automation.
Official Website
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NBOX01 Access to the serviceDefault credentialsDirectoriesView logsManage the service NetBox is accessible via HTTP on port 8222:
http://<your.IP>:8222http://<your.IP>:8222/api/admin/armbian/netbox/config//armbian/netbox/scripts//armbian/netbox/reports/docker logs -f netbox\n Bashdocker exec -it netbox bash\n NetBox remove:armbian-config --cmd NBOX02\n NetBox purge with data folder:armbian-config --cmd NBOX03\n"},{"location":"User-Guide_Armbian-Software/Management/#samba","title":"Samba","text":"SAMBA Remote File share
Samba is an open-source software suite that enables seamless file and printer sharing between Linux/Unix servers and Windows clients. It allows a Linux machine to act as a domain controller, file server, or print server within a Windows network environment, supporting cross-platform interoperability.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd SMB001"},{"location":"User-Guide_Armbian-Software/Management/#webmin","title":"Webmin","text":"Webmin web-based management tool
Webmin is a web-based system administration tool for Unix-like servers. It provides an easy-to-use browser interface to manage users, configure services, edit files, monitor system performance, and control almost every aspect of your server \u2014 without needing to touch the command line.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd WBM001 Access to the web interface The web interface is accessible via port 10000:
https://<your.IP>:10000Emby organizes video, music, live TV, and photos
Emby organizes video, music, live TV, and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone emby Media Server.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @schwar3kat Documentation: Link
armbian-config --cmd EMB001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8091:
https://<your.IP>:8091/armbian/emby/armbian/emby/config/armbian/emby/tvshows /armbian/emby/moviesdocker logs -f emby\n Emby server remove:armbian-config --cmd EMB002\n Emby server purge with data folder:armbian-config --cmd EMB003\n"},{"location":"User-Guide_Armbian-Software/Media/#filebrowser","title":"Filebrowser","text":"Filebrowser provides a web-based file manager accessible via a browser
Filebrowser is a lightweight, web-based file manager that gives you direct access to your files from any browser. It allows users to upload, delete, preview, rename, and organize files and folders \u2014 all through a clean, responsive interface.
Key Features
Official site: https://filebrowser.org
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd FIL001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8095:
http://<your.IP>:8095/armbian/filebrowser/armbian/filebrowser/srv/armbian/filebrowser/database/armbian/filebrowser/filebrowser.json/armbian/filebrowser/brandingdocker logs -f filebrowser\n Filebrowser container remove:armbian-config --cmd FIL002\n Filebrowser container purge with data folder:armbian-config --cmd FIL003\n"},{"location":"User-Guide_Armbian-Software/Media/#hastebin","title":"Hastebin","text":"Hastebin Paste Server
Hastebin is a fast and simple self-hosted pastebin server. It allows users to quickly share text snippets like logs, code, or notes via a web interface or API. Hastebin is lightweight, easy to deploy with Docker, and ideal for teams needing private, temporary paste storage.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @efectn Documentation: Link
armbian-config --cmd HPS001 Hastebin remove:armbian-config --cmd HPS002\n Hastebin purge with data folder:armbian-config --cmd HPS003\n"},{"location":"User-Guide_Armbian-Software/Media/#immich","title":"Immich","text":"Immich - high-performance self-hosted photo and video backup solution
Immich is a self-hosted photo and video backup solution, designed for individuals and families who want:
Thanks to Immich being built with modern technologies like NestJS, TypeScript, and machine learning integrations, users enjoy a smooth, intelligent media experience. Whether you\u2019re a casual user backing up phone photos or a tech-savvy person managing media across multiple devices, Immich provides the flexibility and control of a cloud solution\u2014on your own server.
Summary
Edit: footer header Status: Preview Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd IMM001 Access to the serviceDefault credentialsDirectoriesView logsImmich vs Google Photos vs Synology Photos Immich is accessible via HTTP on port 8077:
http://<your.IP>:8077/armbian/immich/photos/upload//armbian/immich/photos/thumbs//armbian/immich/photos/profile//armbian/immich/photos/library//armbian/immich/photos/encoded-video//armbian/immich/photos/backups/docker logs -f immich\n Feature / Aspect Immich Google Photos Synology Photos Hosting Self-hosted Cloud (Google infrastructure) Self-hosted (on Synology NAS) Privacy & Control Full control, private data storage Data stored and analyzed by Google Full control within your NAS environment Automatic Uploads Yes (via mobile app) Yes (via mobile app) Yes (via mobile app or Synology Drive) Facial Recognition Yes (on-device) Yes (cloud-based) Yes (on-device) Object & Scene Detection Yes (limited but improving) Yes (advanced AI) Yes (basic) Web Interface Yes (modern and responsive) Yes Yes Mobile Apps Yes (iOS & Android) Yes (iOS & Android) Yes (iOS & Android) Albums & Sharing Yes (with public and private sharing) Yes (advanced sharing options) Yes Multi-user Support Yes Limited (mostly single user) Yes (multi-user, tied to NAS users) Backup Original Quality Yes (no compression) Only with paid storage Yes (NAS dependent) Offline Access Limited (depends on app setup) Yes (with sync) Yes Open Source Yes No No Hardware Requirement Any Docker-capable server or NAS N/A (runs on Google\u2019s cloud) Synology NAS required Price Free (self-hosted, you pay for hardware) Free (with limitations) / Paid for storage Included with NAS, hardware cost required Immich remove:armbian-config --cmd IMM002\n Immich purge with data folder:armbian-config --cmd IMM003\n"},{"location":"User-Guide_Armbian-Software/Media/#jellyfin","title":"Jellyfin","text":"Jellyfin Media System
Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby\u2019s 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it.
Edit: footer header Status: Preview Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd JMS001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8096:
http://<your.IP>:8096/armbian/jellyfin/armbian/jellyfin/config/armbian/jellyfin/tvseries/armbian/jellyfin/moviesdocker logs -f jellyfin\n Jellyfin remove:armbian-config --cmd JMS002\n Jellyfin purge with data folder:armbian-config --cmd JMS003\n"},{"location":"User-Guide_Armbian-Software/Media/#navidrome","title":"Navidrome","text":"Navidrome music server and streamer compatible with Subsonic/Airsonic
Navidrome is a modern, lightweight, and self-hosted music server and streamer. It\u2019s designed to be compatible with the Subsonic and Airsonic APIs, making it a drop-in replacement for users of those systems. With Navidrome, you can stream your personal music collection from anywhere using any compatible Subsonic client (mobile or desktop). It supports multi-user access, real-time updates, album artwork, and is built with performance and simplicity in mind\u2014perfect for organizing and accessing large music libraries.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NAV001 Navidrome remove:armbian-config --cmd NAV002\n Navidrome purge with data folder:armbian-config --cmd NAV003\n"},{"location":"User-Guide_Armbian-Software/Media/#nextcloud","title":"Nextcloud","text":"Nextcloud content collaboration platform
Nextcloud gives you access to all your files wherever you are. Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NCT001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 1443:
https://<your.IP>:1443/armbian/nextcloud/armbian/nextcloud/config/armbian/nextcloud/datadocker logs -f nextcloud\n Nextcloud remove:armbian-config --cmd NCT002\n Nextcloud purge with data folder:armbian-config --cmd NCT003\n"},{"location":"User-Guide_Armbian-Software/Media/#omv","title":"OMV","text":"Deploy NAS using OpenMediaVault
OpenMediaVault (OMV) is a powerful, open-source network-attached storage (NAS) operating system built on the Debian Linux distribution. It is designed to provide a simple and intuitive web-based interface for managing storage devices and network services, making it ideal for home users, small offices, and even advanced users looking for a customizable and efficient NAS solution.
OMV supports a wide range of features, including various file systems (EXT4, XFS, BTRFS, etc.), software RAID configurations, scheduled backups, and user and group management. It offers support for common network protocols such as SMB/CIFS (Windows file sharing), NFS, FTP, and SSH, enabling seamless file access across different platforms.
Through its modular design, OpenMediaVault can be easily extended with plugins, allowing users to add functionality like Docker support, media servers, cloud synchronization tools, BitTorrent clients, and more. The system is designed for stability and ease of use, with regular updates and a strong community supporting development and troubleshooting.
Whether used on a dedicated server, a Raspberry Pi, or virtualized hardware, OMV provides a flexible and reliable way to build your own custom NAS.
Warning: installation works only on Debian (bookworm) based Armbian image.
Edit: footer header Status: Stable Architecture: amd64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd OMV001 Access to the web interfaceDirectoriesUsagePlugins and Add-onsView logs The OpenMediaVault web interface is accessible via the default HTTP port:
http://<your.IP>:80/etc/openmediavault//srv/dev-disk-by-.../OpenMediaVault supports a wide range of community plugins:
openmediavault-compose or omv-extrasInstall plugins through the web interface after enabling OMV-Extras.
Bashjournalctl -u openmediavault-engined\ntail -f /var/log/syslog\n OpenMediaVault remove:armbian-config --cmd OMV002\n"},{"location":"User-Guide_Armbian-Software/Media/#owncloud","title":"Owncloud","text":"Owncloud share files and folders, easy and secure
ownCloud is a free and open-source software project for content collaboration and sharing and syncing of files in distributed and federated enterprise scenarios.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd OWC001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7787:
http://<your.IP>:7787/armbian/owncloud/armbian/owncloud/config/armbian/owncloud/datadocker logs -f owncloud\n Owncloud remove:armbian-config --cmd OWC002\n Owncloud purge with data folder:armbian-config --cmd OWC003\n"},{"location":"User-Guide_Armbian-Software/Media/#syncthing","title":"Syncthing","text":"Syncthing continuous file synchronization
Syncthing replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it\u2019s transmitted over the Internet.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd STC001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8884:
https://<your.IP>:8884/armbian/syncthing/armbian/syncthing/config/armbian/syncthing/data1 /armbian/syncthing/data2docker logs -f syncthing\n Syncthing remove:armbian-config --cmd STC002\n Syncthing purge with data folder:armbian-config --cmd STC003\n"},{"location":"User-Guide_Armbian-Software/Media/#stirling","title":"Stirling","text":"Stirling PDF tools for viewing and editing PDF files
Stirling-PDF is a robust, locally hosted web-based PDF manipulation tool using Docker. It enables you to carry out various operations on PDF files, including splitting, merging, converting, reorganizing, adding images, rotating, compressing, and more. This locally hosted web application has evolved to encompass a comprehensive set of features, addressing all your PDF requirements.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd STR001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8075:
https://<your.IP>:8075/armbian/stirlingdocker logs -f stirling-pdf\n Stirling PDF remove:armbian-config --cmd STR002\n Stirling PDF purge with data folder:armbian-config --cmd STR003\n"},{"location":"User-Guide_Armbian-Software/Monitoring/","title":"Real-time monitoring, collecting metrics, up-time status","text":""},{"location":"User-Guide_Armbian-Software/Monitoring/#grafana","title":"Grafana","text":"Grafana data analytics
Grafana is a multi-platform open source analytics and interactive visualization web application. It can produce charts, graphs, and alerts for the web when connected to supported data sources.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd GRA001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 3022:
https://<your.IP>:3022/armbian/grafanadocker logs -f grafana\n Grafana remove:armbian-config --cmd GRA002\n Grafana purge with data folder:armbian-config --cmd GRA003\n"},{"location":"User-Guide_Armbian-Software/Monitoring/#netalertx","title":"NetAlertX","text":"NetAlertX network scanner & notification framework
NetAlertX is an open-source network monitoring and intruder detection tool designed to provide visibility into your Wi-Fi or LAN network. It scans your network for connected devices and alerts you when new or unknown devices are detected, helping you monitor unauthorized access and maintain network security.
Key Features:
NetAlertX is actively maintained and supports various installation methods, including Docker and bare-metal setups. It serves as a proactive solution for maintaining network health and preventing issues before they escalate, providing peace of mind for individuals and small businesses alike.
For more information and installation guides, visit the official NetAlertX documentation.
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NAX001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 20211:
https://<your.IP>:20211/armbian/netalertx/configdocker logs -f netalertx\n NetAlertX network scanner remove:armbian-config --cmd NAX002\n NetAlertX network scanner purge with data folder:armbian-config --cmd NAX003\n"},{"location":"User-Guide_Armbian-Software/Monitoring/#netdata","title":"Netdata","text":"Netdata - monitoring real-time metrics
Netdata is a partially open source tool designed to collect real-time metrics, such as CPU usage, disk activity, bandwidth usage, website visits, etc., and then display them in live, easy-to-interpret charts.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NTD001 Netdata remove:armbian-config --cmd NTD002\n Netdata purge with data folder:armbian-config --cmd NTD003\n"},{"location":"User-Guide_Armbian-Software/Monitoring/#prometheus","title":"Prometheus","text":"Prometheus monitoring and alerting toolkit
Prometheus is an open-source monitoring and alerting toolkit designed for reliability and scalability. It collects and stores time-series data, provides powerful query capabilities, and enables real-time alerts based on defined conditions. Commonly used in cloud and containerized environments, Prometheus integrates seamlessly with Kubernetes and other modern infrastructure.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @efectn Documentation: Link
armbian-config --cmd PRO001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 9191:
http://<your.IP>:9191/armbian/prometheusdocker logs -f prometheus\n Prometheus remove:armbian-config --cmd PRO002\n Prometheus purge with data folder:armbian-config --cmd PRO003\n"},{"location":"User-Guide_Armbian-Software/Monitoring/#uptime-kuma","title":"Uptime Kuma","text":"Uptime Kuma self-hosted monitoring tool
Uptime Kuma is a self-hosted monitoring tool similar to \"Uptime Robot\". It provides a beautiful, easy-to-use web dashboard to monitor HTTP(s), TCP, Ping, and more types of services.
You can receive instant notifications when a service goes down via Telegram, Discord, Slack, email, and many other integrations.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd UPK001 Access to the web interfaceFeatures The web interface is accessible via port 3001:
https://<your.IP>:3001armbian-config --cmd UPK002\n Uptime Kuma purge with data folder:armbian-config --cmd UPK003\n"},{"location":"User-Guide_Armbian-Software/Music/","title":"Music servers and streamers","text":""},{"location":"User-Guide_Armbian-Software/Music/#navidrome","title":"Navidrome","text":"Navidrome music server and streamer compatible with Subsonic/Airsonic
Navidrome is a modern, lightweight, and self-hosted music server and streamer. It\u2019s designed to be compatible with the Subsonic and Airsonic APIs, making it a drop-in replacement for users of those systems. With Navidrome, you can stream your personal music collection from anywhere using any compatible Subsonic client (mobile or desktop). It supports multi-user access, real-time updates, album artwork, and is built with performance and simplicity in mind\u2014perfect for organizing and accessing large music libraries.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NAV001 Navidrome remove:armbian-config --cmd NAV002\n Navidrome purge with data folder:armbian-config --cmd NAV003\n"},{"location":"User-Guide_Armbian-Software/Netconfig/","title":"Console network tools for measuring load and bandwidth","text":""},{"location":"User-Guide_Armbian-Software/Netconfig/#avahi-daemon","title":"avahi-daemon","text":"avahi-daemon hostname broadcast via mDNS
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd AVH001 avahi-daemon remove:armbian-config --cmd AVH002\n"},{"location":"User-Guide_Armbian-Software/Netconfig/#iperf3","title":"iperf3","text":"iperf3 bandwidth measuring tool
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd IPR001 iperf3 remove:armbian-config --cmd IPR002\n"},{"location":"User-Guide_Armbian-Software/Netconfig/#iptraf-ng","title":"iptraf-ng","text":"iptraf-ng IP LAN monitor
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd IPT001 iptraf-ng remove:armbian-config --cmd IPT002\n"},{"location":"User-Guide_Armbian-Software/Netconfig/#nload","title":"nload","text":"nload - realtime console network usage monitor
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NLD001 nload - remove:armbian-config --cmd NLD002\n"},{"location":"User-Guide_Armbian-Software/Printing/","title":"Tools for printing and 3D printing","text":""},{"location":"User-Guide_Armbian-Software/Printing/#octoprint","title":"OctoPrint","text":"OctoPrint web-based 3D printers management tool
OctoPrint is an open source 3D printer controller application, which provides a web interface for the connected printers. It displays printers status and key parameters and allows user to schedule prints and remotely control the printer.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd OCT001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7981:
https://<your.IP>:7981/armbian/octoprintdocker logs -f octoprint\n OctoPrint remove:armbian-config --cmd OCT002\n OctoPrint purge with data folder:armbian-config --cmd OCT003\n"},{"location":"User-Guide_Armbian-Software/Software/","title":"Run/Install 3rd party applications","text":""},{"location":"User-Guide_Armbian-Software/Software/#armbian-infrastructure-services","title":"Armbian infrastructure services","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#cdn-router","title":"CDN router","text":"Router for repository mirror automation
The Armbian Router is an intelligent redirector system that optimizes file downloads by automatically directing users to the best available mirror. It evaluates each download request based on geographic location, server health, and file availability, ensuring faster downloads, balanced load distribution, and high availability. This core service underpins Armbian\u2019s scalable mirror network, seamlessly routing traffic to improve performance and reliability for end users worldwide.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd ART001 Remove CDN router:armbian-config --cmd ART002\n"},{"location":"User-Guide_Armbian-Software/Software/#gh-runners","title":"GH runners","text":"GitHub runners for Armbian automation
This module automates the installation, removal, and status checking of GitHub self-hosted runners for the Armbian project. It supports batch operations and user input through dialog prompts when running interactively.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd GHR001 Supported Commands install Installs one or more GitHub runners using the provided configuration or interactively prompted values.purge / remove Removes runners based on the provided runner name series and target organization or repository.status Quietly checks if any actions.runner services are currently running on the system.gh_token GitHub token with admin rights to manage self-hosted runners. runner_name Name prefix for the runner series (default: armbian). start Start index of the runner series (e.g., 01). stop End index of the runner series (e.g., 05). label_primary Labels for the first runner (default: alfa). label_secondary Labels for additional runners (default: fast,images). organisation GitHub organization name (default: armbian). owner GitHub user or organization owner (used for repo-level runners). repository GitHub repository name (used for repo-level runners). Behavior dialog only in interactive mode.start to stop).actions.runner.install and actions.runner.remove helpers.0 if any runner services are active, 1 otherwise (for scripting use).armbian-config --cmd GHR002\n"},{"location":"User-Guide_Armbian-Software/Software/#rsyncd-server","title":"Rsyncd server","text":"Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd RSD001 Remove Armbian rsyncd server:armbian-config --cmd RSD002\n"},{"location":"User-Guide_Armbian-Software/Software/#backup-solutions-for-your-data","title":"Backup solutions for your data","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#duplicati","title":"Duplicati","text":"Duplicati install
Duplicati is a versatile and secure backup tool designed for everyone, including:
Duplicati offers powerful features such as strong AES-256 encryption, backup scheduling, and flexible storage support (local folders, NAS, cloud providers like Google Drive, Dropbox, S3, and more). Through its web-based interface, users can easily configure, monitor, and restore backups from any browser.
Thanks to Duplicati\u2019s smart design \u2014 working through standard protocols and containerized deployment \u2014 it fits seamlessly into any environment, from personal setups to enterprise infrastructures.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DPL001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8200:
http://<your.IP>:8200/armbian/duplicati/armbian/duplicati/config/armbian/duplicati/backupsdocker logs -f duplicati\n Duplicati remove:armbian-config --cmd DPL002\n Duplicati purge with data folder:armbian-config --cmd DPL003\n"},{"location":"User-Guide_Armbian-Software/Software/#docker-containerization-and-kvm-virtual-machines","title":"Docker containerization and KVM virtual machines","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#docker","title":"Docker","text":"Docker minimal
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd CON001 What is Docker? Docker helps developers build, share, run, and verify applications anywhere - without tedious environment configuration or management.
Docker engine:armbian-config --cmd CON002\n Docker remove:armbian-config --cmd CON003\n Docker purge with all images, containers, and volumes:armbian-config --cmd CON004\n"},{"location":"User-Guide_Armbian-Software/Software/#portainer","title":"Portainer","text":"Portainer container management platform
Portainer simplifies your Docker container management via Portainer web interface. It enables faster deploy of the applications and it gives real time visibility.
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @schwar3kat Documentation: Link
armbian-config --cmd POR001 Access to the web interface The web interface is accessible via port 9002:
http://<your.IP>:9002armbian-config --cmd POR002\n Portainer purge with with data folder:armbian-config --cmd POR003\n"},{"location":"User-Guide_Armbian-Software/Software/#network-wide-ad-blockers-servers","title":"Network-wide ad blockers servers","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#adguardhome","title":"AdGuardHome","text":"AdGuardHome DNS sinkhole
AdGuard Home is a network-wide software that functions as a DNS server and ad blocker. It blocks ads, trackers, and malicious websites at the DNS level, meaning it filters content for all devices connected to the network. It also provides additional features like parental controls, logging, and privacy protections. Essentially, it acts as a gateway between your devices and the internet, blocking unwanted content before it even reaches your devices.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd ADG001 Access to the web interfaceDirectoriesUsageBlack and white listsView logs The web interface is accessible via port 3000:
https://<your.IP>:3000/armbian/adguardhome//armbian/adguardhome/confdir/armbian/adguardhome/workdirThere are many sites in the web giving blocklists and whitelists for AdGuard Home. They can be used when you want to have more blocking as the standard installation gives you. Here are some examples:
docker logs -f adguardhome\n AdGuardHome remove:armbian-config --cmd ADG002\n AdGuardHome purge with data folder:armbian-config --cmd ADG003\n"},{"location":"User-Guide_Armbian-Software/Software/#pi-hole","title":"Pi-hole","text":"Pi-hole DNS ad blocker with Unbound support
Pi-hole is a network-wide ad blocker that acts as a DNS (Domain Name System) sinkhole. It blocks connections to known ad servers, trackers, and malicious domains across all devices in your network, without requiring any browser extensions or client-side software.
"},{"location":"User-Guide_Armbian-Software/Software/#pi-hole-explained","title":"Pi-hole Explained","text":"Pi-hole offers an effective and centralized way to enhance privacy and reduce unwanted content across your entire network.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd PIH001 Access the web interface The web interface of Pi-hole can be accessed via:
http://<your.IP>:8811/adminarmbian-configarmbian-config --cmd PIH002\n Pi-hole remove:armbian-config --cmd PIH003\n Pi-hole purge with data folder:armbian-config --cmd PIH004\n"},{"location":"User-Guide_Armbian-Software/Software/#unbound","title":"Unbound","text":"Unbound caching DNS resolver
Unbound is a high-performance, open-source DNS resolver. It primarily serves to resolve domain names into IP addresses for devices on a network. Unlike regular DNS servers, Unbound performs DNS lookups directly and securely, providing features like DNSSEC validation (ensuring data integrity) and privacy protections. It\u2019s often used to improve speed, security, and privacy by resolving queries locally rather than relying on external DNS services.
Edit: footer header Status: Stable Architecture: x86-64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd UNB001 Default DNS portDirectoriesView logs /armbian/unbound//armbian/unbound/docker logs -f unbound\n Unbound remove:armbian-config --cmd UNB002\n Unbound purge with data folder:armbian-config --cmd UNB003\n"},{"location":"User-Guide_Armbian-Software/Software/#sql-database-servers-and-web-interface-managers","title":"SQL database servers and web interface managers","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#mysql","title":"MySQL","text":"MySQL SQL database server
MySQL is one of the world\u2019s most widely used open-source database servers. Trusted for decades in web, cloud, and enterprise applications.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd MYSQL1 ConfigurationDirectoriesView logs Database access configuration is done at first install:
<your.IP>/armbian/mysql/armbian/mysql/datadocker logs -f mysql\n MySQL remove:armbian-config --cmd MYSQL2\n MySQL purge with data folder:armbian-config --cmd MYSQL3\n"},{"location":"User-Guide_Armbian-Software/Software/#mariadb","title":"Mariadb","text":"Mariadb SQL database server
MariaDB is a fast, open-source relational database server developed by the original creators of MySQL. It is designed to be fully compatible with MySQL while offering improved performance, enhanced security, and additional features.
MariaDB supports a wide range of storage engines, advanced SQL capabilities, and both single-node and clustered deployments. It is widely used in web, cloud, and
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DAT001 ConfigurationDirectoriesView logs Database access configuration is done at first install: - create root password - create database - create normal user - create password for normal user
<your.IP>:3307/armbian/mariadb/armbian/mariadb/configdocker logs -f mariadb\n Mariadb remove:armbian-config --cmd DAT002\n Mariadb purge with data folder:armbian-config --cmd DAT003\n"},{"location":"User-Guide_Armbian-Software/Software/#phpmyadmin","title":"phpMyAdmin","text":"phpMyAdmin web interface manager
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd MYA001 phpMyAdmin remove:armbian-config --cmd MYA002\n phpMyAdmin purge with data folder:armbian-config --cmd MYA003\n"},{"location":"User-Guide_Armbian-Software/Software/#postgresql","title":"PostgreSQL","text":"PostgreSQL install
PostgreSQL is a powerful, open-source object-relational database system known for its robustness, feature richness, and reliability.
It is designed for everyone, including:
PostgreSQL offers strong ACID compliance, concurrency, rich data types, full-text search, JSON support, and extensibility through stored procedures and custom functions. It is trusted globally in financial, government, and web-scale applications.
Thanks to its proven architecture and open-source nature, PostgreSQL fits seamlessly in projects of all sizes.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd PGSQL1 Access to the databaseDirectoriesView logs PostgreSQL is accessible via port 5432:
postgresql://<your.IP>:5432armbianarmbianarmbian/armbian/postgres/datadocker logs -f postgres\n PostgreSQL remove:armbian-config --cmd PGSQL2\n PostgreSQL purge with data folder:armbian-config --cmd PGSQL3\n"},{"location":"User-Guide_Armbian-Software/Software/#redis","title":"Redis","text":"Redis install
Redis is an open-source, in-memory data structure store, used as a database, cache, and message broker. It supports a variety of data structures such as strings, hashes, lists, sets, and sorted sets.
Key Features: - Extremely fast performance with in-memory storage - Persistence options (snapshotting and AOF) - Pub/Sub messaging capabilities - Built-in replication and high availability - Simple API and wide client support
Redis is widely used for real-time applications, caching layers, session stores, and lightweight queues across industries and platforms.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd REDIS1 Access to the serviceDirectoriesView logs Redis server is accessible on port 6379:
redis://<your.IP>:6379/armbian/redis/datadocker logs -f redis\n Redis remove:armbian-config --cmd REDIS2\n Redis purge with data folder:armbian-config --cmd REDIS3\n"},{"location":"User-Guide_Armbian-Software/Software/#applications-and-tools-for-development","title":"Applications and tools for development","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#git-cli","title":"Git CLI","text":"Install tools for cloning and managing repositories (git)
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd GIT001 Remove tools for cloning and managing repositories (git):armbian-config --cmd GIT002\n"},{"location":"User-Guide_Armbian-Software/Software/#download-apps-for-movies-tv-shows-music-and-subtitles","title":"Download apps for movies, TV shows, music and subtitles","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#bazarr","title":"Bazarr","text":"Bazarr automatic subtitles downloader for Sonarr and Radarr
Bazarr is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd BAZ001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 6767:
https://<your.IP>:6767/armbian/bazarr/armbian/bazarr/config/armbian/bazarr/movies /armbian/bazarr/tvdocker logs -f bazarr\n Bazarr remove:armbian-config --cmd BAZ002\n Bazarr purge with data folder:armbian-config --cmd BAZ003\n"},{"location":"User-Guide_Armbian-Software/Software/#deluge","title":"Deluge","text":"Deluge BitTorrent client
Deluge\u2060 is a lightweight, Free Software, cross-platform BitTorrent client.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DEL001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8112:
https://<your.IP>:8112/armbian/deluge/armbian/deluge/config/armbian/deluge/downloadsdocker logs -f deluge\n Deluge remove:armbian-config --cmd DEL002\n Deluge purge with data folder:armbian-config --cmd DEL003\n"},{"location":"User-Guide_Armbian-Software/Software/#qbittorrent","title":"qBittorrent","text":"qBittorrent BitTorrent client
The Qbittorrent\u2060 project aims to provide an open-source software alternative to \u00b5Torrent. qBittorrent is based on the Qt toolkit and libtorrent-rasterbar library.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DOW001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8090:
https://<your.IP>:8090/armbian/qbittorrent/armbian/qbittorrent/config/armbian/qbittorrent/downloadsdocker logs -f qbittorrent\n qBittorrent remove:armbian-config --cmd DOW002\n qBittorrent purge with data folder:armbian-config --cmd DOW003\n Prowlarr:armbian-config --cmd DOW025\n Access to the web interfaceDirectoriesView logs The web interface is accessible via port 9696:
https://<your.IP>:9696/armbian/prowlarr/armbian/prowlarr/configdocker logs -f prowlarr\n Prowlarr remove:armbian-config --cmd DOW026\n Prowlarr purge with data folder:armbian-config --cmd DOW027\n"},{"location":"User-Guide_Armbian-Software/Software/#jellyseerr","title":"Jellyseerr","text":"Jellyseerr Jellyfin/Emby/Plex integration install
Jellyseerr is a free and open source software application for managing requests for your media library. It is a fork of Overseerr built to bring support for Jellyfin & Emby media servers!
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd JEL001 Jellyseerr remove:armbian-config --cmd JEL002\n Jellyseerr purge with data folder:armbian-config --cmd JEL003\n"},{"location":"User-Guide_Armbian-Software/Software/#lidarr","title":"Lidarr","text":"Lidarr automatic music downloader
Lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd LID001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8686:
https://<your.IP>:8686/armbian/lidarr/armbian/lidarr/config/armbian/lidarr/downloads /armbian/lidarr/musicdocker logs -f lidarr\n Lidarr remove:armbian-config --cmd LID002\n Lidarr purge with data folder:armbian-config --cmd LID003\n"},{"location":"User-Guide_Armbian-Software/Software/#medusa","title":"Medusa","text":"Medusa automatic downloader for TV shows
Medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd MDS001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8081:
https://<your.IP>:8081/armbian/medusa/armbian/medusa/config/armbian/medusa/downloads/armbian/medusa/downloads/tvdocker logs -f medusa\n Medusa TV shows downloader remove:armbian-config --cmd MDS002\n Medusa TV shows downloader purge:armbian-config --cmd MDS003\n"},{"location":"User-Guide_Armbian-Software/Software/#radarr","title":"Radarr","text":"Radarr automatic downloader for movies
Radarr - A fork of Sonarr to work with movies \u00e0 la Couchpotato.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd RAD001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7878:
https://<your.IP>:7878/armbian/radarr/armbian/radarr/config/armbian/radarr/movies/armbian/radarr/clientdocker logs -f radarr\n Radarr remove:armbian-config --cmd RAD002\n Radarr purge with data folder:armbian-config --cmd RAD003\n"},{"location":"User-Guide_Armbian-Software/Software/#readarr","title":"Readarr","text":"Readarr automatic downloader for Ebooks
Readarr - Book Manager and Automation (Sonarr for Ebooks)
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd RDR001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8787:
https://<your.IP>:8787/armbian/readarr/armbian/readarr/config/armbian/readarr/books /armbian/readarr/clientdocker logs -f readarr\n Readarr remove:armbian-config --cmd RDR002\n Readarr purge with data folder:armbian-config --cmd RDR003\n"},{"location":"User-Guide_Armbian-Software/Software/#sabnzbd","title":"SABnzbd","text":"SABnzbd newsgroup downloader
Sabnzbd\u2060 makes Usenet as simple and streamlined as possible by automating everything we can. All you have to do is add an .nzb. SABnzbd takes over from there, where it will be automatically downloaded, verified, repaired, extracted and filed away with zero human interaction.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SABN01 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8380:
https://<your.IP>:8380/armbian/sabnzbd/armbian/sabnzbd/config/armbian/sabnzbd/downloads/armbian/sabnzbd/incompletedocker logs -f sabnzbd\n SABnzbd remove:armbian-config --cmd SABN02\n SABnzbd purge with data folder:armbian-config --cmd SABN03\n"},{"location":"User-Guide_Armbian-Software/Software/#sonarr","title":"Sonarr","text":"Sonarr automatic downloader for TV shows
Sonarr (formerly NZBdrone) is a PVR for usenet and bittorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SON001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8989:
https://<your.IP>:8989/armbian/sonarr/armbian/sonarr/config/armbian/sonarr/tvseries/armbian/sonarr/clientdocker logs -f sonarr\n Sonarr remove:armbian-config --cmd SON002\n Sonarr purge with data folder:armbian-config --cmd SON003\n"},{"location":"User-Guide_Armbian-Software/Software/#transmission","title":"Transmission","text":"Transmission BitTorrent client
Transmission\u2060 is designed for easy, powerful use. Transmission has the features you want from a BitTorrent client: encryption, a web interface, peer exchange, magnet links, DHT, \u00b5TP, UPnP and NAT-PMP port forwarding, webseed support, watch directories, tracker editing, global and per-torrent speed limits, and more.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd TRA001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 9091:
https://<your.IP>:9091/armbian/transmission/armbian/transmission/config/armbian/transmission/downloads/armbian/transmission/watchdocker logs -f transmission\n Transmission remove:armbian-config --cmd TRA002\n Transmission purge with data folder:armbian-config --cmd TRA003\n"},{"location":"User-Guide_Armbian-Software/Software/#manage-your-finances","title":"Manage your finances","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#actual-budget","title":"Actual Budget","text":"Do your finances with Actual Budget
Actual Budget is a free, open-source personal finance app built around the envelope budgeting method.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd ABU001 Warning: HTTPS Certificate Required
After initially installing the Actual server, you might get stuck at the step: \u201cInitializing the connection to the local database\u2026\u201d
The issue is due to the server not having an HTTPS certificate. After activating an HTTPS certificate for the Actual server, everything should work fine.
If you still encounter issues even after setting up HTTPS, we highly recommend reaching out to the Actual Budget Discord server \u2014 the developers and community there are very kind and helpful.
Actual Budget remove:armbian-config --cmd ABU002\n Actual Budget purge with data folder:armbian-config --cmd ABU003\n"},{"location":"User-Guide_Armbian-Software/Software/#home-automation-for-control-home-appliances","title":"Home Automation for control home appliances","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#domoticz","title":"Domoticz","text":"Domoticz open source home automation
Domoticz is an open-source home automation platform that allows you to control and monitor smart devices in your home. It supports a wide range of devices, including lights, sensors, thermostats, and cameras. Through its web interface or mobile app, you can set up automation rules and schedules, providing greater convenience and energy efficiency. It\u2019s customizable, flexible, and can be run on a variety of hardware platforms supported by Armbian.
Access to the web interfaceDirectoriesAdvanced setupThe web interface is accessible via port 8780:
https://<your.IP>:8780/armbian/domoticz/dev/ttyUSB0) to Docker container is enabled by defaultEdit: footer header Status: Preview Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd DOM001 Domoticz remove:armbian-config --cmd DOM002\n Domoticz purge with data folder:armbian-config --cmd DOM003\n"},{"location":"User-Guide_Armbian-Software/Software/#evcc","title":"EVCC","text":"EVCC - solar charging automation
evcc is an energy management system with a focus on electromobility. The software controls your EV charger or smart plug. It communicates with your vehicle, inverter or home storage to make intelligent charging decisions. The software is open source and community-driven.
Edit: footer header Status: Preview Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd EVCC01 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7070:
https://<your.IP>:7070/armbian/evcc/armbian/evcc/evcc.yamldocker logs -f evcc\n EVCC - solar charging automation remove:armbian-config --cmd EVCC02\n EVCC purge with data folder:armbian-config --cmd EVCC03\n"},{"location":"User-Guide_Armbian-Software/Software/#openhab","title":"openHAB","text":"openHAB empowering the smart home
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd HAB001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 2080:
https://<your.IP>:2080/armbian/openhab/armbian/openhab/conf/armbian/openhab/userdata/armbian/openhab/addonsSee also openHAB file locations.
Bashdocker logs -f openhab\n openHAB remove:armbian-config --cmd HAB002\n openHAB purge with data folder:armbian-config --cmd HAB003\n"},{"location":"User-Guide_Armbian-Software/Software/#home-assistant","title":"Home Assistant","text":"Home Assistant open source home automation
Home Assistant is an open source smart home platform that allows you to connect your smart home devices like your TV, fan, cameras, thermostats, lights, and sensors. As a user, you can build intricate automation using Home Assistant\u2019s user-friendly, unified web-based user interface.
Perfect to run on any single board computer with 4 cores and at least 512Mb of memory. Armbian installation is optimised to run from SD/eMMC media, but it is recommended to use SSD.
Limited support
The supervised installation method on Armbian is not officially supported by the Home Assistant project. Additionally, installation on hardware that is not officially supported is also outside the scope of support provided by the Armbian team.
You are welcome to report high-level application issues that are reproducible on the official Home Assistant Operating System (HAOS) within the Home Assistant Community. For any topics related to single-board computer hardware, you may use the Armbian Community Forums; however, please be aware that official support from the Armbian team is not guaranteed.
While the Home Assistant team deprecated the Supervised installation method, the Armbian team will continue to provide and maintain it, as long as automated installation tests succeed and the required maintenance remains manageable.
Edit: footer header Status: Preview Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd HAS001 Access to the web interfaceDirectoriesArmbian advantages The web interface is accessible via port 8123:
https://<your.IP>:8123Home Assistant on Armbian runs supervised in a Docker container. This secures same functionality as stock HAOS.
/armbian/haosarmbian-config --cmd HAS002\n Home Assistant purge with data folder:armbian-config --cmd HAS003\n"},{"location":"User-Guide_Armbian-Software/Software/#remote-file-management-tools","title":"Remote File & Management tools","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#cockpit","title":"Cockpit","text":"Cockpit OS and VM management tool
Cockpit is a web-based graphical interface for servers, intended for everyone.
Here\u2019s a subset of tasks you can perform on each host running Cockpit
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd CPT001 Access to the web interfaceVideo instructions The web interface is accessible via port 9890:
https://<your.IP>:9890armbian-config --cmd CPT002\n Purge Cockpit with virtual machines:armbian-config --cmd CPT003\n"},{"location":"User-Guide_Armbian-Software/Software/#homepage","title":"Homepage","text":"Install Homepage startpage / application dashboard
gethomepage is a fast, fully static, highly customizable application dashboard built for modern self-hosted environments. With a fully proxied architecture and zero runtime, it delivers exceptional speed, security, and simplicity for organizing and accessing your services.
It supports over 100 service integrations and multiple languages, offering live status displays and dynamic resource monitoring out-of-the-box. Configuration is effortless via YAML files or automatic Docker label discovery, making setup and management seamless.
Key Features
Whether you\u2019re running a small homelab or a full server fleet, gethomepage offers a sleek, powerful, and secure way to stay organized.
Edit: footer header Status: Stable Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd HPG001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 3021:
https://<your.IP>:3021Configuration: Please reffer to official manual https://gethomepage.dev/configs/
/armbian/homepage/armbian/homepage/configdocker logs -f homepage\n Remove Homepage:armbian-config --cmd HPG002\n Purge Homepage with data folder:armbian-config --cmd HPG003\n"},{"location":"User-Guide_Armbian-Software/Software/#netbox","title":"NetBox","text":"NetBox infrastructure resource modeling install
NetBox is an open-source infrastructure resource modeling (IRM) tool used for managing and documenting networks and data center assets.
Requirements (installed automatically)
Key Features
Originally developed by DigitalOcean, NetBox is widely adopted by network engineers and sysadmins to maintain source-of-truth data for automation.
Official Website
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NBOX01 Access to the serviceDefault credentialsDirectoriesView logsManage the service NetBox is accessible via HTTP on port 8222:
http://<your.IP>:8222http://<your.IP>:8222/api/admin/armbian/netbox/config//armbian/netbox/scripts//armbian/netbox/reports/docker logs -f netbox\n Bashdocker exec -it netbox bash\n NetBox remove:armbian-config --cmd NBOX02\n NetBox purge with data folder:armbian-config --cmd NBOX03\n"},{"location":"User-Guide_Armbian-Software/Software/#samba","title":"Samba","text":"SAMBA Remote File share
Samba is an open-source software suite that enables seamless file and printer sharing between Linux/Unix servers and Windows clients. It allows a Linux machine to act as a domain controller, file server, or print server within a Windows network environment, supporting cross-platform interoperability.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd SMB001"},{"location":"User-Guide_Armbian-Software/Software/#webmin","title":"Webmin","text":"Webmin web-based management tool
Webmin is a web-based system administration tool for Unix-like servers. It provides an easy-to-use browser interface to manage users, configure services, edit files, monitor system performance, and control almost every aspect of your server \u2014 without needing to touch the command line.
Edit: footer header Status: Stable Architecture: x86-64 aarch64 armhf riscv64 Maintainer: @armbian Documentation: Link
armbian-config --cmd WBM001 Access to the web interface The web interface is accessible via port 10000:
https://<your.IP>:10000Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#emby","title":"Emby","text":"Emby organizes video, music, live TV, and photos
Emby organizes video, music, live TV, and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone emby Media Server.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @schwar3kat Documentation: Link
armbian-config --cmd EMB001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8091:
https://<your.IP>:8091/armbian/emby/armbian/emby/config/armbian/emby/tvshows /armbian/emby/moviesdocker logs -f emby\n Emby server remove:armbian-config --cmd EMB002\n Emby server purge with data folder:armbian-config --cmd EMB003\n"},{"location":"User-Guide_Armbian-Software/Software/#filebrowser","title":"Filebrowser","text":"Filebrowser provides a web-based file manager accessible via a browser
Filebrowser is a lightweight, web-based file manager that gives you direct access to your files from any browser. It allows users to upload, delete, preview, rename, and organize files and folders \u2014 all through a clean, responsive interface.
Key Features
Official site: https://filebrowser.org
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd FIL001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8095:
http://<your.IP>:8095/armbian/filebrowser/armbian/filebrowser/srv/armbian/filebrowser/database/armbian/filebrowser/filebrowser.json/armbian/filebrowser/brandingdocker logs -f filebrowser\n Filebrowser container remove:armbian-config --cmd FIL002\n Filebrowser container purge with data folder:armbian-config --cmd FIL003\n"},{"location":"User-Guide_Armbian-Software/Software/#hastebin","title":"Hastebin","text":"Hastebin Paste Server
Hastebin is a fast and simple self-hosted pastebin server. It allows users to quickly share text snippets like logs, code, or notes via a web interface or API. Hastebin is lightweight, easy to deploy with Docker, and ideal for teams needing private, temporary paste storage.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @efectn Documentation: Link
armbian-config --cmd HPS001 Hastebin remove:armbian-config --cmd HPS002\n Hastebin purge with data folder:armbian-config --cmd HPS003\n"},{"location":"User-Guide_Armbian-Software/Software/#immich","title":"Immich","text":"Immich - high-performance self-hosted photo and video backup solution
Immich is a self-hosted photo and video backup solution, designed for individuals and families who want:
Thanks to Immich being built with modern technologies like NestJS, TypeScript, and machine learning integrations, users enjoy a smooth, intelligent media experience. Whether you\u2019re a casual user backing up phone photos or a tech-savvy person managing media across multiple devices, Immich provides the flexibility and control of a cloud solution\u2014on your own server.
Summary
Edit: footer header Status: Preview Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd IMM001 Access to the serviceDefault credentialsDirectoriesView logsImmich vs Google Photos vs Synology Photos Immich is accessible via HTTP on port 8077:
http://<your.IP>:8077/armbian/immich/photos/upload//armbian/immich/photos/thumbs//armbian/immich/photos/profile//armbian/immich/photos/library//armbian/immich/photos/encoded-video//armbian/immich/photos/backups/docker logs -f immich\n Feature / Aspect Immich Google Photos Synology Photos Hosting Self-hosted Cloud (Google infrastructure) Self-hosted (on Synology NAS) Privacy & Control Full control, private data storage Data stored and analyzed by Google Full control within your NAS environment Automatic Uploads Yes (via mobile app) Yes (via mobile app) Yes (via mobile app or Synology Drive) Facial Recognition Yes (on-device) Yes (cloud-based) Yes (on-device) Object & Scene Detection Yes (limited but improving) Yes (advanced AI) Yes (basic) Web Interface Yes (modern and responsive) Yes Yes Mobile Apps Yes (iOS & Android) Yes (iOS & Android) Yes (iOS & Android) Albums & Sharing Yes (with public and private sharing) Yes (advanced sharing options) Yes Multi-user Support Yes Limited (mostly single user) Yes (multi-user, tied to NAS users) Backup Original Quality Yes (no compression) Only with paid storage Yes (NAS dependent) Offline Access Limited (depends on app setup) Yes (with sync) Yes Open Source Yes No No Hardware Requirement Any Docker-capable server or NAS N/A (runs on Google\u2019s cloud) Synology NAS required Price Free (self-hosted, you pay for hardware) Free (with limitations) / Paid for storage Included with NAS, hardware cost required Immich remove:armbian-config --cmd IMM002\n Immich purge with data folder:armbian-config --cmd IMM003\n"},{"location":"User-Guide_Armbian-Software/Software/#jellyfin","title":"Jellyfin","text":"Jellyfin Media System
Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby\u2019s 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it.
Edit: footer header Status: Preview Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd JMS001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8096:
http://<your.IP>:8096/armbian/jellyfin/armbian/jellyfin/config/armbian/jellyfin/tvseries/armbian/jellyfin/moviesdocker logs -f jellyfin\n Jellyfin remove:armbian-config --cmd JMS002\n Jellyfin purge with data folder:armbian-config --cmd JMS003\n"},{"location":"User-Guide_Armbian-Software/Software/#navidrome","title":"Navidrome","text":"Navidrome music server and streamer compatible with Subsonic/Airsonic
Navidrome is a modern, lightweight, and self-hosted music server and streamer. It\u2019s designed to be compatible with the Subsonic and Airsonic APIs, making it a drop-in replacement for users of those systems. With Navidrome, you can stream your personal music collection from anywhere using any compatible Subsonic client (mobile or desktop). It supports multi-user access, real-time updates, album artwork, and is built with performance and simplicity in mind\u2014perfect for organizing and accessing large music libraries.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NAV001 Navidrome remove:armbian-config --cmd NAV002\n Navidrome purge with data folder:armbian-config --cmd NAV003\n"},{"location":"User-Guide_Armbian-Software/Software/#nextcloud","title":"Nextcloud","text":"Nextcloud content collaboration platform
Nextcloud gives you access to all your files wherever you are. Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices. Through Nextcloud you also access, sync and share your existing data on that FTP drive at the office, a Dropbox or a NAS you have at home.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NCT001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 1443:
https://<your.IP>:1443/armbian/nextcloud/armbian/nextcloud/config/armbian/nextcloud/datadocker logs -f nextcloud\n Nextcloud remove:armbian-config --cmd NCT002\n Nextcloud purge with data folder:armbian-config --cmd NCT003\n"},{"location":"User-Guide_Armbian-Software/Software/#omv","title":"OMV","text":"Deploy NAS using OpenMediaVault
OpenMediaVault (OMV) is a powerful, open-source network-attached storage (NAS) operating system built on the Debian Linux distribution. It is designed to provide a simple and intuitive web-based interface for managing storage devices and network services, making it ideal for home users, small offices, and even advanced users looking for a customizable and efficient NAS solution.
OMV supports a wide range of features, including various file systems (EXT4, XFS, BTRFS, etc.), software RAID configurations, scheduled backups, and user and group management. It offers support for common network protocols such as SMB/CIFS (Windows file sharing), NFS, FTP, and SSH, enabling seamless file access across different platforms.
Through its modular design, OpenMediaVault can be easily extended with plugins, allowing users to add functionality like Docker support, media servers, cloud synchronization tools, BitTorrent clients, and more. The system is designed for stability and ease of use, with regular updates and a strong community supporting development and troubleshooting.
Whether used on a dedicated server, a Raspberry Pi, or virtualized hardware, OMV provides a flexible and reliable way to build your own custom NAS.
Warning: installation works only on Debian (bookworm) based Armbian image.
Edit: footer header Status: Stable Architecture: amd64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd OMV001 Access to the web interfaceDirectoriesUsagePlugins and Add-onsView logs The OpenMediaVault web interface is accessible via the default HTTP port:
http://<your.IP>:80/etc/openmediavault//srv/dev-disk-by-.../OpenMediaVault supports a wide range of community plugins:
openmediavault-compose or omv-extrasInstall plugins through the web interface after enabling OMV-Extras.
Bashjournalctl -u openmediavault-engined\ntail -f /var/log/syslog\n OpenMediaVault remove:armbian-config --cmd OMV002\n"},{"location":"User-Guide_Armbian-Software/Software/#owncloud","title":"Owncloud","text":"Owncloud share files and folders, easy and secure
ownCloud is a free and open-source software project for content collaboration and sharing and syncing of files in distributed and federated enterprise scenarios.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd OWC001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7787:
http://<your.IP>:7787/armbian/owncloud/armbian/owncloud/config/armbian/owncloud/datadocker logs -f owncloud\n Owncloud remove:armbian-config --cmd OWC002\n Owncloud purge with data folder:armbian-config --cmd OWC003\n"},{"location":"User-Guide_Armbian-Software/Software/#syncthing","title":"Syncthing","text":"Syncthing continuous file synchronization
Syncthing replaces proprietary sync and cloud services with something open, trustworthy and decentralized. Your data is your data alone and you deserve to choose where it is stored, if it is shared with some third party and how it\u2019s transmitted over the Internet.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd STC001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8884:
https://<your.IP>:8884/armbian/syncthing/armbian/syncthing/config/armbian/syncthing/data1 /armbian/syncthing/data2docker logs -f syncthing\n Syncthing remove:armbian-config --cmd STC002\n Syncthing purge with data folder:armbian-config --cmd STC003\n"},{"location":"User-Guide_Armbian-Software/Software/#stirling","title":"Stirling","text":"Stirling PDF tools for viewing and editing PDF files
Stirling-PDF is a robust, locally hosted web-based PDF manipulation tool using Docker. It enables you to carry out various operations on PDF files, including splitting, merging, converting, reorganizing, adding images, rotating, compressing, and more. This locally hosted web application has evolved to encompass a comprehensive set of features, addressing all your PDF requirements.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd STR001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 8075:
https://<your.IP>:8075/armbian/stirlingdocker logs -f stirling-pdf\n Stirling PDF remove:armbian-config --cmd STR002\n Stirling PDF purge with data folder:armbian-config --cmd STR003\n"},{"location":"User-Guide_Armbian-Software/Software/#real-time-monitoring-collecting-metrics-up-time-status","title":"Real-time monitoring, collecting metrics, up-time status","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#grafana","title":"Grafana","text":"Grafana data analytics
Grafana is a multi-platform open source analytics and interactive visualization web application. It can produce charts, graphs, and alerts for the web when connected to supported data sources.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd GRA001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 3022:
https://<your.IP>:3022/armbian/grafanadocker logs -f grafana\n Grafana remove:armbian-config --cmd GRA002\n Grafana purge with data folder:armbian-config --cmd GRA003\n"},{"location":"User-Guide_Armbian-Software/Software/#netalertx","title":"NetAlertX","text":"NetAlertX network scanner & notification framework
NetAlertX is an open-source network monitoring and intruder detection tool designed to provide visibility into your Wi-Fi or LAN network. It scans your network for connected devices and alerts you when new or unknown devices are detected, helping you monitor unauthorized access and maintain network security.
Key Features:
NetAlertX is actively maintained and supports various installation methods, including Docker and bare-metal setups. It serves as a proactive solution for maintaining network health and preventing issues before they escalate, providing peace of mind for individuals and small businesses alike.
For more information and installation guides, visit the official NetAlertX documentation.
Edit: footer header Status: Stable Architecture: x86-64 arm64 armhf Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NAX001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 20211:
https://<your.IP>:20211/armbian/netalertx/configdocker logs -f netalertx\n NetAlertX network scanner remove:armbian-config --cmd NAX002\n NetAlertX network scanner purge with data folder:armbian-config --cmd NAX003\n"},{"location":"User-Guide_Armbian-Software/Software/#netdata","title":"Netdata","text":"Netdata - monitoring real-time metrics
Netdata is a partially open source tool designed to collect real-time metrics, such as CPU usage, disk activity, bandwidth usage, website visits, etc., and then display them in live, easy-to-interpret charts.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NTD001 Netdata remove:armbian-config --cmd NTD002\n Netdata purge with data folder:armbian-config --cmd NTD003\n"},{"location":"User-Guide_Armbian-Software/Software/#prometheus","title":"Prometheus","text":"Prometheus monitoring and alerting toolkit
Prometheus is an open-source monitoring and alerting toolkit designed for reliability and scalability. It collects and stores time-series data, provides powerful query capabilities, and enables real-time alerts based on defined conditions. Commonly used in cloud and containerized environments, Prometheus integrates seamlessly with Kubernetes and other modern infrastructure.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @efectn Documentation: Link
armbian-config --cmd PRO001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 9191:
http://<your.IP>:9191/armbian/prometheusdocker logs -f prometheus\n Prometheus remove:armbian-config --cmd PRO002\n Prometheus purge with data folder:armbian-config --cmd PRO003\n"},{"location":"User-Guide_Armbian-Software/Software/#uptime-kuma","title":"Uptime Kuma","text":"Uptime Kuma self-hosted monitoring tool
Uptime Kuma is a self-hosted monitoring tool similar to \"Uptime Robot\". It provides a beautiful, easy-to-use web dashboard to monitor HTTP(s), TCP, Ping, and more types of services.
You can receive instant notifications when a service goes down via Telegram, Discord, Slack, email, and many other integrations.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd UPK001 Access to the web interfaceFeatures The web interface is accessible via port 3001:
https://<your.IP>:3001armbian-config --cmd UPK002\n Uptime Kuma purge with data folder:armbian-config --cmd UPK003\n"},{"location":"User-Guide_Armbian-Software/Software/#console-network-tools-for-measuring-load-and-bandwidth","title":"Console network tools for measuring load and bandwidth","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#avahi-daemon","title":"avahi-daemon","text":"avahi-daemon hostname broadcast via mDNS
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd AVH001 avahi-daemon remove:armbian-config --cmd AVH002\n"},{"location":"User-Guide_Armbian-Software/Software/#iperf3","title":"iperf3","text":"iperf3 bandwidth measuring tool
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd IPR001 iperf3 remove:armbian-config --cmd IPR002\n"},{"location":"User-Guide_Armbian-Software/Software/#iptraf-ng","title":"iptraf-ng","text":"iptraf-ng IP LAN monitor
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd IPT001 iptraf-ng remove:armbian-config --cmd IPT002\n"},{"location":"User-Guide_Armbian-Software/Software/#nload","title":"nload","text":"nload - realtime console network usage monitor
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd NLD001 nload - remove:armbian-config --cmd NLD002\n"},{"location":"User-Guide_Armbian-Software/Software/#tools-for-printing-and-3d-printing","title":"Tools for printing and 3D printing","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#octoprint","title":"OctoPrint","text":"OctoPrint web-based 3D printers management tool
OctoPrint is an open source 3D printer controller application, which provides a web interface for the connected printers. It displays printers status and key parameters and allows user to schedule prints and remotely control the printer.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd OCT001 Access to the web interfaceDirectoriesView logs The web interface is accessible via port 7981:
https://<your.IP>:7981/armbian/octoprintdocker logs -f octoprint\n OctoPrint remove:armbian-config --cmd OCT002\n OctoPrint purge with data folder:armbian-config --cmd OCT003\n"},{"location":"User-Guide_Armbian-Software/Software/#virtual-private-network-tools","title":"Virtual Private Network tools","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#wireguard","title":"WireGuard","text":"WireGuard VPN server
WireGuard is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. Regarded as the most secure, easiest to use, and simplest VPN solution in the industry.
Edit: footer header Status: Enabled Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd WRG001 ServerClientAccess to the server from internetDirectoriesView logs Launch armbian-config --cmd WRG001.
When prompted, enter a comma-separated list of peer names (e.g., laptop,phone,router).
Peer configuration files will be created in
Text Only/armbian/wireguard/config/wg_confs/peer_laptop.conf\n Scan the QR code (for mobile) or transfer .conf to your client system.
Connect the client using the configuration.
Launch armbian-config --cmd WRG002.
You will be asked to edit or paste a valid WireGuard configuration.
Provide the client configuration in this format:
[Interface]\nAddress = 10.13.13.2/32\nPrivateKey = <your-private-key>\nDNS = 1.1.1.1\n\n[Peer]\nPublicKey = <server-public-key>\nEndpoint = your.server.com:51820\nAllowedIPs = 0.0.0.0/0\nPersistentKeepalive = 25\n The configuration will be saved to:
Text Only/armbian/wireguard/config/wg_confs/client.conf\n When prompted, enter the local LAN subnets you wish to route via VPN (e.g., 10.0.10.0/24,192.168.0.0/16).
The VPN container will be started and routing rules will be generated accordingly.
Routing will be restored automatically on boot via systemd service.
Remember to open/forward the port 51820 (UDP) through NAT on your router.
/armbian/wireguard/armbian/wireguard/configdocker logs -f wireguard\n WireGuard VPN client:armbian-config --cmd WRG002\n WireGuard remove:armbian-config --cmd WRG003\n WireGuard VPN server QR codes for clients:armbian-config --cmd WRG004\n WireGuard purge with data folder:armbian-config --cmd WRG005\n"},{"location":"User-Guide_Armbian-Software/Software/#zerotier","title":"ZeroTier","text":"ZeroTier connect devices over your own private network in the world.
Edit: footer header Status: Stable
armbian-config --cmd ZTR001"},{"location":"User-Guide_Armbian-Software/Software/#web-server-lemp-reverse-proxy-lets-encrypt-ssl","title":"Web server, LEMP, reverse proxy, Let\u2019s Encrypt SSL","text":"Edit: footer header
"},{"location":"User-Guide_Armbian-Software/Software/#swag","title":"SWAG","text":"SWAG reverse proxy
SWAG - Secure Web Application Gateway sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let\u2019s Encrypt). It also contains fail2ban for intrusion prevention.
After entering required information, your server will have auto updating SSL secured website! To this website you can attach several services, for example: https://my.server.com/netdata will run Netdata instance.
RequirementsDirectoriesAdvanced setup/armbian/swag/config//armbian/swag/config/www//armbian/swag/config/nginx/proxy-confs/Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SWAG01 SWAG reverse proxy .htpasswd set:armbian-config --cmd SWAG02\n SWAG remove:armbian-config --cmd SWAG03\n SWAG purge with data folder:armbian-config --cmd SWAG04\n"},{"location":"User-Guide_Armbian-Software/Software/#ghost","title":"Ghost","text":"Ghost CMS install
Ghost is a powerful open-source publishing platform designed for professional publishing, newsletters, and modern blogs. It\u2019s built on Node.js and provides a clean, fast, and customizable CMS experience.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd GHOST1 ConfigurationDirectoriesView logs Initial setup includes:
9190http://<your.IP>:9190/ghost (or behind reverse proxy like SWAG)http://<your.IP>:9190/armbian/ghostdocker logs -f ghost\n Ghost CMS remove:armbian-config --cmd GHOST2\n Ghost CMS purge with data folder:armbian-config --cmd GHOST3\n"},{"location":"User-Guide_Armbian-Software/VPN/","title":"Virtual Private Network tools","text":""},{"location":"User-Guide_Armbian-Software/VPN/#wireguard","title":"WireGuard","text":"WireGuard VPN server
WireGuard is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. Regarded as the most secure, easiest to use, and simplest VPN solution in the industry.
Edit: footer header Status: Enabled Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd WRG001 ServerClientAccess to the server from internetDirectoriesView logs Launch armbian-config --cmd WRG001.
When prompted, enter a comma-separated list of peer names (e.g., laptop,phone,router).
Peer configuration files will be created in
Text Only/armbian/wireguard/config/wg_confs/peer_laptop.conf\n Scan the QR code (for mobile) or transfer .conf to your client system.
Connect the client using the configuration.
Launch armbian-config --cmd WRG002.
You will be asked to edit or paste a valid WireGuard configuration.
Provide the client configuration in this format:
[Interface]\nAddress = 10.13.13.2/32\nPrivateKey = <your-private-key>\nDNS = 1.1.1.1\n\n[Peer]\nPublicKey = <server-public-key>\nEndpoint = your.server.com:51820\nAllowedIPs = 0.0.0.0/0\nPersistentKeepalive = 25\n The configuration will be saved to:
Text Only/armbian/wireguard/config/wg_confs/client.conf\n When prompted, enter the local LAN subnets you wish to route via VPN (e.g., 10.0.10.0/24,192.168.0.0/16).
The VPN container will be started and routing rules will be generated accordingly.
Routing will be restored automatically on boot via systemd service.
Remember to open/forward the port 51820 (UDP) through NAT on your router.
/armbian/wireguard/armbian/wireguard/configdocker logs -f wireguard\n WireGuard VPN client:armbian-config --cmd WRG002\n WireGuard remove:armbian-config --cmd WRG003\n WireGuard VPN server QR codes for clients:armbian-config --cmd WRG004\n WireGuard purge with data folder:armbian-config --cmd WRG005\n"},{"location":"User-Guide_Armbian-Software/VPN/#zerotier","title":"ZeroTier","text":"ZeroTier connect devices over your own private network in the world.
Edit: footer header Status: Stable
armbian-config --cmd ZTR001"},{"location":"User-Guide_Armbian-Software/WebHosting/","title":"Web server, LEMP, reverse proxy, Let\u2019s Encrypt SSL","text":""},{"location":"User-Guide_Armbian-Software/WebHosting/#swag","title":"SWAG","text":"SWAG reverse proxy
SWAG - Secure Web Application Gateway sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let\u2019s Encrypt). It also contains fail2ban for intrusion prevention.
After entering required information, your server will have auto updating SSL secured website! To this website you can attach several services, for example: https://my.server.com/netdata will run Netdata instance.
RequirementsDirectoriesAdvanced setup/armbian/swag/config//armbian/swag/config/www//armbian/swag/config/nginx/proxy-confs/Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd SWAG01 SWAG reverse proxy .htpasswd set:armbian-config --cmd SWAG02\n SWAG remove:armbian-config --cmd SWAG03\n SWAG purge with data folder:armbian-config --cmd SWAG04\n"},{"location":"User-Guide_Armbian-Software/WebHosting/#ghost","title":"Ghost","text":"Ghost CMS install
Ghost is a powerful open-source publishing platform designed for professional publishing, newsletters, and modern blogs. It\u2019s built on Node.js and provides a clean, fast, and customizable CMS experience.
Edit: footer header Status: Stable Architecture: x86-64 arm64 Maintainer: @igorpecovnik Documentation: Link
armbian-config --cmd GHOST1 ConfigurationDirectoriesView logs Initial setup includes:
9190http://<your.IP>:9190/ghost (or behind reverse proxy like SWAG)http://<your.IP>:9190/armbian/ghostdocker logs -f ghost\n Ghost CMS remove:armbian-config --cmd GHOST2\n Ghost CMS purge with data folder:armbian-config --cmd GHOST3\n"}]}
\ No newline at end of file