mirror of
https://github.com/home-assistant/operating-system.git
synced 2025-10-27 12:38:31 +00:00
Compare commits
71 Commits
16.1.rc1
...
remove-doc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
80309bc93b | ||
|
|
d372a6df4b | ||
|
|
34f8e3c1c7 | ||
|
|
7de24914bd | ||
|
|
58de585863 | ||
|
|
dc52562b9d | ||
|
|
1e24b8e351 | ||
|
|
daa6a7c868 | ||
|
|
2e48a0a586 | ||
|
|
7005edee05 | ||
|
|
92cb987426 | ||
|
|
f9f6c9f045 | ||
|
|
58c40751a3 | ||
|
|
3e771eb222 | ||
|
|
4a76a65cd8 | ||
|
|
1c90d4bd4b | ||
|
|
bde19002df | ||
|
|
95b1d22215 | ||
|
|
cb66fa808f | ||
|
|
fb52fc9a76 | ||
|
|
342f93138d | ||
|
|
435714c01d | ||
|
|
c70b528ac7 | ||
|
|
510395fe4e | ||
|
|
c95fd97df6 | ||
|
|
ef45889956 | ||
|
|
e15d99bc2b | ||
|
|
dc0da1b7bc | ||
|
|
2951f969bb | ||
|
|
0e09f22bd0 | ||
|
|
3c321a8387 | ||
|
|
0e3fd2c021 | ||
|
|
9a1e0015d8 | ||
|
|
3dcf6bd9ee | ||
|
|
837baa288c | ||
|
|
36b9606172 | ||
|
|
8bd52361b9 | ||
|
|
39ff0117ba | ||
|
|
d60618a55f | ||
|
|
8f22412cf8 | ||
|
|
700ff773ab | ||
|
|
a258295568 | ||
|
|
71be6037d1 | ||
|
|
78bda4bd10 | ||
|
|
44108a5493 | ||
|
|
94fe13f6bb | ||
|
|
194b9146f4 | ||
|
|
9d110c12f3 | ||
|
|
5872864bc5 | ||
|
|
b35be67236 | ||
|
|
d59053301e | ||
|
|
870baa96be | ||
|
|
22fe9b19ee | ||
|
|
62747cd622 | ||
|
|
45985ad4a3 | ||
|
|
71d222ad91 | ||
|
|
effe4d3e73 | ||
|
|
419d40012f | ||
|
|
1915f2194b | ||
|
|
06b55a62db | ||
|
|
4e000b8a7e | ||
|
|
17d811a78f | ||
|
|
a722bdfd94 | ||
|
|
7243db762e | ||
|
|
1078620de9 | ||
|
|
69ff24a59a | ||
|
|
756404816d | ||
|
|
38ea463d5f | ||
|
|
cbcf9ae34e | ||
|
|
4c09ceb656 | ||
|
|
e7f314273d |
4
.github/workflows/artifacts-index.yaml
vendored
4
.github/workflows/artifacts-index.yaml
vendored
@@ -39,12 +39,12 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup Python version ${{ env.PYTHON_VERSION }}
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
|
||||
|
||||
71
.github/workflows/build.yaml
vendored
71
.github/workflows/build.yaml
vendored
@@ -16,6 +16,11 @@ on:
|
||||
required: true
|
||||
type: boolean
|
||||
default: true
|
||||
run_tests:
|
||||
description: 'Run tests after build'
|
||||
required: true
|
||||
type: boolean
|
||||
default: true
|
||||
hassio_channel:
|
||||
description: 'Release channel to use (default: stable for GH releases, dev otherwise)'
|
||||
type: choice
|
||||
@@ -50,7 +55,7 @@ jobs:
|
||||
self_signed_cert: ${{ steps.generate_signing_key.outputs.self_signed_cert }}
|
||||
steps:
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -77,7 +82,7 @@ jobs:
|
||||
PUBLISH_BUILD: ${{ steps.check_publish.outputs.publish_build }}
|
||||
run: |
|
||||
version_dev="dev$(date --utc +'%Y%m%d')"
|
||||
if [ "${{ env.PUBLISH_BUILD }}" != "true" ]; then
|
||||
if [ "${{ env.PUBLISH_BUILD }}" != "true" ] || [ "${{ github.ref }}" != "refs/heads/dev" ]; then
|
||||
version_dev="dev$(date +%s)"
|
||||
fi
|
||||
echo "Development version \"${version_dev}\""
|
||||
@@ -142,7 +147,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Create build matrix
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||
id: generate_matrix
|
||||
with:
|
||||
script: |
|
||||
@@ -152,26 +157,35 @@ jobs:
|
||||
}
|
||||
|
||||
const boardFilter = "${{ github.event.inputs.boards }}"
|
||||
const runTests = "${{ github.event.inputs.run_tests }}" === "true"
|
||||
|
||||
if (boardFilter == "") {
|
||||
console.log("Run full build for all boards")
|
||||
return { "board": boards }
|
||||
} else {
|
||||
console.log("Run partial build")
|
||||
const boardSet = new Set(boardFilter.split(","))
|
||||
|
||||
// if tests are enabled, we need to ensure the OVA board is included
|
||||
if (runTests && !boardSet.has("ova")) {
|
||||
console.log("Adding OVA board for integration tests")
|
||||
boardSet.add("ova")
|
||||
}
|
||||
|
||||
const buildBoards = boards.filter(b => boardSet.has(b.id))
|
||||
return { "board": buildBoards }
|
||||
}
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.11.1
|
||||
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
||||
- name: Log in to the GitHub container registry
|
||||
uses: docker/login-action@v3.4.0
|
||||
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Build and Push
|
||||
uses: docker/build-push-action@v6.18.0
|
||||
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
|
||||
id: build_haos_builder
|
||||
with:
|
||||
context: .
|
||||
@@ -193,7 +207,7 @@ jobs:
|
||||
echo "self_signed_cert=true" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Create signing key
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
if: steps.generate_signing_key.outcome == 'success'
|
||||
with:
|
||||
name: signing-key
|
||||
@@ -213,14 +227,14 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
submodules: true
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup Python version ${{ env.PYTHON_VERSION }}
|
||||
if: ${{ github.event_name != 'release' }}
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
||||
with:
|
||||
python-version: ${{ env.PYTHON_VERSION }}
|
||||
|
||||
@@ -246,7 +260,7 @@ jobs:
|
||||
|
||||
- name: Get self-signed certificate from the prepare job
|
||||
if: ${{ needs.prepare.outputs.self_signed_cert == 'true' }}
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
with:
|
||||
name: signing-key
|
||||
|
||||
@@ -267,7 +281,7 @@ jobs:
|
||||
df -h
|
||||
|
||||
- name: "Restore cache: object files"
|
||||
uses: actions/cache/restore@v4
|
||||
uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
|
||||
with:
|
||||
path: /mnt/cache/cc
|
||||
key: haos-cc-${{ matrix.board.id }}
|
||||
@@ -315,7 +329,7 @@ jobs:
|
||||
|
||||
- name: Upload release assets
|
||||
if: ${{ github.event_name == 'release' }}
|
||||
uses: shogo82148/actions-upload-release-asset@v1
|
||||
uses: shogo82148/actions-upload-release-asset@59cbc563d11314e48122193f8fe5cdda62ea6cf9 # v1.9.1
|
||||
with:
|
||||
upload_url: ${{ github.event.release.upload_url }}
|
||||
asset_path: output/images/haos_*
|
||||
@@ -330,7 +344,7 @@ jobs:
|
||||
|
||||
- name: "Save cache: object files"
|
||||
if: github.ref == 'refs/heads/dev'
|
||||
uses: actions/cache/save@v4
|
||||
uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
|
||||
with:
|
||||
path: /mnt/cache/cc
|
||||
key: haos-cc-${{ matrix.board.id }}-${{ github.run_id }}
|
||||
@@ -338,6 +352,18 @@ jobs:
|
||||
- name: Generate build summary
|
||||
run: |
|
||||
echo "# ${{ matrix.board.id }} build summary" >> $GITHUB_STEP_SUMMARY
|
||||
echo "## Built-in OS components" >> $GITHUB_STEP_SUMMARY
|
||||
echo "Release channel: ${{ inputs.hassio_channel }} (${{ needs.prepare.outputs.hassio_channel_option }})" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| Container | Version |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "|:-|:-|" >> $GITHUB_STEP_SUMMARY
|
||||
supervisor_version=$(jq -r ".supervisor" output/build/hassio-*/version.json)
|
||||
landingpage_version=$(curl -fsSL https://api.github.com/repos/home-assistant/landingpage/releases/latest | jq -r '.tag_name')
|
||||
echo "| supervisor | [${supervisor_version}](https://github.com/home-assistant/supervisor/releases/tag/${supervisor_version}) |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| landingpage | [${landingpage_version}](https://github.com/home-assistant/landingpage/releases/tag/${landingpage_version}) |" >> $GITHUB_STEP_SUMMARY
|
||||
for plugin in dns audio cli multicast observer; do
|
||||
version=$(jq -r ".${plugin}" output/build/hassio-*/version.json)
|
||||
echo "| plugin-${plugin} | [${version}](https://github.com/home-assistant/plugin-${plugin}/releases/tag/${version}) |" >> $GITHUB_STEP_SUMMARY
|
||||
done
|
||||
echo "## Artifacts" >> $GITHUB_STEP_SUMMARY
|
||||
echo "| File | Size (bytes) | Size (formatted) |" >> $GITHUB_STEP_SUMMARY
|
||||
echo "|:-|:-|:-|" >> $GITHUB_STEP_SUMMARY
|
||||
@@ -352,7 +378,7 @@ jobs:
|
||||
done
|
||||
|
||||
- name: Upload OS image artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' && matrix.board.id != 'ova' }}
|
||||
with:
|
||||
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.img.xz
|
||||
@@ -360,7 +386,7 @@ jobs:
|
||||
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.img.xz
|
||||
|
||||
- name: Upload RAUC bundle artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' }}
|
||||
with:
|
||||
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.raucb
|
||||
@@ -368,7 +394,7 @@ jobs:
|
||||
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.raucb
|
||||
|
||||
- name: Upload Open Virtualization Format (OVA) artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' && matrix.board.id == 'ova' }}
|
||||
with:
|
||||
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.ova
|
||||
@@ -376,7 +402,7 @@ jobs:
|
||||
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.ova
|
||||
|
||||
- name: Upload QEMU disk image artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
# Create artifact for ova every time - it's used by the called tests workflow
|
||||
if: ${{ matrix.board.id == 'ova' || (github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' && matrix.board.id == 'generic-aarch64') }}
|
||||
with:
|
||||
@@ -385,7 +411,7 @@ jobs:
|
||||
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.qcow2.xz
|
||||
|
||||
- name: Upload VMware Virtual Machine Disk (VMDK) artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' && (matrix.board.id == 'generic-aarch64' || matrix.board.id == 'ova') }}
|
||||
with:
|
||||
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.vmdk.zip
|
||||
@@ -393,7 +419,7 @@ jobs:
|
||||
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.vmdk.zip
|
||||
|
||||
- name: Upload VirtualBox Virtual Disk Image (VDI) artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' && matrix.board.id == 'ova' }}
|
||||
with:
|
||||
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.vdi.zip
|
||||
@@ -401,7 +427,7 @@ jobs:
|
||||
output/images/haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.vdi.zip
|
||||
|
||||
- name: Upload Virtual Hard Disk v2 (VHDX) artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
if: ${{ github.event_name != 'release' && needs.prepare.outputs.publish_build != 'true' && matrix.board.id == 'ova' }}
|
||||
with:
|
||||
name: haos_${{ matrix.board.id }}-${{ needs.prepare.outputs.version_full }}.vhdx.zip
|
||||
@@ -410,6 +436,7 @@ jobs:
|
||||
|
||||
test:
|
||||
name: Test OS image
|
||||
if: ${{ github.event_name == 'release' || inputs.run_tests == true }}
|
||||
needs: [ build, prepare ]
|
||||
uses: ./.github/workflows/test.yaml
|
||||
with:
|
||||
@@ -432,14 +459,14 @@ jobs:
|
||||
|
||||
bump_version:
|
||||
name: Bump ${{ needs.prepare.outputs.channel }} channel version
|
||||
if: ${{ github.repository == 'home-assistant/operating-system' && needs.prepare.outputs.publish_build == 'true' }}
|
||||
if: ${{ github.repository == 'home-assistant/operating-system' && needs.prepare.outputs.publish_build == 'true' && (needs.prepare.outputs.channel != 'dev' || github.ref == 'refs/heads/dev') }}
|
||||
environment: ${{ needs.prepare.outputs.channel }}
|
||||
needs: [ build, prepare ]
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
|
||||
2
.github/workflows/label-actions.yml
vendored
2
.github/workflows/label-actions.yml
vendored
@@ -14,4 +14,4 @@ jobs:
|
||||
action:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/label-actions@v4.0.1
|
||||
- uses: dessant/label-actions@102faf474a544be75fbaf4df54e73d3c515a0e65 # v4.0.1
|
||||
|
||||
2
.github/workflows/lock.yml
vendored
2
.github/workflows/lock.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
if: github.repository_owner == 'home-assistant'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v5.0.1
|
||||
- uses: dessant/lock-threads@1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771 # v5.0.1
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
issue-inactive-days: "30"
|
||||
|
||||
6
.github/workflows/pr-checks.yml
vendored
6
.github/workflows/pr-checks.yml
vendored
@@ -15,17 +15,17 @@ jobs:
|
||||
python3-flake8
|
||||
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Check Dockerfile
|
||||
uses: brpaz/hadolint-action@v1.5.0
|
||||
uses: hadolint/hadolint-action@2332a7b74a6de0dda2e2221d575162eba76ba5e5 # v3.3.0
|
||||
with:
|
||||
dockerfile: Dockerfile
|
||||
|
||||
- name: Check shell scripts
|
||||
uses: ludeeus/action-shellcheck@2.0.0
|
||||
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # 2.0.0
|
||||
with:
|
||||
ignore_paths: buildroot
|
||||
|
||||
|
||||
2
.github/workflows/release-drafter.yml
vendored
2
.github/workflows/release-drafter.yml
vendored
@@ -13,6 +13,6 @@ jobs:
|
||||
pull-requests: read # for release-drafter/release-drafter to read PR content and labels
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: release-drafter/release-drafter@v6
|
||||
- uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
||||
# - No PRs marked as no-stale or pinned
|
||||
# - No issues marked as no-stale, help-wanted or pinned
|
||||
- name: 90 days stale issues & PRs policy
|
||||
uses: actions/stale@v9.1.0
|
||||
uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-stale: 90
|
||||
|
||||
12
.github/workflows/test.yaml
vendored
12
.github/workflows/test.yaml
vendored
@@ -32,7 +32,7 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
@@ -42,7 +42,7 @@ jobs:
|
||||
sudo apt install -y qemu-system-x86 ovmf
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
|
||||
with:
|
||||
python-version: 3.12
|
||||
|
||||
@@ -57,7 +57,7 @@ jobs:
|
||||
|
||||
- name: Get OS image artifact
|
||||
if: ${{ inputs.use-artifact }}
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
||||
with:
|
||||
name: haos_ova-${{ inputs.version }}.qcow2.xz
|
||||
|
||||
@@ -77,7 +77,7 @@ jobs:
|
||||
./tests/run_tests.sh --durations=0 --durations-min=5.0
|
||||
|
||||
- name: Archive logs
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
if: always()
|
||||
with:
|
||||
name: logs
|
||||
@@ -85,7 +85,7 @@ jobs:
|
||||
tests/lg_logs/**
|
||||
|
||||
- name: Archive JUnit reports
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
if: always()
|
||||
with:
|
||||
name: junit_reports
|
||||
@@ -93,7 +93,7 @@ jobs:
|
||||
tests/junit_reports/*.xml
|
||||
|
||||
- name: Publish test report
|
||||
uses: mikepenz/action-junit-report@v5
|
||||
uses: mikepenz/action-junit-report@5b7ee5a21e8674b695313d769f3cbdfd5d4d53a4 # v6.0.0
|
||||
if: always()
|
||||
with:
|
||||
report_paths: 'tests/junit_reports/*.xml'
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# Documentation
|
||||
|
||||
## Contents
|
||||
Documentation for the Home Assistant Operating System is available at [developers.home-assistant.io/docs/operating-system/][docs].
|
||||
If you want to contribute to this documentation, please refer to the [home-assistant/developers.home-assistant][docs-repo] repository.
|
||||
|
||||
- [Configuration](./configuration.md) - how users can configure HAOS
|
||||
- [Network](./network.md) - approach to networking
|
||||
- [Bluetooth](./bluetooth.md) - approach to bluetooth
|
||||
- [Kernel](./kernel.md) - kernel versions
|
||||
- [Boards](./boards/README.md) - board specific documentation
|
||||
For the list of Linux kernel versions used currently in this branch of Home Assistant Operating System, see [kernel.md](./kernel.md).
|
||||
|
||||
[docs]: https://developers.home-assistant.io/docs/operating-system/
|
||||
[docs-repo]: https://github.com/home-assistant/developers.home-assistant/
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
# Bluetooth
|
||||
|
||||
We support `bluetoothctl` on the host. Later we want to support Bluetooth through the UI.
|
||||
All pairs and settings are persistent over reboots and updates.
|
||||
|
||||
If you want to setup Bluetooth on the host, use the `bluetoothctl` utility.
|
||||
|
||||
## Scan devices
|
||||
|
||||
```
|
||||
[bluetooth]# scan on
|
||||
```
|
||||
@@ -1,62 +0,0 @@
|
||||
# Boards
|
||||
|
||||
## Overview
|
||||
|
||||
The following boards/devices are supported:
|
||||
|
||||
- Nabu Casa
|
||||
- [Home Assistant Green](https://www.home-assistant.io/green/)
|
||||
- [Home Assistant Yellow](https://www.home-assistant.io/yellow/) (based custom carrier board and powered by a Raspberry Pi 4 Compute Module)
|
||||
- [Home Assistant Blue](https://www.home-assistant.io/blue/) (based on ODROID-N2+)
|
||||
- Raspberry Pi
|
||||
- Pi 5 ([4 GB](https://www.raspberrypi.com/products/raspberry-pi-5/?variant=raspberry-pi-5-4gb) and [8 GB](https://www.raspberrypi.com/products/raspberry-pi-5/?variant=raspberry-pi-5-8gb) model) 64-bit
|
||||
- Pi 4 Model B ([1 GB](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/?variant=raspberry-pi-4-model-b-1gb), [2 GB](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/?variant=raspberry-pi-4-model-b-2gb), [4 GB](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/?variant=raspberry-pi-4-model-b-4gb) and [8 GB](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/?variant=raspberry-pi-4-model-b-8gb) model) 32-bit or 64-bit (recommended)
|
||||
- [Pi 3 Model B](https://www.raspberrypi.com/products/raspberry-pi-3-model-b/) and [B+](https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/) 32-bit or 64-bit (recommended)
|
||||
- [Pi 2](https://www.raspberrypi.com/products/raspberry-pi-2-model-b/) (not recommended)
|
||||
- Hardkernel
|
||||
- [ODROID-C2](https://www.hardkernel.com/shop/odroid-c2/) (discontinued)
|
||||
- [ODROID-C4](https://www.hardkernel.com/shop/odroid-c4/)
|
||||
- [ODROID-M1](https://www.hardkernel.com/shop/odroid-m1/)
|
||||
- ODROID-M1S [4 GB](https://www.hardkernel.com/shop/odroid-m1s-with-4gbyte-ram/) or [8 GB](https://www.hardkernel.com/shop/odroid-m1s-with-8gbyte-ram/)
|
||||
- [ODROID-N2](https://www.hardkernel.com/shop/odroid-n2/) (discontinued)
|
||||
- ODROID-N2+ [2 GB](https://www.hardkernel.com/shop/odroid-n2-with-2gbyte-ram-2/) or [4 GB](https://www.hardkernel.com/shop/odroid-n2-with-4gbyte-ram-2/)
|
||||
- [ODROID-XU4](https://www.hardkernel.com/shop/odroid-xu4-special-price/)
|
||||
- Asus
|
||||
- [Tinker Board](https://tinker-board.asus.com/product/tinker-board.html)
|
||||
- Generic x86-64 (UEFI, not suited for virtualization)
|
||||
- [Intel NUC5CPYH](https://www.intel.com/content/www/us/en/products/sku/85254/intel-nuc-kit-nuc5cpyh/specifications.html)
|
||||
- [Intel NUC6CAYH](https://www.intel.com/content/www/us/en/products/sku/95062/intel-nuc-kit-nuc6cayh/specifications.html)
|
||||
- [Intel NUC10I3FNK2](https://www.intel.com/content/www/us/en/products/sku/195503/intel-nuc-10-performance-kit-nuc10i3fnk/specifications.html)
|
||||
- [Gigabyte GB-BPCE-3455](https://www.gigabyte.com/Mini-PcBarebone/GB-BPCE-3455-rev-10/sp#sp)
|
||||
- Computers supporting x86-64 architecture and UEFI boot should generally work
|
||||
- Virtual appliance (x86_64/UEFI):
|
||||
- VMDK
|
||||
- OVA ?
|
||||
- VHDX ?
|
||||
- VDI ?
|
||||
- QCOW2 ?
|
||||
|
||||
Notes:
|
||||
- see ? above: are these currently supported? see ova documentation which explains issues with previous OVA distribution)
|
||||
|
||||
## Board specifics
|
||||
|
||||
|Board|Build|Config|Docs|
|
||||
|-----|----|------|----|
|
||||
|Green |`make green` |[green](../../buildroot-external/configs/green_defconfig)|-|
|
||||
|Yellow |`make yellow` |[yellow](../../buildroot-external/configs/yellow_defconfig)|-|
|
||||
|Pi5 64-bit |`make rpi5_64` |[rpi5_64](../../buildroot-external/configs/rpi5_64_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||
|Pi4B 64-bit |`make rpi4_64` |[rpi4_64](../../buildroot-external/configs/rpi4_64_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||
|Pi4B 32-bit |`make rpi4` |[rpi4](../../buildroot-external/configs/rpi4_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||
|Pi3B 64-bit |`make rpi3_64` |[rpi3_64](../../buildroot-external/configs/rpi3_64_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||
|Pi3B 32-bit |`make rpi3` |[rpi3](../../buildroot-external/configs/rpi3_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||
|Pi2 |`make rpi2` |[rpi2](../../buildroot-external/configs/rpi2_defconfig)|[raspberrypi](./raspberrypi/)|
|
||||
|ODROID-C2 |`make odroid_c2` |[odroid_c2](../../buildroot-external/configs/odroid_c2_defconfig)|[hardkernel](./hardkernel/)|
|
||||
|ODROID-C4 |`make odroid_c4` |[odroid_c4](../../buildroot-external/configs/odroid_c4_defconfig)|[hardkernel](./hardkernel/)|
|
||||
|ODROID-M1 |`make odroid_m1` |[odroid_m1](../../buildroot-external/configs/odroid_m1_defconfig)|[hardkernel](./hardkernel/)|
|
||||
|ODROID-M1S |`make odroid_m1s` |[odroid_m1s](../../buildroot-external/configs/odroid_m1s_defconfig)|[hardkernel](./hardkernel/)|
|
||||
|ODROID-N2/N2+ |`make odroid_n2` |[odroid_n2](../../buildroot-external/configs/odroid_n2_defconfig)|[hardkernel](./hardkernel/)|
|
||||
|ODROID-XU4 |`make odroid_xu4` |[odroid_xu4](../../buildroot-external/configs/odroid_xu4_defconfig)|[hardkernel](./hardkernel/)|
|
||||
|Tinker Board |`make tinker` |[tinker](../../buildroot-external/configs/tinker_defconfig)|[asus](./asus/)|
|
||||
|Generic x86-64|`make generic_x86_64`|[generic_x86_64](../../buildroot-external/configs/generic_x86_64_defconfig)|[generic-x86-64](./generic-x86-64/)|
|
||||
|OVA |`make ova` |[ova](../../buildroot-external/configs/ova_defconfig)|[ova](./ova/)|
|
||||
@@ -1,31 +0,0 @@
|
||||
# Tinker Board
|
||||
|
||||
## Supported Hardware
|
||||
|
||||
| Device | Release Date | Support | Config |
|
||||
|----------------|---------------|---------|----------|
|
||||
| Tinker RK3288 | April 2017 | yes | [tinker](../../../buildroot-external/configs/tinker_defconfig) |
|
||||
| Tinker S RK3288| January 2018 | yes | [tinker](../../../buildroot-external/configs/tinker_defconfig) |
|
||||
| Tinker Edge T | November 2019 | no? | |
|
||||
| Tinker Edge R | November 2019 | no? | |
|
||||
|
||||
## eMMC
|
||||
|
||||
eMMC support is provided with the same image. Just flash the image to the eMMC by connecting your Tinker Board S to your PC via Micro-USB. Refer to the Tinkerboard documentation how-to flash using Micro-USB and UMS.
|
||||
|
||||
The Home Assistant OS provided U-Boot does support UMS as well,
|
||||
however manual intervention is necessary:
|
||||
|
||||
1. Set the jumper between Micro-USB and HDMI the maskrom mode
|
||||
2. Insert SD card and connect the board via Micro-USB to your PC
|
||||
3. Continusly press Ctrl+C to interrupt boot
|
||||
4. Set the jumper back to the park position
|
||||
5. Start UMS using:
|
||||
```
|
||||
ums 0 mmc 0
|
||||
```
|
||||
6. A mass storage device should appear. Flash Home Assistant OS to it.
|
||||
|
||||
## Serial console
|
||||
|
||||
To access the terminal over serial console, add `console=ttyS2,115200` to `cmdline.txt`. GPIO pins are: 34 = GND / 32 = UART TXD / 33 = UART RXD.
|
||||
@@ -1,36 +0,0 @@
|
||||
# Generic aarch64
|
||||
|
||||
## Supported Hardware
|
||||
|
||||
This board configuration aims to support most aarch64 systems with UEFI boot
|
||||
Hardware it has been tested with is listed below.
|
||||
|
||||
## Tested Hardware
|
||||
|
||||
| Device | Release Date | Support | Config |
|
||||
|-----------------------|--------------|---------|-------------|
|
||||
| QEMU | QEMU | yes | [generic_aarch64](../../../buildroot-external/configs/generic_aarch64_defconfig) |
|
||||
|
||||
|
||||
## Requirements
|
||||
|
||||
- aarch64 support
|
||||
- UEFI boot
|
||||
|
||||
## Wifi
|
||||
|
||||
WiFi is untested.
|
||||
|
||||
## Bluetooth
|
||||
|
||||
Bluetooth is untested.
|
||||
|
||||
## Installation
|
||||
|
||||
Make sure secure boot is disabled in the UEFI BIOS settings.
|
||||
|
||||
Currently there is no shiny installation method. Checklist:
|
||||
- Boot PC to live environment using PXE or USB
|
||||
- Copy or download the Home Assistant OS image into your live environment
|
||||
- unxz the image and dd to the local hard disk
|
||||
- Reboot
|
||||
@@ -1,62 +0,0 @@
|
||||
# Generic x86-64
|
||||
|
||||
## Supported Hardware
|
||||
|
||||
This board configuration aims to support most x86-64 systems with UEFI boot. The
|
||||
main aim is to support Intel NUC mini PCs and similar systems. Hardware it has
|
||||
been tested with is listed below.
|
||||
|
||||
## Tested Hardware
|
||||
|
||||
| Device | Release Date | Support | Config |
|
||||
|-----------------------|--------------|---------|-------------|
|
||||
| Intel NUC5CPYH | Q3 2015 | yes | [generic_x86_64](../../../buildroot-external/configs/generic_x86_64_defconfig) |
|
||||
| Intel NUC6CAYH | Q4 2016 | yes | [generic_x86_64](../../../buildroot-external/configs/generic_x86_64_defconfig) |
|
||||
| Intel NUC6CAYS | Q4 2016 | yes | [generic_x86_64](../../../buildroot-external/configs/generic_x86_64_defconfig) |
|
||||
| Intel NUC7i3DNHE | Q3 2017 | yes | [generic_x86_64](../../../buildroot-external/configs/generic_x86_64_defconfig) |
|
||||
| Intel NUC10i3FNK2 | Q4 2019 | yes | [generic_x86_64](../../../buildroot-external/configs/generic_x86_64_defconfig) |
|
||||
| Gigabyte GB-BPCE-3455 | 2017 | yes* | [generic_x86_64](../../../buildroot-external/configs/generic_x86_64_defconfig) |
|
||||
|
||||
\* needs 'nomodeset' in cmdline.txt if you want a console
|
||||
|
||||
|
||||
## Requirements
|
||||
|
||||
- x86-64 support
|
||||
- UEFI boot
|
||||
- SATA/AHCI or eMMC storage
|
||||
- Supported NIC:
|
||||
- Intel Gigabit NIC (e1000, igb - via Linux mainline)
|
||||
- Intel PCIe Gigabit NIC (e1000e - via out-of-tree module in *buildroot-external/package/intel-e1000e*)
|
||||
- Realtek Gigabit NIC (r8169)
|
||||
- Intel Wireless Wifi 802.11ac (iwlwifi, see below)
|
||||
|
||||
## Wifi
|
||||
|
||||
The following cards are supported:
|
||||
|
||||
- Intel Wireless 3160
|
||||
- Intel Wireless 7260
|
||||
- Intel Wireless 7265
|
||||
- Intel Wireless-AC 3165
|
||||
- Intel Wireless-AC 3168
|
||||
- Intel Wireless-AC 8260
|
||||
- Intel Wireless-AC 8265
|
||||
- Intel Wireless-AC 9260
|
||||
- Intel Wireless-AC 9461
|
||||
- Intel Wireless-AC 9462
|
||||
- Intel Wireless-AC 9560
|
||||
|
||||
## Bluetooth
|
||||
|
||||
Bluetooth integrated in Intel Wireless cards working OK, other options untested.
|
||||
|
||||
## Installation
|
||||
|
||||
Make sure secure boot is disabled in the UEFI BIOS settings.
|
||||
|
||||
Currently there is no shiny installation method. Checklist:
|
||||
- Boot PC to live environment using PXE or USB
|
||||
- Copy or download the Home Assistant OS image into your live environment
|
||||
- unxz the image and dd to the local hard disk
|
||||
- Reboot
|
||||
@@ -1,28 +0,0 @@
|
||||
# ODROID
|
||||
|
||||
## Supported Hardware
|
||||
|
||||
| Device | Release Date | Support | Config |
|
||||
|----------------|---------------|--------------|-----------|
|
||||
| ODROID-C2 | 2016 | yes | [odroid_c2](../../../buildroot-external/configs/odroid_c2_defconfig) |
|
||||
| ODROID-C4 | 2020 | yes | [odroid_c4](../../../buildroot-external/configs/odroid_c4_defconfig) |
|
||||
| ODROID-M1 | 2022 | yes | [odroid_m1](../../../buildroot-external/configs/odroid_m1_defconfig) |
|
||||
| ODROID-M1S | 2023 | yes | [odroid_m1s](../../../buildroot-external/configs/odroid_m1s_defconfig)|
|
||||
| ODROID-N2 | 2019 | yes | [odroid_n2](../../../buildroot-external/configs/odroid_n2_defconfig) |
|
||||
| ODROID-XU4 | 2015 | yes | [odroid_xu4](../../../buildroot-external/configs/odroid_xu4_defconfig)|
|
||||
|
||||
See separate documentation for each board.
|
||||
|
||||
## Connectivity devices
|
||||
|
||||
### Wi-Fi
|
||||
|
||||
The following devices have been tested on Home Assistant OS 5.8:
|
||||
|
||||
- [Bluetooth Module 2](https://www.hardkernel.com/shop/bluetooth-module-2/)
|
||||
- [WiFi Module 3](https://www.hardkernel.com/shop/wifi-module-3/)
|
||||
|
||||
The [WiFi Module 5A](https://www.hardkernel.com/shop/wifi-module-5a/) is not
|
||||
recommended as there is no upstream driver support available. The driver
|
||||
currently compatible with recent Linux kernel version seems to have issues
|
||||
connecting to 5GHz networks.
|
||||
@@ -1,22 +0,0 @@
|
||||
# ODROID-C2
|
||||
|
||||
## eMMC
|
||||
|
||||
eMMC support is provided transparently. Just flash the image to the eMMC board as you would an SD card.
|
||||
|
||||
## Console
|
||||
|
||||
By default, console access is granted over the serial header and over HDMI. Certain startup messages will only appear on the serial console by default. To show the messages on the HDMI console instead, swap the order of the two consoles in the `cmdline.txt` file on the boot partition. You can also delete the AML0 console if you don't plan on using the serial adapter.
|
||||
eg. `console=ttyAML0,115200n8 console=tty0`
|
||||
|
||||
## USB
|
||||
|
||||
A long-standing kernel bug currently results in some odd behavior. To use the USB, a device must be plugged into one of the USB ports at hard boot. If all devices are removed from the USB ports, the USB will cease to function until a reboot.
|
||||
|
||||
### OTG
|
||||
|
||||
The OTG USB is untested.
|
||||
|
||||
## GPIO
|
||||
|
||||
Refer to [the odroid wiki](https://wiki.odroid.com/odroid-c2/hardware/expansion_connectors).
|
||||
@@ -1,16 +0,0 @@
|
||||
# ODROID-C4
|
||||
|
||||
## Experimental
|
||||
|
||||
ODROID-C4 support is based heavily on the Odroid-C2 and N2 configurations. Given the similarity of the SoCs, as well as the comparable level of support in the Linux kernel, the C4 should hopefully present few surprises. However, Home Assistant support should be regarded as experimental.
|
||||
|
||||
Please also refer to the documentation pages for the [ODROID-C2](./odroid-c2.md) and [Odroid-N2](./odroid-n2.md), as some of that information may apply to the C4 as well.
|
||||
|
||||
Common C4 issues that have been specifically tested and appear to be working:
|
||||
- boot from SD
|
||||
- boot from eMMC
|
||||
- MAC address obtained from eFuse
|
||||
|
||||
## GPIO
|
||||
|
||||
Refer to [the odroid wiki](https://wiki.odroid.com/odroid-c4/hardware/expansion_connectors).
|
||||
@@ -1,50 +0,0 @@
|
||||
# ODROID-M1
|
||||
|
||||
Home Assistant OS 10 and newer support the ODROID-M1 board.
|
||||
|
||||
## SD-card
|
||||
|
||||
SD-card boot is supported via on-board bootloader (SPL) or recovery button.
|
||||
|
||||
## eMMC
|
||||
|
||||
eMMC boot via on-board bootloader requires a newer version of Petitboot
|
||||
(spiboot 20230328 or later). To install the latest version download the SPI boot image
|
||||
from [linuxfactory.or.kr][1] as follows:
|
||||
|
||||
1. Download `spiupdate_odroidm1_20240415.img.xz`
|
||||
2. Use balenaEtcher or another tool to flash the updater onto an SD card
|
||||
3. Download `spiboot-20240109.img`
|
||||
4. Rename the `spiboot-20240109.img` file to`spiboot.img`.
|
||||
5. Paste the `spiboot.img` file onto the FAT partition of that same SD card.
|
||||
6. Plug-in that SD card to your ODROID-M1. Petitboot will update itself, you can verify the progress on the HDMI output.
|
||||
7. If you see the version 20240109 in the top left corner, the installation was successful.\
|
||||
If you see any other version there, the installation failed.
|
||||
|
||||
Once Petitboot is updated you can flash Home Assistant OS directly onto an eMMC.
|
||||
|
||||
## NVMe
|
||||
|
||||
Booting directly from NVMe is not supported. The NVMe card can be used as a data disk.
|
||||
|
||||
## Technical notes on boot flow
|
||||
|
||||
The Home Assistant OS image is bootable by the SoC directly. This means that no help
|
||||
from the Hardkernel provided and pre-installed bootloader Petitboot is necessary.
|
||||
However, the ODROID-M1 automatically boots from internal SPI. To boot
|
||||
directly off the SD-card or eMMC you need to press the recovery button.
|
||||
|
||||
The SPI flashed U-Boot SPL tries searches for an U-Boot binary on the SD-card
|
||||
(and from eMMC with Petitboot 20230328 and later). This mechanism allows you to
|
||||
boot the Home Assistant OS U-Boot without pressing the recovery button.
|
||||
|
||||
## Console
|
||||
|
||||
By default, console access is available on the serial header (CON1) and on HDMI.
|
||||
The serial console's baudrate is 1500000 by default.
|
||||
|
||||
The systemd startup messages will only appear on the serial console by default.
|
||||
To show the messages on the HDMI console instead, add the console manually
|
||||
to the `cmdline.txt` file on the boot partition (e.g. `console=tty0`).
|
||||
|
||||
[1]: http://ppa.linuxfactory.or.kr/images/petitboot/odroidm1/
|
||||
@@ -1,58 +0,0 @@
|
||||
# ODROID-M1S
|
||||
|
||||
Home Assistant OS 12 and newer support the ODROID-M1S board.
|
||||
|
||||
## SD-card
|
||||
|
||||
ODROID-M1S can boot HAOS directly from an SD card, as it has higher priority than the system on the eMMC. Simply flash the image to the SD card using your favorite tool and insert it to the micro SD slot on the board. This works even when the eMMC is wiped, or when it contains the factory-default U-Boot SPL loader, which is still able to load U-Boot provided in the HAOS image. In the second case, however, if the SD card fails to probe (e.g. due to a hardware failure), the system on the eMMC may be booted instead of HAOS.
|
||||
|
||||
## eMMC
|
||||
|
||||
HAOS can be installed directly to the eMMC using a special boot image, to do that:
|
||||
|
||||
1. Download the _UMS Utility_ image: [`ODROID-M1S_EMMC2UMS.img`][1]. The _UMS Utility_ is a special image that switches ODROID-M1S to USB Mass Storage device.
|
||||
2. Use balenaEtcher or another tool to flash the _UMS utility_ onto an SD card.
|
||||
3. Plug-in that SD card to your ODROID-M1S and boot it. Connect your PC to the Micro USB OTG port.
|
||||
4. The eMMC will show as a drive on your PC and you can directly flash the HAOS image with balenaEther.
|
||||
|
||||
Installing HAOS replaces the firmware and SPL on the eMMC with the mainline version provided by HAOS. As a result, it is not possible to use the SD card with the EMMC2UMS image anymore, because the mainline SPL is not compatible with U-Boot in the EMMC2UMS image at this time (February 2024). This does not pose any problem for standard use, just makes it more complicated in case you want to return to the Hardkernel-provided OS.
|
||||
|
||||
A reliable way of reflashing the eMMC in this case is to use HAOS booted from an SD card. To do that, insert the SD card with HAOS to the micro SD slot and plug the board in. Once the device boots to the HA CLI, enter `login` to enter the root shell and use `curl` to download an image and `dd` it to the eMMC block device:
|
||||
|
||||
```sh
|
||||
curl https://dn.odroid.com/RK3566/ODROID-M1S/Installer/ODROID-M1S_EMMC2UMS.img | dd of=/dev/mmcblk0
|
||||
```
|
||||
|
||||
This way the device will start in the UMS mode on the next boot with the SD card removed. Alternatively you can use the [Hardkernel installer image][2] directly instead of the EMMC2UMS image.
|
||||
|
||||
## NVMe
|
||||
|
||||
Booting directly from NVMe is not supported. The NVMe card can be used as a data disk.
|
||||
|
||||
## Technical notes on boot flow
|
||||
|
||||
The Home Assistant OS image is bootable by the SoC directly. Refer to the [boot sequence documentation][3] for the details on what part of the boot is executed from the eMMC and what from the SD card. The steps documented above should however cover all scenarios that a standard user may encounter during usage.
|
||||
|
||||
## Console
|
||||
|
||||
By default, console access is available on the serial header (UART) and on HDMI.
|
||||
The serial console's baudrate is 1500000 by default.
|
||||
|
||||
The systemd startup messages will only appear on the serial console by default.
|
||||
To show the messages on the HDMI console instead, add the console manually
|
||||
to the `cmdline.txt` file on the boot partition (e.g. `console=tty0`).
|
||||
|
||||
## GPIO
|
||||
|
||||
Odroid-M1S introduces a new 14pin expansion header. Refer to [the ODROID wiki][4].
|
||||
At this point not all functionality is supported by the upstream kernel used by Home Assistant OS.
|
||||
Supported modules include:
|
||||
- UPS
|
||||
- Internal USB
|
||||
- Mini IO board (partial support)
|
||||
|
||||
|
||||
[1]: https://dn.odroid.com/RK3566/ODROID-M1S/Installer/ODROID-M1S_EMMC2UMS.img
|
||||
[2]: https://wiki.odroid.com/odroid-m1s/getting_started/os_installation_guide#user_installer
|
||||
[3]: https://wiki.odroid.com/odroid-m1s/board_support/boot_sequence
|
||||
[4]: https://wiki.odroid.com/odroid-m1s/hardware/expansion_connectors
|
||||
@@ -1,18 +0,0 @@
|
||||
# ODROID-N2
|
||||
|
||||
## eMMC
|
||||
|
||||
eMMC support is provided transparently. Just flash the image to the eMMC board as you would an SD card.
|
||||
|
||||
## Console
|
||||
|
||||
By default, console access is granted over the serial header and over HDMI. Certain startup messages will only appear on the serial console by default. To show the messages on the HDMI console instead, swap the order of the two consoles in the `cmdline.txt` file on the boot partition. You can also delete the AML0 console if you don't plan on using the serial adapter.
|
||||
eg. `console=ttyAML0,115200n8 console=tty0`
|
||||
|
||||
## GPIO
|
||||
|
||||
Refer to [the odroid wiki](https://wiki.odroid.com/odroid-n2/hardware/expansion_connectors).
|
||||
At this point not all functionality is supported by the upstream kernel used
|
||||
by Home Assistant OS.
|
||||
|
||||
The GPIO on pin 11 is used as a low active power button input.
|
||||
@@ -1,29 +0,0 @@
|
||||
# ODROID-XU4
|
||||
|
||||
## eMMC
|
||||
|
||||
The ODROID XU4 uses the eMMC boot partition to boot from. Typically eMMC readers can't write to this eMMC boot partition. There are a couple of possibilities:
|
||||
|
||||
1. **Working** e.g. the eMMC already had a working image before flashing HassOS:
|
||||
- It will be booting to U-Boot (but no further).
|
||||
- If you have the serial adapter, you should be able to enter `distro_bootcmd` at the uboot prompt to continue booting.
|
||||
- If not, flash the HassOS image to an SD card and boot off that temporarily (while the eMMC is also plugged in).
|
||||
- Once booted, login at the prompts and then enter `dd if=/dev/mmcblk0 of=/dev/mmcblk0boot0 bs=512 skip=63 seek=62 count=1440` at the linux prompt.
|
||||
- Reboot with eMMC (don't forget to flip the boot switch to eMMC)
|
||||
2. **Not Working** e.g. a clean/wiped/corruped eMMC boot partition:
|
||||
- You'll need to follow [Hardkernel's instructions](https://forum.odroid.com/viewtopic.php?f=53&t=6173) to get a working boot sector. Then flash HassOS and follow instructions above.
|
||||
- Alternatively, you can try flash HassOS to both an SD and eMMC, then boot off the SD with the eMMC also plugged in, then run `dd if=/dev/mmcblk1 of=/dev/mmcblk0boot0 bs=512 skip=1 seek=0 count=16381` at the Linux prompt. Note that this is untested, but in theory should work..
|
||||
|
||||
If you are getting permissions issues when using the dd command, try disabling RO:
|
||||
`echo 0 > /sys/block/mmcblk0boot0/force_ro`
|
||||
to re-enable after running dd:
|
||||
`echo 1 > /sys/block/mmcblk0boot0/force_ro`
|
||||
|
||||
## Console
|
||||
|
||||
By default, console access is granted over the serial header and over HDMI. Certain startup messages will only appear on the serial console by default. To show the messages on the HDMI console instead, swap the order of the two consoles in the `cmdline.txt` file on the boot partition. You can also delete the SAC2 console if you don't plan on using the serial adapter.
|
||||
eg. `console=tty1 console=ttySAC2,115200`
|
||||
|
||||
## GPIO
|
||||
|
||||
Refer to [the odroid wiki](https://wiki.odroid.com/odroid-xu4/hardware/expansion_connectors).
|
||||
@@ -1,22 +0,0 @@
|
||||
# Virtual Machine
|
||||
|
||||
## Supported Hypervisors
|
||||
|
||||
| Hypervisor | Vendor | Support | Config |
|
||||
|---------------------|-----------|-----------------|--------------------|
|
||||
| HyperV | Microsoft | yes, via VMDK | [ova](../../../buildroot-external/configs/ova_defconfig) |
|
||||
| VirtualBox | Oracle | yes, via VMDK | [ova](../../../buildroot-external/configs/ova_defconfig) |
|
||||
| VMware | VMware | yes, via VMDK | [ova](../../../buildroot-external/configs/ova_defconfig) |
|
||||
|
||||
Currently we only publish a VMDK virtual disk due to issues with our previous OVA distribution. We are investigating our options to bring back the OVA distribution, however, the VMDK works for the hypervisors listed above.
|
||||
|
||||
## Requirements
|
||||
|
||||
Using this VMDK in a virtual machine requires the following:
|
||||
|
||||
- Operating system: Other 4.x or later Linux (64-bit)
|
||||
- Enabled support for UEFI boot
|
||||
- SATA disk controller
|
||||
- Minimal of 1GB RAM
|
||||
- At least 2x vCPU
|
||||
- An assigned network
|
||||
@@ -1,50 +0,0 @@
|
||||
# Raspberry PI
|
||||
|
||||
## Supported Hardware
|
||||
|
||||
| Device | Release Date | Support | Config |
|
||||
|---------------------|---------------|-----------------|--------------------|
|
||||
| Raspberry Pi 2 B |2015 | not recommended | [rpi2](../../../buildroot-external/configs/rpi2_defconfig) |
|
||||
| Raspberry Pi 3 B/B+ |2016/2018 | yes | [rpi3](../../../buildroot-external/configs/rpi3_defconfig) / [rpi3_64](../../../buildroot-external/configs/rpi3_64_defconfig) |
|
||||
| Raspberry Pi 4 B |2019 | yes | [rpi4](../../../buildroot-external/configs/rpi4_defconfig) / [rpi4_64](../../../buildroot-external/configs/rpi4_64_defconfig) |
|
||||
| Raspberry Pi 5 |2023 | yes (beta) | [rpi5_64](../../../buildroot-external/configs/rpi5_64_defconfig) |
|
||||
|
||||
## Serial console
|
||||
|
||||
For access to terminal over serial console, add `console=ttyAMA0,115200` to `cmdline.txt` and `enable_uart=1`, `dtoverlay=pi3-disable-bt` into `config.txt`. GPIO pins are: 6 = GND / 8 = UART TXD / 10 = UART RXD.
|
||||
|
||||
## I2C
|
||||
|
||||
Add `dtparam=i2c1=on` and `dtparam=i2c_arm=on` to `config.txt`. After that we create a module file on host with [config usb stick][config] or direct into `/etc/modules-load.d`.
|
||||
|
||||
rpi-i2c.conf:
|
||||
```
|
||||
i2c-dev
|
||||
i2c-bcm2708
|
||||
```
|
||||
|
||||
## USB Boot
|
||||
|
||||
USB mass storage boot is available on Raspberry Pi 4 (64-bit only), 3B, 3B+, 3A+, and 2B v1.2.
|
||||
|
||||
For Raspberry 3B, 3A+ and 2B v1.2, to enable USB boot, add `program_usb_boot_mode=1` into `config.txt`. Note that this **permanently** alters the one-time programmable memory of the device.
|
||||
|
||||
For Raspberry 4
|
||||
|
||||
* Make sure to update the bootloader to a stable release supporting USB mass storage boot (see [bcm2711_bootloader_config.md](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md#usbmassstorageboot)).
|
||||
* If no SD card is used add `sd_poll_once=on` to `dtparam` in `config.txt` (comma separated). This gets rid of `mmc0: timeout waiting for hardware interrupt` kernel errors.
|
||||
* If install still fails, then your SSD likely needs quirks enabled to work correctly (see [Finding the VID and PID of your USB SSD](https://www.raspberrypi.org/forums/viewtopic.php?t=245931)). Once you find your adapter's ID, add the quirks parameter in `cmdline.txt`.
|
||||
|
||||
For more information see [RaspberryPi](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md).
|
||||
|
||||
### Caveats
|
||||
|
||||
* All bootable SD cards must be removed.
|
||||
* Boot time can be significantly longer with USB. This is due to the boot process first attempting to boot from SD card, failing, and resorting to USB.
|
||||
* Many USB drives simply do not work for boot. This is likely due to minimal driver support in uboot and will not be fixed. If you can't get it to boot on one drive, try a different brand/model. SanDisk Cruzer drives seem to have a higher rate of issues.
|
||||
|
||||
## Tweaks
|
||||
|
||||
If you don't need bluetooth, disabled it with add `dtoverlay=pi3-disable-bt` into `config.txt`.
|
||||
|
||||
[config]: ../../configuration.md#automatic
|
||||
@@ -1,63 +0,0 @@
|
||||
# Configuration
|
||||
|
||||
## Automatic
|
||||
|
||||
You can use an USB drive with HassOS to configure network options, SSH access to the host and to install updates.
|
||||
Format a USB stick with FAT32/EXT4/NTFS and name it `CONFIG` (in all capitals). Alternative you can create a `CONFIG` folder inside the `boot` partition. Use the following directory structure within the USB drive:
|
||||
|
||||
```text
|
||||
network/
|
||||
modules/
|
||||
modprobe/
|
||||
udev/
|
||||
authorized_keys
|
||||
timesyncd.conf
|
||||
hassos-xy.raucb
|
||||
```
|
||||
|
||||
- The `network` folder can contain any kind of NetworkManager connection files. For more information see [Network][network.md].
|
||||
- The `modules` folder is for modules-load configuration files.
|
||||
- The `modprobe` folder is for modules configuration files (/etc/modprobe.d)
|
||||
- The `udev` folder is for udev rules files.
|
||||
- The `authorized_keys` file activates debug SSH access on port `22222`. See [Debugging Home Assistant][debug-homeassistant].
|
||||
- The `timesyncd.conf` file allow you to set different NTP servers. HassOS won't boot without correct working time servers!
|
||||
- The `hassos-*.raucb` file is a firmware OTA update which will be installed. These can be found on on the [release][hassos-release] page.
|
||||
|
||||
Text files that are on USB stick must have Unix (LF) end of line characters. If you create USB stick on Windows machine, be sure to use Notepad++, Visual Studio Code or any other editor, that supports different line endings. In Notepad++ LF EOL can be enabled with setting `Edit -> EOL Conversion -> Unix (LF)`.
|
||||
|
||||
You can put this USB stick into the device and it will be read on startup and files written to the correct places. You can also trigger this process later using `ha os import` from the CLI or by calling `systemctl restart hassos-config` on the OS shell. *The USB Stick just needs to be inserted to the device during this setup process and can be removed afterwards.*
|
||||
|
||||
## Local
|
||||
|
||||
### Bootargs
|
||||
|
||||
You can edit or create a `cmdline.txt` in your boot partition. That will be read from the bootloader.
|
||||
|
||||
### Kernel-Module
|
||||
|
||||
The kernel module folder `/etc/modules-load.d` is persistent and you can add your configuration files there. See [Systemd modules load][systemd-modules]. You can add the modules configuration files in `/etc/modprobe.d` that is also persistent.
|
||||
|
||||
### Udev rules
|
||||
|
||||
The udev rules folder `/etc/udev/rules.d` is persistent and you can add your configuration files there.
|
||||
|
||||
### Network
|
||||
|
||||
You can manual add, edit or remove connections configurations from `/etc/NetworkManager/system-connections`.
|
||||
|
||||
### NTP
|
||||
|
||||
You can manual edit the systemd timesync file on `/etc/systemd/timesyncd.conf`.
|
||||
|
||||
Our default NTP configuration look like:
|
||||
|
||||
```
|
||||
[Time]
|
||||
NTP=time.cloudflare.com
|
||||
FallbackNTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org
|
||||
```
|
||||
|
||||
[systemd-modules]: https://www.freedesktop.org/software/systemd/man/modules-load.d.html
|
||||
[network.md]: network.md
|
||||
[hassos-release]: https://github.com/home-assistant/hassos/releases/
|
||||
[debug-homeassistant]: https://developers.home-assistant.io/docs/operating-system/debugging
|
||||
@@ -3,22 +3,22 @@
|
||||
|
||||
| Board | Version |
|
||||
|-------|---------|
|
||||
| Open Virtual Appliance | 6.12.41 |
|
||||
| Raspberry Pi | 6.12.34 |
|
||||
| Raspberry Pi 0-W | 6.12.34 |
|
||||
| Raspberry Pi 2 | 6.12.34 |
|
||||
| Raspberry Pi 3 | 6.12.34 |
|
||||
| Raspberry Pi 4 | 6.12.34 |
|
||||
| Raspberry Pi 5 | 6.12.34 |
|
||||
| Home Assistant Yellow | 6.12.34 |
|
||||
| Home Assistant Green | 6.12.41 |
|
||||
| Tinker Board | 6.12.41 |
|
||||
| ODROID-C2 | 6.12.41 |
|
||||
| ODROID-C4 | 6.12.41 |
|
||||
| ODROID-M1 | 6.12.41 |
|
||||
| ODROID-M1S | 6.12.41 |
|
||||
| ODROID-N2 | 6.12.41 |
|
||||
| ODROID-XU4 | 6.12.41 |
|
||||
| Generic aarch64 | 6.12.41 |
|
||||
| Generic x86-64 | 6.12.41 |
|
||||
| Khadas VIM3 | 6.12.41 |
|
||||
| Open Virtual Appliance | 6.12.54 |
|
||||
| Raspberry Pi | 6.12.47 |
|
||||
| Raspberry Pi 0-W | 6.12.47 |
|
||||
| Raspberry Pi 2 | 6.12.47 |
|
||||
| Raspberry Pi 3 | 6.12.47 |
|
||||
| Raspberry Pi 4 | 6.12.47 |
|
||||
| Raspberry Pi 5 | 6.12.47 |
|
||||
| Home Assistant Yellow | 6.12.47 |
|
||||
| Home Assistant Green | 6.12.54 |
|
||||
| Tinker Board | 6.12.54 |
|
||||
| ODROID-C2 | 6.12.54 |
|
||||
| ODROID-C4 | 6.12.54 |
|
||||
| ODROID-M1 | 6.12.54 |
|
||||
| ODROID-M1S | 6.12.54 |
|
||||
| ODROID-N2 | 6.12.54 |
|
||||
| ODROID-XU4 | 6.12.54 |
|
||||
| Generic aarch64 | 6.12.54 |
|
||||
| Generic x86-64 | 6.12.54 |
|
||||
| Khadas VIM3 | 6.12.54 |
|
||||
|
||||
@@ -1,193 +0,0 @@
|
||||
# Network
|
||||
|
||||
Home Assistant Operating System uses NetworkManager to control the host network.
|
||||
|
||||
## Configure network
|
||||
|
||||
By default the device will be in DHCP state.
|
||||
|
||||
Basic network settings can be set through the Supervisor frontend in the System
|
||||
tab. Advanced configurations such as VLAN are also available through the
|
||||
`ha network` CLI command.
|
||||
|
||||
To restore the default configuration the `ha network` CLI command can be used as
|
||||
well:
|
||||
|
||||
```
|
||||
ha network update default --ipv4-method auto
|
||||
```
|
||||
|
||||
If more advanced network settings are required network connection files can be
|
||||
placed on a USB drive and imported to the host as described in
|
||||
[Configuration][configuration-usb].
|
||||
|
||||
## Manual Network Configuration
|
||||
|
||||
If the frontend or `ha network` CLI cannot meet your use case, it is still
|
||||
possible to configure the underlying NetworkManager manually.
|
||||
|
||||
You can read the [NetworkManager manual][nm-manual] or find many configuration
|
||||
examples across the internet. Note that changes to `NetworkManager.conf` are
|
||||
not supported currently, only connection keyfiles are supported. Keep in mind
|
||||
that the system is read-only. If you don't want the IP address to change on
|
||||
every boot, you should modify the UUID property to a generic [UUID4][uuid].
|
||||
Inside the `\CONFIG\network\` directory on the USB drive or SD card, create a
|
||||
file called `my-network` and add the appropriate contents below:
|
||||
|
||||
**NOTE: Please make sure to save this file with UNIX line endings (LF, and not Windows' default CRLF endings). You can do this using Notepad these days!**
|
||||
|
||||
### Default
|
||||
|
||||
A preinstalled connection profile for wired network is active by default:
|
||||
|
||||
```ini
|
||||
[connection]
|
||||
id=Home Assistant OS default
|
||||
uuid=f62bf7c2-e565-49ff-bbfc-a4cf791e6add
|
||||
type=802-3-ethernet
|
||||
llmnr=2
|
||||
mdns=2
|
||||
|
||||
[ipv4]
|
||||
method=auto
|
||||
|
||||
[ipv6]
|
||||
addr-gen-mode=stable-privacy
|
||||
method=auto
|
||||
```
|
||||
|
||||
### Wired connection to the LAN
|
||||
|
||||
```ini
|
||||
[connection]
|
||||
id=my-network
|
||||
uuid=d55162b4-6152-4310-9312-8f4c54d86afa
|
||||
type=802-3-ethernet
|
||||
llmnr=2
|
||||
mdns=2
|
||||
|
||||
[ipv4]
|
||||
method=auto
|
||||
|
||||
[ipv6]
|
||||
addr-gen-mode=stable-privacy
|
||||
method=auto
|
||||
```
|
||||
|
||||
### Wireless LAN WPA/PSK
|
||||
|
||||
```ini
|
||||
[connection]
|
||||
id=my-network
|
||||
uuid=72111c67-4a5d-4d5c-925e-f8ee26efb3c3
|
||||
type=802-11-wireless
|
||||
|
||||
[802-11-wireless]
|
||||
mode=infrastructure
|
||||
ssid=MY_SSID
|
||||
# Uncomment below if your SSID is not broadcasted
|
||||
#hidden=true
|
||||
|
||||
[802-11-wireless-security]
|
||||
auth-alg=open
|
||||
key-mgmt=wpa-psk
|
||||
psk=MY_WLAN_SECRET_KEY
|
||||
|
||||
[ipv4]
|
||||
method=auto
|
||||
|
||||
[ipv6]
|
||||
addr-gen-mode=stable-privacy
|
||||
method=auto
|
||||
```
|
||||
|
||||
### Static IP
|
||||
|
||||
Replace the following configuration:
|
||||
|
||||
```ini
|
||||
[ipv4]
|
||||
method=manual
|
||||
address=192.168.1.111/24;192.168.1.1
|
||||
dns=8.8.8.8;8.8.4.4;
|
||||
```
|
||||
|
||||
For `address`, the value before the semicolon is the IP address and subnet prefix bitlength. The second value (after the semicolon) is the IP address of the local gateway.
|
||||
|
||||
## Tips
|
||||
|
||||
### Reset network
|
||||
|
||||
If you want to reset the network configuration back to the default connection
|
||||
profile using DHCP, use the following commands on the host console:
|
||||
|
||||
```bash
|
||||
# rm -r /mnt/overlay/etc/NetworkManager/system-connections
|
||||
# reboot
|
||||
```
|
||||
|
||||
Home Assistant OS will recreate the default connection profile during boot.
|
||||
|
||||
### Enabling Wi-Fi
|
||||
|
||||
Wi-Fi is discouraged for reliability reasons. However, if you still prefer to use Wi-Fi, you can us the `ha network` command to set up Wi-Fi (example for a Raspberry Pi 4, check `ha network info` to check if your board supports Wi-Fi and the name of the Wi-Fi device):
|
||||
|
||||
```bash
|
||||
ha network update wlan0 --ipv4-method auto --wifi-auth wpa-psk --wifi-mode infrastructure --wifi-ssid "MY-SSID" --wifi-psk MY_PASS
|
||||
````
|
||||
|
||||
### Powersave
|
||||
|
||||
If you have trouble with powersave then apply the following changes:
|
||||
|
||||
```ini
|
||||
[wifi]
|
||||
# Values are 0 (use default), 1 (ignore/don't touch), 2 (disable) or 3 (enable).
|
||||
powersave=0
|
||||
```
|
||||
|
||||
## Using `nmcli` to set a static IPv4 address
|
||||
|
||||
Log into the the Home Assistant OS base system via a console:
|
||||
|
||||
```bash
|
||||
Welcome to Home Assistant
|
||||
homeassistant login:
|
||||
```
|
||||
|
||||
- Login as `root` (no password needed). At the `ha >` prompt, type `login` (as instructed).
|
||||
|
||||
From there you use the `nmcli` configuration tool.
|
||||
|
||||
- `# nmcli con show` will list the "Home Assistant OS default" connection in use.
|
||||
- `# nmcli con show "Home Assistant OS default"` will list all the properties of the connection.
|
||||
|
||||
To start editing the configuration setting for "Home Assistant OS default":
|
||||
|
||||
```bash
|
||||
# nmcli con edit "Home Assistant OS default"
|
||||
```
|
||||
|
||||
To add your static IP address (select 'yes' for manual method);
|
||||
|
||||
```bash
|
||||
nmcli> set ipv4.addresses 192.168.100.10/24
|
||||
Do you also want to set 'ipv4.method' to 'manual'? [yes]:
|
||||
```
|
||||
|
||||
In addition, it's recommended to set the DNS server and the local gateway. For most home routers the DNS server will have the same IP address as the router itself. If you are using Pi-Hole or a third-party DNS system then you can set the DNS server to that.
|
||||
|
||||
```bash
|
||||
nmcli> set ipv4.dns 192.168.100.1
|
||||
nmcli> set ipv4.gateway 192.168.100.1
|
||||
```
|
||||
|
||||
`nmcli> print ipv4` will show you the IPv4 properties of this connection. With `nmcli> save` you will save the changes afterwards.
|
||||
|
||||
If you now view the default connection `cat /etc/NetworkManager/system-connections/default` you should see the method is manual and the address is set.
|
||||
|
||||
Doing a `nmcli con reload` does not always work, so restart the virtual machine or the physical system.
|
||||
|
||||
[nm-manual]: https://networkmanager.dev/docs/api/1.40/manpages.html
|
||||
[configuration-usb]: configuration.md
|
||||
[uuid]: https://www.uuidgenerator.net/version4
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 67 KiB |
12
Makefile
12
Makefile
@@ -16,6 +16,12 @@ endif
|
||||
|
||||
################################################################################
|
||||
|
||||
SILENT := $(findstring s,$(word 1, $(MAKEFLAGS)))
|
||||
|
||||
define print
|
||||
$(if $(SILENT),,$(info $1))
|
||||
endef
|
||||
|
||||
COLOR_STEP := $(shell tput smso 2>/dev/null)
|
||||
COLOR_WARN := $(shell (tput setab 3; tput setaf 0) 2>/dev/null)
|
||||
TERM_RESET := $(shell tput sgr0 2>/dev/null)
|
||||
@@ -28,7 +34,7 @@ TERM_RESET := $(shell tput sgr0 2>/dev/null)
|
||||
|
||||
# fallback target when target undefined here is given
|
||||
.DEFAULT:
|
||||
@echo "$(COLOR_STEP)=== Falling back to Buildroot target '$@' ===$(TERM_RESET)"
|
||||
$(call print,$(COLOR_STEP)=== Falling back to Buildroot target '$@' ===$(TERM_RESET))
|
||||
$(MAKE) -C $(BUILDROOT) O=$(O) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL) "$@"
|
||||
|
||||
# default target when no target is given - must be first in Makefile
|
||||
@@ -42,11 +48,11 @@ $(TARGETS_CONFIG): %-config:
|
||||
echo ""; \
|
||||
bash -c 'read -t 10 -p "Waiting 10s, press enter to continue or Ctrl-C to abort..."' || true; \
|
||||
fi
|
||||
@echo "$(COLOR_STEP)=== Using $*_defconfig ===$(TERM_RESET)"
|
||||
$(call print,$(COLOR_STEP)=== Using $*_defconfig ===$(TERM_RESET))
|
||||
$(MAKE) -C $(BUILDROOT) O=$(O) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL) "$*_defconfig"
|
||||
|
||||
$(TARGETS): %: %-config
|
||||
@echo "$(COLOR_STEP)=== Building $@ ===$(TERM_RESET)"
|
||||
$(call print,$(COLOR_STEP)=== Building $@ ===$(TERM_RESET))
|
||||
$(MAKE) -C $(BUILDROOT) O=$(O) BR2_EXTERNAL=$(BUILDROOT_EXTERNAL)
|
||||
|
||||
buildroot-help:
|
||||
|
||||
10
README.md
10
README.md
@@ -16,14 +16,10 @@ Home Assistant Operating System uses Docker as its container engine. By default
|
||||
|
||||
## Supported hardware
|
||||
|
||||
- Nabu Casa
|
||||
- Raspberry Pi
|
||||
- Hardkernel ODROID
|
||||
- Asus Tinker Board
|
||||
- Generic x86-64 (e.g. Intel NUC)
|
||||
- Virtual appliances
|
||||
The list of supported hardware is defined by [ADR-0015](https://github.com/home-assistant/architecture/blob/master/adr/0015-home-assistant-os.md).
|
||||
Every new hardware addition must meet at least requirements defined in [ADR-0017](https://github.com/home-assistant/architecture/blob/master/adr/0017-hardware-screening-os.md) and pass through an architecture design proposal.
|
||||
|
||||
See the full list and specific models [here](./Documentation/boards/README.md)
|
||||
For documentation explaining details of the individual supported boards, see [Board support](https://developers.home-assistant.io/docs/operating-system/boards/overview) section of the Home Assistant Developer Docs.
|
||||
|
||||
## Getting Started
|
||||
|
||||
|
||||
Submodule buildroot updated: b73c8daa24...02f1553a34
@@ -10,6 +10,7 @@ CONFIG_INTEL_IDLE=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
|
||||
CONFIG_SCSI_LOWLEVEL=y
|
||||
CONFIG_SCSI_HPSA=y
|
||||
@@ -45,6 +46,7 @@ CONFIG_MMC_SDHCI_ACPI=y
|
||||
CONFIG_MMC_SDHCI_PCI=y
|
||||
CONFIG_MMC_REALTEK_PCI=m
|
||||
CONFIG_MMC_REALTEK_USB=m
|
||||
CONFIG_X86_X2APIC=y
|
||||
CONFIG_X86_INTEL_LPSS=y
|
||||
|
||||
CONFIG_MISC_RTSX_PCI=m
|
||||
|
||||
@@ -97,6 +97,7 @@ CONFIG_MMC_BLOCK=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_ACPI=y
|
||||
CONFIG_MMC_SDHCI_PCI=y
|
||||
CONFIG_X86_X2APIC=y
|
||||
CONFIG_X86_INTEL_LPSS=y
|
||||
|
||||
CONFIG_DRM=y
|
||||
@@ -116,6 +117,7 @@ CONFIG_PCI_HYPERV=m
|
||||
CONFIG_PCI_HYPERV_INTERFACE=m
|
||||
CONFIG_FB_HYPERV=y
|
||||
|
||||
CONFIG_CHELSIO_T4VF=m
|
||||
CONFIG_IGBVF=m
|
||||
CONFIG_IXGBEVF=m
|
||||
CONFIG_I40EVF=m
|
||||
|
||||
@@ -19,7 +19,10 @@ function hassos_pre_image() {
|
||||
else
|
||||
cp "${BOARD_DIR}/../cmdline.txt" "${BOOT_DATA}/cmdline.txt"
|
||||
fi
|
||||
cp "${BINARIES_DIR}"/*.dtbo "${BOOT_DATA}/overlays/" 2>/dev/null || true
|
||||
if ls "${BINARIES_DIR}"/*.dtbo >/dev/null 2>&1; then
|
||||
mkdir -p "${BOOT_DATA}/overlays"
|
||||
cp "${BINARIES_DIR}"/*.dtbo "${BOOT_DATA}/overlays/"
|
||||
fi
|
||||
|
||||
# Enable 64bit support
|
||||
if [[ "${BOARD_ID}" =~ "64" ]]; then
|
||||
|
||||
@@ -11,13 +11,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/arm-uefi/generic-aarch64 $(BR2_EXTERNAL_HASSOS_PATH)/board/arm-uefi/generic-aarch64/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.41"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.54"
|
||||
BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless-pci.config $(BR2_EXTERNAL_HASSOS_PATH)/board/arm-uefi/generic-aarch64/kernel.config"
|
||||
BR2_LINUX_KERNEL_LZ4=y
|
||||
@@ -26,6 +27,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -139,7 +141,6 @@ BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_OPENVMTOOLS=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -11,13 +11,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/pc/generic-x86-64 $(BR2_EXTERNAL_HASSOS_PATH)/board/pc/generic-x86-64/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.41"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.54"
|
||||
BR2_LINUX_KERNEL_DEFCONFIG="x86_64"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless-pci.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-pci.config $(BR2_EXTERNAL_HASSOS_PATH)/board/pc/generic-x86-64/kernel.config"
|
||||
BR2_LINUX_KERNEL_LZ4=y
|
||||
@@ -26,6 +27,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -141,7 +143,6 @@ BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_OPENVMTOOLS=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -11,13 +11,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/nabucasa/green $(BR2_EXTERNAL_HASSOS_PATH)/board/nabucasa/green/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.41"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.54"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/kernel-arm64-rockchip.config"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/board/nabucasa/green/kernel.config"
|
||||
@@ -30,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -117,7 +119,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -11,13 +11,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/khadas/vim3 $(BR2_EXTERNAL_HASSOS_PATH)/board/khadas/vim3/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.41"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.54"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HASSOS_PATH)/board/khadas/kernel-vim.config"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config"
|
||||
@@ -30,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -112,7 +114,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -11,13 +11,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-c2 $(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-c2/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.41"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.54"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/kernel-amlogic.config"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config"
|
||||
@@ -30,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -112,7 +114,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -11,13 +11,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-c4 $(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-c4/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.41"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.54"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/kernel-amlogic.config"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config"
|
||||
@@ -30,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
|
||||
@@ -110,7 +112,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -11,13 +11,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-m1 $(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-m1/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.41"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.54"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/kernel-arm64-rockchip.config"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-m1/kernel.config"
|
||||
@@ -30,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -112,7 +114,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -11,13 +11,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-m1s $(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-m1s/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.41"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.54"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/kernel-arm64-rockchip.config"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-m1s/kernel.config"
|
||||
@@ -30,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -112,7 +114,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -11,13 +11,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-n2 $(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-n2/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.41"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.54"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/kernel-amlogic.config"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-n2/kernel.config"
|
||||
@@ -30,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -112,7 +114,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -12,13 +12,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-xu4 $(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-xu4/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.41"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.54"
|
||||
BR2_LINUX_KERNEL_DEFCONFIG="exynos"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/board/hardkernel/odroid-xu4/kernel.config"
|
||||
BR2_LINUX_KERNEL_LZ4=y
|
||||
@@ -29,6 +30,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -112,7 +114,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -11,13 +11,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay $(BR2_EXTERNAL_HASSOS_PATH)/board/pc/ova/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/pc/ova $(BR2_EXTERNAL_HASSOS_PATH)/board/pc/ova/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.41"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.54"
|
||||
BR2_LINUX_KERNEL_DEFCONFIG="x86_64"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-pci.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless-pci.config $(BR2_EXTERNAL_HASSOS_PATH)/board/pc/ova/kernel.config"
|
||||
BR2_LINUX_KERNEL_LZ4=y
|
||||
@@ -29,6 +30,7 @@ BR2_PACKAGE_LINUX_TOOLS_HV_VSS_DAEMON=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -142,7 +144,6 @@ BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_OPENVMTOOLS=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -13,13 +13,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rpi2 $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250702.tar.gz"
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250916.tar.gz"
|
||||
BR2_LINUX_KERNEL_DEFCONFIG="bcm2709"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/kernel.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/kernel-armv7.config"
|
||||
BR2_LINUX_KERNEL_LZ4=y
|
||||
@@ -30,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -115,7 +117,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -12,13 +12,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rpi3-64 $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250702.tar.gz"
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250916.tar.gz"
|
||||
BR2_LINUX_KERNEL_DEFCONFIG="bcm2711"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/kernel.config"
|
||||
BR2_LINUX_KERNEL_LZ4=y
|
||||
@@ -29,6 +30,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -116,7 +118,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -13,13 +13,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rpi3 $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250702.tar.gz"
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250916.tar.gz"
|
||||
BR2_LINUX_KERNEL_DEFCONFIG="bcm2709"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/kernel.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/kernel-armv7.config"
|
||||
BR2_LINUX_KERNEL_LZ4=y
|
||||
@@ -30,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -117,7 +119,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -12,13 +12,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rpi4-64 $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250702.tar.gz"
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250916.tar.gz"
|
||||
BR2_LINUX_KERNEL_DEFCONFIG="bcm2711"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-pci.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/kernel.config"
|
||||
BR2_LINUX_KERNEL_LZ4=y
|
||||
@@ -29,6 +30,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_STRESS_NG=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
@@ -117,7 +119,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -13,13 +13,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rpi4 $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250702.tar.gz"
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250916.tar.gz"
|
||||
BR2_LINUX_KERNEL_DEFCONFIG="bcm2711"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-pci.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/kernel.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/kernel-armv7.config"
|
||||
BR2_LINUX_KERNEL_LZ4=y
|
||||
@@ -30,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -116,7 +118,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -12,13 +12,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rootfs-overlay $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rpi5-64/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rpi5-64 $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rpi5-64/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250702.tar.gz"
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250916.tar.gz"
|
||||
BR2_LINUX_KERNEL_DEFCONFIG="bcm2712"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-pci.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/kernel.config"
|
||||
BR2_LINUX_KERNEL_LZ4=y
|
||||
@@ -31,6 +32,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_STRESS_NG=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
@@ -116,7 +118,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -13,13 +13,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/asus/tinker $(BR2_EXTERNAL_HASSOS_PATH)/board/asus/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.41"
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.12.54"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HASSOS_PATH)/board/asus/tinker/kernel.config"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config"
|
||||
@@ -32,6 +33,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
BR2_PACKAGE_DOSFSTOOLS=y
|
||||
@@ -112,7 +114,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -12,13 +12,14 @@ BR2_TARGET_GENERIC_HOSTNAME="homeassistant"
|
||||
BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant"
|
||||
BR2_INIT_SYSTEMD=y
|
||||
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
|
||||
BR2_TARGET_LOCALTIME=""
|
||||
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rootfs-overlay $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/yellow/rootfs-overlay"
|
||||
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh"
|
||||
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh"
|
||||
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/yellow $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/hassos-hook.sh"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250702.tar.gz"
|
||||
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/stable_20250916.tar.gz"
|
||||
BR2_LINUX_KERNEL_DEFCONFIG="bcm2711"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-pci.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/v6.12.y/device-support-wireless.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/kernel.config"
|
||||
BR2_LINUX_KERNEL_LZ4=y
|
||||
@@ -30,6 +31,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config"
|
||||
BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y
|
||||
BR2_PACKAGE_V4L2LOOPBACK=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_STRESS_NG=y
|
||||
BR2_PACKAGE_JQ=y
|
||||
BR2_PACKAGE_CIFS_UTILS=y
|
||||
@@ -120,7 +122,6 @@ BR2_PACKAGE_TINI=y
|
||||
BR2_PACKAGE_AUDIT=y
|
||||
BR2_PACKAGE_DOCKER_CLI=y
|
||||
BR2_PACKAGE_DOCKER_ENGINE=y
|
||||
BR2_PACKAGE_PIGZ=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_RAUC=y
|
||||
BR2_PACKAGE_RAUC_DBUS=y
|
||||
|
||||
@@ -39,6 +39,7 @@ CONFIG_MEDIA_PCI_SUPPORT=y
|
||||
|
||||
# PCI sound drivers
|
||||
CONFIG_SND_PCI=y
|
||||
CONFIG_SND_CTXFI=m
|
||||
CONFIG_SND_HDA_GENERIC=m
|
||||
CONFIG_SND_HDA_INTEL=m
|
||||
CONFIG_SND_HDA_CODEC_REALTEK=m
|
||||
|
||||
@@ -12,6 +12,8 @@ CONFIG_PREEMPT=y
|
||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||
# CONFIG_DEBUG_PREEMPT is not set
|
||||
|
||||
CONFIG_PSI=y
|
||||
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
|
||||
@@ -203,6 +205,7 @@ CONFIG_WIREGUARD=m
|
||||
CONFIG_HID=y
|
||||
CONFIG_HIDRAW=y
|
||||
CONFIG_UHID=y
|
||||
CONFIG_HID_MULTITOUCH=m
|
||||
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="utf8"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
VERSION_MAJOR="16"
|
||||
VERSION_MINOR="1"
|
||||
VERSION_SUFFIX="rc1"
|
||||
VERSION_MAJOR="17"
|
||||
VERSION_MINOR="0"
|
||||
VERSION_SUFFIX="dev0"
|
||||
|
||||
HASSOS_NAME="Home Assistant OS"
|
||||
HASSOS_ID="haos"
|
||||
|
||||
DEPLOYMENT="staging"
|
||||
DEPLOYMENT="development"
|
||||
|
||||
@@ -4,6 +4,7 @@ set -e
|
||||
build_dir=$1
|
||||
dst_dir=$2
|
||||
channel=$3
|
||||
docker_version=$4
|
||||
|
||||
data_img="${dst_dir}/data.ext4"
|
||||
|
||||
@@ -17,13 +18,12 @@ mkdir -p "${build_dir}/data/"
|
||||
sudo mount -o loop,discard "${data_img}" "${build_dir}/data/"
|
||||
|
||||
# Use official Docker in Docker images
|
||||
# Ideally we use the same version as Buildroot is using in case the
|
||||
# overlayfs2 storage format changes
|
||||
# We use the same version as Buildroot is using to ensure best compatibility
|
||||
container=$(docker run --privileged -e DOCKER_TLS_CERTDIR="" \
|
||||
-v "${build_dir}/data/":/data \
|
||||
-v "${build_dir}/data/docker/":/var/lib/docker \
|
||||
-v "${build_dir}":/build \
|
||||
-d docker:28.0-dind --storage-driver overlay2)
|
||||
-d "docker:${docker_version}-dind" --storage-driver overlay2)
|
||||
|
||||
docker exec "${container}" sh /build/dind-import-containers.sh "${channel}"
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ endef
|
||||
HASSIO_INSTALL_IMAGES = YES
|
||||
|
||||
define HASSIO_INSTALL_IMAGES_CMDS
|
||||
$(BR2_EXTERNAL_HASSOS_PATH)/package/hassio/create-data-partition.sh "$(@D)" "$(BINARIES_DIR)" "$(HASSIO_VERSION_CHANNEL)"
|
||||
$(BR2_EXTERNAL_HASSOS_PATH)/package/hassio/create-data-partition.sh "$(@D)" "$(BINARIES_DIR)" "$(HASSIO_VERSION_CHANNEL)" "$(DOCKER_ENGINE_VERSION)"
|
||||
endef
|
||||
|
||||
$(eval $(generic-package))
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
sha256 b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1 LICENSE
|
||||
sha256 035bb930c317a6944dbee14db60dea68d65e15fe5f51253e3080f9f016b89fd7 rpi-rf-mod-0ee62f7a87d26e990fb0e03b00befb505a7e44fd.tar.gz
|
||||
sha256 961b7e38dfe6450cd70b677d3cc8c1aabb00639f58e3ce7379c94053fdb19117 rpi-rf-mod-e1404d6b2400589a1956d7429ad16227c8db6771.tar.gz
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
# https://codeload.github.com/jens-maus/RaspberryMatic/tar.gz/COMMIT
|
||||
#
|
||||
# Copyright (c) 2018-2023 Jens Maus <mail@jens-maus.de>
|
||||
# https://github.com/jens-maus/RaspberryMatic/tree/master/buildroot-external/package/rpi-rf-mod
|
||||
# https://github.com/OpenCCU/OpenCCU/tree/master/buildroot-external/package/rpi-rf-mod
|
||||
#
|
||||
################################################################################
|
||||
|
||||
RPI_RF_MOD_VERSION = 0ee62f7a87d26e990fb0e03b00befb505a7e44fd
|
||||
RPI_RF_MOD_SITE = $(call github,jens-maus,RaspberryMatic,$(RPI_RF_MOD_VERSION))
|
||||
RPI_RF_MOD_VERSION = e1404d6b2400589a1956d7429ad16227c8db6771
|
||||
RPI_RF_MOD_SITE = $(call github,OpenCCU,OpenCCU,$(RPI_RF_MOD_VERSION))
|
||||
RPI_RF_MOD_LICENSE = Apache-2.0
|
||||
RPI_RF_MOD_LICENSE_FILES = LICENSE
|
||||
RPI_RF_MOD_DEPENDENCIES = host-dtc
|
||||
|
||||
@@ -0,0 +1,918 @@
|
||||
From 2ae8aa6b338f98974581ef239c55fc34f6873b6e Mon Sep 17 00:00:00 2001
|
||||
From: Valentin David <valentin.david@canonical.com>
|
||||
Date: Mon, 10 Mar 2025 10:53:41 +0100
|
||||
Subject: [PATCH] Use paths specified from environment variables for /etc
|
||||
configuration files
|
||||
|
||||
Some configuration files that need updates are directly under in /etc. To
|
||||
update them atomically, we need write access to /etc. For Ubuntu Core this is
|
||||
an issue as /etc is not writable. Only a selection of subdirectories can be
|
||||
writable. The general solution is symlinks or bind mounts to writable places.
|
||||
But for atomic writes in /etc, that does not work. So Ubuntu has had a patch
|
||||
for that that did not age well.
|
||||
|
||||
Instead we would like to introduce some environment variables for alternate
|
||||
paths.
|
||||
|
||||
* SYSTEMD_ETC_HOSTNAME: /etc/hostname
|
||||
* SYSTEMD_ETC_MACHINE_INFO: /etc/machine-info
|
||||
* SYSTEMD_ETC_LOCALTIME: /etc/localtime
|
||||
* SYSTEMD_ETC_LOCALE_CONF: /etc/locale.conf
|
||||
* SYSTEMD_ETC_VCONSOLE_CONF: /etc/vconsole.conf
|
||||
* SYSTEMD_ETC_ADJTIME: /etc/adjtime
|
||||
|
||||
While it is for now expected that there is a symlink from the standard, we
|
||||
still try to read them from that alternate path. This is important for
|
||||
`/etc/localtime`, which is a symlink, so we cannot have an indirect symlink or
|
||||
bind mount for it.
|
||||
|
||||
Since machine-id is typically written only once and not updated. This commit
|
||||
does not cover it. An initrd can properly create it and bind mount it.
|
||||
---
|
||||
(Backported for v256.x)
|
||||
Upstream: https://github.com/systemd/systemd/pull/36656
|
||||
Signed-off-by: Jan Čermák <sairon@sairon.cz>
|
||||
---
|
||||
docs/ENVIRONMENT.md | 25 ++++++++++++
|
||||
src/basic/hostname-util.c | 20 +++++++++-
|
||||
src/basic/hostname-util.h | 3 ++
|
||||
src/basic/time-util.c | 11 +++++-
|
||||
src/basic/time-util.h | 1 +
|
||||
src/core/manager.c | 14 +++++--
|
||||
src/firstboot/firstboot.c | 32 ++++++++-------
|
||||
src/hostname/hostnamed.c | 20 +++++-----
|
||||
src/locale/localed-util.c | 10 ++---
|
||||
src/shared/env-file-label.c | 7 ++--
|
||||
src/shared/hostname-setup.c | 2 +-
|
||||
src/shared/locale-setup.c | 28 +++++++++++---
|
||||
src/shared/locale-setup.h | 3 ++
|
||||
src/timedate/timedated.c | 24 ++++++++----
|
||||
test/units/TEST-30-ONCLOCKCHANGE.sh | 28 ++++++++++++++
|
||||
test/units/TEST-45-TIMEDATE.sh | 44 +++++++++++++++++++++
|
||||
test/units/TEST-71-HOSTNAME.sh | 39 +++++++++++++++++++
|
||||
test/units/TEST-73-LOCALE.sh | 47 +++++++++++++++++++++++
|
||||
test/units/TEST-74-AUX-UTILS.firstboot.sh | 37 ++++++++++++++++++
|
||||
19 files changed, 344 insertions(+), 51 deletions(-)
|
||||
|
||||
diff --git a/docs/ENVIRONMENT.md b/docs/ENVIRONMENT.md
|
||||
index 6081351580..c7b62e0348 100644
|
||||
--- a/docs/ENVIRONMENT.md
|
||||
+++ b/docs/ENVIRONMENT.md
|
||||
@@ -295,6 +295,9 @@ All tools:
|
||||
first existing unit listed in the environment variable, and
|
||||
`timedatectl set-ntp off` disables and stops all listed units.
|
||||
|
||||
+* `$SYSTEMD_ETC_ADJTIME` - override the path to the hardware clock settings
|
||||
+ file. The default is `/etc/adjtime`.
|
||||
+
|
||||
`systemd-sulogin-shell`:
|
||||
|
||||
* `$SYSTEMD_SULOGIN_FORCE=1` — This skips asking for the root password if the
|
||||
@@ -721,3 +724,25 @@ Tools using the Varlink protocol (such as `varlinkctl`) or sd-bus (such as
|
||||
* `$SYSTEMD_ADJUST_TERMINAL_TITLE` – Takes a boolean. When false the terminal
|
||||
window title will not be updated for interactive invocation of the mentioned
|
||||
tools.
|
||||
+
|
||||
+`systemd-timedated`, `systemd-firstboot`, `systemd`:
|
||||
+
|
||||
+* `$SYSTEMD_ETC_LOCALTIME` - override the path to the timezone symlink. The
|
||||
+ default is `/etc/localtime`. The directory of the path should exist and not
|
||||
+ be removed.
|
||||
+
|
||||
+`systemd-hostnamed`, `systemd-firstboot`:
|
||||
+
|
||||
+* `$SYSTEMD_ETC_HOSTNAME` - override the path to local system name
|
||||
+ configuration file. The default is `/etc/hostname`.
|
||||
+
|
||||
+* `$SYSTEMD_ETC_MACHINE_INFO` - override the path to the machine metadata file. The
|
||||
+ default is `/etc/machine-info`.
|
||||
+
|
||||
+`systemd-localed`, `systemd-firstboot`:
|
||||
+
|
||||
+* `$SYSTEMD_ETC_LOCALE_CONF` - override the path to the system-wide locale
|
||||
+ configuration file. The default is `/etc/locale.conf`.
|
||||
+
|
||||
+* `$SYSTEMD_ETC_VCONSOLE_CONF` - override the path to the virtual console
|
||||
+ configuration file. The default is `/etc/vconsole.conf`.
|
||||
diff --git a/src/basic/hostname-util.c b/src/basic/hostname-util.c
|
||||
index e743033b1e..d31897914f 100644
|
||||
--- a/src/basic/hostname-util.c
|
||||
+++ b/src/basic/hostname-util.c
|
||||
@@ -191,13 +191,31 @@ bool is_localhost(const char *hostname) {
|
||||
endswith_no_case(hostname, ".localhost.localdomain.");
|
||||
}
|
||||
|
||||
+const char* etc_hostname(void) {
|
||||
+ static const char *cached = NULL;
|
||||
+
|
||||
+ if (!cached)
|
||||
+ cached = secure_getenv("SYSTEMD_ETC_HOSTNAME") ?: "/etc/hostname";
|
||||
+
|
||||
+ return cached;
|
||||
+}
|
||||
+
|
||||
+const char* etc_machine_info(void) {
|
||||
+ static const char *cached = NULL;
|
||||
+
|
||||
+ if (!cached)
|
||||
+ cached = secure_getenv("SYSTEMD_ETC_MACHINE_INFO") ?: "/etc/machine-info";
|
||||
+
|
||||
+ return cached;
|
||||
+}
|
||||
+
|
||||
int get_pretty_hostname(char **ret) {
|
||||
_cleanup_free_ char *n = NULL;
|
||||
int r;
|
||||
|
||||
assert(ret);
|
||||
|
||||
- r = parse_env_file(NULL, "/etc/machine-info", "PRETTY_HOSTNAME", &n);
|
||||
+ r = parse_env_file(NULL, etc_machine_info(), "PRETTY_HOSTNAME", &n);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
diff --git a/src/basic/hostname-util.h b/src/basic/hostname-util.h
|
||||
index bcac3d9fb0..d592de376d 100644
|
||||
--- a/src/basic/hostname-util.h
|
||||
+++ b/src/basic/hostname-util.h
|
||||
@@ -68,4 +68,7 @@ static inline bool is_dns_proxy_stub_hostname(const char *hostname) {
|
||||
return STRCASE_IN_SET(hostname, "_localdnsproxy", "_localdnsproxy.");
|
||||
}
|
||||
|
||||
+const char* etc_hostname(void);
|
||||
+const char* etc_machine_info(void);
|
||||
+
|
||||
int get_pretty_hostname(char **ret);
|
||||
diff --git a/src/basic/time-util.c b/src/basic/time-util.c
|
||||
index b94f37c31c..35153db563 100644
|
||||
--- a/src/basic/time-util.c
|
||||
+++ b/src/basic/time-util.c
|
||||
@@ -1610,7 +1610,7 @@ int get_timezone(char **ret) {
|
||||
|
||||
assert(ret);
|
||||
|
||||
- r = readlink_malloc("/etc/localtime", &t);
|
||||
+ r = readlink_malloc(etc_localtime(), &t);
|
||||
if (r == -ENOENT)
|
||||
/* If the symlink does not exist, assume "UTC", like glibc does */
|
||||
return strdup_to(ret, "UTC");
|
||||
@@ -1626,6 +1626,15 @@ int get_timezone(char **ret) {
|
||||
return strdup_to(ret, e);
|
||||
}
|
||||
|
||||
+const char* etc_localtime(void) {
|
||||
+ static const char *cached = NULL;
|
||||
+
|
||||
+ if (!cached)
|
||||
+ cached = secure_getenv("SYSTEMD_ETC_LOCALTIME") ?: "/etc/localtime";
|
||||
+
|
||||
+ return cached;
|
||||
+}
|
||||
+
|
||||
time_t mktime_or_timegm(struct tm *tm, bool utc) {
|
||||
assert(tm);
|
||||
|
||||
diff --git a/src/basic/time-util.h b/src/basic/time-util.h
|
||||
index f273770233..e6fe563603 100644
|
||||
--- a/src/basic/time-util.h
|
||||
+++ b/src/basic/time-util.h
|
||||
@@ -176,6 +176,7 @@ bool clock_supported(clockid_t clock);
|
||||
usec_t usec_shift_clock(usec_t, clockid_t from, clockid_t to);
|
||||
|
||||
int get_timezone(char **ret);
|
||||
+const char* etc_localtime(void);
|
||||
|
||||
time_t mktime_or_timegm(struct tm *tm, bool utc);
|
||||
struct tm *localtime_or_gmtime_r(const time_t *t, struct tm *tm, bool utc);
|
||||
diff --git a/src/core/manager.c b/src/core/manager.c
|
||||
index 8313a9edab..6b59dd1f33 100644
|
||||
--- a/src/core/manager.c
|
||||
+++ b/src/core/manager.c
|
||||
@@ -416,7 +416,7 @@ static int manager_read_timezone_stat(Manager *m) {
|
||||
assert(m);
|
||||
|
||||
/* Read the current stat() data of /etc/localtime so that we detect changes */
|
||||
- if (lstat("/etc/localtime", &st) < 0) {
|
||||
+ if (lstat(etc_localtime(), &st) < 0) {
|
||||
log_debug_errno(errno, "Failed to stat /etc/localtime, ignoring: %m");
|
||||
changed = m->etc_localtime_accessible;
|
||||
m->etc_localtime_accessible = false;
|
||||
@@ -453,14 +453,20 @@ static int manager_setup_timezone_change(Manager *m) {
|
||||
* Note that we create the new event source first here, before releasing the old one. This should optimize
|
||||
* behaviour as this way sd-event can reuse the old watch in case the inode didn't change. */
|
||||
|
||||
- r = sd_event_add_inotify(m->event, &new_event, "/etc/localtime",
|
||||
+ r = sd_event_add_inotify(m->event, &new_event, etc_localtime(),
|
||||
IN_ATTRIB|IN_MOVE_SELF|IN_CLOSE_WRITE|IN_DONT_FOLLOW, manager_dispatch_timezone_change, m);
|
||||
if (r == -ENOENT) {
|
||||
/* If the file doesn't exist yet, subscribe to /etc instead, and wait until it is created either by
|
||||
* O_CREATE or by rename() */
|
||||
+ _cleanup_free_ char *localtime_dir = NULL;
|
||||
|
||||
- log_debug_errno(r, "/etc/localtime doesn't exist yet, watching /etc instead.");
|
||||
- r = sd_event_add_inotify(m->event, &new_event, "/etc",
|
||||
+ int dir_r = path_extract_directory(etc_localtime(), &localtime_dir);
|
||||
+ if (dir_r < 0)
|
||||
+ return log_error_errno(dir_r, "Failed to extract directory from path '%s': %m", etc_localtime());
|
||||
+
|
||||
+ log_debug_errno(r, "%s doesn't exist yet, watching %s instead.", etc_localtime(), localtime_dir);
|
||||
+
|
||||
+ r = sd_event_add_inotify(m->event, &new_event, localtime_dir,
|
||||
IN_CREATE|IN_MOVED_TO|IN_ONLYDIR, manager_dispatch_timezone_change, m);
|
||||
}
|
||||
if (r < 0)
|
||||
diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c
|
||||
index 0dbdfc6638..80a7a74825 100644
|
||||
--- a/src/firstboot/firstboot.c
|
||||
+++ b/src/firstboot/firstboot.c
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "hostname-util.h"
|
||||
#include "kbd-util.h"
|
||||
#include "libcrypt-util.h"
|
||||
+#include "locale-setup.h"
|
||||
#include "locale-util.h"
|
||||
#include "lock-util.h"
|
||||
#include "main-func.h"
|
||||
@@ -409,7 +410,7 @@ static int process_locale(int rfd) {
|
||||
|
||||
assert(rfd >= 0);
|
||||
|
||||
- pfd = chase_and_open_parent_at(rfd, "/etc/locale.conf",
|
||||
+ pfd = chase_and_open_parent_at(rfd, etc_locale_conf(),
|
||||
CHASE_AT_RESOLVE_IN_ROOT|CHASE_MKDIR_0755|CHASE_WARN|CHASE_NOFOLLOW,
|
||||
&f);
|
||||
if (pfd < 0)
|
||||
@@ -426,7 +427,7 @@ static int process_locale(int rfd) {
|
||||
return log_error_errno(r, "Failed to check if directory file descriptor is root: %m");
|
||||
|
||||
if (arg_copy_locale && r == 0) {
|
||||
- r = copy_file_atomic_at(AT_FDCWD, "/etc/locale.conf", pfd, f, 0644, COPY_REFLINK);
|
||||
+ r = copy_file_atomic_at(AT_FDCWD, etc_locale_conf(), pfd, f, 0644, COPY_REFLINK);
|
||||
if (r != -ENOENT) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to copy host's /etc/locale.conf: %m");
|
||||
@@ -514,7 +515,7 @@ static int process_keymap(int rfd) {
|
||||
|
||||
assert(rfd >= 0);
|
||||
|
||||
- pfd = chase_and_open_parent_at(rfd, "/etc/vconsole.conf",
|
||||
+ pfd = chase_and_open_parent_at(rfd, etc_vconsole_conf(),
|
||||
CHASE_AT_RESOLVE_IN_ROOT|CHASE_MKDIR_0755|CHASE_WARN|CHASE_NOFOLLOW,
|
||||
&f);
|
||||
if (pfd < 0)
|
||||
@@ -531,7 +532,7 @@ static int process_keymap(int rfd) {
|
||||
return log_error_errno(r, "Failed to check if directory file descriptor is root: %m");
|
||||
|
||||
if (arg_copy_keymap && r == 0) {
|
||||
- r = copy_file_atomic_at(AT_FDCWD, "/etc/vconsole.conf", pfd, f, 0644, COPY_REFLINK);
|
||||
+ r = copy_file_atomic_at(AT_FDCWD, etc_vconsole_conf(), pfd, f, 0644, COPY_REFLINK);
|
||||
if (r != -ENOENT) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to copy host's /etc/vconsole.conf: %m");
|
||||
@@ -602,13 +603,13 @@ static int prompt_timezone(int rfd) {
|
||||
|
||||
static int process_timezone(int rfd) {
|
||||
_cleanup_close_ int pfd = -EBADF;
|
||||
- _cleanup_free_ char *f = NULL;
|
||||
+ _cleanup_free_ char *f = NULL, *relpath = NULL;
|
||||
const char *e;
|
||||
int r;
|
||||
|
||||
assert(rfd >= 0);
|
||||
|
||||
- pfd = chase_and_open_parent_at(rfd, "/etc/localtime",
|
||||
+ pfd = chase_and_open_parent_at(rfd, etc_localtime(),
|
||||
CHASE_AT_RESOLVE_IN_ROOT|CHASE_MKDIR_0755|CHASE_WARN|CHASE_NOFOLLOW,
|
||||
&f);
|
||||
if (pfd < 0)
|
||||
@@ -627,7 +628,7 @@ static int process_timezone(int rfd) {
|
||||
if (arg_copy_timezone && r == 0) {
|
||||
_cleanup_free_ char *s = NULL;
|
||||
|
||||
- r = readlink_malloc("/etc/localtime", &s);
|
||||
+ r = readlink_malloc(etc_localtime(), &s);
|
||||
if (r != -ENOENT) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to read host's /etc/localtime: %m");
|
||||
@@ -648,9 +649,12 @@ static int process_timezone(int rfd) {
|
||||
if (isempty(arg_timezone))
|
||||
return 0;
|
||||
|
||||
- e = strjoina("../usr/share/zoneinfo/", arg_timezone);
|
||||
+ e = strjoina("/usr/share/zoneinfo/", arg_timezone);
|
||||
+ r = path_make_relative_parent(etc_localtime(), e, &relpath);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
|
||||
- r = symlinkat_atomic_full(e, pfd, f, /* make_relative= */ false);
|
||||
+ r = symlinkat_atomic_full(relpath, pfd, f, /* make_relative= */ false);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to create /etc/localtime symlink: %m");
|
||||
|
||||
@@ -707,7 +711,7 @@ static int process_hostname(int rfd) {
|
||||
|
||||
assert(rfd >= 0);
|
||||
|
||||
- pfd = chase_and_open_parent_at(rfd, "/etc/hostname",
|
||||
+ pfd = chase_and_open_parent_at(rfd, etc_hostname(),
|
||||
CHASE_AT_RESOLVE_IN_ROOT|CHASE_MKDIR_0755|CHASE_WARN,
|
||||
&f);
|
||||
if (pfd < 0)
|
||||
@@ -1235,12 +1239,12 @@ static int process_reset(int rfd) {
|
||||
return 0;
|
||||
|
||||
FOREACH_STRING(p,
|
||||
- "/etc/locale.conf",
|
||||
- "/etc/vconsole.conf",
|
||||
- "/etc/hostname",
|
||||
+ etc_locale_conf(),
|
||||
+ etc_vconsole_conf(),
|
||||
+ etc_hostname(),
|
||||
"/etc/machine-id",
|
||||
"/etc/kernel/cmdline",
|
||||
- "/etc/localtime") {
|
||||
+ etc_localtime()) {
|
||||
r = reset_one(rfd, p);
|
||||
if (r < 0)
|
||||
return r;
|
||||
diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
|
||||
index af66b48a3d..f13af53f6f 100644
|
||||
--- a/src/hostname/hostnamed.c
|
||||
+++ b/src/hostname/hostnamed.c
|
||||
@@ -112,7 +112,7 @@ static void context_read_etc_hostname(Context *c) {
|
||||
|
||||
assert(c);
|
||||
|
||||
- if (stat("/etc/hostname", ¤t_stat) >= 0 &&
|
||||
+ if (stat(etc_hostname(), ¤t_stat) >= 0 &&
|
||||
stat_inode_unmodified(&c->etc_hostname_stat, ¤t_stat))
|
||||
return;
|
||||
|
||||
@@ -131,7 +131,7 @@ static void context_read_machine_info(Context *c) {
|
||||
|
||||
assert(c);
|
||||
|
||||
- if (stat("/etc/machine-info", ¤t_stat) >= 0 &&
|
||||
+ if (stat(etc_machine_info(), ¤t_stat) >= 0 &&
|
||||
stat_inode_unmodified(&c->etc_machine_info_stat, ¤t_stat))
|
||||
return;
|
||||
|
||||
@@ -144,7 +144,7 @@ static void context_read_machine_info(Context *c) {
|
||||
(UINT64_C(1) << PROP_HARDWARE_VENDOR) |
|
||||
(UINT64_C(1) << PROP_HARDWARE_MODEL));
|
||||
|
||||
- r = parse_env_file(NULL, "/etc/machine-info",
|
||||
+ r = parse_env_file(NULL, etc_machine_info(),
|
||||
"PRETTY_HOSTNAME", &c->data[PROP_PRETTY_HOSTNAME],
|
||||
"ICON_NAME", &c->data[PROP_ICON_NAME],
|
||||
"CHASSIS", &c->data[PROP_CHASSIS],
|
||||
@@ -615,20 +615,20 @@ static int context_write_data_static_hostname(Context *c) {
|
||||
s = &c->etc_hostname_stat;
|
||||
|
||||
if (isempty(c->data[PROP_STATIC_HOSTNAME])) {
|
||||
- if (unlink("/etc/hostname") < 0 && errno != ENOENT)
|
||||
+ if (unlink(etc_hostname()) < 0 && errno != ENOENT)
|
||||
return -errno;
|
||||
|
||||
TAKE_PTR(s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
- r = write_string_file("/etc/hostname", c->data[PROP_STATIC_HOSTNAME],
|
||||
+ r = write_string_file(etc_hostname(), c->data[PROP_STATIC_HOSTNAME],
|
||||
WRITE_STRING_FILE_CREATE | WRITE_STRING_FILE_TRUNCATE);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* Cannot use WRITE_STRING_FILE_SYNC as it tries to sync parent dir */
|
||||
- fd = open("/etc/hostname", O_RDONLY|O_CLOEXEC);
|
||||
+ fd = open(etc_hostname(), O_RDONLY|O_CLOEXEC);
|
||||
if (fsync(fd) < 0)
|
||||
return -errno;
|
||||
|
||||
@@ -654,7 +654,7 @@ static int context_write_data_machine_info(Context *c) {
|
||||
* already, even if we can't make it hit the disk. */
|
||||
s = &c->etc_machine_info_stat;
|
||||
|
||||
- r = load_env_file(NULL, "/etc/machine-info", &l);
|
||||
+ r = load_env_file(NULL, etc_machine_info(), &l);
|
||||
if (r < 0 && r != -ENOENT)
|
||||
return r;
|
||||
|
||||
@@ -667,14 +667,14 @@ static int context_write_data_machine_info(Context *c) {
|
||||
}
|
||||
|
||||
if (strv_isempty(l)) {
|
||||
- if (unlink("/etc/machine-info") < 0 && errno != ENOENT)
|
||||
+ if (unlink(etc_machine_info()) < 0 && errno != ENOENT)
|
||||
return -errno;
|
||||
|
||||
TAKE_PTR(s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
- r = write_env_file_label(AT_FDCWD, "/etc/machine-info", NULL, l);
|
||||
+ r = write_env_file_label(AT_FDCWD, etc_machine_info(), NULL, l);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@@ -1420,7 +1420,7 @@ static int build_describe_response(Context *c, bool privileged, JsonVariant **re
|
||||
(void) vsock_get_local_cid(&local_cid);
|
||||
|
||||
(void) load_os_release_pairs(/* root= */ NULL, &os_release_pairs);
|
||||
- (void) load_env_file_pairs(/* f=*/ NULL, "/etc/machine-info", &machine_info_pairs);
|
||||
+ (void) load_env_file_pairs(/* f=*/ NULL, etc_machine_info(), &machine_info_pairs);
|
||||
|
||||
r = json_build(&v, JSON_BUILD_OBJECT(
|
||||
JSON_BUILD_PAIR("Hostname", JSON_BUILD_STRING(hn)),
|
||||
diff --git a/src/locale/localed-util.c b/src/locale/localed-util.c
|
||||
index 56996596fe..6e2a43aa56 100644
|
||||
--- a/src/locale/localed-util.c
|
||||
+++ b/src/locale/localed-util.c
|
||||
@@ -350,7 +350,7 @@ int vconsole_read_data(Context *c, sd_bus_message *m) {
|
||||
c->vc_cache = sd_bus_message_ref(m);
|
||||
}
|
||||
|
||||
- fd = RET_NERRNO(open("/etc/vconsole.conf", O_CLOEXEC | O_PATH));
|
||||
+ fd = RET_NERRNO(open(etc_vconsole_conf(), O_CLOEXEC | O_PATH));
|
||||
if (fd == -ENOENT) {
|
||||
c->vc_stat = (struct stat) {};
|
||||
vc_context_clear(&c->vc);
|
||||
@@ -372,7 +372,7 @@ int vconsole_read_data(Context *c, sd_bus_message *m) {
|
||||
x11_context_clear(&c->x11_from_vc);
|
||||
|
||||
r = parse_env_file_fd(
|
||||
- fd, "/etc/vconsole.conf",
|
||||
+ fd, etc_vconsole_conf(),
|
||||
"KEYMAP", &c->vc.keymap,
|
||||
"KEYMAP_TOGGLE", &c->vc.toggle,
|
||||
"XKBLAYOUT", &c->x11_from_vc.layout,
|
||||
@@ -496,7 +496,7 @@ int vconsole_write_data(Context *c) {
|
||||
|
||||
xc = context_get_x11_context(c);
|
||||
|
||||
- r = load_env_file(NULL, "/etc/vconsole.conf", &l);
|
||||
+ r = load_env_file(NULL, etc_vconsole_conf(), &l);
|
||||
if (r < 0 && r != -ENOENT)
|
||||
return r;
|
||||
|
||||
@@ -525,7 +525,7 @@ int vconsole_write_data(Context *c) {
|
||||
return r;
|
||||
|
||||
if (strv_isempty(l)) {
|
||||
- if (unlink("/etc/vconsole.conf") < 0)
|
||||
+ if (unlink(etc_vconsole_conf()) < 0)
|
||||
return errno == ENOENT ? 0 : -errno;
|
||||
|
||||
c->vc_stat = (struct stat) {};
|
||||
@@ -536,7 +536,7 @@ int vconsole_write_data(Context *c) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
- if (stat("/etc/vconsole.conf", &c->vc_stat) < 0)
|
||||
+ if (stat(etc_vconsole_conf(), &c->vc_stat) < 0)
|
||||
return -errno;
|
||||
|
||||
return 0;
|
||||
diff --git a/src/shared/env-file-label.c b/src/shared/env-file-label.c
|
||||
index 5917b6377f..c0c9668e9f 100644
|
||||
--- a/src/shared/env-file-label.c
|
||||
+++ b/src/shared/env-file-label.c
|
||||
@@ -2,8 +2,9 @@
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
-#include "env-file-label.h"
|
||||
#include "env-file.h"
|
||||
+#include "env-file-label.h"
|
||||
+#include "locale-setup.h"
|
||||
#include "selinux-util.h"
|
||||
|
||||
int write_env_file_label(int dir_fd, const char *fname, char **headers, char **l) {
|
||||
@@ -23,11 +24,11 @@ int write_env_file_label(int dir_fd, const char *fname, char **headers, char **l
|
||||
int write_vconsole_conf_label(char **l) {
|
||||
int r;
|
||||
|
||||
- r = mac_selinux_create_file_prepare("/etc/vconsole.conf", S_IFREG);
|
||||
+ r = mac_selinux_create_file_prepare(etc_vconsole_conf(), S_IFREG);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
- r = write_vconsole_conf(AT_FDCWD, "/etc/vconsole.conf", l);
|
||||
+ r = write_vconsole_conf(AT_FDCWD, etc_vconsole_conf(), l);
|
||||
|
||||
mac_selinux_create_file_clear();
|
||||
|
||||
diff --git a/src/shared/hostname-setup.c b/src/shared/hostname-setup.c
|
||||
index 6cfd4b54bf..88455f5c1e 100644
|
||||
--- a/src/shared/hostname-setup.c
|
||||
+++ b/src/shared/hostname-setup.c
|
||||
@@ -130,7 +130,7 @@ int read_etc_hostname(const char *path, char **ret) {
|
||||
assert(ret);
|
||||
|
||||
if (!path)
|
||||
- path = "/etc/hostname";
|
||||
+ path = etc_hostname();
|
||||
|
||||
f = fopen(path, "re");
|
||||
if (!f)
|
||||
diff --git a/src/shared/locale-setup.c b/src/shared/locale-setup.c
|
||||
index 4e7f486a23..a4351003a9 100644
|
||||
--- a/src/shared/locale-setup.c
|
||||
+++ b/src/shared/locale-setup.c
|
||||
@@ -64,7 +64,7 @@ static int locale_context_load_conf(LocaleContext *c, LocaleLoadFlag flag) {
|
||||
if (!FLAGS_SET(flag, LOCALE_LOAD_LOCALE_CONF))
|
||||
return 0;
|
||||
|
||||
- fd = RET_NERRNO(open("/etc/locale.conf", O_CLOEXEC | O_PATH));
|
||||
+ fd = RET_NERRNO(open(etc_locale_conf(), O_CLOEXEC | O_PATH));
|
||||
if (fd == -ENOENT)
|
||||
return 0;
|
||||
if (fd < 0)
|
||||
@@ -80,7 +80,7 @@ static int locale_context_load_conf(LocaleContext *c, LocaleLoadFlag flag) {
|
||||
c->st = st;
|
||||
locale_context_clear(c);
|
||||
|
||||
- r = parse_env_file_fd(fd, "/etc/locale.conf",
|
||||
+ r = parse_env_file_fd(fd, etc_locale_conf(),
|
||||
"LANG", &c->locale[VARIABLE_LANG],
|
||||
"LANGUAGE", &c->locale[VARIABLE_LANGUAGE],
|
||||
"LC_CTYPE", &c->locale[VARIABLE_LC_CTYPE],
|
||||
@@ -196,7 +196,7 @@ int locale_context_save(LocaleContext *c, char ***ret_set, char ***ret_unset) {
|
||||
return r;
|
||||
|
||||
if (strv_isempty(set)) {
|
||||
- if (unlink("/etc/locale.conf") < 0)
|
||||
+ if (unlink(etc_locale_conf()) < 0)
|
||||
return errno == ENOENT ? 0 : -errno;
|
||||
|
||||
c->st = (struct stat) {};
|
||||
@@ -208,11 +208,11 @@ int locale_context_save(LocaleContext *c, char ***ret_set, char ***ret_unset) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
- r = write_env_file_label(AT_FDCWD, "/etc/locale.conf", NULL, set);
|
||||
+ r = write_env_file_label(AT_FDCWD, etc_locale_conf(), NULL, set);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
- if (stat("/etc/locale.conf", &c->st) < 0)
|
||||
+ if (stat(etc_locale_conf(), &c->st) < 0)
|
||||
return -errno;
|
||||
|
||||
if (ret_set)
|
||||
@@ -292,3 +292,21 @@ int locale_setup(char ***environment) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+const char* etc_locale_conf(void) {
|
||||
+ static const char *cached = NULL;
|
||||
+
|
||||
+ if (!cached)
|
||||
+ cached = secure_getenv("SYSTEMD_ETC_LOCALE_CONF") ?: "/etc/locale.conf";
|
||||
+
|
||||
+ return cached;
|
||||
+}
|
||||
+
|
||||
+const char* etc_vconsole_conf(void) {
|
||||
+ static const char *cached = NULL;
|
||||
+
|
||||
+ if (!cached)
|
||||
+ cached = secure_getenv("SYSTEMD_ETC_VCONSOLE_CONF") ?: "/etc/vconsole.conf";
|
||||
+
|
||||
+ return cached;
|
||||
+}
|
||||
diff --git a/src/shared/locale-setup.h b/src/shared/locale-setup.h
|
||||
index 537acc72df..3f1cd6b88c 100644
|
||||
--- a/src/shared/locale-setup.h
|
||||
+++ b/src/shared/locale-setup.h
|
||||
@@ -27,3 +27,6 @@ void locale_context_take(LocaleContext *c, char *l[_VARIABLE_LC_MAX]);
|
||||
bool locale_context_equal(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]);
|
||||
|
||||
int locale_setup(char ***environment);
|
||||
+
|
||||
+const char* etc_locale_conf(void);
|
||||
+const char* etc_vconsole_conf(void);
|
||||
diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
|
||||
index e3b4367ec0..e0d38d3ad2 100644
|
||||
--- a/src/timedate/timedated.c
|
||||
+++ b/src/timedate/timedated.c
|
||||
@@ -306,22 +306,32 @@ static int context_write_data_timezone(Context *c) {
|
||||
|
||||
if (access("/usr/share/zoneinfo/UTC", F_OK) < 0) {
|
||||
|
||||
- if (unlink("/etc/localtime") < 0 && errno != ENOENT)
|
||||
+ if (unlink(etc_localtime()) < 0 && errno != ENOENT)
|
||||
return -errno;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
- source = "../usr/share/zoneinfo/UTC";
|
||||
+ source = "/usr/share/zoneinfo/UTC";
|
||||
} else {
|
||||
- p = path_join("../usr/share/zoneinfo", c->zone);
|
||||
+ p = path_join("/usr/share/zoneinfo", c->zone);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
|
||||
source = p;
|
||||
}
|
||||
|
||||
- return symlink_atomic(source, "/etc/localtime");
|
||||
+ return symlinkat_atomic_full(source, AT_FDCWD, etc_localtime(),
|
||||
+ !secure_getenv("SYSTEMD_ETC_LOCALTIME"));
|
||||
+}
|
||||
+
|
||||
+static const char* etc_adjtime(void) {
|
||||
+ static const char *cached = NULL;
|
||||
+
|
||||
+ if (!cached)
|
||||
+ cached = secure_getenv("SYSTEMD_ETC_ADJTIME") ?: "/etc/adjtime";
|
||||
+
|
||||
+ return cached;
|
||||
}
|
||||
|
||||
static int context_write_data_local_rtc(Context *c) {
|
||||
@@ -330,7 +340,7 @@ static int context_write_data_local_rtc(Context *c) {
|
||||
|
||||
assert(c);
|
||||
|
||||
- r = read_full_file("/etc/adjtime", &s, NULL);
|
||||
+ r = read_full_file(etc_adjtime(), &s, NULL);
|
||||
if (r < 0) {
|
||||
if (r != -ENOENT)
|
||||
return r;
|
||||
@@ -382,7 +392,7 @@ static int context_write_data_local_rtc(Context *c) {
|
||||
*(char*) mempcpy(stpcpy(stpcpy(mempcpy(w, s, a), prepend), c->local_rtc ? "LOCAL" : "UTC"), e, b) = 0;
|
||||
|
||||
if (streq(w, NULL_ADJTIME_UTC)) {
|
||||
- if (unlink("/etc/adjtime") < 0)
|
||||
+ if (unlink(etc_adjtime()) < 0)
|
||||
if (errno != ENOENT)
|
||||
return -errno;
|
||||
|
||||
@@ -394,7 +404,7 @@ static int context_write_data_local_rtc(Context *c) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
- return write_string_file_atomic_label("/etc/adjtime", w);
|
||||
+ return write_string_file_atomic_label(etc_adjtime(), w);
|
||||
}
|
||||
|
||||
static int context_update_ntp_status(Context *c, sd_bus *bus, sd_bus_message *m) {
|
||||
diff --git a/test/units/TEST-30-ONCLOCKCHANGE.sh b/test/units/TEST-30-ONCLOCKCHANGE.sh
|
||||
index 83698b8da6..11f30b75d3 100755
|
||||
--- a/test/units/TEST-30-ONCLOCKCHANGE.sh
|
||||
+++ b/test/units/TEST-30-ONCLOCKCHANGE.sh
|
||||
@@ -24,6 +24,34 @@ timedatectl set-time 2018-1-1
|
||||
|
||||
while test ! -f /tmp/clock-changed ; do sleep .5 ; done
|
||||
|
||||
+mkdir -p /etc/alternate-path
|
||||
+rm -f /etc/alternate-path/localtime
|
||||
+
|
||||
+cat <<EOF >/run/systemd/system.conf
|
||||
+[Manager]
|
||||
+ManagerEnvironment=SYSTEMD_ETC_LOCALTIME=/etc/alternate-path/localtime
|
||||
+EOF
|
||||
+mkdir -p /run/systemd/system/systemd-timedated.service.d
|
||||
+cat >/run/systemd/system/systemd-timedated.service.d/override.conf <<EOF
|
||||
+[Service]
|
||||
+Environment=SYSTEMD_ETC_LOCALTIME=/run/alternate-path/mylocaltime
|
||||
+Environment=SYSTEMD_ETC_ADJTIME=/run/alternate-path/myadjtime
|
||||
+EOF
|
||||
+systemctl daemon-reload
|
||||
+
|
||||
+systemd-run --on-timezone-change touch /tmp/timezone-changed-alternate-path-1
|
||||
+timedatectl set-timezone Europe/Berlin
|
||||
+
|
||||
+while test ! -f /tmp/timezone-changed-alternate-path-1 ; do sleep .5 ; done
|
||||
+
|
||||
+systemd-run --on-timezone-change touch /tmp/timezone-changed-alternate-path-2
|
||||
+timedatectl set-timezone Europe/Kyiv
|
||||
+
|
||||
+while test ! -f /tmp/timezone-changed-alternate-path-2 ; do sleep .5 ; done
|
||||
+
|
||||
+rm /run/systemd/system.conf /run/systemd/system/systemd-timedated.service.d/override.conf
|
||||
+systemctl daemon-reload
|
||||
+
|
||||
systemd-analyze log-level info
|
||||
|
||||
touch /testok
|
||||
diff --git a/test/units/TEST-45-TIMEDATE.sh b/test/units/TEST-45-TIMEDATE.sh
|
||||
index 420ebefd01..c1fa30e206 100755
|
||||
--- a/test/units/TEST-45-TIMEDATE.sh
|
||||
+++ b/test/units/TEST-45-TIMEDATE.sh
|
||||
@@ -403,6 +403,50 @@ EOF
|
||||
rm -f /run/systemd/network/ntp99.*
|
||||
}
|
||||
|
||||
+teardown_timedated_alternate_paths() {
|
||||
+ set +eu
|
||||
+
|
||||
+ rm -rf /run/systemd/system/systemd-timedated.service.d
|
||||
+ systemctl daemon-reload
|
||||
+ systemctl restart systemd-timedated
|
||||
+}
|
||||
+
|
||||
+testcase_timedated_alternate_paths() {
|
||||
+ trap teardown_timedated_alternate_paths RETURN
|
||||
+
|
||||
+ mkdir -p /run/alternate-path
|
||||
+ mkdir -p /run/systemd/system/systemd-timedated.service.d
|
||||
+ cat >/run/systemd/system/systemd-timedated.service.d/override.conf <<EOF
|
||||
+[Service]
|
||||
+Environment=SYSTEMD_ETC_LOCALTIME=/run/alternate-path/mylocaltime
|
||||
+Environment=SYSTEMD_ETC_ADJTIME=/run/alternate-path/myadjtime
|
||||
+EOF
|
||||
+ systemctl daemon-reload
|
||||
+ systemctl restart systemd-timedated
|
||||
+
|
||||
+ assert_in "Local time:" "$(timedatectl --no-pager)"
|
||||
+
|
||||
+ assert_eq "$(timedatectl --no-pager set-timezone Europe/Kyiv 2>&1)" ""
|
||||
+ assert_eq "$(readlink /run/alternate-path/mylocaltime | sed 's#^.*zoneinfo/##')" "Europe/Kyiv"
|
||||
+ assert_in "Time zone: Europe/Kyiv \(EES*T, \+0[0-9]00\)" "$(timedatectl)"
|
||||
+
|
||||
+ # Restart to force using get_timezine
|
||||
+ systemctl restart systemd-timedated
|
||||
+ assert_in "Time zone: Europe/Kyiv \(EES*T, \+0[0-9]00\)" "$(timedatectl)"
|
||||
+
|
||||
+ assert_in "RTC in local TZ: no" "$(timedatectl --no-pager)"
|
||||
+ assert_rc 0 timedatectl set-local-rtc 1
|
||||
+ assert_in "RTC in local TZ: yes" "$(timedatectl --no-pager)"
|
||||
+ assert_eq "$(cat /run/alternate-path/myadjtime)" "0.0 0 0
|
||||
+0
|
||||
+LOCAL"
|
||||
+ assert_rc 0 timedatectl set-local-rtc 0
|
||||
+ if [[ -e /run/alternate-path/myadjtime ]]; then
|
||||
+ echo "/run/alternate-path/myadjtime still exists" >&2
|
||||
+ exit 1
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
run_testcases
|
||||
|
||||
touch /testok
|
||||
diff --git a/test/units/TEST-71-HOSTNAME.sh b/test/units/TEST-71-HOSTNAME.sh
|
||||
index dc3f587ea3..add24c6804 100755
|
||||
--- a/test/units/TEST-71-HOSTNAME.sh
|
||||
+++ b/test/units/TEST-71-HOSTNAME.sh
|
||||
@@ -237,6 +237,45 @@ test_varlink() {
|
||||
cmp "$A" "$B"
|
||||
}
|
||||
|
||||
+teardown_hostnamed_alternate_paths() {
|
||||
+ set +eu
|
||||
+
|
||||
+ rm -rf /run/systemd/system/systemd-hostnamed.service.d
|
||||
+ systemctl daemon-reload
|
||||
+ systemctl restart systemd-hostnamed
|
||||
+ if [[ -f /etc/hostname ]]; then
|
||||
+ orig=$(cat /etc/hostname)
|
||||
+ if [[ -n "${orig}" ]]; then
|
||||
+ hostnamectl hostname "${orig}"
|
||||
+ fi
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+testcase_hostnamed_alternate_paths() {
|
||||
+ trap teardown_hostnamed_alternate_paths RETURN
|
||||
+
|
||||
+ mkdir -p /run/alternate-path
|
||||
+
|
||||
+ mkdir -p /run/systemd/system/systemd-hostnamed.service.d
|
||||
+ cat >/run/systemd/system/systemd-hostnamed.service.d/override.conf <<EOF
|
||||
+[Service]
|
||||
+Environment=SYSTEMD_ETC_HOSTNAME=/run/alternate-path/myhostname
|
||||
+Environment=SYSTEMD_ETC_MACHINE_INFO=/run/alternate-path/mymachine-info
|
||||
+EOF
|
||||
+ systemctl daemon-reload
|
||||
+ systemctl restart systemd-hostnamed
|
||||
+
|
||||
+ assert_rc 0 hostnamectl set-hostname heisenberg
|
||||
+ assert_rc 0 hostnamectl chassis watch
|
||||
+
|
||||
+ output=$(hostnamectl)
|
||||
+ assert_in "Static hostname: heisenberg" "$output"
|
||||
+ assert_in "Chassis: watch" "$output"
|
||||
+ assert_in "heisenberg" "$(cat /run/alternate-path/myhostname)"
|
||||
+ assert_in "CHASSIS=watch" "$(cat /run/alternate-path/mymachine-info)"
|
||||
+}
|
||||
+
|
||||
+
|
||||
run_testcases
|
||||
|
||||
touch /testok
|
||||
diff --git a/test/units/TEST-73-LOCALE.sh b/test/units/TEST-73-LOCALE.sh
|
||||
index 0617bd0d51..fbc6f7dad4 100755
|
||||
--- a/test/units/TEST-73-LOCALE.sh
|
||||
+++ b/test/units/TEST-73-LOCALE.sh
|
||||
@@ -652,6 +652,53 @@ testcase_locale_gen_leading_space() {
|
||||
localectl set-locale en_US.UTF-8
|
||||
}
|
||||
|
||||
+teardown_localed_alternate_paths() {
|
||||
+ set +eu
|
||||
+
|
||||
+ rm -rf /run/systemd/system/systemd-localed.service.d
|
||||
+ systemctl daemon-reload
|
||||
+ systemctl restart systemd-localed
|
||||
+}
|
||||
+
|
||||
+testcase_localed_alternate_paths() {
|
||||
+ trap teardown_localed_alternate_paths RETURN
|
||||
+
|
||||
+ mkdir -p /run/alternate-path
|
||||
+
|
||||
+ mkdir -p /run/systemd/system/systemd-localed.service.d
|
||||
+ cat >/run/systemd/system/systemd-localed.service.d/override.conf <<EOF
|
||||
+[Service]
|
||||
+Environment=SYSTEMD_ETC_LOCALE_CONF=/run/alternate-path/mylocale.conf
|
||||
+Environment=SYSTEMD_ETC_VCONSOLE_CONF=/run/alternate-path/myvconsole.conf
|
||||
+EOF
|
||||
+ systemctl daemon-reload
|
||||
+ systemctl restart systemd-localed
|
||||
+
|
||||
+ if localectl list-locales | grep "^de_DE.UTF-8$"; then
|
||||
+ assert_rc 0 localectl set-locale "LANG=de_DE.UTF-8" "LC_CTYPE=C"
|
||||
+ else
|
||||
+ skip_locale=1
|
||||
+ fi
|
||||
+
|
||||
+ if localectl list-keymaps | grep -F "^no$"; then
|
||||
+ assert_rc 0 localectl set-keymap "no"
|
||||
+ else
|
||||
+ skip_keymap=1
|
||||
+ fi
|
||||
+
|
||||
+ output=$(localectl)
|
||||
+
|
||||
+ if [[ -z "${skip_locale-}" ]]; then
|
||||
+ assert_in "System Locale: LANG=de_DE.UTF-8" "$output"
|
||||
+ assert_in "LANG=de_DE.UTF-8" "$(cat /run/alternate-path/mylocale.conf)"
|
||||
+ fi
|
||||
+
|
||||
+ if [[ -z "${skip_keymap-}" ]]; then
|
||||
+ assert_in "VC Keymap: no" "$output"
|
||||
+ assert_in "KEYMAP=no" "$(cat /run/alternate-path/myvconsole.conf)"
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
# Make sure the content of kbd-model-map is the one that the tests expect
|
||||
# regardless of the version installed on the distro where the testsuite is
|
||||
# running on.
|
||||
diff --git a/test/units/TEST-74-AUX-UTILS.firstboot.sh b/test/units/TEST-74-AUX-UTILS.firstboot.sh
|
||||
index d9e5f59426..bb15e52896 100755
|
||||
--- a/test/units/TEST-74-AUX-UTILS.firstboot.sh
|
||||
+++ b/test/units/TEST-74-AUX-UTILS.firstboot.sh
|
||||
@@ -18,6 +18,10 @@ at_exit() {
|
||||
rm -fr "$ROOT"
|
||||
fi
|
||||
|
||||
+ if [[ -d /etc/otherpath ]]; then
|
||||
+ rm -rf /etc/otherpath
|
||||
+ fi
|
||||
+
|
||||
restore_locale
|
||||
}
|
||||
|
||||
@@ -282,3 +286,36 @@ rm -fv "$ROOT/etc/passwd" "$ROOT/etc/shadow"
|
||||
(! systemd-firstboot --root="$ROOT" --root-shell=/bin/nonexistentshell)
|
||||
(! systemd-firstboot --root="$ROOT" --machine-id=invalidmachineid)
|
||||
(! systemd-firstboot --root="$ROOT" --timezone=Foo/Bar)
|
||||
+
|
||||
+mkdir -p "${ROOT}/etc/otherpath"
|
||||
+mkdir -p /etc/otherpath
|
||||
+echo "KEYMAP=us" >/etc/otherpath/vconsole.conf
|
||||
+echo "LANG=en_US.UTF-8" >/etc/otherpath/locale.conf
|
||||
+ln -s "../$(readlink /etc/localtime)" /etc/otherpath/localtime
|
||||
+
|
||||
+SYSTEMD_ETC_LOCALE_CONF=/etc/otherpath/locale.conf \
|
||||
+SYSTEMD_ETC_VCONSOLE_CONF=/etc/otherpath/vconsole.conf \
|
||||
+SYSTEMD_ETC_LOCALTIME=/etc/otherpath/localtime \
|
||||
+SYSTEMD_ETC_HOSTNAME=/etc/otherpath/hostname \
|
||||
+systemd-firstboot --root="$ROOT" --copy-locale --copy-keymap --copy-timezone --hostname="weirdpaths"
|
||||
+
|
||||
+diff "${ROOT}/etc/otherpath/locale.conf" "/etc/otherpath/locale.conf"
|
||||
+diff "${ROOT}/etc/otherpath/vconsole.conf" "/etc/otherpath/vconsole.conf"
|
||||
+grep -q "weirdpaths" "${ROOT}/etc/otherpath/hostname"
|
||||
+
|
||||
+[[ "$(readlink /etc/otherpath/localtime)" = "$(readlink "${ROOT}/etc/otherpath/localtime")" ]]
|
||||
+
|
||||
+SYSTEMD_ETC_LOCALE_CONF=/etc/otherpath/locale.conf \
|
||||
+SYSTEMD_ETC_VCONSOLE_CONF=/etc/otherpath/vconsole.conf \
|
||||
+SYSTEMD_ETC_LOCALTIME=/etc/otherpath/localtime \
|
||||
+SYSTEMD_ETC_HOSTNAME=/etc/otherpath/hostname \
|
||||
+systemd-firstboot --root="$ROOT" --force \
|
||||
+ --hostname="weirdpaths2" \
|
||||
+ --locale=no_NO.UTF-8 \
|
||||
+ --keymap=no \
|
||||
+ --timezone=Europe/Oslo
|
||||
+
|
||||
+grep -q "LANG=no_NO.UTF-8" "${ROOT}/etc/otherpath/locale.conf"
|
||||
+grep -q "KEYMAP=no" "${ROOT}/etc/otherpath/vconsole.conf"
|
||||
+grep -q "weirdpaths2" "${ROOT}/etc/otherpath/hostname"
|
||||
+[[ "$(readlink "${ROOT}/etc/otherpath/localtime")" = "../../usr/share/zoneinfo/Europe/Oslo" ]]
|
||||
@@ -1,5 +1,9 @@
|
||||
[General]
|
||||
Experimental=true
|
||||
# Increase temporary device timeout from 30s to 195s to prevent device
|
||||
# removal during connection retries and to align with Home Assistant's
|
||||
# Bluetooth stack expectations
|
||||
TemporaryTimeout=195
|
||||
|
||||
[Policy]
|
||||
AutoEnable=true
|
||||
|
||||
@@ -5,6 +5,5 @@
|
||||
"tag": "{{.Name}}"
|
||||
},
|
||||
"data-root": "/mnt/data/docker",
|
||||
"deprecated-key-path": "/mnt/overlay/etc/docker/key.json",
|
||||
"bip": "172.30.232.1/23"
|
||||
}
|
||||
|
||||
@@ -5,3 +5,12 @@ net.ipv4.igmp_max_memberships = 1024
|
||||
# Increase maximum receive and send buffer size
|
||||
net.core.rmem_max = 4194304
|
||||
net.core.wmem_max = 4194304
|
||||
|
||||
# Disable TCP slow start after idle to keep cwnd across idle
|
||||
net.ipv4.tcp_slow_start_after_idle = 0
|
||||
|
||||
# Enable linear RTO backoff for "thin" TCP streams.
|
||||
# "Thin" per kernel: tp->packets_out < 4 and not in initial slow start.
|
||||
# Ref: tcp_stream_is_thin(tp) in include/net/tcp.h
|
||||
# Rationale: reduce tail latency for API-style connections after sporadic loss.
|
||||
net.ipv4.tcp_thin_linear_timeouts = 1
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
[Manager]
|
||||
ManagerEnvironment=SYSTEMD_ETC_LOCALTIME=/mnt/overlay/etc/localtime
|
||||
@@ -3,4 +3,3 @@ FailureAction=reboot
|
||||
|
||||
[Service]
|
||||
ExecStartPre=/usr/libexec/docker-disk-check
|
||||
ExecStopPost=/usr/libexec/docker-failure
|
||||
|
||||
@@ -15,6 +15,9 @@ Before=getty.target
|
||||
Conflicts=rescue.service
|
||||
Before=rescue.service
|
||||
|
||||
# Same value as RestartMaxDelaySec to avoid marking the service as failed
|
||||
StartLimitIntervalSec=3s
|
||||
|
||||
[Service]
|
||||
# the VT is cleared by TTYVTDisallocate
|
||||
# The '-o' option value tells agetty to replace 'login' arguments with an
|
||||
@@ -23,7 +26,9 @@ Before=rescue.service
|
||||
ExecStart=/usr/sbin/hassos-cli
|
||||
Type=idle
|
||||
Restart=always
|
||||
RestartSec=0
|
||||
RestartSec=100ms
|
||||
RestartMaxDelaySec=3s
|
||||
RestartSteps=3
|
||||
UtmpIdentifier=%I
|
||||
TTYPath=/dev/%I
|
||||
TTYReset=yes
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
[Service]
|
||||
Environment=SYSTEMD_ETC_LOCALTIME=/mnt/overlay/etc/localtime
|
||||
ReadWritePaths=/etc /mnt/overlay/etc
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ "$SERVICE_RESULT" = "exit-code" ] && [ "$EXIT_STATUS" = "1" ]; then
|
||||
echo "Docker exited with exit status 1, this might be caused by corrupted key.json."
|
||||
size=$(stat -c %s "/mnt/overlay/etc/docker/key.json")
|
||||
echo "key.json: ${size} bytes"
|
||||
if ! jq -e < "/mnt/overlay/etc/docker/key.json" > /dev/null || [ "${size}" -eq 0 ]; then
|
||||
echo "key.json appears to be corrupted, it is not parsable. Removing it."
|
||||
rm -f "/mnt/overlay/etc/docker/key.json"
|
||||
fi
|
||||
fi
|
||||
@@ -18,3 +18,7 @@ if [ ! -f /mnt/overlay/etc/systemd/timesyncd.conf ]; then
|
||||
mkdir -p /mnt/overlay/etc/systemd
|
||||
cp -fp /etc/systemd/timesyncd.conf /mnt/overlay/etc/systemd/timesyncd.conf
|
||||
fi
|
||||
|
||||
if [ ! -L /mnt/overlay/etc/localtime ]; then
|
||||
ln -sf /usr/share/zoneinfo/Etc/UTC /mnt/overlay/etc/localtime
|
||||
fi
|
||||
|
||||
@@ -3,15 +3,40 @@
|
||||
# Run logging cli
|
||||
# ==============================================================================
|
||||
|
||||
echo "Waiting for the Home Assistant CLI to be ready..."
|
||||
run_shell() { exec /bin/ash -l; }
|
||||
interrupt() { echo " cancelled"; systemctl reset-failed "ha-cli@*"; run_shell; }
|
||||
emergency_shell() {
|
||||
printf "\n\n[WARNING] Home Assistant CLI is not starting or was interrupted.\n"
|
||||
echo ""
|
||||
echo "This happens when start of all services takes longer than expected, or because"
|
||||
echo "of slow internet connection. Emergency console has been started, you can use"
|
||||
echo "for example the following commands for troubleshooting:"
|
||||
echo ""
|
||||
echo " * 'docker ps -a' - e.g. to check if 'hassio_supervisor' container is running"
|
||||
echo " * 'journalctl -e' - to investigate latest system logs"
|
||||
echo " * 'exit' or Ctrl+D - to exit the emergency console and retry HA CLI startup"
|
||||
echo ""
|
||||
run_shell
|
||||
}
|
||||
|
||||
trap interrupt INT
|
||||
|
||||
printf "Waiting for the Home Assistant CLI to be ready..."
|
||||
|
||||
i=0
|
||||
while [ ! "$(docker ps -q -f name=hassio_cli)" ]; do
|
||||
sleep 1
|
||||
|
||||
if [ $((i % 4)) = 0 ]; then
|
||||
printf "\010\010\010 \010\010\010"
|
||||
else
|
||||
printf "."
|
||||
fi
|
||||
|
||||
i=$((i+1))
|
||||
if [ $i = 60 ]; then
|
||||
echo "[WARN] Home Assistant CLI not starting! Jumping into emergency console..."
|
||||
exec /bin/ash -l
|
||||
|
||||
if [ $i = 180 ]; then
|
||||
emergency_shell
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -22,16 +47,20 @@ docker container exec \
|
||||
case $? in
|
||||
10)
|
||||
# Jump to root login shell (login command)
|
||||
exec /bin/ash -l
|
||||
run_shell
|
||||
;;
|
||||
130)
|
||||
# 130 is CLI termination with Ctrl+C (SIGINT)
|
||||
printf "\nHome Assistant CLI has been interrupted.\n"
|
||||
systemctl reset-failed "ha-cli@*"
|
||||
;;
|
||||
143)
|
||||
# 143 graceful termination (SIGTERM). Most likely a proper shutdown.
|
||||
# Just sleep for a while until actual systemd shutdown gets invoked.
|
||||
echo ""
|
||||
echo "Home Assistant CLI has been terminated."
|
||||
printf "\nHome Assistant CLI has been terminated.\n"
|
||||
sleep 30
|
||||
;;
|
||||
*)
|
||||
echo "HA CLI failed with error code: $?"
|
||||
printf "\nHA CLI failed with error code: %s\n" "$?"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -11,6 +11,7 @@ set -e
|
||||
# Init supervisor
|
||||
SUPERVISOR_DATA=/mnt/data/supervisor
|
||||
SUPERVISOR_STARTUP_MARKER="/run/supervisor/startup-marker"
|
||||
SUPERVISOR_CIDFILE="${SUPERVISOR_DATA}/hassio_supervisor.cid"
|
||||
SUPERVISOR_STARTSCRIPT_VERSION="/mnt/data/.hassos-supervisor-version"
|
||||
SUPERVISOR_IMAGE="ghcr.io/home-assistant/${SUPERVISOR_ARCH}-hassio-supervisor"
|
||||
|
||||
@@ -58,8 +59,8 @@ if [ -z "${SUPERVISOR_IMAGE_ID}" ]; then
|
||||
docker tag "${SUPERVISOR_IMAGE}:${SUPERVISOR_VERSION}" "${SUPERVISOR_IMAGE}:latest"
|
||||
else
|
||||
# Pull failed, updater info might be corrupted or the release might have
|
||||
# been removed from the container registry, delete the updater info
|
||||
# to start from scratch on next try.
|
||||
# been removed from the container registry, delete the updater info
|
||||
# to start from scratch on next try.
|
||||
echo "[ERROR] Supervisor download failed."
|
||||
rm -f "${SUPERVISOR_DATA}/updater.json"
|
||||
exit 1
|
||||
@@ -87,12 +88,18 @@ fi
|
||||
|
||||
# If Supervisor container is missing, create it
|
||||
if [ -z "${SUPERVISOR_CONTAINER_ID}" ]; then
|
||||
# We need to remove the CID file here, Docker will refuse to start if the
|
||||
# file is present. Single instance is ensured by other code paths.
|
||||
[ -f "${SUPERVISOR_CIDFILE}" ] && rm -f "${SUPERVISOR_CIDFILE}"
|
||||
|
||||
echo "[INFO] Creating a new Supervisor container..."
|
||||
# shellcheck disable=SC2086
|
||||
docker container create \
|
||||
--name hassio_supervisor \
|
||||
--privileged --security-opt apparmor="hassio-supervisor" \
|
||||
--oom-score-adj=-300 \
|
||||
--cidfile "${SUPERVISOR_CIDFILE}" \
|
||||
--mount type=bind,src="${SUPERVISOR_CIDFILE}",dst=/run/cid,readonly \
|
||||
-v /run/docker.sock:/run/docker.sock:rw \
|
||||
-v /run/containerd/containerd.sock:/run/containerd/containerd.sock:rw \
|
||||
-v /run/systemd/journal/socket:/run/systemd/journal/socket:rw \
|
||||
|
||||
@@ -16,6 +16,7 @@ BOARD_DIR=${2}
|
||||
# HassOS tasks
|
||||
fix_rootfs
|
||||
install_tini_docker
|
||||
setup_localtime
|
||||
|
||||
# Write os-release
|
||||
# shellcheck disable=SC2153
|
||||
@@ -26,7 +27,7 @@ install_tini_docker
|
||||
echo "VERSION_ID=$(hassos_version)"
|
||||
echo "PRETTY_NAME=\"${HASSOS_NAME} $(hassos_version)\""
|
||||
echo "CPE_NAME=cpe:2.3:o:home-assistant:${HASSOS_ID}:$(hassos_version):*:${DEPLOYMENT}:*:*:*:${BOARD_ID}:*"
|
||||
echo "HOME_URL=https://hass.io/"
|
||||
echo "HOME_URL=https://www.home-assistant.io/"
|
||||
echo "VARIANT=\"${HASSOS_NAME} ${BOARD_NAME}\""
|
||||
echo "VARIANT_ID=${BOARD_ID}"
|
||||
echo "SUPERVISOR_MACHINE=${SUPERVISOR_MACHINE}"
|
||||
|
||||
@@ -45,3 +45,8 @@ function fix_rootfs() {
|
||||
function install_tini_docker() {
|
||||
ln -fs /usr/bin/tini "${TARGET_DIR}/usr/bin/docker-init"
|
||||
}
|
||||
|
||||
function setup_localtime() {
|
||||
# localtime is writable through SYSTEMD_ETC_LOCALTIME
|
||||
ln -fs /mnt/overlay/etc/localtime "${TARGET_DIR}/etc/localtime"
|
||||
}
|
||||
|
||||
@@ -4,23 +4,26 @@ set -e
|
||||
BUILDER_UID="$(id -u)"
|
||||
BUILDER_GID="$(id -g)"
|
||||
CACHE_DIR="${CACHE_DIR:-$HOME/hassos-cache}"
|
||||
ARGS="$*"
|
||||
COMMAND="${ARGS:-bash}"
|
||||
|
||||
sudo mkdir -p "${CACHE_DIR}"
|
||||
sudo chown -R "${BUILDER_UID}:${BUILDER_GID}" "${CACHE_DIR}"
|
||||
sudo docker build -t hassos:local .
|
||||
if [ "$BUILDER_UID" -eq "0" ] || [ "$BUILDER_GID" == "0" ]; then
|
||||
echo "ERROR: Please run this script as a regular (non-root) user with sudo privileges."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "${CACHE_DIR}"
|
||||
docker build -t hassos:local .
|
||||
|
||||
if [ ! -f buildroot/Makefile ]; then
|
||||
# Initialize git submodule
|
||||
git submodule update --init
|
||||
fi
|
||||
|
||||
# Make sure loop devices are present before starting the container
|
||||
sudo losetup -f > /dev/null
|
||||
if command -v losetup >/dev/null && [ ! -e /dev/loop0 ]; then
|
||||
# Make sure loop devices are present before starting the container
|
||||
sudo losetup -f > /dev/null
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
sudo docker run -it --rm --privileged \
|
||||
docker run -it --rm --privileged \
|
||||
-v "$(pwd):/build" -v "${CACHE_DIR}:/cache" \
|
||||
-e BUILDER_UID="${BUILDER_UID}" -e BUILDER_GID="${BUILDER_GID}" \
|
||||
hassos:local ${COMMAND}
|
||||
hassos:local "${@:-bash}"
|
||||
|
||||
Reference in New Issue
Block a user