├── .editorconfig ├── .github ├── DOCUMENT_TEMPLATE.md ├── dependabot.yml ├── labeler.yml ├── labels.yml └── workflows │ ├── clean-workflow-logs.yml │ ├── labels-from-yml.yml │ ├── merge-announce.yml │ ├── pdf-at-pr.yaml │ ├── pr-announce.yml │ ├── pr-auto-labeler.yml │ ├── pull-from-armbian-config.yml │ ├── pull-mirrors-from-db.yml │ └── release.yaml ├── .gitignore ├── .markdownlint.json ├── DOCUMENTATION.md ├── LICENSE ├── README.md ├── docs ├── Board_Maintainers_Procedures_and_Guidelines.md ├── Community_Forums.md ├── Community_Github.md ├── Community_IRC.md ├── Contribute │ └── Armbian-config.md ├── Developer-Guide_Adding-Board-Family.md ├── Developer-Guide_Build-Commands.md ├── Developer-Guide_Build-Preparation.md ├── Developer-Guide_Build-Switches.md ├── Developer-Guide_Building-with-Docker.md ├── Developer-Guide_Building-with-Multipass.md ├── Developer-Guide_Extensions-Hooks.md ├── Developer-Guide_Extensions.md ├── Developer-Guide_Overview.md ├── Developer-Guide_User-Configurations.md ├── Developer-Guide_Welcome.md ├── Development-Code_Review_Procedures_and_Guidelines.md ├── Mirrors.md ├── Process_Armbian-Task-Tracking.md ├── Process_CI.md ├── Process_Contribute.md ├── Process_Managing_Workflow.md ├── Process_Release-Model.md ├── Quick_facts.md ├── README.md ├── Release_Board-Maintainers.md ├── Release_Changelog.md ├── User-Guide_Advanced-Features.md ├── User-Guide_Armbian-Config.md ├── User-Guide_Armbian-Config │ ├── Localisation.md │ ├── Network.md │ └── System.md ├── User-Guide_Armbian-Software.md ├── User-Guide_Armbian-Software │ ├── Armbian.md │ ├── Backup.md │ ├── Containers.md │ ├── DNS.md │ ├── Database.md │ ├── Desktops.md │ ├── DevTools.md │ ├── Downloaders.md │ ├── Finance.md │ ├── HomeAutomation.md │ ├── Management.md │ ├── Media.md │ ├── Monitoring.md │ ├── Music.md │ ├── Netconfig.md │ ├── Printing.md │ ├── Software.md │ ├── VPN.md │ └── WebHosting.md ├── User-Guide_Armbian_overlays.md ├── User-Guide_Autoconfig.md ├── User-Guide_Board-Support-Rules.md ├── User-Guide_Configuration.md ├── User-Guide_FAQ.md ├── User-Guide_Getting-Started.md ├── User-Guide_Networking.md ├── User-Guide_Troubleshooting.md ├── WifiPerformance.md ├── css │ ├── armbian-extra.css │ ├── dashicons.min.css │ ├── maxmegamenu.js │ └── style(1).css ├── images │ ├── ABU001.png │ ├── ACC001.png │ ├── ADG001.png │ ├── ART001.png │ ├── BAZ001.png │ ├── BNS001.png │ ├── BOOT01.png │ ├── CINNAMON01.png │ ├── CON001.png │ ├── CON001.webp │ ├── CON004.webp │ ├── CON005.webp │ ├── CON007.png │ ├── CPT001.png │ ├── DAT001.png │ ├── DAT005.png │ ├── DE31.png │ ├── DEL001.png │ ├── DNS001.png │ ├── DOM001.png │ ├── DOM002.png │ ├── DOW001.png │ ├── DOW003.png │ ├── DOW005.png │ ├── DOW011.png │ ├── DOW013.png │ ├── DOW015.png │ ├── DOW017.png │ ├── DOW019.png │ ├── DOW021.png │ ├── DOW023.png │ ├── DOW025.png │ ├── DOW040.png │ ├── DPL001.png │ ├── DTO001.png │ ├── EMB001.png │ ├── EVCC01.png │ ├── FIL001.png │ ├── GHR001.png │ ├── GNOME01.png │ ├── GRA001.png │ ├── HA001.png │ ├── HA003.png │ ├── HAB001.png │ ├── HAS001.png │ ├── HEAD01.png │ ├── HPG001.png │ ├── HPS001.png │ ├── IMM001.png │ ├── JEL001.png │ ├── JMS001.png │ ├── KER001.png │ ├── LID001.png │ ├── LO001.png │ ├── LOC001.png │ ├── MAN001.png │ ├── MAN005.png │ ├── MED001.png │ ├── MED003.png │ ├── MED010.png │ ├── MED015.png │ ├── MED020.png │ ├── MED030.png │ ├── MED927.png │ ├── MON001.webp │ ├── MON005.png │ ├── MYA001.png │ ├── NAV001.png │ ├── NAX001.png │ ├── NBOX01.png │ ├── NCT001.png │ ├── NET001.png │ ├── NET003.png │ ├── NTD001.png │ ├── OCT001.png │ ├── OMV001.png │ ├── OWC001.png │ ├── PGSQL1.png │ ├── PIH001.png │ ├── POR001.png │ ├── POR001.webp │ ├── PRO001.png │ ├── RAD001.png │ ├── RDR001.png │ ├── REDIS1.png │ ├── RSD001.png │ ├── SABN01.png │ ├── SHELL1.png │ ├── SMB001.png │ ├── SON001.png │ ├── SSH001.png │ ├── SSH200.png │ ├── STC001.png │ ├── STOR001.png │ ├── STR001.png │ ├── SW25.webp │ ├── SWAG01.png │ ├── SY001.png │ ├── SY005.png │ ├── SY010.png │ ├── SY018.png │ ├── SY101.png │ ├── SY201.png │ ├── SY202.png │ ├── SY204.png │ ├── SY210.png │ ├── TRA001.png │ ├── UNAT01.png │ ├── UNAT02.png │ ├── UNB001.png │ ├── UPD001.png │ ├── UPK001.png │ ├── UPK001.webp │ ├── USR001.png │ ├── VNS001.png │ ├── WBM001.png │ ├── WG001.png │ ├── WG002.png │ ├── WG003.png │ ├── WG004.png │ ├── WRG001.png │ ├── WTC001.png │ ├── XFCE01.png │ ├── ZFS001.png │ ├── ZTR001.png │ ├── a1-logo.png │ ├── a2-logo.png │ ├── armbian-config-1.png │ ├── armbian-config-10.png │ ├── armbian-config-2.png │ ├── armbian-config-3.png │ ├── armbian-config-4.png │ ├── armbian-config-5.png │ ├── armbian-config-6.png │ ├── armbian-config-7.png │ ├── armbian-config-8.png │ ├── armbian-config-9.png │ ├── armbian-mirror-explication.png │ ├── banana-i2c-display1.jpg │ ├── banana-spi-display.jpg │ ├── betaimages.png │ ├── budgie.png │ ├── build-all-images.png │ ├── build-images-ci.png │ ├── build-selected-blured.png │ ├── build-single-clean.png │ ├── build-train.png │ ├── buildselected.png │ ├── cinnamon.png │ ├── commit-changes.png │ ├── complete-artifact-matrix-standard-support.png │ ├── create-pull-reqest.png │ ├── dedicated-applications.png │ ├── edit-connection.png │ ├── edit-icon.png │ ├── forums.png │ ├── jira-dark-revised.png │ ├── kanban.png │ ├── linterror.png │ ├── loginprompt.png │ ├── logo.png │ ├── logo.svg │ ├── logo_middle.png │ ├── lvdsbanana.png │ ├── mr-pipeline.png │ ├── product-backlog-structure.png │ ├── propose-changes.png │ ├── rolling-releases.png │ ├── run-worflow-button.png │ ├── run-workflow.png │ ├── sandisk-extreme-a2.png │ ├── sandisk-extremepro-a1.png │ ├── sandisk-ultra-a1.png │ ├── selected-images.png │ ├── smoke-tests.png │ ├── stable-images.png │ ├── standard-support-images.png │ ├── support-autotest.png │ ├── taskProcess1.png │ ├── taskProcess2.png │ ├── taskProcess3.png │ ├── taskProcess4.png │ ├── wait-for-preview.png │ ├── wifi-connect.png │ └── xfce.png └── index.md ├── mkdocs.yml ├── overrides └── main.html ├── requirements.txt └── tools ├── README.md └── mkArmbianDocs.py /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | charset = utf-8 8 | end_of_line = lf 9 | indent_style = tab 10 | indent_size = 4 11 | trim_trailing_whitespace = true 12 | insert_final_newline = true 13 | 14 | [*.patch] 15 | trim_trailing_whitespace = false 16 | 17 | [*.md] 18 | tab_width = 4 19 | indent_style = space 20 | indent_size = 4 21 | 22 | [*.json] 23 | indent_style = space 24 | indent_size = 4 25 | 26 | # Custom Armbian formatting for bash sources and configuration 27 | [*.{sh,inc,conf,eos,wip,tvb,csc}] 28 | indent_size = 4 29 | shell_variant = bash 30 | binary_next_line = false 31 | switch_case_indent = true 32 | space_redirects = true 33 | keep_padding = false 34 | function_next_line = false 35 | 36 | [*.{yaml,yml}] 37 | indent_style = space 38 | indent_size = 2 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /.github/DOCUMENT_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Topic # 2 | 3 | ## Overview ## 4 | 5 | A brief summary goes here. Two or three sentences 6 | 7 | Optional Bullet Points for Clarity: 8 | * does this 9 | * does that 10 | * does hte other 11 | 12 | ## Component 1 ## 13 | 14 | ### Subcomponent 2 ### 15 | 16 | ### Subcomponent 2 17 | 18 | ## Component 2 ## 19 | 20 | ## Step-by-Step Procedure ## 21 | 22 | 1, step 23 | 1. step 24 | 1. step 25 | 1. step 26 | 27 | ## Resources ## 28 | 29 | [hyperlink to code](https://example.com) 30 | [hyperlink to other documentation](https://example.com) 31 | [hyperlink to discussion](https://example.com) 32 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | -------------------------------------------------------------------------------- /.github/labeler.yml: -------------------------------------------------------------------------------- 1 | # This configures label matching for PRs. 2 | # 3 | # The keys are labels, and the values are lists of minimatch patterns 4 | # to which those labels apply. 5 | # 6 | # NOTE: This can only add labels, not remove them. 7 | # NOTE: Due to YAML syntax limitations, patterns or labels which start 8 | # with a character that is part of the standard YAML syntax must be 9 | # quoted. 10 | # 11 | # Please keep the labels sorted and deduplicated. 12 | 13 | "Needs review": 14 | - changed-files: 15 | - any-glob-to-any-file: '**' 16 | 17 | "GitHub Actions": 18 | - all: 19 | - changed-files: 20 | - any-glob-to-any-file: ['.github/**/**/*'] 21 | -------------------------------------------------------------------------------- /.github/labels.yml: -------------------------------------------------------------------------------- 1 | - name: "02" 2 | color: "76B4D9" 3 | description: "Milestone: First quarter release" 4 | - name: "05" 5 | color: "AADB79" 6 | description: "Milestone: Second quarter release" 7 | - name: "08" 8 | color: "4B649F" 9 | description: "Milestone: Third quarter release" 10 | - name: "11" 11 | color: "D58125" 12 | description: "Milestone: Fourth quarter release" 13 | - name: "Backlog" 14 | color: "d4c5f9" 15 | description: "Stalled work that needs to be completed" 16 | - name: "Bug" 17 | color: "F92C01" 18 | description: "Something isn't working as it should" 19 | - name: "Discussion" 20 | color: "EDFFE3" 21 | description: "Being discussed - Voice your opinions :)" 22 | - name: "Duplicate" 23 | color: "f4bd13" 24 | description: "Issue is already present" 25 | - name: "Good first issue" 26 | color: "ffb3ff" 27 | description: "Feel free to contribute :) " 28 | - name: "User error" 29 | color: "CD456C" 30 | description: "A mistake that is made by the user" 31 | - name: "size/small" 32 | color: "ededed" 33 | description: "PR with less then 50 lines" 34 | - name: "size/medium" 35 | color: "ededed" 36 | description: "PR with more then 50 and less then 250 lines" 37 | - name: "size/large" 38 | color: "ededed" 39 | description: "PR with 250 lines or more" 40 | - name: "Task/To-Do" 41 | color: "2f95f1" 42 | description: "Project management: To-Do or task(s) someone is working on" 43 | - name: "GitHub Actions" 44 | color: "bfd4f2" 45 | description: "GitHub Actions code" 46 | - name: "Work in progress" 47 | color: "29E414" 48 | description: "Unfinished / work in progress" 49 | - name: "Ready to merge" 50 | color: "1d7136" 51 | description: "Reviewed, tested and ready for merge" 52 | - name: "Help needed" 53 | color: "EA1BCE" 54 | description: "We need your involvement" 55 | - name: "Needs review" 56 | color: "AEE054" 57 | description: "Seeking for review" 58 | - name: "Can be closed?" 59 | color: "9b75fc" 60 | description: "Ping developers on stalled issue / PR" 61 | - name: "Documentation finished" 62 | color: "0052CC" 63 | description: "New feature was properly added to docs" 64 | - name: "Improper usage" 65 | color: "CD456C" 66 | description: "Provided input is not in the expected data format or structure" 67 | -------------------------------------------------------------------------------- /.github/workflows/clean-workflow-logs.yml: -------------------------------------------------------------------------------- 1 | name: "Clean Workflow Logs" 2 | on: 3 | schedule: 4 | - cron: "0 0 * * 1" # Runs "At 00:00 on Monday." (see https://crontab.guru) 5 | workflow_dispatch: 6 | inputs: 7 | runs_older_than: 8 | description: "The amount of days old to delete" 9 | default: "21" 10 | required: false 11 | runs_to_keep: 12 | description: "The number of workflow runs to keep" 13 | default: "0" 14 | required: false 15 | env: 16 | SCHEDULED_RUNS_OLDER_THAN: "21" 17 | SCHEDULED_RUNS_TO_KEEP: "0" 18 | 19 | jobs: 20 | clean-logs: 21 | runs-on: ubuntu-latest 22 | permissions: 23 | actions: write 24 | steps: 25 | - uses: igorjs/gh-actions-clean-workflow@v6 26 | with: 27 | runs_older_than: ${{ github.event.inputs.runs_older_than || env.SCHEDULED_RUNS_OLDER_THAN }} 28 | runs_to_keep: ${{ github.event.inputs.runs_to_keep || env.SCHEDULED_RUNS_TO_KEEP }} 29 | -------------------------------------------------------------------------------- /.github/workflows/labels-from-yml.yml: -------------------------------------------------------------------------------- 1 | name: Sync Labels from YAML 2 | run-name: Sync Labels from YML on ${{ github.event_name }} 3 | 4 | on: 5 | workflow_dispatch: 6 | push: 7 | branches: 8 | - "main" 9 | paths: 10 | - ".github/labels.yml" 11 | pull_request: 12 | paths: 13 | - ".github/labels.yml" 14 | 15 | jobs: 16 | labeler: 17 | permissions: 18 | contents: read # for actions/labeler to determine modified files 19 | pull-requests: write # for actions/labeler to add labels to PRs 20 | issues: write # for actions/labeler to add labels to issues 21 | 22 | if: ${{ github.repository_owner == 'Armbian' }} 23 | runs-on: ubuntu-latest 24 | 25 | steps: 26 | - name: Checkout 27 | uses: actions/checkout@v4 28 | 29 | - name: Run Labeler 30 | uses: crazy-max/ghaction-github-labeler@v5 31 | with: 32 | github-token: ${{ secrets.GITHUB_TOKEN }} 33 | yaml-file: .github/labels.yml 34 | dry-run: ${{ github.event_name == 'pull_request' }} 35 | exclude: | 36 | Maintenance* 37 | -------------------------------------------------------------------------------- /.github/workflows/merge-announce.yml: -------------------------------------------------------------------------------- 1 | name: push 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | 7 | jobs: 8 | announcepush: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Get repo 12 | uses: actions/checkout@v4 13 | with: 14 | ref: ${{ github.event.pull_request.head.sha }} 15 | - name: Send push to Discord 16 | run: | 17 | curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST --data \ 18 | "{\"username\": \"Github\", \"avatar_url\": \"${{ secrets.AVATARURL }}\", \"content\": \"\ 19 | :white_check_mark: **Merged** into [$GITHUB_REPOSITORY](<$GITHUB_SERVER_URL/$GITHUB_REPOSITORY>) by [$GITHUB_ACTOR](<$GITHUB_SERVER_URL/$GITHUB_ACTOR>) - \ 20 | [Link](<$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/commit/$GITHUB_SHA>): *$(git show -s --format=%s)*\"}" ${{ secrets.WEBHOOKURL }} 21 | 22 | -------------------------------------------------------------------------------- /.github/workflows/pdf-at-pr.yaml: -------------------------------------------------------------------------------- 1 | name: Create docs preview on PR 2 | 3 | on: 4 | pull_request: 5 | types: [opened, reopened, synchronize, labeled] 6 | workflow_dispatch: 7 | 8 | permissions: 9 | contents: write 10 | pull-requests: write 11 | 12 | jobs: 13 | docs-preview: 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - name: Checkout PR branch (documentation) 18 | uses: actions/checkout@v4 19 | with: 20 | ref: ${{ github.event.pull_request.head.sha }} 21 | path: documentation 22 | 23 | - name: Checkout `www` branch 24 | uses: actions/checkout@v4 25 | with: 26 | ref: www 27 | path: www 28 | 29 | - name: Set up Python 3.8 30 | uses: actions/setup-python@v5 31 | with: 32 | python-version: 3.8 33 | 34 | - name: Cache pip dependencies 35 | uses: actions/cache@v4 36 | with: 37 | path: ~/.cache/pip 38 | key: ${{ runner.os }}-pip-${{ hashFiles('documentation/requirements.txt') }} 39 | restore-keys: | 40 | ${{ runner.os }}-pip- 41 | 42 | - name: Install dependencies 43 | working-directory: documentation 44 | run: | 45 | python -m pip install --upgrade pip 46 | pip install setuptools wheel 47 | pip install -r requirements.txt 48 | 49 | - name: Build docs with MkDocs 50 | working-directory: documentation 51 | run: mkdocs build --clean 52 | 53 | - name: Publish to `www` branch 54 | working-directory: www 55 | run: | 56 | mkdir -p "${{ github.event.number }}" 57 | rsync -av ../documentation/site/. "${{ github.event.number }}" 58 | git config user.name github-actions 59 | git config user.email github-actions@github.com 60 | git add . 61 | git commit -m "Update docs preview for PR #${{ github.event.number }}" || true 62 | git push origin www || true 63 | 64 | - name: Comment on PR with preview link 65 | uses: devindford/Append_PR_Comment@v1.1.3 66 | with: 67 | repo-token: ${{ secrets.GITHUB_TOKEN }} 68 | body-template: | 69 | [![Create docs preview on PR](https://github.com/armbian/documentation/actions/workflows/pdf-at-pr.yaml/badge.svg)](https://github.com/armbian/documentation/actions/workflows/pdf-at-pr.yaml) 70 | 71 | Documentation website preview will be available shortly: 72 | 73 |
 Open WWW preview 
74 | body-update-action: suffix -------------------------------------------------------------------------------- /.github/workflows/pr-announce.yml: -------------------------------------------------------------------------------- 1 | on: 2 | pull_request: 3 | branches: [ master ] 4 | types: [ opened ] 5 | 6 | jobs: 7 | build: 8 | name: "Announce PR on Discord" 9 | runs-on: ubuntu-latest 10 | if: ${{ github.repository_owner == 'Armbian' }} 11 | steps: 12 | - name: Get repo 13 | uses: actions/checkout@v4 14 | with: 15 | ref: ${{ github.event.pull_request.head.sha }} 16 | - name: Discord webhook 17 | run: | 18 | curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST --data \ 19 | "{\"username\": \"Github\", \"avatar_url\": \"${{ secrets.AVATARURL }}\", \"content\": \"\ 20 | :arrow_heading_up: **Pull request** to [$GITHUB_REPOSITORY](<$GITHUB_SERVER_URL/$GITHUB_REPOSITORY>) by [$GITHUB_ACTOR](<$GITHUB_SERVER_URL/$GITHUB_ACTOR>) - **Please review!** \ 21 | :point_right: [Link](<$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/pull/${{github.event.pull_request.number}}>): *$(git show -s --format=%s)*\"}" ${{ secrets.WEBHOOKURL }} 22 | -------------------------------------------------------------------------------- /.github/workflows/pr-auto-labeler.yml: -------------------------------------------------------------------------------- 1 | name: Automatic Pull Request Labeling 2 | run-name: 'Set labels - PR #${{ github.event.pull_request.number }} ("${{ github.event.pull_request.title }}")' 3 | # 4 | # Set labels for pull requests automatically based on size (modified via job 'label-size') and file categories (modified via .github/labeler) 5 | # 6 | 7 | on: pull_request_target 8 | 9 | jobs: 10 | label-remove: 11 | permissions: 12 | contents: read # for pascalgn/size-label-action to determine modified files 13 | pull-requests: write # for pascalgn/size-label-action to add labels to PRs 14 | name: "Remove Ready to merge" 15 | if: ${{ github.event.action == 'opened' || github.event.action == 'reopened' || github.event.action == 'synchronize' }} 16 | runs-on: ubuntu-latest 17 | 18 | steps: 19 | - uses: PauMAVA/add-remove-label-action@v1.0.3 20 | with: 21 | github_token: ${{ secrets.GITHUB_TOKEN }} 22 | add: "" 23 | remove: "Ready to merge" 24 | 25 | label-category: 26 | permissions: 27 | contents: read # for actions/labeler to determine modified files 28 | pull-requests: write # for actions/labeler to add labels to PRs 29 | 30 | name: "Category labels" 31 | if: ${{ github.event.action == 'opened' || github.event.action == 'reopened' || github.event.action == 'synchronize' }} 32 | runs-on: ubuntu-latest 33 | 34 | steps: 35 | - uses: actions/checkout@v4 36 | - uses: actions/labeler@v5 37 | with: 38 | repo-token: "${{ secrets.GITHUB_TOKEN }}" 39 | 40 | label-size: 41 | permissions: 42 | contents: read # for pascalgn/size-label-action to determine modified files 43 | pull-requests: write # for pascalgn/size-label-action to add labels to PRs 44 | 45 | name: "Size label" 46 | if: ${{ github.event.action == 'opened' || github.event.action == 'reopened' || github.event.action == 'synchronize' }} 47 | runs-on: ubuntu-latest 48 | 49 | steps: 50 | - name: size-label 51 | uses: "pascalgn/size-label-action@v0.5.5" 52 | env: 53 | GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" 54 | with: 55 | sizes: > 56 | { 57 | "0": "small", 58 | "50": "medium", 59 | "250": "large" 60 | } 61 | -------------------------------------------------------------------------------- /.github/workflows/pull-from-armbian-config.yml: -------------------------------------------------------------------------------- 1 | name: "Pull from Armbian config" 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | workflow_dispatch: 8 | 9 | jobs: 10 | 11 | Build: 12 | name: "Pull" 13 | runs-on: ubuntu-latest 14 | if: ${{ github.repository_owner == 'armbian' }} 15 | steps: 16 | 17 | - name: Checkout main documentation 18 | uses: actions/checkout@v4 19 | with: 20 | repository: 'armbian/documentation' 21 | path: 'documentation' 22 | 23 | - name: Checkout Armbian config repository 24 | uses: actions/checkout@v4 25 | with: 26 | repository: 'armbian/configng' 27 | path: 'config' 28 | 29 | - name: Make docs 30 | run: | 31 | 32 | cd config 33 | tools/config-assemble.sh -p 34 | tools/config-markdown.py -u 35 | 36 | # rsync images first 37 | rsync -avr tools/include/images/. ../documentation/docs/images/ 38 | 39 | # this section goes under armbian-config 40 | mkdir -p ../documentation/docs/User-Guide_Armbian-Config/ 41 | rsync -avr docs/Localisation/Localisation.md ../documentation/docs/User-Guide_Armbian-Config/ 42 | rsync -avr docs/Network/Network.md ../documentation/docs/User-Guide_Armbian-Config/ 43 | rsync -avr docs/System/System.md ../documentation/docs/User-Guide_Armbian-Config/ 44 | 45 | # the rest goes under armbian-software 46 | mkdir -p ../documentation/docs/User-Guide_Armbian-Software/ 47 | rsync -avr --exclude="Software.user.md" docs/Software/* ../documentation/docs/User-Guide_Armbian-Software/ 48 | 49 | - name: Create Pull Request to documentation 50 | uses: peter-evans/create-pull-request@v7 51 | with: 52 | token: ${{ secrets.GITHUB_TOKEN }} 53 | path: documentation 54 | commit-message: '`Automatic` documentation update' 55 | signoff: false 56 | branch: auto-update-docs 57 | delete-branch: true 58 | title: '`Automatic` documentation update' 59 | body: | 60 | Generate documentation. 61 | 62 | labels: | 63 | Needs review 64 | #assignees: igorpecovnik 65 | #reviewers: Must be org collaborator 66 | draft: false 67 | -------------------------------------------------------------------------------- /.github/workflows/pull-mirrors-from-db.yml: -------------------------------------------------------------------------------- 1 | name: "Pull mirrors from database" 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | workflow_dispatch: 8 | 9 | jobs: 10 | 11 | Build: 12 | name: "Pull" 13 | runs-on: ubuntu-24.04 14 | if: ${{ github.repository_owner == 'armbian' }} 15 | steps: 16 | 17 | - name: Checkout main documentation 18 | uses: actions/checkout@v4 19 | with: 20 | repository: 'armbian/documentation' 21 | path: 'documentation' 22 | 23 | - name: Update rsync section 24 | run: | 25 | FILE="documentation/docs/Mirrors.md" 26 | sed '/^### 2\. Set up synchronization via rsync/,$d' "$FILE" > tmp.md 27 | cat <> tmp.md 28 | ### 2. Set up synchronization via rsync 29 | 30 | - Sync files from one of the official repositories using the following commands: 31 | 32 | | Content | Command | Required Space | 33 | |-----------------|---------------------------------------------|---------------:| 34 | EOF 35 | for storage in dl apt archive oldarchive; do 36 | size=$(curl -s https://k-space.ee.armbian.com/$storage/size.txt) 37 | case "$storage" in 38 | "dl") 39 | TEXT="Current images" 40 | ;; 41 | "apt") 42 | TEXT="Packages" 43 | ;; 44 | "archive") 45 | TEXT="Archived images" 46 | ;; 47 | *) 48 | TEXT="Very old images" 49 | ;; 50 | esac 51 | echo " | $TEXT | \`rsync -av rsync://rsync.armbian.com/$storage\` | $size |" >> tmp.md 52 | done 53 | sed -n '/^## Current Mirrors/,$p' "$FILE" >> tmp.md 54 | sed -i -e :a -e '/^\n*$/{$d;N;ba' -e '}' tmp.md 55 | mv tmp.md "$FILE" 56 | 57 | - name: Update Current Mirrors section 58 | run: | 59 | FILE="documentation/docs/Mirrors.md" 60 | sed '/^## Current Mirrors/,$d' "$FILE" > tmp.md 61 | cat <> tmp.md 62 | ## Current Mirrors 63 | 64 | | Site | Time Zone | Flag | Speed | Packages | Images | Archive | Rsync | 65 | |:-----|:----------|------|-------:|:--------:|:------:|:-------:|:-----:| 66 | EOF 67 | JQ=$(curl -s -H "Authorization: Token ${{ secrets.NETBOX_TOKEN }}" \ 68 | -H "Accept: application/json; indent=4" \ 69 | "${{ secrets.NETBOX_API }}/virtualization/virtual-machines/?limit=500&name__empty=false&role=mirror") 70 | for i in $(echo $JQ | jq '.results[] | .id'); do 71 | NAME=$(echo $JQ | jq ".results[] | select(.id == $i) | .name" | sed "s/\"//g") 72 | SITE_ID=$(echo $JQ | jq ".results[] | select(.id == $i) | .site.id") 73 | SITE_STATUS=$(echo $JQ | jq -r ".results[] | select(.id == $i) | .status.value") 74 | SITE_TAGS=$(echo $JQ | jq -r ".results[] | select(.id == $i) | .tags[].slug" | xargs ) 75 | SITEQ=$(curl -s -H "Authorization: Token ${{ secrets.NETBOX_TOKEN }}" \ 76 | -H "Accept: application/json; indent=4" \ 77 | "${{ secrets.NETBOX_API }}/dcim/sites/?limit=500&name__empty=false&id=$SITE_ID") 78 | SITE_NAME=$(echo $SITEQ | jq -r ".results[] | select(.id == $SITE_ID) | .name" | sed 's/ /\ /g') 79 | SITE_REGION=$(echo $SITEQ | jq -r ".results[] | select(.id == $SITE_ID) | .region.display") 80 | SITE_TZ=$(echo $SITEQ | jq -r ".results[] | select(.id == $SITE_ID) | .time_zone") 81 | SITE_LATITUDE=$(echo $SITEQ | jq ".results[] | select(.id == $SITE_ID) | .latitude") 82 | SITE_LONGITUDE=$(echo $SITEQ | jq ".results[] | select(.id == $SITE_ID) | .longitude") 83 | SITE_SPEED=$(echo $SITEQ | jq -r ".results[] | select(.id == $SITE_ID) | .custom_fields.download_speed") 84 | IP=$(dig +short "${NAME}" | tail -1) 85 | SITE_FLAG=$(curl --max-time 5 -s http://ipwhois.app/json/"${IP}" | jq -r '.country_code') 86 | [[ $SITE_STATUS == "decommissioning" ]] && continue 87 | if [[ $SITE_STATUS != "active" ]]; then 88 | LABEL=":x:" 89 | else 90 | LABEL=":white_check_mark:" 91 | fi 92 | if [[ "${SITE_TAGS}" == *"debs"* ]]; then FIELD1="$LABEL"; else FIELD1=""; fi 93 | if [[ "${SITE_TAGS}" == *"images"* ]]; then FIELD2="$LABEL"; else FIELD2=""; fi 94 | if [[ "${SITE_TAGS}" == *"archive"* ]]; then FIELD3="$LABEL"; else FIELD3=""; fi 95 | if [[ "${SITE_TAGS}" == *"rsync"* ]]; then FIELD4="$LABEL"; else FIELD4=""; fi 96 | echo "| [$SITE_NAME](https://$NAME) | $SITE_TZ | [![$SITE_REGION](https://flagsapi.com/$SITE_FLAG/shiny/32.png)](https://www.openstreetmap.org/search?lat=$SITE_LATITUDE&lon=$SITE_LONGITUDE) | $SITE_SPEED Mbps | $FIELD1 | $FIELD2 | $FIELD3 | $FIELD4 |" >> tmp.md 97 | sleep 1 98 | done 99 | sed -i -e :a -e '/^\n*$/{$d;N;ba' -e '}' tmp.md 100 | mv tmp.md "$FILE" 101 | 102 | - name: Create Pull Request to documentation 103 | uses: peter-evans/create-pull-request@v7 104 | with: 105 | token: ${{ secrets.GITHUB_TOKEN }} 106 | path: documentation 107 | commit-message: '`Automatic` documentation update' 108 | signoff: false 109 | branch: auto-update-docs 110 | delete-branch: true 111 | title: '`Automatic` documentation update' 112 | body: | 113 | Generate documentation. 114 | 115 | labels: | 116 | Needs review 117 | #assignees: igorpecovnik 118 | #reviewers: Must be org collaborator 119 | draft: false 120 | -------------------------------------------------------------------------------- /.github/workflows/release.yaml: -------------------------------------------------------------------------------- 1 | name: Update documentation website 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | workflow_dispatch: 7 | 8 | jobs: 9 | build-docs: 10 | name: "Generate HTML" 11 | if: ${{ github.repository_owner == 'Armbian' }} 12 | runs-on: ubuntu-latest 13 | steps: 14 | 15 | - uses: actions/checkout@v4 16 | with: 17 | ref: main 18 | fetch-depth: 1 19 | 20 | - name: "Set up Python" 21 | uses: actions/setup-python@v5 22 | with: 23 | python-version: 3.8 24 | 25 | - name: "Install dependencies" 26 | run: | 27 | 28 | pip install --upgrade pip 29 | pip install setuptools wheel -r requirements.txt 30 | 31 | - name: "Build documentation" 32 | run: mkdocs build --clean 33 | 34 | - name: "Install SSH key" 35 | uses: shimataro/ssh-key-action@v2 36 | with: 37 | key: ${{ secrets.KEY_UPLOAD }} 38 | known_hosts: ${{ secrets.HOST_APPLICATIONS_KNOWN_HOSTS }} 39 | if_key_exists: replace 40 | 41 | - name: "Deploy to servers" 42 | timeout-minutes: 3 43 | run: | 44 | rsync -e "ssh -p ${{ secrets.HOST_APPLICATIONS_PORT }}" \ 45 | -a site/ \ 46 | ${{ secrets.HOST_APPLICATIONS_USER }}@${{ secrets.HOST_APPLICATIONS }}:storage/docs.armbian.com 47 | 48 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | site/ 3 | venv/ 4 | .venv/ 5 | *.pdf 6 | .DS_Store -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "MD013": false, 3 | "MD046": false, 4 | "MD033": { 5 | "allowed_elements": ["br", "iframe"] 6 | } 7 | } -------------------------------------------------------------------------------- /DOCUMENTATION.md: -------------------------------------------------------------------------------- 1 | # Armbian Documentation 2 | 3 | [![Create offline documentation to release](https://github.com/armbian/documentation/actions/workflows/release.yaml/badge.svg)](https://github.com/armbian/documentation/actions/workflows/release.yaml) 4 | 5 |

6 | 7 | logo 8 | 9 |

10 | 11 | ## Overview 12 | 13 | Documentation is written in [markdown](https://www.markdownguide.org/basic-syntax/) and stored in the `docs/` subfolder. Images go in `docs/images`. 14 | 15 | This repo is meant for storing and quick glances. Official output is [https://docs.armbian.com](https://docs.armbian.com). 16 | 17 | Armbian Documentation is available in the following formats: 18 | 19 | * [Official document website](https://docs.armbian.com), 20 | * [PDF document](https://github.com/armbian/documentation/releases/latest) 21 | 22 | ## Contributing 23 | 24 | This site is built with [mkdocs](https://github.com/mkdocs/mkdocs/) and depends on [mkdocs-material](https://github.com/squidfunk/mkdocs-material). 25 | 26 | Armbian Documentation naming of document files follows this rules: 27 | 28 | `[Parent-Topic-Example]_[Child-Topic]-example.md` 29 | 30 | `Parent-Topic-Name` and `Child-Topic-Name` are separated by an underscore `_`. Hyphens `-` are automatically converted to space. 31 | 32 | Please try to avoid creating new parent topics unless absolutely necessary. 33 | 34 | Current Parent Topics: 35 | 36 | * User Guide 37 | * Hardware notes 38 | * Developer Guide 39 | * Contributor Process 40 | * Release management 41 | * Community 42 | 43 | See the [document template](.github/DOCUMENT_TEMPLATE.md) before you writing any content. 44 | 45 | ## Working on the content 46 | 47 | ### Prerequisites 48 | 49 | Ensure you have Python and the necessary development packages installed: 50 | 51 | ```bash 52 | sudo apt-get update 53 | sudo apt-get install python3 python3-pip python3-venv python3.12-dev 54 | ``` 55 | 56 | If using Debian, you may need to install the following packages for `mkdocs-material`: 57 | 58 | ```bash 59 | sudo apt-get install libcairo2 pango1.0-tools 60 | ``` 61 | 62 | ### Cloning the Repository 63 | 64 | Next, clone the Armbian documentation repository: 65 | 66 | ```bash 67 | git clone https://github.com/armbian/documentation 68 | cd documentation 69 | ``` 70 | 71 | ### Setting Up the Environment 72 | 73 | Set up a Python virtual environment to isolate the project dependencies: 74 | 75 | ```bash 76 | python3 -m venv .venv 77 | source .venv/bin/activate 78 | pip install --use-pep517 -r requirements.txt 79 | ``` 80 | 81 | ### Building and Serving the Documentation 82 | 83 | To build and serve the documentation locally, allowing you to make edits and observe the results in real time, use: 84 | 85 | ```bash 86 | mkdocs build --clean 87 | mkdocs serve -a 0.0.0.0:8000 88 | ``` 89 | 90 | You will be able to make edits to existing files and observe the results in real time. 91 | 92 | ## Generate tools 93 | After adding a new file, either hand-edit `mkdocs.yml`, or re-run `tools/mkArmbianDocs.py` **unless making changes to the structure of the `docs/` folder**. (See below) 94 | 95 | ### mkArmbianDocs.py 96 | Generate `mkdocs.yml` based on the contents of `docs/` folder 97 | 98 | * Command-line options for input and output directories 99 | * Requires install requirement 100 | * You don't need to run it every time unless making changes to the structure of the `docs/` folder 101 | * See `mkArmbianDocs.py -h` for help 102 | 103 | From the parent folder of the repo, run: 104 | 105 | `python3 tools/mkArmbianDocs.py && mkdocs build` 106 | 107 | This will generate the `mkdocs.yml` and publish built HTML to the `site/` folder. 108 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | logo 4 |
5 | Armbian Documentation
6 |
7 | GitHub Workflow Status 8 |

9 | 10 | **The Armbian Linux Documentation** offers a comprehensive collection of guides, manuals, and resources designed to assist users in every stage of working with Armbian - from installation and initial setup to advanced configuration and optimization. Whether you're a beginner setting up your first single-board computer or an experienced developer fine-tuning system performance, the documentation provides clear, step-by-step instructions and best practices to help you get the most out of your Armbian-powered device. 11 | 12 | # Editing 13 | 14 | ### Online 15 | 16 | Documentation edition goes in five simple steps. 17 | 18 | |Step|Description|Visuals| 19 | |:-------:|---|---:| 20 | | 1. | Open website and **find content you want to change**.|
Expandlogo
| 21 | | 2. | When you are done with editing, **Commit changes**. |
Expandlogo
| 22 | | 3. | Enter title and description of changes you are proposing. Proceed with **Propose changes** |
Expandlogo
| 23 | | 4. | Following by **Create a pull request**. |
Expandlogo
| 24 | | 5. | Verify your changes on **HTML rendered preview** at your pull reqest. |
Expandlogo
| 25 | 26 | ### Offline 27 | 28 | Please refer to [those instructions](/DOCUMENTATION.md) 29 | 30 | ### Tips 31 | 32 | 33 | -------------------------------------------------------------------------------- /docs/Community_Forums.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ![](images/forums.png) -------------------------------------------------------------------------------- /docs/Community_Github.md: -------------------------------------------------------------------------------- 1 | # Main project repositories 2 | 3 | ## Armbian Build 4 | 5 | 6 | 7 | Framework can build generic Armbian or custom Linux image. 8 | 9 | ## Armbian Config 10 | 11 | 12 | 13 | Utility for configuring: 14 | 15 | - hardware, 16 | - adjusting services, 17 | - installing applications. 18 | 19 | ## Armbian OS 20 | 21 | 22 | Armbian OS assembly line: 23 | 24 | - [daily rolling releases](https://github.com/armbian/os/releases) for supported build targets 25 | - [point releases](https://www.armbian.com/download/?device_support=Standard%20support) for supported build targets 26 | 27 | ## Armbian Community 28 | 29 | 30 | Armbian OS community assembly line: 31 | 32 | - [weekly rolling releases](https://github.com/armbian/community/releases) for build targets without a dedicated mainteiner. 33 | 34 | ## Armbian Distribution 35 | 36 | 37 | Armbian OS with pre-installed applications: 38 | 39 | - [HomeAssistant](https://www.home-assistant.io/), 40 | - [OpenHab](https://www.openhab.org/), 41 | - [Kali Linux](https://www.kali.org/), 42 | - [OpenMediaVault](https://www.openmediavault.org/) 43 | -------------------------------------------------------------------------------- /docs/Community_IRC.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Armbian Social Media Channels 3 | description: Social media channels maintained by Armbian project team 4 | --- 5 | 6 | # Social media 7 | 8 | ## Armbian on X and Mastodon 9 | 10 | Armbian short announcements are done via 𝕏 (formerly known as Twitter): and 11 | 12 | # IRC Channel / Discord / Matrix 13 | 14 | ## 👏 Overview 15 | 16 | As announced in the [forums](https://forum.armbian.com/topic/12803-armbian-irc-channel/) everyone interested can communicate in realtime using the [internet relay chat (or *IRC* for short)](https://de.wikipedia.org/wiki/Internet_Relay_Chat). 17 | Well known IRC clients for CLI are [Weechat](https://weechat.org/) or [Irssi](https://irssi.org/) and for GUI [Hexchat](https://hexchat.github.io/) or [Konversation](https://konversation.kde.org/). 18 | Mature clients for Matrix: [Element](https://element.io/download) or [FluffyChat](https://fluffychat.im). 19 | 20 | Besides that communication is also possible via *Discord* or *Matrix* (closed beta). 21 | 22 | ## 🔌 How to connect 23 | 24 | ### IRC 25 | 26 | Libera network: 27 | 28 | - Server: `irc.libera.chat` 29 | - Ports: `6697` / non-encrypted: `6667` 30 | - Channels: as listed below 31 | 32 | OFTC network: 33 | 34 | - Server: `irc.oftc.net` 35 | - Ports: `6697` / non-encrypted: `6667` 36 | - Channels: `#armbian` and `#armbian-announcements` are available only 37 | 38 | In order to enter main `#armbian` channels registration with Nickserv is mandatory on Libera. Check [Libera Chat documentation](https://libera.chat/guides/registration) for further information. 39 | 40 | ### Discord 41 | 42 | Simply click here: [https://discord.com/invite/armbian](https://discord.com/invite/armbian) 43 | 44 | 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. 45 | The main `#armbian` channel and `#armbian-announcements` are relayed between Discord, Libera, OFTC and Matrix. 46 | 47 | ### Matrix (closed beta) 48 | 49 | - Server: `matrix.armbian.com` 50 | - Channels: `#armbian:matrix.armbian.com` and `#armbian-announcements:matrix.armbian.com` are available only 51 | - To receive an invitation for former please ping either Lanefu or Werner with your Matrix handle in any known ways to communicate like the chat options above or forums. Once in feel free to invite others by yourself. 52 | 53 | ## 🛑 Rules 54 | 55 | Forums registration terms and rules apply for our chats: [https://forum.armbian.com/terms](https://forum.armbian.com/terms) 56 | 57 | ## 💬 Channels (depending on platform only a limited selection might be available) 58 | 59 | - **`#armbian`** is the project's main channel. Issue tracking, peer-to-peer user support or [upcoming release planning talks](https://docs.armbian.com/Process_Release-Model/#release-planning). 60 | - **`#armbian-announcements`** : important messages from the Armbian team. You definitely want to idle here. Moderated channel 61 | - **`#armbian-devel`** : build engine development topics 62 | - **`#armbian-desktop`** : desktop environment development 63 | - **`#armbian-csc`** unsupported/stating board talk 64 | - **`#armbian-allwinner`** Allwinner-related SoC talk 65 | - **`#armbian-amlogic`** Amlogic-related SoC talk 66 | - **`#armbian-broadcom`** Broadcom-related SoC talk 67 | - **`#armbian-rockchip`** Rockchip-related SoC talk 68 | - **`#armbian-offtopic`** General chit chat, whatever that does not fit other channels 69 | - **`#armbian-commits`** Whenever a new interaction with a [repository on Github](https://github.com/armbian/) happens it will be announced. Moderated channel 70 | 71 | ## 👮 Services 72 | 73 | Besides the services offered by IRC (like Nickserv or Chanserv) Armbian has set up some own services (on Libera only). 74 | 75 | **`ArmbianGithub`** 76 | 77 | - Has the purpose to fill #armbian-commits channel 78 | 79 | **`DC-IRC`** 80 | 81 | - Has the purpose to relay messages between the IRC networks and Discord. Applies for all channels beginning with `#armbian-` as well as `#armbian`. 82 | 83 | **`ArmbianHelper`** 84 | 85 | - Allows searching forums via Google API (not very precise though) 86 | - Example: `,g Allwinner H6 panfrost` 87 | - A few more minor commands, mostly used by staff or do not need introduction 88 | - `.nonprofit`, `.sed`, `.contribute`, `.rtfm`, `.fortune`, `.sunxi`, `.meson`, `help`, `help irc`, `.tvboxes` 89 | - Translation for non-native English speakers 90 | - Simply start your sentence with `--` at the beginning and the bot will translate your message regardless of the source language into English. 91 | *Note*: This services will be activated manually on demand (like planned meetings for example) since its backend generates cost. 92 | 93 | ## ❔ FAQ 94 | 95 | - Why are there so many people in the channel and nobody is talking? 96 | - It is pretty common for community IRC channels for people to simply *idle* there. Many also using so called IRC bouncers ) that keeps their connection to the channel alive to act like an answering machine. 97 | 98 | - I wrote 'Hi' but nobody answered. How do I get support there? 99 | - Probably there is nobody around at the time. Keep in mind that all users are spread around the globe and therefore living in many different time zones. 100 | It is a common habit to simply state your question or issue and then wait patiently for an answer. Depending how complex this may take up to a few hours because most Armbian contributors have detailed knowledge in a specific board family only. 101 | - Is the chat history public as well? 102 | - Yes. All conversation is logged. These logs are open to the public. You can find them here: [http://irc.armbian.com](http://irc.armbian.com) 103 | - Why do some people have odd hostnames like `@armbian/staff/lanefu` or `@user/username`? 104 | - These *hostnames* are so called project affiliation cloaks. These are meant to show a users affiliation to a specific project and their role there. 105 | - Can I have that too? 106 | - Yes. An Armbian affiliation cloak can be requested from *Werner* either via [forums](https://forum.armbian.com/profile/9032-werner/) or IRC. They usually will be granted if you are a well known member in forums, a contributor via Github or donated to the project. Make sure you identified yourself to Nickserv beforehand. 107 | - How can I protect my nickname so nobody can spoof me? 108 | - Register your nick with Libera's Nickserv service. Check [https://libera.chat/guides/registration](https://libera.chat/guides/registration) 109 | Even though it is not mandatory you should register and identify with the services as other channels for example may not allow unregistered users to chat or join at all as anti-spam measure. 110 | - Why do some users have voice (+v) in channel? 111 | - As mentioned in [forums](https://forum.armbian.com/topic/12803-armbian-irc-chat/?tab=comments#comment-96828) "all contributors to the project, regardless if forums staff, contributor on Github or well known and longtime active user" may get voice on request. 112 | 113 | - Should I add **away** to my nick if I am AFK? Like **Werner|away** 114 | - No. Please use the `/away [reason]` command as intended. For an explanation please have a look at the [ZNC Wiki](https://wiki.znc.in/Awaynick). 115 | 116 | ## 👉 Bottom line 117 | 118 | 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](https://forum.armbian.com/profile/9032-werner/), IRC or Discord. 119 | -------------------------------------------------------------------------------- /docs/Contribute/Armbian-config.md: -------------------------------------------------------------------------------- 1 | # Adding software title to Armbian config 2 | 3 | ### Tinkering 4 | 5 | #### Manual install 6 | 7 | First try to install application manually. If it works on Debian or Ubuntu, proceed. In this example we will be using `test`. 8 | 9 | #### Clone repository 10 | 11 | ~~~ 12 | git clone https://github.com/armbian/configng 13 | ~~~ 14 | 15 | #### Design menu 16 | 17 | 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. 18 | This one we will place under `Software -> Management`. 19 | 20 | ``` yaml title="File location: tools/json/config.software.json" 21 | { 22 | "id": "MAN005", 23 | "description": "Webmin web-based management tool", 24 | "short": "Webmin", 25 | "module": "module_webmin", 26 | "command": [ 27 | "see_menu module_webmin" 28 | ], 29 | "status": "Stable", 30 | "author": "@Tearran", 31 | "condition": "" 32 | } 33 | ``` 34 | 35 | | Field name | Function | Notes | 36 | | :---------------------- | :-------------- | :----------- | 37 | | `id` | `unique identifier` | Select higher number. If you will select existing, application will fail to run | 38 | | `description` | `menu descriptor` | This will be displayed in the menu | 39 | | `short` | `docs menu descriptor` | This will over-ride description in the rendering of documentation | 40 | | `module` | `link json entry with module` | Used for documentation generation - read info from `module_options` | 41 | | `prompt` | `confirmation text` | Some features needs confirmation before proceeding | 42 | | `command` | `executes function` | What should be run after we select and agree (optional) | 43 | | `status` | `Stable|Disabled` | Control if function is shown to users in the menu | 44 | | `author` | `GitHub handle` | Developer or maintainer of this functionality | 45 | | `condition` | `controlling display` | Under what conditions we show this menu item | 46 | 47 | 48 | !!! note 49 | 50 | Pay attention to JSON structure. JSON validator at pull request will break in case spaces or commas will be placed wrong. 51 | 52 | #### Module code 53 | 54 | Place module functions, each into its file, following by file naming convention, into one of the folders: 55 | 56 | ``` bash title="Folder location: tools/modules" 57 | docs 58 | functions 59 | network 60 | runtime 61 | software 62 | system 63 | ``` 64 | 65 | ``` bash title="File location: tools/template/module_software_template.sh" 66 | 67 | declare -A module_options 68 | module_options+=( 69 | ["module_template,author"]="@armbian" 70 | ["module_template,feature"]="module_template" 71 | ["module_template,example"]="install remove help" 72 | ["module_template,desc"]="Example module unattended interface." 73 | ["module_template,status"]="review" 74 | ) 75 | 76 | function module_template() { 77 | local title="test" 78 | local condition=$(which "$title" 2>/dev/null) 79 | 80 | # Convert the example string to an array 81 | local commands 82 | IFS=' ' read -r -a commands <<< "${module_options["module_template,example"]}" 83 | 84 | case "$1" in 85 | "${commands[0]}") 86 | echo "Installing $title..." 87 | # Installation logic here 88 | ;; 89 | "${commands[1]}") 90 | echo "Removing $title..." 91 | # Removal logic here 92 | ;; 93 | "${commands[2]}") 94 | echo -e "\nUsage: ${module_options["module_template,feature"]} " 95 | echo -e "Commands: ${module_options["module_template,example"]}" 96 | echo "Available commands:" 97 | echo -e "\tinstall\t- Install $title." 98 | echo -e "\tremove\t- Remove $title." 99 | echo 100 | ;; 101 | *) 102 | ${module_options["module_template,feature"]} ${commands[2]} 103 | ;; 104 | esac 105 | } 106 | 107 | # uncomment to test the module 108 | #module_template "$1" 109 | 110 | ``` 111 | 112 | !!! note 113 | 114 | Pay attention to [coding style structure](https://github.com/armbian/configng/blob/main/.editorconfig). If you use modern IDE, this will be done automatically. 115 | 116 | #### Manual testing 117 | 118 | 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: 119 | ``` python 120 | tools/config-assemble.sh -p 121 | ``` 122 | Python is required to run this tool. 123 | 124 | ``` bash 125 | sudo sudo bin/armbian-config --cmd 126 | ``` 127 | 128 | #### Unit tests 129 | 130 | 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. 131 | Unit tests have simple design: 132 | 133 | Name of the config file is function id (unique identifier) `CON004.conf` 134 | 135 | ``` bash title="File location: tests/CON004.conf" 136 | ENABLED=true 137 | RELEASE="bookworm:jammy:noble" 138 | CONDITION="test=\$(docker container ls -a | grep portainer )" 139 | ``` 140 | Make sure to add a test condition that makes sense. It has to return 0 when test succeeds and 1 if fails. 141 | 142 | | Variable | Function | Description | 143 | | :---------------------- | :-------------- | :-------------- | 144 | | ENABLED | false / true | If test is live or not | 145 | | PREINSTALL | cmd to run | specific test dependencies | 146 | | CONDITION | main test verification | must return 0 for test success | 147 | | RELEASE | bookworm:jammy:noble" | run on specific or leave empty to run on all | 148 | 149 | #### Pull request 150 | 151 | 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. 152 | 153 | Examples: 154 | 155 | - 156 | - 157 | - 158 | 159 | ### Documentation 160 | 161 | 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/ 162 | 163 | #### Cover image 164 | 165 | Once code works perfectly, look for cover image. It can be .png or .webp. Place image to the `tools/include/images/CON004.webp` 166 | 167 | #### Header 168 | 169 | ``` text title="Header: tools/include/markdown/CON004-header.md" 170 | Portainer simplifies your Docker container management via Portainer web interface. It enables faster deploy of the applications and it gives real time visibility. 171 | ``` 172 | 173 | #### Footer 174 | 175 | ``` text title="Footer: tools/include/markdown/CON004-footer.md" 176 | 177 | === "Access to the web interface" 178 | 179 | The web interface is accessible via port **9002**: 180 | 181 | - URL = `http://:9002` 182 | ``` 183 | -------------------------------------------------------------------------------- /docs/Developer-Guide_Adding-Board-Family.md: -------------------------------------------------------------------------------- 1 | # Adding a new board or board family 2 | 3 | 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 4 | 5 | - [https://github.com/armbian/build/pull/3176/files](https://github.com/armbian/build/pull/3176/files) 6 | - [https://github.com/armbian/build/pull/3138/files](https://github.com/armbian/build/pull/3138/files) 7 | - [https://github.com/armbian/build/pull/7902/files](https://github.com/armbian/build/pull/7902/files) 8 | - [https://github.com/armbian/build/pull/8208/files](https://github.com/armbian/build/pull/8208/files) -------------------------------------------------------------------------------- /docs/Developer-Guide_Build-Commands.md: -------------------------------------------------------------------------------- 1 | # Build commands 2 | 3 | ### kernel 4 | 5 | Builds kernel and device tree (where applicable) and places it to the `output/debs` 6 | 7 | Usage: 8 | ```bash 9 | ./compile.sh kernel BOARD=nanopi-r5c BRANCH=edge 10 | ``` 11 | 12 | ### kernel-config 13 | 14 | Automatically call kernel's `make menuconfig` (add or remove modules or features) 15 | 16 | Usage: 17 | ```bash 18 | ./compile.sh kernel-config BOARD=nanopi-r5c BRANCH=edge 19 | ``` 20 | 21 | ### dts-check 22 | 23 | Validate dts files and improve board & patch development overall. 24 | 25 | 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. 26 | 27 | Usage: 28 | ```bash 29 | ./compile.sh dts-check BOARD=nanopi-r5c BRANCH=edge 30 | ``` 31 | ### inventory-boards 32 | 33 | Outputs a one-board-per-line CSV inventory of boards. 34 | 35 | Sets `TARGETS_FILE` to something that doesn't exist, so the `default-targets.yaml` is used (so same list for everyone, save for userpatched-boards) 36 | 37 | Usage: 38 | ```bash 39 | ./compile.sh inventory-boards 40 | ``` 41 | Outputs /info/boards-inventory.csv 42 | 43 | ### kernel-dtb 44 | 45 | Builds only DTB and outputs full preprocessed dts source 46 | 47 | Outputs preprocessed DTS source for the board in question to `output/` 48 | also outputs the same preprocessed DTS source, ran through `dtc` with input and output DTS formats for "normalized" comparisons 49 | 50 | Usage: 51 | ```bash 52 | ./compile.sh kernel-dtb BOARD=xxxxx BRANCH=edge 53 | ``` 54 | 55 | ### uboot-patch 56 | 57 | Create patch files for u-boot. 58 | 59 | The output patch files are written to 60 | **output/patch/u-boot-${LINUXFAMILY}-${[BRANCH](https://docs.armbian.com/Developer-Guide_Build-Switches/#user-space)}.patch**. 61 | To use them in subsequent builds they 62 | must be copied to the appropriate directories in the patch/u-boot directory. 63 | See: [user-provided patches](https://docs.armbian.com/Developer-Guide_User-Configurations/#user-provided-patches) 64 | 65 | Any uncommited changes in the work tree and index are commited 66 | to establish a clean work tree. 67 | It would be best if there are no uncommitted changes when running 68 | `uboot-patch`. 69 | 70 | If there is an existing patch file at the output path specified above, it 71 | may be applied before continuning work. 72 | 73 | When the prompt `Press after you are done editing in ${pwd}` appears, 74 | in a separate window, navigate to the specified directory 75 | and make any required changes. 76 | When changes are complete, 77 | return to the window running the `uboot-patch` command 78 | and press ``. 79 | 80 | A patch to recreate the changes introduced to the u-boot tree is presented 81 | and the prompt "Are you happy with this patch?". 82 | You can response 83 | `yes` to accept the patch as-is and generate the output patch file, 84 | `stop` to abort the command without producing the outpu patch file, 85 | or anything else to loop back, to make futher changes. 86 | 87 | Instead of creating them while running `uboot-patch`, 88 | new device tree files should be created in the relevant `dt` directory under 89 | `patch/u-boot` 90 | and new _defconfig files should be created in the relevant `configs` directory 91 | under `patch/u-boot`. 92 | While the `uboot-patch` command will add these new files to the patch 93 | if they are created while running `uboot-patch`, 94 | this is not the preferred way of adding these files. 95 | 96 | ### rewrite-uboot-patches 97 | 98 | Prepares git, applies patches to git, and rewrites them back from git 99 | same as kernel, it does git archeology for mbox-less patches, etc. 100 | 101 | Note: MAINTAINER and MAINTAINEREMAIL should be set. 102 | 103 | - uboot-patches-to-git alias is also added, but my guess is that the rewrite is more useful. 104 | - refactor a common config function for both kernel and uboot. 105 | 106 | Usage: 107 | ```bash 108 | ./compile.sh rewrite-uboot-patches BOARD=xxxx BRANCH=edge 109 | ``` 110 | 111 | ### rewrite-kernel-patches 112 | 113 | Prepares git, applies patches to git, and rewrites them back from git 114 | same as kernel, it does git archeology for mbox-less patches, etc. 115 | 116 | Usage: 117 | ```bash 118 | ./compile.sh rewrite-kernel-patches BOARD=xxxx BRANCH=edge 119 | ``` 120 | 121 | ### targets 122 | 123 | Generates output/info/git_sources.json file containing URL, branch, and commit hash combo. 124 | 125 | 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. 126 | 127 | Usage: 128 | ```bash 129 | ./compile.sh targets 130 | ``` 131 | -------------------------------------------------------------------------------- /docs/Developer-Guide_Build-Preparation.md: -------------------------------------------------------------------------------- 1 | # Armbian Build Framework Quick Start Guide 2 | 3 | ## Requirements 4 | 5 | - x86_64 / aarch64 / riscv64 machine 6 | - at least 8GB (less for non-[BTF](https://docs.kernel.org/bpf/btf.html) builds) of memory and ~50GB of disk space for VM, container, or bare-metal installation 7 | - **Armbian / Ubuntu Noble 24.04.x** for native building or any Docker capable Linux for containerised 8 | - **Windows 10/11 with WSL2 subsystem** running Armbian / Ubuntu Noble 24.04.x 9 | - Superuser rights (configured sudo or root access). 10 | - Make sure your system is up-to-date! Outdated Docker binaries, for example, can cause trouble 11 | 12 | 13 | ## Clone repository 14 | 15 | ```bash 16 | git clone https://github.com/armbian/build 17 | cd build 18 | ``` 19 | !!! note 20 | - Make sure that full path to the build script **does not contain spaces** 21 | - For stable branch use last point release `--branch=v24.11` 22 | 23 | 24 | ``` mermaid 25 | gitGraph 26 | commit 27 | commit 28 | checkout main 29 | commit id: "v24.08" tag: "v24.08" 30 | branch v24.08 31 | commit 32 | commit 33 | commit 34 | commit 35 | checkout main 36 | commit id: "v24.11" tag: "v24.11" 37 | branch v24.11 38 | commit 39 | commit 40 | commit 41 | commit 42 | checkout main 43 | commit 44 | commit 45 | commit 46 | commit 47 | commit 48 | commit 49 | commit id: "main" type: REVERSE tag: "Trunk" 50 | ``` 51 | 52 | 53 | ## Interactive 54 | 55 | Run framework: 56 | 57 | ```bash 58 | ./compile.sh 59 | ``` 60 | 61 | ??? info "Video" 62 | 63 | 64 | 65 | ## CLI 66 | 67 | ```bash 68 | ./compile.sh [command] [switch...] [config...] 69 | ``` 70 | 71 | Only one command can be specified. 72 | 73 | Switches are parameter settings that are used by the build framework itself 74 | (e.g. `DEBUG=yes`) or the specific command. 75 | 76 | Config files are bash shell scripts that are sourced in the order 77 | specified. They are primarily used to set switches but might also set hook 78 | functions. They must be located in the `userpatches` directory and must 79 | be named `config-${arg}.conf` or `config-${arg}.conf.sh` (where `${arg}` is 80 | the argument from the command line): one or the other, but not both. 81 | 82 | Switches set on the commandline override settings from the config files, 83 | regardless of the order they appear on the comandline. 84 | 85 | Comprehensive list of build [Commands](Developer-Guide_Build-Commands.md) and [Switches](Developer-Guide_Build-Switches.md) 86 | 87 | Example: 88 | 89 | ```bash 90 | ./compile.sh build \ 91 | BOARD=uefi-x86 \ 92 | BRANCH=current \ 93 | BUILD_DESKTOP=yes \ 94 | BUILD_MINIMAL=no \ 95 | DESKTOP_APPGROUPS_SELECTED='browsers chat desktop_tools' \ 96 | DESKTOP_ENVIRONMENT=gnome \ 97 | DESKTOP_ENVIRONMENT_CONFIG_NAME=config_base \ 98 | KERNEL_CONFIGURE=no \ 99 | RELEASE=noble 100 | ``` 101 | 102 | Or, using config file `userpatches/config-myboard.conf` 103 | that sets all these switches: 104 | 105 | ```bash 106 | ./compile.sh build \ 107 | myboard 108 | ``` 109 | 110 | !!! question "Interpretation?" 111 | 112 | 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. 113 | 114 | 115 | ## Logging 116 | 117 | 118 | Logs are written to **output/logs**. Old logs (all but the current build) 119 | are compressed and moved to **output/logs/archive**. 120 | 121 | Log formats are: 122 | 123 | - ANSI - text with ANSI escapes for color coding - \*.log.ans 124 | - ASCII (if ansi2txt is available) - text without color coding escapes - \*.log 125 | - Markdown summary - \*.md 126 | - Raw (if RAW_LOG=yes) - tar file containg all the raw logs - \*.raw.tar 127 | 128 | For much more verbose logs set switch 'DEBUG=yes'. 129 | 130 | ## GitHub Actions 131 | 132 | If you do not have the proper equipment to build images on your own, you can use our [GitHub Action](https://github.com/marketplace/actions/rebuild-armbian). 133 | -------------------------------------------------------------------------------- /docs/Developer-Guide_Building-with-Docker.md: -------------------------------------------------------------------------------- 1 | # Building with Docker 2 | 3 | ## Officially supported and tested method for building with Docker 4 | 5 | This method works for building u-boot and kernel packages as well as building full OS images. 6 | Note! 7 | To write fresh-builded image directly to sdcard or other block device you have to enable 8 | Docker run in `privileged` mode. 9 | Uncomment line `DOCKER_FLAGS+=(--privileged)` in file `userpatches\config-docker.conf` or your own docker-config file. 10 | 11 | Building additional packages (`EXTERNAL_NEW`) is not supported. 12 | 13 | ### Requirements 14 | 15 | - x86/x64/aarch64/armhf Linux host that supports running a recent Docker daemon. Refer to [Docker documentation](https://docs.docker.com/) for details. 16 | - Docker version 17.06 CE or newer. 17 | - Enough free disk space on the storage used for Docker containers and named volumes. Named volumes path can be changed using standard Docker utilites, 18 | refer to Docker documentation for details. 19 | 20 | Installation (https://docs.docker.com/engine/install/) 21 | 22 | ### Details 23 | 24 | There are 3 options to start build process: 25 | 26 | 1\. By passing configuration file name (`config-.conf`), stored in `userpatches` directory, as an argument: 27 | ``` 28 | ./compile.sh docker 29 | ``` 30 | 2\. By passing addtional line arguments to `compile.sh` after `docker`: 31 | ``` 32 | ./compile.sh docker KERNEL_ONLY=yes BOARD=cubietruck BRANCH=current KERNEL_CONFIGURE=yes 33 | ``` 34 | 3\. Interactively run inside docker container 35 | ``` 36 | ./compile.sh docker-shell BOARD=rockpi-4a BRANCH=edge RELEASE=jammy 37 | ``` 38 | 39 | The process creates and runs a named Docker container `armbian` with two named volumes `armbian-cache` and `armbian-ccache`, 40 | and mounts local directories `output` and `userpatches`. 41 | 42 | Options 1 and 2 compile the same as without Docker but in separate environment to prevent changes to the base system. 43 | 44 | The dockerfile of the created container is placed in `userpatches` directory, and all container-related options can be changed 45 | in `userpatches/config-docker.conf` file. Templates of both files are located in the `config/templates` directory. 46 | 47 | ### docker-shell interactive mode 48 | 49 | The docker-shell interactive mode is useful for when you need to do more than just "make an image." This mode allows you to edit 50 | U-Boot and kernel sources before and after applying patches, investigate compilation errors, and so on. 51 | 52 | This mode also allows you to manually run individual steps of the build process. 53 | 54 | First, start docker-shell on the host build system: 55 | ``` 56 | @droid:~/armbian$ ./compile.sh docker-shell RELEASE=bullseye BOARD=rockpi-4a BRANCH=edge 57 | ``` 58 | From there, `RELEASE=bullseye BOARD=rockpi-4a BRANCH=edge` are passed into shell and will be set into 59 | envirounment variables. 60 | 61 | Next, we can simply start building an image: 62 | ``` 63 | root@75ec76203b65:~/armbian# ./compile.sh 64 | ``` 65 | Alternatively, you can run any function defined in the compile.sh script. 66 | 67 | For example, to compile U-Boot, prepare the environment with: 68 | ``` 69 | ./compile.sh default prepare_host compile_sunxi_tools install_rkbin_tools 70 | ``` 71 | Then, build U-Boot: 72 | ``` 73 | ./compile.sh default compile_uboot 74 | ``` 75 | To compile only the source code as it is without patching or modifications, run: 76 | ``` 77 | ./compile.sh default COMPILE_ONLY=yes compile_uboot 78 | ``` 79 | Note that you must enter docker-shell after a docker build, as you must 80 | download all of the required toolchains and sourcecodes beforehand. 81 | -------------------------------------------------------------------------------- /docs/Developer-Guide_Building-with-Multipass.md: -------------------------------------------------------------------------------- 1 | # Building with Multipass 2 | 3 | In order to build an Armbian image from scratch, whether for development purposes or to [apply user customizations](https://docs.armbian.com/Developer-Guide_User-Configurations/) on top of a base image, a build environment is required. Per the Armbian documentation, Ubuntu 22.04 is [the officially supported](https://docs.armbian.com/Developer-Guide_Build-Preparation/) build platform. 4 | 5 | [Multipass](https://multipass.run/) that is designed for quick and painless provisioning of Ubuntu VMs. 6 | 7 | 8 | ### Creating a VM and preparing for build 9 | 10 | Multipass is [available](https://multipass.run/install) for macOS, Windows and Linux platforms. 11 | 12 | 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: 13 | 14 | ```bash 15 | multipass launch --cpus 4 --disk 25G --mem 4G --name jammy 16 | ``` 17 | 18 | ### Clone the build repo 19 | 20 | You can run commands direct on the instance to clone the build repo: 21 | 22 | ```bash 23 | multipass exec jammy -- bash -c "git clone --depth 1 https://github.com/armbian/build" 24 | ``` 25 | 26 | ### Use an instance 27 | Then you can get a shell to the instance and run the build as needed: 28 | 29 | ```bash 30 | C:\> multipass shell armbian 31 | Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.4.0-48-generic x86_64) 32 | Last login: Tue Jan 30 12:23:08 2024 from 172.22.111.1 33 | # Let's get building! 34 | ubuntu@armbian:~$ cd build 35 | ubuntu@armbian:~/build$ ./compile.sh BOARD=orangepizero ... etc 36 | ``` 37 | 38 | ### Share data with an instance 39 | 40 | The recommended way to share data between your host and an instance with Multipass is the command:mount 41 | ```bash 42 | multipass mount /my/dir jammy 43 | multipass info jammy 44 | ``` 45 | 46 | Mounts: /my/dir => /my/dir 47 | 48 | From this point on will be available inside the instance./my/dir 49 | -------------------------------------------------------------------------------- /docs/Developer-Guide_Extensions.md: -------------------------------------------------------------------------------- 1 | # Extensions 2 | 3 | > "I'm gonna create a `prepare_bootloader` hook [in core] so we can refactor `u-boot` [into an extension]" 4 | 5 | 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. 6 | 7 | It's 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. 8 | 9 | ### Terminology 10 | - The "core" is everything that's in `lib/` directory plus `compile.sh` and some others. It's the spine of the build system. 11 | - An "extension" is a separate Bash source file that contains exclusively functions. Extensions live in `extensions/` or `userpatches/extensions/` directory, but could one day be in a separate repository too. 12 | - An "extension method" (a.k.a "hook") is used by the core to call extensions, via `call_extension_method()`. This will discover all enabled extension methods implementations, order them, and call them one by one. 13 | - The Armbian core already has quite a few of these in strategic spots. 14 | - More are coming as they're identified. 15 | - An "extension method implementation" is a function that will be called when it's extension method is called. It can be defined in extensions, but also in board config, family config, user config, etc. 16 | 17 | #### Example 18 | 19 | ##### Core calls extensions 20 | 21 | The Armbian core build system has an extension method called `run_after_build`, also known as the "`run_after_build` hook". You can find it in `lib/main.sh` around line 546. 22 | 23 | ```bash 24 | # in lib/main.sh:546 25 | call_extension_method "run_after_build" [...] 26 | ``` 27 | 28 | 29 | ##### Extension method implementation 30 | 31 | Consider the following function: 32 | 33 | ```bash 34 | function run_after_build__say_congratulations() { 35 | echo "Congrats, the build is finished!" 36 | } 37 | ``` 38 | 39 | Such a function is an "extension method implementation" called `say_congratulations` for the extension method `run_after_build`. 40 | 41 | ##### Extension file 42 | 43 | A file `userpatches/extensions/be-festive.sh` containing the above function is an "extension" called `be-festive`. 44 | 45 | ##### Using it 46 | 47 | 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. 48 | 49 | 50 | ### Naming conventions and ordering 51 | 52 | An extension method implementation is just a Bash function that follows the pattern `run_after_build__say_congratulations` where 53 | 54 | - `run_after_build` is the name of the extension method. 55 | - `__` is a marker/separator -- very important -- two underscores, not one, not three. 56 | - `say_congratulations` is the name of the extension method implementation, and should be unique. 57 | 58 | The system will "magically" compose a single `run_after_build()` function, based on all the hook functions that begin with `run_after_build__`. 59 | 60 | Hook functions will be sorted by their numerical value; hook functions that do not begin with a number will receive `500_` prefix automatically. 61 | 62 | So the examples `run_after_build__do_this` and `run_after_build__500_do_this` are equivalent, and will run 63 | 64 | - sooner than `run_after_build__900_do_smth_else` 65 | - later than `run_after_build__300_do_even_another_thing` 66 | 67 | 68 | 69 | ### What is an _extension_? 70 | 71 | A extension is Bash source file that contains **exclusively**: 72 | 73 | - function definitions: 74 | - extension method implementation definitions (with `__` separator) 75 | - other internal functions (for structure and clarity if needed) 76 | - calls to `enable_extension "another-extension"` at the top of the file. 77 | - that's a very simple dependency system, one extension can enable another. 78 | 79 | Specifically, **extension files should not contain any code outside of functions** -- they should do nothing when sourced. 80 | 81 | Extensions can be official Armbian fragments and live in `/extensions`, or can be user-specific 82 | in `/userpatches/extensions`. 83 | 84 | An extension could be implemented in any of the following file/dir structures: 85 | 86 | - `/extensions/our-ext.sh` - an official, single-file extension. 87 | - `/userpatches/extensions/my-ext.sh` - a user-specific, single-file extension. 88 | - `/extensions/our-dir-ext/our-dir-ext.sh` - an official, directory-based extension. 89 | - `/userpatches/extensions/my-dir-ext/my-dir-ext.sh` - a user-specific, directory-based extensions. 90 | 91 | 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. 92 | 93 | #### Single-file vs Directory-based 94 | 95 | They're the same, except: 96 | 97 | - Directory-based extensions will be passed a `${EXTENSION_DIR}` environment variable. 98 | - That is useful if there are other files/assets that belong together with that extension. An example would be a template file, some configuration file, or other static asset that is directly related to the extension. 99 | - Using directory-based extensions and `${EXTENSION_DIR}` allows for easy moving and PR'ing of user extensions. 100 | -------------------------------------------------------------------------------- /docs/Developer-Guide_Overview.md: -------------------------------------------------------------------------------- 1 | ## What it does? 2 | 3 | - Builds custom **kernel**, **image** or a Debian based Linux **distribution** optimized for low-resource hardware, 4 | - Include filesystem generation, low-level control software, kernel image and **bootloader** compilation, 5 | - Provides a **consistent user experience** by keeping system standards across different platforms. 6 | 7 | ``` mermaid 8 | graph LR 9 | A[./compile.sh] --> B{Change
kernel
config}; 10 | B ---> |yes| C["HW"]; 11 | B ---> |no| C["HW"]; 12 | C ---> |branch| D["legacy
vendor
current
edge"]; 13 | D --> |base| E["Debian
Ubuntu"]; 14 | E ---> |type| F["CLI"]; 15 | F ---> |type| G["Server"]; 16 | F ---> |type| H["Minimal"]; 17 | E ---> I["Desktop"]; 18 | I ---> K["XFCE"]; 19 | I ---> L["Gnome"]; 20 | I ---> M["Cinammon"]; 21 | I ---> N["KDE Neon"]; 22 | ``` 23 | 24 | ## Key Advantages 25 | 26 | - Simplicity with interactive graphical interface. 27 | - Generates widely recognized and well maintained userspace 28 | - Fast learning curve for complex operations 29 | 30 | Check other similarities, advantages and disadvantages compared with leading industry standard build software. 31 | 32 | Function | Armbian | Yocto | Buildroot | 33 | |:--|:--|:--|:--| 34 | | Target | general purpose | embedded | embedded / IOT | 35 | | U-boot and kernel | compiled from sources | compiled from sources | compiled from sources | 36 | | Board support maintenance   | complete | outside | outside | 37 | | Root file system | Debian or Ubuntu based| custom | custom | 38 | | Package manager | APT | any | none | 39 | | Configurability | limited | large | large | 40 | | Initramfs support | yes | yes | yes | 41 | | Getting started | quick | very slow | slow | 42 | | Cross compilation | yes | yes | yes | 43 | -------------------------------------------------------------------------------- /docs/Developer-Guide_User-Configurations.md: -------------------------------------------------------------------------------- 1 | # User Configuration 2 | 3 | ## User provided patches 4 | 5 | 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: 6 | 7 | [ o.k. ] Started patching process for [ kernel sunxi-edge 4.4.0-rc6 ] 8 | [ o.k. ] Looking for user patches in [ userpatches/kernel/sunxi-edge ] 9 | 10 | 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`. 11 | 12 | ## User provided configuration 13 | 14 | A configuration file named `userpatches/config-.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 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](https://github.com/lanefu/armbian-userpatches-example-indiedroid-nova). 15 | 16 | ## Legacy user provided configuration (deprecated, support for this will be removed at some point) 17 | 18 | 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: 19 | 20 | [[ $LINUXFAMILY == sunxi64 && $BRANCH == edge ]] && BOOTBRANCH='tag:v2017.09' # conditionally change u-boot git branch/tag 21 | KERNELBRANCH="tag:v5.4.28" #always change to this kernel tag 22 | 23 | ## User provided kernel config 24 | 25 | 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: 26 | 27 | [ o.k. ] Compiling current kernel [ 5.10.47 ] 28 | [ o.k. ] Using kernel config provided by user [ userpatches/linux-rockchip64-current.config ] 29 | 30 | ## User provided sources config overrides 31 | 32 | 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. 33 | Please note that there are some exceptions for LINUXFAMILY like `sunxi` (32-bit mainline sunxi) and `sunxi64` (64-bit mainline sunxi) 34 | 35 | Example: 36 | 37 | [ o.k. ] Adding user provided sunxi64 overrides 38 | 39 | ## User provided image customization script 40 | 41 | You can run additional commands to customize the created image. Edit this file: 42 | 43 | userpatches/customize-image.sh 44 | 45 | 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. 46 | 47 | To add files to the image easily, put them in `userpatches/overlay` and access them in `/tmp/overlay` from `customize-image.sh` 48 | 49 | 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. 50 | 51 | ## Partitioning of the SD card 52 | 53 | 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's maximum capacity at boot time (leaving an unpartitioned spare area of ~5% when the size is 4GB or less to help the SD card's controller with wear leveling and garbage collection on old/slow cards). 54 | 55 | 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's size if the image size doesn't exceed this or `3887103s` for example will use sector 3887103 as partition end. Values without either `%` or `s` will be ignored). 56 | -------------------------------------------------------------------------------- /docs/Developer-Guide_Welcome.md: -------------------------------------------------------------------------------- 1 | # Welcome to the Armbian build framework documentation! 2 | 3 | Overview: 4 | 5 | ### (ANSI) Logging 6 | 7 | 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. 8 | _Please_ add `SHARE_LOG=yes` to automatically upload logs to our paste service and provide us with the given url when reporting issues. 9 | That will allows us to check the logs on a web browser and keep to correct formatting. 10 | 11 | ## Command line syntax has changed 12 | 13 | General CLI syntax: `./compile.sh PARAM=value OTHER_PARAM=other_value [ ...] []` 14 | 15 | - where `command` defaults to `build` if not specified; could also be `kernel-config` or `u-boot` etc... 16 | - config file names _must not_ have the same name as a possible `` (system will check & bomb if so) 17 | - also: there is no more `default` config -- you have to be explicit 18 | - also: there is no more `docker` config -- Docker is fully auto-managed now. The system will complain if you have one. 19 | - parameters like `PARAM=value`, `` or `` can be applied in _any order_. 20 | 21 | ## No more `config-default.conf`, config file name needs to be specified in the command line 22 | 23 | - No "default" config is auto-loaded anymore. Default config lead to unreproducible failing builds and was a source of 24 | confusion. 25 | - The configs still go to the same place, `userpatches/config-xyz.conf` -- but the name has to be provided to the build system to, 26 | like `./compile.sh BOARD=xxx xyz`; otherwise works the same. 27 | 28 | ## Artifacts, cache, what the ...? 29 | 30 | The `armbian/build` system is currently undergoing refactoring to improve its structure. Previously, the build system 31 | was a single, very complex bash script that mixed the building of `.deb` packages with the creation of images. 32 | 33 | This was reworked into a `1-to-N` image-to-artifact dependency tree; a certain image build will depend on N possible 34 | "artifacts". Artifacts are either `.deb` packages, a `.tar` of multiple `.deb` packages, or a `rootfs.tar.zstd`. Each 35 | artifact can be individually built, and has a specific name and a _version_. 36 | 37 | Each artifact is also now **cached by default** using OCI storage at ghcr.io (GitHub Container Registry). To achieve 38 | _consistent caching_, each artifact produces a version that includes _hashes_ of its composing files, variables, 39 | patches, hooks, external git SHA1 references, etc. That way we can consistently check the remote OCI cache for previously-built 40 | artifacts, and possibly save image builders from having to build heavy packages just to produce an image. 41 | 42 | ### TL;DR about artifacts and caching: 43 | 44 | - `KERNEL_ONLY=yes` and `KERNEL_ONLY=no` are deprecated. Use the `kernel` CLI command instead. 45 | - `ARTIFACT_IGNORE_CACHE=yes` can help with false positives. Please also report the problem, with a complete logfile. 46 | 47 | ## Automatic Docker/sudo launcher 48 | 49 | - `compile.sh` will prefer to use Docker if it detects Docker is installed and working. 50 | - This handles Docker Desktop and Rancher Desktop (in Docker emulation mode) under macOS/Darwin, including Apple 51 | M1/M2. 52 | - You **don't need and actually can't have the old docker config file**. 53 | - If Docker is not installed, it will try to use `sudo` to run the build as root. 54 | - If you run directly as root, it will give a warning and asks to run without `sudo`. 55 | 56 | ## Kernel Git Trees: shallow vs full 57 | 58 | During the build, depending on which local or remote caches are hit, it might be necessary to build the Linux Kernel from scratch. 59 | 60 | The kernel's git repo is huge. Most build systems resort to fetching "shallow" trees directly from upstream git servers, 61 | to save bandwidth. Unfortunately that creates immense extra CPU load on the git servers. To avoid this problem, 62 | Armbian produces daily automated git tree exports cached in ghcr.io OCI repositories, and only uses `git fetch` to 63 | update the relatively small new changes from the upstream git server. 64 | 65 | There are two types of cached Kernel git trees: 66 | 67 | - `full` is a complete git tree, including all of Torvald's `master` and all of the currently-supported `stable` 68 | branches. 69 | - `full` is very large download and requires a lot of disk space. 70 | - `full` is more useful over time and when building multiple different kernels on the same machine, like for CI 71 | servers or developer workstations. 72 | - `shallow` is a shallow tree for a specific `stable` branch 73 | - `shallow` is a much smaller download and requires less disk space 74 | - `shallow` is appropriate for restricted devices like SBCs which will build a single kernel 75 | 76 | **TL;DR: ** `KERNEL_GIT=full` or `KERNEL_GIT=shallow` or let the system decide for you. 77 | 78 | ## Consider forking before cloning the repo 79 | 80 | Before cloning the repo, consider forking it first. This will allow you to make changes and submit pull requests. 81 | You will need a GitHub account to do this; 82 | see [GitHub's documentation](https://docs.github.com/en/github/getting-started-with-github/fork-a-repo) for more 83 | information. 84 | If you fork, make sure to keep your fork up-to-date with the main repo, by rebasing your fork. 85 | 86 | ## Some really confusing stuff still remains 87 | 88 | This is (by far) not a complete list: 89 | 90 | - wifi/other kernel drivers are still using pre-armbian-next code, and are very hard to work with. it is not only the 91 | contents are a mess, the way the whole thing works leads to more and more compounding work. To make it worse, family 92 | patches sometimes need to patch driver code, leading to a cycle of sadness for developers. We are still coming up with 93 | a plan to completely replace this lest most of us go insane. 94 | - although "aggregation" has been rewritten in Python, it still mostly works using the legacy principle, by scanning 95 | directories and files in a very complex and error-prone way. This is a source of many bugs and confusion. We plan to 96 | replace this with pure extensions eventually. 97 | - we have mostly working kernel headers (linux-headers pkg) for 5.10+ including some vendor kernels 98 | 99 | ## Multiple u-boot's for same board 100 | 101 | 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. 102 | 103 | 104 | -------------------------------------------------------------------------------- /docs/Process_Armbian-Task-Tracking.md: -------------------------------------------------------------------------------- 1 | # Armbian Task Management # 2 | 3 | ## Overview ## 4 | TLDR; Keep task discussions in the forum. GitHub Issues are just for task metadata. 5 | 6 | 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. 7 | 8 | ### What is a task? ### 9 | 10 | A task is something actionable that results in some sort of tangible output. ex: code, documentation, QA findings. 11 | 12 | Example sources of tasks include: feature requests, bugs, QA, general following of development roadmap. 13 | 14 | Not all support issues are tasks, but a support issue can generate a task. 15 | 16 | 17 | ## Task Creation Procedure ## 18 | 19 | 1. Create issue in [Armbian GitHub Repo](https://github.com/igorpecovnik/lib/issues) under appropriate milestone 20 | - ![step1](images/taskProcess1.png) 21 | 1. Copy the numeric ID of issue created 22 | 1. Create new topic under the Tasks subforum on the [Armbian Forums](https://forum.armbian.com/forum/15-tasks/) 23 | - Use the the naming convention of `[ISSUE_ID] - Issue Name` 24 | - ![step2](images/taskProcess3.png) 25 | 1. Copy the URL of task subforum topic just created 26 | 1. Create comment on GitHub Issue with the following Content: 27 | 28 | Please keep all discussion for this issue on the forum topic available below: 29 | 30 | [URL](URL) 31 | 32 | - ![step4](images/taskProcess4.png) 33 | 34 | 1. Lock comments on GitHub Issue 35 | 36 | ## Task tracking with GitHub Issues ## 37 | 38 | 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. 39 | 40 | ### Labels ### 41 | 42 | Use labels identify the purpose of a task. 43 | 44 | 45 | * `bug` is used to tag tasks that address Armbian-level bugs 46 | * `not-our-bug` is used to identify tasks that are bugs in upstream code. They are not Armbian bugs, but may impact Armbian. 47 | * `enhancement` is used to identify tasks that are new features for Armbian. 48 | 49 | ### Milestones ### 50 | 51 | Use milestones to divide tasks into claimed and unclaimed work. 52 | 53 | * `claimed tasks` milestone contains tasks which have been assigned. 54 | * `unclaimed tasks` milestone contains tasks that need an owner. 55 | 56 | 57 | ## Forum Tasks ## 58 | 59 | ### Converting a topic to a task ### 60 | 61 | 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. 62 | 63 | ## Future Process Improvements ## 64 | 65 | Enhancements desired for this process \(This should be a task!\) 66 | 67 | ### Issue Hook ### 68 | 69 | Ideally we can have a forum topic created upon issue creation. This will save some time. 70 | -------------------------------------------------------------------------------- /docs/Process_Contribute.md: -------------------------------------------------------------------------------- 1 | # Collaborate on the project 2 | 3 | ## Overview 4 | 5 | 1. [Fork](https://docs.github.com/en/free-pro-team@latest/github/getting-started-with-github/fork-a-repo) the project. 6 | 1. Make one or more well commented and clean commits to the repository. 7 | 1. Perform a [pull request](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request) in Github's web interface. 8 | 9 | If it is a new feature request, do not start the coding first. Remember to [open an issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/about-issues) to discuss the new feature. If you want to [add code to someone else pull request](https://tighten.co/blog/adding-commits-to-a-pull-request/). Also check collection of [git tips](https://github.com/git-tips/tips) which will make your life easier. 10 | 11 | If you are struggling, check [WEB](https://www.exchangecore.com/blog/contributing-concrete5-github) or [CLI](https://www.digitalocean.com/community/tutorials/how-to-create-a-pull-request-on-github) step-by-step guide on contributing. 12 | 13 | ## Source code 14 | 15 | - Armbian build framework: 16 | - Armbian configuration utility: 17 | - Armbian documentation: 18 | 19 | 20 | ## Adding a new board? 21 | 22 | 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 23 | 24 | - [https://github.com/armbian/build/pull/3176/files](https://github.com/armbian/build/pull/3176/files) 25 | - [https://github.com/armbian/build/pull/3138/files](https://github.com/armbian/build/pull/3138/files) 26 | 27 | ## Board maintainer 28 | 29 | If you are interested in being a maintainer please review [Board Support Rules](/User-Guide_Board-Support-Rules/). Then [apply here](https://forum.armbian.com/staffapplications/application/8-single-board-computer-maintainer/) and wait for acceptance. Once accepted you will be added to our infrastructure. For this reason we need [additional information](https://www.armbian.com/maintainer-registry/) to complete your registration process. 30 | 31 | !!! question "Requirements?" 32 | 33 | - You must have access to the hardware you applied to maintain 34 | - You must have a Github ID which should be listed in the documentation 35 | - You must have a forums account 36 | - You must have an Jira account and keep track of issues filed for your board 37 | - You must make sure [Armbian management](https://www.armbian.com/maintainer-registry/) has been informed of all of the above IDs for our documentation 38 | - You should know Armbian basics like how to get an Armbian image run on your hardware and do basic debugging, ideally via serial console 39 | - Knowledge in development, writing code and so on is optional but welcome 40 | 41 | ### Expectations 42 | 43 | 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. 44 | 45 | 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. 46 | 47 | - You must participate in release process. Ideally you attend meetings related to releases. On that occasion you are given the chance to point out critical issues with your board. 48 | - You must sign-off that device has been tested, is stable, and ready for release during release process. This basically means you test images that are getting prepared for release 49 | 50 | !!! question "What are we looking for?" 51 | 52 | - does the board boot to both CLI and Desktop? 53 | - is the desktop usable? 54 | - does USB work? (at all or partially) 55 | - other things such as wireless, audio 56 | 57 | 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. 58 | 59 | 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. 60 | 61 | Alternatively you can use auto-built images - they are placed at the ever end of each board download pages under "Rolling releases". 62 | 63 | - You must provide "best effort" support in the forum. Do not let that wording intimidate you. This is not a complicated task. Regarding forums this can include things like answering obvious questions (for example by pointing to our documentation, ideally directly to the solution page), let the questioner know that additional information is needed for further debugging (e.g. request "armbianmonitor -u" output) or for upgrade issues, ask if they can recreate the issue with a fresh untouched image from: 64 | 65 | - You must provide "best effort" support in Jira. Review submitted issues for you board made by Armbian's contributors 66 | 67 | ## Release manager 68 | 69 | This role has additional permission that allows preparation of images for release. 70 | 71 | Release managers: 72 | 73 | -------------------------------------------------------------------------------- /docs/Process_Managing_Workflow.md: -------------------------------------------------------------------------------- 1 | # Jira 2 | 3 | Jira where development work is entered and prioritized. https://armbian.atlassian.net/ 4 | 5 | ## Issue Types 6 | 7 | When creating issues, try to assign issue type most appropriate. Issue type _can_ be changed later so don't worry too much. If possible assign to a "Fix Version" aka Release. 8 | 9 | * **Epic** - useful as placeholders for large requirements. Common objective, overall goals, contains several stories. 10 | * **Story** - Smallest units of functionality that can be achieved in one or two weeks. Non-technical language. 11 | * **Task** - Work that is clearly defined usually by people that will do the work. Specific, technical language. 12 | 13 | 14 | ![Theme vs Epic vs User Story vs Task](images/product-backlog-structure.png) 15 | 16 | ## Special Issue Type 17 | 18 | * **Bug** - malfunction of the system, an error, flaw, or a default in the system, that causes an incorrect result. 19 | 20 | ## Work Queue 21 | 22 | The easiest way to follow the work queue [Upcoming Release Kanban Board](https://armbian.atlassian.net/secure/RapidBoard.jspa?rapidView=2&projectKey=AR&atlOrigin=eyJpIjoiM2JlNTliN2ZkNTJiNDYzNGI4YzEzOGE4YjhmOWU3MDQiLCJwIjoiaiJ9). This board lists only work select for the upcoming release. 23 | 24 | ![kanban screenshot](images/kanban.png) 25 | 26 | Use the filter buttons at top to quickly see unassigned work, work assigned to you, bugs, and work recently updated. 27 | 28 | Work is listed in 3 columns, and sorted by priority. 29 | 30 | Columns: 31 | * **Todo** 32 | * Work prioritized to be done next 33 | * Pick up any task from this column 34 | * **In Progress** 35 | * Work In Progress 36 | * **Done** 37 | * Shows **recently** completed work. Has time limit to keep board clean 38 | 39 | ## Managing Work 40 | 41 | All issues for an upcoming release are assigned a "Fix Version" to indicate release number. 42 | 43 | ### Backlog 44 | 45 | With the Kanban Board, there are 2 states for the Upcoming Release backlog. 46 | 47 | * **Todo** - These tasks are visible the **Todo** column of the Kanban board. To keep things simple, there shouldnt be more than 5-10 issues in Todo 48 | * **Backlog** -- Other tasks seleceted for release, but not are not visible on the Kanban board. The purpose of this is to keep the **Todo** column clean and easy to work from. As the **Todo** column clears, prioritize next tasks in backlog by moving them to todo. 49 | 50 | All issues for an upcoming release are assigned a "Fix Version" to indicate release number. 51 | 52 | ## Mobile access 53 | You can download the app for [Android](https://play.google.com/store/apps/details?id=com.atlassian.jira.server) or [iOS](https://apps.apple.com/us/app/id1405353949). 54 | ![Jira mobile](images/jira-dark-revised.png) 55 | -------------------------------------------------------------------------------- /docs/Quick_facts.md: -------------------------------------------------------------------------------- 1 | # Quick Facts 2 | 3 | ## What is Armbian Linux? 4 | 5 | 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's 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. 6 | 7 | ## Challenges 8 | 9 | ### Armbian is the opposite of Raspbian 10 | 11 | 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. 12 | 13 | ### Balancing Development and Support 14 | 15 | Given the point above, resources are thin. Armbian developers have to focus on the core mission of maintaining the [Armbian Build Platform](https://github.com/armbian/build). We heavily rely on other members of the community to support each other. Although Armbian does provide a lot of [user friendly features](https://github.com/armbian/config), 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. 16 | 17 | ### More SBCs continuously coming to market 18 | 19 | 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. 20 | 21 | ## Benefits 22 | 23 | ### Simple 24 | 25 | 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. 26 | 27 | ### Light 28 | 29 | No bloatware or spyware. Special utilities are completely optional. Suitable for newcomers and professionals. 30 | 31 | ### Optimized 32 | 33 | 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. 34 | 35 | ### Fast 36 | 37 | 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. 38 | 39 | ### Secure 40 | 41 | 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. 42 | 43 | ### Supported 44 | 45 | Providing long term updates, security fixes, documentation, user support. 46 | 47 | ### Smart 48 | 49 | 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'. Specialized in ARM development boards since 2013. 50 | 51 | ### Open 52 | 53 | Open source build script and kernel development, maintenance and distribution for more than [30 different ARM and ARM64 Linux kernels](https://www.armbian.com/kernel/). Powerful build and software development tools. Can run in fully parallel mode. Can run under Docker. 54 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | Markdown files for documentation go here 2 | -------------------------------------------------------------------------------- /docs/Release_Board-Maintainers.md: -------------------------------------------------------------------------------- 1 | # Board Maintainers 2 | 3 | ## How to become a maintainer? 4 | 5 | If you are interested in being a maintainer please review [Board Support Rules](/User-Guide_Board-Support-Rules/). Then [apply here](https://forum.armbian.com/staffapplications/application/8-single-board-computer-maintainer/) and wait for acceptance. Once accepted you will be added to our infrastruture. For this reason we need [additional information](https://www.armbian.com/maintainer-registry/) to complete your registration process. 6 | 7 | !!! question "Requirements?" 8 | 9 | - You must have access to the hardware you applied to maintain 10 | - You must have a Github ID which should be listed in the documentation 11 | - You must have a forums account 12 | - You must have an Jira account and keep track of issues filed for your board 13 | - You must make sure [Armbian management](https://www.armbian.com/maintainer-registry/) has been informed of all of the above IDs for our documentation 14 | - You should know Armbian basics like how to get an Armbian image run on your hardware and do basic debugging, ideally via serial console 15 | - Knowledge in development, writing code and so on is optional but welcome 16 | 17 | ## Expectations 18 | 19 | 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. 20 | 21 | 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. 22 | 23 | - You must participate in release process. Ideally you attend meetings related to releases. On that occasion you are given the chance to point out critical issues with your board. 24 | - You must sign-off that device has been tested, is stable, and ready for release during release process. This basically means you test images that are getting prepared for release 25 | 26 | !!! question "What are we looking for?" 27 | 28 | - does the board boot to both CLI and Desktop? 29 | - is the desktop usable? 30 | - does USB work? (at all or partially) 31 | - other things such as wireless, audio 32 | 33 | 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. 34 | 35 | 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. 36 | 37 | Alternatively you can use auto-built images - they are placed at the ever end of each board download pages under "Rolling releases". 38 | 39 | - You must provide "best effort" support in the forum. Do not let that wording intimidate you. This is not a complicated task. Regarding forums this can include things like answering obvious questions (for example by pointing to our documentation, ideally directly to the solution page), let the questioner know that additional information is needed for further debugging (e.g. request "armbianmonitor -u" output) or for upgrade issues, ask if they can recreate the issue with a fresh untouched image from: 40 | 41 | - You must provide "best effort" support in Jira. Review submitted issues for you board made by Armbian's contributors -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Config.md: -------------------------------------------------------------------------------- 1 | # Armbian Config 2 | 3 | ``` mermaid 4 | flowchart LR 5 | A[armbian-config] -----> B["System"]; 6 | A[armbian-config] -----> C["Network"]; 7 | A[armbian-config] -----> D["Localisation"]; 8 | A[armbian-config] -----> E["Software"]; 9 | A[armbian-config] -----> F["Help"]; 10 | ``` 11 | 12 | 13 | 14 | Utility for configuring your board, adjusting services, and installing applications. It comes with Armbian by default. 15 | 16 | To start the Armbian configuration utility, use the following command: 17 | ~~~ 18 | armbian-config 19 | ~~~ 20 | 21 | ## Adding a new feature 22 | 23 | Please check [instructions](/Contribute/Armbian-config/). 24 | 25 | ## Sources 26 | 27 | 28 | 29 | ## Installation on 3rd party Linux OS 30 | 31 | This tool is tailored to works best with Armbian Linux but it has also been automatically tested on: 32 | 33 | - Debian Bookworm 34 | - Ubuntu Jammy 35 | - Ubuntu Noble 36 | 37 | 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, ... 38 | 39 | ~~~ 40 | wget -qO - https://apt.armbian.com/armbian.key | gpg --dearmor | \ 41 | sudo tee /usr/share/keyrings/armbian.gpg > /dev/null 42 | cat << EOF | sudo tee /etc/apt/sources.list.d/armbian-config.sources > /dev/null 43 | Types: deb 44 | URIs: https://github.armbian.com/configng 45 | Suites: stable 46 | Components: main 47 | Signed-By: /usr/share/keyrings/armbian.gpg 48 | EOF 49 | sudo apt update 50 | sudo apt -y install armbian-config 51 | ~~~ 52 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Config/Localisation.md: -------------------------------------------------------------------------------- 1 | --- 2 | comments: true 3 | --- 4 | 5 | # Localisation 6 | 7 | ## Change Global timezone 8 | 9 | 10 | 11 | [![Change Global timezone](/images/LOC001.png)](#) 12 | 13 | 14 | __Edit:__ [footer](https://github.com/armbian/configng/new/main/tools/include/markdown/LOC001-footer.md) [header](https://github.com/armbian/configng/new/main/tools/include/markdown/LOC001-header.md) 15 | __Status:__ Stable 16 | __Architecture:__ x86-64 aarch64 armhf riscv64 17 | __Maintainer:__ @armbian 18 | __Documentation:__ [Link](https://forum.armbian.com/) 19 | 20 | ~~~ custombash 21 | armbian-config --cmd LOC001 22 | ~~~ 23 | 24 | 25 | ~~~ bash title="Change Locales reconfigure the language and character set:" 26 | armbian-config --cmd LOC002 27 | ~~~ 28 | 29 | 30 | ~~~ bash title="Change Keyboard layout:" 31 | armbian-config --cmd LOC003 32 | ~~~ 33 | 34 | 35 | ~~~ bash title="Change System Hostname:" 36 | armbian-config --cmd LOC005 37 | ~~~ 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Software.md: -------------------------------------------------------------------------------- 1 | # Armbian Software 2 | 3 | Lightweight, Secure, and Optimized Services for Embedded Systems 4 | 5 | ## Overview 6 | 7 | **Armbian Software**, accessible via the `armbian-config` utility, empowers you to quickly deploy a variety of **preconfigured applications and advanced services** — 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. 8 | 9 | ## Installation & Maintenance 10 | 11 | Each installation is isolated and designed with **clean setup and teardown** in mind. Key features include: 12 | 13 | - **One-command installs** with sensible defaults 14 | - **No leftover files or dangling containers** after uninstallation 15 | - **Service isolation** via Docker networks and volume mappings 16 | - **Support for both manual and automatic updates**, [including container image refresh](/User-Guide_Armbian-Config/System/#docker-images) 17 | - Daily-tested [CI pipelines](https://github.com/armbian/configng/actions/workflows/unit-tests.yml) ensure that software definitions remain reliable and compatible with the latest system changes 18 | 19 | All configurations are streamlined to work **out of the box**, reducing the need for manual intervention or deep technical know-how. 20 | 21 | ## Security and Management 22 | 23 | Every service runs on a **dedicated Docker network bridge**, isolating app traffic for **enhanced security** and performance. Key management benefits include: 24 | 25 | - Optional automatic restart and image updates 26 | - Native logging integration with `journalctl` or Docker logs 27 | - Clean rollbacks and easy troubleshooting 28 | - Support for encrypted volumes and HTTPS reverse proxies 29 | 30 | These features make the platform suitable for both **prototyping** and **long-term deployments**. However, a few specific services — typically those requiring low-level hardware access or advanced networking features — may still need to run directly on the host network rather than within an isolated Docker bridge. 31 | 32 | ## Hardware Support 33 | 34 | | Architecture | Support Level | Notes | 35 | |--------------|----------------|-------| 36 | | x86_64 | ✅ Full | Ideal for servers, mini PCs | 37 | | arm64 | ✅ Full | Ideal for servers and SBCs | 38 | | armhf | ⚠️ Partial | Limited by upstream container support | 39 | | riscv64 | ⚠️ Partial | Experimental, growing ecosystem | 40 | 41 | Installations may include hardware specific tuning for optimal performance. 42 | 43 | ## Why Use It 44 | 45 | - 🚀 **One-click deployments** of popular, containerized apps 46 | - 🔒 **Curated, tested, and secure** software maintained by the Armbian community 47 | - 🔁 **Clean installs and easy removal** — no system clutter or dependency hell 48 | - 📦 **Optimized for Armbian-supported hardware**, with fine-tuned configurations 49 | - ⚙️ **Minimal overhead**, ideal for embedded, headless, or remote systems 50 | - 🛠️ **Easy maintenance** with integrated update and monitoring tools 51 | - 🌐 **Internet-ready services**, including reverse proxies and network bridges 52 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Software/Armbian.md: -------------------------------------------------------------------------------- 1 | --- 2 | comments: true 3 | --- 4 | 5 | # Armbian infrastructure services 6 | 7 | ## CDN router 8 | 9 | 10 | Router for repository mirror automation 11 | 12 | 13 | 14 | [![CDN router](/images/ART001.png)](#) 15 | 16 | 17 | 18 | 19 | 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's scalable mirror network, seamlessly routing traffic to improve performance and reliability for end users worldwide. 20 | 21 | 22 | 23 | __Edit:__ [footer](https://github.com/armbian/configng/new/main/tools/include/markdown/ART001-footer.md) [header](https://github.com/armbian/configng/edit/main/tools/include/markdown/ART001-header.md) 24 | __Status:__ Stable 25 | __Architecture:__ x86-64 aarch64 armhf riscv64 26 | __Maintainer:__ @armbian 27 | __Documentation:__ [Link](https://forum.armbian.com/) 28 | 29 | ~~~ custombash 30 | armbian-config --cmd ART001 31 | ~~~ 32 | 33 | 34 | ~~~ bash title="Remove CDN router:" 35 | armbian-config --cmd ART002 36 | ~~~ 37 | 38 | 39 | 40 | ## GH runners 41 | 42 | 43 | GitHub runners for Armbian automation 44 | 45 | 46 | 47 | [![GH runners](/images/GHR001.png)](#) 48 | 49 | 50 | 51 | 52 | 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. 53 | 54 | 55 | 56 | __Edit:__ [footer](https://github.com/armbian/configng/edit/main/tools/include/markdown/GHR001-footer.md) [header](https://github.com/armbian/configng/edit/main/tools/include/markdown/GHR001-header.md) 57 | __Status:__ Stable 58 | __Architecture:__ x86-64 aarch64 armhf riscv64 59 | __Maintainer:__ @armbian 60 | __Documentation:__ [Link](https://forum.armbian.com/) 61 | 62 | ~~~ custombash 63 | armbian-config --cmd GHR001 64 | ~~~ 65 | 66 | 67 | 68 | === "Supported Commands" 69 | 70 | - **`install`** 71 | Installs one or more GitHub runners using the provided configuration or interactively prompted values. 72 | 73 | - **`purge` / `remove`** 74 | Removes runners based on the provided runner name series and target organization or repository. 75 | 76 | - **`status`** 77 | Quietly checks if any `actions.runner` services are currently running on the system. 78 | 79 | === "Available Switches" 80 | 81 | | Switch | Description | 82 | |--------------------|-----------------------------------------------------------------------------| 83 | | `gh_token` | GitHub token with admin rights to manage self-hosted runners. | 84 | | `runner_name` | Name prefix for the runner series (default: `armbian`). | 85 | | `start` | Start index of the runner series (e.g., `01`). | 86 | | `stop` | End index of the runner series (e.g., `05`). | 87 | | `label_primary` | Labels for the first runner (default: `alfa`). | 88 | | `label_secondary` | Labels for additional runners (default: `fast,images`). | 89 | | `organisation` | GitHub organization name (default: `armbian`). | 90 | | `owner` | GitHub user or organization owner (used for repo-level runners). | 91 | | `repository` | GitHub repository name (used for repo-level runners). | 92 | 93 | === "Behavior" 94 | 95 | - Prompts the user for missing switches via `dialog` **only in interactive mode**. 96 | - Supports bulk installation of runners using sequential numbering (`start` to `stop`). 97 | - Calls internal `actions.runner.install` and `actions.runner.remove` helpers. 98 | - Returns `0` if any runner services are active, `1` otherwise (for scripting use). 99 | - Suppresses errors and outputs when checking status to remain quiet in background use. 100 | 101 | 102 | 103 | 104 | ~~~ bash title="Remove GitHub runners for Armbian automation:" 105 | armbian-config --cmd GHR002 106 | ~~~ 107 | 108 | 109 | 110 | ## Rsyncd server 111 | 112 | 113 | 114 | [![Rsyncd server](/images/RSD001.png)](#) 115 | 116 | 117 | __Edit:__ [footer](https://github.com/armbian/configng/new/main/tools/include/markdown/RSD001-footer.md) [header](https://github.com/armbian/configng/new/main/tools/include/markdown/RSD001-header.md) 118 | __Status:__ Stable 119 | __Architecture:__ x86-64 aarch64 armhf riscv64 120 | __Maintainer:__ @armbian 121 | __Documentation:__ [Link](https://forum.armbian.com/) 122 | 123 | ~~~ custombash 124 | armbian-config --cmd RSD001 125 | ~~~ 126 | 127 | 128 | ~~~ bash title="Remove Armbian rsyncd server:" 129 | armbian-config --cmd RSD002 130 | ~~~ 131 | 132 | 133 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Software/Backup.md: -------------------------------------------------------------------------------- 1 | --- 2 | comments: true 3 | --- 4 | 5 | # Backup solutions for your data 6 | 7 | ## Duplicati 8 | 9 | 10 | Duplicati install 11 | 12 | 13 | 14 | [![Duplicati](/images/DPL001.png)](#) 15 | 16 | 17 | 18 | 19 | Duplicati is a versatile and secure backup tool designed for everyone, including: 20 | 21 | - Users new to backup systems who need a simple and reliable solution. 22 | - Experienced users who want full control over encrypted backups and storage destinations. 23 | - System administrators who require automated, encrypted backups across multiple platforms. 24 | 25 | 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). 26 | Through its web-based interface, users can easily configure, monitor, and restore backups from any browser. 27 | 28 | Thanks to Duplicati’s smart design — working through standard protocols and containerized deployment — it fits seamlessly into any environment, from personal setups to enterprise infrastructures. 29 | 30 | 31 | 32 | __Edit:__ [footer](https://github.com/armbian/configng/edit/main/tools/include/markdown/DPL001-footer.md) [header](https://github.com/armbian/configng/edit/main/tools/include/markdown/DPL001-header.md) 33 | __Status:__ Stable 34 | __Architecture:__ x86-64 arm64 35 | __Maintainer:__ @igorpecovnik 36 | __Documentation:__ [Link](https://prev-docs.duplicati.com/en/latest/) 37 | 38 | ~~~ custombash 39 | armbian-config --cmd DPL001 40 | ~~~ 41 | 42 | 43 | 44 | === "Access to the web interface" 45 | 46 | The web interface is accessible via port **8200**: 47 | 48 | - URL: `http://:8200` 49 | 50 | === "Directories" 51 | 52 | - Install directory: `/armbian/duplicati` 53 | - Configuration directory: `/armbian/duplicati/config` 54 | - Backup target directory: `/armbian/duplicati/backups` 55 | 56 | === "View logs" 57 | 58 | ```sh 59 | docker logs -f duplicati 60 | ``` 61 | 62 | 63 | 64 | 65 | ~~~ bash title="Duplicati remove:" 66 | armbian-config --cmd DPL002 67 | ~~~ 68 | 69 | 70 | ~~~ bash title="Duplicati purge with data folder:" 71 | armbian-config --cmd DPL003 72 | ~~~ 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Software/Containers.md: -------------------------------------------------------------------------------- 1 | --- 2 | comments: true 3 | --- 4 | 5 | # Docker containerization and KVM virtual machines 6 | 7 | ## Docker 8 | 9 | 10 | Docker minimal 11 | 12 | 13 | 14 | [![Docker](/images/CON001.png)](#) 15 | 16 | 17 | __Edit:__ [footer](https://github.com/armbian/configng/edit/main/tools/include/markdown/CON001-footer.md) [header](https://github.com/armbian/configng/new/main/tools/include/markdown/CON001-header.md) 18 | __Status:__ Stable 19 | __Architecture:__ x86-64 arm64 armhf 20 | __Maintainer:__ @igorpecovnik 21 | __Documentation:__ [Link](https://wiki.bazarr.media/) 22 | 23 | ~~~ custombash 24 | armbian-config --cmd CON001 25 | ~~~ 26 | 27 | 28 | 29 | What is Docker? Docker helps developers build, share, run, and verify applications anywhere - without tedious environment configuration or management. 30 | 31 | 32 | 33 | 34 | ~~~ bash title="Docker engine:" 35 | armbian-config --cmd CON002 36 | ~~~ 37 | 38 | 39 | ~~~ bash title="Docker remove:" 40 | armbian-config --cmd CON003 41 | ~~~ 42 | 43 | 44 | ~~~ bash title="Docker purge with all images, containers, and volumes:" 45 | armbian-config --cmd CON004 46 | ~~~ 47 | 48 | 49 | 50 | 51 | 52 | ## Portainer 53 | 54 | 55 | Portainer container management platform 56 | 57 | 58 | 59 | [![Portainer](/images/POR001.png)](#) 60 | 61 | 62 | 63 | 64 | Portainer simplifies your Docker container management via Portainer web interface. It enables faster deploy of the applications and it gives real time visibility. 65 | 66 | 67 | 68 | __Edit:__ [footer](https://github.com/armbian/configng/edit/main/tools/include/markdown/POR001-footer.md) [header](https://github.com/armbian/configng/edit/main/tools/include/markdown/POR001-header.md) 69 | __Status:__ Stable 70 | __Architecture:__ x86-64 arm64 armhf 71 | __Maintainer:__ @schwar3kat 72 | __Documentation:__ [Link](https://docs.portainer.io/) 73 | 74 | ~~~ custombash 75 | armbian-config --cmd POR001 76 | ~~~ 77 | 78 | 79 | 80 | === "Access to the web interface" 81 | 82 | The web interface is accessible via port **9002**: 83 | 84 | - URL = `http://:9002` 85 | 86 | 87 | 88 | 89 | ~~~ bash title="Portainer remove:" 90 | armbian-config --cmd POR002 91 | ~~~ 92 | 93 | 94 | ~~~ bash title="Portainer purge with with data folder:" 95 | armbian-config --cmd POR003 96 | ~~~ 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Software/Desktops.md: -------------------------------------------------------------------------------- 1 | # Desktop Environments 2 | 3 | 4 | *** 5 | 6 | ## XFCE desktop 7 | 8 | 9 | *** 10 | 11 | ### XFCE desktop Install 12 | 13 | 14 | [![XFCE desktop Install](/images/XFCE01.png)](#) 15 | 16 | 17 | 18 | 19 | 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. 20 | 21 | 22 | 23 | Install XFCE: 24 | 25 | 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. 26 | 27 | **Command:** 28 | ~~~ 29 | armbian-config --cmd XFCE01 30 | ~~~ 31 | 32 | **Author:** @igorpecovnik 33 | 34 | **Status:** Stable 35 | 36 | 37 | 38 | *** 39 | 40 | ### Uninstall 41 | **Command:** 42 | ~~~ 43 | armbian-config --cmd XFCE02 44 | ~~~ 45 | 46 | **Author:** @igorpecovnik 47 | 48 | **Status:** Stable 49 | 50 | 51 | 52 | *** 53 | 54 | ### Enable autologin 55 | **Command:** 56 | ~~~ 57 | armbian-config --cmd XFCE03 58 | ~~~ 59 | 60 | **Author:** @igorpecovnik 61 | 62 | **Status:** Stable 63 | 64 | 65 | 66 | *** 67 | 68 | ### Disable autologin 69 | **Command:** 70 | ~~~ 71 | armbian-config --cmd XFCE04 72 | ~~~ 73 | 74 | **Author:** @igorpecovnik 75 | 76 | **Status:** Stable 77 | 78 | 79 | 80 | *** 81 | 82 | ## Gnome desktop 83 | 84 | 85 | *** 86 | 87 | ### Gnome desktop Install 88 | 89 | 90 | [![Gnome desktop Install](/images/GNOME01.png)](#) 91 | 92 | 93 | 94 | 95 | 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. 96 | 97 | 98 | 99 | **Command:** 100 | ~~~ 101 | armbian-config --cmd GNOME01 102 | ~~~ 103 | 104 | **Author:** @igorpecovnik 105 | 106 | **Status:** Stable 107 | 108 | 109 | 110 | *** 111 | 112 | ### Uninstall 113 | **Command:** 114 | ~~~ 115 | armbian-config --cmd GNOME02 116 | ~~~ 117 | 118 | **Author:** @igorpecovnik 119 | 120 | **Status:** Stable 121 | 122 | 123 | 124 | *** 125 | 126 | ### Enable autologin 127 | **Command:** 128 | ~~~ 129 | armbian-config --cmd GNOME03 130 | ~~~ 131 | 132 | **Author:** @igorpecovnik 133 | 134 | **Status:** Stable 135 | 136 | 137 | 138 | *** 139 | 140 | ### Disable autologin 141 | **Command:** 142 | ~~~ 143 | armbian-config --cmd GNOME04 144 | ~~~ 145 | 146 | **Author:** @igorpecovnik 147 | 148 | **Status:** Stable 149 | 150 | 151 | 152 | *** 153 | 154 | ## Improve application search speed 155 | **Command:** 156 | ~~~ 157 | armbian-config --cmd Xapian 158 | ~~~ 159 | 160 | **Author:** @igorpecovnik 161 | 162 | **Status:** Stable 163 | 164 | 165 | 166 | *** 167 | 168 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Software/DevTools.md: -------------------------------------------------------------------------------- 1 | --- 2 | comments: true 3 | --- 4 | 5 | # Applications and tools for development 6 | 7 | ## Git CLI 8 | 9 | 10 | Install tools for cloning and managing repositories (git) 11 | 12 | __Edit:__ [footer](https://github.com/armbian/configng/new/main/tools/include/markdown/GIT001-footer.md) [header](https://github.com/armbian/configng/new/main/tools/include/markdown/GIT001-header.md) 13 | __Status:__ Stable 14 | __Architecture:__ x86-64 aarch64 armhf riscv64 15 | __Maintainer:__ @armbian 16 | __Documentation:__ [Link](https://forum.armbian.com/) 17 | 18 | ~~~ custombash 19 | armbian-config --cmd GIT001 20 | ~~~ 21 | 22 | 23 | ~~~ bash title="Remove tools for cloning and managing repositories (git):" 24 | armbian-config --cmd GIT002 25 | ~~~ 26 | 27 | 28 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Software/Finance.md: -------------------------------------------------------------------------------- 1 | --- 2 | comments: true 3 | --- 4 | 5 | # Manage your finances 6 | 7 | ## Actual Budget 8 | 9 | 10 | Do your finances with Actual Budget 11 | 12 | 13 | 14 | [![Actual Budget](/images/ABU001.png)](#) 15 | 16 | 17 | 18 | 19 | [Actual Budget](https://actualbudget.org/) is a **free, open-source personal finance app** built around the **envelope budgeting method**. 20 | 21 | - **Privacy-focused**: Users can self-host their data or use encrypted cloud syncing. 22 | - **Key Features**: 23 | - Multi-account tracking 24 | - Transaction importing 25 | - Customizable financial reports 26 | - Optional syncing via services like PikaPods 27 | - **Ideal for**: Those who want a **transparent**, **self-hosted** alternative to proprietary budgeting tools. 28 | 29 | 30 | 31 | __Edit:__ [footer](https://github.com/armbian/configng/edit/main/tools/include/markdown/ABU001-footer.md) [header](https://github.com/armbian/configng/edit/main/tools/include/markdown/ABU001-header.md) 32 | __Status:__ Stable 33 | __Maintainer:__ @igorpecovnik 34 | __Documentation:__ [Link](https://actualbudget.org/docs) 35 | 36 | ~~~ custombash 37 | armbian-config --cmd ABU001 38 | ~~~ 39 | 40 | 41 | 42 | !!! danger "Warning: HTTPS Certificate Required" 43 | 44 | After initially installing the Actual server, you might get stuck at the step: 45 | **"Initializing the connection to the local database..."** 46 | 47 | The issue is due to the server not having an **HTTPS certificate**. 48 | After activating an HTTPS certificate for the Actual server, everything should work fine. 49 | 50 | If you still encounter issues even after setting up HTTPS, we highly recommend reaching out to the [Actual Budget Discord server](https://discord.gg/actualbudget) — the developers and community there are very kind and helpful. 51 | 52 | 53 | 54 | 55 | 56 | ~~~ bash title="Actual Budget remove:" 57 | armbian-config --cmd ABU002 58 | ~~~ 59 | 60 | 61 | ~~~ bash title="Actual Budget purge with data folder:" 62 | armbian-config --cmd ABU003 63 | ~~~ 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Software/Music.md: -------------------------------------------------------------------------------- 1 | --- 2 | comments: true 3 | --- 4 | 5 | # Music servers and streamers 6 | 7 | ## Navidrome 8 | 9 | 10 | Navidrome music server and streamer compatible with Subsonic/Airsonic 11 | 12 | 13 | 14 | [![Navidrome](/images/NAV001.png)](#) 15 | 16 | 17 | 18 | 19 | Navidrome is a modern, lightweight, and self-hosted music server and streamer. It's 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—perfect for organizing and accessing large music libraries. 20 | 21 | 22 | 23 | __Edit:__ [footer](https://github.com/armbian/configng/new/main/tools/include/markdown/NAV001-footer.md) [header](https://github.com/armbian/configng/edit/main/tools/include/markdown/NAV001-header.md) 24 | __Status:__ Stable 25 | __Architecture:__ x86-64 arm64 26 | __Maintainer:__ @igorpecovnik 27 | __Documentation:__ [Link](https://github.com/pynavidrome/navidrome/wiki) 28 | 29 | ~~~ custombash 30 | armbian-config --cmd NAV001 31 | ~~~ 32 | 33 | 34 | ~~~ bash title="Navidrome remove:" 35 | armbian-config --cmd NAV002 36 | ~~~ 37 | 38 | 39 | ~~~ bash title="Navidrome purge with data folder:" 40 | armbian-config --cmd NAV003 41 | ~~~ 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Software/Netconfig.md: -------------------------------------------------------------------------------- 1 | --- 2 | comments: true 3 | --- 4 | 5 | # Console network tools for measuring load and bandwidth 6 | 7 | ## nload 8 | 9 | 10 | nload - realtime console network usage monitor 11 | 12 | __Edit:__ [footer](https://github.com/armbian/configng/new/main/tools/include/markdown/NLD001-footer.md) [header](https://github.com/armbian/configng/new/main/tools/include/markdown/NLD001-header.md) 13 | __Status:__ Stable 14 | __Architecture:__ x86-64 arm64 15 | __Maintainer:__ @igorpecovnik 16 | __Documentation:__ [Link](https://netbox.readthedocs.io/en/stable/) 17 | 18 | ~~~ custombash 19 | armbian-config --cmd NLD001 20 | ~~~ 21 | 22 | 23 | ~~~ bash title="nload - remove:" 24 | armbian-config --cmd NLD002 25 | ~~~ 26 | 27 | 28 | 29 | ## iperf3 30 | 31 | 32 | iperf3 bandwidth measuring tool 33 | 34 | __Edit:__ [footer](https://github.com/armbian/configng/new/main/tools/include/markdown/IPR001-footer.md) [header](https://github.com/armbian/configng/new/main/tools/include/markdown/IPR001-header.md) 35 | __Status:__ Stable 36 | __Architecture:__ x86-64 arm64 37 | __Maintainer:__ @igorpecovnik 38 | __Documentation:__ [Link](https://netbox.readthedocs.io/en/stable/) 39 | 40 | ~~~ custombash 41 | armbian-config --cmd IPR001 42 | ~~~ 43 | 44 | 45 | ~~~ bash title="iperf3 remove:" 46 | armbian-config --cmd IPR002 47 | ~~~ 48 | 49 | 50 | 51 | ## iptraf-ng 52 | 53 | 54 | iptraf-ng IP LAN monitor 55 | 56 | __Edit:__ [footer](https://github.com/armbian/configng/new/main/tools/include/markdown/IPT001-footer.md) [header](https://github.com/armbian/configng/new/main/tools/include/markdown/IPT001-header.md) 57 | __Status:__ Stable 58 | __Architecture:__ x86-64 arm64 59 | __Maintainer:__ @igorpecovnik 60 | __Documentation:__ [Link](https://netbox.readthedocs.io/en/stable/) 61 | 62 | ~~~ custombash 63 | armbian-config --cmd IPT001 64 | ~~~ 65 | 66 | 67 | ~~~ bash title="iptraf-ng remove:" 68 | armbian-config --cmd IPT002 69 | ~~~ 70 | 71 | 72 | 73 | ## avahi-daemon 74 | 75 | 76 | avahi-daemon hostname broadcast via mDNS 77 | 78 | __Edit:__ [footer](https://github.com/armbian/configng/new/main/tools/include/markdown/AVH001-footer.md) [header](https://github.com/armbian/configng/new/main/tools/include/markdown/AVH001-header.md) 79 | __Status:__ Stable 80 | __Architecture:__ x86-64 arm64 81 | __Maintainer:__ @igorpecovnik 82 | __Documentation:__ [Link](https://netbox.readthedocs.io/en/stable/) 83 | 84 | ~~~ custombash 85 | armbian-config --cmd AVH001 86 | ~~~ 87 | 88 | 89 | ~~~ bash title="avahi-daemon remove:" 90 | armbian-config --cmd AVH002 91 | ~~~ 92 | 93 | 94 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Software/Printing.md: -------------------------------------------------------------------------------- 1 | --- 2 | comments: true 3 | --- 4 | 5 | # Tools for printing and 3D printing 6 | 7 | ## OctoPrint 8 | 9 | 10 | OctoPrint web-based 3D printers management tool 11 | 12 | 13 | 14 | [![OctoPrint](/images/OCT001.png)](#) 15 | 16 | 17 | 18 | 19 | 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. 20 | 21 | 22 | __Edit:__ [footer](https://github.com/armbian/configng/edit/main/tools/include/markdown/OCT001-footer.md) [header](https://github.com/armbian/configng/edit/main/tools/include/markdown/OCT001-header.md) 23 | __Status:__ Stable 24 | __Architecture:__ x86-64 arm64 25 | __Maintainer:__ @igorpecovnik 26 | __Documentation:__ [Link](https://transmissionbt.com/) 27 | 28 | ~~~ custombash 29 | armbian-config --cmd OCT001 30 | ~~~ 31 | 32 | 33 | 34 | === "Access to the web interface" 35 | 36 | The web interface is accessible via port **7981**: 37 | 38 | - URL: `https://:7981` 39 | 40 | === "Directories" 41 | 42 | - Install directory: `/armbian/octoprint` 43 | 44 | === "View logs" 45 | 46 | ```sh 47 | docker logs -f octoprint 48 | ``` 49 | 50 | 51 | 52 | 53 | ~~~ bash title="OctoPrint remove:" 54 | armbian-config --cmd OCT002 55 | ~~~ 56 | 57 | 58 | ~~~ bash title="OctoPrint purge with data folder:" 59 | armbian-config --cmd OCT003 60 | ~~~ 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Software/VPN.md: -------------------------------------------------------------------------------- 1 | --- 2 | comments: true 3 | --- 4 | 5 | # Virtual Private Network tools 6 | 7 | ## WireGuard 8 | 9 | 10 | WireGuard VPN client / server 11 | 12 | 13 | 14 | [![WireGuard](/images/WRG001.png)](#) 15 | 16 | 17 | 18 | 19 | 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. 20 | 21 | 22 | __Edit:__ [footer](https://github.com/armbian/configng/edit/main/tools/include/markdown/WRG001-footer.md) [header](https://github.com/armbian/configng/edit/main/tools/include/markdown/WRG001-header.md) 23 | __Status:__ Enabled 24 | __Architecture:__ x86-64 arm64 25 | __Maintainer:__ @igorpecovnik 26 | __Documentation:__ [Link](https://docs.linuxserver.io/images/docker-wireguard/#server-mode) 27 | 28 | ~~~ custombash 29 | armbian-config --cmd WRG001 30 | ~~~ 31 | 32 | 33 | 34 | === "Access to the server from internet" 35 | 36 | Remember to open/forward the port 51820 (UDP) through NAT on your router. 37 | 38 | === "Directories" 39 | 40 | - Install directory: `/armbian/wireguard` 41 | - Site configuration directory: `/armbian/wireguard/config` 42 | 43 | === "View logs" 44 | 45 | ```sh 46 | docker logs -f wireguard 47 | ``` 48 | 49 | # Install server and enable private network on a client 50 | 51 | 1. Install Wireguard server 52 | 2. It will asks you for peer keywords. It will make a profile for each peer 53 | 3. Download client to your PC, server or mobile phone. Scan OR code or copy credentials to the client. 54 | 55 | Enjoy private network! Its that easy. 56 | 57 | More informations: 58 | 59 | 60 | 61 | 62 | 63 | ~~~ bash title="WireGuard remove:" 64 | armbian-config --cmd WRG002 65 | ~~~ 66 | 67 | 68 | ~~~ bash title="WireGuard clients QR codes:" 69 | armbian-config --cmd WRG003 70 | ~~~ 71 | 72 | 73 | ~~~ bash title="WireGuard purge with data folder:" 74 | armbian-config --cmd WRG004 75 | ~~~ 76 | 77 | 78 | 79 | 80 | 81 | ## ZeroTier 82 | 83 | 84 | ZeroTier connect devices over your own private network in the world. 85 | 86 | 87 | 88 | [![ZeroTier](/images/ZTR001.png)](#) 89 | 90 | 91 | __Edit:__ [footer](https://github.com/armbian/configng/new/main/tools/include/markdown/ZTR001-footer.md) [header](https://github.com/armbian/configng/new/main/tools/include/markdown/ZTR001-header.md) 92 | __Status:__ Stable 93 | 94 | ~~~ custombash 95 | armbian-config --cmd ZTR001 96 | ~~~ 97 | 98 | -------------------------------------------------------------------------------- /docs/User-Guide_Armbian-Software/WebHosting.md: -------------------------------------------------------------------------------- 1 | --- 2 | comments: true 3 | --- 4 | 5 | # Web server, LEMP, reverse proxy, Let's Encrypt SSL 6 | 7 | ## SWAG 8 | 9 | 10 | SWAG reverse proxy 11 | 12 | 13 | 14 | [![SWAG](/images/SWAG01.png)](#) 15 | 16 | 17 | 18 | 19 | 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's Encrypt). It also contains fail2ban for intrusion prevention. 20 | 21 | 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](https://www.netdata.cloud/) instance. 22 | 23 | === "Requirements" 24 | 25 | - this computer port 80 and 443 must be open to the internet 26 | - your domain name (myserver.mydomain.com) DNS server should point to your router WAN address 27 | - make sure to set additional .htpasswd username and password as you don't want to expose your services without password 28 | 29 | === "Directories" 30 | 31 | - Config directory: `/armbian/swag/config/` 32 | - Website root folder: `/armbian/swag/config/www/` 33 | - Reverse proxy configuration samples: `/armbian/swag/config/nginx/proxy-confs/` 34 | 35 | === "Advanced setup" 36 | 37 | - Please follow this comprehensive guide: 38 | 39 | 40 | 41 | __Edit:__ [footer](https://github.com/armbian/configng/new/main/tools/include/markdown/SWAG01-footer.md) [header](https://github.com/armbian/configng/edit/main/tools/include/markdown/SWAG01-header.md) 42 | __Status:__ Stable 43 | __Architecture:__ x86-64 arm64 44 | __Maintainer:__ @igorpecovnik 45 | __Documentation:__ [Link](https://github.com/linuxserver/docker-swag) 46 | 47 | ~~~ custombash 48 | armbian-config --cmd SWAG01 49 | ~~~ 50 | 51 | 52 | ~~~ bash title="SWAG reverse proxy .htpasswd set:" 53 | armbian-config --cmd SWAG02 54 | ~~~ 55 | 56 | 57 | ~~~ bash title="SWAG remove:" 58 | armbian-config --cmd SWAG03 59 | ~~~ 60 | 61 | 62 | ~~~ bash title="SWAG purge with data folder:" 63 | armbian-config --cmd SWAG04 64 | ~~~ 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /docs/User-Guide_Autoconfig.md: -------------------------------------------------------------------------------- 1 | # Automatic first boot configuration 2 | 3 | ## Reading presets from local config 4 | 5 | It is possible to configure your device automatically at first boot. Settings like: root password, IP address, connecting to wireless. 6 | 7 | After flashing an image to boot media, mount it and add a file containing your config to `/root/.not_logged_in_yet` 8 | 9 | ???+ tip 10 | You may also mount the image and edit it prior to flashing, if this is preferable. 11 | 12 | ## Loading a remote config 13 | 14 | It is also possible to load this config file from a remote server, as above, however the **only** directive you should include is: 15 | 16 | ```bash title="/root/.not_logged_in_yet" 17 | PRESET_CONFIGURATION="http://path/to/config/file" 18 | ``` 19 | 20 | ## Configuration directives 21 | 22 | - The directives in this file are specified using `key="value"` format. 23 | - To ask for a value interactively, leave it unset or comment out the directive. 24 | - For fully-unattended setup, specify all values. 25 | 26 | !!! caution 27 | No validation of this network config is performed, wrong settings will lead to broken network. 28 | Armbian supports [netplan.io](https://netplan.io), this is the preferred config method. 29 | See [netplan guides](https://netplan.readthedocs.io/en/stable/examples/) for various example configurations. 30 | Netplan config is stored in `/etc/netplan/`. 31 | 32 | | Configuration directive | `[default]` \| `option` | Description: | 33 | | :---------------------- | :-------------- | :----------- | 34 | | `PRESET_CONFIGURATION` | `http://path/to/config/file` | See [Loading a remote config](#loading-a-remote-config) | 35 | | `PRESET_NET_CHANGE_DEFAULTS` | `[0]` \| `1` | Change default network settings
if unset, **no network changes will be applied** | 36 | | `PRESET_NET_ETHERNET_ENABLED` | `0` \| `1` | Enable Ethernet, ignored if WiFi enabled | 37 | | `PRESET_NET_WIFI_ENABLED` | `0` \| `1` | Enable WiFi, **takes priority over Ethernet** | 38 | | `PRESET_NET_WIFI_SSID` | `MySSID` | WiFi SSID | 39 | | `PRESET_NET_WIFI_KEY` | `MyWPA-PSK` | WiFi Pre-Shared Key (Password), **stored in plaintext** | 40 | | `PRESET_NET_WIFI_COUNTRYCODE` | `CC` | Country code, **required** for WiFi
e.g. `GB`, `US`, `DE`; see [Wikipedia/ISO_3166](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) | 41 | | `PRESET_CONNECT_WIRELESS` | `Y` \| `n` | Set to `Y` for interactive mode, `n` uses values from file | 42 | | `PRESET_NET_USE_STATIC` | `[0]` \| `1` | Use the static IP provided, DHCP is the default
Leaving **any** value unset will result in a broken config | 43 | | `PRESET_NET_STATIC_IP` | `xxx.xxx.xxx.xxx` | Static IPv4 address, dotted decimal notation | 44 | | `PRESET_NET_STATIC_MASK` | `xxx.xxx.xxx.xxx` | Subnet mask, typically `255.255.255.0` | 45 | | `PRESET_NET_STATIC_GATEWAY` | `xxx.xxx.xxx.xxx` | Default gateway address | 46 | | `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.1`
Google is `8.8.8.8 8.8.4.4` | 47 | | `SET_LANG_BASED_ON_LOCATION` | `Y` \| `n` | "Set user language based on your location?" | 48 | | `PRESET_LOCALE` | `locale` | Locale e.g. `en_GB.UTF-8`, `de_DE.UTF-8`, `zh_TW.UTF-8` | 49 | | `PRESET_TIMEZONE` | `timezone` | Timezone e.g. `Etc/UTC`, | 50 | | `PRESET_ROOT_PASSWORD` | `[1234]` \| `password` | Preset `root` password
**Stored in plaintext**, *SSH keys are safer!* | 51 | | `PRESET_ROOT_KEY` | `https://path/to/key.file` | Fetches public key from specified URL for `root` user | 52 | | `PRESET_USER_NAME` | `username` | Username to create | 53 | | `PRESET_USER_PASSWORD` | `password` | Preset created user password
**Stored in plaintext**, *SSH keys are safer!* | 54 | | `PRESET_USER_KEY` | `https://path/to/key.file` | Fetches public key from specified URL for created user | 55 | | `PRESET_DEFAULT_REALNAME` | `Real Name` | RealName to use for created user | 56 | | `PRESET_USER_SHELL` | `shell` | Currently only `bash` (default) or `zsh` (`armbian-zsh`) supported | 57 | 58 | ## Sample config file 59 | 60 | The following is an example configuration, it may be used as a template 61 | 62 | ```bash title="/root/.not_logged_in_yet" 63 | #/root/.not_logged_in_yet 64 | # Network Settings 65 | PRESET_NET_CHANGE_DEFAULTS="1" 66 | ## Ethernet 67 | PRESET_NET_ETHERNET_ENABLED="1" # Ignored due to WiFi 68 | ## WiFi 69 | PRESET_NET_WIFI_ENABLED="1" 70 | PRESET_NET_WIFI_SSID="MySSID" 71 | PRESET_NET_WIFI_KEY="MyWiFiKEY" 72 | PRESET_NET_WIFI_COUNTRYCODE="GB" 73 | PRESET_CONNECT_WIRELESS="n" 74 | ## Static IP 75 | PRESET_NET_USE_STATIC="1" 76 | PRESET_NET_STATIC_IP="192.168.0.100" 77 | PRESET_NET_STATIC_MASK="255.255.255.0" 78 | PRESET_NET_STATIC_GATEWAY="192.168.0.1" 79 | PRESET_NET_STATIC_DNS="8.8.8.8 8.8.4.4" 80 | 81 | # System 82 | SET_LANG_BASED_ON_LOCATION="y" 83 | PRESET_LOCALE="en_US.UTF-8" 84 | PRESET_TIMEZONE="Etc/UTC" 85 | 86 | # Root 87 | PRESET_ROOT_PASSWORD="RootPassword" 88 | PRESET_ROOT_KEY="" 89 | 90 | # User 91 | PRESET_USER_NAME="armbian" 92 | PRESET_USER_PASSWORD="UserPassword" 93 | PRESET_USER_KEY="" 94 | PRESET_DEFAULT_REALNAME="Armbian user" 95 | PRESET_USER_SHELL="bash" 96 | ``` 97 | 98 | ???+ tip 99 | 100 | If you want to use first run automatic configuration at build time, [check this GitHub pull request](https://github.com/armbian/build/pull/6194). 101 | 102 | tl;dr; 103 | 104 | 1. Copy the template with `cp extensions/preset-firstrun.sh userpatches/extensions/` 105 | 2. Edit the template `userpatches/extensions/preset-firstrun.sh` according to your situation 106 | 3. Build your Armbian image using the additional parameter `ENABLE_EXTENSIONS=preset-firstrun` 107 | -------------------------------------------------------------------------------- /docs/User-Guide_Board-Support-Rules.md: -------------------------------------------------------------------------------- 1 | --- 2 | comments: true 3 | --- 4 | # Board support Rules 5 | 6 | ## Overview 7 | 8 | Support definitions, criteria and relationships for: 9 | 10 | - [Platinum Support](#platinum-support) 11 | - [Standard support](#standard-support) 12 | - [Community maintained](#community-maintained) 13 | - [Staging](#) 14 | 15 | ## Platinum Support 16 | 17 | Platinum support is reserved for business relationships with the Armbian project and is out of the scope of this document. 18 | 19 | ### Contact us 20 | 21 | Please [contact Armbian](https://www.armbian.com/contact/) management for more information. 22 | 23 | ## Standard Support 24 | 25 | ### Benefits 26 | 27 | * Armbian will publish and distribute "stable" images through its [mirror network](https://github.com/armbian/mirror) (behind automated closest mirror selection) 28 | * Armbian will publish and distribute "rolling" [images](https://github.com/armbian/os/releases/latest) (on GitHub and individual download page) 29 | * best-effort support to SBC maintainer to assure compatibility within the [Armbian Build Framework](https://github.com/armbian/build) 30 | * best-effort team's unique expertise to assist maintainer with general challenges 31 | * best-effort [automated testing](https://github.com/armbian/os#latest-smoke-tests-results) for basic hardware functionality 32 | * best-effort compensation will be provided to maintainer from the "Armbian Community Fund" [[1]](https://github.com/sponsors/armbian) [[2]](https://liberapay.com/armbian) [[3]](https://forum.armbian.com/crowdfunding/) 33 | 34 | ### Requirements 35 | 36 | For a SBC to be considered supported: 37 | 38 | * must be beneficial to the Armbian project 39 | * Armbian team must confirm and agree upon all supported boards statuses 40 | * a named individual as "*maintainer*" with GitHub ID must be preset in the BOARD_MAINTAINER within [Board Configuration File](https://github.com/armbian/build/tree/main/config/boards) 41 | * a named individual must commit to providing "*best effort*" support for their SBC on the Armbian forums 42 | * maintainer must participate in the [Release Process](https://docs.armbian.com/Process_Release-Model/#release-coordinating) 43 | * maintainer must sign-off that device has been tested, is stable, and ready for release during release process 44 | * maintainer must have physical access to the SBC they are supporting 45 | * maintainer can operate under pseudonym but must [reveal his identity](https://www.armbian.com/update-data/) to Armbian management 46 | * maintainer should attend [developers meetings](https://forum.armbian.com/events/) held every Wednesday 7:00 PM CET 47 | * when whole support burden is carried by maintainer and Armbian team, it will be labelled as "Pro bono" 48 | 49 | ???+ Info "Additional Caveats" 50 | 51 | * if the burden placed on the maintainer and Armbian team is too high, [crowdfunding campaign](https://forum.armbian.com/crowdfunding/) success will decide support 52 | * supported is **not** applied to a "board family" or group of related SBCs. It is per board 53 | * a maintainer can support multiple devices but must satisfy all requirements above per SBC 54 | * any individual can be a maintainer for a standard support SBC 55 | * missed major release will result in immediate forfeit of "Armbian Standard support" status and demotion to "Community maintained" status unless Armbian team grants exemption 56 | 57 | ## Community maintained 58 | 59 | 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. 60 | 61 | Community maintained SBCs are exclusively supported by the community. 62 | 63 | ### Benefits 64 | 65 | * Armbian will publish and distribute images through its [mirror network](https://github.com/armbian/mirror) 66 | * Armbian will publish and distribute daily rolling [images](https://github.com/armbian/os/releases/latest) 67 | * periodic packages are built and published into Armbian's apt repository 68 | * images are untested and Armbian team won't respond on troubles or apply any fixes. 69 | 70 | ### Requirements 71 | 72 | * patch or component does not break Armbian Build Framework 73 | * patch or component does not break build of supported boards or other CSCs 74 | * pull requests needs community review. Armbian team will not review any code related to community supported SBC 75 | * generally considered to "work most of the time" 76 | * generally considered to receive periodic maintenance from community and upstream 77 | 78 | ## Staging 79 | 80 | Work in progress (WIP) status is for when a maintainer has committed to a SBC, but is not ready to ship stable images. 81 | 82 | ### Benefits 83 | 84 | All benefits of Community Supported SBCs apply to Staging as well. 85 | 86 | * periodic / nightly CLI images are published by Armbian 87 | * best-effort support to SBC maintainer to assure compatibility within the [Armbian Build Framework](https://github.com/armbian/build) 88 | * best-effort team's unique expertise to assist maintainer with general challenges 89 | * eligible for promotion to Standard Support 90 | 91 | ### Requirements 92 | 93 | * must satisfy standard support criteria 94 | * must show active development 95 | * must compile successfully most of the time 96 | -------------------------------------------------------------------------------- /docs/User-Guide_Networking.md: -------------------------------------------------------------------------------- 1 | ## Networking 2 | 3 | Armbian uses [**Netplan.io**](https://netplan.io/) to describe networking configurations. Netplan is a utility to easily configure Linux networking, using a declarative approach. 4 | 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](https://netplan.readthedocs.io/en/stable/netplan-yaml/)). 5 | 6 | _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. 7 | 8 | ## Minimal images 9 | 10 | !!! tip "Netplan renderer: networkd" 11 | 12 | _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. 13 | 14 | ### Armbian defaults 15 | 16 | All ethernet interfaces are configured for DHCP and will automatically receive an IP address from your router. 17 | 18 | [`/etc/netplan/10-dhcp-all-interfaces.yaml`](https://github.com/armbian/build/blob/main/extensions/network/config-networkd/netplan/10-dhcp-all-interfaces.yaml): 19 | 20 | ```yaml 21 | network: 22 | version: 2 23 | renderer: networkd 24 | ethernets: 25 | all-eth-interfaces: 26 | match: 27 | name: "e*" 28 | dhcp4: yes 29 | dhcp6: yes 30 | ipv6-privacy: yes 31 | ``` 32 | 33 | ### Configuration examples 34 | 35 | #### Setting a fixed IP address 36 | 37 | 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. 38 | 39 | The following example configures a static IP `192.168.1.199` for the `eth0` interface. Please adjust as necessary. 40 | 41 | 42 | !!! question "How to find your device's Ethernet interface?" 43 | 44 | Use command: 45 | 46 | ```sh 47 | ip addr 48 | ``` 49 | It is usually something like `eth0`, `enp4s3` or `lan`. 50 | 51 | `/etc/netplan/20-static-ip.yaml`: 52 | 53 | ```yaml 54 | network: 55 | version: 2 56 | renderer: networkd 57 | ethernets: 58 | eth0: # Change this to your ethernet interface 59 | addresses: 60 | - 192.168.1.199/24 61 | routes: 62 | - to: default 63 | via: 192.168.1.1 64 | nameservers: 65 | addresses: 66 | - 9.9.9.9 67 | - 1.1.1.1 68 | ``` 69 | 70 | See also the [Netplan docs](https://netplan.readthedocs.io/en/latest/using-static-ip-addresses/) for reference. 71 | 72 | #### Connecting to WiFI network 73 | 74 | 75 | !!! tip "It is recommended to make a separate config file for wireless network." 76 | 77 | Create the following file: 78 | 79 | `sudo nano /etc/netplan/30-wifis-dhcp.yaml`: 80 | 81 | ```yaml 82 | network: 83 | version: 2 84 | renderer: networkd 85 | wifis: 86 | wlan0: 87 | dhcp4: true 88 | dhcp6: true 89 | access-points: 90 | "Your-SSID": 91 | password: "your-password" 92 | ``` 93 | 94 | Replace `SSID` with the name of the network you want to connect to and `wlan0` with the wifi interface used on your system. 95 | 96 | !!! question "How to find your device's WiFi interface?" 97 | 98 | Use command: 99 | 100 | ```sh 101 | iw dev | awk '$1=="Interface"{print $2}' 102 | ``` 103 | 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. 104 | 105 | 106 | See also the [Netplan docs](https://netplan.readthedocs.io/en/latest/examples/#how-to-configure-your-computer-to-connect-to-your-home-wi-fi-network) for reference. 107 | 108 | ### Applying your configuration 109 | 110 | Once you are done configuring your network, it is time to test syntax and apply it. 111 | 112 | #### Fix file permissions 113 | 114 | According to the [Netplan docs](https://netplan.readthedocs.io/en/stable/security/), the permissions must be restricted to the `root` user. 115 | 116 | ```bash 117 | sudo chmod 600 /etc/netplan/*.yaml 118 | ``` 119 | 120 | #### Test syntax 121 | 122 | This will verify the syntax and test if your device can connect 123 | 124 | ```bash 125 | sudo netplan try 126 | ``` 127 | 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. 128 | 129 | #### Apply the configuration 130 | 131 | ```bash 132 | sudo netplan apply 133 | ``` 134 | 135 | # CLI and desktop images 136 | 137 | !!! tip "Netplan renderer: Network Manager" 138 | 139 | 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. 140 | 141 | ### Setting a fixed IP address 142 | 143 | The following example configures a static IP `192.168.1.199` for the `eth0` interface. Please adjust the example to your likings. 144 | 145 | !!! question "How to find your device's Ethernet interface?" 146 | 147 | Use command: 148 | 149 | ```sh 150 | ip addr 151 | ``` 152 | It is usually something like `eth0`, `enp4s3` or `lan`. 153 | 154 | `/etc/netplan/20-static-ip.yaml`: 155 | 156 | ```yaml 157 | network: 158 | version: 2 159 | renderer: NetworkManager # Different than 'networkd' 160 | ethernets: 161 | eth0: # Change this to your ethernet interface 162 | addresses: 163 | - 192.168.1.199/24 164 | routes: 165 | - to: default 166 | via: 192.168.1.1 167 | nameservers: 168 | addresses: 169 | - 9.9.9.9 170 | - 1.1.1.1 171 | ``` 172 | 173 | See also the [Netplan docs](https://netplan.readthedocs.io/en/latest/using-static-ip-addresses/) for reference. 174 | 175 | Alternatively, you can also use Network-Manager directly via the command line or GUI tools on your desktop: 176 | 177 | ```bash 178 | nmtui-edit eth0 179 | ``` 180 | ??? note "Display screenshot" 181 | ![](images/edit-connection.png) 182 | 183 | Replace `eth0` with the name of your Ethernet Interface. 184 | 185 | ### Connecting to WiFI network 186 | 187 | For connecting to a wireless network, you can use the same method as mention above for use with `networkd` [on minimal images](#minimal-images). Just make sure to replace `renderer: networkd` with `renderer: NetworkManager`. 188 | 189 | Alternatively, you can also use Network-Manager directly via the command line or GUI tools on your desktop: 190 | 191 | ```bash 192 | nmtui-connect SSID 193 | ``` 194 | 195 | ??? note "Display screenshot" 196 | ![](images/wifi-connect.png) 197 | 198 | Replace `SSID` with the name of your wireless network. 199 | -------------------------------------------------------------------------------- /docs/css/armbian-extra.css: -------------------------------------------------------------------------------- 1 | .md-typeset__table { 2 | min-width: 100%; 3 | } 4 | 5 | .md-typeset table:not([class]) { 6 | display: table; 7 | } 8 | 9 | /* Style for only specially tagged bash blocks */ 10 | pre.custom-bash-block, code.custom-bash-block { 11 | font-size: 24pt; 12 | } 13 | 14 | @media (max-width: 768px) { 15 | pre.custom-bash-block, code.custom-bash-block { 16 | font-size: 14pt; /* smaller size for tablets/phones */ 17 | } 18 | } 19 | 20 | @media (max-width: 480px) { 21 | pre.custom-bash-block, code.custom-bash-block { 22 | font-size: 12pt; /* even smaller for small phones */ 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /docs/images/ABU001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/ABU001.png -------------------------------------------------------------------------------- /docs/images/ACC001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/ACC001.png -------------------------------------------------------------------------------- /docs/images/ADG001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/ADG001.png -------------------------------------------------------------------------------- /docs/images/ART001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/ART001.png -------------------------------------------------------------------------------- /docs/images/BAZ001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/BAZ001.png -------------------------------------------------------------------------------- /docs/images/BNS001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/BNS001.png -------------------------------------------------------------------------------- /docs/images/BOOT01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/BOOT01.png -------------------------------------------------------------------------------- /docs/images/CINNAMON01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/CINNAMON01.png -------------------------------------------------------------------------------- /docs/images/CON001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/CON001.png -------------------------------------------------------------------------------- /docs/images/CON001.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/CON001.webp -------------------------------------------------------------------------------- /docs/images/CON004.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/CON004.webp -------------------------------------------------------------------------------- /docs/images/CON005.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/CON005.webp -------------------------------------------------------------------------------- /docs/images/CON007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/CON007.png -------------------------------------------------------------------------------- /docs/images/CPT001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/CPT001.png -------------------------------------------------------------------------------- /docs/images/DAT001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DAT001.png -------------------------------------------------------------------------------- /docs/images/DAT005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DAT005.png -------------------------------------------------------------------------------- /docs/images/DE31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DE31.png -------------------------------------------------------------------------------- /docs/images/DEL001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DEL001.png -------------------------------------------------------------------------------- /docs/images/DNS001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DNS001.png -------------------------------------------------------------------------------- /docs/images/DOM001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOM001.png -------------------------------------------------------------------------------- /docs/images/DOM002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOM002.png -------------------------------------------------------------------------------- /docs/images/DOW001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOW001.png -------------------------------------------------------------------------------- /docs/images/DOW003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOW003.png -------------------------------------------------------------------------------- /docs/images/DOW005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOW005.png -------------------------------------------------------------------------------- /docs/images/DOW011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOW011.png -------------------------------------------------------------------------------- /docs/images/DOW013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOW013.png -------------------------------------------------------------------------------- /docs/images/DOW015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOW015.png -------------------------------------------------------------------------------- /docs/images/DOW017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOW017.png -------------------------------------------------------------------------------- /docs/images/DOW019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOW019.png -------------------------------------------------------------------------------- /docs/images/DOW021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOW021.png -------------------------------------------------------------------------------- /docs/images/DOW023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOW023.png -------------------------------------------------------------------------------- /docs/images/DOW025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOW025.png -------------------------------------------------------------------------------- /docs/images/DOW040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DOW040.png -------------------------------------------------------------------------------- /docs/images/DPL001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DPL001.png -------------------------------------------------------------------------------- /docs/images/DTO001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/DTO001.png -------------------------------------------------------------------------------- /docs/images/EMB001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/EMB001.png -------------------------------------------------------------------------------- /docs/images/EVCC01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/EVCC01.png -------------------------------------------------------------------------------- /docs/images/FIL001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/FIL001.png -------------------------------------------------------------------------------- /docs/images/GHR001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/GHR001.png -------------------------------------------------------------------------------- /docs/images/GNOME01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/GNOME01.png -------------------------------------------------------------------------------- /docs/images/GRA001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/GRA001.png -------------------------------------------------------------------------------- /docs/images/HA001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/HA001.png -------------------------------------------------------------------------------- /docs/images/HA003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/HA003.png -------------------------------------------------------------------------------- /docs/images/HAB001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/HAB001.png -------------------------------------------------------------------------------- /docs/images/HAS001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/HAS001.png -------------------------------------------------------------------------------- /docs/images/HEAD01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/HEAD01.png -------------------------------------------------------------------------------- /docs/images/HPG001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/HPG001.png -------------------------------------------------------------------------------- /docs/images/HPS001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/HPS001.png -------------------------------------------------------------------------------- /docs/images/IMM001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/IMM001.png -------------------------------------------------------------------------------- /docs/images/JEL001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/JEL001.png -------------------------------------------------------------------------------- /docs/images/JMS001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/JMS001.png -------------------------------------------------------------------------------- /docs/images/KER001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/KER001.png -------------------------------------------------------------------------------- /docs/images/LID001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/LID001.png -------------------------------------------------------------------------------- /docs/images/LO001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/LO001.png -------------------------------------------------------------------------------- /docs/images/LOC001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/LOC001.png -------------------------------------------------------------------------------- /docs/images/MAN001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/MAN001.png -------------------------------------------------------------------------------- /docs/images/MAN005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/MAN005.png -------------------------------------------------------------------------------- /docs/images/MED001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/MED001.png -------------------------------------------------------------------------------- /docs/images/MED003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/MED003.png -------------------------------------------------------------------------------- /docs/images/MED010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/MED010.png -------------------------------------------------------------------------------- /docs/images/MED015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/MED015.png -------------------------------------------------------------------------------- /docs/images/MED020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/MED020.png -------------------------------------------------------------------------------- /docs/images/MED030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/MED030.png -------------------------------------------------------------------------------- /docs/images/MED927.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/MED927.png -------------------------------------------------------------------------------- /docs/images/MON001.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/MON001.webp -------------------------------------------------------------------------------- /docs/images/MON005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/MON005.png -------------------------------------------------------------------------------- /docs/images/MYA001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/MYA001.png -------------------------------------------------------------------------------- /docs/images/NAV001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/NAV001.png -------------------------------------------------------------------------------- /docs/images/NAX001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/NAX001.png -------------------------------------------------------------------------------- /docs/images/NBOX01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/NBOX01.png -------------------------------------------------------------------------------- /docs/images/NCT001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/NCT001.png -------------------------------------------------------------------------------- /docs/images/NET001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/NET001.png -------------------------------------------------------------------------------- /docs/images/NET003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/NET003.png -------------------------------------------------------------------------------- /docs/images/NTD001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/NTD001.png -------------------------------------------------------------------------------- /docs/images/OCT001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/OCT001.png -------------------------------------------------------------------------------- /docs/images/OMV001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/OMV001.png -------------------------------------------------------------------------------- /docs/images/OWC001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/OWC001.png -------------------------------------------------------------------------------- /docs/images/PGSQL1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/PGSQL1.png -------------------------------------------------------------------------------- /docs/images/PIH001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/PIH001.png -------------------------------------------------------------------------------- /docs/images/POR001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/POR001.png -------------------------------------------------------------------------------- /docs/images/POR001.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/POR001.webp -------------------------------------------------------------------------------- /docs/images/PRO001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/PRO001.png -------------------------------------------------------------------------------- /docs/images/RAD001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/RAD001.png -------------------------------------------------------------------------------- /docs/images/RDR001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/RDR001.png -------------------------------------------------------------------------------- /docs/images/REDIS1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/REDIS1.png -------------------------------------------------------------------------------- /docs/images/RSD001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/RSD001.png -------------------------------------------------------------------------------- /docs/images/SABN01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SABN01.png -------------------------------------------------------------------------------- /docs/images/SHELL1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SHELL1.png -------------------------------------------------------------------------------- /docs/images/SMB001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SMB001.png -------------------------------------------------------------------------------- /docs/images/SON001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SON001.png -------------------------------------------------------------------------------- /docs/images/SSH001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SSH001.png -------------------------------------------------------------------------------- /docs/images/SSH200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SSH200.png -------------------------------------------------------------------------------- /docs/images/STC001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/STC001.png -------------------------------------------------------------------------------- /docs/images/STOR001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/STOR001.png -------------------------------------------------------------------------------- /docs/images/STR001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/STR001.png -------------------------------------------------------------------------------- /docs/images/SW25.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SW25.webp -------------------------------------------------------------------------------- /docs/images/SWAG01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SWAG01.png -------------------------------------------------------------------------------- /docs/images/SY001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SY001.png -------------------------------------------------------------------------------- /docs/images/SY005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SY005.png -------------------------------------------------------------------------------- /docs/images/SY010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SY010.png -------------------------------------------------------------------------------- /docs/images/SY018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SY018.png -------------------------------------------------------------------------------- /docs/images/SY101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SY101.png -------------------------------------------------------------------------------- /docs/images/SY201.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SY201.png -------------------------------------------------------------------------------- /docs/images/SY202.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SY202.png -------------------------------------------------------------------------------- /docs/images/SY204.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SY204.png -------------------------------------------------------------------------------- /docs/images/SY210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/SY210.png -------------------------------------------------------------------------------- /docs/images/TRA001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/TRA001.png -------------------------------------------------------------------------------- /docs/images/UNAT01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/UNAT01.png -------------------------------------------------------------------------------- /docs/images/UNAT02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/UNAT02.png -------------------------------------------------------------------------------- /docs/images/UNB001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/UNB001.png -------------------------------------------------------------------------------- /docs/images/UPD001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/UPD001.png -------------------------------------------------------------------------------- /docs/images/UPK001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/UPK001.png -------------------------------------------------------------------------------- /docs/images/UPK001.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/UPK001.webp -------------------------------------------------------------------------------- /docs/images/USR001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/USR001.png -------------------------------------------------------------------------------- /docs/images/VNS001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/VNS001.png -------------------------------------------------------------------------------- /docs/images/WBM001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/WBM001.png -------------------------------------------------------------------------------- /docs/images/WG001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/WG001.png -------------------------------------------------------------------------------- /docs/images/WG002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/WG002.png -------------------------------------------------------------------------------- /docs/images/WG003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/WG003.png -------------------------------------------------------------------------------- /docs/images/WG004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/WG004.png -------------------------------------------------------------------------------- /docs/images/WRG001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/WRG001.png -------------------------------------------------------------------------------- /docs/images/WTC001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/WTC001.png -------------------------------------------------------------------------------- /docs/images/XFCE01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/XFCE01.png -------------------------------------------------------------------------------- /docs/images/ZFS001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/ZFS001.png -------------------------------------------------------------------------------- /docs/images/ZTR001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/ZTR001.png -------------------------------------------------------------------------------- /docs/images/a1-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/a1-logo.png -------------------------------------------------------------------------------- /docs/images/a2-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/a2-logo.png -------------------------------------------------------------------------------- /docs/images/armbian-config-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/armbian-config-1.png -------------------------------------------------------------------------------- /docs/images/armbian-config-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/armbian-config-10.png -------------------------------------------------------------------------------- /docs/images/armbian-config-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/armbian-config-2.png -------------------------------------------------------------------------------- /docs/images/armbian-config-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/armbian-config-3.png -------------------------------------------------------------------------------- /docs/images/armbian-config-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/armbian-config-4.png -------------------------------------------------------------------------------- /docs/images/armbian-config-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/armbian-config-5.png -------------------------------------------------------------------------------- /docs/images/armbian-config-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/armbian-config-6.png -------------------------------------------------------------------------------- /docs/images/armbian-config-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/armbian-config-7.png -------------------------------------------------------------------------------- /docs/images/armbian-config-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/armbian-config-8.png -------------------------------------------------------------------------------- /docs/images/armbian-config-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/armbian-config-9.png -------------------------------------------------------------------------------- /docs/images/armbian-mirror-explication.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/armbian-mirror-explication.png -------------------------------------------------------------------------------- /docs/images/banana-i2c-display1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/banana-i2c-display1.jpg -------------------------------------------------------------------------------- /docs/images/banana-spi-display.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/banana-spi-display.jpg -------------------------------------------------------------------------------- /docs/images/betaimages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/betaimages.png -------------------------------------------------------------------------------- /docs/images/budgie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/budgie.png -------------------------------------------------------------------------------- /docs/images/build-all-images.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/build-all-images.png -------------------------------------------------------------------------------- /docs/images/build-images-ci.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/build-images-ci.png -------------------------------------------------------------------------------- /docs/images/build-selected-blured.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/build-selected-blured.png -------------------------------------------------------------------------------- /docs/images/build-single-clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/build-single-clean.png -------------------------------------------------------------------------------- /docs/images/build-train.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/build-train.png -------------------------------------------------------------------------------- /docs/images/buildselected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/buildselected.png -------------------------------------------------------------------------------- /docs/images/cinnamon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/cinnamon.png -------------------------------------------------------------------------------- /docs/images/commit-changes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/commit-changes.png -------------------------------------------------------------------------------- /docs/images/complete-artifact-matrix-standard-support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/complete-artifact-matrix-standard-support.png -------------------------------------------------------------------------------- /docs/images/create-pull-reqest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/create-pull-reqest.png -------------------------------------------------------------------------------- /docs/images/dedicated-applications.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/dedicated-applications.png -------------------------------------------------------------------------------- /docs/images/edit-connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/edit-connection.png -------------------------------------------------------------------------------- /docs/images/edit-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/edit-icon.png -------------------------------------------------------------------------------- /docs/images/forums.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/forums.png -------------------------------------------------------------------------------- /docs/images/jira-dark-revised.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/jira-dark-revised.png -------------------------------------------------------------------------------- /docs/images/kanban.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/kanban.png -------------------------------------------------------------------------------- /docs/images/linterror.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/linterror.png -------------------------------------------------------------------------------- /docs/images/loginprompt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/loginprompt.png -------------------------------------------------------------------------------- /docs/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/logo.png -------------------------------------------------------------------------------- /docs/images/logo_middle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/logo_middle.png -------------------------------------------------------------------------------- /docs/images/lvdsbanana.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/lvdsbanana.png -------------------------------------------------------------------------------- /docs/images/mr-pipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/mr-pipeline.png -------------------------------------------------------------------------------- /docs/images/product-backlog-structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/product-backlog-structure.png -------------------------------------------------------------------------------- /docs/images/propose-changes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/propose-changes.png -------------------------------------------------------------------------------- /docs/images/rolling-releases.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/rolling-releases.png -------------------------------------------------------------------------------- /docs/images/run-worflow-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/run-worflow-button.png -------------------------------------------------------------------------------- /docs/images/run-workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/run-workflow.png -------------------------------------------------------------------------------- /docs/images/sandisk-extreme-a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/sandisk-extreme-a2.png -------------------------------------------------------------------------------- /docs/images/sandisk-extremepro-a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/sandisk-extremepro-a1.png -------------------------------------------------------------------------------- /docs/images/sandisk-ultra-a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/sandisk-ultra-a1.png -------------------------------------------------------------------------------- /docs/images/selected-images.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/selected-images.png -------------------------------------------------------------------------------- /docs/images/smoke-tests.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/smoke-tests.png -------------------------------------------------------------------------------- /docs/images/stable-images.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/stable-images.png -------------------------------------------------------------------------------- /docs/images/standard-support-images.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/standard-support-images.png -------------------------------------------------------------------------------- /docs/images/support-autotest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/support-autotest.png -------------------------------------------------------------------------------- /docs/images/taskProcess1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/taskProcess1.png -------------------------------------------------------------------------------- /docs/images/taskProcess2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/taskProcess2.png -------------------------------------------------------------------------------- /docs/images/taskProcess3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/taskProcess3.png -------------------------------------------------------------------------------- /docs/images/taskProcess4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/taskProcess4.png -------------------------------------------------------------------------------- /docs/images/wait-for-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/wait-for-preview.png -------------------------------------------------------------------------------- /docs/images/wifi-connect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/wifi-connect.png -------------------------------------------------------------------------------- /docs/images/xfce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/armbian/documentation/fc444b083d40bb97de75e9a86823972dc55c5852/docs/images/xfce.png -------------------------------------------------------------------------------- /overrides/main.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | 4 | {% block announce %} 5 | 6 |   Become a sponsor to Armbian! 9 | 10 | 11 | {% endblock %} 12 | 13 | {% block content %} 14 | {{ super() }} 15 | 16 | {% if page and page.meta and page.meta.comments %} 17 |
18 | 33 | 67 |
68 | {% endif %} 69 | {% endblock %} 70 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Jinja2~=3.1.4 2 | markdown>=3.6 3 | mkdocs>=1.6.0 4 | mkdocs-material>=9.5.31 5 | mkdocs-with-pdf>=0.9.3 6 | mdx_truly_sane_lists>=1.3.0 7 | weasyprint==44 -------------------------------------------------------------------------------- /tools/README.md: -------------------------------------------------------------------------------- 1 | Tools for documentation creation go here 2 | 3 | `mkArmbianDocs.py` - generates a mkdocs.yml file based on the contents of docs folder 4 | -------------------------------------------------------------------------------- /tools/mkArmbianDocs.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | Copyright Armbian (c) 2022 5 | """ 6 | 7 | import fnmatch 8 | import logging as log 9 | import os 10 | import re 11 | from collections import defaultdict 12 | 13 | from jinja2 import Template 14 | 15 | 16 | def parse_arguments(): 17 | """ Arguments parsing function. """ 18 | import argparse 19 | parser = argparse.ArgumentParser( 20 | description='generate mkdocs.yml based on file naming covention: [ParentCategory]-Subtopic.md') 21 | parser.add_argument('-v', '--verbose', action='store_true', 22 | help='increase output verbosity') 23 | parser.add_argument('-i', '--indir', metavar='INPUT_DIRECTORY', default='./docs', 24 | help='directory containing markdown files [default: ./docs]') 25 | parser.add_argument('-o', '--outdir', metavar='OUTPUT_DIRECTORY', default='./', 26 | help='directory to store mkdocs.yml [default: ./]') 27 | 28 | return parser.parse_args() 29 | 30 | 31 | # locate markdown files in path and return list 32 | def findFiles(indir): 33 | assert os.path.isdir(indir), "Provided directory path is not a directory" 34 | 35 | validFileList = list() 36 | 37 | log.info("looking for files in %s", indir) 38 | # find markdown files 39 | for file in os.listdir(indir): 40 | if os.path.isdir(os.path.join(indir, file)): 41 | log.info("%s is a directory, skipping", file) 42 | elif fnmatch.fnmatch(file, '*.md'): 43 | log.info("adding %s as markdown file", file) 44 | validFileList.append(file) 45 | 46 | return validFileList 47 | 48 | 49 | # verify file is markdown and split file name to Parent and Child topics 50 | def parseFiles(validFileList, indir): 51 | assert validFileList, "No valid markdown files to parse" 52 | assert os.path.isdir(indir), "Provided directory path is not a directory" 53 | 54 | parsedFileList = dict() 55 | tocTree = defaultdict(set) 56 | tocRegex = re.compile( 57 | r"(?P[\w-]+?(?=_))_(?P[\w-].*(?=\.md))") 58 | # FIXME add Try catch or finaly 59 | for file in sorted(validFileList): 60 | filepath = os.path.join(indir, file) 61 | log.info("trying to match %s ", file) 62 | tocResult = tocRegex.search(file) 63 | if tocResult: 64 | # convert hypens to space for Parent topic name 65 | tocParent = tocResult.group('parent').replace("-", " ", 3) 66 | # convert hypens to space for Child topic name 67 | tocChild = tocResult.group('child').replace("-", " ", 3) 68 | tocPair = (tocChild, file) 69 | tocTree[tocParent].add(tocPair) 70 | log.info("added %s %s %s", tocParent, tocChild, file) 71 | 72 | log.info(tocTree) 73 | return tocTree 74 | 75 | 76 | # generate mkdocs.yml using jinja template and dict of markdown files 77 | def generateSite(parsedFileList): 78 | mkdocsTemplate = """ 79 | site_name: Armbian Documentation 80 | site_author: "Armbian team" 81 | 82 | copyright: Copyright © 2015 - 2024 Armbian team 83 | repo_url: https://github.com/armbian/documentation 84 | repo_name: armbian/documentation 85 | 86 | theme: 87 | name: material 88 | custom_dir: overrides 89 | logo: images/logo.svg 90 | icon: 91 | repo: fontawesome/brands/github-alt 92 | palette: 93 | - scheme: default 94 | primary: red 95 | accent: red 96 | toggle: 97 | icon: material/toggle-switch-off-outline 98 | name: Switch to dark mode 99 | - scheme: slate 100 | primary: red 101 | accent: red 102 | toggle: 103 | icon: material/toggle-switch 104 | name: Switch to light mode 105 | favicon: images/logo.png 106 | features: 107 | - navigation.tabs 108 | - navigation.top 109 | - toc.integrate 110 | 111 | extra: 112 | analytics: 113 | provider: google 114 | property: UA-284946-9 115 | social: 116 | - icon: fontawesome/brands/github 117 | link: https://github.com/armbian 118 | - icon: fontawesome/brands/twitter 119 | link: https://twitter.com/armbian 120 | 121 | plugins: 122 | - search 123 | - with-pdf: 124 | author: Armbian documentation team 125 | copyright: © 2024 by Armbian 126 | cover_title: Armbian documentation 127 | cover_subtitle: Linux for ARM development boards 128 | 129 | markdown_extensions: 130 | - smarty 131 | - footnotes 132 | - mdx_truly_sane_lists 133 | - toc: 134 | permalink: True 135 | - pymdownx.highlight: 136 | auto_title: true 137 | linenums: true 138 | use_pygments: true 139 | - pymdownx.superfences 140 | - pymdownx.emoji: 141 | emoji_index: !!python/name:material.extensions.emoji.twemoji 142 | emoji_generator: !!python/name:material.extensions.emoji.to_svg 143 | 144 | nav: 145 | - Home: index.md 146 | {% for tocParent in tocDict.keys() %} - '{{ tocParent }}' : 147 | {% for title, file in dict.fromkeys(tocDict[tocParent]) %} - '{{ title }}' : '{{ file }}' 148 | {% endfor %} 149 | {% endfor %} 150 | 151 | """ 152 | template = Template(mkdocsTemplate) 153 | return template.render(tocDict=parsedFileList) 154 | 155 | 156 | def writeSiteFile(content, outdir): 157 | assert os.path.isdir( 158 | outdir), "Provided output directory path is not a directory" 159 | 160 | file = "mkdocs.yml" 161 | filepath = os.path.join(outdir, file) 162 | fp = open(filepath, 'w') 163 | 164 | fp.write(content) 165 | fp.close() 166 | log.info("%s generated", file) 167 | 168 | 169 | def main(): 170 | """ Main function. """ 171 | args = parse_arguments() 172 | 173 | if args.verbose: 174 | log.basicConfig(format="%(levelname)s: %(message)s", level=log.DEBUG) 175 | log.info("Verbose output.") 176 | else: 177 | log.basicConfig(format="%(levelname)s: %(message)s") 178 | 179 | log.info("mkArmbianDocs version 0.100002, created by Lane Jennison.") 180 | 181 | indir = args.indir 182 | outdir = args.outdir 183 | 184 | writeSiteFile(generateSite(parseFiles(findFiles(indir), indir)), outdir) 185 | 186 | 187 | if __name__ == "__main__": 188 | main() 189 | --------------------------------------------------------------------------------