diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a2896712c..b16ecb663 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -3,23 +3,12 @@ # the last matching pattern takes the most -*.md @EvilOlaf @littlecxm @TheLinuxBug @TRSx80 -*.patch @armbian/board-maintainers +*.md @EvilOlaf @littlecxm @TheLinuxBug @TRSx80 @igorpecovnik -.github/ @littlecxm -.vscode @littlecxm +.github/ @igorpecovnik @rpardini @hzyitc -config/ @armbian/board-maintainers -config/cli @amazingfate @paolosabatino -config/desktop @amazingfate @monkaBlyat @paolosabatino -config/distributions @rpardini @neheb -config/its @ManoftheSea -config/optional @iav @hzyitc @mhoffrog -config/sources @armbian/board-maintainers -config/templates @The-going @iav @neheb - -lib/ @rpardini @150balbes @The-going @iav @hzyitc @mhoffrog @armbian/build-scripts -packages/ @matthijskooijman @SteeManMI @The-going @marcone @mklein-de @schwar3kat @joekhoobyar @armbian/board-maintainers +lib/ @armbian/build-scripts +packages/ @armbian/build-scripts tools/ @The-going @iav @neheb @hzyitc @mhoffrog config/kernel/linux-bcm2711-current.config @igorpecovnik diff --git a/.github/ISSUE_TEMPLATE/bugreport.yml b/.github/ISSUE_TEMPLATE/bugreport.yml index f84a4751e..49fd6ec4e 100644 --- a/.github/ISSUE_TEMPLATE/bugreport.yml +++ b/.github/ISSUE_TEMPLATE/bugreport.yml @@ -41,8 +41,7 @@ body: Which branch are you using? " options: - - master (frozen release) - - armbian-next (main development branch) + - main (main development branch) - other validations: required: true diff --git a/.github/workflows/build-all-desktops.yml b/.github/workflows/build-all-desktops.yml deleted file mode 100644 index 02884c1c1..000000000 --- a/.github/workflows/build-all-desktops.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Build All Desktops -# -# Generates supported desktops for uefi-arm64 and uefi-x86 every day or if label "Desktop" is set -# - -on: -# schedule: -# - cron: "30 22 * * *" - workflow_dispatch: - - pull_request: - types: [ready_for_review] - - pull_request_review: - types: [submitted] - -permissions: - contents: read - -jobs: - - ########################################################################################## - # # - # Test build of all desktops # - # # - ########################################################################################## - - Test: - permissions: - contents: none - - if: ${{ (github.repository_owner == 'Armbian') && (contains( github.event.pull_request.labels.*.name, 'Desktop :desktop_computer:') || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') }} - uses: armbian/scripts/.github/workflows/build-test-image-docker.yml@master - - with: - - runner: "ubuntu-latest" - reference: ${{ github.event.pull_request.head.sha }} diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml deleted file mode 100644 index 907084de7..000000000 --- a/.github/workflows/build-images.yml +++ /dev/null @@ -1,541 +0,0 @@ -name: Build Images -# -# Generates beta, stable or RC images. You can select build runners. By default it generates all images, but you can build images only for one target -# Images are placed at www.arnmbian.com and nighly beta also at https://github.com/armbian/build/releases/tag/latest -# - -on: - -# workflow_run: -# workflows: ["Build train"] -# types: -# - completed - -# schedule: -# - cron: "30 0 * * *" - - workflow_dispatch: - - inputs: - - choice: - type: choice - description: Build targets - options: - - beta - - stable - - rc - - runner: - type: choice - description: Build runners for CLI - options: - - small - - ubuntu-latest - - sourcerepo: - description: Source repository - required: false - default: 'nightly' - - packagesrepo: - type: choice - description: Beta packages repository - options: - - "yes" - - "no" - - fromsources: - type: choice - description: Build from sources - options: - - "no" - - "yes" - - advanced: - description: 'Single board (grep -w tinkerboard |)' - required: false - default: '' - -env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - -jobs: - - clean: - - if: ${{ github.repository_owner == 'Armbian' }} - name: Purge older releases - runs-on: [ubuntu-latest] - steps: - - - name: Purge old releases of trunk build - uses: Vucko130/delete-older-releases@v0.2.2 - with: - keep_latest: 32 - delete_tag_pattern: trunk - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Purge action workflow logs - uses: igorjs/gh-actions-clean-workflow@v3 - with: - token: ${{ secrets.GITHUB_TOKEN }} - days_old: 14 - - fake: - if: ${{ github.repository_owner == 'Armbian' }} - runs-on: small - needs: [ clean ] - name: Source changes - outputs: - changes: ${{steps.list_releases.outputs.changes}} - version: ${{steps.list_releases.outputs.version}} - steps: - - run: | - echo "not empty" > changes - - - uses: actions/checkout@v3 - if: ${{ github.repository_owner == 'Armbian' && github.event.inputs.choice != 'stable' && github.event.inputs.choice != 'rc' }} - with: - fetch-depth: 1 - path: build - clean: false - ref: nightly - - - name: "Get latest release version" - if: ${{ github.repository_owner == 'Armbian' && github.event.inputs.choice != 'stable' && github.event.inputs.choice != 'rc' }} - id: list_releases - run: | - - RELE=$(curl -ks https://api.github.com/repos/armbian/build/releases/latest ^| grep "browser_download_url" | grep -o -P '(?<=Armbian.).*(?=_)' | cut -d"_" -f1 | sort | uniq | head -1) - SOUR=$(cat build/VERSION) - - # skip if version in git is the same as at release - if [[ "$RELE" == "$SOUR" ]]; then - echo "changes=true" >> $GITHUB_OUTPUT - fi - # output version - echo "version=${SOUR}" >> $GITHUB_OUTPUT - - - uses: actions/upload-artifact@v3 - with: - path: changes - name: changes - if-no-files-found: ignore - - - uses: actions/upload-artifact@v3 - with: - path: changes - name: changes - if-no-files-found: ignore - - - generaterelease: - - needs: [ fake ] - if: ${{ github.repository_owner == 'Armbian' && needs.fake.outputs.changes != 'true' }} - runs-on: ubuntu-latest - name: "Update latest release" - steps: - - - run: | - - echo "Env: ${{ github.event.inputs.choice }}" - echo "Env: ${{ github.event.inputs.runner }}" - echo "Env: ${{ github.event.inputs.sourcerepo }}" - echo "Branch: ${{ github.event.inputs.branch }}" - echo "Version: ${{ needs.fake.outputs.version }}" - - - uses: actions/checkout@v3 - if: ${{ github.repository_owner == 'Armbian' && github.event.inputs.choice != 'stable' && github.event.inputs.choice != 'rc' }} - with: - fetch-depth: 1 - - - uses: ClementTsang/delete-tag-and-release@v0.3.1 - if: ${{ github.repository_owner == 'Armbian' && github.event.inputs.choice != 'stable' && github.event.inputs.choice != 'rc' }} - with: - delete_release: true - tag_name: latest - - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - uses: ncipollo/release-action@v1 - if: ${{ github.repository_owner == 'Armbian' && github.event.inputs.choice != 'stable' && github.event.inputs.choice != 'rc' }} - with: - artifacts: "LICENSE" - tag: "${{ needs.fake.outputs.version }}" - name: "Build in progress" - bodyFile: ".github/Releases-wip.md" - allowUpdates: true - removeArtifacts: true - token: ${{ secrets.GITHUB_TOKEN }} - - merge: - - needs: [ generaterelease ] - uses: armbian/scripts/.github/workflows/merge-from-branch.yml@master - - with: - branch: 'nightly' - runner: small - - secrets: - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - - x86: - - needs: [ merge ] - uses: armbian/scripts/.github/workflows/build-with-docker.yml@master - - with: - - variant: 'cli:${{ github.event.inputs.choice }}' - sourcerepo: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - fromsources: '${{ github.event.inputs.fromsources }}' - runner: ubuntu-latest - part: 1 - of: 1 - include: 'grep uefi-x86 | ${{ github.event.inputs.advanced }}' - exclude: '' - uploading: false - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - x86-desktop: - - needs: [ merge ] - uses: armbian/scripts/.github/workflows/build-with-docker.yml@master - - with: - - variant: 'desktop:${{ github.event.inputs.choice }}' - sourcerepo: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - fromsources: '${{ github.event.inputs.fromsources }}' - runner: "big" - part: 1 - of: 1 - include: 'grep uefi-x86 | ${{ github.event.inputs.advanced }}' - exclude: '' - uploading: false - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - x86-minimal: - - needs: [ merge ] - uses: armbian/scripts/.github/workflows/build-with-docker.yml@master - - with: - - variant: 'minimal:${{ github.event.inputs.choice }}' - sourcerepo: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - fromsources: '${{ github.event.inputs.fromsources }}' - runner: "big" - part: 1 - of: 1 - include: 'grep uefi-x86 | ${{ github.event.inputs.advanced }}' - exclude: '' - uploading: false - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - cli1: - - needs: [ merge ] - uses: armbian/scripts/.github/workflows/build-with-docker.yml@master - - with: - - variant: 'cli:${{ github.event.inputs.choice }}' - sourcerepo: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - fromsources: '${{ github.event.inputs.fromsources }}' - runner: ubuntu-latest - part: 1 - of: 2 - include: '${{ github.event.inputs.advanced }}' - exclude: 'grep -v uefi-x86 | grep -v uefi-riscv64 | ' - uploading: false - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - - cli2: - - needs: [ merge ] - uses: armbian/scripts/.github/workflows/build-with-docker.yml@master - - with: - - variant: 'cli:${{ github.event.inputs.choice }}' - sourcerepo: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - runner: '${{ github.event.inputs.runner }}' - fromsources: '${{ github.event.inputs.fromsources }}' - part: 2 - of: 2 - include: '${{ github.event.inputs.advanced }}' - exclude: 'grep -v uefi-x86 | grep -v uefi-riscv64 | ' - uploading: false - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - minimal: - - needs: [ merge ] - uses: armbian/scripts/.github/workflows/build-with-docker.yml@master - - with: - - variant: 'minimal:${{ github.event.inputs.choice }}' - sourcerepo: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - runner: '${{ github.event.inputs.runner }}' - fromsources: '${{ github.event.inputs.fromsources }}' - part: 1 - of: 1 - include: '${{ github.event.inputs.advanced }}' - exclude: 'grep -v uefi-x86 | grep -v uefi-riscv64 | ' - uploading: false - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - desktop1: - - needs: [ merge ] - uses: armbian/scripts/.github/workflows/build-with-docker.yml@master - - with: - variant: 'desktop:${{ github.event.inputs.choice }}' - sourcerepo: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - fromsources: '${{ github.event.inputs.fromsources }}' - runner: "big" - part: 1 - of: 2 - include: '${{ github.event.inputs.advanced }}' - exclude: 'grep -v uefi-x86 | grep -v uefi-riscv64 | ' - uploading: false - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - desktop2: - - needs: [ merge ] - uses: armbian/scripts/.github/workflows/build-with-docker.yml@master - - with: - variant: 'desktop:${{ github.event.inputs.choice }}' - sourcerepo: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - fromsources: '${{ github.event.inputs.fromsources }}' - runner: "big" - part: 2 - of: 2 - include: '${{ github.event.inputs.advanced }}' - exclude: 'grep -v uefi-x86 | grep -v uefi-riscv64 | ' - uploading: false - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - riscv64: - - needs: [ merge ] - uses: armbian/scripts/.github/workflows/build-with-docker.yml@master - - with: - - variant: 'cli:${{ github.event.inputs.choice }}' - sourcerepo: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - runner: 'igor' - fromsources: '${{ github.event.inputs.fromsources }}' - part: 1 - of: 1 - include: '${{ github.event.inputs.advanced }}' - exclude: 'grep uefi-riscv64 | ' - uploading: false - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - riscv64-min: - - needs: [ merge ] - uses: armbian/scripts/.github/workflows/build-with-docker.yml@master - - with: - - variant: 'minimal:${{ github.event.inputs.choice }}' - sourcerepo: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - runner: 'igor' - fromsources: '${{ github.event.inputs.fromsources }}' - part: 1 - of: 1 - include: '${{ github.event.inputs.advanced }}' - exclude: 'grep uefi-riscv64 | ' - uploading: false - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - riscv64-x: - - needs: [ merge ] - uses: armbian/scripts/.github/workflows/build-with-docker.yml@master - - with: - variant: 'desktop:${{ github.event.inputs.choice }}' - sourcerepo: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - fromsources: '${{ github.event.inputs.fromsources }}' - runner: 'igor' - part: 1 - of: 1 - include: '${{ github.event.inputs.advanced }}' - exclude: 'grep uefi-riscv64 | ' - uploading: false - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - jobsend: - - name: finish - needs: [x86,x86-desktop,x86-minimal,minimal,cli1,desktop1,cli2,desktop2,riscv64,riscv64-min,riscv64-x] - runs-on: [self-hosted, Linux, local] - if: ${{ github.repository_owner == 'Armbian' && github.event.inputs.choice != 'stable' && github.event.inputs.choice != 'rc' }} - steps: - - - - name: Runner prepare - uses: armbian/actions/runner-prepare@main - - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 1 - ref: nightly - - - name: Get releases - uses: armbian/actions/make-json@main - with: - repository: "build" - key: ${{ secrets.KEY_TORRENTS }} - known_hosts: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - - name: Make build list - run: | - - echo "VERSION=$(cat VERSION)" >> $GITHUB_ENV - cat ".github/Releases.md" >> README.tmp - echo -en " \n\n" >> README.tmp - echo "| Image                              | GPG | SHA | Release | Branch |     Variant |              Size |       Kernel |" >> README.tmp - echo "| --- | :--: | :--: | --: | --: | --: | --: | --: |" >> README.tmp - cat json/build.md >> README.tmp - echo -en "\n  \n" >> README.tmp - - - uses: ncipollo/release-action@v1 - with: - tag: "${{ env.VERSION }}" - bodyFile: "README.tmp" - name: "Armbian ${{ env.VERSION }}" - allowUpdates: true - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Update mirrors - uses: armbian/actions/triggers@main - with: - KEY: ${{ secrets.KEY_SYNC_MIRRORS }} - USER: ${{ secrets.USER_REPOSITORY }} - HOST: ${{ secrets.HOST_REPOSITORY }} - KNOWN_HOSTS: ${{ secrets.KNOWN_HOSTS_REPOSITORY }} - - - name: Sync images & recreate torrents - uses: armbian/actions/triggers@main - with: - KEY: ${{ secrets.KEY_RECREATE_TORRENT }} - USER: ${{ secrets.USER_REPOSITORY }} - HOST: ${{ secrets.HOST_REPOSITORY }} - KNOWN_HOSTS: ${{ secrets.KNOWN_HOSTS_REPOSITORY }} diff --git a/.github/workflows/build-kernel-pr.yml b/.github/workflows/build-kernel-pr.yml deleted file mode 100644 index 271298670..000000000 --- a/.github/workflows/build-kernel-pr.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: Build Kernels at PR -# -# Generates kernels at PR if their code, patches or config was changed in any way. Packages are uploaded as Github action build artefakts -# Build starts if label is set to "Ready" -# - -on: - workflow_dispatch: - pull_request: - types: [opened, reopened, edited, synchronize] - paths: - - 'config/kernel/**' - - 'config/sources/**' - - 'patch/**' - -jobs: - - Check: - name: Checking - if: ${{ github.repository_owner == 'Armbian' && contains( github.event.pull_request.labels.*.name, 'Ready for review :arrow_right:') }} - uses: armbian/scripts/.github/workflows/check-for-changes.yml@master - - with: - reference: ${{ github.event.pull_request.head.sha }} - runner: small - - Build: - needs: Check - if: ${{ github.repository_owner == 'Armbian' && contains( github.event.pull_request.labels.*.name, 'Ready for review :arrow_right:') }} - uses: armbian/scripts/.github/workflows/build-kernel.yml@master - - with: - - uploading: "false" - runner: "fast" - artifacts: "true" - reference: ${{ github.event.pull_request.head.sha }} - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - -# Repo: -# needs: [Check,Build] -# #if: ${{ github.repository_owner == 'Armbian' && contains( github.event.pull_request.labels.*.name, 'Ready :arrow_right:') }} -# uses: armbian/scripts/.github/workflows/repo.yml@master - -# secrets: -# GPG_KEY1: ${{ secrets.GPG_KEY1 }} -# GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} -# GPG_KEY2: ${{ secrets.GPG_KEY2 }} -# GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} -# SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} -# KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} -# KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} diff --git a/.github/workflows/build-train.yml b/.github/workflows/build-train.yml deleted file mode 100644 index bfc2afd94..000000000 --- a/.github/workflows/build-train.yml +++ /dev/null @@ -1,415 +0,0 @@ -name: Build train -# -# Generates kernels at push if their code, patches or config was changed in any way. If those conditions are met, then it also rebuild -# desktops, firmware, u-boot, update repository and increment nighlty build version. -# - -on: - -# schedule: -# - cron: "30 2 * * *" - - workflow_dispatch: - inputs: - sourcerepo: - description: Source repository - required: true - default: 'nightly' - packagesrepo: - type: string - description: Beta packages repository - default: 'yes' - - push: - branches: - - master - -jobs: - - ########################################################################################## - # # - # cancels previous runs associated with a workflow # - # # - ########################################################################################## - - Cancel: - name: "Cancel currently active" - if: ${{ github.repository_owner == 'Armbian' }} - runs-on: small - timeout-minutes: 3 - steps: - - uses: styfle/cancel-workflow-action@0.11.0 - if: ${{ github.event.schedule == '' }} - with: - all_but_latest: true - access_token: ${{ secrets.GITHUB_TOKEN }} - - ########################################################################################## - # # - # Clean upload folder # - # # - ########################################################################################## - - Cleaning: - permissions: - contents: none - needs: Cancel - if: ${{ success() && github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/clean-upload.yml@master - secrets: - KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - ########################################################################################## - # # - # Bump with version if compilation succeeded # - # # - ########################################################################################## - - Bump: - needs: [Cleaning] - if: ${{ success() && github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/update-version.yml@master - - with: - uploading: true - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - ########################################################################################## - # # - # Merge master into nighly image from which we build packages # - # # - ########################################################################################## - - Merge: - name: Merging - needs: [Bump] - if: ${{ github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/merge-from-branch.yml@master - - with: - branch: 'nightly' - runner: small - - secrets: - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - - ########################################################################################## - # # - # Check for changes in patches, kernel config and upstream # - # # - ########################################################################################## - - Check: - permissions: - contents: none - name: Checking - needs: Merge - if: ${{ success() && github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/check-for-changes.yml@master - - with: - reference: '${{ github.event.inputs.sourcerepo }}' - runner: ubuntu-latest - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - - ########################################################################################## - # # - # Build changed kernel packages # - # # - ########################################################################################## - - Kernel: - permissions: - contents: none - needs: Check - if: ${{ success() && github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/build-kernel.yml@master - - with: - uploading: true - runner: fast - reference: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - ########################################################################################## - # # - # Build changed firmware, zsh, armbian-config # - # # - ########################################################################################## - - Firmware: - permissions: - contents: none - needs: Check - if: ${{ success() && github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/build-firmware.yml@master - - with: - reference: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - uploading: true - runner: small - - secrets: - KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - ########################################################################################## - # # - # Build changed desktop packages # - # # - ########################################################################################## - - Desktop: - permissions: - contents: none - needs: Check - if: ${{ success() && github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/build-desktop.yml@master - - with: - uploading: true - runner: ubuntu-latest - reference: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - ########################################################################################## - # # - # Build u-boot and board support packages # - # # - ########################################################################################## - - legacy: - permissions: - contents: none - needs: Check - if: ${{ success() && github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/build-u-boot-with-docker.yml@master - - with: - - runner: "small" - include: 'grep legacy | ' - exclude: '' - uploading: false - destref: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - current: - permissions: - contents: none - needs: Check - if: ${{ success() && github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/build-u-boot-with-docker.yml@master - - with: - - runner: "small" - include: 'grep current | ' - exclude: '' - uploading: false - destref: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - - edge: - permissions: - contents: none - needs: Check - if: ${{ success() && github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/build-u-boot-with-docker.yml@master - - with: - - runner: "small" - include: 'grep edge | ' - exclude: '' - uploading: false - destref: '${{ github.event.inputs.sourcerepo }}' - packagesrepo: '${{ github.event.inputs.packagesrepo }}' - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - ########################################################################################## - # # - # Store build hashes for future comparission # - # # - ########################################################################################## - - Deploycheck: - permissions: - contents: none - needs: [Kernel,Desktop,Firmware,legacy,current,edge] - if: ${{ inputs.sourcerepo == 'nightly' || inputs.sourcerepo == '' }} - runs-on: ubuntu-latest - steps: - - name: Delete control artefact - uses: geekyeggo/delete-artifact@v2 - if: ${{ inputs.checking }} - with: - name: changes - - Deploy: - permissions: - contents: none - needs: [Deploycheck] - if: ${{ success() && github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/deploy.yml@master - - with: - - uploading: true - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - apt-armbian-com: - permissions: - contents: none - name: "Update stable" - needs: [Deploy] - if: ${{ github.repository_owner == 'Armbian' }} - runs-on: [self-hosted, Linux, local] - steps: - - name: Remove previous artefacts if any - run: | - sudo rm -rf changes 2>/dev/null || true - - name: Download changes - uses: actions/download-artifact@v3 - with: - name: changes - - name: Check - run: | - [ -s changes ] || echo "SKIP=yes" >> $GITHUB_ENV - - if: ${{ env.SKIP != 'yes' }} - uses: armbian/actions/triggers@main - with: - KEY: ${{ secrets.KEY_REPOSITORY }} - USER: ${{ secrets.USER_REPOSITORY }} - HOST: ${{ secrets.HOST_REPOSITORY }} - KNOWN_HOSTS: ${{ secrets.KNOWN_HOSTS_REPOSITORY }} - - beta-armbian-com: - permissions: - contents: none - name: "Update beta" - needs: [Deploy] - if: ${{ github.repository_owner == 'Armbian' }} - runs-on: [self-hosted, Linux, local] - steps: - - name: Remove previous artefacts if any - run: | - sudo rm -rf changes 2>/dev/null || true - - name: Download changes - uses: actions/download-artifact@v3 - with: - name: changes - - name: Check - run: | - [ -s changes ] || echo "SKIP=yes" >> $GITHUB_ENV - - if: ${{ env.SKIP != 'yes' }} - uses: armbian/actions/triggers@main - with: - KEY: ${{ secrets.KEY_REPOSITORY_BETA }} - USER: ${{ secrets.USER_REPOSITORY }} - HOST: ${{ secrets.HOST_REPOSITORY }} - KNOWN_HOSTS: ${{ secrets.KNOWN_HOSTS_REPOSITORY }} - - sync-servers: - permissions: - contents: none - name: "Sync servers" - needs: [apt-armbian-com,beta-armbian-com] - if: ${{ github.repository_owner == 'Armbian' }} - runs-on: [self-hosted, Linux, local] - steps: - - name: Remove previous artefacts if any - run: | - sudo rm -rf changes 2>/dev/null || true - - name: Download changes - uses: actions/download-artifact@v3 - with: - name: changes - - name: Check - run: | - [ -s changes ] || echo "SKIP=yes" >> $GITHUB_ENV - - if: ${{ env.SKIP != 'yes' }} - uses: armbian/actions/triggers@main - with: - KEY: ${{ secrets.KEY_SYNC_MIRRORS }} - USER: ${{ secrets.USER_REPOSITORY }} - HOST: ${{ secrets.HOST_REPOSITORY }} - KNOWN_HOSTS: ${{ secrets.KNOWN_HOSTS_REPOSITORY }} - - Clean: - - name: Clean - needs: [sync-servers] - runs-on: Linux - if: ${{ success() && github.repository_owner == 'Armbian' }} - steps: - - - name: Cleaning - uses: geekyeggo/delete-artifact@v2 - with: - name: changes - failOnError: false diff --git a/.github/workflows/build-u-boot.yml b/.github/workflows/build-u-boot.yml deleted file mode 100644 index a22071de5..000000000 --- a/.github/workflows/build-u-boot.yml +++ /dev/null @@ -1,105 +0,0 @@ -name: Build u-boot & BSP -# -# Manually generates u-boot & BSP packages -# - - -on: - workflow_dispatch: - inputs: - destref: - type: choice - description: Beta builds - options: - - nightly - - master - -permissions: - contents: read - -jobs: - - fake: - permissions: - contents: none - runs-on: small - name: Source changes - if: ${{ github.repository_owner == 'Armbian' }} - steps: - - run: | - echo "not empty" > changes - - uses: actions/upload-artifact@v3 - with: - path: changes - name: changes - if-no-files-found: ignore - - legacy: - permissions: - contents: none - needs: [ fake ] - uses: armbian/scripts/.github/workflows/build-u-boot-with-docker.yml@master - - with: - - runner: "ubuntu-latest" - include: 'grep legacy | ' - exclude: '' - uploading: false - destref: ${{ github.event.inputs.destref }} - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - current: - permissions: - contents: none - needs: [ fake ] - uses: armbian/scripts/.github/workflows/build-u-boot-with-docker.yml@master - - with: - - runner: "small" - include: 'grep current | ' - exclude: '' - uploading: false - destref: ${{ github.event.inputs.destref }} - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} - - - edge: - permissions: - contents: none - needs: [ fake ] - uses: armbian/scripts/.github/workflows/build-u-boot-with-docker.yml@master - - with: - - runner: "small" - include: 'grep edge | ' - exclude: '' - uploading: false - destref: ${{ github.event.inputs.destref }} - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - SSH_KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} diff --git a/.github/workflows/bump-version.yml b/.github/workflows/bump-version.yml deleted file mode 100644 index 8b478a9f7..000000000 --- a/.github/workflows/bump-version.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: Bump Version -# -# Manually bump version of nightly builds -# - -on: - workflow_dispatch: - -jobs: - - fake: - permissions: - contents: none - - runs-on: small - name: Source changes - if: ${{ github.repository_owner == 'Armbian' }} - steps: - - run: | - echo "not empty" > changes - - uses: actions/upload-artifact@v3 - with: - path: changes - name: changes - if-no-files-found: ignore - - Bump: - - needs: [fake] - if: ${{ success() && github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/update-version.yml@master - - with: - - uploading: true - - secrets: - GPG_KEY1: ${{ secrets.GPG_KEY1 }} - GPG_PASSPHRASE1: ${{ secrets.GPG_PASSPHRASE1 }} - GPG_KEY2: ${{ secrets.GPG_KEY2 }} - GPG_PASSPHRASE2: ${{ secrets.GPG_PASSPHRASE2 }} - SCRIPTS_ACCESS_TOKEN: ${{ secrets.SCRIPTS_ACCESS_TOKEN }} - KEY_TORRENTS: ${{ secrets.KEY_TORRENTS }} - KNOWN_HOSTS_UPLOAD: ${{ secrets.KNOWN_HOSTS_UPLOAD }} diff --git a/.github/workflows/check-integrity.yml b/.github/workflows/check-integrity.yml deleted file mode 100644 index 72895d588..000000000 --- a/.github/workflows/check-integrity.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Check images integrity -# -# Manually checks images integrity -# - -on: - workflow_dispatch: - -jobs: - - Update: - - permissions: - contents: none - - name: Check images integrity - runs-on: [fast, igor] - if: ${{ github.repository_owner == 'Armbian' }} - steps: - - - uses: igorpecovnik/freespace@main - - - name: Install dependencies - run: | - sudo apt-get -y -qq install parallel - - - name: Mount test folders - run: | - sudo mkdir -p dl - sudo mount nas:/tank/armbian/dl.armbian.com/ dl - - - name: Integrity test in parallel - run: | - FILES=$(find dl -type f -name "*.xz") - for FILE in ${FILES[@]} - do - echo "$FILE" - done | sudo --preserve-env parallel --jobs 18 ' - xz -t {} - ' - sudo umount dl diff --git a/.github/workflows/smoke-tests.yml b/.github/workflows/smoke-tests.yml deleted file mode 100644 index e118ea0e9..000000000 --- a/.github/workflows/smoke-tests.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Smoke tests on DUTs -# -# Runs varios tests with latest nighly codebase on a real hardware -# - -on: - workflow_dispatch: -# workflow_run: -# workflows: ["Build train"] -# types: -# - completed - -permissions: - contents: read - -jobs: - - Smoke: - permissions: - contents: none - - if: ${{ github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/smoke-tests.yml@master - secrets: - NETBOX_TOKEN: ${{ secrets.NETBOX_TOKEN }} - KEY_CI: ${{ secrets.KEY_CI }} - KEY_POWER_ON: ${{ secrets.KEY_POWER_ON }} - KEY_POWER_OFF: ${{ secrets.KEY_POWER_OFF }} - USER_REPOSITORY: ${{ secrets.USER_REPOSITORY }} - HOST_REPOSITORY: ${{ secrets.HOST_REPOSITORY }} - KNOWN_HOSTS_REPOSITORY: ${{ secrets.KNOWN_HOSTS_REPOSITORY }} diff --git a/.github/workflows/update-docker.yml b/.github/workflows/update-docker.yml deleted file mode 100644 index 5f2bb84f5..000000000 --- a/.github/workflows/update-docker.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Update Docker -# -# Update Docker images we use for building CI -# - -on: - workflow_dispatch: -# schedule: -# - cron: '0 0 * * 0' - - # automatically rebuild docker images when VERSION is changed on master branch - push: - branches: - - master - paths: - - 'VERSION' - -permissions: - contents: read - -jobs: - - Docker: - permissions: - contents: none - - if: ${{ github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/update-docker-image.yml@master - - secrets: - CR_PAT: ${{ secrets.CR_PAT }} - - Docker-test: - permissions: - contents: none - - needs: Docker - if: ${{ github.repository_owner == 'Armbian' }} - uses: armbian/scripts/.github/workflows/build-test-image-docker.yml@master - with: - - runner: "ubuntu-latest" - reference: master diff --git a/README.armbian-next.md b/README.armbian-next.md deleted file mode 100644 index 97170cc1b..000000000 --- a/README.armbian-next.md +++ /dev/null @@ -1,47309 +0,0 @@ -## This is armbian-next. - - - -## Short fuller log - -- c9cf3fc241cfb4c872f4aef7bbc41d5854db7ea3 to 6809de3d6063cb041205a8318e19da6a4dee68c9 ref extensions_08_10_2022_pre_v30 - - -``` -commit 6809de3d6063cb041205a8318e19da6a4dee68c9 -Author: Ricardo Pardini -AuthorDate: Sat Oct 8 11:30:37 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:32:06 2022 +0200 - - armbian-next: manual merge (30) of lib changes between 882f995e21f4791d773bc59efdfdb676494ee6ba and 31ac6383e1ac7ebddd0813abc0f1f9632a9c9c40 - -lib/functions/configuration/main-config.sh -lib/functions/general/downloads.sh - -commit 404916b083a1f1a9735abe40452d460c65cd412f -Author: Igor Pecovnik -AuthorDate: Sun Jan 16 23:59:47 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:32:06 2022 +0200 - - armbian-next: manual merge (30) of family/board changes between 882f995e21f4791d773bc59efdfdb676494ee6ba and 31ac6383e1ac7ebddd0813abc0f1f9632a9c9c40 - -config/sources/families/media.conf - -commit adc5e01444daf4548cba3ef99ea3430d8bbf8335 -Author: Ricardo Pardini -AuthorDate: Sun Sep 25 01:49:11 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (29) of family/board changes between 3435c4636723e9553be0a9ce3666bddb0887069e and 882f995e21f4791d773bc59efdfdb676494ee6ba (A LOT!) - -config/boards/uefi-arm64.conf -config/boards/uefi-x86.conf -config/sources/arm64.conf -config/sources/armhf.conf -config/sources/families/bcm2711.conf -config/sources/families/include/meson_common.inc -config/sources/families/uefi-x86.conf - -commit c1aef1c25eb29772a754bd3961b69f98c7afa48d -Author: Ricardo Pardini -AuthorDate: Sun Sep 25 01:36:43 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (29) of lib changes between 3435c4636723e9553be0a9ce3666bddb0887069e and 882f995e21f4791d773bc59efdfdb676494ee6ba (A LOT!) - -extensions/grub.sh -lib/functions/bsp/bsp-desktop.sh -lib/functions/compilation/debs.sh -lib/functions/compilation/patch/kernel-bootsplash.sh -lib/functions/compilation/patch/kernel-drivers.sh -lib/functions/configuration/interactive.sh -lib/functions/configuration/main-config.sh -lib/functions/general/chroot-helpers.sh -lib/functions/general/cleaning.sh -lib/functions/general/downloads.sh -lib/functions/host/external-toolchains.sh -lib/functions/image/initrd.sh -lib/functions/image/partitioning.sh -lib/functions/image/rootfs-to-image.sh -lib/functions/main/default-build.sh -lib/functions/rootfs/create-cache.sh -lib/functions/rootfs/distro-agnostic.sh -lib/functions/rootfs/distro-specific.sh - -commit dde4db8ee4d9f984b35f8fb909785622316207a8 -Author: Ricardo Pardini -AuthorDate: Sat Aug 27 12:52:47 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (28) of lib changes between revisions af6ceee6c55bd4726139fb8b1ad77641d385515a and 38df56fbf39739b48b31b5e393f15261d053b3cd - -lib/functions/compilation/patch/kernel-bootsplash.sh -lib/functions/compilation/patch/kernel-drivers.sh -lib/functions/image/fingerprint.sh -lib/functions/image/partitioning.sh - -commit 0ae75757f23941e025ed29dae1aacf44cd2249ac -Author: Ricardo Pardini -AuthorDate: Sat Aug 27 12:41:42 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (28) of sources/families changes between revisions af6ceee6c55bd4726139fb8b1ad77641d385515a and 38df56fbf39739b48b31b5e393f15261d053b3cd - -config/sources/families/include/meson_common.inc -config/sources/families/media.conf -config/sources/families/odroidxu4.conf - -commit e3e84f5c72e34013ea09dbd556c30870017b43a8 -Author: Ricardo Pardini -AuthorDate: Sat Aug 13 13:53:57 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (27) of `lib` changes between revisions 9c52562176390624d33c93634e63a8f91cc0815b and af6ceee6c55bd4726139fb8b1ad77641d385515a - -lib/functions/bsp/bsp-cli.sh -lib/functions/compilation/patch/kernel-bootsplash.sh -lib/functions/compilation/patch/kernel-drivers.sh -lib/functions/general/cleaning.sh -lib/functions/general/downloads.sh -lib/functions/image/partitioning.sh -lib/functions/main/rootfs-image.sh -lib/functions/rootfs/create-cache.sh -lib/functions/rootfs/distro-agnostic.sh - -commit d08b0971d93456143e2648b94341fedc5a612049 -Author: Ricardo Pardini -AuthorDate: Sat Aug 13 13:24:53 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (27) of `sources/families` changes between revisions 9c52562176390624d33c93634e63a8f91cc0815b and af6ceee6c55bd4726139fb8b1ad77641d385515a - -config/sources/families/bcm2711.conf -config/sources/families/imx6.conf -config/sources/families/include/meson64_common.inc -config/sources/families/include/meson_common.inc -config/sources/families/include/rockchip64_common.inc -config/sources/families/include/sunxi64_common.inc -config/sources/families/include/sunxi_common.inc -config/sources/families/include/uefi_common.inc -config/sources/families/jethub.conf -config/sources/families/media.conf -config/sources/families/mvebu64.conf -config/sources/families/rk322x.conf -config/sources/families/rockchip-rk3588.conf -config/sources/families/rockchip.conf - -commit 2306f2c90751a293dfed429819496b1c7cce3ab0 -Author: Ricardo Pardini -AuthorDate: Wed Jun 29 10:38:41 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: move `ROOTFSCACHE_VERSION` resolution from GitHub from `main-config` down to `create-cache` - - - this way config does not depend on remote... - -lib/functions/configuration/main-config.sh -lib/functions/rootfs/create-cache.sh - -commit dfcfcbc5e08b81d294170bb901900f7772abc0ae -Author: Ricardo Pardini -AuthorDate: Wed Jun 29 13:26:06 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: move `ARMBIAN_MIRROR` selection (network) from `main-config` to `prepare-host` - - - this way CONFIG_DEFS_ONLY can run without touching the network - -lib/functions/configuration/main-config.sh -lib/functions/host/prepare-host.sh - -commit 8f2922f37b7ccc5c790c77d96bcc25ba5f13118b -Author: Ricardo Pardini -AuthorDate: Mon Jul 18 15:37:15 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (26) of MD5-checking via debsums (3955) re-imagined - - - @TODO make sure - -lib/functions/rootfs/create-cache.sh - -commit 733b9bfb06ea36373049b98751f42e13905247d5 -Author: Ricardo Pardini -AuthorDate: Mon Jul 18 15:26:08 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (26) of sources/families changes between revisions 20ee8c54502f877bfa563e113d67709cb80dc6f9 and 9c52562176390624d33c93634e63a8f91cc0815b - -config/sources/families/jetson-nano.conf -config/sources/families/media.conf - -commit 63aa49ecac9c0401f359bb3ad801af6f7618a5ce -Author: Ricardo Pardini -AuthorDate: Mon Jul 18 15:17:50 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (26) of lib changes between revisions 20ee8c54502f877bfa563e113d67709cb80dc6f9 and 9c52562176390624d33c93634e63a8f91cc0815b - - - @TODO NOT including the md5/debsums check, that needs further rewrite - -lib/functions/configuration/interactive.sh -lib/functions/main/config-prepare.sh -lib/functions/rootfs/apt-install.sh - -commit a71814dfd278aa138d679c56026f7de1d4d6d892 -Author: Ricardo Pardini -AuthorDate: Wed Jun 29 10:06:29 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (25) of lib changes between revisions fe972621c61f339c9b84aaf94fd851fa789882e8 and 20ee8c54502f877bfa563e113d67709cb80dc6f9 - - - @TODO hmm Igor is now going out to the network for rootfs cache version during configuration phase!!! BAD BAD BAD - -lib/functions/configuration/main-config.sh -lib/functions/general/downloads.sh -lib/functions/rootfs/create-cache.sh - -commit 7b782918ecd066682e15b10a37a076d8ab07c70c -Author: Ricardo Pardini -AuthorDate: Wed Jun 29 09:59:36 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (25) of family changes between revisions fe972621c61f339c9b84aaf94fd851fa789882e8 and 20ee8c54502f877bfa563e113d67709cb80dc6f9 - -config/sources/families/include/rockchip64_common.inc -config/sources/families/media.conf - -commit 35a5ec860a5729794add0bc3f5b71f4dc09cd708 -Author: Ricardo Pardini -AuthorDate: Wed Jun 22 20:23:12 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (24) of families changes between revisions 9ca9120420aa2a39b91ab7283a7dafe113de42e8 and 560531a63505eb610d269b26858689307a9483f5 - -config/sources/families/include/meson64_common.inc -config/sources/families/include/rockchip64_common.inc - -commit ac26f77b6eaebec9d11537995eeadb07bf87c54a -Author: Ricardo Pardini -AuthorDate: Wed Jun 22 20:22:08 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (24) of lib changes between revisions 9ca9120420aa2a39b91ab7283a7dafe113de42e8 and 560531a63505eb610d269b26858689307a9483f5 - -lib/functions/configuration/main-config.sh - -commit d868b7b64ae2da0614078cccefab59804715542c -Author: Ricardo Pardini -AuthorDate: Fri Jun 17 12:19:32 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (23) of all changes between revisions 17b4fb913c76233d1e2126cfd35ecb85acfa5a25 and 9ca9120420aa2a39b91ab7283a7dafe113de42e8 - -config/sources/families/sun50iw6.conf -lib/functions/configuration/main-config.sh - -commit d4904385fe7e7506638e68638e348d9f0b412bd7 -Author: Ricardo Pardini -AuthorDate: Sun Jun 12 14:03:44 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (22) of all changes between revisions 0eb8fe7497aebf341bead2b3b0fb7309fd7bdc14 and 1dddf78cd0ed096edd6506241cfd9aa8cc27ba4e - - - @TODO EXCEPT the insanity about locales/eval/VERYSILENT in #3850, requires deep review - -config/sources/families/bcm2711.conf -config/sources/families/imx6.conf -config/sources/families/include/meson_common.inc -config/sources/families/include/rockchip64_common.inc -config/sources/families/include/sunxi64_common.inc -config/sources/families/include/sunxi_common.inc -config/sources/families/include/uefi_common.inc -config/sources/families/mvebu64.conf -config/sources/families/odroidxu4.conf -config/sources/families/rk322x.conf -config/sources/families/rockchip.conf -lib/functions/compilation/patch/kernel-drivers.sh -lib/functions/compilation/uboot.sh -lib/functions/extras/buildpkg.sh -lib/functions/host/prepare-host.sh -lib/functions/image/partitioning.sh - -commit 3459a57c661ce495eba407216a8c38f6f297b617 -Author: Ricardo Pardini -AuthorDate: Sat May 28 12:44:49 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (21) of all changes between revisions e7d7dab1bb50c1172206629a44f983c1794f8359 and 0eb8fe7497aebf341bead2b3b0fb7309fd7bdc14 - -config/sources/families/include/meson_common.inc -config/sources/families/include/rockchip64_common.inc -config/sources/families/media.conf -config/sources/families/mvebu64.conf -config/sources/families/sun50iw9.conf -lib/functions/compilation/debs.sh -lib/functions/compilation/patch/kernel-drivers.sh -lib/functions/host/prepare-host.sh -lib/functions/image/partitioning.sh - -commit e4d0f9c279b4b8859b23e4828579337ea415f175 -Author: Ricardo Pardini -AuthorDate: Mon May 23 20:35:54 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: fix: patching CREATE_PATCHES=yes - - - needed to create output dir - -lib/functions/compilation/patch/patching.sh - -commit 2058ba0f88aa1196667089faedd64e469c7d7f32 -Author: Ricardo Pardini -AuthorDate: Sat May 21 21:36:33 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: add `python2-dev` dep for old uboots - - - cleanup some comments - -lib/functions/host/prepare-host.sh - -commit 79185a3bad52301322e806a22103922b430f99fc -Author: Ricardo Pardini -AuthorDate: Sat May 21 18:52:18 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: manual merge (20) of all changes between revisions 6b72ae3c864fc020c6aadea473997ca033a0d8cc and 247c4c45fd18aa370575998443fc837466c02971 - -config/sources/families/include/rockchip64_common.inc -lib/functions/compilation/debs.sh -lib/functions/extras/buildpkg.sh -lib/functions/image/fingerprint.sh - -commit 449ce337d3997a00b867dcb9baae9624983fefdb -Author: Ricardo Pardini -AuthorDate: Sat May 21 16:22:58 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:40 2022 +0200 - - armbian-next: fix: pass `TERM` to kernel's make, so `make menuconfig` can work - -lib/functions/compilation/kernel.sh - -commit 61c3306cdf3f79c318f93aa677b26da072d003bc -Author: Ricardo Pardini -AuthorDate: Wed May 18 11:49:04 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: fix: git: read commit UNIX timestamp/local date correctly - - - `checked_out_revision_ts` was correct; git outputs `%ct` as a UNIX timestamp, UTC-based - - `checked_out_revision_mtime` was incorrect: git output it without converting to local time - - manually convert using `date @xx` so it has correct local time, whatever it is. - - add debugging to `get_file_modification_time()` too - -lib/functions/compilation/patch/fasthash.sh -lib/functions/general/git.sh - -commit 73dba5953b8b76715005d8f8096040c4d5bcc153 -Author: Ricardo Pardini -AuthorDate: Tue May 17 11:06:22 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: abstract `$QEMU_BINARY` to `qemu-static.sh`: `deploy_qemu_binary_to_chroot()`/`undeploy_qemu_binary_from_chroot()` - - - add hackish logic to avoid removing binary that would be needed if image actually contains `qemu-user-static` package - -config/sources/amd64.conf -extensions/flash-kernel.sh -lib/functions/image/initrd.sh -lib/functions/rootfs/create-cache.sh -lib/functions/rootfs/post-tweaks.sh -lib/functions/rootfs/qemu-static.sh -lib/library-functions.sh - -commit ef945476dee668f7ab3889f0cc2994467613b0d7 -Author: Ricardo Pardini -AuthorDate: Mon May 16 18:06:25 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: fix `uuidgen` basic dep check; use fake bash `$RANDOM` if uuidgen not available - - - not good: we need uuidgen to begin logging, but it may not be installed yet. workaround. - -lib/functions/cli/cli-entrypoint.sh -lib/functions/host/basic-deps.sh - -commit bc644378ffa202f368e6c0bc705d7c3b05709f21 -Author: Ricardo Pardini -AuthorDate: Wed May 11 21:15:18 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: retry 3 times download-only also for `PACKAGE_LIST_BOARD` - - - acng is really not helping - -lib/functions/rootfs/distro-agnostic.sh - -commit 37a7eb9cbbf8fdf02054e2c9b5fd9eb924aa2524 -Author: Ricardo Pardini -AuthorDate: Wed May 11 16:51:09 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: allow customizing UBUNTU_MIRROR (ports mirror) with `CUSTOM_UBUNTU_MIRROR_ARM64=host/path` - -lib/functions/configuration/main-config.sh - -commit 6533471c376936d076fe884304b27e904af6d54e -Author: Ricardo Pardini -AuthorDate: Mon May 9 20:41:47 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: WiP: kernel make via `env -i` for clean env; show produced /boot tree - -lib/functions/compilation/kernel-debs.sh -lib/functions/compilation/kernel.sh - -commit 514a63ddef96369aa2be85175544eedb000779c5 -Author: Ricardo Pardini -AuthorDate: Sun May 8 20:50:42 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: manual merge (19) of all changes between revisions b23498b94909a855d8b0fda1a95ccfc0ab17c747 and e621d25adc8ee66b0d14c94605ef462a13464b85 - - - the ssh firstrun revert stuff mostly - -lib/functions/main/rootfs-image.sh - -commit 896c4e78d75f23a8dfa21354773cd8254f34d196 -Author: Ricardo Pardini -AuthorDate: Sat May 7 03:55:49 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: *breaking change* remove `LIB_TAG` and `.ignore_changes` completely - - - one day should be replaced with an "update checker" extension, or even "update-enforcer" - - for now this just causes chaos - -config/templates/config-example.conf -lib/functions/cli/cli-entrypoint.sh -lib/functions/cli/utils-cli.sh - -commit d20902020953d75c3f7d1a9c27ec9c553825660a -Author: Ricardo Pardini -AuthorDate: Sun May 8 14:15:32 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: `python2` is required for some u-boot builds - - - would be "use `python-is-python2` so /usr/bin/python exists and points to Python 2.x" but Jammy does not have that anymore - - python2 is required for some u-boot builds. - - that said, python 2.x is deprecated for a while and needs work thus @TODO - -lib/functions/host/prepare-host.sh - -commit cec6a1b3ebe5c7df20dc8be8f7687416843d5db9 -Author: Ricardo Pardini -AuthorDate: Sun May 8 13:45:19 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: bump Python info gatherer to RELEASE=jammy too - -lib/tools/info.py - -commit 75a638f13bfeeb3327510ad9c1ef3ce3adb166bd -Author: Ricardo Pardini -AuthorDate: Sun May 8 13:44:28 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: add `KERNEL_MAJOR_MINOR` info to `media` kernel (@balbes150) - - - 5.18 is not yet released so might be a problem here - -config/sources/families/media.conf - -commit 91db9e2a305cd385077289363ffe1212a7c614f2 -Author: Ricardo Pardini -AuthorDate: Sun May 8 00:18:35 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: allow to skip submodules during `fetch_from_repo`; introduce hook `fetch_custom_uboot` - - - via GIT_SKIP_SUBMODULES=yes, which disables all submodules everywhere - - via UBOOT_GIT_SKIP_SUBMODULES=yes, which disables fetching of submodules during uboot fetch (hidden rkbins anyone?) - - extension hook `fetch_custom_uboot` so we can fetch our own stuff if needed - -lib/functions/compilation/uboot.sh -lib/functions/general/git.sh - -commit fb3add638441223317735bf5eb826badfe8c0924 -Author: Ricardo Pardini -AuthorDate: Mon May 9 12:15:08 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: `initrd` caching fixes (always enable hook; if cache hit, convert to uImage too) - -lib/functions/image/initrd.sh - -commit a732119d010bf7008caaacf3e50b3659c8dbf472 -Author: Ricardo Pardini -AuthorDate: Sun Apr 17 05:19:46 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: introduce `initramfs`/`initrd` caching - - - using hashes of (hopefully) all involved files - - cache hits are rewarded with sprinkly hearts. - - why? this proves we got a reproducible kernel modules build! - - also, you just saved yourself 2-10 minutes of pain - -lib/functions/image/initrd.sh -lib/functions/logging/logging.sh - -commit 220529f8f779673746843fa55b84d23753f1e037 -Author: Ricardo Pardini -AuthorDate: Sat May 7 16:54:00 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: manual merge (18) of changes between revisions 08cf31de73de5f5ba1986348e4556b00d77af09f and c8855aa08dafaa02c939039e55e01967bad61c28 - - - heh; most bash code changes are for things already done in -next, or no longer used - - some version bumps, etc - -config/sources/families/bcm2711.conf -config/sources/families/imx6.conf -config/sources/families/include/meson64_common.inc -config/sources/families/include/rockchip64_common.inc -config/sources/families/jetson-nano.conf -config/sources/families/media.conf -config/sources/families/mvebu.conf -config/sources/families/mvebu64.conf -config/sources/families/odroidxu4.conf -config/sources/families/rk35xx.conf -config/sources/families/virtual.conf -lib/functions/bsp/bsp-cli.sh -lib/functions/compilation/patch/kernel-bootsplash.sh -lib/functions/compilation/patch/kernel-drivers.sh -lib/functions/configuration/main-config.sh -lib/functions/general/downloads.sh -lib/functions/general/repo.sh -lib/functions/image/partitioning.sh -lib/functions/main/rootfs-image.sh -lib/functions/rootfs/distro-agnostic.sh - -commit eb38c77729431d0c89ae1f0546ab56e450429acc -Author: Ricardo Pardini -AuthorDate: Sat May 7 13:09:55 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: cleanup entrypoint and shuffle `prepare_host_basic()` into logging section - -lib/functions/cli/cli-entrypoint.sh -lib/functions/host/basic-deps.sh - -commit 91af44294685e7747b5df793778a1790756e8ce7 -Author: Ricardo Pardini -AuthorDate: Wed Apr 20 15:32:16 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: *breaking change* add global extlinux killswitch `ALLOW_EXTLINUX` - - - unless you set `ALLOW_EXTLINUX=yes`, then `SRC_EXTLINUX` will be disabled globally. - - add a bunch of logging regarding extlinux, armbianEnv and bootscripts for clarity during build - - this is due to nand-sata-install problems with extlinux - - some boards _only work_ with extlinux; we'll have to handle it later - -lib/functions/bsp/bsp-cli.sh -lib/functions/configuration/main-config.sh -lib/functions/image/partitioning.sh -lib/functions/rootfs/distro-agnostic.sh - -commit 03516ad0f6d5fc598f67c896e6dc28eb91b54ddf -Author: Ricardo Pardini -AuthorDate: Fri May 6 10:25:26 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: extensions: `image-output-{qcow2|ovf}`: virtual output formats - - - which use `qemu-utils` for `qemu-img` conversion of the .img - -extensions/image-output-ovf.sh -extensions/image-output-qcow2.sh - -commit 36a2c3741d28a6280af99bcd7d8f9d3a339a7fcb -Author: Ricardo Pardini -AuthorDate: Fri May 6 10:24:10 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: extension: `kernel-localmodconfig`: faster/slimmer kernel builds with `make localmodconfig` - -extensions/kernel-localmodconfig.sh - -commit 981a9f5856ba100eaad07c9ffe7e24f578e93003 -Author: Ricardo Pardini -AuthorDate: Fri May 6 10:23:29 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: extension: `cleanup-space-final-image`: zerofree, slim down firmware, show used space - -extensions/cleanup-space-final-image.sh - -commit 5d51b5559c28815deb56d27e1ca22765dc22e853 -Author: Ricardo Pardini -AuthorDate: Sat Apr 23 16:07:44 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: introduce `do_with_ccache_statistics` and use it for kernel compile - - - some TODOs - - better logging for .config copying - -lib/functions/compilation/kernel.sh - -commit 0a29ad6f91eae99594e52173724fdf87b5b186d5 -Author: Ricardo Pardini -AuthorDate: Sat Apr 16 19:23:13 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: *breaking change* really disable apt sources for non-desktop builds - -lib/functions/rootfs/apt-sources.sh - -commit fc0621decc383f2aed1194f882035b26de49c0aa -Author: Ricardo Pardini -AuthorDate: Fri Apr 29 17:55:47 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: fix: don't manage apt-cacher-ng if told NOT to, not the other way around - -lib/functions/host/apt-cacher-ng.sh - -commit bdb9aba47d9b70cfb04089866bafe176a1e6dab6 -Author: Ricardo Pardini -AuthorDate: Sat Apr 16 14:55:43 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: `JUST_UBOOT=yes` + hooks `build_custom_uboot()`/`post_write_uboot_platform()` - - - post_write_uboot_platform() - - only runs during build, for now (not on device) - - build_custom_uboot() - - allow fully custom, extension driven, building of u-boot - - also partial preparation of uboot source combined with default Armbian build - - HACK: u-boot: downgrade some errors to warnings via KCFLAGS - - fix copy of atf bins to uboot, don't do it if atf's not there - -lib/functions/compilation/uboot.sh -lib/functions/image/loop.sh -lib/functions/main/default-build.sh - -commit 893b8615a1a976ee6246e186f59aba468ad1a7b5 -Author: Ricardo Pardini -AuthorDate: Thu Apr 28 09:35:26 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: fix: no use testing the host for resolvconf if we're manipulating the SDCARD - -lib/functions/rootfs/distro-agnostic.sh - -commit 25a8de27bb2b240734c1647a71826688b474b0a0 -Author: Ricardo Pardini -AuthorDate: Sun Apr 24 09:32:14 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: sunxi_common: avoid shortcircuit error on family_tweaks_bsp when family_tweaks_bsp_s is not defined - -config/sources/families/include/sunxi_common.inc -lib/functions/bsp/bsp-cli.sh - -commit c46418fd00b24879e4a4f18f77c19ccb887a9346 -Author: Ricardo Pardini -AuthorDate: Fri Apr 22 12:50:21 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: fix: add `zstd` and `parallel` to hostdeps - -lib/functions/host/prepare-host.sh - -commit 6d5a8490804d8427c6f4578389b0ae73c746ed61 -Author: Ricardo Pardini -AuthorDate: Wed Apr 20 12:49:20 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: manual merge (17) of all changes between revisions 64410fb74b44cca82e9affbdf93a59d5692862ff and 08cf31de73de5f5ba1986348e4556b00d77af09f - - - changes about `git safe dir` ignored, I've done the same in a different way - - hash calculation changes ignored, fasthash is completely different - -config/sources/families/include/sunxi64_common.inc -config/sources/families/include/sunxi_common.inc -config/sources/families/include/uefi_common.inc -config/sources/families/mvebu64.conf -lib/functions/compilation/patch/kernel-drivers.sh -lib/functions/host/external-toolchains.sh - -commit 8341a778f0a1b9678858904eaddb540f43129b58 -Author: Ricardo Pardini -AuthorDate: Tue Apr 19 13:48:06 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: add `crossbuild-essential-armel` so `arm-linux-gnueabi-gcc` is available with system toolchains - - - need to for some ATF builds, at least. - -lib/functions/host/prepare-host.sh - -commit 8fdc420cc001b9ad79784ff486461eb0a2af6be8 -Author: Ricardo Pardini -AuthorDate: Tue Apr 19 00:18:04 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: rockchip64_common: lotsa logging and debugging - - - supposedly no practical changes - -config/sources/families/include/rockchip64_common.inc - -commit 52922a6b105279e73ccb760523e43fa6f7b0d5e0 -Author: Ricardo Pardini -AuthorDate: Mon Apr 18 10:56:34 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: grub: better logging - -extensions/grub.sh - -commit 7bf6574305c5d2b7230225007fa4a62e0f19a817 -Author: Ricardo Pardini -AuthorDate: Mon Apr 18 11:23:10 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: fix for chaos caused by git's fix of CVE-2022-24765 otherwise "fatal: unsafe repository" - - - might not be the best solution, but it's the only one I found - -compile.sh -lib/functions/compilation/debs.sh -lib/functions/configuration/main-config.sh -lib/functions/general/git.sh - -commit ad315fb153cd743614eb2d4102ad8a61d8be99aa -Author: Ricardo Pardini -AuthorDate: Mon Apr 18 23:14:20 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - partitioning: fix: don't try fixing a bootscript that's not there - - - this fixes a bug when "rootpart=2" without rootpart 1 being /boot - -lib/functions/image/partitioning.sh - -commit 1661922e79f34bec964fdd86e278489e28945b4d -Author: Ricardo Pardini -AuthorDate: Mon Apr 18 23:15:29 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: cleanups: umount tmpfs-based $SDCARD during cleanup too - -lib/functions/main/rootfs-image.sh - -commit 7253f98a262253eab6094b29640293079b673ab0 -Author: Ricardo Pardini -AuthorDate: Mon Apr 18 23:16:32 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: indented heredoc, no functional changes - -lib/functions/image/rootfs-to-image.sh - -commit 1ac36b752e2982dbf59336c3ee857c91080ed8cf -Author: Ricardo Pardini -AuthorDate: Sat Apr 16 19:23:00 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: fix shortcircuit as last statement in case of extlinux - - - yes, I wasted 3 hours on this tiny bit, so *you* don't have to! - - better logging for rootfs `mkfs` et al - - introduce `PRESERVE_SDCARD_MOUNT=yes` to preserve SDCARD, MOUNT, and LOOP for debugging - -lib/functions/image/partitioning.sh -lib/functions/main/rootfs-image.sh - -commit ef3709d30ee099523db2ad28e3f65e0d17754f50 -Author: Ricardo Pardini -AuthorDate: Sat Apr 16 12:13:07 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: kernel-headers: less verbose, trimmed down tools a bit (perf and testing) - -lib/functions/compilation/kernel-debs.sh - -commit 20c29c1d6e04783ac8e8151f27f57b52b8531342 -Author: Ricardo Pardini -AuthorDate: Sat Apr 16 11:23:13 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - khadas-vim3l: add asound.state for Khadas VIM3L - -config/boards/khadas-vim3l.conf -packages/blobs/asound.state/asound.state.khadas-vim3l - -commit a22979940d28a816571644e92f157fe8e0af431f -Author: Ricardo Pardini -AuthorDate: Sat Apr 16 11:14:23 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: introduce hook `extension_finish_config()` - late hook for ext configuration - - - `extension_finish_config()` is the last thing done in config phase - - use it for determining stuff based on kernel version details, package names, etc - - also tune down some logging which was too verbose - - CI logs with no ANSI escape codes - -extensions/nvidia.sh -extensions/zfs.sh -lib/functions/logging/logging.sh -lib/functions/main/config-prepare.sh -lib/functions/rootfs/apt-sources.sh - -commit bedd3aa1a4c661bc177af7dd0db3062296d7ec5f -Author: Ricardo Pardini -AuthorDate: Sat Apr 16 00:45:30 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: shuffle around code and logic of `add_desktop_package_sources()` - - - @TODO: still needs proper asset logging for sources.list(.d) - - @TODO: tunes down adding of sources/packages to CLI builds, check with Igor - -lib/functions/rootfs/apt-install.sh -lib/functions/rootfs/apt-sources.sh -lib/functions/rootfs/create-cache.sh -lib/functions/rootfs/rootfs-desktop.sh -lib/library-functions.sh - -commit 4876e0444f33ea1ce28cb340215638702ef98792 -Author: Ricardo Pardini -AuthorDate: Fri Apr 15 22:07:17 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: 4.x can't build objtool in kernel-headers; allow for handling that later - - - 4.x has a lot more obtuse dependencies - - introduce KERNEL_HAS_WORKING_HEADERS calculated based on KERNEL_MAJOR_MINOR - -extensions/nvidia.sh -extensions/zfs.sh -lib/functions/compilation/kernel-debs.sh -lib/functions/main/config-prepare.sh - -commit 6b5726444e6be8a935fe758664847184e7642840 -Author: Ricardo Pardini -AuthorDate: Fri Apr 15 21:48:22 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: downgrade `error=misleading-indentation` to warning - - - some 4.x kernels patches are really messy - - newer gcc's make that an error now - -lib/functions/compilation/kernel.sh - -commit 54cad4f827e14967d692ae4d14426394cc56b4ff -Author: Ricardo Pardini -AuthorDate: Fri Apr 15 17:23:42 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: *allow cross compilation*, even the so-called "reverse cross-compile" (amd64 on arm64) - -config/sources/amd64.conf -lib/functions/compilation/kernel.sh - -commit c57535fbcab21c0cf7284e0cbcb614971e6d4bd7 -Author: Ricardo Pardini -AuthorDate: Fri Apr 15 13:49:23 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: add `zfs` extension, which installs headers and builds ZFS via DKMS in chroot - - - similar to how `nvidia` extension does it - -extensions/zfs.sh - -commit 82756687f5930a55f413a3f7164b1fb9337bd2b0 -Author: Ricardo Pardini -AuthorDate: Fri Apr 15 13:49:56 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: x86: enable `nvidia` extension for all releases (only desktop) - -config/sources/families/uefi-x86.conf - -commit d4ce330682ba9563b1821ae08b8412e9149fec80 -Author: Ricardo Pardini -AuthorDate: Fri Apr 15 13:53:14 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: `headers-debian-byteshift.patch` is dead; long-live cross-compiled source-only kernel-headers - - - kernel-headers package now only includes _sources_ - - postinst does the compilation and preparation for DKMS compatibility - - `tools` dir is included now, which includes the byteshift utilities - - handle special scripts/module.lds case after 5.10 - - tested on a 6 combinations of `x86` / `arm64` / `armhf` (3x targets, 2x hosts) - - @TODO: we might be able to reduce the size of tools a bit (perf/tests/etc) - - @TODO: still missing ARCH vs ARCHITECTURE vs SRC_ARCH clarity elsewhere - -lib/functions/compilation/kernel-debs.sh -lib/functions/compilation/kernel.sh -patch/misc/headers-debian-byteshift.patch - -commit d797c800c30b6a86f105e511068e545f90b9c825 -Author: Ricardo Pardini -AuthorDate: Fri Apr 15 13:37:13 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: allow `use_clean_environment=yes` for `chroot_sdcard_apt_get()` and descendants - - - this causes command to be run under `env -i`, for a clean environment - -lib/functions/logging/runners.sh - -commit 0caf73b8ee67c9f34b6e6d1fce8b86ed4021694c -Author: Ricardo Pardini -AuthorDate: Thu Apr 14 09:58:15 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: manual merge (16) of all changes between revisions be9b5156a4bdcb3850fbe0e7ada0f4421acde174 and 2a8e1ecac1c4fdbf986034be9d6c05a8f1b6e6fb - - - many `traps` ignored: we don't use them anymore - -config/sources/families/include/meson64_common.inc -config/sources/families/media.conf -config/sources/families/rk322x.conf -config/sources/families/rockchip.conf -config/sources/families/sun50iw6.conf -config/templates/Dockerfile -lib/functions/compilation/patch/kernel-drivers.sh -lib/functions/configuration/main-config.sh -lib/functions/extras/buildpkg.sh -lib/functions/general/downloads.sh -lib/functions/image/partitioning.sh -lib/functions/rootfs/distro-specific.sh - -commit 71addbe3ffd4e9e8015125186d11fc53eac1da25 -Author: Ricardo Pardini -AuthorDate: Thu Apr 7 15:56:19 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: fix logging for apt sources/gpg keys - -lib/functions/rootfs/rootfs-desktop.sh - -commit 7ca67f8d2669568a654d0fcf11415b24434cfd0b -Author: Ricardo Pardini -AuthorDate: Thu Apr 7 13:54:59 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: don't leak `if_error_xxx` vars across runner helper invocations; always clean then (even if no error) - - - also: fix wireguard-tools install, had a double parameter there - -lib/functions/logging/runners.sh -lib/functions/rootfs/distro-agnostic.sh - -commit a057b793478fde9b1e0015d52b711c0442d91789 -Author: Ricardo Pardini -AuthorDate: Thu Apr 7 13:53:58 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - bcm2711: rpi4b: add `pi-bluetooth` which provides working Bluetooth - -config/sources/families/bcm2711.conf - -commit b0d907082d89474a04a790919fad6e27043bc474 -Author: Ricardo Pardini -AuthorDate: Thu Apr 7 12:06:26 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: fixes for (non-)logging when interactively configuring kernel (`KERNEL_CONFIGURE=yes`) - -lib/functions/compilation/kernel.sh - -commit e10cb5c51bd77b47ee06ac7c9aaaaa4485646f61 -Author: Ricardo Pardini -AuthorDate: Sun Apr 3 11:28:18 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: move `lz4` rootfs caches to `zstd`, multithreaded - -lib/functions/rootfs/create-cache.sh - -commit 1b602cf8ebae2179b8590126751ce801c976cdfb -Author: Ricardo Pardini -AuthorDate: Sun Apr 3 11:25:50 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: customize.sh: error handling, do not mount overlay if it doesn't exist - -lib/functions/rootfs/customize.sh - -commit 09a55387f126f1907945ee72060cdd42973a8d4b -Author: Ricardo Pardini -AuthorDate: Sat Apr 2 21:15:55 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:39 2022 +0200 - - armbian-next: extra info for runners; `if_error_detail_message` and `if_error_find_files_sdcard` globals - - - those are unset after running any command - - if error occur, message and/or found files will be included in log, for clarity - -extensions/nvidia.sh -lib/functions/compilation/uboot.sh -lib/functions/logging/logging.sh -lib/functions/logging/runners.sh -lib/functions/rootfs/apt.sh -lib/functions/rootfs/create-cache.sh - -commit 4cbbde478c436b76c883d4ece3a74fc8d0aeb72d -Author: Ricardo Pardini -AuthorDate: Sat Apr 2 16:01:19 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: manual merge (15) of all changes between revisions 0f7200c7932bb04a34601a25fe30dca0197fbc8b and 101eaec90750f23cae3075d6b5329a33b2bf4685 - -config/sources/families/rk35xx.conf -lib/functions/configuration/main-config.sh -lib/functions/rootfs/create-cache.sh -lib/functions/rootfs/rootfs-desktop.sh - -commit 0023bcce6aaed245b27c031156ba650acbafed3b -Author: Ricardo Pardini -AuthorDate: Fri Apr 1 12:27:19 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: better logging for `rsync` calls everywhere - - - make rsync verbose - -lib/functions/bsp/bsp-cli.sh -lib/functions/compilation/debs.sh -lib/functions/compilation/kernel.sh -lib/functions/compilation/uboot.sh -lib/functions/image/rootfs-to-image.sh -lib/functions/rootfs/apt.sh - -commit 5aa5cad33ed6ea11af0cb371c0f5a1ef3cce0309 -Author: Ricardo Pardini -AuthorDate: Fri Apr 1 00:51:22 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: downloads: skip download if no `ARMBIAN_MIRROR` nor `DOWNLOAD_MIRROR`; less logs - -lib/functions/general/downloads.sh - -commit fcc2cdc23237549cde54eee47b76776106c29ec0 -Author: Ricardo Pardini -AuthorDate: Thu Mar 31 20:02:17 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: update rockchip.conf from master and use runners - -config/sources/families/rockchip.conf - -commit 0b7e6c6bb6a744d6b95038e9ab3b1ab7b1aa7027 -Author: Ricardo Pardini -AuthorDate: Thu Mar 31 19:33:39 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: update mvebu64.conf from master and use functions - -config/sources/families/mvebu64.conf - -commit b1ded35c1baa90f16652299b433410fef216f8f7 -Author: Ricardo Pardini -AuthorDate: Thu Mar 31 19:23:33 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: git: fix `fetch_from_repo` with actual submodules usage - -lib/functions/general/git.sh - -commit 8996fb16048de112e985c9f2a4d5f896623b1cd0 -Author: Ricardo Pardini -AuthorDate: Thu Mar 31 16:25:50 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: `armbian-next`ify the `nvidia` extension after rebase from master - - - driver version is configurable via `NVIDIA_DRIVER_VERSION` - - use runner function to log/error-handle/use apt cache/etc - -extensions/nvidia.sh - -commit d72e4b69754671ba464882cbca6b68c67e2c7c9a -Author: Ricardo Pardini -AuthorDate: Thu Mar 10 00:00:39 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - rpi4b: there's no legacy branch anymore, remove it from KERNEL_TARGET - -config/boards/rpi4b.wip - -commit 1dbe3c33255a6947743bed2c3dd0ba067035208f -Author: Ricardo Pardini -AuthorDate: Wed Mar 9 13:19:20 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: `download_and_verify` non-error handled; logging is messy [WiP] [HACK] - -lib/functions/general/downloads.sh - -commit 30ee27b4fd6d9b578ad19ca9b0b484809242d77f -Author: Ricardo Pardini -AuthorDate: Mon Mar 21 17:21:03 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: logging: let ANSI colors pass to logfile; CALLER_PID instead of BASHPID in subshell - -lib/functions/logging/logging.sh - -commit a63ba98aefbb6ba7998ad8abedc5d239e1520191 -Author: Ricardo Pardini -AuthorDate: Mon Mar 21 17:20:17 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: enable HTTPS CONNECT in Armbian-managed apt-cacher-ng configuration - - - PPAs require it - -lib/functions/host/apt-cacher-ng.sh - -commit d3641a69a60266f3d7a75109fa6e396b20d85700 -Author: Ricardo Pardini -AuthorDate: Thu Mar 31 13:41:53 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: don't loop forever if we can't obtain ARMBIAN_MIRROR from redirector - - - also, don't even try to do it if `SKIP_ARMBIAN_REPO=yes` - -lib/functions/configuration/main-config.sh - -commit 617e2ef1d6ff85e0bc6d5c24bc391a21e125f2aa -Author: Ricardo Pardini -AuthorDate: Thu Mar 31 12:25:09 2022 +0200 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: manual merge (14) of all changes between revisions 13469fd8a9eda4a53f87b7dfee0f431dbab8db54 and 09e416e31cc01ece4533a65f02a470a4c21b90ea - - - also editorconfig and compile.sh (root) changes - -.editorconfig -config/desktop/bullseye/appgroups/browsers/armbian/create_desktop_package.sh -config/desktop/bullseye/environments/mate/armbian/create_desktop_package.sh -config/desktop/buster/appgroups/browsers/armbian/create_desktop_package.sh -config/desktop/buster/environments/cinnamon/armbian/create_desktop_package.sh -config/desktop/buster/environments/lxde/armbian/create_desktop_package.sh -config/desktop/buster/environments/mate/armbian/create_desktop_package.sh -config/desktop/focal/appgroups/browsers/armbian/create_desktop_package.sh -config/desktop/focal/environments/budgie/armbian/create_desktop_package.sh -config/desktop/focal/environments/cinnamon/armbian/create_desktop_package.sh -config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh -config/desktop/focal/environments/enlightenment/armbian/create_desktop_package.sh -config/desktop/focal/environments/gnome/armbian/create_desktop_package.sh -config/desktop/focal/environments/mate/armbian/create_desktop_package.sh -config/desktop/focal/environments/xfce/debian/armbian-bsp-desktop/prepare.sh -config/desktop/sid/appgroups/browsers/armbian/create_desktop_package.sh -config/desktop/sid/environments/lxde/armbian/create_desktop_package.sh -config/desktop/sid/environments/mate/armbian/create_desktop_package.sh -config/desktop/sid/environments/xfce/armbian/create_desktop_package.sh -config/sources/families/include/rockchip64_common.inc -config/templates/Dockerfile -lib/functions/cli/utils-cli.sh -lib/functions/compilation/patch/kernel-drivers.sh -lib/functions/configuration/main-config.sh -lib/functions/host/prepare-host.sh -lib/functions/rootfs/distro-specific.sh -lib/functions/rootfs/rootfs-desktop.sh - -commit d2d2fa9315f74ec155f209096fe55ead120491c6 -Author: Ricardo Pardini -AuthorDate: Fri Mar 18 02:17:01 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: *much* improved logging to HTML; log archiving; consistency - - - keep only current logfile - - log to LOGFILE also if SHOW_LOG=yes - - log cmd runtime and success/error directly in runner - -lib/functions/cli/cli-entrypoint.sh -lib/functions/logging/logging.sh -lib/functions/logging/runners.sh - -commit 1b160ce366c31c724346f52a7f7bfa79036a6acf -Author: Ricardo Pardini -AuthorDate: Fri Mar 18 00:34:46 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: *breaking change* use `MemAvailable` (not including swap) and up requirements for tmpfs - - - of course add debugging logs - - rename vars - - should really only use this if we've really a lot of completely free RAM to spare - - otherwise OOM killer comes knocking - - or swapping to disk, that is counter-productive - -lib/functions/main/rootfs-image.sh - -commit 04a11cc78f5681dd41e3764ce644c53e7032156b -Author: Ricardo Pardini -AuthorDate: Thu Mar 17 22:46:05 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: *breaking change* `DEB_COMPRESS=none` by default if not running in CI/GHA - -lib/functions/configuration/main-config.sh - -commit 667a8de92b5075c05d2ca67761a13c93b8e8b99d -Author: Ricardo Pardini -AuthorDate: Thu Mar 17 22:21:45 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: *breaking change* `CLEAN_LEVEL=make` is no more; new `make-kernel`, `make-atf`, `make-uboot` - - - allows individual control of what to clean - - this effectively disables `make clean` by default - - rebuilds work and timestamping works for patching, so no reason to clean everytime by default. - -config/templates/config-example.conf -lib/functions/compilation/atf.sh -lib/functions/compilation/kernel.sh -lib/functions/compilation/uboot.sh -lib/functions/general/cleaning.sh -lib/functions/main/default-build.sh - -commit 39999ad4efc4854213d0b2164d999071684ec1ea -Author: Ricardo Pardini -AuthorDate: Thu Mar 17 21:16:21 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: refactor `prepare_host`, give `apt-cacher-ng` some much needed attention - - - library dir for host-related stuff, pull it out of "general" finally - -lib/functions/host/apt-cacher-ng.sh -lib/functions/host/basic-deps.sh -lib/functions/host/external-toolchains.sh -lib/functions/host/host-utils.sh -lib/functions/host/prepare-host.sh -lib/functions/logging/runners.sh -lib/functions/rootfs/create-cache.sh -lib/library-functions.sh - -commit 2c4ee50aabed7ad126f7ca80b870077672371a5d -Author: Ricardo Pardini -AuthorDate: Wed Mar 9 13:20:25 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: hostdeps: all toolchains via `crossbuild-essential-arm64`/`armhf`/`amd64` - - - trying to sort out hostdeps for Jammy [WiP] - -lib/functions/general/host.sh - -commit c8a9f3aca890ed098b160bd060f11042d21ee711 -Author: Ricardo Pardini -AuthorDate: Thu Mar 17 16:19:49 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: remove `eatmydata` usage, leftover from failed tries to make git faster - -lib/functions/general/git.sh - -commit 5d4c5aa9320ab317f540415ddb5403538630bcfb -Author: Ricardo Pardini -AuthorDate: Wed Mar 16 03:13:29 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: fix git origin check, recreate working copy if origin does not match - - - fix cold bundle https download progress reporting - -lib/functions/general/git.sh - -commit 625031cd5797295e14494d7d2c986c7de9b6e15d -Author: Ricardo Pardini -AuthorDate: Tue Mar 15 14:10:32 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: finally consolidating logs into output/logs; colorized HTML logs - -lib/functions/cli/cli-entrypoint.sh -lib/functions/configuration/main-config.sh -lib/functions/general/host.sh -lib/functions/logging/logging.sh - -commit 58e643c14a0b527d25856938bfc219835984e83d -Author: Ricardo Pardini -AuthorDate: Tue Mar 15 11:30:55 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: introduce `do_with_retries()` and use it for apt remote operations during image build - -lib/functions/logging/runners.sh -lib/functions/rootfs/create-cache.sh - -commit ff3ccab39db2e364feb16b583c973d6d305c69d5 -Author: Ricardo Pardini -AuthorDate: Mon Mar 7 09:42:57 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: another round of logging tuning/fixes; log assets; git logging - - - introduce `do_with_log_asset()` and `LOG_ASSET=xxx` - - separate "git" logging level - - add `trap_handler_cleanup_destimg()` to cleanup DESTIMG - -lib/functions/cli/cli-entrypoint.sh -lib/functions/compilation/kernel-debs.sh -lib/functions/compilation/patch/fasthash.sh -lib/functions/configuration/main-config.sh -lib/functions/general/git.sh -lib/functions/image/initrd.sh -lib/functions/image/rootfs-to-image.sh -lib/functions/logging/logging.sh -lib/functions/main/default-build.sh -lib/functions/main/rootfs-image.sh -lib/functions/rootfs/distro-agnostic.sh - -commit fb943e2aa891513456e76a07a32351f04d2b1fe2 -Author: Ricardo Pardini -AuthorDate: Mon Mar 14 18:51:39 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: kernel: use parallel compressors; reproducible kernel builds - - - also remove leftover mkdebian/builddeb parameters in make invocation - - add pbzip2 to hostdeps - -lib/functions/compilation/kernel.sh -lib/functions/general/host.sh - -commit fcba106dae815e6d90fea84cc538239030fde9ac -Author: Ricardo Pardini -AuthorDate: Mon Mar 14 18:50:13 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: tuning logging for timestamp/fasthash related stuff which is very verbose - - - idea is to not completely overwhelm `SHOW_DEBUG=yes` case - - make patching quieter and use file instead of stdin - - set checked_out_revision_ts during git checkout (timestamp version of _mtime) - - timestamp | fasthash logging level (via `SHOW_FASTHASH=yes`) - -lib/functions/compilation/patch/fasthash.sh -lib/functions/compilation/patch/patching.sh -lib/functions/general/git.sh -lib/functions/logging/logging.sh - -commit dab49a9133741fce7b40bdeff1e6cccf6becc180 -Author: Ricardo Pardini -AuthorDate: Mon Mar 14 15:02:20 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: completely remove mkdebian/builddeb/general-packaging kernel packaging stuff - -lib/functions/compilation/kernel.sh -lib/functions/compilation/patch/kernel-pkg.sh -lib/library-functions.sh -packages/armbian/builddeb -packages/armbian/mkdebian -patch/misc/general-packaging-4.14.y.patch -patch/misc/general-packaging-4.19.y-rk35xx.patch -patch/misc/general-packaging-4.19.y.patch -patch/misc/general-packaging-4.4.y-rk3399.patch -patch/misc/general-packaging-4.4.y-rockchip64.patch -patch/misc/general-packaging-4.4.y.patch -patch/misc/general-packaging-4.9.y.patch -patch/misc/general-packaging-5.10.y.patch -patch/misc/general-packaging-5.3.y.patch -patch/misc/general-packaging-5.6.y.patch -patch/misc/general-packaging-5.8-9.y.patch - -commit 134bb92d95726ae56da8734bc9c39552c4821e4c -Author: Ricardo Pardini -AuthorDate: Wed Mar 9 23:43:39 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: manual merge (12) of all changes between revisions 34d4be6b7b346507af58133125cef0bc8ff5aef1 and 5fe0f36aa832ac64d1db05adc4eb09a4df4b5509 - -config/sources/families/rk35xx.conf -lib/functions/configuration/main-config.sh -lib/functions/general/git.sh - -commit 6058f580ae03c4c197ea60789128edca73046758 -Author: Ricardo Pardini -AuthorDate: Wed Mar 9 18:41:30 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: introduce `PRESERVE_WORKDIR=yes` for heavy debugging - -lib/functions/main/default-build.sh - -commit 87c808d5d398dc51a1fabe97b732d94d3094b8b9 -Author: Ricardo Pardini -AuthorDate: Wed Mar 9 14:39:21 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: packaging linux-headers again - - - do NOT use any output from `make headers_install` - that's for libc headers - - grabs "headers" (and binary tools) directly from the kernel build tree, not install target - - does not produce headers if cross compiling, for now - - produces kernel-headers package for the architecture on which it was built - - doing a single make invocation with build and install for packaging - - using 'make all' in place of vmlinuz/bzImage/image/zImage - -lib/functions/compilation/kernel-debs.sh -lib/functions/compilation/kernel.sh - -commit 8cfda3dcc398e3abb11f05f76509b4a165e402d3 -Author: Ricardo Pardini -AuthorDate: Wed Mar 9 13:20:05 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: apt download-only retried 3 times before installing main packages - -lib/functions/logging/runners.sh -lib/functions/rootfs/create-cache.sh - -commit 4b82345a588df2d9214b1ace097599ad42ee3463 -Author: Ricardo Pardini -AuthorDate: Tue Mar 8 12:56:04 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: fix `VER=` read from kernel-image package, also add `linux` default - -lib/functions/compilation/kernel-debs.sh -lib/functions/rootfs/distro-agnostic.sh - -commit 5d2a41313f02fd2e651c911984ae6b6f803154c7 -Author: Ricardo Pardini -AuthorDate: Mon Mar 7 10:24:52 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: some logging for atf compilation - -lib/functions/compilation/atf.sh - -commit 779e9978e01f5d1706d85acc3f0182046cebcfbd -Author: Ricardo Pardini -AuthorDate: Mon Mar 7 10:09:29 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: rewrite hostdeps as array, add armhf toolchains - -lib/functions/general/host.sh - -commit 3a8770b0a1e28eaa7009964d6ebc3ba494de8010 -Author: Ricardo Pardini -AuthorDate: Mon Mar 7 06:20:17 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: distro-agnostic: cleanups - -lib/functions/rootfs/distro-agnostic.sh - -commit 4d47d22489538006f32464dc9a0058a77810536b -Author: Ricardo Pardini -AuthorDate: Sat Mar 5 02:24:29 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: armbianEnv hooks/debugs (bsp / image) - -lib/functions/bsp/bsp-cli.sh -lib/functions/image/partitioning.sh - -commit 1afd681bab297b9441fe9e65104ba52d1a3d96ce -Author: Ricardo Pardini -AuthorDate: Fri Mar 4 04:16:50 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: rpi: completely remove dtb hacks, allowing flash-kernel to work again - -config/sources/families/bcm2711.conf - -commit 33beb042960cbf7ab66271a44b53b79dafa01642 -Author: Ricardo Pardini -AuthorDate: Fri Mar 4 01:09:55 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: refactor new kernel packaging; add linux-dtb package back in finally, upgrades untested - -lib/functions/compilation/kernel-debs.sh - -commit 5cd4b7a471267aaf8a1336629a65a6df4b81b087 -Author: Ricardo Pardini -AuthorDate: Thu Mar 3 23:31:08 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: refactor new kernel packaging; extract hook helper, fix kernel symlink - -lib/functions/compilation/kernel-debs.sh - -commit c2259116c1728595802cf29aae7f29098a4a5c99 -Author: Ricardo Pardini -AuthorDate: Thu Mar 3 21:49:24 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: refactor new kernel packaging; add linux-dtb package back in finally, all hooks untested - -lib/functions/compilation/kernel-debs.sh -lib/functions/compilation/kernel.sh - -commit 7cd425e1c3c2efa14c7fb7a13a9b24f9bb5cfc38 -Author: Ricardo Pardini -AuthorDate: Wed Mar 2 20:31:44 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - flash-kernel: fix short-circuits as last statement in functions - -extensions/flash-kernel.sh - -commit b459fb3af894ae4315e8416fee62d77c2a1a191b -Author: Ricardo Pardini -AuthorDate: Wed Mar 2 13:28:37 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: do not force `SHOW_LOG=yes` if `CI=true`; let's _trust_ logging and error handling works - -compile.sh - -commit a0ed264825785655fba53d67de525ddebbb48090 -Author: Ricardo Pardini -AuthorDate: Wed Mar 2 13:26:56 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: back out of setting mtime to the revision time during git checkout. - - - of course this causes huge recompiles when wanted revision moves forward - -lib/functions/general/git.sh - -commit 4d1d62558c4cf4f670fae821f7629a01a1f2c35e -Author: Ricardo Pardini -AuthorDate: Wed Mar 2 13:16:04 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: sync 'config' dir from master revision ed589b248aef675cb5e845fcb55c12dfbcc5e925 - - - this is _also_ getting out of hand... gotta merge soon - -config/boards/rpi4b.wip -config/boards/uefi-arm64.conf -config/boards/uefi-x86.conf -config/sources/families/bcm2711.conf -config/sources/families/include/meson64_common.inc -config/sources/families/include/rockchip64_common.inc -config/sources/families/include/uefi_common.inc -config/sources/families/jetson-nano.conf -config/sources/families/media.conf - -commit b4c137bdb097e7cbba7bfc22795fa1223ea2bc7d -Author: Ricardo Pardini -AuthorDate: Wed Mar 2 12:57:31 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: sync 'packages' dir from master revision ed589b248aef675cb5e845fcb55c12dfbcc5e925 - -packages/armbian/builddeb -packages/armbian/mkdebian -packages/bsp/common/etc/profile.d/armbian-activate-profile-sync-daemon.sh -packages/bsp/common/etc/profile.d/armbian-check-first-login-reboot.sh -packages/bsp/common/etc/profile.d/armbian-ssh-title.sh -packages/bsp/jethub/jethub-remove-log-file.sh -packages/bsp/nanopim4/nanopim4-pwm-fan.sh -packages/bsp/odroid/c1_init.sh -packages/bsp/odroid/c2_init.sh -packages/bsp/rk3328/z28pro/start_bt.sh -packages/bsp/rockchip/start_bt.sh -packages/bsp/sunxi/zeroplus2-bt.sh -packages/extras-buildpkgs/hostapd-realtek/debian/ifupdown/hostapd.sh -packages/extras-buildpkgs/hostapd/debian/ifupdown/hostapd.sh - -commit c216282d323014ca365a1539a305911ca835906b -Author: Ricardo Pardini -AuthorDate: Wed Mar 2 12:44:36 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: manual merge (11) of all lib/*.sh changes between revisions 3305d45b8175dbdd647dc1dc53fa6f0a522920c7 and ed589b248aef675cb5e845fcb55c12dfbcc5e925 - -lib/functions/compilation/patch/kernel-bootsplash.sh -lib/functions/compilation/patch/kernel-drivers.sh -lib/functions/configuration/main-config.sh -lib/functions/main/config-prepare.sh - -commit c2871d87a4237f167e274f9ec38442e6ff4e0934 -Author: Ricardo Pardini -AuthorDate: Wed Mar 2 02:31:37 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: more refactorings, general logging; fixes; split image stuff - - - logging flowing correct to LOGDIR, still needs packaging - -lib/extensions.sh -lib/functions/compilation/kernel.sh -lib/functions/configuration/main-config.sh -lib/functions/general/chroot-helpers.sh -lib/functions/image/compress-checksum.sh -lib/functions/image/fingerprint.sh -lib/functions/image/partitioning.sh -lib/functions/image/rootfs-to-image.sh -lib/functions/image/write-device.sh -lib/functions/logging/logging.sh -lib/functions/logging/traps.sh -lib/functions/main/default-build.sh -lib/functions/main/rootfs-image.sh -lib/library-functions.sh - -commit c7862c7c5e2807060ead176597998270256faff9 -Author: Ricardo Pardini -AuthorDate: Tue Mar 1 11:44:32 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: complete removal of usages of `LOG_SUBPATH`; 100% error handled - - - loose ends, use new LOGDIR - - remove the last shortcircuit in extensions execution, now it's 100% error handled - - many logging fixes - - still missing: final log consolidation/cleanup - -extensions/gen-sample-extension-docs.sh -extensions/grub.sh -lib/extensions.sh -lib/functions/bsp/bsp-desktop.sh -lib/functions/cli/cli-entrypoint.sh -lib/functions/configuration/main-config.sh -lib/functions/general/downloads.sh -lib/functions/general/host.sh -lib/functions/image/initrd.sh -lib/functions/image/partitioning.sh -lib/functions/image/rootfs-to-image.sh -lib/functions/logging/logging.sh -lib/functions/logging/runners.sh -lib/functions/main/config-prepare.sh -lib/functions/main/rootfs-image.sh -lib/functions/rootfs/distro-agnostic.sh -lib/functions/rootfs/rootfs-desktop.sh - -commit 11d89f69e44b97e6f494a92ea688099f2c9b8370 -Author: Ricardo Pardini -AuthorDate: Mon Feb 28 20:36:55 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - logging: blue groups if `SHOW_DEBUG=yes` or `SHOW_GROUPS=yes` (console equivalent of CI's avocado) - -lib/functions/logging/logging.sh - -commit c3f70639f0f0323baef75950f664e10517ef94fb -Author: Ricardo Pardini -AuthorDate: Mon Feb 28 17:20:18 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:38 2022 +0200 - - armbian-next: shut down some too-verbose logging: logo building and update-initramfs - -lib/functions/image/initrd.sh -lib/functions/rootfs/boot_logo.sh - -commit 9218d4a1196a4b7d0f303a972e2f5c293e789d90 -Author: Ricardo Pardini -AuthorDate: Mon Feb 28 15:43:03 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: git/patching, kernel: use date from git as mtime minimum for patched files - - - use revision's date from git log as mtime for all fetch_from_repo - - fix patched files date at least checkout date, otherwise some patches never build - -lib/functions/compilation/kernel.sh -lib/functions/compilation/patch/fasthash.sh -lib/functions/compilation/patch/patching.sh -lib/functions/general/git.sh - -commit 839e3ab254e7d5f91fa5eeb1f456e66bf0483a1c -Author: Ricardo Pardini -AuthorDate: Mon Feb 28 00:20:41 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: first attempt at kernel packaging rework; just linux-image pkg, no dtbs yet - - - correctly predict KERNELRELEASE, put image-dtbs in the right spot for flash-kernel - - remove dpkg-gencontrol, do it all directly - -lib/functions/compilation/kernel-debs.sh -lib/functions/compilation/kernel.sh -lib/functions/compilation/patch/kernel-pkg.sh -lib/library-functions.sh - -commit 477926aac9205e2b7bc07c14e2727730eba11a27 -Author: Ricardo Pardini -AuthorDate: Fri Feb 25 22:49:47 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: rework kernel source packaging, now exporting from git, to .tar.zst - - - compress with zstdmt (multi-thread zstd), remove pv indicator, it's much faster anyway - - export from git (soon will have all patches et al too) - - better logging, show pkg name - - much, much faster due to zstdmt and deb with none compression - -lib/functions/compilation/kernel.sh - -commit d14b2a9265f92d47185047eb8520a956f6ce9ea4 -Author: Ricardo Pardini -AuthorDate: Fri Feb 25 00:50:27 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: a bit atrocious, nameref loaded, `get_list_of_all_buildable_boards()` - - - in the process, add support for userpatches/config structure mirroring core, for easy upstreaming - -lib/functions/compilation/kernel.sh -lib/functions/configuration/interactive.sh -lib/functions/configuration/main-config.sh -lib/functions/main/config-prepare.sh - -commit bc0d123dc5e1baf21a20ef86d5c4e32aff3aa931 -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 19:57:43 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: make `SKIP_EXTERNAL_TOOLCHAINS=yes` default. lets see what breaks [WiP] - -lib/functions/configuration/main-config.sh - -commit 7fb54baca48ed6ae60b6a0025e83b0e29380164f -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 19:57:17 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: keeping stdout clean, use display_alert() for cleanup logging - -compile.sh -lib/functions/configuration/config-desktop.sh -lib/functions/configuration/main-config.sh -lib/functions/main/rootfs-image.sh - -commit a3b64e15f9130871ff37061aa533ca0649c0bc0c -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 19:35:23 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: library cleanups; remove `build-all.sh` for good; bring `patching.sh` back - -lib/functions/compilation/patch/patching.sh -lib/functions/multi/build-all.sh -lib/library-functions.sh - -commit 68efe99a09da93c27a9cf20d1f14fc9354c73b92 -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 19:27:06 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: `interactive_desktop_main_configuration()` and stderr'ed + error handl'ed dialog - - - use redirection to fd 3 for dialog, now cleanly on stderr - - `show_menu()` -> `dialog_menu()` et al - - interactive configuration now works again! - -lib/functions/configuration/config-desktop.sh -lib/functions/configuration/interactive.sh -lib/functions/configuration/main-config.sh -lib/functions/configuration/menu.sh -lib/functions/general/host.sh -lib/functions/main/config-prepare.sh - -commit 8aed5b427cbc6fd3ddef54b604ee0a8287ebdd7b -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 16:36:59 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: logging: `SHOW_PIDS=yes` - -lib/functions/logging/logging.sh - -commit 5ede8ce433706f6e98413a2e976c8698bbc85afa -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 16:36:18 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: refactor and error-handle most of desktop configuration, incl menus/dialog - - - `dialog_if_terminal_set_vars()` in place of `dialog_if_terminal()` - -lib/functions/configuration/config-desktop.sh -lib/functions/configuration/interactive.sh -lib/functions/configuration/main-config.sh -lib/functions/configuration/menu.sh -lib/functions/general/repo.sh -lib/functions/main/config-prepare.sh - -commit 6d5802b05da59513e169dd2837d293b8d99e95c4 -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 01:27:39 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - [WiP] ddk stuff, allow if not in `$KERNEL_TARGET` - -lib/functions/main/config-prepare.sh - -commit e1e33a3e9413fda79f7240abf61a9bd3ef95d27a -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 00:39:31 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: split `compile_kernel()` function into smaller functions (+logging) - - - `do_with_logging()` galore, much better error reporting for kernel - - `do_with_hooks()` is for the future, just a placeholder for now - -lib/functions/compilation/kernel.sh -lib/functions/main/default-build.sh - -commit e16b1e19e04308d5313908a5750e74ed2bdd72aa -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 00:31:23 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: `do_with_hooks()` placeholder for future ideas - -lib/extensions.sh - -commit 4416b6b18cdb3c9311aa254189b21dfdf03747cf -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 00:30:55 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: logging: small refactor and `do_with_logging` admit it does not do error control - -lib/functions/logging/logging.sh - -commit 3047f4362cad224283a9febd1dc05c4178768964 -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 00:28:09 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: fix: traps: `trap_manager_error_handled` is integer (`-i`) not array (`-a`) - -lib/functions/logging/traps.sh - -commit a6df63b905f60045a41f640f98c01e8e5305e8ed -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 00:25:30 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: sunxi-tools: fix logging for sunxi-tools compilation - -extensions/sunxi-tools.sh - -commit 1f1f7c01f3e77fa8de9c5657a123f0bf723cceb0 -Author: Ricardo Pardini -AuthorDate: Thu Feb 24 00:24:33 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: runners now run bash with `-o pipefail` in addition to `-e` - - - attention, only affects stuff run through the functions in runners.sh - -lib/functions/logging/runners.sh - -commit cdfe8e12f9940a457f5161798d11c5131c99b81b -Author: Ricardo Pardini -AuthorDate: Wed Feb 23 21:02:10 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: kernel: reduce logging clutter (CC,LD,AR) - - - hide fasthash_debug under `SHOW_FASTHASH` - -lib/functions/compilation/kernel.sh -lib/functions/compilation/patch/fasthash.sh - -commit 9ffb0891d8572ab04126bff74632dcabc31a81b1 -Author: Ricardo Pardini -AuthorDate: Wed Feb 23 21:00:59 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: `armhf` should make `zImage` -- or should it? - -config/sources/armhf.conf - -commit 4d8eab13c18560b8d64735858b2cf2462ac3f644 -Author: Ricardo Pardini -AuthorDate: Wed Feb 23 13:22:21 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: show logs through ccze; avoid ANSI escapes in file; `SHOW_xxx` control - - - `SHOW_DEBUG` shows the debug level - - `SHOW_COMMAND` shows all invoked commands through the runners - - `SHOW_TRAPS` to show 'cleanup' and 'trap' level - - `SHOW_TIMING` to show $SECONDS but pretty - - replace hardcoded traps/cleanups logging - -lib/extensions.sh -lib/functions/compilation/patch/fasthash.sh -lib/functions/general/host.sh -lib/functions/logging/logging.sh -lib/functions/logging/stacktraces.sh -lib/functions/logging/traps.sh -lib/functions/main/default-build.sh - -commit 6cbb8c84798438b5ca5b353829b011cdbc263f1b -Author: Ricardo Pardini -AuthorDate: Tue Feb 22 14:36:41 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: add `KERNEL_MAJOR_MINOR=x.z` to every family, manually from the `KERNELBRANCH` - -config/sources/families/imx6.conf -config/sources/families/imx7d.conf -config/sources/families/include/meson_common.inc -config/sources/families/include/rockchip64_common.inc -config/sources/families/include/sunxi64_common.inc -config/sources/families/include/sunxi_common.inc -config/sources/families/jetson-nano.conf -config/sources/families/media.conf -config/sources/families/mt7623.conf -config/sources/families/mvebu.conf -config/sources/families/mvebu64.conf -config/sources/families/odroidxu4.conf -config/sources/families/rk322x.conf -config/sources/families/rk3399.conf -config/sources/families/rk35xx.conf -config/sources/families/rockchip.conf -config/sources/families/rockchip64.conf -config/sources/families/rockpis.conf -config/sources/families/s5p6818.conf -config/sources/families/sun50iw9.conf -config/sources/families/virtual.conf -config/sources/families/zynq.conf - -commit 7b907d446bfae3db8c5afb4431d8e9bbd9e5df9e -Author: Ricardo Pardini -AuthorDate: Tue Feb 22 02:27:09 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: cold/warm bundles import/download/export for fetch_from_repo - - - warm remote, if present, can be exported shallow - - if warm remote bundle is present, can be imported shallow too - - fallback to cold bundle if warm not present - - export (from cold, if exists + warm) shallow bundle - - use temp clone and DATE (not rev or tag) for shallowing, WORKS! - - info JSON/CSV, include "config_ok" true/false, kernel/uboot info - - include logs for failed configs too - - core reports ARMBIAN_WILL_BUILD_KERNEL and ARMBIAN_WILL_BUILD_UBOOT now with package names - -lib/functions/compilation/kernel.sh -lib/functions/general/git.sh -lib/functions/main/config-prepare.sh -lib/tools/info.py -lib/tools/json2csv.py - -commit 8eca261f5e3e41d7f363514a79b4fd764c3e9b71 -Author: Ricardo Pardini -AuthorDate: Mon Feb 21 17:39:40 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: `KERNELDIR` is out, `KERNEL_MAJOR_MINOR` is in for all `meson64`, `rpi4b` and `uefi` - -config/sources/families/bcm2711.conf -config/sources/families/include/meson64_common.inc -config/sources/families/include/uefi_common.inc -extensions/grub.sh - -commit 6f046c4f36a156468666b8c7bfff995934c44264 -Author: Ricardo Pardini -AuthorDate: Mon Feb 21 17:37:10 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: new kernel workdir layout: cache/sources/kernel/-- - - - `GIT_FIXED_WORKDIR` is used to ignore 2nd param and use a specific dir - - this now REQUIRES `KERNEL_MAJOR_MINOR` to be set. - - prepare some `WARM_REMOTE_NAME` and related, based on it - -lib/functions/compilation/kernel.sh -lib/functions/general/git.sh -lib/functions/main/config-prepare.sh -lib/functions/main/default-build.sh - -commit e736b5233c440555fa8a1a654f1c3ac9ae664580 -Author: Ricardo Pardini -AuthorDate: Mon Feb 21 16:01:19 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: JUST_KERNEL=yes (opposed to KERNEL_ONLY=yes) is really just the kernel build - -lib/functions/main/default-build.sh - -commit df90ffa11bff94bcb3b90b3460bacd7ed102a567 -Author: Ricardo Pardini -AuthorDate: Mon Feb 21 14:40:47 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: fetch_from_repos now done when actually compiling atf/uboot/kernel, not before - - - lib regen after removing empty files (sources.sh and errors.sh are now gone) - -lib/functions/compilation/atf.sh -lib/functions/compilation/kernel.sh -lib/functions/compilation/sources.sh -lib/functions/compilation/uboot.sh -lib/functions/logging/errors.sh -lib/functions/main/default-build.sh -lib/library-functions.sh - -commit a44e91752d1005daa5bba5eb0b0114654199e3e5 -Author: Ricardo Pardini -AuthorDate: Mon Feb 21 01:50:16 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: linux: back to Torvalds bundle, no tags; reminder about export - -lib/functions/configuration/main-config.sh -lib/functions/general/git.sh - -commit 9acef6be57519029f5e4eeccabac183e27e3f845 -Author: Ricardo Pardini -AuthorDate: Sat Feb 19 02:29:27 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: full cached kernel build; refactor all make's in a single place, even for packaging - - - 2nd+ runs build in less than a minute - - kernel: compile and package in a single step, more efficient? - - KERNEL_BUILD_DTBS yes/no to build or not dtbs, replaces KERNEL_EXTRA_TARGETS - - dtbs_install, modules_install and headers_install now called by Armbian, not packaging - - kernel with split, but identical, build and install makes for modules/headers/dtbs - - make mkdebian and builddeb idempotent as possible - - keep a lot more cache, specially 'debian' folder - - filtering logging of install stuff - - might be a few leftovers, revisit gains with packaging later - - keeping the arm64 makefile Image.gz vs Image hack - - fix order of packaging patch byteshift, but still there - - cleaning of scripts tools on cross compile removed (!) - -config/sources/amd64.conf -lib/functions/compilation/kernel.sh -lib/functions/compilation/patch/apply.sh -lib/functions/compilation/patch/fasthash.sh -lib/functions/compilation/patch/kernel-pkg.sh -lib/functions/compilation/sources.sh -lib/functions/main/default-build.sh -packages/armbian/builddeb -packages/armbian/mkdebian - -commit 0e26d1439e8e6ad7ae331247a618db4ea4a4130c -Author: Ricardo Pardini -AuthorDate: Sat Feb 19 01:06:32 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: minor stylistic changes that I end up doing while working on other stuff - - - I am `OFFLINE_WORK`'ing, I don't wanna waste 3 seconds, thanks - - OCD-fix of double `local` declarations - -lib/functions/cli/cli-entrypoint.sh -lib/functions/general/git.sh - -commit 1b0d604efc56025a1dfd8a2d9ef3485799fbbe1b -Author: Ricardo Pardini -AuthorDate: Fri Feb 18 04:26:28 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - [giga-wip] rework patching, introducing fasthash - -lib/functions/compilation/kernel.sh -lib/functions/compilation/patch/apply.sh -lib/functions/compilation/patch/fasthash.sh -lib/functions/compilation/patch/kernel-bootsplash.sh -lib/functions/compilation/patch/kernel-drivers.sh -lib/functions/compilation/patch/kernel-pkg.sh -lib/functions/compilation/sources.sh -lib/library-functions.sh - -commit 8939a9142a7e08f0dae8bc866811687119501c5e -Author: Ricardo Pardini -AuthorDate: Fri Feb 18 04:17:22 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - [wip] git: experiment with stable kernel bundle, and all tags. nice, but for what? - - - also: never delete working copy, exit with error instead. - -lib/functions/configuration/main-config.sh -lib/functions/general/git.sh - -commit b853358ccab458dce0efca486ec5a15fda4ec193 -Author: Ricardo Pardini -AuthorDate: Fri Feb 18 04:09:37 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - [wip] disable make clean during packaging. I wanna rebuild fast, always [NO PR?] - -packages/armbian/builddeb - -commit d61b6ddd982f316604bdedd82a0907beef7cfa0b -Author: Ricardo Pardini -AuthorDate: Thu Feb 17 22:21:33 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: export CHOSEN_KERNEL_WITH_ARCH for reporting info - - - fix info gathering, parse all boards first, and stop if some failed - - fix KERNEL_TARGET regex by including optional "export " - - add export from info to CSV, very basic stuff, but works - -lib/functions/main/config-prepare.sh -lib/tools/info.py -lib/tools/json2csv.py - -commit dcf101ccbcb61fb4bf0af97f8592f6f166a20b92 -Author: Ricardo Pardini -AuthorDate: Thu Feb 17 21:47:02 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - [squash] remove ddk bullshit from KERNEL_TARGET - -config/boards/rpi4b.wip -config/boards/uefi-arm64.conf -config/boards/uefi-x86.conf - -commit 7183b3290b9df1c4fce8307813702c23846be817 -Author: Ricardo Pardini -AuthorDate: Thu Feb 17 15:49:27 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: remove file logging of aggregation stuff. config phase can't touch disk anymore. - -lib/functions/configuration/aggregation.sh -lib/functions/configuration/main-config.sh - -commit 4f858ace7b8674c8d5555e311bd053819555648a -Author: Ricardo Pardini -AuthorDate: Thu Feb 17 03:24:08 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - [WiP] git cold bundle; no: shallow clones/fetched; yes: locally packed repo - -config/sources/families/include/sunxi64_common.inc -config/sources/families/include/sunxi_common.inc -lib/functions/compilation/debs.sh -lib/functions/compilation/extra-drivers.sh -lib/functions/compilation/kernel.sh -lib/functions/compilation/patching.sh -lib/functions/compilation/sources.sh -lib/functions/compilation/uboot.sh -lib/functions/configuration/main-config.sh -lib/functions/general/git.sh -lib/functions/multi/build-all.sh - -commit 134877c13df20aa7403185b41d75ee3db95c4485 -Author: Ricardo Pardini -AuthorDate: Wed Feb 16 23:06:37 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: reorder functions in file, they have a ~logical call-tree order - -lib/functions/logging/runners.sh - -commit f148d9aa6b42c96ee1fe9c58053886d693a5c58e -Author: Ricardo Pardini -AuthorDate: Wed Feb 16 23:05:28 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: move `fingerprint_image()` out of `git.sh` into its own file - -lib/functions/general/fingerprint.sh -lib/functions/general/git.sh -lib/library-functions.sh -lib/tools/gen-library.sh - -commit 9f774b4dac5b1c1808c2a57b2cb7b7ed2dd2e308 -Author: Ricardo Pardini -AuthorDate: Wed Feb 16 12:02:32 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - logging: fix for double stderr redirect during `fakeroot_dpkg_deb_build` - -lib/functions/logging/runners.sh - -commit 8164916306b8b4bc06cd8dca5f7d937d0bfee368 -Author: Ricardo Pardini -AuthorDate: Wed Feb 16 11:47:38 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - logging: subdued "command" logging for debugging low level cmd invocations ("frog") - -lib/functions/compilation/kernel.sh -lib/functions/logging/logging.sh -lib/functions/logging/runners.sh - -commit b173dbe20aff3996a3ad8b32860d001336eaa34c -Author: Ricardo Pardini -AuthorDate: Wed Feb 16 02:23:16 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: when showing log, emit all host-side invocations as `debug` too. - -lib/functions/logging/runners.sh - -commit 550e748f1a27d875cf9badfa85d6f1c251fa52aa -Author: Ricardo Pardini -AuthorDate: Sun Feb 13 16:49:58 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - [WiP] trap handler abstraction, somewhat works! - -compile.sh -lib/extensions.sh -lib/functions/cli/cli-entrypoint.sh -lib/functions/image/rootfs-to-image.sh -lib/functions/logging/errors.sh -lib/functions/logging/logging.sh -lib/functions/logging/stacktraces.sh -lib/functions/logging/traps.sh -lib/functions/main/default-build.sh -lib/functions/main/rootfs-image.sh -lib/functions/rootfs/create-cache.sh - -commit 7f06253437a0ae20d4570e09e8babe3302bb8350 -Author: Ricardo Pardini -AuthorDate: Wed Feb 16 00:01:54 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: manual merge (10) of all lib/*.sh changes between revisions a4ae3a22703a66f1e383a193d74655533ff96c3a and 3305d45b8175dbdd647dc1dc53fa6f0a522920c7 - but NOT the git unshallow stuff, that will be rewritten - -config/sources/families/bcm2711.conf -config/sources/families/include/uefi_common.inc -lib/functions/configuration/main-config.sh -lib/functions/image/partitioning.sh -packages/armbian/builddeb - -commit dcbc1fa8d159e9a7423e82c5bc81b223c20dfbc1 -Author: Ricardo Pardini -AuthorDate: Sun Feb 13 14:35:36 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: trapmanager pt1, identifying spots for trap manager intervention - -lib/functions/bsp/bsp-cli.sh -lib/functions/bsp/bsp-desktop.sh -lib/functions/compilation/atf.sh -lib/functions/compilation/debs.sh -lib/functions/compilation/kernel.sh -lib/functions/compilation/uboot.sh - -commit d2c3f332f9e9a04ff68d2bf1e694a223999e3304 -Author: Ricardo Pardini -AuthorDate: Sun Feb 13 13:42:44 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: `install_pkg_deb` -> `install_host_side_packages` which is completely rewritten version - - - much simplified; compare installed packages vs wanted, and only update if some missing - -lib/functions/general/host.sh -lib/functions/logging/runners.sh - -commit 3b2d026b59d86cd463119876a9b69b02fd6ecf45 -Author: Ricardo Pardini -AuthorDate: Sun Feb 13 13:27:31 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: force u-boot and kernel's gcc to output colors to make easy to spot warnings and errors - -lib/functions/compilation/kernel.sh -lib/functions/compilation/uboot.sh - -commit fb4be3fa4a0d19043ee8d7ff1304ec3ccdf618cb -Author: Ricardo Pardini -AuthorDate: Sun Feb 13 13:23:51 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - docker: pass the `CI` env var through Docker invocation, for GitHub Actions - -config/templates/config-docker.conf - -commit 3db36a4fd3e6ad8c1b2d47d88d664936274bb875 -Author: Ricardo Pardini -AuthorDate: Sun Feb 13 13:23:09 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: avoid warning if "file" utility not installed - - - should not happen, but better safe than sorry - -lib/functions/logging/runners.sh - -commit d986cbc68bc926d9dc8fca44cbe9b5a19d6a88b6 -Author: Ricardo Pardini -AuthorDate: Sun Feb 13 13:22:33 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: disable long_running `pv` progress bar for custom case too - - - will rework later, for now pipe causes subshell and caos - -lib/functions/logging/runners.sh - -commit 7d49d5f6a72be78fa8afcd362fe7984e34d28614 -Author: Ricardo Pardini -AuthorDate: Sun Feb 13 13:21:12 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: if `CI=true` then `SHOW_LOG=yes` always - -compile.sh - -commit a803a9dbbb8b86301ca930214675c1365e9125a7 -Author: Ricardo Pardini -AuthorDate: Sat Feb 12 23:18:05 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - docker: add arm64 toolchain to Dockerfile; warn, but don't break, on modprobe failure - -config/templates/Dockerfile -lib/functions/general/host.sh - -commit aaed9afade2dda38d9e92a7054f3477801468760 -Author: Ricardo Pardini -AuthorDate: Sat Feb 12 21:52:01 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: docker: use ubuntu:rolling, fix deps, use `$SRC/cache` as container's cache dir - -config/templates/Dockerfile -config/templates/config-docker.conf - -commit 6e52c4d1b50f4bff209d7536573329f7ea9e5e47 -Author: Ricardo Pardini -AuthorDate: Sat Feb 12 23:17:20 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: logging fixes (padding, don't show error more than once, don't remove trap) - -lib/functions/logging/logging.sh -lib/functions/logging/stacktraces.sh -lib/functions/logging/traps.sh - -commit 5022af1c97af824af73d6e79bee988a3bf3773d1 -Author: Ricardo Pardini -AuthorDate: Sat Feb 12 21:50:37 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:37 2022 +0200 - - armbian-next: fixes for early error handling and logging - - - split stacktrace-related functions into their own lib file - - simplify the traps - - some stacktrace formatting for readability - -compile.sh -lib/extensions.sh -lib/functions/logging/stacktraces.sh -lib/functions/logging/traps.sh -lib/library-functions.sh - -commit a94d0cf61be12647c9ce5ce05440b6fe44b53cb4 -Author: Ricardo Pardini -AuthorDate: Sat Feb 12 21:45:05 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: fix: don't `trap` `ERR` twice, it causes bash to go bananas regarding `caller` - -lib/extensions.sh - -commit 54ce1b35ffac8eb5933a147b264352ac7ceb026a -Author: Ricardo Pardini -AuthorDate: Sat Feb 12 17:01:00 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: `UPSTEM_VER` -> `UBOOT_REPO_VERSION` and related fixes - -lib/functions/image/loop.sh -lib/functions/image/rootfs-to-image.sh -lib/functions/multi/build-all.sh -lib/functions/rootfs/distro-agnostic.sh - -commit e4d30f131db7f9ab15759e4fa7fe5f18117cccd6 -Author: Ricardo Pardini -AuthorDate: Sat Feb 12 16:06:30 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: oops, fix some non-lib changes I missed, up to revision ff4346c4682e260be3137a2301ac7a69b97c044d - -config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh -config/sources/families/include/rockchip64_common.inc -config/sources/families/include/sunxi64_common.inc -config/sources/families/include/sunxi_common.inc -config/sources/families/jetson-nano.conf -config/sources/families/mvebu64.conf -config/sources/families/odroidxu4.conf -config/sources/families/rk322x.conf -config/sources/families/rk35xx.conf -config/sources/families/rockchip64.conf -config/templates/config-example.conf -packages/armbian/builddeb - -commit 326548a2fb5909159b84ad75d11c714b4dbe42b3 -Author: Ricardo Pardini -AuthorDate: Sat Feb 12 15:46:09 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: manual merge (9) of all lib/*.sh changes between revisions 3b7f5b1f3418b7ad7a7c03f2af6d8da66f20bcb9 and ff4346c4682e260be3137a2301ac7a69b97c044d - -lib/functions/compilation/extra-drivers.sh -lib/functions/configuration/main-config.sh -lib/functions/image/partitioning.sh -lib/functions/image/rootfs-to-image.sh -lib/functions/rootfs/distro-agnostic.sh - -commit 8180b79f136be27a79d225ade02faa823012923f -Author: Ricardo Pardini -AuthorDate: Sat Feb 12 10:18:32 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: more error handling fixes. avoid shortcircuits. - - - store previous error message in `MSG_IF_ERROR` (still to be actually shown somewhere during error) - -lib/functions/compilation/atf.sh -lib/functions/compilation/uboot.sh -lib/functions/image/partitioning.sh -lib/functions/rootfs/apt.sh -lib/functions/rootfs/create-cache.sh -lib/functions/rootfs/distro-agnostic.sh - -commit f549907b967be0199cb10b995f8aa3449e0de8ad -Author: Ricardo Pardini -AuthorDate: Sat Feb 12 09:17:38 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: more error handling fixes. avoid subshells, shortcircuits, and pipes - - - add `CFLAGS=-fdiagnostics-color=always` to kernel compile; would need also for u-boot soon - -lib/functions/compilation/kernel.sh -lib/functions/logging/logging.sh -lib/functions/logging/runners.sh -lib/functions/logging/traps.sh - -commit 6e3a035ec4ba55378e61e0229fb0290f3b0cdf99 -Author: Ricardo Pardini -AuthorDate: Mon Jan 31 20:03:34 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - WiP: indexing JSON into OpenSearch, all-hardcoded version - -lib/tools/index-opensearch.py - -commit a1e81b3a46d9511962246ff6852ae9549b154fb9 -Author: Ricardo Pardini -AuthorDate: Sun Feb 6 01:57:09 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - rpi: add DTB symlink in Debian/Ubuntu standard location /lib/firmware/$version/device-tree; remove build-time-only hacks - - - this allows us to remove the most horrible hack - - should allow for correctly working DTB upgrades - - should NOT impact other families, although a new symlink will be created, nothing uses it. - -config/sources/families/bcm2711.conf -packages/armbian/builddeb - -commit e665d2fb3e9a25b2e9e927e3749ff14065f29ffb -Author: Ricardo Pardini -AuthorDate: Sat Feb 5 23:37:01 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - rpi: fix: flash-kernel fix to ignore kernel 'flavour' for all raspi's - -config/sources/families/bcm2711.conf - -commit acb9b1ee273bb16ab3a5caf47830f63a9eedef37 -Author: Ricardo Pardini -AuthorDate: Sun Feb 6 14:19:04 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: don't try to remove packages that are not installed to begin with - - - much faster - - new chroot_sdcard_with_stdout() runner, without bash or any escaping. - -lib/functions/logging/runners.sh -lib/functions/rootfs/distro-agnostic.sh - -commit c2a084f37049b0a3338e8f8bdf1e103539439c89 -Author: Ricardo Pardini -AuthorDate: Sun Feb 6 12:42:25 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: don't try to enable systemd services for units that don't exist - - - those might be removed by a bsp extension, so check for existence before trying to enable - -lib/functions/rootfs/distro-agnostic.sh - -commit 9291369c6d68660e9a43f43ee3fc94c8ad0fc774 -Author: Ricardo Pardini -AuthorDate: Sun Feb 6 12:12:01 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: don't error/warn on failure to enable bootsplash when systemd units missing - -lib/functions/rootfs/boot_logo.sh - -commit ee634ea265ad9947f4061cd3bc0ffdf7d83d3e78 -Author: Ricardo Pardini -AuthorDate: Sun Feb 6 11:24:33 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: use indented HEREDOCS for all call_extension_method's - -lib/extensions.sh -lib/functions/bsp/bsp-cli.sh -lib/functions/image/partitioning.sh -lib/functions/image/rootfs-to-image.sh -lib/functions/main/default-build.sh -lib/functions/main/rootfs-image.sh -lib/functions/rootfs/customize.sh -lib/functions/rootfs/distro-agnostic.sh -lib/functions/rootfs/post-tweaks.sh - -commit cba342a0ce4843cf69144c11ea881e0ce0b6ba40 -Author: Ricardo Pardini -AuthorDate: Sun Feb 6 14:39:49 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: manual merge (8) of all lib/*.sh changes between revisions 1d499d9ac282d44d4fdb052e5f64fb902688c18f and 3b7f5b1f3418b7ad7a7c03f2af6d8da66f20bcb9 - -lib/functions/compilation/patching.sh - -commit b2b1fdf3dae9193072994369c7b5bac7318366eb -Author: Ricardo Pardini -AuthorDate: Sat Feb 5 22:05:21 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: manual merge (7) of all lib/*.sh changes between revisions d885bfc97d908b09dddac06393c2987995704d0a and 1d499d9ac282d44d4fdb052e5f64fb902688c18f - -lib/functions/compilation/extra-drivers.sh -lib/functions/configuration/main-config.sh -lib/functions/general/git.sh -lib/functions/image/rootfs-to-image.sh -lib/functions/main/default-build.sh -lib/functions/rootfs/distro-agnostic.sh -lib/functions/rootfs/distro-specific.sh - -commit b2849431e1736e9bae4eeddd3ef363a058352465 -Author: Ricardo Pardini -AuthorDate: Sun Jan 30 22:21:50 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: manual merge (6) of all lib/*.sh changes between revisions c7f3c239fe93f8fcfdd1b1edf6f11e143802e379 and d885bfc97d908b09dddac06393c2987995704d0a - -lib/functions/compilation/extra-drivers.sh -lib/functions/compilation/patching.sh -lib/functions/configuration/main-config.sh -lib/functions/general/git.sh -lib/functions/rootfs/create-cache.sh - -commit 4fcb0204e5df9bc6c540806096def9ce8e3126e1 -Author: Ricardo Pardini -AuthorDate: Mon Jan 24 00:16:42 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: avoid writing to disk during configuration; `ANSI_COLOR=none` logging; make CONFIG_DEFS_ONLY=yes runnable without sudo - - - when `CONFIG_DEFS_ONLY=yes`, avoid writing the config summary output.log file. - - refactor that into a function as to be easy to if-out-of - - don't write to disk during aggregate_content() if `CONFIG_DEFS_ONLY=yes` - - don't write to disk during show_checklist_variables() if `CONFIG_DEFS_ONLY=yes` - - don't write to disk during write_deboostrap_list_debug_log() if `CONFIG_DEFS_ONLY=yes` - - don't compress and rotate logs if `CONFIG_DEFS_ONLY=yes` - - don't pretend to be handling errors we can't handle during var capture - - I foresee a world we can build all .debs without sudo - - and a some kind of split of codebase entrypoint due to that future feature - - some python info.py enhancements, not ready yet - -lib/extensions.sh -lib/functions/cli/cli-entrypoint.sh -lib/functions/configuration/aggregation.sh -lib/functions/configuration/main-config.sh -lib/functions/logging/capture.sh -lib/functions/logging/logging.sh -lib/functions/main/config-prepare.sh -lib/tools/info.py - -commit c7785c788f81bce938f2af6b3d576ba9834433b7 -Author: Ricardo Pardini -AuthorDate: Sun Jan 23 23:00:17 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: shellfmt and regen library (after rebase from master n.5) - -lib/functions/compilation/atf.sh -lib/functions/logging/logging.sh -lib/functions/rootfs/create-cache.sh -lib/library-functions.sh - -commit ac99b0432bdbb7d2ee589a5f41a72e17dcbfecee -Author: Ricardo Pardini -AuthorDate: Sun Jan 23 22:59:25 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - tools/shellfmt.sh: exclude "cache" and ".tmp" from formatting, for obvious reasons - -lib/tools/shellfmt.sh - -commit b17bb64ddc739b7084b98d070848aade693f3794 -Author: Ricardo Pardini -AuthorDate: Sun Jan 23 22:58:36 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - tools/gen-library.sh: sort function files, so it does not keep changing between runs on different machines. - - - order should not be important, since files only contain functions, but avoid git churn - -lib/tools/gen-library.sh - -commit d84cbf9f3a367ab068bd619619daa58c56e7c96f -Author: Ricardo Pardini -AuthorDate: Sun Jan 23 22:42:25 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: manual merge (5) of all lib/*.sh changes between revisions 1b18df3c834c5c4166e99f731d53ec88d14caf7d and e7962bb2b555d3afdca0ff168982cc45235ca0a8 - - - most PKG_PREFIX work was already done - -config/sources/families/jetson-nano.conf -lib/functions/general/host.sh -lib/functions/rootfs/distro-agnostic.sh - -commit b18f3c81a1613e4b1550674a471f309a59526167 -Author: Ricardo Pardini -AuthorDate: Sun Jan 23 22:08:16 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: `TMPDIR` for all, many logging fixes, error handling: leave-no-garbage-behind without needing traps. - - - set `MOUNT_UUID` and `WORKDIR`/`MOUNT`/`SDCARD`/`EXTENSION_MANAGER_TMP_DIR`/`DESTIMG` early in do_main_configuration() - - but, they're just _set_ there, dirs are not created early, but on demand later - - still @TODO: actually clean those during error trap. (unhappy path leaves garbage still) - - but does not leave garbage behind during "successful" runs at least (happy path works) - - actually export `TMPDIR` (== `WORKDIR`) during start of build (not config!), so all `mktemp` are subject to it - - `runners.sh` has helpers to avoid passing `TMPDIR` to chroot. Use the helpers! don't call `chroot` directly. - - don't trap/cleanup individual `mktemp` temp dirs during .deb packaging's, all is handled at once now. - - kernel packaging, for example, automatically picks up `TMPDIR` too. So now hosts `/tmp` is mostly left alone. - - fix some "infodumps" that are done into `.log` files directly. - - don't use sudo if `CONFIG_DEFS_ONLY=yes`; we'll only be collecting info, not doing anything. - - simpler logging for `rsync` operations (just dump to stdout, logging will handle it!) - - use padded counter for section logfiles, so we know which order things ran. exported as `CURRENT_LOGGING_COUNTER` - - no reason to use `apt-get` with `-yqq` anymore, since all logging is handled, so now `-y` by default - - desktop: using runners helpers for rootfs-desktop.sh, which should help a lot with acng caching and finding of problems - - extensions: correctly cleanup temp stuff, extensions has its own tmp/workdir now, and is always cleaned up at end of build. - -lib/extensions.sh -lib/functions/bsp/bsp-cli.sh -lib/functions/bsp/bsp-desktop.sh -lib/functions/cli/cli-entrypoint.sh -lib/functions/compilation/atf.sh -lib/functions/compilation/debs.sh -lib/functions/compilation/kernel.sh -lib/functions/compilation/patching.sh -lib/functions/compilation/uboot.sh -lib/functions/configuration/main-config.sh -lib/functions/configuration/menu.sh -lib/functions/general/host.sh -lib/functions/image/rootfs-to-image.sh -lib/functions/logging/logging.sh -lib/functions/logging/runners.sh -lib/functions/main/config-prepare.sh -lib/functions/main/default-build.sh -lib/functions/rootfs/rootfs-desktop.sh - -commit 84ad3ec52fa01eacca30bd3754853cff312dde5a -Author: Ricardo Pardini -AuthorDate: Sat Jan 22 10:35:06 2022 +0000 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: bye `PKG_PREFIX`, hello `run_host_x86_binary_logged()` wrapper function; better error handling - - - we've x86-only utilities that might need to be run on non-x86 build machines - - previously duplicated logic in PKG_PREFIX variable refactored into logged function - - added centralized debug logging - - replace all PKG_PREFIX usage with the new wrapper function, which already handles logging and errors. - - mostly FIP tooling invocations - - but also the boot_logo image builder - - wrapper function delegates to common `run_host_command_logged` - - wrap other FIP invocations with `run_host_command_logged` too, for tidy logging - - avoid using conditionals when invoking functions; that completely disables error handling inside the called function - - use explicit bash opts instead of shortcuts like `set -e` - - a _lot_ of debug logging added - -compile.sh -config/sources/families/include/meson64_common.inc -config/sources/families/include/rockchip64_common.inc -config/sources/families/meson-gxbb.conf -config/sources/families/meson-gxl.conf -lib/functions/cli/cli-entrypoint.sh -lib/functions/compilation/uboot.sh -lib/functions/general/host.sh -lib/functions/logging/runners.sh -lib/functions/rootfs/boot_logo.sh -lib/library-functions.sh -lib/tools/gen-library.sh - -commit f9e02b2152c1c82a74312ccf48ef530dac167512 -Author: Ricardo Pardini -AuthorDate: Sat Jan 22 10:32:08 2022 +0000 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:36 2022 +0200 - - armbian-next: always use UPPERCASE labels for FAT32 UEFI filesystems (rpi4b, uefi-*) - -config/sources/families/bcm2711.conf -lib/functions/image/partitioning.sh - -commit acbc2f21da023796c5a72e3b78e0b20f09cf5ed0 -Author: Ricardo Pardini -AuthorDate: Thu Jan 20 23:41:18 2022 +0000 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:34 2022 +0200 - - armbian-next: shellfmt after rebase onto master - -config/sources/families/media.conf - -commit 407ecdb1b9108b57afea57b3ca6a17ed86ef1fcc -Author: Ricardo Pardini -AuthorDate: Thu Jan 20 23:35:46 2022 +0000 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - armbian-next: manual merge (4) of all lib/*.sh changes between revisions 23afccf56e295610340188dc2613143d5323659e and e610f00bc7fdcab5ba4c648fa21148518b4b767b - - - plus ooops - -config/sources/families/bcm2711.conf -config/sources/families/include/sunxi_common.inc -config/sources/families/jethub.conf -lib/functions/configuration/main-config.sh -lib/functions/general/git.sh -lib/functions/general/host.sh - -commit cdf0389ba5f0a747f4c1f9feee9527001aa61a35 -Author: Ricardo Pardini -AuthorDate: Sun Jan 16 23:02:52 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - atf: fix for `set -e` mode; fix CROSS_COMPILE quoting - - Signed-off-by: Ricardo Pardini - -lib/functions/compilation/atf.sh - -commit eea2f5f4041541f8055be549eea4cf8c2f32a901 -Author: Ricardo Pardini -AuthorDate: Sun Jan 16 23:03:45 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: predict the future location of .img file - - - otherwise it's really unhelpful - - Signed-off-by: Ricardo Pardini - -lib/functions/image/rootfs-to-image.sh - -commit 873136d95f303e1acfce017ad7d38464ee0058ec -Author: Ricardo Pardini -AuthorDate: Sat Jan 15 19:37:27 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - uefi: alias `BRANCH=ddk` to `current`'s `DISTRO_GENERIC_KERNEL=yes` - - - no real change, just to match rpi4b's BRANCH=style - - opens space for Armbian-built `current` soon - - Signed-off-by: Ricardo Pardini - -config/boards/uefi-arm64.conf -config/boards/uefi-x86.conf -config/sources/families/include/uefi_common.inc - -commit fe8e12e095465e7098e5f4cff98fdb4ee80769ff -Author: Ricardo Pardini -AuthorDate: Sat Jan 15 02:46:02 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - rpi: `legacy`->`ddk` (distro default kernel), remove overclock - - - common vars in bcm2711.conf moved to top - - removed overclock/overvolt that was leftover my old setup - - confirmed: works with rpi3b too, should work with CM4/CM3 and others - - use valid UPPERCASE FAT label for RPICFG (in place of `rpicfg`) - - Signed-off-by: Ricardo Pardini - -config/boards/rpi4b.wip -config/sources/families/bcm2711.conf - -commit 1390b62e7c08fc0d0e834854ddd5d19c5243aa8d -Author: Ricardo Pardini -AuthorDate: Sat Jan 15 02:37:48 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - armbian-next: shellfmt again after rebase - - Signed-off-by: Ricardo Pardini - -config/boards/rpi4b.wip -config/sources/families/bcm2711.conf - -commit 03b4020135b5915e54895f5dcd53250df25d57e5 -Author: Ricardo Pardini -AuthorDate: Tue Jan 11 11:36:25 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - armbian-next: manual merge (3) of all lib/*.sh changes between revisions 1035905760884fbea567717684c38faae3ef28a4 and e4e4ab0791e60e1e7a204dd0409fa29a1cf7a376 - - - missed non lib change on Several improvements for RPi builds (#3391) - - I just realized I will have to drop all non lib changes - -config/boards/rpi4b.wip -config/sources/families/bcm2711.conf -lib/functions/compilation/debs.sh -lib/functions/general/downloads.sh -lib/functions/general/host.sh - -commit 1f2306a3ad4f0abf5730bb5eb26a70c979d86ff3 -Author: Ricardo Pardini -AuthorDate: Sun Jan 9 15:22:10 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - rockship: fixes for `set -e` mode in rockship armhf family and bsp tweaks - - Signed-off-by: Ricardo Pardini - -config/sources/families/rockchip.conf - -commit 7bfb222e11c2a658ce29df17d17981fce8e03382 -Author: Ricardo Pardini -AuthorDate: Sun Jan 9 15:21:40 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - armhf: enable building armhf targets on amd64 using system toolchains - - - SKIP_EXTERNAL_TOOLCHAINS=yes on amd64 should use the same system toolchains as an arm64 build - - Signed-off-by: Ricardo Pardini - -config/sources/armhf.conf - -commit 79348c956a29a2077e017c2d83e129beed99208d -Author: Ricardo Pardini -AuthorDate: Sun Jan 9 15:20:50 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: better logging about family_tweaks and family_tweaks_bsp - - Signed-off-by: Ricardo Pardini - -lib/functions/bsp/bsp-cli.sh -lib/functions/rootfs/distro-agnostic.sh - -commit eca8ea1ba1b44474c3fd1baae9bdacae5ef7e431 -Author: Ricardo Pardini -AuthorDate: Sat Jan 8 21:26:08 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - kernel: unblock cross compilation, warn about headers package - - Signed-off-by: Ricardo Pardini - -lib/functions/compilation/kernel.sh - -commit 739a4fe4d589a9d9ce58a725ed1d7db76b9aab3b -Author: Ricardo Pardini -AuthorDate: Sat Jan 8 20:02:23 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: fixes for sunxi/megous stuff with `set -e` - - Signed-off-by: Ricardo Pardini - -config/sources/families/include/sunxi64_common.inc -config/sources/families/include/sunxi_common.inc -lib/functions/general/git.sh - -commit 9fc0bd5788857c43c3f4d6e217928539ccd894a9 -Author: Ricardo Pardini -AuthorDate: Sat Jan 8 15:01:03 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: fix shellcheck references generation - - Signed-off-by: Ricardo Pardini - -lib/library-functions.sh -lib/tools/gen-library.sh - -commit 49cdd43f9fa208e13607eae9dad138d4d49a0a5f -Author: Ricardo Pardini -AuthorDate: Sat Jan 8 13:56:36 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: manual merge (2) of all lib/*.sh changes between revisions 117633687e9942ade647a8b7d3f80f01e3145193 and 30830388555e463402161a6e0d6993dd6fb0544e - - Signed-off-by: Ricardo Pardini - -lib/functions/cli/utils-cli.sh -lib/functions/general/host.sh - -commit 496713bb6f122440105626db767b39db7dd41e2f -Author: Ricardo Pardini -AuthorDate: Sat Jan 8 13:35:51 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: renaming function files a bit more consistently - - Signed-off-by: Ricardo Pardini - -lib/functions/cli/utils-cli.sh -lib/functions/compilation/utils-compilation.sh -lib/functions/rootfs/distro-agnostic.sh -lib/functions/rootfs/distro-specific.sh -lib/library-functions.sh - -commit 3c36aa6e495d06ab1fc599585e14c3a66ec14f03 -Author: Ricardo Pardini -AuthorDate: Sat Jan 8 01:46:22 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: removing leftover empty file after all the moving around - - Signed-off-by: Ricardo Pardini - -lib/functions/image.sh -lib/library-functions.sh - -commit 5d19b3686e732d07ac0d49abba76e03b42f4309e -Author: Ricardo Pardini -AuthorDate: Sat Jan 8 01:16:55 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: really insist on set -e during library loading - - Signed-off-by: Ricardo Pardini - -lib/library-functions.sh -lib/tools/gen-library.sh - -commit dc2dd8dd4ced5244a5c615fe815b08455b119bbb -Author: Ricardo Pardini -AuthorDate: Fri Jan 7 23:35:25 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: shellfmt again after rebasing master - - Signed-off-by: Ricardo Pardini - -config/boards/jetson-nano.conf -config/sources/families/jetson-nano.conf -extensions/flash-kernel.sh -lib/functions/configuration/menu.sh -lib/library-functions.sh - -commit ce5bebdb917d1e3c88e36899c268207779716965 -Author: Ricardo Pardini -AuthorDate: Fri Jan 7 23:28:12 2022 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: manual merge of all lib/*.sh changes between revisions f6143eff670d435cc8d15b52335b1b70ccb91e1c and f3388b9aee0d1564a28fbc661c6e7b0415a6dfd0 - - Signed-off-by: Ricardo Pardini - -lib/functions/bsp/bsp-cli.sh -lib/functions/compilation/extra-drivers.sh -lib/functions/extras/buildpkg.sh -lib/functions/general/git.sh -lib/functions/general/host.sh -lib/functions/main/default-build.sh -lib/functions/rootfs/distro_agnostic.sh - -commit 9486f6117f1011dbeefd44fdda9e1d9e7f3c7425 -Author: Ricardo Pardini -AuthorDate: Sun Dec 26 12:39:03 2021 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: generic do_capturing_defs wrapper; Python parser - - - enabled by passing CONFIG_DEFS_ONLY=yes; in this case does not build anything - - [WiP] Python3 info reader / matrix expander - - multithreaded version - - Signed-off-by: Ricardo Pardini - -compile.sh -config/boards/virtual-qemu.wip -lib/functions/cli/cli-entrypoint.sh -lib/functions/configuration/main-config.sh -lib/functions/logging/capture.sh -lib/functions/logging/traps.sh -lib/functions/main/config-prepare.sh -lib/functions/main/default-build.sh -lib/library-functions.sh -lib/tools/info.py - -commit 328c4f75664d68f01579467631672c5645466cdc -Author: Ricardo Pardini -AuthorDate: Sat Dec 25 17:12:19 2021 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: move some interactive parts of config into its own functions - - - mostly from config-prepare; - - there is still a lot of others in main-config - - Signed-off-by: Ricardo Pardini - -lib/functions/configuration/interactive.sh -lib/functions/configuration/main-config.sh -lib/functions/configuration/menu.sh -lib/functions/main/config-prepare.sh -lib/library-functions.sh - -commit 078ad44f58e718d842b6a14d3f441560ac685022 -Author: Ricardo Pardini -AuthorDate: Fri Dec 24 08:43:34 2021 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:31 2022 +0200 - - logging: use chroot_custom for grub and flash-kernel extension logging - - Signed-off-by: Ricardo Pardini - -extensions/flash-kernel.sh -extensions/grub.sh - -commit e4cc689b82986aa917ccf71cefcae121261559bd -Author: Ricardo Pardini -AuthorDate: Fri Dec 24 01:43:23 2021 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:30 2022 +0200 - - logging: use line buffering, fix runner output color for GHA - - Signed-off-by: Ricardo Pardini - -lib/functions/logging/logging.sh - -commit b1cfead3ac2957d5e19a3f10010a814ef0e70297 -Author: Ricardo Pardini -AuthorDate: Wed Dec 22 01:19:47 2021 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:30 2022 +0200 - - logging: wrap dpkg-deb; set TMPDIR (not in chroot); refactor kernel make - - - And a huge amount of @TODO's added - - Add "debug" and "deprecation" `display_alert()` levels - - insist that `install_common` is now `install_distribution_agnostic` - - unrelated: realtek 8822CS is EXTRAWIFI=yes only now, sorry. - - many debug statements for desktop - - Signed-off-by: Ricardo Pardini - -config/sources/amd64.conf -lib/functions/bsp/bsp-cli.sh -lib/functions/bsp/bsp-desktop.sh -lib/functions/compilation/compilation-utils.sh -lib/functions/compilation/debs.sh -lib/functions/compilation/extra-drivers.sh -lib/functions/compilation/kernel.sh -lib/functions/compilation/uboot.sh -lib/functions/configuration/main-config.sh -lib/functions/general/host.sh -lib/functions/image/loop.sh -lib/functions/logging/logging.sh -lib/functions/logging/runners.sh -lib/functions/main/config-prepare.sh -lib/functions/main/rootfs-image.sh -lib/functions/rootfs/apt.sh -lib/functions/rootfs/distro_agnostic.sh - -commit 9869508b622be33fe5114313c02d107b500f79aa -Author: Ricardo Pardini -AuthorDate: Wed Dec 22 19:39:26 2021 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:30 2022 +0200 - - logging: don't bail out on patching error - - Signed-off-by: Ricardo Pardini - -lib/functions/compilation/patching.sh - -commit 91806c9e0934a7d4a01425bf76c013dca110f5f0 -Author: Ricardo Pardini -AuthorDate: Wed Dec 22 01:18:23 2021 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:30 2022 +0200 - - logging: bunch of fixes; no-stdin; traps; better stacks - - - mostly no-stdin dialog handling (desktop et al) - - let ERR trap run together with unmount trap (EXIT etc) - - Signed-off-by: Ricardo Pardini - -compile.sh -lib/extensions.sh -lib/functions/configuration/main-config.sh -lib/functions/configuration/menu.sh -lib/functions/general/repo.sh -lib/functions/logging/traps.sh -lib/functions/main/config-prepare.sh -lib/functions/rootfs/create-cache.sh - -commit 70b9182fb02337c6c8d023469571acb2f1462317 -Author: Ricardo Pardini -AuthorDate: Mon Dec 20 23:29:18 2021 +0100 -Commit: Ricardo Pardini -CommitDate: Sat Oct 8 11:19:30 2022 +0200 - - logging: trap ERR very early, pass-in caller info - - Signed-off-by: Ricardo Pardini - -compile.sh -lib/extensions.sh -lib/functions/logging/runners.sh -lib/functions/logging/traps.sh -lib/functions/main/default-build.sh - -``` - - - -## Full mbox log - -- c9cf3fc241cfb4c872f4aef7bbc41d5854db7ea3 to 6809de3d6063cb041205a8318e19da6a4dee68c9 ref extensions_08_10_2022_pre_v30 - -``` -From 6809de3d6063cb041205a8318e19da6a4dee68c9 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 8 Oct 2022 11:30:37 +0200 -Subject: [PATCH] armbian-next: manual merge (30) of lib changes between - 882f995e21f4791d773bc59efdfdb676494ee6ba and - 31ac6383e1ac7ebddd0813abc0f1f9632a9c9c40 - ---- - lib/functions/configuration/main-config.sh | 12 +++++++++--- - lib/functions/general/downloads.sh | 1 + - 2 files changed, 10 insertions(+), 3 deletions(-) - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 91c3844ca..87f772113 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -318,18 +318,24 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - - DEBIAN_MIRROR='deb.debian.org/debian' - DEBIAN_SECURTY='security.debian.org/' -- UBUNTU_MIRROR='ports.ubuntu.com/' -+ [[ "${ARCH}" == "amd64" ]] && -+ UBUNTU_MIRROR='archive.ubuntu.com/ubuntu/' || -+ UBUNTU_MIRROR='ports.ubuntu.com/' - - if [[ $DOWNLOAD_MIRROR == "china" ]]; then - DEBIAN_MIRROR='mirrors.tuna.tsinghua.edu.cn/debian' - DEBIAN_SECURTY='mirrors.tuna.tsinghua.edu.cn/debian-security' -- UBUNTU_MIRROR='mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/' -+ [[ "${ARCH}" == "amd64" ]] && -+ UBUNTU_MIRROR='mirrors.tuna.tsinghua.edu.cn/ubuntu/' || -+ UBUNTU_MIRROR='mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/' - fi - - if [[ $DOWNLOAD_MIRROR == "bfsu" ]]; then - DEBIAN_MIRROR='mirrors.bfsu.edu.cn/debian' - DEBIAN_SECURTY='mirrors.bfsu.edu.cn/debian-security' -- UBUNTU_MIRROR='mirrors.bfsu.edu.cn/ubuntu-ports/' -+ [[ "${ARCH}" == "amd64" ]] && -+ UBUNTU_MIRROR='mirrors.bfsu.edu.cn/ubuntu/' || -+ UBUNTU_MIRROR='mirrors.bfsu.edu.cn/ubuntu-ports/' - fi - - if [[ "${ARCH}" == "amd64" ]]; then -diff --git a/lib/functions/general/downloads.sh b/lib/functions/general/downloads.sh -index e6cfc8beb..482ea0ccb 100644 ---- a/lib/functions/general/downloads.sh -+++ b/lib/functions/general/downloads.sh -@@ -55,6 +55,7 @@ function download_and_verify_internal() { - "9F0E78D5" # Igor Pecovnik - ) - -+ mkdir -p "${SRC}/cache/.aria2" - local aria2_options=( - # Display - --console-log-level=error - -From 404916b083a1f1a9735abe40452d460c65cd412f Mon Sep 17 00:00:00 2001 -From: Igor Pecovnik -Date: Sun, 16 Jan 2022 23:59:47 +0100 -Subject: [PATCH] armbian-next: manual merge (30) of family/board changes - between 882f995e21f4791d773bc59efdfdb676494ee6ba and - 31ac6383e1ac7ebddd0813abc0f1f9632a9c9c40 - ---- - config/sources/families/media.conf | 16 +++++++++++++++- - 1 file changed, 15 insertions(+), 1 deletion(-) - -diff --git a/config/sources/families/media.conf b/config/sources/families/media.conf -index eb2711377..b65b6b070 100644 ---- a/config/sources/families/media.conf -+++ b/config/sources/families/media.conf -@@ -8,11 +8,17 @@ elif [[ $BOARD == quartz64a ]]; then - BOOTSOURCE='https://github.com/150balbes/u-boot-rk' - BOOTBRANCH='branch:rk35xx' - BOOTPATCHDIR="u-boot-station-p2" -+elif [[ $BOARD == station-m3 ]]; then -+ BOOTSOURCE='https://github.com/150balbes/u-boot-rk' -+ BOOTBRANCH='branch:rk3588' -+ BOOTPATCHDIR="u-boot-station-p2" - else - BOOTBRANCH="tag:v2022.07" - BOOTPATCHDIR="u-boot-media" - fi - -+SKIP_BOOTSPLASH="yes" -+ - case $BRANCH in - - legacy) -@@ -27,6 +33,13 @@ case $BRANCH in - LINUXCONFIG='linux-station-p2-'$BRANCH - EXTRAWIFI="no" - WIREGUARD="no" -+ elif [[ $BOARD == station-m3 ]]; then -+ KERNELSOURCE='https://github.com/150balbes/rockchip-kernel' -+ KERNELBRANCH='branch:kernel-5.10' -+ LINUXFAMILY=station-m3 -+ LINUXCONFIG='linux-station-m3-'$BRANCH -+ KERNELPATCHDIR='station-m3-'$BRANCH -+ AUFS="no" - elif [[ $BOARD == jetson-nano ]]; then - KERNELDIR='linux-nano' - KERNELSOURCE='https://github.com/150balbes/Jetson-Nano' -@@ -70,6 +83,7 @@ case $BRANCH in - else - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media -+ - if [[ $BOARD == jetson-nano ]]; then - MODULES_INITRD="jetson-nano-current" - fi -@@ -83,7 +97,7 @@ case $BRANCH in - KERNELBRANCH="branch:linux-5.19.y" - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -- SKIP_BOOTSPLASH="yes" -+ - if [[ $BOARD == jetson-nano ]]; then - MODULES_INITRD="jetson-nano-edge" - fi - -From adc5e01444daf4548cba3ef99ea3430d8bbf8335 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 25 Sep 2022 01:49:11 +0200 -Subject: [PATCH] armbian-next: manual merge (29) of family/board changes - between 3435c4636723e9553be0a9ce3666bddb0887069e and - 882f995e21f4791d773bc59efdfdb676494ee6ba (A LOT!) - ---- - config/boards/uefi-arm64.conf | 2 ++ - config/boards/uefi-x86.conf | 2 ++ - config/sources/arm64.conf | 2 +- - config/sources/armhf.conf | 4 ++-- - config/sources/families/bcm2711.conf | 9 +-------- - config/sources/families/include/meson_common.inc | 4 +--- - config/sources/families/uefi-x86.conf | 3 ++- - 7 files changed, 11 insertions(+), 15 deletions(-) - -diff --git a/config/boards/uefi-arm64.conf b/config/boards/uefi-arm64.conf -index 3da87e459..5a705cdeb 100644 ---- a/config/boards/uefi-arm64.conf -+++ b/config/boards/uefi-arm64.conf -@@ -2,3 +2,5 @@ - export BOARD_NAME="UEFI arm64" - export BOARDFAMILY="uefi-arm64" - export KERNEL_TARGET="current,edge" -+ -+export BOOT_LOGO=desktop -diff --git a/config/boards/uefi-x86.conf b/config/boards/uefi-x86.conf -index 0188da545..d6153e717 100644 ---- a/config/boards/uefi-x86.conf -+++ b/config/boards/uefi-x86.conf -@@ -2,3 +2,5 @@ - export BOARD_NAME="UEFI x86" - export BOARDFAMILY="uefi-x86" - export KERNEL_TARGET="current,edge" -+ -+export BOOT_LOGO=desktop -diff --git a/config/sources/arm64.conf b/config/sources/arm64.conf -index 452f58f6a..6bcf3306b 100644 ---- a/config/sources/arm64.conf -+++ b/config/sources/arm64.conf -@@ -42,7 +42,7 @@ fi - [[ -z $UBOOT_USE_GCC ]] && UBOOT_USE_GCC='> 8.0' - [[ -z $BOOTSOURCE ]] && BOOTSOURCE=$MAINLINE_UBOOT_SOURCE - [[ -z $BOOTDIR ]] && BOOTDIR=$MAINLINE_UBOOT_DIR --[[ -z $BOOTBRANCH ]] && BOOTBRANCH='tag:v2021.10' -+[[ -z $BOOTBRANCH ]] && BOOTBRANCH='tag:v2022.07' - - [[ -z $KERNELDIR ]] && KERNELDIR=$MAINLINE_KERNEL_DIR - [[ -z $KERNELSOURCE ]] && KERNELSOURCE=$MAINLINE_KERNEL_SOURCE -diff --git a/config/sources/armhf.conf b/config/sources/armhf.conf -index 01a9eac47..e70e71edd 100644 ---- a/config/sources/armhf.conf -+++ b/config/sources/armhf.conf -@@ -16,7 +16,7 @@ INITRD_ARCH=arm - QEMU_BINARY="qemu-arm-static" - ARCHITECTURE=arm - ARCH=armhf --KERNEL_IMAGE_TYPE=zImage -+KERNEL_IMAGE_TYPE=Image - CAN_BUILD_STRETCH=yes - FAST_CREATE_IMAGE="yes" - -@@ -28,7 +28,7 @@ fi - [[ -z $UBOOT_USE_GCC ]] && UBOOT_USE_GCC='> 8.0' - [[ -z $BOOTSOURCE ]] && BOOTSOURCE=$MAINLINE_UBOOT_SOURCE - [[ -z $BOOTDIR ]] && BOOTDIR=$MAINLINE_UBOOT_DIR --[[ -z $BOOTBRANCH ]] && BOOTBRANCH='tag:v2021.10' -+[[ -z $BOOTBRANCH ]] && BOOTBRANCH='tag:v2022.07' - - if [ "$(uname -m)" = "aarch64" ]; then - [[ -z $KERNEL_COMPILER ]] && KERNEL_COMPILER="arm-linux-gnueabihf-" -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index d031d7e50..57fed76b2 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -5,7 +5,6 @@ export UEFI_FS_LABEL="RPICFG" # Windows/Mac users will see this if - export SKIP_BOOTSPLASH="yes" # video is init-ed before us - export FK__PUBLISHED_KERNEL_VERSION="raspi" # flash kernel (FK) configuration - export FK__KERNEL_PACKAGES="" --export RASPI_ROOT_FS_LABEL="armbian" - export CPUMIN=500000 - export CPUMAX=2000000 - export GOVERNOR=ondemand -@@ -35,15 +34,9 @@ case "${BRANCH}" in - ;; - esac - --# Add a label to the root partition - this is common, should refactor into a separate segment --prepare_partitions_custom__add_rootfs_raspi_label_to_mkfs() { -- display_alert "raspi rootfs label ${RASPI_ROOT_FS_LABEL}" "boot with root=LABEL=${RASPI_ROOT_FS_LABEL}" "info" -- mkopts[ext4]="-L ${RASPI_ROOT_FS_LABEL} ${mkopts[ext4]}" --} -- - pre_initramfs_flash_kernel__write_raspi_cmdline() { - cat <<- EOD > "${FIRMWARE_DIR}/cmdline.txt" -- root=LABEL=${RASPI_ROOT_FS_LABEL} rootfstype=ext4 elevator=deadline rootwait fixrtc cgroup_enable=memory cgroup_memory=1 console=tty1 logo.nologo loglevel=1 -+ root=LABEL=${ROOT_FS_LABEL} rootfstype=ext4 rootwait fixrtc cgroup_enable=memory cgroup_memory=1 console=tty1 logo.nologo loglevel=1 - EOD - } - -diff --git a/config/sources/families/include/meson_common.inc b/config/sources/families/include/meson_common.inc -index ee515aaaf..f0471ac6c 100644 ---- a/config/sources/families/include/meson_common.inc -+++ b/config/sources/families/include/meson_common.inc -@@ -47,10 +47,8 @@ case $BRANCH in - ;; - edge) - -- KERNELDIR='linux-meson' -- KERNELSOURCE='https://github.com/xdarklight/linux' - export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:meson-mx-integration-5.18-20220516" -+ KERNELBRANCH="branch:linux-5.18.y" - KERNELPATCHDIR='meson-'$BRANCH - - ;; -diff --git a/config/sources/families/uefi-x86.conf b/config/sources/families/uefi-x86.conf -index 55923fd7b..7a40a5b00 100644 ---- a/config/sources/families/uefi-x86.conf -+++ b/config/sources/families/uefi-x86.conf -@@ -1,5 +1,6 @@ - # Important: LINUXFAMILY and ARCH are defined _before_ including the common family include --[[ "$BUILD_DESKTOP" == yes ]] && enable_extension "nvidia" -+[[ "$BUILD_DESKTOP" == yes && "$RELEASE" == jammy ]] && enable_extension "nvidia" -+export UEFI_GRUB_TERMINAL="gfxterm" - export LINUXFAMILY="x86" - export ARCH="amd64" - source "${BASH_SOURCE%/*}/include/uefi_common.inc" - -From c1aef1c25eb29772a754bd3961b69f98c7afa48d Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 25 Sep 2022 01:36:43 +0200 -Subject: [PATCH] armbian-next: manual merge (29) of lib changes between - 3435c4636723e9553be0a9ce3666bddb0887069e and - 882f995e21f4791d773bc59efdfdb676494ee6ba (A LOT!) - ---- - extensions/grub.sh | 35 ++- - lib/functions/bsp/bsp-desktop.sh | 1 + - lib/functions/compilation/debs.sh | 62 ++++- - .../compilation/patch/kernel-bootsplash.sh | 25 +- - lib/functions/compilation/patch/kernel-drivers.sh | 32 ++- - lib/functions/configuration/interactive.sh | 3 +- - lib/functions/configuration/main-config.sh | 10 +- - lib/functions/general/chroot-helpers.sh | 4 +- - lib/functions/general/cleaning.sh | 1 + - lib/functions/general/downloads.sh | 278 ++++++++++----------- - lib/functions/host/external-toolchains.sh | 46 ++-- - lib/functions/image/initrd.sh | 2 +- - lib/functions/image/partitioning.sh | 149 +++++------ - lib/functions/image/rootfs-to-image.sh | 6 +- - lib/functions/main/default-build.sh | 7 + - lib/functions/rootfs/create-cache.sh | 121 ++++----- - lib/functions/rootfs/distro-agnostic.sh | 21 ++ - lib/functions/rootfs/distro-specific.sh | 48 ++-- - 18 files changed, 488 insertions(+), 363 deletions(-) - -diff --git a/extensions/grub.sh b/extensions/grub.sh -index e3eacb955..2f64fb172 100644 ---- a/extensions/grub.sh -+++ b/extensions/grub.sh -@@ -1,4 +1,4 @@ --# This runs *after* user_config. Don't change anything not coming from other variables or meant to be configured by the user. -+# This runs *after* user_config. Don't change anything not coming from other variables or meant to be configured by the u ser. - function extension_prepare_config__prepare_flash_kernel() { - # Extension configuration defaults. - export DISTRO_GENERIC_KERNEL=${DISTRO_GENERIC_KERNEL:-no} # if yes, does not build our own kernel, instead, uses generic one from distro -@@ -6,6 +6,7 @@ function extension_prepare_config__prepare_flash_kernel() { - export UEFI_GRUB_DISABLE_OS_PROBER="${UEFI_GRUB_DISABLE_OS_PROBER:-}" # 'true' will disable os-probing, useful for SD cards. - export UEFI_GRUB_DISTRO_NAME="${UEFI_GRUB_DISTRO_NAME:-Armbian}" # Will be used on grub menu display - export UEFI_GRUB_TIMEOUT=${UEFI_GRUB_TIMEOUT:-0} # Small timeout by default -+ export GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT:-}" # Cmdline by default - export UEFI_ENABLE_BIOS_AMD64="${UEFI_ENABLE_BIOS_AMD64:-yes}" # Enable BIOS too if target is amd64 - export UEFI_EXPORT_KERNEL_INITRD="${UEFI_EXPORT_KERNEL_INITRD:-no}" # Export kernel and initrd for direct kernel boot "kexec" - # User config overrides. -@@ -53,6 +54,7 @@ function extension_prepare_config__prepare_flash_kernel() { - unset KERNELSOURCE # This should make Armbian skip most stuff. At least, I hacked it to. - export INSTALL_ARMBIAN_FIRMWARE=no # Should skip build and install of Armbian-firmware. - else -+ export KERNELDIR="linux-uefi-${LINUXFAMILY}" # Avoid sharing a source tree with others, until we know it's safe. - # Don't install anything. Armbian handles everything. - DISTRO_KERNEL_PACKAGES="" - DISTRO_FIRMWARE_PACKAGES="" -@@ -91,6 +93,10 @@ pre_umount_final_image__install_grub() { - GRUB_DISABLE_OS_PROBER=true - grubCfgFragHostSide - -+ # copy Armbian GRUB wallpaper -+ mkdir -p "${MOUNT}"/usr/share/images/grub/ -+ cp "${SRC}"/packages/blobs/splash/grub.png "${MOUNT}"/usr/share/images/grub/wallpaper.png -+ - # Mount the chroot... - mount_chroot "$chroot_target/" # this already handles /boot/efi which is required for it to work. - -@@ -101,7 +107,7 @@ pre_umount_final_image__install_grub() { - } - fi - -- local install_grub_cmdline="update-initramfs -c -k all && update-grub && grub-install --target=${UEFI_GRUB_TARGET} --no-nvram --removable" # nvram is global to the host, even across chroot. take care. -+ local install_grub_cmdline="update-grub && grub-install --verbose --target=${UEFI_GRUB_TARGET} --no-nvram --removable" # nvram is global to the host, even across chroot. take care. - display_alert "Installing GRUB EFI..." "${UEFI_GRUB_TARGET}" "" - chroot_custom "$chroot_target" "$install_grub_cmdline" || { - exit_with_error "${install_grub_cmdline} failed!" -@@ -136,18 +142,31 @@ pre_umount_final_image__900_export_kernel_and_initramfs() { - } - - configure_grub() { -- display_alert "GRUB EFI kernel cmdline" "console=${SERIALCON} distro=${UEFI_GRUB_DISTRO_NAME} timeout=${UEFI_GRUB_TIMEOUT} grub terminal=${UEFI_GRUB_TERMINAL}" "" -- -- if [[ "_${SERIALCON}_" != "__" ]]; then -- cat <<- grubCfgFrag >> "${MOUNT}"/etc/default/grub.d/98-armbian.cfg -- GRUB_CMDLINE_LINUX_DEFAULT="console=${SERIALCON}" # extra Kernel cmdline is configured here -- grubCfgFrag -+ [[ -n "$SERIALCON" ]] && -+ GRUB_CMDLINE_LINUX_DEFAULT+=" console=${SERIALCON}" -+ -+ [[ "$BOOT_LOGO" == "yes" || "$BOOT_LOGO" == "desktop" && "$BUILD_DESKTOP" == "yes" ]] && -+ GRUB_CMDLINE_LINUX_DEFAULT+=" quiet splash plymouth.ignore-serial-consoles i915.force_probe=* loglevel=3" || -+ GRUB_CMDLINE_LINUX_DEFAULT+=" splash=verbose i915.force_probe=*" -+ -+ # Enable Armbian Wallpaper on GRUB -+ if [[ "${VENDOR}" == Armbian ]]; then -+ mkdir -p "${MOUNT}"/usr/share/desktop-base/ -+ cat <<- grubWallpaper >> "${MOUNT}"/usr/share/desktop-base/grub_background.sh -+ WALLPAPER=/usr/share/images/grub/wallpaper.png -+ COLOR_NORMAL=white/black -+ COLOR_HIGHLIGHT=black/white -+ grubWallpaper - fi - -+ display_alert "GRUB EFI kernel cmdline" "${GRUB_CMDLINE_LINUX_DEFAULT} distro=${UEFI_GRUB_DISTRO_NAME} timeout=${UEFI_GRUB_TIMEOUT}" "" - cat <<- grubCfgFrag >> "${MOUNT}"/etc/default/grub.d/98-armbian.cfg -+ GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT}" - GRUB_TIMEOUT_STYLE=menu # Show the menu with Kernel options (Armbian or -generic)... - GRUB_TIMEOUT=${UEFI_GRUB_TIMEOUT} # ... for ${UEFI_GRUB_TIMEOUT} seconds, then boot the Armbian default. - GRUB_DISTRIBUTOR="${UEFI_GRUB_DISTRO_NAME}" # On GRUB menu will show up as "Armbian GNU/Linux" (will show up in some UEFI BIOS boot menu (F8?) as "armbian", not on others) -+ GRUB_GFXMODE=1024x768 -+ GRUB_GFXPAYLOAD=keep - grubCfgFrag - - if [[ "a${UEFI_GRUB_DISABLE_OS_PROBER}" != "a" ]]; then -diff --git a/lib/functions/bsp/bsp-desktop.sh b/lib/functions/bsp/bsp-desktop.sh -index 8ebc53738..eca6670ed 100644 ---- a/lib/functions/bsp/bsp-desktop.sh -+++ b/lib/functions/bsp/bsp-desktop.sh -@@ -47,6 +47,7 @@ create_desktop_package() { - Priority: optional - Recommends: ${DEBIAN_RECOMMENDS//[:space:]+/,}, armbian-bsp-desktop - Provides: ${CHOSEN_DESKTOP}, armbian-${RELEASE}-desktop -+ Conflicts: gdm3 - Pre-Depends: ${PACKAGE_LIST_PREDEPENDS//[:space:]+/,} - Description: Armbian desktop for ${DISTRIBUTION} ${RELEASE} - EOF -diff --git a/lib/functions/compilation/debs.sh b/lib/functions/compilation/debs.sh -index 3db0c44d4..10eca1f03 100644 ---- a/lib/functions/compilation/debs.sh -+++ b/lib/functions/compilation/debs.sh -@@ -14,7 +14,9 @@ compile_firmware() { - if [[ -n $FULL ]]; then - fetch_from_repo "$MAINLINE_FIRMWARE_SOURCE" "linux-firmware-git" "branch:main" - # cp : create hardlinks -- cp -af --reflink=auto "${SRC}"/cache/sources/linux-firmware-git/* "${firmwaretempdir}/${plugin_dir}/lib/firmware/" -+ run_host_command_logged cp -af --reflink=auto "${SRC}"/cache/sources/linux-firmware-git/* "${firmwaretempdir}/${plugin_dir}/lib/firmware/" -+ # cp : create hardlinks for ath11k WCN685x hw2.1 firmware since they are using the same firmware with hw2.0 -+ run_host_command_logged cp -af --reflink=auto "${firmwaretempdir}/${plugin_dir}/lib/firmware/ath11k/WCN6855/hw2.0/" "${firmwaretempdir}/${plugin_dir}/lib/firmware/ath11k/WCN6855/hw2.1/" - fi - # overlay our firmware - # cp : create hardlinks -@@ -129,7 +131,9 @@ compile_armbian-config() { - - fetch_from_repo "https://github.com/armbian/config" "armbian-config" "branch:master" - fetch_from_repo "https://github.com/dylanaraps/neofetch" "neofetch" "tag:7.1.0" -- fetch_from_repo "https://github.com/complexorganizations/wireguard-manager" "wireguard-manager" "tag:v1.0.0.10-26-2021" -+ -+ # @TODO: move this to where it is actually used; not everyone needs to pull this in -+ fetch_from_repo "$GITHUB_SOURCE/complexorganizations/wireguard-manager" "wireguard-manager" "branch:main" - - mkdir -p "${tmp_dir}/${armbian_config_dir}"/{DEBIAN,usr/bin/,usr/sbin/,usr/lib/armbian-config/} - -@@ -188,3 +192,57 @@ compile_xilinx_bootgen() { - - popd - } -+ -+# @TODO: code from master via Igor; not yet armbian-next'fied! warning!! -+compile_plymouth-theme-armbian() { -+ -+ local tmp_dir work_dir -+ tmp_dir=$(mktemp -d) -+ chmod 700 ${tmp_dir} -+ trap "ret=\$?; rm -rf \"${tmp_dir}\" ; exit \$ret" 0 1 2 3 15 -+ plymouth_theme_armbian_dir=armbian-plymouth-theme_${REVISION}_all -+ display_alert "Building deb" "armbian-plymouth-theme" "info" -+ -+ mkdir -p "${tmp_dir}/${plymouth_theme_armbian_dir}"/{DEBIAN,usr/share/plymouth/themes/armbian} -+ -+ # set up control file -+ cat <<- END > "${tmp_dir}/${plymouth_theme_armbian_dir}"/DEBIAN/control -+ Package: armbian-plymouth-theme -+ Version: $REVISION -+ Architecture: all -+ Maintainer: $MAINTAINER <$MAINTAINERMAIL> -+ Depends: plymouth, plymouth-themes -+ Section: universe/x11 -+ Priority: optional -+ Description: boot animation, logger and I/O multiplexer - armbian theme -+ END -+ -+ cp "${SRC}"/packages/plymouth-theme-armbian/debian/{postinst,prerm,postrm} \ -+ "${tmp_dir}/${plymouth_theme_armbian_dir}"/DEBIAN/ -+ chmod 755 "${tmp_dir}/${plymouth_theme_armbian_dir}"/DEBIAN/{postinst,prerm,postrm} -+ -+ convert -resize 256x256 \ -+ "${SRC}"/packages/plymouth-theme-armbian/armbian-logo.png \ -+ "${tmp_dir}/${plymouth_theme_armbian_dir}"/usr/share/plymouth/themes/armbian/bgrt-fallback.png -+ -+ # convert -resize 52x52 \ -+ # "${SRC}"/packages/plymouth-theme-armbian/spinner.gif \ -+ # "${tmp_dir}/${plymouth_theme_armbian_dir}"/usr/share/plymouth/themes/armbian/animation-%04d.png -+ -+ convert -resize 52x52 \ -+ "${SRC}"/packages/plymouth-theme-armbian/spinner.gif \ -+ "${tmp_dir}/${plymouth_theme_armbian_dir}"/usr/share/plymouth/themes/armbian/throbber-%04d.png -+ -+ cp "${SRC}"/packages/plymouth-theme-armbian/watermark.png \ -+ "${tmp_dir}/${plymouth_theme_armbian_dir}"/usr/share/plymouth/themes/armbian/ -+ -+ cp "${SRC}"/packages/plymouth-theme-armbian/{bullet,capslock,entry,keyboard,keymap-render,lock}.png \ -+ "${tmp_dir}/${plymouth_theme_armbian_dir}"/usr/share/plymouth/themes/armbian/ -+ -+ cp "${SRC}"/packages/plymouth-theme-armbian/armbian.plymouth \ -+ "${tmp_dir}/${plymouth_theme_armbian_dir}"/usr/share/plymouth/themes/armbian/ -+ -+ fakeroot dpkg-deb -b -Z${DEB_COMPRESS} "${tmp_dir}/${plymouth_theme_armbian_dir}" > /dev/null -+ rsync --remove-source-files -rq "${tmp_dir}/${plymouth_theme_armbian_dir}.deb" "${DEB_STORAGE}/" -+ rm -rf "${tmp_dir}" -+} -diff --git a/lib/functions/compilation/patch/kernel-bootsplash.sh b/lib/functions/compilation/patch/kernel-bootsplash.sh -index 3a366234c..9939de493 100644 ---- a/lib/functions/compilation/patch/kernel-bootsplash.sh -+++ b/lib/functions/compilation/patch/kernel-bootsplash.sh -@@ -7,28 +7,19 @@ function apply_kernel_patches_for_bootsplash() { - # @TODO: rpardini: so, can we completely remove this? - SKIP_BOOTSPLASH=yes - -- # previously: if linux-version compare "${version}" ge 5.10 && [ $SKIP_BOOTSPLASH != yes ]; then - [[ "${SKIP_BOOTSPLASH}" == "yes" ]] && return 0 -- linux-version compare "${version}" le 5.10 && return 0 -- linux-version compare "${version}" lt 5.19 && return 0 -+ linux-version compare "${version}" le 5.14 && return 0 -+ display_alert "Adding" "Kernel splash file" "info" - -- display_alert "Adding" "Kernel bootsplash patch" "info" -- -- if linux-version compare "${version}" ge 5.11; then -- process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0000-Revert-fbcon-Avoid-cap-set-but-not-used-warning.patch" "applying" -- fi -- -- if (linux-version compare "${version}" ge 5.18.18 && linux-version compare "${version}" lt 5.19) || -- (linux-version compare "${version}" ge 5.15.61 && linux-version compare "${version}" lt 5.16); then -- process_patch_file "${SRC}/patch/misc/0001-Revert-fbcon-Fix-accelerated-fbdev-scrolling-while-logo-is-still-shown.patch" "applying" -+ if linux-version compare "${version}" ge 5.19.6 || -+ (linux-version compare "${version}" ge 5.15.64 && linux-version compare "${version}" lt 5.16); then -+ process_patch_file "${SRC}/patch/misc/0001-Revert-fbdev-fbcon-Properly-revert-changes-when-vc_r.patch" "applying" - fi - -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0000-Revert-fbcon-Avoid-cap-set-but-not-used-warning.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/0001-Revert-fbcon-Fix-accelerated-fbdev-scrolling-while-logo-is-still-shown.patch" "applying" - process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0001-Revert-fbcon-Add-option-to-enable-legacy-hardware-ac.patch" "applying" -- -- if linux-version compare "${version}" ge 5.15; then -- process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0002-Revert-vgacon-drop-unused-vga_init_done.patch" "applying" -- fi -- -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0002-Revert-vgacon-drop-unused-vga_init_done.patch" "applying" - process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0003-Revert-vgacon-remove-software-scrollback-support.patch" "applying" - process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0004-Revert-drivers-video-fbcon-fix-NULL-dereference-in-f.patch" "applying" - process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0005-Revert-fbcon-remove-no-op-fbcon_set_origin.patch" "applying" -diff --git a/lib/functions/compilation/patch/kernel-drivers.sh b/lib/functions/compilation/patch/kernel-drivers.sh -index 505a3a89e..46ca22109 100644 ---- a/lib/functions/compilation/patch/kernel-drivers.sh -+++ b/lib/functions/compilation/patch/kernel-drivers.sh -@@ -10,6 +10,15 @@ - # https://github.com/armbian/build/ - - function prepare_extra_kernel_drivers() { -+ # -+ # Returning headers needed for some wireless drivers -+ # -+ -+ if linux-version compare "${version}" ge 5.4 && [ $EXTRAWIFI == yes ]; then -+ display_alert "Adding" "Missing headers" "info" # @TODO: which headers? -+ process_patch_file "${SRC}/patch/misc/wireless-bring-back-headers.patch" "applying" -+ fi -+ - # - # mac80211 wireless driver injection features from Kali Linux - # -@@ -254,20 +263,20 @@ function prepare_extra_kernel_drivers() { - - display_alert "Adding" "Wireless drivers for Xradio XR819 chipsets" "info" - -- fetch_from_repo "https://github.com/karabek/xradio" "xradio" "branch:master" "yes" -+ fetch_from_repo "$GITHUB_SOURCE/dbeinder/xradio" "xradio" "branch:karabek_rebase" "yes" - cd "$kerneldir" || exit - rm -rf "$kerneldir/drivers/net/wireless/xradio" - mkdir -p "$kerneldir/drivers/net/wireless/xradio/" -- cp "${SRC}"/cache/sources/xradio/master/*.{h,c} \ -+ cp "${SRC}"/cache/sources/xradio/karabek_rebase/*.{h,c} \ - "$kerneldir/drivers/net/wireless/xradio/" - - # Makefile -- cp "${SRC}/cache/sources/xradio/master/Makefile" \ -+ cp "${SRC}/cache/sources/xradio/karabek_rebase/Makefile" \ - "$kerneldir/drivers/net/wireless/xradio/Makefile" - - # Kconfig -- sed -i 's/---help---/help/g' "${SRC}/cache/sources/xradio/master/Kconfig" -- cp "${SRC}/cache/sources/xradio/master/Kconfig" \ -+ sed -i 's/---help---/help/g' "${SRC}/cache/sources/xradio/karabek_rebase/Kconfig" -+ cp "${SRC}/cache/sources/xradio/karabek_rebase/Kconfig" \ - "$kerneldir/drivers/net/wireless/xradio/Kconfig" - - # Add to section Makefile -@@ -279,6 +288,10 @@ function prepare_extra_kernel_drivers() { - # add support for K5.13+ - process_patch_file "${SRC}/patch/misc/wireless-xradio-5.13.patch" "applying" - -+ # add support for aarch64 -+ if [[ $ARCH == arm64 ]]; then -+ process_patch_file "${SRC}/patch/misc/wireless-xradio-aarch64.patch" "applying" -+ fi - fi - - # Wireless drivers for Realtek RTL8811CU and RTL8821C chipsets -@@ -377,7 +390,7 @@ function prepare_extra_kernel_drivers() { - # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch -- local rtl88x2buver="branch:fix-6.0" -+ local rtl88x2buver="commit:00f51d93fe8309b0e23782ad621a038c98c7f031" - - display_alert "Adding" "Wireless drivers for Realtek 88x2bu chipsets ${rtl88x2buver}" "info" - -@@ -499,7 +512,12 @@ function prepare_extra_kernel_drivers() { - if linux-version compare $version ge 5.0 && [ "$EXTRAWIFI" == yes ]; then - # @TODO: fasthash for this is... ? remote git hash? - -- local rtl8723duver="branch:master" -+ # attach to specifics tag or branch -+ if linux-version compare $version ge 5.12; then -+ local rtl8723duver="branch:v5.13.4" -+ else -+ local rtl8723duver="branch:master" -+ fi - - display_alert "Adding" "Wireless drivers for Realtek 8723DU chipsets ${rtl8723duver}" "info" - -diff --git a/lib/functions/configuration/interactive.sh b/lib/functions/configuration/interactive.sh -index 743d8a22b..2cee5395d 100644 ---- a/lib/functions/configuration/interactive.sh -+++ b/lib/functions/configuration/interactive.sh -@@ -170,10 +170,11 @@ function interactive_config_ask_release() { - - function interactive_config_ask_desktop_build() { - # don't show desktop option if we choose minimal build -- [[ $BUILD_MINIMAL == yes ]] && BUILD_DESKTOP=no -+ [[ $HAS_VIDEO_OUTPUT == no || $BUILD_MINIMAL == yes ]] && BUILD_DESKTOP=no - - [[ $KERNEL_ONLY == yes ]] && return 0 - [[ -n ${BUILD_DESKTOP} ]] && return 0 -+ - # read distribution support status which is written to the armbian-release file - set_distribution_status - options=() -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index cdae96d38..91c3844ca 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -82,7 +82,7 @@ function do_main_configuration() { - fi - - # small SD card with kernel, boot script and .dtb/.bin files -- [[ $ROOTFS_TYPE == nfs ]] && FIXED_IMAGE_SIZE=64 -+ [[ $ROOTFS_TYPE == nfs ]] && FIXED_IMAGE_SIZE=256 - - # Since we are having too many options for mirror management, - # then here is yet another mirror related option. -@@ -171,6 +171,7 @@ function do_main_configuration() { - [[ -z $WIREGUARD ]] && WIREGUARD="yes" - [[ -z $EXTRAWIFI ]] && EXTRAWIFI="yes" - [[ -z $SKIP_BOOTSPLASH ]] && SKIP_BOOTSPLASH="no" -+ [[ -z $PLYMOUTH ]] && PLYMOUTH="yes" - [[ -z $AUFS ]] && AUFS="yes" - [[ -z $IMAGE_PARTITION_TABLE ]] && IMAGE_PARTITION_TABLE="msdos" - [[ -z $EXTRA_BSP_NAME ]] && EXTRA_BSP_NAME="" -@@ -210,6 +211,13 @@ function do_main_configuration() { - # shellcheck source=/dev/null - source "${SRC}/config/sources/${ARCH}.conf" - -+ if [[ "$HAS_VIDEO_OUTPUT" == "no" ]]; then -+ SKIP_BOOTSPLASH="yes" -+ PLYMOUTH="no" -+ [[ $BUILD_DESKTOP != "no" ]] && exit_with_error "HAS_VIDEO_OUTPUT is set to no. So we shouldn't build desktop environment" -+ fi -+ -+ - ## Extensions: at this point we've sourced all the config files that will be used, - ## and (hopefully) not yet invoked any extension methods. So this is the perfect - ## place to initialize the extension manager. It will create functions -diff --git a/lib/functions/general/chroot-helpers.sh b/lib/functions/general/chroot-helpers.sh -index 8c90cc578..a8425ae99 100644 ---- a/lib/functions/general/chroot-helpers.sh -+++ b/lib/functions/general/chroot-helpers.sh -@@ -5,6 +5,7 @@ - mount_chroot() { - - local target=$1 -+ mount -t tmpfs tmpfs "${target}/tmp" - mount -t proc chproc "${target}"/proc - mount -t sysfs chsys "${target}"/sys - mount -t devtmpfs chdev "${target}"/dev || mount --bind /dev "${target}"/dev -@@ -19,10 +20,11 @@ mount_chroot() { - umount_chroot() { - local target=$1 - display_alert "Unmounting" "$target" "info" -- while grep -Eq "${target}.*(dev|proc|sys)" /proc/mounts; do -+ while grep -Eq "${target}.*(dev|proc|sys|tmp)" /proc/mounts; do - umount --recursive "${target}"/dev > /dev/null 2>&1 || true - umount "${target}"/proc > /dev/null 2>&1 || true - umount "${target}"/sys > /dev/null 2>&1 || true -+ umount "${target}"/tmp > /dev/null 2>&1 || true - sync - done - } -diff --git a/lib/functions/general/cleaning.sh b/lib/functions/general/cleaning.sh -index 833ac4ce7..5d4b51976 100644 ---- a/lib/functions/general/cleaning.sh -+++ b/lib/functions/general/cleaning.sh -@@ -24,6 +24,7 @@ general_cleaning() { - find "${DEB_STORAGE}" -name "${CHOSEN_UBOOT}_*.deb" -delete - find "${DEB_STORAGE}" \( -name "${CHOSEN_KERNEL}_*.deb" -o \ - -name "armbian-*.deb" -o \ -+ -name "plymouth-theme-armbian_*.deb" -o \ - -name "${CHOSEN_KERNEL/image/dtb}_*.deb" -o \ - -name "${CHOSEN_KERNEL/image/headers}_*.deb" -o \ - -name "${CHOSEN_KERNEL/image/source}_*.deb" -o \ -diff --git a/lib/functions/general/downloads.sh b/lib/functions/general/downloads.sh -index 5bbd161fe..e6cfc8beb 100644 ---- a/lib/functions/general/downloads.sh -+++ b/lib/functions/general/downloads.sh -@@ -1,42 +1,42 @@ --function webseed() { -- -- # list of mirrors that host our files -- unset text -- local CCODE=$(curl -s redirect.armbian.com/geoip | jq '.continent.code' -r) -- -- if [[ "$2" == rootfs* ]]; then -- WEBSEED=($(curl -s ${1}mirrors | jq -r '.'${CCODE}' | .[] | values')) -- else -- WEBSEED=($(curl -s https://redirect.armbian.com/mirrors | jq -r '.'${CCODE}' | .[] | values')) -- fi -- -- # remove dead mirrors to suppress download errors -- while read -r line; do -- REMOVE=$(echo $line | egrep -o 'https?://[^ ]+/') -- WEBSEED=("${WEBSEED[@]/$REMOVE/}") -- done < <( -- for k in ${WEBSEED[@]}; do -- echo "$k$2/$3" -- done | parallel --halt soon,fail=10 --jobs 32 wget -q --spider --timeout=15 --tries=4 --retry-connrefused {} 2>&1 > /dev/null -- ) -- -- # aria2 simply split chunks based on sources count not depending on download speed -- # when selecting china mirrors, use only China mirror, others are very slow there -- if [[ $DOWNLOAD_MIRROR == china ]]; then -- WEBSEED=( -- https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/ -- ) -- elif [[ $DOWNLOAD_MIRROR == bfsu ]]; then -- WEBSEED=( -- https://mirrors.bfsu.edu.cn/armbian-releases/ -- ) -- fi -+function get_urls() { -+ local catalog=$1 -+ local filename=$2 - -- for toolchain in ${WEBSEED[@]}; do -- text="${text} ${toolchain}"$2/"${3}" -- done -- text="${text:1}" -- echo "${text}" -+ case $catalog in -+ toolchain) -+ local CCODE=$(curl --silent --fail https://dl.armbian.com/geoip | jq '.continent.code' -r) -+ local urls=( -+ # "https://dl.armbian.com/_toolchain/${filename}" -+ -+ $( -+ curl --silent --fail "https://dl.armbian.com/mirrors" | -+ jq -r "(${CCODE:+.${CCODE} // } .default) | .[]" | -+ sed "s#\$#/_toolchain/${filename}#" -+ ) -+ ) -+ ;; -+ -+ rootfs) -+ local CCODE=$(curl --silent --fail https://cache.armbian.com/geoip | jq '.continent.code' -r) -+ local urls=( -+ # "https://cache.armbian.com/rootfs/${ROOTFSCACHE_VERSION}/${filename}" -+ "https://github.com/armbian/cache/releases/download/${ROOTFSCACHE_VERSION}/${filename}" -+ -+ $( -+ curl --silent --fail "https://cache.armbian.com/mirrors" | -+ jq -r "(${CCODE:+.${CCODE} // } .default) | .[]" | -+ sed "s#\$#/rootfs/${ROOTFSCACHE_VERSION}/${filename}#" -+ ) -+ ) -+ ;; -+ -+ *) -+ exit_with_error "Unknown catalog" "$catalog" >&2 -+ return -+ ;; -+ esac -+ -+ echo "${urls[@]}" - } - - # Terrible idea, this runs download_and_verify_internal() with error handling disabled. -@@ -45,99 +45,100 @@ function download_and_verify() { - } - - function download_and_verify_internal() { -- local remotedir=$1 -- local filename=$2 -- local localdir=$SRC/cache/${remotedir//_/} -- local dirname=${filename//.tar.xz/} -- [[ -z $DISABLE_IPV6 ]] && DISABLE_IPV6="true" -- -- local server=${ARMBIAN_MIRROR} -- if [[ $DOWNLOAD_MIRROR == china ]]; then -- server="https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/" -- elif [[ $DOWNLOAD_MIRROR == bfsu ]]; then -- server="https://mirrors.bfsu.edu.cn/armbian-releases/" -- fi -- -- if [[ "x${server}x" == "xx" ]]; then -- display_alert "ARMBIAN_MIRROR is not set, nor valid DOWNLOAD_MIRROR" "not downloading '${filename}'" "debug" -- return 0 -- fi -- -- if [[ -f ${localdir}/${dirname}/.download-complete ]]; then -- return 0 -- fi - -- # rootfs has its own infra -- if [[ "${remotedir}" == "_rootfs" ]]; then -- local server="https://cache.armbian.com/" -- remotedir="rootfs/$ROOTFSCACHE_VERSION" -- fi -- -- # switch to china mirror if US timeouts -- timeout 10 curl --head --fail --silent "${server}${remotedir}/${filename}" -- if [[ $? -ne 7 && $? -ne 22 && $? -ne 0 ]]; then -- display_alert "Timeout from $server" "retrying" "info" -- server="https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/" -- -- # switch to another china mirror if tuna timeouts -- timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename} -- if [[ $? -ne 7 && $? -ne 22 && $? -ne 0 ]]; then -- display_alert "Timeout from $server" "retrying" "info" -- server="https://mirrors.bfsu.edu.cn/armbian-releases/" -- fi -- fi -+ local catalog=$1 -+ local filename=$2 -+ local localdir=$SRC/cache/$catalog - -- # check if file exists on remote server before running aria2 downloader -- [[ ! $(timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename}) ]] && return -+ local keys=( -+ "8F427EAF" # Linaro Toolchain Builder -+ "9F0E78D5" # Igor Pecovnik -+ ) - -- cd "${localdir}" || exit -+ local aria2_options=( -+ # Display -+ --console-log-level=error -+ --summary-interval=0 -+ --download-result=hide -+ -+ # Meta -+ --server-stat-if="${SRC}/cache/.aria2/server_stats" -+ --server-stat-of="${SRC}/cache/.aria2/server_stats" -+ --dht-file-path="${SRC}/cache/.aria2/dht.dat" -+ --rpc-save-upload-metadata=false -+ --auto-save-interval=0 -+ -+ # File -+ --auto-file-renaming=false -+ --allow-overwrite=true -+ --file-allocation=trunc -+ -+ # Connection -+ --disable-ipv6=$DISABLE_IPV6 -+ --connect-timeout=10 -+ --timeout=10 -+ --allow-piece-length-change=true -+ --max-connection-per-server=2 -+ --lowest-speed-limit=500K -+ -+ # BT -+ --seed-time=0 -+ --bt-stop-timeout=30 -+ ) - -- # use local control file -- if [[ -f "${SRC}"/config/torrents/${filename}.asc ]]; then -- local torrent="${SRC}"/config/torrents/${filename}.torrent -+ # use local signature file -+ if [[ -f "${SRC}/config/torrents/${filename}.asc" ]]; then -+ local torrent="${SRC}/config/torrents/${filename}.torrent" - ln -sf "${SRC}/config/torrents/${filename}.asc" "${localdir}/${filename}.asc" -- elif [[ ! $(timeout 10 curl --head --fail --silent "${server}${remotedir}/${filename}.asc") ]]; then -- return - else -- # download control file -- local torrent=${server}$remotedir/${filename}.torrent -- run_host_command_logged aria2c --download-result=hide --disable-ipv6=${DISABLE_IPV6} --summary-interval=0 --console-log-level=error --auto-file-renaming=false \ -- --continue=false --allow-overwrite=true --dir="${localdir}" ${server}${remotedir}/${filename}.asc $(webseed "$remotedir/${filename}.asc") -o "${filename}.asc" -- [[ $? -ne 0 ]] && display_alert "Failed to download control file" "" "wrn" -+ # download signature file -+ aria2c "${aria2_options[@]}" \ -+ --continue=false \ -+ --dir="${localdir}" --out="${filename}.asc" \ -+ $(get_urls "${catalog}" "${filename}.asc") -+ -+ local rc=$? -+ if [[ $rc -ne 0 ]]; then -+ # Except `not found` -+ [[ $rc -ne 3 ]] && display_alert "Failed to download signature file. aria2 exit code:" "$rc" "wrn" -+ return $rc -+ fi -+ -+ [[ ${USE_TORRENT} == "yes" ]] && -+ local torrent="$(get_urls "${catalog}" "${filename}.torrent")" - fi - - # download torrent first -+ local direct=yes - if [[ ${USE_TORRENT} == "yes" ]]; then -+ - display_alert "downloading using torrent network" "$filename" -- local ariatorrent="--summary-interval=0 --auto-save-interval=0 --seed-time=0 --bt-stop-timeout=120 --console-log-level=error \ -- --allow-overwrite=true --download-result=hide --rpc-save-upload-metadata=false --auto-file-renaming=false \ -- --file-allocation=trunc --continue=true ${torrent} \ -- --dht-file-path=${SRC}/cache/.aria2/dht.dat --disable-ipv6=${DISABLE_IPV6} --stderr --follow-torrent=mem --dir=$localdir" -- -- # exception. It throws error if dht.dat file does not exists. Error suppress needed only at first download. -- if [[ -f "${SRC}"/cache/.aria2/dht.dat ]]; then -- # shellcheck disable=SC2086 -- run_host_command_logged aria2c ${ariatorrent} -- else -- # shellcheck disable=SC2035 -- run_host_command_logged aria2c ${ariatorrent} -- fi -- # mark complete -- touch "${localdir}/${filename}.complete" -+ aria2c "${aria2_options[@]}" \ -+ --follow-torrent=mem \ -+ --dir="${localdir}" \ -+ ${torrent} -+ -+ [[ $? -eq 0 ]] && direct=no -+ - fi - - # direct download if torrent fails -- if [[ ! -f "${localdir}/${filename}.complete" ]]; then -- if [[ ! $(timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename} 2>&1 > /dev/null) ]]; then -- display_alert "downloading from $(echo $server | cut -d'/' -f3 | cut -d':' -f1) using http(s) network" "$filename" -- run_host_command_logged aria2c --allow-overwrite=true --download-result=hide --rpc-save-upload-metadata=false --console-log-level=error \ -- --dht-file-path="${SRC}"/cache/.aria2/dht.dat --disable-ipv6=${DISABLE_IPV6} --summary-interval=0 --auto-file-renaming=false --dir="${localdir}" ${server}${remotedir}/${filename} $(webseed "${remotedir}/${filename}") -o "${filename}" -- # mark complete -- [[ $? -eq 0 ]] && touch "${localdir}/${filename}.complete" && echo "" -- -+ if [[ $direct != "no" ]]; then -+ display_alert "downloading using http(s) network" "$filename" -+ aria2c "${aria2_options[@]}" \ -+ --dir="${localdir}" --out="${filename}" \ -+ $(get_urls "${catalog}" "${filename}") -+ -+ local rc=$? -+ if [[ $rc -ne 0 ]]; then -+ display_alert "Failed to download. aria2 exit code:" "$rc" "wrn" -+ return $rc - fi -+ -+ echo "" - fi - -+ local verified=false - if [[ -f ${localdir}/${filename}.asc ]]; then - - if grep -q 'BEGIN PGP SIGNATURE' "${localdir}/${filename}.asc"; then -@@ -149,42 +150,31 @@ function download_and_verify_internal() { - chmod 600 "${SRC}"/cache/.gpg/gpg.conf - fi - -- # Verify archives with Linaro and Armbian GPG keys -- -- if [ x"" != x"${http_proxy}" ]; then -- (gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --list-keys 8F427EAF || gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning \ -- --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-options http-proxy="${http_proxy}" \ -- --recv-keys 8F427EAF) -+ for key in "${keys[@]}"; do -+ gpg --homedir "${SRC}/cache/.gpg" --no-permission-warning \ -+ --list-keys "${key}" >> "${DEST}/${LOG_SUBPATH}/output.log" 2>&1 || -+ gpg --homedir "${SRC}/cache/.gpg" --no-permission-warning \ -+ ${http_proxy:+--keyserver-options http-proxy="${http_proxy}"} \ -+ --keyserver "hkp://keyserver.ubuntu.com:80" \ -+ --recv-keys "${key}" >> "${DEST}/${LOG_SUBPATH}/output.log" 2>&1 || -+ exit_with_error "Failed to recieve key" "${key}" -+ done -+ -+ gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --trust-model always \ -+ -q --verify "${localdir}/${filename}.asc" >> "${DEST}/${LOG_SUBPATH}/output.log" 2>&1 -+ [[ ${PIPESTATUS[0]} -eq 0 ]] && verified=true && display_alert "Verified" "PGP" "info" - -- (gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --list-keys 9F0E78D5 || gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning \ -- --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-options http-proxy="${http_proxy}" \ -- --recv-keys 9F0E78D5) -- else -- (gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --list-keys 8F427EAF || gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning \ -- --keyserver hkp://keyserver.ubuntu.com:80 \ -- --recv-keys 8F427EAF) -+ else - -- (gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --list-keys 9F0E78D5 || gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning \ -- --keyserver hkp://keyserver.ubuntu.com:80 \ -- --recv-keys 9F0E78D5) -- fi -+ [[ "$(md5sum "${localdir}/${filename}" | awk '{printf $1}')" == "$(awk '{printf $1}' ${localdir}/${filename}.asc)" ]] && -+ verified=true && display_alert "Verified" "MD5" "info" - -- gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --verify --trust-model always -q "${localdir}/${filename}.asc" -- [[ ${PIPESTATUS[0]} -eq 0 ]] && verified=true && display_alert "Verified" "PGP" "info" -- else -- md5sum -c --status "${localdir}/${filename}.asc" && verified=true && display_alert "Verified" "MD5" "info" - fi - -- if [[ $verified == true ]]; then -- if [[ "${filename:(-6)}" == "tar.xz" ]]; then -- display_alert "decompressing" -- pv -p -b -r -c -N "$(logging_echo_prefix_for_pv "decompress") ${filename}" "${filename}" | -- xz -dc | -- tar xp --xattrs --no-same-owner --overwrite && -- touch "${localdir}/${dirname}/.download-complete" -- fi -- else -+ if [[ $verified != true ]]; then -+ rm -rf "${localdir}/${filename}"* # We also delete asc file - exit_with_error "verification failed" - fi -+ - fi - } -diff --git a/lib/functions/host/external-toolchains.sh b/lib/functions/host/external-toolchains.sh -index f8733d294..6e5fd80cb 100644 ---- a/lib/functions/host/external-toolchains.sh -+++ b/lib/functions/host/external-toolchains.sh -@@ -15,34 +15,48 @@ function download_external_toolchains() { - # download external Linaro compiler and missing special dependencies since they are needed for certain sources - - local toolchains=( -- "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-arm-none-eabi-4.8-2014.04_linux.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz" -+ "gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz" -+ "gcc-linaro-arm-none-eabi-4.8-2014.04_linux.tar.xz" -+ "gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.xz" -+ "gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi.tar.xz" -+ "gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz" -+ "gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz" -+ "gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz" -+ "gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz" -+ "gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz" -+ "gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz" -+ "gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz" - ) - - USE_TORRENT_STATUS=${USE_TORRENT} - USE_TORRENT="no" - for toolchain in ${toolchains[@]}; do -- download_and_verify "_toolchain" "${toolchain##*/}" -+ local toolchain_zip="${SRC}/cache/toolchain/${toolchain}" -+ local toolchain_dir="${toolchain_zip%.tar.*}" -+ if [[ ! -f "${toolchain_dir}/.download-complete" ]]; then -+ download_and_verify "toolchain" "${toolchain}" || -+ exit_with_error "Failed to download toolchain" "${toolchain}" -+ -+ display_alert "decompressing" -+ pv -p -b -r -c -N "[ .... ] ${toolchain}" "${toolchain_zip}" | -+ xz -dc | -+ tar xp --xattrs --no-same-owner --overwrite -C "${SRC}/cache/toolchain/" -+ if [[ $? -ne 0 ]]; then -+ rm -rf "${toolchain_dir}" -+ exit_with_error "Failed to decompress toolchain" "${toolchain}" -+ fi -+ -+ touch "${toolchain_dir}/.download-complete" -+ rm -rf "${toolchain_zip}"* # Also delete asc file -+ fi - done - USE_TORRENT=${USE_TORRENT_STATUS} - -- rm -rf "${SRC}"/cache/toolchain/*.tar.xz* - local existing_dirs=($(ls -1 "${SRC}"/cache/toolchain)) - for dir in ${existing_dirs[@]}; do - local found=no - for toolchain in ${toolchains[@]}; do -- local filename=${toolchain##*/} -- local dirname=${filename//.tar.xz/} -- [[ $dir == $dirname ]] && found=yes -+ [[ $dir == ${toolchain%.tar.*} ]] && found=yes - done - if [[ $found == no ]]; then - display_alert "Removing obsolete toolchain" "$dir" -diff --git a/lib/functions/image/initrd.sh b/lib/functions/image/initrd.sh -index 2ba34e759..3a10c5f7a 100644 ---- a/lib/functions/image/initrd.sh -+++ b/lib/functions/image/initrd.sh -@@ -20,7 +20,7 @@ update_initramfs() { - initrd_kern_ver="$(basename "$target_dir")" - initrd_file="${chroot_target}/boot/initrd.img-${initrd_kern_ver}" - -- update_initramfs_cmd="update-initramfs -uv -k ${initrd_kern_ver}" -+ update_initramfs_cmd="TMPDIR=/tmp update-initramfs -uv -k ${initrd_kern_ver}" # @TODO: why? TMPDIR=/tmp - else - exit_with_error "No kernel installed for the version" "${VER}" - fi -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 3340db9e9..267218f06 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -72,9 +72,9 @@ function prepare_partitions() { - UEFISIZE=${UEFISIZE:-0} - BIOSSIZE=${BIOSSIZE:-0} - UEFI_MOUNT_POINT=${UEFI_MOUNT_POINT:-/boot/efi} -- UEFI_FS_LABEL="${UEFI_FS_LABEL:-ARMBIEFI}" # Should be always uppercase -- ROOT_FS_LABEL="${ROOT_FS_LABEL:-armbian_root}" -- BOOT_FS_LABEL="${BOOT_FS_LABEL:-armbianboot}" -+ UEFI_FS_LABEL="${UEFI_FS_LABEL:-armbi_efi}" -+ ROOT_FS_LABEL="${ROOT_FS_LABEL:-armbi_root}" -+ BOOT_FS_LABEL="${BOOT_FS_LABEL:-armbi_boot}" - - call_extension_method "pre_prepare_partitions" "prepare_partitions_custom" <<- 'PRE_PREPARE_PARTITIONS' - *allow custom options for mkfs* -@@ -82,44 +82,28 @@ function prepare_partitions() { - PRE_PREPARE_PARTITIONS - - # stage: determine partition configuration -- if [[ -n $BOOTFS_TYPE ]]; then -- # 2 partition setup with forced /boot type -- local bootfs=$BOOTFS_TYPE -- local bootpart=1 -- local rootpart=2 -- [[ -z $BOOTSIZE || $BOOTSIZE -le 8 ]] && BOOTSIZE=${DEFAULT_BOOTSIZE} -- elif [[ $ROOTFS_TYPE != ext4 && $ROOTFS_TYPE != nfs ]]; then -- # 2 partition setup for non-ext4 local root -- local bootfs=ext4 -- local bootpart=1 -- local rootpart=2 -- [[ -z $BOOTSIZE || $BOOTSIZE -le 8 ]] && BOOTSIZE=${DEFAULT_BOOTSIZE} -- elif [[ $ROOTFS_TYPE == nfs ]]; then -- # single partition ext4 /boot, no root -- local bootfs=ext4 -- local bootpart=1 -- [[ -z $BOOTSIZE || $BOOTSIZE -le 8 ]] && BOOTSIZE=${DEFAULT_BOOTSIZE} # For cleanup processing only -- elif [[ $CRYPTROOT_ENABLE == yes ]]; then -- # 2 partition setup for encrypted /root and non-encrypted /boot -- local bootfs=ext4 -- local bootpart=1 -- local rootpart=2 -- [[ -z $BOOTSIZE || $BOOTSIZE -le 8 ]] && BOOTSIZE=${DEFAULT_BOOTSIZE} -- elif [[ $UEFISIZE -gt 0 ]]; then -+ local next=1 -+ # Check if we need UEFI partition -+ if [[ $UEFISIZE -gt 0 ]]; then - if [[ "${IMAGE_PARTITION_TABLE}" == "gpt" ]]; then -- # efi partition and ext4 root. some juggling is done by parted/sgdisk - local uefipart=15 -- local rootpart=1 -+ # Check if we need BIOS partition -+ [[ $BIOSSIZE -gt 0 ]] && local biospart=14 - else -- # efi partition and ext4 root. -- local uefipart=1 -- local rootpart=2 -+ local uefipart=$((next++)) - fi -+ fi -+ # Check if we need boot partition -+ if [[ -n $BOOTFS_TYPE || $ROOTFS_TYPE != ext4 || $CRYPTROOT_ENABLE == yes ]]; then -+ local bootpart=$((next++)) -+ local bootfs=${BOOTFS_TYPE:-ext4} -+ [[ -z $BOOTSIZE || $BOOTSIZE -le 8 ]] && BOOTSIZE=${DEFAULT_BOOTSIZE} - else -- # single partition ext4 root -- local rootpart=1 - BOOTSIZE=0 - fi -+ # Check if we need root partition -+ [[ $ROOTFS_TYPE != nfs ]] && -+ local rootpart=$((next++)) - - # stage: calculate rootfs size - export rootfs_size=$(du -sm $SDCARD/ | cut -f1) # MiB -@@ -145,9 +129,9 @@ function prepare_partitions() { - # Hardcoded overhead +25% is needed for desktop images, - # for CLI it could be lower. Align the size up to 4MiB - if [[ $BUILD_DESKTOP == yes ]]; then -- local sdsize=$(bc -l <<< "scale=0; ((($imagesize * 1.30) / 1 + 0) / 4 + 1) * 4") -+ local sdsize=$(bc -l <<< "scale=0; ((($imagesize * 1.35) / 1 + 0) / 4 + 1) * 4") - else -- local sdsize=$(bc -l <<< "scale=0; ((($imagesize * 1.25) / 1 + 0) / 4 + 1) * 4") -+ local sdsize=$(bc -l <<< "scale=0; ((($imagesize * 1.30) / 1 + 0) / 4 + 1) * 4") - fi - fi - -@@ -169,60 +153,53 @@ function prepare_partitions() { - - # stage: create partition table - display_alert "Creating partitions" "${bootfs:+/boot: $bootfs }root: $ROOTFS_TYPE" "info" -- run_host_command_logged parted -s ${SDCARD}.raw -- mklabel ${IMAGE_PARTITION_TABLE} - if [[ "${USE_HOOK_FOR_PARTITION}" == "yes" ]]; then -- display_alert "Using create_partition_table hook_point" "yes" "debug" -+ { [[ "$IMAGE_PARTITION_TABLE" == "msdos" ]] && echo "label: dos" || echo "label: $IMAGE_PARTITION_TABLE"; } | -+ run_host_command_logged sfdisk ${SDCARD}.raw || exit_with_error "Create partition table fail" -+ - call_extension_method "create_partition_table" <<- 'CREATE_PARTITION_TABLE' - *only called when USE_HOOK_FOR_PARTITION=yes to create the complete partition table* - Finally, we can get our own partition table. You have to partition ${SDCARD}.raw - yourself. Good luck. - CREATE_PARTITION_TABLE -- elif [[ $ROOTFS_TYPE == nfs ]]; then -- # single /boot partition -- run_host_command_logged parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$bootfs]} ${bootstart}s "100%" -- elif [[ $UEFISIZE -gt 0 ]]; then -- # uefi partition + root partition -- if [[ "${IMAGE_PARTITION_TABLE}" == "gpt" ]]; then -- if [[ ${BIOSSIZE} -gt 0 ]]; then -- display_alert "Creating partitions" "BIOS+UEFI+rootfs" "info" -- # UEFI + GPT automatically get a BIOS partition at 14, EFI at 15 -- local biosstart=$(($OFFSET * 2048)) -- local uefistart=$(($OFFSET * 2048 + ($BIOSSIZE * 2048))) -- local rootstart=$(($uefistart + ($UEFISIZE * 2048))) -- local biosend=$(($uefistart - 1)) -- local uefiend=$(($rootstart - 1)) -- run_host_command_logged parted -s ${SDCARD}.raw -- mkpart bios fat32 ${biosstart}s ${biosend}s -- run_host_command_logged parted -s ${SDCARD}.raw -- mkpart efi fat32 ${uefistart}s ${uefiend}s -- run_host_command_logged parted -s ${SDCARD}.raw -- mkpart rootfs ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" -- # transpose so BIOS is in sda14; EFI is in sda15 and root in sda1; requires sgdisk, parted cant do numbers -- run_host_command_logged sgdisk --transpose 1:14 ${SDCARD}.raw -- run_host_command_logged sgdisk --transpose 2:15 ${SDCARD}.raw -- run_host_command_logged sgdisk --transpose 3:1 ${SDCARD}.raw -- # set the ESP (efi) flag on 15 -- run_host_command_logged parted -s ${SDCARD}.raw -- set 14 bios_grub on -- run_host_command_logged parted -s ${SDCARD}.raw -- set 15 esp on -- else -- display_alert "Creating partitions" "UEFI+rootfs (no BIOS)" "info" -- # Simple EFI + root partition on GPT, no BIOS. -- run_host_command_logged parted -s ${SDCARD}.raw -- mkpart efi fat32 ${bootstart}s ${bootend}s -- run_host_command_logged parted -s ${SDCARD}.raw -- mkpart rootfs ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" -- # transpose so EFI is in sda15 and root in sda1; requires sgdisk, parted cant do numbers -- run_host_command_logged sgdisk --transpose 1:15 ${SDCARD}.raw -- run_host_command_logged sgdisk --transpose 2:1 ${SDCARD}.raw -- # set the ESP (efi) flag on 15 -- run_host_command_logged parted -s ${SDCARD}.raw -- set 15 esp on -- fi -- else -- run_host_command_logged parted -s ${SDCARD}.raw -- mkpart primary fat32 ${bootstart}s ${bootend}s -- run_host_command_logged parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" -- fi -- elif [[ $BOOTSIZE == 0 ]]; then -- # single root partition -- run_host_command_logged parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" - else -- # /boot partition + root partition -- run_host_command_logged parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$bootfs]} ${bootstart}s ${bootend}s -- run_host_command_logged parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" -+ { -+ [[ "$IMAGE_PARTITION_TABLE" == "msdos" ]] && echo "label: dos" || echo "label: $IMAGE_PARTITION_TABLE" -+ -+ local next=$OFFSET -+ if [[ -n "$biospart" ]]; then -+ # gpt: BIOS boot -+ local type="21686148-6449-6E6F-744E-656564454649" -+ echo "$biospart : name=\"bios\", start=${next}MiB, size=${BIOSSIZE}MiB, type=${type}" -+ local next=$(($next + $BIOSSIZE)) -+ fi -+ if [[ -n "$uefipart" ]]; then -+ # dos: EFI (FAT-12/16/32) -+ # gpt: EFI System -+ [[ "$IMAGE_PARTITION_TABLE" != "gpt" ]] && local type="ef" || local type="C12A7328-F81F-11D2-BA4B-00A0C93EC93B" -+ echo "$uefipart : name=\"efi\", start=${next}MiB, size=${UEFISIZE}MiB, type=${type}" -+ local next=$(($next + $UEFISIZE)) -+ fi -+ if [[ -n "$bootpart" ]]; then -+ # Linux extended boot -+ [[ "$IMAGE_PARTITION_TABLE" != "gpt" ]] && local type="ea" || local type="BC13C2FF-59E6-4262-A352-B275FD6F7172" -+ if [[ -n "$rootpart" ]]; then -+ echo "$bootpart : name=\"bootfs\", start=${next}MiB, size=${BOOTSIZE}MiB, type=${type}" -+ local next=$(($next + $BOOTSIZE)) -+ else -+ # no `size` argument mean "as much as possible" -+ echo "$bootpart : name=\"bootfs\", start=${next}MiB, type=${type}" -+ fi -+ fi -+ if [[ -n "$rootpart" ]]; then -+ # dos: Linux -+ # gpt: Linux filesystem -+ [[ "$IMAGE_PARTITION_TABLE" != "gpt" ]] && local type="83" || local type="0FC63DAF-8483-4772-8E79-3D69D8477DE4" -+ # no `size` argument mean "as much as possible" -+ echo "$rootpart : name=\"rootfs\", start=${next}MiB, type=${type}" -+ fi -+ } | -+ run_host_command_logged sfdisk ${SDCARD}.raw || exit_with_error "Partition fail." - fi - - call_extension_method "post_create_partitions" <<- 'POST_CREATE_PARTITIONS' -@@ -281,7 +258,12 @@ function prepare_partitions() { - local rootfs="UUID=$(blkid -s UUID -o value $rootdevice)" - fi - echo "$rootfs / ${mkfs[$ROOTFS_TYPE]} defaults,noatime${mountopts[$ROOTFS_TYPE]} 0 1" >> $SDCARD/etc/fstab -+ else -+ # update_initramfs will fail if /lib/modules/ doesn't exist -+ mount --bind --make-private $SDCARD $MOUNT/ -+ echo "/dev/nfs / nfs defaults 0 0" >> $SDCARD/etc/fstab - fi -+ - if [[ -n $bootpart ]]; then - display_alert "Creating /boot" "$bootfs on ${LOOP}p${bootpart}" - check_loop_device "${LOOP}p${bootpart}" -@@ -298,7 +280,6 @@ function prepare_partitions() { - run_host_command_logged mount ${LOOP}p${uefipart} "${MOUNT}${UEFI_MOUNT_POINT}" - echo "UUID=$(blkid -s UUID -o value ${LOOP}p${uefipart}) ${UEFI_MOUNT_POINT} vfat defaults 0 2" >> $SDCARD/etc/fstab - fi -- [[ $ROOTFS_TYPE == nfs ]] && echo "/dev/nfs / nfs defaults 0 0" >> $SDCARD/etc/fstab - echo "tmpfs /tmp tmpfs defaults,nosuid 0 0" >> $SDCARD/etc/fstab - - call_extension_method "format_partitions" <<- 'FORMAT_PARTITIONS' -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index 9d128c960..ca8f49a0a 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -75,11 +75,15 @@ create_image_from_sdcard_rootfs() { - Called before unmounting both `/root` and `/boot`. - PRE_UMOUNT_FINAL_IMAGE - -+ # Check the partition table after the uboot code has been written -+ display_alert "nPartition table after write_uboot" "$LOOP" "debug" -+ run_host_command_logged sfdisk -l "${LOOP}" # @TODO: use asset.. -+ - # unmount /boot/efi first, then /boot, rootfs third, image file last - sync - [[ $UEFISIZE != 0 ]] && umount "${MOUNT}${UEFI_MOUNT_POINT}" - [[ $BOOTSIZE != 0 ]] && umount "${MOUNT}/boot" -- [[ $ROOTFS_TYPE != nfs ]] && umount "${MOUNT}" -+ umount "${MOUNT}" - [[ $CRYPTROOT_ENABLE == yes ]] && cryptsetup luksClose $ROOT_MAPPER - - umount_chroot_recursive "${MOUNT}" # @TODO: wait. NFS is not really unmounted above. -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 6f0823648..ba5516768 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -108,6 +108,13 @@ function main_default_build_single() { - fi - fi - -+ # Compile plymouth-theme-armbian if packed .deb does not exist or use the one from repository -+ if [[ ! -f ${DEB_STORAGE}/plymouth-theme-armbian_${REVISION}_all.deb ]]; then -+ if [[ "${REPOSITORY_INSTALL}" != *plymouth-theme-armbian* ]]; then -+ compile_plymouth-theme-armbian -+ fi -+ fi -+ - # Compile armbian-firmware if packed .deb does not exist or use the one from repository - if ! ls "${DEB_STORAGE}/armbian-firmware_${REVISION}_all.deb" 1> /dev/null 2>&1 || ! ls "${DEB_STORAGE}/armbian-firmware-full_${REVISION}_all.deb" 1> /dev/null 2>&1; then - -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index 4ebe8f03f..3ed167b43 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -1,11 +1,5 @@ - # this gets from cache or produces a new rootfs, and leaves a mounted chroot "$SDCARD" at the end. - get_or_create_rootfs_cache_chroot_sdcard() { -- if [[ "$ROOT_FS_CREATE_ONLY" == "yes" ]]; then -- local cycles=1 -- else -- local cycles=3 -- fi -- - # @TODO: this was moved from configuration to this stage, that way configuration can be offline - # if variable not provided, check which is current version in the cache storage in GitHub. - if [[ -z "${ROOTFSCACHE_VERSION}" ]]; then -@@ -15,67 +9,60 @@ get_or_create_rootfs_cache_chroot_sdcard() { - ROOTFSCACHE_VERSION=${ROOTFSCACHE_VERSION:-$(curl -L --silent https://cache.armbian.com/rootfs/latest --fail)} - fi - -- INITIAL_ROOTFSCACHE_VERSION=$ROOTFSCACHE_VERSION -+ local packages_hash=$(get_package_list_hash) -+ local packages_hash=${packages_hash:0:8} - -- # seek last cache, proceed to previous otherwise build it -- for ((n = 0; n < cycles; n++)); do -+ local cache_type="cli" -+ [[ ${BUILD_DESKTOP} == yes ]] && local cache_type="xfce-desktop" -+ [[ -n ${DESKTOP_ENVIRONMENT} ]] && local cache_type="${DESKTOP_ENVIRONMENT}" -+ [[ ${BUILD_MINIMAL} == yes ]] && local cache_type="minimal" - -- ROOTFSCACHE_VERSION=$(expr $INITIAL_ROOTFSCACHE_VERSION - $n) -- ROOTFSCACHE_VERSION=$(printf "%04d\n" ${ROOTFSCACHE_VERSION}) -+ # seek last cache, proceed to previous otherwise build it -+ local cache_list -+ readarray -t cache_list <<< "$(get_rootfs_cache_list "$cache_type" "$packages_hash" | sort -r)" -+ for ROOTFSCACHE_VERSION in "${cache_list[@]}"; do - -- local packages_hash=$(get_package_list_hash "$ROOTFSCACHE_VERSION") -- local cache_type="cli" -- [[ ${BUILD_DESKTOP} == yes ]] && local cache_type="xfce-desktop" -- [[ -n ${DESKTOP_ENVIRONMENT} ]] && local cache_type="${DESKTOP_ENVIRONMENT}" -- [[ ${BUILD_MINIMAL} == yes ]] && local cache_type="minimal" -- local cache_name=${RELEASE}-${cache_type}-${ARCH}.$packages_hash.tar.zst -+ local cache_name=${ARCH}-${RELEASE}-${cache_type}-${packages_hash}-${ROOTFSCACHE_VERSION}.tar.zst - local cache_fname=${SRC}/cache/rootfs/${cache_name} -- local display_name=${RELEASE}-${cache_type}-${ARCH}.${packages_hash:0:3}...${packages_hash:29}.tar.zst - - [[ "$ROOT_FS_CREATE_ONLY" == yes ]] && break - -- if [[ -f ${cache_fname} && -f ${cache_fname}.aria2 ]]; then -- rm ${cache_fname}* -- display_alert "Partially downloaded file. Re-start." -- download_and_verify "_rootfs" "$cache_name" -- fi -- -- display_alert "Checking local cache" "$display_name" "info" -- -- if [[ -f $cache_fname ]]; then -- break -- else -- display_alert "searching on servers" -- download_and_verify "_rootfs" "$cache_name" -- [[ -f ${cache_fname} ]] && break -- fi -+ display_alert "Checking cache" "$cache_name" "info" - -- if [[ ! -f $cache_fname ]]; then -- display_alert "not found: try to use previous cache" -+ # if aria2 file exists download didn't succeeded -+ if [[ ! -f $cache_fname || -f ${cache_fname}.aria2 ]]; then -+ display_alert "Downloading from servers" -+ download_and_verify "rootfs" "$cache_name" || -+ continue - fi - -+ [[ -f $cache_fname && ! -f ${cache_fname}.aria2 ]] && break - done - -- # check if cache exists and we want to make it -- if [[ -f ${cache_fname} && "$ROOT_FS_CREATE_ONLY" == "yes" ]]; then -- display_alert "Checking cache integrity" "$display_name" "info" -- zstd -tqq ${cache_fname} || { -- rm $cache_fname -- exit_with_error "Cache $cache_fname is corrupted and was deleted. Please restart!" -- } -- fi -+ ##PRESERVE## # check if cache exists and we want to make it -+ ##PRESERVE## if [[ -f ${cache_fname} && "$ROOT_FS_CREATE_ONLY" == "yes" ]]; then -+ ##PRESERVE## display_alert "Checking cache integrity" "$display_name" "info" -+ ##PRESERVE## zstd -tqq ${cache_fname} || { -+ ##PRESERVE## rm $cache_fname -+ ##PRESERVE## exit_with_error "Cache $cache_fname is corrupted and was deleted. Please restart!" -+ ##PRESERVE## } -+ ##PRESERVE## fi - - # if aria2 file exists download didn't succeeded -- if [[ -f $cache_fname && ! -f $cache_fname.aria2 ]]; then -+ if [[ "$ROOT_FS_CREATE_ONLY" != "yes" && -f $cache_fname && ! -f $cache_fname.aria2 ]]; then - - local date_diff=$((($(date +%s) - $(stat -c %Y $cache_fname)) / 86400)) -- display_alert "Extracting $display_name" "$date_diff days old" "info" -- pv -p -b -r -c -N "$(logging_echo_prefix_for_pv "extract_rootfs") $display_name" "$cache_fname" | zstdmt -dc | tar xp --xattrs -C $SDCARD/ -+ display_alert "Extracting $cache_name" "$date_diff days old" "info" -+ pv -p -b -r -c -N "$(logging_echo_prefix_for_pv "extract_rootfs") $cache_name" "$cache_fname" | zstdmt -dc | tar xp --xattrs -C $SDCARD/ - [[ $? -ne 0 ]] && rm $cache_fname && exit_with_error "Cache $cache_fname is corrupted and was deleted. Restart." - rm $SDCARD/etc/resolv.conf - echo "nameserver $NAMESERVER" >> $SDCARD/etc/resolv.conf - create_sources_list "$RELEASE" "$SDCARD/" - else -+ local ROOT_FS_CREATE_VERSION=${ROOT_FS_CREATE_VERSION:-$(date --utc +"%Y%m%d")} -+ local cache_name=${ARCH}-${RELEASE}-${cache_type}-${packages_hash}-${ROOT_FS_CREATE_VERSION}.tar.zst -+ local cache_fname=${SRC}/cache/rootfs/${cache_name} -+ - display_alert "Creating new rootfs cache for" "$RELEASE" "info" - - create_new_rootfs_cache -@@ -216,7 +203,7 @@ function create_new_rootfs_cache() { - fi - - # stage: check md5 sum of installed packages. Just in case. -- display_alert "Check MD5 sum of installed packages" "info" -+ display_alert "Checking MD5 sum of installed packages" "debsums" "info" - export if_error_detail_message="Check MD5 sum of installed packages failed" - # shellcheck disable=SC2154 # this '$' and '\n' syntax is for dpkg-query - chroot_sdcard dpkg-query -f '"${binary:Package}\n"' -W "|" xargs debsums --silent || true # @TODO: ignore result for now until we can find all the divergences -@@ -242,7 +229,7 @@ function create_new_rootfs_cache() { - display_alert "Mount point" "$(echo -e "$freespace" | grep $MOUNT | head -1 | awk '{print $5}')" "info" - - # create list of installed packages for debug purposes - this captures it's own stdout. -- chroot "${SDCARD}" /bin/bash -c "dpkg --get-selections" | grep -v deinstall | awk '{print $1}' | cut -f1 -d':' > "${cache_fname}.list" -+ chroot "${SDCARD}" /bin/bash -c "dpkg -l | grep ^ii | awk '{ print \$2\",\"\$3 }' > '${cache_fname}.list'" - - # creating xapian index that synaptic runs faster - if [[ $BUILD_DESKTOP == yes ]]; then -@@ -262,7 +249,7 @@ function create_new_rootfs_cache() { - umount_chroot "$SDCARD" - - tar cp --xattrs --directory=$SDCARD/ --exclude='./dev/*' --exclude='./proc/*' --exclude='./run/*' --exclude='./tmp/*' \ -- --exclude='./sys/*' --exclude='./home/*' --exclude='./root/*' . | pv -p -b -r -s "$(du -sb $SDCARD/ | cut -f1)" -N "$(logging_echo_prefix_for_pv "store_rootfs") $display_name" | zstdmt -5 -c > "${cache_fname}" -+ --exclude='./sys/*' --exclude='./home/*' --exclude='./root/*' . | pv -p -b -r -s "$(du -sb $SDCARD/ | cut -f1)" -N "$(logging_echo_prefix_for_pv "store_rootfs") $cache_name" | zstdmt -5 -c > "${cache_fname}" - - # sign rootfs cache archive that it can be used for web cache once. Internal purposes - if [[ -n "${GPG_PASS}" && "${SUDO_USER}" ]]; then -@@ -270,23 +257,43 @@ function create_new_rootfs_cache() { - echo "${GPG_PASS}" | sudo -H -u ${SUDO_USER} bash -c "gpg --passphrase-fd 0 --armor --detach-sign --pinentry-mode loopback --batch --yes ${cache_fname}" || exit 1 - fi - -+ # needed for backend to keep current only -+ echo "$cache_fname" > $cache_fname.current -+ - return 0 # protect against possible future short-circuiting above this - } - - # get_package_list_hash - # - # returns md5 hash for current package list and rootfs cache version --get_package_list_hash() { -+get_package_list_hash() -+{ - local package_arr exclude_arr - local list_content - read -ra package_arr <<< "${DEBOOTSTRAP_LIST} ${PACKAGE_LIST}" - read -ra exclude_arr <<< "${PACKAGE_LIST_EXCLUDE}" - ( -- ( -- printf "%s\n" "${package_arr[@]}" -- printf -- "-%s\n" "${exclude_arr[@]}" -- ) | sort -u -- echo "${1}" -- ) | -- md5sum | cut -d' ' -f 1 -+ printf "%s\n" "${package_arr[@]}" -+ printf -- "-%s\n" "${exclude_arr[@]}" -+ ) | sort -u | md5sum | cut -d' ' -f 1 -+} -+ -+# get_rootfs_cache_list -+# -+# return a list of versions of all avaiable cache from remote and local. -+get_rootfs_cache_list() { -+ local cache_type=$1 -+ local packages_hash=$2 -+ -+ { -+ # Temportally disable Github API because we don't support to download from it -+ # curl --silent --fail -L "https://api.github.com/repos/armbian/cache/releases?per_page=3" | jq -r '.[].tag_name' \ -+ # || curl --silent --fail -L https://cache.armbian.com/rootfs/list -+ curl --silent --fail -L https://cache.armbian.com/rootfs/list -+ -+ find ${SRC}/cache/rootfs/ -mtime -7 -name "${ARCH}-${RELEASE}-${cache_type}-${packages_hash}-*.tar.zst" | -+ sed -e 's#^.*/##' | -+ sed -e 's#\..*$##' | -+ awk -F'-' '{print $5}' -+ } | sort | uniq - } -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 9844d0b39..1c9a0d2f8 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -395,6 +395,15 @@ function install_distribution_agnostic() { - fi - fi - -+ # install plymouth-theme-armbian -+ if [[ $PLYMOUTH == yes ]]; then -+ if [[ "${REPOSITORY_INSTALL}" != *plymouth-theme-armbian* ]]; then -+ install_deb_chroot "${DEB_STORAGE}/armbian-plymouth-theme_${REVISION}_all.deb" -+ else -+ install_deb_chroot "armbian-plymouth-theme" "remote" -+ fi -+ fi -+ - # install kernel sources - if [[ -f ${DEB_STORAGE}/${CHOSEN_KSRC}_${REVISION}_all.deb && $INSTALL_KSRC == yes ]]; then - install_deb_chroot "${DEB_STORAGE}/${CHOSEN_KSRC}_${REVISION}_all.deb" -@@ -587,6 +596,18 @@ function install_distribution_agnostic() { - # build logo in any case - boot_logo - -+ # Show logo -+ if [[ $PLYMOUTH == yes ]]; then -+ if [[ $BOOT_LOGO == yes || $BOOT_LOGO == desktop && $BUILD_DESKTOP == yes ]]; then -+ [[ -f "${SDCARD}"/boot/armbianEnv.txt ]] && grep -q '^bootlogo' "${SDCARD}"/boot/armbianEnv.txt && -+ sed -i 's/^bootlogo.*/bootlogo=true/' "${SDCARD}"/boot/armbianEnv.txt || -+ echo 'bootlogo=true' >> "${SDCARD}"/boot/armbianEnv.txt -+ -+ [[ -f "${SDCARD}"/boot/boot.ini ]] && -+ sed -i 's/^setenv bootlogo.*/setenv bootlogo "true"/' "${SDCARD}"/boot/boot.ini -+ fi -+ fi -+ - # disable MOTD for first boot - we want as clean 1st run as possible - chmod -x "${SDCARD}"/etc/update-motd.d/* - -diff --git a/lib/functions/rootfs/distro-specific.sh b/lib/functions/rootfs/distro-specific.sh -index 3a0b1ec44..86e452777 100644 ---- a/lib/functions/rootfs/distro-specific.sh -+++ b/lib/functions/rootfs/distro-specific.sh -@@ -2,11 +2,10 @@ install_distribution_specific() { - display_alert "Applying distribution specific tweaks for" "$RELEASE" "info" - - case $RELEASE in -- buster | sid) -- # remove doubled uname from motd -- [[ -f "${SDCARD}"/etc/update-motd.d/10-uname ]] && rm "${SDCARD}"/etc/update-motd.d/10-uname -- # rc.local is not existing but one might need it -- install_rclocal -+ sid) -+ # (temporally) disable broken service -+ chroot_sdcard "systemctl --no-reload disable smartmontools.service" -+ - ;; - - bullseye) -@@ -23,17 +22,7 @@ install_distribution_specific() { - # by using default lz4 initrd compression leads to corruption, go back to proven method - sed -i "s/^COMPRESS=.*/COMPRESS=gzip/" "${SDCARD}"/etc/initramfs-tools/initramfs.conf - -- # cleanup motd services and related files -- chroot "${SDCARD}" /bin/bash -c "systemctl disable motd-news.service >/dev/null 2>&1" -- chroot "${SDCARD}" /bin/bash -c "systemctl disable motd-news.timer >/dev/null 2>&1" -- -- rm -f "${SDCARD}"/etc/update-motd.d/{10-uname,10-help-text,50-motd-news,80-esm,80-livepatch,90-updates-available,91-release-upgrade,95-hwe-eol} -- -- # remove motd news from motd.ubuntu.com -- [[ -f "${SDCARD}"/etc/default/motd-news ]] && sed -i "s/^ENABLED=.*/ENABLED=0/" "${SDCARD}"/etc/default/motd-news -- -- # rc.local is not existing but one might need it -- install_rclocal -+ run_host_command_logged rm -fv "${SDCARD}"/etc/update-motd.d/{10-uname,10-help-text,50-motd-news,80-esm,80-livepatch,90-updates-available,91-release-upgrade,95-hwe-eol} - - if [ -d "${SDCARD}"/etc/NetworkManager ]; then - local RENDERER=NetworkManager -@@ -41,13 +30,6 @@ install_distribution_specific() { - local RENDERER=networkd - fi - -- # Basic Netplan config. Let NetworkManager/networkd manage all devices on this system -- [[ -d "${SDCARD}"/etc/netplan ]] && cat <<- EOF > "${SDCARD}"/etc/netplan/armbian-default.yaml -- network: -- version: 2 -- renderer: $RENDERER -- EOF -- - # DNS fix - if [ -n "$NAMESERVER" ]; then - sed -i "s/#DNS=.*/DNS=$NAMESERVER/g" "${SDCARD}"/etc/systemd/resolved.conf -@@ -67,6 +49,26 @@ install_distribution_specific() { - ;; - esac - -+ # Basic Netplan config. Let NetworkManager/networkd manage all devices on this system -+ [[ -d "${SDCARD}"/etc/netplan ]] && cat <<- EOF > "${SDCARD}"/etc/netplan/armbian-default.yaml -+ network: -+ version: 2 -+ renderer: $RENDERER -+ EOF -+ -+ # cleanup motd services and related files -+ chroot_sdcard systemctl disable motd-news.service -+ chroot_sdcard systemctl disable motd-news.timer -+ -+ # remove motd news from motd.ubuntu.com -+ [[ -f "${SDCARD}"/etc/default/motd-news ]] && sed -i "s/^ENABLED=.*/ENABLED=0/" "${SDCARD}"/etc/default/motd-news -+ -+ # remove doubled uname from motd -+ [[ -f "${SDCARD}"/etc/update-motd.d/10-uname ]] && rm "${SDCARD}"/etc/update-motd.d/10-uname -+ -+ # rc.local is not existing but one might need it -+ install_rclocal -+ - # use list modules INITRAMFS - if [ -f "${SRC}"/config/modules/"${MODULES_INITRD}" ]; then - display_alert "Use file list modules INITRAMFS" "${MODULES_INITRD}" - -From dde4db8ee4d9f984b35f8fb909785622316207a8 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 27 Aug 2022 12:52:47 +0200 -Subject: [PATCH] armbian-next: manual merge (28) of lib changes between - revisions af6ceee6c55bd4726139fb8b1ad77641d385515a and - 38df56fbf39739b48b31b5e393f15261d053b3cd - ---- - .../compilation/patch/kernel-bootsplash.sh | 10 +++++++++ - lib/functions/compilation/patch/kernel-drivers.sh | 26 ++++++++++++++-------- - lib/functions/image/fingerprint.sh | 10 ++++----- - lib/functions/image/partitioning.sh | 2 +- - 4 files changed, 33 insertions(+), 15 deletions(-) - -diff --git a/lib/functions/compilation/patch/kernel-bootsplash.sh b/lib/functions/compilation/patch/kernel-bootsplash.sh -index c5aff9692..3a366234c 100644 ---- a/lib/functions/compilation/patch/kernel-bootsplash.sh -+++ b/lib/functions/compilation/patch/kernel-bootsplash.sh -@@ -2,6 +2,11 @@ - # Linux splash file - # - function apply_kernel_patches_for_bootsplash() { -+ # disable it. -+ # todo: cleanup logo generation code and bring in plymouth -+ # @TODO: rpardini: so, can we completely remove this? -+ SKIP_BOOTSPLASH=yes -+ - # previously: if linux-version compare "${version}" ge 5.10 && [ $SKIP_BOOTSPLASH != yes ]; then - [[ "${SKIP_BOOTSPLASH}" == "yes" ]] && return 0 - linux-version compare "${version}" le 5.10 && return 0 -@@ -13,6 +18,11 @@ function apply_kernel_patches_for_bootsplash() { - process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0000-Revert-fbcon-Avoid-cap-set-but-not-used-warning.patch" "applying" - fi - -+ if (linux-version compare "${version}" ge 5.18.18 && linux-version compare "${version}" lt 5.19) || -+ (linux-version compare "${version}" ge 5.15.61 && linux-version compare "${version}" lt 5.16); then -+ process_patch_file "${SRC}/patch/misc/0001-Revert-fbcon-Fix-accelerated-fbdev-scrolling-while-logo-is-still-shown.patch" "applying" -+ fi -+ - process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0001-Revert-fbcon-Add-option-to-enable-legacy-hardware-ac.patch" "applying" - - if linux-version compare "${version}" ge 5.15; then -diff --git a/lib/functions/compilation/patch/kernel-drivers.sh b/lib/functions/compilation/patch/kernel-drivers.sh -index eec269607..505a3a89e 100644 ---- a/lib/functions/compilation/patch/kernel-drivers.sh -+++ b/lib/functions/compilation/patch/kernel-drivers.sh -@@ -139,6 +139,9 @@ function prepare_extra_kernel_drivers() { - sed -i '/source "drivers\/net\/wireless\/ti\/Kconfig"/a source "drivers\/net\/wireless\/rtl8189es\/Kconfig"' \ - "$kerneldir/drivers/net/wireless/Kconfig" - -+ # add support for 5.19.2 -+ process_patch_file "${SRC}/patch/misc/wireless-rtl8189es-5.19.2.patch" "applying" -+ - fi - - # Wireless drivers for Realtek 8189FS chipsets -@@ -172,6 +175,9 @@ function prepare_extra_kernel_drivers() { - sed -i '/source "drivers\/net\/wireless\/ti\/Kconfig"/a source "drivers\/net\/wireless\/rtl8189fs\/Kconfig"' \ - "$kerneldir/drivers/net/wireless/Kconfig" - -+ # add support for 5.19.2 -+ process_patch_file "${SRC}/patch/misc/wireless-rtl8189fs-5.19.2.patch" "applying" -+ - fi - - # Wireless drivers for Realtek 8192EU chipsets -@@ -213,7 +219,7 @@ function prepare_extra_kernel_drivers() { - # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch -- local rtl8812auver="branch:v5.6.4.2" -+ local rtl8812auver="commit:41532e3b16dcf27f06e6fe5a26314f3aa24d4f87" - - display_alert "Adding" "Wireless drivers for Realtek 8811, 8812, 8814 and 8821 chipsets ${rtl8812auver}" "info" - -@@ -237,6 +243,9 @@ function prepare_extra_kernel_drivers() { - sed -i '/source "drivers\/net\/wireless\/ti\/Kconfig"/a source "drivers\/net\/wireless\/rtl8812au\/Kconfig"' \ - "$kerneldir/drivers/net/wireless/Kconfig" - -+ # add support for 5.19.2 -+ process_patch_file "${SRC}/patch/misc/wireless-rtl8812au-5.19.2.patch" "applying" -+ - fi - - # Wireless drivers for Xradio XR819 chipsets -@@ -313,6 +322,9 @@ function prepare_extra_kernel_drivers() { - # add support for 5.18.y - process_patch_file "${SRC}/patch/misc/wireless-rtl8821cu.patch" "applying" - -+ # add support for 5.19.2 -+ process_patch_file "${SRC}/patch/misc/wireless-rtl8811cu-5.19.2.patch" "applying" -+ - fi - - # Wireless drivers for Realtek 8188EU 8188EUS and 8188ETV chipsets -@@ -365,7 +377,7 @@ function prepare_extra_kernel_drivers() { - # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch -- local rtl88x2buver="branch:5.8.7.1_35809.20191129_COEX20191120-7777" -+ local rtl88x2buver="branch:fix-6.0" - - display_alert "Adding" "Wireless drivers for Realtek 88x2bu chipsets ${rtl88x2buver}" "info" - -@@ -479,6 +491,7 @@ function prepare_extra_kernel_drivers() { - sed -i '/source "drivers\/net\/wireless\/ti\/Kconfig"/a source "drivers\/net\/wireless\/rtl8723ds\/Kconfig"' \ - "$kerneldir/drivers/net/wireless/Kconfig" - -+ process_patch_file "${SRC}/patch/misc/wireless-rtl8723ds-5.19.2.patch" "applying" - fi - - # Wireless drivers for Realtek 8723DU chipsets -@@ -486,12 +499,7 @@ function prepare_extra_kernel_drivers() { - if linux-version compare $version ge 5.0 && [ "$EXTRAWIFI" == yes ]; then - # @TODO: fasthash for this is... ? remote git hash? - -- # attach to specifics tag or branch -- if linux-version compare $version ge 5.12; then -- local rtl8723duver="branch:v5.13.4" -- else -- local rtl8723duver="branch:master" -- fi -+ local rtl8723duver="branch:master" - - display_alert "Adding" "Wireless drivers for Realtek 8723DU chipsets ${rtl8723duver}" "info" - -@@ -515,7 +523,7 @@ function prepare_extra_kernel_drivers() { - sed -i '/source "drivers\/net\/wireless\/ti\/Kconfig"/a source "drivers\/net\/wireless\/rtl8723du\/Kconfig"' \ - $kerneldir/drivers/net/wireless/Kconfig - -- process_patch_file "${SRC}/patch/misc/wireless-rtl8723du.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/wireless-rtl8723du-5.19.2.patch" "applying" - fi - - # Wireless drivers for Realtek 8822BS chipsets -diff --git a/lib/functions/image/fingerprint.sh b/lib/functions/image/fingerprint.sh -index 6fc7c43fb..bb4fd4c3e 100644 ---- a/lib/functions/image/fingerprint.sh -+++ b/lib/functions/image/fingerprint.sh -@@ -27,15 +27,15 @@ fingerprint_image() { - CPU configuration: $CPUMIN - $CPUMAX with $GOVERNOR - -------------------------------------------------------------------------------- - Verify GPG signature: -- gpg --verify $2.img.asc -+ gpg --verify $2.img.xz.asc - - Verify image file integrity: -- sha256sum --check $2.img.sha -+ sha256sum --check $2.img.xz.sha - -- Prepare SD card (four methodes): -- zcat $2.img.gz | pv | dd of=/dev/mmcblkX bs=1M -+ Prepare SD card (four methods): -+ xzcat $2.img.xz | pv | dd of=/dev/mmcblkX bs=1M - dd if=$2.img of=/dev/mmcblkX bs=1M -- balena-etcher $2.img.gz -d /dev/mmcblkX -+ balena-etcher $2.img.xz -d /dev/mmcblkX - balena-etcher $2.img -d /dev/mmcblkX - EOF - fi -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 2c584ff06..3340db9e9 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -74,7 +74,7 @@ function prepare_partitions() { - UEFI_MOUNT_POINT=${UEFI_MOUNT_POINT:-/boot/efi} - UEFI_FS_LABEL="${UEFI_FS_LABEL:-ARMBIEFI}" # Should be always uppercase - ROOT_FS_LABEL="${ROOT_FS_LABEL:-armbian_root}" -- BOOT_FS_LABEL="${BOOT_FS_LABEL:-armbian_boot}" -+ BOOT_FS_LABEL="${BOOT_FS_LABEL:-armbianboot}" - - call_extension_method "pre_prepare_partitions" "prepare_partitions_custom" <<- 'PRE_PREPARE_PARTITIONS' - *allow custom options for mkfs* - -From 0ae75757f23941e025ed29dae1aacf44cd2249ac Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 27 Aug 2022 12:41:42 +0200 -Subject: [PATCH] armbian-next: manual merge (28) of sources/families changes - between revisions af6ceee6c55bd4726139fb8b1ad77641d385515a and - 38df56fbf39739b48b31b5e393f15261d053b3cd - ---- - config/sources/families/include/meson_common.inc | 54 ++++++++++++------------ - config/sources/families/media.conf | 1 + - config/sources/families/odroidxu4.conf | 4 +- - 3 files changed, 30 insertions(+), 29 deletions(-) - -diff --git a/config/sources/families/include/meson_common.inc b/config/sources/families/include/meson_common.inc -index 6600b199a..ee515aaaf 100644 ---- a/config/sources/families/include/meson_common.inc -+++ b/config/sources/families/include/meson_common.inc -@@ -1,23 +1,36 @@ - ARCH=armhf --BOOTSOURCE='https://github.com/hardkernel/u-boot.git' --BOOTBRANCH='branch:odroidc-v2011.03' --BOOTDIR='u-boot-odroidc1' --UBOOT_COMPILER="arm-linux-gnueabihf-" --UBOOT_USE_GCC='< 4.9' --SERIALCON="ttyAML0" --UBOOT_TARGET_MAP=';;sd_fuse/bl1.bin.hardkernel sd_fuse/u-boot.bin' --SRC_LOADADDR='LOADADDR=0x00208000' --KERNEL_IMAGE_TYPE=uImage - LINUXFAMILY=meson -+KERNEL_IMAGE_TYPE=uImage -+SRC_LOADADDR='LOADADDR=0x00208000' -+ -+SERIALCON="ttyAML0" -+ - CPUMIN=504000 - CPUMAX=1632000 - GOVERNOR=ondemand - -+SKIP_BOOTSPLASH="yes" -+ -+case $BOARD in -+ odroidc1) -+ -+ BOOTDIR='u-boot-odroidc1' -+ BOOTSOURCE='https://github.com/hardkernel/u-boot.git' -+ BOOTBRANCH='branch:odroidc-v2011.03' -+ -+ UBOOT_COMPILER="arm-linux-gnueabihf-" -+ UBOOT_USE_GCC='< 4.9' -+ -+ UBOOT_TARGET_MAP=';;sd_fuse/bl1.bin.hardkernel sd_fuse/u-boot.bin' -+ -+ ;; -+esac -+ - case $BRANCH in - legacy) - -- export KERNEL_MAJOR_MINOR="5.11" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.11.y" -+ export KERNEL_MAJOR_MINOR="5.10" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.10.y" - KERNELPATCHDIR='meson-'$BRANCH - - BUILD_DESKTOP=no -@@ -25,8 +38,8 @@ case $BRANCH in - ;; - current) - -- export KERNEL_MAJOR_MINOR="5.14" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.14.y" -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.15.y" - KERNELPATCHDIR='meson-'$BRANCH - - BUILD_DESKTOP=no -@@ -37,25 +50,12 @@ case $BRANCH in - KERNELDIR='linux-meson' - KERNELSOURCE='https://github.com/xdarklight/linux' - export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:meson-mx-integration-5.18-20220417" -+ KERNELBRANCH="branch:meson-mx-integration-5.18-20220516" - KERNELPATCHDIR='meson-'$BRANCH - - ;; - esac - --case $BOARD in -- odroidc1) -- -- BOOTSCRIPT="boot-odroid-c1.ini:boot.ini" -- -- ;; -- onecloud) -- -- BOOTSCRIPT="boot-onecloud.cmd:boot.cmd" -- -- ;; --esac -- - write_uboot_platform() { - dd if=$1/bl1.bin.hardkernel of=$2 bs=1 count=442 conv=fsync > /dev/null 2>&1 - dd if=$1/bl1.bin.hardkernel of=$2 bs=512 skip=1 seek=1 conv=fsync > /dev/null 2>&1 -diff --git a/config/sources/families/media.conf b/config/sources/families/media.conf -index 0355128ca..eb2711377 100644 ---- a/config/sources/families/media.conf -+++ b/config/sources/families/media.conf -@@ -62,6 +62,7 @@ case $BRANCH in - export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.18.y" - LINUXCONFIG='linux-media-'$BRANCH -+ SKIP_BOOTSPLASH="yes" - - if [[ $BOARD == station-p2 || $BOARD == station-m2 || $BOARD == quartz64a || $BOARD == bananapir2pro ]]; then - KERNELPATCHDIR='station-p2-'$BRANCH -diff --git a/config/sources/families/odroidxu4.conf b/config/sources/families/odroidxu4.conf -index 75916a25b..1fac905f6 100644 ---- a/config/sources/families/odroidxu4.conf -+++ b/config/sources/families/odroidxu4.conf -@@ -26,8 +26,8 @@ case $BRANCH in - - edge) - KERNELSOURCE='https://github.com/tobetter/linux' -- export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:odroid-5.18.y' -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:odroid-5.19.y' - KERNELDIR='linux-odroidxu4' - ;; - - -From e3e84f5c72e34013ea09dbd556c30870017b43a8 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 13 Aug 2022 13:53:57 +0200 -Subject: [PATCH] armbian-next: manual merge (27) of `lib` changes between - revisions 9c52562176390624d33c93634e63a8f91cc0815b and - af6ceee6c55bd4726139fb8b1ad77641d385515a - ---- - lib/functions/bsp/bsp-cli.sh | 5 +- - .../compilation/patch/kernel-bootsplash.sh | 1 + - lib/functions/compilation/patch/kernel-drivers.sh | 6 +- - lib/functions/general/cleaning.sh | 2 +- - lib/functions/general/downloads.sh | 10 ++- - lib/functions/image/partitioning.sh | 20 ++++-- - lib/functions/main/rootfs-image.sh | 2 +- - lib/functions/rootfs/create-cache.sh | 75 +++++++++------------- - lib/functions/rootfs/distro-agnostic.sh | 2 +- - 9 files changed, 64 insertions(+), 59 deletions(-) - -diff --git a/lib/functions/bsp/bsp-cli.sh b/lib/functions/bsp/bsp-cli.sh -index a20ea1e57..62fa5cfd1 100644 ---- a/lib/functions/bsp/bsp-cli.sh -+++ b/lib/functions/bsp/bsp-cli.sh -@@ -12,7 +12,7 @@ create_board_package() { - copy_all_packages_files_for "bsp-cli" - - # install copy of boot script & environment file -- if [[ "${BOOTCONFIG}" != "none" ]]; then -+ if [[ -z "${BOOTSCRIPT}" ]]; then # @TODO: used to be: if [[ "${BOOTCONFIG}" != "none" ]]; then - # @TODO: add extension method bsp_prepare_bootloader(), refactor into u-boot extension - local bootscript_src=${BOOTSCRIPT%%:*} - local bootscript_dst=${BOOTSCRIPT##*:} -@@ -29,8 +29,9 @@ create_board_package() { - else - run_host_command_logged cp -pv "${SRC}/config/bootscripts/${bootscript_src}" "${destination}/usr/share/armbian/${bootscript_dst}" - fi -- [[ -n $BOOTENV_FILE && -f $SRC/config/bootenv/$BOOTENV_FILE ]] && -+ if [[ -n $BOOTENV_FILE && -f $SRC/config/bootenv/$BOOTENV_FILE ]]; then - run_host_command_logged cp -pv "${SRC}/config/bootenv/${BOOTENV_FILE}" "${destination}"/usr/share/armbian/armbianEnv.txt -+ fi - else - display_alert "Using extlinux, regular bootscripts ignored" "SRC_EXTLINUX=${SRC_EXTLINUX}" "warn" - fi -diff --git a/lib/functions/compilation/patch/kernel-bootsplash.sh b/lib/functions/compilation/patch/kernel-bootsplash.sh -index cbd929513..c5aff9692 100644 ---- a/lib/functions/compilation/patch/kernel-bootsplash.sh -+++ b/lib/functions/compilation/patch/kernel-bootsplash.sh -@@ -5,6 +5,7 @@ function apply_kernel_patches_for_bootsplash() { - # previously: if linux-version compare "${version}" ge 5.10 && [ $SKIP_BOOTSPLASH != yes ]; then - [[ "${SKIP_BOOTSPLASH}" == "yes" ]] && return 0 - linux-version compare "${version}" le 5.10 && return 0 -+ linux-version compare "${version}" lt 5.19 && return 0 - - display_alert "Adding" "Kernel bootsplash patch" "info" - -diff --git a/lib/functions/compilation/patch/kernel-drivers.sh b/lib/functions/compilation/patch/kernel-drivers.sh -index 9df0b81ca..eec269607 100644 ---- a/lib/functions/compilation/patch/kernel-drivers.sh -+++ b/lib/functions/compilation/patch/kernel-drivers.sh -@@ -31,7 +31,7 @@ function prepare_extra_kernel_drivers() { - # - # Older versions have AUFS support with a patch - -- if linux-version compare "${version}" gt 5.11 && linux-version compare "${version}" lt 5.19 && [ "$AUFS" == yes ]; then -+ if linux-version compare "${version}" gt 5.11 && linux-version compare "${version}" lt 5.20 && [ "$AUFS" == yes ]; then - # attach to specifics tag or branch - local aufstag - aufstag=$(echo "${version}" | cut -f 1-2 -d ".") -@@ -240,8 +240,8 @@ function prepare_extra_kernel_drivers() { - fi - - # Wireless drivers for Xradio XR819 chipsets -- if linux-version compare "${version}" ge 4.19 && [[ "$LINUXFAMILY" == sunxi* ]] && [[ "$EXTRAWIFI" == yes ]]; then -- # @TODO: fasthash for this is... ? remote git hash? -+ if linux-version compare "${version}" ge 4.19 && linux-version compare "${version}" le 5.19 && -+ [[ "$LINUXFAMILY" == sunxi* ]] && [[ "$EXTRAWIFI" == yes ]]; then - - display_alert "Adding" "Wireless drivers for Xradio XR819 chipsets" "info" - -diff --git a/lib/functions/general/cleaning.sh b/lib/functions/general/cleaning.sh -index 72a6f4b1f..833ac4ce7 100644 ---- a/lib/functions/general/cleaning.sh -+++ b/lib/functions/general/cleaning.sh -@@ -65,7 +65,7 @@ general_cleaning() { - ;; - - oldcache) # remove old `cache/rootfs` except for the newest 8 files -- if [[ -d "${SRC}"/cache/rootfs && $(ls -1 "${SRC}"/cache/rootfs/*.lz4 2> /dev/null | wc -l) -gt "${ROOTFS_CACHE_MAX}" ]]; then -+ if [[ -d "${SRC}"/cache/rootfs && $(ls -1 "${SRC}"/cache/rootfs/*.zst* 2> /dev/null | wc -l) -gt "${ROOTFS_CACHE_MAX}" ]]; then - display_alert "Cleaning" "rootfs cache (old)" "info" - ( - cd "${SRC}"/cache/rootfs -diff --git a/lib/functions/general/downloads.sh b/lib/functions/general/downloads.sh -index 97afb81a4..5bbd161fe 100644 ---- a/lib/functions/general/downloads.sh -+++ b/lib/functions/general/downloads.sh -@@ -4,7 +4,7 @@ function webseed() { - unset text - local CCODE=$(curl -s redirect.armbian.com/geoip | jq '.continent.code' -r) - -- if [[ "$2" == "rootfs" ]]; then -+ if [[ "$2" == rootfs* ]]; then - WEBSEED=($(curl -s ${1}mirrors | jq -r '.'${CCODE}' | .[] | values')) - else - WEBSEED=($(curl -s https://redirect.armbian.com/mirrors | jq -r '.'${CCODE}' | .[] | values')) -@@ -67,6 +67,12 @@ function download_and_verify_internal() { - return 0 - fi - -+ # rootfs has its own infra -+ if [[ "${remotedir}" == "_rootfs" ]]; then -+ local server="https://cache.armbian.com/" -+ remotedir="rootfs/$ROOTFSCACHE_VERSION" -+ fi -+ - # switch to china mirror if US timeouts - timeout 10 curl --head --fail --silent "${server}${remotedir}/${filename}" - if [[ $? -ne 7 && $? -ne 22 && $? -ne 0 ]]; then -@@ -124,7 +130,7 @@ function download_and_verify_internal() { - if [[ ! -f "${localdir}/${filename}.complete" ]]; then - if [[ ! $(timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename} 2>&1 > /dev/null) ]]; then - display_alert "downloading from $(echo $server | cut -d'/' -f3 | cut -d':' -f1) using http(s) network" "$filename" -- run_host_command_logged aria2c --download-result=hide --rpc-save-upload-metadata=false --console-log-level=error \ -+ run_host_command_logged aria2c --allow-overwrite=true --download-result=hide --rpc-save-upload-metadata=false --console-log-level=error \ - --dht-file-path="${SRC}"/cache/.aria2/dht.dat --disable-ipv6=${DISABLE_IPV6} --summary-interval=0 --auto-file-renaming=false --dir="${localdir}" ${server}${remotedir}/${filename} $(webseed "${remotedir}/${filename}") -o "${filename}" - # mark complete - [[ $? -eq 0 ]] && touch "${localdir}/${filename}.complete" && echo "" -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 471050a30..2c584ff06 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -18,7 +18,7 @@ function prepare_partitions() { - - # array copying in old bash versions is tricky, so having filesystems as arrays - # with attributes as keys is not a good idea -- declare -A parttype mkopts mkfs mountopts -+ declare -A parttype mkopts mkopts_label mkfs mountopts - - parttype[ext4]=ext4 - parttype[ext2]=ext2 -@@ -35,13 +35,21 @@ function prepare_partitions() { - if [[ $HOSTRELEASE =~ buster|bullseye|focal|jammy|sid ]]; then - mkopts[ext4]="-q -m 2 -O ^64bit,^metadata_csum -N $((128 * node_number))" - fi -- mkopts[fat]='-n BOOT' -+ # mkopts[fat] is empty - mkopts[ext2]='-q' - # mkopts[f2fs] is empty - mkopts[btrfs]='-m dup' - # mkopts[xfs] is empty - # mkopts[nfs] is empty - -+ mkopts_label[ext4]='-L ' -+ mkopts_label[ext2]='-L ' -+ mkopts_label[fat]='-n ' -+ mkopts_label[f2fs]='-l ' -+ mkopts_label[btrfs]='-L ' -+ mkopts_label[xfs]='-L ' -+ # mkopts_label[nfs] is empty -+ - mkfs[ext4]=ext4 - mkfs[ext2]=ext2 - mkfs[fat]=vfat -@@ -65,6 +73,8 @@ function prepare_partitions() { - BIOSSIZE=${BIOSSIZE:-0} - UEFI_MOUNT_POINT=${UEFI_MOUNT_POINT:-/boot/efi} - UEFI_FS_LABEL="${UEFI_FS_LABEL:-ARMBIEFI}" # Should be always uppercase -+ ROOT_FS_LABEL="${ROOT_FS_LABEL:-armbian_root}" -+ BOOT_FS_LABEL="${BOOT_FS_LABEL:-armbian_boot}" - - call_extension_method "pre_prepare_partitions" "prepare_partitions_custom" <<- 'PRE_PREPARE_PARTITIONS' - *allow custom options for mkfs* -@@ -230,7 +240,7 @@ function prepare_partitions() { - - check_loop_device "$LOOP" - -- run_host_command_logged losetup -P $LOOP ${SDCARD}.raw -+ run_host_command_logged losetup $LOOP ${SDCARD}.raw # @TODO: had a '-P- here, what was it? - - # loop device was grabbed here, unlock - flock -u $FD -@@ -254,7 +264,7 @@ function prepare_partitions() { - - check_loop_device "$rootdevice" - display_alert "Creating rootfs" "$ROOTFS_TYPE on $rootdevice" -- run_host_command_logged mkfs.${mkfs[$ROOTFS_TYPE]} "${mkopts[$ROOTFS_TYPE]}" "$rootdevice" -+ run_host_command_logged mkfs.${mkfs[$ROOTFS_TYPE]} ${mkopts[$ROOTFS_TYPE]} ${mkopts_label[$ROOTFS_TYPE]:+${mkopts_label[$ROOTFS_TYPE]}"$ROOT_FS_LABEL"} "${rootdevice}" - [[ $ROOTFS_TYPE == ext4 ]] && run_host_command_logged tune2fs -o journal_data_writeback "$rootdevice" - if [[ $ROOTFS_TYPE == btrfs && $BTRFS_COMPRESSION != none ]]; then - local fscreateopt="-o compress-force=${BTRFS_COMPRESSION}" -@@ -275,7 +285,7 @@ function prepare_partitions() { - if [[ -n $bootpart ]]; then - display_alert "Creating /boot" "$bootfs on ${LOOP}p${bootpart}" - check_loop_device "${LOOP}p${bootpart}" -- run_host_command_logged mkfs.${mkfs[$bootfs]} ${mkopts[$bootfs]} ${LOOP}p${bootpart} 2>&1 -+ run_host_command_logged mkfs.${mkfs[$bootfs]} ${mkopts[$bootfs]} ${mkopts_label[$bootfs]:+${mkopts_label[$bootfs]}"$BOOT_FS_LABEL"} ${LOOP}p${bootpart} - mkdir -p $MOUNT/boot/ - run_host_command_logged mount ${LOOP}p${bootpart} $MOUNT/boot/ - echo "UUID=$(blkid -s UUID -o value ${LOOP}p${bootpart}) /boot ${mkfs[$bootfs]} defaults${mountopts[$bootfs]} 0 2" >> $SDCARD/etc/fstab -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index 590ca1f84..dc1c08c16 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -9,7 +9,7 @@ - # https://github.com/armbian/build/ - - function build_rootfs_and_image() { -- display_alert "Starting rootfs and image building process for" "${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL}" "info" -+ display_alert "Checking for rootfs cache" "$(echo "${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL}" | tr -s " ")" "info" - - [[ $ROOTFS_TYPE != ext4 ]] && display_alert "Assuming ${BOARD} ${BRANCH} kernel supports ${ROOTFS_TYPE}" "" "wrn" - -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index 635631232..4ebe8f03f 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -1,61 +1,48 @@ - # this gets from cache or produces a new rootfs, and leaves a mounted chroot "$SDCARD" at the end. - get_or_create_rootfs_cache_chroot_sdcard() { -- if [[ "$ROOT_FS_CREATE_ONLY" == "force" ]]; then -+ if [[ "$ROOT_FS_CREATE_ONLY" == "yes" ]]; then - local cycles=1 - else -- local cycles=2 -+ local cycles=3 - fi - -+ # @TODO: this was moved from configuration to this stage, that way configuration can be offline - # if variable not provided, check which is current version in the cache storage in GitHub. - if [[ -z "${ROOTFSCACHE_VERSION}" ]]; then -- display_alert "ROOTFSCACHE_VERSION not set, getting remotely" "https://github.com/armbian/mirror/releases/download/rootfs/rootfscache.version" "debug" -- ROOTFSCACHE_VERSION=$(wget --tries=10 -O - -o /dev/null https://github.com/armbian/mirror/releases/download/rootfs/rootfscache.version || true) -- ROOTFSCACHE_VERSION=${ROOTFSCACHE_VERSION:-"0"} -+ display_alert "ROOTFSCACHE_VERSION not set, getting remotely" "Github API and armbian/mirror " "debug" -+ ROOTFSCACHE_VERSION=$(curl https://api.github.com/repos/armbian/cache/releases/latest -s --fail | jq .tag_name -r || true) -+ # anonymous API access is very limited which is why we need a fallback -+ ROOTFSCACHE_VERSION=${ROOTFSCACHE_VERSION:-$(curl -L --silent https://cache.armbian.com/rootfs/latest --fail)} - fi - -+ INITIAL_ROOTFSCACHE_VERSION=$ROOTFSCACHE_VERSION -+ - # seek last cache, proceed to previous otherwise build it - for ((n = 0; n < cycles; n++)); do - -- FORCED_MONTH_OFFSET=${n} -- -- local packages_hash -- packages_hash=$(get_package_list_hash "$(date -d "$D -${FORCED_MONTH_OFFSET} month" +"%Y-%m-module$ROOTFSCACHE_VERSION" | sed 's/^0*//')") -+ ROOTFSCACHE_VERSION=$(expr $INITIAL_ROOTFSCACHE_VERSION - $n) -+ ROOTFSCACHE_VERSION=$(printf "%04d\n" ${ROOTFSCACHE_VERSION}) - -+ local packages_hash=$(get_package_list_hash "$ROOTFSCACHE_VERSION") - local cache_type="cli" -- [[ ${BUILD_DESKTOP} == yes ]] && cache_type="xfce-desktop" -- [[ -n ${DESKTOP_ENVIRONMENT} ]] && cache_type="${DESKTOP_ENVIRONMENT}" -- [[ ${BUILD_MINIMAL} == yes ]] && cache_type="minimal" -- -- local cache_name=${RELEASE}-${cache_type}-${ARCH}.${packages_hash}.tar.zst -+ [[ ${BUILD_DESKTOP} == yes ]] && local cache_type="xfce-desktop" -+ [[ -n ${DESKTOP_ENVIRONMENT} ]] && local cache_type="${DESKTOP_ENVIRONMENT}" -+ [[ ${BUILD_MINIMAL} == yes ]] && local cache_type="minimal" -+ local cache_name=${RELEASE}-${cache_type}-${ARCH}.$packages_hash.tar.zst - local cache_fname=${SRC}/cache/rootfs/${cache_name} - local display_name=${RELEASE}-${cache_type}-${ARCH}.${packages_hash:0:3}...${packages_hash:29}.tar.zst - -- [[ "$ROOT_FS_CREATE_ONLY" == force ]] && break -+ [[ "$ROOT_FS_CREATE_ONLY" == yes ]] && break - - if [[ -f ${cache_fname} && -f ${cache_fname}.aria2 ]]; then -- rm "${cache_fname}"* -+ rm ${cache_fname}* - display_alert "Partially downloaded file. Re-start." - download_and_verify "_rootfs" "$cache_name" - fi - - display_alert "Checking local cache" "$display_name" "info" - -- if [[ -f ${cache_fname} && -n "$ROOT_FS_CREATE_ONLY" ]]; then -- echo "$cache_fname" > $cache_fname.current -- display_alert "Checking cache integrity" "$display_name" "info" -- -- sudo zstd -tqq "${cache_fname}" || { -- rm -f "${cache_fname}" -- exit_with_error "Cache ${cache_fname} is corrupted and was deleted. Please restart!" -- } -- -- # sign if signature is missing -- if [[ -n "${GPG_PASS}" && "${SUDO_USER}" && ! -f ${cache_fname}.asc ]]; then -- [[ -n ${SUDO_USER} ]] && sudo chown -R ${SUDO_USER}:${SUDO_USER} "${DEST}"/images/ -- echo "${GPG_PASS}" | sudo -H -u ${SUDO_USER} bash -c "gpg --passphrase-fd 0 --armor --detach-sign --pinentry-mode loopback --batch --yes ${cache_fname}" || exit 1 -- fi -- break -- elif [[ -f ${cache_fname} ]]; then -+ if [[ -f $cache_fname ]]; then - break - else - display_alert "searching on servers" -@@ -69,17 +56,17 @@ get_or_create_rootfs_cache_chroot_sdcard() { - - done - -- if [[ -f $cache_fname && ! -f $cache_fname.aria2 ]]; then -+ # check if cache exists and we want to make it -+ if [[ -f ${cache_fname} && "$ROOT_FS_CREATE_ONLY" == "yes" ]]; then -+ display_alert "Checking cache integrity" "$display_name" "info" -+ zstd -tqq ${cache_fname} || { -+ rm $cache_fname -+ exit_with_error "Cache $cache_fname is corrupted and was deleted. Please restart!" -+ } -+ fi - -- # speed up checking -- if [[ -n "$ROOT_FS_CREATE_ONLY" ]]; then -- echo "$cache_fname" > $cache_fname.current -- umount --lazy "$SDCARD" -- rm -rf $SDCARD -- # remove exit trap -- remove_all_trap_handlers INT TERM EXIT -- exit -- fi -+ # if aria2 file exists download didn't succeeded -+ if [[ -f $cache_fname && ! -f $cache_fname.aria2 ]]; then - - local date_diff=$((($(date +%s) - $(stat -c %Y $cache_fname)) / 86400)) - display_alert "Extracting $display_name" "$date_diff days old" "info" -@@ -89,7 +76,7 @@ get_or_create_rootfs_cache_chroot_sdcard() { - echo "nameserver $NAMESERVER" >> $SDCARD/etc/resolv.conf - create_sources_list "$RELEASE" "$SDCARD/" - else -- display_alert "... remote not found" "Creating new rootfs cache for $RELEASE" "info" -+ display_alert "Creating new rootfs cache for" "$RELEASE" "info" - - create_new_rootfs_cache - -@@ -99,7 +86,7 @@ get_or_create_rootfs_cache_chroot_sdcard() { - fi - - # used for internal purposes. Faster rootfs cache rebuilding -- if [[ -n "$ROOT_FS_CREATE_ONLY" ]]; then -+ if [[ "$ROOT_FS_CREATE_ONLY" == "yes" ]]; then - umount --lazy "$SDCARD" - rm -rf $SDCARD - # remove exit trap -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index cd3462409..9844d0b39 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -174,7 +174,7 @@ function install_distribution_agnostic() { - fi - else - -- if [[ "${BOOTCONFIG}" != "none" ]]; then -+ if [[ -n "${BOOTSCRIPT}" ]]; then # @TODO: this used to check BOOTCONFIG not being 'none' - if [ -f "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" ]; then - run_host_command_logged cp -pv "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" "${SDCARD}/boot/${bootscript_dst}" - else - -From d08b0971d93456143e2648b94341fedc5a612049 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 13 Aug 2022 13:24:53 +0200 -Subject: [PATCH] armbian-next: manual merge (27) of `sources/families` changes - between revisions 9c52562176390624d33c93634e63a8f91cc0815b and - af6ceee6c55bd4726139fb8b1ad77641d385515a - ---- - config/sources/families/bcm2711.conf | 4 +-- - config/sources/families/imx6.conf | 4 +-- - config/sources/families/include/meson64_common.inc | 4 +-- - config/sources/families/include/meson_common.inc | 10 +++++++- - .../sources/families/include/rockchip64_common.inc | 30 +++++++++++++++++++--- - config/sources/families/include/sunxi64_common.inc | 6 ++--- - config/sources/families/include/sunxi_common.inc | 6 ++--- - config/sources/families/include/uefi_common.inc | 4 +-- - config/sources/families/jethub.conf | 13 +++++----- - config/sources/families/media.conf | 20 ++++++++++++++- - config/sources/families/mvebu64.conf | 4 +-- - config/sources/families/rk322x.conf | 4 +-- - config/sources/families/rockchip-rk3588.conf | 6 ++--- - config/sources/families/rockchip.conf | 4 +-- - 14 files changed, 83 insertions(+), 36 deletions(-) - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index 5ae60578a..d031d7e50 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -28,8 +28,8 @@ case "${BRANCH}" in - edge) - export RASPI_DISTRO_KERNEL=no - export KERNELSOURCE='https://github.com/raspberrypi/linux' -- export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. For mainline caching. -- export KERNELBRANCH="branch:rpi-5.18.y" -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. For mainline caching. -+ export KERNELBRANCH="branch:rpi-5.19.y" - export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" - export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" - ;; -diff --git a/config/sources/families/imx6.conf b/config/sources/families/imx6.conf -index 9a7bd9331..843c824f8 100644 ---- a/config/sources/families/imx6.conf -+++ b/config/sources/families/imx6.conf -@@ -16,8 +16,8 @@ case $BRANCH in - - edge) - -- export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.18.y' -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.19.y' - - ;; - -diff --git a/config/sources/families/include/meson64_common.inc b/config/sources/families/include/meson64_common.inc -index d902756e7..2e69f58de 100644 ---- a/config/sources/families/include/meson64_common.inc -+++ b/config/sources/families/include/meson64_common.inc -@@ -36,8 +36,8 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. For mainline caching. -- KERNELBRANCH='branch:linux-5.17.y' -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. For mainline caching. -+ KERNELBRANCH='branch:linux-5.19.y' - KERNELPATCHDIR='meson64-edge' - ;; - -diff --git a/config/sources/families/include/meson_common.inc b/config/sources/families/include/meson_common.inc -index 5b53ff90c..6600b199a 100644 ---- a/config/sources/families/include/meson_common.inc -+++ b/config/sources/families/include/meson_common.inc -@@ -68,5 +68,13 @@ family_tweaks() { - } - - family_tweaks_bsp() { -- : -+ mkdir -p "$destination/etc/X11/xorg.conf.d" -+ cat <<- EOF > "$destination/etc/X11/xorg.conf.d/02-driver.conf" -+ Section "OutputClass" -+ Identifier "Amlogic" -+ MatchDriver "meson" -+ Driver "modesetting" -+ Option "PrimaryGPU" "true" -+ EndSection -+ EOF - } -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index 44d4d22dc..e31b81341 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -88,6 +88,12 @@ elif [[ $BOOT_SOC == rk3568 ]]; then - DDR_BLOB="${DDR_BLOB:=rk35/rk3568_ddr_1560MHz_v1.10.bin}" - BL31_BLOB='rk35/rk3568_bl31_v1.28.elf' - -+elif [[ $BOOT_SOC == rk3588 ]]; then -+ -+ BOOT_SCENARIO="${BOOT_SCENARIO:=spl-blobs}" -+ DDR_BLOB="${DDR_BLOB:=rk35/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.07.bin}" -+ BL31_BLOB='rk35/rk3588_bl31_v1.25.elf' -+ - elif [[ $BOARD == rockpi-s ]]; then - - BOOT_SCENARIO="${BOOT_SCENARIO:=only-blobs}" -@@ -117,8 +123,8 @@ case $BRANCH in - edge) - - KERNELPATCHDIR='rockchip64-'$BRANCH -- export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.18.y" -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.19.y" - LINUXFAMILY=rockchip64 - LINUXCONFIG='linux-rockchip64-'$BRANCH - -@@ -162,7 +168,7 @@ prepare_boot_configuration() { - - if [[ $BOOT_SUPPORT_SPI == yes ]]; then - -- if [[ $BOARD != "rock-3a" ]]; then -+ if [[ $BOARD != "rock-3a" ]] && [[ $BOARD != "rock-5b" ]]; then - UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB tpl/u-boot-tpl.bin spl/u-boot-spl.bin u-boot.itb ${UBOOT_TARGET_MAP} rkspi_loader.img" - else - UBOOT_TARGET_MAP="${UBOOT_TARGET_MAP} rkspi_loader.img" -@@ -193,7 +199,7 @@ uboot_custom_postprocess() { - fi - - if [[ $BOOT_SUPPORT_SPI == yes ]]; then -- if [[ $BOARD == "rock-3a" ]]; then -+ if [[ $BOARD == "rock-3a" ]] || [[ $BOARD == "rock-5b" ]]; then - dd if=/dev/zero of=rkspi_loader.img bs=1M count=0 seek=16 - /sbin/parted -s rkspi_loader.img mklabel gpt - /sbin/parted -s rkspi_loader.img unit s mkpart idbloader 64 7167 -@@ -318,6 +324,22 @@ family_tweaks() { - - fi - -+ if [[ $BOARD == jetson-nano ]]; then -+ install -m 755 $SRC/packages/blobs/jetson/jetson.sh $SDCARD/etc/initramfs-tools/hooks/jetson.sh -+ if [[ $BRANCH == legacy ]]; then -+ install -m 755 $SRC/packages/blobs/jetson/tegra21x_xusb_firmware $SDCARD/lib/firmware/tegra21x_xusb_firmware -+ install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrahda $SDCARD/etc/asound.conf.tegrahda -+ install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrahda $SDCARD/etc/asound.conf -+ install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrasndt210ref $SDCARD/etc/asound.conf.tegrasndt210ref -+ install -m 755 $SRC/packages/blobs/jetson/tegra-hda.conf $SDCARD/usr/share/alsa/cards/tegra-hda.conf -+ install -m 755 $SRC/packages/blobs/jetson/tegra-snd-t210r.conf $SDCARD/usr/share/alsa/cards/tegra-snd-t210r.conf -+ sed -e 's/exit 0//g' -i $SDCARD/etc/rc.local -+ echo "su -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'" >> $SDCARD/etc/rc.local -+ echo "exit 0" >> $SDCARD/etc/rc.local -+ else -+ cp -R $SRC/packages/blobs/jetson/firmware/* $SDCARD/lib/firmware/ -+ fi -+ fi - } - - family_tweaks_bsp() { -diff --git a/config/sources/families/include/sunxi64_common.inc b/config/sources/families/include/sunxi64_common.inc -index 299d16253..cb49b4ef0 100644 ---- a/config/sources/families/include/sunxi64_common.inc -+++ b/config/sources/families/include/sunxi64_common.inc -@@ -26,9 +26,9 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -- export KERNELBRANCH="branch:linux-5.18.y" -- export KERNELBRANCH_MEGOUS="branch:orange-pi-5.18" -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. -+ export KERNELBRANCH="branch:linux-5.19.y" -+ export KERNELBRANCH_MEGOUS="branch:orange-pi-5.19" - ;; - esac - -diff --git a/config/sources/families/include/sunxi_common.inc b/config/sources/families/include/sunxi_common.inc -index 9d120c711..6660ec812 100644 ---- a/config/sources/families/include/sunxi_common.inc -+++ b/config/sources/families/include/sunxi_common.inc -@@ -27,9 +27,9 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -- export KERNELBRANCH="branch:linux-5.18.y" -- export KERNELBRANCH_MEGOUS="branch:orange-pi-5.18" -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. -+ export KERNELBRANCH="branch:linux-5.19.y" -+ export KERNELBRANCH_MEGOUS="branch:orange-pi-5.19" - ;; - esac - -diff --git a/config/sources/families/include/uefi_common.inc b/config/sources/families/include/uefi_common.inc -index 699d09e4a..9e8c9deb1 100644 ---- a/config/sources/families/include/uefi_common.inc -+++ b/config/sources/families/include/uefi_common.inc -@@ -22,8 +22,8 @@ case "${BRANCH}" in - edge) - export DISTRO_GENERIC_KERNEL=no - export LINUXCONFIG="linux-uefi-${LINUXFAMILY}-${BRANCH}" -- export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. For mainline caching. -- export KERNELBRANCH="branch:linux-5.18.y" # Branch or tag to build from. It should match MAJOR_MINOR -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. For mainline caching. -+ export KERNELBRANCH="branch:linux-5.19.y" # Branch or tag to build from. It should match MAJOR_MINOR - export KERNELPATCHDIR="uefi-${LINUXFAMILY}-${BRANCH}" # Might be empty. - ;; - esac -diff --git a/config/sources/families/jethub.conf b/config/sources/families/jethub.conf -index 16481c176..382f2d796 100644 ---- a/config/sources/families/jethub.conf -+++ b/config/sources/families/jethub.conf -@@ -153,24 +153,24 @@ family_tweaks() { - comment_default_rsyslog_rules || display_alert "Unable to comment default rsyslog rules" "${BOARD}" "wrn" - - # Hardware init -- chroot "${SDCARD}" /bin/bash -c "systemctl --no-reload enable jethub-initer.service >/dev/null 2>&1" -+ chroot_sdcard systemctl --no-reload enable jethub-initer.service - - # AR-1098 userland fix for net interface does not up at boot -- chroot "${SDCARD}" /bin/bash -c "systemctl --no-reload enable jethub-ethreset.service >/dev/null 2>&1" -+ chroot_sdcard systemctl --no-reload enable jethub-ethreset.service - - # pip3 packages -- chroot "${SDCARD}" /bin/bash -c "pip3 install pyserial intelhex python-magic" >> "${DEST}"/debug/install.log 2>&1 -+ chroot_sdcard pip3 install pyserial intelhex python-magic - - # Hostapd -- chroot "${SDCARD}" /bin/bash -c "systemctl --no-reload disable hostapd.service >/dev/null 2>&1" -+ chroot_sdcard systemctl --no-reload disable hostapd.service - - if [[ "$BOARD" == jethubj80 ]]; then - # Bluetooth -- chroot "${SDCARD}" /bin/bash -c "systemctl --no-reload enable jethub-rtk-hciattach.service >/dev/null 2>&1" -+ chroot_sdcard systemctl --no-reload enable jethub-rtk-hciattach.service - fi - - display_alert "Adding JetHome repository and authentication key" "/etc/apt/sources.list.d/jethome.list" "info" -- cp "${SRC}"/packages/bsp/jethub/jethome.gpg "${SDCARD}/etc/apt/trusted.gpg.d/" -+ run_host_command_logged cp -pv "${SRC}"/packages/bsp/jethub/jethome.gpg "${SDCARD}/etc/apt/trusted.gpg.d/" - - echo "deb http://repo.jethome.ru"$([[ $BETA == yes ]] && echo "/beta")" ${RELEASE} jethome-${RELEASE}" \ - >> "${SDCARD}"/etc/apt/sources.list.d/jethome.list -@@ -189,7 +189,6 @@ family_tweaks_bsp() { - cp "$SRC/packages/bsp/jethub/jethub-initer.service" "$destination/lib/systemd/system/" || exit_with_error "Unable to copy jethub-initer.service" - cp "$SRC/packages/bsp/jethub/${BOARD}/jethub-init" "$destination/usr/lib/armbian/" || exit_with_error "Unable to copy jethub-init" - -- - # AR-1098 userland fix for net interface does not up at boot - cp "$SRC/packages/bsp/jethub/jethub-ethreset.service" "$destination/lib/systemd/system/" || exit_with_error "Unable to copy jethub-ethreset.service" - cp "$SRC/packages/bsp/jethub/jethub-ethreset" "$destination/usr/lib/armbian/" || exit_with_error "Unable to copy jethub-ethreset" -diff --git a/config/sources/families/media.conf b/config/sources/families/media.conf -index 46ae3c100..0355128ca 100644 ---- a/config/sources/families/media.conf -+++ b/config/sources/families/media.conf -@@ -27,6 +27,18 @@ case $BRANCH in - LINUXCONFIG='linux-station-p2-'$BRANCH - EXTRAWIFI="no" - WIREGUARD="no" -+ elif [[ $BOARD == jetson-nano ]]; then -+ KERNELDIR='linux-nano' -+ KERNELSOURCE='https://github.com/150balbes/Jetson-Nano' -+ export KERNEL_MAJOR_MINOR="4.9" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:4.9.201' -+ KERNELPATCHDIR='jetson-nano-'$BRANCH -+ LINUXFAMILY=jetson-nano -+ LINUXCONFIG='linux-jetson-nano-'$BRANCH -+ EXTRAWIFI="no" -+ BOOT_FDT_FILE="none" -+ SRC_CMDLINE='console=ttyS0,115200n8 console=tty0 tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb debug_uartport=lsport,4 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1075 core_edp_ma=4000 tegra_fbmem=0x800000@0x92ca9000 is_hdmi_initialised=1 earlycon=uart8250,mmio32,0x70006000 fbcon=map:0' -+ MODULES_INITRD="jetson-nano-legacy" - else - if [[ $BOARD == nanopct4 ]]; then - KERNELSOURCE='https://github.com/friendlyarm/kernel-rockchip' -@@ -57,6 +69,9 @@ case $BRANCH in - else - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media -+ if [[ $BOARD == jetson-nano ]]; then -+ MODULES_INITRD="jetson-nano-current" -+ fi - fi - - ;; -@@ -64,10 +79,13 @@ case $BRANCH in - edge) - export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. - KERNELPATCHDIR='media-'$BRANCH -- KERNELBRANCH="tag:v5.19-rc6" -+ KERNELBRANCH="branch:linux-5.19.y" - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH - SKIP_BOOTSPLASH="yes" -+ if [[ $BOARD == jetson-nano ]]; then -+ MODULES_INITRD="jetson-nano-edge" -+ fi - ;; - esac - -diff --git a/config/sources/families/mvebu64.conf b/config/sources/families/mvebu64.conf -index 283761378..3c7ab8cf8 100644 ---- a/config/sources/families/mvebu64.conf -+++ b/config/sources/families/mvebu64.conf -@@ -49,8 +49,8 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.18.y' -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.19.y' - ;; - - esac -diff --git a/config/sources/families/rk322x.conf b/config/sources/families/rk322x.conf -index 3c62bbab0..1023d79d0 100644 ---- a/config/sources/families/rk322x.conf -+++ b/config/sources/families/rk322x.conf -@@ -27,8 +27,8 @@ case $BRANCH in - - edge) - -- export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.18.y' -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.19.y' - - ;; - -diff --git a/config/sources/families/rockchip-rk3588.conf b/config/sources/families/rockchip-rk3588.conf -index d794a5626..b58680299 100644 ---- a/config/sources/families/rockchip-rk3588.conf -+++ b/config/sources/families/rockchip-rk3588.conf -@@ -14,16 +14,16 @@ case $BRANCH in - BOOTDIR='u-boot-rockchip64' - KERNELDIR='linux-rockchip64' - KERNELSOURCE='https://github.com/radxa/kernel' -+ export KERNEL_MAJOR_MINOR="5.10" # Major and minor versions of this kernel. - KERNELBRANCH='branch:stable-5.10-rock5' - KERNELPATCHDIR='rockchip-rk3588-legacy' - -- ;; -+ ;; - - esac - - prepare_boot_configuration - --family_tweaks_bsp() --{ -+family_tweaks_bsp() { - : - } -diff --git a/config/sources/families/rockchip.conf b/config/sources/families/rockchip.conf -index c971cba34..100210070 100644 ---- a/config/sources/families/rockchip.conf -+++ b/config/sources/families/rockchip.conf -@@ -33,8 +33,8 @@ case $BRANCH in - - edge) - -- export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.18.y' -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.19.y' - - ;; - - -From 2306f2c90751a293dfed429819496b1c7cce3ab0 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 29 Jun 2022 10:38:41 +0200 -Subject: [PATCH] armbian-next: move `ROOTFSCACHE_VERSION` resolution from - GitHub from `main-config` down to `create-cache` - -- this way config does not depend on remote... ---- - lib/functions/configuration/main-config.sh | 7 ------- - lib/functions/rootfs/create-cache.sh | 7 +++++++ - 2 files changed, 7 insertions(+), 7 deletions(-) - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 87faa24e0..cdae96d38 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -33,13 +33,6 @@ function do_main_configuration() { - [[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board - cd "${SRC}" || exit - -- # if variable not provided, check which is current version in the cache storage -- if [[ -z "${ROOTFSCACHE_VERSION}" ]]; then -- display_alert "ROOTFSCACHE_VERSION not set, getting remotely" "https://github.com/armbian/mirror/releases/download/rootfs/rootfscache.version" "warn" -- ROOTFSCACHE_VERSION=$(wget --tries=10 -O - -o /dev/null https://github.com/armbian/mirror/releases/download/rootfs/rootfscache.version || true) -- ROOTFSCACHE_VERSION=${ROOTFSCACHE_VERSION:-"0"} -- fi -- - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 - BUILD_REPOSITORY_URL=$(git remote get-url "$(git remote | grep origin)") - BUILD_REPOSITORY_COMMIT=$(git describe --match=d_e_a_d_b_e_e_f --always --dirty) -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index 8f060c88a..635631232 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -6,6 +6,13 @@ get_or_create_rootfs_cache_chroot_sdcard() { - local cycles=2 - fi - -+ # if variable not provided, check which is current version in the cache storage in GitHub. -+ if [[ -z "${ROOTFSCACHE_VERSION}" ]]; then -+ display_alert "ROOTFSCACHE_VERSION not set, getting remotely" "https://github.com/armbian/mirror/releases/download/rootfs/rootfscache.version" "debug" -+ ROOTFSCACHE_VERSION=$(wget --tries=10 -O - -o /dev/null https://github.com/armbian/mirror/releases/download/rootfs/rootfscache.version || true) -+ ROOTFSCACHE_VERSION=${ROOTFSCACHE_VERSION:-"0"} -+ fi -+ - # seek last cache, proceed to previous otherwise build it - for ((n = 0; n < cycles; n++)); do - - -From dfcfcbc5e08b81d294170bb901900f7772abc0ae Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 29 Jun 2022 13:26:06 +0200 -Subject: [PATCH] armbian-next: move `ARMBIAN_MIRROR` selection (network) from - `main-config` to `prepare-host` - -- this way CONFIG_DEFS_ONLY can run without touching the network ---- - lib/functions/configuration/main-config.sh | 19 ------------------- - lib/functions/host/prepare-host.sh | 20 ++++++++++++++++++++ - 2 files changed, 20 insertions(+), 19 deletions(-) - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index b8369c436..87faa24e0 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -345,25 +345,6 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - fi - fi - -- # don't use mirrors that throws garbage on 404 -- if [[ -z ${ARMBIAN_MIRROR} && "${SKIP_ARMBIAN_REPO}" != "yes" ]]; then -- declare -i armbian_mirror_tries=1 -- while true; do -- display_alert "Obtaining Armbian mirror" "via https://redirect.armbian.com" "debug" -- ARMBIAN_MIRROR=$(wget -SO- -T 1 -t 1 https://redirect.armbian.com 2>&1 | egrep -i "Location" | awk '{print $2}' | head -1) -- if [[ ${ARMBIAN_MIRROR} != *armbian.hosthatch* ]]; then # @TODO: hosthatch is not good enough. Why? -- display_alert "Obtained Armbian mirror OK" "${ARMBIAN_MIRROR}" "debug" -- break -- else -- display_alert "Obtained Armbian mirror is invalid, retrying..." "${ARMBIAN_MIRROR}" "debug" -- fi -- armbian_mirror_tries=$((armbian_mirror_tries + 1)) -- if [[ $armbian_mirror_tries -ge 5 ]]; then -- exit_with_error "Unable to obtain ARMBIAN_MIRROR after ${armbian_mirror_tries} tries. Please set ARMBIAN_MIRROR to a valid mirror manually, or avoid the automatic mirror selection by setting SKIP_ARMBIAN_REPO=yes" -- fi -- done -- fi -- - # Control aria2c's usage of ipv6. - [[ -z $DISABLE_IPV6 ]] && DISABLE_IPV6="true" - -diff --git a/lib/functions/host/prepare-host.sh b/lib/functions/host/prepare-host.sh -index 99fbbf787..c91c50c25 100644 ---- a/lib/functions/host/prepare-host.sh -+++ b/lib/functions/host/prepare-host.sh -@@ -25,6 +25,26 @@ prepare_host() { - - export LC_ALL="en_US.UTF-8" - -+ # don't use mirrors that throws garbage on 404 -+ if [[ -z ${ARMBIAN_MIRROR} && "${SKIP_ARMBIAN_REPO}" != "yes" ]]; then -+ display_alert "Determining best Armbian mirror to use" "via redirector" "debug" -+ declare -i armbian_mirror_tries=1 -+ while true; do -+ display_alert "Obtaining Armbian mirror" "via https://redirect.armbian.com" "debug" -+ ARMBIAN_MIRROR=$(wget -SO- -T 1 -t 1 https://redirect.armbian.com 2>&1 | egrep -i "Location" | awk '{print $2}' | head -1) -+ if [[ ${ARMBIAN_MIRROR} != *armbian.hosthatch* ]]; then # @TODO: hosthatch is not good enough. Why? -+ display_alert "Obtained Armbian mirror OK" "${ARMBIAN_MIRROR}" "debug" -+ break -+ else -+ display_alert "Obtained Armbian mirror is invalid, retrying..." "${ARMBIAN_MIRROR}" "debug" -+ fi -+ armbian_mirror_tries=$((armbian_mirror_tries + 1)) -+ if [[ $armbian_mirror_tries -ge 5 ]]; then -+ exit_with_error "Unable to obtain ARMBIAN_MIRROR after ${armbian_mirror_tries} tries. Please set ARMBIAN_MIRROR to a valid mirror manually, or avoid the automatic mirror selection by setting SKIP_ARMBIAN_REPO=yes" -+ fi -+ done -+ fi -+ - # packages list for host - # NOTE: please sync any changes here with the Dockerfile and Vagrantfile - declare -a host_dependencies=( - -From 8f2922f37b7ccc5c790c77d96bcc25ba5f13118b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 18 Jul 2022 15:37:15 +0200 -Subject: [PATCH] armbian-next: manual merge (26) of MD5-checking via debsums - (3955) re-imagined - -- @TODO make sure ---- - lib/functions/rootfs/create-cache.sh | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index 2a4e42d13..8f060c88a 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -221,6 +221,12 @@ function create_new_rootfs_cache() { - chroot_sdcard_apt_get install ${apt_desktop_install_flags} $PACKAGE_LIST_DESKTOP - fi - -+ # stage: check md5 sum of installed packages. Just in case. -+ display_alert "Check MD5 sum of installed packages" "info" -+ export if_error_detail_message="Check MD5 sum of installed packages failed" -+ # shellcheck disable=SC2154 # this '$' and '\n' syntax is for dpkg-query -+ chroot_sdcard dpkg-query -f '"${binary:Package}\n"' -W "|" xargs debsums --silent || true # @TODO: ignore result for now until we can find all the divergences -+ - # Remove packages from packages.uninstall - display_alert "Uninstall packages" "$PACKAGE_LIST_UNINSTALL" "info" - # shellcheck disable=SC2086 - -From 733b9bfb06ea36373049b98751f42e13905247d5 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 18 Jul 2022 15:26:08 +0200 -Subject: [PATCH] armbian-next: manual merge (26) of sources/families changes - between revisions 20ee8c54502f877bfa563e113d67709cb80dc6f9 and - 9c52562176390624d33c93634e63a8f91cc0815b - ---- - config/sources/families/jetson-nano.conf | 10 +++++----- - config/sources/families/media.conf | 27 ++++++++++++++++++--------- - 2 files changed, 23 insertions(+), 14 deletions(-) - -diff --git a/config/sources/families/jetson-nano.conf b/config/sources/families/jetson-nano.conf -index 7f7f07c72..f09f15845 100644 ---- a/config/sources/families/jetson-nano.conf -+++ b/config/sources/families/jetson-nano.conf -@@ -22,8 +22,8 @@ case $BRANCH in - ;; - - current) -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.17.y" -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.18.y" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -@@ -31,9 +31,9 @@ case $BRANCH in - ;; - - edge) -- #SKIP_BOOTSPLASH="yes" -- export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.18.y" -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. -+ #KERNELBRANCH="branch:linux-5.19.y" -+ KERNELBRANCH="tag:v5.19-rc6" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -diff --git a/config/sources/families/media.conf b/config/sources/families/media.conf -index 2b9f4e074..46ae3c100 100644 ---- a/config/sources/families/media.conf -+++ b/config/sources/families/media.conf -@@ -3,10 +3,13 @@ source "${BASH_SOURCE%/*}/include/rockchip64_common.inc" - if [[ $BOARD == station-p2 || $BOARD == station-m2 || $BOARD == bananapir2pro ]]; then - BOOTSOURCE='https://github.com/150balbes/u-boot-rk' - BOOTBRANCH='branch:rk356x' -- BOOTPATCHDIR="u-boot-media" -+ BOOTPATCHDIR="u-boot-station-p2" - elif [[ $BOARD == quartz64a ]]; then - BOOTSOURCE='https://github.com/150balbes/u-boot-rk' - BOOTBRANCH='branch:rk35xx' -+ BOOTPATCHDIR="u-boot-station-p2" -+else -+ BOOTBRANCH="tag:v2022.07" - BOOTPATCHDIR="u-boot-media" - fi - -@@ -44,21 +47,27 @@ case $BRANCH in - ;; - - current) -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.17.y" -- KERNELBRANCH="tag:v5.17.9" -- KERNELPATCHDIR='media-'$BRANCH -- LINUXFAMILY=media -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.18.y" - LINUXCONFIG='linux-media-'$BRANCH -+ -+ if [[ $BOARD == station-p2 || $BOARD == station-m2 || $BOARD == quartz64a || $BOARD == bananapir2pro ]]; then -+ KERNELPATCHDIR='station-p2-'$BRANCH -+ LINUXFAMILY=station-p2 -+ else -+ KERNELPATCHDIR='media-'$BRANCH -+ LINUXFAMILY=media -+ fi -+ - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.18.y" -- KERNELBRANCH="tag:v5.18" -+ export KERNEL_MAJOR_MINOR="5.19" # Major and minor versions of this kernel. - KERNELPATCHDIR='media-'$BRANCH -+ KERNELBRANCH="tag:v5.19-rc6" - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -+ SKIP_BOOTSPLASH="yes" - ;; - esac - - -From 63aa49ecac9c0401f359bb3ad801af6f7618a5ce Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 18 Jul 2022 15:17:50 +0200 -Subject: [PATCH] armbian-next: manual merge (26) of lib changes between - revisions 20ee8c54502f877bfa563e113d67709cb80dc6f9 and - 9c52562176390624d33c93634e63a8f91cc0815b - -- @TODO NOT including the md5/debsums check, that needs further rewrite ---- - lib/functions/configuration/interactive.sh | 2 +- - lib/functions/main/config-prepare.sh | 2 +- - lib/functions/rootfs/apt-install.sh | 3 --- - 3 files changed, 2 insertions(+), 5 deletions(-) - -diff --git a/lib/functions/configuration/interactive.sh b/lib/functions/configuration/interactive.sh -index 325553433..743d8a22b 100644 ---- a/lib/functions/configuration/interactive.sh -+++ b/lib/functions/configuration/interactive.sh -@@ -1,5 +1,5 @@ - function interactive_config_prepare_terminal() { -- if [[ $BUILD_ALL != "yes" && -z $ROOT_FS_CREATE_ONLY ]]; then -+ if [[ -z $ROOT_FS_CREATE_ONLY ]]; then - if [[ -t 0 ]]; then # "-t fd return True if file descriptor fd is open and refers to a terminal". 0 = stdin, 1 = stdout, 2 = stderr, 3+ custom - # override stty size, if stdin is a terminal. - [[ -n $COLUMNS ]] && stty cols $COLUMNS -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index 0264b0d9e..d39d7c4be 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -117,7 +117,7 @@ function prepare_and_config_main_build_single() { - - if [[ $BETA == yes ]]; then - IMAGE_TYPE=nightly -- elif [[ $BETA != "yes" && $BUILD_ALL == yes ]]; then -+ elif [[ $BETA != "yes" ]]; then - IMAGE_TYPE=stable - else - IMAGE_TYPE=user-built -diff --git a/lib/functions/rootfs/apt-install.sh b/lib/functions/rootfs/apt-install.sh -index b2406f339..256d9bec9 100644 ---- a/lib/functions/rootfs/apt-install.sh -+++ b/lib/functions/rootfs/apt-install.sh -@@ -25,9 +25,6 @@ install_deb_chroot() { - - display_alert "Installing${desc}" "${name/\/root\//}" - -- # when building in bulk from remote, lets make sure we have up2date index -- [[ $BUILD_ALL == yes && ${variant} == remote ]] && chroot_sdcard_apt_get update -- - # install in chroot via apt-get, not dpkg, so dependencies are also installed from repo if needed. - export if_error_detail_message="Installation of $name failed ${BOARD} ${RELEASE} ${BUILD_DESKTOP} ${LINUXFAMILY}" - chroot_sdcard_apt_get --no-install-recommends install "${name}" - -From a71814dfd278aa138d679c56026f7de1d4d6d892 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 29 Jun 2022 10:06:29 +0200 -Subject: [PATCH] armbian-next: manual merge (25) of lib changes between - revisions fe972621c61f339c9b84aaf94fd851fa789882e8 and - 20ee8c54502f877bfa563e113d67709cb80dc6f9 - -- @TODO hmm Igor is now going out to the network for rootfs cache version during configuration phase!!! BAD BAD BAD ---- - lib/functions/configuration/main-config.sh | 9 ++++++++- - lib/functions/general/downloads.sh | 16 +++++++++++----- - lib/functions/rootfs/create-cache.sh | 12 +++++++----- - 3 files changed, 26 insertions(+), 11 deletions(-) - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 0fdb35bdd..b8369c436 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -32,7 +32,14 @@ function do_main_configuration() { - [[ -z $EXIT_PATCHING_ERROR ]] && EXIT_PATCHING_ERROR="" # exit patching if failed - [[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board - cd "${SRC}" || exit -- [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=20 -+ -+ # if variable not provided, check which is current version in the cache storage -+ if [[ -z "${ROOTFSCACHE_VERSION}" ]]; then -+ display_alert "ROOTFSCACHE_VERSION not set, getting remotely" "https://github.com/armbian/mirror/releases/download/rootfs/rootfscache.version" "warn" -+ ROOTFSCACHE_VERSION=$(wget --tries=10 -O - -o /dev/null https://github.com/armbian/mirror/releases/download/rootfs/rootfscache.version || true) -+ ROOTFSCACHE_VERSION=${ROOTFSCACHE_VERSION:-"0"} -+ fi -+ - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 - BUILD_REPOSITORY_URL=$(git remote get-url "$(git remote | grep origin)") - BUILD_REPOSITORY_COMMIT=$(git describe --match=d_e_a_d_b_e_e_f --always --dirty) -diff --git a/lib/functions/general/downloads.sh b/lib/functions/general/downloads.sh -index ecd383e12..97afb81a4 100644 ---- a/lib/functions/general/downloads.sh -+++ b/lib/functions/general/downloads.sh -@@ -1,17 +1,22 @@ - function webseed() { -+ - # list of mirrors that host our files - unset text -- # Hardcoded to EU mirrors since - local CCODE=$(curl -s redirect.armbian.com/geoip | jq '.continent.code' -r) -- WEBSEED=($(curl -s https://redirect.armbian.com/mirrors | jq -r '.'${CCODE}' | .[] | values')) -+ -+ if [[ "$2" == "rootfs" ]]; then -+ WEBSEED=($(curl -s ${1}mirrors | jq -r '.'${CCODE}' | .[] | values')) -+ else -+ WEBSEED=($(curl -s https://redirect.armbian.com/mirrors | jq -r '.'${CCODE}' | .[] | values')) -+ fi -+ - # remove dead mirrors to suppress download errors -- FILE=".control" - while read -r line; do - REMOVE=$(echo $line | egrep -o 'https?://[^ ]+/') - WEBSEED=("${WEBSEED[@]/$REMOVE/}") - done < <( - for k in ${WEBSEED[@]}; do -- echo "$k$FILE" -+ echo "$k$2/$3" - done | parallel --halt soon,fail=10 --jobs 32 wget -q --spider --timeout=15 --tries=4 --retry-connrefused {} 2>&1 > /dev/null - ) - -@@ -26,8 +31,9 @@ function webseed() { - https://mirrors.bfsu.edu.cn/armbian-releases/ - ) - fi -+ - for toolchain in ${WEBSEED[@]}; do -- text="${text} ${toolchain}${1}" -+ text="${text} ${toolchain}"$2/"${3}" - done - text="${text:1}" - echo "${text}" -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index fab43781b..2a4e42d13 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -9,9 +9,10 @@ get_or_create_rootfs_cache_chroot_sdcard() { - # seek last cache, proceed to previous otherwise build it - for ((n = 0; n < cycles; n++)); do - -- [[ -z ${FORCED_MONTH_OFFSET} ]] && FORCED_MONTH_OFFSET=${n} -+ FORCED_MONTH_OFFSET=${n} -+ - local packages_hash -- packages_hash=$(get_package_list_hash "$(date -d "$D +${FORCED_MONTH_OFFSET} month" +"%Y-%m-module$ROOTFSCACHE_VERSION" | sed 's/^0*//')") -+ packages_hash=$(get_package_list_hash "$(date -d "$D -${FORCED_MONTH_OFFSET} month" +"%Y-%m-module$ROOTFSCACHE_VERSION" | sed 's/^0*//')") - - local cache_type="cli" - [[ ${BUILD_DESKTOP} == yes ]] && cache_type="xfce-desktop" -@@ -33,7 +34,7 @@ get_or_create_rootfs_cache_chroot_sdcard() { - display_alert "Checking local cache" "$display_name" "info" - - if [[ -f ${cache_fname} && -n "$ROOT_FS_CREATE_ONLY" ]]; then -- touch "${cache_fname}.current" -+ echo "$cache_fname" > $cache_fname.current - display_alert "Checking cache integrity" "$display_name" "info" - - sudo zstd -tqq "${cache_fname}" || { -@@ -52,6 +53,7 @@ get_or_create_rootfs_cache_chroot_sdcard() { - else - display_alert "searching on servers" - download_and_verify "_rootfs" "$cache_name" -+ [[ -f ${cache_fname} ]] && break - fi - - if [[ ! -f $cache_fname ]]; then -@@ -64,7 +66,7 @@ get_or_create_rootfs_cache_chroot_sdcard() { - - # speed up checking - if [[ -n "$ROOT_FS_CREATE_ONLY" ]]; then -- touch $cache_fname.current -+ echo "$cache_fname" > $cache_fname.current - umount --lazy "$SDCARD" - rm -rf $SDCARD - # remove exit trap -@@ -85,7 +87,7 @@ get_or_create_rootfs_cache_chroot_sdcard() { - create_new_rootfs_cache - - # needed for backend to keep current only -- touch "${cache_fname}.current" -+ echo "$cache_fname" > $cache_fname.current - - fi - - -From 7b782918ecd066682e15b10a37a076d8ab07c70c Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 29 Jun 2022 09:59:36 +0200 -Subject: [PATCH] armbian-next: manual merge (25) of family changes between - revisions fe972621c61f339c9b84aaf94fd851fa789882e8 and - 20ee8c54502f877bfa563e113d67709cb80dc6f9 - ---- - config/sources/families/include/rockchip64_common.inc | 10 ++++------ - config/sources/families/media.conf | 4 ++-- - 2 files changed, 6 insertions(+), 8 deletions(-) - -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index e69a41cf0..44d4d22dc 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -439,12 +439,10 @@ family_tweaks_bsp() { - fi - - if [[ $BOARD == rk3318-box ]]; then -- -- # Optional board dtbo selection script -- mkdir -p $destination/usr/local/bin -- install -m 755 $SRC/packages/bsp/rk3318/rk3318-config $destination/usr/sbin -- -- fi -+ # Optional board dtbo selection script -+ mkdir -p $destination/usr/local/bin -+ install -m 755 $SRC/packages/bsp/rk3318/rk3318-config $destination/usr/sbin -+ fi - - if [[ $BOARD == pinebook-pro ]]; then - -diff --git a/config/sources/families/media.conf b/config/sources/families/media.conf -index 3b5bbe589..2b9f4e074 100644 ---- a/config/sources/families/media.conf -+++ b/config/sources/families/media.conf -@@ -1,6 +1,6 @@ - source "${BASH_SOURCE%/*}/include/rockchip64_common.inc" - --if [[ $BOARD == station-p2 || $BOARD == station-m2 ]]; then -+if [[ $BOARD == station-p2 || $BOARD == station-m2 || $BOARD == bananapir2pro ]]; then - BOOTSOURCE='https://github.com/150balbes/u-boot-rk' - BOOTBRANCH='branch:rk356x' - BOOTPATCHDIR="u-boot-media" -@@ -15,7 +15,7 @@ case $BRANCH in - legacy) - KERNELDIR='linux-rockchip64' - -- if [[ $BOARD == station-p2 || $BOARD == station-m2 ]]; then -+ if [[ $BOARD == station-p2 || $BOARD == station-m2 || $BOARD == bananapir2pro ]]; then - KERNELSOURCE='https://github.com/150balbes/rockchip-kernel' - export KERNEL_MAJOR_MINOR="4.19" # Major and minor versions of this kernel. - KERNELBRANCH='branch:kernel-4.19' - -From 35a5ec860a5729794add0bc3f5b71f4dc09cd708 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 22 Jun 2022 20:23:12 +0200 -Subject: [PATCH] armbian-next: manual merge (24) of families changes between - revisions 9ca9120420aa2a39b91ab7283a7dafe113de42e8 and - 560531a63505eb610d269b26858689307a9483f5 - ---- - config/sources/families/include/meson64_common.inc | 3 +- - .../sources/families/include/rockchip64_common.inc | 46 ++++++++++++++-------- - 2 files changed, 32 insertions(+), 17 deletions(-) - -diff --git a/config/sources/families/include/meson64_common.inc b/config/sources/families/include/meson64_common.inc -index 7d79b6930..d902756e7 100644 ---- a/config/sources/families/include/meson64_common.inc -+++ b/config/sources/families/include/meson64_common.inc -@@ -25,7 +25,8 @@ case $BRANCH in - legacy) - KERNELSOURCE='https://github.com/hardkernel/linux' - export KERNEL_MAJOR_MINOR="4.9" # Major and minor versions of this kernel. For mainline caching. -- KERNELBRANCH='branch:odroidg12-4.9.y' -+ #KERNELBRANCH='branch:odroidg12-4.9.y' -+ KERNELBRANCH='tag:4.9.277-122' - ;; - - current) -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index be6951bff..e69a41cf0 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -16,8 +16,24 @@ PACKAGE_LIST_FAMILY="ethtool" - - RKBIN_DIR="$SRC/cache/sources/rkbin-tools" - -+# Common variables: -+# BOOT_SCENARIO - determines which tpl (ddrbin), spl and ATF combination to use -+# -+# Different boot scenario can arrange: -+# * Phase 1: DDR initialization (proprietary rockchip ddrbin or u-boot TPL) -+# * Phase 2: Initial system and clock initialization (proprietary rockchip miniload or u-boot SPL) -+# * Phase 3: Arm Trusted Firmware (proprietary rockchip or mainline opensource) -+# * Phase 4: u-boot proper is always the mainline one -+# -+# Available options for BOOT_SCENARIO are: -+# - only-blobs: proprietary rockchip ddrbin, miniloader and ATF -+# - spl-blobs: proprietary rockchip ddrin and ATF, but uses mainline u-boot SPL in place of rockchip miniloader -+# - tpl-spl-blob: uses mainline u-boot TPL and SPL with proprietary rockchip ATF blob -+# - tpl-blob-atf-mainline: proprietary rockchip ddrbin + mainline u-boot SPL + mainline ATF -+# - blobless: mainline u-boot TPL + mainline u-boot SPL + mainline ATF -+ -+#BOOT_SOC=`expr $BOOTCONFIG : '.*\(rk[[:digit:]]\+.*\)_.*'` - BOOT_SOC=${BOOT_SOC:=$(expr $BOOTCONFIG : '.*\(rk[[:digit:]]\+.*\)_.*')} --display_alert "BOOT_SOC:" "$BOOT_SOC" "debug" - - CPUMIN=${CPUMIN:="408000"} - -@@ -42,44 +58,41 @@ fi - if [[ $BOOT_SOC == rk3328 ]]; then - - BOOT_SCENARIO="${BOOT_SCENARIO:=only-blobs}" -- DDR_BLOB='rk33/rk3328_ddr_333MHz_v1.16.bin' -+ DDR_BLOB="${DDR_BLOB:=rk33/rk3328_ddr_333MHz_v1.16.bin}" - MINILOADER_BLOB='rk33/rk322xh_miniloader_v2.50.bin' - BL31_BLOB='rk33/rk322xh_bl31_v1.44.elf' - - elif [[ $BOOT_SOC == rk3399 ]]; then - - BOOT_SCENARIO="${BOOT_SCENARIO:=only-blobs}" -- DDR_BLOB='rk33/rk3399_ddr_933MHz_v1.25.bin' -+ DDR_BLOB="${DDR_BLOB:=rk33/rk3399_ddr_933MHz_v1.25.bin}" - MINILOADER_BLOB='rk33/rk3399_miniloader_v1.26.bin' - BL31_BLOB='rk33/rk3399_bl31_v1.35.elf' - - elif [[ $BOOT_SOC == rk3399pro ]]; then - - BOOT_SCENARIO="${BOOT_SCENARIO:=only-blobs}" -- DDR_BLOB='rk33/rk3399pro_npu_ddr_933MHz_v1.02.bin' -+ DDR_BLOB="${DDR_BLOB:=rk33/rk3399pro_npu_ddr_933MHz_v1.02.bin}" - MINILOADER_BLOB='rk33/rk3399pro_miniloader_v1.26.bin' - BL31_BLOB='rk33/rk3399pro_bl31_v1.35.elf' - - elif [[ $BOOT_SOC == rk3566 ]]; then - - BOOT_SCENARIO="${BOOT_SCENARIO:=spl-blobs}" -- DDR_BLOB='rk35/rk3566_ddr_1056MHz_v1.10.bin' -+ DDR_BLOB="${DDR_BLOB:=rk35/rk3566_ddr_1056MHz_v1.10.bin}" - BL31_BLOB='rk35/rk3568_bl31_v1.29.elf' - - elif [[ $BOOT_SOC == rk3568 ]]; then - - BOOT_SCENARIO="${BOOT_SCENARIO:=spl-blobs}" -- DDR_BLOB="${DDR_BLOB:-"rk35/rk3568_ddr_1560MHz_v1.10.bin"}" -- BL31_BLOB="${BL31_BLOB:-"rk35/rk3568_bl31_v1.28.elf"}" -- display_alert "BOOT_SCENARIO:" "$BOOT_SCENARIO" "debug" -- display_alert "DDR_BLOB:" "$DDR_BLOB" "debug" -- display_alert "BL31_BLOB:" "$BL31_BLOB" "debug" -+ DDR_BLOB="${DDR_BLOB:=rk35/rk3568_ddr_1560MHz_v1.10.bin}" -+ BL31_BLOB='rk35/rk3568_bl31_v1.28.elf' - - elif [[ $BOARD == rockpi-s ]]; then - - BOOT_SCENARIO="${BOOT_SCENARIO:=only-blobs}" - BOOT_SOC=rk3308 -- DDR_BLOB='rk33/rk3308_ddr_589MHz_uart2_m1_v1.30.bin' -+ DDR_BLOB="${DDR_BLOB:=rk33/rk3308_ddr_589MHz_uart2_m1_v1.30.bin}" - MINILOADER_BLOB='rk33/rk3308_miniloader_v1.22.bin' - BL31_BLOB='rk33/rk3308_bl31_v2.22.elf' - -@@ -114,7 +127,7 @@ case $BRANCH in - esac - - prepare_boot_configuration() { -- if [[ $BOOT_SCENARIO == "blobless" ]]; then -+ if [[ $BOOT_SCENARIO == "blobless" || $BOOT_SCENARIO == "tpl-blob-atf-mainline" ]]; then - - UBOOT_TARGET_MAP="BL31=bl31.elf idbloader.img u-boot.itb;;idbloader.img u-boot.itb" - ATFSOURCE='https://github.com/ARM-software/arm-trusted-firmware' -@@ -125,6 +138,8 @@ prepare_boot_configuration() { - ATF_TARGET_MAP="M0_CROSS_COMPILE=arm-linux-gnueabi- PLAT=$BOOT_SOC bl31;;build/$BOOT_SOC/release/bl31/bl31.elf:bl31.elf" - ATF_TOOLCHAIN2="arm-linux-gnueabi-:< 10.0" - -+ [[ $BOOT_SCENARIO == "tpl-blob-atf-mainline" ]] && UBOOT_TARGET_MAP="BL31=bl31.elf idbloader.img u-boot.itb;;idbloader.img u-boot.itb" -+ - elif [[ $BOOT_SCENARIO == "tpl-spl-blob" ]]; then - - UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB idbloader.img u-boot.itb;;idbloader.img u-boot.itb" -@@ -133,7 +148,6 @@ prepare_boot_configuration() { - - elif [[ $BOOT_SCENARIO == "spl-blobs" ]]; then - -- display_alert "BOOT Scenario is" "spl-blobs" "debug" - UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB spl/u-boot-spl.bin u-boot.dtb u-boot.itb;;idbloader.img u-boot.itb" - ATFSOURCE='' - ATF_COMPILE='no' -@@ -161,8 +175,8 @@ uboot_custom_postprocess() { - - if [[ $BOOT_SCENARIO == "blobless" || $BOOT_SCENARIO == "tpl-spl-blob" ]]; then - : -- elif [[ $BOOT_SCENARIO == "spl-blobs" ]]; then -- display_alert "mkimage for $BOOT_SOC with $BOOT_SCENARIO" "spl-blobs" "debug" -+ elif [[ $BOOT_SCENARIO == "spl-blobs" || $BOOT_SCENARIO == "tpl-blob-atf-mainline" ]]; then -+ display_alert "mkimage for $BOOT_SOC with $BOOT_SCENARIO" "spl-blobs/tpl-blob-atf-mainline" "debug" - run_host_command_logged tools/mkimage -n $BOOT_SOC -T rksd -d $RKBIN_DIR/$DDR_BLOB:spl/u-boot-spl.bin idbloader.img - - elif [[ $BOOT_SCENARIO == "only-blobs" ]]; then -@@ -372,7 +386,7 @@ family_tweaks_bsp() { - fi - - if [[ $BOARD == orangepi4-lts ]]; then -- -+ - # Bluetooth on orangepi 4 LTS board is handled by a Spreadtrum (sprd) chip and requires - # a custom hciattach_opi binary, plus a systemd service to run it at boot time - install -m 755 $SRC/packages/bsp/rk3399/hciattach_opi $destination/usr/bin - -From ac26f77b6eaebec9d11537995eeadb07bf87c54a Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 22 Jun 2022 20:22:08 +0200 -Subject: [PATCH] armbian-next: manual merge (24) of lib changes between - revisions 9ca9120420aa2a39b91ab7283a7dafe113de42e8 and - 560531a63505eb610d269b26858689307a9483f5 - ---- - lib/functions/configuration/main-config.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 59dcdbe7f..0fdb35bdd 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -32,7 +32,7 @@ function do_main_configuration() { - [[ -z $EXIT_PATCHING_ERROR ]] && EXIT_PATCHING_ERROR="" # exit patching if failed - [[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board - cd "${SRC}" || exit -- [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=19 -+ [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=20 - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 - BUILD_REPOSITORY_URL=$(git remote get-url "$(git remote | grep origin)") - BUILD_REPOSITORY_COMMIT=$(git describe --match=d_e_a_d_b_e_e_f --always --dirty) - -From d868b7b64ae2da0614078cccefab59804715542c Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 17 Jun 2022 12:19:32 +0200 -Subject: [PATCH] armbian-next: manual merge (23) of all changes between - revisions 17b4fb913c76233d1e2126cfd35ecb85acfa5a25 and - 9ca9120420aa2a39b91ab7283a7dafe113de42e8 - ---- - config/sources/families/sun50iw6.conf | 12 ++++++++++++ - lib/functions/configuration/main-config.sh | 2 +- - 2 files changed, 13 insertions(+), 1 deletion(-) - -diff --git a/config/sources/families/sun50iw6.conf b/config/sources/families/sun50iw6.conf -index 874e12e1f..6b05a17b9 100644 ---- a/config/sources/families/sun50iw6.conf -+++ b/config/sources/families/sun50iw6.conf -@@ -26,6 +26,11 @@ case $BRANCH in - esac - - family_tweaks_s() { -+ if [[ -f $SDCARD/lib/systemd/system/aw859a-bluetooth.service ]]; then -+ # install and enable Bluetooth -+ chroot $SDCARD /bin/bash -c "apt-get -y -qq install rfkill bluetooth bluez bluez-tools >/dev/null 2>&1" -+ chroot $SDCARD /bin/bash -c "systemctl --no-reload enable aw859a-bluetooth.service >/dev/null 2>&1" -+ fi - - if [[ $BUILD_DESKTOP == yes && $BOARD == orangepi3-lts ]]; then - -@@ -34,5 +39,12 @@ family_tweaks_s() { - echo "load-module module-alsa-sink device=hw:1,0 sink_name=HDMI-Playback sink_properties=\"device.description='HDMI Audio'\"" >> ${SDCARD}/etc/pulse/default.pa - - fi -+} -+ -+family_tweaks_bsp() { -+ if [[ ${BOARD} == orangepi3-lts ]]; then -+ cp $SRC/packages/bsp/sunxi/aw859a-bluetooth.service $destination/lib/systemd/system/ -+ fi - -+ install -m 755 $SRC/packages/blobs/bt/hciattach/hciattach_opi_${ARCH} $destination/usr/bin/hciattach_opi - } -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 31c4d6280..59dcdbe7f 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -32,7 +32,7 @@ function do_main_configuration() { - [[ -z $EXIT_PATCHING_ERROR ]] && EXIT_PATCHING_ERROR="" # exit patching if failed - [[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board - cd "${SRC}" || exit -- [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=18 -+ [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=19 - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 - BUILD_REPOSITORY_URL=$(git remote get-url "$(git remote | grep origin)") - BUILD_REPOSITORY_COMMIT=$(git describe --match=d_e_a_d_b_e_e_f --always --dirty) - -From d4904385fe7e7506638e68638e348d9f0b412bd7 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 12 Jun 2022 14:03:44 +0200 -Subject: [PATCH] armbian-next: manual merge (22) of all changes between - revisions 0eb8fe7497aebf341bead2b3b0fb7309fd7bdc14 and - 1dddf78cd0ed096edd6506241cfd9aa8cc27ba4e - -- @TODO EXCEPT the insanity about locales/eval/VERYSILENT in #3850, requires deep review ---- - config/sources/families/bcm2711.conf | 4 +-- - config/sources/families/imx6.conf | 4 +-- - config/sources/families/include/meson_common.inc | 14 ++++++++- - .../sources/families/include/rockchip64_common.inc | 34 +++++++++++++++++----- - config/sources/families/include/sunxi64_common.inc | 6 ++-- - config/sources/families/include/sunxi_common.inc | 6 ++-- - config/sources/families/include/uefi_common.inc | 4 +-- - config/sources/families/mvebu64.conf | 10 +++---- - config/sources/families/odroidxu4.conf | 6 ++-- - config/sources/families/rk322x.conf | 4 +-- - config/sources/families/rockchip.conf | 8 ++--- - lib/functions/compilation/patch/kernel-drivers.sh | 16 +++++----- - lib/functions/compilation/uboot.sh | 5 ++-- - lib/functions/extras/buildpkg.sh | 29 +++++++++++++----- - lib/functions/host/prepare-host.sh | 2 +- - lib/functions/image/partitioning.sh | 2 +- - 16 files changed, 99 insertions(+), 55 deletions(-) - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index 2b19132e2..5ae60578a 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -28,8 +28,8 @@ case "${BRANCH}" in - edge) - export RASPI_DISTRO_KERNEL=no - export KERNELSOURCE='https://github.com/raspberrypi/linux' -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. For mainline caching. -- export KERNELBRANCH="branch:rpi-5.17.y" -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. For mainline caching. -+ export KERNELBRANCH="branch:rpi-5.18.y" - export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" - export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" - ;; -diff --git a/config/sources/families/imx6.conf b/config/sources/families/imx6.conf -index f2bcf95a1..9a7bd9331 100644 ---- a/config/sources/families/imx6.conf -+++ b/config/sources/families/imx6.conf -@@ -16,8 +16,8 @@ case $BRANCH in - - edge) - -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.17.y' -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.18.y' - - ;; - -diff --git a/config/sources/families/include/meson_common.inc b/config/sources/families/include/meson_common.inc -index e83c382de..5b53ff90c 100644 ---- a/config/sources/families/include/meson_common.inc -+++ b/config/sources/families/include/meson_common.inc -@@ -4,7 +4,6 @@ BOOTBRANCH='branch:odroidc-v2011.03' - BOOTDIR='u-boot-odroidc1' - UBOOT_COMPILER="arm-linux-gnueabihf-" - UBOOT_USE_GCC='< 4.9' --BOOTSCRIPT="boot-odroid-c1.ini:boot.ini" - SERIALCON="ttyAML0" - UBOOT_TARGET_MAP=';;sd_fuse/bl1.bin.hardkernel sd_fuse/u-boot.bin' - SRC_LOADADDR='LOADADDR=0x00208000' -@@ -44,6 +43,19 @@ case $BRANCH in - ;; - esac - -+case $BOARD in -+ odroidc1) -+ -+ BOOTSCRIPT="boot-odroid-c1.ini:boot.ini" -+ -+ ;; -+ onecloud) -+ -+ BOOTSCRIPT="boot-onecloud.cmd:boot.cmd" -+ -+ ;; -+esac -+ - write_uboot_platform() { - dd if=$1/bl1.bin.hardkernel of=$2 bs=1 count=442 conv=fsync > /dev/null 2>&1 - dd if=$1/bl1.bin.hardkernel of=$2 bs=512 skip=1 seek=1 conv=fsync > /dev/null 2>&1 -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index 7fc026892..be6951bff 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -116,14 +116,14 @@ esac - prepare_boot_configuration() { - if [[ $BOOT_SCENARIO == "blobless" ]]; then - -- UBOOT_TARGET_MAP="BL31=bl31.bin idbloader.img u-boot.itb;;idbloader.img u-boot.itb" -+ UBOOT_TARGET_MAP="BL31=bl31.elf idbloader.img u-boot.itb;;idbloader.img u-boot.itb" - ATFSOURCE='https://github.com/ARM-software/arm-trusted-firmware' - ATF_COMPILER='aarch64-linux-gnu-' - ATFDIR='arm-trusted-firmware' - ATFBRANCH='tag:v2.6' - ATF_USE_GCC='> 6.3' -- ATF_TARGET_MAP="M0_CROSS_COMPILE=arm-linux-gnueabi- PLAT=$BOOT_SOC bl31;;build/$BOOT_SOC/release/bl31/bl31.elf:bl31.bin" -- ATF_TOOLCHAIN2="arm-linux-gnueabi-:> 5.0" -+ ATF_TARGET_MAP="M0_CROSS_COMPILE=arm-linux-gnueabi- PLAT=$BOOT_SOC bl31;;build/$BOOT_SOC/release/bl31/bl31.elf:bl31.elf" -+ ATF_TOOLCHAIN2="arm-linux-gnueabi-:< 10.0" - - elif [[ $BOOT_SCENARIO == "tpl-spl-blob" ]]; then - -@@ -148,7 +148,11 @@ prepare_boot_configuration() { - - if [[ $BOOT_SUPPORT_SPI == yes ]]; then - -- UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB tpl/u-boot-tpl.bin spl/u-boot-spl.bin u-boot.itb ${UBOOT_TARGET_MAP} rkspi_loader.img" -+ if [[ $BOARD != "rock-3a" ]]; then -+ UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB tpl/u-boot-tpl.bin spl/u-boot-spl.bin u-boot.itb ${UBOOT_TARGET_MAP} rkspi_loader.img" -+ else -+ UBOOT_TARGET_MAP="${UBOOT_TARGET_MAP} rkspi_loader.img" -+ fi - - fi - } -@@ -175,10 +179,24 @@ uboot_custom_postprocess() { - fi - - if [[ $BOOT_SUPPORT_SPI == yes ]]; then -- tools/mkimage -n $BOOT_SOC -T rkspi -d tpl/u-boot-tpl.bin:spl/u-boot-spl.bin rkspi_tpl_spl.img -- dd if=/dev/zero of=rkspi_loader.img count=8128 status=none -- dd if=rkspi_tpl_spl.img of=rkspi_loader.img conv=notrunc status=none -- dd if=u-boot.itb of=rkspi_loader.img seek=768 conv=notrunc status=none -+ if [[ $BOARD == "rock-3a" ]]; then -+ dd if=/dev/zero of=rkspi_loader.img bs=1M count=0 seek=16 -+ /sbin/parted -s rkspi_loader.img mklabel gpt -+ /sbin/parted -s rkspi_loader.img unit s mkpart idbloader 64 7167 -+ /sbin/parted -s rkspi_loader.img unit s mkpart vnvm 7168 7679 -+ /sbin/parted -s rkspi_loader.img unit s mkpart reserved_space 7680 8063 -+ /sbin/parted -s rkspi_loader.img unit s mkpart reserved1 8064 8127 -+ /sbin/parted -s rkspi_loader.img unit s mkpart uboot_env 8128 8191 -+ /sbin/parted -s rkspi_loader.img unit s mkpart reserved2 8192 16383 -+ /sbin/parted -s rkspi_loader.img unit s mkpart uboot 16384 32734 -+ dd if=idbloader.img of=rkspi_loader.img seek=64 conv=notrunc -+ dd if=u-boot.itb of=rkspi_loader.img seek=16384 conv=notrunc -+ else -+ tools/mkimage -n $BOOT_SOC -T rkspi -d tpl/u-boot-tpl.bin:spl/u-boot-spl.bin rkspi_tpl_spl.img -+ dd if=/dev/zero of=rkspi_loader.img count=8128 status=none -+ dd if=rkspi_tpl_spl.img of=rkspi_loader.img conv=notrunc status=none -+ dd if=u-boot.itb of=rkspi_loader.img seek=768 conv=notrunc status=none -+ fi - fi - } - -diff --git a/config/sources/families/include/sunxi64_common.inc b/config/sources/families/include/sunxi64_common.inc -index 61addb39b..299d16253 100644 ---- a/config/sources/families/include/sunxi64_common.inc -+++ b/config/sources/families/include/sunxi64_common.inc -@@ -26,9 +26,9 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -- export KERNELBRANCH="branch:linux-5.17.y" -- export KERNELBRANCH_MEGOUS="branch:orange-pi-5.17" -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -+ export KERNELBRANCH="branch:linux-5.18.y" -+ export KERNELBRANCH_MEGOUS="branch:orange-pi-5.18" - ;; - esac - -diff --git a/config/sources/families/include/sunxi_common.inc b/config/sources/families/include/sunxi_common.inc -index 8ac7a5551..9d120c711 100644 ---- a/config/sources/families/include/sunxi_common.inc -+++ b/config/sources/families/include/sunxi_common.inc -@@ -27,9 +27,9 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -- export KERNELBRANCH="branch:linux-5.17.y" -- export KERNELBRANCH_MEGOUS="branch:orange-pi-5.17" -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -+ export KERNELBRANCH="branch:linux-5.18.y" -+ export KERNELBRANCH_MEGOUS="branch:orange-pi-5.18" - ;; - esac - -diff --git a/config/sources/families/include/uefi_common.inc b/config/sources/families/include/uefi_common.inc -index 821ed660a..699d09e4a 100644 ---- a/config/sources/families/include/uefi_common.inc -+++ b/config/sources/families/include/uefi_common.inc -@@ -22,8 +22,8 @@ case "${BRANCH}" in - edge) - export DISTRO_GENERIC_KERNEL=no - export LINUXCONFIG="linux-uefi-${LINUXFAMILY}-${BRANCH}" -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. For mainline caching. -- export KERNELBRANCH="branch:linux-5.17.y" # Branch or tag to build from. It should match MAJOR_MINOR -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. For mainline caching. -+ export KERNELBRANCH="branch:linux-5.18.y" # Branch or tag to build from. It should match MAJOR_MINOR - export KERNELPATCHDIR="uefi-${LINUXFAMILY}-${BRANCH}" # Might be empty. - ;; - esac -diff --git a/config/sources/families/mvebu64.conf b/config/sources/families/mvebu64.conf -index fe35a0055..283761378 100644 ---- a/config/sources/families/mvebu64.conf -+++ b/config/sources/families/mvebu64.conf -@@ -49,8 +49,8 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.17.y' -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.18.y' - ;; - - esac -@@ -75,14 +75,14 @@ family_tweaks() { - [[ -f $SDCARD/etc/netplan/armbian-default.yaml ]] && sed -i "s/^ renderer.*/ renderer: networkd/" $SDCARD/etc/netplan/armbian-default.yaml - cp $SRC/packages/bsp/mvebu64/networkd/10* $SDCARD/etc/systemd/network/ - if [[ $BOARD = "espressobin" ]]; then -- echo "#Marvell Espressobin Console" >> $SDCARD/etc/securetty -- echo "ttyMV0" >> $SDCARD/etc/securetty -+ echo "#Marvell Espressobin Console" >> $SDCARD/etc/securetty -+ echo "ttyMV0" >> $SDCARD/etc/securetty - fi - } - - family_tweaks_bsp() { - if [[ $BOARD = "espressobin" ]]; then -- cp "$SRC/packages/bsp/mvebu64/initramfs/99-uboot-fit" "$destination/etc/initramfs/post-update.d/" -+ cp "$SRC/packages/bsp/mvebu64/initramfs/99-uboot-fit" "$destination/etc/initramfs/post-update.d/" - fi - } - -diff --git a/config/sources/families/odroidxu4.conf b/config/sources/families/odroidxu4.conf -index 992b2bbb2..75916a25b 100644 ---- a/config/sources/families/odroidxu4.conf -+++ b/config/sources/families/odroidxu4.conf -@@ -25,8 +25,10 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.17.y' -+ KERNELSOURCE='https://github.com/tobetter/linux' -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:odroid-5.18.y' -+ KERNELDIR='linux-odroidxu4' - ;; - - esac -diff --git a/config/sources/families/rk322x.conf b/config/sources/families/rk322x.conf -index d707d55c8..3c62bbab0 100644 ---- a/config/sources/families/rk322x.conf -+++ b/config/sources/families/rk322x.conf -@@ -27,8 +27,8 @@ case $BRANCH in - - edge) - -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.17.y' -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.18.y' - - ;; - -diff --git a/config/sources/families/rockchip.conf b/config/sources/families/rockchip.conf -index a264c669f..c971cba34 100644 ---- a/config/sources/families/rockchip.conf -+++ b/config/sources/families/rockchip.conf -@@ -6,9 +6,9 @@ OVERLAY_PREFIX='rockchip' - UBOOT_TARGET_MAP=";;$SRC/packages/blobs/rockchip/rk3288_boot.bin u-boot-rockchip-with-spl.bin" - BOOTDELAY=1 - if [[ $BOARD == miqi ]]; then --BOOTBRANCH='tag:v2017.11' -+ BOOTBRANCH='tag:v2017.11' - else --BOOTBRANCH='tag:v2022.04' -+ BOOTBRANCH='tag:v2022.04' - fi - - SERIALCON=ttyS2 -@@ -33,8 +33,8 @@ case $BRANCH in - - edge) - -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.17.y' -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.18.y' - - ;; - -diff --git a/lib/functions/compilation/patch/kernel-drivers.sh b/lib/functions/compilation/patch/kernel-drivers.sh -index 91b5d5070..9df0b81ca 100644 ---- a/lib/functions/compilation/patch/kernel-drivers.sh -+++ b/lib/functions/compilation/patch/kernel-drivers.sh -@@ -31,15 +31,14 @@ function prepare_extra_kernel_drivers() { - # - # Older versions have AUFS support with a patch - -- if linux-version compare "${version}" ge 5.10 && linux-version compare "${version}" lt 5.15 && [ "$AUFS" == yes ]; then -- # @TODO: Fasthash for this whole block is only the git hash of revision we'd apply from Mr. Okajima -+ if linux-version compare "${version}" gt 5.11 && linux-version compare "${version}" lt 5.19 && [ "$AUFS" == yes ]; then - # attach to specifics tag or branch - local aufstag - aufstag=$(echo "${version}" | cut -f 1-2 -d ".") - - # manual overrides - if linux-version compare "${version}" ge 5.10.82 && linux-version compare "${version}" le 5.11; then aufstag="5.10.82"; fi -- if linux-version compare "${version}" ge 5.15.5 && linux-version compare "${version}" le 5.16; then aufstag="5.15.5"; fi -+ if linux-version compare "${version}" ge 5.15.41 && linux-version compare "${version}" le 5.16; then aufstag="5.15.41"; fi - if linux-version compare "${version}" ge 5.17.3 && linux-version compare "${version}" le 5.18; then aufstag="5.17.3"; fi - - # check if Mr. Okajima already made a branch for this version -@@ -276,14 +275,13 @@ function prepare_extra_kernel_drivers() { - # Wireless drivers for Realtek RTL8811CU and RTL8821C chipsets - - if linux-version compare "${version}" ge 3.14 && [ "$EXTRAWIFI" == yes ]; then -- # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch -- local rtl8811cuver="commit:2bebdb9a35c1d9b6e6a928e371fa39d5fcec8a62" -+ local rtl8811cuver="commit:8c2226a74ae718439d56248bd2e44ccf717086d5" - - display_alert "Adding" "Wireless drivers for Realtek RTL8811CU and RTL8821C chipsets ${rtl8811cuver}" "info" - -- fetch_from_repo "https://github.com/brektrou/rtl8821CU" "rtl8811cu" "${rtl8811cuver}" "yes" -+ fetch_from_repo "$GITHUB_SOURCE/brektrou/rtl8821CU" "rtl8811cu" "${rtl8811cuver}" "yes" - cd "$kerneldir" || exit - rm -rf "$kerneldir/drivers/net/wireless/rtl8811cu" - mkdir -p "$kerneldir/drivers/net/wireless/rtl8811cu/" -@@ -303,7 +301,7 @@ function prepare_extra_kernel_drivers() { - sed -i "s/^CONFIG_RTW_DEBUG.*/CONFIG_RTW_DEBUG = n/" \ - "$kerneldir/drivers/net/wireless/rtl8811cu/Makefile" - -- # Address ARM related bug https://github.com/aircrack-ng/rtl8812au/issues/233 -+ # Address ARM related bug $GITHUB_SOURCE/aircrack-ng/rtl8812au/issues/233 - sed -i "s/^CONFIG_MP_VHT_HW_TX_MODE.*/CONFIG_MP_VHT_HW_TX_MODE = n/" \ - "$kerneldir/drivers/net/wireless/rtl8811cu/Makefile" - -@@ -312,8 +310,8 @@ function prepare_extra_kernel_drivers() { - sed -i '/source "drivers\/net\/wireless\/ti\/Kconfig"/a source "drivers\/net\/wireless\/rtl8811cu\/Kconfig"' \ - "$kerneldir/drivers/net/wireless/Kconfig" - -- # add support for K5.17+ -- process_patch_file "${SRC}/patch/misc/wireless-realtek-8811cu-5.17.patch" "applying" -+ # add support for 5.18.y -+ process_patch_file "${SRC}/patch/misc/wireless-rtl8821cu.patch" "applying" - - fi - -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index 699946406..af62d3c4d 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -32,8 +32,9 @@ function compile_uboot_target() { - - if [[ -n $ATFSOURCE && -d "${atftempdir}" ]]; then - display_alert "Copying over bins from atftempdir" "${atftempdir}" "debug" -- cp -Rv "${atftempdir}"/*.bin . -- rm -rf "${atftempdir}" -+ run_host_command_logged cp -Rv "${atftempdir}"/*.bin . -+ run_host_command_logged cp -Rv "${atftempdir}"/*.elf . -+ run_host_command_logged rm -rf "${atftempdir}" - fi - - display_alert "${uboot_prefix}Preparing u-boot config" "${version} ${target_make}" "info" -diff --git a/lib/functions/extras/buildpkg.sh b/lib/functions/extras/buildpkg.sh -index e79924426..8bd4f046f 100644 ---- a/lib/functions/extras/buildpkg.sh -+++ b/lib/functions/extras/buildpkg.sh -@@ -36,7 +36,7 @@ create_chroot() { - components['focal']='main,universe,multiverse' - components['jammy']='main,universe,multiverse' - display_alert "Creating build chroot" "$release/$arch" "info" -- local includes="ccache,locales,git,ca-certificates,devscripts,libfile-fcntllock-perl,debhelper,rsync,python3,distcc,apt-utils" -+ local includes="ccache,locales,git,ca-certificates,libfile-fcntllock-perl,rsync,python3,distcc,apt-utils" - - # perhaps a temporally workaround - case $release in -@@ -68,9 +68,15 @@ create_chroot() { - mkdir -p "${target_dir}"/usr/share/keyrings/ && - cp /usr/share/keyrings/debian-archive-keyring.gpg "${target_dir}"/usr/share/keyrings/ - -- chroot "${target_dir}" /bin/bash -c "/debootstrap/debootstrap --second-stage" -+ eval 'LC_ALL=C LANG=C chroot "${target_dir}" \ -+ /bin/bash -c "/debootstrap/debootstrap --second-stage"' - [[ $? -ne 0 || ! -f "${target_dir}"/bin/bash ]] && exit_with_error "Create chroot second stage failed" - -+ [[ -f "${target_dir}"/etc/locale.gen ]] && -+ sed -i '/en_US.UTF-8/s/^# //g' "${target_dir}"/etc/locale.gen -+ eval 'LC_ALL=C LANG=C chroot "${target_dir}" \ -+ /bin/bash -c "locale-gen; update-locale --reset LANG=en_US.UTF-8"' -+ - create_sources_list "$release" "${target_dir}" - [[ $NO_APT_CACHER != yes ]] && - echo 'Acquire::http { Proxy "http://localhost:3142"; };' > "${target_dir}"/etc/apt/apt.conf.d/02proxy -@@ -78,9 +84,6 @@ create_chroot() { - APT::Install-Recommends "0"; - APT::Install-Suggests "0"; - EOF -- [[ -f "${target_dir}"/etc/locale.gen ]] && -- sed -i "s/^# en_US.UTF-8/en_US.UTF-8/" "${target_dir}"/etc/locale.gen -- chroot "${target_dir}" /bin/bash -c "locale-gen; update-locale LANG=en_US:en LC_ALL=en_US.UTF-8" - - printf '#!/bin/sh\nexit 101' > "${target_dir}"/usr/sbin/policy-rc.d - chmod 755 "${target_dir}"/usr/sbin/policy-rc.d -@@ -93,15 +96,25 @@ create_chroot() { - rm -rf "${target_dir}"/var/lock 2> /dev/null - mkdir -p "${target_dir}"/var/lock - fi -- chroot "${target_dir}" /bin/bash -c "/usr/sbin/update-ccache-symlinks" -+ eval 'LC_ALL=C LANG=C chroot "${target_dir}" \ -+ /bin/bash -c "/usr/sbin/update-ccache-symlinks"' - - display_alert "Upgrading packages in" "${target_dir}" "info" -- chroot "${target_dir}" /bin/bash -c "apt-get -q update; apt-get -q -y upgrade; apt-get clean" -+ eval 'LC_ALL=C LANG=C chroot "${target_dir}" \ -+ /bin/bash -c "apt-get -q update; apt-get -q -y upgrade; apt-get clean"' - date +%s > "$target_dir/root/.update-timestamp" - -+ # Install some packages with a large list of dependencies after the update. -+ # This optimizes the process and eliminates looping when calculating -+ # dependencies. -+ eval 'LC_ALL=C LANG=C chroot "${target_dir}" \ -+ /bin/bash -c "apt-get install \ -+ -q -y --no-install-recommends debhelper devscripts"' -+ - case $release in - bullseye | focal | hirsute | sid) -- chroot "${target_dir}" /bin/bash -c "apt-get install python-is-python3" -+ eval 'LC_ALL=C LANG=C chroot "${target_dir}" \ -+ /bin/bash -c "apt-get install python-is-python3"' - ;; - esac - -diff --git a/lib/functions/host/prepare-host.sh b/lib/functions/host/prepare-host.sh -index 0acd721b0..99fbbf787 100644 ---- a/lib/functions/host/prepare-host.sh -+++ b/lib/functions/host/prepare-host.sh -@@ -34,7 +34,7 @@ prepare_host() { - debian-archive-keyring debian-keyring debootstrap device-tree-compiler - dialog dirmngr dosfstools dwarves f2fs-tools fakeroot flex gawk - gnupg gpg imagemagick jq kmod libbison-dev -- libelf-dev libfdt-dev libfile-fcntllock-perl -+ libelf-dev libfdt-dev libfile-fcntllock-perl libmpc-dev - libfl-dev liblz4-tool libncurses-dev libssl-dev - libusb-1.0-0-dev linux-base locales ncurses-base ncurses-term - ntpdate patchutils -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index e3d2220e0..471050a30 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -230,7 +230,7 @@ function prepare_partitions() { - - check_loop_device "$LOOP" - -- run_host_command_logged losetup $LOOP ${SDCARD}.raw -+ run_host_command_logged losetup -P $LOOP ${SDCARD}.raw - - # loop device was grabbed here, unlock - flock -u $FD - -From 3459a57c661ce495eba407216a8c38f6f297b617 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 28 May 2022 12:44:49 +0200 -Subject: [PATCH] armbian-next: manual merge (21) of all changes between - revisions e7d7dab1bb50c1172206629a44f983c1794f8359 and - 0eb8fe7497aebf341bead2b3b0fb7309fd7bdc14 - ---- - config/sources/families/include/meson_common.inc | 22 +++--- - .../sources/families/include/rockchip64_common.inc | 6 +- - config/sources/families/media.conf | 4 +- - config/sources/families/mvebu64.conf | 8 ++- - config/sources/families/sun50iw9.conf | 2 +- - lib/functions/compilation/debs.sh | 4 +- - lib/functions/compilation/patch/kernel-drivers.sh | 78 ++++++++++++++++------ - lib/functions/host/prepare-host.sh | 2 +- - lib/functions/image/partitioning.sh | 2 +- - 9 files changed, 88 insertions(+), 40 deletions(-) - -diff --git a/config/sources/families/include/meson_common.inc b/config/sources/families/include/meson_common.inc -index d24ac85ee..e83c382de 100644 ---- a/config/sources/families/include/meson_common.inc -+++ b/config/sources/families/include/meson_common.inc -@@ -17,23 +17,29 @@ GOVERNOR=ondemand - case $BRANCH in - legacy) - -- export KERNEL_MAJOR_MINOR="5.4" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.4.y" -+ export KERNEL_MAJOR_MINOR="5.11" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.11.y" - KERNELPATCHDIR='meson-'$BRANCH - -+ BUILD_DESKTOP=no -+ - ;; - current) - -- export KERNEL_MAJOR_MINOR="5.10" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.10.y" -- KERNELPATCHDIR='meson-current' -+ export KERNEL_MAJOR_MINOR="5.14" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.14.y" -+ KERNELPATCHDIR='meson-'$BRANCH -+ -+ BUILD_DESKTOP=no - - ;; - edge) - -- export KERNEL_MAJOR_MINOR="5.11" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.11.y" -- KERNELPATCHDIR='meson-current' -+ KERNELDIR='linux-meson' -+ KERNELSOURCE='https://github.com/xdarklight/linux' -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:meson-mx-integration-5.18-20220417" -+ KERNELPATCHDIR='meson-'$BRANCH - - ;; - esac -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index 42e028e7d..7fc026892 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -104,8 +104,8 @@ case $BRANCH in - edge) - - KERNELPATCHDIR='rockchip64-'$BRANCH -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.17.y" -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.18.y" - LINUXFAMILY=rockchip64 - LINUXCONFIG='linux-rockchip64-'$BRANCH - -@@ -278,8 +278,6 @@ family_tweaks() { - cp -R $SRC/packages/blobs/rtl8723bt_fw/* $SDCARD/lib/firmware/rtl_bt/ - cp -R $SRC/packages/blobs/station/firmware/* $SDCARD/lib/firmware/ - if [[ $BRANCH == legacy && ($BOARD == station-m1) ]]; then -- cp $SRC/packages/blobs/rtl8723bt_fw/rtl8723ds_config.bin $SDCARD/lib/firmware/rtlbt/rtl8723d_config -- cp $SRC/packages/blobs/rtl8723bt_fw/rtl8723ds_fw.bin $SDCARD/lib/firmware/rtlbt/rtl8723d_fw - install -m 755 $SRC/packages/bsp/rk3328/m1/rtk_hciattach $SDCARD/usr/bin/rtk_hciattach - sed -e 's/exit 0//g' -i $SDCARD/etc/rc.local - echo "su -c '/usr/bin/rtk_hciattach -n -s 115200 /dev/ttyS2 rtk_h5 &'" >> $SDCARD/etc/rc.local -diff --git a/config/sources/families/media.conf b/config/sources/families/media.conf -index 747eb86a5..3b5bbe589 100644 ---- a/config/sources/families/media.conf -+++ b/config/sources/families/media.conf -@@ -46,7 +46,7 @@ case $BRANCH in - current) - export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.17.y" -- KERNELBRANCH="tag:v5.17.5" -+ KERNELBRANCH="tag:v5.17.9" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -@@ -55,7 +55,7 @@ case $BRANCH in - edge) - export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.18.y" -- KERNELBRANCH="tag:v5.18-rc5" -+ KERNELBRANCH="tag:v5.18" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -diff --git a/config/sources/families/mvebu64.conf b/config/sources/families/mvebu64.conf -index d9ae12786..fe35a0055 100644 ---- a/config/sources/families/mvebu64.conf -+++ b/config/sources/families/mvebu64.conf -@@ -2,7 +2,7 @@ enable_extension "marvell-tools" - ARCH=arm64 - BOOTBRANCH='branch:v2022.04' - BOOTENV_FILE='mvebu64.txt' --BOOTSCRIPT_OUTPUT='boot.scr.uimg' -+BOOTSCRIPT_OUTPUT='boot.scr' - ATFSOURCE='https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git' - ATFDIR='arm-trusted-firmware-espressobin' - ATFBRANCH='branch:master' -@@ -74,12 +74,16 @@ family_tweaks() { - chroot_sdcard_apt_get remove --auto-remove linux-sound-base alsa-base alsa-utils bluez - [[ -f $SDCARD/etc/netplan/armbian-default.yaml ]] && sed -i "s/^ renderer.*/ renderer: networkd/" $SDCARD/etc/netplan/armbian-default.yaml - cp $SRC/packages/bsp/mvebu64/networkd/10* $SDCARD/etc/systemd/network/ -+ if [[ $BOARD = "espressobin" ]]; then - echo "#Marvell Espressobin Console" >> $SDCARD/etc/securetty - echo "ttyMV0" >> $SDCARD/etc/securetty -+ fi - } - - family_tweaks_bsp() { -+ if [[ $BOARD = "espressobin" ]]; then - cp "$SRC/packages/bsp/mvebu64/initramfs/99-uboot-fit" "$destination/etc/initramfs/post-update.d/" -+ fi - } - - atf_custom_postprocess() { -@@ -110,7 +114,7 @@ uboot_custom_postprocess() { - display_alert "Building $FILENAME" "" "info" - # http://wiki.macchiatobin.net/tiki-index.php?page=Build+from+source+-+Bootloader#Building_ATF - run_host_command_logged make distclean -- run_host_command_logged make USE_COHERENT_MEM=0 LOG_LEVEL=20 MV_DDR_PATH=$SRC/cache/sources/marvell-ddr PLAT=a80x0_mcbin CROSS_COMPILE=$ATF1 BL33=$BL33 all fip $CTHREADS -+ run_host_command_logged make USE_COHERENT_MEM=0 LOG_LEVEL=20 MV_DDR_PATH=$SRC/cache/sources/marvell-ddr PLAT=a80x0_mcbin CROSS_COMPILE=$ATF1 BL33=$BL33 mrvl_flash $CTHREADS - run_host_command_logged cp -pv build/a80x0_mcbin/release/flash-image.bin $ubootdir/$FILENAME - else - cd $moxbootdir -diff --git a/config/sources/families/sun50iw9.conf b/config/sources/families/sun50iw9.conf -index c8b311493..c314ea1ee 100644 ---- a/config/sources/families/sun50iw9.conf -+++ b/config/sources/families/sun50iw9.conf -@@ -43,7 +43,7 @@ case $BRANCH in - ATFBRANCH='branch:master' - ATF_PLAT="sun50i_h616" - ATF_TARGET_MAP='PLAT=sun50i_h616 DEBUG=1 bl31;;build/sun50i_h616/debug/bl31.bin' -- LINUXCONFIG='linux-sunxi64-edge' -+ BOOTSCRIPT='boot-sun50i-next.cmd:boot.cmd' - - ;; - esac -diff --git a/lib/functions/compilation/debs.sh b/lib/functions/compilation/debs.sh -index 6e52631c8..3db0c44d4 100644 ---- a/lib/functions/compilation/debs.sh -+++ b/lib/functions/compilation/debs.sh -@@ -56,8 +56,8 @@ compile_armbian-zsh() { - armbian_zsh_dir=armbian-zsh_${REVISION}_all - display_alert "Building deb" "armbian-zsh" "info" - -- fetch_from_repo "https://github.com/robbyrussell/oh-my-zsh" "oh-my-zsh" "branch:master" -- fetch_from_repo "https://github.com/mroth/evalcache" "evalcache" "branch:master" -+ fetch_from_repo "$GITHUB_SOURCE/ohmyzsh/ohmyzsh" "oh-my-zsh" "branch:master" -+ fetch_from_repo "$GITHUB_SOURCE/mroth/evalcache" "evalcache" "branch:master" - - mkdir -p "${tmp_dir}/${armbian_zsh_dir}"/{DEBIAN,etc/skel/,etc/oh-my-zsh/,/etc/skel/.oh-my-zsh/cache} - -diff --git a/lib/functions/compilation/patch/kernel-drivers.sh b/lib/functions/compilation/patch/kernel-drivers.sh -index 8529e4ba1..91b5d5070 100644 ---- a/lib/functions/compilation/patch/kernel-drivers.sh -+++ b/lib/functions/compilation/patch/kernel-drivers.sh -@@ -31,32 +31,38 @@ function prepare_extra_kernel_drivers() { - # - # Older versions have AUFS support with a patch - -- if linux-version compare "${version}" ge 5.1 && linux-version compare "${version}" lt 5.15 && [ "$AUFS" == yes ]; then -+ if linux-version compare "${version}" ge 5.10 && linux-version compare "${version}" lt 5.15 && [ "$AUFS" == yes ]; then - # @TODO: Fasthash for this whole block is only the git hash of revision we'd apply from Mr. Okajima -- local aufs_tag # attach to specifics tag or branch -- aufs_tag=$(echo "${version}" | cut -f 1-2 -d ".") -+ # attach to specifics tag or branch -+ local aufstag -+ aufstag=$(echo "${version}" | cut -f 1-2 -d ".") - - # manual overrides -- if linux-version compare "${version}" ge 5.4.3 && linux-version compare "${version}" le 5.5; then aufstag="5.4.3"; fi - if linux-version compare "${version}" ge 5.10.82 && linux-version compare "${version}" le 5.11; then aufstag="5.10.82"; fi - if linux-version compare "${version}" ge 5.15.5 && linux-version compare "${version}" le 5.16; then aufstag="5.15.5"; fi - if linux-version compare "${version}" ge 5.17.3 && linux-version compare "${version}" le 5.18; then aufstag="5.17.3"; fi - -- # check if Mr. Okajima already made a branch for this version, otherwise use RC. -- git ls-remote --exit-code --heads https://github.com/sfjro/aufs5-standalone "aufs${aufs_tag}" > /dev/null || { -- aufs_tag="5.x-rcN" # then use rc branch -- git ls-remote --exit-code --heads https://github.com/sfjro/aufs5-standalone "aufs${aufs_tag}" > /dev/null -- } -- display_alert "Adding" "AUFS ${aufs_tag}" "info" -- local aufs_branch="branch:aufs${aufs_tag}" -- fetch_from_repo "https://github.com/sfjro/aufs5-standalone" "aufs5" "branch:${aufs_branch}" "yes" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/cache/sources/aufs5/${aufs_branch#*:}/aufs5-kbuild.patch" "applying" -- process_patch_file "${SRC}/cache/sources/aufs5/${aufs_branch#*:}/aufs5-base.patch" "applying" -- process_patch_file "${SRC}/cache/sources/aufs5/${aufs_branch#*:}/aufs5-mmap.patch" "applying" -- process_patch_file "${SRC}/cache/sources/aufs5/${aufs_branch#*:}/aufs5-standalone.patch" "applying" -- cp -R "${SRC}/cache/sources/aufs5/${aufs_branch#*:}"/{Documentation,fs} . -- cp "${SRC}/cache/sources/aufs5/${aufs_branch#*:}"/include/uapi/linux/aufs_type.h include/uapi/linux/ -+ # check if Mr. Okajima already made a branch for this version -+ improved_git ls-remote --exit-code --heads $GITHUB_SOURCE/sfjro/aufs5-standalone "aufs${aufstag}" > /dev/null -+ -+ if [ "$?" -ne "0" ]; then -+ # then use rc branch -+ aufstag="5.x-rcN" -+ improved_git ls-remote --exit-code --heads $GITHUB_SOURCE/sfjro/aufs5-standalone "aufs${aufstag}" > /dev/null -+ fi -+ -+ if [ "$?" -eq "0" ]; then -+ display_alert "Adding" "AUFS ${aufstag}" "info" -+ local aufsver="branch:aufs${aufstag}" -+ fetch_from_repo "$GITHUB_SOURCE/sfjro/aufs5-standalone" "aufs5" "branch:${aufsver}" "yes" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/cache/sources/aufs5/${aufsver#*:}/aufs5-kbuild.patch" "applying" -+ process_patch_file "${SRC}/cache/sources/aufs5/${aufsver#*:}/aufs5-base.patch" "applying" -+ process_patch_file "${SRC}/cache/sources/aufs5/${aufsver#*:}/aufs5-mmap.patch" "applying" -+ process_patch_file "${SRC}/cache/sources/aufs5/${aufsver#*:}/aufs5-standalone.patch" "applying" -+ cp -R "${SRC}/cache/sources/aufs5/${aufsver#*:}"/{Documentation,fs} . -+ cp "${SRC}/cache/sources/aufs5/${aufsver#*:}"/include/uapi/linux/aufs_type.h include/uapi/linux/ -+ fi - fi - - # WireGuard VPN for Linux 3.10 - 5.5 -@@ -546,6 +552,40 @@ function prepare_extra_kernel_drivers() { - - fi - -+ # Exfat driver -+ -+ if linux-version compare "${version}" ge 4.9 && linux-version compare "${version}" le 5.4; then -+ -+ # attach to specifics tag or branch -+ display_alert "Adding" "exfat driver ${exfatsver}" "info" -+ -+ local exfatsver="branch:master" -+ fetch_from_repo "$GITHUB_SOURCE/arter97/exfat-linux" "exfat" "${exfatsver}" "yes" -+ cd "$kerneldir" || exit -+ mkdir -p $kerneldir/fs/exfat/ -+ cp -R "${SRC}/cache/sources/exfat/${exfatsver#*:}"/{*.c,*.h} \ -+ $kerneldir/fs/exfat/ -+ -+ # Add to section Makefile -+ echo "obj-\$(CONFIG_EXFAT_FS) += exfat/" >> $kerneldir/fs/Makefile -+ -+ # Makefile -+ cat <<- EOF > "$kerneldir/fs/exfat/Makefile" -+ # SPDX-License-Identifier: GPL-2.0-or-later -+ # -+ # Makefile for the linux exFAT filesystem support. -+ # -+ obj-\$(CONFIG_EXFAT_FS) += exfat.o -+ exfat-y := inode.o namei.o dir.o super.o fatent.o cache.o nls.o misc.o file.o balloc.o xattr.o -+ EOF -+ -+ # Kconfig -+ sed -i '$i\source "fs\/exfat\/Kconfig"' $kerneldir/fs/Kconfig -+ cp "${SRC}/cache/sources/exfat/${exfatsver#*:}/Kconfig" \ -+ "$kerneldir/fs/exfat/Kconfig" -+ -+ fi -+ - if linux-version compare $version ge 4.4 && linux-version compare $version lt 5.8; then - display_alert "Adjusting" "Framebuffer driver for ST7789 IPS display" "info" - process_patch_file "${SRC}/patch/misc/fbtft-st7789v-invert-color.patch" "applying" -diff --git a/lib/functions/host/prepare-host.sh b/lib/functions/host/prepare-host.sh -index c5045e966..0acd721b0 100644 ---- a/lib/functions/host/prepare-host.sh -+++ b/lib/functions/host/prepare-host.sh -@@ -40,7 +40,7 @@ prepare_host() { - ntpdate patchutils - pkg-config pv python3-dev python3-distutils qemu-user-static rsync swig - systemd-container u-boot-tools udev uuid-dev whiptail -- zlib1g-dev -+ zlib1g-dev busybox - - # python2, including headers, mostly used by some u-boot builds (2017 et al, odroidxu4 and others). - python2 python2-dev -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index b06055335..e3d2220e0 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -336,7 +336,7 @@ function prepare_partitions() { - # if we have a headless device, set console to DEFAULT_CONSOLE - if [[ -n $DEFAULT_CONSOLE && -f $SDCARD/boot/armbianEnv.txt ]]; then - if grep -lq "^console=" $SDCARD/boot/armbianEnv.txt; then -- sed -i "s/console=.*/console=$DEFAULT_CONSOLE/" $SDCARD/boot/armbianEnv.txt -+ sed -i "s/^console=.*/console=$DEFAULT_CONSOLE/" $SDCARD/boot/armbianEnv.txt - else - echo "console=$DEFAULT_CONSOLE" >> $SDCARD/boot/armbianEnv.txt - fi - -From e4d0f9c279b4b8859b23e4828579337ea415f175 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 23 May 2022 20:35:54 +0200 -Subject: [PATCH] armbian-next: fix: patching CREATE_PATCHES=yes - -- needed to create output dir ---- - lib/functions/compilation/patch/patching.sh | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/lib/functions/compilation/patch/patching.sh b/lib/functions/compilation/patch/patching.sh -index 3b7762707..fd7e3e594 100644 ---- a/lib/functions/compilation/patch/patching.sh -+++ b/lib/functions/compilation/patch/patching.sh -@@ -148,6 +148,7 @@ userpatch_create() { - git add . - git -c user.name='Armbian User' -c user.email='user@example.org' commit -q -m "Cleaning working copy" - -+ mkdir -p "${DEST}/patch" - local patch="$DEST/patch/$1-$LINUXFAMILY-$BRANCH.patch" - - # apply previous user debug mode created patches - -From 2058ba0f88aa1196667089faedd64e469c7d7f32 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 21 May 2022 21:36:33 +0200 -Subject: [PATCH] armbian-next: add `python2-dev` dep for old uboots - -- cleanup some comments ---- - lib/functions/host/prepare-host.sh | 8 +++----- - 1 file changed, 3 insertions(+), 5 deletions(-) - -diff --git a/lib/functions/host/prepare-host.sh b/lib/functions/host/prepare-host.sh -index 55ae01988..c5045e966 100644 ---- a/lib/functions/host/prepare-host.sh -+++ b/lib/functions/host/prepare-host.sh -@@ -42,8 +42,8 @@ prepare_host() { - systemd-container u-boot-tools udev uuid-dev whiptail - zlib1g-dev - -- # python2, mostly used by some u-boot builds (2018 et al, odroidxu4 and others). -- python2 -+ # python2, including headers, mostly used by some u-boot builds (2017 et al, odroidxu4 and others). -+ python2 python2-dev - - # non-mess below? - file ccze colorized-logs tree # logging utilities -@@ -59,10 +59,8 @@ prepare_host() { - - if [[ $(dpkg --print-architecture) == amd64 ]]; then - : -- #host_dependencies+=(distcc lib32ncurses-dev lib32stdc++6 libc6-i386) -- #grep -q i386 <(dpkg --print-foreign-architectures) || dpkg --add-architecture i386 # @TODO: WHY?! don't do this! we don't want 32-bit x86 ever - elif [[ $(dpkg --print-architecture) == arm64 ]]; then -- host_dependencies+=(libc6 libc6-amd64-cross qemu) # What? -+ host_dependencies+=(libc6-amd64-cross qemu) # Support for running x86 binaries on ARM64 under qemu. - else - display_alert "Please read documentation to set up proper compilation environment" - display_alert "https://www.armbian.com/using-armbian-tools/" - -From 79185a3bad52301322e806a22103922b430f99fc Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 21 May 2022 18:52:18 +0200 -Subject: [PATCH] armbian-next: manual merge (20) of all changes between - revisions 6b72ae3c864fc020c6aadea473997ca033a0d8cc and - 247c4c45fd18aa370575998443fc837466c02971 - ---- - .../sources/families/include/rockchip64_common.inc | 36 ++++++++++++++++++++-- - lib/functions/compilation/debs.sh | 5 +-- - lib/functions/extras/buildpkg.sh | 5 ++- - lib/functions/image/fingerprint.sh | 1 + - 4 files changed, 38 insertions(+), 9 deletions(-) - -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index 21d07fda2..42e028e7d 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -297,12 +297,44 @@ family_tweaks_bsp() { - cat <<- EOF > "$destination"/etc/X11/xorg.conf.d/02-driver.conf - # set fbdev as default driver. - Section "Device" -- Identifier "NOGPU" -- Driver "fbdev" -+ Identifier "NOGPU" -+ Driver "fbdev" - EndSection - EOF - fi - -+ if [[ $BOARD == clockworkpi-a06 ]]; then -+ # rotate screen & disable dpms -+ mkdir -p "$destination"/etc/X11/xorg.conf.d -+ cat <<- EOF > "$destination"/etc/X11/xorg.conf.d/10-monitor.conf -+ # set monitor -+ Section "Monitor" -+ Identifier "DSI-1" -+ Option "Rotate" "right" -+ Option "DPMS" "false" -+ EndSection -+ -+ Section "ServerLayout" -+ Identifier "ServerLayout0" -+ Option "BlankTime" "0" -+ Option "StandbyTime" "0" -+ Option "SuspendTime" "0" -+ Option "OffTime" "0" -+ EndSection -+ EOF -+ # fan support -+ install -Dm644 $SRC/packages/bsp/clockworkpi-a06/temp_fan_daemon_a06.py $destination/usr/share/clockworkpi-a06-fan-daemon/bin/temp_fan_daemon_a06.py -+ cp $SRC/packages/bsp/clockworkpi-a06/clockworkpi-a06-fan-daemon.service $destination/lib/systemd/system/ -+ -+ # alsa-ucm-conf profile for DevTerm A06 -+ mkdir -p $destination/usr/share/alsa/ucm2/Rockchip/es8388 -+ install -Dm644 $SRC/packages/bsp/clockworkpi-a06/es8388.conf $destination/usr/share/alsa/ucm2/Rockchip/es8388/es8388.conf -+ install -Dm644 $SRC/packages/bsp/clockworkpi-a06/HiFi.conf $destination/usr/share/alsa/ucm2/Rockchip/es8388/HiFi.conf -+ mkdir -p $destination/usr/share/alsa/ucm2/conf.d/simple-card -+ ln -sfv /usr/share/alsa/ucm2/Rockchip/es8388/es8388.conf \ -+ $destination/usr/share/alsa/ucm2/conf.d/simple-card/rockchip,es8388-codec.conf -+ fi -+ - if [[ $BOARD == z28pro ]]; then - - mkdir -p $destination/usr/local/bin -diff --git a/lib/functions/compilation/debs.sh b/lib/functions/compilation/debs.sh -index 8816314af..6e52631c8 100644 ---- a/lib/functions/compilation/debs.sh -+++ b/lib/functions/compilation/debs.sh -@@ -105,11 +105,8 @@ compile_armbian-zsh() { - # define theme - sed -i 's/^ZSH_THEME=.*/ZSH_THEME="mrtazz"/' "${tmp_dir}/${armbian_zsh_dir}"/etc/skel/.zshrc - -- # disable prompt while update -- sed -i 's/# DISABLE_UPDATE_PROMPT="true"/DISABLE_UPDATE_PROMPT="true"/g' "${tmp_dir}/${armbian_zsh_dir}"/etc/skel/.zshrc -- - # disable auto update since we provide update via package -- sed -i 's/# DISABLE_AUTO_UPDATE="true"/DISABLE_AUTO_UPDATE="true"/g' "${tmp_dir}/${armbian_zsh_dir}"/etc/skel/.zshrc -+ sed -i "s/^# zstyle ':omz:update' mode disabled.*/zstyle ':omz:update' mode disabled/g" "${tmp_dir}/${armbian_zsh_dir}"/etc/skel/.zshrc - - # define default plugins - sed -i 's/^plugins=.*/plugins=(evalcache git git-extras debian tmux screen history extract colorize web-search docker)/' "${tmp_dir}/${armbian_zsh_dir}"/etc/skel/.zshrc -diff --git a/lib/functions/extras/buildpkg.sh b/lib/functions/extras/buildpkg.sh -index 09dd5d2e6..e79924426 100644 ---- a/lib/functions/extras/buildpkg.sh -+++ b/lib/functions/extras/buildpkg.sh -@@ -351,9 +351,8 @@ create_build_script() { - - package_builddeps="$package_builddeps" - if [ -z "\$package_builddeps" ]; then -- # Calculate build dependencies by a standard function and -- # еxclude special comparison characters like "|" "(>= 9)" -- package_builddeps="\$(dpkg-checkbuilddeps |& awk -F":" '{gsub(/[|]|[(].*[)]/, " ", \$0); print \$NF}')" -+ # Calculate build dependencies by a standard dpkg function -+ package_builddeps="\$(dpkg-checkbuilddeps |& awk -F":" '{print \$NF}')" - fi - if [[ -n "\${package_builddeps}" ]]; then - install_pkg_deb \${package_builddeps} -diff --git a/lib/functions/image/fingerprint.sh b/lib/functions/image/fingerprint.sh -index 566f76faf..6fc7c43fb 100644 ---- a/lib/functions/image/fingerprint.sh -+++ b/lib/functions/image/fingerprint.sh -@@ -8,6 +8,7 @@ fingerprint_image() { - Title: ${VENDOR} $REVISION ${BOARD^} $BRANCH - Kernel: Linux $VER - Build date: $(date +'%d.%m.%Y') -+ Builder rev: ${BUILD_REPOSITORY_COMMIT} - Maintainer: $MAINTAINER <$MAINTAINERMAIL> - Authors: https://www.armbian.com/authors - Sources: https://github.com/armbian/ - -From 449ce337d3997a00b867dcb9baae9624983fefdb Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 21 May 2022 16:22:58 +0200 -Subject: [PATCH] armbian-next: fix: pass `TERM` to kernel's make, so `make - menuconfig` can work - ---- - lib/functions/compilation/kernel.sh | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 3ecc4c3d6..ee54c8453 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -7,6 +7,7 @@ function run_kernel_make() { - "PATH=\"${toolchain}:${PATH}\"" # Insert the toolchain first into the PATH. - "DPKG_COLORS=always" # Use colors for dpkg - "XZ_OPT='--threads=0'" # Use parallel XZ compression -+ "TERM='${TERM}'" # Pass the terminal type, so that 'make menuconfig' can work. - ) - - common_make_params_quoted=( - -From 61c3306cdf3f79c318f93aa677b26da072d003bc Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 18 May 2022 11:49:04 +0200 -Subject: [PATCH] armbian-next: fix: git: read commit UNIX timestamp/local date - correctly - -- `checked_out_revision_ts` was correct; git outputs `%ct` as a UNIX timestamp, UTC-based -- `checked_out_revision_mtime` was incorrect: git output it without converting to local time -- manually convert using `date @xx` so it has correct local time, whatever it is. -- add debugging to `get_file_modification_time()` too ---- - lib/functions/compilation/patch/fasthash.sh | 1 + - lib/functions/general/git.sh | 4 ++-- - 2 files changed, 3 insertions(+), 2 deletions(-) - -diff --git a/lib/functions/compilation/patch/fasthash.sh b/lib/functions/compilation/patch/fasthash.sh -index 771837b89..26874517f 100644 ---- a/lib/functions/compilation/patch/fasthash.sh -+++ b/lib/functions/compilation/patch/fasthash.sh -@@ -52,6 +52,7 @@ function get_file_modification_time() { # @TODO: This is almost always called fr - # YYYYMMDDhhmm.ss - it is NOT a valid integer, but is what 'touch' wants for its "-t" parameter - # YYYYMMDDhhmmss - IS a valid integer and we can do math to it. 'touch' code will format it later - file_date=$(date +%Y%m%d%H%M%S -r "${1}") -+ display_alert "Read modification date for file" "${1} - ${file_date}" "timestamp" - echo -n "${file_date}" - return 0 - } -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 89b108a86..e5b5bd341 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -180,8 +180,8 @@ fetch_from_repo() { - fi - - # should be declared in outside scope, so can be read. -- checked_out_revision_mtime="$(git log --date='format:%Y%m%d%H%M%S' --format='format:%ad' -1 "${checkout_from}")" -- checked_out_revision_ts="$(git log -1 --pretty=%ct "${checkout_from}")" -+ checked_out_revision_ts="$(git log -1 --pretty=%ct "${checkout_from}")" # unix timestamp of the commit date -+ checked_out_revision_mtime="$(date +%Y%m%d%H%M%S -d "@${checked_out_revision_ts}")" # convert timestamp to local date/time - display_alert "checked_out_revision_mtime set!" "${checked_out_revision_mtime} - ${checked_out_revision_ts}" "git" - - display_alert "Cleaning git dir" "$(git status -s 2> /dev/null | wc -l) files" # working directory is not clean, show it - -From 73dba5953b8b76715005d8f8096040c4d5bcc153 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Tue, 17 May 2022 11:06:22 +0200 -Subject: [PATCH] armbian-next: abstract `$QEMU_BINARY` to `qemu-static.sh`: - `deploy_qemu_binary_to_chroot()`/`undeploy_qemu_binary_from_chroot()` - -- add hackish logic to avoid removing binary that would be needed if image actually contains `qemu-user-static` package ---- - config/sources/amd64.conf | 2 +- - extensions/flash-kernel.sh | 6 +++--- - lib/functions/image/initrd.sh | 7 ++++--- - lib/functions/rootfs/create-cache.sh | 2 +- - lib/functions/rootfs/post-tweaks.sh | 16 ++++++++++------ - lib/functions/rootfs/qemu-static.sh | 28 ++++++++++++++++++++++++++++ - lib/library-functions.sh | 9 +++++++++ - 7 files changed, 56 insertions(+), 14 deletions(-) - -diff --git a/config/sources/amd64.conf b/config/sources/amd64.conf -index 8b208bab2..20df57d45 100644 ---- a/config/sources/amd64.conf -+++ b/config/sources/amd64.conf -@@ -1,6 +1,6 @@ - export ARCH=amd64 # Debian name $(dpkg-architecture -qDEB_HOST_ARCH) - export ARCHITECTURE=x86_64 # "kernel" arch --export QEMU_BINARY="qemu-x86_64-static" # Hopefully you have this installed. -+export QEMU_BINARY="qemu-x86_64-static" # Installed via 'qemu-user-static'. - export KERNEL_COMPILER=' ' # hack: use single space for host gcc. won't work on arm64 hosts - export KERNEL_USE_GCC=' ' # more hacks. - export KERNEL_IMAGE_TYPE="bzImage" # Passed to kernel's `make` -diff --git a/extensions/flash-kernel.sh b/extensions/flash-kernel.sh -index ab5d308d8..14286cf4d 100644 ---- a/extensions/flash-kernel.sh -+++ b/extensions/flash-kernel.sh -@@ -71,7 +71,7 @@ pre_umount_final_image__remove_uboot_initramfs_hook_flash_kernel() { - - function pre_update_initramfs__setup_flash_kernel() { - local chroot_target=$MOUNT -- cp /usr/bin/"$QEMU_BINARY" "$chroot_target"/usr/bin/ -+ deploy_qemu_binary_to_chroot "${chroot_target}" - mount_chroot "$chroot_target/" # this already handles /boot/firmware which is required for it to work. - # hack, umount the chroot's /sys, otherwise flash-kernel tries to EFI flash due to the build host (!) being EFI - umount "$chroot_target/sys" -@@ -109,8 +109,8 @@ function pre_update_initramfs__setup_flash_kernel() { - chroot_custom "$chroot_target" chmod -v +x "/etc/kernel/postinst.d/initramfs-tools" - chroot_custom "$chroot_target" chmod -v +x "/etc/initramfs/post-update.d/flash-kernel" - -- umount_chroot "$chroot_target/" -- rm "$chroot_target"/usr/bin/"$QEMU_BINARY" -+ umount_chroot "${chroot_target}/" -+ undeploy_qemu_binary_from_chroot "${chroot_target}" - - display_alert "Disabling Armbian-core update_initramfs, was already done above." "${EXTENSION}" - unset KERNELSOURCE # ugly. sorry. we'll have better mechanism for this soon. this is tested at lib/debootstrap.sh:844 -diff --git a/lib/functions/image/initrd.sh b/lib/functions/image/initrd.sh -index 695864a77..2ba34e759 100644 ---- a/lib/functions/image/initrd.sh -+++ b/lib/functions/image/initrd.sh -@@ -49,7 +49,8 @@ update_initramfs() { - display_alert "initrd cache hash" "${initrd_hash}" "debug" - - display_alert "Mounting chroot for update-initramfs" "update-initramfs" "debug" -- cp "/usr/bin/$QEMU_BINARY" "$chroot_target/usr/bin"/ -+ deploy_qemu_binary_to_chroot "${chroot_target}" -+ - mount_chroot "$chroot_target/" - - if [[ -f "${initrd_cache_file_path}" ]]; then -@@ -96,8 +97,8 @@ update_initramfs() { - chroot_custom "$chroot_target" chmod -v +x /etc/kernel/postinst.d/initramfs-tools - - display_alert "Unmounting chroot" "update-initramfs" "debug" -- umount_chroot "$chroot_target/" -- rm "$chroot_target/usr/bin/$QEMU_BINARY" -+ umount_chroot "${chroot_target}/" -+ undeploy_qemu_binary_from_chroot "${chroot_target}" - - # no need to remove ${initrd_cache_current_manifest_filepath} manually, since it's under ${WORKDIR} - return 0 # avoid future short-circuit problems -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index 7d7fc87e9..fab43781b 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -125,7 +125,7 @@ function create_new_rootfs_cache() { - } - [[ ! -f ${SDCARD}/debootstrap/debootstrap ]] && exit_with_error "Debootstrap first stage did not produce marker file" - -- run_host_command_logged cp -pv "/usr/bin/$QEMU_BINARY" "$SDCARD/usr/bin/" # @TODO: who cleans this up later? -+ deploy_qemu_binary_to_chroot "${SDCARD}" # this is cleaned-up later by post_debootstrap_tweaks() - - mkdir -p "${SDCARD}/usr/share/keyrings/" - run_host_command_logged cp -pv /usr/share/keyrings/*-archive-keyring.gpg "${SDCARD}/usr/share/keyrings/" -diff --git a/lib/functions/rootfs/post-tweaks.sh b/lib/functions/rootfs/post-tweaks.sh -index ec26f46af..4a0db646a 100644 ---- a/lib/functions/rootfs/post-tweaks.sh -+++ b/lib/functions/rootfs/post-tweaks.sh -@@ -1,10 +1,14 @@ --post_debootstrap_tweaks() { -+function post_debootstrap_tweaks() { -+ display_alert "Applying post-tweaks" "post_debootstrap_tweaks" "debug" - -- # remove service start blockers and QEMU binary -- rm -f "${SDCARD}"/sbin/initctl "${SDCARD}"/sbin/start-stop-daemon -- chroot "${SDCARD}" /bin/bash -c "dpkg-divert --quiet --local --rename --remove /sbin/initctl" -- chroot "${SDCARD}" /bin/bash -c "dpkg-divert --quiet --local --rename --remove /sbin/start-stop-daemon" -- rm -f "${SDCARD}"/usr/sbin/policy-rc.d "${SDCARD}/usr/bin/${QEMU_BINARY}" -+ # remove service start blockers -+ run_host_command_logged rm -fv "${SDCARD}"/sbin/initctl "${SDCARD}"/sbin/start-stop-daemon -+ chroot_sdcard dpkg-divert --quiet --local --rename --remove /sbin/initctl -+ chroot_sdcard dpkg-divert --quiet --local --rename --remove /sbin/start-stop-daemon -+ run_host_command_logged rm -fv "${SDCARD}"/usr/sbin/policy-rc.d -+ -+ # remove the qemu static binary -+ undeploy_qemu_binary_from_chroot "${SDCARD}" - - call_extension_method "post_post_debootstrap_tweaks" "config_post_debootstrap_tweaks" <<- 'POST_POST_DEBOOTSTRAP_TWEAKS' - *run after removing diversions and qemu with chroot unmounted* -diff --git a/lib/functions/rootfs/qemu-static.sh b/lib/functions/rootfs/qemu-static.sh -new file mode 100644 -index 000000000..91569cbe1 ---- /dev/null -+++ b/lib/functions/rootfs/qemu-static.sh -@@ -0,0 +1,28 @@ -+function deploy_qemu_binary_to_chroot() { -+ local chroot_target="${1}" -+ -+ # @TODO: rpardini: Only deploy the binary if we're actually building a different architecture? otherwise unneeded. -+ -+ if [[ ! -f "${chroot_target}/usr/bin/${QEMU_BINARY}" ]]; then -+ display_alert "Deploying qemu-user-static binary to chroot" "${QEMU_BINARY}" "debug" -+ run_host_command_logged cp -pv "/usr/bin/${QEMU_BINARY}" "${chroot_target}/usr/bin/" -+ else -+ display_alert "qemu-user-static binary already deployed, skipping" "${QEMU_BINARY}" "debug" -+ fi -+} -+ -+function undeploy_qemu_binary_from_chroot() { -+ local chroot_target="${1}" -+ -+ # Hack: Check for magic "/usr/bin/qemu-s390x-static" marker; if that exists, it means "qemu-user-static" was installed -+ # in the chroot, and we shouldn't remove the binary, otherwise it's gonna be missing in the final image. -+ if [[ -f "${chroot_target}/usr/bin/qemu-s390x-static" ]]; then -+ display_alert "Not removing qemu binary, qemu-user-static package is installed in the chroot" "${QEMU_BINARY}" "debug" -+ return 0 -+ fi -+ -+ if [[ -f "${chroot_target}/usr/bin/${QEMU_BINARY}" ]]; then -+ display_alert "Removing qemu-user-static binary from chroot" "${QEMU_BINARY}" "debug" -+ run_host_command_logged rm -fv "${chroot_target}/usr/bin/${QEMU_BINARY}" -+ fi -+} -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 5bad7883a..ff42ed61f 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -496,6 +496,15 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/rootfs/post-tweaks.sh - source "${SRC}"/lib/functions/rootfs/post-tweaks.sh - -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/rootfs/qemu-static.sh -+# shellcheck source=lib/functions/rootfs/qemu-static.sh -+source "${SRC}"/lib/functions/rootfs/qemu-static.sh -+ - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - -From ef945476dee668f7ab3889f0cc2994467613b0d7 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 16 May 2022 18:06:25 +0200 -Subject: [PATCH] armbian-next: fix `uuidgen` basic dep check; use fake bash - `$RANDOM` if uuidgen not available - -- not good: we need uuidgen to begin logging, but it may not be installed yet. workaround. ---- - lib/functions/cli/cli-entrypoint.sh | 8 +++++++- - lib/functions/host/basic-deps.sh | 2 +- - 2 files changed, 8 insertions(+), 2 deletions(-) - -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index 65ad2b88e..82026963e 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -68,8 +68,14 @@ function cli_entrypoint() { - display_alert "Output directory DEST:" "${DEST}" "debug" - - # set unique mounting directory for this build. -+ # basic deps, which include "uuidgen", will be installed _after_ this, so we gotta tolerate it not being there yet. - declare -g ARMBIAN_BUILD_UUID -- ARMBIAN_BUILD_UUID="$(uuidgen)" -+ if [[ -f /usr/bin/uuidgen ]]; then -+ ARMBIAN_BUILD_UUID="$(uuidgen)" -+ else -+ display_alert "uuidgen not found" "uuidgen not installed yet" "info" -+ ARMBIAN_BUILD_UUID="no-uuidgen-yet-${RANDOM}-$((1 + $RANDOM % 10))$((1 + $RANDOM % 10))$((1 + $RANDOM % 10))$((1 + $RANDOM % 10))" -+ fi - display_alert "Build UUID:" "${ARMBIAN_BUILD_UUID}" "debug" - - # Super-global variables, used everywhere. The directories are NOT _created_ here, since this very early stage. -diff --git a/lib/functions/host/basic-deps.sh b/lib/functions/host/basic-deps.sh -index 4cce0f8bf..bb46fd155 100644 ---- a/lib/functions/host/basic-deps.sh -+++ b/lib/functions/host/basic-deps.sh -@@ -11,7 +11,7 @@ prepare_host_basic() { - "dialog:dialog" - "fuser:psmisc" - "getfacl:acl" -- "uuid:uuid uuid-runtime" -+ "uuidgen:uuid-runtime" - "curl:curl" - "gpg:gnupg" - "gawk:gawk" - -From bc644378ffa202f368e6c0bc705d7c3b05709f21 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 11 May 2022 21:15:18 +0200 -Subject: [PATCH] armbian-next: retry 3 times download-only also for - `PACKAGE_LIST_BOARD` - -- acng is really not helping ---- - lib/functions/rootfs/distro-agnostic.sh | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 4b664acc1..cd3462409 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -255,6 +255,9 @@ function install_distribution_agnostic() { - if [[ -n ${PACKAGE_LIST_BOARD} ]]; then - _pkg_list=${PACKAGE_LIST_BOARD} - display_alert "Installing PACKAGE_LIST_BOARD packages" "${_pkg_list}" -+ # shellcheck disable=SC2086 # we need to expand here. retry 3 times download-only to counter apt-cacher-ng failures. -+ do_with_retries 3 chroot_sdcard_apt_get_install_download_only ${_pkg_list} -+ - # shellcheck disable=SC2086 # we need to expand. - chroot_sdcard_apt_get_install ${_pkg_list} - fi - -From 37a7eb9cbbf8fdf02054e2c9b5fd9eb924aa2524 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 11 May 2022 16:51:09 +0200 -Subject: [PATCH] armbian-next: allow customizing UBUNTU_MIRROR (ports mirror) - with `CUSTOM_UBUNTU_MIRROR_ARM64=host/path` - ---- - lib/functions/configuration/main-config.sh | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 5100e6d35..31c4d6280 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -331,6 +331,13 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - fi - fi - -+ if [[ "${ARCH}" == "arm64" ]]; then -+ if [[ -n ${CUSTOM_UBUNTU_MIRROR_ARM64} ]]; then -+ display_alert "Using custom ports/arm64 mirror" "${CUSTOM_UBUNTU_MIRROR_ARM64}" "info" -+ UBUNTU_MIRROR="${CUSTOM_UBUNTU_MIRROR_ARM64}" -+ fi -+ fi -+ - # don't use mirrors that throws garbage on 404 - if [[ -z ${ARMBIAN_MIRROR} && "${SKIP_ARMBIAN_REPO}" != "yes" ]]; then - declare -i armbian_mirror_tries=1 - -From 6533471c376936d076fe884304b27e904af6d54e Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 9 May 2022 20:41:47 +0200 -Subject: [PATCH] armbian-next: WiP: kernel make via `env -i` for clean env; - show produced /boot tree - ---- - lib/functions/compilation/kernel-debs.sh | 3 +++ - lib/functions/compilation/kernel.sh | 4 ++-- - 2 files changed, 5 insertions(+), 2 deletions(-) - -diff --git a/lib/functions/compilation/kernel-debs.sh b/lib/functions/compilation/kernel-debs.sh -index dd5a143c7..3cae7845a 100644 ---- a/lib/functions/compilation/kernel-debs.sh -+++ b/lib/functions/compilation/kernel-debs.sh -@@ -153,6 +153,9 @@ function kernel_package_callback_linux_image() { - declare installed_image_path="boot/vmlinuz-${kernel_version_family}" # using old mkdebian terminology here. - declare image_name="Image" # for arm64. or, "zImage" for arm, or "vmlinuz" for others. Why? See where u-boot puts them. - -+ display_alert "Showing contents of Kbuild produced /boot" "linux-image" "debug" -+ run_host_command_logged tree -C --du -h "${tmp_kernel_install_dirs[INSTALL_PATH]}" -+ - run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_PATH]}" "${package_directory}/" # /boot stuff - run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_MOD_PATH]}/lib" "${package_directory}/" # so "lib" stuff sits at the root - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 86235f767..3ecc4c3d6 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -27,8 +27,8 @@ function run_kernel_make() { - "KGZIP=pigz" "KBZIP2=pbzip2" # Parallel compression, use explicit parallel compressors https://lore.kernel.org/lkml/20200901151002.988547791@linuxfoundation.org/ - ) - -- # last statement, so it passes the result to calling function. -- full_command=("${KERNEL_MAKE_RUNNER:-run_host_command_logged}" "${common_make_envs[@]}" -+ # last statement, so it passes the result to calling function. "env -i" is used for empty env -+ full_command=("${KERNEL_MAKE_RUNNER:-run_host_command_logged}" "env" "-i" "${common_make_envs[@]}" - make "${common_make_params_quoted[@]@Q}" "$@" "${make_filter}") - "${full_command[@]}" # and exit with it's code, since it's the last statement - } - -From 514a63ddef96369aa2be85175544eedb000779c5 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 8 May 2022 20:50:42 +0200 -Subject: [PATCH] armbian-next: manual merge (19) of all changes between - revisions b23498b94909a855d8b0fda1a95ccfc0ab17c747 and - e621d25adc8ee66b0d14c94605ef462a13464b85 - -- the ssh firstrun revert stuff mostly ---- - lib/functions/main/rootfs-image.sh | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index 87821d253..590ca1f84 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -67,9 +67,6 @@ function build_rootfs_and_image() { - # install from apt.armbian.com # @TODO: armbian-nextify this eventually - [[ $EXTERNAL_NEW == prebuilt ]] && LOG_SECTION="packages_prebuilt" do_with_logging chroot_installpackages "yes" - -- # remove existing ssh keys. They will be created in 1st boot process -- rm -f "${SDCARD}"/etc/ssh/ssh_host* -- - # stage: user customization script - # NOTE: installing too many packages may fill tmpfs mount - LOG_SECTION="customize_image" do_with_logging customize_image - -From 896c4e78d75f23a8dfa21354773cd8254f34d196 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 7 May 2022 03:55:49 +0200 -Subject: [PATCH] armbian-next: *breaking change* remove `LIB_TAG` and - `.ignore_changes` completely - -- one day should be replaced with an "update checker" extension, or even "update-enforcer" -- for now this just causes chaos ---- - config/templates/config-example.conf | 1 - - lib/functions/cli/cli-entrypoint.sh | 3 -- - lib/functions/cli/utils-cli.sh | 71 ------------------------------------ - 3 files changed, 75 deletions(-) - -diff --git a/config/templates/config-example.conf b/config/templates/config-example.conf -index e07496dc8..3a524d1ce 100644 ---- a/config/templates/config-example.conf -+++ b/config/templates/config-example.conf -@@ -22,7 +22,6 @@ DEST_LANG="en_US.UTF-8" # sl_SI.UTF-8, en_US.UTF-8 - # advanced - EXTERNAL_NEW="prebuilt" # compile and install or install prebuilt additional packages - INSTALL_HEADERS="" # install kernel headers package --LIB_TAG="master" # change to "branchname" to use any branch currently available. - USE_TORRENT="no" # use torrent network for faster toolchain and cache download - DOWNLOAD_MIRROR="" # set to "china" to use chinese mirrors - CARD_DEVICE="" # device name /dev/sdx of your SD card to burn directly to the card when done -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index c6d0459ed..65ad2b88e 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -9,9 +9,6 @@ function cli_entrypoint() { - trap 'echo "${BASH_LINENO[@]}|${BASH_SOURCE[@]}|${FUNCNAME[@]}" >> ${SRC}/output/call-traces/calls.txt ;' RETURN - fi - -- check_args "$@" -- do_update_src "$@" -- - if [[ "${EUID}" == "0" ]] || [[ "${1}" == "vagrant" ]]; then - : - elif [[ "${1}" == docker || "${1}" == dockerpurge || "${1}" == docker-shell ]] && grep -q "$(whoami)" <(getent group docker); then -diff --git a/lib/functions/cli/utils-cli.sh b/lib/functions/cli/utils-cli.sh -index a48de5d3a..40764c2d7 100644 ---- a/lib/functions/cli/utils-cli.sh -+++ b/lib/functions/cli/utils-cli.sh -@@ -1,76 +1,5 @@ - # Misc functions from compile.sh - --# Add the variables needed at the beginning of the path --check_args() { -- for p in "$@"; do -- case "${p%=*}" in -- LIB_TAG) -- # Take a variable if the branch exists locally -- if [ "${p#*=}" == "$(git branch | -- gawk -v b="${p#*=}" '{if ( $NF == b ) {print $NF}}')" ]; then -- echo -e "[\e[0;35m warn \x1B[0m] Setting $p" -- eval "$p" -- else -- echo -e "[\e[0;35m warn \x1B[0m] Skip $p setting as LIB_TAG=\"\"" -- eval LIB_TAG="" -- fi -- ;; -- esac -- done --} -- --function do_update_src() { -- TMPFILE=$(mktemp) -- chmod 644 "${TMPFILE}" -- { -- echo SRC="$SRC" -- echo LIB_TAG="$LIB_TAG" -- declare -f update_src # this writes the source of 'update_src' there -- echo "update_src" -- } > "$TMPFILE" -- -- #do not update/checkout git with root privileges to messup files onwership. -- #due to in docker/VM, we can't su to a normal user, so do not update/checkout git. -- if [[ $(systemd-detect-virt) == 'none' ]]; then -- if [[ "${EUID}" == "0" ]]; then -- su "$(stat --format=%U "${SRC}"/.git)" -c "bash ${TMPFILE}" -- else -- bash "${TMPFILE}" -- fi -- fi -- rm "${TMPFILE}" --} -- --update_src() { -- cd "${SRC}" || exit -- if [[ ! -f "${SRC}"/.ignore_changes ]]; then -- echo -e "[\e[0;32m o.k. \x1B[0m] This script will try to update" -- -- CHANGED_FILES=$(git diff --name-only) -- if [[ -n "${CHANGED_FILES}" ]]; then -- echo -e "[\e[0;35m warn \x1B[0m] Can't update since you made changes to: \e[0;32m\n${CHANGED_FILES}\x1B[0m" -- while true; do -- echo -e "Press \e[0;33m\x1B[0m or \e[0;33mexit\x1B[0m to abort compilation" \ -- ", \e[0;33m\x1B[0m to ignore and continue, \e[0;33mdiff\x1B[0m to display changes" -- read -r -- if [[ "${REPLY}" == "diff" ]]; then -- git diff -- elif [[ "${REPLY}" == "exit" ]]; then -- exit 1 -- elif [[ "${REPLY}" == "" ]]; then -- break -- else -- echo "Unknown command!" -- fi -- done -- elif [[ $(git branch | grep "*" | awk '{print $2}') != "${LIB_TAG}" && -n "${LIB_TAG}" ]]; then -- git checkout "${LIB_TAG:-master}" -- git pull -- fi -- fi -- --} -- - function handle_docker_vagrant() { - # Check for Vagrant - if [[ "${1}" == vagrant && -z "$(command -v vagrant)" ]]; then - -From d20902020953d75c3f7d1a9c27ec9c553825660a Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 8 May 2022 14:15:32 +0200 -Subject: [PATCH] armbian-next: `python2` is required for some u-boot builds - -- would be "use `python-is-python2` so /usr/bin/python exists and points to Python 2.x" but Jammy does not have that anymore -- python2 is required for some u-boot builds. -- that said, python 2.x is deprecated for a while and needs work thus @TODO ---- - lib/functions/host/prepare-host.sh | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/lib/functions/host/prepare-host.sh b/lib/functions/host/prepare-host.sh -index b48f666b1..55ae01988 100644 ---- a/lib/functions/host/prepare-host.sh -+++ b/lib/functions/host/prepare-host.sh -@@ -42,6 +42,9 @@ prepare_host() { - systemd-container u-boot-tools udev uuid-dev whiptail - zlib1g-dev - -+ # python2, mostly used by some u-boot builds (2018 et al, odroidxu4 and others). -+ python2 -+ - # non-mess below? - file ccze colorized-logs tree # logging utilities - unzip zip p7zip-full pigz pixz pbzip2 lzop zstd # compressors et al - -From cec6a1b3ebe5c7df20dc8be8f7687416843d5db9 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 8 May 2022 13:45:19 +0200 -Subject: [PATCH] armbian-next: bump Python info gatherer to RELEASE=jammy too - ---- - lib/tools/info.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/tools/info.py b/lib/tools/info.py -index 6319a1427..f452b37ab 100755 ---- a/lib/tools/info.py -+++ b/lib/tools/info.py -@@ -119,7 +119,7 @@ common_compile_params = { - } - - board_compile_params = { -- "RELEASE": "impish", -+ "RELEASE": "jammy", - "BUILD_DESKTOP": "no" - } - - -From 75a638f13bfeeb3327510ad9c1ef3ce3adb166bd Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 8 May 2022 13:44:28 +0200 -Subject: [PATCH] armbian-next: add `KERNEL_MAJOR_MINOR` info to `media` kernel - (@balbes150) - -- 5.18 is not yet released so might be a problem here ---- - config/sources/families/media.conf | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/config/sources/families/media.conf b/config/sources/families/media.conf -index ef89b8f07..747eb86a5 100644 ---- a/config/sources/families/media.conf -+++ b/config/sources/families/media.conf -@@ -17,6 +17,7 @@ case $BRANCH in - - if [[ $BOARD == station-p2 || $BOARD == station-m2 ]]; then - KERNELSOURCE='https://github.com/150balbes/rockchip-kernel' -+ export KERNEL_MAJOR_MINOR="4.19" # Major and minor versions of this kernel. - KERNELBRANCH='branch:kernel-4.19' - KERNELPATCHDIR='station-p2-'$BRANCH - LINUXFAMILY=station-p2 -@@ -26,12 +27,14 @@ case $BRANCH in - else - if [[ $BOARD == nanopct4 ]]; then - KERNELSOURCE='https://github.com/friendlyarm/kernel-rockchip' -+ export KERNEL_MAJOR_MINOR="4.4" # Major and minor versions of this kernel. - KERNELBRANCH='branch:nanopi4-linux-v4.4.y' - KERNELPATCHDIR='rk3399-'$BRANCH - LINUXFAMILY=rk3399 - LINUXCONFIG='linux-rk3399-'$BRANCH - else - KERNELSOURCE='https://github.com/ayufan-rock64/linux-kernel' -+ export KERNEL_MAJOR_MINOR="4.4" # Major and minor versions of this kernel. - KERNELBRANCH='tag:4.4.202-1237-rockchip-ayufan' - KERNELPATCHDIR='rockchip64-'$BRANCH - LINUXFAMILY=rockchip64 -@@ -41,6 +44,7 @@ case $BRANCH in - ;; - - current) -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.17.y" - KERNELBRANCH="tag:v5.17.5" - KERNELPATCHDIR='media-'$BRANCH -@@ -49,6 +53,7 @@ case $BRANCH in - ;; - - edge) -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.18.y" - KERNELBRANCH="tag:v5.18-rc5" - KERNELPATCHDIR='media-'$BRANCH - -From 91db9e2a305cd385077289363ffe1212a7c614f2 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 8 May 2022 00:18:35 +0200 -Subject: [PATCH] armbian-next: allow to skip submodules during - `fetch_from_repo`; introduce hook `fetch_custom_uboot` - -- via GIT_SKIP_SUBMODULES=yes, which disables all submodules everywhere -- via UBOOT_GIT_SKIP_SUBMODULES=yes, which disables fetching of submodules during uboot fetch (hidden rkbins anyone?) -- extension hook `fetch_custom_uboot` so we can fetch our own stuff if needed ---- - lib/functions/compilation/uboot.sh | 9 ++++++++- - lib/functions/general/git.sh | 34 +++++++++++++++++++--------------- - 2 files changed, 27 insertions(+), 16 deletions(-) - -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index f87470eb7..699946406 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -107,7 +107,14 @@ function compile_uboot_target() { - compile_uboot() { - if [[ -n $BOOTSOURCE ]] && [[ "${BOOTSOURCE}" != "none" ]]; then - display_alert "Downloading sources" "u-boot" "git" -- fetch_from_repo "$BOOTSOURCE" "$BOOTDIR" "$BOOTBRANCH" "yes" # fetch_from_repo -+ GIT_SKIP_SUBMODULES="${UBOOT_GIT_SKIP_SUBMODULES}" fetch_from_repo "$BOOTSOURCE" "$BOOTDIR" "$BOOTBRANCH" "yes" # fetch_from_repo -+ -+ display_alert "Extensions: fetch custom uboot" "fetch_custom_uboot" "debug" -+ call_extension_method "fetch_custom_uboot" <<- 'FETCH_CUSTOM_UBOOT' -+ *allow extensions to fetch extra uboot sources* -+ For downstream uboot et al. -+ This is done after `GIT_SKIP_SUBMODULES="${UBOOT_GIT_SKIP_SUBMODULES}" fetch_from_repo "$BOOTSOURCE" "$BOOTDIR" "$BOOTBRANCH" "yes"` -+ FETCH_CUSTOM_UBOOT - fi - - # not optimal, but extra cleaning before overlayfs_wrapper should keep sources directory clean -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index c8086f728..89b108a86 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -198,21 +198,25 @@ fetch_from_repo() { - #fasthash_debug "after setting checkout time for $dir $ref_name" #yeah - - if [[ -f .gitmodules ]]; then -- display_alert "Updating submodules" "" "ext" -- # FML: http://stackoverflow.com/a/17692710 -- for i in $(git config -f .gitmodules --get-regexp path | awk '{ print $2 }'); do -- cd "${git_work_dir}" || exit -- local surl sref -- surl=$(git config -f .gitmodules --get "submodule.$i.url") -- sref=$(git config -f .gitmodules --get "submodule.$i.branch" || true) -- if [[ -n $sref ]]; then -- sref="branch:$sref" -- else -- sref="head" -- fi -- # @TODO: in case of the bundle stuff this will fail terribly -- fetch_from_repo "$surl" "$workdir/$i" "$sref" -- done -+ if [[ "${GIT_SKIP_SUBMODULES}" == "yes" ]]; then -+ display_alert "Skipping submodules" "GIT_SKIP_SUBMODULES=yes" "debug" -+ else -+ display_alert "Updating submodules" "" "ext" -+ # FML: http://stackoverflow.com/a/17692710 -+ for i in $(git config -f .gitmodules --get-regexp path | awk '{ print $2 }'); do -+ cd "${git_work_dir}" || exit -+ local surl sref -+ surl=$(git config -f .gitmodules --get "submodule.$i.url") -+ sref=$(git config -f .gitmodules --get "submodule.$i.branch" || true) -+ if [[ -n $sref ]]; then -+ sref="branch:$sref" -+ else -+ sref="head" -+ fi -+ # @TODO: in case of the bundle stuff this will fail terribly -+ fetch_from_repo "$surl" "$workdir/$i" "$sref" -+ done -+ fi - fi - - display_alert "Final working copy size" "$(du -h -s | awk '{print $1}')" "git" - -From fb3add638441223317735bf5eb826badfe8c0924 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 9 May 2022 12:15:08 +0200 -Subject: [PATCH] armbian-next: `initrd` caching fixes (always enable hook; if - cache hit, convert to uImage too) - ---- - lib/functions/image/initrd.sh | 23 +++++++++++++++-------- - 1 file changed, 15 insertions(+), 8 deletions(-) - -diff --git a/lib/functions/image/initrd.sh b/lib/functions/image/initrd.sh -index 817bdf78a..695864a77 100644 ---- a/lib/functions/image/initrd.sh -+++ b/lib/functions/image/initrd.sh -@@ -48,6 +48,10 @@ update_initramfs() { - initrd_cache_file_path="${SRC}/cache/initrd/${initrd_cache_key}" - display_alert "initrd cache hash" "${initrd_hash}" "debug" - -+ display_alert "Mounting chroot for update-initramfs" "update-initramfs" "debug" -+ cp "/usr/bin/$QEMU_BINARY" "$chroot_target/usr/bin"/ -+ mount_chroot "$chroot_target/" -+ - if [[ -f "${initrd_cache_file_path}" ]]; then - display_alert "initrd cache hit" "${initrd_cache_key}" "cachehit" - run_host_command_logged cp -pv "${initrd_cache_file_path}" "${initrd_file}" -@@ -55,6 +59,11 @@ update_initramfs() { - if [[ -f "${initrd_cache_last_manifest_filepath}" ]]; then - touch "${initrd_cache_last_manifest_filepath}" # touch the manifest file timestamp; LRU bump. - fi -+ -+ # Convert to bootscript expected format, by calling into the script manually. -+ if [[ -f "${chroot_target}"/etc/initramfs/post-update.d/99-uboot ]]; then -+ chroot_custom "$chroot_target" /etc/initramfs/post-update.d/99-uboot "${initrd_kern_ver}" "/boot/initrd.img-${initrd_kern_ver}" -+ fi - else - display_alert "Cache miss for initrd cache" "${initrd_cache_key}" "debug" - -@@ -67,9 +76,6 @@ update_initramfs() { - fi - - display_alert "Updating initramfs..." "$update_initramfs_cmd" "" -- cp "/usr/bin/$QEMU_BINARY" "$chroot_target/usr/bin"/ -- mount_chroot "$chroot_target/" -- - local logging_filter="2>&1 | grep --line-buffered -v -e '.xz' -e 'ORDER ignored' -e 'Adding binary ' -e 'Adding module ' -e 'Adding firmware ' " - chroot_custom_long_running "$chroot_target" "$update_initramfs_cmd" "${logging_filter}" - display_alert "Updated initramfs." "${update_initramfs_cmd}" "info" -@@ -84,13 +90,14 @@ update_initramfs() { - # 60: keep the last 30 initrd + manifest pairs. this should be higher than the total number of kernels we support, otherwise churn will be high - find "${SRC}/cache/initrd" -type f -printf "%T@ %p\\n" | sort -n -r | sed "1,60d" | xargs rm -fv - fi -+ fi - -- display_alert "Re-enabling" "initramfs-tools hook for kernel" -- chroot_custom "$chroot_target" chmod -v +x /etc/kernel/postinst.d/initramfs-tools -+ display_alert "Re-enabling" "initramfs-tools hook for kernel" -+ chroot_custom "$chroot_target" chmod -v +x /etc/kernel/postinst.d/initramfs-tools - -- umount_chroot "$chroot_target/" -- rm "$chroot_target/usr/bin/$QEMU_BINARY" -- fi -+ display_alert "Unmounting chroot" "update-initramfs" "debug" -+ umount_chroot "$chroot_target/" -+ rm "$chroot_target/usr/bin/$QEMU_BINARY" - - # no need to remove ${initrd_cache_current_manifest_filepath} manually, since it's under ${WORKDIR} - return 0 # avoid future short-circuit problems - -From a732119d010bf7008caaacf3e50b3659c8dbf472 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 17 Apr 2022 05:19:46 +0200 -Subject: [PATCH] armbian-next: introduce `initramfs`/`initrd` caching - -- using hashes of (hopefully) all involved files -- cache hits are rewarded with sprinkly hearts. - - why? this proves we got a reproducible kernel modules build! - - also, you just saved yourself 2-10 minutes of pain ---- - lib/functions/image/initrd.sh | 87 +++++++++++++++++++++++++++++++++------- - lib/functions/logging/logging.sh | 5 +++ - 2 files changed, 78 insertions(+), 14 deletions(-) - -diff --git a/lib/functions/image/initrd.sh b/lib/functions/image/initrd.sh -index feb4143c8..817bdf78a 100644 ---- a/lib/functions/image/initrd.sh -+++ b/lib/functions/image/initrd.sh -@@ -13,26 +13,85 @@ - # see: https://github.com/armbian/build/issues/1584 - update_initramfs() { - local chroot_target=$1 -- local target_dir="$(find "${chroot_target}/lib/modules"/ -maxdepth 1 -type d -name "*${VER}*")" -+ local target_dir="$(find "${chroot_target}/lib/modules"/ -maxdepth 1 -type d -name "*${VER}*")" # @TODO: rpardini: this will break when we add multi-kernel images -+ local initrd_kern_ver initrd_file initrd_cache_key initrd_cache_file_path initrd_hash -+ local initrd_cache_current_manifest_filepath initrd_cache_last_manifest_filepath - if [ "$target_dir" != "" ]; then -- update_initramfs_cmd="update-initramfs -uv -k $(basename "$target_dir")" -+ initrd_kern_ver="$(basename "$target_dir")" -+ initrd_file="${chroot_target}/boot/initrd.img-${initrd_kern_ver}" -+ -+ update_initramfs_cmd="update-initramfs -uv -k ${initrd_kern_ver}" - else - exit_with_error "No kernel installed for the version" "${VER}" - fi -- display_alert "Updating initramfs..." "$update_initramfs_cmd" "" -- cp "/usr/bin/$QEMU_BINARY" "$chroot_target/usr/bin"/ -- mount_chroot "$chroot_target/" - -- local logging_filter="2>&1 | grep --line-buffered -v -e '.xz' -e 'ORDER ignored' -e 'Adding binary ' -e 'Adding module ' -e 'Adding firmware ' " -- chroot_custom_long_running "$chroot_target" "$update_initramfs_cmd" "${logging_filter}" || { -- exit_with_error "Updating initramfs FAILED" -- } -- display_alert "Updated initramfs." "${update_initramfs_cmd}" "info" -+ # Caching. -+ # Find all modules and all firmware in the target. -+ # Find all initramfs configuration in /etc -+ # Find all bash, cpio and gzip binaries in /bin -+ # Hash the contents of them all. -+ # If there's a match, use the cache. -+ -+ display_alert "computing initrd cache hash" "${chroot_target}" "debug" -+ mkdir -p "${SRC}/cache/initrd" -+ initrd_cache_current_manifest_filepath="${WORKDIR}/initrd.img-${initrd_kern_ver}.${ARMBIAN_BUILD_UUID}.manifest" -+ initrd_cache_last_manifest_filepath="${SRC}/cache/initrd/initrd.manifest-${initrd_kern_ver}.last.manifest" -+ -+ # Find all the affected files; parallel md5sum sum them; invert hash and path, and remove chroot prefix. -+ find "${target_dir}" "${chroot_target}/usr/bin/bash" "${chroot_target}/etc/initramfs" \ -+ "${chroot_target}/etc/initramfs-tools" -type f | parallel -X md5sum | -+ awk '{print $2 " - " $1}' | -+ sed -e "s|^${chroot_target}||g" | LC_ALL=C sort > "${initrd_cache_current_manifest_filepath}" -+ -+ initrd_hash="$(cat "${initrd_cache_current_manifest_filepath}" | md5sum | cut -d ' ' -f 1)" # hash of the hashes. -+ initrd_cache_key="initrd.img-${initrd_kern_ver}-${initrd_hash}" -+ initrd_cache_file_path="${SRC}/cache/initrd/${initrd_cache_key}" -+ display_alert "initrd cache hash" "${initrd_hash}" "debug" -+ -+ if [[ -f "${initrd_cache_file_path}" ]]; then -+ display_alert "initrd cache hit" "${initrd_cache_key}" "cachehit" -+ run_host_command_logged cp -pv "${initrd_cache_file_path}" "${initrd_file}" -+ touch "${initrd_cache_file_path}" # touch cached file timestamp; LRU bump. -+ if [[ -f "${initrd_cache_last_manifest_filepath}" ]]; then -+ touch "${initrd_cache_last_manifest_filepath}" # touch the manifest file timestamp; LRU bump. -+ fi -+ else -+ display_alert "Cache miss for initrd cache" "${initrd_cache_key}" "debug" -+ -+ # Show the differences between the last and the current, so we realize why it isn't hit (eg; what changed). -+ if [[ -f "${initrd_cache_last_manifest_filepath}" ]]; then -+ if [[ "${SHOW_DEBUG}" == "yes" ]]; then -+ display_alert "Showing diff between last and current initrd cache manifests" "initrd" "debug" -+ run_host_command_logged diff -u --color=always "${initrd_cache_last_manifest_filepath}" "${initrd_cache_current_manifest_filepath}" "|| true" # no errors please -+ fi -+ fi -+ -+ display_alert "Updating initramfs..." "$update_initramfs_cmd" "" -+ cp "/usr/bin/$QEMU_BINARY" "$chroot_target/usr/bin"/ -+ mount_chroot "$chroot_target/" -+ -+ local logging_filter="2>&1 | grep --line-buffered -v -e '.xz' -e 'ORDER ignored' -e 'Adding binary ' -e 'Adding module ' -e 'Adding firmware ' " -+ chroot_custom_long_running "$chroot_target" "$update_initramfs_cmd" "${logging_filter}" -+ display_alert "Updated initramfs." "${update_initramfs_cmd}" "info" - -- display_alert "Re-enabling" "initramfs-tools hook for kernel" -- chroot "$chroot_target" /bin/bash -c "chmod -v +x /etc/kernel/postinst.d/initramfs-tools" 2>&1 -+ display_alert "Storing initrd in cache" "${initrd_cache_key}" "debug" # notice there's no -p here: no need to touch LRU -+ run_host_command_logged cp -v "${initrd_file}" "${initrd_cache_file_path}" # store the new initrd in the cache. -+ run_host_command_logged cp -v "${initrd_cache_current_manifest_filepath}" "${initrd_cache_last_manifest_filepath}" # store the current contents in the last file. - -- umount_chroot "$chroot_target/" -- rm $chroot_target/usr/bin/$QEMU_BINARY -+ # clean old cache files so they don't pile up forever. -+ if [[ "${SHOW_DEBUG}" == "yes" ]]; then -+ display_alert "Showing which initrd caches would be removed/expired" "initrd" "debug" -+ # 60: keep the last 30 initrd + manifest pairs. this should be higher than the total number of kernels we support, otherwise churn will be high -+ find "${SRC}/cache/initrd" -type f -printf "%T@ %p\\n" | sort -n -r | sed "1,60d" | xargs rm -fv -+ fi -+ -+ display_alert "Re-enabling" "initramfs-tools hook for kernel" -+ chroot_custom "$chroot_target" chmod -v +x /etc/kernel/postinst.d/initramfs-tools -+ -+ umount_chroot "$chroot_target/" -+ rm "$chroot_target/usr/bin/$QEMU_BINARY" -+ fi - -+ # no need to remove ${initrd_cache_current_manifest_filepath} manually, since it's under ${WORKDIR} -+ return 0 # avoid future short-circuit problems - } -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 6550d714d..6cc1621e7 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -151,6 +151,11 @@ function display_alert() { - inline_logs_color="\e[0;32m" - ;; - -+ cachehit) -+ level_indicator="💖" -+ inline_logs_color="\e[0;32m" -+ ;; -+ - cleanup | trap) - if [[ "${SHOW_TRAPS}" != "yes" ]]; then # enable debug for many, many debugging msgs - skip_screen=1 - -From 220529f8f779673746843fa55b84d23753f1e037 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 7 May 2022 16:54:00 +0200 -Subject: [PATCH] armbian-next: manual merge (18) of changes between revisions - 08cf31de73de5f5ba1986348e4556b00d77af09f and - c8855aa08dafaa02c939039e55e01967bad61c28 - -- heh; most bash code changes are for things already done in -next, or no longer used -- some version bumps, etc ---- - config/sources/families/bcm2711.conf | 4 +-- - config/sources/families/imx6.conf | 4 +-- - config/sources/families/include/meson64_common.inc | 2 -- - .../sources/families/include/rockchip64_common.inc | 4 +-- - config/sources/families/jetson-nano.conf | 8 ++--- - config/sources/families/media.conf | 37 ++++++++++++++-------- - config/sources/families/mvebu.conf | 6 ++-- - config/sources/families/mvebu64.conf | 14 +++++--- - config/sources/families/odroidxu4.conf | 4 +-- - config/sources/families/rk35xx.conf | 4 --- - config/sources/families/virtual.conf | 4 +-- - lib/functions/bsp/bsp-cli.sh | 2 +- - .../compilation/patch/kernel-bootsplash.sh | 5 ++- - lib/functions/compilation/patch/kernel-drivers.sh | 15 ++++----- - lib/functions/configuration/main-config.sh | 2 +- - lib/functions/general/downloads.sh | 21 ++++++++++-- - lib/functions/general/repo.sh | 16 +++++++--- - lib/functions/image/partitioning.sh | 8 +++-- - lib/functions/main/rootfs-image.sh | 3 ++ - lib/functions/rootfs/distro-agnostic.sh | 22 ++++++++----- - 20 files changed, 115 insertions(+), 70 deletions(-) - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index a6bee376e..2b19132e2 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -28,8 +28,8 @@ case "${BRANCH}" in - edge) - export RASPI_DISTRO_KERNEL=no - export KERNELSOURCE='https://github.com/raspberrypi/linux' -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. For mainline caching. -- export KERNELBRANCH="branch:rpi-5.16.y" -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. For mainline caching. -+ export KERNELBRANCH="branch:rpi-5.17.y" - export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" - export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" - ;; -diff --git a/config/sources/families/imx6.conf b/config/sources/families/imx6.conf -index d63f84266..f2bcf95a1 100644 ---- a/config/sources/families/imx6.conf -+++ b/config/sources/families/imx6.conf -@@ -16,8 +16,8 @@ case $BRANCH in - - edge) - -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.16.y' -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.17.y' - - ;; - -diff --git a/config/sources/families/include/meson64_common.inc b/config/sources/families/include/meson64_common.inc -index 21c71e5bd..7d79b6930 100644 ---- a/config/sources/families/include/meson64_common.inc -+++ b/config/sources/families/include/meson64_common.inc -@@ -245,8 +245,6 @@ write_uboot_platform() { - family_tweaks_bsp() { - mkdir -p $destination/etc/udev/rules.d - mkdir -p $destination/usr/local/bin -- cp $SRC/packages/bsp/rockchip/hdmi.rules $destination/etc/udev/rules.d -- install -m 755 $SRC/packages/bsp/rockchip/hdmi-hotplug $destination/usr/local/bin - - mkdir -p "$destination"/etc/X11/xorg.conf.d - case "${BOARD}" in -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index 688097ae7..21d07fda2 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -104,8 +104,8 @@ case $BRANCH in - edge) - - KERNELPATCHDIR='rockchip64-'$BRANCH -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.16.y" -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.17.y" - LINUXFAMILY=rockchip64 - LINUXCONFIG='linux-rockchip64-'$BRANCH - -diff --git a/config/sources/families/jetson-nano.conf b/config/sources/families/jetson-nano.conf -index 9001baf0b..7f7f07c72 100644 ---- a/config/sources/families/jetson-nano.conf -+++ b/config/sources/families/jetson-nano.conf -@@ -22,8 +22,8 @@ case $BRANCH in - ;; - - current) -- export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.15.y" -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.17.y" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -@@ -32,8 +32,8 @@ case $BRANCH in - - edge) - #SKIP_BOOTSPLASH="yes" -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.16.y" -+ export KERNEL_MAJOR_MINOR="5.18" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.18.y" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -diff --git a/config/sources/families/media.conf b/config/sources/families/media.conf -index cd23586ce..ef89b8f07 100644 ---- a/config/sources/families/media.conf -+++ b/config/sources/families/media.conf -@@ -3,7 +3,11 @@ source "${BASH_SOURCE%/*}/include/rockchip64_common.inc" - if [[ $BOARD == station-p2 || $BOARD == station-m2 ]]; then - BOOTSOURCE='https://github.com/150balbes/u-boot-rk' - BOOTBRANCH='branch:rk356x' -- BOOTPATCHDIR="u-boot-station-p2" -+ BOOTPATCHDIR="u-boot-media" -+elif [[ $BOARD == quartz64a ]]; then -+ BOOTSOURCE='https://github.com/150balbes/u-boot-rk' -+ BOOTBRANCH='branch:rk35xx' -+ BOOTPATCHDIR="u-boot-media" - fi - - case $BRANCH in -@@ -13,35 +17,40 @@ case $BRANCH in - - if [[ $BOARD == station-p2 || $BOARD == station-m2 ]]; then - KERNELSOURCE='https://github.com/150balbes/rockchip-kernel' -- export KERNEL_MAJOR_MINOR="4.19" # Major and minor versions of this kernel. - KERNELBRANCH='branch:kernel-4.19' - KERNELPATCHDIR='station-p2-'$BRANCH -- LINUXCONFIG='linux-station-p2-'$BRANCH - LINUXFAMILY=station-p2 -+ LINUXCONFIG='linux-station-p2-'$BRANCH - EXTRAWIFI="no" - WIREGUARD="no" - else -- KERNELSOURCE='https://github.com/ayufan-rock64/linux-kernel' -- export KERNEL_MAJOR_MINOR="4.4" # Major and minor versions of this kernel. -- KERNELBRANCH='tag:4.4.202-1237-rockchip-ayufan' -- KERNELPATCHDIR='rockchip64-'$BRANCH -- LINUXCONFIG='linux-rockchip64-'$BRANCH -- LINUXFAMILY=rockchip64 -+ if [[ $BOARD == nanopct4 ]]; then -+ KERNELSOURCE='https://github.com/friendlyarm/kernel-rockchip' -+ KERNELBRANCH='branch:nanopi4-linux-v4.4.y' -+ KERNELPATCHDIR='rk3399-'$BRANCH -+ LINUXFAMILY=rk3399 -+ LINUXCONFIG='linux-rk3399-'$BRANCH -+ else -+ KERNELSOURCE='https://github.com/ayufan-rock64/linux-kernel' -+ KERNELBRANCH='tag:4.4.202-1237-rockchip-ayufan' -+ KERNELPATCHDIR='rockchip64-'$BRANCH -+ LINUXFAMILY=rockchip64 -+ LINUXCONFIG='linux-rockchip64-'$BRANCH -+ fi - fi - ;; - - current) -- export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.15.y" -+ KERNELBRANCH="branch:linux-5.17.y" -+ KERNELBRANCH="tag:v5.17.5" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH - ;; - - edge) -- #SKIP_BOOTSPLASH="yes" -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.17.y" -+ KERNELBRANCH="branch:linux-5.18.y" -+ KERNELBRANCH="tag:v5.18-rc5" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -diff --git a/config/sources/families/mvebu.conf b/config/sources/families/mvebu.conf -index ad240d6b6..c8a3affb2 100644 ---- a/config/sources/families/mvebu.conf -+++ b/config/sources/families/mvebu.conf -@@ -25,9 +25,9 @@ case $BRANCH in - - edge) - -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.16.y' -- -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.17.y' -+ - LINUXCONFIG='linux-mvebu-edge' - KERNELPATCHDIR="mvebu-edge" - -diff --git a/config/sources/families/mvebu64.conf b/config/sources/families/mvebu64.conf -index 88cc752d4..d9ae12786 100644 ---- a/config/sources/families/mvebu64.conf -+++ b/config/sources/families/mvebu64.conf -@@ -2,6 +2,7 @@ enable_extension "marvell-tools" - ARCH=arm64 - BOOTBRANCH='branch:v2022.04' - BOOTENV_FILE='mvebu64.txt' -+BOOTSCRIPT_OUTPUT='boot.scr.uimg' - ATFSOURCE='https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git' - ATFDIR='arm-trusted-firmware-espressobin' - ATFBRANCH='branch:master' -@@ -48,8 +49,8 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.16.y' -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.17.y' - ;; - - esac -@@ -72,11 +73,15 @@ write_uboot_platform() { - family_tweaks() { - chroot_sdcard_apt_get remove --auto-remove linux-sound-base alsa-base alsa-utils bluez - [[ -f $SDCARD/etc/netplan/armbian-default.yaml ]] && sed -i "s/^ renderer.*/ renderer: networkd/" $SDCARD/etc/netplan/armbian-default.yaml -- cp $SRC/packages/bsp/mvebu64/10* $SDCARD/etc/systemd/network/ -+ cp $SRC/packages/bsp/mvebu64/networkd/10* $SDCARD/etc/systemd/network/ - echo "#Marvell Espressobin Console" >> $SDCARD/etc/securetty - echo "ttyMV0" >> $SDCARD/etc/securetty - } - -+family_tweaks_bsp() { -+ cp "$SRC/packages/bsp/mvebu64/initramfs/99-uboot-fit" "$destination/etc/initramfs/post-update.d/" -+} -+ - atf_custom_postprocess() { - # prepare compilers for postprocess - ubootdir="$SRC/cache/sources/$BOOTDIR/${BOOTBRANCH##*:}" -@@ -109,11 +114,12 @@ uboot_custom_postprocess() { - run_host_command_logged cp -pv build/a80x0_mcbin/release/flash-image.bin $ubootdir/$FILENAME - else - cd $moxbootdir -+ make clean # @TODO: rpardini: why? - run_host_command_logged make CROSS_CM3=$ATF2 wtmi_app.bin - cd $atfdir - - clocks=(600_600 800_800 1000_800 1200_750) -- topology=(512m_1cs_0 512m_2cs_0 1g_2cs_2 1g_1cs_4 2g_2cs_7 1g_1cs_5 2g_2cs_6) -+ topology=(512m_1cs_0 1g_2cs_2 1g_1cs_4 2g_2cs_7 1g_1cs_5 2g_2cs_6) - for i in "${clocks[@]}"; do - for j in "${topology[@]}"; do - if [[ $j = *cs_5 || $j = *cs_6 ]]; then local ddrname="DDR4"; else ddrname="DDR3"; fi -diff --git a/config/sources/families/odroidxu4.conf b/config/sources/families/odroidxu4.conf -index 02a9947a9..992b2bbb2 100644 ---- a/config/sources/families/odroidxu4.conf -+++ b/config/sources/families/odroidxu4.conf -@@ -25,8 +25,8 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.16.y' -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.17.y' - ;; - - esac -diff --git a/config/sources/families/rk35xx.conf b/config/sources/families/rk35xx.conf -index 1a05d42d1..22cc76952 100644 ---- a/config/sources/families/rk35xx.conf -+++ b/config/sources/families/rk35xx.conf -@@ -25,12 +25,8 @@ case $BRANCH in - # temporary until kernel 5.16 is well supported for rockchip64 - # it has to be its own family too - edge) -- export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.17.y" -- KERNELPATCHDIR='rk35xx-'$BRANCH - SKIP_BOOTSPLASH="yes" - LINUXFAMILY=rk35xx -- LINUXCONFIG='linux-rk35xx-'$BRANCH - - ;; - -diff --git a/config/sources/families/virtual.conf b/config/sources/families/virtual.conf -index 3745afee6..b5be13db8 100644 ---- a/config/sources/families/virtual.conf -+++ b/config/sources/families/virtual.conf -@@ -1,7 +1,7 @@ - BOOTBRANCH='tag:v2021.04' - --export KERNEL_MAJOR_MINOR="5.10" # Major and minor versions of this kernel. --KERNELBRANCH='branch:linux-5.10.y' -+export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. -+KERNELBRANCH='branch:linux-5.15.y' - - ARCH=arm64 - #UBOOT_TARGET_MAP=";;u-boot.bin" -diff --git a/lib/functions/bsp/bsp-cli.sh b/lib/functions/bsp/bsp-cli.sh -index 688bd94c3..a20ea1e57 100644 ---- a/lib/functions/bsp/bsp-cli.sh -+++ b/lib/functions/bsp/bsp-cli.sh -@@ -242,7 +242,7 @@ create_board_package() { - fi - - # Reload services -- systemctl --no-reload enable armbian-hardware-monitor.service armbian-hardware-optimize.service armbian-zram-config.service >/dev/null 2>&1 -+ systemctl --no-reload enable armbian-hardware-monitor.service armbian-hardware-optimize.service armbian-zram-config.service armbian-led-state.service >/dev/null 2>&1 - exit 0 - EOF - -diff --git a/lib/functions/compilation/patch/kernel-bootsplash.sh b/lib/functions/compilation/patch/kernel-bootsplash.sh -index f4e078bfb..cbd929513 100644 ---- a/lib/functions/compilation/patch/kernel-bootsplash.sh -+++ b/lib/functions/compilation/patch/kernel-bootsplash.sh -@@ -8,7 +8,10 @@ function apply_kernel_patches_for_bootsplash() { - - display_alert "Adding" "Kernel bootsplash patch" "info" - -- process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0000-Revert-fbcon-Avoid-cap-set-but-not-used-warning.patch" "applying" -+ if linux-version compare "${version}" ge 5.11; then -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0000-Revert-fbcon-Avoid-cap-set-but-not-used-warning.patch" "applying" -+ fi -+ - process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0001-Revert-fbcon-Add-option-to-enable-legacy-hardware-ac.patch" "applying" - - if linux-version compare "${version}" ge 5.15; then -diff --git a/lib/functions/compilation/patch/kernel-drivers.sh b/lib/functions/compilation/patch/kernel-drivers.sh -index 6631eb445..8529e4ba1 100644 ---- a/lib/functions/compilation/patch/kernel-drivers.sh -+++ b/lib/functions/compilation/patch/kernel-drivers.sh -@@ -31,16 +31,16 @@ function prepare_extra_kernel_drivers() { - # - # Older versions have AUFS support with a patch - -- if linux-version compare "${version}" ge 5.1 && linux-version compare "${version}" le 5.18 && [ "$AUFS" == yes ]; then -+ if linux-version compare "${version}" ge 5.1 && linux-version compare "${version}" lt 5.15 && [ "$AUFS" == yes ]; then - # @TODO: Fasthash for this whole block is only the git hash of revision we'd apply from Mr. Okajima - local aufs_tag # attach to specifics tag or branch - aufs_tag=$(echo "${version}" | cut -f 1-2 -d ".") - - # manual overrides -- if linux-version compare "${version}" ge 5.4.3 && linux-version compare "${version}" le 5.5 ; then aufstag="5.4.3"; fi -- if linux-version compare "${version}" ge 5.10.82 && linux-version compare "${version}" le 5.11 ; then aufstag="5.10.82"; fi -- if linux-version compare "${version}" ge 5.15.5 && linux-version compare "${version}" le 5.16 ; then aufstag="5.15.5"; fi -- if linux-version compare "${version}" ge 5.17.3 && linux-version compare "${version}" le 5.18 ; then aufstag="5.17.3"; fi -+ if linux-version compare "${version}" ge 5.4.3 && linux-version compare "${version}" le 5.5; then aufstag="5.4.3"; fi -+ if linux-version compare "${version}" ge 5.10.82 && linux-version compare "${version}" le 5.11; then aufstag="5.10.82"; fi -+ if linux-version compare "${version}" ge 5.15.5 && linux-version compare "${version}" le 5.16; then aufstag="5.15.5"; fi -+ if linux-version compare "${version}" ge 5.17.3 && linux-version compare "${version}" le 5.18; then aufstag="5.17.3"; fi - - # check if Mr. Okajima already made a branch for this version, otherwise use RC. - git ls-remote --exit-code --heads https://github.com/sfjro/aufs5-standalone "aufs${aufs_tag}" > /dev/null || { -@@ -516,7 +516,7 @@ function prepare_extra_kernel_drivers() { - - # Wireless drivers for Realtek 8822BS chipsets - -- if linux-version compare "${version}" ge 4.4 && [ "$EXTRAWIFI" == yes ]; then -+ if linux-version compare "${version}" ge 4.4 && linux-version compare "${version}" le 5.16 && [ "$EXTRAWIFI" == yes ]; then - # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch -@@ -544,9 +544,6 @@ function prepare_extra_kernel_drivers() { - sed -i '/source "drivers\/net\/wireless\/ti\/Kconfig"/a source "drivers\/net\/wireless\/rtl8822bs\/Kconfig"' \ - $kerneldir/drivers/net/wireless/Kconfig - -- # add support for K5.11+ -- process_patch_file "${SRC}/patch/misc/wireless-rtl8822bs.patch" "applying" -- - fi - - if linux-version compare $version ge 4.4 && linux-version compare $version lt 5.8; then -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 5b83ff600..5100e6d35 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -32,7 +32,7 @@ function do_main_configuration() { - [[ -z $EXIT_PATCHING_ERROR ]] && EXIT_PATCHING_ERROR="" # exit patching if failed - [[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board - cd "${SRC}" || exit -- [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=17 -+ [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=18 - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 - BUILD_REPOSITORY_URL=$(git remote get-url "$(git remote | grep origin)") - BUILD_REPOSITORY_COMMIT=$(git describe --match=d_e_a_d_b_e_e_f --always --dirty) -diff --git a/lib/functions/general/downloads.sh b/lib/functions/general/downloads.sh -index e3df91fe8..ecd383e12 100644 ---- a/lib/functions/general/downloads.sh -+++ b/lib/functions/general/downloads.sh -@@ -4,14 +4,29 @@ function webseed() { - # Hardcoded to EU mirrors since - local CCODE=$(curl -s redirect.armbian.com/geoip | jq '.continent.code' -r) - WEBSEED=($(curl -s https://redirect.armbian.com/mirrors | jq -r '.'${CCODE}' | .[] | values')) -+ # remove dead mirrors to suppress download errors -+ FILE=".control" -+ while read -r line; do -+ REMOVE=$(echo $line | egrep -o 'https?://[^ ]+/') -+ WEBSEED=("${WEBSEED[@]/$REMOVE/}") -+ done < <( -+ for k in ${WEBSEED[@]}; do -+ echo "$k$FILE" -+ done | parallel --halt soon,fail=10 --jobs 32 wget -q --spider --timeout=15 --tries=4 --retry-connrefused {} 2>&1 > /dev/null -+ ) -+ - # aria2 simply split chunks based on sources count not depending on download speed - # when selecting china mirrors, use only China mirror, others are very slow there - if [[ $DOWNLOAD_MIRROR == china ]]; then -- WEBSEED=(https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/) -+ WEBSEED=( -+ https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/ -+ ) - elif [[ $DOWNLOAD_MIRROR == bfsu ]]; then -- WEBSEED=(https://mirrors.bfsu.edu.cn/armbian-releases/) -+ WEBSEED=( -+ https://mirrors.bfsu.edu.cn/armbian-releases/ -+ ) - fi -- for toolchain in "${WEBSEED[@]}"; do -+ for toolchain in ${WEBSEED[@]}; do - text="${text} ${toolchain}${1}" - done - text="${text:1}" -diff --git a/lib/functions/general/repo.sh b/lib/functions/general/repo.sh -index 155151300..a68424bd1 100644 ---- a/lib/functions/general/repo.sh -+++ b/lib/functions/general/repo.sh -@@ -29,6 +29,14 @@ addtorepo() { - - for release in "${distributions[@]}"; do - -+ ADDING_PACKAGES="false" -+ if [[ -d "config/distributions/${release}/" ]]; then -+ [[ -n "$(cat config/distributions/${release}/support | grep "csc\|supported" 2> /dev/null)" ]] && ADDING_PACKAGES="true" -+ else -+ display_alert "Skipping adding packages (not supported)" "$release" "wrn" -+ continue -+ fi -+ - local forceoverwrite="" - - # let's drop from publish if exits -@@ -58,7 +66,7 @@ addtorepo() { - - # adding main - if find "${DEB_STORAGE}"/ -maxdepth 1 -type f -name "*.deb" 2> /dev/null | grep -q .; then -- adding_packages "$release" "" "main" -+ [[ "${ADDING_PACKAGES}" == true ]] && adding_packages "$release" "" "main" - else - aptly repo add -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}" "${SCRIPTPATH}config/templates/example.deb" > /dev/null - fi -@@ -67,7 +75,7 @@ addtorepo() { - - # adding main distribution packages - if find "${DEB_STORAGE}/${release}" -maxdepth 1 -type f -name "*.deb" 2> /dev/null | grep -q .; then -- adding_packages "${release}-utils" "/${release}" "release packages" -+ [[ "${ADDING_PACKAGES}" == true ]] && adding_packages "${release}-utils" "/${release}" "release packages" - else - # workaround - add dummy package to not trigger error - aptly repo add -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}" "${SCRIPTPATH}config/templates/example.deb" > /dev/null -@@ -75,7 +83,7 @@ addtorepo() { - - # adding release-specific utils - if find "${DEB_STORAGE}/extra/${release}-utils" -maxdepth 1 -type f -name "*.deb" 2> /dev/null | grep -q .; then -- adding_packages "${release}-utils" "/extra/${release}-utils" "release utils" -+ [[ "${ADDING_PACKAGES}" == true ]] && adding_packages "${release}-utils" "/extra/${release}-utils" "release utils" - else - aptly repo add -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}-utils" "${SCRIPTPATH}config/templates/example.deb" > /dev/null - fi -@@ -83,7 +91,7 @@ addtorepo() { - - # adding desktop - if find "${DEB_STORAGE}/extra/${release}-desktop" -maxdepth 1 -type f -name "*.deb" 2> /dev/null | grep -q .; then -- adding_packages "${release}-desktop" "/extra/${release}-desktop" "desktop" -+ [[ "${ADDING_PACKAGES}" == true ]] && adding_packages "${release}-desktop" "/extra/${release}-desktop" "desktop" - else - # workaround - add dummy package to not trigger error - aptly repo add -config="${SCRIPTPATH}config/${REPO_CONFIG}" "${release}-desktop" "${SCRIPTPATH}config/templates/example.deb" > /dev/null -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 335ea584d..b06055335 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -343,8 +343,12 @@ function prepare_partitions() { - fi - - # recompile .cmd to .scr if boot.cmd exists -- [[ -f $SDCARD/boot/boot.cmd ]] && -- run_host_command_logged mkimage -C none -A arm -T script -d $SDCARD/boot/boot.cmd $SDCARD/boot/boot.scr -+ if [[ -f $SDCARD/boot/boot.cmd ]]; then -+ if [ -z $BOOTSCRIPT_OUTPUT ]; then -+ BOOTSCRIPT_OUTPUT=boot.scr -+ fi -+ run_host_command_logged mkimage -C none -A arm -T script -d $SDCARD/boot/boot.cmd $SDCARD/boot/${BOOTSCRIPT_OUTPUT} -+ fi - - # complement extlinux config if it exists; remove armbianEnv in this case. - if [[ -f $SDCARD/boot/extlinux/extlinux.conf ]]; then -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index 590ca1f84..87821d253 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -67,6 +67,9 @@ function build_rootfs_and_image() { - # install from apt.armbian.com # @TODO: armbian-nextify this eventually - [[ $EXTERNAL_NEW == prebuilt ]] && LOG_SECTION="packages_prebuilt" do_with_logging chroot_installpackages "yes" - -+ # remove existing ssh keys. They will be created in 1st boot process -+ rm -f "${SDCARD}"/etc/ssh/ssh_host* -+ - # stage: user customization script - # NOTE: installing too many packages may fill tmpfs mount - LOG_SECTION="customize_image" do_with_logging customize_image -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 02b79eaad..4b664acc1 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -154,17 +154,23 @@ function install_distribution_agnostic() { - if [[ $SRC_EXTLINUX == yes ]]; then - display_alert "Using extlinux, SRC_EXTLINUX: ${SRC_EXTLINUX}" "image will be incompatible with nand-sata-install" "warn" - mkdir -p $SDCARD/boot/extlinux -+ local bootpart_prefix -+ if [[ -n $BOOTFS_TYPE ]]; then -+ bootpart_prefix=/ -+ else -+ bootpart_prefix=/boot/ -+ fi - cat <<- EOF > "$SDCARD/boot/extlinux/extlinux.conf" - label ${VENDOR} -- kernel /boot/$NAME_KERNEL -- initrd /boot/$NAME_INITRD -+ kernel ${bootpart_prefix}$NAME_KERNEL -+ initrd ${bootpart_prefix}$NAME_INITRD - EOF - if [[ -n $BOOT_FDT_FILE ]]; then - if [[ $BOOT_FDT_FILE != "none" ]]; then -- echo " fdt /boot/dtb/$BOOT_FDT_FILE" >> "$SDCARD/boot/extlinux/extlinux.conf" -+ echo " fdt ${bootpart_prefix}dtb/$BOOT_FDT_FILE" >> "$SDCARD/boot/extlinux/extlinux.conf" - fi - else -- echo " fdtdir /boot/dtb/" >> "$SDCARD/boot/extlinux/extlinux.conf" -+ echo " fdtdir ${bootpart_prefix}dtb/" >> "$SDCARD/boot/extlinux/extlinux.conf" - fi - else - -@@ -431,14 +437,13 @@ function install_distribution_agnostic() { - [[ -f "${SDCARD}"/lib/systemd/system/armbian-ramlog.service ]] && chroot_sdcard systemctl --no-reload enable armbian-ramlog.service - [[ -f "${SDCARD}"/lib/systemd/system/armbian-resize-filesystem.service ]] && chroot_sdcard systemctl --no-reload enable armbian-resize-filesystem.service - [[ -f "${SDCARD}"/lib/systemd/system/armbian-hardware-monitor.service ]] && chroot_sdcard systemctl --no-reload enable armbian-hardware-monitor.service -+ [[ -f "${SDCARD}"/lib/systemd/system/armbian-led-state.service ]] && chroot_sdcard systemctl --no-reload enable armbian-led-state.service - - # copy "first run automated config, optional user configured" - cp "${SRC}"/packages/bsp/armbian_first_run.txt.template "${SDCARD}"/boot/armbian_first_run.txt.template - - # switch to beta repository at this stage if building nightly images -- [[ $IMAGE_TYPE == nightly ]] && -- echo "deb https://beta.armbian.com $RELEASE main ${RELEASE}-utils ${RELEASE}-desktop" \ -- > "${SDCARD}"/etc/apt/sources.list.d/armbian.list -+ [[ $IMAGE_TYPE == nightly ]] && sed -i 's/apt/beta/' "${SDCARD}"/etc/apt/sources.list.d/armbian.list - - # fix for https://bugs.launchpad.net/ubuntu/+source/blueman/+bug/1542723 @TODO: from ubuntu 15. maybe gone? - chroot "${SDCARD}" /bin/bash -c "chown root:messagebus /usr/lib/dbus-1.0/dbus-daemon-launch-helper" -@@ -457,7 +462,8 @@ function install_distribution_agnostic() { - sed '/daemon\.\*\;mail.*/,/xconsole/ s/.*/#&/' -i "${SDCARD}"/etc/rsyslog.d/50-default.conf - - # disable deprecated parameter -- sed '/.*$KLogPermitNonKernelFacility.*/,// s/.*/#&/' -i "${SDCARD}"/etc/rsyslog.conf -+ [[ -f "${SDCARD}"/etc/rsyslog.conf ]] && -+ sed '/.*$KLogPermitNonKernelFacility.*/,// s/.*/#&/' -i "${SDCARD}"/etc/rsyslog.conf - - # enable getty on multiple serial consoles - # and adjust the speed if it is defined and different than 115200 - -From eb38c77729431d0c89ae1f0546ab56e450429acc Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 7 May 2022 13:09:55 +0200 -Subject: [PATCH] armbian-next: cleanup entrypoint and shuffle - `prepare_host_basic()` into logging section - ---- - lib/functions/cli/cli-entrypoint.sh | 33 +++++++++++++++------------------ - lib/functions/host/basic-deps.sh | 4 ++-- - 2 files changed, 17 insertions(+), 20 deletions(-) - -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index 4cd37537d..c6d0459ed 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -4,9 +4,9 @@ function cli_entrypoint() { - - if [[ "${ARMBIAN_ENABLE_CALL_TRACING}" == "yes" ]]; then - set -T # inherit return/debug traps -- mkdir -p "${SRC}"/output/debug -- echo -n "" > "${SRC}"/output/debug/calls.txt -- trap 'echo "${BASH_LINENO[@]}|${BASH_SOURCE[@]}|${FUNCNAME[@]}" >> ${SRC}/output/debug/calls.txt ;' RETURN -+ mkdir -p "${SRC}"/output/call-traces -+ echo -n "" > "${SRC}"/output/call-traces/calls.txt -+ trap 'echo "${BASH_LINENO[@]}|${BASH_SOURCE[@]}|${FUNCNAME[@]}" >> ${SRC}/output/call-traces/calls.txt ;' RETURN - fi - - check_args "$@" -@@ -21,16 +21,6 @@ function cli_entrypoint() { - else - display_alert "This script requires root privileges, trying to use sudo" "" "wrn" - sudo "${SRC}/compile.sh" "$@" -- exit $? -- fi -- -- # The only way to get this is via ENV var... -- if [ "${OFFLINE_WORK}" == "yes" ]; then -- display_alert "* " "You are working offline!" -- display_alert "* " "Sources, time and host will not be checked" -- else -- # check and install the basic utilities here # @TODO: logging? -- prepare_host_basic - fi - - # Purge Armbian Docker images -@@ -45,7 +35,6 @@ function cli_entrypoint() { - # Docker shell - if [[ "${1}" == docker-shell ]]; then - shift -- #shellcheck disable=SC2034 - SHELL_ONLY=yes - set -- "docker" "$@" - fi -@@ -75,7 +64,6 @@ function cli_entrypoint() { - CONFIG_PATH=$(dirname "${CONFIG_FILE}") - - # DEST is the main output dir. -- # destination. # @TODO: logging this is when we can start logging to file. make sure. - declare DEST="${SRC}/output" - if [ -d "$CONFIG_PATH/output" ]; then - DEST="${CONFIG_PATH}/output" -@@ -83,7 +71,8 @@ function cli_entrypoint() { - display_alert "Output directory DEST:" "${DEST}" "debug" - - # set unique mounting directory for this build. -- export ARMBIAN_BUILD_UUID="$(uuidgen)" -+ declare -g ARMBIAN_BUILD_UUID -+ ARMBIAN_BUILD_UUID="$(uuidgen)" - display_alert "Build UUID:" "${ARMBIAN_BUILD_UUID}" "debug" - - # Super-global variables, used everywhere. The directories are NOT _created_ here, since this very early stage. -@@ -97,6 +86,14 @@ function cli_entrypoint() { - LOG_SECTION=entrypoint start_logging_section # This creates LOGDIR. - add_cleanup_handler trap_handler_cleanup_logging # cleanup handler for logs; it rolls it up from LOGDIR into DEST/logs - -+ if [ "${OFFLINE_WORK}" == "yes" ]; then -+ display_alert "* " "You are working offline!" -+ display_alert "* " "Sources, time and host will not be checked" -+ else -+ # check and install the basic utilities. -+ LOG_SECTION="prepare_host_basic" do_with_logging prepare_host_basic -+ fi -+ - # Source the extensions manager library at this point, before sourcing the config. - # This allows early calls to enable_extension(), but initialization proper is done later. - # shellcheck source=lib/extensions.sh -@@ -140,12 +137,12 @@ function cli_entrypoint() { - if [[ -z $1 ]]; then - main_default_build_single - else -- # @TODO: check this with extensions usage? -+ # @TODO: rpardini: check this with extensions usage? - eval "$@" - fi - fi - - # Build done, run the cleanup handlers explicitly. -- # This zeroes out the list of cleanups, so it's not done again when the main script exits. -+ # This zeroes out the list of cleanups, so it's not done again when the main script exits normally and trap = 0 runs. - run_cleanup_handlers - } -diff --git a/lib/functions/host/basic-deps.sh b/lib/functions/host/basic-deps.sh -index fff94fbad..4cce0f8bf 100644 ---- a/lib/functions/host/basic-deps.sh -+++ b/lib/functions/host/basic-deps.sh -@@ -23,8 +23,8 @@ prepare_host_basic() { - - if [[ -n $install_pack ]]; then - display_alert "Installing basic packages" "$install_pack" -- # @TODO: wait, why sudo? we should already be sudo'ed when this executes. -- sudo bash -c "apt-get -qq update && apt-get install -qq -y --no-install-recommends $install_pack" -+ run_host_command_logged sudo apt-get -qq update -+ run_host_command_logged sudo apt-get install -qq -y --no-install-recommends $install_pack - fi - - } - -From 91af44294685e7747b5df793778a1790756e8ce7 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 20 Apr 2022 15:32:16 +0200 -Subject: [PATCH] armbian-next: *breaking change* add global extlinux - killswitch `ALLOW_EXTLINUX` - -- unless you set `ALLOW_EXTLINUX=yes`, then `SRC_EXTLINUX` will be disabled globally. -- add a bunch of logging regarding extlinux, armbianEnv and bootscripts for clarity during build -- this is due to nand-sata-install problems with extlinux -- some boards _only work_ with extlinux; we'll have to handle it later ---- - lib/functions/bsp/bsp-cli.sh | 8 +++++--- - lib/functions/configuration/main-config.sh | 10 ++++++++++ - lib/functions/image/partitioning.sh | 5 +++-- - lib/functions/rootfs/distro-agnostic.sh | 13 +++++++------ - 4 files changed, 25 insertions(+), 11 deletions(-) - -diff --git a/lib/functions/bsp/bsp-cli.sh b/lib/functions/bsp/bsp-cli.sh -index 5ee670582..688bd94c3 100644 ---- a/lib/functions/bsp/bsp-cli.sh -+++ b/lib/functions/bsp/bsp-cli.sh -@@ -25,12 +25,14 @@ create_board_package() { - # if not using extlinux, copy armbianEnv from template; prefer userpatches source - if [[ $SRC_EXTLINUX != yes ]]; then - if [ -f "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" ]; then -- cp "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" "${destination}/usr/share/armbian/${bootscript_dst}" -+ run_host_command_logged cp -pv "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" "${destination}/usr/share/armbian/${bootscript_dst}" - else -- cp "${SRC}/config/bootscripts/${bootscript_src}" "${destination}/usr/share/armbian/${bootscript_dst}" -+ run_host_command_logged cp -pv "${SRC}/config/bootscripts/${bootscript_src}" "${destination}/usr/share/armbian/${bootscript_dst}" - fi - [[ -n $BOOTENV_FILE && -f $SRC/config/bootenv/$BOOTENV_FILE ]] && -- cp "${SRC}/config/bootenv/${BOOTENV_FILE}" "${destination}"/usr/share/armbian/armbianEnv.txt -+ run_host_command_logged cp -pv "${SRC}/config/bootenv/${BOOTENV_FILE}" "${destination}"/usr/share/armbian/armbianEnv.txt -+ else -+ display_alert "Using extlinux, regular bootscripts ignored" "SRC_EXTLINUX=${SRC_EXTLINUX}" "warn" - fi - - # add configuration for setting uboot environment from userspace with: fw_setenv fw_printenv -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 77e15b7b8..5b83ff600 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -223,6 +223,16 @@ function do_main_configuration() { - it is often used to in turn override those. - POST_FAMILY_CONFIG - -+ # A global killswitch for extlinux. -+ if [[ "${SRC_EXTLINUX}" == "yes" ]]; then -+ if [[ "${ALLOW_EXTLINUX}" != "yes" ]]; then -+ display_alert "Disabling extlinux support" "extlinux global killswitch; set ALLOW_EXTLINUX=yes to avoid" "info" -+ export SRC_EXTLINUX=no -+ else -+ display_alert "Both SRC_EXTLINUX=yes and ALLOW_EXTLINUX=yes" "enabling extlinux, expect breakage" "warn" -+ fi -+ fi -+ - interactive_desktop_main_configuration - - [[ -n $ATFSOURCE && -z $ATF_USE_GCC ]] && exit_with_error "Error in configuration: ATF_USE_GCC is unset" -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 108326aaa..335ea584d 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -346,10 +346,11 @@ function prepare_partitions() { - [[ -f $SDCARD/boot/boot.cmd ]] && - run_host_command_logged mkimage -C none -A arm -T script -d $SDCARD/boot/boot.cmd $SDCARD/boot/boot.scr - -- # create extlinux config -+ # complement extlinux config if it exists; remove armbianEnv in this case. - if [[ -f $SDCARD/boot/extlinux/extlinux.conf ]]; then - echo " append root=$rootfs $SRC_CMDLINE $MAIN_CMDLINE" >> $SDCARD/boot/extlinux/extlinux.conf -- [[ -f $SDCARD/boot/armbianEnv.txt ]] && rm $SDCARD/boot/armbianEnv.txt -+ display_alert "extlinux.conf exists" "removing armbianEnv.txt" "warn" -+ [[ -f $SDCARD/boot/armbianEnv.txt ]] && run_host_command_logged rm -v $SDCARD/boot/armbianEnv.txt - fi - - return 0 # there is a shortcircuit above! very tricky btw! -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 3e8121a7e..02b79eaad 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -152,6 +152,7 @@ function install_distribution_agnostic() { - - # create extlinux config file @TODO: refactor into extensions u-boot, extlinux - if [[ $SRC_EXTLINUX == yes ]]; then -+ display_alert "Using extlinux, SRC_EXTLINUX: ${SRC_EXTLINUX}" "image will be incompatible with nand-sata-install" "warn" - mkdir -p $SDCARD/boot/extlinux - cat <<- EOF > "$SDCARD/boot/extlinux/extlinux.conf" - label ${VENDOR} -@@ -169,17 +170,17 @@ function install_distribution_agnostic() { - - if [[ "${BOOTCONFIG}" != "none" ]]; then - if [ -f "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" ]; then -- cp "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" "${SDCARD}/boot/${bootscript_dst}" -+ run_host_command_logged cp -pv "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" "${SDCARD}/boot/${bootscript_dst}" - else -- cp "${SRC}/config/bootscripts/${bootscript_src}" "${SDCARD}/boot/${bootscript_dst}" -+ run_host_command_logged cp -pv "${SRC}/config/bootscripts/${bootscript_src}" "${SDCARD}/boot/${bootscript_dst}" - fi - fi - - if [[ -n $BOOTENV_FILE ]]; then - if [[ -f $USERPATCHES_PATH/bootenv/$BOOTENV_FILE ]]; then -- cp "$USERPATCHES_PATH/bootenv/${BOOTENV_FILE}" "${SDCARD}"/boot/armbianEnv.txt -+ run_host_command_logged cp -pv "$USERPATCHES_PATH/bootenv/${BOOTENV_FILE}" "${SDCARD}"/boot/armbianEnv.txt - elif [[ -f $SRC/config/bootenv/$BOOTENV_FILE ]]; then -- cp "${SRC}/config/bootenv/${BOOTENV_FILE}" "${SDCARD}"/boot/armbianEnv.txt -+ run_host_command_logged cp -pv "${SRC}/config/bootenv/${BOOTENV_FILE}" "${SDCARD}"/boot/armbianEnv.txt - fi - fi - -@@ -188,9 +189,9 @@ function install_distribution_agnostic() { - if [[ $ROOTFS_TYPE == nfs ]]; then - display_alert "Copying NFS boot script template" - if [[ -f $USERPATCHES_PATH/nfs-boot.cmd ]]; then -- cp "$USERPATCHES_PATH"/nfs-boot.cmd "${SDCARD}"/boot/boot.cmd -+ run_host_command_logged cp -pv "$USERPATCHES_PATH"/nfs-boot.cmd "${SDCARD}"/boot/boot.cmd - else -- cp "${SRC}"/config/templates/nfs-boot.cmd.template "${SDCARD}"/boot/boot.cmd -+ run_host_command_logged cp -pv "${SRC}"/config/templates/nfs-boot.cmd.template "${SDCARD}"/boot/boot.cmd - fi - fi - - -From 03516ad0f6d5fc598f67c896e6dc28eb91b54ddf Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 6 May 2022 10:25:26 +0200 -Subject: [PATCH] armbian-next: extensions: `image-output-{qcow2|ovf}`: virtual - output formats - -- which use `qemu-utils` for `qemu-img` conversion of the .img ---- - extensions/image-output-ovf.sh | 111 +++++++++++++++++++++++++++++++++++++++ - extensions/image-output-qcow2.sh | 16 ++++++ - 2 files changed, 127 insertions(+) - -diff --git a/extensions/image-output-ovf.sh b/extensions/image-output-ovf.sh -new file mode 100644 -index 000000000..d3b4617e2 ---- /dev/null -+++ b/extensions/image-output-ovf.sh -@@ -0,0 +1,111 @@ -+enable_extension "image-output-qcow2" -+ -+#### *run before installing host dependencies* -+function add_host_dependencies__ovf_host_deps() { -+ export EXTRA_BUILD_DEPS="${EXTRA_BUILD_DEPS} qemu-utils" -+} -+ -+#### *allow extensions to prepare their own config, after user config is done* -+function extension_prepare_config__prepare_ovf_config() { -+ export OVF_VM_CPUS="${OVF_VM_CPUS:-4}" # Number of CPUs -+ export OVF_VM_RAM_GB="${OVF_VM_RAM_GB:-4}" # RAM in Gigabytes -+ export OVF_KEEP_QCOW2="${OVF_KEEP_QCOW2:-no}" # keep the qcow2 image after conversion to OVF -+} -+ -+#### *custom post build hook* -+function post_build_image__920_create_ovf() { -+ local OVF_VM_NAME="${OVF_VM_NAME:-${version}}" # The name of the VM when imported into Fusion/Player/Workstation; no spaces please -+ local original_qcow2_image="${QCOW2_IMAGE_FILE}" # Original from qcow2 output extension -+ local temp_qcow2_image="${DESTIMG}/${version}_temp.qcow2" # shadow qcow2 for resize -+ -+ local base_vmware_dirname="${OVF_VM_NAME}_vmware" # directory for vmx format, name only -+ local full_vmware_dirname="${DESTIMG}/${base_vmware_dirname}" # directory for vmx format, full path -+ local full_vmx_filename="${full_vmware_dirname}/${OVF_VM_NAME}.vmx" # vmx in vmx format dir -+ local base_file_vmdk="${OVF_VM_NAME}-disk1-efi-rootfs.vmdk" # target temp vmdk (filename) -+ local full_file_vmdk="${full_vmware_dirname}/${base_file_vmdk}" # target temp vmdk (full path) -+ local final_vmx_zip_file="${DESTIMG}/${OVF_VM_NAME}.vmware.zip" # final vmx zip artifact - defaults to UEFI boot -+ mkdir -p "${full_vmware_dirname}" # pre-create it -+ -+ display_alert "Converting image to OVF-compatible VMDK format" "${EXTENSION}" "info" -+ run_host_command_logged qemu-img create -f qcow2 -F qcow2 -b "${original_qcow2_image}" "${temp_qcow2_image}" # create a new, temporary, qcow2 with the original as backing image -+ run_host_command_logged qemu-img resize "${temp_qcow2_image}" +47G # resize the temporary -+ run_host_command_logged qemu-img convert -f qcow2 -O vmdk "${temp_qcow2_image}" "${full_file_vmdk}" # convert the big temp to vmdk -+ run_host_command_logged rm -vf "${temp_qcow2_image}" # remove the temporary large qcow2, free space -+ if [[ "${OVF_KEEP_QCOW2}" != "yes" ]]; then # check if told to keep the qcow2 image -+ display_alert "Discarding qcow2 image after" "conversion to VMDK" "debug" # debug -+ run_host_command_logged rm -vf "${original_qcow2_image}" # remove the original qcow2, free space -+ fi # /check -+ run_host_command_logged qemu-img info "${full_file_vmdk}" # show info -+ -+ display_alert "Creating .vmx file" "${EXTENSION}" "info" -+ -+ cat <<- VMX_FILE > "${full_vmx_filename}" -+ .encoding = "UTF-8" -+ displayname = "${OVF_VM_NAME}" -+ guestos = "ubuntu-64" -+ virtualhw.version = "18" -+ config.version = "8" -+ numvcpus = "${OVF_VM_CPUS}" -+ cpuid.coresPerSocket = "${OVF_VM_CPUS}" -+ memsize = "$((OVF_VM_RAM_GB * 1024))" -+ pciBridge0.present = "TRUE" -+ pciBridge4.present = "TRUE" -+ pciBridge4.virtualDev = "pcieRootPort" -+ pciBridge4.functions = "8" -+ pciBridge5.present = "TRUE" -+ pciBridge5.virtualDev = "pcieRootPort" -+ pciBridge5.functions = "8" -+ pciBridge6.present = "TRUE" -+ pciBridge6.virtualDev = "pcieRootPort" -+ pciBridge6.functions = "8" -+ pciBridge7.present = "TRUE" -+ pciBridge7.virtualDev = "pcieRootPort" -+ pciBridge7.functions = "8" -+ vmci0.present = "TRUE" -+ floppy0.present = "FALSE" -+ mks.enable3d = "true" -+ scsi0:0.present = "TRUE" -+ scsi0:0.deviceType = "disk" -+ scsi0:0.fileName = "${base_file_vmdk}" -+ scsi0:0.allowguestconnectioncontrol = "false" -+ scsi0:0.mode = "persistent" -+ scsi0.virtualDev = "pvscsi" -+ scsi0.present = "TRUE" -+ ethernet0.present = "TRUE" -+ ethernet0.virtualDev = "vmxnet3" -+ ethernet0.connectionType = "nat" -+ ethernet0.startConnected = "TRUE" -+ ethernet0.addressType = "generated" -+ ethernet0.wakeonpcktrcv = "false" -+ ethernet0.allowguestconnectioncontrol = "true" -+ sata0.present = "TRUE" -+ vmci0.unrestricted = "false" -+ vcpu.hotadd = "true" -+ mem.hotadd = "true" -+ tools.syncTime = "true" -+ toolscripts.afterpoweron = "true" -+ toolscripts.afterresume = "true" -+ toolscripts.beforepoweroff = "true" -+ toolscripts.beforesuspend = "true" -+ powerType.powerOff = "soft" -+ powerType.reset = "soft" -+ powerType.suspend = "soft" -+ usb.present = "TRUE" -+ ehci.present = "TRUE" -+ usb_xhci.present = "TRUE" -+ hard-disk.hostBuffer = "enabled" -+ ulm.disableMitigations = "TRUE" -+ vhv.enable = "TRUE" -+ vmx.buildType = "release" -+ firmware = "efi" -+ VMX_FILE -+ -+ # Now wrap the .vmx in a zip, with minimal compression. (release will .zst it later) -+ display_alert "Zipping/storing vmx" "${EXTENSION}" "info" -+ cd "${DESTIMG}" || false -+ run_host_command_logged zip -0 "${final_vmx_zip_file}" "${base_vmware_dirname}"/* -+ cd - || false -+ -+ display_alert "Done, cleaning up" "${EXTENSION}" "info" -+ rm -rf "${full_vmware_dirname}" -+} -diff --git a/extensions/image-output-qcow2.sh b/extensions/image-output-qcow2.sh -new file mode 100644 -index 000000000..2633062ed ---- /dev/null -+++ b/extensions/image-output-qcow2.sh -@@ -0,0 +1,16 @@ -+add_host_dependencies__ovf_host_deps() { -+ [[ "${SKIP_QCOW2}" == "yes" ]] && return 0 -+ export EXTRA_BUILD_DEPS="${EXTRA_BUILD_DEPS} qemu-utils" -+} -+ -+function post_build_image__900_convert_to_qcow2_img() { -+ [[ "${SKIP_QCOW2}" == "yes" ]] && return 0 -+ display_alert "Converting image to qcow2" "${EXTENSION}" "info" -+ export QCOW2_IMAGE_FILE="${DESTIMG}/${version}.img.qcow2" -+ run_host_command_logged qemu-img convert -f raw -O qcow2 "${DESTIMG}/${version}.img" "${QCOW2_IMAGE_FILE}" -+ run_host_command_logged qemu-img info "${QCOW2_IMAGE_FILE}" -+ if [[ "${QCOW2_RESIZE_AMOUNT}" != "" ]]; then -+ display_alert "Resizing qcow2 image by '${QCOW2_RESIZE_AMOUNT}' " "${EXTENSION}" "info" -+ qemu-img resize "${QCOW2_IMAGE_FILE}" "${QCOW2_RESIZE_AMOUNT}" -+ fi -+} - -From 36a2c3741d28a6280af99bcd7d8f9d3a339a7fcb Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 6 May 2022 10:24:10 +0200 -Subject: [PATCH] armbian-next: extension: `kernel-localmodconfig`: - faster/slimmer kernel builds with `make localmodconfig` - ---- - extensions/kernel-localmodconfig.sh | 21 +++++++++++++++++++++ - 1 file changed, 21 insertions(+) - -diff --git a/extensions/kernel-localmodconfig.sh b/extensions/kernel-localmodconfig.sh -new file mode 100644 -index 000000000..40248bafe ---- /dev/null -+++ b/extensions/kernel-localmodconfig.sh -@@ -0,0 +1,21 @@ -+function extension_prepare_config__prepare_localmodconfig() { -+ # If defined, ${KERNEL_CONFIG_FROM_LSMOD} can contain a lsmod to apply to the kernel configuration. -+ # to get a file for this run 'lsmod > my_machine.lsmod' and then put it in userpatches/lsmod/ -+ export KERNEL_CONFIG_FROM_LSMOD="${KERNEL_CONFIG_FROM_LSMOD:-}" -+ display_alert "localmodconfig INIT lsmod" "${KERNEL_CONFIG_FROM_LSMOD}" "warn" -+ -+ # If there, make sure it exists -+ local lsmod_file="${SRC}/userpatches/lsmod/${KERNEL_CONFIG_FROM_LSMOD}.lsmod" -+ if [[ ! -f "${lsmod_file}" ]]; then -+ exit_with_error "Can't find lsmod file ${lsmod_file}, configure with KERNEL_CONFIG_FROM_LSMOD=xxx" -+ fi -+} -+ -+# This needs much more love than this. can be used to make "light" versions of kernels, that compile 3x-5x faster or more -+function custom_kernel_config_post_defconfig__apply_localmodconfig() { -+ display_alert "localmodconfig with lsmod" "${KERNEL_CONFIG_FROM_LSMOD}" "warn" -+ if [[ "a${KERNEL_CONFIG_FROM_LSMOD}a" != "aa" ]]; then -+ local lsmod_file="${SRC}/userpatches/lsmod/${KERNEL_CONFIG_FROM_LSMOD}.lsmod" -+ run_kernel_make "LSMOD=${lsmod_file}" localmodconfig -+ fi -+} - -From 981a9f5856ba100eaad07c9ffe7e24f578e93003 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 6 May 2022 10:23:29 +0200 -Subject: [PATCH] armbian-next: extension: `cleanup-space-final-image`: - zerofree, slim down firmware, show used space - ---- - extensions/cleanup-space-final-image.sh | 37 +++++++++++++++++++++++++++++++++ - 1 file changed, 37 insertions(+) - -diff --git a/extensions/cleanup-space-final-image.sh b/extensions/cleanup-space-final-image.sh -new file mode 100644 -index 000000000..62321285b ---- /dev/null -+++ b/extensions/cleanup-space-final-image.sh -@@ -0,0 +1,37 @@ -+add_host_dependencies__ovf_host_deps() { -+ export EXTRA_BUILD_DEPS="${EXTRA_BUILD_DEPS} zerofree" -+} -+ -+function post_customize_image__998_cleanup_apt_stuff() { -+ display_alert "Cleaning up apt package lists and cache" "${EXTENSION}" "info" -+ chroot_sdcard "apt-get clean && rm -rf /var/lib/apt/lists" -+ -+ declare -a too_big_firmware=("netronome" "qcom" "mrv" "qed" "mellanox") # maybe: "amdgpu" "radeon" but I have an AMD GPU. -+ for big_firm in "${too_big_firmware[@]}"; do -+ local firm_dir="${SDCARD}/usr/lib/firmware/${big_firm}" -+ if [[ -d "${firm_dir}" ]]; then -+ display_alert "Cleaning too-big firmware" "${big_firm}" "info" -+ rm -rf "${firm_dir}" -+ fi -+ done -+} -+ -+# Zerofree the image early after umounting it -+function post_umount_final_image__200_zerofree() { -+ display_alert "Zerofreeing image" "${EXTENSION}" "info" -+ for partDev in "${LOOP}"p?; do -+ local partType -+ partType="$(file -s "${partDev}" | awk -F ': ' '{print $2}')" -+ if [[ "${partType}" == *"ext4"* ]]; then -+ display_alert "Zerofreeing ext4 partition ${partDev}" "${EXTENSION}" "info" -+ run_host_command_logged zerofree "${partDev}" -+ else -+ display_alert "Skipping zerofreeing partition ${partDev} of type '${partType}'" "${EXTENSION}" "info" -+ fi -+ done -+} -+ -+function pre_umount_final_image__999_show_space_usage() { -+ display_alert "Calculating used space in image" "${EXTENSION}" "info" -+ run_host_command_logged "cd ${MOUNT} && " du -h -d 4 -x "." "| sort -h | tail -20" -+} - -From 5d51b5559c28815deb56d27e1ca22765dc22e853 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 23 Apr 2022 16:07:44 +0200 -Subject: [PATCH] armbian-next: introduce `do_with_ccache_statistics` and use - it for kernel compile - -- some TODOs -- better logging for .config copying ---- - lib/functions/compilation/kernel.sh | 27 +++++++++++++++++++++------ - 1 file changed, 21 insertions(+), 6 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index d6dd30920..86235f767 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -3,16 +3,18 @@ function run_kernel_make() { - declare -a common_make_params_quoted common_make_envs full_command - - common_make_envs=( -- "CCACHE_BASEDIR=\"$(pwd)\"" # Base directory for ccache, for cache reuse -+ "CCACHE_BASEDIR=\"$(pwd)\"" # Base directory for ccache, for cache reuse # @TODO: experiment with this and the source path to maximize hit rate - "PATH=\"${toolchain}:${PATH}\"" # Insert the toolchain first into the PATH. - "DPKG_COLORS=always" # Use colors for dpkg - "XZ_OPT='--threads=0'" # Use parallel XZ compression - ) - - common_make_params_quoted=( -+ # @TODO: introduce O=path/to/binaries, so sources and bins are not in the same dir. -+ - "$CTHREADS" # Parallel compile, "-j X" for X cpus - "ARCH=${ARCHITECTURE}" # Key param. Everything depends on this. -- "LOCALVERSION=-${LINUXFAMILY}" # Change the internal kernel version to include the family. Changing this causes recompiles -+ "LOCALVERSION=-${LINUXFAMILY}" # Change the internal kernel version to include the family. Changing this causes recompiles # @TODO change to "localversion" file - - "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # added as prefix to every compiler invocation by make - "KCFLAGS=-fdiagnostics-color=always -Wno-error=misleading-indentation" # Force GCC colored messages, downgrade misleading indentation to warning -@@ -133,6 +135,8 @@ function kernel_prepare_patching() { - cd "${kernel_work_dir}" || exit - - # @TODO: why would we delete localversion? -+ # @TODO: it should be the opposite, writing localversion to disk, _instead_ of passing it via make. -+ # @TODO: if it turns out to be the case, do a commit with it... (possibly later, after patching?) - rm -f localversion - - # read kernel version -@@ -204,17 +208,17 @@ function kernel_config() { - - if [[ $KERNEL_KEEP_CONFIG == yes && -f "${DEST}"/config/$LINUXCONFIG.config ]]; then - display_alert "Using previous kernel config" "${DEST}/config/$LINUXCONFIG.config" "info" -- cp -p "${DEST}/config/${LINUXCONFIG}.config" .config -+ run_host_command_logged cp -pv "${DEST}/config/${LINUXCONFIG}.config" .config - else - if [[ -f $USERPATCHES_PATH/$LINUXCONFIG.config ]]; then - display_alert "Using kernel config provided by user" "userpatches/$LINUXCONFIG.config" "info" -- cp -p "${USERPATCHES_PATH}/${LINUXCONFIG}.config" .config -+ run_host_command_logged cp -pv "${USERPATCHES_PATH}/${LINUXCONFIG}.config" .config - elif [[ -f "${USERPATCHES_PATH}/config/kernel/${LINUXCONFIG}.config" ]]; then - display_alert "Using kernel config provided by user in config/kernel folder" "config/kernel/${LINUXCONFIG}.config" "info" -- cp -p "${USERPATCHES_PATH}/config/kernel/${LINUXCONFIG}.config" .config -+ run_host_command_logged cp -pv "${USERPATCHES_PATH}/config/kernel/${LINUXCONFIG}.config" .config - else - display_alert "Using kernel config file" "config/kernel/$LINUXCONFIG.config" "info" -- cp -p "${SRC}/config/kernel/${LINUXCONFIG}.config" .config -+ run_host_command_logged cp -pv "${SRC}/config/kernel/${LINUXCONFIG}.config" .config - COPY_CONFIG_BACK_TO="${SRC}/config/kernel/${LINUXCONFIG}.config" - fi - fi -@@ -362,6 +366,7 @@ function kernel_build_and_package() { - display_alert "Building kernel" "${LINUXCONFIG} ${build_targets[*]}" "info" - fasthash_debug "build" - make_filter="| grep --line-buffered -v -e 'CC' -e 'LD' -e 'AR' -e 'INSTALL' -e 'SIGN' -e 'XZ' " \ -+ do_with_ccache_statistics \ - run_kernel_make_long_running "${install_make_params_quoted[@]@Q}" "${build_targets[@]}" - fasthash_debug "build" - -@@ -370,3 +375,13 @@ function kernel_build_and_package() { - - display_alert "Kernel built and packaged in" "$((SECONDS - ts)) seconds - ${version}-${LINUXFAMILY}" "info" - } -+ -+function do_with_ccache_statistics() { -+ display_alert "Clearing ccache statistics" "ccache" "debug" -+ ccache --zero-stats -+ -+ "$@" -+ -+ display_alert "Display ccache statistics" "ccache" "debug" -+ run_host_command_logged ccache --show-stats -+} - -From 0a29ad6f91eae99594e52173724fdf87b5b186d5 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 16 Apr 2022 19:23:13 +0200 -Subject: [PATCH] armbian-next: *breaking change* really disable apt sources - for non-desktop builds - ---- - lib/functions/rootfs/apt-sources.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/functions/rootfs/apt-sources.sh b/lib/functions/rootfs/apt-sources.sh -index bc17a3a9b..a3451e5ed 100644 ---- a/lib/functions/rootfs/apt-sources.sh -+++ b/lib/functions/rootfs/apt-sources.sh -@@ -8,7 +8,7 @@ add_apt_sources() { - # @TODO: rpardini: The logic here is meant to be evolved over time. Originally, all of this only ran when BUILD_DESKTOP=yes. - # Igor had bumped it to run on all builds, but that adds external sources to cli and minimal. - # Here I'm tuning it down to 1/4th of the original, eg: no nala on my cli builds, thanks. -- [[ "${BUILD_MINIMAL}" != "yes" ]] && get_all_potential_paths "${DEBOOTSTRAP_SEARCH_RELATIVE_DIRS}" "${sub_dirs_to_check}" "sources/apt" -+ [[ "${BUILD_DESKTOP}" != "yes" ]] && get_all_potential_paths "${DEBOOTSTRAP_SEARCH_RELATIVE_DIRS}" "${sub_dirs_to_check}" "sources/apt" - [[ "${BUILD_DESKTOP}" == "yes" ]] && get_all_potential_paths "${CLI_SEARCH_RELATIVE_DIRS}" "${sub_dirs_to_check}" "sources/apt" - [[ "${BUILD_DESKTOP}" == "yes" ]] && get_all_potential_paths "${DESKTOP_ENVIRONMENTS_SEARCH_RELATIVE_DIRS}" "." "sources/apt" - [[ "${BUILD_DESKTOP}" == "yes" ]] && get_all_potential_paths "${DESKTOP_APPGROUPS_SEARCH_RELATIVE_DIRS}" "${DESKTOP_APPGROUPS_SELECTED}" "sources/apt" - -From fc0621decc383f2aed1194f882035b26de49c0aa Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 29 Apr 2022 17:55:47 +0200 -Subject: [PATCH] armbian-next: fix: don't manage apt-cacher-ng if told NOT to, - not the other way around - ---- - lib/functions/host/apt-cacher-ng.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/functions/host/apt-cacher-ng.sh b/lib/functions/host/apt-cacher-ng.sh -index 4801784c7..120c39001 100644 ---- a/lib/functions/host/apt-cacher-ng.sh -+++ b/lib/functions/host/apt-cacher-ng.sh -@@ -54,7 +54,7 @@ function acng_configure_and_restart_acng() { - } - - function acng_check_status_or_restart() { -- [[ $NO_APT_CACHER != yes ]] && return 0 # don't if told not to -+ [[ $NO_APT_CACHER == yes ]] && return 0 # don't if told not to - [[ "${APT_PROXY_ADDR:-localhost:3142}" != "localhost:3142" ]] && return 0 # also not if acng not local to builder machine - - if ! systemctl -q is-active apt-cacher-ng.service; then - -From bdb9aba47d9b70cfb04089866bafe176a1e6dab6 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 16 Apr 2022 14:55:43 +0200 -Subject: [PATCH] armbian-next: `JUST_UBOOT=yes` + hooks - `build_custom_uboot()`/`post_write_uboot_platform()` - -- post_write_uboot_platform() - - only runs during build, for now (not on device) -- build_custom_uboot() - - allow fully custom, extension driven, building of u-boot - - also partial preparation of uboot source combined with default Armbian build -- HACK: u-boot: downgrade some errors to warnings via KCFLAGS -- fix copy of atf bins to uboot, don't do it if atf's not there ---- - lib/functions/compilation/uboot.sh | 47 +++++++++++++++++++++++++------------ - lib/functions/image/loop.sh | 26 +++++++++++++------- - lib/functions/main/default-build.sh | 17 +++++++++++--- - 3 files changed, 63 insertions(+), 27 deletions(-) - -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index fd3ae385a..f87470eb7 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -30,7 +30,8 @@ function compile_uboot_target() { - # create patch for manual source changes - [[ $CREATE_PATCHES == yes ]] && userpatch_create "u-boot" - -- if [[ -n $ATFSOURCE ]]; then -+ if [[ -n $ATFSOURCE && -d "${atftempdir}" ]]; then -+ display_alert "Copying over bins from atftempdir" "${atftempdir}" "debug" - cp -Rv "${atftempdir}"/*.bin . - rm -rf "${atftempdir}" - fi -@@ -72,7 +73,9 @@ function compile_uboot_target() { - - display_alert "${uboot_prefix}Compiling u-boot" "${version} ${target_make}" "info" - export if_error_detail_message="${uboot_prefix}Failed to build u-boot ${version} ${target_make}" -- run_host_command_logged_long_running CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" make "$target_make" "$CTHREADS" "${cross_compile}" "KCFLAGS=-fdiagnostics-color=always" -+ KCFLAGS="-fdiagnostics-color=always -Wno-error=maybe-uninitialized -Wno-error=misleading-indentation" \ -+ run_host_command_logged_long_running CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" \ -+ make "$target_make" "$CTHREADS" "${cross_compile}" - - if [[ $(type -t uboot_custom_postprocess) == function ]]; then - display_alert "${uboot_prefix}Postprocessing u-boot" "${version} ${target_make}" -@@ -93,7 +96,7 @@ function compile_uboot_target() { - fi - display_alert "${uboot_prefix}Deploying u-boot binary target" "${version} ${target_make} :: ${f_dst}" - [[ ! -f $f_src ]] && exit_with_error "U-boot artifact not found" "$(basename "${f_src}")" -- run_host_command_logged cp -v "${f_src}" "$uboottempdir/${uboot_name}/usr/lib/${uboot_name}/${f_dst}" -+ run_host_command_logged cp -v "${f_src}" "${uboottempdir}/${uboot_name}/usr/lib/${uboot_name}/${f_dst}" - #display_alert "Done with binary target" "${version} ${target_make} :: ${f_dst}" - done - -@@ -151,18 +154,32 @@ compile_uboot() { - chmod 700 "${uboottempdir}" - mkdir -p "$uboottempdir/$uboot_name/usr/lib/u-boot" "$uboottempdir/$uboot_name/usr/lib/$uboot_name" "$uboottempdir/$uboot_name/DEBIAN" - -- # Try very hard, to fault even, to avoid using subshells while reading a newline-delimited string. -- # Sorry for the juggling with IFS. -- local _old_ifs="${IFS}" _new_ifs=$'\n' uboot_target_counter=1 -- IFS="${_new_ifs}" # split on newlines only -- for target in ${UBOOT_TARGET_MAP}; do -- IFS="${_old_ifs}" # restore for the body of loop -- export target uboot_name uboottempdir toolchain version uboot_target_counter -- compile_uboot_target -- uboot_target_counter=$((uboot_target_counter + 1)) -- IFS="${_new_ifs}" # split on newlines only for rest of loop -- done -- IFS="${_old_ifs}" -+ # Allow extension-based u-boot bulding. We call the hook, and if EXTENSION_BUILT_UBOOT="yes" afterwards, we skip our own compilation. -+ # This is to make it easy to build vendor/downstream uboot with their own quirks. -+ -+ display_alert "Extensions: build custom uboot" "build_custom_uboot" "debug" -+ call_extension_method "build_custom_uboot" <<- 'BUILD_CUSTOM_UBOOT' -+ *allow extensions to build their own uboot* -+ For downstream uboot et al. -+ Set \`EXTENSION_BUILT_UBOOT=yes\` to then skip the normal compilation. -+ BUILD_CUSTOM_UBOOT -+ -+ if [[ "${EXTENSION_BUILT_UBOOT}" != "yes" ]]; then -+ # Try very hard, to fault even, to avoid using subshells while reading a newline-delimited string. -+ # Sorry for the juggling with IFS. -+ local _old_ifs="${IFS}" _new_ifs=$'\n' uboot_target_counter=1 -+ IFS="${_new_ifs}" # split on newlines only -+ for target in ${UBOOT_TARGET_MAP}; do -+ IFS="${_old_ifs}" # restore for the body of loop -+ export target uboot_name uboottempdir toolchain version uboot_target_counter -+ compile_uboot_target -+ uboot_target_counter=$((uboot_target_counter + 1)) -+ IFS="${_new_ifs}" # split on newlines only for rest of loop -+ done -+ IFS="${_old_ifs}" -+ else -+ display_alert "Extensions: custom uboot built by extension" "not building regular uboot" "debug" -+ fi - - display_alert "Preparing u-boot general packaging. all_worked:${all_worked} any_worked:${any_worked} " "${version} ${target_make}" - -diff --git a/lib/functions/image/loop.sh b/lib/functions/image/loop.sh -index 97ee1891e..9d79f8139 100644 ---- a/lib/functions/image/loop.sh -+++ b/lib/functions/image/loop.sh -@@ -36,9 +36,9 @@ write_uboot_to_loop_image() { - revision=${REVISION} - if [[ -n $UBOOT_REPO_VERSION ]]; then - revision=${UBOOT_REPO_VERSION} -- dpkg -x "${DEB_STORAGE}/linux-u-boot-${BOARD}-${BRANCH}_${revision}_${ARCH}.deb" ${TEMP_DIR}/ 2>&1 -+ run_host_command_logged dpkg -x "${DEB_STORAGE}/linux-u-boot-${BOARD}-${BRANCH}_${revision}_${ARCH}.deb" ${TEMP_DIR}/ - else -- dpkg -x "${DEB_STORAGE}/${CHOSEN_UBOOT}_${revision}_${ARCH}.deb" ${TEMP_DIR}/ 2>&1 -+ run_host_command_logged dpkg -x "${DEB_STORAGE}/${CHOSEN_UBOOT}_${revision}_${ARCH}.deb" ${TEMP_DIR}/ - fi - - if [[ ! -f "${TEMP_DIR}/usr/lib/u-boot/platform_install.sh" ]]; then -@@ -46,15 +46,23 @@ write_uboot_to_loop_image() { - fi - - display_alert "Sourcing u-boot install functions" "$loop" "info" -- source ${TEMP_DIR}/usr/lib/u-boot/platform_install.sh 2>&1 -+ source ${TEMP_DIR}/usr/lib/u-boot/platform_install.sh -+ set -e # make sure, we just included something that might disable it - - display_alert "Writing u-boot bootloader" "$loop" "info" -- write_uboot_platform "${TEMP_DIR}${DIR}" "$loop" 2>&1 -- [[ $? -ne 0 ]] && { -- rm -rf ${TEMP_DIR} -- exit_with_error "U-boot bootloader failed to install" "@host" -- } -- rm -rf ${TEMP_DIR} -+ write_uboot_platform "${TEMP_DIR}${DIR}" "$loop" # @TODO: rpardini: what is ${DIR} ? -+ -+ export UBOOT_CHROOT_DIR="${TEMP_DIR}${DIR}" -+ -+ call_extension_method "post_write_uboot_platform" <<- 'POST_WRITE_UBOOT_PLATFORM' -+ *allow custom writing of uboot -- only during image build* -+ Called after `write_uboot_platform()`. -+ It receives `UBOOT_CHROOT_DIR` with the full path to the u-boot dir in the chroot. -+ Important: this is only called inside the build system. -+ Consider that `write_uboot_platform()` is also called board-side, when updating uboot, eg: nand-sata-install. -+ POST_WRITE_UBOOT_PLATFORM -+ -+ #rm -rf ${TEMP_DIR} - - return 0 - } -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 8f051610f..6f0823648 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -29,8 +29,15 @@ function main_default_build_single() { - - # Too many things being done. Allow doing only one thing. For core development, mostly. - # Also because "KERNEL_ONLY=yes" should really be spelled "PACKAGES_ONLY=yes" -- local do_build_uboot="yes" do_build_kernel="yes" exit_after_kernel_build="no" do_host_tools="yes" -- if [[ "${JUST_KERNEL}" == "yes" ]]; then -+ local do_build_uboot="yes" do_build_kernel="yes" exit_after_kernel_build="no" exit_after_uboot_build="no" do_host_tools="yes" -+ if [[ "${JUST_UBOOT}" == "yes" && "${JUST_KERNEL}" == "yes" ]]; then -+ exit_with_error "User of build system" "can't make up his mind about JUST_KERNEL or JUST_UBOOT" -+ elif [[ "${JUST_UBOOT}" == "yes" ]]; then -+ display_alert "JUST_KERNEL set to yes" "Building only kernel and exiting after that" "debug" -+ do_build_uboot="yes" -+ do_host_tools="yes" # rkbin, fips, etc. -+ exit_after_uboot_build="yes" -+ elif [[ "${JUST_KERNEL}" == "yes" ]]; then - display_alert "JUST_KERNEL set to yes" "Building only kernel and exiting after that" "debug" - do_build_uboot="no" - exit_after_kernel_build="yes" -@@ -67,6 +74,10 @@ function main_default_build_single() { - fi - fi - fi -+ if [[ "${exit_after_uboot_build}" == "yes" ]]; then -+ display_alert "Exiting after u-boot build" "JUST_UBOOT=yes" "info" -+ exit 0 -+ fi - fi - - # Compile kernel if packed .deb does not exist or use the one from repository -@@ -78,7 +89,7 @@ function main_default_build_single() { - fi - fi - if [[ "${exit_after_kernel_build}" == "yes" ]]; then -- display_alert "Only building kernel and exiting" "NOW" "debug" -+ display_alert "Only building kernel and exiting" "JUST_KERNEL=yes" "debug" - exit 0 - fi - fi - -From 893b8615a1a976ee6246e186f59aba468ad1a7b5 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 28 Apr 2022 09:35:26 +0200 -Subject: [PATCH] armbian-next: fix: no use testing the host for resolvconf if - we're manipulating the SDCARD - ---- - lib/functions/rootfs/distro-agnostic.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 238bdb9d0..3e8121a7e 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -504,7 +504,7 @@ function install_distribution_agnostic() { - cp "${SDCARD}"/etc/armbian-release "${SDCARD}"/etc/armbian-image-release - - # DNS fix. package resolvconf is not available everywhere -- if [ -d /etc/resolvconf/resolv.conf.d ] && [ -n "$NAMESERVER" ]; then -+ if [ -d "${SDCARD}"/etc/resolvconf/resolv.conf.d ] && [ -n "$NAMESERVER" ]; then - echo "nameserver $NAMESERVER" > "${SDCARD}"/etc/resolvconf/resolv.conf.d/head - fi - - -From 25a8de27bb2b240734c1647a71826688b474b0a0 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 24 Apr 2022 09:32:14 +0200 -Subject: [PATCH] armbian-next: sunxi_common: avoid shortcircuit error on - family_tweaks_bsp when family_tweaks_bsp_s is not defined - ---- - config/sources/families/include/sunxi_common.inc | 2 ++ - lib/functions/bsp/bsp-cli.sh | 6 +++--- - 2 files changed, 5 insertions(+), 3 deletions(-) - -diff --git a/config/sources/families/include/sunxi_common.inc b/config/sources/families/include/sunxi_common.inc -index a16180506..8ac7a5551 100644 ---- a/config/sources/families/include/sunxi_common.inc -+++ b/config/sources/families/include/sunxi_common.inc -@@ -52,6 +52,8 @@ family_tweaks() { - family_tweaks_bsp() { - # execute specific tweaks function if present - [[ $(type -t family_tweaks_bsp_s) == function ]] && family_tweaks_bsp_s -+ -+ return 0 # short-circuit above, avoid errors on exit. - } - - write_uboot_platform() { -diff --git a/lib/functions/bsp/bsp-cli.sh b/lib/functions/bsp/bsp-cli.sh -index c52910403..5ee670582 100644 ---- a/lib/functions/bsp/bsp-cli.sh -+++ b/lib/functions/bsp/bsp-cli.sh -@@ -288,9 +288,9 @@ create_board_package() { - - # execute $LINUXFAMILY-specific tweaks - if [[ $(type -t family_tweaks_bsp) == function ]]; then -- display_alert "Running family_tweaks_bsp" "${LINUXFAMILY}" "debug" -- family_tweaks_bsp 2>&1 -- display_alert "Done with family_tweaks_bsp" "${LINUXFAMILY}" "debug" -+ display_alert "Running family_tweaks_bsp" "${LINUXFAMILY} - ${BOARDFAMILY}" "debug" -+ family_tweaks_bsp -+ display_alert "Done with family_tweaks_bsp" "${LINUXFAMILY} - ${BOARDFAMILY}" "debug" - fi - - call_extension_method "post_family_tweaks_bsp" <<- 'POST_FAMILY_TWEAKS_BSP' - -From c46418fd00b24879e4a4f18f77c19ccb887a9346 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 22 Apr 2022 12:50:21 +0200 -Subject: [PATCH] armbian-next: fix: add `zstd` and `parallel` to hostdeps - ---- - lib/functions/host/prepare-host.sh | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/lib/functions/host/prepare-host.sh b/lib/functions/host/prepare-host.sh -index da443e4fb..b48f666b1 100644 ---- a/lib/functions/host/prepare-host.sh -+++ b/lib/functions/host/prepare-host.sh -@@ -43,11 +43,11 @@ prepare_host() { - zlib1g-dev - - # non-mess below? -- file ccze colorized-logs tree # logging utilities -- unzip zip p7zip-full pigz pixz pbzip2 lzop # compressors et al -- parted gdisk # partition tools -- aria2 curl wget # downloaders et al -- -+ file ccze colorized-logs tree # logging utilities -+ unzip zip p7zip-full pigz pixz pbzip2 lzop zstd # compressors et al -+ parted gdisk # partition tools -+ aria2 curl wget # downloaders et al -+ parallel # do things in parallel - # toolchains. NEW: using metapackages, allow us to have same list of all arches; brings both C and C++ compilers - crossbuild-essential-armhf crossbuild-essential-armel # for ARM 32-bit, both HF and EL are needed in some cases. - crossbuild-essential-arm64 # For ARM 64-bit, arm64. - -From 6d5a8490804d8427c6f4578389b0ae73c746ed61 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 20 Apr 2022 12:49:20 +0200 -Subject: [PATCH] armbian-next: manual merge (17) of all changes between - revisions 64410fb74b44cca82e9affbdf93a59d5692862ff and - 08cf31de73de5f5ba1986348e4556b00d77af09f - -- changes about `git safe dir` ignored, I've done the same in a different way -- hash calculation changes ignored, fasthash is completely different ---- - config/sources/families/include/sunxi64_common.inc | 6 +++--- - config/sources/families/include/sunxi_common.inc | 6 +++--- - config/sources/families/include/uefi_common.inc | 4 ++-- - config/sources/families/mvebu64.conf | 4 ++-- - lib/functions/compilation/patch/kernel-drivers.sh | 7 ++++--- - lib/functions/host/external-toolchains.sh | 2 ++ - 6 files changed, 16 insertions(+), 13 deletions(-) - -diff --git a/config/sources/families/include/sunxi64_common.inc b/config/sources/families/include/sunxi64_common.inc -index 323d67c1c..61addb39b 100644 ---- a/config/sources/families/include/sunxi64_common.inc -+++ b/config/sources/families/include/sunxi64_common.inc -@@ -26,9 +26,9 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -- export KERNELBRANCH="branch:linux-5.16.y" -- export KERNELBRANCH_MEGOUS="branch:orange-pi-5.16" -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -+ export KERNELBRANCH="branch:linux-5.17.y" -+ export KERNELBRANCH_MEGOUS="branch:orange-pi-5.17" - ;; - esac - -diff --git a/config/sources/families/include/sunxi_common.inc b/config/sources/families/include/sunxi_common.inc -index a9f14f950..a16180506 100644 ---- a/config/sources/families/include/sunxi_common.inc -+++ b/config/sources/families/include/sunxi_common.inc -@@ -27,9 +27,9 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -- export KERNELBRANCH="branch:linux-5.16.y" -- export KERNELBRANCH_MEGOUS="branch:orange-pi-5.16" -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -+ export KERNELBRANCH="branch:linux-5.17.y" -+ export KERNELBRANCH_MEGOUS="branch:orange-pi-5.17" - ;; - esac - -diff --git a/config/sources/families/include/uefi_common.inc b/config/sources/families/include/uefi_common.inc -index 175fcae2f..821ed660a 100644 ---- a/config/sources/families/include/uefi_common.inc -+++ b/config/sources/families/include/uefi_common.inc -@@ -22,8 +22,8 @@ case "${BRANCH}" in - edge) - export DISTRO_GENERIC_KERNEL=no - export LINUXCONFIG="linux-uefi-${LINUXFAMILY}-${BRANCH}" -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. For mainline caching. -- export KERNELBRANCH="branch:linux-5.16.y" # Branch or tag to build from. It should match MAJOR_MINOR -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. For mainline caching. -+ export KERNELBRANCH="branch:linux-5.17.y" # Branch or tag to build from. It should match MAJOR_MINOR - export KERNELPATCHDIR="uefi-${LINUXFAMILY}-${BRANCH}" # Might be empty. - ;; - esac -diff --git a/config/sources/families/mvebu64.conf b/config/sources/families/mvebu64.conf -index bc79e1ec6..88cc752d4 100644 ---- a/config/sources/families/mvebu64.conf -+++ b/config/sources/families/mvebu64.conf -@@ -1,6 +1,6 @@ - enable_extension "marvell-tools" - ARCH=arm64 --BOOTBRANCH='branch:v2022.01' -+BOOTBRANCH='branch:v2022.04' - BOOTENV_FILE='mvebu64.txt' - ATFSOURCE='https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git' - ATFDIR='arm-trusted-firmware-espressobin' -@@ -84,7 +84,7 @@ atf_custom_postprocess() { - if [[ "${SKIP_EXTERNAL_TOOLCHAINS}" == "yes" ]]; then - export TOOLCHAIN_NAME="arm-linux-gnueabi-" - else -- export TOOLCHAIN_NAME="arm-none-eabi-" -+ export TOOLCHAIN_NAME="arm-none-linux-gnueabihf-" - fi - export ATF2=$(find_toolchain "$TOOLCHAIN_NAME" "> 10.0")/$TOOLCHAIN_NAME - export BL33=$ubootdir"/u-boot.bin" -diff --git a/lib/functions/compilation/patch/kernel-drivers.sh b/lib/functions/compilation/patch/kernel-drivers.sh -index 25f78b90c..6631eb445 100644 ---- a/lib/functions/compilation/patch/kernel-drivers.sh -+++ b/lib/functions/compilation/patch/kernel-drivers.sh -@@ -37,9 +37,10 @@ function prepare_extra_kernel_drivers() { - aufs_tag=$(echo "${version}" | cut -f 1-2 -d ".") - - # manual overrides -- if linux-version compare "${version}" ge 5.4.3 && linux-version compare "${version}" le 5.5; then aufs_tag="5.4.3"; fi -- if linux-version compare "${version}" ge 5.10.82 && linux-version compare "${version}" le 5.11; then aufs_tag="5.10.82"; fi -- if linux-version compare "${version}" ge 5.15.5 && linux-version compare "${version}" le 5.16; then aufs_tag="5.15.5"; fi -+ if linux-version compare "${version}" ge 5.4.3 && linux-version compare "${version}" le 5.5 ; then aufstag="5.4.3"; fi -+ if linux-version compare "${version}" ge 5.10.82 && linux-version compare "${version}" le 5.11 ; then aufstag="5.10.82"; fi -+ if linux-version compare "${version}" ge 5.15.5 && linux-version compare "${version}" le 5.16 ; then aufstag="5.15.5"; fi -+ if linux-version compare "${version}" ge 5.17.3 && linux-version compare "${version}" le 5.18 ; then aufstag="5.17.3"; fi - - # check if Mr. Okajima already made a branch for this version, otherwise use RC. - git ls-remote --exit-code --heads https://github.com/sfjro/aufs5-standalone "aufs${aufs_tag}" > /dev/null || { -diff --git a/lib/functions/host/external-toolchains.sh b/lib/functions/host/external-toolchains.sh -index f2db2d6ea..f8733d294 100644 ---- a/lib/functions/host/external-toolchains.sh -+++ b/lib/functions/host/external-toolchains.sh -@@ -24,6 +24,8 @@ function download_external_toolchains() { - "${ARMBIAN_MIRROR}/_toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz" - "${ARMBIAN_MIRROR}/_toolchain/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz" - "${ARMBIAN_MIRROR}/_toolchain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz" -+ "${ARMBIAN_MIRROR}/_toolchain/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz" -+ "${ARMBIAN_MIRROR}/_toolchain/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz" - ) - - USE_TORRENT_STATUS=${USE_TORRENT} - -From 8341a778f0a1b9678858904eaddb540f43129b58 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Tue, 19 Apr 2022 13:48:06 +0200 -Subject: [PATCH] armbian-next: add `crossbuild-essential-armel` so - `arm-linux-gnueabi-gcc` is available with system toolchains - -- need to for some ATF builds, at least. ---- - lib/functions/host/prepare-host.sh | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/lib/functions/host/prepare-host.sh b/lib/functions/host/prepare-host.sh -index bae3b3e7c..da443e4fb 100644 ---- a/lib/functions/host/prepare-host.sh -+++ b/lib/functions/host/prepare-host.sh -@@ -49,9 +49,9 @@ prepare_host() { - aria2 curl wget # downloaders et al - - # toolchains. NEW: using metapackages, allow us to have same list of all arches; brings both C and C++ compilers -- crossbuild-essential-armhf -- crossbuild-essential-arm64 -- crossbuild-essential-amd64 -+ crossbuild-essential-armhf crossbuild-essential-armel # for ARM 32-bit, both HF and EL are needed in some cases. -+ crossbuild-essential-arm64 # For ARM 64-bit, arm64. -+ crossbuild-essential-amd64 # For AMD 64-bit, x86_64. - ) - - if [[ $(dpkg --print-architecture) == amd64 ]]; then - -From 8fdc420cc001b9ad79784ff486461eb0a2af6be8 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Tue, 19 Apr 2022 00:18:04 +0200 -Subject: [PATCH] armbian-next: rockchip64_common: lotsa logging and debugging - -- supposedly no practical changes ---- - .../sources/families/include/rockchip64_common.inc | 38 ++++++++++++---------- - 1 file changed, 20 insertions(+), 18 deletions(-) - -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index cd9541c3b..688097ae7 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -17,6 +17,7 @@ PACKAGE_LIST_FAMILY="ethtool" - RKBIN_DIR="$SRC/cache/sources/rkbin-tools" - - BOOT_SOC=${BOOT_SOC:=$(expr $BOOTCONFIG : '.*\(rk[[:digit:]]\+.*\)_.*')} -+display_alert "BOOT_SOC:" "$BOOT_SOC" "debug" - - CPUMIN=${CPUMIN:="408000"} - -@@ -68,8 +69,11 @@ elif [[ $BOOT_SOC == rk3566 ]]; then - elif [[ $BOOT_SOC == rk3568 ]]; then - - BOOT_SCENARIO="${BOOT_SCENARIO:=spl-blobs}" -- DDR_BLOB='rk35/rk3568_ddr_1560MHz_v1.10.bin' -- BL31_BLOB='rk35/rk3568_bl31_v1.28.elf' -+ DDR_BLOB="${DDR_BLOB:-"rk35/rk3568_ddr_1560MHz_v1.10.bin"}" -+ BL31_BLOB="${BL31_BLOB:-"rk35/rk3568_bl31_v1.28.elf"}" -+ display_alert "BOOT_SCENARIO:" "$BOOT_SCENARIO" "debug" -+ display_alert "DDR_BLOB:" "$DDR_BLOB" "debug" -+ display_alert "BL31_BLOB:" "$BL31_BLOB" "debug" - - elif [[ $BOARD == rockpi-s ]]; then - -@@ -129,6 +133,7 @@ prepare_boot_configuration() { - - elif [[ $BOOT_SCENARIO == "spl-blobs" ]]; then - -+ display_alert "BOOT Scenario is" "spl-blobs" "debug" - UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB spl/u-boot-spl.bin u-boot.dtb u-boot.itb;;idbloader.img u-boot.itb" - ATFSOURCE='' - ATF_COMPILE='no' -@@ -153,13 +158,13 @@ uboot_custom_postprocess() { - if [[ $BOOT_SCENARIO == "blobless" || $BOOT_SCENARIO == "tpl-spl-blob" ]]; then - : - elif [[ $BOOT_SCENARIO == "spl-blobs" ]]; then -- -- tools/mkimage -n $BOOT_SOC -T rksd -d $RKBIN_DIR/$DDR_BLOB:spl/u-boot-spl.bin idbloader.img -+ display_alert "mkimage for $BOOT_SOC with $BOOT_SCENARIO" "spl-blobs" "debug" -+ run_host_command_logged tools/mkimage -n $BOOT_SOC -T rksd -d $RKBIN_DIR/$DDR_BLOB:spl/u-boot-spl.bin idbloader.img - - elif [[ $BOOT_SCENARIO == "only-blobs" ]]; then - - local tempfile=$(mktemp) -- tools/mkimage -n $BOOT_SOC -T rksd -d $RKBIN_DIR/$DDR_BLOB idbloader.bin -+ run_host_command_logged tools/mkimage -n $BOOT_SOC -T rksd -d $RKBIN_DIR/$DDR_BLOB idbloader.bin - cat $RKBIN_DIR/$MINILOADER_BLOB >> idbloader.bin - run_host_x86_binary_logged $RKBIN_DIR/tools/loaderimage --pack --uboot ./u-boot-dtb.bin uboot.img 0x200000 - run_host_x86_binary_logged $RKBIN_DIR/tools/trust_merger --replace bl31.elf $RKBIN_DIR/$BL31_BLOB trust.ini -@@ -178,25 +183,22 @@ uboot_custom_postprocess() { - } - - write_uboot_platform() { -- if [[ -f $1/rksd_loader.img ]]; then # legacy rk3399 loader -- -- dd if=$1/rksd_loader.img of=$2 seek=64 conv=notrunc status=none > /dev/null 2>&1 -+ # This is run board-side too, so account for the non-existance of run_host_command_logged -+ local logging_prelude="" -+ [[ $(type -t run_host_command_logged) == function ]] && logging_prelude="run_host_command_logged" - -+ if [[ -f $1/rksd_loader.img ]]; then # legacy rk3399 loader -+ ${logging_prelude} dd if=$1/rksd_loader.img of=$2 seek=64 conv=notrunc status=none - elif [[ -f $1/u-boot.itb ]]; then # $BOOT_SCENARIO == "blobless" || $BOOT_SCENARIO == "tpl-spl-blob" -- -- dd if=$1/idbloader.img of=$2 seek=64 conv=notrunc status=none > /dev/null 2>&1 -- dd if=$1/u-boot.itb of=$2 seek=16384 conv=notrunc status=none > /dev/null 2>&1 -- -+ ${logging_prelude} dd if=$1/idbloader.img of=$2 seek=64 conv=notrunc status=none -+ ${logging_prelude} dd if=$1/u-boot.itb of=$2 seek=16384 conv=notrunc status=none - elif [[ -f $1/uboot.img ]]; then # $BOOT_SCENARIO == "only-blobs" -- -- dd if=$1/idbloader.bin of=$2 seek=64 conv=notrunc status=none > /dev/null 2>&1 -- dd if=$1/uboot.img of=$2 seek=16384 conv=notrunc status=none > /dev/null 2>&1 -- dd if=$1/trust.bin of=$2 seek=24576 conv=notrunc status=none > /dev/null 2>&1 -- -+ ${logging_prelude} dd if=$1/idbloader.bin of=$2 seek=64 conv=notrunc status=none -+ ${logging_prelude} dd if=$1/uboot.img of=$2 seek=16384 conv=notrunc status=none -+ ${logging_prelude} dd if=$1/trust.bin of=$2 seek=24576 conv=notrunc status=none - else - echo "Unsupported u-boot processing configuration!" - exit 1 -- - fi - } - - -From 52922a6b105279e73ccb760523e43fa6f7b0d5e0 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 18 Apr 2022 10:56:34 +0200 -Subject: [PATCH] armbian-next: grub: better logging - ---- - extensions/grub.sh | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/extensions/grub.sh b/extensions/grub.sh -index 0ae97ed43..e3eacb955 100644 ---- a/extensions/grub.sh -+++ b/extensions/grub.sh -@@ -129,13 +129,14 @@ pre_umount_final_image__900_export_kernel_and_initramfs() { - display_alert "Exporting Kernel and Initrd for" "kexec" "info" - # this writes to ${DESTIMG} directly, since debootstrap.sh will move them later. - # capture the $MOUNT/boot/vmlinuz and initrd and send it out ${DESTIMG} -- cp "$MOUNT"/boot/vmlinuz-* "${DESTIMG}/${version}.kernel" -- cp "$MOUNT"/boot/initrd.img-* "${DESTIMG}/${version}.initrd" -+ run_host_command_logged ls -la "${MOUNT}"/boot/vmlinuz-* "${MOUNT}"/boot/initrd.img-* || true -+ run_host_command_logged cp -pv "${MOUNT}"/boot/vmlinuz-* "${DESTIMG}/${version}.kernel" || true -+ run_host_command_logged cp -pv "${MOUNT}"/boot/initrd.img-* "${DESTIMG}/${version}.initrd" || true - fi - } - - configure_grub() { -- display_alert "GRUB EFI kernel cmdline" "console=${SERIALCON} distro=${UEFI_GRUB_DISTRO_NAME} timeout=${UEFI_GRUB_TIMEOUT}" "" -+ display_alert "GRUB EFI kernel cmdline" "console=${SERIALCON} distro=${UEFI_GRUB_DISTRO_NAME} timeout=${UEFI_GRUB_TIMEOUT} grub terminal=${UEFI_GRUB_TERMINAL}" "" - - if [[ "_${SERIALCON}_" != "__" ]]; then - cat <<- grubCfgFrag >> "${MOUNT}"/etc/default/grub.d/98-armbian.cfg - -From 7bf6574305c5d2b7230225007fa4a62e0f19a817 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 18 Apr 2022 11:23:10 +0200 -Subject: [PATCH] armbian-next: fix for chaos caused by git's fix of - CVE-2022-24765 otherwise "fatal: unsafe repository" - -- might not be the best solution, but it's the only one I found ---- - compile.sh | 4 +++- - lib/functions/compilation/debs.sh | 2 +- - lib/functions/configuration/main-config.sh | 4 ++-- - lib/functions/general/git.sh | 9 +++++++++ - 4 files changed, 15 insertions(+), 4 deletions(-) - -diff --git a/compile.sh b/compile.sh -index 2bc765f9f..67de1a20f 100755 ---- a/compile.sh -+++ b/compile.sh -@@ -36,7 +36,6 @@ if [[ ! -f "${SRC}"/lib/single.sh ]]; then - exit 255 - fi - -- - # shellcheck source=lib/single.sh - source "${SRC}"/lib/single.sh - -@@ -46,6 +45,9 @@ logging_init - # initialize the traps - traps_init - -+# make sure git considers our build system dir as a safe dir (only if actually building) -+[[ "${CONFIG_DEFS_ONLY}" != "yes" ]] && git_ensure_safe_directory "${SRC}" -+ - # Execute the main CLI entrypoint. - cli_entrypoint "$@" - -diff --git a/lib/functions/compilation/debs.sh b/lib/functions/compilation/debs.sh -index 2af1af793..8816314af 100644 ---- a/lib/functions/compilation/debs.sh -+++ b/lib/functions/compilation/debs.sh -@@ -174,7 +174,7 @@ compile_armbian-config() { - - compile_xilinx_bootgen() { - # Source code checkout -- (fetch_from_repo "https://github.com/Xilinx/bootgen.git" "xilinx-bootgen" "branch:master") -+ fetch_from_repo "https://github.com/Xilinx/bootgen.git" "xilinx-bootgen" "branch:master" - - pushd "${SRC}"/cache/sources/xilinx-bootgen || exit - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 44a23bb66..77e15b7b8 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -34,8 +34,8 @@ function do_main_configuration() { - cd "${SRC}" || exit - [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=17 - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 -- BUILD_REPOSITORY_URL=$(git remote get-url "$(git remote 2> /dev/null | grep origin)" 2> /dev/null) -- BUILD_REPOSITORY_COMMIT=$(git describe --match=d_e_a_d_b_e_e_f --always --dirty 2> /dev/null) -+ BUILD_REPOSITORY_URL=$(git remote get-url "$(git remote | grep origin)") -+ BUILD_REPOSITORY_COMMIT=$(git describe --match=d_e_a_d_b_e_e_f --always --dirty) - ROOTFS_CACHE_MAX=200 # max number of rootfs cache, older ones will be cleaned up - - # .deb compression. xz is standard, but is slow, so if avoided by default if not running in CI. one day, zstd. -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index baf7f54d2..c8086f728 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -27,6 +27,13 @@ function improved_git_fetch() { - improved_git fetch --progress --verbose --no-auto-maintenance "$@" - } - -+# workaround new limitations imposed by CVE-2022-24765 fix in git, otherwise "fatal: unsafe repository" -+function git_ensure_safe_directory() { -+ local git_dir="$1" -+ display_alert "git: Marking directory as safe" "$git_dir" "debug" -+ run_host_command_logged git config --global --add safe.directory "$git_dir" -+} -+ - # fetch_from_repo - # : remote repository URL - # : local directory; subdir for branch/tag will be created -@@ -84,6 +91,8 @@ fetch_from_repo() { - - display_alert "Git working dir" "${git_work_dir}" "git" - -+ git_ensure_safe_directory "${git_work_dir}" -+ - local expected_origin_url actual_origin_url - expected_origin_url="$(echo -n "${url}" | sed 's/^.*@//' | sed 's/^.*\/\///')" - - -From ad315fb153cd743614eb2d4102ad8a61d8be99aa Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 18 Apr 2022 23:14:20 +0200 -Subject: [PATCH] partitioning: fix: don't try fixing a bootscript that's not - there - -- this fixes a bug when "rootpart=2" without rootpart 1 being /boot ---- - lib/functions/image/partitioning.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 1c9597553..108326aaa 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -311,7 +311,7 @@ function prepare_partitions() { - You can write to `"${SDCARD}/boot/armbianEnv.txt"` here, it is guaranteed to exist. - IMAGE_SPECIFIC_ARMBIAN_ENV_READY - -- elif [[ $rootpart != 1 ]]; then -+ elif [[ $rootpart != 1 && -f "${SDCARD}/boot/${bootscript_dst}" ]]; then - local bootscript_dst=${BOOTSCRIPT##*:} - sed -i 's/mmcblk0p1/mmcblk0p2/' $SDCARD/boot/$bootscript_dst - sed -i -e "s/rootfstype=ext4/rootfstype=$ROOTFS_TYPE/" \ - -From 1661922e79f34bec964fdd86e278489e28945b4d Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 18 Apr 2022 23:15:29 +0200 -Subject: [PATCH] armbian-next: cleanups: umount tmpfs-based $SDCARD during - cleanup too - ---- - lib/functions/main/rootfs-image.sh | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index 1e4f27c20..590ca1f84 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -120,6 +120,9 @@ function trap_handler_cleanup_rootfs_and_image() { - umount_chroot_recursive "${SDCARD}" || true - umount_chroot_recursive "${MOUNT}" || true - -+ # unmount tmpfs mounted on SDCARD if it exists. -+ mountpoint -q "${SDCARD}" && umount "${SDCARD}" -+ - mountpoint -q "${SRC}"/cache/toolchain && umount -l "${SRC}"/cache/toolchain >&2 # @TODO: why does Igor uses lazy umounts? nfs? - mountpoint -q "${SRC}"/cache/rootfs && umount -l "${SRC}"/cache/rootfs >&2 - [[ $CRYPTROOT_ENABLE == yes ]] && cryptsetup luksClose "${ROOT_MAPPER}" >&2 - -From 7253f98a262253eab6094b29640293079b673ab0 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 18 Apr 2022 23:16:32 +0200 -Subject: [PATCH] armbian-next: indented heredoc, no functional changes - ---- - lib/functions/image/rootfs-to-image.sh | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index a8f0796cc..9d128c960 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -70,10 +70,10 @@ create_image_from_sdcard_rootfs() { - # fix wrong / permissions - chmod 755 "${MOUNT}" - -- call_extension_method "pre_umount_final_image" "config_pre_umount_final_image" << 'PRE_UMOUNT_FINAL_IMAGE' --*allow config to hack into the image before the unmount* --Called before unmounting both `/root` and `/boot`. --PRE_UMOUNT_FINAL_IMAGE -+ call_extension_method "pre_umount_final_image" "config_pre_umount_final_image" <<- 'PRE_UMOUNT_FINAL_IMAGE' -+ *allow config to hack into the image before the unmount* -+ Called before unmounting both `/root` and `/boot`. -+ PRE_UMOUNT_FINAL_IMAGE - - # unmount /boot/efi first, then /boot, rootfs third, image file last - sync - -From 1ac36b752e2982dbf59336c3ee857c91080ed8cf Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 16 Apr 2022 19:23:00 +0200 -Subject: [PATCH] armbian-next: fix shortcircuit as last statement in case of - extlinux - -- yes, I wasted 3 hours on this tiny bit, so *you* don't have to! -- better logging for rootfs `mkfs` et al -- introduce `PRESERVE_SDCARD_MOUNT=yes` to preserve SDCARD, MOUNT, and LOOP for debugging ---- - lib/functions/image/partitioning.sh | 14 ++++++++------ - lib/functions/main/rootfs-image.sh | 5 +++++ - 2 files changed, 13 insertions(+), 6 deletions(-) - -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 76c26a22c..1c9597553 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -6,7 +6,7 @@ - # - # LOGGING: this is run under the log manager. so just redirect unwanted stderr to stdout, and it goes to log. - # this is under the logging manager. so just log to stdout (no redirections), and redirect stderr to stdout unless you want it on screen. --prepare_partitions() { -+function prepare_partitions() { - display_alert "Preparing image file for rootfs" "$BOARD $RELEASE" "info" - - # possible partition combinations -@@ -161,6 +161,7 @@ prepare_partitions() { - display_alert "Creating partitions" "${bootfs:+/boot: $bootfs }root: $ROOTFS_TYPE" "info" - run_host_command_logged parted -s ${SDCARD}.raw -- mklabel ${IMAGE_PARTITION_TABLE} - if [[ "${USE_HOOK_FOR_PARTITION}" == "yes" ]]; then -+ display_alert "Using create_partition_table hook_point" "yes" "debug" - call_extension_method "create_partition_table" <<- 'CREATE_PARTITION_TABLE' - *only called when USE_HOOK_FOR_PARTITION=yes to create the complete partition table* - Finally, we can get our own partition table. You have to partition ${SDCARD}.raw -@@ -253,11 +254,13 @@ prepare_partitions() { - - check_loop_device "$rootdevice" - display_alert "Creating rootfs" "$ROOTFS_TYPE on $rootdevice" -- mkfs.${mkfs[$ROOTFS_TYPE]} ${mkopts[$ROOTFS_TYPE]} $rootdevice 2>&1 -- [[ $ROOTFS_TYPE == ext4 ]] && tune2fs -o journal_data_writeback $rootdevice > /dev/null -+ run_host_command_logged mkfs.${mkfs[$ROOTFS_TYPE]} "${mkopts[$ROOTFS_TYPE]}" "$rootdevice" -+ [[ $ROOTFS_TYPE == ext4 ]] && run_host_command_logged tune2fs -o journal_data_writeback "$rootdevice" - if [[ $ROOTFS_TYPE == btrfs && $BTRFS_COMPRESSION != none ]]; then - local fscreateopt="-o compress-force=${BTRFS_COMPRESSION}" - fi -+ sync # force writes to be really flushed -+ display_alert "Mounting rootfs" "$rootdevice" - run_host_command_logged mount ${fscreateopt} $rootdevice $MOUNT/ - # create fstab (and crypttab) entry - if [[ $CRYPTROOT_ENABLE == yes ]]; then -@@ -308,9 +311,7 @@ prepare_partitions() { - You can write to `"${SDCARD}/boot/armbianEnv.txt"` here, it is guaranteed to exist. - IMAGE_SPECIFIC_ARMBIAN_ENV_READY - -- elif -- [[ $rootpart != 1 ]] -- then -+ elif [[ $rootpart != 1 ]]; then - local bootscript_dst=${BOOTSCRIPT##*:} - sed -i 's/mmcblk0p1/mmcblk0p2/' $SDCARD/boot/$bootscript_dst - sed -i -e "s/rootfstype=ext4/rootfstype=$ROOTFS_TYPE/" \ -@@ -351,4 +352,5 @@ prepare_partitions() { - [[ -f $SDCARD/boot/armbianEnv.txt ]] && rm $SDCARD/boot/armbianEnv.txt - fi - -+ return 0 # there is a shortcircuit above! very tricky btw! - } -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index 86ad03594..1e4f27c20 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -124,6 +124,11 @@ function trap_handler_cleanup_rootfs_and_image() { - mountpoint -q "${SRC}"/cache/rootfs && umount -l "${SRC}"/cache/rootfs >&2 - [[ $CRYPTROOT_ENABLE == yes ]] && cryptsetup luksClose "${ROOT_MAPPER}" >&2 - -+ if [[ "${PRESERVE_SDCARD_MOUNT}" == "yes" ]]; then -+ display_alert "Preserving SD card mount" "trap_handler_cleanup_rootfs_and_image" "warn" -+ return 0 -+ fi -+ - # shellcheck disable=SC2153 # global var. - if [[ -b "${LOOP}" ]]; then - display_alert "Freeing loop" "trap_handler_cleanup_rootfs_and_image ${LOOP}" "wrn" - -From ef3709d30ee099523db2ad28e3f65e0d17754f50 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 16 Apr 2022 12:13:07 +0200 -Subject: [PATCH] armbian-next: kernel-headers: less verbose, trimmed down - tools a bit (perf and testing) - ---- - lib/functions/compilation/kernel-debs.sh | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) - -diff --git a/lib/functions/compilation/kernel-debs.sh b/lib/functions/compilation/kernel-debs.sh -index e0788518d..dd5a143c7 100644 ---- a/lib/functions/compilation/kernel-debs.sh -+++ b/lib/functions/compilation/kernel-debs.sh -@@ -280,12 +280,9 @@ function kernel_package_callback_linux_headers() { - find $(find "arch/${SRC_ARCH}" -name include -o -name scripts -type d) -type f - find arch/${SRC_ARCH}/include Module.symvers include scripts -type f - } -- # Include the byteshift utilities shared between kernel proper and the build scripts/tools. -+ # tools/include/tools has the byteshift utilities shared between kernel proper and the build scripts/tools. - # This replaces 'headers-debian-byteshift.patch' which was used for years in Armbian. -- #find tools/include/tools/be_byteshift.h tools/include/tools/le_byteshift.h -type f -- #find tools/objtool -type f -- #find tools/build -type f -- find tools -type f # all tools. all of it? we might get away with a little less. eg: tools/perf and tools/testing -+ find tools -type f # all tools; will trim a bit later - find arch/x86/lib/insn.c # required by objtool stuff... - - if is_enabled CONFIG_GCC_PLUGINS; then -@@ -300,8 +297,11 @@ function kernel_package_callback_linux_headers() { - - # Now, make the script dirs clean. - # This is run in our _target_ dir, not the source tree, so we're free to make clean as we wish without invalidating the next build's cache. -- run_host_command_logged cd "${headers_target_dir}" "&&" make "ARCH=${SRC_ARCH}" "M=scripts" clean -- run_host_command_logged cd "${headers_target_dir}/tools" "&&" make "ARCH=${SRC_ARCH}" clean -+ run_host_command_logged cd "${headers_target_dir}" "&&" make -s "ARCH=${SRC_ARCH}" "M=scripts" clean -+ run_host_command_logged cd "${headers_target_dir}/tools" "&&" make -s "ARCH=${SRC_ARCH}" clean -+ -+ # Trim down on the tools dir a bit after cleaning. -+ rm -rf "${headers_target_dir}/tools/perf" "${headers_target_dir}/tools/testing" - - # Hack: after cleaning, copy over the scripts/module.lds file from the source tree. It will only exist on 5.10+ - # See https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1906131 - -From 20c29c1d6e04783ac8e8151f27f57b52b8531342 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 16 Apr 2022 11:23:13 +0200 -Subject: [PATCH] khadas-vim3l: add asound.state for Khadas VIM3L - ---- - config/boards/khadas-vim3l.conf | 1 + - .../blobs/asound.state/asound.state.khadas-vim3l | 780 +++++++++++++++++++++ - 2 files changed, 781 insertions(+) - -diff --git a/config/boards/khadas-vim3l.conf b/config/boards/khadas-vim3l.conf -index e11310414..171e580f4 100644 ---- a/config/boards/khadas-vim3l.conf -+++ b/config/boards/khadas-vim3l.conf -@@ -7,3 +7,4 @@ FULL_DESKTOP="yes" - SERIALCON="ttyAML0" - BOOT_LOGO="desktop" - BOOT_FDT_FILE="amlogic/meson-sm1-khadas-vim3l.dtb" -+ASOUND_STATE="asound.state.khadas-vim3l" -diff --git a/packages/blobs/asound.state/asound.state.khadas-vim3l b/packages/blobs/asound.state/asound.state.khadas-vim3l -new file mode 100644 -index 000000000..0246c8126 ---- /dev/null -+++ b/packages/blobs/asound.state/asound.state.khadas-vim3l -@@ -0,0 +1,780 @@ -+state.KHADASVIM3 { -+ control.1 { -+ iface MIXER -+ name 'TDMOUT_A Lane 0 Volume' -+ value.0 0 -+ value.1 0 -+ comment { -+ access 'read write' -+ type INTEGER -+ count 2 -+ range '0 - 255' -+ } -+ } -+ control.2 { -+ iface MIXER -+ name 'TDMOUT_A Lane 1 Volume' -+ value.0 0 -+ value.1 0 -+ comment { -+ access 'read write' -+ type INTEGER -+ count 2 -+ range '0 - 255' -+ } -+ } -+ control.3 { -+ iface MIXER -+ name 'TDMOUT_A Lane 2 Volume' -+ value.0 0 -+ value.1 0 -+ comment { -+ access 'read write' -+ type INTEGER -+ count 2 -+ range '0 - 255' -+ } -+ } -+ control.4 { -+ iface MIXER -+ name 'TDMOUT_A Lane 3 Volume' -+ value.0 0 -+ value.1 0 -+ comment { -+ access 'read write' -+ type INTEGER -+ count 2 -+ range '0 - 255' -+ } -+ } -+ control.5 { -+ iface MIXER -+ name 'TDMOUT_A Gain Enable Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.6 { -+ iface PCM -+ device 5 -+ name 'Playback Channel Map' -+ value.0 0 -+ value.1 0 -+ value.2 0 -+ value.3 0 -+ value.4 0 -+ value.5 0 -+ value.6 0 -+ value.7 0 -+ comment { -+ access read -+ type INTEGER -+ count 8 -+ range '0 - 36' -+ } -+ } -+ control.7 { -+ iface PCM -+ device 5 -+ name ELD -+ value '100008006a10000100000000000000004cf45601416f58696e5975616e200907070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -+ comment { -+ access 'read volatile' -+ type BYTES -+ count 128 -+ } -+ } -+ control.8 { -+ iface MIXER -+ name 'FRDDR_A SRC 1 EN Switch' -+ value true -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.9 { -+ iface MIXER -+ name 'FRDDR_A SRC 2 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.10 { -+ iface MIXER -+ name 'FRDDR_A SRC 3 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.11 { -+ iface MIXER -+ name 'FRDDR_A SINK 1 SEL' -+ value 'OUT 0' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.12 { -+ iface MIXER -+ name 'FRDDR_A SINK 2 SEL' -+ value 'OUT 0' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.13 { -+ iface MIXER -+ name 'FRDDR_A SINK 3 SEL' -+ value 'OUT 0' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.14 { -+ iface MIXER -+ name 'FRDDR_B SRC 1 EN Switch' -+ value true -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.15 { -+ iface MIXER -+ name 'FRDDR_B SRC 2 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.16 { -+ iface MIXER -+ name 'FRDDR_B SRC 3 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.17 { -+ iface MIXER -+ name 'FRDDR_B SINK 1 SEL' -+ value 'OUT 0' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.18 { -+ iface MIXER -+ name 'FRDDR_B SINK 2 SEL' -+ value 'OUT 0' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.19 { -+ iface MIXER -+ name 'FRDDR_B SINK 3 SEL' -+ value 'OUT 0' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.20 { -+ iface MIXER -+ name 'FRDDR_C SRC 1 EN Switch' -+ value true -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.21 { -+ iface MIXER -+ name 'FRDDR_C SRC 2 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.22 { -+ iface MIXER -+ name 'FRDDR_C SRC 3 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.23 { -+ iface MIXER -+ name 'FRDDR_C SINK 1 SEL' -+ value 'OUT 0' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.24 { -+ iface MIXER -+ name 'FRDDR_C SINK 2 SEL' -+ value 'OUT 0' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.25 { -+ iface MIXER -+ name 'FRDDR_C SINK 3 SEL' -+ value 'OUT 0' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.26 { -+ iface MIXER -+ name 'TOHDMITX I2S SRC' -+ value 'I2S A' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'I2S A' -+ item.1 'I2S B' -+ item.2 'I2S C' -+ } -+ } -+ control.27 { -+ iface MIXER -+ name 'TOHDMITX Switch' -+ value true -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.28 { -+ iface MIXER -+ name 'TOHDMITX SPDIF SRC' -+ value 'SPDIF A' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'SPDIF A' -+ item.1 'SPDIF B' -+ } -+ } -+ control.29 { -+ iface MIXER -+ name 'TDMOUT_A SRC SEL' -+ value 'IN 0' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'IN 0' -+ item.1 'IN 1' -+ item.2 'IN 2' -+ } -+ } -+} -+state.G12BKHADASVIM3 { -+ control.1 { -+ iface MIXER -+ name 'TDMOUT_A Lane 0 Volume' -+ value.0 255 -+ value.1 255 -+ comment { -+ access 'read write' -+ type INTEGER -+ count 2 -+ range '0 - 255' -+ } -+ } -+ control.2 { -+ iface MIXER -+ name 'TDMOUT_A Lane 1 Volume' -+ value.0 255 -+ value.1 255 -+ comment { -+ access 'read write' -+ type INTEGER -+ count 2 -+ range '0 - 255' -+ } -+ } -+ control.3 { -+ iface MIXER -+ name 'TDMOUT_A Lane 2 Volume' -+ value.0 255 -+ value.1 255 -+ comment { -+ access 'read write' -+ type INTEGER -+ count 2 -+ range '0 - 255' -+ } -+ } -+ control.4 { -+ iface MIXER -+ name 'TDMOUT_A Lane 3 Volume' -+ value.0 255 -+ value.1 255 -+ comment { -+ access 'read write' -+ type INTEGER -+ count 2 -+ range '0 - 255' -+ } -+ } -+ control.5 { -+ iface MIXER -+ name 'TDMOUT_A Gain Enable Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.6 { -+ iface PCM -+ device 5 -+ name 'Playback Channel Map' -+ value.0 0 -+ value.1 0 -+ value.2 0 -+ value.3 0 -+ value.4 0 -+ value.5 0 -+ value.6 0 -+ value.7 0 -+ comment { -+ access read -+ type INTEGER -+ count 8 -+ range '0 - 36' -+ } -+ } -+ control.7 { -+ iface PCM -+ device 5 -+ name ELD -+ value '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' -+ comment { -+ access 'read volatile' -+ type BYTES -+ count 128 -+ } -+ } -+ control.8 { -+ iface MIXER -+ name 'FRDDR_A SRC 1 EN Switch' -+ value true -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.9 { -+ iface MIXER -+ name 'FRDDR_A SRC 2 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.10 { -+ iface MIXER -+ name 'FRDDR_A SRC 3 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.11 { -+ iface MIXER -+ name 'FRDDR_A SINK 1 SEL' -+ value 'OUT 1' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.12 { -+ iface MIXER -+ name 'FRDDR_A SINK 2 SEL' -+ value 'OUT 1' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.13 { -+ iface MIXER -+ name 'FRDDR_A SINK 3 SEL' -+ value 'OUT 1' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.14 { -+ iface MIXER -+ name 'FRDDR_B SRC 1 EN Switch' -+ value true -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.15 { -+ iface MIXER -+ name 'FRDDR_B SRC 2 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.16 { -+ iface MIXER -+ name 'FRDDR_B SRC 3 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.17 { -+ iface MIXER -+ name 'FRDDR_B SINK 1 SEL' -+ value 'OUT 1' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.18 { -+ iface MIXER -+ name 'FRDDR_B SINK 2 SEL' -+ value 'OUT 1' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.19 { -+ iface MIXER -+ name 'FRDDR_B SINK 3 SEL' -+ value 'OUT 1' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.20 { -+ iface MIXER -+ name 'FRDDR_C SRC 1 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.21 { -+ iface MIXER -+ name 'FRDDR_C SRC 2 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.22 { -+ iface MIXER -+ name 'FRDDR_C SRC 3 EN Switch' -+ value false -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.23 { -+ iface MIXER -+ name 'FRDDR_C SINK 1 SEL' -+ value 'OUT 1' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.24 { -+ iface MIXER -+ name 'FRDDR_C SINK 2 SEL' -+ value 'OUT 1' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.25 { -+ iface MIXER -+ name 'FRDDR_C SINK 3 SEL' -+ value 'OUT 1' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'OUT 0' -+ item.1 'OUT 1' -+ item.2 'OUT 2' -+ item.3 'OUT 3' -+ item.4 'OUT 4' -+ item.5 'OUT 5' -+ item.6 'OUT 6' -+ item.7 'OUT 7' -+ } -+ } -+ control.26 { -+ iface MIXER -+ name 'TOHDMITX I2S SRC' -+ value 'I2S A' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'I2S A' -+ item.1 'I2S B' -+ item.2 'I2S C' -+ } -+ } -+ control.27 { -+ iface MIXER -+ name 'TOHDMITX Switch' -+ value true -+ comment { -+ access 'read write' -+ type BOOLEAN -+ count 1 -+ } -+ } -+ control.28 { -+ iface MIXER -+ name 'TOHDMITX SPDIF SRC' -+ value 'SPDIF A' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'SPDIF A' -+ item.1 'SPDIF B' -+ } -+ } -+ control.29 { -+ iface MIXER -+ name 'TDMOUT_A SRC SEL' -+ value 'IN 1' -+ comment { -+ access 'read write' -+ type ENUMERATED -+ count 1 -+ item.0 'IN 0' -+ item.1 'IN 1' -+ item.2 'IN 2' -+ } -+ } -+} - -From a22979940d28a816571644e92f157fe8e0af431f Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 16 Apr 2022 11:14:23 +0200 -Subject: [PATCH] armbian-next: introduce hook `extension_finish_config()` - - late hook for ext configuration - -- `extension_finish_config()` is the last thing done in config phase - - use it for determining stuff based on kernel version details, package names, etc -- also tune down some logging which was too verbose -- CI logs with no ANSI escape codes ---- - extensions/nvidia.sh | 2 +- - extensions/zfs.sh | 2 +- - lib/functions/logging/logging.sh | 5 ++--- - lib/functions/main/config-prepare.sh | 10 +++++++++- - lib/functions/rootfs/apt-sources.sh | 4 ++-- - 5 files changed, 15 insertions(+), 8 deletions(-) - -diff --git a/extensions/nvidia.sh b/extensions/nvidia.sh -index 801d61010..20f979728 100644 ---- a/extensions/nvidia.sh -+++ b/extensions/nvidia.sh -@@ -1,4 +1,4 @@ --function extension_prepare_config__build_nvidia_kernel_module() { -+function extension_finish_config__build_nvidia_kernel_module() { - if [[ "${KERNEL_HAS_WORKING_HEADERS}" != "yes" ]]; then - display_alert "Kernel version has no working headers package" "skipping nVidia for kernel v${KERNEL_MAJOR_MINOR}" "warn" - return 0 -diff --git a/extensions/zfs.sh b/extensions/zfs.sh -index eb41afd28..f1baa63ed 100644 ---- a/extensions/zfs.sh -+++ b/extensions/zfs.sh -@@ -1,4 +1,4 @@ --function extension_prepare_config__build_zfs_kernel_module() { -+function extension_finish_config__build_zfs_kernel_module() { - if [[ "${KERNEL_HAS_WORKING_HEADERS}" != "yes" ]]; then - display_alert "Kernel version has no working headers package" "skipping ZFS for kernel v${KERNEL_MAJOR_MINOR}" "warn" - return 0 -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 66bcda39e..6550d714d 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -144,7 +144,6 @@ function display_alert() { - ext) - level_indicator="✨" # or ✅ ? - inline_logs_color="\e[1;32m" -- ci_log="notice" - ;; - - info) -@@ -240,9 +239,9 @@ function display_alert() { - [[ -n $2 ]] && extra=" [${inline_logs_color} ${2} ${normal_color}]" - echo -e "${normal_color}${left_marker}${padding}${level_indicator}${padding}${normal_color}${right_marker}${timing_info}${pids_info}${bashopts_info} ${normal_color}${message}${extra}${normal_color}" >&2 - -- # Now write to CI, if we're running on it -+ # Now write to CI, if we're running on it. Remove ANSI escapes which confuse GitHub Actions. - if [[ "${CI}" == "true" ]] && [[ "${ci_log}" != "" ]]; then -- echo "::${ci_log} ::" "$@" >&2 -+ echo -e "::${ci_log} ::" "$@" | sed 's/\x1b\[[0-9;]*m//g' >&2 - fi - - return 0 # make sure to exit with success, always -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index 6c1570bcd..0264b0d9e 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -99,7 +99,7 @@ function prepare_and_config_main_build_single() { - [[ ${KERNEL_CONFIGURE} == prebuilt ]] && [[ -z ${REPOSITORY_INSTALL} ]] && - REPOSITORY_INSTALL="u-boot,kernel,bsp,armbian-zsh,armbian-config,armbian-bsp-cli,armbian-firmware${BUILD_DESKTOP:+,armbian-desktop,armbian-bsp-desktop}" - -- do_main_configuration # This initializes the extension manager among a lot of other things -+ do_main_configuration # This initializes the extension manager among a lot of other things, and call extension_prepare_config() hook - - # @TODO: this does not belong in configuration. it's a compilation thing. move there - # optimize build time with 100% CPU usage -@@ -176,6 +176,14 @@ function prepare_and_config_main_build_single() { - export ARMBIAN_WILL_BUILD_UBOOT=no - fi - -+ display_alert "Extensions: finish configuration" "extension_finish_config" "debug" -+ call_extension_method "extension_finish_config" <<- 'EXTENSION_FINISH_CONFIG' -+ *allow extensions a last chance at configuration just before it is done* -+ After kernel versions are set, package names determined, etc. -+ This runs *late*, and is the final step before finishing configuration. -+ Don't change anything not coming from other variables or meant to be configured by the user. -+ EXTENSION_FINISH_CONFIG -+ - display_alert "Done with prepare_and_config_main_build_single" "${BOARD}.${BOARD_TYPE}" "info" - } - -diff --git a/lib/functions/rootfs/apt-sources.sh b/lib/functions/rootfs/apt-sources.sh -index ff373a98b..bc17a3a9b 100644 ---- a/lib/functions/rootfs/apt-sources.sh -+++ b/lib/functions/rootfs/apt-sources.sh -@@ -36,7 +36,7 @@ add_apt_sources() { - if [[ "${new_apt_source}" == ppa* ]]; then - chroot_sdcard add-apt-repository -y -n "${new_apt_source}" # -y -> Assume yes, -n -> no apt-get update - if [[ -f "${apt_source_gpg_filepath}" ]]; then -- display_alert "Adding GPG Key" "via apt-key add (deprecated): ${apt_source_gpg_filename}" "warn" -+ display_alert "Adding GPG Key" "via apt-key add (deprecated): ${apt_source_gpg_filename}" - run_host_command_logged cp -pv "${apt_source_gpg_filepath}" "${SDCARD}/tmp/${apt_source_gpg_filename}" - chroot_sdcard apt-key add "/tmp/${apt_source_gpg_filename}" - fi -@@ -44,7 +44,7 @@ add_apt_sources() { - # installation without software-common-properties, sources.list + key.gpg - echo "${new_apt_source}" > "${SDCARD}/etc/apt/sources.list.d/${apt_source_filename}" - if [[ -f "${apt_source_gpg_filepath}" ]]; then -- display_alert "Adding GPG Key" "via keyrings: ${apt_source_gpg_filename}" "warn" -+ display_alert "Adding GPG Key" "via keyrings: ${apt_source_gpg_filename}" - mkdir -p "${SDCARD}"/usr/share/keyrings/ - run_host_command_logged cp -pv "${apt_source_gpg_filepath}" "${SDCARD}"/usr/share/keyrings/ - fi - -From bedd3aa1a4c661bc177af7dd0db3062296d7ec5f Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 16 Apr 2022 00:45:30 +0200 -Subject: [PATCH] armbian-next: shuffle around code and logic of - `add_desktop_package_sources()` - -- @TODO: still needs proper asset logging for sources.list(.d) -- @TODO: tunes down adding of sources/packages to CLI builds, check with Igor ---- - lib/functions/rootfs/{apt.sh => apt-install.sh} | 2 +- - lib/functions/rootfs/apt-sources.sh | 56 ++++++++++++++++++ - lib/functions/rootfs/create-cache.sh | 11 +++- - lib/functions/rootfs/rootfs-desktop.sh | 78 ------------------------- - lib/library-functions.sh | 15 ++++- - 5 files changed, 77 insertions(+), 85 deletions(-) - -diff --git a/lib/functions/rootfs/apt.sh b/lib/functions/rootfs/apt-install.sh -similarity index 93% -rename from lib/functions/rootfs/apt.sh -rename to lib/functions/rootfs/apt-install.sh -index e062d5284..b2406f339 100644 ---- a/lib/functions/rootfs/apt.sh -+++ b/lib/functions/rootfs/apt-install.sh -@@ -16,7 +16,7 @@ install_deb_chroot() { - # also won't require cleanup later - - name="/root/"$(basename "${package}") -- [[ ! -f "${SDCARD}${name}" ]] && cp "${package}" "${SDCARD}${name}" -+ [[ ! -f "${SDCARD}${name}" ]] && run_host_command_logged cp -pv "${package}" "${SDCARD}${name}" - desc="" - else - name=$1 -diff --git a/lib/functions/rootfs/apt-sources.sh b/lib/functions/rootfs/apt-sources.sh -new file mode 100644 -index 000000000..ff373a98b ---- /dev/null -+++ b/lib/functions/rootfs/apt-sources.sh -@@ -0,0 +1,56 @@ -+add_apt_sources() { -+ local potential_paths="" -+ local sub_dirs_to_check=". " -+ if [[ ! -z "${SELECTED_CONFIGURATION+x}" ]]; then -+ sub_dirs_to_check+="config_${SELECTED_CONFIGURATION}" -+ fi -+ -+ # @TODO: rpardini: The logic here is meant to be evolved over time. Originally, all of this only ran when BUILD_DESKTOP=yes. -+ # Igor had bumped it to run on all builds, but that adds external sources to cli and minimal. -+ # Here I'm tuning it down to 1/4th of the original, eg: no nala on my cli builds, thanks. -+ [[ "${BUILD_MINIMAL}" != "yes" ]] && get_all_potential_paths "${DEBOOTSTRAP_SEARCH_RELATIVE_DIRS}" "${sub_dirs_to_check}" "sources/apt" -+ [[ "${BUILD_DESKTOP}" == "yes" ]] && get_all_potential_paths "${CLI_SEARCH_RELATIVE_DIRS}" "${sub_dirs_to_check}" "sources/apt" -+ [[ "${BUILD_DESKTOP}" == "yes" ]] && get_all_potential_paths "${DESKTOP_ENVIRONMENTS_SEARCH_RELATIVE_DIRS}" "." "sources/apt" -+ [[ "${BUILD_DESKTOP}" == "yes" ]] && get_all_potential_paths "${DESKTOP_APPGROUPS_SEARCH_RELATIVE_DIRS}" "${DESKTOP_APPGROUPS_SELECTED}" "sources/apt" -+ -+ display_alert "Adding additional apt sources" "add_apt_sources()" "debug" -+ -+ for apt_sources_dirpath in ${potential_paths}; do -+ if [[ -d "${apt_sources_dirpath}" ]]; then -+ for apt_source_filepath in "${apt_sources_dirpath}/"*.source; do -+ apt_source_filepath=$(echo "${apt_source_filepath}" | sed -re 's/(^.*[^/])\.[^./]*$/\1/') -+ local new_apt_source -+ local apt_source_gpg_filepath -+ local apt_source_gpg_filename -+ local apt_source_filename -+ -+ new_apt_source="$(cat "${apt_source_filepath}.source")" -+ apt_source_gpg_filepath="${apt_source_filepath}.gpg" -+ apt_source_gpg_filename="$(basename "${apt_source_gpg_filepath}")" -+ apt_source_filename="$(basename "${apt_source_filepath}").list" -+ -+ display_alert "Adding APT Source" "${new_apt_source}" "info" -+ -+ # @TODO: rpardini, why do PPAs get apt-key and others get keyrings GPG? -+ -+ if [[ "${new_apt_source}" == ppa* ]]; then -+ chroot_sdcard add-apt-repository -y -n "${new_apt_source}" # -y -> Assume yes, -n -> no apt-get update -+ if [[ -f "${apt_source_gpg_filepath}" ]]; then -+ display_alert "Adding GPG Key" "via apt-key add (deprecated): ${apt_source_gpg_filename}" "warn" -+ run_host_command_logged cp -pv "${apt_source_gpg_filepath}" "${SDCARD}/tmp/${apt_source_gpg_filename}" -+ chroot_sdcard apt-key add "/tmp/${apt_source_gpg_filename}" -+ fi -+ else -+ # installation without software-common-properties, sources.list + key.gpg -+ echo "${new_apt_source}" > "${SDCARD}/etc/apt/sources.list.d/${apt_source_filename}" -+ if [[ -f "${apt_source_gpg_filepath}" ]]; then -+ display_alert "Adding GPG Key" "via keyrings: ${apt_source_gpg_filename}" "warn" -+ mkdir -p "${SDCARD}"/usr/share/keyrings/ -+ run_host_command_logged cp -pv "${apt_source_gpg_filepath}" "${SDCARD}"/usr/share/keyrings/ -+ fi -+ fi -+ -+ done -+ fi -+ done -+} -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index 5e57eabc5..7d7fc87e9 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -162,7 +162,7 @@ function create_new_rootfs_cache() { - chroot_sdcard LC_ALL=C LANG=C setupcon --save --force - fi - -- # stage: create apt-get sources list -+ # stage: create apt-get sources list (basic Debian/Ubuntu apt sources, no external nor PPAS) - create_sources_list "$RELEASE" "$SDCARD/" - - # add armhf arhitecture to arm64, unless configured not to do so. -@@ -173,8 +173,13 @@ function create_new_rootfs_cache() { - # this should fix resolvconf installation failure in some cases - chroot_sdcard 'echo "resolvconf resolvconf/linkify-resolvconf boolean false" | debconf-set-selections' - -- # TODO change name of the function from "desktop" and move to appropriate location -- add_desktop_package_sources -+ # Add external / PPAs to apt sources; decides internally based on minimal/cli/desktop dir/file structure -+ add_apt_sources -+ -+ # uset asset logging for this; actually log contents of the files too -+ run_host_command_logged ls -l "${SDCARD}/usr/share/keyrings" -+ run_host_command_logged ls -l "${SDCARD}/etc/apt/sources.list.d" -+ run_host_command_logged cat "${SDCARD}/etc/apt/sources.list" - - # stage: update packages list - display_alert "Updating package list" "$RELEASE" "info" -diff --git a/lib/functions/rootfs/rootfs-desktop.sh b/lib/functions/rootfs/rootfs-desktop.sh -index 208119d4b..edcf9e619 100644 ---- a/lib/functions/rootfs/rootfs-desktop.sh -+++ b/lib/functions/rootfs/rootfs-desktop.sh -@@ -1,81 +1,3 @@ --install_ppa_prerequisites() { -- -- # Myy : So... The whole idea is that, a good bunch of external sources -- # are PPA. -- # Adding PPA without add-apt-repository is poorly conveninent since -- # you need to reconstruct the URL by hand, and find the GPG key yourself. -- # add-apt-repository does that automatically, and in a way that allows you -- # to remove it cleanly through the same tool. -- -- # Myy : TODO Try to find a way to install this package only when -- # we encounter a PPA. -- chroot_sdcard_apt_get_install "software-properties-common" -- --} -- --add_apt_sources() { -- -- local potential_paths="" -- local sub_dirs_to_check=". " -- if [[ ! -z "${SELECTED_CONFIGURATION+x}" ]]; then -- sub_dirs_to_check+="config_${SELECTED_CONFIGURATION}" -- fi -- get_all_potential_paths "${DEBOOTSTRAP_SEARCH_RELATIVE_DIRS}" "${sub_dirs_to_check}" "sources/apt" -- get_all_potential_paths "${CLI_SEARCH_RELATIVE_DIRS}" "${sub_dirs_to_check}" "sources/apt" -- get_all_potential_paths "${DESKTOP_ENVIRONMENTS_SEARCH_RELATIVE_DIRS}" "." "sources/apt" -- get_all_potential_paths "${DESKTOP_APPGROUPS_SEARCH_RELATIVE_DIRS}" "${DESKTOP_APPGROUPS_SELECTED}" "sources/apt" -- -- display_alert "Adding additional apt sources" "add_apt_sources()" "debug" -- -- for apt_sources_dirpath in ${potential_paths}; do -- if [[ -d "${apt_sources_dirpath}" ]]; then -- for apt_source_filepath in "${apt_sources_dirpath}/"*.source; do -- apt_source_filepath=$(echo "${apt_source_filepath}" | sed -re 's/(^.*[^/])\.[^./]*$/\1/') -- local new_apt_source="$(cat "${apt_source_filepath}.source")" -- local apt_source_gpg_filepath="${apt_source_filepath}.gpg" -- -- # extract filenames -- local apt_source_gpg_filename="$(basename ${apt_source_gpg_filepath})" -- local apt_source_filename="$(basename ${apt_source_filepath}).list" -- -- display_alert "Adding APT Source" "${new_apt_source}" "info" -- -- if [[ "${new_apt_source}" == ppa* ]]; then -- chroot_sdcard "add-apt-repository -y -n \"${new_apt_source}\"" -- # add list with apt-add -- # -y -> Assumes yes to all queries -- # -n -> Do not update package cache after adding -- if [[ -f "${apt_source_gpg_filepath}" ]]; then -- display_alert "Adding GPG Key ${apt_source_gpg_filepath}" -- cp "${apt_source_gpg_filepath}" "${SDCARD}/tmp/${apt_source_gpg_filename}" -- chroot_sdcard "apt-key add \"/tmp/${apt_source_gpg_filename}\"" -- echo "APT Key returned : $?" -- fi -- else -- # installation without software-common-properties, sources.list + key.gpg -- echo "${new_apt_source}" > "${SDCARD}/etc/apt/sources.list.d/${apt_source_filename}" -- if [[ -f "${apt_source_gpg_filepath}" ]]; then -- display_alert "Adding GPG Key" "${apt_source_gpg_filepath}" "info" -- # local apt_source_gpg_filename="$(basename ${apt_source_gpg_filepath})" -- mkdir -p "${SDCARD}"/usr/share/keyrings/ -- cp "${apt_source_gpg_filepath}" "${SDCARD}"/usr/share/keyrings/ -- fi -- -- fi -- -- done -- fi -- done -- --} -- --add_desktop_package_sources() { -- add_apt_sources -- run_host_command_logged ls -l "${SDCARD}/usr/share/keyrings" -- run_host_command_logged ls -l "${SDCARD}/etc/apt/sources.list.d" -- run_host_command_logged cat "${SDCARD}/etc/apt/sources.list" --} -- - # a-kind-of-hook, called by install_distribution_agnostic() if it's a desktop build - desktop_postinstall() { - -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index a7cfb652b..5bad7883a 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -429,9 +429,18 @@ source "${SRC}"/lib/functions/main/rootfs-image.sh - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/rootfs/apt.sh --# shellcheck source=lib/functions/rootfs/apt.sh --source "${SRC}"/lib/functions/rootfs/apt.sh -+### lib/functions/rootfs/apt-install.sh -+# shellcheck source=lib/functions/rootfs/apt-install.sh -+source "${SRC}"/lib/functions/rootfs/apt-install.sh -+ -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/rootfs/apt-sources.sh -+# shellcheck source=lib/functions/rootfs/apt-sources.sh -+source "${SRC}"/lib/functions/rootfs/apt-sources.sh - - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - -From 4876e0444f33ea1ce28cb340215638702ef98792 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 15 Apr 2022 22:07:17 +0200 -Subject: [PATCH] armbian-next: 4.x can't build objtool in kernel-headers; - allow for handling that later - -- 4.x has a lot more obtuse dependencies -- introduce KERNEL_HAS_WORKING_HEADERS calculated based on KERNEL_MAJOR_MINOR ---- - extensions/nvidia.sh | 5 +++++ - extensions/zfs.sh | 5 +++++ - lib/functions/compilation/kernel-debs.sh | 7 ++++++- - lib/functions/main/config-prepare.sh | 8 ++++++-- - 4 files changed, 22 insertions(+), 3 deletions(-) - -diff --git a/extensions/nvidia.sh b/extensions/nvidia.sh -index 57e478c5c..801d61010 100644 ---- a/extensions/nvidia.sh -+++ b/extensions/nvidia.sh -@@ -1,10 +1,15 @@ - function extension_prepare_config__build_nvidia_kernel_module() { -+ if [[ "${KERNEL_HAS_WORKING_HEADERS}" != "yes" ]]; then -+ display_alert "Kernel version has no working headers package" "skipping nVidia for kernel v${KERNEL_MAJOR_MINOR}" "warn" -+ return 0 -+ fi - export INSTALL_HEADERS="yes" - declare -g NVIDIA_DRIVER_VERSION="${NVIDIA_DRIVER_VERSION:-"510"}" - display_alert "Forcing INSTALL_HEADERS=yes; using nVidia driver version ${NVIDIA_DRIVER_VERSION}" "${EXTENSION}" "debug" - } - - function post_install_kernel_debs__build_nvidia_kernel_module() { -+ [[ "${INSTALL_HEADERS}" != "yes" ]] || [[ "${KERNEL_HAS_WORKING_HEADERS}" != "yes" ]] && return 0 - display_alert "Install nVidia packages, build kernel module in chroot" "${EXTENSION}" "info" - # chroot_sdcard_apt_get_install() is in lib/logging/runners.sh which handles "running" of stuff nicely. - # chroot_sdcard_apt_get_install() -> chroot_sdcard_apt_get() -> chroot_sdcard() -> run_host_command_logged_raw() -diff --git a/extensions/zfs.sh b/extensions/zfs.sh -index 6705b4578..eb41afd28 100644 ---- a/extensions/zfs.sh -+++ b/extensions/zfs.sh -@@ -1,9 +1,14 @@ - function extension_prepare_config__build_zfs_kernel_module() { -+ if [[ "${KERNEL_HAS_WORKING_HEADERS}" != "yes" ]]; then -+ display_alert "Kernel version has no working headers package" "skipping ZFS for kernel v${KERNEL_MAJOR_MINOR}" "warn" -+ return 0 -+ fi - export INSTALL_HEADERS="yes" - display_alert "Forcing INSTALL_HEADERS=yes; for use with ZFS" "${EXTENSION}" "debug" - } - - function post_install_kernel_debs__build_zfs_kernel_module() { -+ [[ "${INSTALL_HEADERS}" != "yes" ]] || [[ "${KERNEL_HAS_WORKING_HEADERS}" != "yes" ]] && return 0 - display_alert "Install ZFS packages, will build kernel module in chroot" "${EXTENSION}" "info" - declare -agx if_error_find_files_sdcard=("/var/lib/dkms/zfs/*/build/*.log") - # See https://github.com/zfsonlinux/pkg-zfs/issues/69 for a bug with leaking env vars. -diff --git a/lib/functions/compilation/kernel-debs.sh b/lib/functions/compilation/kernel-debs.sh -index e3d3b57dc..e0788518d 100644 ---- a/lib/functions/compilation/kernel-debs.sh -+++ b/lib/functions/compilation/kernel-debs.sh -@@ -58,7 +58,12 @@ function prepare_kernel_packaging_debs() { - create_kernel_deb "linux-dtb-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_dtb - fi - -- create_kernel_deb "linux-headers-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_headers -+ # Only recent kernels get linux-headers package; some tuning has to be done for 4.x -+ if [[ "${KERNEL_HAS_WORKING_HEADERS}" == "yes" ]]; then -+ create_kernel_deb "linux-headers-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_headers -+ else -+ display_alert "Skipping linux-headers package" "for ${KERNEL_MAJOR_MINOR} kernel version" "warn" -+ fi - } - - function create_kernel_deb() { -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index 013b903d4..6c1570bcd 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -150,19 +150,23 @@ function prepare_and_config_main_build_single() { - if [[ "x${KERNEL_MAJOR_MINOR}x" == "xx" ]]; then - exit_with_error "BAD config, missing" "KERNEL_MAJOR_MINOR" "err" - fi -+ export KERNEL_HAS_WORKING_HEADERS="no" # assume the worst, and all surprises will be happy ones - # Parse/validate the the major, bail if no match -- if linux-version compare "${KERNEL_MAJOR_MINOR}" ge "5.4"; then # We support 5.x from 5.4; 5.10+ brings unified packaging. -+ if linux-version compare "${KERNEL_MAJOR_MINOR}" ge "5.4"; then # We support 5.x from 5.4 -+ export KERNEL_HAS_WORKING_HEADERS="yes" # We can build working headers for 5.x even when cross compiling. - export KERNEL_MAJOR=5 - export KERNEL_MAJOR_SHALLOW_TAG="v${KERNEL_MAJOR_MINOR}-rc1" - elif linux-version compare "${KERNEL_MAJOR_MINOR}" ge "4.4" && linux-version compare "${KERNEL_MAJOR_MINOR}" lt "5.0"; then -- export KERNEL_MAJOR=4 # We support 4.x from 4.4; all require custom packaging. -+ export KERNEL_MAJOR=4 # We support 4.x from 4.4 - export KERNEL_MAJOR_SHALLOW_TAG="v${KERNEL_MAJOR_MINOR}-rc1" - else -+ # If you think you can patch packaging to support this, you're probably right. Is _worth_ it though? - exit_with_error "Kernel series unsupported" "'${KERNEL_MAJOR_MINOR}' is unsupported, or bad config" - fi - - export LINUXSOURCEDIR="kernel/${ARCH}__${KERNEL_MAJOR_MINOR}__${LINUXFAMILY}" - else -+ export KERNEL_HAS_WORKING_HEADERS="yes" # I assume non-Armbian kernels have working headers, eg: Debian/Ubuntu generic do. - export ARMBIAN_WILL_BUILD_KERNEL=no - fi - - -From 6b5726444e6be8a935fe758664847184e7642840 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 15 Apr 2022 21:48:22 +0200 -Subject: [PATCH] armbian-next: downgrade `error=misleading-indentation` to - warning - -- some 4.x kernels patches are really messy -- newer gcc's make that an error now ---- - lib/functions/compilation/kernel.sh | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 579400490..d6dd30920 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -14,8 +14,8 @@ function run_kernel_make() { - "ARCH=${ARCHITECTURE}" # Key param. Everything depends on this. - "LOCALVERSION=-${LINUXFAMILY}" # Change the internal kernel version to include the family. Changing this causes recompiles - -- "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # added as prefix to every compiler invocation by make -- "KCFLAGS=-fdiagnostics-color=always" # Force GCC colored messages. -+ "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # added as prefix to every compiler invocation by make -+ "KCFLAGS=-fdiagnostics-color=always -Wno-error=misleading-indentation" # Force GCC colored messages, downgrade misleading indentation to warning - - "SOURCE_DATE_EPOCH=${kernel_base_revision_ts}" # https://reproducible-builds.org/docs/source-date-epoch/ and https://www.kernel.org/doc/html/latest/kbuild/reproducible-builds.html - "KBUILD_BUILD_TIMESTAMP=${kernel_base_revision_date}" # https://www.kernel.org/doc/html/latest/kbuild/kbuild.html#kbuild-build-timestamp - -From 54cad4f827e14967d692ae4d14426394cc56b4ff Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 15 Apr 2022 17:23:42 +0200 -Subject: [PATCH] armbian-next: *allow cross compilation*, even the so-called - "reverse cross-compile" (amd64 on arm64) - ---- - config/sources/amd64.conf | 6 +++--- - lib/functions/compilation/kernel.sh | 4 +--- - 2 files changed, 4 insertions(+), 6 deletions(-) - -diff --git a/config/sources/amd64.conf b/config/sources/amd64.conf -index cc1b4b256..8b208bab2 100644 ---- a/config/sources/amd64.conf -+++ b/config/sources/amd64.conf -@@ -13,9 +13,9 @@ export UBOOT_USE_GCC="none" # required by configuration.sh - [[ -z $KERNELSOURCE ]] && KERNELSOURCE=$MAINLINE_KERNEL_SOURCE - - if [[ "$(uname -m)" == "aarch64" ]]; then -- # Explicitly disallow "reverse cross-compile". Go ask @the-Going why ;-) -- display_error "Unsupported cross-compile" "aarch64 -> x86_64" "err" -- exit 39 -+ # Allow building amd64 on aarch64, but using system toolchain only -+ export KERNEL_COMPILER="x86_64-linux-gnu-" -+ export SKIP_EXTERNAL_TOOLCHAINS=yes - fi - - true # don't fail due to conditional above. -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 83596f603..579400490 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -190,12 +190,10 @@ function kernel_config() { - # if it matches we use the system compiler - if dpkg-architecture -e "${ARCH}"; then - display_alert "Native compilation" "target ${ARCH} on host $(dpkg --print-architecture)" -- elif [[ $(dpkg --print-architecture) == amd64 ]]; then -+ else - display_alert "Cross compilation" "target ${ARCH} on host $(dpkg --print-architecture)" - toolchain=$(find_toolchain "$KERNEL_COMPILER" "$KERNEL_USE_GCC") - [[ -z $toolchain ]] && exit_with_error "Could not find required toolchain" "${KERNEL_COMPILER}gcc $KERNEL_USE_GCC" -- else -- display_alert "Unhandled cross compilation combo" "target ${ARCH} on host $(dpkg --print-architecture) - headers might not work" "warn" - fi - - kernel_compiler_version="$(eval env PATH="${toolchain}:${PATH}" "${KERNEL_COMPILER}gcc" -dumpversion)" - -From c57535fbcab21c0cf7284e0cbcb614971e6d4bd7 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 15 Apr 2022 13:49:23 +0200 -Subject: [PATCH] armbian-next: add `zfs` extension, which installs headers and - builds ZFS via DKMS in chroot - -- similar to how `nvidia` extension does it ---- - extensions/zfs.sh | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/extensions/zfs.sh b/extensions/zfs.sh -new file mode 100644 -index 000000000..6705b4578 ---- /dev/null -+++ b/extensions/zfs.sh -@@ -0,0 +1,11 @@ -+function extension_prepare_config__build_zfs_kernel_module() { -+ export INSTALL_HEADERS="yes" -+ display_alert "Forcing INSTALL_HEADERS=yes; for use with ZFS" "${EXTENSION}" "debug" -+} -+ -+function post_install_kernel_debs__build_zfs_kernel_module() { -+ display_alert "Install ZFS packages, will build kernel module in chroot" "${EXTENSION}" "info" -+ declare -agx if_error_find_files_sdcard=("/var/lib/dkms/zfs/*/build/*.log") -+ # See https://github.com/zfsonlinux/pkg-zfs/issues/69 for a bug with leaking env vars. -+ use_clean_environment="yes" chroot_sdcard_apt_get_install "zfs-dkms zfsutils-linux" -+} - -From 82756687f5930a55f413a3f7164b1fb9337bd2b0 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 15 Apr 2022 13:49:56 +0200 -Subject: [PATCH] armbian-next: x86: enable `nvidia` extension for all releases - (only desktop) - ---- - config/sources/families/uefi-x86.conf | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/config/sources/families/uefi-x86.conf b/config/sources/families/uefi-x86.conf -index 7a40a5b00..55923fd7b 100644 ---- a/config/sources/families/uefi-x86.conf -+++ b/config/sources/families/uefi-x86.conf -@@ -1,6 +1,5 @@ - # Important: LINUXFAMILY and ARCH are defined _before_ including the common family include --[[ "$BUILD_DESKTOP" == yes && "$RELEASE" == jammy ]] && enable_extension "nvidia" --export UEFI_GRUB_TERMINAL="gfxterm" -+[[ "$BUILD_DESKTOP" == yes ]] && enable_extension "nvidia" - export LINUXFAMILY="x86" - export ARCH="amd64" - source "${BASH_SOURCE%/*}/include/uefi_common.inc" - -From d4ce330682ba9563b1821ae08b8412e9149fec80 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 15 Apr 2022 13:53:14 +0200 -Subject: [PATCH] armbian-next: `headers-debian-byteshift.patch` is dead; - long-live cross-compiled source-only kernel-headers - -- kernel-headers package now only includes _sources_ -- postinst does the compilation and preparation for DKMS compatibility -- `tools` dir is included now, which includes the byteshift utilities -- handle special scripts/module.lds case after 5.10 -- tested on a 6 combinations of `x86` / `arm64` / `armhf` (3x targets, 2x hosts) -- @TODO: we might be able to reduce the size of tools a bit (perf/tests/etc) -- @TODO: still missing ARCH vs ARCHITECTURE vs SRC_ARCH clarity elsewhere ---- - lib/functions/compilation/kernel-debs.sh | 108 +++++++++++++-------- - lib/functions/compilation/kernel.sh | 4 - - patch/misc/headers-debian-byteshift.patch | 156 ------------------------------ - 3 files changed, 67 insertions(+), 201 deletions(-) - -diff --git a/lib/functions/compilation/kernel-debs.sh b/lib/functions/compilation/kernel-debs.sh -index b8eb9d266..e3d3b57dc 100644 ---- a/lib/functions/compilation/kernel-debs.sh -+++ b/lib/functions/compilation/kernel-debs.sh -@@ -3,26 +3,20 @@ - # We wanna produce Debian/Ubuntu compatible packages so we're able to use their standard tools, like - # `flash-kernel`, `u-boot-menu`, `grub2`, and others, so we gotta stick to their conventions. - --# Headers are important. We wanna be compatible with `dkms` stuff from Ubuntu, like `nvidia-driver-xxx`. --# This is affected by cross-compilation: Armbian usually builds arm64 on amd64, and the KBUILD tools --# that would be included in such headers package will be the wrong arch for `dkms`ing on target arm64 machine. -- - # The main difference is that this is NOT invoked from KBUILD's Makefile, but instead - # directly by Armbian, with references to the dirs where KBUILD's - # `make install dtbs_install modules_install headers_install` have already successfully been run. - - # This will create a SET of packages. It should always create these: - # image package: vmlinuz and such, config, modules, and dtbs (if exist) in /usr/lib/xxx --# libc header package: just the libc headers --# linux-headers package: just the image headers. (what about the binaries? cross compilation?) -+# linux-headers package: just the kernel headers, for building out-of-tree modules, dkms, etc. - # linux-dtbs package: only dtbs, if they exist. in /boot/ - - # So this will handle - # - Creating .deb package skeleton dir (mktemp) - # - Moving/copying around of KBUILD installed stuff for Debian/Ubuntu/Armbian standard locations, in the correct packages --# - Separating headers, between image and libc packages. - # - Fixing the symlinks to stuff so they fit a target system. --# - building the .debs; -+# - building the .debs. - - is_enabled() { - grep -q "^$1=y" include/config/auto.conf -@@ -64,11 +58,7 @@ function prepare_kernel_packaging_debs() { - create_kernel_deb "linux-dtb-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_dtb - fi - -- if dpkg-architecture -e "${ARCH}"; then -- create_kernel_deb "linux-headers-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_headers -- else -- display_alert "Cross-compilation" "skip kernel-headers packaging" "warn" -- fi -+ create_kernel_deb "linux-headers-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_headers - } - - function create_kernel_deb() { -@@ -268,40 +258,33 @@ function kernel_package_callback_linux_headers() { - # how to get SRCARCH? only from the makefile itself. ARCH=amd64 then SRCARCH=x86. How to we know? @TODO - local SRC_ARCH="${ARCH}" - [[ "${SRC_ARCH}" == "amd64" ]] && SRC_ARCH="x86" -+ [[ "${SRC_ARCH}" == "armhf" ]] && SRC_ARCH="arm" - - # Create a list of files to include, path-relative to the kernel tree - local temp_file_list="${WORKDIR}/tmp_file_list_${kernel_version_family}.kernel.headers" - -- # Source stuff. No binaries. I think. -+ # Find the files we want to include in the package. Those will be later cleaned, etc. - ( - cd "${kernel_work_dir}" || exit 2 -- #echo "-- Sources: Makefiles and Kconfigs and perl" - find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl -- -- #echo "-- Sources: all arches include, include and scripts both files and symlinks " - find arch/*/include include scripts -type f -o -type l -- -- #echo "-- Sources: security include" - find security/*/include -type f -- -- #echo "-- Sources: arch ${SRC_ARCH} module lds or Kbuild platforms or Platform" -- find "arch/${SRC_ARCH}" -name module.lds -o -name Kbuild.platforms -o -name Platform -- -- #echo "-- Sources: All files somewhere for some reason" -- # shellcheck disable=SC2046 # I need to expand. Thanks. -- find $(find "arch/${SRC_ARCH}" -name include -o -name scripts -type d) -type f -- -- if is_enabled CONFIG_STACK_VALIDATION; then -- #echo "-- Binaries: objtool due to CONFIG_STACK_VALIDATION" -- find tools/objtool -type f -executable -- fi -- -- #echo "-- Binaries: Module.symvers and includes scripts FILES" -- find arch/${SRC_ARCH}/include Module.symvers include scripts -type f -+ [[ -d "arch/${SRC_ARCH}" ]] && { -+ find "arch/${SRC_ARCH}" -name module.lds -o -name Kbuild.platforms -o -name Platform -+ # shellcheck disable=SC2046 # I need to expand. Thanks. -+ find $(find "arch/${SRC_ARCH}" -name include -o -name scripts -type d) -type f -+ find arch/${SRC_ARCH}/include Module.symvers include scripts -type f -+ } -+ # Include the byteshift utilities shared between kernel proper and the build scripts/tools. -+ # This replaces 'headers-debian-byteshift.patch' which was used for years in Armbian. -+ #find tools/include/tools/be_byteshift.h tools/include/tools/le_byteshift.h -type f -+ #find tools/objtool -type f -+ #find tools/build -type f -+ find tools -type f # all tools. all of it? we might get away with a little less. eg: tools/perf and tools/testing -+ find arch/x86/lib/insn.c # required by objtool stuff... - - if is_enabled CONFIG_GCC_PLUGINS; then -- #echo "-- Binaries: gcc plugins due to CONFIG_GCC_PLUGINS" -- find scripts/gcc-plugins -name \*.so -o -name gcc-common.h -+ find scripts/gcc-plugins -name gcc-common.h # @TODO something else here too? - fi - ) > "${temp_file_list}" - -@@ -310,10 +293,21 @@ function kernel_package_callback_linux_headers() { - - # ${temp_file_list} is left at WORKDIR for later debugging, will be removed by WORKDIR cleanup trap - -- # @TODO: maybe split all binaries to a separate package at this stage; that way cross compile can still produce -- # @TODO: source-only headers, which can then be patched (byteshift?) and compiled client-side later -+ # Now, make the script dirs clean. -+ # This is run in our _target_ dir, not the source tree, so we're free to make clean as we wish without invalidating the next build's cache. -+ run_host_command_logged cd "${headers_target_dir}" "&&" make "ARCH=${SRC_ARCH}" "M=scripts" clean -+ run_host_command_logged cd "${headers_target_dir}/tools" "&&" make "ARCH=${SRC_ARCH}" clean - -- # @TODO: cat "${temp_file_list}" | grep -v -e "\.h$" -e ".c$" -e "Makefile$" -e "Kconfig$" -e "Kbuild$" -e "\.cocci$" | xargs file | grep -v -e "ASCII" -e "script text" -+ # Hack: after cleaning, copy over the scripts/module.lds file from the source tree. It will only exist on 5.10+ -+ # See https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1906131 -+ [[ -f "${kernel_work_dir}/scripts/module.lds" ]] && -+ run_host_command_logged cp -v "${kernel_work_dir}/scripts/module.lds" "${headers_target_dir}/scripts/module.lds" -+ -+ # Check that no binaries are included by now. Expensive... @TODO: remove after me make sure. -+ ( -+ cd "${headers_target_dir}" || exit 33 -+ find . -type f | grep -v -e "include/config/" -e "\.h$" -e ".c$" -e "Makefile$" -e "Kconfig$" -e "Kbuild$" -e "\.cocci$" | xargs file | grep -v -e "ASCII" -e "script text" -e "empty" -e "Unicode text" -e "symbolic link" -e "CSV text" -e "SAS 7+" || true -+ ) - - # Generate a control file - cat <<- CONTROL_FILE > "${package_DEBIAN_dir}/control" -@@ -323,12 +317,44 @@ function kernel_package_callback_linux_headers() { - Package: ${package_name} - Architecture: ${ARCH} - Provides: linux-headers, linux-headers-armbian, armbian-$BRANCH -- Depends: make, gcc, libc6-dev, bison, flex, libssl-dev -+ Depends: make, gcc, libc6-dev, bison, flex, libssl-dev, libelf-dev - Description: Linux kernel headers for ${kernel_version_family} - This package provides kernel header files for ${kernel_version_family} - . - This is useful for DKMS and building of external modules. - CONTROL_FILE - -- # @TODO: preinst postinst? dependent on split, see todo above -+ # Make sure the target dir is clean/not-existing before installing. -+ kernel_package_hook_helper "preinst" <( -+ cat <<- EOT_PREINST -+ if [[ -d "/usr/src/linux-headers-${kernel_version_family}" ]]; then -+ echo "Cleaning pre-existing directory /usr/src/linux-headers-${kernel_version_family} ..." -+ rm -rf "/usr/src/linux-headers-${kernel_version_family}" -+ fi -+ EOT_PREINST -+ ) -+ -+ # Make sure the target dir is removed before removing the package; that way we don't leave eventual compilation artifacts over there. -+ kernel_package_hook_helper "prerm" <( -+ cat <<- EOT_PRERM -+ if [[ -d "/usr/src/linux-headers-${kernel_version_family}" ]]; then -+ echo "Cleaning directory /usr/src/linux-headers-${kernel_version_family} ..." -+ rm -rf "/usr/src/linux-headers-${kernel_version_family}" -+ fi -+ EOT_PRERM -+ ) -+ -+ kernel_package_hook_helper "postinst" <( -+ cat <<- EOT_POSTINST -+ cd "/usr/src/linux-headers-${kernel_version_family}" -+ NCPU=\$(grep -c 'processor' /proc/cpuinfo) -+ echo "Compiling kernel-headers tools (${kernel_version_family}) using \$NCPU CPUs - please wait ..." -+ yes "" | make ARCH="${SRC_ARCH}" oldconfig -+ make ARCH="${SRC_ARCH}" -j\$NCPU scripts -+ make ARCH="${SRC_ARCH}" -j\$NCPU M=scripts/mod/ -+ # make ARCH="${SRC_ARCH}" -j\$NCPU modules_prepare # depends on too much other stuff. -+ make ARCH="${SRC_ARCH}" -j\$NCPU tools/objtool -+ echo "Done compiling kernel-headers tools (${kernel_version_family})." -+ EOT_POSTINST -+ ) - } -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 118bdd752..83596f603 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -238,10 +238,6 @@ function kernel_config() { - cp -p "${SRC}"/packages/blobs/odroidxu4/*.bin "${kernel_work_dir}/firmware/edid" - fi - -- # hack for deb builder. To pack what's missing in headers pack. -- # @TODO: only for legacy builds? -- cp "${SRC}"/patch/misc/headers-debian-byteshift.patch /tmp # @TODO: ok, but why /tmp? It's leaking there. -- - display_alert "Kernel configuration" "${LINUXCONFIG}" "info" - - if [[ $KERNEL_CONFIGURE != yes ]]; then -diff --git a/patch/misc/headers-debian-byteshift.patch b/patch/misc/headers-debian-byteshift.patch -deleted file mode 100644 -index ef375ff66..000000000 ---- a/patch/misc/headers-debian-byteshift.patch -+++ /dev/null -@@ -1,156 +0,0 @@ --Signed-off-by: Matt Fleming --Link: http://lkml.kernel.org/r/1330436245-24875-2-git-send-email-matt@console-pimps.org --Signed-off-by: H. Peter Anvin --Signed-off-by: Greg Kroah-Hartman -- ----- --tools/include/tools/be_byteshift.h | 70 +++++++++++++++++++++++++++++++++++++ --tools/include/tools/le_byteshift.h | 70 +++++++++++++++++++++++++++++++++++++ --2 files changed, 140 insertions(+) -- ----- /dev/null --+++ b/tools/include/tools/be_byteshift.h --@@ -0,0 +1,70 @@ --+#ifndef _TOOLS_BE_BYTESHIFT_H --+#define _TOOLS_BE_BYTESHIFT_H --+ --+#include --+ --+static inline __u16 __get_unaligned_be16(const __u8 *p) --+{ --+ return p[0] << 8 | p[1]; --+} --+ --+static inline __u32 __get_unaligned_be32(const __u8 *p) --+{ --+ return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; --+} --+ --+static inline __u64 __get_unaligned_be64(const __u8 *p) --+{ --+ return (__u64)__get_unaligned_be32(p) << 32 | --+ __get_unaligned_be32(p + 4); --+} --+ --+static inline void __put_unaligned_be16(__u16 val, __u8 *p) --+{ --+ *p++ = val >> 8; --+ *p++ = val; --+} --+ --+static inline void __put_unaligned_be32(__u32 val, __u8 *p) --+{ --+ __put_unaligned_be16(val >> 16, p); --+ __put_unaligned_be16(val, p + 2); --+} --+ --+static inline void __put_unaligned_be64(__u64 val, __u8 *p) --+{ --+ __put_unaligned_be32(val >> 32, p); --+ __put_unaligned_be32(val, p + 4); --+} --+ --+static inline __u16 get_unaligned_be16(const void *p) --+{ --+ return __get_unaligned_be16((const __u8 *)p); --+} --+ --+static inline __u32 get_unaligned_be32(const void *p) --+{ --+ return __get_unaligned_be32((const __u8 *)p); --+} --+ --+static inline __u64 get_unaligned_be64(const void *p) --+{ --+ return __get_unaligned_be64((const __u8 *)p); --+} --+ --+static inline void put_unaligned_be16(__u16 val, void *p) --+{ --+ __put_unaligned_be16(val, p); --+} --+ --+static inline void put_unaligned_be32(__u32 val, void *p) --+{ --+ __put_unaligned_be32(val, p); --+} --+ --+static inline void put_unaligned_be64(__u64 val, void *p) --+{ --+ __put_unaligned_be64(val, p); --+} --+ --+#endif /* _TOOLS_BE_BYTESHIFT_H */ ----- /dev/null --+++ b/tools/include/tools/le_byteshift.h --@@ -0,0 +1,70 @@ --+#ifndef _TOOLS_LE_BYTESHIFT_H --+#define _TOOLS_LE_BYTESHIFT_H --+ --+#include --+ --+static inline __u16 __get_unaligned_le16(const __u8 *p) --+{ --+ return p[0] | p[1] << 8; --+} --+ --+static inline __u32 __get_unaligned_le32(const __u8 *p) --+{ --+ return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24; --+} --+ --+static inline __u64 __get_unaligned_le64(const __u8 *p) --+{ --+ return (__u64)__get_unaligned_le32(p + 4) << 32 | --+ __get_unaligned_le32(p); --+} --+ --+static inline void __put_unaligned_le16(__u16 val, __u8 *p) --+{ --+ *p++ = val; --+ *p++ = val >> 8; --+} --+ --+static inline void __put_unaligned_le32(__u32 val, __u8 *p) --+{ --+ __put_unaligned_le16(val >> 16, p + 2); --+ __put_unaligned_le16(val, p); --+} --+ --+static inline void __put_unaligned_le64(__u64 val, __u8 *p) --+{ --+ __put_unaligned_le32(val >> 32, p + 4); --+ __put_unaligned_le32(val, p); --+} --+ --+static inline __u16 get_unaligned_le16(const void *p) --+{ --+ return __get_unaligned_le16((const __u8 *)p); --+} --+ --+static inline __u32 get_unaligned_le32(const void *p) --+{ --+ return __get_unaligned_le32((const __u8 *)p); --+} --+ --+static inline __u64 get_unaligned_le64(const void *p) --+{ --+ return __get_unaligned_le64((const __u8 *)p); --+} --+ --+static inline void put_unaligned_le16(__u16 val, void *p) --+{ --+ __put_unaligned_le16(val, p); --+} --+ --+static inline void put_unaligned_le32(__u32 val, void *p) --+{ --+ __put_unaligned_le32(val, p); --+} --+ --+static inline void put_unaligned_le64(__u64 val, void *p) --+{ --+ __put_unaligned_le64(val, p); --+} --+ --+#endif /* _TOOLS_LE_BYTESHIFT_H */ - -From d797c800c30b6a86f105e511068e545f90b9c825 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 15 Apr 2022 13:37:13 +0200 -Subject: [PATCH] armbian-next: allow `use_clean_environment=yes` for - `chroot_sdcard_apt_get()` and descendants - -- this causes command to be run under `env -i`, for a clean environment ---- - lib/functions/logging/runners.sh | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index e550eba11..d59f6020d 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -16,7 +16,15 @@ function chroot_sdcard_apt_get() { - -o "Acquire::http::Proxy::localhost=\"DIRECT\"" - ) - apt_params+=(-o "Dpkg::Use-Pty=0") # Please be quiet -- chroot_sdcard DEBIAN_FRONTEND=noninteractive apt-get "${apt_params[@]}" "$@" -+ -+ # Allow for clean-environment apt-get -+ local -a prelude_clean_env=() -+ if [[ "${use_clean_environment:-no}" == "yes" ]]; then -+ display_alert "Running with clean environment" "$*" "debug" -+ prelude_clean_env=("env" "-i") -+ fi -+ -+ chroot_sdcard "${prelude_clean_env[@]}" DEBIAN_FRONTEND=noninteractive apt-get "${apt_params[@]}" "$@" - } - - # please, please, unify around this function. - -From 0caf73b8ee67c9f34b6e6d1fce8b86ed4021694c Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 14 Apr 2022 09:58:15 +0200 -Subject: [PATCH] armbian-next: manual merge (16) of all changes between - revisions be9b5156a4bdcb3850fbe0e7ada0f4421acde174 and - 2a8e1ecac1c4fdbf986034be9d6c05a8f1b6e6fb - -- many `traps` ignored: we don't use them anymore ---- - config/sources/families/include/meson64_common.inc | 4 ++-- - config/sources/families/media.conf | 4 ++-- - config/sources/families/rk322x.conf | 6 ++--- - config/sources/families/rockchip.conf | 10 ++++---- - config/sources/families/sun50iw6.conf | 27 ++++------------------ - config/templates/Dockerfile | 7 +++--- - lib/functions/compilation/patch/kernel-drivers.sh | 2 +- - lib/functions/configuration/main-config.sh | 11 ++++----- - lib/functions/extras/buildpkg.sh | 13 ++++------- - lib/functions/general/downloads.sh | 7 +++--- - lib/functions/image/partitioning.sh | 6 ++--- - lib/functions/rootfs/distro-specific.sh | 22 ++++-------------- - 12 files changed, 39 insertions(+), 80 deletions(-) - -diff --git a/config/sources/families/include/meson64_common.inc b/config/sources/families/include/meson64_common.inc -index e3fc577e9..21c71e5bd 100644 ---- a/config/sources/families/include/meson64_common.inc -+++ b/config/sources/families/include/meson64_common.inc -@@ -35,8 +35,8 @@ case $BRANCH in - ;; - - edge) -- export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. For mainline caching. -- KERNELBRANCH='branch:linux-5.15.y' -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. For mainline caching. -+ KERNELBRANCH='branch:linux-5.17.y' - KERNELPATCHDIR='meson64-edge' - ;; - -diff --git a/config/sources/families/media.conf b/config/sources/families/media.conf -index cf1a5603b..cd23586ce 100644 ---- a/config/sources/families/media.conf -+++ b/config/sources/families/media.conf -@@ -40,8 +40,8 @@ case $BRANCH in - - edge) - #SKIP_BOOTSPLASH="yes" -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.16.y" -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.17.y" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -diff --git a/config/sources/families/rk322x.conf b/config/sources/families/rk322x.conf -index 897a452db..d707d55c8 100644 ---- a/config/sources/families/rk322x.conf -+++ b/config/sources/families/rk322x.conf -@@ -3,7 +3,7 @@ BOOTENV_FILE='rk322x.txt' - OVERLAY_PREFIX='rk322x' - UBOOT_TARGET_MAP="all u-boot.itb;;u-boot-rk322x-with-spl.bin" - BOOTDELAY=0 --BOOTBRANCH='tag:v2022.01' -+BOOTBRANCH='tag:v2022.04' - ARCH=armhf - SERIALCON=ttyS2 - -@@ -27,8 +27,8 @@ case $BRANCH in - - edge) - -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.16.y' -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.17.y' - - ;; - -diff --git a/config/sources/families/rockchip.conf b/config/sources/families/rockchip.conf -index 0f123a848..a264c669f 100644 ---- a/config/sources/families/rockchip.conf -+++ b/config/sources/families/rockchip.conf -@@ -6,11 +6,9 @@ OVERLAY_PREFIX='rockchip' - UBOOT_TARGET_MAP=";;$SRC/packages/blobs/rockchip/rk3288_boot.bin u-boot-rockchip-with-spl.bin" - BOOTDELAY=1 - if [[ $BOARD == miqi ]]; then -- BOOTBRANCH='tag:v2017.11' --elif [[ $BOARD == xt-q8l-v10 ]]; then -- BOOTBRANCH='tag:v2021.01' -+BOOTBRANCH='tag:v2017.11' - else -- BOOTBRANCH='tag:v2022.01' -+BOOTBRANCH='tag:v2022.04' - fi - - SERIALCON=ttyS2 -@@ -35,8 +33,8 @@ case $BRANCH in - - edge) - -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -- KERNELBRANCH='branch:linux-5.16.y' -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.17.y' - - ;; - -diff --git a/config/sources/families/sun50iw6.conf b/config/sources/families/sun50iw6.conf -index 3224dadb8..874e12e1f 100644 ---- a/config/sources/families/sun50iw6.conf -+++ b/config/sources/families/sun50iw6.conf -@@ -12,27 +12,20 @@ case $BRANCH in - if [[ ${BOARD} == orangepi3-lts ]]; then - - ASOUND_STATE='asound.state.sun50iw6-current' -- -+ - fi -- ;; -+ ;; - edge) - - if [[ ${BOARD} == orangepi3-lts ]]; then - - ASOUND_STATE='asound.state.sun50iw6-current' -- -+ - fi -- ;; -+ ;; - esac - --family_tweaks_s() --{ -- if [[ -f $SDCARD/lib/systemd/system/aw859a-bluetooth.service ]]; then -- -- # install and enable Bluetooth -- chroot $SDCARD /bin/bash -c "apt-get -y -qq install rfkill bluetooth bluez bluez-tools >/dev/null 2>&1" -- chroot $SDCARD /bin/bash -c "systemctl --no-reload enable aw859a-bluetooth.service >/dev/null 2>&1" -- fi -+family_tweaks_s() { - - if [[ $BUILD_DESKTOP == yes && $BOARD == orangepi3-lts ]]; then - -@@ -41,15 +34,5 @@ family_tweaks_s() - echo "load-module module-alsa-sink device=hw:1,0 sink_name=HDMI-Playback sink_properties=\"device.description='HDMI Audio'\"" >> ${SDCARD}/etc/pulse/default.pa - - fi --} -- --family_tweaks_bsp() --{ -- if [[ ${BOARD} == orangepi3-lts ]]; then -- -- cp $SRC/packages/bsp/sunxi/aw859a-bluetooth.service $destination/lib/systemd/system/ -- -- fi - -- install -m 755 $SRC/packages/blobs/bt/hciattach/hciattach_opi_${ARCH} $destination/usr/bin/hciattach_opi - } -diff --git a/config/templates/Dockerfile b/config/templates/Dockerfile -index b9cfa9640..3666170d1 100644 ---- a/config/templates/Dockerfile -+++ b/config/templates/Dockerfile -@@ -1,7 +1,7 @@ - ARG BASE_IMAGE=ubuntu:jammy - FROM $BASE_IMAGE as armbian_builder --ARG ARM_GCC_COMPILER='g++-11-arm-linux-gnueabihf' --ENV ARM_GCC_COMPILER $ARM_GCC_COMPILER -+ARG CUSTOM_PACKAGES='g++-11-arm-linux-gnueabihf libssl3' -+ENV CUSTOM_PACKAGES $CUSTOM_PACKAGES - ARG DEBIAN_FRONTEND=noninteractive - RUN apt-get update && apt-get -y dist-upgrade && apt-get -y install \ - joe \ -@@ -23,7 +23,7 @@ RUN sh -c " \ - RUN apt-get update \ - && apt-get -y dist-upgrade \ - && apt-get install -y --no-install-recommends \ -- $ARM_GCC_COMPILER \ -+ $CUSTOM_PACKAGES \ - acl \ - aptly \ - aria2 \ -@@ -73,7 +73,6 @@ RUN apt-get update \ - libpython2.7-dev \ - libpython3-dev \ - libssl-dev \ -- libssl1.1 \ - libusb-1.0-0-dev \ - linux-base \ - libmpc-dev \ -diff --git a/lib/functions/compilation/patch/kernel-drivers.sh b/lib/functions/compilation/patch/kernel-drivers.sh -index f921591a7..25f78b90c 100644 ---- a/lib/functions/compilation/patch/kernel-drivers.sh -+++ b/lib/functions/compilation/patch/kernel-drivers.sh -@@ -31,7 +31,7 @@ function prepare_extra_kernel_drivers() { - # - # Older versions have AUFS support with a patch - -- if linux-version compare "${version}" ge 5.1 && linux-version compare "${version}" le 5.17 && [ "$AUFS" == yes ]; then -+ if linux-version compare "${version}" ge 5.1 && linux-version compare "${version}" le 5.18 && [ "$AUFS" == yes ]; then - # @TODO: Fasthash for this whole block is only the git hash of revision we'd apply from Mr. Okajima - local aufs_tag # attach to specifics tag or branch - aufs_tag=$(echo "${version}" | cut -f 1-2 -d ".") -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index c1a2b03e6..44a23bb66 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -225,12 +225,6 @@ function do_main_configuration() { - - interactive_desktop_main_configuration - -- # dropbear needs to be configured differently # @TODO: rpardini: yes, and? are you a lost leftover comment from a previous era? -- [[ $CRYPTROOT_ENABLE == yes && $RELEASE == xenial ]] && exit_with_error "Encrypted rootfs is not supported in Xenial" -- [[ $RELEASE == stretch && $CAN_BUILD_STRETCH != yes ]] && exit_with_error "Building Debian Stretch images with selected kernel is not supported" -- [[ $RELEASE == bionic && $CAN_BUILD_STRETCH != yes ]] && exit_with_error "Building Ubuntu Bionic images with selected kernel is not supported" -- [[ $RELEASE == hirsute && $HOSTRELEASE == focal ]] && exit_with_error "Building Ubuntu Hirsute images requires Hirsute build host. Please upgrade your host or select a different target OS" -- - [[ -n $ATFSOURCE && -z $ATF_USE_GCC ]] && exit_with_error "Error in configuration: ATF_USE_GCC is unset" - [[ -z $UBOOT_USE_GCC ]] && exit_with_error "Error in configuration: UBOOT_USE_GCC is unset" - [[ -z $KERNEL_USE_GCC ]] && exit_with_error "Error in configuration: KERNEL_USE_GCC is unset" -@@ -242,7 +236,7 @@ function do_main_configuration() { - [[ -z $ATFPATCHDIR ]] && ATFPATCHDIR="atf-$LINUXFAMILY" - [[ -z $KERNELPATCHDIR ]] && KERNELPATCHDIR="$LINUXFAMILY-$BRANCH" - -- if [[ "$RELEASE" =~ ^(xenial|bionic|focal|hirsute|impish|jammy)$ ]]; then -+ if [[ "$RELEASE" =~ ^(focal|jammy)$ ]]; then - DISTRIBUTION="Ubuntu" - else - DISTRIBUTION="Debian" -@@ -346,6 +340,9 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - done - fi - -+ # Control aria2c's usage of ipv6. -+ [[ -z $DISABLE_IPV6 ]] && DISABLE_IPV6="true" -+ - # For (late) user override. - # Notice: it is too late to define hook functions or add extensions in lib.config, since the extension initialization already ran by now. - # in case the user tries to use them in lib.config, hopefully they'll be detected as "wishful hooking" and the user will be wrn'ed. -diff --git a/lib/functions/extras/buildpkg.sh b/lib/functions/extras/buildpkg.sh -index af92f1b84..09dd5d2e6 100644 ---- a/lib/functions/extras/buildpkg.sh -+++ b/lib/functions/extras/buildpkg.sh -@@ -28,25 +28,19 @@ create_chroot() { - qemu_binary['arm64']='qemu-aarch64-static' - apt_mirror['buster']="$DEBIAN_MIRROR" - apt_mirror['bullseye']="$DEBIAN_MIRROR" -- apt_mirror['bionic']="$UBUNTU_MIRROR" - apt_mirror['focal']="$UBUNTU_MIRROR" -- apt_mirror['hirsute']="$UBUNTU_MIRROR" -- apt_mirror['impish']="$UBUNTU_MIRROR" - apt_mirror['jammy']="$UBUNTU_MIRROR" - components['buster']='main,contrib' - components['bullseye']='main,contrib' - components['sid']='main,contrib' -- components['bionic']='main,universe,multiverse' - components['focal']='main,universe,multiverse' -- components['hirsute']='main,universe,multiverse' -- components['impish']='main,universe,multiverse' - components['jammy']='main,universe,multiverse' - display_alert "Creating build chroot" "$release/$arch" "info" - local includes="ccache,locales,git,ca-certificates,devscripts,libfile-fcntllock-perl,debhelper,rsync,python3,distcc,apt-utils" - - # perhaps a temporally workaround - case $release in -- buster | bullseye | focal | hirsute | sid) -+ bullseye | focal | jammy | sid) - includes=${includes}",perl-openssl-defaults,libnet-ssleay-perl" - ;; - esac -@@ -128,6 +122,7 @@ chroot_prepare_distccd() { - gcc_version['focal']='9.2' - gcc_version['hirsute']='10.2' - gcc_version['sid']='10.2' -+ gcc_version['jammy']='12' - gcc_type['armhf']='arm-linux-gnueabihf-' - gcc_type['arm64']='aarch64-linux-gnu-' - rm -f "${dest}"/cmdlist -@@ -161,8 +156,8 @@ chroot_build_packages() { - target_arch="${ARCH}" - else - # only make packages for recent releases. There are no changes on older -- target_release="bionic buster bullseye focal hirsute jammy sid" -- target_arch="armhf arm64" -+ target_release="bullseye focal jammy sid" -+ target_arch="armhf arm64 amd64" - fi - - for release in $target_release; do -diff --git a/lib/functions/general/downloads.sh b/lib/functions/general/downloads.sh -index 1ff476a74..e3df91fe8 100644 ---- a/lib/functions/general/downloads.sh -+++ b/lib/functions/general/downloads.sh -@@ -28,6 +28,7 @@ function download_and_verify_internal() { - local filename=$2 - local localdir=$SRC/cache/${remotedir//_/} - local dirname=${filename//.tar.xz/} -+ [[ -z $DISABLE_IPV6 ]] && DISABLE_IPV6="true" - - local server=${ARMBIAN_MIRROR} - if [[ $DOWNLOAD_MIRROR == china ]]; then -@@ -73,7 +74,7 @@ function download_and_verify_internal() { - else - # download control file - local torrent=${server}$remotedir/${filename}.torrent -- run_host_command_logged aria2c --download-result=hide --disable-ipv6=true --summary-interval=0 --console-log-level=error --auto-file-renaming=false \ -+ run_host_command_logged aria2c --download-result=hide --disable-ipv6=${DISABLE_IPV6} --summary-interval=0 --console-log-level=error --auto-file-renaming=false \ - --continue=false --allow-overwrite=true --dir="${localdir}" ${server}${remotedir}/${filename}.asc $(webseed "$remotedir/${filename}.asc") -o "${filename}.asc" - [[ $? -ne 0 ]] && display_alert "Failed to download control file" "" "wrn" - fi -@@ -84,7 +85,7 @@ function download_and_verify_internal() { - local ariatorrent="--summary-interval=0 --auto-save-interval=0 --seed-time=0 --bt-stop-timeout=120 --console-log-level=error \ - --allow-overwrite=true --download-result=hide --rpc-save-upload-metadata=false --auto-file-renaming=false \ - --file-allocation=trunc --continue=true ${torrent} \ -- --dht-file-path=${SRC}/cache/.aria2/dht.dat --disable-ipv6=true --stderr --follow-torrent=mem --dir=$localdir" -+ --dht-file-path=${SRC}/cache/.aria2/dht.dat --disable-ipv6=${DISABLE_IPV6} --stderr --follow-torrent=mem --dir=$localdir" - - # exception. It throws error if dht.dat file does not exists. Error suppress needed only at first download. - if [[ -f "${SRC}"/cache/.aria2/dht.dat ]]; then -@@ -103,7 +104,7 @@ function download_and_verify_internal() { - if [[ ! $(timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename} 2>&1 > /dev/null) ]]; then - display_alert "downloading from $(echo $server | cut -d'/' -f3 | cut -d':' -f1) using http(s) network" "$filename" - run_host_command_logged aria2c --download-result=hide --rpc-save-upload-metadata=false --console-log-level=error \ -- --dht-file-path="${SRC}"/cache/.aria2/dht.dat --disable-ipv6=true --summary-interval=0 --auto-file-renaming=false --dir="${localdir}" ${server}${remotedir}/${filename} $(webseed "${remotedir}/${filename}") -o "${filename}" -+ --dht-file-path="${SRC}"/cache/.aria2/dht.dat --disable-ipv6=${DISABLE_IPV6} --summary-interval=0 --auto-file-renaming=false --dir="${localdir}" ${server}${remotedir}/${filename} $(webseed "${remotedir}/${filename}") -o "${filename}" - # mark complete - [[ $? -eq 0 ]] && touch "${localdir}/${filename}.complete" && echo "" - -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 05b1492bc..76c26a22c 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -32,10 +32,8 @@ prepare_partitions() { - # add -N number of inodes to keep mount from running out - # create bigger number for desktop builds - if [[ $BUILD_DESKTOP == yes ]]; then local node_number=4096; else local node_number=1024; fi -- if [[ $HOSTRELEASE =~ bionic|buster|bullseye|cosmic|focal|hirsute|impish|jammy|sid ]]; then -- mkopts[ext4]="-q -m 2 -O ^64bit,^metadata_csum -N $((128 * ${node_number}))" -- elif [[ $HOSTRELEASE == xenial ]]; then -- mkopts[ext4]="-q -m 2 -N $((128 * ${node_number}))" -+ if [[ $HOSTRELEASE =~ buster|bullseye|focal|jammy|sid ]]; then -+ mkopts[ext4]="-q -m 2 -O ^64bit,^metadata_csum -N $((128 * node_number))" - fi - mkopts[fat]='-n BOOT' - mkopts[ext2]='-q' -diff --git a/lib/functions/rootfs/distro-specific.sh b/lib/functions/rootfs/distro-specific.sh -index 7c1676f40..3a0b1ec44 100644 ---- a/lib/functions/rootfs/distro-specific.sh -+++ b/lib/functions/rootfs/distro-specific.sh -@@ -2,19 +2,7 @@ install_distribution_specific() { - display_alert "Applying distribution specific tweaks for" "$RELEASE" "info" - - case $RELEASE in -- xenial) -- # remove legal info from Ubuntu -- [[ -f "${SDCARD}"/etc/legal ]] && rm "${SDCARD}"/etc/legal -- -- # ureadahead needs kernel tracing options that AFAIK are present only in mainline. disable -- chroot "${SDCARD}" /bin/bash -c \ -- "systemctl --no-reload mask ondemand.service ureadahead.service >/dev/null 2>&1" -- chroot "${SDCARD}" /bin/bash -c \ -- "systemctl --no-reload mask setserial.service etc-setserial.service >/dev/null 2>&1" -- -- ;; -- -- stretch | buster | sid) -+ buster | sid) - # remove doubled uname from motd - [[ -f "${SDCARD}"/etc/update-motd.d/10-uname ]] && rm "${SDCARD}"/etc/update-motd.d/10-uname - # rc.local is not existing but one might need it -@@ -31,7 +19,7 @@ install_distribution_specific() { - [[ $(grep -L "VERSION=" "${SDCARD}"/etc/os-release) ]] && echo 'VERSION="11 (bullseye)"' >> "${SDCARD}"/etc/os-release - ;; - -- bionic | focal | hirsute | impish | jammy) -+ focal | jammy) - # by using default lz4 initrd compression leads to corruption, go back to proven method - sed -i "s/^COMPRESS=.*/COMPRESS=gzip/" "${SDCARD}"/etc/initramfs-tools/initramfs.conf - -@@ -89,7 +77,7 @@ install_distribution_specific() { - - # create_sources_list - # --# : buster|bullseye|bionic|focal|hirsute|impish|jammy|sid -+# : bullseye|focal|jammy|sid - # : path to root directory - # - create_sources_list() { -@@ -98,7 +86,7 @@ create_sources_list() { - [[ -z $basedir ]] && exit_with_error "No basedir passed to create_sources_list" - - case $release in -- stretch | buster) -+ buster) - cat <<- EOF > "${basedir}"/etc/apt/sources.list - deb http://${DEBIAN_MIRROR} $release main contrib non-free - #deb-src http://${DEBIAN_MIRROR} $release main contrib non-free -@@ -137,7 +125,7 @@ create_sources_list() { - EOF - ;; - -- xenial | bionic | focal | hirsute | impish | jammy) -+ focal | jammy) - cat <<- EOF > "${basedir}"/etc/apt/sources.list - deb http://${UBUNTU_MIRROR} $release main restricted universe multiverse - #deb-src http://${UBUNTU_MIRROR} $release main restricted universe multiverse - -From 71addbe3ffd4e9e8015125186d11fc53eac1da25 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 7 Apr 2022 15:56:19 +0200 -Subject: [PATCH] armbian-next: fix logging for apt sources/gpg keys - ---- - lib/functions/rootfs/rootfs-desktop.sh | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/lib/functions/rootfs/rootfs-desktop.sh b/lib/functions/rootfs/rootfs-desktop.sh -index f8c4a12a2..208119d4b 100644 ---- a/lib/functions/rootfs/rootfs-desktop.sh -+++ b/lib/functions/rootfs/rootfs-desktop.sh -@@ -38,7 +38,7 @@ add_apt_sources() { - local apt_source_gpg_filename="$(basename ${apt_source_gpg_filepath})" - local apt_source_filename="$(basename ${apt_source_filepath}).list" - -- display_alert "Adding APT Source ${new_apt_source}" -+ display_alert "Adding APT Source" "${new_apt_source}" "info" - - if [[ "${new_apt_source}" == ppa* ]]; then - chroot_sdcard "add-apt-repository -y -n \"${new_apt_source}\"" -@@ -55,7 +55,7 @@ add_apt_sources() { - # installation without software-common-properties, sources.list + key.gpg - echo "${new_apt_source}" > "${SDCARD}/etc/apt/sources.list.d/${apt_source_filename}" - if [[ -f "${apt_source_gpg_filepath}" ]]; then -- display_alert "Adding GPG Key ${apt_source_gpg_filepath}" -+ display_alert "Adding GPG Key" "${apt_source_gpg_filepath}" "info" - # local apt_source_gpg_filename="$(basename ${apt_source_gpg_filepath})" - mkdir -p "${SDCARD}"/usr/share/keyrings/ - cp "${apt_source_gpg_filepath}" "${SDCARD}"/usr/share/keyrings/ - -From 7ca67f8d2669568a654d0fcf11415b24434cfd0b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 7 Apr 2022 13:54:59 +0200 -Subject: [PATCH] armbian-next: don't leak `if_error_xxx` vars across runner - helper invocations; always clean then (even if no error) - -- also: fix wireguard-tools install, had a double parameter there ---- - lib/functions/logging/runners.sh | 11 +++++++++-- - lib/functions/rootfs/distro-agnostic.sh | 2 +- - 2 files changed, 10 insertions(+), 3 deletions(-) - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 61a9acc3f..e550eba11 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -158,9 +158,18 @@ function run_host_command_logged_raw() { - elif [[ -f "${CURRENT_LOGFILE}" ]]; then - echo "-->--> command run successfully after $((SECONDS - seconds_start)) seconds" >> "${CURRENT_LOGFILE}" - fi -+ -+ logging_clear_run_command_error_info # clear the error info vars, always, otherwise they'll leak into the next invocation. -+ - return ${exit_code} # exiting with the same error code as the original error - } - -+function logging_clear_run_command_error_info() { -+ # Unset those globals; they're only valid for the first invocation of a runner helper function after they're set. -+ unset if_error_detail_message -+ unset if_error_find_files_sdcard # remember, this is global. -+} -+ - function logging_enrich_run_command_error_info() { - declare -a found_files=() - -@@ -171,7 +180,6 @@ function logging_enrich_run_command_error_info() { - display_alert "Found if_error_find_files_sdcard files" "${sdcard_files[@]}" "debug" - found_files+=("${sdcard_files[@]}") # add to result - done -- unset if_error_find_files_sdcard # remember, this is global. - - display_alert "Error-related files found" "${found_files[*]}" "debug" - for found_file in "${found_files[@]}"; do -@@ -187,7 +195,6 @@ function logging_enrich_run_command_error_info() { - ### if_error_detail_message, array: messages to display if the command failed. - if [[ -n ${if_error_detail_message} ]]; then - display_alert "Error context msg" "${if_error_detail_message}" "err" -- unset if_error_detail_message - fi - } - -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index ed65ec5ac..238bdb9d0 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -392,7 +392,7 @@ function install_distribution_agnostic() { - - # install wireguard tools - if [[ $WIREGUARD == yes ]]; then -- install_deb_chroot "wireguard-tools --no-install-recommends" "remote" -+ install_deb_chroot "wireguard-tools" "remote" - fi - - # freeze armbian packages - -From a057b793478fde9b1e0015d52b711c0442d91789 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 7 Apr 2022 13:53:58 +0200 -Subject: [PATCH] bcm2711: rpi4b: add `pi-bluetooth` which provides working - Bluetooth - ---- - config/sources/families/bcm2711.conf | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index 12ba2caae..a6bee376e 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -65,7 +65,7 @@ extension_prepare_config__prepare_rpi_flash_kernel() { - local usable_releases="focal|hirsute|impish|jammy" - - if [[ "$RELEASE" =~ ^(${usable_releases})$ ]]; then -- export FK__EXTRA_PACKAGES="rpi-eeprom linux-firmware linux-firmware-raspi2 libraspberrypi-bin cloud-initramfs-growroot" -+ export FK__EXTRA_PACKAGES="rpi-eeprom linux-firmware linux-firmware-raspi2 pi-bluetooth libraspberrypi-bin cloud-initramfs-growroot" - - if [[ "$RELEASE" =~ ^(hirsute|impish|jammy)$ ]]; then # Add raspi-config for those releases that have it; it might be useful. - export FK__EXTRA_PACKAGES="${FK__EXTRA_PACKAGES} raspi-config" - -From b0d907082d89474a04a790919fad6e27043bc474 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 7 Apr 2022 12:06:26 +0200 -Subject: [PATCH] armbian-next: fixes for (non-)logging when interactively - configuring kernel (`KERNEL_CONFIGURE=yes`) - ---- - lib/functions/compilation/kernel.sh | 21 +++++++++++++++------ - 1 file changed, 15 insertions(+), 6 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 66d512de5..118bdd752 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -60,7 +60,14 @@ function compile_kernel() { - [[ $CREATE_PATCHES == yes ]] && userpatch_create "kernel" # create patch for manual source changes - local version - local toolchain -- LOG_SECTION="kernel_config" do_with_logging do_with_hooks kernel_config -+ -+ # Check if we're gonna do some interactive configuration; if so, don't run kernel_config under logging manager. -+ if [[ $KERNEL_CONFIGURE != yes ]]; then -+ LOG_SECTION="kernel_config" do_with_logging do_with_hooks kernel_config -+ else -+ LOG_SECTION="kernel_config_interactive" do_with_hooks kernel_config -+ fi -+ - LOG_SECTION="kernel_package_source" do_with_logging do_with_hooks kernel_package_source - - # @TODO: might be interesting to package kernel-headers at this stage. -@@ -240,28 +247,30 @@ function kernel_config() { - if [[ $KERNEL_CONFIGURE != yes ]]; then - run_kernel_make olddefconfig # @TODO: what is this? does it fuck up dates? - else -- display_alert "Starting kernel oldconfig+menuconfig" "${LINUXCONFIG}" "debug" -+ display_alert "Starting (interactive) kernel oldconfig" "${LINUXCONFIG}" "debug" - -- run_kernel_make oldconfig -+ run_kernel_make_dialog oldconfig - - # No logging for this. this is UI piece -+ display_alert "Starting (interactive) kernel ${KERNEL_MENUCONFIG:-menuconfig}" "${LINUXCONFIG}" "debug" - run_kernel_make_dialog "${KERNEL_MENUCONFIG:-menuconfig}" - - # Capture new date. Otherwise changes not detected by make. - kernel_config_mtime=$(get_file_modification_time ".config") - - # store kernel config in easily reachable place -+ mkdir -p "${DEST}"/config - display_alert "Exporting new kernel config" "$DEST/config/$LINUXCONFIG.config" "info" -- cp .config "${DEST}/config/${LINUXCONFIG}.config" -+ run_host_command_logged cp -pv .config "${DEST}/config/${LINUXCONFIG}.config" - - # store back into original LINUXCONFIG too, if it came from there, so it's pending commits when done. -- [[ "${COPY_CONFIG_BACK_TO}" != "" ]] && cp -v .config "${COPY_CONFIG_BACK_TO}" -+ [[ "${COPY_CONFIG_BACK_TO}" != "" ]] && run_host_command_logged cp -pv .config "${COPY_CONFIG_BACK_TO}" - - # export defconfig too if requested - if [[ $KERNEL_EXPORT_DEFCONFIG == yes ]]; then - run_kernel_make savedefconfig - -- [[ -f defconfig ]] && cp defconfig "${DEST}/config/${LINUXCONFIG}.defconfig" -+ [[ -f defconfig ]] && run_host_command_logged cp -pv defconfig "${DEST}/config/${LINUXCONFIG}.defconfig" - fi - fi - - -From e10cb5c51bd77b47ee06ac7c9aaaaa4485646f61 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 3 Apr 2022 11:28:18 +0200 -Subject: [PATCH] armbian-next: move `lz4` rootfs caches to `zstd`, - multithreaded - ---- - lib/functions/rootfs/create-cache.sh | 37 +++++++++++++++++++++--------------- - 1 file changed, 22 insertions(+), 15 deletions(-) - -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index e16d8613f..5e57eabc5 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -7,22 +7,25 @@ get_or_create_rootfs_cache_chroot_sdcard() { - fi - - # seek last cache, proceed to previous otherwise build it -- for ((n = 0; n < ${cycles}; n++)); do -+ for ((n = 0; n < cycles; n++)); do - - [[ -z ${FORCED_MONTH_OFFSET} ]] && FORCED_MONTH_OFFSET=${n} -- local packages_hash=$(get_package_list_hash "$(date -d "$D +${FORCED_MONTH_OFFSET} month" +"%Y-%m-module$ROOTFSCACHE_VERSION" | sed 's/^0*//')") -+ local packages_hash -+ packages_hash=$(get_package_list_hash "$(date -d "$D +${FORCED_MONTH_OFFSET} month" +"%Y-%m-module$ROOTFSCACHE_VERSION" | sed 's/^0*//')") -+ - local cache_type="cli" -- [[ ${BUILD_DESKTOP} == yes ]] && local cache_type="xfce-desktop" -- [[ -n ${DESKTOP_ENVIRONMENT} ]] && local cache_type="${DESKTOP_ENVIRONMENT}" -- [[ ${BUILD_MINIMAL} == yes ]] && local cache_type="minimal" -- local cache_name=${RELEASE}-${cache_type}-${ARCH}.$packages_hash.tar.lz4 -+ [[ ${BUILD_DESKTOP} == yes ]] && cache_type="xfce-desktop" -+ [[ -n ${DESKTOP_ENVIRONMENT} ]] && cache_type="${DESKTOP_ENVIRONMENT}" -+ [[ ${BUILD_MINIMAL} == yes ]] && cache_type="minimal" -+ -+ local cache_name=${RELEASE}-${cache_type}-${ARCH}.${packages_hash}.tar.zst - local cache_fname=${SRC}/cache/rootfs/${cache_name} -- local display_name=${RELEASE}-${cache_type}-${ARCH}.${packages_hash:0:3}...${packages_hash:29}.tar.lz4 -+ local display_name=${RELEASE}-${cache_type}-${ARCH}.${packages_hash:0:3}...${packages_hash:29}.tar.zst - - [[ "$ROOT_FS_CREATE_ONLY" == force ]] && break - - if [[ -f ${cache_fname} && -f ${cache_fname}.aria2 ]]; then -- rm ${cache_fname}* -+ rm "${cache_fname}"* - display_alert "Partially downloaded file. Re-start." - download_and_verify "_rootfs" "$cache_name" - fi -@@ -30,10 +33,14 @@ get_or_create_rootfs_cache_chroot_sdcard() { - display_alert "Checking local cache" "$display_name" "info" - - if [[ -f ${cache_fname} && -n "$ROOT_FS_CREATE_ONLY" ]]; then -- touch $cache_fname.current -+ touch "${cache_fname}.current" - display_alert "Checking cache integrity" "$display_name" "info" -- sudo lz4 -tqq ${cache_fname} -- [[ $? -ne 0 ]] && rm $cache_fname && exit_with_error "Cache $cache_fname is corrupted and was deleted. Please restart!" -+ -+ sudo zstd -tqq "${cache_fname}" || { -+ rm -f "${cache_fname}" -+ exit_with_error "Cache ${cache_fname} is corrupted and was deleted. Please restart!" -+ } -+ - # sign if signature is missing - if [[ -n "${GPG_PASS}" && "${SUDO_USER}" && ! -f ${cache_fname}.asc ]]; then - [[ -n ${SUDO_USER} ]] && sudo chown -R ${SUDO_USER}:${SUDO_USER} "${DEST}"/images/ -@@ -67,7 +74,7 @@ get_or_create_rootfs_cache_chroot_sdcard() { - - local date_diff=$((($(date +%s) - $(stat -c %Y $cache_fname)) / 86400)) - display_alert "Extracting $display_name" "$date_diff days old" "info" -- pv -p -b -r -c -N "$(logging_echo_prefix_for_pv "extract_rootfs") $display_name" "$cache_fname" | lz4 -dc | tar xp --xattrs -C $SDCARD/ -+ pv -p -b -r -c -N "$(logging_echo_prefix_for_pv "extract_rootfs") $display_name" "$cache_fname" | zstdmt -dc | tar xp --xattrs -C $SDCARD/ - [[ $? -ne 0 ]] && rm $cache_fname && exit_with_error "Cache $cache_fname is corrupted and was deleted. Restart." - rm $SDCARD/etc/resolv.conf - echo "nameserver $NAMESERVER" >> $SDCARD/etc/resolv.conf -@@ -78,7 +85,7 @@ get_or_create_rootfs_cache_chroot_sdcard() { - create_new_rootfs_cache - - # needed for backend to keep current only -- touch $cache_fname.current -+ touch "${cache_fname}.current" - - fi - -@@ -91,7 +98,7 @@ get_or_create_rootfs_cache_chroot_sdcard() { - exit - fi - -- mount_chroot "$SDCARD" -+ mount_chroot "${SDCARD}" - } - - function create_new_rootfs_cache() { -@@ -248,7 +255,7 @@ function create_new_rootfs_cache() { - umount_chroot "$SDCARD" - - tar cp --xattrs --directory=$SDCARD/ --exclude='./dev/*' --exclude='./proc/*' --exclude='./run/*' --exclude='./tmp/*' \ -- --exclude='./sys/*' --exclude='./home/*' --exclude='./root/*' . | pv -p -b -r -s "$(du -sb $SDCARD/ | cut -f1)" -N "$(logging_echo_prefix_for_pv "store_rootfs") $display_name" | lz4 -5 -c > "$cache_fname" -+ --exclude='./sys/*' --exclude='./home/*' --exclude='./root/*' . | pv -p -b -r -s "$(du -sb $SDCARD/ | cut -f1)" -N "$(logging_echo_prefix_for_pv "store_rootfs") $display_name" | zstdmt -5 -c > "${cache_fname}" - - # sign rootfs cache archive that it can be used for web cache once. Internal purposes - if [[ -n "${GPG_PASS}" && "${SUDO_USER}" ]]; then - -From 1b602cf8ebae2179b8590126751ce801c976cdfb Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 3 Apr 2022 11:25:50 +0200 -Subject: [PATCH] armbian-next: customize.sh: error handling, do not mount - overlay if it doesn't exist - ---- - lib/functions/rootfs/customize.sh | 11 ++++++++--- - 1 file changed, 8 insertions(+), 3 deletions(-) - -diff --git a/lib/functions/rootfs/customize.sh b/lib/functions/rootfs/customize.sh -index 5405b814f..f517e46cb 100644 ---- a/lib/functions/rootfs/customize.sh -+++ b/lib/functions/rootfs/customize.sh -@@ -12,12 +12,17 @@ customize_image() { - cp "$USERPATCHES_PATH"/customize-image.sh "${SDCARD}"/tmp/customize-image.sh - chmod +x "${SDCARD}"/tmp/customize-image.sh - mkdir -p "${SDCARD}"/tmp/overlay -+ - # util-linux >= 2.27 required -- mount -o bind,ro "$USERPATCHES_PATH"/overlay "${SDCARD}"/tmp/overlay -+ [[ -d "${USERPATCHES_PATH}"/overlay ]] && mount -o bind,ro "${USERPATCHES_PATH}"/overlay "${SDCARD}"/tmp/overlay - display_alert "Calling image customization script" "customize-image.sh" "info" -- chroot "${SDCARD}" /bin/bash -c "/tmp/customize-image.sh $RELEASE $LINUXFAMILY $BOARD $BUILD_DESKTOP $ARCH" -+ -+ set +e # disable error control -+ chroot_sdcard /tmp/customize-image.sh "${RELEASE}" "$LINUXFAMILY" "$BOARD" "$BUILD_DESKTOP" "$ARCH" - CUSTOMIZE_IMAGE_RC=$? -- umount -i "${SDCARD}"/tmp/overlay > /dev/null 2>&1 -+ set -e # back to normal error control -+ -+ mountpoint -q "${SDCARD}"/tmp/overlay && umount "${SDCARD}"/tmp/overlay - mountpoint -q "${SDCARD}"/tmp/overlay || rm -r "${SDCARD}"/tmp/overlay - if [[ $CUSTOMIZE_IMAGE_RC != 0 ]]; then - exit_with_error "customize-image.sh exited with error (rc: $CUSTOMIZE_IMAGE_RC)" - -From 09a55387f126f1907945ee72060cdd42973a8d4b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 2 Apr 2022 21:15:55 +0200 -Subject: [PATCH] armbian-next: extra info for runners; - `if_error_detail_message` and `if_error_find_files_sdcard` globals - -- those are unset after running any command -- if error occur, message and/or found files will be included in log, for clarity ---- - extensions/nvidia.sh | 1 + - lib/functions/compilation/uboot.sh | 4 ++-- - lib/functions/logging/logging.sh | 3 ++- - lib/functions/logging/runners.sh | 38 ++++++++++++++++++++++++++++++++++-- - lib/functions/rootfs/apt.sh | 2 +- - lib/functions/rootfs/create-cache.sh | 6 +++--- - 6 files changed, 45 insertions(+), 9 deletions(-) - -diff --git a/extensions/nvidia.sh b/extensions/nvidia.sh -index e329a7458..57e478c5c 100644 ---- a/extensions/nvidia.sh -+++ b/extensions/nvidia.sh -@@ -9,5 +9,6 @@ function post_install_kernel_debs__build_nvidia_kernel_module() { - # chroot_sdcard_apt_get_install() is in lib/logging/runners.sh which handles "running" of stuff nicely. - # chroot_sdcard_apt_get_install() -> chroot_sdcard_apt_get() -> chroot_sdcard() -> run_host_command_logged_raw() - # it handles bash-specific quoting issues, apt proxies, logging, and errors. -+ declare -agx if_error_find_files_sdcard=("/var/lib/dkms/nvidia/*/build/make.log") - chroot_sdcard_apt_get_install "nvidia-dkms-${NVIDIA_DRIVER_VERSION}" "nvidia-driver-${NVIDIA_DRIVER_VERSION}" nvidia-settings - } -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index f6f8279ea..fd3ae385a 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -36,7 +36,7 @@ function compile_uboot_target() { - fi - - display_alert "${uboot_prefix}Preparing u-boot config" "${version} ${target_make}" "info" -- export MSG_IF_ERROR="${uboot_prefix}Failed to configure u-boot ${version} $BOOTCONFIG ${target_make}" -+ export if_error_detail_message="${uboot_prefix}Failed to configure u-boot ${version} $BOOTCONFIG ${target_make}" - run_host_command_logged CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" \ - make "$CTHREADS" "$BOOTCONFIG" "CROSS_COMPILE=\"$CCACHE $UBOOT_COMPILER\"" "KCFLAGS=-fdiagnostics-color=always" - -@@ -71,7 +71,7 @@ function compile_uboot_target() { - [[ -n $UBOOT_TOOLCHAIN2 ]] && cross_compile="ARMBIAN=foe" # empty parameter is not allowed - - display_alert "${uboot_prefix}Compiling u-boot" "${version} ${target_make}" "info" -- export MSG_IF_ERROR="${uboot_prefix}Failed to build u-boot ${version} ${target_make}" -+ export if_error_detail_message="${uboot_prefix}Failed to build u-boot ${version} ${target_make}" - run_host_command_logged_long_running CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" make "$target_make" "$CTHREADS" "${cross_compile}" "KCFLAGS=-fdiagnostics-color=always" - - if [[ $(type -t uboot_custom_postprocess) == function ]]; then -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 8e98b569a..66bcda39e 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -277,7 +277,6 @@ function logging_echo_prefix_for_pv() { - # Cleanup for logging. - function trap_handler_cleanup_logging() { - [[ ! -d "${LOGDIR}" ]] && return 0 -- display_alert "Cleaning up logs from LOGDIR" "${LOGDIR}" "debug" - - # Just delete LOGDIR if in CONFIG_DEFS_ONLY mode. - if [[ "${CONFIG_DEFS_ONLY}" == "yes" ]]; then -@@ -305,6 +304,8 @@ function trap_handler_cleanup_logging() { - done - fi - -+ display_alert "Preparing HTML log from" "${LOGDIR}" "debug" -+ - cat <<- HTML_HEADER > "${target_file}" - - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 1b07dc7a0..61a9acc3f 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -144,17 +144,51 @@ function run_host_command_logged_raw() { - exit_code=$? - set -e - -- if [[ $exit_code != 0 ]]; then -+ if [[ ${exit_code} != 0 ]]; then - if [[ -f "${CURRENT_LOGFILE}" ]]; then - echo "-->--> command failed with error code ${exit_code} after $((SECONDS - seconds_start)) seconds" >> "${CURRENT_LOGFILE}" - fi - # This is very specific; remove CURRENT_LOGFILE's value when calling display_alert here otherwise logged twice. - CURRENT_LOGFILE="" display_alert "cmd exited with code ${exit_code}" "$*" "wrn" - CURRENT_LOGFILE="" display_alert "stacktrace for failed command" "$(show_caller_full)" "wrn" -+ -+ # Obtain extra info about error, eg, log files produced, extra messages set by caller, etc. -+ logging_enrich_run_command_error_info -+ - elif [[ -f "${CURRENT_LOGFILE}" ]]; then - echo "-->--> command run successfully after $((SECONDS - seconds_start)) seconds" >> "${CURRENT_LOGFILE}" - fi -- return $exit_code -+ return ${exit_code} # exiting with the same error code as the original error -+} -+ -+function logging_enrich_run_command_error_info() { -+ declare -a found_files=() -+ -+ for path in "${if_error_find_files_sdcard[@]}"; do -+ declare -a sdcard_files -+ # shellcheck disable=SC2086 # I wanna expand, thank you... -+ mapfile -t sdcard_files < <(find ${SDCARD}/${path} -type f) -+ display_alert "Found if_error_find_files_sdcard files" "${sdcard_files[@]}" "debug" -+ found_files+=("${sdcard_files[@]}") # add to result -+ done -+ unset if_error_find_files_sdcard # remember, this is global. -+ -+ display_alert "Error-related files found" "${found_files[*]}" "debug" -+ for found_file in "${found_files[@]}"; do -+ # Log to asset, so it's available in the HTML log -+ LOG_ASSET="chroot_error_context__$(basename "${found_file}")" do_with_log_asset cat "${found_file}" -+ -+ display_alert "File contents for error context" "${found_file}" "err" -+ # shellcheck disable=SC2002 # cat is not useless, ccze _only_ takes stdin -+ cat "${found_file}" | ccze -A 1>&2 # to stderr -+ # @TODO: 3x repeated ccze invocation, lets refactor it later -+ done -+ -+ ### if_error_detail_message, array: messages to display if the command failed. -+ if [[ -n ${if_error_detail_message} ]]; then -+ display_alert "Error context msg" "${if_error_detail_message}" "err" -+ unset if_error_detail_message -+ fi - } - - # @TODO: logging: used by desktop.sh exclusively. let's unify? -diff --git a/lib/functions/rootfs/apt.sh b/lib/functions/rootfs/apt.sh -index 91f81ad95..e062d5284 100644 ---- a/lib/functions/rootfs/apt.sh -+++ b/lib/functions/rootfs/apt.sh -@@ -29,7 +29,7 @@ install_deb_chroot() { - [[ $BUILD_ALL == yes && ${variant} == remote ]] && chroot_sdcard_apt_get update - - # install in chroot via apt-get, not dpkg, so dependencies are also installed from repo if needed. -- export MSG_IF_ERROR="Installation of $name failed ${BOARD} ${RELEASE} ${BUILD_DESKTOP} ${LINUXFAMILY}" -+ export if_error_detail_message="Installation of $name failed ${BOARD} ${RELEASE} ${BUILD_DESKTOP} ${LINUXFAMILY}" - chroot_sdcard_apt_get --no-install-recommends install "${name}" - - # @TODO: mysterious. store installed/downloaded packages in deb storage. only used for u-boot deb. why? -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index c0fdeebaa..e16d8613f 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -124,7 +124,7 @@ function create_new_rootfs_cache() { - run_host_command_logged cp -pv /usr/share/keyrings/*-archive-keyring.gpg "${SDCARD}/usr/share/keyrings/" - - display_alert "Installing base system" "Stage 2/2" "info" -- export MSG_IF_ERROR="Debootstrap second stage failed ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL}" -+ export if_error_detail_message="Debootstrap second stage failed ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL}" - chroot_sdcard LC_ALL=C LANG=C /debootstrap/debootstrap --second-stage - [[ ! -f "${SDCARD}/bin/bash" ]] && exit_with_error "Debootstrap first stage did not produce /bin/bash" - -@@ -179,7 +179,7 @@ function create_new_rootfs_cache() { - - # stage: install additional packages - display_alert "Installing the main packages for" "Armbian" "info" -- export MSG_IF_ERROR="Installation of Armbian main packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed" -+ export if_error_detail_message="Installation of Armbian main packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed" - # First, try to download-only up to 3 times, to work around network/proxy problems. - do_with_retries 3 chroot_sdcard_apt_get_install_download_only "$PACKAGE_MAIN_LIST" - -@@ -199,11 +199,11 @@ function create_new_rootfs_cache() { - fi - - display_alert "Installing the desktop packages for" "Armbian" "info" -- MSG_IF_ERROR="Installation of Armbian desktop packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed" - # Retry download-only 3 times first. - do_with_retries 3 chroot_sdcard_apt_get_install_download_only ${apt_desktop_install_flags} $PACKAGE_LIST_DESKTOP - - # Then do the actual install. -+ export if_error_detail_message="Installation of Armbian desktop packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed" - chroot_sdcard_apt_get install ${apt_desktop_install_flags} $PACKAGE_LIST_DESKTOP - fi - - -From 4cbbde478c436b76c883d4ece3a74fc8d0aeb72d Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 2 Apr 2022 16:01:19 +0200 -Subject: [PATCH] armbian-next: manual merge (15) of all changes between - revisions 0f7200c7932bb04a34601a25fe30dca0197fbc8b and - 101eaec90750f23cae3075d6b5329a33b2bf4685 - ---- - config/sources/families/rk35xx.conf | 4 ++-- - lib/functions/configuration/main-config.sh | 2 +- - lib/functions/rootfs/create-cache.sh | 16 +++------------- - lib/functions/rootfs/rootfs-desktop.sh | 8 +++----- - 4 files changed, 9 insertions(+), 21 deletions(-) - -diff --git a/config/sources/families/rk35xx.conf b/config/sources/families/rk35xx.conf -index d0c5a293e..1a05d42d1 100644 ---- a/config/sources/families/rk35xx.conf -+++ b/config/sources/families/rk35xx.conf -@@ -25,8 +25,8 @@ case $BRANCH in - # temporary until kernel 5.16 is well supported for rockchip64 - # it has to be its own family too - edge) -- export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.16.y" -+ export KERNEL_MAJOR_MINOR="5.17" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.17.y" - KERNELPATCHDIR='rk35xx-'$BRANCH - SKIP_BOOTSPLASH="yes" - LINUXFAMILY=rk35xx -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 57561089a..c1a2b03e6 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -32,7 +32,7 @@ function do_main_configuration() { - [[ -z $EXIT_PATCHING_ERROR ]] && EXIT_PATCHING_ERROR="" # exit patching if failed - [[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board - cd "${SRC}" || exit -- [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=16 -+ [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=17 - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 - BUILD_REPOSITORY_URL=$(git remote get-url "$(git remote 2> /dev/null | grep origin)" 2> /dev/null) - BUILD_REPOSITORY_COMMIT=$(git describe --match=d_e_a_d_b_e_e_f --always --dirty 2> /dev/null) -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index 3dc4feaaf..c0fdeebaa 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -166,6 +166,9 @@ function create_new_rootfs_cache() { - # this should fix resolvconf installation failure in some cases - chroot_sdcard 'echo "resolvconf resolvconf/linkify-resolvconf boolean false" | debconf-set-selections' - -+ # TODO change name of the function from "desktop" and move to appropriate location -+ add_desktop_package_sources -+ - # stage: update packages list - display_alert "Updating package list" "$RELEASE" "info" - do_with_retries 3 chroot_sdcard_apt_get update -@@ -174,12 +177,6 @@ function create_new_rootfs_cache() { - display_alert "Upgrading base packages" "Armbian" "info" - do_with_retries 3 chroot_sdcard_apt_get upgrade - -- # Myy: Dividing the desktop packages installation steps into multiple -- # ones. We first install the "ADDITIONAL_PACKAGES" in order to get -- # access to software-common-properties installation. -- # THEN we add the APT sources and install the Desktop packages. -- # TODO : Find a way to add APT sources WITHOUT software-common-properties -- - # stage: install additional packages - display_alert "Installing the main packages for" "Armbian" "info" - export MSG_IF_ERROR="Installation of Armbian main packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed" -@@ -190,13 +187,6 @@ function create_new_rootfs_cache() { - chroot_sdcard_apt_get_install "$PACKAGE_MAIN_LIST" - - if [[ $BUILD_DESKTOP == "yes" ]]; then -- # FIXME Myy : Are we keeping this only for Desktop users, -- # or should we extend this to CLI users too ? -- # There might be some clunky boards that require Debian packages from -- # specific repos... -- display_alert "Adding apt sources for Desktop packages" -- add_desktop_package_sources -- - local apt_desktop_install_flags="" - if [[ ! -z ${DESKTOP_APT_FLAGS_SELECTED+x} ]]; then - for flag in ${DESKTOP_APT_FLAGS_SELECTED}; do -diff --git a/lib/functions/rootfs/rootfs-desktop.sh b/lib/functions/rootfs/rootfs-desktop.sh -index 56b9cfc3d..f8c4a12a2 100644 ---- a/lib/functions/rootfs/rootfs-desktop.sh -+++ b/lib/functions/rootfs/rootfs-desktop.sh -@@ -25,7 +25,7 @@ add_apt_sources() { - get_all_potential_paths "${DESKTOP_ENVIRONMENTS_SEARCH_RELATIVE_DIRS}" "." "sources/apt" - get_all_potential_paths "${DESKTOP_APPGROUPS_SEARCH_RELATIVE_DIRS}" "${DESKTOP_APPGROUPS_SELECTED}" "sources/apt" - -- display_alert "ADDING ADDITIONAL APT SOURCES" -+ display_alert "Adding additional apt sources" "add_apt_sources()" "debug" - - for apt_sources_dirpath in ${potential_paths}; do - if [[ -d "${apt_sources_dirpath}" ]]; then -@@ -41,11 +41,10 @@ add_apt_sources() { - display_alert "Adding APT Source ${new_apt_source}" - - if [[ "${new_apt_source}" == ppa* ]]; then -- -+ chroot_sdcard "add-apt-repository -y -n \"${new_apt_source}\"" - # add list with apt-add - # -y -> Assumes yes to all queries - # -n -> Do not update package cache after adding -- run_on_sdcard "add-apt-repository -y -n \"${new_apt_source}\"" - if [[ -f "${apt_source_gpg_filepath}" ]]; then - display_alert "Adding GPG Key ${apt_source_gpg_filepath}" - cp "${apt_source_gpg_filepath}" "${SDCARD}/tmp/${apt_source_gpg_filename}" -@@ -53,7 +52,7 @@ add_apt_sources() { - echo "APT Key returned : $?" - fi - else -- # copy list if its not ppa -+ # installation without software-common-properties, sources.list + key.gpg - echo "${new_apt_source}" > "${SDCARD}/etc/apt/sources.list.d/${apt_source_filename}" - if [[ -f "${apt_source_gpg_filepath}" ]]; then - display_alert "Adding GPG Key ${apt_source_gpg_filepath}" -@@ -72,7 +71,6 @@ add_apt_sources() { - - add_desktop_package_sources() { - add_apt_sources -- chroot_sdcard_apt_get "update" - run_host_command_logged ls -l "${SDCARD}/usr/share/keyrings" - run_host_command_logged ls -l "${SDCARD}/etc/apt/sources.list.d" - run_host_command_logged cat "${SDCARD}/etc/apt/sources.list" - -From 0023bcce6aaed245b27c031156ba650acbafed3b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 1 Apr 2022 12:27:19 +0200 -Subject: [PATCH] armbian-next: better logging for `rsync` calls everywhere - -- make rsync verbose ---- - lib/functions/bsp/bsp-cli.sh | 4 ++-- - lib/functions/compilation/debs.sh | 6 +++--- - lib/functions/compilation/kernel.sh | 2 +- - lib/functions/compilation/uboot.sh | 2 +- - lib/functions/image/rootfs-to-image.sh | 14 ++++---------- - lib/functions/rootfs/apt.sh | 2 +- - 6 files changed, 12 insertions(+), 18 deletions(-) - -diff --git a/lib/functions/bsp/bsp-cli.sh b/lib/functions/bsp/bsp-cli.sh -index 5af25dd82..c52910403 100644 ---- a/lib/functions/bsp/bsp-cli.sh -+++ b/lib/functions/bsp/bsp-cli.sh -@@ -252,7 +252,7 @@ create_board_package() { - #EOF - - # copy common files from a premade directory structure -- rsync -a ${SRC}/packages/bsp/common/* ${destination} -+ run_host_command_logged rsync -av ${SRC}/packages/bsp/common/* ${destination} - - # trigger uInitrd creation after installation, to apply - # /etc/initramfs/post-update.d/99-uboot -@@ -308,7 +308,7 @@ create_board_package() { - # create board DEB file - fakeroot_dpkg_deb_build "${destination}" "${destination}.deb" - mkdir -p "${DEB_STORAGE}/" -- rsync --remove-source-files -rq "${destination}.deb" "${DEB_STORAGE}/" 2>&1 -+ run_host_command_logged rsync --remove-source-files -r "${destination}.deb" "${DEB_STORAGE}/" - - display_alert "Done building BSP CLI package" "${destination}" "debug" - } -diff --git a/lib/functions/compilation/debs.sh b/lib/functions/compilation/debs.sh -index a48bd3058..2af1af793 100644 ---- a/lib/functions/compilation/debs.sh -+++ b/lib/functions/compilation/debs.sh -@@ -43,7 +43,7 @@ compile_firmware() { - display_alert "Building firmware package" "armbian-firmware${FULL}_${REVISION}_all" "info" - fakeroot_dpkg_deb_build "armbian-firmware${FULL}_${REVISION}_all" - mv "armbian-firmware${FULL}_${REVISION}_all" "armbian-firmware${FULL}" -- rsync -rq "armbian-firmware${FULL}_${REVISION}_all.deb" "${DEB_STORAGE}/" -+ run_host_command_logged rsync -rq "armbian-firmware${FULL}_${REVISION}_all.deb" "${DEB_STORAGE}/" - - } - -@@ -117,7 +117,7 @@ compile_armbian-zsh() { - chmod 755 "${tmp_dir}/${armbian_zsh_dir}"/DEBIAN/postinst - - fakeroot_dpkg_deb_build "${tmp_dir}/${armbian_zsh_dir}" -- rsync --remove-source-files -rq "${tmp_dir}/${armbian_zsh_dir}.deb" "${DEB_STORAGE}/" -+ run_host_command_logged rsync --remove-source-files -r "${tmp_dir}/${armbian_zsh_dir}.deb" "${DEB_STORAGE}/" - - } - -@@ -169,7 +169,7 @@ compile_armbian-config() { - ln -sf /usr/sbin/softy "${tmp_dir}/${armbian_config_dir}"/usr/bin/softy - - fakeroot_dpkg_deb_build "${tmp_dir}/${armbian_config_dir}" -- rsync --remove-source-files -rq "${tmp_dir}/${armbian_config_dir}.deb" "${DEB_STORAGE}/" -+ run_host_command_logged rsync --remove-source-files -r "${tmp_dir}/${armbian_config_dir}.deb" "${DEB_STORAGE}/" - } - - compile_xilinx_bootgen() { -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 249336e00..66d512de5 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -79,7 +79,7 @@ function compile_kernel() { - display_alert "Done with" "kernel compile" "debug" - cd "${kernel_work_dir}/.." || exit - rm -f linux-firmware-image-*.deb # remove firmware image packages here - easier than patching ~40 packaging scripts at once -- rsync --remove-source-files -rq ./*.deb "${DEB_STORAGE}/" || exit_with_error "Failed moving kernel DEBs" -+ run_host_command_logged rsync --remove-source-files -r ./*.deb "${DEB_STORAGE}/" - return 0 - } - -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index 05b8ea629..f6f8279ea 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -229,7 +229,7 @@ compile_uboot() { - - [[ ! -f $uboottempdir/${uboot_name}.deb ]] && exit_with_error "Building u-boot package failed" - -- rsync --remove-source-files -rq "$uboottempdir/${uboot_name}.deb" "${DEB_STORAGE}/" 2>&1 -+ run_host_command_logged rsync --remove-source-files -r "$uboottempdir/${uboot_name}.deb" "${DEB_STORAGE}/" - - display_alert "Built u-boot deb OK" "${uboot_name}.deb" "info" - return 0 # success -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index 85dc86f9c..a8f0796cc 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -1,9 +1,3 @@ --############################################################################# -- --############################################################################# -- --############################################################################# -- - # create_image - # - # finishes creation of image from cached rootfs -@@ -125,10 +119,10 @@ PRE_UMOUNT_FINAL_IMAGE - It is the last possible chance to modify `$CARD_DEVICE`. - POST_BUILD_IMAGE - -- # move artefacts from temporally directory to its final destination -- [[ -n $compression_type ]] && rm "${DESTIMG}/${version}.img" -- rsync -a --no-owner --no-group --remove-source-files "${DESTIMG}/${version}"* "${FINALDEST}" -- rm -rf --one-file-system "${DESTIMG}" -+ display_alert "Moving artefacts from temporary directory to its final destination" "${version}" "debug" -+ [[ -n $compression_type ]] && run_host_command_logged rm -v "${DESTIMG}/${version}.img" -+ run_host_command_logged rsync -av --no-owner --no-group --remove-source-files "${DESTIMG}/${version}"* "${FINALDEST}" -+ run_host_command_logged rm -rfv --one-file-system "${DESTIMG}" - - # write image to SD card - write_image_to_device "${FINALDEST}/${version}.img" "${CARD_DEVICE}" -diff --git a/lib/functions/rootfs/apt.sh b/lib/functions/rootfs/apt.sh -index 768636fc9..91f81ad95 100644 ---- a/lib/functions/rootfs/apt.sh -+++ b/lib/functions/rootfs/apt.sh -@@ -33,7 +33,7 @@ install_deb_chroot() { - chroot_sdcard_apt_get --no-install-recommends install "${name}" - - # @TODO: mysterious. store installed/downloaded packages in deb storage. only used for u-boot deb. why? -- [[ ${variant} == remote && ${transfer} == yes ]] && rsync -rq "${SDCARD}"/var/cache/apt/archives/*.deb "${DEB_STORAGE}"/ -+ [[ ${variant} == remote && ${transfer} == yes ]] && run_host_command_logged rsync -r "${SDCARD}"/var/cache/apt/archives/*.deb "${DEB_STORAGE}"/ - - # IMPORTANT! Do not use short-circuit above as last statement in a function, since it determines the result of the function. - return 0 - -From 5aa5cad33ed6ea11af0cb371c0f5a1ef3cce0309 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 1 Apr 2022 00:51:22 +0200 -Subject: [PATCH] armbian-next: downloads: skip download if no `ARMBIAN_MIRROR` - nor `DOWNLOAD_MIRROR`; less logs - ---- - lib/functions/general/downloads.sh | 30 +++++++++++++++--------------- - 1 file changed, 15 insertions(+), 15 deletions(-) - -diff --git a/lib/functions/general/downloads.sh b/lib/functions/general/downloads.sh -index 6c5171f3c..1ff476a74 100644 ---- a/lib/functions/general/downloads.sh -+++ b/lib/functions/general/downloads.sh -@@ -7,22 +7,18 @@ function webseed() { - # aria2 simply split chunks based on sources count not depending on download speed - # when selecting china mirrors, use only China mirror, others are very slow there - if [[ $DOWNLOAD_MIRROR == china ]]; then -- WEBSEED=( -- https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/ -- ) -+ WEBSEED=(https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/) - elif [[ $DOWNLOAD_MIRROR == bfsu ]]; then -- WEBSEED=( -- https://mirrors.bfsu.edu.cn/armbian-releases/ -- ) -+ WEBSEED=(https://mirrors.bfsu.edu.cn/armbian-releases/) - fi -- for toolchain in ${WEBSEED[@]}; do -+ for toolchain in "${WEBSEED[@]}"; do - text="${text} ${toolchain}${1}" - done - text="${text:1}" - echo "${text}" - } - --# Non-error handled version @TODO: might be a terrible idea? -+# Terrible idea, this runs download_and_verify_internal() with error handling disabled. - function download_and_verify() { - download_and_verify_internal "${@}" || true - } -@@ -33,26 +29,30 @@ function download_and_verify_internal() { - local localdir=$SRC/cache/${remotedir//_/} - local dirname=${filename//.tar.xz/} - -+ local server=${ARMBIAN_MIRROR} - if [[ $DOWNLOAD_MIRROR == china ]]; then -- local server="https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/" -+ server="https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/" - elif [[ $DOWNLOAD_MIRROR == bfsu ]]; then -- local server="https://mirrors.bfsu.edu.cn/armbian-releases/" -- else -- local server=${ARMBIAN_MIRROR} -+ server="https://mirrors.bfsu.edu.cn/armbian-releases/" -+ fi -+ -+ if [[ "x${server}x" == "xx" ]]; then -+ display_alert "ARMBIAN_MIRROR is not set, nor valid DOWNLOAD_MIRROR" "not downloading '${filename}'" "debug" -+ return 0 - fi - - if [[ -f ${localdir}/${dirname}/.download-complete ]]; then -- return -+ return 0 - fi - - # switch to china mirror if US timeouts -- run_host_command_logged timeout 10 curl --head --fail --silent "${server}${remotedir}/${filename}" -+ timeout 10 curl --head --fail --silent "${server}${remotedir}/${filename}" - if [[ $? -ne 7 && $? -ne 22 && $? -ne 0 ]]; then - display_alert "Timeout from $server" "retrying" "info" - server="https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/" - - # switch to another china mirror if tuna timeouts -- run_host_command_logged timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename} -+ timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename} - if [[ $? -ne 7 && $? -ne 22 && $? -ne 0 ]]; then - display_alert "Timeout from $server" "retrying" "info" - server="https://mirrors.bfsu.edu.cn/armbian-releases/" - -From fcc2cdc23237549cde54eee47b76776106c29ec0 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 31 Mar 2022 20:02:17 +0200 -Subject: [PATCH] armbian-next: update rockchip.conf from master and use - runners - ---- - config/sources/families/rockchip.conf | 21 ++++++++++++--------- - 1 file changed, 12 insertions(+), 9 deletions(-) - -diff --git a/config/sources/families/rockchip.conf b/config/sources/families/rockchip.conf -index 55f56e492..0f123a848 100644 ---- a/config/sources/families/rockchip.conf -+++ b/config/sources/families/rockchip.conf -@@ -10,7 +10,7 @@ if [[ $BOARD == miqi ]]; then - elif [[ $BOARD == xt-q8l-v10 ]]; then - BOOTBRANCH='tag:v2021.01' - else -- BOOTBRANCH='tag:v2018.11' -+ BOOTBRANCH='tag:v2022.01' - fi - - SERIALCON=ttyS2 -@@ -63,16 +63,17 @@ uboot_custom_postprocess() { - cat spl/u-boot-spl-dtb.bin >> u-boot-rockchip-with-spl.bin - dd if=u-boot-dtb.img of=u-boot-rockchip-with-spl.bin seek=$((0x200 - 0x40)) conv=notrunc - else -- tools/mkimage -n rk3288 -T rksd -d spl/u-boot-spl-dtb.bin u-boot-rockchip-with-spl.bin -- cat u-boot-dtb.bin >> u-boot-rockchip-with-spl.bin -+ tools/mkimage -n rk3288 -T rksd -d tpl/u-boot-tpl.bin u-boot-rockchip-with-spl.bin -+ cat spl/u-boot-spl-dtb.bin >> u-boot-rockchip-with-spl.bin -+ dd if=u-boot-dtb.img of=u-boot-rockchip-with-spl.bin seek=$((0x200 - 0x40)) conv=notrunc - fi - - } - - family_tweaks() { - if [[ $BOARD == tinkerboard ]]; then -- chroot $SDCARD /bin/bash -c "apt-get -y -qq install rfkill bluetooth bluez bluez-tools" 2>&1 -- chroot $SDCARD /bin/bash -c "systemctl --no-reload enable tinker-bluetooth.service" 2>&1 -+ chroot_sdcard_apt_get_install rfkill bluetooth bluez bluez-tools -+ [[ $BRANCH == legacy ]] && chroot_sdcard systemctl --no-reload enable tinker-bluetooth.service - if [[ -f "$SDCARD/etc/pulse/default.pa" ]]; then - sed -i -e "/#load-module module-alsa-sink/r $SRC/packages/bsp/rockchip/pulseaudio.txt" "$SDCARD/etc/pulse/default.pa" 2>&1 - else -@@ -99,10 +100,12 @@ family_tweaks_bsp() { - cp $SRC/packages/bsp/rockchip/70-gpio.rules $destination/etc/udev/rules.d - cp $SRC/packages/bsp/rockchip/71-i2c.rules $destination/etc/udev/rules.d - -- # Bluetooth -- install -m 755 $SRC/packages/bsp/rockchip/rtk_hciattach $destination/usr/bin -- install -m 755 $SRC/packages/bsp/rockchip/start_bt.sh $destination/usr/local/bin -- cp $SRC/packages/bsp/rockchip/tinker-bluetooth.service $destination/lib/systemd/system/ -+ # Tinkerboard Bluetooth (only legacy kernel, mainline uses serdev) -+ if [[ $BRANCH == legacy ]]; then -+ install -m 755 $SRC/packages/bsp/rockchip/rtk_hciattach $destination/usr/bin -+ install -m 755 $SRC/packages/bsp/rockchip/start_bt.sh $destination/usr/local/bin -+ cp $SRC/packages/bsp/rockchip/tinker-bluetooth.service $destination/lib/systemd/system/ -+ fi - - # Sound - cp $SRC/packages/bsp/rockchip/asound.conf $destination/etc/ - -From 0b7e6c6bb6a744d6b95038e9ab3b1ab7b1aa7027 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 31 Mar 2022 19:33:39 +0200 -Subject: [PATCH] armbian-next: update mvebu64.conf from master and use - functions - ---- - config/sources/families/mvebu64.conf | 57 +++++++++++++++++++++++++----------- - 1 file changed, 40 insertions(+), 17 deletions(-) - -diff --git a/config/sources/families/mvebu64.conf b/config/sources/families/mvebu64.conf -index 27c4e318a..bc79e1ec6 100644 ---- a/config/sources/families/mvebu64.conf -+++ b/config/sources/families/mvebu64.conf -@@ -2,22 +2,27 @@ enable_extension "marvell-tools" - ARCH=arm64 - BOOTBRANCH='branch:v2022.01' - BOOTENV_FILE='mvebu64.txt' --ATFSOURCE='https://github.com/MarvellEmbeddedProcessors/atf-marvell' -+ATFSOURCE='https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git' - ATFDIR='arm-trusted-firmware-espressobin' --ATFBRANCH='branch:atf-v1.5-armada-18.12' -+ATFBRANCH='branch:master' - ATF_USE_GCC='> 7.2' --ATF_COMPILER='aarch64-linux-gnu-' -+ -+if [[ "${SKIP_EXTERNAL_TOOLCHAINS}" == "yes" ]]; then -+ ATF_COMPILER='aarch64-linux-gnu-' -+else -+ ATF_COMPILER='aarch64-none-linux-gnu-' -+fi - - if [[ $BOARD = macchiatobin-doubleshot ]]; then - export SCP_BL2=$SRC/cache/sources/marvell-binaries/mrvl_scp_bl2.img - -- ATF_TARGET_MAP="DEBUG=1 USE_COHERENT_MEM=0 LOG_LEVEL=20 MV_DDR_PATH=$SRC/cache/sources/marvell-ddr SECURE=0 PLAT=a80x0_mcbin;;build/a80x0_mcbin/debug/bl31.bin" -+ ATF_TARGET_MAP="USE_COHERENT_MEM=0 LOG_LEVEL=20 MV_DDR_PATH=$SRC/cache/sources/marvell-ddr SECURE=0 PLAT=a80x0_mcbin;;build/a80x0_mcbin/release/bl31.bin" - UBOOT_TARGET_MAP="DEVICE_TREE=armada-8040-mcbin ;;flash-image.bin" - - BOOTSCRIPT="boot-macchiatobin-doubleshot.cmd:boot.cmd" - SERIALCON='ttyS0' - else -- ATF_TARGET_MAP="DEBUG=1 USE_COHERENT_MEM=0 LOG_LEVEL=20 SECURE=0 CLOCKSPRESET=CPU_800_DDR_800 DDR_TOPOLOGY=2 BOOTDEV=SPINOR PARTNUM=0 PLAT=a3700;;build/a3700/debug/bl31.bin" -+ ATF_TARGET_MAP="USE_COHERENT_MEM=0 LOG_LEVEL=20 SECURE=0 CLOCKSPRESET=CPU_800_DDR_800 DDR_TOPOLOGY=2 BOOTDEV=SPINOR PARTNUM=0 PLAT=a3700;;build/a3700/release/bl31.bin" - UBOOT_TARGET_MAP="DEVICE_TREE=armada-3720-espressobin ;;flash-image-*.bin" - - BOOTSCRIPT="boot-espressobin.cmd:boot.cmd" -@@ -65,7 +70,7 @@ write_uboot_platform() { - } - - family_tweaks() { -- chroot $SDCARD /bin/bash -c "apt-get -y -qq remove --auto-remove linux-sound-base alsa-base alsa-utils bluez>/dev/null 2>&1" -+ chroot_sdcard_apt_get remove --auto-remove linux-sound-base alsa-base alsa-utils bluez - [[ -f $SDCARD/etc/netplan/armbian-default.yaml ]] && sed -i "s/^ renderer.*/ renderer: networkd/" $SDCARD/etc/netplan/armbian-default.yaml - cp $SRC/packages/bsp/mvebu64/10* $SDCARD/etc/systemd/network/ - echo "#Marvell Espressobin Console" >> $SDCARD/etc/securetty -@@ -76,11 +81,13 @@ atf_custom_postprocess() { - # prepare compilers for postprocess - ubootdir="$SRC/cache/sources/$BOOTDIR/${BOOTBRANCH##*:}" - export ATF1=$toolchain/$ATF_COMPILER -- export ATF2=$(find_toolchain "arm-linux-gnueabi-" "> 7.0")/arm-linux-gnueabi- -+ if [[ "${SKIP_EXTERNAL_TOOLCHAINS}" == "yes" ]]; then -+ export TOOLCHAIN_NAME="arm-linux-gnueabi-" -+ else -+ export TOOLCHAIN_NAME="arm-none-eabi-" -+ fi -+ export ATF2=$(find_toolchain "$TOOLCHAIN_NAME" "> 10.0")/$TOOLCHAIN_NAME - export BL33=$ubootdir"/u-boot.bin" -- # copy extra DDR topology -- sed -i "s@^CUST | \[0-6\])@CUST | [0-7])@" $SRC/cache/sources/marvell-tools/script/buildtim.sh || true -- cp $SRC/packages/blobs/espressobin/DDR* $SRC/cache/sources/marvell-tools/tim/ddr/ - } - - uboot_custom_postprocess() { -@@ -88,18 +95,23 @@ uboot_custom_postprocess() { - rm $ubootdir/flash-image* - local atfdir="$SRC/cache/sources/$ATFDIR/${ATFBRANCH##*:}" - local ubootdir="$SRC/cache/sources/$BOOTDIR/${BOOTBRANCH##*:}" -+ local moxbootdir="$SRC/cache/sources/mox-boot" - cd $atfdir - - if [[ $BOARD = macchiatobin-doubleshot ]]; then -- make distclean >> $DEST/debug/compilation.log 2>&1 -+ run_host_command_logged make distclean - - FILENAME="flash-image.bin" - display_alert "Building $FILENAME" "" "info" - # http://wiki.macchiatobin.net/tiki-index.php?page=Build+from+source+-+Bootloader#Building_ATF -- make distclean >> $DEST/debug/compilation.log 2>&1 -- make USE_COHERENT_MEM=0 LOG_LEVEL=20 MV_DDR_PATH=$SRC/cache/sources/marvell-ddr PLAT=a80x0_mcbin CROSS_COMPILE=$ATF1 BL33=$BL33 all fip $CTHREADS >> $DEST/debug/compilation.log 2>&1 -- cp build/a80x0_mcbin/release/flash-image.bin $ubootdir/$FILENAME -+ run_host_command_logged make distclean -+ run_host_command_logged make USE_COHERENT_MEM=0 LOG_LEVEL=20 MV_DDR_PATH=$SRC/cache/sources/marvell-ddr PLAT=a80x0_mcbin CROSS_COMPILE=$ATF1 BL33=$BL33 all fip $CTHREADS -+ run_host_command_logged cp -pv build/a80x0_mcbin/release/flash-image.bin $ubootdir/$FILENAME - else -+ cd $moxbootdir -+ run_host_command_logged make CROSS_CM3=$ATF2 wtmi_app.bin -+ cd $atfdir -+ - clocks=(600_600 800_800 1000_800 1200_750) - topology=(512m_1cs_0 512m_2cs_0 1g_2cs_2 1g_1cs_4 2g_2cs_7 1g_1cs_5 2g_2cs_6) - for i in "${clocks[@]}"; do -@@ -109,9 +121,20 @@ uboot_custom_postprocess() { - DDR_TOPOLOGY="${j##*_}" - CLOCKSPRESET="CPU_${i%_*}_DDR_${i##*_}" - display_alert "Building $FILENAME" "" "info" -- make distclean >> $DEST/debug/compilation.log 2>&1 -- make MV_DDR_PATH=$SRC/cache/sources/marvell-ddr CROSS_COMPILE=$ATF1 DEBUG=1 USE_COHERENT_MEM=0 LOG_LEVEL=20 SECURE=0 CLOCKSPRESET=$CLOCKSPRESET DDR_TOPOLOGY=$DDR_TOPOLOGY BOOTDEV=SPINOR PARTNUM=0 PLAT=a3700 all fip BL33=$BL33 WTP=$SRC/cache/sources/marvell-tools $CTHREADS CROSS_CM3=$ATF2 >> $DEST/debug/compilation.log 2>&1 -- cp build/a3700/debug/flash-image.bin $ubootdir/$FILENAME -+ run_host_command_logged make distclean -+ run_host_command_logged make CROSS_COMPILE=$ATF1 \ -+ CROSS_CM3=$ATF2 \ -+ USE_COHERENT_MEM=0 \ -+ PLAT=a3700 \ -+ CLOCKSPRESET=$CLOCKSPRESET DDR_TOPOLOGY=$DDR_TOPOLOGY \ -+ MV_DDR_PATH=$SRC/cache/sources/marvell-ddr \ -+ WTP=$SRC/cache/sources/marvell-tools \ -+ CRYPTOPP_PATH=$SRC/cache/sources/cryptopp \ -+ BL33=$BL33 \ -+ WTMI_IMG=$moxbootdir/wtmi_app.bin \ -+ BOOTDEV=SPINOR PARTNUM=0 \ -+ LOG_LEVEL=20 all fip mrvl_flash $CTHREADS -+ run_host_command_logged cp -pv build/a3700/release/flash-image.bin $ubootdir/$FILENAME - done - done - fi - -From b1ded35c1baa90f16652299b433410fef216f8f7 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 31 Mar 2022 19:23:33 +0200 -Subject: [PATCH] armbian-next: git: fix `fetch_from_repo` with actual - submodules usage - ---- - lib/functions/general/git.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 3af8a6b3e..baf7f54d2 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -195,7 +195,7 @@ fetch_from_repo() { - cd "${git_work_dir}" || exit - local surl sref - surl=$(git config -f .gitmodules --get "submodule.$i.url") -- sref=$(git config -f .gitmodules --get "submodule.$i.branch") -+ sref=$(git config -f .gitmodules --get "submodule.$i.branch" || true) - if [[ -n $sref ]]; then - sref="branch:$sref" - else - -From 8996fb16048de112e985c9f2a4d5f896623b1cd0 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 31 Mar 2022 16:25:50 +0200 -Subject: [PATCH] armbian-next: `armbian-next`ify the `nvidia` extension after - rebase from master - -- driver version is configurable via `NVIDIA_DRIVER_VERSION` -- use runner function to log/error-handle/use apt cache/etc ---- - extensions/nvidia.sh | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/extensions/nvidia.sh b/extensions/nvidia.sh -index 2e3c55487..e329a7458 100644 ---- a/extensions/nvidia.sh -+++ b/extensions/nvidia.sh -@@ -1,13 +1,13 @@ --function pre_install_kernel_debs__build_nvidia_kernel_module() { -- -+function extension_prepare_config__build_nvidia_kernel_module() { - export INSTALL_HEADERS="yes" -- -+ declare -g NVIDIA_DRIVER_VERSION="${NVIDIA_DRIVER_VERSION:-"510"}" -+ display_alert "Forcing INSTALL_HEADERS=yes; using nVidia driver version ${NVIDIA_DRIVER_VERSION}" "${EXTENSION}" "debug" - } - - function post_install_kernel_debs__build_nvidia_kernel_module() { -- -- display_alert "Build kernel module" "${EXTENSION}" "info" -- chroot "${SDCARD}" /bin/bash -c "apt -y -qq install nvidia-dkms-510 nvidia-driver-510 nvidia-settings nvidia-common" >>"$DEST"/"${LOG_SUBPATH}"/install.log 2>&1 || { -- exit_with_error "${install_grub_cmdline} failed!" -- } -+ display_alert "Install nVidia packages, build kernel module in chroot" "${EXTENSION}" "info" -+ # chroot_sdcard_apt_get_install() is in lib/logging/runners.sh which handles "running" of stuff nicely. -+ # chroot_sdcard_apt_get_install() -> chroot_sdcard_apt_get() -> chroot_sdcard() -> run_host_command_logged_raw() -+ # it handles bash-specific quoting issues, apt proxies, logging, and errors. -+ chroot_sdcard_apt_get_install "nvidia-dkms-${NVIDIA_DRIVER_VERSION}" "nvidia-driver-${NVIDIA_DRIVER_VERSION}" nvidia-settings - } - -From d72e4b69754671ba464882cbca6b68c67e2c7c9a Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 10 Mar 2022 00:00:39 +0100 -Subject: [PATCH] rpi4b: there's no legacy branch anymore, remove it from - KERNEL_TARGET - ---- - config/boards/rpi4b.wip | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/config/boards/rpi4b.wip b/config/boards/rpi4b.wip -index 3c1926821..7d184e007 100644 ---- a/config/boards/rpi4b.wip -+++ b/config/boards/rpi4b.wip -@@ -1,7 +1,7 @@ - # Broadcom BCM2711 quad core 1-8Gb RAM SoC USB3 GBE USB-C WiFi/BT - export BOARD_NAME="Raspberry Pi 4" - export BOARDFAMILY="bcm2711" --export KERNEL_TARGET="legacy,current,edge" -+export KERNEL_TARGET="current,edge" - export FK__MACHINE_MODEL="Raspberry Pi 4 Model B" # flash kernel (FK) configuration - export ASOUND_STATE="asound.state.rpi" - - -From 1dbe3c33255a6947743bed2c3dd0ba067035208f Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 9 Mar 2022 13:19:20 +0100 -Subject: [PATCH] armbian-next: `download_and_verify` non-error handled; - logging is messy [WiP] [HACK] - ---- - lib/functions/general/downloads.sh | 25 +++++++++++-------------- - 1 file changed, 11 insertions(+), 14 deletions(-) - -diff --git a/lib/functions/general/downloads.sh b/lib/functions/general/downloads.sh -index b51f0d9c4..6c5171f3c 100644 ---- a/lib/functions/general/downloads.sh -+++ b/lib/functions/general/downloads.sh -@@ -22,7 +22,12 @@ function webseed() { - echo "${text}" - } - --download_and_verify() { -+# Non-error handled version @TODO: might be a terrible idea? -+function download_and_verify() { -+ download_and_verify_internal "${@}" || true -+} -+ -+function download_and_verify_internal() { - local remotedir=$1 - local filename=$2 - local localdir=$SRC/cache/${remotedir//_/} -@@ -40,25 +45,20 @@ download_and_verify() { - return - fi - -- # allow errors here, too hackish to actually handle them -- set +e -- - # switch to china mirror if US timeouts -- timeout 10 curl --head --fail --silent "${server}${remotedir}/${filename}" 2>&1 > /dev/null || true -+ run_host_command_logged timeout 10 curl --head --fail --silent "${server}${remotedir}/${filename}" - if [[ $? -ne 7 && $? -ne 22 && $? -ne 0 ]]; then - display_alert "Timeout from $server" "retrying" "info" - server="https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/" - - # switch to another china mirror if tuna timeouts -- timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename} 2>&1 > /dev/null -+ run_host_command_logged timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename} - if [[ $? -ne 7 && $? -ne 22 && $? -ne 0 ]]; then - display_alert "Timeout from $server" "retrying" "info" - server="https://mirrors.bfsu.edu.cn/armbian-releases/" - fi - fi - -- set -e # Back to normal -- - # check if file exists on remote server before running aria2 downloader - [[ ! $(timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename}) ]] && return - -@@ -73,7 +73,7 @@ download_and_verify() { - else - # download control file - local torrent=${server}$remotedir/${filename}.torrent -- aria2c --download-result=hide --disable-ipv6=true --summary-interval=0 --console-log-level=error --auto-file-renaming=false \ -+ run_host_command_logged aria2c --download-result=hide --disable-ipv6=true --summary-interval=0 --console-log-level=error --auto-file-renaming=false \ - --continue=false --allow-overwrite=true --dir="${localdir}" ${server}${remotedir}/${filename}.asc $(webseed "$remotedir/${filename}.asc") -o "${filename}.asc" - [[ $? -ne 0 ]] && display_alert "Failed to download control file" "" "wrn" - fi -@@ -102,7 +102,7 @@ download_and_verify() { - if [[ ! -f "${localdir}/${filename}.complete" ]]; then - if [[ ! $(timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename} 2>&1 > /dev/null) ]]; then - display_alert "downloading from $(echo $server | cut -d'/' -f3 | cut -d':' -f1) using http(s) network" "$filename" -- aria2c --download-result=hide --rpc-save-upload-metadata=false --console-log-level=error \ -+ run_host_command_logged aria2c --download-result=hide --rpc-save-upload-metadata=false --console-log-level=error \ - --dht-file-path="${SRC}"/cache/.aria2/dht.dat --disable-ipv6=true --summary-interval=0 --auto-file-renaming=false --dir="${localdir}" ${server}${remotedir}/${filename} $(webseed "${remotedir}/${filename}") -o "${filename}" - # mark complete - [[ $? -eq 0 ]] && touch "${localdir}/${filename}.complete" && echo "" -@@ -141,10 +141,8 @@ download_and_verify() { - --recv-keys 9F0E78D5) - fi - -- gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --verify \ -- --trust-model always -q "${localdir}/${filename}.asc" -+ gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --verify --trust-model always -q "${localdir}/${filename}.asc" - [[ ${PIPESTATUS[0]} -eq 0 ]] && verified=true && display_alert "Verified" "PGP" "info" -- - else - md5sum -c --status "${localdir}/${filename}.asc" && verified=true && display_alert "Verified" "MD5" "info" - fi -@@ -160,6 +158,5 @@ download_and_verify() { - else - exit_with_error "verification failed" - fi -- - fi - } - -From 30ee27b4fd6d9b578ad19ca9b0b484809242d77f Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 21 Mar 2022 17:21:03 +0100 -Subject: [PATCH] armbian-next: logging: let ANSI colors pass to logfile; - CALLER_PID instead of BASHPID in subshell - ---- - lib/functions/logging/logging.sh | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index cac13b902..8e98b569a 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -209,8 +209,13 @@ function display_alert() { - - # Now, log to file. This will be colorized later by ccze and such, so remove any colors it might already have. - # See also the stuff done in runners.sh for logging exact command lines and runtimes. -+ # the "echo" runs in a subshell due to the "sed" pipe (! important !), so we store BASHPID (current subshell) outside the scope -+ # BASHPID is the current subshell; $$ is parent's?; $_ is the current bashopts -+ local CALLER_PID="${BASHPID}" - if [[ -f "${CURRENT_LOGFILE}" ]]; then -- echo -e "--> [${level_indicator} ] $(printf "%4s" "${SECONDS}"): $$ - ${BASHPID}: $-: ${level}: ${1} [ ${2} ]" | sed 's/\x1b\[[0-9;]*m//g' >> "${CURRENT_LOGFILE}" -+ # ANSI-less version -+ #echo -e "--> ${level_indicator} $(printf "%4s" "${SECONDS}"): $$ - ${CALLER_PID} - ${BASHPID}: $-: ${level}: ${1} [ ${2} ]" >> "${CURRENT_LOGFILE}" # | sed 's/\x1b\[[0-9;]*m//g' -+ echo -e "--> ${level_indicator} $(printf "%4s" "${SECONDS}"): $$ - ${CALLER_PID} - ${BASHPID}: $-: ${level}: ${1} [ ${2} ]" >> "${CURRENT_LOGFILE}" # | sed 's/\x1b\[[0-9;]*m//g' - fi - - if [[ ${skip_screen} -eq 1 ]]; then -@@ -224,7 +229,7 @@ function display_alert() { - - local pids_info="" - if [[ "${SHOW_PIDS}" == "yes" ]]; then -- pids_info="${tool_color}(${normal_color}$$ - ${BASHPID}${tool_color})" # BASHPID is the current subshell; $$ is parent's? -+ pids_info="${tool_color}(${normal_color}$$ - ${CALLER_PID}${tool_color})" # BASHPID is the current subshell (should be equal to CALLER_PID here); $$ is parent's? - fi - - local bashopts_info="" - -From a63ba98aefbb6ba7998ad8abedc5d239e1520191 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 21 Mar 2022 17:20:17 +0100 -Subject: [PATCH] armbian-next: enable HTTPS CONNECT in Armbian-managed - apt-cacher-ng configuration - -- PPAs require it ---- - lib/functions/host/apt-cacher-ng.sh | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/lib/functions/host/apt-cacher-ng.sh b/lib/functions/host/apt-cacher-ng.sh -index a917f6cb1..4801784c7 100644 ---- a/lib/functions/host/apt-cacher-ng.sh -+++ b/lib/functions/host/apt-cacher-ng.sh -@@ -35,8 +35,9 @@ function acng_configure_and_restart_acng() { - RedirMax: 15 - ReuseConnections: 1 - -- # Allow HTTPS CONNECT, although this is not ideal, since packages are not actually cached then. Disabled for now. -- # PassThroughPattern: .* -+ # Allow HTTPS CONNECT, although this is not ideal, since packages are not actually cached. -+ # Enabled, since PPA's require this. -+ PassThroughPattern: .* - ACNG_CONFIG - - # Ensure correct permissions on the directories - -From d3641a69a60266f3d7a75109fa6e396b20d85700 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 31 Mar 2022 13:41:53 +0200 -Subject: [PATCH] armbian-next: don't loop forever if we can't obtain - ARMBIAN_MIRROR from redirector - -- also, don't even try to do it if `SKIP_ARMBIAN_REPO=yes` ---- - lib/functions/configuration/main-config.sh | 15 +++++++++++++-- - 1 file changed, 13 insertions(+), 2 deletions(-) - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index ba4fe5452..57561089a 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -328,10 +328,21 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - fi - - # don't use mirrors that throws garbage on 404 -- if [[ -z ${ARMBIAN_MIRROR} ]]; then -+ if [[ -z ${ARMBIAN_MIRROR} && "${SKIP_ARMBIAN_REPO}" != "yes" ]]; then -+ declare -i armbian_mirror_tries=1 - while true; do -+ display_alert "Obtaining Armbian mirror" "via https://redirect.armbian.com" "debug" - ARMBIAN_MIRROR=$(wget -SO- -T 1 -t 1 https://redirect.armbian.com 2>&1 | egrep -i "Location" | awk '{print $2}' | head -1) -- [[ ${ARMBIAN_MIRROR} != *armbian.hosthatch* ]] && break -+ if [[ ${ARMBIAN_MIRROR} != *armbian.hosthatch* ]]; then # @TODO: hosthatch is not good enough. Why? -+ display_alert "Obtained Armbian mirror OK" "${ARMBIAN_MIRROR}" "debug" -+ break -+ else -+ display_alert "Obtained Armbian mirror is invalid, retrying..." "${ARMBIAN_MIRROR}" "debug" -+ fi -+ armbian_mirror_tries=$((armbian_mirror_tries + 1)) -+ if [[ $armbian_mirror_tries -ge 5 ]]; then -+ exit_with_error "Unable to obtain ARMBIAN_MIRROR after ${armbian_mirror_tries} tries. Please set ARMBIAN_MIRROR to a valid mirror manually, or avoid the automatic mirror selection by setting SKIP_ARMBIAN_REPO=yes" -+ fi - done - fi - - -From 617e2ef1d6ff85e0bc6d5c24bc391a21e125f2aa Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 31 Mar 2022 12:25:09 +0200 -Subject: [PATCH] armbian-next: manual merge (14) of all changes between - revisions 13469fd8a9eda4a53f87b7dfee0f431dbab8db54 and - 09e416e31cc01ece4533a65f02a470a4c21b90ea - -- also editorconfig and compile.sh (root) changes ---- - .editorconfig | 6 +++ - .../browsers/armbian/create_desktop_package.sh | 2 +- - .../mate/armbian/create_desktop_package.sh | 46 +++++++++---------- - .../browsers/armbian/create_desktop_package.sh | 2 +- - .../cinnamon/armbian/create_desktop_package.sh | 2 +- - .../lxde/armbian/create_desktop_package.sh | 46 +++++++++---------- - .../mate/armbian/create_desktop_package.sh | 46 +++++++++---------- - .../browsers/armbian/create_desktop_package.sh | 2 +- - .../budgie/armbian/create_desktop_package.sh | 2 +- - .../cinnamon/armbian/create_desktop_package.sh | 2 +- - .../deepin/armbian/create_desktop_package.sh | 2 +- - .../armbian/create_desktop_package.sh | 2 +- - .../gnome/armbian/create_desktop_package.sh | 2 +- - .../mate/armbian/create_desktop_package.sh | 2 +- - .../xfce/debian/armbian-bsp-desktop/prepare.sh | 1 - - .../browsers/armbian/create_desktop_package.sh | 2 +- - .../lxde/armbian/create_desktop_package.sh | 46 +++++++++---------- - .../mate/armbian/create_desktop_package.sh | 46 +++++++++---------- - .../xfce/armbian/create_desktop_package.sh | 2 +- - .../sources/families/include/rockchip64_common.inc | 4 +- - config/templates/Dockerfile | 10 +++-- - lib/functions/cli/utils-cli.sh | 6 ++- - lib/functions/compilation/patch/kernel-drivers.sh | 12 ++--- - lib/functions/configuration/main-config.sh | 2 +- - lib/functions/host/prepare-host.sh | 2 +- - lib/functions/rootfs/distro-specific.sh | 32 ++++++++----- - lib/functions/rootfs/rootfs-desktop.sh | 52 +++++++++++++--------- - 27 files changed, 203 insertions(+), 178 deletions(-) - -diff --git a/.editorconfig b/.editorconfig -index f00e1c57a..fe455e4e2 100644 ---- a/.editorconfig -+++ b/.editorconfig -@@ -16,6 +16,12 @@ indent_style = space - indent_size = 4 - insert_final_newline = false - -+[*.json] -+indent_style = space -+indent_size = 4 -+trim_trailing_whitespace = true -+insert_final_newline = true -+ - # Custom Armbian formatting for bash sources and configuration - [*.{sh,inc,conf,eos,wip,tvb,csc}] - indent_style = tab -diff --git a/config/desktop/bullseye/appgroups/browsers/armbian/create_desktop_package.sh b/config/desktop/bullseye/appgroups/browsers/armbian/create_desktop_package.sh -index f3670e815..a1bc70a52 100644 ---- a/config/desktop/bullseye/appgroups/browsers/armbian/create_desktop_package.sh -+++ b/config/desktop/bullseye/appgroups/browsers/armbian/create_desktop_package.sh -@@ -1,4 +1,4 @@ - # install optimized browser configurations - cp "${SRC}"/packages/blobs/desktop/chromium.conf "${destination}"/etc/armbian --cp "${SRC}"/packages/blobs/desktop/firefox.conf "${destination}"/etc/armbian -+cp "${SRC}"/packages/blobs/desktop/firefox.conf "${destination}"/etc/armbian - cp -R "${SRC}"/packages/blobs/desktop/chromium "${destination}"/etc/armbian -diff --git a/config/desktop/bullseye/environments/mate/armbian/create_desktop_package.sh b/config/desktop/bullseye/environments/mate/armbian/create_desktop_package.sh -index 6206b92e0..25186ea4e 100644 ---- a/config/desktop/bullseye/environments/mate/armbian/create_desktop_package.sh -+++ b/config/desktop/bullseye/environments/mate/armbian/create_desktop_package.sh -@@ -14,30 +14,30 @@ mkdir -p "${destination}"/usr/share/backgrounds/armbian/ - cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/armbian/ - - mkdir -p "${destination}"/usr/share/mate-background-properties --cat <<- EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml -- -- -- -- -- Armbian light -- /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg -- zoom -- #ffffff -- #000000 -- -- -- Armbian dark -- /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg -- zoom -- #ffffff -- #000000 -- -- -+cat <<-EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml -+ -+ -+ -+ -+ Armbian light -+ /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg -+ zoom -+ #ffffff -+ #000000 -+ -+ -+ Armbian dark -+ /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg -+ zoom -+ #ffffff -+ #000000 -+ -+ - EOF - - mkdir -p "${destination}"/usr/share/glib-2.0/schemas --cat <<- EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override -- [org.gnome.desktop.background] -- picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg' -- show-desktop-icons=true -+cat <<-EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override -+[org.gnome.desktop.background] -+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg' -+show-desktop-icons=true - EOF -diff --git a/config/desktop/buster/appgroups/browsers/armbian/create_desktop_package.sh b/config/desktop/buster/appgroups/browsers/armbian/create_desktop_package.sh -index f3670e815..a1bc70a52 100644 ---- a/config/desktop/buster/appgroups/browsers/armbian/create_desktop_package.sh -+++ b/config/desktop/buster/appgroups/browsers/armbian/create_desktop_package.sh -@@ -1,4 +1,4 @@ - # install optimized browser configurations - cp "${SRC}"/packages/blobs/desktop/chromium.conf "${destination}"/etc/armbian --cp "${SRC}"/packages/blobs/desktop/firefox.conf "${destination}"/etc/armbian -+cp "${SRC}"/packages/blobs/desktop/firefox.conf "${destination}"/etc/armbian - cp -R "${SRC}"/packages/blobs/desktop/chromium "${destination}"/etc/armbian -diff --git a/config/desktop/buster/environments/cinnamon/armbian/create_desktop_package.sh b/config/desktop/buster/environments/cinnamon/armbian/create_desktop_package.sh -index fe77b28a5..63b8cb05b 100755 ---- a/config/desktop/buster/environments/cinnamon/armbian/create_desktop_package.sh -+++ b/config/desktop/buster/environments/cinnamon/armbian/create_desktop_package.sh -@@ -23,7 +23,7 @@ cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/ - - # generate wallpaper list for background changer - mkdir -p "${destination}"/usr/share/cinnamon-background-properties --cat << EOF > "${destination}"/usr/share/cinnamon-background-properties/armbian.xml -+cat < "${destination}"/usr/share/cinnamon-background-properties/armbian.xml - - - -diff --git a/config/desktop/buster/environments/lxde/armbian/create_desktop_package.sh b/config/desktop/buster/environments/lxde/armbian/create_desktop_package.sh -index 6206b92e0..25186ea4e 100644 ---- a/config/desktop/buster/environments/lxde/armbian/create_desktop_package.sh -+++ b/config/desktop/buster/environments/lxde/armbian/create_desktop_package.sh -@@ -14,30 +14,30 @@ mkdir -p "${destination}"/usr/share/backgrounds/armbian/ - cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/armbian/ - - mkdir -p "${destination}"/usr/share/mate-background-properties --cat <<- EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml -- -- -- -- -- Armbian light -- /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg -- zoom -- #ffffff -- #000000 -- -- -- Armbian dark -- /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg -- zoom -- #ffffff -- #000000 -- -- -+cat <<-EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml -+ -+ -+ -+ -+ Armbian light -+ /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg -+ zoom -+ #ffffff -+ #000000 -+ -+ -+ Armbian dark -+ /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg -+ zoom -+ #ffffff -+ #000000 -+ -+ - EOF - - mkdir -p "${destination}"/usr/share/glib-2.0/schemas --cat <<- EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override -- [org.gnome.desktop.background] -- picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg' -- show-desktop-icons=true -+cat <<-EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override -+[org.gnome.desktop.background] -+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg' -+show-desktop-icons=true - EOF -diff --git a/config/desktop/buster/environments/mate/armbian/create_desktop_package.sh b/config/desktop/buster/environments/mate/armbian/create_desktop_package.sh -index 6206b92e0..25186ea4e 100644 ---- a/config/desktop/buster/environments/mate/armbian/create_desktop_package.sh -+++ b/config/desktop/buster/environments/mate/armbian/create_desktop_package.sh -@@ -14,30 +14,30 @@ mkdir -p "${destination}"/usr/share/backgrounds/armbian/ - cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/armbian/ - - mkdir -p "${destination}"/usr/share/mate-background-properties --cat <<- EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml -- -- -- -- -- Armbian light -- /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg -- zoom -- #ffffff -- #000000 -- -- -- Armbian dark -- /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg -- zoom -- #ffffff -- #000000 -- -- -+cat <<-EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml -+ -+ -+ -+ -+ Armbian light -+ /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg -+ zoom -+ #ffffff -+ #000000 -+ -+ -+ Armbian dark -+ /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg -+ zoom -+ #ffffff -+ #000000 -+ -+ - EOF - - mkdir -p "${destination}"/usr/share/glib-2.0/schemas --cat <<- EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override -- [org.gnome.desktop.background] -- picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg' -- show-desktop-icons=true -+cat <<-EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override -+[org.gnome.desktop.background] -+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg' -+show-desktop-icons=true - EOF -diff --git a/config/desktop/focal/appgroups/browsers/armbian/create_desktop_package.sh b/config/desktop/focal/appgroups/browsers/armbian/create_desktop_package.sh -index f3670e815..a1bc70a52 100644 ---- a/config/desktop/focal/appgroups/browsers/armbian/create_desktop_package.sh -+++ b/config/desktop/focal/appgroups/browsers/armbian/create_desktop_package.sh -@@ -1,4 +1,4 @@ - # install optimized browser configurations - cp "${SRC}"/packages/blobs/desktop/chromium.conf "${destination}"/etc/armbian --cp "${SRC}"/packages/blobs/desktop/firefox.conf "${destination}"/etc/armbian -+cp "${SRC}"/packages/blobs/desktop/firefox.conf "${destination}"/etc/armbian - cp -R "${SRC}"/packages/blobs/desktop/chromium "${destination}"/etc/armbian -diff --git a/config/desktop/focal/environments/budgie/armbian/create_desktop_package.sh b/config/desktop/focal/environments/budgie/armbian/create_desktop_package.sh -index ad93e7d6a..0f5216cfe 100755 ---- a/config/desktop/focal/environments/budgie/armbian/create_desktop_package.sh -+++ b/config/desktop/focal/environments/budgie/armbian/create_desktop_package.sh -@@ -23,7 +23,7 @@ cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/ - - #generate wallpaper list for background changer - mkdir -p "${destination}"/usr/share/cinnamon-background-properties --cat << EOF > "${destination}"/usr/share/cinnamon-background-properties/armbian.xml -+cat < "${destination}"/usr/share/cinnamon-background-properties/armbian.xml - - - -diff --git a/config/desktop/focal/environments/cinnamon/armbian/create_desktop_package.sh b/config/desktop/focal/environments/cinnamon/armbian/create_desktop_package.sh -index fe77b28a5..63b8cb05b 100755 ---- a/config/desktop/focal/environments/cinnamon/armbian/create_desktop_package.sh -+++ b/config/desktop/focal/environments/cinnamon/armbian/create_desktop_package.sh -@@ -23,7 +23,7 @@ cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/ - - # generate wallpaper list for background changer - mkdir -p "${destination}"/usr/share/cinnamon-background-properties --cat << EOF > "${destination}"/usr/share/cinnamon-background-properties/armbian.xml -+cat < "${destination}"/usr/share/cinnamon-background-properties/armbian.xml - - - -diff --git a/config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh b/config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh -index 78f4d23be..aea442e71 100755 ---- a/config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh -+++ b/config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh -@@ -23,7 +23,7 @@ cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/ - - #generate wallpaper list for background changer - mkdir -p "${destination}"/usr/share/deepin-background-properties --cat << EOF > "${destination}"/usr/share/deepin-background-properties/armbian.xml -+cat < "${destination}"/usr/share/deepin-background-properties/armbian.xml - - - -diff --git a/config/desktop/focal/environments/enlightenment/armbian/create_desktop_package.sh b/config/desktop/focal/environments/enlightenment/armbian/create_desktop_package.sh -index 1f1ede5e5..f1bdc7146 100755 ---- a/config/desktop/focal/environments/enlightenment/armbian/create_desktop_package.sh -+++ b/config/desktop/focal/environments/enlightenment/armbian/create_desktop_package.sh -@@ -23,7 +23,7 @@ cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/ - - #generate wallpaper list for background changer - mkdir -p "${destination}"/usr/share/enlightenment-background-properties --cat << EOF > "${destination}"/usr/share/enlightenment-background-properties/armbian.xml -+cat < "${destination}"/usr/share/enlightenment-background-properties/armbian.xml - - - -diff --git a/config/desktop/focal/environments/gnome/armbian/create_desktop_package.sh b/config/desktop/focal/environments/gnome/armbian/create_desktop_package.sh -index d23a7109c..019868334 100755 ---- a/config/desktop/focal/environments/gnome/armbian/create_desktop_package.sh -+++ b/config/desktop/focal/environments/gnome/armbian/create_desktop_package.sh -@@ -23,7 +23,7 @@ cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/ - - #generate wallpaper list for background changer - mkdir -p "${destination}"/usr/share/gnome-background-properties --cat << EOF > "${destination}"/usr/share/gnome-background-properties/armbian.xml -+cat < "${destination}"/usr/share/gnome-background-properties/armbian.xml - - - -diff --git a/config/desktop/focal/environments/mate/armbian/create_desktop_package.sh b/config/desktop/focal/environments/mate/armbian/create_desktop_package.sh -index ce88f653a..ccd978837 100755 ---- a/config/desktop/focal/environments/mate/armbian/create_desktop_package.sh -+++ b/config/desktop/focal/environments/mate/armbian/create_desktop_package.sh -@@ -23,7 +23,7 @@ cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/ - - #generate wallpaper list for background changer - mkdir -p "${destination}"/usr/share/mate-background-properties --cat << EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml -+cat < "${destination}"/usr/share/mate-background-properties/armbian.xml - - - -diff --git a/config/desktop/focal/environments/xfce/debian/armbian-bsp-desktop/prepare.sh b/config/desktop/focal/environments/xfce/debian/armbian-bsp-desktop/prepare.sh -index 8b1378917..e69de29bb 100644 ---- a/config/desktop/focal/environments/xfce/debian/armbian-bsp-desktop/prepare.sh -+++ b/config/desktop/focal/environments/xfce/debian/armbian-bsp-desktop/prepare.sh -@@ -1 +0,0 @@ -- -diff --git a/config/desktop/sid/appgroups/browsers/armbian/create_desktop_package.sh b/config/desktop/sid/appgroups/browsers/armbian/create_desktop_package.sh -index f3670e815..a1bc70a52 100644 ---- a/config/desktop/sid/appgroups/browsers/armbian/create_desktop_package.sh -+++ b/config/desktop/sid/appgroups/browsers/armbian/create_desktop_package.sh -@@ -1,4 +1,4 @@ - # install optimized browser configurations - cp "${SRC}"/packages/blobs/desktop/chromium.conf "${destination}"/etc/armbian --cp "${SRC}"/packages/blobs/desktop/firefox.conf "${destination}"/etc/armbian -+cp "${SRC}"/packages/blobs/desktop/firefox.conf "${destination}"/etc/armbian - cp -R "${SRC}"/packages/blobs/desktop/chromium "${destination}"/etc/armbian -diff --git a/config/desktop/sid/environments/lxde/armbian/create_desktop_package.sh b/config/desktop/sid/environments/lxde/armbian/create_desktop_package.sh -index 6206b92e0..25186ea4e 100644 ---- a/config/desktop/sid/environments/lxde/armbian/create_desktop_package.sh -+++ b/config/desktop/sid/environments/lxde/armbian/create_desktop_package.sh -@@ -14,30 +14,30 @@ mkdir -p "${destination}"/usr/share/backgrounds/armbian/ - cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/armbian/ - - mkdir -p "${destination}"/usr/share/mate-background-properties --cat <<- EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml -- -- -- -- -- Armbian light -- /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg -- zoom -- #ffffff -- #000000 -- -- -- Armbian dark -- /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg -- zoom -- #ffffff -- #000000 -- -- -+cat <<-EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml -+ -+ -+ -+ -+ Armbian light -+ /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg -+ zoom -+ #ffffff -+ #000000 -+ -+ -+ Armbian dark -+ /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg -+ zoom -+ #ffffff -+ #000000 -+ -+ - EOF - - mkdir -p "${destination}"/usr/share/glib-2.0/schemas --cat <<- EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override -- [org.gnome.desktop.background] -- picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg' -- show-desktop-icons=true -+cat <<-EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override -+[org.gnome.desktop.background] -+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg' -+show-desktop-icons=true - EOF -diff --git a/config/desktop/sid/environments/mate/armbian/create_desktop_package.sh b/config/desktop/sid/environments/mate/armbian/create_desktop_package.sh -index 6206b92e0..25186ea4e 100644 ---- a/config/desktop/sid/environments/mate/armbian/create_desktop_package.sh -+++ b/config/desktop/sid/environments/mate/armbian/create_desktop_package.sh -@@ -14,30 +14,30 @@ mkdir -p "${destination}"/usr/share/backgrounds/armbian/ - cp "${SRC}"/packages/blobs/desktop/wallpapers/armbian*.jpg "${destination}"/usr/share/backgrounds/armbian/ - - mkdir -p "${destination}"/usr/share/mate-background-properties --cat <<- EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml -- -- -- -- -- Armbian light -- /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg -- zoom -- #ffffff -- #000000 -- -- -- Armbian dark -- /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg -- zoom -- #ffffff -- #000000 -- -- -+cat <<-EOF > "${destination}"/usr/share/mate-background-properties/armbian.xml -+ -+ -+ -+ -+ Armbian light -+ /usr/share/backgrounds/armbian/armbian18-Dre0x-Minum-light-3840x2160.jpg -+ zoom -+ #ffffff -+ #000000 -+ -+ -+ Armbian dark -+ /usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg -+ zoom -+ #ffffff -+ #000000 -+ -+ - EOF - - mkdir -p "${destination}"/usr/share/glib-2.0/schemas --cat <<- EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override -- [org.gnome.desktop.background] -- picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg' -- show-desktop-icons=true -+cat <<-EOF > "${destination}"/usr/share/glib-2.0/schemas/org.gnome.desktop.background.gschema.override -+[org.gnome.desktop.background] -+picture-uri='file:///usr/share/backgrounds/armbian/armbian03-Dre0x-Minum-dark-3840x2160.jpg' -+show-desktop-icons=true - EOF -diff --git a/config/desktop/sid/environments/xfce/armbian/create_desktop_package.sh b/config/desktop/sid/environments/xfce/armbian/create_desktop_package.sh -index 3d2f0723d..2da78a2a9 100644 ---- a/config/desktop/sid/environments/xfce/armbian/create_desktop_package.sh -+++ b/config/desktop/sid/environments/xfce/armbian/create_desktop_package.sh -@@ -7,7 +7,7 @@ cp -R "${SRC}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel - - # using different icon pack. Workaround due to this bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=867779 - sed -i 's//g' \ -- "${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml -+"${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml - - # install dedicated startup icons - mkdir -p "${destination}"/usr/share/pixmaps/armbian "${destination}"/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/ -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index eb5ab78b2..cd9541c3b 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -16,7 +16,7 @@ PACKAGE_LIST_FAMILY="ethtool" - - RKBIN_DIR="$SRC/cache/sources/rkbin-tools" - --BOOT_SOC=$(expr $BOOTCONFIG : '.*\(rk[[:digit:]]\+.*\)_.*') -+BOOT_SOC=${BOOT_SOC:=$(expr $BOOTCONFIG : '.*\(rk[[:digit:]]\+.*\)_.*')} - - CPUMIN=${CPUMIN:="408000"} - -@@ -69,7 +69,7 @@ elif [[ $BOOT_SOC == rk3568 ]]; then - - BOOT_SCENARIO="${BOOT_SCENARIO:=spl-blobs}" - DDR_BLOB='rk35/rk3568_ddr_1560MHz_v1.10.bin' -- BL31_BLOB='rk35/rk3568_bl31_v1.29.elf' -+ BL31_BLOB='rk35/rk3568_bl31_v1.28.elf' - - elif [[ $BOARD == rockpi-s ]]; then - -diff --git a/config/templates/Dockerfile b/config/templates/Dockerfile -index 9a56ca2e9..b9cfa9640 100644 ---- a/config/templates/Dockerfile -+++ b/config/templates/Dockerfile -@@ -1,4 +1,7 @@ --FROM ubuntu:rolling -+ARG BASE_IMAGE=ubuntu:jammy -+FROM $BASE_IMAGE as armbian_builder -+ARG ARM_GCC_COMPILER='g++-11-arm-linux-gnueabihf' -+ENV ARM_GCC_COMPILER $ARM_GCC_COMPILER - ARG DEBIAN_FRONTEND=noninteractive - RUN apt-get update && apt-get -y dist-upgrade && apt-get -y install \ - joe \ -@@ -20,6 +23,7 @@ RUN sh -c " \ - RUN apt-get update \ - && apt-get -y dist-upgrade \ - && apt-get install -y --no-install-recommends \ -+ $ARM_GCC_COMPILER \ - acl \ - aptly \ - aria2 \ -@@ -47,14 +51,11 @@ RUN apt-get update \ - fakeroot \ - fdisk \ - flex \ -- g++-arm-linux-gnueabihf \ - gawk \ - gcc-aarch64-linux-gnu \ - gcc-arm-linux-gnueabihf \ - gcc-arm-linux-gnueabi \ - gcc-arm-none-eabi \ -- gcc-aarch64-linux-gnu \ -- g++-aarch64-linux-gnu \ - gdisk \ - git \ - imagemagick \ -@@ -72,6 +73,7 @@ RUN apt-get update \ - libpython2.7-dev \ - libpython3-dev \ - libssl-dev \ -+ libssl1.1 \ - libusb-1.0-0-dev \ - linux-base \ - libmpc-dev \ -diff --git a/lib/functions/cli/utils-cli.sh b/lib/functions/cli/utils-cli.sh -index d9f6a571c..a48de5d3a 100644 ---- a/lib/functions/cli/utils-cli.sh -+++ b/lib/functions/cli/utils-cli.sh -@@ -111,7 +111,7 @@ function prepare_userpatches() { - mkdir -p "${SRC}"/userpatches - - # Create example configs if none found in userpatches -- if ! ls "${SRC}"/userpatches/{config-example.conf,config-docker.conf,config-vagrant.conf} 1> /dev/null 2>&1; then -+ if ! ls "${SRC}"/userpatches/{config-default.conf,config-docker.conf,config-vagrant.conf} 1> /dev/null 2>&1; then - - # Migrate old configs - if ls "${SRC}"/*.conf 1> /dev/null 2>&1; then -@@ -126,6 +126,10 @@ function prepare_userpatches() { - # Create example config - if [[ ! -f "${SRC}"/userpatches/config-example.conf ]]; then - cp "${SRC}"/config/templates/config-example.conf "${SRC}"/userpatches/config-example.conf || exit 1 -+ fi -+ -+ # Link default config to example config -+ if [[ ! -f "${SRC}"/userpatches/config-default.conf ]]; then - ln -fs config-example.conf "${SRC}"/userpatches/config-default.conf || exit 1 - fi - -diff --git a/lib/functions/compilation/patch/kernel-drivers.sh b/lib/functions/compilation/patch/kernel-drivers.sh -index 0f9d54bfe..f921591a7 100644 ---- a/lib/functions/compilation/patch/kernel-drivers.sh -+++ b/lib/functions/compilation/patch/kernel-drivers.sh -@@ -305,12 +305,8 @@ function prepare_extra_kernel_drivers() { - sed -i '/source "drivers\/net\/wireless\/ti\/Kconfig"/a source "drivers\/net\/wireless\/rtl8811cu\/Kconfig"' \ - "$kerneldir/drivers/net/wireless/Kconfig" - -- # add support for K5.11+ -- process_patch_file "${SRC}/patch/misc/wireless-rtl8811cu.patch" "applying" -- -- # add support for K5.12+ -- process_patch_file "${SRC}/patch/misc/wireless-realtek-8811cu-5.12.patch" "applying" -- process_patch_file "${SRC}/patch/misc/wireless-realtek-8811cu-xxx.patch" "applying" -+ # add support for K5.17+ -+ process_patch_file "${SRC}/patch/misc/wireless-realtek-8811cu-5.17.patch" "applying" - - fi - -@@ -547,8 +543,8 @@ function prepare_extra_kernel_drivers() { - sed -i '/source "drivers\/net\/wireless\/ti\/Kconfig"/a source "drivers\/net\/wireless\/rtl8822bs\/Kconfig"' \ - $kerneldir/drivers/net/wireless/Kconfig - -- # add support for K5.11+ -- process_patch_file "${SRC}/patch/misc/wireless-rtl8822bs.patch" "applying" -+ # add support for K5.11+ -+ process_patch_file "${SRC}/patch/misc/wireless-rtl8822bs.patch" "applying" - - fi - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 6edde8258..ba4fe5452 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -32,7 +32,7 @@ function do_main_configuration() { - [[ -z $EXIT_PATCHING_ERROR ]] && EXIT_PATCHING_ERROR="" # exit patching if failed - [[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board - cd "${SRC}" || exit -- [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=15 -+ [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=16 - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 - BUILD_REPOSITORY_URL=$(git remote get-url "$(git remote 2> /dev/null | grep origin)" 2> /dev/null) - BUILD_REPOSITORY_COMMIT=$(git describe --match=d_e_a_d_b_e_e_f --always --dirty 2> /dev/null) -diff --git a/lib/functions/host/prepare-host.sh b/lib/functions/host/prepare-host.sh -index cc7d1d48f..bae3b3e7c 100644 ---- a/lib/functions/host/prepare-host.sh -+++ b/lib/functions/host/prepare-host.sh -@@ -73,7 +73,7 @@ prepare_host() { - # - # NO_HOST_RELEASE_CHECK overrides the check for a supported host system - # Disable host OS check at your own risk. Any issues reported with unsupported releases will be closed without discussion -- if [[ -z $HOSTRELEASE || "buster bullseye focal impish hirsute debbie tricia ulyana ulyssa uma" != *"$HOSTRELEASE"* ]]; then -+ if [[ -z $HOSTRELEASE || "buster bullseye focal impish hirsute jammy debbie tricia ulyana ulyssa uma una" != *"$HOSTRELEASE"* ]]; then - if [[ $NO_HOST_RELEASE_CHECK == yes ]]; then - display_alert "You are running on an unsupported system" "${HOSTRELEASE:-(unknown)}" "wrn" - display_alert "Do not report any errors, warnings or other issues encountered beyond this point" "" "wrn" -diff --git a/lib/functions/rootfs/distro-specific.sh b/lib/functions/rootfs/distro-specific.sh -index 4770af4bc..7c1676f40 100644 ---- a/lib/functions/rootfs/distro-specific.sh -+++ b/lib/functions/rootfs/distro-specific.sh -@@ -154,17 +154,33 @@ create_sources_list() { - ;; - esac - -+ display_alert "Adding Armbian repository and authentication key" "/etc/apt/sources.list.d/armbian.list" "info" -+ -+ # apt-key add is getting deprecated -+ APT_VERSION=$(chroot "${basedir}" /bin/bash -c "apt --version | cut -d\" \" -f2") -+ if linux-version compare "${APT_VERSION}" ge 2.4.1; then -+ # add armbian key -+ mkdir -p "${basedir}"/usr/share/keyrings -+ # change to binary form -+ gpg --dearmor < "${SRC}"/config/armbian.key > "${basedir}"/usr/share/keyrings/armbian.gpg -+ SIGNED_BY="[signed-by=/usr/share/keyrings/armbian.gpg] " -+ else -+ # use old method for compatibility reasons -+ cp "${SRC}"/config/armbian.key "${basedir}" -+ chroot "${basedir}" /bin/bash -c "cat armbian.key | apt-key add - > /dev/null 2>&1" -+ fi -+ - # stage: add armbian repository and install key - if [[ $DOWNLOAD_MIRROR == "china" ]]; then -- echo "deb https://mirrors.tuna.tsinghua.edu.cn/armbian $RELEASE main ${RELEASE}-utils ${RELEASE}-desktop" > "${basedir}"/etc/apt/sources.list.d/armbian.list -+ echo "deb ${SIGNED_BY}https://mirrors.tuna.tsinghua.edu.cn/armbian $RELEASE main ${RELEASE}-utils ${RELEASE}-desktop" > "${basedir}"/etc/apt/sources.list.d/armbian.list - elif [[ $DOWNLOAD_MIRROR == "bfsu" ]]; then -- echo "deb http://mirrors.bfsu.edu.cn/armbian $RELEASE main ${RELEASE}-utils ${RELEASE}-desktop" > "${basedir}"/etc/apt/sources.list.d/armbian.list -+ echo "deb ${SIGNED_BY}http://mirrors.bfsu.edu.cn/armbian $RELEASE main ${RELEASE}-utils ${RELEASE}-desktop" > "${basedir}"/etc/apt/sources.list.d/armbian.list - else -- echo "deb http://"$([[ $BETA == yes ]] && echo "beta" || echo "apt")".armbian.com $RELEASE main ${RELEASE}-utils ${RELEASE}-desktop" > "${basedir}"/etc/apt/sources.list.d/armbian.list -+ echo "deb ${SIGNED_BY}http://"$([[ $BETA == yes ]] && echo "beta" || echo "apt")".armbian.com $RELEASE main ${RELEASE}-utils ${RELEASE}-desktop" > "${basedir}"/etc/apt/sources.list.d/armbian.list - fi - - # replace local package server if defined. Suitable for development -- [[ -n $LOCAL_MIRROR ]] && echo "deb http://$LOCAL_MIRROR $RELEASE main ${RELEASE}-utils ${RELEASE}-desktop" > "${basedir}"/etc/apt/sources.list.d/armbian.list -+ [[ -n $LOCAL_MIRROR ]] && echo "deb ${SIGNED_BY}http://$LOCAL_MIRROR $RELEASE main ${RELEASE}-utils ${RELEASE}-desktop" > "${basedir}"/etc/apt/sources.list.d/armbian.list - - # disable repo if SKIP_ARMBIAN_REPO=yes - if [[ "${SKIP_ARMBIAN_REPO}" == "yes" ]]; then -@@ -172,12 +188,4 @@ create_sources_list() { - mv "${SDCARD}"/etc/apt/sources.list.d/armbian.list "${SDCARD}"/etc/apt/sources.list.d/armbian.list.disabled - fi - -- display_alert "Adding Armbian repository and authentication key" "/etc/apt/sources.list.d/armbian.list" "info" -- cp "${SRC}"/config/armbian.key "${basedir}" -- chroot "${basedir}" /bin/bash -c "cat armbian.key | apt-key add - > /dev/null 2>&1" -- rm "${basedir}"/armbian.key - } --#-------------------------------------------------------------------------------------------------------------------------------- --# Create kernel boot logo from packages/blobs/splash/logo.png and packages/blobs/splash/spinner.gif (animated) --# and place to the file /lib/firmware/bootsplash --#-------------------------------------------------------------------------------------------------------------------------------- -diff --git a/lib/functions/rootfs/rootfs-desktop.sh b/lib/functions/rootfs/rootfs-desktop.sh -index b0785949a..56b9cfc3d 100644 ---- a/lib/functions/rootfs/rootfs-desktop.sh -+++ b/lib/functions/rootfs/rootfs-desktop.sh -@@ -30,31 +30,40 @@ add_apt_sources() { - for apt_sources_dirpath in ${potential_paths}; do - if [[ -d "${apt_sources_dirpath}" ]]; then - for apt_source_filepath in "${apt_sources_dirpath}/"*.source; do -- local new_apt_source="$(cat "${apt_source_filepath}")" -- display_alert "Adding APT Source ${new_apt_source}" -- # -y -> Assumes yes to all queries -- # -n -> Do not update package cache after adding -- chroot_sdcard "add-apt-repository -y -n \"${new_apt_source}\"" -- display_alert "Return code : $?" -+ apt_source_filepath=$(echo "${apt_source_filepath}" | sed -re 's/(^.*[^/])\.[^./]*$/\1/') -+ local new_apt_source="$(cat "${apt_source_filepath}.source")" -+ local apt_source_gpg_filepath="${apt_source_filepath}.gpg" - -- # temporally exception for jammy -- [[ $RELEASE == "jammy" ]] && find "${SDCARD}/etc/apt/sources.list.d/." -type f \( -name "*.list" ! -name "armbian.list" \) -print0 | xargs -0 sed -i 's/jammy/hirsute/g' -+ # extract filenames -+ local apt_source_gpg_filename="$(basename ${apt_source_gpg_filepath})" -+ local apt_source_filename="$(basename ${apt_source_filepath}).list" - -- local apt_source_gpg_filepath="${apt_source_filepath}.gpg" -+ display_alert "Adding APT Source ${new_apt_source}" -+ -+ if [[ "${new_apt_source}" == ppa* ]]; then -+ -+ # add list with apt-add -+ # -y -> Assumes yes to all queries -+ # -n -> Do not update package cache after adding -+ run_on_sdcard "add-apt-repository -y -n \"${new_apt_source}\"" -+ if [[ -f "${apt_source_gpg_filepath}" ]]; then -+ display_alert "Adding GPG Key ${apt_source_gpg_filepath}" -+ cp "${apt_source_gpg_filepath}" "${SDCARD}/tmp/${apt_source_gpg_filename}" -+ chroot_sdcard "apt-key add \"/tmp/${apt_source_gpg_filename}\"" -+ echo "APT Key returned : $?" -+ fi -+ else -+ # copy list if its not ppa -+ echo "${new_apt_source}" > "${SDCARD}/etc/apt/sources.list.d/${apt_source_filename}" -+ if [[ -f "${apt_source_gpg_filepath}" ]]; then -+ display_alert "Adding GPG Key ${apt_source_gpg_filepath}" -+ # local apt_source_gpg_filename="$(basename ${apt_source_gpg_filepath})" -+ mkdir -p "${SDCARD}"/usr/share/keyrings/ -+ cp "${apt_source_gpg_filepath}" "${SDCARD}"/usr/share/keyrings/ -+ fi - -- # PPA provide GPG keys automatically, it seems. -- # But other repositories (Docker for example) require the -- # user to import GPG keys manually -- # Myy : FIXME We need some automatic Git warnings when someone -- # add a GPG key, since trusting the wrong keys could lead to -- # serious issues. -- if [[ -f "${apt_source_gpg_filepath}" ]]; then -- display_alert "Adding GPG Key ${apt_source_gpg_filepath}" -- local apt_source_gpg_filename="$(basename ${apt_source_gpg_filepath})" -- cp "${apt_source_gpg_filepath}" "${SDCARD}/tmp/${apt_source_gpg_filename}" -- chroot_sdcard "apt-key add \"/tmp/${apt_source_gpg_filename}\"" -- echo "APT Key returned : $?" - fi -+ - done - fi - done -@@ -64,6 +73,7 @@ add_apt_sources() { - add_desktop_package_sources() { - add_apt_sources - chroot_sdcard_apt_get "update" -+ run_host_command_logged ls -l "${SDCARD}/usr/share/keyrings" - run_host_command_logged ls -l "${SDCARD}/etc/apt/sources.list.d" - run_host_command_logged cat "${SDCARD}/etc/apt/sources.list" - } - -From d2d2fa9315f74ec155f209096fe55ead120491c6 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 18 Mar 2022 02:17:01 +0100 -Subject: [PATCH] armbian-next: *much* improved logging to HTML; log archiving; - consistency - -- keep only current logfile -- log to LOGFILE also if SHOW_LOG=yes -- log cmd runtime and success/error directly in runner ---- - lib/functions/cli/cli-entrypoint.sh | 3 ++ - lib/functions/logging/logging.sh | 78 ++++++++++++++++++++++++++----------- - lib/functions/logging/runners.sh | 19 ++++----- - 3 files changed, 67 insertions(+), 33 deletions(-) - -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index 5b905062f..4cd37537d 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -1,4 +1,7 @@ - function cli_entrypoint() { -+ # array, readonly, global, for future reference, "exported" to shutup shellcheck -+ declare -rg -x -a ARMBIAN_ORIGINAL_ARGV=("${@}") -+ - if [[ "${ARMBIAN_ENABLE_CALL_TRACING}" == "yes" ]]; then - set -T # inherit return/debug traps - mkdir -p "${SRC}"/output/debug -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 296b46ddb..cac13b902 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -47,7 +47,7 @@ function start_logging_section() { - export CURRENT_LOGGING_SECTION=${LOG_SECTION:-early} # default to "early", should be overwritten soon enough - export CURRENT_LOGGING_SECTION_START=${SECONDS} - export CURRENT_LOGGING_DIR="${LOGDIR}" # set in cli-entrypoint.sh -- export CURRENT_LOGFILE="${CURRENT_LOGGING_DIR}/${CURRENT_LOGGING_COUNTER}.${CURRENT_LOGGING_SECTION}.log" -+ export CURRENT_LOGFILE="${CURRENT_LOGGING_DIR}/${CURRENT_LOGGING_COUNTER}.000.${CURRENT_LOGGING_SECTION}.log" - mkdir -p "${CURRENT_LOGGING_DIR}" - touch "${CURRENT_LOGFILE}" # Touch it, make sure it's writable. - -@@ -94,10 +94,8 @@ function do_with_logging() { - # Also terrible: don't hold a reference to cwd by changing to SRC always - exec 3> >( - cd "${SRC}" || exit 2 -- #grep --line-buffered -v "^$" | \ -- # @TODO: tee to CURRENT_LOGFILE. @TODO this is essential. if this does not work whole thing comes down -- -- sed -u -e "${prefix_sed_cmd}" -+ # First, log to file, then add prefix via sed for what goes to screen. -+ tee -a "${CURRENT_LOGFILE}" | sed -u -e "${prefix_sed_cmd}" - ) - "$@" >&3 - exec 3>&- # close the file descriptor, lest sed keeps running forever. -@@ -115,24 +113,21 @@ function do_with_logging() { - function do_with_log_asset() { - # @TODO: check that CURRENT_LOGGING_COUNTER is set, otherwise crazy? - local ASSET_LOGFILE="${CURRENT_LOGGING_DIR}/${CURRENT_LOGGING_COUNTER}.${LOG_ASSET}" -- display_alert "Logging to asset" "${CURRENT_LOGGING_COUNTER}.0.${LOG_ASSET}" "debug" -+ display_alert "Logging to asset" "${CURRENT_LOGGING_COUNTER}.${LOG_ASSET}" "debug" - "$@" >> "${ASSET_LOGFILE}" - } - - function display_alert() { -- # We'll be writing to stderr (" >&2"), so also write the message to the generic logfile, for context. -- if [[ -f "${CURRENT_LOGFILE}" ]]; then -- echo -e "--> A: [" "$@" "]" | sed 's/\x1b\[[0-9;]*m//g' >> "${CURRENT_LOGFILE}" -- fi -- -- # If asked, avoid any fancy ANSI escapes completely. -+ # If asked, avoid any fancy ANSI escapes completely. For python-driven log collection. Formatting could be improved. -+ # If used, also does not write to logfile even if it exists. - if [[ "${ANSI_COLOR}" == "none" ]]; then - echo -e "${@}" | sed 's/\x1b\[[0-9;]*m//g' >&2 - return 0 - fi - -- local message="$1" level="$3" # params -+ local message="${1}" level="${3}" # params - local level_indicator="" inline_logs_color="" extra="" ci_log="" # this log -+ local skip_screen=0 # setting to 1 will write to logfile only - case "${level}" in - err | error) - level_indicator="💥" -@@ -159,7 +154,7 @@ function display_alert() { - - cleanup | trap) - if [[ "${SHOW_TRAPS}" != "yes" ]]; then # enable debug for many, many debugging msgs -- return 0 -+ skip_screen=1 - fi - level_indicator="🧽" - inline_logs_color="\e[1;33m" -@@ -167,7 +162,7 @@ function display_alert() { - - debug | deprecation) - if [[ "${SHOW_DEBUG}" != "yes" ]]; then # enable debug for many, many debugging msgs -- return 0 -+ skip_screen=1 - fi - level_indicator="🐛" - inline_logs_color="\e[1;33m" -@@ -175,7 +170,7 @@ function display_alert() { - - group) - if [[ "${SHOW_DEBUG}" != "yes" && "${SHOW_GROUPS}" != "yes" ]]; then # show when debugging, or when specifically requested -- return 0 -+ skip_screen=1 - fi - level_indicator="🦋" - inline_logs_color="\e[1;34m" # blue; 36 would be cyan -@@ -183,7 +178,7 @@ function display_alert() { - - command) - if [[ "${SHOW_COMMAND}" != "yes" ]]; then # enable to log all calls to external cmds -- return 0 -+ skip_screen=1 - fi - level_indicator="🐸" - inline_logs_color="\e[0;36m" # a dim cyan -@@ -191,7 +186,7 @@ function display_alert() { - - timestamp | fasthash) - if [[ "${SHOW_FASTHASH}" != "yes" ]]; then # timestamp-related debugging messages, very very verbose -- return 0 -+ skip_screen=1 - fi - level_indicator="🐜" - inline_logs_color="${tool_color}" # either gray or normal, a bit subdued. -@@ -199,18 +194,29 @@ function display_alert() { - - git) - if [[ "${SHOW_GIT}" != "yes" ]]; then # git-related debugging messages, very very verbose -- return 0 -+ skip_screen=1 - fi - level_indicator="🔖" - inline_logs_color="${tool_color}" # either gray or normal, a bit subdued. - ;; - - *) -+ level="${level:-other}" # for file logging. - level_indicator="🌿" - inline_logs_color="\e[1;37m" - ;; - esac - -+ # Now, log to file. This will be colorized later by ccze and such, so remove any colors it might already have. -+ # See also the stuff done in runners.sh for logging exact command lines and runtimes. -+ if [[ -f "${CURRENT_LOGFILE}" ]]; then -+ echo -e "--> [${level_indicator} ] $(printf "%4s" "${SECONDS}"): $$ - ${BASHPID}: $-: ${level}: ${1} [ ${2} ]" | sed 's/\x1b\[[0-9;]*m//g' >> "${CURRENT_LOGFILE}" -+ fi -+ -+ if [[ ${skip_screen} -eq 1 ]]; then -+ return 0 -+ fi -+ - local timing_info="" - if [[ "${SHOW_TIMING}" == "yes" ]]; then - timing_info="${tool_color}(${normal_color}$(printf "%3s" "${SECONDS}")${tool_color})" # SECONDS is bash builtin for seconds since start of script. -@@ -279,16 +285,44 @@ function trap_handler_cleanup_logging() { - mkdir -p "${target_path}" - local target_file="${target_path}/armbian-logs-${ARMBIAN_BUILD_UUID}.html" - -+ # Before writing new logfile, compress and move existing ones to archive folder. Unless running under CI. -+ if [[ "${CI}" != "true" ]]; then -+ declare -a existing_log_files_array -+ mapfile -t existing_log_files_array < <(find "${target_path}" -maxdepth 1 -type f -name "armbian-logs-*.html") -+ declare one_old_logfile old_logfile_fn target_archive_path="${target_path}"/archive -+ for one_old_logfile in "${existing_log_files_array[@]}"; do -+ old_logfile_fn="$(basename "${one_old_logfile}")" -+ display_alert "Archiving old logfile" "${old_logfile_fn}" "debug" -+ mkdir -p "${target_archive_path}" -+ # shellcheck disable=SC2002 # my cat is not useless. a bit whiny. not useless. -+ zstdmt --quiet "${one_old_logfile}" -o "${target_archive_path}/${old_logfile_fn}.zst" -+ rm -f "${one_old_logfile}" -+ done -+ fi -+ - cat <<- HTML_HEADER > "${target_file}" - - - Armbian logs for ${ARMBIAN_BUILD_UUID} - - - -+

Armbian build at $(LC_ALL=C LANG=C date) on $(hostname || true)

-+

${ARMBIAN_ORIGINAL_ARGV[@]@Q}

-+
-+ -+ $(git --git-dir="${SRC}/.git" log -1 --color --format=short --decorate | ansi2html --no-wrap --no-header) -+
-+ -+ $(git -c color.status=always --work-tree="${SRC}" --git-dir="${SRC}/.git" status | ansi2html --no-wrap --no-header) -+
-+ -+ $(git --work-tree="${SRC}" --git-dir="${SRC}/.git" diff -u --color | ansi2html --no-wrap --no-header) -+
-+ - HTML_HEADER - - # Find and sort the files there, store in array one per logfile -@@ -301,13 +335,13 @@ function trap_handler_cleanup_logging() { - cat <<- HTML_ONE_LOGFILE_WITH_CCZE >> "${target_file}" -

${logfile_base}

-
-- $(cat "${logfile_full}" | ccze -o nolookups --raw-ansi | ansi2html --no-wrap --no-header) -+ $(ccze -o nolookups --raw-ansi < "${logfile_full}" | ansi2html --no-wrap --no-header) -
-
- HTML_ONE_LOGFILE_WITH_CCZE - else - cat <<- HTML_ONE_LOGFILE_NO_CCZE >> "${target_file}" --

${logfile_base}

-+

${logfile_base}

-
$(cat "${logfile_full}")
- HTML_ONE_LOGFILE_NO_CCZE - fi -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 42610621d..1b07dc7a0 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -134,28 +134,25 @@ function run_host_command_dialog() { - # do NOT use directly, it does NOT expand the way it should (through bash) - function run_host_command_logged_raw() { - # Log the command to the current logfile, so it has context of what was run. -- if [[ -f "${CURRENT_LOGFILE}" ]]; then -- echo " " >> "${CURRENT_LOGFILE}" # blank line for reader's benefit -- echo "-->" "$*" " <- at $(date --utc)" >> "${CURRENT_LOGFILE}" -- fi - display_alert "Command debug" "$*" "command" # A special 'command' level. - -- # uncomment when desperate to understand what's going on -- # echo "cmd about to run" "$@" >&2 -- - # In this case I wanna KNOW exactly what failed, thus disable errexit, then re-enable immediately after running. - set +e - local exit_code=666 -- "$@" 2>&1 # redirect stderr to stdout. $* is NOT $@! -+ local seconds_start=${SECONDS} # Bash has a builtin SECONDS that is seconds since start of script -+ "$@" 2>&1 # redirect stderr to stdout. $* is NOT $@! - exit_code=$? - set -e -- if [[ -f "${CURRENT_LOGFILE}" ]]; then -- echo "--> cmd exited with code ${exit_code} at $(date --utc)" >> "${CURRENT_LOGFILE}" -- fi -+ - if [[ $exit_code != 0 ]]; then -+ if [[ -f "${CURRENT_LOGFILE}" ]]; then -+ echo "-->--> command failed with error code ${exit_code} after $((SECONDS - seconds_start)) seconds" >> "${CURRENT_LOGFILE}" -+ fi - # This is very specific; remove CURRENT_LOGFILE's value when calling display_alert here otherwise logged twice. - CURRENT_LOGFILE="" display_alert "cmd exited with code ${exit_code}" "$*" "wrn" - CURRENT_LOGFILE="" display_alert "stacktrace for failed command" "$(show_caller_full)" "wrn" -+ elif [[ -f "${CURRENT_LOGFILE}" ]]; then -+ echo "-->--> command run successfully after $((SECONDS - seconds_start)) seconds" >> "${CURRENT_LOGFILE}" - fi - return $exit_code - } - -From 1b160ce366c31c724346f52a7f7bfa79036a6acf Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 18 Mar 2022 00:34:46 +0100 -Subject: [PATCH] armbian-next: *breaking change* use `MemAvailable` (not - including swap) and up requirements for tmpfs - -- of course add debugging logs -- rename vars -- should really only use this if we've really a lot of completely free RAM to spare -- otherwise OOM killer comes knocking -- or swapping to disk, that is counter-productive ---- - lib/functions/main/rootfs-image.sh | 31 +++++++++++++++---------------- - 1 file changed, 15 insertions(+), 16 deletions(-) - -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index 02d04797d..86ad03594 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -27,25 +27,24 @@ function build_rootfs_and_image() { - fi - - # stage: verify tmpfs configuration and mount -- # CLI needs ~1.5GiB, desktop - ~3.5GiB -- # calculate and set tmpfs mount to use 9/10 of available RAM+SWAP -- # @TODO: this does not make sense; swap should not be considered. Actually, only free + cached memory should be considered! -- local phymem=$(((($(awk '/MemTotal/ {print $2}' /proc/meminfo) + $(awk '/SwapTotal/ {print $2}' /proc/meminfo))) / 1024 * 9 / 10)) # MiB -- local tmpfs_max_size=1500 # MiB -- if [[ $BUILD_DESKTOP == yes ]]; then -- tmpfs_max_size=3500 -- fi -- -- if [[ $FORCE_USE_RAMDISK == no ]]; then -- local use_tmpfs=no -- elif [[ $FORCE_USE_RAMDISK == yes || $phymem -gt $tmpfs_max_size ]]; then -- local use_tmpfs=yes -+ # CLI needs ~2GiB, desktop ~5GiB -+ # vs 60% of available RAM (free + buffers + magic) -+ local available_physical_memory_mib=$(($(awk '/MemAvailable/ {print $2}' /proc/meminfo) * 6 / 1024 / 10)) # MiB -+ local tmpfs_estimated_size=2000 # MiB -+ [[ $BUILD_DESKTOP == yes ]] && tmpfs_estimated_size=5000 # MiB -+ -+ local use_tmpfs=no # by default -+ if [[ ${FORCE_USE_RAMDISK} == no ]]; then # do not use, even if it fits -+ : -+ elif [[ ${FORCE_USE_RAMDISK} == yes || ${available_physical_memory_mib} -gt ${tmpfs_estimated_size} ]]; then # use, either force or fits -+ use_tmpfs=yes -+ display_alert "Using tmpfs for rootfs" "RAM available: ${available_physical_memory_mib}MiB > ${tmpfs_estimated_size}MiB estimated" "debug" -+ else -+ display_alert "Not using tmpfs for rootfs" "RAM available: ${available_physical_memory_mib}MiB < ${tmpfs_estimated_size}MiB estimated" "debug" - fi -- [[ -n $FORCE_TMPFS_SIZE ]] && phymem=$FORCE_TMPFS_SIZE - - if [[ $use_tmpfs == yes ]]; then -- display_alert "Using tmpfs for rootfs" "${phymem}M" "debug" -- mount -t tmpfs -o "size=${phymem}M" tmpfs "${SDCARD}" -+ mount -t tmpfs tmpfs "${SDCARD}" # do not specify size; we've calculated above that it should fit, and Linux will try its best if it doesn't. - fi - - # stage: prepare basic rootfs: unpack cache or create from scratch - -From 04a11cc78f5681dd41e3764ce644c53e7032156b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 17 Mar 2022 22:46:05 +0100 -Subject: [PATCH] armbian-next: *breaking change* `DEB_COMPRESS=none` by - default if not running in CI/GHA - ---- - lib/functions/configuration/main-config.sh | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 6d2f404b1..6edde8258 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -24,7 +24,6 @@ function do_main_configuration() { - [[ -z $ROOTPWD ]] && ROOTPWD="1234" # Must be changed @first login - [[ -z $MAINTAINER ]] && MAINTAINER="Igor Pecovnik" # deb signature - [[ -z $MAINTAINERMAIL ]] && MAINTAINERMAIL="igor.pecovnik@****l.com" # deb signature -- [[ -z $DEB_COMPRESS ]] && DEB_COMPRESS="xz" # compress .debs with XZ by default. Use 'none' for faster/larger builds - export SKIP_EXTERNAL_TOOLCHAINS="${SKIP_EXTERNAL_TOOLCHAINS:-yes}" # don't use any external toolchains, by default. - TZDATA=$(cat /etc/timezone) # Timezone for target is taken from host or defined here. - USEALLCORES=yes # Use all CPU cores for compiling -@@ -39,6 +38,13 @@ function do_main_configuration() { - BUILD_REPOSITORY_COMMIT=$(git describe --match=d_e_a_d_b_e_e_f --always --dirty 2> /dev/null) - ROOTFS_CACHE_MAX=200 # max number of rootfs cache, older ones will be cleaned up - -+ # .deb compression. xz is standard, but is slow, so if avoided by default if not running in CI. one day, zstd. -+ if [[ -z ${DEB_COMPRESS} ]]; then -+ DEB_COMPRESS="none" # none is very fast bug produces big artifacts. -+ [[ "${CI}" == "true" ]] && DEB_COMPRESS="xz" # xz is small and slow -+ fi -+ display_alert ".deb compression" "DEB_COMPRESS=${DEB_COMPRESS}" "debug" -+ - if [[ $BETA == yes ]]; then - DEB_STORAGE=$DEST/debs-beta - REPO_STORAGE=$DEST/repository-beta - -From 667a8de92b5075c05d2ca67761a13c93b8e8b99d Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 17 Mar 2022 22:21:45 +0100 -Subject: [PATCH] armbian-next: *breaking change* `CLEAN_LEVEL=make` is no - more; new `make-kernel`, `make-atf`, `make-uboot` - -- allows individual control of what to clean -- this effectively disables `make clean` by default -- rebuilds work and timestamping works for patching, so no reason to clean everytime by default. ---- - config/templates/config-example.conf | 20 ++++++++++++-------- - lib/functions/compilation/atf.sh | 14 +++++++------- - lib/functions/compilation/kernel.sh | 8 +++++--- - lib/functions/compilation/uboot.sh | 30 +++++++++++++++--------------- - lib/functions/general/cleaning.sh | 25 +++++++++++++++---------- - lib/functions/main/default-build.sh | 7 +++---- - 6 files changed, 57 insertions(+), 47 deletions(-) - -diff --git a/config/templates/config-example.conf b/config/templates/config-example.conf -index b75e4b44b..e07496dc8 100644 ---- a/config/templates/config-example.conf -+++ b/config/templates/config-example.conf -@@ -1,13 +1,17 @@ - # Read build script documentation https://docs.armbian.com/Developer-Guide_Build-Options/ - # for detailed explanation of these options and for additional options not listed here - --KERNEL_ONLY="" # leave empty to select each time, set to "yes" or "no" to skip dialog prompt --KERNEL_CONFIGURE="" # leave empty to select each time, set to "yes" or "no" to skip dialog prompt --CLEAN_LEVEL="make,debs,oldcache" # comma-separated list of clean targets: "make" = make clean for selected kernel and u-boot, --# "debs" = delete packages in "./output/debs" for current branch and family, --# "alldebs" = delete all packages in "./output/debs", "images" = delete "./output/images", --# "cache" = delete "./output/cache", "sources" = delete "./sources" --# "oldcache" = remove old cached rootfs except for the newest 8 files -+KERNEL_ONLY="" # leave empty to select each time, set to "yes" or "no" to skip dialog prompt -+KERNEL_CONFIGURE="" # leave empty to select each time, set to "yes" or "no" to skip dialog prompt -+CLEAN_LEVEL="debs,oldcache" # comma-separated list of clean targets: -+: # "make-atf" = make clean for ATF, if it is built. -+: # "make-uboot" = make clean for uboot, if it is built. -+: # "make-kernel" = make clean for kernel, if it is built. very slow. -+: # *important*: "make" by itself has disabled, since Armbian knows how to handle Make timestamping now. -+: # "debs" = delete packages in "./output/debs" for current branch and family. causes rebuilds, hopefully cached. -+: # "alldebs" = delete all packages in "./output/debs", "images" = delete "./output/images", -+: # "cache" = delete "./output/cache", "sources" = delete "./sources" -+: # "oldcache" = remove old cached rootfs except for the newest 8 files - - REPOSITORY_INSTALL="" # comma-separated list of core modules which will be installed from repository - # "u-boot", "kernel", "bsp", "armbian-config", "armbian-firmware" -@@ -20,5 +24,5 @@ EXTERNAL_NEW="prebuilt" # compile and install or install prebuilt additional pac - INSTALL_HEADERS="" # install kernel headers package - LIB_TAG="master" # change to "branchname" to use any branch currently available. - USE_TORRENT="no" # use torrent network for faster toolchain and cache download --DOWNLOAD_MIRROR="" # set to "china" to use mirrors.tuna.tsinghua.edu.cn -+DOWNLOAD_MIRROR="" # set to "china" to use chinese mirrors - CARD_DEVICE="" # device name /dev/sdx of your SD card to burn directly to the card when done -diff --git a/lib/functions/compilation/atf.sh b/lib/functions/compilation/atf.sh -index b241b5dfa..ff11d7ba8 100644 ---- a/lib/functions/compilation/atf.sh -+++ b/lib/functions/compilation/atf.sh -@@ -4,19 +4,19 @@ compile_atf() { - fetch_from_repo "$ATFSOURCE" "$ATFDIR" "$ATFBRANCH" "yes" - fi - -- if [[ $CLEAN_LEVEL == *make* ]]; then -- display_alert "Cleaning" "$ATFSOURCEDIR" "info" -+ if [[ $CLEAN_LEVEL == *make-atf* ]]; then -+ display_alert "Cleaning ATF tree - CLEAN_LEVEL contains 'make-atf'" "$ATFSOURCEDIR" "info" - ( -- cd "${SRC}/cache/sources/${ATFSOURCEDIR}" -- make distclean 2>&1 -+ cd "${SRC}/cache/sources/${ATFSOURCEDIR}" || exit_with_error "crazy about ${ATFSOURCEDIR}" -+ run_host_command_logged make distclean - ) -+ else -+ display_alert "Not cleaning ATF tree, use CLEAN_LEVEL=make-atf if needed" "CLEAN_LEVEL=${CLEAN_LEVEL}" "debug" - fi - -+ local atfdir="$SRC/cache/sources/$ATFSOURCEDIR" - if [[ $USE_OVERLAYFS == yes ]]; then -- local atfdir - atfdir=$(overlayfs_wrapper "wrap" "$SRC/cache/sources/$ATFSOURCEDIR" "atf_${LINUXFAMILY}_${BRANCH}") -- else -- local atfdir="$SRC/cache/sources/$ATFSOURCEDIR" - fi - cd "$atfdir" || exit - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 571bde957..249336e00 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -106,13 +106,15 @@ function kernel_prepare_git() { - } - - function kernel_maybe_clean() { -- if [[ $CLEAN_LEVEL == *make* ]]; then -- display_alert "Cleaning" "$LINUXSOURCEDIR" "info" -+ if [[ $CLEAN_LEVEL == *make-kernel* ]]; then -+ display_alert "Cleaning Kernel tree - CLEAN_LEVEL contains 'make-kernel'" "$LINUXSOURCEDIR" "info" - ( - cd "${kernel_work_dir}" -- make ARCH="${ARCHITECTURE}" clean > /dev/null 2>&1 -+ run_host_command_logged make ARCH="${ARCHITECTURE}" clean - ) - fasthash_debug "post make clean" -+ else -+ display_alert "Not cleaning Kernel tree; use CLEAN_LEVEL=make-kernel if needed" "CLEAN_LEVEL=${CLEAN_LEVEL}" "debug" - fi - } - -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index 33415c2e2..05b8ea629 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -1,3 +1,15 @@ -+function maybe_make_clean_uboot() { -+ if [[ $CLEAN_LEVEL == *make-uboot* ]]; then -+ display_alert "${uboot_prefix}Cleaning u-boot tree - CLEAN_LEVEL contains 'make-uboot'" "${BOOTSOURCEDIR}" "info" -+ ( -+ cd "${SRC}/cache/sources/${BOOTSOURCEDIR}" || exit_with_error "crazy about ${BOOTSOURCEDIR}" -+ run_host_command_logged make clean -+ ) -+ else -+ display_alert "${uboot_prefix}Not cleaning u-boot tree, use CLEAN_LEVEL=make-uboot if needed" "CLEAN_LEVEL=${CLEAN_LEVEL}" "debug" -+ fi -+} -+ - # this receives version target uboot_name uboottempdir uboot_target_counter toolchain as variables. - function compile_uboot_target() { - local uboot_prefix="{u-boot:${uboot_target_counter}} " -@@ -9,15 +21,9 @@ function compile_uboot_target() { - - # needed for multiple targets and for calling compile_uboot directly - display_alert "${uboot_prefix} Checking out to clean sources" "{$BOOTSOURCEDIR} for ${target_make}" -- git checkout -f -q HEAD -+ git checkout -f -q HEAD # @TODO: this assumes way too much. should call the wrapper again, not directly - -- if [[ $CLEAN_LEVEL == *make* ]]; then -- display_alert "${uboot_prefix}Cleaning" "${BOOTSOURCEDIR}" "info" -- ( -- cd "${SRC}/cache/sources/${BOOTSOURCEDIR}" -- make clean 2>&1 -- ) -- fi -+ maybe_make_clean_uboot - - advanced_patch "u-boot" "$BOOTPATCHDIR" "$BOARD" "$target_patchdir" "$BRANCH" "${LINUXFAMILY}-${BOARD}-${BRANCH}" - -@@ -102,13 +108,7 @@ compile_uboot() { - fi - - # not optimal, but extra cleaning before overlayfs_wrapper should keep sources directory clean -- if [[ $CLEAN_LEVEL == *make* ]]; then -- display_alert "Cleaning" "$BOOTSOURCEDIR" "info" -- ( -- cd "${SRC}/cache/sources/${BOOTSOURCEDIR}" -- make clean > /dev/null 2>&1 -- ) -- fi -+ maybe_make_clean_uboot - - if [[ $USE_OVERLAYFS == yes ]]; then - local ubootdir -diff --git a/lib/functions/general/cleaning.sh b/lib/functions/general/cleaning.sh -index 4e67b5d52..72a6f4b1f 100644 ---- a/lib/functions/general/cleaning.sh -+++ b/lib/functions/general/cleaning.sh -@@ -1,16 +1,21 @@ - # cleaning - # -+ - # target: what to clean --# "make" - "make clean" for selected kernel and u-boot --# "debs" - delete output/debs for board&branch -+# "make-atf" = make clean for ATF, if it is built. -+# "make-uboot" = make clean for uboot, if it is built. -+# "make-kernel" = make clean for kernel, if it is built. very slow. -+# *important*: "make" by itself has disabled, since Armbian knows how to handle Make timestamping now. -+ -+# "debs" = delete packages in "./output/debs" for current branch and family. causes rebuilds, hopefully cached. - # "ubootdebs" - delete output/debs for uboot&board&branch --# "alldebs" - delete output/debs --# "cache" - delete output/cache --# "oldcache" - remove old output/cache --# "images" - delete output/images --# "sources" - delete output/sources --# --cleaning() { -+# "alldebs" = delete all packages in "./output/debs" -+# "images" = delete "./output/images" -+# "cache" = delete "./output/cache" -+# "sources" = delete "./sources" -+# "oldcache" = remove old cached rootfs except for the newest 8 files -+ -+general_cleaning() { - case $1 in - debs) # delete ${DEB_STORAGE} for current branch and family - if [[ -d "${DEB_STORAGE}" ]]; then -@@ -55,7 +60,7 @@ cleaning() { - [[ -d "${DEST}"/images ]] && display_alert "Cleaning" "output/images" "info" && rm -rf "${DEST}"/images/* - ;; - -- sources) # delete output/sources and output/buildpkg -+ sources) # delete cache/sources and output/buildpkg - [[ -d "${SRC}"/cache/sources ]] && display_alert "Cleaning" "sources" "info" && rm -rf "${SRC}"/cache/sources/* "${DEST}"/buildpkg/* - ;; - -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index aae266091..8f051610f 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -45,10 +45,9 @@ function main_default_build_single() { - LOG_SECTION="fetch_and_build_host_tools" do_with_logging fetch_and_build_host_tools - fi - -- for option in $(tr ',' ' ' <<< "${CLEAN_LEVEL}"); do -- if [[ $option != sources ]]; then -- LOG_SECTION="cleaning" do_with_logging cleaning "$option" -- #fasthash_debug "main_cleaning_armbian" -+ for cleaning_fragment in $(tr ',' ' ' <<< "${CLEAN_LEVEL}"); do -+ if [[ $cleaning_fragment != sources ]] && [[ $cleaning_fragment != make* ]]; then -+ LOG_SECTION="cleaning_${cleaning_fragment}" do_with_logging general_cleaning "${cleaning_fragment}" - fi - done - fi - -From 39999ad4efc4854213d0b2164d999071684ec1ea Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 17 Mar 2022 21:16:21 +0100 -Subject: [PATCH] armbian-next: refactor `prepare_host`, give `apt-cacher-ng` - some much needed attention - -- library dir for host-related stuff, pull it out of "general" finally ---- - lib/functions/host/apt-cacher-ng.sh | 74 +++++++++ - lib/functions/host/basic-deps.sh | 30 ++++ - lib/functions/host/external-toolchains.sh | 54 ++++++ - lib/functions/host/host-utils.sh | 65 ++++++++ - .../{general/host.sh => host/prepare-host.sh} | 185 +++------------------ - lib/functions/logging/runners.sh | 3 +- - lib/functions/rootfs/create-cache.sh | 24 ++- - lib/library-functions.sh | 48 +++++- - 8 files changed, 303 insertions(+), 180 deletions(-) - -diff --git a/lib/functions/host/apt-cacher-ng.sh b/lib/functions/host/apt-cacher-ng.sh -new file mode 100644 -index 000000000..a917f6cb1 ---- /dev/null -+++ b/lib/functions/host/apt-cacher-ng.sh -@@ -0,0 +1,74 @@ -+# Management of apt-cacher-ng aka acng -+ -+function acng_configure_and_restart_acng() { -+ [[ $NO_APT_CACHER == yes ]] && return 0 # don't if told not to. NO_something=yes is very confusing, but kept for historical reasons -+ [[ "${APT_PROXY_ADDR:-localhost:3142}" != "localhost:3142" ]] && return 0 # also not if acng not local to builder machine -+ -+ display_alert "Preparing acng configuration" "apt-cacher-ng" "info" -+ -+ run_host_command_logged systemctl stop apt-cacher-ng || true # ignore errors, it might already be stopped. -+ -+ [[ ! -f /etc/apt-cacher-ng/acng.conf.orig.pre.armbian ]] && cp /etc/apt-cacher-ng/acng.conf /etc/apt-cacher-ng/acng.conf.orig.pre.armbian -+ -+ cat <<- ACNG_CONFIG > /etc/apt-cacher-ng/acng.conf -+ CacheDir: ${APT_CACHER_NG_CACHE_DIR:-/var/cache/apt-cacher-ng} -+ LogDir: /var/log/apt-cacher-ng -+ SupportDir: /usr/lib/apt-cacher-ng -+ LocalDirs: acng-doc /usr/share/doc/apt-cacher-ng -+ ReportPage: acng-report.html -+ ExThreshold: 4 -+ -+ # Remapping is disabled, many times we hit broken mirrors due to this. -+ #Remap-debrep: file:deb_mirror*.gz /debian ; file:backends_debian # Debian Archives -+ #Remap-uburep: file:ubuntu_mirrors /ubuntu ; file:backends_ubuntu # Ubuntu Archives -+ -+ # Turn debug logging and verbosity -+ Debug: 7 -+ VerboseLog: 1 -+ -+ # Connections tuning. -+ MaxStandbyConThreads: 10 -+ DlMaxRetries: 50 -+ NetworkTimeout: 60 -+ FastTimeout: 20 -+ ConnectProto: v4 v6 -+ RedirMax: 15 -+ ReuseConnections: 1 -+ -+ # Allow HTTPS CONNECT, although this is not ideal, since packages are not actually cached then. Disabled for now. -+ # PassThroughPattern: .* -+ ACNG_CONFIG -+ -+ # Ensure correct permissions on the directories -+ mkdir -p "${APT_CACHER_NG_CACHE_DIR:-/var/cache/apt-cacher-ng}" /var/log/apt-cacher-ng -+ chown apt-cacher-ng:apt-cacher-ng "${APT_CACHER_NG_CACHE_DIR:-/var/cache/apt-cacher-ng}" /var/log/apt-cacher-ng -+ -+ if [[ "${APT_CACHER_NG_CLEAR_LOGS}" == "yes" ]]; then -+ display_alert "Clearing acng logs" "apt-cacher-ng logs cleaning" "debug" -+ run_host_command_logged rm -rfv /var/log/apt-cacher-ng/* -+ fi -+ -+ run_host_command_logged systemctl start apt-cacher-ng -+ run_host_command_logged systemctl status apt-cacher-ng -+} -+ -+function acng_check_status_or_restart() { -+ [[ $NO_APT_CACHER != yes ]] && return 0 # don't if told not to -+ [[ "${APT_PROXY_ADDR:-localhost:3142}" != "localhost:3142" ]] && return 0 # also not if acng not local to builder machine -+ -+ if ! systemctl -q is-active apt-cacher-ng.service; then -+ display_alert "ACNG systemd service is not active" "restarting apt-cacher-ng" "warn" -+ acng_configure_and_restart_acng -+ fi -+ -+ if ! wget -q --timeout=10 --output-document=/dev/null http://localhost:3142/acng-report.html; then -+ display_alert "ACNG is not correctly listening for requests" "restarting apt-cacher-ng" "warn" -+ acng_configure_and_restart_acng -+ if ! wget -q --timeout=10 --output-document=/dev/null http://localhost:3142/acng-report.html; then -+ exit_with_error "ACNG is not correctly listening for requests" "apt-cacher-ng NOT WORKING" -+ fi -+ fi -+ -+ display_alert "apt-cacher-ng running correctly" "apt-cacher-ng OK" "debug" -+ -+} -diff --git a/lib/functions/host/basic-deps.sh b/lib/functions/host/basic-deps.sh -new file mode 100644 -index 000000000..fff94fbad ---- /dev/null -+++ b/lib/functions/host/basic-deps.sh -@@ -0,0 +1,30 @@ -+# prepare_host_basic -+# -+# * installs only basic packages -+# -+prepare_host_basic() { -+ -+ # command:package1 package2 ... -+ # list of commands that are neeeded:packages where this command is -+ local check_pack install_pack -+ local checklist=( -+ "dialog:dialog" -+ "fuser:psmisc" -+ "getfacl:acl" -+ "uuid:uuid uuid-runtime" -+ "curl:curl" -+ "gpg:gnupg" -+ "gawk:gawk" -+ ) -+ -+ for check_pack in "${checklist[@]}"; do -+ if ! which ${check_pack%:*} > /dev/null; then local install_pack+=${check_pack#*:}" "; fi -+ done -+ -+ if [[ -n $install_pack ]]; then -+ display_alert "Installing basic packages" "$install_pack" -+ # @TODO: wait, why sudo? we should already be sudo'ed when this executes. -+ sudo bash -c "apt-get -qq update && apt-get install -qq -y --no-install-recommends $install_pack" -+ fi -+ -+} -diff --git a/lib/functions/host/external-toolchains.sh b/lib/functions/host/external-toolchains.sh -new file mode 100644 -index 000000000..f2db2d6ea ---- /dev/null -+++ b/lib/functions/host/external-toolchains.sh -@@ -0,0 +1,54 @@ -+# This is mostly deprecated, since SKIP_EXTERNAL_TOOLCHAINS=yes by default. -+ -+function download_external_toolchains() { -+ # build aarch64 -+ if [[ $(dpkg --print-architecture) == amd64 ]]; then -+ if [[ "${SKIP_EXTERNAL_TOOLCHAINS}" != "yes" ]]; then -+ -+ # bind mount toolchain if defined -+ if [[ -d "${ARMBIAN_CACHE_TOOLCHAIN_PATH}" ]]; then -+ mountpoint -q "${SRC}"/cache/toolchain && umount -l "${SRC}"/cache/toolchain -+ mount --bind "${ARMBIAN_CACHE_TOOLCHAIN_PATH}" "${SRC}"/cache/toolchain -+ fi -+ -+ display_alert "Checking for external GCC compilers" "" "info" -+ # download external Linaro compiler and missing special dependencies since they are needed for certain sources -+ -+ local toolchains=( -+ "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz" -+ "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-arm-none-eabi-4.8-2014.04_linux.tar.xz" -+ "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.xz" -+ "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi.tar.xz" -+ "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz" -+ "${ARMBIAN_MIRROR}/_toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz" -+ "${ARMBIAN_MIRROR}/_toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz" -+ "${ARMBIAN_MIRROR}/_toolchain/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz" -+ "${ARMBIAN_MIRROR}/_toolchain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz" -+ ) -+ -+ USE_TORRENT_STATUS=${USE_TORRENT} -+ USE_TORRENT="no" -+ for toolchain in ${toolchains[@]}; do -+ download_and_verify "_toolchain" "${toolchain##*/}" -+ done -+ USE_TORRENT=${USE_TORRENT_STATUS} -+ -+ rm -rf "${SRC}"/cache/toolchain/*.tar.xz* -+ local existing_dirs=($(ls -1 "${SRC}"/cache/toolchain)) -+ for dir in ${existing_dirs[@]}; do -+ local found=no -+ for toolchain in ${toolchains[@]}; do -+ local filename=${toolchain##*/} -+ local dirname=${filename//.tar.xz/} -+ [[ $dir == $dirname ]] && found=yes -+ done -+ if [[ $found == no ]]; then -+ display_alert "Removing obsolete toolchain" "$dir" -+ rm -rf "${SRC}/cache/toolchain/${dir}" -+ fi -+ done -+ else -+ display_alert "Ignoring toolchains" "SKIP_EXTERNAL_TOOLCHAINS: ${SKIP_EXTERNAL_TOOLCHAINS}" "info" -+ fi -+ fi -+} -diff --git a/lib/functions/host/host-utils.sh b/lib/functions/host/host-utils.sh -new file mode 100644 -index 000000000..20b11e49c ---- /dev/null -+++ b/lib/functions/host/host-utils.sh -@@ -0,0 +1,65 @@ -+function fetch_and_build_host_tools() { -+ call_extension_method "fetch_sources_tools" <<- 'FETCH_SOURCES_TOOLS' -+ *fetch host-side sources needed for tools and build* -+ Run early to fetch_from_repo or otherwise obtain sources for needed tools. -+ FETCH_SOURCES_TOOLS -+ -+ call_extension_method "build_host_tools" <<- 'BUILD_HOST_TOOLS' -+ *build needed tools for the build, host-side* -+ After sources are fetched, build host-side tools needed for the build. -+ BUILD_HOST_TOOLS -+ -+} -+ -+# wait_for_package_manager -+# -+# * installation will break if we try to install when package manager is running -+# -+wait_for_package_manager() { -+ # exit if package manager is running in the back -+ while true; do -+ if [[ "$( -+ fuser /var/lib/dpkg/lock 2> /dev/null -+ echo $? -+ )" != 1 && "$( -+ fuser /var/lib/dpkg/lock-frontend 2> /dev/null -+ echo $? -+ )" != 1 ]]; then -+ display_alert "Package manager is running in the background." "Please wait! Retrying in 30 sec" "wrn" -+ sleep 30 -+ else -+ break -+ fi -+ done -+} -+ -+# Install the whitespace-delimited packages listed in the first parameter, in the host (not chroot). -+# It handles correctly the case where all wanted packages are already installed, and in that case does nothing. -+# If packages are to be installed, it does an apt-get update first. -+function install_host_side_packages() { -+ declare wanted_packages_string -+ declare -a currently_installed_packages missing_packages -+ wanted_packages_string=${*} -+ missing_packages=() -+ # shellcheck disable=SC2207 # I wanna split, thanks. -+ currently_installed_packages=($(dpkg-query --show --showformat='${Package} ')) -+ for PKG_TO_INSTALL in ${wanted_packages_string}; do -+ # shellcheck disable=SC2076 # I wanna match literally, thanks. -+ if [[ ! " ${currently_installed_packages[*]} " =~ " ${PKG_TO_INSTALL} " ]]; then -+ display_alert "Should install package" "${PKG_TO_INSTALL}" -+ missing_packages+=("${PKG_TO_INSTALL}") -+ fi -+ done -+ -+ if [[ ${#missing_packages[@]} -gt 0 ]]; then -+ display_alert "Updating apt host-side for installing packages" "${#missing_packages[@]} packages" "info" -+ host_apt_get update -+ display_alert "Installing host-side packages" "${missing_packages[*]}" "info" -+ host_apt_get_install "${missing_packages[@]}" -+ else -+ display_alert "All host-side dependencies/packages already installed." "Skipping host-hide install" "debug" -+ fi -+ -+ unset currently_installed_packages -+ return 0 -+} -diff --git a/lib/functions/general/host.sh b/lib/functions/host/prepare-host.sh -similarity index 56% -rename from lib/functions/general/host.sh -rename to lib/functions/host/prepare-host.sh -index 925e0d3aa..cc7d1d48f 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/host/prepare-host.sh -@@ -1,33 +1,3 @@ --# prepare_host_basic --# --# * installs only basic packages --# --prepare_host_basic() { -- -- # command:package1 package2 ... -- # list of commands that are neeeded:packages where this command is -- local check_pack install_pack -- local checklist=( -- "dialog:dialog" -- "fuser:psmisc" -- "getfacl:acl" -- "uuid:uuid uuid-runtime" -- "curl:curl" -- "gpg:gnupg" -- "gawk:gawk" -- ) -- -- for check_pack in "${checklist[@]}"; do -- if ! which ${check_pack%:*} > /dev/null; then local install_pack+=${check_pack#*:}" "; fi -- done -- -- if [[ -n $install_pack ]]; then -- display_alert "Installing basic packages" "$install_pack" -- sudo bash -c "apt-get -qq update && apt-get install -qq -y --no-install-recommends $install_pack" -- fi -- --} -- - # prepare_host - # - # * checks and installs necessary packages -@@ -139,10 +109,11 @@ prepare_host() { - # Skip verification if you are working offline - if ! $offline; then - -- # warning: apt-cacher-ng will fail if installed and used both on host and in -- # container/chroot environment with shared network -+ # warning: apt-cacher-ng will fail if installed and used both on host and in container/chroot environment with shared network - # set NO_APT_CACHER=yes to prevent installation errors in such case -- if [[ $NO_APT_CACHER != yes ]]; then host_dependencies+=("apt-cacher-ng"); fi -+ if [[ $NO_APT_CACHER != yes ]]; then -+ host_dependencies+=("apt-cacher-ng") -+ fi - - export EXTRA_BUILD_DEPS="" - call_extension_method "add_host_dependencies" <<- 'ADD_HOST_DEPENDENCIES' -@@ -150,17 +121,20 @@ prepare_host() { - you can add packages to install, space separated, to ${EXTRA_BUILD_DEPS} here. - ADD_HOST_DEPENDENCIES - -- # shellcheck disable=SC2206 # I wanna expand. later will convert to proper array -- if [ -n "${EXTRA_BUILD_DEPS}" ]; then host_dependencies+=(${EXTRA_BUILD_DEPS}); fi -+ if [ -n "${EXTRA_BUILD_DEPS}" ]; then -+ # shellcheck disable=SC2206 # I wanna expand. @TODO: later will convert to proper array -+ host_dependencies+=(${EXTRA_BUILD_DEPS}) -+ fi - - display_alert "Installing build dependencies" -- # don't prompt for apt cacher selection -+ -+ # don't prompt for apt cacher selection. this is to skip the prompt only, since we'll manage acng config later. - sudo echo "apt-cacher-ng apt-cacher-ng/tunnelenable boolean false" | sudo debconf-set-selections - - # This handles the wanted list in $host_dependencies, updates apt only if needed - install_host_side_packages "${host_dependencies[@]}" - -- update-ccache-symlinks -+ run_host_command_logged update-ccache-symlinks - - export FINAL_HOST_DEPS="${host_dependencies[*]}" - call_extension_method "host_dependencies_ready" <<- 'HOST_DEPENDENCIES_READY' -@@ -170,13 +144,16 @@ prepare_host() { - are installed at this point. The system clock has not yet been synced. - HOST_DEPENDENCIES_READY - -+ # Manage apt-cacher-ng -+ acng_configure_and_restart_acng -+ - # sync clock - if [[ $SYNC_CLOCK != no ]]; then - display_alert "Syncing clock" "host" "info" -- ntpdate -s "${NTP_SERVER:-pool.ntp.org}" -+ run_host_command_logged ntpdate "${NTP_SERVER:-pool.ntp.org}" - fi - -- # create directory structure -+ # create directory structure # @TODO: this should be close to DEST, otherwise super-confusing - mkdir -p "${SRC}"/{cache,output} "${USERPATCHES_PATH}" - if [[ -n $SUDO_USER ]]; then - chgrp --quiet sudo cache output "${USERPATCHES_PATH}" -@@ -189,56 +166,8 @@ prepare_host() { - # @TODO: original: mkdir -p "${DEST}"/debs-beta/extra "${DEST}"/debs/extra "${DEST}"/{config,debug,patch} "${USERPATCHES_PATH}"/overlay "${SRC}"/cache/{sources,hash,hash-beta,toolchain,utility,rootfs} "${SRC}"/.tmp - mkdir -p "${USERPATCHES_PATH}"/overlay "${SRC}"/cache/{sources,hash,hash-beta,toolchain,utility,rootfs} "${SRC}"/.tmp - -- # build aarch64 -- if [[ $(dpkg --print-architecture) == amd64 ]]; then -- if [[ "${SKIP_EXTERNAL_TOOLCHAINS}" != "yes" ]]; then -- -- # bind mount toolchain if defined -- if [[ -d "${ARMBIAN_CACHE_TOOLCHAIN_PATH}" ]]; then -- mountpoint -q "${SRC}"/cache/toolchain && umount -l "${SRC}"/cache/toolchain -- mount --bind "${ARMBIAN_CACHE_TOOLCHAIN_PATH}" "${SRC}"/cache/toolchain -- fi -- -- display_alert "Checking for external GCC compilers" "" "info" -- # download external Linaro compiler and missing special dependencies since they are needed for certain sources -- -- local toolchains=( -- "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-arm-none-eabi-4.8-2014.04_linux.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz" -- "${ARMBIAN_MIRROR}/_toolchain/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz" -- ) -- -- USE_TORRENT_STATUS=${USE_TORRENT} -- USE_TORRENT="no" -- for toolchain in ${toolchains[@]}; do -- download_and_verify "_toolchain" "${toolchain##*/}" -- done -- USE_TORRENT=${USE_TORRENT_STATUS} -- -- rm -rf "${SRC}"/cache/toolchain/*.tar.xz* -- local existing_dirs=($(ls -1 "${SRC}"/cache/toolchain)) -- for dir in ${existing_dirs[@]}; do -- local found=no -- for toolchain in ${toolchains[@]}; do -- local filename=${toolchain##*/} -- local dirname=${filename//.tar.xz/} -- [[ $dir == $dirname ]] && found=yes -- done -- if [[ $found == no ]]; then -- display_alert "Removing obsolete toolchain" "$dir" -- rm -rf "${SRC}/cache/toolchain/${dir}" -- fi -- done -- else -- display_alert "Ignoring toolchains" "SKIP_EXTERNAL_TOOLCHAINS: ${SKIP_EXTERNAL_TOOLCHAINS}" "info" -- fi -- fi -+ # Mostly deprecated. -+ download_external_toolchains - - fi # check offline - -@@ -252,8 +181,9 @@ prepare_host() { - fi - fi - -- [[ ! -f "${USERPATCHES_PATH}"/customize-image.sh ]] && cp "${SRC}"/config/templates/customize-image.sh.template "${USERPATCHES_PATH}"/customize-image.sh -+ [[ ! -f "${USERPATCHES_PATH}"/customize-image.sh ]] && run_host_command_logged cp -pv "${SRC}"/config/templates/customize-image.sh.template "${USERPATCHES_PATH}"/customize-image.sh - -+ # @TODO: what is this, and why? - if [[ ! -f "${USERPATCHES_PATH}"/README ]]; then - rm -f "${USERPATCHES_PATH}"/readme.txt - echo 'Please read documentation about customizing build configuration' > "${USERPATCHES_PATH}"/README -@@ -263,78 +193,13 @@ prepare_host() { - find "${SRC}"/patch -maxdepth 2 -type d ! -name . | sed "s%/.*patch%/$USERPATCHES_PATH%" | xargs mkdir -p - fi - -- # check free space (basic) -- local freespace=$(findmnt --target "${SRC}" -n -o AVAIL -b 2> /dev/null) # in bytes -- if [[ -n $freespace && $(($freespace / 1073741824)) -lt 10 ]]; then -- display_alert "Low free space left" "$(($freespace / 1073741824)) GiB" "wrn" -+ # check free space (basic) @TODO probably useful to refactor and implement in multiple spots. -+ local free_space_bytes -+ free_space_bytes=$(findmnt --target "${SRC}" -n -o AVAIL -b 2> /dev/null) # in bytes -+ if [[ -n $free_space_bytes && $((free_space_bytes / 1073741824)) -lt 10 ]]; then -+ display_alert "Low free space left" "$((free_space_bytes / 1073741824)) GiB" "wrn" - # pause here since dialog-based menu will hide this message otherwise - echo -e "Press \e[0;33m\x1B[0m to abort compilation, \e[0;33m\x1B[0m to ignore and continue" - read # @TODO: this fails if stdin is not a tty, or just hangs - fi - } -- --# wait_for_package_manager --# --# * installation will break if we try to install when package manager is running --# --wait_for_package_manager() { -- # exit if package manager is running in the back -- while true; do -- if [[ "$( -- fuser /var/lib/dpkg/lock 2> /dev/null -- echo $? -- )" != 1 && "$( -- fuser /var/lib/dpkg/lock-frontend 2> /dev/null -- echo $? -- )" != 1 ]]; then -- display_alert "Package manager is running in the background." "Please wait! Retrying in 30 sec" "wrn" -- sleep 30 -- else -- break -- fi -- done --} -- --function fetch_and_build_host_tools() { -- call_extension_method "fetch_sources_tools" <<- 'FETCH_SOURCES_TOOLS' -- *fetch host-side sources needed for tools and build* -- Run early to fetch_from_repo or otherwise obtain sources for needed tools. -- FETCH_SOURCES_TOOLS -- -- call_extension_method "build_host_tools" <<- 'BUILD_HOST_TOOLS' -- *build needed tools for the build, host-side* -- After sources are fetched, build host-side tools needed for the build. -- BUILD_HOST_TOOLS -- --} -- --# Install the whitespace-delimited packages listed in the first parameter, in the host (not chroot). --# It handles correctly the case where all wanted packages are already installed, and in that case does nothing. --# If packages are to be installed, it does an apt-get update first. --function install_host_side_packages() { -- declare wanted_packages_string -- declare -a currently_installed_packages missing_packages -- wanted_packages_string=${*} -- missing_packages=() -- # shellcheck disable=SC2207 # I wanna split, thanks. -- currently_installed_packages=($(dpkg-query --show --showformat='${Package} ')) -- for PKG_TO_INSTALL in ${wanted_packages_string}; do -- # shellcheck disable=SC2076 # I wanna match literally, thanks. -- if [[ ! " ${currently_installed_packages[*]} " =~ " ${PKG_TO_INSTALL} " ]]; then -- display_alert "Should install package" "${PKG_TO_INSTALL}" -- missing_packages+=("${PKG_TO_INSTALL}") -- fi -- done -- -- if [[ ${#missing_packages[@]} -gt 0 ]]; then -- display_alert "Updating apt host-side for installing packages" "${#missing_packages[@]} packages" "info" -- host_apt_get update -- display_alert "Installing host-side packages" "${missing_packages[*]}" "info" -- host_apt_get_install "${missing_packages[@]}" -- else -- display_alert "All host-side dependencies/packages already installed." "Skipping host-hide install" "debug" -- fi -- -- unset currently_installed_packages -- return 0 --} -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index d4070c268..42610621d 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -8,13 +8,14 @@ function chroot_sdcard_apt_get_install_download_only() { - } - - function chroot_sdcard_apt_get() { -+ acng_check_status_or_restart # make sure apt-cacher-ng is running OK. -+ - local -a apt_params=("-${APT_OPTS:-y}") - [[ $NO_APT_CACHER != yes ]] && apt_params+=( - -o "Acquire::http::Proxy=\"http://${APT_PROXY_ADDR:-localhost:3142}\"" - -o "Acquire::http::Proxy::localhost=\"DIRECT\"" - ) - apt_params+=(-o "Dpkg::Use-Pty=0") # Please be quiet -- # IMPORTANT: this function returns the exit code of last statement, in this case chroot (which gets its result from bash which calls apt-get) - chroot_sdcard DEBIAN_FRONTEND=noninteractive apt-get "${apt_params[@]}" "$@" - } - -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index 9f526d9b9..3dc4feaaf 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -92,17 +92,14 @@ get_or_create_rootfs_cache_chroot_sdcard() { - fi - - mount_chroot "$SDCARD" --} ############################################################################# -+} - - function create_new_rootfs_cache() { -- # @TODO: unify / remove this. distribuitions has the good stuff. -- # stage: debootstrap base system -+ # this is different between debootstrap and regular apt-get; here we use acng as a prefix to the real repo -+ local debootstrap_apt_mirror="http://${APT_MIRROR}" - if [[ $NO_APT_CACHER != yes ]]; then -- # apt-cacher-ng apt-get proxy parameter -- local apt_extra="-o Acquire::http::Proxy=\"http://${APT_PROXY_ADDR:-localhost:3142}\"" -- local apt_mirror="http://${APT_PROXY_ADDR:-localhost:3142}/$APT_MIRROR" -- else -- local apt_mirror="http://$APT_MIRROR" -+ local debootstrap_apt_mirror="http://${APT_PROXY_ADDR:-localhost:3142}/${APT_MIRROR}" -+ acng_check_status_or_restart - fi - - display_alert "Installing base system" "Stage 1/2" "info" -@@ -113,17 +110,18 @@ function create_new_rootfs_cache() { - ${PACKAGE_LIST_EXCLUDE:+ --exclude="${PACKAGE_LIST_EXCLUDE// /,}"} # exclude some - "--arch=${ARCH}" # the arch - "--components=${DEBOOTSTRAP_COMPONENTS}" # from aggregation? -- "--foreign" "${RELEASE}" "${SDCARD}/" "${apt_mirror}" # path and mirror -+ "--foreign" "${RELEASE}" "${SDCARD}/" "${debootstrap_apt_mirror}" # path and mirror - ) -- debootstrap "${deboostrap_arguments[@]}" 2>&1 || { # invoke debootstrap, stderr to stdout. -+ -+ run_host_command_logged debootstrap "${deboostrap_arguments[@]}" || { - exit_with_error "Debootstrap first stage failed" "${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL}" - } -- [[ ! -f $SDCARD/debootstrap/debootstrap ]] && exit_with_error "Debootstrap first stage did not produce marker file" -+ [[ ! -f ${SDCARD}/debootstrap/debootstrap ]] && exit_with_error "Debootstrap first stage did not produce marker file" - -- cp "/usr/bin/$QEMU_BINARY" "$SDCARD/usr/bin/" # @TODO: who cleans this up later? -+ run_host_command_logged cp -pv "/usr/bin/$QEMU_BINARY" "$SDCARD/usr/bin/" # @TODO: who cleans this up later? - - mkdir -p "${SDCARD}/usr/share/keyrings/" -- cp /usr/share/keyrings/*-archive-keyring.gpg "${SDCARD}/usr/share/keyrings/" -+ run_host_command_logged cp -pv /usr/share/keyrings/*-archive-keyring.gpg "${SDCARD}/usr/share/keyrings/" - - display_alert "Installing base system" "Stage 2/2" "info" - export MSG_IF_ERROR="Debootstrap second stage failed ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL}" -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index fc06a5e35..a7cfb652b 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -240,18 +240,54 @@ source "${SRC}"/lib/functions/general/git.sh - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/general/host.sh --# shellcheck source=lib/functions/general/host.sh --source "${SRC}"/lib/functions/general/host.sh -+### lib/functions/general/repo.sh -+# shellcheck source=lib/functions/general/repo.sh -+source "${SRC}"/lib/functions/general/repo.sh - - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/general/repo.sh --# shellcheck source=lib/functions/general/repo.sh --source "${SRC}"/lib/functions/general/repo.sh -+### lib/functions/host/apt-cacher-ng.sh -+# shellcheck source=lib/functions/host/apt-cacher-ng.sh -+source "${SRC}"/lib/functions/host/apt-cacher-ng.sh -+ -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/host/basic-deps.sh -+# shellcheck source=lib/functions/host/basic-deps.sh -+source "${SRC}"/lib/functions/host/basic-deps.sh -+ -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/host/external-toolchains.sh -+# shellcheck source=lib/functions/host/external-toolchains.sh -+source "${SRC}"/lib/functions/host/external-toolchains.sh -+ -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/host/host-utils.sh -+# shellcheck source=lib/functions/host/host-utils.sh -+source "${SRC}"/lib/functions/host/host-utils.sh -+ -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/host/prepare-host.sh -+# shellcheck source=lib/functions/host/prepare-host.sh -+source "${SRC}"/lib/functions/host/prepare-host.sh - - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - -From 2c4ee50aabed7ad126f7ca80b870077672371a5d Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 9 Mar 2022 13:20:25 +0100 -Subject: [PATCH] armbian-next: hostdeps: all toolchains via - `crossbuild-essential-arm64`/`armhf`/`amd64` - -- trying to sort out hostdeps for Jammy [WiP] ---- - lib/functions/general/host.sh | 41 +++++++++++++++++++++-------------------- - 1 file changed, 21 insertions(+), 20 deletions(-) - -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index aefa2d236..925e0d3aa 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -58,20 +58,30 @@ prepare_host() { - # packages list for host - # NOTE: please sync any changes here with the Dockerfile and Vagrantfile - declare -a host_dependencies=( -- acl aptly aria2 bc binfmt-support bison btrfs-progs -- build-essential ca-certificates ccache cpio cryptsetup curl -+ # big bag of stuff from before -+ acl aptly bc binfmt-support bison btrfs-progs -+ build-essential ca-certificates ccache cpio cryptsetup - debian-archive-keyring debian-keyring debootstrap device-tree-compiler - dialog dirmngr dosfstools dwarves f2fs-tools fakeroot flex gawk -- gcc-arm-linux-gnueabihf -- gcc-arm-linux-gnueabi gcc-arm-none-eabi -- gdisk gnupg1 gpg imagemagick jq kmod libbison-dev -- libc6-dev-armhf-cross libelf-dev libfdt-dev libfile-fcntllock-perl -- libfl-dev liblz4-tool libncurses-dev libpython2.7-dev libssl-dev -- libusb-1.0-0-dev linux-base locales lzop ncurses-base ncurses-term -- nfs-kernel-server ntpdate p7zip-full parted patchutils pigz pixz pbzip2 -+ gnupg gpg imagemagick jq kmod libbison-dev -+ libelf-dev libfdt-dev libfile-fcntllock-perl -+ libfl-dev liblz4-tool libncurses-dev libssl-dev -+ libusb-1.0-0-dev linux-base locales ncurses-base ncurses-term -+ ntpdate patchutils - pkg-config pv python3-dev python3-distutils qemu-user-static rsync swig -- systemd-container u-boot-tools udev unzip uuid-dev wget whiptail zip -- zlib1g-dev file ccze colorized-logs tree -+ systemd-container u-boot-tools udev uuid-dev whiptail -+ zlib1g-dev -+ -+ # non-mess below? -+ file ccze colorized-logs tree # logging utilities -+ unzip zip p7zip-full pigz pixz pbzip2 lzop # compressors et al -+ parted gdisk # partition tools -+ aria2 curl wget # downloaders et al -+ -+ # toolchains. NEW: using metapackages, allow us to have same list of all arches; brings both C and C++ compilers -+ crossbuild-essential-armhf -+ crossbuild-essential-arm64 -+ crossbuild-essential-amd64 - ) - - if [[ $(dpkg --print-architecture) == amd64 ]]; then -@@ -86,15 +96,6 @@ prepare_host() { - exit_with_error "Running this tool on non x86_64 or arm64 build host is not supported" - fi - -- # Add support for Ubuntu 20.04, 21.04 and Mint 20.x -- if [[ $HOSTRELEASE =~ ^(focal|impish|hirsute|ulyana|ulyssa|bullseye|uma)$ ]]; then -- host_dependencies+=(python2 python3) -- ln -fs /usr/bin/python2.7 /usr/bin/python2 -- ln -fs /usr/bin/python2.7 /usr/bin/python -- else -- host_dependencies+=("python" "libpython-dev") -- fi -- - display_alert "Build host OS release" "${HOSTRELEASE:-(unknown)}" "info" - - # Ubuntu 21.04.x (Hirsute) x86_64 is the only fully supported host OS release - -From c8a9f3aca890ed098b160bd060f11042d21ee711 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 17 Mar 2022 16:19:49 +0100 -Subject: [PATCH] armbian-next: remove `eatmydata` usage, leftover from failed - tries to make git faster - ---- - lib/functions/general/git.sh | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 2e51752bd..3af8a6b3e 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -8,7 +8,7 @@ improved_git() { - local delay=10 - local count=0 - while [ $count -lt $retries ]; do -- run_host_command_logged_raw eatmydata "$real_git" --no-pager "$@" && return 0 # this gobbles up errors, but returns if OK, so everything after is error -+ run_host_command_logged_raw "$real_git" --no-pager "$@" && return 0 # this gobbles up errors, but returns if OK, so everything after is error - count=$((count + 1)) - display_alert "improved_git try $count failed, retrying in ${delay} seconds" "git $*" "warn" - sleep $delay -@@ -19,7 +19,7 @@ improved_git() { - - # Not improved, just regular, but logged "correctly". - regular_git() { -- run_host_command_logged_raw eatmydata -- git --no-pager "$@" -+ run_host_command_logged_raw git --no-pager "$@" - } - - # avoid repeating myself too much - -From 5d4c5aa9320ab317f540415ddb5403538630bcfb Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 16 Mar 2022 03:13:29 +0100 -Subject: [PATCH] armbian-next: fix git origin check, recreate working copy if - origin does not match - -- fix cold bundle https download progress reporting ---- - lib/functions/general/git.sh | 30 +++++++++++++++++++++--------- - 1 file changed, 21 insertions(+), 9 deletions(-) - -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 8194e4758..2e51752bd 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -84,20 +84,32 @@ fetch_from_repo() { - - display_alert "Git working dir" "${git_work_dir}" "git" - -- # "Sanity check" since we only support one "origin" -- if [[ "$(git rev-parse --git-dir)" == ".git" && "$url" != *"$(git remote get-url origin | sed 's/^.*@//' | sed 's/^.*\/\///')" ]]; then -- exit_with_error "Remote URL does not match. Stopping!" "${git_work_dir} $dir $ref_name" "warn" -+ local expected_origin_url actual_origin_url -+ expected_origin_url="$(echo -n "${url}" | sed 's/^.*@//' | sed 's/^.*\/\///')" -+ -+ # Make sure the origin matches what is expected. If it doesn't, clean up and start again. -+ if [[ "$(git rev-parse --git-dir)" == ".git" ]]; then -+ actual_origin_url="$(git config remote.origin.url | sed 's/^.*@//' | sed 's/^.*\/\///')" -+ if [[ "${expected_origin_url}" != "${actual_origin_url}" ]]; then -+ display_alert "Remote git URL does not match, deleting working copy" "${git_work_dir} expected: '${expected_origin_url}' actual: '${actual_origin_url}'" "warn" -+ cd "${SRC}" || exit 3 # free up cwd -+ run_host_command_logged rm -rf "${git_work_dir}" # delete the dir -+ mkdir -p "${git_work_dir}" || exit_with_error "No path or no write permission" "${git_work_dir}" # recreate -+ cd "${git_work_dir}" || exit #reset cwd -+ fi - fi - - local do_warmup_remote="no" do_cold_bundle="no" do_add_origin="no" - - if [[ "$(git rev-parse --git-dir)" != ".git" ]]; then -+ # Dir is not a git working copy. Make it so. - display_alert "Creating local copy" "$dir $ref_name" - regular_git init -q --initial-branch="armbian_unused_initial_branch" . - offline=false # Force online, we'll need to fetch. - do_add_origin="yes" # Just created the repo, it needs an origin later. - do_warmup_remote="yes" # Just created the repo, mark it as ready to receive the warm remote if exists. - do_cold_bundle="yes" # Just created the repo, mark it as ready to receive a cold bundle if that is available. -+ # @TODO: possibly hang a cleanup handler here: if this fails, ${git_work_dir} should be removed. - fi - - local changed=false -@@ -166,7 +178,7 @@ fetch_from_repo() { - display_alert "Cleaning git dir" "$(git status -s 2> /dev/null | wc -l) files" # working directory is not clean, show it - - #fasthash_debug "before git checkout of $dir $ref_name" # fasthash interested in this -- regular_git checkout -f -q "${checkout_from}" # Return the files that are tracked by git to the initial state. -+ regular_git checkout -f -q "${checkout_from}" # Return the files that are tracked by git to the initial state. - - #fasthash_debug "before git clean of $dir $ref_name" - regular_git clean -q -d -f # Files that are not tracked by git and were added when the patch was applied must be removed. -@@ -212,9 +224,9 @@ function git_fetch_from_bundle_file() { - - function download_git_bundle_from_http() { - local bundle_file="${1}" bundle_url="${2}" -- if [[ ! -f "${git_cold_bundle_cache_file}" ]]; then # Download the bundle file if it does not exist. -- display_alert "Downloading Git cold bundle via HTTP" "${bundle_url}" "info" # This gonna take a while. And waste bandwidth -- run_host_command_logged wget --continue --progress=giga --output-document="${bundle_file}" "${bundle_url}" -+ if [[ ! -f "${git_cold_bundle_cache_file}" ]]; then # Download the bundle file if it does not exist. -+ display_alert "Downloading Git cold bundle via HTTP" "${bundle_url}" "info" # This gonna take a while. And waste bandwidth -+ run_host_command_logged wget --continue --progress=dot:giga --output-document="${bundle_file}" "${bundle_url}" - else - display_alert "Cold bundle file exists, using it" "${bundle_file}" "git" - fi -@@ -295,7 +307,7 @@ function git_handle_cold_and_warm_bundle_remotes() { - regular_git remote add "${GIT_WARM_REMOTE_NAME}" "${GIT_WARM_REMOTE_URL}" # Add the remote to the warmup source - has_git_warm_remote=1 # mark as done. Will export the bundle! - -- improved_git_fetch --no-tags "${GIT_WARM_REMOTE_NAME}" "${GIT_WARM_REMOTE_BRANCH}" # Fetch the remote branch, but no tags -+ improved_git_fetch --no-tags "${GIT_WARM_REMOTE_NAME}" "${GIT_WARM_REMOTE_BRANCH}" # Fetch the remote branch, but no tags - display_alert "After warm bundle, working copy size" "$(du -h -s | awk '{print $1}')" "git" # Show size after bundle pull - - # Checkout that to a branch. We wanna have a local reference to what has been fetched. -@@ -304,7 +316,7 @@ function git_handle_cold_and_warm_bundle_remotes() { - regular_git branch "${git_warm_branch_name}" FETCH_HEAD || true - - improved_git_fetch "${GIT_WARM_REMOTE_NAME}" "'refs/tags/${GIT_WARM_REMOTE_FETCH_TAGS}:refs/tags/${GIT_WARM_REMOTE_FETCH_TAGS}'" || true # Fetch the remote branch, but no tags -- display_alert "After warm bundle tags, working copy size" "$(du -h -s | awk '{print $1}')" "git" # Show size after bundle pull -+ display_alert "After warm bundle tags, working copy size" "$(du -h -s | awk '{print $1}')" "git" # Show size after bundle pull - - # Lookup the tag (at the warm remote directly) to find the rev to shallow to. - if [[ "${GIT_WARM_REMOTE_SHALLOW_AT_TAG}" != "" ]]; then - -From 625031cd5797295e14494d7d2c986c7de9b6e15d Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Tue, 15 Mar 2022 14:10:32 +0100 -Subject: [PATCH] armbian-next: finally consolidating logs into output/logs; - colorized HTML logs - ---- - lib/functions/cli/cli-entrypoint.sh | 3 +- - lib/functions/configuration/main-config.sh | 6 +-- - lib/functions/general/host.sh | 2 +- - lib/functions/logging/logging.sh | 60 +++++++++++++++++++++++++++++- - 4 files changed, 65 insertions(+), 6 deletions(-) - -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index 706d9a83a..5b905062f 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -91,7 +91,8 @@ function cli_entrypoint() { - export DESTIMG="${SRC}/.tmp/image-${ARMBIAN_BUILD_UUID}" # DESTIMG is where the backing image (raw, huge, sparse file) is kept (not the final destination) - export LOGDIR="${SRC}/.tmp/logs-${ARMBIAN_BUILD_UUID}" # Will be initialized very soon, literally, below. - -- LOG_SECTION=entrypoint start_logging_section # This creates LOGDIR. Hopefully. -+ LOG_SECTION=entrypoint start_logging_section # This creates LOGDIR. -+ add_cleanup_handler trap_handler_cleanup_logging # cleanup handler for logs; it rolls it up from LOGDIR into DEST/logs - - # Source the extensions manager library at this point, before sourcing the config. - # This allows early calls to enable_extension(), but initialization proper is done later. -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 86a02b15e..6d2f404b1 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -50,10 +50,10 @@ function do_main_configuration() { - fi - - # image artefact destination with or without subfolder -- FINALDEST=$DEST/images -+ FINALDEST="${DEST}/images" - if [[ -n "${MAKE_FOLDERS}" ]]; then -- FINALDEST=$DEST/images/"${BOARD}"/"${MAKE_FOLDERS}" -- install -d ${FINALDEST} -+ FINALDEST="${DEST}"/images/"${BOARD}"/"${MAKE_FOLDERS}" -+ install -d "${FINALDEST}" - fi - - # TODO: fixed name can't be used for parallel image building -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index 6053248b5..aefa2d236 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -71,7 +71,7 @@ prepare_host() { - nfs-kernel-server ntpdate p7zip-full parted patchutils pigz pixz pbzip2 - pkg-config pv python3-dev python3-distutils qemu-user-static rsync swig - systemd-container u-boot-tools udev unzip uuid-dev wget whiptail zip -- zlib1g-dev file ccze tree -+ zlib1g-dev file ccze colorized-logs tree - ) - - if [[ $(dpkg --print-architecture) == amd64 ]]; then -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 11db45e61..296b46ddb 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -27,7 +27,7 @@ function logging_error_show_log() { - - if [[ -f /usr/bin/ccze ]]; then # use 'ccze' to colorize the log, making errors a lot more obvious. - # shellcheck disable=SC2002 # my cat is great. thank you, shellcheck. -- cat "${logfile_to_show}" | grep -v -e "^$" | /usr/bin/ccze -A | sed -e "${prefix_sed_cmd}" 1>&2 # write it to stderr!! -+ cat "${logfile_to_show}" | grep -v -e "^$" | /usr/bin/ccze -o nolookups -A | sed -e "${prefix_sed_cmd}" 1>&2 # write it to stderr!! - else - # shellcheck disable=SC2002 # my cat is great. thank you, shellcheck. - cat "${logfile_to_show}" | grep -v -e "^$" | sed -e "${prefix_sed_cmd}" 1>&2 # write it to stderr!! -@@ -262,3 +262,61 @@ function logging_echo_prefix_for_pv() { - return 0 - - } -+ -+# Cleanup for logging. -+function trap_handler_cleanup_logging() { -+ [[ ! -d "${LOGDIR}" ]] && return 0 -+ display_alert "Cleaning up logs from LOGDIR" "${LOGDIR}" "debug" -+ -+ # Just delete LOGDIR if in CONFIG_DEFS_ONLY mode. -+ if [[ "${CONFIG_DEFS_ONLY}" == "yes" ]]; then -+ display_alert "Discarding logs" "CONFIG_DEFS_ONLY=${CONFIG_DEFS_ONLY}" "debug" -+ rm -rf --one-file-system "${LOGDIR}" -+ return 0 -+ fi -+ -+ local target_path="${DEST}/logs" -+ mkdir -p "${target_path}" -+ local target_file="${target_path}/armbian-logs-${ARMBIAN_BUILD_UUID}.html" -+ -+ cat <<- HTML_HEADER > "${target_file}" -+ -+ -+ Armbian logs for ${ARMBIAN_BUILD_UUID} -+ -+ -+ -+ HTML_HEADER -+ -+ # Find and sort the files there, store in array one per logfile -+ declare -a logfiles_array -+ mapfile -t logfiles_array < <(find "${LOGDIR}" -type f | LC_ALL=C sort -h) -+ -+ for logfile_full in "${logfiles_array[@]}"; do -+ local logfile_base="$(basename "${logfile_full}")" -+ if [[ -f /usr/bin/ccze ]] && [[ -f /usr/bin/ansi2html ]]; then -+ cat <<- HTML_ONE_LOGFILE_WITH_CCZE >> "${target_file}" -+

${logfile_base}

-+
-+ $(cat "${logfile_full}" | ccze -o nolookups --raw-ansi | ansi2html --no-wrap --no-header) -+
-+
-+ HTML_ONE_LOGFILE_WITH_CCZE -+ else -+ cat <<- HTML_ONE_LOGFILE_NO_CCZE >> "${target_file}" -+

${logfile_base}

-+
$(cat "${logfile_full}")
-+ HTML_ONE_LOGFILE_NO_CCZE -+ fi -+ done -+ -+ cat <<- HTML_FOOTER >> "${target_file}" -+ -+ HTML_FOOTER -+ -+ rm -rf --one-file-system "${LOGDIR}" -+ display_alert "Build log file" "${target_file}" -+} - -From 58e643c14a0b527d25856938bfc219835984e83d Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Tue, 15 Mar 2022 11:30:55 +0100 -Subject: [PATCH] armbian-next: introduce `do_with_retries()` and use it for - apt remote operations during image build - ---- - lib/functions/logging/runners.sh | 15 +++++++++++++++ - lib/functions/rootfs/create-cache.sh | 13 +++++++++---- - 2 files changed, 24 insertions(+), 4 deletions(-) - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index a0f396cc7..d4070c268 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -163,3 +163,18 @@ function run_host_command_logged_raw() { - run_on_sdcard() { - chroot_sdcard "${@}" - } -+ -+# Auto retries the number of times passed on first argument to run all the other arguments. -+function do_with_retries() { -+ local retries="${1}" -+ shift -+ local counter=0 -+ while [[ $counter -lt $retries ]]; do -+ counter=$((counter + 1)) -+ "$@" && return 0 # execute and return 0 if success; if not, let it loop; -+ display_alert "Command failed, retrying in 5s" "$*" "warn" -+ sleep 5 -+ done -+ display_alert "Command failed ${counter} times, giving up" "$*" "warn" -+ return 1 -+} -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index b833ae3c8..9f526d9b9 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -170,11 +170,11 @@ function create_new_rootfs_cache() { - - # stage: update packages list - display_alert "Updating package list" "$RELEASE" "info" -- chroot_sdcard_apt_get update -+ do_with_retries 3 chroot_sdcard_apt_get update - - # stage: upgrade base packages from xxx-updates and xxx-backports repository branches - display_alert "Upgrading base packages" "Armbian" "info" -- chroot_sdcard_apt_get upgrade -+ do_with_retries 3 chroot_sdcard_apt_get upgrade - - # Myy: Dividing the desktop packages installation steps into multiple - # ones. We first install the "ADDITIONAL_PACKAGES" in order to get -@@ -186,8 +186,9 @@ function create_new_rootfs_cache() { - display_alert "Installing the main packages for" "Armbian" "info" - export MSG_IF_ERROR="Installation of Armbian main packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed" - # First, try to download-only up to 3 times, to work around network/proxy problems. -- chroot_sdcard_apt_get_install_download_only "$PACKAGE_MAIN_LIST" || chroot_sdcard_apt_get_install_download_only "$PACKAGE_MAIN_LIST" || chroot_sdcard_apt_get_install_download_only "$PACKAGE_MAIN_LIST" -- # Now do the install. -+ do_with_retries 3 chroot_sdcard_apt_get_install_download_only "$PACKAGE_MAIN_LIST" -+ -+ # Now do the install, all packages should have been downloaded by now - chroot_sdcard_apt_get_install "$PACKAGE_MAIN_LIST" - - if [[ $BUILD_DESKTOP == "yes" ]]; then -@@ -211,6 +212,10 @@ function create_new_rootfs_cache() { - - display_alert "Installing the desktop packages for" "Armbian" "info" - MSG_IF_ERROR="Installation of Armbian desktop packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed" -+ # Retry download-only 3 times first. -+ do_with_retries 3 chroot_sdcard_apt_get_install_download_only ${apt_desktop_install_flags} $PACKAGE_LIST_DESKTOP -+ -+ # Then do the actual install. - chroot_sdcard_apt_get install ${apt_desktop_install_flags} $PACKAGE_LIST_DESKTOP - fi - - -From ff3ccab39db2e364feb16b583c973d6d305c69d5 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 7 Mar 2022 09:42:57 +0100 -Subject: [PATCH] armbian-next: another round of logging tuning/fixes; log - assets; git logging - -- introduce `do_with_log_asset()` and `LOG_ASSET=xxx` -- separate "git" logging level -- add `trap_handler_cleanup_destimg()` to cleanup DESTIMG ---- - lib/functions/cli/cli-entrypoint.sh | 2 +- - lib/functions/compilation/kernel-debs.sh | 32 +++++++++-------- - lib/functions/compilation/patch/fasthash.sh | 8 ++--- - lib/functions/configuration/main-config.sh | 4 +-- - lib/functions/general/git.sh | 55 ++++++++++++++--------------- - lib/functions/image/initrd.sh | 2 +- - lib/functions/image/rootfs-to-image.sh | 27 ++++++++++---- - lib/functions/logging/logging.sh | 29 +++++++++++---- - lib/functions/main/default-build.sh | 2 +- - lib/functions/main/rootfs-image.sh | 4 +-- - lib/functions/rootfs/distro-agnostic.sh | 1 + - 11 files changed, 99 insertions(+), 67 deletions(-) - -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index 3b8c1ad7d..706d9a83a 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -88,7 +88,7 @@ function cli_entrypoint() { - export SDCARD="${SRC}/.tmp/rootfs-${ARMBIAN_BUILD_UUID}" # SDCARD (which is NOT an sdcard, but will be, maybe, one day) is where we work the rootfs before final imaging. "rootfs" stage. - export MOUNT="${SRC}/.tmp/mount-${ARMBIAN_BUILD_UUID}" # MOUNT ("mounted on the loop") is the mounted root on final image (via loop). "image" stage - export EXTENSION_MANAGER_TMP_DIR="${SRC}/.tmp/extensions-${ARMBIAN_BUILD_UUID}" # EXTENSION_MANAGER_TMP_DIR used to store extension-composed functions -- export DESTIMG="${SRC}/.tmp/image-${ARMBIAN_BUILD_UUID}" # DESTIMG is where the backing image (raw, huge, sparse file) is kept -+ export DESTIMG="${SRC}/.tmp/image-${ARMBIAN_BUILD_UUID}" # DESTIMG is where the backing image (raw, huge, sparse file) is kept (not the final destination) - export LOGDIR="${SRC}/.tmp/logs-${ARMBIAN_BUILD_UUID}" # Will be initialized very soon, literally, below. - - LOG_SECTION=entrypoint start_logging_section # This creates LOGDIR. Hopefully. -diff --git a/lib/functions/compilation/kernel-debs.sh b/lib/functions/compilation/kernel-debs.sh -index 9d1b813d3..b8eb9d266 100644 ---- a/lib/functions/compilation/kernel-debs.sh -+++ b/lib/functions/compilation/kernel-debs.sh -@@ -51,10 +51,10 @@ function prepare_kernel_packaging_debs() { - #display_alert "Kernel install dir" "incoming from KBUILD make" "debug" - #run_host_command_logged tree -C --du -h "${kernel_dest_install_dir}" "| grep --line-buffered -v -e '\.ko' -e '\.h' " - -- display_alert "tmp_kernel_install_dirs INSTALL_PATH:" "${tmp_kernel_install_dirs[INSTALL_PATH]}" "debug" -- display_alert "tmp_kernel_install_dirs INSTALL_MOD_PATH:" "${tmp_kernel_install_dirs[INSTALL_MOD_PATH]}" "debug" -- display_alert "tmp_kernel_install_dirs INSTALL_HDR_PATH:" "${tmp_kernel_install_dirs[INSTALL_HDR_PATH]}" "debug" -- display_alert "tmp_kernel_install_dirs INSTALL_DTBS_PATH:" "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" "debug" -+ # display_alert "tmp_kernel_install_dirs INSTALL_PATH:" "${tmp_kernel_install_dirs[INSTALL_PATH]}" "debug" -+ # display_alert "tmp_kernel_install_dirs INSTALL_MOD_PATH:" "${tmp_kernel_install_dirs[INSTALL_MOD_PATH]}" "debug" -+ # display_alert "tmp_kernel_install_dirs INSTALL_HDR_PATH:" "${tmp_kernel_install_dirs[INSTALL_HDR_PATH]}" "debug" -+ # display_alert "tmp_kernel_install_dirs INSTALL_DTBS_PATH:" "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" "debug" - - # package the linux-image (image, modules, dtbs (if present)) - create_kernel_deb "linux-image-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_image -@@ -77,8 +77,8 @@ function create_kernel_deb() { - declare callback_function="${3}" - - declare package_directory -- package_directory=$(mktemp -d "${WORKDIR}/${package_name}.XXXXXXXXX") # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. -- display_alert "package_directory" "${package_directory}" "debug" -+ package_directory=$(mktemp -d "${WORKDIR}/${package_name}.XXXXXXXXX") # explicitly created in WORKDIR, so is protected by that cleanup trap already -+ #display_alert "package_directory" "${package_directory}" "debug" - - declare package_DEBIAN_dir="${package_directory}/DEBIAN" # DEBIAN dir - mkdir -p "${package_DEBIAN_dir}" # maintainer scripts et al -@@ -105,7 +105,7 @@ function create_kernel_deb() { - COPYRIGHT - - # Run the callback. -- display_alert "Running callback" "callback: ${callback_function}" "debug" -+ # display_alert "Running callback" "callback: ${callback_function}" "debug" - "${callback_function}" "${@}" - - run_host_command_logged chown -R root:root "${package_directory}" # Fix ownership and permissions -@@ -116,7 +116,7 @@ function create_kernel_deb() { - cd "${package_directory}" || exit_with_error "major failure 774 for ${package_name}" - - # create md5sums file -- sh -c "cd '${package_directory}'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums" -+ # sh -c "cd '${package_directory}'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums" - - declare unpacked_size - unpacked_size="$(du -h -s "${package_directory}" | awk '{print $1}')" -@@ -135,23 +135,25 @@ function kernel_package_hook_helper() { - - cat >> "${package_DEBIAN_dir}/${script}" <<- EOT - #!/bin/bash -- echo "Armbian ${package_name} for ${kernel_version_family}: ${script} starting." -+ echo "Armbian '${package_name}' for '${kernel_version_family}': '${script}' starting." - set -e # Error control - set -x # Debugging - - $(cat "${contents}") - -- echo "Armbian ${package_name} for ${kernel_version_family}: ${script} finishing." -+ set +x # Disable debugging -+ echo "Armbian '${package_name}' for '${kernel_version_family}': '${script}' finishing." - true - EOT - chmod 775 "${package_DEBIAN_dir}/${script}" - -- display_alert "Hook debug" "${script} for ${package_name}" "debug" -- run_host_command_logged cat "${package_DEBIAN_dir}/${script}" -+ # produce log asset for script -+ LOG_ASSET="deb-${package_name}-${script}.sh" do_with_log_asset run_host_command_logged cat "${package_DEBIAN_dir}/${script}" -+ - } - - function kernel_package_callback_linux_image() { -- display_alert "package_directory" "${package_directory}" "debug" -+ display_alert "linux-image deb packaging" "${package_directory}" "debug" - - declare installed_image_path="boot/vmlinuz-${kernel_version_family}" # using old mkdebian terminology here. - declare image_name="Image" # for arm64. or, "zImage" for arm, or "vmlinuz" for others. Why? See where u-boot puts them. -@@ -217,7 +219,7 @@ function kernel_package_callback_linux_image() { - } - - function kernel_package_callback_linux_dtb() { -- display_alert "package_directory" "${package_directory}" "debug" -+ display_alert "linux-dtb packaging" "${package_directory}" "debug" - - mkdir -p "${package_directory}/boot/" - run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" "${package_directory}/boot/dtb-${kernel_version_family}" -@@ -251,7 +253,7 @@ function kernel_package_callback_linux_dtb() { - } - - function kernel_package_callback_linux_headers() { -- display_alert "package_directory for headers" "${package_directory}" "debug" -+ display_alert "linux-headers packaging" "${package_directory}" "debug" - - # targets. - local headers_target_dir="${package_directory}/usr/src/linux-headers-${kernel_version_family}" # headers/tools etc -diff --git a/lib/functions/compilation/patch/fasthash.sh b/lib/functions/compilation/patch/fasthash.sh -index 0e74b1c79..771837b89 100644 ---- a/lib/functions/compilation/patch/fasthash.sh -+++ b/lib/functions/compilation/patch/fasthash.sh -@@ -34,13 +34,13 @@ function finish_fasthash() { - } - - function fasthash_debug() { -- if [[ "${SHOW_FASTHASH}" != "yes" ]]; then # enable debug for many, many debugging msgs -+ if [[ "${SHOW_FASTHASH}" != "yes" ]]; then - return 0 - fi - display_alert "fasthash_debug" "$*" "fasthash" -- find . -type f -printf '%T@ %p\n' | -- grep -v -e "\.ko" -e "\.o" -e "\.cmd" -e "\.mod" -e "\.a" -e "\.tmp" -e "\.dtb" -e ".scr" -e "\.\/debian" | -- sort -n | tail -n 10 1>&2 -+ run_host_command_logged find . -type f -printf "'%T@ %p\\n'" "|" \ -+ grep -v -e "\.ko" -e "\.o" -e "\.cmd" -e "\.mod" -e "\.a" -e "\.tmp" -e "\.dtb" -e ".scr" -e "\.\/debian" "|" \ -+ sort -n "|" tail -n 10 - } - - function get_file_modification_time() { # @TODO: This is almost always called from a subshell. No use throwing errors? -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index bea0c0efa..86a02b15e 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -417,7 +417,7 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - display_alert "Done with main-config.sh" "do_main_configuration" "debug" - } - --# This is called by main_default_build_single(), which is logged correctly. so just output to stdout here. -+# This is called by main_default_build_single() but declared here for 'convenience' - function write_config_summary_output_file() { - local debug_dpkg_arch debug_uname debug_virt debug_src_mount debug_src_perms debug_src_temp_perms - debug_dpkg_arch="$(dpkg --print-architecture)" -@@ -428,7 +428,7 @@ function write_config_summary_output_file() { - debug_src_temp_perms="$(getfacl -p "${SRC}"/.tmp 2> /dev/null)" - - display_alert "Writing build config summary to" "debug log" "debug" -- run_host_command_logged cat <<- EOF -+ LOG_ASSET="build.summary.txt" do_with_log_asset run_host_command_logged cat <<- EOF - ## BUILD SCRIPT ENVIRONMENT - - Repository: $REPOSITORY_URL -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 85dd4470f..8194e4758 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -41,7 +41,7 @@ function improved_git_fetch() { - # : "yes" to create subdirectory for tag or branch name - # - fetch_from_repo() { -- display_alert "fetch_from_repo" "$*" "debug" -+ display_alert "fetch_from_repo" "$*" "git" - local url=$1 - local dir=$2 - local ref=$3 -@@ -74,7 +74,7 @@ fetch_from_repo() { - - # if GIT_FIXED_WORKDIR has something, ignore above logic and use that directly. - if [[ "${GIT_FIXED_WORKDIR}" != "" ]]; then -- display_alert "GIT_FIXED_WORKDIR is set to" "${GIT_FIXED_WORKDIR}" "debug" -+ display_alert "GIT_FIXED_WORKDIR is set to" "${GIT_FIXED_WORKDIR}" "git" - git_work_dir="${SRC}/cache/sources/${GIT_FIXED_WORKDIR}" - fi - -@@ -82,7 +82,7 @@ fetch_from_repo() { - - cd "${git_work_dir}" || exit - -- display_alert "Git working dir" "${git_work_dir}" "debug" -+ display_alert "Git working dir" "${git_work_dir}" "git" - - # "Sanity check" since we only support one "origin" - if [[ "$(git rev-parse --git-dir)" == ".git" && "$url" != *"$(git remote get-url origin | sed 's/^.*@//' | sed 's/^.*\/\///')" ]]; then -@@ -134,7 +134,7 @@ fetch_from_repo() { - ;; - esac - -- display_alert "Git local_hash vs remote_hash" "${local_hash} vs ${remote_hash}" "debug" -+ display_alert "Git local_hash vs remote_hash" "${local_hash} vs ${remote_hash}" "git" - - fi # offline - -@@ -154,21 +154,21 @@ fetch_from_repo() { - tag) improved_git_fetch --no-tags origin tags/"${ref_name}" ;; - head) improved_git_fetch --no-tags origin HEAD ;; - esac -- display_alert "Origin fetch completed, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size again -+ display_alert "Origin fetch completed, working copy size" "$(du -h -s | awk '{print $1}')" "git" - checkout_from="FETCH_HEAD" - fi - - # should be declared in outside scope, so can be read. - checked_out_revision_mtime="$(git log --date='format:%Y%m%d%H%M%S' --format='format:%ad' -1 "${checkout_from}")" - checked_out_revision_ts="$(git log -1 --pretty=%ct "${checkout_from}")" -- display_alert "checked_out_revision_mtime set!" "${checked_out_revision_mtime} - ${checked_out_revision_ts}" "debug" -+ display_alert "checked_out_revision_mtime set!" "${checked_out_revision_mtime} - ${checked_out_revision_ts}" "git" - - display_alert "Cleaning git dir" "$(git status -s 2> /dev/null | wc -l) files" # working directory is not clean, show it - -- fasthash_debug "before git checkout of $dir $ref_name" # fasthash interested in this -+ #fasthash_debug "before git checkout of $dir $ref_name" # fasthash interested in this - regular_git checkout -f -q "${checkout_from}" # Return the files that are tracked by git to the initial state. - -- fasthash_debug "before git clean of $dir $ref_name" -+ #fasthash_debug "before git clean of $dir $ref_name" - regular_git clean -q -d -f # Files that are not tracked by git and were added when the patch was applied must be removed. - - # set the checkout date on all the versioned files. -@@ -194,8 +194,8 @@ fetch_from_repo() { - done - fi - -- display_alert "Final working copy size" "$(du -h -s | awk '{print $1}')" "debug" -- fasthash_debug "at the end of fetch_from_repo $dir $ref_name" -+ display_alert "Final working copy size" "$(du -h -s | awk '{print $1}')" "git" -+ #fasthash_debug "at the end of fetch_from_repo $dir $ref_name" - } - - function git_fetch_from_bundle_file() { -@@ -203,20 +203,20 @@ function git_fetch_from_bundle_file() { - regular_git bundle verify "${bundle_file}" # Make sure bundle is valid. - regular_git remote add "${remote_name}" "${bundle_file}" # Add the remote pointing to the cold bundle file - if [[ -f "${shallow_file}" ]]; then -- display_alert "Bundle is shallow" "${shallow_file}" "debug" -+ display_alert "Bundle is shallow" "${shallow_file}" "git" - cp -p "${shallow_file}" ".git/shallow" - fi - improved_git_fetch --tags "${remote_name}" # Fetch it! (including tags!) -- display_alert "Bundle fetch '${remote_name}' completed, working copy size" "$(du -h -s | awk '{print $1}')" "debug" -+ display_alert "Bundle fetch '${remote_name}' completed, working copy size" "$(du -h -s | awk '{print $1}')" "git" - } - - function download_git_bundle_from_http() { - local bundle_file="${1}" bundle_url="${2}" - if [[ ! -f "${git_cold_bundle_cache_file}" ]]; then # Download the bundle file if it does not exist. -- display_alert "Downloading cold bundle from remote server" "${bundle_url}" "debug" # This gonna take a while. And waste bandwidth -- run_host_command_logged wget --continue --output-document="${bundle_file}" "${bundle_url}" # @TODO: progress giga? -+ display_alert "Downloading Git cold bundle via HTTP" "${bundle_url}" "info" # This gonna take a while. And waste bandwidth -+ run_host_command_logged wget --continue --progress=giga --output-document="${bundle_file}" "${bundle_url}" - else -- display_alert "Cold bundle file exists, using it" "${bundle_file}" "debug" -+ display_alert "Cold bundle file exists, using it" "${bundle_file}" "git" - fi - } - -@@ -254,13 +254,13 @@ function git_handle_cold_and_warm_bundle_remotes() { - git_warm_remote_bundle_file="${git_warm_remote_bundle_cache_dir}/${GIT_WARM_REMOTE_BUNDLE}${git_warm_remote_bundle_extra_fn}.gitbundle" # final filename of bundle - git_warm_remote_bundle_file_shallowfile="${git_warm_remote_bundle_file}.shallow" # it can be there's a shallow revision - if [[ -f "${git_warm_remote_bundle_file}" ]]; then -- display_alert "Fetching from Warm git bundle, wait" "${GIT_WARM_REMOTE_BUNDLE}" "info" # This is gonna take a long while... -+ display_alert "Fetching from warm git bundle, wait" "${GIT_WARM_REMOTE_BUNDLE}" "info" # This is gonna take a long while... - git_fetch_from_bundle_file "${git_warm_remote_bundle_file}" "${GIT_WARM_REMOTE_NAME}" "${git_warm_remote_bundle_file_shallowfile}" - do_cold_bundle="no" # Skip the cold bundle, below. - do_warmup_remote="no" # Skip the warm bundle creation, below, too. - has_git_warm_remote=1 # mark warm remote as added. - else -- display_alert "Could not find warm bundle file" "${git_warm_remote_bundle_file}" "debug" -+ display_alert "Could not find warm bundle file" "${git_warm_remote_bundle_file}" "git" - fi - fi - fi -@@ -272,7 +272,6 @@ function git_handle_cold_and_warm_bundle_remotes() { - # - do nothing else with this, it'll be used internally by git to avoid a huge fetch later. - # - but, after this, the wanted branch will be fetched. signal has_git_cold_remote=1 for later. - if [[ "${GIT_COLD_BUNDLE_URL}" != "" ]]; then -- display_alert "There's a " "${GIT_COLD_BUNDLE_URL} -- ${git_cold_bundle_id} -- file: ${git_cold_bundle_cache_file}" "debug" # @TODO: remove - local git_cold_bundle_id git_cold_bundle_cache_dir git_cold_bundle_cache_file git_cold_bundle_remote_name - git_cold_bundle_cache_dir="${SRC}/cache/gitbundles/cold" # calculate the id, dir and name of local file and remote - git_cold_bundle_id="$(echo -n "${GIT_COLD_BUNDLE_URL}" | md5sum | awk '{print $1}')" # md5 of the URL. -@@ -292,12 +291,12 @@ function git_handle_cold_and_warm_bundle_remotes() { - if [[ "${do_warmup_remote}" == "yes" ]]; then - if [[ "${GIT_WARM_REMOTE_NAME}" != "" ]] && [[ "${GIT_WARM_REMOTE_URL}" != "" ]] && [[ "${GIT_WARM_REMOTE_BRANCH}" != "" ]]; then - -- display_alert "Using Warmup Remote before origin fetch" "${GIT_WARM_REMOTE_NAME} - ${GIT_WARM_REMOTE_BRANCH}" "debug" -+ display_alert "Using Warmup Remote before origin fetch" "${GIT_WARM_REMOTE_NAME} - ${GIT_WARM_REMOTE_BRANCH}" "git" - regular_git remote add "${GIT_WARM_REMOTE_NAME}" "${GIT_WARM_REMOTE_URL}" # Add the remote to the warmup source - has_git_warm_remote=1 # mark as done. Will export the bundle! - - improved_git_fetch --no-tags "${GIT_WARM_REMOTE_NAME}" "${GIT_WARM_REMOTE_BRANCH}" # Fetch the remote branch, but no tags -- display_alert "After warm bundle, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -+ display_alert "After warm bundle, working copy size" "$(du -h -s | awk '{print $1}')" "git" # Show size after bundle pull - - # Checkout that to a branch. We wanna have a local reference to what has been fetched. - # @TODO: could be a param instead of FETCH_HEAD; would drop commits after that rev -@@ -305,18 +304,18 @@ function git_handle_cold_and_warm_bundle_remotes() { - regular_git branch "${git_warm_branch_name}" FETCH_HEAD || true - - improved_git_fetch "${GIT_WARM_REMOTE_NAME}" "'refs/tags/${GIT_WARM_REMOTE_FETCH_TAGS}:refs/tags/${GIT_WARM_REMOTE_FETCH_TAGS}'" || true # Fetch the remote branch, but no tags -- display_alert "After warm bundle tags, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -+ display_alert "After warm bundle tags, working copy size" "$(du -h -s | awk '{print $1}')" "git" # Show size after bundle pull - - # Lookup the tag (at the warm remote directly) to find the rev to shallow to. - if [[ "${GIT_WARM_REMOTE_SHALLOW_AT_TAG}" != "" ]]; then -- display_alert "GIT_WARM_REMOTE_SHALLOW_AT_TAG" "${GIT_WARM_REMOTE_SHALLOW_AT_TAG}" "debug" -+ display_alert "GIT_WARM_REMOTE_SHALLOW_AT_TAG" "${GIT_WARM_REMOTE_SHALLOW_AT_TAG}" "git" - GIT_WARM_REMOTE_SHALLOW_AT_DATE="$(git tag --list --format="%(creatordate)" "${GIT_WARM_REMOTE_SHALLOW_AT_TAG}")" -- display_alert "GIT_WARM_REMOTE_SHALLOW_AT_TAG ${GIT_WARM_REMOTE_SHALLOW_AT_TAG} resulted in GIT_WARM_REMOTE_SHALLOW_AT_DATE" "Date: ${GIT_WARM_REMOTE_SHALLOW_AT_DATE}" "debug" -+ display_alert "GIT_WARM_REMOTE_SHALLOW_AT_TAG ${GIT_WARM_REMOTE_SHALLOW_AT_TAG} resulted in GIT_WARM_REMOTE_SHALLOW_AT_DATE" "Date: ${GIT_WARM_REMOTE_SHALLOW_AT_DATE}" "git" - fi - - # At this stage, we might wanna make the local copy shallow and re-pack it. - if [[ "${GIT_WARM_REMOTE_SHALLOW_AT_DATE}" != "" ]]; then -- display_alert "Making working copy shallow" "before date ${GIT_WARM_REMOTE_SHALLOW_AT_DATE}" "debug" -+ display_alert "Making working copy shallow" "before date ${GIT_WARM_REMOTE_SHALLOW_AT_DATE}" "info" - - # 'git clone' is the only consistent, usable thing we can do to do this. - # it does require a temporary dir, though. use one. -@@ -329,7 +328,7 @@ function git_handle_cold_and_warm_bundle_remotes() { - --tags --shallow-since="${GIT_WARM_REMOTE_SHALLOW_AT_DATE}" \ - "file://${git_work_dir}" "${temp_git_dir}" - -- display_alert "After shallow clone, temp_git_dir" "$(du -h -s "${temp_git_dir}" | awk '{print $1}')" "debug" # Show size after shallow -+ display_alert "After shallow clone, temp_git_dir" "$(du -h -s "${temp_git_dir}" | awk '{print $1}')" "git" # Show size after shallow - - # Get rid of original, replace with new. Move cwd so no warnings are produced. - cd "${SRC}" || exit_with_error "Failed to move cwd away so we can remove" "${git_work_dir}" -@@ -342,18 +341,18 @@ function git_handle_cold_and_warm_bundle_remotes() { - has_git_cold_remote=0 - has_git_warm_remote=0 - -- display_alert "After shallow, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after shallow -+ display_alert "After shallow, working copy size" "$(du -h -s | awk '{print $1}')" "git" # Show size after shallow - fi - - # Now git working copy has a precious state we might wanna preserve (export the bundle). - if [[ "${GIT_WARM_REMOTE_BUNDLE}" != "" ]]; then - mkdir -p "${git_warm_remote_bundle_cache_dir}" -- display_alert "Exporting warm remote bundle" "${git_warm_remote_bundle_file}" "debug" -+ display_alert "Exporting warm remote bundle" "${git_warm_remote_bundle_file}" "info" - regular_git bundle create "${git_warm_remote_bundle_file}" --all - - rm -f "${git_warm_remote_bundle_file_shallowfile}" # not shallow at first... - if [[ -f ".git/shallow" ]]; then -- display_alert "Exported bundle is shallow" "Will copy to ${git_warm_remote_bundle_file_shallowfile}" "debug" -+ display_alert "Exported bundle is shallow" "Will copy to ${git_warm_remote_bundle_file_shallowfile}" "git" - cp -p ".git/shallow" "${git_warm_remote_bundle_file_shallowfile}" - fi - -diff --git a/lib/functions/image/initrd.sh b/lib/functions/image/initrd.sh -index de431cbbc..feb4143c8 100644 ---- a/lib/functions/image/initrd.sh -+++ b/lib/functions/image/initrd.sh -@@ -23,7 +23,7 @@ update_initramfs() { - cp "/usr/bin/$QEMU_BINARY" "$chroot_target/usr/bin"/ - mount_chroot "$chroot_target/" - -- local logging_filter="2>&1 | grep --line-buffered -v -e '.xz' -e 'ORDER ignored' -e 'Adding binary ' -e 'Adding module ' " -+ local logging_filter="2>&1 | grep --line-buffered -v -e '.xz' -e 'ORDER ignored' -e 'Adding binary ' -e 'Adding module ' -e 'Adding firmware ' " - chroot_custom_long_running "$chroot_target" "$update_initramfs_cmd" "${logging_filter}" || { - exit_with_error "Updating initramfs FAILED" - } -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index d38a14ad1..85dc86f9c 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -10,9 +10,13 @@ - # - create_image_from_sdcard_rootfs() { - # create DESTIMG, hooks might put stuff there early. -- mkdir -p $DESTIMG -+ mkdir -p "${DESTIMG}" -+ -+ # add a cleanup trap hook do make sure we don't leak it if stuff fails -+ add_cleanup_handler trap_handler_cleanup_destimg - - # stage: create file name -+ # @TODO: rpardini: determine the image file name produced. a bit late in the game, since it uses VER which is from the kernel package. - local version="${VENDOR}_${REVISION}_${BOARD^}_${RELEASE}_${BRANCH}_${VER/-$LINUXFAMILY/}${DESKTOP_ENVIRONMENT:+_$DESKTOP_ENVIRONMENT}" - [[ $BUILD_DESKTOP == yes ]] && version=${version}_desktop - [[ $BUILD_MINIMAL == yes ]] && version=${version}_minimal -@@ -66,11 +70,11 @@ create_image_from_sdcard_rootfs() { - # stage: write u-boot, unless the deb is not there, which would happen if BOOTCONFIG=none - # exception: if we use the one from repository, install version which was downloaded from repo - if [[ -f "${DEB_STORAGE}"/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb ]] || [[ -n $UBOOT_REPO_VERSION ]]; then -- write_uboot_to_loop_image $LOOP -+ write_uboot_to_loop_image "${LOOP}" - fi - - # fix wrong / permissions -- chmod 755 $MOUNT -+ chmod 755 "${MOUNT}" - - call_extension_method "pre_umount_final_image" "config_pre_umount_final_image" << 'PRE_UMOUNT_FINAL_IMAGE' - *allow config to hack into the image before the unmount* -@@ -95,10 +99,13 @@ PRE_UMOUNT_FINAL_IMAGE - losetup -d "${LOOP}" - unset LOOP # unset so cleanup handler does not try it again - -- # Don't delete $DESTIMG here, extensions might have put nice things there already. -+ # We're done with ${MOUNT} by now, remove it. - rm -rf --one-file-system "${MOUNT}" -+ unset MOUNT - - mkdir -p "${DESTIMG}" -+ # @TODO: misterious cwd, who sets it? -+ - mv "${SDCARD}.raw" "${DESTIMG}/${version}.img" - - # custom post_build_image_modify hook to run before fingerprinting and compression -@@ -119,11 +126,17 @@ PRE_UMOUNT_FINAL_IMAGE - POST_BUILD_IMAGE - - # move artefacts from temporally directory to its final destination -- [[ -n $compression_type ]] && rm $DESTIMG/${version}.img -- rsync -a --no-owner --no-group --remove-source-files $DESTIMG/${version}* ${FINALDEST} -- rm -rf --one-file-system $DESTIMG -+ [[ -n $compression_type ]] && rm "${DESTIMG}/${version}.img" -+ rsync -a --no-owner --no-group --remove-source-files "${DESTIMG}/${version}"* "${FINALDEST}" -+ rm -rf --one-file-system "${DESTIMG}" - - # write image to SD card - write_image_to_device "${FINALDEST}/${version}.img" "${CARD_DEVICE}" - - } -+ -+function trap_handler_cleanup_destimg() { -+ [[ ! -d "${DESTIMG}" ]] && return 0 -+ display_alert "Cleaning up temporary DESTIMG" "${DESTIMG}" "debug" -+ rm -rf --one-file-system "${DESTIMG}" -+} -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 2ead6b949..11db45e61 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -87,7 +87,7 @@ function do_with_logging() { - - if [[ "${SHOW_LOG}" == "yes" ]]; then - local prefix_sed_contents -- prefix_sed_contents="$(logging_echo_prefix_for_pv "tool") $(echo -n -e "${tool_color}")" -+ prefix_sed_contents="$(logging_echo_prefix_for_pv "tool") $(echo -n -e "${tool_color}")" # spaces are significant - local prefix_sed_cmd="s/^/${prefix_sed_contents}/;" - - # This is sick. Create a 3rd file descriptor sending it to sed. https://unix.stackexchange.com/questions/174849/redirecting-stdout-to-terminal-and-file-without-using-a-pipe -@@ -95,7 +95,8 @@ function do_with_logging() { - exec 3> >( - cd "${SRC}" || exit 2 - #grep --line-buffered -v "^$" | \ -- # @TODO: tee to CURRENT_LOGFILE. -+ # @TODO: tee to CURRENT_LOGFILE. @TODO this is essential. if this does not work whole thing comes down -+ - sed -u -e "${prefix_sed_cmd}" - ) - "$@" >&3 -@@ -110,6 +111,14 @@ function do_with_logging() { - return 0 - } - -+# This takes LOG_ASSET, which can and should include an extension. -+function do_with_log_asset() { -+ # @TODO: check that CURRENT_LOGGING_COUNTER is set, otherwise crazy? -+ local ASSET_LOGFILE="${CURRENT_LOGGING_DIR}/${CURRENT_LOGGING_COUNTER}.${LOG_ASSET}" -+ display_alert "Logging to asset" "${CURRENT_LOGGING_COUNTER}.0.${LOG_ASSET}" "debug" -+ "$@" >> "${ASSET_LOGFILE}" -+} -+ - function display_alert() { - # We'll be writing to stderr (" >&2"), so also write the message to the generic logfile, for context. - if [[ -f "${CURRENT_LOGFILE}" ]]; then -@@ -138,7 +147,7 @@ function display_alert() { - ;; - - ext) -- level_indicator="✅" -+ level_indicator="✨" # or ✅ ? - inline_logs_color="\e[1;32m" - ci_log="notice" - ;; -@@ -160,7 +169,7 @@ function display_alert() { - if [[ "${SHOW_DEBUG}" != "yes" ]]; then # enable debug for many, many debugging msgs - return 0 - fi -- level_indicator="✨" -+ level_indicator="🐛" - inline_logs_color="\e[1;33m" - ;; - -@@ -177,14 +186,22 @@ function display_alert() { - return 0 - fi - level_indicator="🐸" -- inline_logs_color="${tool_color}" # either gray or normal, a bit subdued. -+ inline_logs_color="\e[0;36m" # a dim cyan - ;; - - timestamp | fasthash) - if [[ "${SHOW_FASTHASH}" != "yes" ]]; then # timestamp-related debugging messages, very very verbose - return 0 - fi -- level_indicator="⏱" -+ level_indicator="🐜" -+ inline_logs_color="${tool_color}" # either gray or normal, a bit subdued. -+ ;; -+ -+ git) -+ if [[ "${SHOW_GIT}" != "yes" ]]; then # git-related debugging messages, very very verbose -+ return 0 -+ fi -+ level_indicator="🔖" - inline_logs_color="${tool_color}" # either gray or normal, a bit subdued. - ;; - -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 5933d9a27..aae266091 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -13,7 +13,7 @@ function main_default_build_single() { - - start=$(date +%s) - -- ### Write config summary to its own logging section. -+ ### Write config summary - LOG_SECTION="config_summary" do_with_logging write_config_summary_output_file - - # Check and install dependencies, directory structure and settings -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index bca09eca0..02d04797d 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -109,8 +109,8 @@ function build_rootfs_and_image() { - } - - function list_installed_packages() { -- display_alert "Recording list of installed packages" "debug log" "debug" -- chroot_sdcard dpkg --get-selections "| grep -v deinstall | awk '{print \$1}' | cut -f1 -d':' | column -c 80" -+ display_alert "Recording list of installed packages" "asset log" "debug" -+ LOG_ASSET="installed_packages.txt" do_with_log_asset chroot_sdcard dpkg --get-selections "| grep -v deinstall | awk '{print \$1}' | cut -f1 -d':'" - } - - function trap_handler_cleanup_rootfs_and_image() { -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 4f363a696..ed65ec5ac 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -422,6 +422,7 @@ function install_distribution_agnostic() { - FAMILY_TWEAKS - - # enable additional services, if they exist. -+ display_alert "Enabling Armbian services" "systemd" "info" - [[ -f "${SDCARD}"/lib/systemd/system/armbian-firstrun.service ]] && chroot_sdcard systemctl --no-reload enable armbian-firstrun.service - [[ -f "${SDCARD}"/lib/systemd/system/armbian-firstrun-config.service ]] && chroot_sdcard systemctl --no-reload enable armbian-firstrun-config.service - [[ -f "${SDCARD}"/lib/systemd/system/armbian-zram-config.service ]] && chroot_sdcard systemctl --no-reload enable armbian-zram-config.service - -From fb943e2aa891513456e76a07a32351f04d2b1fe2 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 14 Mar 2022 18:51:39 +0100 -Subject: [PATCH] armbian-next: kernel: use parallel compressors; reproducible - kernel builds - -- also remove leftover mkdebian/builddeb parameters in make invocation -- add pbzip2 to hostdeps ---- - lib/functions/compilation/kernel.sh | 37 +++++++++++++++++++++++-------------- - lib/functions/general/host.sh | 2 +- - 2 files changed, 24 insertions(+), 15 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 3922030ee..571bde957 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -6,6 +6,7 @@ function run_kernel_make() { - "CCACHE_BASEDIR=\"$(pwd)\"" # Base directory for ccache, for cache reuse - "PATH=\"${toolchain}:${PATH}\"" # Insert the toolchain first into the PATH. - "DPKG_COLORS=always" # Use colors for dpkg -+ "XZ_OPT='--threads=0'" # Use parallel XZ compression - ) - - common_make_params_quoted=( -@@ -13,15 +14,15 @@ function run_kernel_make() { - "ARCH=${ARCHITECTURE}" # Key param. Everything depends on this. - "LOCALVERSION=-${LINUXFAMILY}" # Change the internal kernel version to include the family. Changing this causes recompiles - -- "BRANCH=${BRANCH}" # For mkdebian/builddep packaging only -- "KBUILD_DEBARCH=${ARCH}" # For mkdebian/builddep packaging only -- "KDEB_PKGVERSION=${REVISION}" # For mkdebian/builddep packaging only -- "KDEB_COMPRESS=${DEB_COMPRESS}" # For mkdebian/builddep packaging only -- "DEBFULLNAME=${MAINTAINER}" # For mkdebian/builddep packaging only -- "DEBEMAIL=${MAINTAINERMAIL}" # For mkdebian/builddep packaging only -- - "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # added as prefix to every compiler invocation by make - "KCFLAGS=-fdiagnostics-color=always" # Force GCC colored messages. -+ -+ "SOURCE_DATE_EPOCH=${kernel_base_revision_ts}" # https://reproducible-builds.org/docs/source-date-epoch/ and https://www.kernel.org/doc/html/latest/kbuild/reproducible-builds.html -+ "KBUILD_BUILD_TIMESTAMP=${kernel_base_revision_date}" # https://www.kernel.org/doc/html/latest/kbuild/kbuild.html#kbuild-build-timestamp -+ "KBUILD_BUILD_USER=armbian-build" # https://www.kernel.org/doc/html/latest/kbuild/kbuild.html#kbuild-build-user-kbuild-build-host -+ "KBUILD_BUILD_HOST=armbian-bm" # https://www.kernel.org/doc/html/latest/kbuild/kbuild.html#kbuild-build-user-kbuild-build-host -+ -+ "KGZIP=pigz" "KBZIP2=pbzip2" # Parallel compression, use explicit parallel compressors https://lore.kernel.org/lkml/20200901151002.988547791@linuxfoundation.org/ - ) - - # last statement, so it passes the result to calling function. -@@ -43,9 +44,15 @@ function run_kernel_make_long_running() { - function compile_kernel() { - local kernel_work_dir="${SRC}/cache/sources/${LINUXSOURCEDIR}" - display_alert "Kernel build starting" "${LINUXSOURCEDIR}" "info" -- declare checked_out_revision_mtime="" # set by fetch_from_repo -+ declare checked_out_revision_mtime="" checked_out_revision_ts="" # set by fetch_from_repo - LOG_SECTION="kernel_prepare_git" do_with_logging do_with_hooks kernel_prepare_git -+ -+ # Capture date variables set by fetch_from_repo; it's the date of the last kernel revision -+ declare kernel_base_revision_date - declare kernel_base_revision_mtime="${checked_out_revision_mtime}" -+ declare kernel_base_revision_ts="${checked_out_revision_ts}" -+ kernel_base_revision_date="$(LC_ALL=C date -d "@${kernel_base_revision_ts}")" -+ - LOG_SECTION="kernel_maybe_clean" do_with_logging do_with_hooks kernel_maybe_clean - local version hash pre_patch_version - LOG_SECTION="kernel_prepare_patching" do_with_logging do_with_hooks kernel_prepare_patching -@@ -315,6 +322,8 @@ function kernel_package_source() { - } - - function kernel_build_and_package() { -+ local ts=${SECONDS} -+ - cd "${kernel_work_dir}" - - local -a build_targets=("all") # "All" builds the vmlinux/Image/Image.gz default for the ${ARCH} -@@ -323,12 +332,12 @@ function kernel_build_and_package() { - - # define dict with vars passed and target directories - declare -A kernel_install_dirs=( -- ["INSTALL_PATH"]="${kernel_dest_install_dir}/image/boot" # Used by `make install` -- ["INSTALL_MOD_PATH"]="${kernel_dest_install_dir}/modules" # Used by `make modules_install` -- ["INSTALL_HDR_PATH"]="${kernel_dest_install_dir}/libc_headers" # Used by `make headers_install` -+ ["INSTALL_PATH"]="${kernel_dest_install_dir}/image/boot" # Used by `make install` -+ ["INSTALL_MOD_PATH"]="${kernel_dest_install_dir}/modules" # Used by `make modules_install` -+ #["INSTALL_HDR_PATH"]="${kernel_dest_install_dir}/libc_headers" # Used by `make headers_install` - disabled, only used for libc headers - ) - -- build_targets+=(install modules_install headers_install) -+ build_targets+=(install modules_install) # headers_install disabled, only used for libc headers - if [[ "${KERNEL_BUILD_DTBS:-yes}" == "yes" ]]; then - display_alert "Kernel build will produce DTBs!" "DTBs YES" "debug" - build_targets+=("dtbs_install") -@@ -342,7 +351,6 @@ function kernel_build_and_package() { - local dir="${kernel_install_dirs["${dir_key}"]}" - local value="${dir_key}=${dir}" - mkdir -p "${dir}" -- display_alert "Adding kernel packaging param" "${value}" "debug" - install_make_params_quoted+=("${value}") - done - -@@ -354,5 +362,6 @@ function kernel_build_and_package() { - - cd "${kernel_work_dir}" - prepare_kernel_packaging_debs "${kernel_work_dir}" "${kernel_dest_install_dir}" "${version}" kernel_install_dirs -- display_alert "Package building done" "${LINUXCONFIG}" "info" -+ -+ display_alert "Kernel built and packaged in" "$((SECONDS - ts)) seconds - ${version}-${LINUXFAMILY}" "info" - } -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index c2eb63578..6053248b5 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -68,7 +68,7 @@ prepare_host() { - libc6-dev-armhf-cross libelf-dev libfdt-dev libfile-fcntllock-perl - libfl-dev liblz4-tool libncurses-dev libpython2.7-dev libssl-dev - libusb-1.0-0-dev linux-base locales lzop ncurses-base ncurses-term -- nfs-kernel-server ntpdate p7zip-full parted patchutils pigz pixz -+ nfs-kernel-server ntpdate p7zip-full parted patchutils pigz pixz pbzip2 - pkg-config pv python3-dev python3-distutils qemu-user-static rsync swig - systemd-container u-boot-tools udev unzip uuid-dev wget whiptail zip - zlib1g-dev file ccze tree - -From fcba106dae815e6d90fea84cc538239030fde9ac Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 14 Mar 2022 18:50:13 +0100 -Subject: [PATCH] armbian-next: tuning logging for timestamp/fasthash related - stuff which is very verbose - -- idea is to not completely overwhelm `SHOW_DEBUG=yes` case -- make patching quieter and use file instead of stdin -- set checked_out_revision_ts during git checkout (timestamp version of _mtime) -- timestamp | fasthash logging level (via `SHOW_FASTHASH=yes`) ---- - lib/functions/compilation/patch/fasthash.sh | 14 +++++++------- - lib/functions/compilation/patch/patching.sh | 7 +++---- - lib/functions/general/git.sh | 3 ++- - lib/functions/logging/logging.sh | 8 ++++++++ - 4 files changed, 20 insertions(+), 12 deletions(-) - -diff --git a/lib/functions/compilation/patch/fasthash.sh b/lib/functions/compilation/patch/fasthash.sh -index 8158ab477..0e74b1c79 100644 ---- a/lib/functions/compilation/patch/fasthash.sh -+++ b/lib/functions/compilation/patch/fasthash.sh -@@ -5,7 +5,7 @@ function report_fashtash_should_execute() { - } - - function mark_fasthash_done() { -- display_alert "mark_fasthash_done" "$*" "debug" -+ display_alert "mark_fasthash_done" "$*" "fasthash" - return 0 - } - -@@ -13,23 +13,23 @@ function report_fasthash() { - local type="${1}" - local obj="${2}" - local desc="${3}" -- display_alert "report_fasthash" "${type}: ${desc}" "debug" -+ display_alert "report_fasthash" "${type}: ${desc}" "fasthash" - return 0 - } - - function initialize_fasthash() { -- display_alert "initialize_fasthash" "$*" "debug" -+ display_alert "initialize_fasthash" "$*" "fasthash" - return 0 - declare -a fast_hash_list=() # @TODO: declaring here won't do it any good, this is a shared var - } - - function fasthash_branch() { -- display_alert "fasthash_branch" "$*" "debug" -+ display_alert "fasthash_branch" "$*" "fasthash" - return 0 - } - - function finish_fasthash() { -- display_alert "finish_fasthash" "$*" "debug" -+ display_alert "finish_fasthash" "$*" "fasthash" - return 0 - } - -@@ -37,7 +37,7 @@ function fasthash_debug() { - if [[ "${SHOW_FASTHASH}" != "yes" ]]; then # enable debug for many, many debugging msgs - return 0 - fi -- display_alert "fasthash_debug" "$*" "debug" -+ display_alert "fasthash_debug" "$*" "fasthash" - find . -type f -printf '%T@ %p\n' | - grep -v -e "\.ko" -e "\.o" -e "\.cmd" -e "\.mod" -e "\.a" -e "\.tmp" -e "\.dtb" -e ".scr" -e "\.\/debian" | - sort -n | tail -n 10 1>&2 -@@ -61,7 +61,7 @@ function set_files_modification_time() { - local -i mtime="${1}" - local formatted_mtime - shift -- display_alert "Setting date ${mtime}" "${*} (no newer check)" "debug" -+ display_alert "Setting date ${mtime}" "${*} (no newer check)" "timestamp" - formatted_mtime="${mtime:0:12}.${mtime:12}" - touch --no-create -m -t "${formatted_mtime}" "${@}" - } -diff --git a/lib/functions/compilation/patch/patching.sh b/lib/functions/compilation/patch/patching.sh -index df253d969..3b7762707 100644 ---- a/lib/functions/compilation/patch/patching.sh -+++ b/lib/functions/compilation/patch/patching.sh -@@ -94,7 +94,7 @@ process_patch_file() { - # shellcheck disable=SC2154 # patch_minimum_target_mtime can be declared in outer scope - if [[ "${patch_minimum_target_mtime}" != "" ]]; then - if [[ ${patch_date} -lt ${patch_minimum_target_mtime} ]]; then -- display_alert "Patch before minimum date" "${patch_date} -lt ${patch_minimum_target_mtime}" "debug" -+ display_alert "Patch before minimum date" "${patch_date} -lt ${patch_minimum_target_mtime}" "timestamp" - patch_date=${patch_minimum_target_mtime} - fi - fi -@@ -108,10 +108,9 @@ process_patch_file() { - - # @TODO: try patching with `git am` first, so git contains the patch commit info/msg. -- For future git-based hashing. - # shellcheck disable=SC2015 # noted, thanks. I need to handle exit code here. -- patch --batch -p1 -N < "${patch}" && { -- # Fix the dates. -+ patch --batch -p1 -N --input="${patch}" --quiet --reject-file=- && { # "-" discards rejects -+ # Fix the dates on the patched files - set_files_modification_time "${patch_date}" "${patched_files[@]}" -- - display_alert "* $status ${relative_patch}" "" "info" - } || { - display_alert "* $status ${relative_patch}" "failed" "wrn" -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index f096a39ac..85dd4470f 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -160,7 +160,8 @@ fetch_from_repo() { - - # should be declared in outside scope, so can be read. - checked_out_revision_mtime="$(git log --date='format:%Y%m%d%H%M%S' --format='format:%ad' -1 "${checkout_from}")" -- display_alert "checked_out_revision_mtime set!" "${checked_out_revision_mtime}" "debug" -+ checked_out_revision_ts="$(git log -1 --pretty=%ct "${checkout_from}")" -+ display_alert "checked_out_revision_mtime set!" "${checked_out_revision_mtime} - ${checked_out_revision_ts}" "debug" - - display_alert "Cleaning git dir" "$(git status -s 2> /dev/null | wc -l) files" # working directory is not clean, show it - -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 519cb5031..2ead6b949 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -180,6 +180,14 @@ function display_alert() { - inline_logs_color="${tool_color}" # either gray or normal, a bit subdued. - ;; - -+ timestamp | fasthash) -+ if [[ "${SHOW_FASTHASH}" != "yes" ]]; then # timestamp-related debugging messages, very very verbose -+ return 0 -+ fi -+ level_indicator="⏱" -+ inline_logs_color="${tool_color}" # either gray or normal, a bit subdued. -+ ;; -+ - *) - level_indicator="🌿" - inline_logs_color="\e[1;37m" - -From dab49a9133741fce7b40bdeff1e6cccf6becc180 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 14 Mar 2022 15:02:20 +0100 -Subject: [PATCH] armbian-next: completely remove - mkdebian/builddeb/general-packaging kernel packaging stuff - ---- - lib/functions/compilation/kernel.sh | 126 +------ - lib/functions/compilation/patch/kernel-pkg.sh | 95 ----- - lib/library-functions.sh | 9 - - packages/armbian/builddeb | 398 --------------------- - packages/armbian/mkdebian | 257 ------------- - patch/misc/general-packaging-4.14.y.patch | 213 ----------- - patch/misc/general-packaging-4.19.y-rk35xx.patch | 236 ------------ - patch/misc/general-packaging-4.19.y.patch | 249 ------------- - patch/misc/general-packaging-4.4.y-rk3399.patch | 216 ----------- - .../misc/general-packaging-4.4.y-rockchip64.patch | 216 ----------- - patch/misc/general-packaging-4.4.y.patch | 230 ------------ - patch/misc/general-packaging-4.9.y.patch | 199 ----------- - patch/misc/general-packaging-5.10.y.patch | 367 ------------------- - patch/misc/general-packaging-5.3.y.patch | 262 -------------- - patch/misc/general-packaging-5.6.y.patch | 263 -------------- - patch/misc/general-packaging-5.8-9.y.patch | 265 -------------- - 16 files changed, 12 insertions(+), 3589 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index b77739827..3922030ee 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -11,17 +11,17 @@ function run_kernel_make() { - common_make_params_quoted=( - "$CTHREADS" # Parallel compile, "-j X" for X cpus - "ARCH=${ARCHITECTURE}" # Key param. Everything depends on this. -- "LOCALVERSION=-${LINUXFAMILY}" # Change the internal kernel version to include the family.? -+ "LOCALVERSION=-${LINUXFAMILY}" # Change the internal kernel version to include the family. Changing this causes recompiles - -- "BRANCH=${BRANCH}" # For mkdebian/builddep packaging only -- "KBUILD_DEBARCH=${ARCH}" # For mkdebian/builddep packaging only -- "KDEB_PKGVERSION=${REVISION}" # For mkdebian/builddep packaging only -- "KDEB_COMPRESS=${DEB_COMPRESS}" # For mkdebian/builddep packaging only -- "DEBFULLNAME=${MAINTAINER}" # For mkdebian/builddep packaging only -- "DEBEMAIL=${MAINTAINERMAIL}" # For mkdebian/builddep packaging only -- "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # For mkdebian/builddep packaging only -+ "BRANCH=${BRANCH}" # For mkdebian/builddep packaging only -+ "KBUILD_DEBARCH=${ARCH}" # For mkdebian/builddep packaging only -+ "KDEB_PKGVERSION=${REVISION}" # For mkdebian/builddep packaging only -+ "KDEB_COMPRESS=${DEB_COMPRESS}" # For mkdebian/builddep packaging only -+ "DEBFULLNAME=${MAINTAINER}" # For mkdebian/builddep packaging only -+ "DEBEMAIL=${MAINTAINERMAIL}" # For mkdebian/builddep packaging only - -- "KCFLAGS=-fdiagnostics-color=always" # Force GCC colored messages. -+ "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # added as prefix to every compiler invocation by make -+ "KCFLAGS=-fdiagnostics-color=always" # Force GCC colored messages. - ) - - # last statement, so it passes the result to calling function. -@@ -48,7 +48,6 @@ function compile_kernel() { - declare kernel_base_revision_mtime="${checked_out_revision_mtime}" - LOG_SECTION="kernel_maybe_clean" do_with_logging do_with_hooks kernel_maybe_clean - local version hash pre_patch_version -- local kernel_packaging_target - LOG_SECTION="kernel_prepare_patching" do_with_logging do_with_hooks kernel_prepare_patching - LOG_SECTION="kernel_patching" do_with_logging do_with_hooks kernel_patching - [[ $CREATE_PATCHES == yes ]] && userpatch_create "kernel" # create patch for manual source changes -@@ -68,14 +67,7 @@ function compile_kernel() { - # @TODO: some users/maintainers do a lot of their work on "DTS/DTB only changes", which do require the kernel tree - # @TODO: but the only testable artifacts are the .dtb themselves. Allow for a `DTB_ONLY=yes` might be useful. - -- if [[ "a" == "b" ]]; then -- # Do it individually -- LOG_SECTION="kernel_make_headers_dtbs_image_modules" do_with_logging do_with_hooks kernel_make_headers_dtbs_image_modules -- LOG_SECTION="kernel_package" do_with_logging do_with_hooks kernel_package -- else -- # Do it all together -- LOG_SECTION="kernel_build_and_package" do_with_logging do_with_hooks kernel_build_and_package -- fi -+ LOG_SECTION="kernel_build_and_package" do_with_logging do_with_hooks kernel_build_and_package - - display_alert "Done with" "kernel compile" "debug" - cd "${kernel_work_dir}/.." || exit -@@ -118,8 +110,7 @@ function kernel_maybe_clean() { - } - - function kernel_prepare_patching() { -- -- if [[ $USE_OVERLAYFS == yes ]]; then -+ if [[ $USE_OVERLAYFS == yes ]]; then # @TODO: when is this set to yes? - display_alert "Using overlayfs_wrapper" "kernel_${LINUXFAMILY}_${BRANCH}" "debug" - kernel_work_dir=$(overlayfs_wrapper "wrap" "$SRC/cache/sources/$LINUXSOURCEDIR" "kernel_${LINUXFAMILY}_${BRANCH}") - fi -@@ -133,12 +124,6 @@ function kernel_prepare_patching() { - pre_patch_version="${version}" - display_alert "Pre-patch kernel version" "${pre_patch_version}" "debug" - -- # different packaging for 4.3+ -- kernel_packaging_target="deb-pkg" -- if linux-version compare "${version}" ge 4.3; then -- kernel_packaging_target="bindeb-pkg" -- fi -- - # read kernel git hash - hash=$(git --git-dir="$kernel_work_dir"/.git rev-parse HEAD) - } -@@ -163,10 +148,6 @@ function kernel_patching() { - apply_patch_series "${kernel_work_dir}" "${series_conf}" # applies a series of patches, read from a file. calls process_patch_file - fi - -- # mostly local-based packaging fixes. -- fasthash_branch "packaging-patches" -- apply_kernel_patches_for_packaging "${kernel_work_dir}" "${version}" # calls process_patch_file and other stuff. -- - # applies a humongous amount of patches coming from github repos. - # it's mostly conditional, and very complex. - # @TODO: re-enable after finishing converting it with fasthash magic -@@ -333,89 +314,6 @@ function kernel_package_source() { - display_alert "$(basename "${sources_pkg_dir}.deb" ".deb") packaged" "$((SECONDS - ts)) seconds, ${tarball_size} tarball, ${package_size} .deb" "info" - } - --function kernel_make_headers_dtbs_image_modules() { -- local -a build_targets=("headers") -- [[ "${KERNEL_BUILD_DTBS:-yes}" == "yes" ]] && build_targets+=("dtbs") -- build_targets+=("${KERNEL_IMAGE_TYPE}" modules) -- -- display_alert "Compiling Kernel" "${LINUXCONFIG} ${KERNEL_IMAGE_TYPE}" "info" -- fasthash_debug "pre-compile" -- make_filter="| grep --line-buffered -v -e 'CC' -e 'LD' -e 'AR'" run_kernel_make_long_running "${build_targets[@]}" -- fasthash_debug "post-compile" -- -- if [[ "${DOUBLE_COMPILE_KERNEL}" == "yes" ]]; then -- display_alert "DOUBLE Compiling Kernel" "${LINUXCONFIG} ${KERNEL_IMAGE_TYPE}" "info" -- fasthash_debug "pre-double-compile" -- run_kernel_make_long_running "${build_targets[@]}" -- fasthash_debug "post-double-compile" -- fi -- -- # Check for built kernel image file file; can override default with KERNEL_IMAGE_TYPE_PATH -- local check_built_kernel_file="${kernel_work_dir}/${KERNEL_IMAGE_TYPE_PATH:-"arch/${ARCHITECTURE}/boot/${KERNEL_IMAGE_TYPE}"}" -- if [[ ! -f "${check_built_kernel_file}" ]]; then -- exit_with_error "Kernel was not built" "${check_built_kernel_file}" -- fi --} -- --function kernel_package() { -- cd "${kernel_work_dir}" -- -- declare kernel_dest_install_dir -- kernel_dest_install_dir=$(mktemp -d "${WORKDIR}/kernel.temp.install.target.XXXXXXXXX") # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. -- -- # define dict with vars passed and target directories -- declare -A kernel_install_dirs=( -- ["INSTALL_PATH"]="${kernel_dest_install_dir}/image/boot" # Used by `make install` -- ["INSTALL_MOD_PATH"]="${kernel_dest_install_dir}/modules" # Used by `make modules_install` -- ["INSTALL_HDR_PATH"]="${kernel_dest_install_dir}/libc_headers" # Used by `make headers_install` -- ) -- -- local -a prepackage_targets=(install modules_install headers_install) -- if [[ "${KERNEL_BUILD_DTBS:-yes}" == "yes" ]]; then -- display_alert "Kernel build will produce DTBs!" "DTBs YES" "debug" -- prepackage_targets+=("dtbs_install") -- kernel_install_dirs+=(["INSTALL_DTBS_PATH"]="${kernel_dest_install_dir}/dtbs") # Used by `make dtbs_install` -- fi -- -- display_alert "Packaging Kernel" "${LINUXCONFIG} $kernel_packaging_target at ${kernel_dest_install_dir}" "info" -- -- # loop over the keys above, get the value, create param value in array; also mkdir the dir -- declare -a install_make_params_quoted -- local dir_key -- for dir_key in "${!kernel_install_dirs[@]}"; do -- local dir="${kernel_install_dirs["${dir_key}"]}" -- local value="${dir_key}=${dir}" -- mkdir -p "${dir}" -- display_alert "Adding kernel packaging param" "${value}" "debug" -- install_make_params_quoted+=("${value}") -- done -- -- # See https://www.kernel.org/doc/Documentation/kbuild/headers_install.txt -- # Prepare for packaging, using the exact same options as original compile. -- display_alert "Installing kernel headers and modules for packaging" "${LINUXCONFIG} ${prepackage_targets[*]}" "info" -- fasthash_debug "pre-prepackage" -- make_filter="| grep --line-buffered -v -e 'INSTALL' -e 'SIGN' -e 'XZ'" run_kernel_make_long_running "${install_make_params_quoted[@]@Q}" "${prepackage_targets[@]}" -- fasthash_debug "post-prepackage" -- -- cd "${kernel_work_dir}" -- prepare_kernel_packaging_debs "${kernel_work_dir}" "${kernel_dest_install_dir}" "${version}" kernel_install_dirs -- -- ### # produce deb packages: image, headers, firmware, dtb -- ### # This mostly only does -- ### fasthash_debug "pre-packaging" -- ### run_kernel_make_long_running "${install_make_params_quoted[@]@Q}" $kernel_packaging_target -- ### fasthash_debug "post-packaging" -- ### -- ### if [[ "${DOUBLE_COMPILE_KERNEL}" == "yes" ]]; then -- ### display_alert "DOUBLE Packaging Kernel, Headers and DTBs" "${LINUXCONFIG} $kernel_packaging_target" "info" -- ### fasthash_debug "pre-double-packaging" -- ### run_kernel_make_long_running $kernel_packaging_target -- ### fasthash_debug "post-double-packaging" -- ### fi -- -- display_alert "Package building done" "${LINUXCONFIG} $kernel_packaging_target" "info" --} -- - function kernel_build_and_package() { - cd "${kernel_work_dir}" - -@@ -456,5 +354,5 @@ function kernel_build_and_package() { - - cd "${kernel_work_dir}" - prepare_kernel_packaging_debs "${kernel_work_dir}" "${kernel_dest_install_dir}" "${version}" kernel_install_dirs -- display_alert "Package building done" "${LINUXCONFIG} $kernel_packaging_target" "info" -+ display_alert "Package building done" "${LINUXCONFIG}" "info" - } -diff --git a/lib/functions/compilation/patch/kernel-pkg.sh b/lib/functions/compilation/patch/kernel-pkg.sh -deleted file mode 100644 -index 51e163b1e..000000000 ---- a/lib/functions/compilation/patch/kernel-pkg.sh -+++ /dev/null -@@ -1,95 +0,0 @@ --function apply_kernel_patches_for_packaging() { -- local kerneldir="${1}" -- local version="${2}" -- # Packaging patch for modern kernels should be one for all. -- # Currently we have it per kernel family since we can't have one -- # Maintaining one from central location starting with 5.3+ -- # Temporally set for new "default->legacy,next->current" family naming -- -- if linux-version compare "${version}" ge 5.10; then -- display_alert "NOT using old packaging mkdebian etc" "skipping mkdebian patching" "warn" -- return 0 # Not anymore for new packaging. -- -- # This case is special: it does not use process_patch_file. fasthash manually. -- local builddeb="packages/armbian/builddeb" -- local mkdebian="packages/armbian/mkdebian" -- local kernel_package_dir="${kerneldir}/scripts/package" -- if report_fashtash_should_execute text "$(cat "${SRC}/${builddeb}" "${SRC}/${mkdebian}")" "armbian builddeb and mkdebian replace"; then -- # Read mtime, then sed, then restore it -- local arm64_makefile="${kerneldir}/arch/arm64/Makefile" arm64_makefile_mtime -- arm64_makefile_mtime="$(get_file_modification_time "${arm64_makefile}")" -- # shellcheck disable=SC2016 # this should be a .patch? -- sed -i -e 's/^KBUILD_IMAGE := \$(boot)\/Image\.gz$/KBUILD_IMAGE := \$(boot)\/Image/' "${arm64_makefile}" -- set_files_modification_time "${arm64_makefile_mtime}" "${arm64_makefile}" -- -- # cp with -p to preserve the original dates -- cp -pv "${SRC}/${builddeb}" "${kernel_package_dir}/builddeb" -- cp -pv "${SRC}/${mkdebian}" "${kernel_package_dir}/mkdebian" -- -- chmod 755 "${kernel_package_dir}/builddeb" "${kernel_package_dir}/mkdebian" -- mark_fasthash_done # will do git commit, associate fasthash to real hash. -- fi -- -- elif linux-version compare "${version}" ge 5.8.17 && -- linux-version compare "${version}" le 5.9 || -- linux-version compare "${version}" ge 5.9.2; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-5.8-9.y.patch" "applying" -- elif linux-version compare "${version}" ge 5.6; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-5.6.y.patch" "applying" -- elif linux-version compare "${version}" ge 5.3; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-5.3.y.patch" "applying" -- fi -- -- if [[ "${version}" == "4.19."* ]] && [[ "$LINUXFAMILY" == sunxi* || "$LINUXFAMILY" == meson64 || -- "$LINUXFAMILY" == mvebu64 || "$LINUXFAMILY" == mt7623 || "$LINUXFAMILY" == mvebu ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.19.y.patch" "applying" -- fi -- -- if [[ "${version}" == "4.19."* ]] && [[ "$LINUXFAMILY" == rk35xx ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.19.y-rk35xx.patch" "applying" -- fi -- -- if [[ "${version}" == "4.14."* ]] && [[ "$LINUXFAMILY" == s5p6818 || "$LINUXFAMILY" == mvebu64 || -- "$LINUXFAMILY" == imx7d || "$LINUXFAMILY" == odroidxu4 || "$LINUXFAMILY" == mvebu ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.14.y.patch" "applying" -- fi -- -- if [[ "${version}" == "4.4."* || "${version}" == "4.9."* ]] && -- [[ "$LINUXFAMILY" == rockpis || "$LINUXFAMILY" == rk3399 ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.4.y-rk3399.patch" "applying" -- fi -- -- if [[ "${version}" == "4.4."* ]] && -- [[ "$LINUXFAMILY" == rockchip64 || "$LINUXFAMILY" == station* ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.4.y-rockchip64.patch" "applying" -- fi -- -- if [[ "${version}" == "4.4."* ]] && [[ "$LINUXFAMILY" == rockchip || "$LINUXFAMILY" == rk322x ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.4.y.patch" "applying" -- fi -- -- if [[ "${version}" == "4.9."* ]] && [[ "$LINUXFAMILY" == meson64 || "$LINUXFAMILY" == odroidc4 ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.9.y.patch" "applying" -- fi -- --} -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index dc62374e0..fc06a5e35 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -109,15 +109,6 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/compilation/patch/kernel-drivers.sh - source "${SRC}"/lib/functions/compilation/patch/kernel-drivers.sh - --# no errors tolerated. invoked before each sourced file to make sure. --#set -o pipefail # trace ERR through pipes - will be enabled "soon" --#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled --set -o errtrace # trace ERR through - enabled --set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/compilation/patch/kernel-pkg.sh --# shellcheck source=lib/functions/compilation/patch/kernel-pkg.sh --source "${SRC}"/lib/functions/compilation/patch/kernel-pkg.sh -- - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -diff --git a/packages/armbian/builddeb b/packages/armbian/builddeb -deleted file mode 100755 -index 0163d401a..000000000 ---- a/packages/armbian/builddeb -+++ /dev/null -@@ -1,398 +0,0 @@ --#!/bin/sh --# --# builddeb 1.3 --# Copyright 2003 Wichert Akkerman --# --# Simple script to generate a deb package for a Linux kernel. All the --# complexity of what to do with a kernel after it is installed or removed --# is left to other scripts and packages: they can install scripts in the --# /etc/kernel/{pre,post}{inst,rm}.d/ directories (or an alternative location --# specified in KDEB_HOOKDIR) that will be called on package install and --# removal. --# --# armbian/bulddeb 0.1 --# Copyright 2021 Leonid Gasheev (The-going <48602507+The-going@users.noreply.github.com>) --# --# In order to make a choice, it is enough for us to check the value --# of the variable in the kernel configuration file and Debian's own variables. --# --# Uncomment the next line to see all the current values. --# echo "$(dpkg-architecture -l)" >&2 -- --set -e -- --is_enabled() { -- grep -q "^$1=y" include/config/auto.conf --} -- --if_enabled_echo() { -- if is_enabled "$1"; then -- echo -n "$2" -- elif [ $# -ge 3 ]; then -- echo -n "$3" -- fi --} -- --is_native() { -- dpkg-architecture -qDEB_BUILD_ARCH | grep -q "$(dpkg-architecture -qDEB_HOST_ARCH)" --} -- --is_build_on_amd64() { -- dpkg-architecture -qDEB_BUILD_ARCH | grep -q amd64 --} -- --create_package() { -- local pname="$1" pdir="$2" -- local dpkg_deb_opts -- -- mkdir -m 755 -p "$pdir/DEBIAN" -- mkdir -p "$pdir/usr/share/doc/$pname" -- cp debian/copyright "$pdir/usr/share/doc/$pname/" -- cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian" -- gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian" -- sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \ -- | xargs -r0 md5sum > DEBIAN/md5sums" -- -- # Fix ownership and permissions -- if [ "$DEB_RULES_REQUIRES_ROOT" = "no" ]; then -- dpkg_deb_opts="--root-owner-group" -- else -- chown -R root:root "$pdir" -- fi -- chmod -R go-w "$pdir" -- # in case we are in a restrictive umask environment like 0077 -- chmod -R a+rX "$pdir" -- # in case we build in a setuid/setgid directory -- chmod -R ug-s "$pdir" -- -- # Create preinstall and post install script to remove dtb -- if [ "$3" = "dtb" ]; then -- -- cat >> $pdir/DEBIAN/preinst <<- EOT -- rm -rf /boot/dtb -- rm -rf /boot/dtb-$version -- exit 0 -- EOT -- -- cat >> $pdir/DEBIAN/postinst <<- EOT -- cd /boot -- ln -sfT dtb-$version dtb 2> /dev/null || mv dtb-$version dtb -- exit 0 -- EOT -- -- chmod 775 $pdir/DEBIAN/preinst -- chmod 775 $pdir/DEBIAN/postinst -- fi -- -- # Create postinst prerm script for headers -- if [ "$3" = "headers" ]; then -- -- # Set the time for all files to the current time. -- # And build them for the current architecture. -- cat >> $pdir/DEBIAN/postinst <<- EOT -- cd /usr/src/linux-headers-$version -- echo "Compiling headers - please wait ..." -- NCPU=\$(grep -c 'processor' /proc/cpuinfo) -- find -type f -exec touch {} + -- yes "" | make oldconfig >/dev/null -- make -j\$NCPU -s scripts >/dev/null -- make -j\$NCPU -s M=scripts/mod/ >/dev/null -- exit 0 -- EOT -- -- # After the configuration and compilation processes, new files -- # appear that the package manager does not know anything about. -- # Just clear all the files in the target directory. -- cat >> $pdir/DEBIAN/prerm <<- EOT -- rm -rf /usr/src/linux-headers-$version -- exit 0 -- EOT -- -- chmod 775 $pdir/DEBIAN/postinst -- chmod 775 $pdir/DEBIAN/prerm -- fi -- -- # Create the package -- dpkg-gencontrol -p$pname -P"$pdir" -- dpkg-deb ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. --} -- --deploy_kernel_headers() { -- pdir=$1 -- -- rm -rf $pdir -- -- destdir=$pdir/usr/src/linux-headers-$version -- mkdir -p $destdir -- -- ( -- cd $srctree -- find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl -- find arch/*/include include scripts -type f -o -type l -- find security/*/include -type f -- find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform -- find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f -- ) > debian/hdrsrcfiles -- -- { -- if is_enabled CONFIG_STACK_VALIDATION; then -- # echo tools/objtool/objtool -- find tools/objtool -type f -executable -- fi -- -- find arch/$SRCARCH/include Module.symvers include scripts -type f -- -- if is_enabled CONFIG_GCC_PLUGINS; then -- find scripts/gcc-plugins -name \*.so -o -name gcc-common.h -- fi -- } > debian/hdrobjfiles -- -- if is_native; then -- echo "info: Build native: Skip headers-debian-byteshift.patch" >&2 -- elif is_build_on_amd64; then -- ( -- cd $destdir -- patch -p1 < /tmp/headers-debian-byteshift.patch -- ) -- fi -- -- tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir -- tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir -- rm -f debian/hdrsrcfiles debian/hdrobjfiles -- -- # copy .config manually to be where it's expected to be -- cp $KCONFIG_CONFIG $destdir/.config -- -- mkdir -p $pdir/lib/modules/$version/ -- ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build --} -- --deploy_libc_headers() { -- pdir=$1 -- -- rm -rf $pdir -- -- $MAKE -f $srctree/Makefile headers -- $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH=$pdir/usr -- -- # move asm headers to /usr/include//asm to match the structure -- # used by Debian-based distros (to support multi-arch) -- host_arch=$(dpkg-architecture -a$(cat debian/arch) -qDEB_HOST_MULTIARCH) -- mkdir $pdir/usr/include/$host_arch -- mv $pdir/usr/include/asm $pdir/usr/include/$host_arch/ --} -- --version=$KERNELRELEASE --tmpdir="debian/tmp" --kernel_headers_dir="debian/hdrtmp" --libc_headers_dir="debian/headertmp" --dbg_dir="debian/dbgtmp" --dtb_dir="debian/dtbtmp" --packagename=linux-image-"$BRANCH$LOCALVERSION" --kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --libc_headers_packagename=linux-libc-dev --dbg_packagename=$packagename-dbg -- --if [ "$ARCH" = "um" ]; then -- packagename=user-mode-linux-$version --fi -- --# Not all arches have the same installed path in debian --# XXX: have each arch Makefile export a variable of the canonical image install --# path instead --case $ARCH in -- ++aarch64|arm64) -- image_name=Image -- installed_image_path="boot/vmlinuz-$version" -- ;; -- arm*) -- image_name=zImage -- installed_image_path="boot/vmlinuz-$version" -- ;; -- um) -- installed_image_path="usr/bin/linux-$version" -- ;; -- parisc|mips|powerpc) -- installed_image_path="boot/vmlinux-$version" -- ;; -- *) -- image_name=vmlinuz -- installed_image_path="boot/vmlinuz-$version" -- ;; --esac -- --BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes) -- --# Setup the directory structure --rm -rf "$tmpdir" "$dbg_dir" "$dtb_dir" debian/files --mkdir -m 755 -p "$tmpdir/DEBIAN" --mkdir -p "$tmpdir/lib" "$tmpdir/boot" --mkdir -m 755 -p "$dtb_dir/DEBIAN" --mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" --mkdir -m 755 -p "$kernel_headers_dir/lib/modules/$version/" --mkdir -m 755 -p "$libc_headers_dir/DEBIAN" -- --# Install the kernel --if [ "$ARCH" = "um" ]; then -- mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename" -- $MAKE linux -- cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map" -- cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config" -- gzip "$tmpdir/usr/share/doc/$packagename/config" --else -- cp System.map "$tmpdir/boot/System.map-$version" -- cp $KCONFIG_CONFIG "$tmpdir/boot/config-$version" --fi --cp "$($MAKE -s -f $srctree/Makefile image_name)" "$tmpdir/$installed_image_path" -- --if is_enabled CONFIG_OF_EARLY_FLATTREE; then -- # Only some architectures with OF support have this target -- if [ -d "${srctree}/arch/$SRCARCH/boot/dts" ]; then -- $MAKE -f $srctree/Makefile INSTALL_DTBS_PATH="$tmpdir/usr/lib/linux-image-$version" dtbs_install -- fi --fi -- --if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG; then -- #mkdir -p "$tmpdir/boot/dtb" -- INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --fi -- --if is_enabled CONFIG_MODULES; then -- INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_install -- rm -f "$tmpdir/lib/modules/$version/build" -- rm -f "$tmpdir/lib/modules/$version/source" -- -- if [ "$ARCH" = "um" ]; then -- mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/" -- rmdir "$tmpdir/lib/modules/$version" -- fi -- -- if [ -n "$BUILD_DEBUG" ]; then -- for module in $(find $tmpdir/lib/modules/ -name *.ko -printf '%P\n'); do -- module=lib/modules/$module -- mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module) -- # only keep debug symbols in the debug file -- $OBJCOPY --only-keep-debug $tmpdir/$module $dbg_dir/usr/lib/debug/$module -- # strip original module from debug symbols -- $OBJCOPY --strip-debug $tmpdir/$module -- # then add a link to those -- $OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module -- done -- -- # resign stripped modules -- if is_enabled CONFIG_MODULE_SIG_ALL; then -- INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_sign -- fi -- fi --fi -- --# Install the maintainer scripts --# Note: hook scripts under /etc/kernel are also executed by official Debian --# kernel packages, as well as kernel packages built using make-kpkg. --# make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and --# so do we; recent versions of dracut and initramfs-tools will obey this. --debhookdir=${KDEB_HOOKDIR:-/etc/kernel} --for script in postinst postrm preinst prerm; do -- mkdir -p "$tmpdir$debhookdir/$script.d" -- cat <<- EOF > "$tmpdir/DEBIAN/$script" -- #!/bin/bash -- -- set -e -- -- # Pass maintainer script parameters to hook scripts -- export DEB_MAINT_PARAMS="\$*" -- -- # Tell initramfs builder whether it's wanted -- export INITRD=$(if_enabled_echo CONFIG_BLK_DEV_INITRD Yes No) -- -- test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d -- exit 0 -- EOF -- chmod 755 "$tmpdir/DEBIAN/$script" --done -- --## --## Create sym link to kernel image --## --sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst --cat >> $tmpdir/DEBIAN/postinst <<- EOT -- ln -sf $(basename $installed_image_path) /boot/$image_name 2> /dev/null || mv /$installed_image_path /boot/$image_name -- touch /boot/.next -- exit 0 --EOT -- --## --## FAT install workaround --## --sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst --cat >> $tmpdir/DEBIAN/preinst <<- EOT -- # exit if we are running chroot -- if [ "\$(stat -c %d:%i /)" != "\$(stat -c %d:%i /proc/1/root/.)" ]; then exit 0; fi -- -- check_boot_dev (){ -- boot_device=\$(mountpoint -d /boot) -- -- for file in /dev/* ; do -- CURRENT_DEVICE=\$(printf "%d:%d" \$(stat --printf="0x%t 0x%T" \$file)) -- if [[ "\$CURRENT_DEVICE" = "\$boot_device" ]]; then -- boot_partition=\$file -- break -- fi -- done -- -- bootfstype=\$(blkid -s TYPE -o value \$boot_partition) -- if [ "\$bootfstype" = "vfat" ]; then -- rm -f /boot/System.map* /boot/config* /boot/vmlinuz* /boot/$image_name /boot/uImage -- fi -- } -- mountpoint -q /boot && check_boot_dev -- exit 0 --EOT -- --create_package "$packagename" "$tmpdir" -- --if [ "$ARCH" != "um" ]; then -- -- if [ "$(cat debian/arch)" != "amd64" ]; then # No DTB for amd64 target -- create_package "$dtb_packagename" "$dtb_dir" "dtb" -- fi -- -- deploy_libc_headers $libc_headers_dir -- create_package $libc_headers_packagename $libc_headers_dir -- -- if is_enabled CONFIG_MODULES; then -- if is_native; then -- # echo "Skip scripts folder cleaning" >&2 -- # echo "Skip creating postinst prerm scripts for headers" >&2 -- deploy_kernel_headers $kernel_headers_dir -- create_package $kernel_headers_packagename $kernel_headers_dir -- else -- # Clean up the executables that are left over from -- # cross-compilation for a different host architecture. -- ( -- cd $srctree -- make M=scripts clean -- ) -- deploy_kernel_headers $kernel_headers_dir -- create_package $kernel_headers_packagename $kernel_headers_dir "headers" -- fi -- fi -- --fi -- --if [ -n "$BUILD_DEBUG" ]; then -- # Build debug package -- # Different tools want the image in different locations -- # perf -- mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/ -- cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/ -- # systemtap -- mkdir -p $dbg_dir/usr/lib/debug/boot/ -- ln -s ../lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/boot/vmlinux-$version -- # kdump-tools -- ln -s lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/vmlinux-$version -- create_package "$dbg_packagename" "$dbg_dir" --fi -- --exit 0 -diff --git a/packages/armbian/mkdebian b/packages/armbian/mkdebian -deleted file mode 100755 -index 003195372..000000000 ---- a/packages/armbian/mkdebian -+++ /dev/null -@@ -1,257 +0,0 @@ --#!/bin/sh --# --# Copyright 2003 Wichert Akkerman --# --# Simple script to generate a debian/ directory for a Linux kernel. -- --set -e -- --is_enabled() { -- grep -q "^$1=y" include/config/auto.conf --} -- --if_enabled_echo() { -- if is_enabled "$1"; then -- echo -n "$2" -- elif [ $# -ge 3 ]; then -- echo -n "$3" -- fi --} -- --set_debarch() { -- if [ -n "$KBUILD_DEBARCH" ] ; then -- debarch="$KBUILD_DEBARCH" -- return -- fi -- -- # Attempt to find the correct Debian architecture -- case "$UTS_MACHINE" in -- i386|ia64|alpha|m68k|riscv*) -- debarch="$UTS_MACHINE" ;; -- x86_64) -- debarch=amd64 ;; -- sparc*) -- debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;; -- s390*) -- debarch=s390x ;; -- ppc*) -- if is_enabled CONFIG_64BIT; then -- debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el) -- else -- debarch=powerpc$(if_enabled_echo CONFIG_SPE spe) -- fi -- ;; -- parisc*) -- debarch=hppa ;; -- mips*) -- if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then -- debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el -- elif is_enabled CONFIG_CPU_MIPSR6; then -- debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6 -- else -- debarch=mips -- fi -- ;; -- aarch64|arm64) -- debarch=arm64 ;; -- arm*) -- if is_enabled CONFIG_AEABI; then -- debarch=arm$(if_enabled_echo CONFIG_VFP hf el) -- else -- debarch=arm -- fi -- ;; -- openrisc) -- debarch=or1k ;; -- sh) -- if is_enabled CONFIG_CPU_SH3; then -- debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) -- elif is_enabled CONFIG_CPU_SH4; then -- debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) -- fi -- ;; -- esac -- if [ -z "$debarch" ]; then -- debarch=$(dpkg-architecture -qDEB_HOST_ARCH) -- echo "" >&2 -- echo "** ** ** WARNING ** ** **" >&2 -- echo "" >&2 -- echo "Your architecture doesn't have its equivalent" >&2 -- echo "Debian userspace architecture defined!" >&2 -- echo "Falling back to the current host architecture ($debarch)." >&2 -- echo "Please add support for $UTS_MACHINE to ${0} ..." >&2 -- echo "" >&2 -- fi --} -- --# Some variables and settings used throughout the script --KDEB_SOURCENAME=linux-$KERNELRELEASE --version=$KERNELRELEASE --if [ -n "$KDEB_PKGVERSION" ]; then -- packageversion=$KDEB_PKGVERSION -- revision=${packageversion##*-} --else -- revision=$(cat .version 2>/dev/null||echo 1) -- packageversion=$version-$revision --fi --sourcename=$KDEB_SOURCENAME --packagename=linux-image-"$BRANCH$LOCALVERSION" --kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --libc_headers_packagename=linux-libc-dev --dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --dbg_packagename=$packagename-dbg -- --if [ "$ARCH" = "um" ] ; then -- packagename=user-mode-linux-$version --fi -- --debarch= --set_debarch -- --email=${DEBEMAIL-$EMAIL} -- --# use email string directly if it contains --if echo $email | grep -q '<.*>'; then -- maintainer=$email --else -- # or construct the maintainer string -- user=${KBUILD_BUILD_USER-$(id -nu)} -- name=${DEBFULLNAME-$user} -- if [ -z "$email" ]; then -- buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)} -- email="$user@$buildhost" -- fi -- maintainer="$name <$email>" --fi -- --# Try to determine distribution --if [ -n "$KDEB_CHANGELOG_DIST" ]; then -- distribution=$KDEB_CHANGELOG_DIST --# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog --elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then -- : # nothing to do in this case --else -- distribution="unstable" -- echo >&2 "Using default distribution of 'unstable' in the changelog" -- echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" --fi -- --mkdir -p debian/source/ --echo "1.0" > debian/source/format -- --echo $debarch > debian/arch --extra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)" --extra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)" -- --# Generate a simple changelog template --cat < debian/changelog --$sourcename ($packageversion) $distribution; urgency=low -- -- * Armbian built Linux kernel. $BRANCH -- -- -- $maintainer $(date -R) --EOF -- --# Generate copyright file --cat < debian/copyright --This is a packacked armbian patches version of the Linux kernel. -- --The sources may be found at most Linux archive sites, including: --https://www.kernel.org/pub/linux/kernel -- --Copyright: 1991 - 2018 Linus Torvalds and others. -- --The git repository for mainline kernel development is at: --git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; version 2 dated June, 1991. -- --On Debian GNU/Linux systems, the complete text of the GNU General Public --License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. --EOF -- --# Generate a control file --cat < debian/control --Source: $sourcename --Section: kernel --Priority: optional --Maintainer: $maintainer --Build-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends --Homepage: https://www.kernel.org/ -- --Package: $packagename --Architecture: $debarch --Provides: linux-image, linux-image-armbian, armbian-$BRANCH --Description: Linux kernel, armbian version $version $BRANCH -- This package contains the Linux kernel, modules and corresponding other -- files, version: $version. -- --Package: $libc_headers_packagename --Section: devel --Provides: linux-kernel-headers --Conflicts: linux-kernel-headers --Replaces: linux-kernel-headers --Architecture: $debarch --Description: Armbian Linux support headers for userspace development -- This package provides userspaces headers from the Linux kernel. These headers -- are used by the installed headers for GNU glibc and other system libraries. --Multi-Arch: same -- --Package: $dtb_packagename --Architecture: $debarch --Provides: linux-dtb, linux-dtb-armbian, armbian-$BRANCH --Description: Armbian Linux DTB, version $version $BRANCH -- This package contains device blobs from the Linux kernel, version $version --EOF -- --if is_enabled CONFIG_MODULES; then --cat <> debian/control -- --Package: $kernel_headers_packagename --Section: devel --Architecture: $debarch --Provides: linux-headers, linux-headers-armbian, armbian-$BRANCH --Depends: make, gcc, libc6-dev, bison, flex, libssl-dev --Description: Linux kernel headers for $version on $debarch $BRANCH -- This package provides kernel header files for $version on $debarch -- . -- This is useful for people who need to build external modules --EOF --fi -- --if is_enabled CONFIG_DEBUG_INFO; then --cat <> debian/control -- --Package: $dbg_packagename --Section: debug --Architecture: $debarch --Description: Linux kernel debugging symbols for $version -- This package will come in handy if you need to debug the kernel. It provides -- all the necessary debug symbols for the kernel and its modules. --EOF --fi -- --cat < debian/rules --#!$(command -v $MAKE) -f -- --srctree ?= . -- --build: -- \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ -- KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile -- --binary-arch: -- \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ -- KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile intdeb-pkg -- --clean: -- rm -rf debian/*tmp debian/files -- \$(MAKE) clean -- --binary: binary-arch --EOF --chmod +x debian/rules -- --exit 0 -diff --git a/patch/misc/general-packaging-4.14.y.patch b/patch/misc/general-packaging-4.14.y.patch -deleted file mode 100644 -index 6a1eea7f7..000000000 ---- a/patch/misc/general-packaging-4.14.y.patch -+++ /dev/null -@@ -1,213 +0,0 @@ --diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile --index 8c4bc5a2c..30bc0cffb 100644 ----- a/arch/arm64/Makefile --+++ b/arch/arm64/Makefile --@@ -114,7 +114,7 @@ core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a -- -- # Default target when executing plain make -- boot := arch/arm64/boot ---KBUILD_IMAGE := $(boot)/Image.gz --+KBUILD_IMAGE := $(boot)/Image -- KBUILD_DTBS := dtbs -- -- all: Image.gz $(KBUILD_DTBS) ----- a/scripts/package/builddeb --+++ b/scripts/package/builddeb --@@ -29,6 +29,27 @@ create_package() { -- # in case we are in a restrictive umask environment like 0077 -- chmod -R a+rX "$pdir" -- --+ # Create preinstall and post install script to remove dtb --+ if [[ "$1" == *dtb* ]]; then --+ echo "if [ -d /boot/dtb-$version ]; then mv /boot/dtb-$version /boot/dtb-$version.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /boot/dtb.old ]; then rm -rf /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /boot/dtb ]; then mv /boot/dtb /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "exit 0" >> $pdir/DEBIAN/preinst --+ chmod 775 $pdir/DEBIAN/preinst --+ # --+ echo "if [ -d /boot/dtb-$version.old ]; then rm -rf /boot/dtb-$version.old; fi" >> $pdir/DEBIAN/postinst --+ echo "ln -sf dtb-$version /boot/dtb > /dev/null 2>&1 || mv /boot/dtb-$version /boot/dtb" >> $pdir/DEBIAN/postinst --+ echo "exit 0" >> $pdir/DEBIAN/postinst --+ chmod 775 $pdir/DEBIAN/postinst --+ fi --+ --+ # Create postinstall script for headers --+ if [[ "$1" == *headers* ]]; then --+ echo "cd /usr/src/linux-headers-$version; echo \"Compiling headers - please wait ...\"; find -type f -exec touch {} +;yes "" | make oldconfig >/dev/null;make -j\$(grep -c 'processor' /proc/cpuinfo) -s scripts >/dev/null; make -s M=scripts/mod/ >/dev/null" >> $pdir/DEBIAN/postinst --+ echo "exit 0" >> $pdir/DEBIAN/postinst --+ chmod 775 $pdir/DEBIAN/postinst --+ fi --+ -- # Create the package -- dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch}" -p$pname -P"$pdir" -- dpkg --build "$pdir" .. --@@ -52,7 +73,9 @@ set_debarch() { -- mips*) -- debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el || true) ;; -- aarch64|arm64) --- debarch=arm64 ;; --+ debarch=arm64 --+ image_name=Image --+ ;; -- arm*) -- if grep -q CONFIG_AEABI=y $KCONFIG_CONFIG; then -- if grep -q CONFIG_VFP=y $KCONFIG_CONFIG; then --@@ -63,6 +86,7 @@ set_debarch() { -- else -- debarch=arm -- fi --+ image_name=zImage -- ;; -- *) -- debarch=$(dpkg --print-architecture) --@@ -95,12 +119,15 @@ tmpdir="$objtree/debian/tmp" -- kernel_headers_dir="$objtree/debian/hdrtmp" -- libc_headers_dir="$objtree/debian/headertmp" -- dbg_dir="$objtree/debian/dbgtmp" ---packagename=linux-image-$version ---kernel_headers_packagename=linux-headers-$version ---libc_headers_packagename=linux-libc-dev --+dtb_dir="$objtree/debian/dtbtmp" --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --+libc_headers_packagename=linux-libc-dev-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- debarch= -- forcearch= --+image_name= -- set_debarch -- -- if [ "$ARCH" = "um" ] ; then --@@ -124,7 +151,9 @@ esac -- BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)" -- -- # Setup the directory structure ---rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files --+rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir" $objtree/debian/files --+mkdir -m 755 -p "$dtb_dir/DEBIAN" --+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" -- mkdir -m 755 -p "$tmpdir/DEBIAN" -- mkdir -p "$tmpdir/lib" "$tmpdir/boot" -- mkdir -p "$kernel_headers_dir/lib/modules/$version/" --@@ -177,6 +206,11 @@ if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then -- fi -- fi -- --+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then --+ #mkdir -p "$tmpdir/boot/dtb" --+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --+fi --+ -- if [ "$ARCH" != "um" ]; then -- $MAKE headers_check KBUILD_SRC= -- $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr" --@@ -196,7 +230,7 @@ fi -- for script in postinst postrm preinst prerm ; do -- mkdir -p "$tmpdir$debhookdir/$script.d" -- cat < "$tmpdir/DEBIAN/$script" ---#!/bin/sh --+#!/bin/bash -- -- set -e -- --@@ -212,6 +246,44 @@ EOF -- chmod 755 "$tmpdir/DEBIAN/$script" -- done -- --+## --+## Create sym link to kernel image --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst --+cat >> $tmpdir/DEBIAN/postinst < /dev/null || mv /$installed_image_path /boot/$image_name --+touch /boot/.next --+exit 0 --+EOT --+## --+## FAT install workaround --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst --+cat >> $tmpdir/DEBIAN/preinst <> $tmpdir/DEBIAN/preinst --+ -- # Try to determine maintainer and email values -- if [ -n "$DEBEMAIL" ]; then -- email=$DEBEMAIL --@@ -314,6 +395,7 @@ fi -- # Build kernel header package -- (cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find arch/*/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find security/*/include -type f) >> "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles" -- if grep -q '^CONFIG_STACK_VALIDATION=y' $KCONFIG_CONFIG ; then --@@ -325,16 +407,20 @@ if grep -q '^CONFIG_GCC_PLUGINS=y' $KCONFIG_CONFIG ; then -- fi -- destdir=$kernel_headers_dir/usr/src/linux-headers-$version -- mkdir -p "$destdir" --+(cd $destdir; patch -p1 < /tmp/headers-debian-byteshift.patch) -- (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be -- ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" -- rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" -- --+(cd $destdir; make M=scripts clean) --+ -- cat <> debian/control -- -- Package: $kernel_headers_packagename -- Architecture: any --+Depends: make, gcc, libc6-dev, libssl-dev -- Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch} -- This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch} -- . --@@ -343,6 +429,16 @@ EOF -- -- cat <> debian/control -- --+Package: $dtb_packagename --+Architecture: any --+Description: Linux DTB, version $version --+ This package contains device blobs from the Linux kernel, version $version. --+EOF --+ --+create_package "$dtb_packagename" "$dtb_dir" --+ --+cat <> debian/control --+ -- Package: $libc_headers_packagename -- Section: devel -- Provides: $libc_headers_packagename --@@ -354,7 +450,7 @@ EOF -- -- if [ "$ARCH" != "um" ]; then -- create_package "$kernel_headers_packagename" "$kernel_headers_dir" --- create_package "$libc_headers_packagename" "$libc_headers_dir" --+# create_package "$libc_headers_packagename" "$libc_headers_dir" -- fi -- -- create_package "$packagename" "$tmpdir" -diff --git a/patch/misc/general-packaging-4.19.y-rk35xx.patch b/patch/misc/general-packaging-4.19.y-rk35xx.patch -deleted file mode 100644 -index f94b1a110..000000000 ---- a/patch/misc/general-packaging-4.19.y-rk35xx.patch -+++ /dev/null -@@ -1,236 +0,0 @@ --diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile --index 5b3908880..7a0869261 100644 ----- a/arch/arm64/Makefile --+++ b/arch/arm64/Makefile --@@ -126,7 +126,7 @@ core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a -- -- # Default target when executing plain make -- boot := arch/arm64/boot ---KBUILD_IMAGE := $(boot)/Image.gz --+KBUILD_IMAGE := $(boot)/Image -- KBUILD_DTBS := dtbs -- -- all: Image.gz $(KBUILD_DTBS) --diff --git a/scripts/package/builddeb b/scripts/package/builddeb --index 4c2b84132..1d51c17cd 100755 ----- a/scripts/package/builddeb --+++ b/scripts/package/builddeb --@@ -29,6 +29,44 @@ create_package() { -- # in case we are in a restrictive umask environment like 0077 -- chmod -R a+rX "$pdir" -- --+ # Create preinstall and post install script to remove dtb --+ if [[ "$1" == *dtb* ]]; then --+ --+ cat >> $pdir/DEBIAN/preinst <> $pdir/DEBIAN/postinst < /dev/null || mv dtb-$version dtb --+exit 0 --+EOT --+ --+ chmod 775 $pdir/DEBIAN/preinst ; chmod 775 $pdir/DEBIAN/postinst --+ fi --+ --+ # Create postinst prerm scripts for headers --+ if [[ "$1" == *headers* ]]; then --+ --+cat >> $pdir/DEBIAN/postinst << EOT --+cd /usr/src/linux-headers-$version --+echo "Compiling headers - please wait ..." --+find -type f -exec touch {} + --+make -s scripts >/dev/null --+make -s M=scripts/mod/ >/dev/null --+exit 0 --+EOT --+ --+cat >> $pdir/DEBIAN/prerm << EOT --+cd /usr/src/linux-headers-$version --+rm -rf scripts .config.old --+exit 0 --+EOT --+ --+ chmod 775 $pdir/DEBIAN/postinst ; chmod 775 $pdir/DEBIAN/prerm --+ fi --+ -- # Create the package -- dpkg-gencontrol -p$pname -P"$pdir" -- dpkg --build "$pdir" .. --@@ -39,9 +77,11 @@ tmpdir="$objtree/debian/tmp" -- kernel_headers_dir="$objtree/debian/hdrtmp" -- libc_headers_dir="$objtree/debian/headertmp" -- dbg_dir="$objtree/debian/dbgtmp" ---packagename=linux-image-$version ---kernel_headers_packagename=linux-headers-$version ---libc_headers_packagename=linux-libc-dev --+dtb_dir="$objtree/debian/dtbtmp" --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --+libc_headers_packagename=linux-libc-dev-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- -- if [ "$ARCH" = "um" ] ; then --@@ -52,6 +92,15 @@ fi -- # XXX: have each arch Makefile export a variable of the canonical image install -- # path instead -- case $ARCH in --+aarch64|arm64) --+ image_name=Image --+ installed_image_path="boot/vmlinuz-$version" --+ --+ ;; --+arm*) --+ image_name=zImage --+ installed_image_path="boot/vmlinuz-$version" --+ ;; -- um) -- installed_image_path="usr/bin/linux-$version" -- ;; --@@ -65,7 +114,9 @@ esac -- BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)" -- -- # Setup the directory structure ---rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files --+rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir" $objtree/debian/files --+mkdir -m 755 -p "$dtb_dir/DEBIAN" --+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" -- mkdir -m 755 -p "$tmpdir/DEBIAN" -- mkdir -p "$tmpdir/lib" "$tmpdir/boot" -- mkdir -p "$kernel_headers_dir/lib/modules/$version/" --@@ -118,6 +169,11 @@ if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then -- fi -- fi -- --+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then --+ #mkdir -p "$tmpdir/boot/dtb" --+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --+fi --+ -- if [ "$ARCH" != "um" ]; then -- $MAKE headers_check KBUILD_SRC= -- $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr" --@@ -137,7 +193,7 @@ fi -- for script in postinst postrm preinst prerm ; do -- mkdir -p "$tmpdir$debhookdir/$script.d" -- cat < "$tmpdir/DEBIAN/$script" ---#!/bin/sh --+#!/bin/bash -- -- set -e -- --@@ -153,10 +209,50 @@ EOF -- chmod 755 "$tmpdir/DEBIAN/$script" -- done -- --+## --+## Create sym link to kernel image --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst --+cat >> $tmpdir/DEBIAN/postinst < /dev/null || mv /$installed_image_path /boot/$image_name --+touch /boot/.next --+exit 0 --+EOT --+ --+## --+## FAT install workaround --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst --+cat >> $tmpdir/DEBIAN/preinst <> $tmpdir/DEBIAN/preinst --+ -- # Build kernel header package -- (cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find arch/*/include tools/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find security/selinux/include tools/include include scripts -type f) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find security/*/include -type f) >> "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles" -- if grep -q '^CONFIG_STACK_VALIDATION=y' $KCONFIG_CONFIG ; then --@@ -168,15 +264,19 @@ if grep -q '^CONFIG_GCC_PLUGINS=y' $KCONFIG_CONFIG ; then -- fi -- destdir=$kernel_headers_dir/usr/src/linux-headers-$version -- mkdir -p "$destdir" --+(cd $destdir; patch -p1 < /tmp/headers-debian-byteshift.patch) -- (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be -- ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" -- rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" -- --+(cd $destdir; make M=scripts clean) --+ -- if [ "$ARCH" != "um" ]; then -- create_package "$kernel_headers_packagename" "$kernel_headers_dir" --- create_package "$libc_headers_packagename" "$libc_headers_dir" --+ # create_package "$libc_headers_packagename" "$libc_headers_dir" --+ create_package "$dtb_packagename" "$dtb_dir" -- fi -- -- create_package "$packagename" "$tmpdir" --diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian --index edcad61fe..8a49f4329 100755 ----- a/scripts/package/mkdebian --+++ b/scripts/package/mkdebian --@@ -94,10 +94,12 @@ else -- packageversion=$version-$revision -- fi -- sourcename=$KDEB_SOURCENAME ---packagename=linux-image-$version ---kernel_headers_packagename=linux-headers-$version --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- debarch= --+image_name= -- set_debarch -- -- if [ "$ARCH" = "um" ] ; then --@@ -181,6 +183,7 @@ Description: Linux kernel, version $version -- -- Package: $kernel_headers_packagename -- Architecture: $debarch --+Depends: make, gcc, libc6-dev, flex, bison, libssl-dev -- Description: Linux kernel headers for $version on $debarch -- This package provides kernel header files for $version on $debarch -- . --@@ -200,6 +203,11 @@ Architecture: $debarch -- Description: Linux kernel debugging symbols for $version -- This package will come in handy if you need to debug the kernel. It provides -- all the necessary debug symbols for the kernel and its modules. --+ --+Package: $dtb_packagename --+Architecture: $debarch --+Description: Linux DTB, version $version --+ This package contains device blobs from the Linux kernel, version $version -- EOF -- -- cat < debian/rules -diff --git a/patch/misc/general-packaging-4.19.y.patch b/patch/misc/general-packaging-4.19.y.patch -deleted file mode 100644 -index 0c58947f5..000000000 ---- a/patch/misc/general-packaging-4.19.y.patch -+++ /dev/null -@@ -1,249 +0,0 @@ --From 2b73935784b88ef50fc4be16254a4962b5f70383 Mon Sep 17 00:00:00 2001 --From: The-going <48602507+The-going@users.noreply.github.com> --Date: Tue, 10 Mar 2020 16:44:18 +0300 --Subject: [PATCH] general packaging 4.19.y -- ----- -- arch/arm64/Makefile | 2 +- -- scripts/package/builddeb | 121 ++++++++++++++++++++++++++++++++++++++++++++--- -- scripts/package/mkdebian | 12 ++++- -- 3 files changed, 126 insertions(+), 9 deletions(-) -- --diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile --index 9a5e28141211..851e646169ba 100644 ----- a/arch/arm64/Makefile --+++ b/arch/arm64/Makefile --@@ -113,7 +113,7 @@ core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a -- -- # Default target when executing plain make -- boot := arch/arm64/boot ---KBUILD_IMAGE := $(boot)/Image.gz --+KBUILD_IMAGE := $(boot)/Image -- KBUILD_DTBS := dtbs -- -- all: Image.gz $(KBUILD_DTBS) --diff --git a/scripts/package/builddeb b/scripts/package/builddeb --index 0b31f4f1f92c..f6b96d8507f4 100755 ----- a/scripts/package/builddeb --+++ b/scripts/package/builddeb --@@ -29,6 +29,44 @@ create_package() { -- # in case we are in a restrictive umask environment like 0077 -- chmod -R a+rX "$pdir" -- --+ # Create preinstall and post install script to remove dtb --+ if [[ "$1" == *dtb* ]]; then --+ --+ cat >> $pdir/DEBIAN/preinst <> $pdir/DEBIAN/postinst < /dev/null || mv dtb-$version dtb --+exit 0 --+EOT --+ --+ chmod 775 $pdir/DEBIAN/preinst ; chmod 775 $pdir/DEBIAN/postinst --+ fi --+ --+ # Create postinst prerm scripts for headers --+ if [[ "$1" == *headers* ]]; then --+ --+cat >> $pdir/DEBIAN/postinst << EOT --+cd /usr/src/linux-headers-$version --+echo "Compiling headers - please wait ..." --+find -type f -exec touch {} + --+make -s scripts >/dev/null --+make -s M=scripts/mod/ >/dev/null --+exit 0 --+EOT --+ --+cat >> $pdir/DEBIAN/prerm << EOT --+cd /usr/src/linux-headers-$version --+rm -rf scripts .config.old --+exit 0 --+EOT --+ --+ chmod 775 $pdir/DEBIAN/postinst ; chmod 775 $pdir/DEBIAN/prerm --+ fi --+ -- # Create the package -- dpkg-gencontrol -p$pname -P"$pdir" -- dpkg --build "$pdir" .. --@@ -39,9 +77,11 @@ tmpdir="$objtree/debian/tmp" -- kernel_headers_dir="$objtree/debian/hdrtmp" -- libc_headers_dir="$objtree/debian/headertmp" -- dbg_dir="$objtree/debian/dbgtmp" ---packagename=linux-image-$version ---kernel_headers_packagename=linux-headers-$version ---libc_headers_packagename=linux-libc-dev --+dtb_dir="$objtree/debian/dtbtmp" --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --+libc_headers_packagename=linux-libc-dev-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- -- if [ "$ARCH" = "um" ] ; then --@@ -52,6 +92,15 @@ fi -- # XXX: have each arch Makefile export a variable of the canonical image install -- # path instead -- case $ARCH in --+aarch64|arm64) --+ image_name=Image --+ installed_image_path="boot/vmlinuz-$version" --+ --+ ;; --+arm*) --+ image_name=zImage --+ installed_image_path="boot/vmlinuz-$version" --+ ;; -- um) -- installed_image_path="usr/bin/linux-$version" -- ;; --@@ -65,7 +114,9 @@ esac -- BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)" -- -- # Setup the directory structure ---rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files --+rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir" $objtree/debian/files --+mkdir -m 755 -p "$dtb_dir/DEBIAN" --+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" -- mkdir -m 755 -p "$tmpdir/DEBIAN" -- mkdir -p "$tmpdir/lib" "$tmpdir/boot" -- mkdir -p "$kernel_headers_dir/lib/modules/$version/" --@@ -118,6 +169,11 @@ if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then -- fi -- fi -- --+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then --+ #mkdir -p "$tmpdir/boot/dtb" --+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --+fi --+ -- if [ "$ARCH" != "um" ]; then -- $MAKE headers_check KBUILD_SRC= -- $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr" --@@ -137,7 +193,7 @@ fi -- for script in postinst postrm preinst prerm ; do -- mkdir -p "$tmpdir$debhookdir/$script.d" -- cat < "$tmpdir/DEBIAN/$script" ---#!/bin/sh --+#!/bin/bash -- -- set -e -- --@@ -153,9 +209,49 @@ EOF -- chmod 755 "$tmpdir/DEBIAN/$script" -- done -- --+## --+## Create sym link to kernel image --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst --+cat >> $tmpdir/DEBIAN/postinst < /dev/null || mv /$installed_image_path /boot/$image_name --+touch /boot/.next --+exit 0 --+EOT --+ --+## --+## FAT install workaround --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst --+cat >> $tmpdir/DEBIAN/preinst <> $tmpdir/DEBIAN/preinst --+ -- # Build kernel header package -- (cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find arch/*/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find security/*/include -type f) >> "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles" -- if grep -q '^CONFIG_STACK_VALIDATION=y' $KCONFIG_CONFIG ; then --@@ -167,15 +272,19 @@ if grep -q '^CONFIG_GCC_PLUGINS=y' $KCONFIG_CONFIG ; then -- fi -- destdir=$kernel_headers_dir/usr/src/linux-headers-$version -- mkdir -p "$destdir" --+(cd $destdir; patch -p1 < /tmp/headers-debian-byteshift.patch) -- (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be -- ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" -- rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" -- --+(cd $destdir; make M=scripts clean) --+ -- if [ "$ARCH" != "um" ]; then -- create_package "$kernel_headers_packagename" "$kernel_headers_dir" --- create_package "$libc_headers_packagename" "$libc_headers_dir" --+ # create_package "$libc_headers_packagename" "$libc_headers_dir" --+ create_package "$dtb_packagename" "$dtb_dir" -- fi -- -- create_package "$packagename" "$tmpdir" --diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian --index edcad61fe3cd..8a49f432921f 100755 ----- a/scripts/package/mkdebian --+++ b/scripts/package/mkdebian --@@ -94,10 +94,12 @@ else -- packageversion=$version-$revision -- fi -- sourcename=$KDEB_SOURCENAME ---packagename=linux-image-$version ---kernel_headers_packagename=linux-headers-$version --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- debarch= --+image_name= -- set_debarch -- -- if [ "$ARCH" = "um" ] ; then --@@ -181,6 +183,7 @@ Description: Linux kernel, version $version -- -- Package: $kernel_headers_packagename -- Architecture: $debarch --+Depends: make, gcc, libc6-dev, flex, bison, libssl-dev -- Description: Linux kernel headers for $version on $debarch -- This package provides kernel header files for $version on $debarch -- . --@@ -200,6 +203,11 @@ Architecture: $debarch -- Description: Linux kernel debugging symbols for $version -- This package will come in handy if you need to debug the kernel. It provides -- all the necessary debug symbols for the kernel and its modules. --+ --+Package: $dtb_packagename --+Architecture: $debarch --+Description: Linux DTB, version $version --+ This package contains device blobs from the Linux kernel, version $version -- EOF -- -- cat < debian/rules ---- --2.16.4 -- -diff --git a/patch/misc/general-packaging-4.4.y-rk3399.patch b/patch/misc/general-packaging-4.4.y-rk3399.patch -deleted file mode 100644 -index bb0c925e7..000000000 ---- a/patch/misc/general-packaging-4.4.y-rk3399.patch -+++ /dev/null -@@ -1,216 +0,0 @@ --diff --git a/scripts/package/builddeb b/scripts/package/builddeb --index 6c3b038e..f4166fbe 100755 ----- a/scripts/package/builddeb --+++ b/scripts/package/builddeb --@@ -27,6 +27,28 @@ create_package() { -- chown -R root:root "$pdir" -- chmod -R go-w "$pdir" -- --+ # Create preinstall and post install script to remove dtb --+ if [[ "$1" == *dtb* ]]; then --+ echo "if [ -d /boot/dtb-$version ]; then mv /boot/dtb-$version /boot/dtb-$version.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /boot/dtb.old ]; then rm -rf /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /dtb ]; then mv /dtb /dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /boot/dtb ]; then mv /boot/dtb /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "exit 0" >> $pdir/DEBIAN/preinst --+ chmod 775 $pdir/DEBIAN/preinst --+ # --+ echo "if [ -d /boot/dtb-$version.old ]; then rm -rf /boot/dtb-$version.old; fi" >> $pdir/DEBIAN/postinst --+ echo "ln -sf dtb-$version /boot/dtb > /dev/null 2>&1 || mv /boot/dtb-$version /boot/dtb" >> $pdir/DEBIAN/postinst --+ echo "exit 0" >> $pdir/DEBIAN/postinst --+ chmod 775 $pdir/DEBIAN/postinst --+ fi --+ --+ # Create postinstall script for headers --+ if [[ "$1" == *headers* ]]; then --+ echo "cd /usr/src/linux-headers-$version; echo \"Compiling headers - please wait ...\"; find -type f -exec touch {} +;yes "" | make oldconfig >/dev/null;make -j\$(grep -c 'processor' /proc/cpuinfo) -s scripts >/dev/null; make -s M=scripts/mod/ >/dev/null" >> $pdir/DEBIAN/postinst --+ echo "exit 0" >> $pdir/DEBIAN/postinst --+ chmod 775 $pdir/DEBIAN/postinst --+ fi --+ -- # Create the package -- dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch}" -p$pname -P"$pdir" -- dpkg --build "$pdir" .. --@@ -93,11 +115,13 @@ tmpdir="$objtree/debian/tmp" -- fwdir="$objtree/debian/fwtmp" -- kernel_headers_dir="$objtree/debian/hdrtmp" -- libc_headers_dir="$objtree/debian/headertmp" --+dtb_dir="$objtree/debian/dtbtmp" -- dbg_dir="$objtree/debian/dbgtmp" ---packagename=linux-image-$version ---fwpackagename=linux-firmware-image-$version ---kernel_headers_packagename=linux-headers-$version ---libc_headers_packagename=linux-libc-dev --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+fwpackagename=linux-firmware-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --+libc_headers_packagename=linux-libc-dev-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- debarch= -- forcearch= --@@ -114,7 +138,7 @@ case $ARCH in -- um) -- installed_image_path="usr/bin/linux-$version" -- ;; ---parisc|mips|powerpc) --+parisc|mips|powerpc|arm64) -- installed_image_path="boot/vmlinux-$version" -- ;; -- *) --@@ -124,7 +148,9 @@ esac -- BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)" -- -- # Setup the directory structure ---rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files --+rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir" $objtree/debian/files --+mkdir -m 755 -p "$dtb_dir/DEBIAN" --+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" -- mkdir -m 755 -p "$tmpdir/DEBIAN" -- mkdir -p "$tmpdir/lib" "$tmpdir/boot" -- mkdir -p "$fwdir/lib/firmware/$version/" --@@ -143,9 +169,10 @@ else -- fi -- # Not all arches include the boot path in KBUILD_IMAGE -- if [ -e $KBUILD_IMAGE ]; then --- cp $KBUILD_IMAGE "$tmpdir/$installed_image_path" --+#Forcing KBUILD_MAGE reference to Image instead of zImage.. Armbian LINUX_KERNEL_TYPE=Image not being honored --+ cp Image "$tmpdir/$installed_image_path" -- else --- cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/$installed_image_path" --+ cp arch/$ARCH/boot/Image "$tmpdir/$installed_image_path" -- fi -- -- if grep -q "^CONFIG_OF=y" $KCONFIG_CONFIG ; then --@@ -183,6 +210,11 @@ if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then -- fi -- fi -- --+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then --+ #mkdir -p "$tmpdir/boot/dtb" --+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --+fi --+ -- if [ "$ARCH" != "um" ]; then -- $MAKE headers_check KBUILD_SRC= -- $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr" --@@ -195,7 +227,7 @@ fi -- # so do we; recent versions of dracut and initramfs-tools will obey this. -- debhookdir=${KDEB_HOOKDIR:-/etc/kernel} -- if grep -q '^CONFIG_BLK_DEV_INITRD=y' $KCONFIG_CONFIG; then --- want_initrd=Yes --+ want_initrd=Yes -- else -- want_initrd=No -- fi --@@ -207,9 +239,11 @@ for script in postinst postrm preinst prerm ; do -- set -e -- -- # Pass maintainer script parameters to hook scripts --+ -- export DEB_MAINT_PARAMS="\$*" -- -- # Tell initramfs builder whether it's wanted --+ -- export INITRD=$want_initrd -- -- test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d --@@ -218,6 +252,44 @@ EOF -- chmod 755 "$tmpdir/DEBIAN/$script" -- done -- --+## --+## Create sym link to kernel image --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst --+cat >> $tmpdir/DEBIAN/postinst < /dev/null 2>&1 || mv /$installed_image_path /boot/Image --+touch /boot/.next --+exit 0 --+EOT --+## --+## FAT install workaround --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst --+cat >> $tmpdir/DEBIAN/preinst <> $tmpdir/DEBIAN/preinst --+ -- # Try to determine maintainer and email values -- if [ -n "$DEBEMAIL" ]; then -- email=$DEBEMAIL --@@ -328,17 +412,26 @@ fi -- (cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles" -- destdir=$kernel_headers_dir/usr/src/linux-headers-$version -- mkdir -p "$destdir" --+######################## headers patch --+ZACNI=$(pwd) --+cd $destdir --+patch -p1 < /tmp/headers-debian-byteshift.patch --+cd $ZACNI --+######################## headers patch -- (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be -- ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" -- rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" -- --+(cd "$destdir"; make M=scripts clean) --+ -- cat <> debian/control -- -- Package: $kernel_headers_packagename ---Provides: linux-headers, linux-headers-2.6 --+Provides: $kernel_headers_packagename -- Architecture: any --+Depends: make, gcc, libc6-dev, libssl-dev -- Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch} -- This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch} -- . --@@ -363,6 +456,16 @@ fi -- -- cat <> debian/control -- --+Package: $dtb_packagename --+Architecture: any --+Description: Linux DTB, version $version --+ This package contains device blobs from the Linux kernel, version $version. --+EOF --+ --+create_package "$dtb_packagename" "$dtb_dir" --+ --+cat <> debian/control --+ -- Package: $libc_headers_packagename -- Section: devel -- Provides: $libc_headers_packagename --@@ -374,7 +477,7 @@ EOF -- -- if [ "$ARCH" != "um" ]; then -- create_package "$kernel_headers_packagename" "$kernel_headers_dir" --- create_package "$libc_headers_packagename" "$libc_headers_dir" --+# create_package "$libc_headers_packagename" "$libc_headers_dir" -- fi -- -- create_package "$packagename" "$tmpdir" -diff --git a/patch/misc/general-packaging-4.4.y-rockchip64.patch b/patch/misc/general-packaging-4.4.y-rockchip64.patch -deleted file mode 100644 -index c5bfe253c..000000000 ---- a/patch/misc/general-packaging-4.4.y-rockchip64.patch -+++ /dev/null -@@ -1,216 +0,0 @@ --diff --git a/scripts/package/builddeb b/scripts/package/builddeb --index 6c3b038e..f4166fbe 100755 ----- a/scripts/package/builddeb --+++ b/scripts/package/builddeb --@@ -27,6 +27,28 @@ create_package() { -- chown -R root:root "$pdir" -- chmod -R go-w "$pdir" -- --+ # Create preinstall and post install script to remove dtb --+ if [[ "$1" == *dtb* ]]; then --+ echo "if [ -d /boot/dtb-$version ]; then mv /boot/dtb-$version /boot/dtb-$version.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /boot/dtb.old ]; then rm -rf /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /dtb ]; then mv /dtb /dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /boot/dtb ]; then mv /boot/dtb /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "exit 0" >> $pdir/DEBIAN/preinst --+ chmod 775 $pdir/DEBIAN/preinst --+ # --+ echo "if [ -d /boot/dtb-$version.old ]; then rm -rf /boot/dtb-$version.old; fi" >> $pdir/DEBIAN/postinst --+ echo "ln -sf dtb-$version /boot/dtb > /dev/null 2>&1 || mv /boot/dtb-$version /boot/dtb" >> $pdir/DEBIAN/postinst --+ echo "exit 0" >> $pdir/DEBIAN/postinst --+ chmod 775 $pdir/DEBIAN/postinst --+ fi --+ --+ # Create postinstall script for headers --+ if [[ "$1" == *headers* ]]; then --+ echo "cd /usr/src/linux-headers-$version; echo \"Compiling headers - please wait ...\"; find -type f -exec touch {} +;yes "" | make oldconfig >/dev/null;make -j\$(grep -c 'processor' /proc/cpuinfo) -s scripts >/dev/null; make -s M=scripts/mod/ >/dev/null" >> $pdir/DEBIAN/postinst --+ echo "exit 0" >> $pdir/DEBIAN/postinst --+ chmod 775 $pdir/DEBIAN/postinst --+ fi --+ -- # Create the package -- dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch}" -p$pname -P"$pdir" -- dpkg --build "$pdir" .. --@@ -93,11 +115,13 @@ tmpdir="$objtree/debian/tmp" -- fwdir="$objtree/debian/fwtmp" -- kernel_headers_dir="$objtree/debian/hdrtmp" -- libc_headers_dir="$objtree/debian/headertmp" --+dtb_dir="$objtree/debian/dtbtmp" -- dbg_dir="$objtree/debian/dbgtmp" ---packagename=linux-image-$version ---fwpackagename=linux-firmware-image-$version ---kernel_headers_packagename=linux-headers-$version ---libc_headers_packagename=linux-libc-dev --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+fwpackagename=linux-firmware-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --+libc_headers_packagename=linux-libc-dev-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- debarch= -- forcearch= --@@ -114,7 +138,7 @@ case $ARCH in -- um) -- installed_image_path="usr/bin/linux-$version" -- ;; ---parisc|mips|powerpc) --+parisc|mips|powerpc|arm64) -- installed_image_path="boot/vmlinux-$version" -- ;; -- *) --@@ -124,7 +148,9 @@ esac -- BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)" -- -- # Setup the directory structure ---rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files --+rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir" $objtree/debian/files --+mkdir -m 755 -p "$dtb_dir/DEBIAN" --+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" -- mkdir -m 755 -p "$tmpdir/DEBIAN" -- mkdir -p "$tmpdir/lib" "$tmpdir/boot" -- mkdir -p "$fwdir/lib/firmware/$version/" --@@ -143,9 +169,10 @@ else -- fi -- # Not all arches include the boot path in KBUILD_IMAGE -- if [ -e $KBUILD_IMAGE ]; then --- cp $KBUILD_IMAGE "$tmpdir/$installed_image_path" --+#Forcing KBUILD_MAGE reference to Image instead of zImage.. Armbian LINUX_KERNEL_TYPE=Image not being honored --+ cp Image "$tmpdir/$installed_image_path" -- else --- cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/$installed_image_path" --+ cp arch/$ARCH/boot/Image "$tmpdir/$installed_image_path" -- fi -- -- if grep -q "^CONFIG_OF=y" $KCONFIG_CONFIG ; then --@@ -183,6 +210,11 @@ if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then -- fi -- fi -- --+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then --+ #mkdir -p "$tmpdir/boot/dtb" --+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --+fi --+ -- if [ "$ARCH" != "um" ]; then -- $MAKE headers_check KBUILD_SRC= -- $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr" --@@ -195,7 +227,7 @@ fi -- # so do we; recent versions of dracut and initramfs-tools will obey this. -- debhookdir=${KDEB_HOOKDIR:-/etc/kernel} -- if grep -q '^CONFIG_BLK_DEV_INITRD=y' $KCONFIG_CONFIG; then --- want_initrd=Yes --+ want_initrd=Yes -- else -- want_initrd=No -- fi --@@ -207,9 +239,11 @@ for script in postinst postrm preinst prerm ; do -- set -e -- -- # Pass maintainer script parameters to hook scripts --+ -- export DEB_MAINT_PARAMS="\$*" -- -- # Tell initramfs builder whether it's wanted --+ -- export INITRD=$want_initrd -- -- test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d --@@ -218,6 +252,44 @@ EOF -- chmod 755 "$tmpdir/DEBIAN/$script" -- done -- --+## --+## Create sym link to kernel image --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst --+cat >> $tmpdir/DEBIAN/postinst < /dev/null 2>&1 || mv /$installed_image_path /boot/Image --+touch /boot/.next --+exit 0 --+EOT --+## --+## FAT install workaround --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst --+cat >> $tmpdir/DEBIAN/preinst <> $tmpdir/DEBIAN/preinst --+ -- # Try to determine maintainer and email values -- if [ -n "$DEBEMAIL" ]; then -- email=$DEBEMAIL --@@ -328,17 +412,26 @@ fi -- (cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles" -- destdir=$kernel_headers_dir/usr/src/linux-headers-$version -- mkdir -p "$destdir" --+######################## headers patch --+ZACNI=$(pwd) --+cd $destdir --+patch -p1 < /tmp/headers-debian-byteshift.patch --+cd $ZACNI --+######################## headers patch -- (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be -- ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" -- rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" -- --+(cd "$destdir"; make M=scripts clean) --+ -- cat <> debian/control -- -- Package: $kernel_headers_packagename ---Provides: linux-headers, linux-headers-rockchip, linux-headers-rockchip-4.4 --+Provides: $kernel_headers_packagename -- Architecture: any --+Depends: make, gcc, libc6-dev, libssl-dev -- Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch} -- This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch} -- . --@@ -363,6 +456,16 @@ fi -- -- cat <> debian/control -- --+Package: $dtb_packagename --+Architecture: any --+Description: Linux DTB, version $version --+ This package contains device blobs from the Linux kernel, version $version. --+EOF --+ --+create_package "$dtb_packagename" "$dtb_dir" --+ --+cat <> debian/control --+ -- Package: $libc_headers_packagename -- Section: devel -- Provides: $libc_headers_packagename --@@ -374,7 +477,7 @@ EOF -- -- if [ "$ARCH" != "um" ]; then -- create_package "$kernel_headers_packagename" "$kernel_headers_dir" --- create_package "$libc_headers_packagename" "$libc_headers_dir" --+# create_package "$libc_headers_packagename" "$libc_headers_dir" -- fi -- -- create_package "$packagename" "$tmpdir" -diff --git a/patch/misc/general-packaging-4.4.y.patch b/patch/misc/general-packaging-4.4.y.patch -deleted file mode 100644 -index f6d351a7e..000000000 ---- a/patch/misc/general-packaging-4.4.y.patch -+++ /dev/null -@@ -1,230 +0,0 @@ --diff --git a/scripts/package/builddeb b/scripts/package/builddeb --index 6c3b038e..977a0624 100755 ----- a/scripts/package/builddeb --+++ b/scripts/package/builddeb --@@ -27,6 +27,28 @@ -- chown -R root:root "$pdir" -- chmod -R go-w "$pdir" -- --+ # Create preinstall and post install script to remove dtb --+ if [[ "$1" == *dtb* ]]; then --+ echo "if [ -d /boot/dtb-$version ]; then mv /boot/dtb-$version /boot/dtb-$version.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /boot/dtb.old ]; then rm -rf /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /dtb ]; then mv /dtb /dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /boot/dtb ]; then mv /boot/dtb /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "exit 0" >> $pdir/DEBIAN/preinst --+ chmod 775 $pdir/DEBIAN/preinst --+ # --+ echo "if [ -d /boot/dtb-$version.old ]; then rm -rf /boot/dtb-$version.old; fi" >> $pdir/DEBIAN/postinst --+ echo "ln -sf dtb-$version /boot/dtb > /dev/null 2>&1 || mv /boot/dtb-$version /boot/dtb" >> $pdir/DEBIAN/postinst --+ echo "exit 0" >> $pdir/DEBIAN/postinst --+ chmod 775 $pdir/DEBIAN/postinst --+ fi --+ --+ # Create postinstall script for headers --+ if [[ "$1" == *headers* ]]; then --+ echo "cd /usr/src/linux-headers-$version; echo \"Compiling headers - please wait ...\"; find -type f -exec touch {} +;yes "" | make oldconfig >/dev/null;make -j\$(grep -c 'processor' /proc/cpuinfo) -s scripts >/dev/null; make -s M=scripts/mod/ >/dev/null" >> $pdir/DEBIAN/postinst --+ echo "exit 0" >> $pdir/DEBIAN/postinst --+ chmod 775 $pdir/DEBIAN/postinst --+ fi --+ -- # Create the package -- dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch}" -p$pname -P"$pdir" -- dpkg --build "$pdir" .. --@@ -50,8 +72,11 @@ -- mips*) -- debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el || true) ;; -- arm64) --- debarch=arm64 ;; --+ debarch=arm64 --+ image_name=Image --+ ;; -- arm*) --+ image_name=zImage -- if grep -q CONFIG_AEABI=y $KCONFIG_CONFIG; then -- if grep -q CONFIG_VFP=y $KCONFIG_CONFIG; then -- debarch=armhf --@@ -93,11 +118,13 @@ -- fwdir="$objtree/debian/fwtmp" -- kernel_headers_dir="$objtree/debian/hdrtmp" -- libc_headers_dir="$objtree/debian/headertmp" --+dtb_dir="$objtree/debian/dtbtmp" -- dbg_dir="$objtree/debian/dbgtmp" ---packagename=linux-image-$version ---fwpackagename=linux-firmware-image-$version ---kernel_headers_packagename=linux-headers-$version ---libc_headers_packagename=linux-libc-dev --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+fwpackagename=linux-firmware-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --+libc_headers_packagename=linux-libc-dev-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- debarch= -- forcearch= --@@ -124,7 +151,9 @@ -- BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)" -- -- # Setup the directory structure ---rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files --+rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir" $objtree/debian/files --+mkdir -m 755 -p "$dtb_dir/DEBIAN" --+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" -- mkdir -m 755 -p "$tmpdir/DEBIAN" -- mkdir -p "$tmpdir/lib" "$tmpdir/boot" -- mkdir -p "$fwdir/lib/firmware/$version/" --@@ -183,6 +212,11 @@ -- fi -- fi -- --+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then --+ #mkdir -p "$tmpdir/boot/dtb" --+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --+fi --+ -- if [ "$ARCH" != "um" ]; then -- $MAKE headers_check KBUILD_SRC= -- $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr" --@@ -195,21 +229,23 @@ -- # so do we; recent versions of dracut and initramfs-tools will obey this. -- debhookdir=${KDEB_HOOKDIR:-/etc/kernel} -- if grep -q '^CONFIG_BLK_DEV_INITRD=y' $KCONFIG_CONFIG; then --- want_initrd=Yes --+ want_initrd=Yes -- else -- want_initrd=No -- fi -- for script in postinst postrm preinst prerm ; do -- mkdir -p "$tmpdir$debhookdir/$script.d" -- cat < "$tmpdir/DEBIAN/$script" ---#!/bin/sh --+#!/bin/bash -- -- set -e -- -- # Pass maintainer script parameters to hook scripts --+ -- export DEB_MAINT_PARAMS="\$*" -- -- # Tell initramfs builder whether it's wanted --+ -- export INITRD=$want_initrd -- -- test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d --@@ -218,6 +254,44 @@ -- chmod 755 "$tmpdir/DEBIAN/$script" -- done -- --+## --+## Create sym link to kernel image --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst --+cat >> $tmpdir/DEBIAN/postinst < /dev/null 2>&1 || mv /$installed_image_path /boot/$image_name --+touch /boot/.next --+exit 0 --+EOT --+## --+## FAT install workaround --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst --+cat >> $tmpdir/DEBIAN/preinst <> $tmpdir/DEBIAN/preinst --+ -- # Try to determine maintainer and email values -- if [ -n "$DEBEMAIL" ]; then -- email=$DEBEMAIL --@@ -293,7 +376,7 @@ -- cat <> debian/control -- -- Package: $packagename ---Provides: linux-image, linux-image-2.6, linux-modules-$version --+Provides: $packagename -- Architecture: any -- Description: User Mode Linux kernel, version $version -- User-mode Linux is a port of the Linux kernel to its own system call --@@ -310,7 +393,7 @@ -- cat <> debian/control -- -- Package: $packagename ---Provides: linux-image, linux-image-2.6, linux-modules-$version --+Provides: $packagename -- Suggests: $fwpackagename -- Architecture: any -- Description: Linux kernel, version $version --@@ -328,17 +411,26 @@ -- (cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles" -- destdir=$kernel_headers_dir/usr/src/linux-headers-$version -- mkdir -p "$destdir" --+######################## headers patch --+ZACNI=$(pwd) --+cd $destdir --+patch -p1 < /tmp/headers-debian-byteshift.patch --+cd $ZACNI --+######################## headers patch -- (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be -- ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" -- rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" -- --+(cd "$destdir"; make M=scripts clean) --+ -- cat <> debian/control -- -- Package: $kernel_headers_packagename ---Provides: linux-headers, linux-headers-2.6 --+Provides: $kernel_headers_packagename -- Architecture: any --+Depends: make, gcc, libc6-dev, libssl-dev -- Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch} -- This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch} -- . --@@ -363,6 +457,16 @@ -- -- cat <> debian/control -- --+Package: $dtb_packagename --+Architecture: any --+Description: Linux DTB, version $version --+ This package contains device blobs from the Linux kernel, version $version. --+EOF --+ --+create_package "$dtb_packagename" "$dtb_dir" --+ --+cat <> debian/control --+ -- Package: $libc_headers_packagename -- Section: devel -- Provides: linux-kernel-headers --@@ -374,7 +478,7 @@ -- -- if [ "$ARCH" != "um" ]; then -- create_package "$kernel_headers_packagename" "$kernel_headers_dir" --- create_package "$libc_headers_packagename" "$libc_headers_dir" --+# create_package "$libc_headers_packagename" "$libc_headers_dir" -- fi -- -- create_package "$packagename" "$tmpdir" -diff --git a/patch/misc/general-packaging-4.9.y.patch b/patch/misc/general-packaging-4.9.y.patch -deleted file mode 100644 -index 1db057cc1..000000000 ---- a/patch/misc/general-packaging-4.9.y.patch -+++ /dev/null -@@ -1,199 +0,0 @@ --diff --git a/scripts/package/builddeb b/scripts/package/builddeb --index 0a2a7372..87edac65 100755 ----- a/scripts/package/builddeb --+++ b/scripts/package/builddeb --@@ -29,6 +29,28 @@ create_package() { -- # in case we are in a restrictive umask environment like 0077 -- chmod -R a+rX "$pdir" -- --+ # Create preinstall and post install script to remove dtb --+ if [[ "$1" == *dtb* ]]; then --+ echo "if [ -d /boot/dtb-$version ]; then mv /boot/dtb-$version /boot/dtb-$version.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /boot/dtb.old ]; then rm -rf /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /dtb ]; then mv /dtb /dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "if [ -d /boot/dtb ]; then mv /boot/dtb /boot/dtb.old; fi" >> $pdir/DEBIAN/preinst --+ echo "exit 0" >> $pdir/DEBIAN/preinst --+ chmod 775 $pdir/DEBIAN/preinst --+ # --+ echo "if [ -d /boot/dtb-$version.old ]; then rm -rf /boot/dtb-$version.old; fi" >> $pdir/DEBIAN/postinst --+ echo "ln -sf dtb-$version /boot/dtb > /dev/null 2>&1 || mv /boot/dtb-$version /boot/dtb" >> $pdir/DEBIAN/postinst --+ echo "exit 0" >> $pdir/DEBIAN/postinst --+ chmod 775 $pdir/DEBIAN/postinst --+ fi --+ --+ # Create postinstall script for headers --+ if [[ "$1" == *headers* ]]; then --+ echo "cd /usr/src/linux-headers-$version; echo \"Compiling headers - please wait ...\"; find -type f -exec touch {} +;yes "" | make oldconfig >/dev/null;make -j\$(grep -c 'processor' /proc/cpuinfo) -s scripts >/dev/null; make -s M=scripts/mod/ >/dev/null" >> $pdir/DEBIAN/postinst --+ echo "exit 0" >> $pdir/DEBIAN/postinst --+ chmod 775 $pdir/DEBIAN/postinst --+ fi --+ -- # Create the package -- dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch}" -p$pname -P"$pdir" -- dpkg --build "$pdir" .. --@@ -95,11 +117,13 @@ tmpdir="$objtree/debian/tmp" -- fwdir="$objtree/debian/fwtmp" -- kernel_headers_dir="$objtree/debian/hdrtmp" -- libc_headers_dir="$objtree/debian/headertmp" --+dtb_dir="$objtree/debian/dtbtmp" -- dbg_dir="$objtree/debian/dbgtmp" ---packagename=linux-image-$version ---fwpackagename=linux-firmware-image-$version ---kernel_headers_packagename=linux-headers-$version ---libc_headers_packagename=linux-libc-dev --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+fwpackagename=linux-firmware-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --+libc_headers_packagename=linux-libc-dev-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- debarch= -- forcearch= --@@ -126,7 +150,9 @@ esac -- BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)" -- -- # Setup the directory structure ---rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files --+rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir" $objtree/debian/files --+mkdir -m 755 -p "$dtb_dir/DEBIAN" --+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" -- mkdir -m 755 -p "$tmpdir/DEBIAN" -- mkdir -p "$tmpdir/lib" "$tmpdir/boot" -- mkdir -p "$fwdir/lib/firmware/$version/" --@@ -185,6 +211,11 @@ if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then -- fi -- fi -- --+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then --+ #mkdir -p "$tmpdir/boot/dtb" --+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --+fi --+ -- if [ "$ARCH" != "um" ]; then -- $MAKE headers_check KBUILD_SRC= -- $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr" --@@ -197,21 +228,23 @@ fi -- # so do we; recent versions of dracut and initramfs-tools will obey this. -- debhookdir=${KDEB_HOOKDIR:-/etc/kernel} -- if grep -q '^CONFIG_BLK_DEV_INITRD=y' $KCONFIG_CONFIG; then --- want_initrd=Yes --+ want_initrd=Yes -- else -- want_initrd=No -- fi -- for script in postinst postrm preinst prerm ; do -- mkdir -p "$tmpdir$debhookdir/$script.d" -- cat < "$tmpdir/DEBIAN/$script" ---#!/bin/sh --+#!/bin/bash -- -- set -e -- -- # Pass maintainer script parameters to hook scripts --+ -- export DEB_MAINT_PARAMS="\$*" -- -- # Tell initramfs builder whether it's wanted --+ -- export INITRD=$want_initrd -- -- test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d --@@ -220,6 +253,44 @@ EOF -- chmod 755 "$tmpdir/DEBIAN/$script" -- done -- --+## --+## Create sym link to kernel image --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst --+cat >> $tmpdir/DEBIAN/postinst < /dev/null 2>&1 || mv /$installed_image_path /boot/zImage --+touch /boot/.next --+exit 0 --+EOT --+## --+## FAT install workaround --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst --+cat >> $tmpdir/DEBIAN/preinst <> $tmpdir/DEBIAN/preinst --+ -- # Try to determine maintainer and email values -- if [ -n "$DEBEMAIL" ]; then -- email=$DEBEMAIL --@@ -337,17 +417,26 @@ if grep -q '^CONFIG_GCC_PLUGINS=y' $KCONFIG_CONFIG ; then -- fi -- destdir=$kernel_headers_dir/usr/src/linux-headers-$version -- mkdir -p "$destdir" --+######################## headers patch --+ZACNI=$(pwd) --+cd $destdir --+patch -p1 < /tmp/headers-debian-byteshift.patch --+cd $ZACNI --+######################## headers patch -- (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be -- ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" -- rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" -- --+(cd "$destdir"; make M=scripts clean) --+ -- cat <> debian/control -- -- Package: $kernel_headers_packagename ---Provides: linux-headers, linux-headers-2.6 --+Provides: $kernel_headers_packagename -- Architecture: any --+Depends: make, gcc, libc6-dev, libssl-dev -- Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch} -- This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch} -- . --@@ -372,6 +461,16 @@ fi -- -- cat <> debian/control -- --+Package: $dtb_packagename --+Architecture: any --+Description: Linux DTB, version $version --+ This package contains device blobs from the Linux kernel, version $version. --+EOF --+ --+create_package "$dtb_packagename" "$dtb_dir" --+ --+cat <> debian/control --+ -- Package: $libc_headers_packagename -- Section: devel -- Provides: $libc_headers_packagename --@@ -383,7 +482,7 @@ EOF -- -- if [ "$ARCH" != "um" ]; then -- create_package "$kernel_headers_packagename" "$kernel_headers_dir" --- create_package "$libc_headers_packagename" "$libc_headers_dir" --+# create_package "$libc_headers_packagename" "$libc_headers_dir" -- fi -- -- create_package "$packagename" "$tmpdir" -diff --git a/patch/misc/general-packaging-5.10.y.patch b/patch/misc/general-packaging-5.10.y.patch -deleted file mode 100644 -index 67f8d3595..000000000 ---- a/patch/misc/general-packaging-5.10.y.patch -+++ /dev/null -@@ -1,367 +0,0 @@ --diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile --index 5858d6e44..e81b8a6fc 100644 ----- a/arch/arm64/Makefile --+++ b/arch/arm64/Makefile --@@ -142,7 +142,7 @@ core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a -- -- # Default target when executing plain make -- boot := arch/arm64/boot ---KBUILD_IMAGE := $(boot)/Image.gz --+KBUILD_IMAGE := $(boot)/Image -- -- all: Image.gz -- --diff --git a/scripts/package/builddeb b/scripts/package/builddeb --index 1b11f8993..c21d931ea 100755 ----- a/scripts/package/builddeb --+++ b/scripts/package/builddeb --@@ -26,31 +26,62 @@ -- -- create_package() { -- local pname="$1" pdir="$2" --- local dpkg_deb_opts -- -- mkdir -m 755 -p "$pdir/DEBIAN" -- mkdir -p "$pdir/usr/share/doc/$pname" -- cp debian/copyright "$pdir/usr/share/doc/$pname/" -- cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian" --- gzip -n -9 "$pdir/usr/share/doc/$pname/changelog.Debian" --+ gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian" -- sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \ -- | xargs -r0 md5sum > DEBIAN/md5sums" -- -- # Fix ownership and permissions --- if [ "$DEB_RULES_REQUIRES_ROOT" = "no" ]; then --- dpkg_deb_opts="--root-owner-group" --- else --- chown -R root:root "$pdir" --- fi --+ chown -R root:root "$pdir" -- chmod -R go-w "$pdir" -- # in case we are in a restrictive umask environment like 0077 -- chmod -R a+rX "$pdir" --- # in case we build in a setuid/setgid directory --- chmod -R ug-s "$pdir" --+ --+ # Create preinstall and post install script to remove dtb --+ if [ "$3" = "dtb" ]; then --+ --+ cat >> $pdir/DEBIAN/preinst <> $pdir/DEBIAN/postinst < /dev/null || mv dtb-$version dtb --+exit 0 --+EOT --+ --+ chmod 775 $pdir/DEBIAN/preinst ; chmod 775 $pdir/DEBIAN/postinst --+ fi --+ --+ # Create postinst prerm scripts for headers --+ if [ "$3" = "headers" ]; then --+ --+cat >> $pdir/DEBIAN/postinst << EOT --+cd /usr/src/linux-headers-$version --+echo "Compiling headers - please wait ..." --+find -type f -exec touch {} + --+yes "" | make oldconfig >/dev/null --+make -j\$(grep -c 'processor' /proc/cpuinfo) -s scripts >/dev/null --+make -j\$(grep -c 'processor' /proc/cpuinfo) -s M=scripts/mod/ >/dev/null --+exit 0 --+EOT --+ --+cat >> $pdir/DEBIAN/prerm << EOT --+cd /usr/src/linux-headers-$version --+rm -rf scripts .config.old --+EOT --+ --+ chmod 775 $pdir/DEBIAN/postinst ; chmod 775 $pdir/DEBIAN/prerm --+ fi -- -- # Create the package -- dpkg-gencontrol -p$pname -P"$pdir" --- dpkg-deb $dpkg_deb_opts ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. --+ dpkg-deb ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. -- } -- -- deploy_kernel_headers () { --@@ -62,7 +92,7 @@ -- cd $srctree -- find . arch/$SRCARCH -maxdepth 1 -name Makefile\* -- find include scripts -type f -o -type l --- find arch/$SRCARCH -name Kbuild.platforms -o -name Platform --+ find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform -- find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f -- ) > debian/hdrsrcfiles -- --@@ -107,9 +137,15 @@ -- } -- -- version=$KERNELRELEASE ---tmpdir=debian/linux-image ---dbg_dir=debian/linux-image-dbg ---packagename=linux-image-$version --+tmpdir="$objtree/debian/tmp" --+kernel_headers_dir="$objtree/debian/hdrtmp" --+libc_headers_dir="$objtree/debian/headertmp" --+dbg_dir="$objtree/debian/dbgtmp" --+dtb_dir="$objtree/debian/dtbtmp" --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --+libc_headers_packagename=linux-libc-dev-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- -- if [ "$ARCH" = "um" ] ; then --@@ -120,6 +156,15 @@ -- # XXX: have each arch Makefile export a variable of the canonical image install -- # path instead -- case $ARCH in --+aarch64|arm64) --+ image_name=Image --+ installed_image_path="boot/vmlinuz-$version" --+ --+ ;; --+arm*) --+ image_name=zImage --+ installed_image_path="boot/vmlinuz-$version" --+ ;; -- um) -- installed_image_path="usr/bin/linux-$version" -- ;; --@@ -133,13 +178,17 @@ -- BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes) -- -- # Setup the directory structure ---rm -rf "$tmpdir" "$dbg_dir" debian/files --+rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir" $objtree/debian/files --+mkdir -m 755 -p "$dtb_dir/DEBIAN" --+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" -- mkdir -m 755 -p "$tmpdir/DEBIAN" -- mkdir -p "$tmpdir/lib" "$tmpdir/boot" --+mkdir -p "$kernel_headers_dir/lib/modules/$version/" -- ---# Install the kernel --+# Build and install the kernel -- if [ "$ARCH" = "um" ] ; then -- mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename" --+ $MAKE linux -- cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map" -- cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config" -- gzip "$tmpdir/usr/share/doc/$packagename/config" --@@ -183,6 +232,21 @@ -- fi -- fi -- --+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then --+ #mkdir -p "$tmpdir/boot/dtb" --+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --+fi --+ --+if [ "$ARCH" != "um" ]; then --+ $MAKE -f $srctree/Makefile headers --+ $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr" --+ # move asm headers to /usr/include//asm to match the structure --+ # used by Debian-based distros (to support multi-arch) --+ host_arch=$(dpkg-architecture -a$(cat debian/arch) -qDEB_HOST_MULTIARCH) --+ mkdir $libc_headers_dir/usr/include/$host_arch --+ mv $libc_headers_dir/usr/include/asm $libc_headers_dir/usr/include/$host_arch/ --+fi --+ -- # Install the maintainer scripts -- # Note: hook scripts under /etc/kernel are also executed by official Debian -- # kernel packages, as well as kernel packages built using make-kpkg. --@@ -192,7 +256,7 @@ -- for script in postinst postrm preinst prerm ; do -- mkdir -p "$tmpdir$debhookdir/$script.d" -- cat < "$tmpdir/DEBIAN/$script" ---#!/bin/sh --+#!/bin/bash -- -- set -e -- --@@ -208,14 +272,73 @@ -- chmod 755 "$tmpdir/DEBIAN/$script" -- done -- ---if [ "$ARCH" != "um" ]; then --- if is_enabled CONFIG_MODULES; then --- deploy_kernel_headers debian/linux-headers --- create_package linux-headers-$version debian/linux-headers --+## --+## Create sym link to kernel image --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst --+cat >> $tmpdir/DEBIAN/postinst < /dev/null || cp /$installed_image_path /boot/$image_name --+touch /boot/.next --+exit 0 --+EOT --+ --+## --+## FAT install workaround --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst --+cat >> $tmpdir/DEBIAN/preinst <> $tmpdir/DEBIAN/preinst --+ --+# Build kernel header package --+(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find arch/*/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find security/*/include -type f) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles" --+ldstemp=$(mktemp);cp scripts/module.lds $ldstemp --+(cd $objtree; make M=scripts clean;) --+if is_enabled CONFIG_STACK_VALIDATION; then --+ (cd $objtree; find tools/objtool -type f -executable) >> "$objtree/debian/hdrobjfiles" --+fi --+(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles" --+if is_enabled CONFIG_GCC_PLUGINS; then --+ (cd $objtree; find scripts/gcc-plugins -name \*.so -o -name gcc-common.h) >> "$objtree/debian/hdrobjfiles" --+fi --+destdir=$kernel_headers_dir/usr/src/linux-headers-$version --+mkdir -p "$destdir" --+(cd $destdir; patch -p1 < /tmp/headers-debian-byteshift.patch) --+(cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) --+(cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) --+(cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be --+mv ${ldstemp} $destdir/scripts/module.lds --+ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" --+rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" -- --- deploy_libc_headers debian/linux-libc-dev --- create_package linux-libc-dev debian/linux-libc-dev --+if [ "$ARCH" != "um" ]; then --+ create_package "$kernel_headers_packagename" "$kernel_headers_dir" "headers" --+ create_package "$dtb_packagename" "$dtb_dir" "dtb" -- fi -- -- create_package "$packagename" "$tmpdir" --diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian --index 60a2a63a5..7c6197efa 100755 ----- a/scripts/package/mkdebian --+++ b/scripts/package/mkdebian --@@ -94,16 +94,18 @@ else -- packageversion=$version-$revision -- fi -- sourcename=$KDEB_SOURCENAME --+packagename=linux-image-$BRANCH$LOCALVERSION --+kernel_headers_packagename=linux-headers-$BRANCH$LOCALVERSION --+dtb_packagename=linux-dtb-$BRANCH$LOCALVERSION --+dbg_packagename=$packagename-dbg --+debarch= --+image_name= --+set_debarch -- -- if [ "$ARCH" = "um" ] ; then --- packagename=user-mode-linux ---else --- packagename=linux-image --+ packagename=user-mode-linux-$version -- fi -- ---debarch= ---set_debarch --- -- email=${DEBEMAIL-$EMAIL} -- -- # use email string directly if it contains --@@ -174,16 +176,28 @@ Source: $sourcename -- Section: kernel -- Priority: optional -- Maintainer: $maintainer ---Rules-Requires-Root: no -- Build-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends -- Homepage: https://www.kernel.org/ -- ---Package: $packagename-$version --+Package: $packagename -- Architecture: $debarch -- Description: Linux kernel, version $version -- This package contains the Linux kernel, modules and corresponding other -- files, version: $version. -- --+Package: $dtb_packagename --+Architecture: $debarch --+Description: Linux DTB, version $version --+ This package contains device blobs from the Linux kernel, version $version --+ --+Package: $kernel_headers_packagename --+Architecture: $debarch --+Depends: make, gcc, libc6-dev, bison, flex, libssl-dev --+Description: Linux kernel headers for $version on $debarch --+ This package provides kernel header files for $version on $debarch --+ . --+ This is useful for people who need to build external modules --+ -- Package: linux-libc-dev -- Section: devel -- Provides: linux-kernel-headers --@@ -194,22 +208,10 @@ Description: Linux support headers for userspace development -- Multi-Arch: same -- EOF -- ---if is_enabled CONFIG_MODULES; then ---cat <> debian/control --- ---Package: linux-headers-$version ---Architecture: $debarch ---Description: Linux kernel headers for $version on $debarch --- This package provides kernel header files for $version on $debarch --- . --- This is useful for people who need to build external modules ---EOF ---fi --- -- if is_enabled CONFIG_DEBUG_INFO; then -- cat <> debian/control -- ---Package: linux-image-$version-dbg --+Package: $dbg_packagename -- Section: debug -- Architecture: $debarch -- Description: Linux kernel debugging symbols for $version --@@ -223,15 +225,11 @@ cat < debian/rules -- -- srctree ?= . -- ---build-indep: ---build-arch: --+build: -- \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ -- KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile -- ---build: build-arch --- ---binary-indep: ---binary-arch: build-arch --+binary-arch: -- \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ -- KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile intdeb-pkg -- -diff --git a/patch/misc/general-packaging-5.3.y.patch b/patch/misc/general-packaging-5.3.y.patch -deleted file mode 100644 -index 97c8f3c6d..000000000 ---- a/patch/misc/general-packaging-5.3.y.patch -+++ /dev/null -@@ -1,262 +0,0 @@ --From 87395a5fca108473ae5b4124fe1611d0493701ac Mon Sep 17 00:00:00 2001 --From: The-going <48602507+The-going@users.noreply.github.com> --Date: Tue, 10 Mar 2020 17:16:41 +0300 --Subject: [PATCH] general packaging 5.3.y -- ----- -- arch/arm64/Makefile | 2 +- -- scripts/package/builddeb | 116 ++++++++++++++++++++++++++++++++++++--- -- scripts/package/mkdebian | 15 ++++- -- 3 files changed, 121 insertions(+), 12 deletions(-) -- --diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile --index d227cf87c..2ccca81a1 100644 ----- a/arch/arm64/Makefile --+++ b/arch/arm64/Makefile --@@ -133,7 +133,7 @@ core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a -- -- # Default target when executing plain make -- boot := arch/arm64/boot ---KBUILD_IMAGE := $(boot)/Image.gz --+KBUILD_IMAGE := $(boot)/Image -- -- all: Image.gz -- --diff --git a/scripts/package/builddeb b/scripts/package/builddeb --index c4c580f54..3d10f513d 100755 ----- a/scripts/package/builddeb --+++ b/scripts/package/builddeb --@@ -41,9 +41,47 @@ create_package() { -- # in case we are in a restrictive umask environment like 0077 -- chmod -R a+rX "$pdir" -- --+ # Create preinstall and post install script to remove dtb --+ if [ "$3" = "dtb" ]; then --+ --+ cat >> $pdir/DEBIAN/preinst <> $pdir/DEBIAN/postinst < /dev/null || mv dtb-$version dtb --+exit 0 --+EOT --+ --+ chmod 775 $pdir/DEBIAN/preinst ; chmod 775 $pdir/DEBIAN/postinst --+ fi --+ --+ # Create postinst prerm scripts for headers --+ if [ "$3" = "headers" ]; then --+ --+cat >> $pdir/DEBIAN/postinst << EOT --+cd /usr/src/linux-headers-$version --+echo "Compiling headers - please wait ..." --+find -type f -exec touch {} + --+yes "" | make oldconfig >/dev/null --+make -j\$(grep -c 'processor' /proc/cpuinfo) -s scripts >/dev/null --+make -j\$(grep -c 'processor' /proc/cpuinfo) -s M=scripts/mod/ >/dev/null --+exit 0 --+EOT --+ --+cat >> $pdir/DEBIAN/prerm << EOT --+cd /usr/src/linux-headers-$version --+rm -rf scripts .config.old --+EOT --+ --+ chmod 775 $pdir/DEBIAN/postinst ; chmod 775 $pdir/DEBIAN/prerm --+ fi --+ -- # Create the package -- dpkg-gencontrol -p$pname -P"$pdir" --- dpkg --build "$pdir" .. --+ dpkg-deb ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. -- } -- -- version=$KERNELRELEASE --@@ -51,9 +89,11 @@ tmpdir="$objtree/debian/tmp" -- kernel_headers_dir="$objtree/debian/hdrtmp" -- libc_headers_dir="$objtree/debian/headertmp" -- dbg_dir="$objtree/debian/dbgtmp" ---packagename=linux-image-$version ---kernel_headers_packagename=linux-headers-$version ---libc_headers_packagename=linux-libc-dev --+dtb_dir="$objtree/debian/dtbtmp" --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --+libc_headers_packagename=linux-libc-dev-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- -- if [ "$ARCH" = "um" ] ; then --@@ -64,6 +104,15 @@ fi -- # XXX: have each arch Makefile export a variable of the canonical image install -- # path instead -- case $ARCH in --+aarch64|arm64) --+ image_name=Image --+ installed_image_path="boot/vmlinuz-$version" --+ --+ ;; --+arm*) --+ image_name=zImage --+ installed_image_path="boot/vmlinuz-$version" --+ ;; -- um) -- installed_image_path="usr/bin/linux-$version" -- ;; --@@ -77,7 +126,9 @@ esac -- BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes) -- -- # Setup the directory structure ---rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files --+rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir" $objtree/debian/files --+mkdir -m 755 -p "$dtb_dir/DEBIAN" --+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" -- mkdir -m 755 -p "$tmpdir/DEBIAN" -- mkdir -p "$tmpdir/lib" "$tmpdir/boot" -- mkdir -p "$kernel_headers_dir/lib/modules/$version/" --@@ -129,6 +180,11 @@ if is_enabled CONFIG_MODULES; then -- fi -- fi -- --+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then --+ #mkdir -p "$tmpdir/boot/dtb" --+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --+fi --+ -- if [ "$ARCH" != "um" ]; then -- $MAKE -f $srctree/Makefile headers -- $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr" --@@ -148,7 +204,7 @@ debhookdir=${KDEB_HOOKDIR:-/etc/kernel} -- for script in postinst postrm preinst prerm ; do -- mkdir -p "$tmpdir$debhookdir/$script.d" -- cat < "$tmpdir/DEBIAN/$script" ---#!/bin/sh --+#!/bin/bash -- -- set -e -- --@@ -164,9 +220,49 @@ EOF -- chmod 755 "$tmpdir/DEBIAN/$script" -- done -- --+## --+## Create sym link to kernel image --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst --+cat >> $tmpdir/DEBIAN/postinst <> $tmpdir/DEBIAN/preinst <> $tmpdir/DEBIAN/preinst --+ -- # Build kernel header package -- (cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find arch/*/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find security/*/include -type f) >> "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles" -- (cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles" -- if is_enabled CONFIG_STACK_VALIDATION; then --@@ -178,15 +274,19 @@ if is_enabled CONFIG_GCC_PLUGINS; then -- fi -- destdir=$kernel_headers_dir/usr/src/linux-headers-$version -- mkdir -p "$destdir" --+(cd $destdir; patch -p1 < /tmp/headers-debian-byteshift.patch) -- (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) -- (cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be -- ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" -- rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" -- --+(cd $destdir; make M=scripts clean) --+ -- if [ "$ARCH" != "um" ]; then --- create_package "$kernel_headers_packagename" "$kernel_headers_dir" --- create_package "$libc_headers_packagename" "$libc_headers_dir" --+ create_package "$kernel_headers_packagename" "$kernel_headers_dir" "headers" --+#UNCOMENT create_package "$libc_headers_packagename" "$libc_headers_dir" --+ create_package "$dtb_packagename" "$dtb_dir" "dtb" -- fi -- -- create_package "$packagename" "$tmpdir" --diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian --index 357dc56bc..602e709bc 100755 ----- a/scripts/package/mkdebian --+++ b/scripts/package/mkdebian --@@ -94,10 +94,13 @@ else -- packageversion=$version-$revision -- fi -- sourcename=$KDEB_SOURCENAME ---packagename=linux-image-$version ---kernel_headers_packagename=linux-headers-$version --+packagename=linux-image-$BRANCH$LOCALVERSION --+kernel_headers_packagename=linux-headers-$BRANCH$LOCALVERSION --+libc_headers_packagename=linux-libc-dev-$BRANCH$LOCALVERSION --+dtb_packagename=linux-dtb-$BRANCH$LOCALVERSION -- dbg_packagename=$packagename-dbg -- debarch= --+image_name= -- set_debarch -- -- if [ "$ARCH" = "um" ] ; then --@@ -185,12 +188,13 @@ Description: Linux kernel, version $version -- -- Package: $kernel_headers_packagename -- Architecture: $debarch --+Depends: make, gcc, libc6-dev, bison, flex, libssl-dev -- Description: Linux kernel headers for $version on $debarch -- This package provides kernel header files for $version on $debarch -- . -- This is useful for people who need to build external modules -- ---Package: linux-libc-dev --+Package: $libc_headers_packagename -- Section: devel -- Provides: linux-kernel-headers -- Architecture: $debarch --@@ -205,6 +209,11 @@ Architecture: $debarch -- Description: Linux kernel debugging symbols for $version -- This package will come in handy if you need to debug the kernel. It provides -- all the necessary debug symbols for the kernel and its modules. --+ --+Package: $dtb_packagename --+Architecture: $debarch --+Description: Linux DTB, version $version --+ This package contains device blobs from the Linux kernel, version $version -- EOF -- -- cat < debian/rules ---- --2.34.1 -- -diff --git a/patch/misc/general-packaging-5.6.y.patch b/patch/misc/general-packaging-5.6.y.patch -deleted file mode 100644 -index b1350ee43..000000000 ---- a/patch/misc/general-packaging-5.6.y.patch -+++ /dev/null -@@ -1,263 +0,0 @@ --diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile --index 5858d6e44..e81b8a6fc 100644 ----- a/arch/arm64/Makefile --+++ b/arch/arm64/Makefile --@@ -142,7 +142,7 @@ core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a -- -- # Default target when executing plain make -- boot := arch/arm64/boot ---KBUILD_IMAGE := $(boot)/Image.gz --+KBUILD_IMAGE := $(boot)/Image -- -- all: Image.gz -- --diff --git a/scripts/package/builddeb b/scripts/package/builddeb --index 6df3c9f..d33e1f3 100755 ----- a/scripts/package/builddeb --+++ b/scripts/package/builddeb --@@ -41,9 +41,47 @@ create_package() { -- # in case we are in a restrictive umask environment like 0077 -- chmod -R a+rX "$pdir" -- --+ # Create preinstall and post install script to remove dtb --+ if [ "$3" = "dtb" ]; then --+ --+ cat >> $pdir/DEBIAN/preinst <> $pdir/DEBIAN/postinst < /dev/null || mv dtb-$version dtb --+exit 0 --+EOT --+ --+ chmod 775 $pdir/DEBIAN/preinst ; chmod 775 $pdir/DEBIAN/postinst --+ fi --+ --+ # Create postinst prerm scripts for headers --+ if [ "$3" = "headers" ]; then --+ --+cat >> $pdir/DEBIAN/postinst << EOT --+cd /usr/src/linux-headers-$version --+echo "Compiling headers - please wait ..." --+yes "" | make oldconfig >/dev/null --+find -type f -exec touch {} + --+make -j\$(grep -c 'processor' /proc/cpuinfo) -s scripts >/dev/null --+make -j\$(grep -c 'processor' /proc/cpuinfo) -s M=scripts/mod/ >/dev/null --+exit 0 --+EOT --+ --+cat >> $pdir/DEBIAN/prerm << EOT --+cd /usr/src/linux-headers-$version --+rm -rf scripts .config.old --+EOT --+ --+ chmod 775 $pdir/DEBIAN/postinst ; chmod 775 $pdir/DEBIAN/prerm --+ fi --+ -- # Create the package --- dpkg-gencontrol -p$pname -P"$pdir" --- dpkg-deb ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. --+ dpkg-gencontrol -p$pname -P"$pdir" --+ dpkg-deb ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. -- } -- -- deploy_kernel_headers () { --@@ -100,9 +122,15 @@ deploy_libc_headers () { -- } -- -- version=$KERNELRELEASE ---tmpdir=debian/linux-image ---dbg_dir=debian/linux-image-dbg ---packagename=linux-image-$version --+tmpdir="$objtree/debian/tmp" --+kernel_headers_dir="$objtree/debian/hdrtmp" --+libc_headers_dir="$objtree/debian/headertmp" --+dbg_dir="$objtree/debian/dbgtmp" --+dtb_dir="$objtree/debian/dtbtmp" --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --+libc_headers_packagename=linux-libc-dev-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- -- if [ "$ARCH" = "um" ] ; then --@@ -113,6 +141,15 @@ fi -- # XXX: have each arch Makefile export a variable of the canonical image install -- # path instead -- case $ARCH in --+aarch64|arm64) --+ image_name=Image --+ installed_image_path="boot/vmlinuz-$version" --+ --+ ;; --+arm*) --+ image_name=zImage --+ installed_image_path="boot/vmlinuz-$version" --+ ;; -- um) -- installed_image_path="usr/bin/linux-$version" -- ;; --@@ -126,13 +163,17 @@ esac -- BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes) -- -- # Setup the directory structure ---rm -rf "$tmpdir" "$dbg_dir" debian/files --+rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir" $objtree/debian/files --+mkdir -m 755 -p "$dtb_dir/DEBIAN" --+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" -- mkdir -m 755 -p "$tmpdir/DEBIAN" -- mkdir -p "$tmpdir/lib" "$tmpdir/boot" --+mkdir -p "$kernel_headers_dir/lib/modules/$version/" -- ---# Install the kernel --+# Build and install the kernel -- if [ "$ARCH" = "um" ] ; then -- mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename" --+ $MAKE linux -- cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map" -- cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config" -- gzip "$tmpdir/usr/share/doc/$packagename/config" --@@ -176,6 +217,21 @@ if is_enabled CONFIG_MODULES; then -- fi -- fi -- --+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then --+ #mkdir -p "$tmpdir/boot/dtb" --+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --+fi --+ --+if [ "$ARCH" != "um" ]; then --+ $MAKE -f $srctree/Makefile headers --+ $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr" --+ # move asm headers to /usr/include//asm to match the structure --+ # used by Debian-based distros (to support multi-arch) --+ host_arch=$(dpkg-architecture -a$(cat debian/arch) -qDEB_HOST_MULTIARCH) --+ mkdir $libc_headers_dir/usr/include/$host_arch --+ mv $libc_headers_dir/usr/include/asm $libc_headers_dir/usr/include/$host_arch/ --+fi --+ -- # Install the maintainer scripts -- # Note: hook scripts under /etc/kernel are also executed by official Debian -- # kernel packages, as well as kernel packages built using make-kpkg. --@@ -185,7 +241,7 @@ debhookdir=${KDEB_HOOKDIR:-/etc/kernel} -- for script in postinst postrm preinst prerm ; do -- mkdir -p "$tmpdir$debhookdir/$script.d" -- cat < "$tmpdir/DEBIAN/$script" ---#!/bin/sh --+#!/bin/bash -- -- set -e -- --@@ -201,12 +257,72 @@ EOF -- chmod 755 "$tmpdir/DEBIAN/$script" -- done -- ---if [ "$ARCH" != "um" ]; then --- deploy_kernel_headers debian/linux-headers --- create_package linux-headers-$version debian/linux-headers --+## --+## Create sym link to kernel image --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst --+cat >> $tmpdir/DEBIAN/postinst < /dev/null || mv /$installed_image_path /boot/$image_name --+touch /boot/.next --+exit 0 --+EOT --+ --+## --+## FAT install workaround --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst --+cat >> $tmpdir/DEBIAN/preinst <> $tmpdir/DEBIAN/preinst --+ --+# Build kernel header package --+(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find arch/*/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find security/*/include -type f) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles" --+if is_enabled CONFIG_STACK_VALIDATION; then --+ (cd $objtree; find tools/objtool -type f -executable) >> "$objtree/debian/hdrobjfiles" --+fi --+(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles" --+if is_enabled CONFIG_GCC_PLUGINS; then --+ (cd $objtree; find scripts/gcc-plugins -name \*.so -o -name gcc-common.h) >> "$objtree/debian/hdrobjfiles" --+fi --+destdir=$kernel_headers_dir/usr/src/linux-headers-$version --+mkdir -p "$destdir" --+(cd $destdir; patch -p1 < /tmp/headers-debian-byteshift.patch) --+(cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) --+(cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) --+(cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be --+ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" --+rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" --+ --+(cd $destdir; make M=scripts clean) --+ --+if [ "$ARCH" != "um" ]; then --+ create_package "$kernel_headers_packagename" "$kernel_headers_dir" "headers" --+ create_package "$dtb_packagename" "$dtb_dir" "dtb" -- fi -- -- create_package "$packagename" "$tmpdir" ----- a/scripts/package/mkdebian --+++ b/scripts/package/mkdebian --@@ -94,10 +94,12 @@ else -- packageversion=$version-$revision -- fi -- sourcename=$KDEB_SOURCENAME ---packagename=linux-image-$version ---kernel_headers_packagename=linux-headers-$version --+packagename=linux-image-$BRANCH$LOCALVERSION --+kernel_headers_packagename=linux-headers-$BRANCH$LOCALVERSION --+dtb_packagename=linux-dtb-$BRANCH$LOCALVERSION -- dbg_packagename=$packagename-dbg -- debarch= --+image_name= -- set_debarch -- -- if [ "$ARCH" = "um" ] ; then --@@ -183,8 +185,14 @@ Description: Linux kernel, version $version -- This package contains the Linux kernel, modules and corresponding other -- files, version: $version. -- --+Package: $dtb_packagename --+Architecture: $debarch --+Description: Linux DTB, version $version --+ This package contains device blobs from the Linux kernel, version $version --+ -- Package: $kernel_headers_packagename -- Architecture: $debarch --+Depends: make, gcc, libc6-dev, bison, flex, libssl-dev -- Description: Linux kernel headers for $version on $debarch -- This package provides kernel header files for $version on $debarch -- . -diff --git a/patch/misc/general-packaging-5.8-9.y.patch b/patch/misc/general-packaging-5.8-9.y.patch -deleted file mode 100644 -index 0ed5ed3ee..000000000 ---- a/patch/misc/general-packaging-5.8-9.y.patch -+++ /dev/null -@@ -1,265 +0,0 @@ --diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile --index 5858d6e44..e81b8a6fc 100644 ----- a/arch/arm64/Makefile --+++ b/arch/arm64/Makefile --@@ -142,7 +142,7 @@ core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a -- -- # Default target when executing plain make -- boot := arch/arm64/boot ---KBUILD_IMAGE := $(boot)/Image.gz --+KBUILD_IMAGE := $(boot)/Image -- -- all: Image.gz -- --diff --git a/scripts/package/builddeb b/scripts/package/builddeb --index 6df3c9f..d33e1f3 100755 ----- a/scripts/package/builddeb --+++ b/scripts/package/builddeb --@@ -41,9 +41,47 @@ create_package() { -- # in case we are in a restrictive umask environment like 0077 -- chmod -R a+rX "$pdir" -- --+ # Create preinstall and post install script to remove dtb --+ if [ "$3" = "dtb" ]; then --+ --+ cat >> $pdir/DEBIAN/preinst <> $pdir/DEBIAN/postinst < /dev/null || mv dtb-$version dtb --+exit 0 --+EOT --+ --+ chmod 775 $pdir/DEBIAN/preinst ; chmod 775 $pdir/DEBIAN/postinst --+ fi --+ --+ # Create postinst prerm scripts for headers --+ if [ "$3" = "headers" ]; then --+ --+cat >> $pdir/DEBIAN/postinst << EOT --+cd /usr/src/linux-headers-$version --+echo "Compiling headers - please wait ..." --+find -type f -exec touch {} + --+yes "" | make oldconfig >/dev/null --+make -j\$(grep -c 'processor' /proc/cpuinfo) -s scripts >/dev/null --+make -j\$(grep -c 'processor' /proc/cpuinfo) -s M=scripts/mod/ >/dev/null --+exit 0 --+EOT --+ --+cat >> $pdir/DEBIAN/prerm << EOT --+cd /usr/src/linux-headers-$version --+rm -rf scripts .config.old --+EOT --+ --+ chmod 775 $pdir/DEBIAN/postinst ; chmod 775 $pdir/DEBIAN/prerm --+ fi --+ -- # Create the package --- dpkg-gencontrol -p$pname -P"$pdir" --- dpkg-deb ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. --+ dpkg-gencontrol -p$pname -P"$pdir" --+ dpkg-deb --build "$pdir" .. -- } -- -- deploy_kernel_headers () { --@@ -100,9 +122,15 @@ deploy_libc_headers () { -- } -- -- version=$KERNELRELEASE ---tmpdir=debian/linux-image ---dbg_dir=debian/linux-image-dbg ---packagename=linux-image-$version --+tmpdir="$objtree/debian/tmp" --+kernel_headers_dir="$objtree/debian/hdrtmp" --+libc_headers_dir="$objtree/debian/headertmp" --+dbg_dir="$objtree/debian/dbgtmp" --+dtb_dir="$objtree/debian/dtbtmp" --+packagename=linux-image-"$BRANCH$LOCALVERSION" --+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" --+libc_headers_packagename=linux-libc-dev-"$BRANCH$LOCALVERSION" -- dbg_packagename=$packagename-dbg -- -- if [ "$ARCH" = "um" ] ; then --@@ -113,6 +141,15 @@ fi -- # XXX: have each arch Makefile export a variable of the canonical image install -- # path instead -- case $ARCH in --+aarch64|arm64) --+ image_name=Image --+ installed_image_path="boot/vmlinuz-$version" --+ --+ ;; --+arm*) --+ image_name=zImage --+ installed_image_path="boot/vmlinuz-$version" --+ ;; -- um) -- installed_image_path="usr/bin/linux-$version" -- ;; --@@ -126,13 +163,17 @@ esac -- BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes) -- -- # Setup the directory structure ---rm -rf "$tmpdir" "$dbg_dir" debian/files --+rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" "$dtb_dir" $objtree/debian/files --+mkdir -m 755 -p "$dtb_dir/DEBIAN" --+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" -- mkdir -m 755 -p "$tmpdir/DEBIAN" -- mkdir -p "$tmpdir/lib" "$tmpdir/boot" --+mkdir -p "$kernel_headers_dir/lib/modules/$version/" -- ---# Install the kernel --+# Build and install the kernel -- if [ "$ARCH" = "um" ] ; then -- mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename" --+ $MAKE linux -- cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map" -- cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config" -- gzip "$tmpdir/usr/share/doc/$packagename/config" --@@ -176,6 +217,21 @@ if is_enabled CONFIG_MODULES; then -- fi -- fi -- --+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then --+ #mkdir -p "$tmpdir/boot/dtb" --+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --+fi --+ --+if [ "$ARCH" != "um" ]; then --+ $MAKE -f $srctree/Makefile headers --+ $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr" --+ # move asm headers to /usr/include//asm to match the structure --+ # used by Debian-based distros (to support multi-arch) --+ host_arch=$(dpkg-architecture -a$(cat debian/arch) -qDEB_HOST_MULTIARCH) --+ mkdir $libc_headers_dir/usr/include/$host_arch --+ mv $libc_headers_dir/usr/include/asm $libc_headers_dir/usr/include/$host_arch/ --+fi --+ -- # Install the maintainer scripts -- # Note: hook scripts under /etc/kernel are also executed by official Debian -- # kernel packages, as well as kernel packages built using make-kpkg. --@@ -185,7 +241,7 @@ debhookdir=${KDEB_HOOKDIR:-/etc/kernel} -- for script in postinst postrm preinst prerm ; do -- mkdir -p "$tmpdir$debhookdir/$script.d" -- cat < "$tmpdir/DEBIAN/$script" ---#!/bin/sh --+#!/bin/bash -- -- set -e -- --@@ -201,14 +257,72 @@ EOF -- chmod 755 "$tmpdir/DEBIAN/$script" -- done -- ---if [ "$ARCH" != "um" ]; then --- if is_enabled CONFIG_MODULES; then --- deploy_kernel_headers debian/linux-headers --- create_package linux-headers-$version debian/linux-headers --- fi --+## --+## Create sym link to kernel image --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst --+cat >> $tmpdir/DEBIAN/postinst < /dev/null || mv /$installed_image_path /boot/$image_name --+touch /boot/.next --+exit 0 --+EOT --+ --+## --+## FAT install workaround --+## --+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst --+cat >> $tmpdir/DEBIAN/preinst <> $tmpdir/DEBIAN/preinst --+ --+# Build kernel header package --+(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find arch/*/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find security/*/include -type f) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles" --+(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles" --+if is_enabled CONFIG_STACK_VALIDATION; then --+ (cd $objtree; find tools/objtool -type f -executable) >> "$objtree/debian/hdrobjfiles" --+fi --+(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles" --+if is_enabled CONFIG_GCC_PLUGINS; then --+ (cd $objtree; find scripts/gcc-plugins -name \*.so -o -name gcc-common.h) >> "$objtree/debian/hdrobjfiles" --+fi --+destdir=$kernel_headers_dir/usr/src/linux-headers-$version --+mkdir -p "$destdir" --+(cd $destdir; patch -p1 < /tmp/headers-debian-byteshift.patch) --+(cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) --+(cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) --+(cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be --+ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" --+rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" --+ --+(cd $destdir; make M=scripts clean) --+ --+if [ "$ARCH" != "um" ]; then --+ create_package "$kernel_headers_packagename" "$kernel_headers_dir" "headers" --+ create_package "$dtb_packagename" "$dtb_dir" "dtb" -- fi -- -- create_package "$packagename" "$tmpdir" ----- a/scripts/package/mkdebian --+++ b/scripts/package/mkdebian --@@ -94,10 +94,12 @@ else -- packageversion=$version-$revision -- fi -- sourcename=$KDEB_SOURCENAME ---packagename=linux-image-$version ---kernel_headers_packagename=linux-headers-$version --+packagename=linux-image-$BRANCH$LOCALVERSION --+kernel_headers_packagename=linux-headers-$BRANCH$LOCALVERSION --+dtb_packagename=linux-dtb-$BRANCH$LOCALVERSION -- dbg_packagename=$packagename-dbg -- debarch= --+image_name= -- set_debarch -- -- if [ "$ARCH" = "um" ] ; then --@@ -183,8 +185,14 @@ Description: Linux kernel, version $version -- This package contains the Linux kernel, modules and corresponding other -- files, version: $version. -- --+Package: $dtb_packagename --+Architecture: $debarch --+Description: Linux DTB, version $version --+ This package contains device blobs from the Linux kernel, version $version --+ -- Package: $kernel_headers_packagename -- Architecture: $debarch --+Depends: make, gcc, libc6-dev, bison, flex, libssl-dev -- Description: Linux kernel headers for $version on $debarch -- This package provides kernel header files for $version on $debarch -- . - -From 134bb92d95726ae56da8734bc9c39552c4821e4c Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 9 Mar 2022 23:43:39 +0100 -Subject: [PATCH] armbian-next: manual merge (12) of all changes between - revisions 34d4be6b7b346507af58133125cef0bc8ff5aef1 and - 5fe0f36aa832ac64d1db05adc4eb09a4df4b5509 - ---- - config/sources/families/rk35xx.conf | 2 ++ - lib/functions/configuration/main-config.sh | 8 ++++---- - lib/functions/general/git.sh | 2 +- - 3 files changed, 7 insertions(+), 5 deletions(-) - -diff --git a/config/sources/families/rk35xx.conf b/config/sources/families/rk35xx.conf -index 3744e6e5f..d0c5a293e 100644 ---- a/config/sources/families/rk35xx.conf -+++ b/config/sources/families/rk35xx.conf -@@ -23,11 +23,13 @@ case $BRANCH in - ;; - - # temporary until kernel 5.16 is well supported for rockchip64 -+ # it has to be its own family too - edge) - export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.16.y" - KERNELPATCHDIR='rk35xx-'$BRANCH - SKIP_BOOTSPLASH="yes" -+ LINUXFAMILY=rk35xx - LINUXCONFIG='linux-rk35xx-'$BRANCH - - ;; -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 5bf904f58..bea0c0efa 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -85,7 +85,7 @@ function do_main_configuration() { - china) - [[ -z $USE_MAINLINE_GOOGLE_MIRROR ]] && [[ -z $MAINLINE_MIRROR ]] && MAINLINE_MIRROR=tuna - [[ -z $USE_GITHUB_UBOOT_MIRROR ]] && [[ -z $UBOOT_MIRROR ]] && UBOOT_MIRROR=gitee -- [[ -z $GITHUB_MIRROR ]] && GITHUB_MIRROR=cnpmjs -+ [[ -z $GITHUB_MIRROR ]] && GITHUB_MIRROR=gitclone - [[ -z $DOWNLOAD_MIRROR ]] && DOWNLOAD_MIRROR=china - ;; - *) ;; -@@ -139,13 +139,13 @@ function do_main_configuration() { - - case $GITHUB_MIRROR in - fastgit) -- GITHUB_SOURCE='https://hub.fastgit.xyz/' -+ GITHUB_SOURCE='https://hub.fastgit.xyz' - ;; - gitclone) -- GITHUB_SOURCE='https://gitclone.com/github.com/' -+ GITHUB_SOURCE='https://gitclone.com/github.com' - ;; - *) -- GITHUB_SOURCE='https://github.com/' -+ GITHUB_SOURCE='https://github.com' - ;; - esac - -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 8330b3fe4..f096a39ac 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -49,7 +49,7 @@ fetch_from_repo() { - local git_work_dir - - # Set GitHub mirror before anything else touches $url -- url=${url//'https://github.com/'/$GITHUB_SOURCE} -+ url=${url//'https://github.com/'/$GITHUB_SOURCE'/'} - - # The 'offline' variable must always be set to 'true' or 'false' - local offline=false - -From 6058f580ae03c4c197ea60789128edca73046758 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 9 Mar 2022 18:41:30 +0100 -Subject: [PATCH] armbian-next: introduce `PRESERVE_WORKDIR=yes` for heavy - debugging - ---- - lib/functions/main/default-build.sh | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 2e40456c0..5933d9a27 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -185,7 +185,11 @@ function trap_handler_cleanup_workdir() { - display_alert "Cleanup WORKDIR: $WORKDIR" "trap_handler_cleanup_workdir" "cleanup" - unset TMPDIR - if [[ -d "${WORKDIR}" ]]; then -- display_alert "Cleaning up WORKDIR" "$(du -h -s "$WORKDIR")" "debug" -- rm -rf "${WORKDIR}" -+ if [[ "${PRESERVE_WORKDIR}" != "yes" ]]; then -+ display_alert "Cleaning up WORKDIR" "$(du -h -s "$WORKDIR")" "debug" -+ rm -rf "${WORKDIR}" -+ else -+ display_alert "Preserving WORKDIR due to PRESERVE_WORKDIR=yes" "$(du -h -s "$WORKDIR")" "warn" -+ fi - fi - } - -From 87c808d5d398dc51a1fabe97b732d94d3094b8b9 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 9 Mar 2022 14:39:21 +0100 -Subject: [PATCH] armbian-next: packaging linux-headers again - -- do NOT use any output from `make headers_install` - that's for libc headers -- grabs "headers" (and binary tools) directly from the kernel build tree, not install target -- does not produce headers if cross compiling, for now -- produces kernel-headers package for the architecture on which it was built -- doing a single make invocation with build and install for packaging - - using 'make all' in place of vmlinuz/bzImage/image/zImage ---- - lib/functions/compilation/kernel-debs.sh | 99 ++++++++++++++++++++++++++++++-- - lib/functions/compilation/kernel.sh | 82 ++++++++++++++++++++++++-- - 2 files changed, 169 insertions(+), 12 deletions(-) - -diff --git a/lib/functions/compilation/kernel-debs.sh b/lib/functions/compilation/kernel-debs.sh -index f02bb4dde..9d1b813d3 100644 ---- a/lib/functions/compilation/kernel-debs.sh -+++ b/lib/functions/compilation/kernel-debs.sh -@@ -48,8 +48,8 @@ function prepare_kernel_packaging_debs() { - declare package_version="${REVISION}" - - # show incoming tree -- display_alert "Kernel install dir" "incoming from KBUILD make" "debug" -- run_host_command_logged tree -C --du -h "${kernel_dest_install_dir}" "| grep --line-buffered -v -e '\.ko' -e '\.h' " -+ #display_alert "Kernel install dir" "incoming from KBUILD make" "debug" -+ #run_host_command_logged tree -C --du -h "${kernel_dest_install_dir}" "| grep --line-buffered -v -e '\.ko' -e '\.h' " - - display_alert "tmp_kernel_install_dirs INSTALL_PATH:" "${tmp_kernel_install_dirs[INSTALL_PATH]}" "debug" - display_alert "tmp_kernel_install_dirs INSTALL_MOD_PATH:" "${tmp_kernel_install_dirs[INSTALL_MOD_PATH]}" "debug" -@@ -64,8 +64,11 @@ function prepare_kernel_packaging_debs() { - create_kernel_deb "linux-dtb-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_dtb - fi - -- # @TODO: package headers. probably in 3 phases: common per-version (libc headers), common per-arch (arch-specific, with binary tools), and kernel specific (kernel-headers, no tools) -- -+ if dpkg-architecture -e "${ARCH}"; then -+ create_kernel_deb "linux-headers-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_headers -+ else -+ display_alert "Cross-compilation" "skip kernel-headers packaging" "warn" -+ fi - } - - function create_kernel_deb() { -@@ -120,8 +123,8 @@ function create_kernel_deb() { - display_alert "Unpacked ${package_name} tree" "${unpacked_size}" "debug" - - # Show it -- display_alert "Package dir" "for package ${package_name}" "debug" -- run_host_command_logged tree -C -h -d --du "${package_directory}" -+ #display_alert "Package dir" "for package ${package_name}" "debug" -+ #run_host_command_logged tree -C -h -d --du "${package_directory}" - - run_host_command_logged dpkg-deb ${DEB_COMPRESS:+-Z$DEB_COMPRESS} --build "${package_directory}" "${deb_output_dir}" # not KDEB compress, we're not under a Makefile - } -@@ -156,6 +159,9 @@ function kernel_package_callback_linux_image() { - run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_PATH]}" "${package_directory}/" # /boot stuff - run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_MOD_PATH]}/lib" "${package_directory}/" # so "lib" stuff sits at the root - -+ # Clean up symlinks in lib/modules/${kernel_version_family}/build and lib/modules/${kernel_version_family}/source; will be in the headers package -+ run_host_command_logged rm -v -f "${package_directory}/lib/modules/${kernel_version_family}/build" "${package_directory}/lib/modules/${kernel_version_family}/source" -+ - if [[ -d "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" ]]; then - # /usr/lib/linux-image-${kernel_version_family} is wanted by flash-kernel - # /lib/firmware/${kernel_version_family}/device-tree/ would also be acceptable -@@ -243,3 +249,84 @@ function kernel_package_callback_linux_dtb() { - ) - - } -+ -+function kernel_package_callback_linux_headers() { -+ display_alert "package_directory for headers" "${package_directory}" "debug" -+ -+ # targets. -+ local headers_target_dir="${package_directory}/usr/src/linux-headers-${kernel_version_family}" # headers/tools etc -+ local modules_target_dir="${package_directory}/lib/modules/${kernel_version_family}" # symlink to above later -+ -+ mkdir -p "${headers_target_dir}" "${modules_target_dir}" # create both dirs -+ run_host_command_logged ln -v -s "/usr/src/linux-headers-${kernel_version_family}" "${modules_target_dir}/build" # Symlink in modules so builds find the headers -+ run_host_command_logged cp -vp "${kernel_work_dir}"/.config "${headers_target_dir}"/.config # copy .config manually to be where it's expected to be -+ -+ # gather stuff from the linux source tree: ${kernel_work_dir} (NOT the make install destination) -+ # those can be source files or object (binary/compiled) stuff -+ # how to get SRCARCH? only from the makefile itself. ARCH=amd64 then SRCARCH=x86. How to we know? @TODO -+ local SRC_ARCH="${ARCH}" -+ [[ "${SRC_ARCH}" == "amd64" ]] && SRC_ARCH="x86" -+ -+ # Create a list of files to include, path-relative to the kernel tree -+ local temp_file_list="${WORKDIR}/tmp_file_list_${kernel_version_family}.kernel.headers" -+ -+ # Source stuff. No binaries. I think. -+ ( -+ cd "${kernel_work_dir}" || exit 2 -+ #echo "-- Sources: Makefiles and Kconfigs and perl" -+ find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl -+ -+ #echo "-- Sources: all arches include, include and scripts both files and symlinks " -+ find arch/*/include include scripts -type f -o -type l -+ -+ #echo "-- Sources: security include" -+ find security/*/include -type f -+ -+ #echo "-- Sources: arch ${SRC_ARCH} module lds or Kbuild platforms or Platform" -+ find "arch/${SRC_ARCH}" -name module.lds -o -name Kbuild.platforms -o -name Platform -+ -+ #echo "-- Sources: All files somewhere for some reason" -+ # shellcheck disable=SC2046 # I need to expand. Thanks. -+ find $(find "arch/${SRC_ARCH}" -name include -o -name scripts -type d) -type f -+ -+ if is_enabled CONFIG_STACK_VALIDATION; then -+ #echo "-- Binaries: objtool due to CONFIG_STACK_VALIDATION" -+ find tools/objtool -type f -executable -+ fi -+ -+ #echo "-- Binaries: Module.symvers and includes scripts FILES" -+ find arch/${SRC_ARCH}/include Module.symvers include scripts -type f -+ -+ if is_enabled CONFIG_GCC_PLUGINS; then -+ #echo "-- Binaries: gcc plugins due to CONFIG_GCC_PLUGINS" -+ find scripts/gcc-plugins -name \*.so -o -name gcc-common.h -+ fi -+ ) > "${temp_file_list}" -+ -+ # Now include/copy those, using tar as intermediary. Just like builddeb does it. -+ tar -c -f - -C "${kernel_work_dir}" -T "${temp_file_list}" | tar -xf - -C "${headers_target_dir}" -+ -+ # ${temp_file_list} is left at WORKDIR for later debugging, will be removed by WORKDIR cleanup trap -+ -+ # @TODO: maybe split all binaries to a separate package at this stage; that way cross compile can still produce -+ # @TODO: source-only headers, which can then be patched (byteshift?) and compiled client-side later -+ -+ # @TODO: cat "${temp_file_list}" | grep -v -e "\.h$" -e ".c$" -e "Makefile$" -e "Kconfig$" -e "Kbuild$" -e "\.cocci$" | xargs file | grep -v -e "ASCII" -e "script text" -+ -+ # Generate a control file -+ cat <<- CONTROL_FILE > "${package_DEBIAN_dir}/control" -+ Version: ${package_version} -+ Maintainer: ${MAINTAINER} <${MAINTAINERMAIL}> -+ Section: devel -+ Package: ${package_name} -+ Architecture: ${ARCH} -+ Provides: linux-headers, linux-headers-armbian, armbian-$BRANCH -+ Depends: make, gcc, libc6-dev, bison, flex, libssl-dev -+ Description: Linux kernel headers for ${kernel_version_family} -+ This package provides kernel header files for ${kernel_version_family} -+ . -+ This is useful for DKMS and building of external modules. -+ CONTROL_FILE -+ -+ # @TODO: preinst postinst? dependent on split, see todo above -+} -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 3a167b17a..b77739827 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -56,12 +56,30 @@ function compile_kernel() { - local toolchain - LOG_SECTION="kernel_config" do_with_logging do_with_hooks kernel_config - LOG_SECTION="kernel_package_source" do_with_logging do_with_hooks kernel_package_source -- LOG_SECTION="kernel_make_headers_dtbs_image_modules" do_with_logging do_with_hooks kernel_make_headers_dtbs_image_modules -- LOG_SECTION="kernel_package" do_with_logging do_with_hooks kernel_package -+ -+ # @TODO: might be interesting to package kernel-headers at this stage. -+ # @TODO: would allow us to have a "HEADERS_ONLY=yes" that can prepare arm64 headers on arm64 without building the whole kernel -+ # @TODO: also it makes sense, logically, to package headers after configuration, since that's all what's needed; it's the same -+ # @TODO: stage at which `dkms` would run (a configured, tool-built, kernel tree). -+ -+ # @TODO: might also be interesting to do the same for DTBs. -+ # @TODO: those get packaged twice (once in linux-dtb and once in linux-image) -+ # @TODO: but for the u-boot bootloader, only the linux-dtb is what matters. -+ # @TODO: some users/maintainers do a lot of their work on "DTS/DTB only changes", which do require the kernel tree -+ # @TODO: but the only testable artifacts are the .dtb themselves. Allow for a `DTB_ONLY=yes` might be useful. -+ -+ if [[ "a" == "b" ]]; then -+ # Do it individually -+ LOG_SECTION="kernel_make_headers_dtbs_image_modules" do_with_logging do_with_hooks kernel_make_headers_dtbs_image_modules -+ LOG_SECTION="kernel_package" do_with_logging do_with_hooks kernel_package -+ else -+ # Do it all together -+ LOG_SECTION="kernel_build_and_package" do_with_logging do_with_hooks kernel_build_and_package -+ fi -+ - display_alert "Done with" "kernel compile" "debug" - cd "${kernel_work_dir}/.." || exit - rm -f linux-firmware-image-*.deb # remove firmware image packages here - easier than patching ~40 packaging scripts at once -- #run_host_command_logged dpkg-deb --contents ./*.deb || true - rsync --remove-source-files -rq ./*.deb "${DEB_STORAGE}/" || exit_with_error "Failed moving kernel DEBs" - return 0 - } -@@ -188,6 +206,7 @@ function kernel_config() { - - # copy kernel config - local COPY_CONFIG_BACK_TO="" -+ - if [[ $KERNEL_KEEP_CONFIG == yes && -f "${DEST}"/config/$LINUXCONFIG.config ]]; then - display_alert "Using previous kernel config" "${DEST}/config/$LINUXCONFIG.config" "info" - cp -p "${DEST}/config/${LINUXCONFIG}.config" .config -@@ -223,6 +242,7 @@ function kernel_config() { - fi - - # hack for deb builder. To pack what's missing in headers pack. -+ # @TODO: only for legacy builds? - cp "${SRC}"/patch/misc/headers-debian-byteshift.patch /tmp # @TODO: ok, but why /tmp? It's leaking there. - - display_alert "Kernel configuration" "${LINUXCONFIG}" "info" -@@ -255,6 +275,13 @@ function kernel_config() { - fi - fi - -+ call_extension_method "custom_kernel_config_post_defconfig" <<- 'CUSTOM_KERNEL_CONFIG_POST_DEFCONFIG' -+ *Kernel .config is in place, already processed by Armbian* -+ Called after ${LINUXCONFIG}.config is put in place (.config). -+ After all olddefconfig any Kconfig make is called. -+ A good place to customize the .config last-minute. -+ CUSTOM_KERNEL_CONFIG_POST_DEFCONFIG -+ - # Restore the date of .config. Above delta is a pure function, theoretically. - set_files_modification_time "${kernel_config_mtime}" ".config" - } -@@ -338,9 +365,9 @@ function kernel_package() { - - # define dict with vars passed and target directories - declare -A kernel_install_dirs=( -- ["INSTALL_PATH"]="${kernel_dest_install_dir}/image/boot" # Used by `make install` -- ["INSTALL_MOD_PATH"]="${kernel_dest_install_dir}/modules" # Used by `make modules_install` -- ["INSTALL_HDR_PATH"]="${kernel_dest_install_dir}/headers" # Used by `make headers_install` -+ ["INSTALL_PATH"]="${kernel_dest_install_dir}/image/boot" # Used by `make install` -+ ["INSTALL_MOD_PATH"]="${kernel_dest_install_dir}/modules" # Used by `make modules_install` -+ ["INSTALL_HDR_PATH"]="${kernel_dest_install_dir}/libc_headers" # Used by `make headers_install` - ) - - local -a prepackage_targets=(install modules_install headers_install) -@@ -388,3 +415,46 @@ function kernel_package() { - - display_alert "Package building done" "${LINUXCONFIG} $kernel_packaging_target" "info" - } -+ -+function kernel_build_and_package() { -+ cd "${kernel_work_dir}" -+ -+ local -a build_targets=("all") # "All" builds the vmlinux/Image/Image.gz default for the ${ARCH} -+ declare kernel_dest_install_dir -+ kernel_dest_install_dir=$(mktemp -d "${WORKDIR}/kernel.temp.install.target.XXXXXXXXX") # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. -+ -+ # define dict with vars passed and target directories -+ declare -A kernel_install_dirs=( -+ ["INSTALL_PATH"]="${kernel_dest_install_dir}/image/boot" # Used by `make install` -+ ["INSTALL_MOD_PATH"]="${kernel_dest_install_dir}/modules" # Used by `make modules_install` -+ ["INSTALL_HDR_PATH"]="${kernel_dest_install_dir}/libc_headers" # Used by `make headers_install` -+ ) -+ -+ build_targets+=(install modules_install headers_install) -+ if [[ "${KERNEL_BUILD_DTBS:-yes}" == "yes" ]]; then -+ display_alert "Kernel build will produce DTBs!" "DTBs YES" "debug" -+ build_targets+=("dtbs_install") -+ kernel_install_dirs+=(["INSTALL_DTBS_PATH"]="${kernel_dest_install_dir}/dtbs") # Used by `make dtbs_install` -+ fi -+ -+ # loop over the keys above, get the value, create param value in array; also mkdir the dir -+ declare -a install_make_params_quoted -+ local dir_key -+ for dir_key in "${!kernel_install_dirs[@]}"; do -+ local dir="${kernel_install_dirs["${dir_key}"]}" -+ local value="${dir_key}=${dir}" -+ mkdir -p "${dir}" -+ display_alert "Adding kernel packaging param" "${value}" "debug" -+ install_make_params_quoted+=("${value}") -+ done -+ -+ display_alert "Building kernel" "${LINUXCONFIG} ${build_targets[*]}" "info" -+ fasthash_debug "build" -+ make_filter="| grep --line-buffered -v -e 'CC' -e 'LD' -e 'AR' -e 'INSTALL' -e 'SIGN' -e 'XZ' " \ -+ run_kernel_make_long_running "${install_make_params_quoted[@]@Q}" "${build_targets[@]}" -+ fasthash_debug "build" -+ -+ cd "${kernel_work_dir}" -+ prepare_kernel_packaging_debs "${kernel_work_dir}" "${kernel_dest_install_dir}" "${version}" kernel_install_dirs -+ display_alert "Package building done" "${LINUXCONFIG} $kernel_packaging_target" "info" -+} - -From 8cfda3dcc398e3abb11f05f76509b4a165e402d3 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 9 Mar 2022 13:20:05 +0100 -Subject: [PATCH] armbian-next: apt download-only retried 3 times before - installing main packages - ---- - lib/functions/logging/runners.sh | 4 ++++ - lib/functions/rootfs/create-cache.sh | 3 +++ - 2 files changed, 7 insertions(+) - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 0d0c887ed..a0f396cc7 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -3,6 +3,10 @@ function chroot_sdcard_apt_get_install() { - chroot_sdcard_apt_get --no-install-recommends install "$@" - } - -+function chroot_sdcard_apt_get_install_download_only() { -+ chroot_sdcard_apt_get --no-install-recommends --download-only install "$@" -+} -+ - function chroot_sdcard_apt_get() { - local -a apt_params=("-${APT_OPTS:-y}") - [[ $NO_APT_CACHER != yes ]] && apt_params+=( -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index eec9f2fa3..b833ae3c8 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -185,6 +185,9 @@ function create_new_rootfs_cache() { - # stage: install additional packages - display_alert "Installing the main packages for" "Armbian" "info" - export MSG_IF_ERROR="Installation of Armbian main packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed" -+ # First, try to download-only up to 3 times, to work around network/proxy problems. -+ chroot_sdcard_apt_get_install_download_only "$PACKAGE_MAIN_LIST" || chroot_sdcard_apt_get_install_download_only "$PACKAGE_MAIN_LIST" || chroot_sdcard_apt_get_install_download_only "$PACKAGE_MAIN_LIST" -+ # Now do the install. - chroot_sdcard_apt_get_install "$PACKAGE_MAIN_LIST" - - if [[ $BUILD_DESKTOP == "yes" ]]; then - -From 4b82345a588df2d9214b1ace097599ad42ee3463 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Tue, 8 Mar 2022 12:56:04 +0100 -Subject: [PATCH] armbian-next: fix `VER=` read from kernel-image package, also - add `linux` default - ---- - lib/functions/compilation/kernel-debs.sh | 1 + - lib/functions/rootfs/distro-agnostic.sh | 3 +++ - 2 files changed, 4 insertions(+) - -diff --git a/lib/functions/compilation/kernel-debs.sh b/lib/functions/compilation/kernel-debs.sh -index fe16d37af..f02bb4dde 100644 ---- a/lib/functions/compilation/kernel-debs.sh -+++ b/lib/functions/compilation/kernel-debs.sh -@@ -169,6 +169,7 @@ function kernel_package_callback_linux_image() { - cat <<- CONTROL_FILE > "${package_DEBIAN_dir}/control" - Package: ${package_name} - Version: ${package_version} -+ Source: linux-${kernel_version} - Architecture: ${ARCH} - Maintainer: ${MAINTAINER} <${MAINTAINERMAIL}> - Section: kernel -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index a22338da3..4f363a696 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -292,6 +292,9 @@ function install_distribution_agnostic() { - It is not too late to `unset KERNELSOURCE` here and avoid kernel install. - PRE_INSTALL_KERNEL_DEBS - -+ # default VER, will be parsed from Kernel version in the installed deb package. -+ VER="linux" -+ - # install kernel - [[ -n $KERNELSOURCE ]] && { - if [[ "${REPOSITORY_INSTALL}" != *kernel* ]]; then - -From 5d2a41313f02fd2e651c911984ae6b6f803154c7 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 7 Mar 2022 10:24:52 +0100 -Subject: [PATCH] armbian-next: some logging for atf compilation - ---- - lib/functions/compilation/atf.sh | 7 ++----- - 1 file changed, 2 insertions(+), 5 deletions(-) - -diff --git a/lib/functions/compilation/atf.sh b/lib/functions/compilation/atf.sh -index 7f20028da..b241b5dfa 100644 ---- a/lib/functions/compilation/atf.sh -+++ b/lib/functions/compilation/atf.sh -@@ -54,11 +54,8 @@ compile_atf() { - - # ENABLE_BACKTRACE="0" has been added to workaround a regression in ATF. - # Check: https://github.com/armbian/build/issues/1157 -- CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" \ -- make ENABLE_BACKTRACE="0" $target_make $CTHREADS \ -- CROSS_COMPILE="$CCACHE $ATF_COMPILER" 2>&1 || { # HANDLED SHORTCIRCUIT: direct command invocation; @TODO: replace with runner -- exit_with_error "ATF compilation failed" -- } -+ run_host_command_logged CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" \ -+ make ENABLE_BACKTRACE="0" $target_make "${CTHREADS}" "CROSS_COMPILE='$CCACHE $ATF_COMPILER'" - - [[ $(type -t atf_custom_postprocess) == function ]] && atf_custom_postprocess 2>&1 - - -From 779e9978e01f5d1706d85acc3f0182046cebcfbd Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 7 Mar 2022 10:09:29 +0100 -Subject: [PATCH] armbian-next: rewrite hostdeps as array, add armhf toolchains - ---- - lib/functions/general/host.sh | 59 +++++++++++++++++++++---------------------- - 1 file changed, 29 insertions(+), 30 deletions(-) - -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index 818541c6c..c2eb63578 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -57,44 +57,42 @@ prepare_host() { - - # packages list for host - # NOTE: please sync any changes here with the Dockerfile and Vagrantfile -- -- local hostdeps="acl aptly aria2 bc binfmt-support bison btrfs-progs \ -- build-essential ca-certificates ccache cpio cryptsetup curl \ -- debian-archive-keyring debian-keyring debootstrap device-tree-compiler \ -- dialog dirmngr dosfstools dwarves f2fs-tools fakeroot flex gawk \ -- gcc-arm-linux-gnueabihf gdisk gnupg1 gpg imagemagick jq kmod libbison-dev \ -- libc6-dev-armhf-cross libelf-dev libfdt-dev libfile-fcntllock-perl \ -- libfl-dev liblz4-tool libncurses-dev libpython2.7-dev libssl-dev \ -- libusb-1.0-0-dev linux-base locales lzop ncurses-base ncurses-term \ -- nfs-kernel-server ntpdate p7zip-full parted patchutils pigz pixz \ -- pkg-config pv python3-dev python3-distutils qemu-user-static rsync swig \ -- systemd-container u-boot-tools udev unzip uuid-dev wget whiptail zip \ -- zlib1g-dev file ccze" -+ declare -a host_dependencies=( -+ acl aptly aria2 bc binfmt-support bison btrfs-progs -+ build-essential ca-certificates ccache cpio cryptsetup curl -+ debian-archive-keyring debian-keyring debootstrap device-tree-compiler -+ dialog dirmngr dosfstools dwarves f2fs-tools fakeroot flex gawk -+ gcc-arm-linux-gnueabihf -+ gcc-arm-linux-gnueabi gcc-arm-none-eabi -+ gdisk gnupg1 gpg imagemagick jq kmod libbison-dev -+ libc6-dev-armhf-cross libelf-dev libfdt-dev libfile-fcntllock-perl -+ libfl-dev liblz4-tool libncurses-dev libpython2.7-dev libssl-dev -+ libusb-1.0-0-dev linux-base locales lzop ncurses-base ncurses-term -+ nfs-kernel-server ntpdate p7zip-full parted patchutils pigz pixz -+ pkg-config pv python3-dev python3-distutils qemu-user-static rsync swig -+ systemd-container u-boot-tools udev unzip uuid-dev wget whiptail zip -+ zlib1g-dev file ccze tree -+ ) - - if [[ $(dpkg --print-architecture) == amd64 ]]; then -- -- hostdeps+=" distcc lib32ncurses-dev lib32stdc++6 libc6-i386" -- grep -q i386 <(dpkg --print-foreign-architectures) || dpkg --add-architecture i386 -- -+ : -+ #host_dependencies+=(distcc lib32ncurses-dev lib32stdc++6 libc6-i386) -+ #grep -q i386 <(dpkg --print-foreign-architectures) || dpkg --add-architecture i386 # @TODO: WHY?! don't do this! we don't want 32-bit x86 ever - elif [[ $(dpkg --print-architecture) == arm64 ]]; then -- -- hostdeps+=" gcc-arm-linux-gnueabi gcc-arm-none-eabi libc6 libc6-amd64-cross qemu" -- -+ host_dependencies+=(libc6 libc6-amd64-cross qemu) # What? - else -- - display_alert "Please read documentation to set up proper compilation environment" - display_alert "https://www.armbian.com/using-armbian-tools/" -- exit_with_error "Running this tool on non x86_64 build host is not supported" -- -+ exit_with_error "Running this tool on non x86_64 or arm64 build host is not supported" - fi - - # Add support for Ubuntu 20.04, 21.04 and Mint 20.x - if [[ $HOSTRELEASE =~ ^(focal|impish|hirsute|ulyana|ulyssa|bullseye|uma)$ ]]; then -- hostdeps+=" python2 python3" -+ host_dependencies+=(python2 python3) - ln -fs /usr/bin/python2.7 /usr/bin/python2 - ln -fs /usr/bin/python2.7 /usr/bin/python - else -- hostdeps+=" python libpython-dev" -+ host_dependencies+=("python" "libpython-dev") - fi - - display_alert "Build host OS release" "${HOSTRELEASE:-(unknown)}" "info" -@@ -143,7 +141,7 @@ prepare_host() { - # warning: apt-cacher-ng will fail if installed and used both on host and in - # container/chroot environment with shared network - # set NO_APT_CACHER=yes to prevent installation errors in such case -- if [[ $NO_APT_CACHER != yes ]]; then hostdeps+=" apt-cacher-ng"; fi -+ if [[ $NO_APT_CACHER != yes ]]; then host_dependencies+=("apt-cacher-ng"); fi - - export EXTRA_BUILD_DEPS="" - call_extension_method "add_host_dependencies" <<- 'ADD_HOST_DEPENDENCIES' -@@ -151,18 +149,19 @@ prepare_host() { - you can add packages to install, space separated, to ${EXTRA_BUILD_DEPS} here. - ADD_HOST_DEPENDENCIES - -- if [ -n "${EXTRA_BUILD_DEPS}" ]; then hostdeps+=" ${EXTRA_BUILD_DEPS}"; fi -+ # shellcheck disable=SC2206 # I wanna expand. later will convert to proper array -+ if [ -n "${EXTRA_BUILD_DEPS}" ]; then host_dependencies+=(${EXTRA_BUILD_DEPS}); fi - - display_alert "Installing build dependencies" - # don't prompt for apt cacher selection - sudo echo "apt-cacher-ng apt-cacher-ng/tunnelenable boolean false" | sudo debconf-set-selections - -- # This handles the wanted list in $hostdeps, updates apt only if needed -- install_host_side_packages "$hostdeps" -+ # This handles the wanted list in $host_dependencies, updates apt only if needed -+ install_host_side_packages "${host_dependencies[@]}" - - update-ccache-symlinks - -- export FINAL_HOST_DEPS="$hostdeps ${EXTRA_BUILD_DEPS}" -+ export FINAL_HOST_DEPS="${host_dependencies[*]}" - call_extension_method "host_dependencies_ready" <<- 'HOST_DEPENDENCIES_READY' - *run after all host dependencies are installed* - At this point we can read `${FINAL_HOST_DEPS}`, but changing won't have any effect. - -From 3a8770b0a1e28eaa7009964d6ebc3ba494de8010 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 7 Mar 2022 06:20:17 +0100 -Subject: [PATCH] armbian-next: distro-agnostic: cleanups - ---- - lib/functions/rootfs/distro-agnostic.sh | 15 ++++----------- - 1 file changed, 4 insertions(+), 11 deletions(-) - -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 4188a6a48..a22338da3 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -435,15 +435,7 @@ function install_distribution_agnostic() { - echo "deb https://beta.armbian.com $RELEASE main ${RELEASE}-utils ${RELEASE}-desktop" \ - > "${SDCARD}"/etc/apt/sources.list.d/armbian.list - -- # Cosmetic fix [FAILED] Failed to start Set console font and keymap at first boot -- [[ -f "${SDCARD}"/etc/console-setup/cached_setup_font.sh ]] && -- sed -i "s/^printf '.*/printf '\\\033\%\%G'/g" "${SDCARD}"/etc/console-setup/cached_setup_font.sh -- [[ -f "${SDCARD}"/etc/console-setup/cached_setup_terminal.sh ]] && -- sed -i "s/^printf '.*/printf '\\\033\%\%G'/g" "${SDCARD}"/etc/console-setup/cached_setup_terminal.sh -- [[ -f "${SDCARD}"/etc/console-setup/cached_setup_keyboard.sh ]] && -- sed -i "s/-u/-x'/g" "${SDCARD}"/etc/console-setup/cached_setup_keyboard.sh -- -- # fix for https://bugs.launchpad.net/ubuntu/+source/blueman/+bug/1542723 -+ # fix for https://bugs.launchpad.net/ubuntu/+source/blueman/+bug/1542723 @TODO: from ubuntu 15. maybe gone? - chroot "${SDCARD}" /bin/bash -c "chown root:messagebus /usr/lib/dbus-1.0/dbus-daemon-launch-helper" - chroot "${SDCARD}" /bin/bash -c "chmod u+s /usr/lib/dbus-1.0/dbus-daemon-launch-helper" - -@@ -522,15 +514,16 @@ function install_distribution_agnostic() { - # configure network manager - sed "s/managed=\(.*\)/managed=true/g" -i "${SDCARD}"/etc/NetworkManager/NetworkManager.conf - -- # remove network manager defaults to handle eth by default -+ ## remove network manager defaults to handle eth by default @TODO: why? - rm -f "${SDCARD}"/usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf - - # most likely we don't need to wait for nm to get online - chroot_sdcard systemctl disable NetworkManager-wait-online.service - -- # Just regular DNS and maintain /etc/resolv.conf as a file -+ # Just regular DNS and maintain /etc/resolv.conf as a file @TODO: this does not apply as of impish at least - sed "/dns/d" -i "${SDCARD}"/etc/NetworkManager/NetworkManager.conf - sed "s/\[main\]/\[main\]\ndns=default\nrc-manager=file/g" -i "${SDCARD}"/etc/NetworkManager/NetworkManager.conf -+ - if [[ -n $NM_IGNORE_DEVICES ]]; then - mkdir -p "${SDCARD}"/etc/NetworkManager/conf.d/ - cat <<- EOF > "${SDCARD}"/etc/NetworkManager/conf.d/10-ignore-interfaces.conf - -From 4d47d22489538006f32464dc9a0058a77810536b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 5 Mar 2022 02:24:29 +0100 -Subject: [PATCH] armbian-next: armbianEnv hooks/debugs (bsp / image) - ---- - lib/functions/bsp/bsp-cli.sh | 6 +++++- - lib/functions/image/partitioning.sh | 20 +++++++++++++++----- - 2 files changed, 20 insertions(+), 6 deletions(-) - -diff --git a/lib/functions/bsp/bsp-cli.sh b/lib/functions/bsp/bsp-cli.sh -index ee557963c..5af25dd82 100644 ---- a/lib/functions/bsp/bsp-cli.sh -+++ b/lib/functions/bsp/bsp-cli.sh -@@ -18,7 +18,11 @@ create_board_package() { - local bootscript_dst=${BOOTSCRIPT##*:} - mkdir -p "${destination}"/usr/share/armbian/ - -- # create extlinux config file -+ display_alert "BOOTSCRIPT" "${BOOTSCRIPT}" "debug" -+ display_alert "bootscript_src" "${bootscript_src}" "debug" -+ display_alert "bootscript_dst" "${bootscript_dst}" "debug" -+ -+ # if not using extlinux, copy armbianEnv from template; prefer userpatches source - if [[ $SRC_EXTLINUX != yes ]]; then - if [ -f "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" ]; then - cp "${USERPATCHES_PATH}/bootscripts/${bootscript_src}" "${destination}/usr/share/armbian/${bootscript_dst}" -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index ef4714757..05b1492bc 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -297,13 +297,22 @@ prepare_partitions() { - - # stage: adjust boot script or boot environment - if [[ -f $SDCARD/boot/armbianEnv.txt ]]; then -+ display_alert "Found armbianEnv.txt" "${SDCARD}/boot/armbianEnv.txt" "debug" - if [[ $CRYPTROOT_ENABLE == yes ]]; then -- echo "rootdev=$rootdevice cryptdevice=UUID=$(blkid -s UUID -o value ${LOOP}p${rootpart}):$ROOT_MAPPER" >> $SDCARD/boot/armbianEnv.txt -+ echo "rootdev=$rootdevice cryptdevice=UUID=$(blkid -s UUID -o value ${LOOP}p${rootpart}):$ROOT_MAPPER" >> "${SDCARD}/boot/armbianEnv.txt" - else -- echo "rootdev=$rootfs" >> $SDCARD/boot/armbianEnv.txt -+ echo "rootdev=$rootfs" >> "${SDCARD}/boot/armbianEnv.txt" - fi -- echo "rootfstype=$ROOTFS_TYPE" >> $SDCARD/boot/armbianEnv.txt -- elif [[ $rootpart != 1 ]]; then -+ echo "rootfstype=$ROOTFS_TYPE" >> "${SDCARD}/boot/armbianEnv.txt" -+ -+ call_extension_method "image_specific_armbian_env_ready" <<- 'IMAGE_SPECIFIC_ARMBIAN_ENV_READY' -+ *during image build, armbianEnv.txt is ready for image-specific customization (not in BSP)* -+ You can write to `"${SDCARD}/boot/armbianEnv.txt"` here, it is guaranteed to exist. -+ IMAGE_SPECIFIC_ARMBIAN_ENV_READY -+ -+ elif -+ [[ $rootpart != 1 ]] -+ then - local bootscript_dst=${BOOTSCRIPT##*:} - sed -i 's/mmcblk0p1/mmcblk0p2/' $SDCARD/boot/$bootscript_dst - sed -i -e "s/rootfstype=ext4/rootfstype=$ROOTFS_TYPE/" \ -@@ -312,6 +321,7 @@ prepare_partitions() { - - # if we have boot.ini = remove armbianEnv.txt and add UUID there if enabled - if [[ -f $SDCARD/boot/boot.ini ]]; then -+ display_alert "Found boot.ini" "${SDCARD}/boot/boot.ini" "debug" - sed -i -e "s/rootfstype \"ext4\"/rootfstype \"$ROOTFS_TYPE\"/" $SDCARD/boot/boot.ini - if [[ $CRYPTROOT_ENABLE == yes ]]; then - local rootpart="UUID=$(blkid -s UUID -o value ${LOOP}p${rootpart})" -@@ -319,7 +329,7 @@ prepare_partitions() { - else - sed -i 's/^setenv rootdev .*/setenv rootdev "'$rootfs'"/' $SDCARD/boot/boot.ini - fi -- if [[ $LINUXFAMILY != meson64 ]]; then -+ if [[ $LINUXFAMILY != meson64 ]]; then # @TODO: why only for meson64? - [[ -f $SDCARD/boot/armbianEnv.txt ]] && rm $SDCARD/boot/armbianEnv.txt - fi - fi - -From 1afd681bab297b9441fe9e65104ba52d1a3d96ce Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 4 Mar 2022 04:16:50 +0100 -Subject: [PATCH] armbian-next: rpi: completely remove dtb hacks, allowing - flash-kernel to work again - ---- - config/sources/families/bcm2711.conf | 17 +---------------- - 1 file changed, 1 insertion(+), 16 deletions(-) - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index 8a4eb060d..12ba2caae 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -49,27 +49,12 @@ pre_initramfs_flash_kernel__write_raspi_cmdline() { - - pre_flash_kernel__symlink_dtb_and_kernel() { - if [[ "${RASPI_DISTRO_KERNEL}" != "yes" ]]; then # and firmware. -- display_alert "Preparing DTBs and Kernel..." "bcm2711" "info" -- mkdir -p "${MOUNT}"/etc/flash-kernel/dtbs -- -+ display_alert "Configuring flash-kernel DB..." "bcm2711" "info" - cat <<- EOD >> "${MOUNT}"/etc/flash-kernel/db - # Armbian kernels don't have a 'flavour'. Ignore flavors for all rpi revisions. - Machine: Raspberry Pi * - Kernel-Flavors: any - EOD -- -- ## @TODO: rpardini: a horrible hack. I'll sort this out together with overlays, later. -- local oneDTB dtbBase -- for oneDTB in "${MOUNT}"/boot/dtb/broadcom/*.dtb; do -- dtbBase=$(basename "${oneDTB}") -- cp "${MOUNT}"/boot/dtb/broadcom/"${dtbBase}" "${MOUNT}"/etc/flash-kernel/dtbs/"${dtbBase}" -- done -- -- rm -rf "${MOUNT}"/boot/dtb* || true -- -- # @TODO: rpardini: packaging could maybe already use the correct names? I can't figure out how. -- ln -s ./Image "${MOUNT}"/boot/vmlinuz -- ln -s ./Image "${MOUNT}"/boot/vmlinuz- - fi - } - - -From 33beb042960cbf7ab66271a44b53b79dafa01642 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 4 Mar 2022 01:09:55 +0100 -Subject: [PATCH] armbian-next: refactor new kernel packaging; add linux-dtb - package back in finally, upgrades untested - ---- - lib/functions/compilation/kernel-debs.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/functions/compilation/kernel-debs.sh b/lib/functions/compilation/kernel-debs.sh -index e4c78c73c..fe16d37af 100644 ---- a/lib/functions/compilation/kernel-debs.sh -+++ b/lib/functions/compilation/kernel-debs.sh -@@ -212,7 +212,7 @@ function kernel_package_callback_linux_image() { - function kernel_package_callback_linux_dtb() { - display_alert "package_directory" "${package_directory}" "debug" - -- mkdir -p "${package_directory}/boot/dtb-${kernel_version_family}" -+ mkdir -p "${package_directory}/boot/" - run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" "${package_directory}/boot/dtb-${kernel_version_family}" - - # Generate a control file - -From 5cd4b7a471267aaf8a1336629a65a6df4b81b087 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 3 Mar 2022 23:31:08 +0100 -Subject: [PATCH] armbian-next: refactor new kernel packaging; extract hook - helper, fix kernel symlink - ---- - lib/functions/compilation/kernel-debs.sh | 97 +++++++++++++++++--------------- - 1 file changed, 53 insertions(+), 44 deletions(-) - -diff --git a/lib/functions/compilation/kernel-debs.sh b/lib/functions/compilation/kernel-debs.sh -index c8a3e0377..e4c78c73c 100644 ---- a/lib/functions/compilation/kernel-debs.sh -+++ b/lib/functions/compilation/kernel-debs.sh -@@ -126,6 +126,27 @@ function create_kernel_deb() { - run_host_command_logged dpkg-deb ${DEB_COMPRESS:+-Z$DEB_COMPRESS} --build "${package_directory}" "${deb_output_dir}" # not KDEB compress, we're not under a Makefile - } - -+function kernel_package_hook_helper() { -+ declare script="${1}" -+ declare contents="${2}" -+ -+ cat >> "${package_DEBIAN_dir}/${script}" <<- EOT -+ #!/bin/bash -+ echo "Armbian ${package_name} for ${kernel_version_family}: ${script} starting." -+ set -e # Error control -+ set -x # Debugging -+ -+ $(cat "${contents}") -+ -+ echo "Armbian ${package_name} for ${kernel_version_family}: ${script} finishing." -+ true -+ EOT -+ chmod 775 "${package_DEBIAN_dir}/${script}" -+ -+ display_alert "Hook debug" "${script} for ${package_name}" "debug" -+ run_host_command_logged cat "${package_DEBIAN_dir}/${script}" -+} -+ - function kernel_package_callback_linux_image() { - display_alert "package_directory" "${package_directory}" "debug" - -@@ -165,33 +186,27 @@ function kernel_package_callback_linux_image() { - declare debian_kernel_hook_dir="/etc/kernel" - for script in "postinst" "postrm" "preinst" "prerm"; do - mkdir -p "${package_directory}${debian_kernel_hook_dir}/${script}.d" # create kernel hook dir, make sure. -- cat <<- KERNEL_HOOK_DELEGATION > "${package_DEBIAN_dir}/${script}" -- #!/bin/bash -- set -e -- set -x -- -- # Pass maintainer script parameters to hook scripts -- export DEB_MAINT_PARAMS="\$*" -- -- # Tell initramfs builder whether it's wanted -- export INITRD=$(if_enabled_echo CONFIG_BLK_DEV_INITRD Yes No) - -- test -d ${debian_kernel_hook_dir}/${script}.d && run-parts --arg="${kernel_version_family}" --arg="/${installed_image_path}" ${debian_kernel_hook_dir}/${script}.d -- -- true -- KERNEL_HOOK_DELEGATION -- chmod 755 "${package_DEBIAN_dir}/${script}" -+ kernel_package_hook_helper "${script}" <( -+ cat <<- KERNEL_HOOK_DELEGATION -+ export DEB_MAINT_PARAMS="\$*" # Pass maintainer script parameters to hook scripts -+ export INITRD=$(if_enabled_echo CONFIG_BLK_DEV_INITRD Yes No) # Tell initramfs builder whether it's wanted -+ # Run the same hooks Debian/Ubuntu would for their kernel packages. -+ test -d ${debian_kernel_hook_dir}/${script}.d && run-parts --arg="${kernel_version_family}" --arg="/${installed_image_path}" ${debian_kernel_hook_dir}/${script}.d -+ KERNEL_HOOK_DELEGATION -+ -+ # @TODO: only if u-boot, only for postinst. Gotta find a hook scheme for these... -+ if [[ "${script}" == "postinst" ]]; then -+ if [[ "yes" == "yes" ]]; then -+ cat <<- HOOK_FOR_LINK_TO_LAST_INSTALLED_KERNEL -+ echo "Armbian: update last-installed kernel symlink..." -+ ln -sf $(basename "${installed_image_path}") /boot/$image_name || mv /${installed_image_path} /boot/${image_name} -+ touch /boot/.next -+ HOOK_FOR_LINK_TO_LAST_INSTALLED_KERNEL -+ fi -+ fi -+ ) - done -- -- # @TODO: only if u-boot -- if [[ "yes" == "yes" ]]; then -- cat <<- HOOK_FOR_LINK_TO_LAST_INSTALLED_KERNEL >> "${package_DEBIAN_dir}/postinst" -- echo "Armbian: update last-installed kernel symlink..." -- ln -sf $(basename "${installed_image_path}") /boot/$image_name || mv /${installed_image_path} /boot/${image_name} -- touch /boot/.next -- HOOK_FOR_LINK_TO_LAST_INSTALLED_KERNEL -- fi -- - } - - function kernel_package_callback_linux_dtb() { -@@ -212,24 +227,18 @@ function kernel_package_callback_linux_dtb() { - This package contains device blobs from the Linux kernel, version ${kernel_version_family} - CONTROL_FILE - -- cat >> "${package_DEBIAN_dir}/preinst" <<- EOT -- #!/bin/bash -- set -e -- set -x -- rm -rf /boot/dtb -- rm -rf /boot/dtb-${kernel_version_family} -- exit 0 -- EOT -- chmod 775 "${package_DEBIAN_dir}/preinst" -- -- cat >> "${package_DEBIAN_dir}/postinst" <<- EOT -- #!/bin/bash -- set -e -- set -x -- cd /boot -- ln -sfT dtb-${kernel_version_family} dtb || mv dtb-${kernel_version_family} dtb -- exit 0 -- EOT -- chmod 775 "${package_DEBIAN_dir}/postinst" -+ kernel_package_hook_helper "preinst" <( -+ cat <<- EOT -+ rm -rf /boot/dtb -+ rm -rf /boot/dtb-${kernel_version_family} -+ EOT -+ ) -+ -+ kernel_package_hook_helper "postinst" <( -+ cat <<- EOT -+ cd /boot -+ ln -sfT dtb-${kernel_version_family} dtb || mv dtb-${kernel_version_family} dtb -+ EOT -+ ) - - } - -From c2259116c1728595802cf29aae7f29098a4a5c99 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 3 Mar 2022 21:49:24 +0100 -Subject: [PATCH] armbian-next: refactor new kernel packaging; add linux-dtb - package back in finally, all hooks untested - ---- - lib/functions/compilation/kernel-debs.sh | 199 ++++++++++++++++++++++--------- - lib/functions/compilation/kernel.sh | 4 +- - 2 files changed, 142 insertions(+), 61 deletions(-) - -diff --git a/lib/functions/compilation/kernel-debs.sh b/lib/functions/compilation/kernel-debs.sh -index 26a9bc3cd..c8a3e0377 100644 ---- a/lib/functions/compilation/kernel-debs.sh -+++ b/lib/functions/compilation/kernel-debs.sh -@@ -38,23 +38,51 @@ if_enabled_echo() { - - function prepare_kernel_packaging_debs() { - declare kernel_work_dir="${1}" -- declare kernel_version="${2}" -- declare -n tmp_kernel_install_dirs="${3}" # nameref to declare -n kernel_install_dirs dictionary -- declare kernel_package_dir -- -- kernel_package_dir=$(mktemp -d "${WORKDIR}/kernel.image.package.XXXXXXXXX") # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. -- display_alert "kernel_package_dir" "${kernel_package_dir}" "debug" -+ declare kernel_dest_install_dir="${2}" -+ declare kernel_version="${3}" -+ declare -n tmp_kernel_install_dirs="${4}" # nameref to declare -n kernel_install_dirs dictionary -+ declare debs_target_dir="${kernel_work_dir}/.." - - # Some variables and settings used throughout the script - declare kernel_version_family="${kernel_version}-${LINUXFAMILY}" -- declare packageversion="${REVISION}" -- declare linux_image_package_name="linux-image-${BRANCH}-${LINUXFAMILY}" -+ declare package_version="${REVISION}" -+ -+ # show incoming tree -+ display_alert "Kernel install dir" "incoming from KBUILD make" "debug" -+ run_host_command_logged tree -C --du -h "${kernel_dest_install_dir}" "| grep --line-buffered -v -e '\.ko' -e '\.h' " -+ -+ display_alert "tmp_kernel_install_dirs INSTALL_PATH:" "${tmp_kernel_install_dirs[INSTALL_PATH]}" "debug" -+ display_alert "tmp_kernel_install_dirs INSTALL_MOD_PATH:" "${tmp_kernel_install_dirs[INSTALL_MOD_PATH]}" "debug" -+ display_alert "tmp_kernel_install_dirs INSTALL_HDR_PATH:" "${tmp_kernel_install_dirs[INSTALL_HDR_PATH]}" "debug" -+ display_alert "tmp_kernel_install_dirs INSTALL_DTBS_PATH:" "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" "debug" -+ -+ # package the linux-image (image, modules, dtbs (if present)) -+ create_kernel_deb "linux-image-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_image -+ -+ # if dtbs present, package those too separately, for u-boot usage. -+ if [[ -d "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" ]]; then -+ create_kernel_deb "linux-dtb-${BRANCH}-${LINUXFAMILY}" "${debs_target_dir}" kernel_package_callback_linux_dtb -+ fi -+ -+ # @TODO: package headers. probably in 3 phases: common per-version (libc headers), common per-arch (arch-specific, with binary tools), and kernel specific (kernel-headers, no tools) -+ -+} -+ -+function create_kernel_deb() { -+ declare package_name="${1}" -+ declare deb_output_dir="${2}" -+ declare callback_function="${3}" - -- mkdir -p "${kernel_package_dir}/DEBIAN" -+ declare package_directory -+ package_directory=$(mktemp -d "${WORKDIR}/${package_name}.XXXXXXXXX") # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. -+ display_alert "package_directory" "${package_directory}" "debug" -+ -+ declare package_DEBIAN_dir="${package_directory}/DEBIAN" # DEBIAN dir -+ mkdir -p "${package_DEBIAN_dir}" # maintainer scripts et al - - # Generate copyright file -- mkdir -p "${kernel_package_dir}/usr/share/doc/${linux_image_package_name}" -- cat <<- EOF > "${kernel_package_dir}/usr/share/doc/${linux_image_package_name}/copyright" -+ mkdir -p "${package_directory}/usr/share/doc/${package_name}" -+ cat <<- COPYRIGHT > "${package_directory}/usr/share/doc/${package_name}/copyright" - This is a packaged Armbian patched version of the Linux kernel. - - The sources may be found at most Linux archive sites, including: -@@ -71,12 +99,55 @@ function prepare_kernel_packaging_debs() { - - On Debian GNU/Linux systems, the complete text of the GNU General Public - License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. -- EOF -+ COPYRIGHT -+ -+ # Run the callback. -+ display_alert "Running callback" "callback: ${callback_function}" "debug" -+ "${callback_function}" "${@}" -+ -+ run_host_command_logged chown -R root:root "${package_directory}" # Fix ownership and permissions -+ run_host_command_logged chmod -R go-w "${package_directory}" # Fix ownership and permissions -+ run_host_command_logged chmod -R a+rX "${package_directory}" # in case we are in a restrictive umask environment like 0077 -+ run_host_command_logged chmod -R ug-s "${package_directory}" # in case we build in a setuid/setgid directory -+ -+ cd "${package_directory}" || exit_with_error "major failure 774 for ${package_name}" -+ -+ # create md5sums file -+ sh -c "cd '${package_directory}'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums" -+ -+ declare unpacked_size -+ unpacked_size="$(du -h -s "${package_directory}" | awk '{print $1}')" -+ display_alert "Unpacked ${package_name} tree" "${unpacked_size}" "debug" -+ -+ # Show it -+ display_alert "Package dir" "for package ${package_name}" "debug" -+ run_host_command_logged tree -C -h -d --du "${package_directory}" -+ -+ run_host_command_logged dpkg-deb ${DEB_COMPRESS:+-Z$DEB_COMPRESS} --build "${package_directory}" "${deb_output_dir}" # not KDEB compress, we're not under a Makefile -+} -+ -+function kernel_package_callback_linux_image() { -+ display_alert "package_directory" "${package_directory}" "debug" -+ -+ declare installed_image_path="boot/vmlinuz-${kernel_version_family}" # using old mkdebian terminology here. -+ declare image_name="Image" # for arm64. or, "zImage" for arm, or "vmlinuz" for others. Why? See where u-boot puts them. -+ -+ run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_PATH]}" "${package_directory}/" # /boot stuff -+ run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_MOD_PATH]}/lib" "${package_directory}/" # so "lib" stuff sits at the root -+ -+ if [[ -d "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" ]]; then -+ # /usr/lib/linux-image-${kernel_version_family} is wanted by flash-kernel -+ # /lib/firmware/${kernel_version_family}/device-tree/ would also be acceptable -+ -+ display_alert "DTBs present on kernel output" "DTBs ${package_name}: /usr/lib/linux-image-${kernel_version_family}" "debug" -+ mkdir -p "${package_directory}/usr/lib" -+ run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" "${package_directory}/usr/lib/linux-image-${kernel_version_family}" -+ fi - - # Generate a control file -- cat <<- EOF > "${kernel_package_dir}/DEBIAN/control" -- Package: ${linux_image_package_name} -- Version: ${packageversion} -+ cat <<- CONTROL_FILE > "${package_DEBIAN_dir}/control" -+ Package: ${package_name} -+ Version: ${package_version} - Architecture: ${ARCH} - Maintainer: ${MAINTAINER} <${MAINTAINERMAIL}> - Section: kernel -@@ -84,20 +155,20 @@ function prepare_kernel_packaging_debs() { - Description: Linux kernel, armbian version $kernel_version_family $BRANCH - This package contains the Linux kernel, modules and corresponding other - files, kernel_version_family: $kernel_version_family. -- EOF -+ CONTROL_FILE - - # Install the maintainer scripts - # Note: hook scripts under /etc/kernel are also executed by official Debian - # kernel packages, as well as kernel packages built using make-kpkg. - # make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and - # so do we; recent versions of dracut and initramfs-tools will obey this. -- declare debhookdir="/etc/kernel" -- for script in postinst postrm preinst prerm; do -- mkdir -p "${kernel_package_dir}${debhookdir}/${script}.d" -- cat <<- EOF > "${kernel_package_dir}/DEBIAN/${script}" -+ declare debian_kernel_hook_dir="/etc/kernel" -+ for script in "postinst" "postrm" "preinst" "prerm"; do -+ mkdir -p "${package_directory}${debian_kernel_hook_dir}/${script}.d" # create kernel hook dir, make sure. -+ cat <<- KERNEL_HOOK_DELEGATION > "${package_DEBIAN_dir}/${script}" - #!/bin/bash -- set -x - set -e -+ set -x - - # Pass maintainer script parameters to hook scripts - export DEB_MAINT_PARAMS="\$*" -@@ -105,50 +176,60 @@ function prepare_kernel_packaging_debs() { - # Tell initramfs builder whether it's wanted - export INITRD=$(if_enabled_echo CONFIG_BLK_DEV_INITRD Yes No) - -- test -d $debhookdir/$script.d && run-parts --arg="$kernel_version_family" --arg="/$installed_image_path" $debhookdir/$script.d -- exit 0 -- EOF -- chmod 755 "${kernel_package_dir}/DEBIAN/${script}" -- done -- -- display_alert "tmp_kernel_install_dirs INSTALL_PATH:" "${tmp_kernel_install_dirs[INSTALL_PATH]}" "debug" -- display_alert "tmp_kernel_install_dirs INSTALL_MOD_PATH:" "${tmp_kernel_install_dirs[INSTALL_MOD_PATH]}" "debug" -- display_alert "tmp_kernel_install_dirs INSTALL_HDR_PATH:" "${tmp_kernel_install_dirs[INSTALL_HDR_PATH]}" "debug" -- -- display_alert "Kernel install dir" "tree 1" "debug" -- run_host_command_logged tree -C -h --du -d -L 3 "${tmp_kernel_install_dirs[INSTALL_PATH]}/../.." -+ test -d ${debian_kernel_hook_dir}/${script}.d && run-parts --arg="${kernel_version_family}" --arg="/${installed_image_path}" ${debian_kernel_hook_dir}/${script}.d - -- run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_PATH]}" "${kernel_package_dir}/" # /boot stuff -- run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_MOD_PATH]}/lib" "${kernel_package_dir}/" # so "lib" stuff sits at the root -- -- if [[ -d "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" ]]; then -- display_alert "tmp_kernel_install_dirs INSTALL_DTBS_PATH:" "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" "debug" -- display_alert "Kernel build will produce DTBs package!" "DTBs YES PACKAGE" "debug" -+ true -+ KERNEL_HOOK_DELEGATION -+ chmod 755 "${package_DEBIAN_dir}/${script}" -+ done - -- # /usr/lib/linux-image-${kernel_version_family} is wanted by flash-kernel -- # /lib/firmware/${kernel_version_family}/device-tree/ would also be acceptable -- mkdir -p "${kernel_package_dir}/usr/lib" -- run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" "${kernel_package_dir}/usr/lib/linux-image-${kernel_version_family}" -+ # @TODO: only if u-boot -+ if [[ "yes" == "yes" ]]; then -+ cat <<- HOOK_FOR_LINK_TO_LAST_INSTALLED_KERNEL >> "${package_DEBIAN_dir}/postinst" -+ echo "Armbian: update last-installed kernel symlink..." -+ ln -sf $(basename "${installed_image_path}") /boot/$image_name || mv /${installed_image_path} /boot/${image_name} -+ touch /boot/.next -+ HOOK_FOR_LINK_TO_LAST_INSTALLED_KERNEL - fi - -- run_host_command_logged chown -R root:root "${kernel_package_dir}" # Fix ownership and permissions -- run_host_command_logged chmod -R go-w "${kernel_package_dir}" # Fix ownership and permissions -- run_host_command_logged chmod -R a+rX "${kernel_package_dir}" # in case we are in a restrictive umask environment like 0077 -- run_host_command_logged chmod -R ug-s "${kernel_package_dir}" # in case we build in a setuid/setgid directory -- -- cd "${kernel_package_dir}" || exit_with_error "major failure 774" -- -- # create md5sums file. needed? @TODO: convert to subshell? -- sh -c "cd '${kernel_package_dir}'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums" -+} - -- declare unpacked_size -- unpacked_size="$(du -h -s "${kernel_package_dir}" | awk '{print $1}')" -- display_alert "Unpacked linux-kernel image" "${unpacked_size}" "debug" -+function kernel_package_callback_linux_dtb() { -+ display_alert "package_directory" "${package_directory}" "debug" - -- # Show it -- display_alert "Package dir" "tree 2" "debug" -- run_host_command_logged tree -C -h --du -d -L 3 "${kernel_package_dir}" -+ mkdir -p "${package_directory}/boot/dtb-${kernel_version_family}" -+ run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" "${package_directory}/boot/dtb-${kernel_version_family}" - -- run_host_command_logged dpkg-deb ${DEB_COMPRESS:+-Z$DEB_COMPRESS} --build "${kernel_package_dir}" "${kernel_work_dir}/.." # not KDEB compress, we're not under a Makefile -+ # Generate a control file -+ cat <<- CONTROL_FILE > "${package_DEBIAN_dir}/control" -+ Version: ${package_version} -+ Maintainer: ${MAINTAINER} <${MAINTAINERMAIL}> -+ Section: kernel -+ Package: ${package_name} -+ Architecture: ${ARCH} -+ Provides: linux-dtb, linux-dtb-armbian, armbian-$BRANCH -+ Description: Armbian Linux DTB, version ${kernel_version_family} $BRANCH -+ This package contains device blobs from the Linux kernel, version ${kernel_version_family} -+ CONTROL_FILE -+ -+ cat >> "${package_DEBIAN_dir}/preinst" <<- EOT -+ #!/bin/bash -+ set -e -+ set -x -+ rm -rf /boot/dtb -+ rm -rf /boot/dtb-${kernel_version_family} -+ exit 0 -+ EOT -+ chmod 775 "${package_DEBIAN_dir}/preinst" -+ -+ cat >> "${package_DEBIAN_dir}/postinst" <<- EOT -+ #!/bin/bash -+ set -e -+ set -x -+ cd /boot -+ ln -sfT dtb-${kernel_version_family} dtb || mv dtb-${kernel_version_family} dtb -+ exit 0 -+ EOT -+ chmod 775 "${package_DEBIAN_dir}/postinst" - - } -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index e663e0265..3a167b17a 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -339,8 +339,8 @@ function kernel_package() { - # define dict with vars passed and target directories - declare -A kernel_install_dirs=( - ["INSTALL_PATH"]="${kernel_dest_install_dir}/image/boot" # Used by `make install` -- ["INSTALL_HDR_PATH"]="${kernel_dest_install_dir}/headers" # Used by `make headers_install` - ["INSTALL_MOD_PATH"]="${kernel_dest_install_dir}/modules" # Used by `make modules_install` -+ ["INSTALL_HDR_PATH"]="${kernel_dest_install_dir}/headers" # Used by `make headers_install` - ) - - local -a prepackage_targets=(install modules_install headers_install) -@@ -371,7 +371,7 @@ function kernel_package() { - fasthash_debug "post-prepackage" - - cd "${kernel_work_dir}" -- prepare_kernel_packaging_debs "${kernel_work_dir}" "${version}" kernel_install_dirs -+ prepare_kernel_packaging_debs "${kernel_work_dir}" "${kernel_dest_install_dir}" "${version}" kernel_install_dirs - - ### # produce deb packages: image, headers, firmware, dtb - ### # This mostly only does - -From 7cd425e1c3c2efa14c7fb7a13a9b24f9bb5cfc38 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 2 Mar 2022 20:31:44 +0100 -Subject: [PATCH] flash-kernel: fix short-circuits as last statement in - functions - ---- - extensions/flash-kernel.sh | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/extensions/flash-kernel.sh b/extensions/flash-kernel.sh -index 847eb37b7..ab5d308d8 100644 ---- a/extensions/flash-kernel.sh -+++ b/extensions/flash-kernel.sh -@@ -50,6 +50,8 @@ function post_install_kernel_debs__install_kernel_and_flash_packages() { - - # Remove fake /sys/firmware (/efi) directory - rm -rf "${SDCARD}"/sys/firmware -+ -+ return 0 # prevent future shortcircuits exiting with error - } - - # @TODO: extract u-boot into an extension, so that core bsps don't have this stuff in there to begin with. -@@ -64,6 +66,7 @@ post_family_tweaks_bsp__remove_uboot_flash_kernel() { - pre_umount_final_image__remove_uboot_initramfs_hook_flash_kernel() { - # even if BSP still contained this (cached .deb), make sure by removing from ${MOUNT} - [[ -f "$MOUNT"/etc/initramfs/post-update.d/99-uboot ]] && rm -v "$MOUNT"/etc/initramfs/post-update.d/99-uboot -+ return 0 # shortcircuit above - } - - function pre_update_initramfs__setup_flash_kernel() { - -From b459fb3af894ae4315e8416fee62d77c2a1a191b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 2 Mar 2022 13:28:37 +0100 -Subject: [PATCH] armbian-next: do not force `SHOW_LOG=yes` if `CI=true`; let's - _trust_ logging and error handling works - ---- - compile.sh | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/compile.sh b/compile.sh -index 0c35c5fd6..2bc765f9f 100755 ---- a/compile.sh -+++ b/compile.sh -@@ -36,10 +36,6 @@ if [[ ! -f "${SRC}"/lib/single.sh ]]; then - exit 255 - fi - --# Most CI runners, GitHub Actions included, pass env var "CI=true". In this case, force full logging. --if [[ "${CI}" == "true" ]]; then -- export SHOW_LOG=yes --fi - - # shellcheck source=lib/single.sh - source "${SRC}"/lib/single.sh - -From a0ed264825785655fba53d67de525ddebbb48090 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 2 Mar 2022 13:26:56 +0100 -Subject: [PATCH] armbian-next: back out of setting mtime to the revision time - during git checkout. - -- of course this causes huge recompiles when wanted revision moves forward ---- - lib/functions/general/git.sh | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index c4477ca0a..8330b3fe4 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -171,9 +171,9 @@ fetch_from_repo() { - regular_git clean -q -d -f # Files that are not tracked by git and were added when the patch was applied must be removed. - - # set the checkout date on all the versioned files. -- git ls-tree -r -z --name-only "${checkout_from}" | xargs -0 -- touch -m -t "${checked_out_revision_mtime:0:12}.${checked_out_revision_mtime:12}" -- -- fasthash_debug "after setting checkout time for $dir $ref_name" #yeah -+ # @TODO: this is contentious. disable for now. patches will still use the mininum date set by checked_out_revision_mtime above -+ #git ls-tree -r -z --name-only "${checkout_from}" | xargs -0 -- touch -m -t "${checked_out_revision_mtime:0:12}.${checked_out_revision_mtime:12}" -+ #fasthash_debug "after setting checkout time for $dir $ref_name" #yeah - - if [[ -f .gitmodules ]]; then - display_alert "Updating submodules" "" "ext" - -From 4d1d62558c4cf4f670fae821f7629a01a1f2c35e Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 2 Mar 2022 13:16:04 +0100 -Subject: [PATCH] armbian-next: sync 'config' dir from master revision - ed589b248aef675cb5e845fcb55c12dfbcc5e925 - -- this is _also_ getting out of hand... gotta merge soon ---- - config/boards/rpi4b.wip | 16 +++++++++++++++- - config/boards/uefi-arm64.conf | 2 +- - config/boards/uefi-x86.conf | 2 +- - config/sources/families/bcm2711.conf | 2 +- - config/sources/families/include/meson64_common.inc | 2 +- - config/sources/families/include/rockchip64_common.inc | 10 +++++----- - config/sources/families/include/uefi_common.inc | 2 +- - config/sources/families/jetson-nano.conf | 6 +----- - config/sources/families/media.conf | 2 +- - 9 files changed, 27 insertions(+), 17 deletions(-) - -diff --git a/config/boards/rpi4b.wip b/config/boards/rpi4b.wip -index c78b14060..3c1926821 100644 ---- a/config/boards/rpi4b.wip -+++ b/config/boards/rpi4b.wip -@@ -2,7 +2,7 @@ - export BOARD_NAME="Raspberry Pi 4" - export BOARDFAMILY="bcm2711" - export KERNEL_TARGET="legacy,current,edge" --export FK__MACHINE_MODEL="Raspberry Pi 4 Model B" # this is passed to flash-kernel. -+export FK__MACHINE_MODEL="Raspberry Pi 4 Model B" # flash kernel (FK) configuration - export ASOUND_STATE="asound.state.rpi" - - # configure stuff at the appropriate time in flash-kernel -@@ -12,6 +12,8 @@ pre_initramfs_flash_kernel__write_raspi_config() { - cat <<- EOD > "${FIRMWARE_DIR}/config.txt" - [pi4] - max_framebuffers=2 -+ over_voltage=2 -+ arm_freq=1800 - - [all] - kernel=vmlinuz -@@ -20,10 +22,22 @@ pre_initramfs_flash_kernel__write_raspi_config() { - disable_overscan=1 - hdmi_drive=2 - arm_64bit=1 -+ disable_splash=1 -+ -+ # enable audio (loads snd_bcm2835) -+ dtparam=audio=on - - # bootloader logs to serial, second stage - # enable_uart=1 - -+ # overclock. requires decent thermals. COMMENT OUT IF DON'T USE A GREAT COOLER OR HEATSINK. -+ # over_voltage=6 -+ # arm_freq=2000 -+ -+ # uncomment to disable wifi or bt. -+ #dtoverlay=disable-wifi -+ #dtoverlay=disable-bt -+ - # gpu and 3d stuff. - gpu_mem=256 - dtoverlay=vc4-fkms-v3d -diff --git a/config/boards/uefi-arm64.conf b/config/boards/uefi-arm64.conf -index 8f5e201f7..3da87e459 100644 ---- a/config/boards/uefi-arm64.conf -+++ b/config/boards/uefi-arm64.conf -@@ -1,4 +1,4 @@ - # aarch64 via UEFI for all UEFI-enabled boards - export BOARD_NAME="UEFI arm64" - export BOARDFAMILY="uefi-arm64" --export KERNEL_TARGET="legacy,current,edge" -+export KERNEL_TARGET="current,edge" -diff --git a/config/boards/uefi-x86.conf b/config/boards/uefi-x86.conf -index 7ff375bb8..0188da545 100644 ---- a/config/boards/uefi-x86.conf -+++ b/config/boards/uefi-x86.conf -@@ -1,4 +1,4 @@ - # x86_64 via UEFI/BIOS for all boards - export BOARD_NAME="UEFI x86" - export BOARDFAMILY="uefi-x86" --export KERNEL_TARGET="legacy,current,edge" -+export KERNEL_TARGET="current,edge" -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index a5a0bff7f..8a4eb060d 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -12,7 +12,7 @@ export GOVERNOR=ondemand - - case "${BRANCH}" in - -- legacy | ddk) -+ ddk) - export RASPI_DISTRO_KERNEL=yes # This will cause board to include distro's prebuilt kernel, not from source - ;; - -diff --git a/config/sources/families/include/meson64_common.inc b/config/sources/families/include/meson64_common.inc -index ea4363e81..e3fc577e9 100644 ---- a/config/sources/families/include/meson64_common.inc -+++ b/config/sources/families/include/meson64_common.inc -@@ -270,7 +270,7 @@ family_tweaks_bsp() { - EndSection - EOF - ;; -- "odroidn2" | "odroidc4" | "khadas-vim2" | "odroidhc4" | "khadas-vim3" | "khadas-vim3l" | "radxa-zero") -+ "odroidn2" | "odroidc4" | "khadas-vim2" | "odroidhc4" | "khadas-vim3" | "khadas-vim3l" | "radxa-zero" | "radxa-zero2") - cat <<- EOF > "$destination"/etc/X11/xorg.conf - Section "Device" - Identifier "DRM Graphics Acclerated" -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index 815e87b26..eb5ab78b2 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -90,8 +90,8 @@ case $BRANCH in - - current) - -- export KERNEL_MAJOR_MINOR="5.10" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.10.y" -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.15.y" - KERNELPATCHDIR='rockchip64-'$BRANCH - LINUXFAMILY=rockchip64 - LINUXCONFIG='linux-rockchip64-'$BRANCH -@@ -100,8 +100,8 @@ case $BRANCH in - edge) - - KERNELPATCHDIR='rockchip64-'$BRANCH -- export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. -- KERNELBRANCH="branch:linux-5.15.y" -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.16.y" - LINUXFAMILY=rockchip64 - LINUXCONFIG='linux-rockchip64-'$BRANCH - -@@ -234,7 +234,7 @@ family_tweaks() { - - chroot $SDCARD /bin/bash -c "systemctl --no-reload enable z28pro-bluetooth.service >/dev/null 2>&1" - -- elif [[ $BOARD == nanopi-r2s || $BOARD == nanopi-r2c || $BOARD == orangepi-r1plus ]]; then -+ elif [[ $BOARD == nanopi-r2s || $BOARD == nanopi-r2c || $BOARD == orangepi-r1plus || $BOARD == orangepi-r1plus-lts ]]; then - - # rename USB based network to lan0 - mkdir -p $SDCARD/etc/udev/rules.d/ -diff --git a/config/sources/families/include/uefi_common.inc b/config/sources/families/include/uefi_common.inc -index b362bcba0..175fcae2f 100644 ---- a/config/sources/families/include/uefi_common.inc -+++ b/config/sources/families/include/uefi_common.inc -@@ -5,7 +5,7 @@ export UEFI_GRUB_TIMEOUT=${UEFI_GRUB_TIMEOUT:-3} # Default 3-seconds timeout for - export BOARD_FIRMWARE_INSTALL="-full" # Install full firmware for UEFI boards - case "${BRANCH}" in - -- legacy | ddk) -+ ddk) - # This will force `unset KERNELSOURCE` later; no kernel will be built. - # Instead, the distro's default linux-generic kernel will be installed. - export DISTRO_GENERIC_KERNEL=yes -diff --git a/config/sources/families/jetson-nano.conf b/config/sources/families/jetson-nano.conf -index 77b83e479..9001baf0b 100644 ---- a/config/sources/families/jetson-nano.conf -+++ b/config/sources/families/jetson-nano.conf -@@ -31,7 +31,7 @@ case $BRANCH in - ;; - - edge) -- SKIP_BOOTSPLASH="yes" -+ #SKIP_BOOTSPLASH="yes" - export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.16.y" - KERNELPATCHDIR='media-'$BRANCH -@@ -42,10 +42,6 @@ case $BRANCH in - - esac - --write_uboot_platform() { -- dd if=$1/u-boot.bin of=$2 bs=32k seek=1 status=noxfer > /dev/null 2>&1 --} -- - family_tweaks() { - - install -m 755 $SRC/packages/blobs/jetson/jetson.sh $SDCARD/etc/initramfs-tools/hooks/jetson.sh -diff --git a/config/sources/families/media.conf b/config/sources/families/media.conf -index 07529a634..cf1a5603b 100644 ---- a/config/sources/families/media.conf -+++ b/config/sources/families/media.conf -@@ -39,7 +39,7 @@ case $BRANCH in - ;; - - edge) -- SKIP_BOOTSPLASH="yes" -+ #SKIP_BOOTSPLASH="yes" - export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.16.y" - KERNELPATCHDIR='media-'$BRANCH - -From b4c137bdb097e7cbba7bfc22795fa1223ea2bc7d Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 2 Mar 2022 12:57:31 +0100 -Subject: [PATCH] armbian-next: sync 'packages' dir from master revision - ed589b248aef675cb5e845fcb55c12dfbcc5e925 - ---- - packages/armbian/builddeb | 217 +++++++----- - packages/armbian/mkdebian | 268 +++++++-------- - .../armbian-activate-profile-sync-daemon.sh | 8 +- - .../profile.d/armbian-check-first-login-reboot.sh | 8 +- - .../bsp/common/etc/profile.d/armbian-ssh-title.sh | 12 +- - packages/bsp/jethub/jethub-remove-log-file.sh | 12 +- - packages/bsp/nanopim4/nanopim4-pwm-fan.sh | 380 ++++++++++----------- - packages/bsp/odroid/c1_init.sh | 123 ++----- - packages/bsp/odroid/c2_init.sh | 255 +++++++------- - packages/bsp/rk3328/z28pro/start_bt.sh | 1 + - packages/bsp/rockchip/start_bt.sh | 17 +- - packages/bsp/sunxi/zeroplus2-bt.sh | 5 +- - .../hostapd-realtek/debian/ifupdown/hostapd.sh | 22 +- - .../hostapd/debian/ifupdown/hostapd.sh | 22 +- - 14 files changed, 680 insertions(+), 670 deletions(-) - -diff --git a/packages/armbian/builddeb b/packages/armbian/builddeb -index 631380a0c..0163d401a 100755 ---- a/packages/armbian/builddeb -+++ b/packages/armbian/builddeb -@@ -1,4 +1,4 @@ --#!/usr/bin/bash -+#!/bin/sh - # - # builddeb 1.3 - # Copyright 2003 Wichert Akkerman -@@ -45,13 +45,11 @@ create_package() { - local pname="$1" pdir="$2" - local dpkg_deb_opts - -- echo "Armbian kernel packaging: ${pname} ${pdir}" -- - mkdir -m 755 -p "$pdir/DEBIAN" - mkdir -p "$pdir/usr/share/doc/$pname" -- cp -pv debian/copyright "$pdir/usr/share/doc/$pname/" -- cp -pv debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian" -- gzip --force -9 "$pdir/usr/share/doc/$pname/changelog.Debian" -+ cp debian/copyright "$pdir/usr/share/doc/$pname/" -+ cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian" -+ gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian" - sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \ - | xargs -r0 md5sum > DEBIAN/md5sums" - -@@ -116,14 +114,13 @@ create_package() { - - # Create the package - dpkg-gencontrol -p$pname -P"$pdir" -- echo "Building deb package with compression '$KDEB_COMPRESS'" 1>&2 - dpkg-deb ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. - } - - deploy_kernel_headers() { -- pdir=$1 # kernel_headers_dir -+ pdir=$1 - -- echo "Armbian deploy_kernel_headers: ${pdir}" -+ rm -rf $pdir - - destdir=$pdir/usr/src/linux-headers-$version - mkdir -p $destdir -@@ -131,14 +128,15 @@ deploy_kernel_headers() { - ( - cd $srctree - find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl -- find arch/*/include include scripts -type f -o -type l # @TODO: could strip off some stuff? -+ find arch/*/include include scripts -type f -o -type l - find security/*/include -type f - find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform - find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f -- ) | grep -v "^\/debian" > debian/hdrsrcfiles -+ ) > debian/hdrsrcfiles - - { - if is_enabled CONFIG_STACK_VALIDATION; then -+ # echo tools/objtool/objtool - find tools/objtool -type f -executable - fi - -@@ -147,77 +145,147 @@ deploy_kernel_headers() { - if is_enabled CONFIG_GCC_PLUGINS; then - find scripts/gcc-plugins -name \*.so -o -name gcc-common.h - fi -- } | grep -v "^\/debian" > debian/hdrobjfiles -- -- echo "Headers copying over..." -- tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir # Copy over using tar pipes, sources -- tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir # Copy over using tar pipes, object files -- rm -f debian/hdrsrcfiles debian/hdrobjfiles # remove file lists -+ } > debian/hdrobjfiles - -- # After copying over, apply patch; - if is_native; then - echo "info: Build native: Skip headers-debian-byteshift.patch" >&2 - elif is_build_on_amd64; then - ( - cd $destdir -- # detect and remove files which patch will create -- lsdiff -s --strip=1 "/tmp/headers-debian-byteshift.patch" | grep '^+' | awk '{print $2}' | xargs -I % sh -c 'rm -f %' -- patch --batch -p1 < "/tmp/headers-debian-byteshift.patch" -+ patch -p1 < /tmp/headers-debian-byteshift.patch - ) - fi - -+ tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir -+ tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir -+ rm -f debian/hdrsrcfiles debian/hdrobjfiles -+ - # copy .config manually to be where it's expected to be -- cp -pv $KCONFIG_CONFIG $destdir/.config -+ cp $KCONFIG_CONFIG $destdir/.config - - mkdir -p $pdir/lib/modules/$version/ -- rm -f $pdir/lib/modules/$version/build - ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build - } - - deploy_libc_headers() { - pdir=$1 -+ -+ rm -rf $pdir -+ -+ $MAKE -f $srctree/Makefile headers -+ $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH=$pdir/usr -+ - # move asm headers to /usr/include//asm to match the structure - # used by Debian-based distros (to support multi-arch) - host_arch=$(dpkg-architecture -a$(cat debian/arch) -qDEB_HOST_MULTIARCH) -- mkdir -p $pdir/usr/include/$host_arch -- [ -d $pdir/usr/include/asm ] && cp -rv $pdir/usr/include/asm $pdir/usr/include/$host_arch/ -- return 0 -+ mkdir $pdir/usr/include/$host_arch -+ mv $pdir/usr/include/asm $pdir/usr/include/$host_arch/ - } - --# set -x --echo "Armbian builddeb starting: ${KERNELRELEASE}..." -- --version=${KERNELRELEASE} -+version=$KERNELRELEASE - tmpdir="debian/tmp" - kernel_headers_dir="debian/hdrtmp" --libc_headers_dir="debian/libc_header_tmp" -+libc_headers_dir="debian/headertmp" - dbg_dir="debian/dbgtmp" - dtb_dir="debian/dtbtmp" --packagename=linux-image-"${BRANCH}${LOCALVERSION}" --kernel_headers_packagename=linux-headers-"${BRANCH}${LOCALVERSION}" --dtb_packagename=linux-dtb-"${BRANCH}${LOCALVERSION}" -+packagename=linux-image-"$BRANCH$LOCALVERSION" -+kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" -+dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" - libc_headers_packagename=linux-libc-dev --dbg_packagename=${packagename}-dbg --installed_image_path="boot/vmlinuz-$version" # for all arches -+dbg_packagename=$packagename-dbg -+ -+if [ "$ARCH" = "um" ]; then -+ packagename=user-mode-linux-$version -+fi -+ -+# Not all arches have the same installed path in debian -+# XXX: have each arch Makefile export a variable of the canonical image install -+# path instead -+case $ARCH in -+ ++aarch64|arm64) -+ image_name=Image -+ installed_image_path="boot/vmlinuz-$version" -+ ;; -+ arm*) -+ image_name=zImage -+ installed_image_path="boot/vmlinuz-$version" -+ ;; -+ um) -+ installed_image_path="usr/bin/linux-$version" -+ ;; -+ parisc|mips|powerpc) -+ installed_image_path="boot/vmlinux-$version" -+ ;; -+ *) -+ image_name=vmlinuz -+ installed_image_path="boot/vmlinuz-$version" -+ ;; -+esac - - BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes) - --# Complement the directory structure -+# Setup the directory structure -+rm -rf "$tmpdir" "$dbg_dir" "$dtb_dir" debian/files - mkdir -m 755 -p "$tmpdir/DEBIAN" - mkdir -p "$tmpdir/lib" "$tmpdir/boot" - mkdir -m 755 -p "$dtb_dir/DEBIAN" --mkdir -p "$dtb_dir/usr/share/doc/$dtb_packagename" -+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" - mkdir -m 755 -p "$kernel_headers_dir/lib/modules/$version/" - mkdir -m 755 -p "$libc_headers_dir/DEBIAN" - --# Install the kernel's System.map and config --cp -pv System.map "$tmpdir/boot/System.map-$version" --cp -pv $KCONFIG_CONFIG "$tmpdir/boot/config-$version" -+# Install the kernel -+if [ "$ARCH" = "um" ]; then -+ mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename" -+ $MAKE linux -+ cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map" -+ cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config" -+ gzip "$tmpdir/usr/share/doc/$packagename/config" -+else -+ cp System.map "$tmpdir/boot/System.map-$version" -+ cp $KCONFIG_CONFIG "$tmpdir/boot/config-$version" -+fi -+cp "$($MAKE -s -f $srctree/Makefile image_name)" "$tmpdir/$installed_image_path" -+ -+if is_enabled CONFIG_OF_EARLY_FLATTREE; then -+ # Only some architectures with OF support have this target -+ if [ -d "${srctree}/arch/$SRCARCH/boot/dts" ]; then -+ $MAKE -f $srctree/Makefile INSTALL_DTBS_PATH="$tmpdir/usr/lib/linux-image-$version" dtbs_install -+ fi -+fi - --# Get the image from the makefile and install it as vmlinuz --image_name_from_makefile="$($MAKE -s -f "$srctree/Makefile" image_name)" --cp -pv "${image_name_from_makefile}" "$tmpdir/$installed_image_path" --image_name="$(basename "${image_name_from_makefile}")" # Just the file name -+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG; then -+ #mkdir -p "$tmpdir/boot/dtb" -+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install -+fi -+ -+if is_enabled CONFIG_MODULES; then -+ INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_install -+ rm -f "$tmpdir/lib/modules/$version/build" -+ rm -f "$tmpdir/lib/modules/$version/source" -+ -+ if [ "$ARCH" = "um" ]; then -+ mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/" -+ rmdir "$tmpdir/lib/modules/$version" -+ fi -+ -+ if [ -n "$BUILD_DEBUG" ]; then -+ for module in $(find $tmpdir/lib/modules/ -name *.ko -printf '%P\n'); do -+ module=lib/modules/$module -+ mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module) -+ # only keep debug symbols in the debug file -+ $OBJCOPY --only-keep-debug $tmpdir/$module $dbg_dir/usr/lib/debug/$module -+ # strip original module from debug symbols -+ $OBJCOPY --strip-debug $tmpdir/$module -+ # then add a link to those -+ $OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module -+ done -+ -+ # resign stripped modules -+ if is_enabled CONFIG_MODULE_SIG_ALL; then -+ INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_sign -+ fi -+ fi -+fi - - # Install the maintainer scripts - # Note: hook scripts under /etc/kernel are also executed by official Debian -@@ -229,7 +297,7 @@ for script in postinst postrm preinst prerm; do - mkdir -p "$tmpdir$debhookdir/$script.d" - cat <<- EOF > "$tmpdir/DEBIAN/$script" - #!/bin/bash -- set -x -+ - set -e - - # Pass maintainer script parameters to hook scripts -@@ -262,12 +330,12 @@ cat >> $tmpdir/DEBIAN/preinst <<- EOT - # exit if we are running chroot - if [ "\$(stat -c %d:%i /)" != "\$(stat -c %d:%i /proc/1/root/.)" ]; then exit 0; fi - -- check_and_unmount (){ -+ check_boot_dev (){ - boot_device=\$(mountpoint -d /boot) - - for file in /dev/* ; do - CURRENT_DEVICE=\$(printf "%d:%d" \$(stat --printf="0x%t 0x%T" \$file)) -- if [ "\$CURRENT_DEVICE" = "\$boot_device" ]; then -+ if [[ "\$CURRENT_DEVICE" = "\$boot_device" ]]; then - boot_partition=\$file - break - fi -@@ -275,43 +343,40 @@ cat >> $tmpdir/DEBIAN/preinst <<- EOT - - bootfstype=\$(blkid -s TYPE -o value \$boot_partition) - if [ "\$bootfstype" = "vfat" ]; then -- umount /boot - rm -f /boot/System.map* /boot/config* /boot/vmlinuz* /boot/$image_name /boot/uImage - fi - } -- mountpoint -q /boot && check_and_unmount -+ mountpoint -q /boot && check_boot_dev - exit 0 - EOT - - create_package "$packagename" "$tmpdir" - --# Put the DTBs, installed by kernel make at "$dtb_dir/boot/dtbs_install", at "$dtb_dir/boot/dtb-$version" --if [ -d "$dtb_dir/boot/dtbs_install" ]; then -- echo "Armbian: DTB " "$dtb_dir/boot/dtbs_install" "exists, moving to" "$dtb_dir/boot/dtb-$version" -- [ -d "$dtb_dir/boot/dtb-$version" ] && rm -rf "$dtb_dir/boot/dtb-$version" -- mv -v "$dtb_dir/boot/dtbs_install" "$dtb_dir/boot/dtb-$version" -- create_package "$dtb_packagename" "$dtb_dir" "dtb" --fi -+if [ "$ARCH" != "um" ]; then - --deploy_libc_headers ${libc_headers_dir} --create_package $libc_headers_packagename $libc_headers_dir -+ if [ "$(cat debian/arch)" != "amd64" ]; then # No DTB for amd64 target -+ create_package "$dtb_packagename" "$dtb_dir" "dtb" -+ fi - --if is_enabled CONFIG_MODULES; then -- if is_native; then -- # echo "Skip scripts folder cleaning" >&2 -- # echo "Skip creating postinst prerm scripts for headers" >&2 -- deploy_kernel_headers $kernel_headers_dir -- create_package $kernel_headers_packagename $kernel_headers_dir # no "headers" here, no postinst -- else -- # Clean up the executables that are left over from -- # cross-compilation for a different host architecture. -- #( -- # cd $srctree -- # make M=scripts clean -- #) -- echo "-- NOT CLEANING before packaging headers. " 1>&2 -- deploy_kernel_headers $kernel_headers_dir -- create_package $kernel_headers_packagename $kernel_headers_dir "headers" -+ deploy_libc_headers $libc_headers_dir -+ create_package $libc_headers_packagename $libc_headers_dir -+ -+ if is_enabled CONFIG_MODULES; then -+ if is_native; then -+ # echo "Skip scripts folder cleaning" >&2 -+ # echo "Skip creating postinst prerm scripts for headers" >&2 -+ deploy_kernel_headers $kernel_headers_dir -+ create_package $kernel_headers_packagename $kernel_headers_dir -+ else -+ # Clean up the executables that are left over from -+ # cross-compilation for a different host architecture. -+ ( -+ cd $srctree -+ make M=scripts clean -+ ) -+ deploy_kernel_headers $kernel_headers_dir -+ create_package $kernel_headers_packagename $kernel_headers_dir "headers" -+ fi - fi - - fi -@@ -321,7 +386,7 @@ if [ -n "$BUILD_DEBUG" ]; then - # Different tools want the image in different locations - # perf - mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/ -- cp -pv vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/ -+ cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/ - # systemtap - mkdir -p $dbg_dir/usr/lib/debug/boot/ - ln -s ../lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/boot/vmlinux-$version -diff --git a/packages/armbian/mkdebian b/packages/armbian/mkdebian -index 83a37b99d..003195372 100755 ---- a/packages/armbian/mkdebian -+++ b/packages/armbian/mkdebian -@@ -1,4 +1,4 @@ --#!/usr/bin/bash -+#!/bin/sh - # - # Copyright 2003 Wichert Akkerman - # -@@ -19,64 +19,57 @@ if_enabled_echo() { - } - - set_debarch() { -- if [ -n "$KBUILD_DEBARCH" ]; then -+ if [ -n "$KBUILD_DEBARCH" ] ; then - debarch="$KBUILD_DEBARCH" - return - fi - - # Attempt to find the correct Debian architecture - case "$UTS_MACHINE" in -- i386 | ia64 | alpha | m68k | riscv*) -- debarch="$UTS_MACHINE" -- ;; -- x86_64) -- debarch=amd64 -- ;; -- sparc*) -- debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) -- ;; -- s390*) -- debarch=s390x -- ;; -- ppc*) -- if is_enabled CONFIG_64BIT; then -- debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el) -- else -- debarch=powerpc$(if_enabled_echo CONFIG_SPE spe) -- fi -- ;; -- parisc*) -- debarch=hppa -- ;; -- mips*) -- if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then -- debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el -- elif is_enabled CONFIG_CPU_MIPSR6; then -- debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6 -- else -- debarch=mips -- fi -- ;; -- aarch64 | arm64) -- debarch=arm64 -- ;; -- arm*) -- if is_enabled CONFIG_AEABI; then -- debarch=arm$(if_enabled_echo CONFIG_VFP hf el) -- else -- debarch=arm -- fi -- ;; -- openrisc) -- debarch=or1k -- ;; -- sh) -- if is_enabled CONFIG_CPU_SH3; then -- debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) -- elif is_enabled CONFIG_CPU_SH4; then -- debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) -- fi -- ;; -+ i386|ia64|alpha|m68k|riscv*) -+ debarch="$UTS_MACHINE" ;; -+ x86_64) -+ debarch=amd64 ;; -+ sparc*) -+ debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;; -+ s390*) -+ debarch=s390x ;; -+ ppc*) -+ if is_enabled CONFIG_64BIT; then -+ debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el) -+ else -+ debarch=powerpc$(if_enabled_echo CONFIG_SPE spe) -+ fi -+ ;; -+ parisc*) -+ debarch=hppa ;; -+ mips*) -+ if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then -+ debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el -+ elif is_enabled CONFIG_CPU_MIPSR6; then -+ debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6 -+ else -+ debarch=mips -+ fi -+ ;; -+ aarch64|arm64) -+ debarch=arm64 ;; -+ arm*) -+ if is_enabled CONFIG_AEABI; then -+ debarch=arm$(if_enabled_echo CONFIG_VFP hf el) -+ else -+ debarch=arm -+ fi -+ ;; -+ openrisc) -+ debarch=or1k ;; -+ sh) -+ if is_enabled CONFIG_CPU_SH3; then -+ debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) -+ elif is_enabled CONFIG_CPU_SH4; then -+ debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) -+ fi -+ ;; - esac - if [ -z "$debarch" ]; then - debarch=$(dpkg-architecture -qDEB_HOST_ARCH) -@@ -91,9 +84,6 @@ set_debarch() { - fi - } - --#set -x --echo "Armbian mkdebian starting..." -- - # Some variables and settings used throughout the script - KDEB_SOURCENAME=linux-$KERNELRELEASE - version=$KERNELRELEASE -@@ -101,7 +91,7 @@ if [ -n "$KDEB_PKGVERSION" ]; then - packageversion=$KDEB_PKGVERSION - revision=${packageversion##*-} - else -- revision=$(cat .version 2> /dev/null || echo 1) -+ revision=$(cat .version 2>/dev/null||echo 1) - packageversion=$version-$revision - fi - sourcename=$KDEB_SOURCENAME -@@ -111,6 +101,10 @@ libc_headers_packagename=linux-libc-dev - dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" - dbg_packagename=$packagename-dbg - -+if [ "$ARCH" = "um" ] ; then -+ packagename=user-mode-linux-$version -+fi -+ - debarch= - set_debarch - -@@ -124,7 +118,7 @@ else - user=${KBUILD_BUILD_USER-$(id -nu)} - name=${DEBFULLNAME-$user} - if [ -z "$email" ]; then -- buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2> /dev/null || hostname)} -+ buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)} - email="$user@$buildhost" - fi - maintainer="$name <$email>" -@@ -132,14 +126,14 @@ fi - - # Try to determine distribution - if [ -n "$KDEB_CHANGELOG_DIST" ]; then -- distribution=$KDEB_CHANGELOG_DIST -+ distribution=$KDEB_CHANGELOG_DIST - # In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog --elif distribution=$(lsb_release -cs 2> /dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then -- : # nothing to do in this case -+elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then -+ : # nothing to do in this case - else -- distribution="unstable" -- echo >&2 "Using default distribution of 'unstable' in the changelog" -- echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" -+ distribution="unstable" -+ echo >&2 "Using default distribution of 'unstable' in the changelog" -+ echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" - fi - - mkdir -p debian/source/ -@@ -150,109 +144,111 @@ extra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)" - extra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)" - - # Generate a simple changelog template --cat <<- EOF > debian/changelog -- $sourcename ($packageversion) $distribution; urgency=low -+cat < debian/changelog -+$sourcename ($packageversion) $distribution; urgency=low - -- * Armbian built Linux kernel. $BRANCH -+ * Armbian built Linux kernel. $BRANCH - -- -- $maintainer $(date -R) -+ -- $maintainer $(date -R) - EOF - - # Generate copyright file --cat <<- EOF > debian/copyright -- This is a packacked armbian patches version of the Linux kernel. -+cat < debian/copyright -+This is a packacked armbian patches version of the Linux kernel. - -- The sources may be found at most Linux archive sites, including: -- https://www.kernel.org/pub/linux/kernel -+The sources may be found at most Linux archive sites, including: -+https://www.kernel.org/pub/linux/kernel - -- Copyright: 1991 - 2018 Linus Torvalds and others. -+Copyright: 1991 - 2018 Linus Torvalds and others. - -- The git repository for mainline kernel development is at: -- git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git -+The git repository for mainline kernel development is at: -+git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git - -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; version 2 dated June, 1991. -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; version 2 dated June, 1991. - -- On Debian GNU/Linux systems, the complete text of the GNU General Public -- License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. -+On Debian GNU/Linux systems, the complete text of the GNU General Public -+License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. - EOF - - # Generate a control file --cat <<- EOF > debian/control -- Source: $sourcename -- Section: kernel -- Priority: optional -- Maintainer: $maintainer -- Build-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends -- Homepage: https://www.kernel.org/ -- -- Package: $packagename -- Architecture: $debarch -- Provides: linux-image, linux-image-armbian, armbian-$BRANCH -- Description: Linux kernel, armbian version $version $BRANCH -- This package contains the Linux kernel, modules and corresponding other -- files, version: $version. -- -- Package: $libc_headers_packagename -- Section: devel -- Provides: linux-kernel-headers -- Conflicts: linux-kernel-headers -- Replaces: linux-kernel-headers -- Architecture: $debarch -- Description: Armbian Linux support headers for userspace development -- This package provides userspaces headers from the Linux kernel. These headers -- are used by the installed headers for GNU glibc and other system libraries. -- Multi-Arch: same -- -- Package: $dtb_packagename -- Architecture: $debarch -- Provides: linux-dtb, linux-dtb-armbian, armbian-$BRANCH -- Description: Armbian Linux DTB, version $version $BRANCH -- This package contains device blobs from the Linux kernel, version $version -+cat < debian/control -+Source: $sourcename -+Section: kernel -+Priority: optional -+Maintainer: $maintainer -+Build-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends -+Homepage: https://www.kernel.org/ -+ -+Package: $packagename -+Architecture: $debarch -+Provides: linux-image, linux-image-armbian, armbian-$BRANCH -+Description: Linux kernel, armbian version $version $BRANCH -+ This package contains the Linux kernel, modules and corresponding other -+ files, version: $version. -+ -+Package: $libc_headers_packagename -+Section: devel -+Provides: linux-kernel-headers -+Conflicts: linux-kernel-headers -+Replaces: linux-kernel-headers -+Architecture: $debarch -+Description: Armbian Linux support headers for userspace development -+ This package provides userspaces headers from the Linux kernel. These headers -+ are used by the installed headers for GNU glibc and other system libraries. -+Multi-Arch: same -+ -+Package: $dtb_packagename -+Architecture: $debarch -+Provides: linux-dtb, linux-dtb-armbian, armbian-$BRANCH -+Description: Armbian Linux DTB, version $version $BRANCH -+ This package contains device blobs from the Linux kernel, version $version - EOF - - if is_enabled CONFIG_MODULES; then -- cat <<- EOF >> debian/control -- -- Package: $kernel_headers_packagename -- Section: devel -- Architecture: $debarch -- Provides: linux-headers, linux-headers-armbian, armbian-$BRANCH -- Depends: make, gcc, libc6-dev, bison, flex, libssl-dev -- Description: Linux kernel headers for $version on $debarch $BRANCH -- This package provides kernel header files for $version on $debarch -- . -- This is useful for people who need to build external modules -- EOF -+cat <> debian/control -+ -+Package: $kernel_headers_packagename -+Section: devel -+Architecture: $debarch -+Provides: linux-headers, linux-headers-armbian, armbian-$BRANCH -+Depends: make, gcc, libc6-dev, bison, flex, libssl-dev -+Description: Linux kernel headers for $version on $debarch $BRANCH -+ This package provides kernel header files for $version on $debarch -+ . -+ This is useful for people who need to build external modules -+EOF - fi - - if is_enabled CONFIG_DEBUG_INFO; then -- cat <<- EOF >> debian/control -- -- Package: $dbg_packagename -- Section: debug -- Architecture: $debarch -- Description: Linux kernel debugging symbols for $version -- This package will come in handy if you need to debug the kernel. It provides -- all the necessary debug symbols for the kernel and its modules. -- EOF -+cat <> debian/control -+ -+Package: $dbg_packagename -+Section: debug -+Architecture: $debarch -+Description: Linux kernel debugging symbols for $version -+ This package will come in handy if you need to debug the kernel. It provides -+ all the necessary debug symbols for the kernel and its modules. -+EOF - fi - --cat << EOF > debian/rules -+cat < debian/rules - #!$(command -v $MAKE) -f - - srctree ?= . - - build: -- echo "Kernel should be built, headers and modules installed before calling this." -+ \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ -+ KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile - - binary-arch: -- echo "Armbian: Calling builddep via make intdeb-pkg" -- \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile intdeb-pkg -+ \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ -+ KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile intdeb-pkg - - clean: - rm -rf debian/*tmp debian/files -+ \$(MAKE) clean - - binary: binary-arch - EOF -diff --git a/packages/bsp/common/etc/profile.d/armbian-activate-profile-sync-daemon.sh b/packages/bsp/common/etc/profile.d/armbian-activate-profile-sync-daemon.sh -index 3cfd5c451..9f0b86523 100644 ---- a/packages/bsp/common/etc/profile.d/armbian-activate-profile-sync-daemon.sh -+++ b/packages/bsp/common/etc/profile.d/armbian-activate-profile-sync-daemon.sh -@@ -10,13 +10,13 @@ - - if [ -f "${HOME}/.activate_psd" ]; then - rm -f ${HOME}/.activate_psd -- /usr/bin/psd > /dev/null 2>&1 -+ /usr/bin/psd >/dev/null 2>&1 - config_file="${HOME}/.config/psd/psd.conf" - if [ -f "${config_file}" ]; then - # test for overlayfs - # TODO: don't enable on btrfs - sed -i 's/#USE_OVERLAYFS=.*/USE_OVERLAYFS="yes"/' "${config_file}" -- case $(/usr/bin/psd p 2> /dev/null | grep Overlayfs) in -+ case $(/usr/bin/psd p 2>/dev/null | grep Overlayfs) in - *active*) - echo -e "\nConfigured profile sync daemon with overlayfs." - ;; -@@ -26,6 +26,6 @@ if [ -f "${HOME}/.activate_psd" ]; then - ;; - esac - fi -- systemctl --user enable psd.service > /dev/null 2>&1 -- systemctl --user start psd.service > /dev/null 2>&1 -+ systemctl --user enable psd.service >/dev/null 2>&1 -+ systemctl --user start psd.service >/dev/null 2>&1 - fi -diff --git a/packages/bsp/common/etc/profile.d/armbian-check-first-login-reboot.sh b/packages/bsp/common/etc/profile.d/armbian-check-first-login-reboot.sh -index 2e4d6e1ae..8d4ce0b3c 100644 ---- a/packages/bsp/common/etc/profile.d/armbian-check-first-login-reboot.sh -+++ b/packages/bsp/common/etc/profile.d/armbian-check-first-login-reboot.sh -@@ -8,17 +8,17 @@ - - # only do this for interactive shells - if [ "$-" != "${-#*i}" ]; then -- OutstandingPackages="$(egrep -v "linux-base|linux-image" /var/run/reboot-required.pkgs 2> /dev/null)" -+ OutstandingPackages="$(egrep -v "linux-base|linux-image" /var/run/reboot-required.pkgs 2>/dev/null)" - if [ -f "/var/run/.reboot_required" ]; then - printf "\n[\e[0;91m Kernel was updated, please reboot\x1B[0m ]\n\n" - elif [ "X${OutstandingPackages}" != "X" ]; then - # No kernel update involved, just regular packages like e.g. dbus require a reboot - Packages="$(egrep -v "linux-base|linux-image" /var/run/reboot-required.pkgs | sort | uniq | tr '\n' ',' | sed -e 's/,/, /g' -e 's/,\ $//')" - OlderThanOneDay=$(find /var/run/reboot-required -mtime +1) -- if [ "X${OlderThanOneDay}" = "X" ]; then -+ if [ "X${OlderThanOneDay}" = "X" ]; then - printf "\n[\e[0;92m some packages require a reboot (${Packages})\x1B[0m ]\n\n" -- else -+ else - printf "\n[\e[0;91m some packages require a reboot since more than 1 day (${Packages})\x1B[0m ]\n\n" -- fi -+ fi - fi - fi -diff --git a/packages/bsp/common/etc/profile.d/armbian-ssh-title.sh b/packages/bsp/common/etc/profile.d/armbian-ssh-title.sh -index 9932ec62e..c3b1822cb 100644 ---- a/packages/bsp/common/etc/profile.d/armbian-ssh-title.sh -+++ b/packages/bsp/common/etc/profile.d/armbian-ssh-title.sh -@@ -6,9 +6,9 @@ - # License version 2. This program is licensed "as is" without any - # warranty of any kind, whether express or implied. - --if [ -n "$PS1" ] && ([ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]); then -- tput tsl > /dev/null -- if [ "$?" -eq 0 ]; then -- echo $(tput tsl) $(whoami)@$(hostname) $(tput fsl) -- fi --fi -+if [ -n "$PS1" ] && ( [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ] ); then -+ tput tsl > /dev/null -+ if [ "$?" -eq 0 ]; then -+ echo `tput tsl` `whoami`@`hostname` `tput fsl` -+ fi -+fi -\ No newline at end of file -diff --git a/packages/bsp/jethub/jethub-remove-log-file.sh b/packages/bsp/jethub/jethub-remove-log-file.sh -index 0384825c3..62086cd40 100755 ---- a/packages/bsp/jethub/jethub-remove-log-file.sh -+++ b/packages/bsp/jethub/jethub-remove-log-file.sh -@@ -8,10 +8,10 @@ LOGS_ROTATE_DEBUG_FILE=/tmp/$(basename "$0").log - LOG_FILE=$1 - - if [ -f "$LOG_FILE" ]; then -- if [ -n "$LOGS_ROTATE_DEBUG" ]; then -- date > "$LOGS_ROTATE_DEBUG_FILE" -- rm -fv "$LOG_FILE" >> "$LOGS_ROTATE_DEBUG_FILE" -- else -- rm -f "$LOG_FILE" -- fi -+ if [ -n "$LOGS_ROTATE_DEBUG" ]; then -+ date > "$LOGS_ROTATE_DEBUG_FILE" -+ rm -fv "$LOG_FILE" >> "$LOGS_ROTATE_DEBUG_FILE" -+ else -+ rm -f "$LOG_FILE" -+ fi - fi -diff --git a/packages/bsp/nanopim4/nanopim4-pwm-fan.sh b/packages/bsp/nanopim4/nanopim4-pwm-fan.sh -index 33c913d25..6040a3109 100644 ---- a/packages/bsp/nanopim4/nanopim4-pwm-fan.sh -+++ b/packages/bsp/nanopim4/nanopim4-pwm-fan.sh -@@ -10,7 +10,7 @@ - # This is free. There is NO WARRANTY. Use at your own risk. - ############################################################################### - --cache() { -+cache () { - if [[ -z "$1" ]]; then - echo '[pwm-fan] Cache file was not specified. Assuming generic.' - local FILENAME='generic' -@@ -30,7 +30,7 @@ cache() { - fi - } - --check_requisites() { -+check_requisites () { - local REQUISITES=('bc' 'cat' 'echo' 'mkdir' 'touch' 'trap' 'sleep') - echo '[pwm-fan] Checking requisites: '${REQUISITES[@]} - for cmd in ${REQUISITES[@]}; do -@@ -43,7 +43,7 @@ check_requisites() { - echo '[pwm-fan] All commands are accesible.' - } - --cleanup() { -+cleanup () { - echo '---- cleaning up ----' - # disable the channel - unexport_pwmchip_channel -@@ -54,7 +54,7 @@ cleanup() { - echo '--------------------' - } - --config() { -+config () { - pwmchip - export_pwmchip_channel - fan_startup -@@ -63,7 +63,7 @@ config() { - } - - # takes message and status as argument --end() { -+end () { - cleanup - echo '####################################################' - echo '# END OF THE PWM-FAN SCRIPT' -@@ -72,39 +72,39 @@ end() { - exit $2 - } - --export_pwmchip_channel() { -+export_pwmchip_channel () { - if [[ ! -d "$CHANNEL_FOLDER" ]]; then -- local EXPORT=$PWMCHIP_FOLDER'export' -- cache 'export' -- local EXPORT_SET=$(echo 0 2> "$CACHE" > "$EXPORT") -- if [[ ! -z $(cat "$CACHE") ]]; then -- # on error, parse output -- if [[ $(cat "$CACHE") =~ (P|p)ermission\ denied ]]; then -- echo '[pwm-fan] This user does not have permission to use channel '$CHANNEL'.' -- if [[ ! -z $(command -v stat) ]]; then -- echo '[pwm-fan] Export is owned by user: '$(stat -c '%U' "$EXPORT")'.' -- echo '[pwm-fan] Export is owned by group: '$(stat -c '%G' "$EXPORT")'.' -- fi -- local ERR_MSG='User permission error while setting channel.' -- elif [[ $(cat "$CACHE") =~ (D|d)evice\ or\ resource\ busy ]]; then -- echo '[pwm-fan] It seems the pin is already in use. Cannot write to export.' -- local ERR_MSG=$PWMCHIP' was busy while setting channel.' -- else -- echo '[pwm-fan] There was an unknown error while setting the channel '$CHANNEL'.' -- if [[ $(cat "$CACHE") =~ \ ([^\:]+)$ ]]; then -- echo '[pwm-fan] Error: '${BASH_REMATCH[1]}'.' -- fi -- local ERR_MSG='Unknown error while setting channel.' -- fi -- end "$ERR_MSG" 1 -- fi -- sleep 1 -+ local EXPORT=$PWMCHIP_FOLDER'export' -+ cache 'export' -+ local EXPORT_SET=$(echo 0 2> "$CACHE" > "$EXPORT") -+ if [[ ! -z $(cat "$CACHE") ]]; then -+ # on error, parse output -+ if [[ $(cat "$CACHE") =~ (P|p)ermission\ denied ]]; then -+ echo '[pwm-fan] This user does not have permission to use channel '$CHANNEL'.' -+ if [[ ! -z $(command -v stat) ]]; then -+ echo '[pwm-fan] Export is owned by user: '$(stat -c '%U' "$EXPORT")'.' -+ echo '[pwm-fan] Export is owned by group: '$(stat -c '%G' "$EXPORT")'.' -+ fi -+ local ERR_MSG='User permission error while setting channel.' -+ elif [[ $(cat "$CACHE") =~ (D|d)evice\ or\ resource\ busy ]]; then -+ echo '[pwm-fan] It seems the pin is already in use. Cannot write to export.' -+ local ERR_MSG=$PWMCHIP' was busy while setting channel.' -+ else -+ echo '[pwm-fan] There was an unknown error while setting the channel '$CHANNEL'.' -+ if [[ $(cat "$CACHE") =~ \ ([^\:]+)$ ]]; then -+ echo '[pwm-fan] Error: '${BASH_REMATCH[1]}'.' -+ fi -+ local ERR_MSG='Unknown error while setting channel.' -+ fi -+ end "$ERR_MSG" 1 -+ fi -+ sleep 1 - elif [[ -d "$CHANNEL_FOLDER" ]]; then - echo '[pwm-fan] '$CHANNEL' channel is already accessible.' - fi - } - --fan_initialization() { -+fan_initialization () { - if [[ -z "$TIME_STARTUP" ]]; then - TIME_STARTUP=10 - fi -@@ -113,7 +113,7 @@ fan_initialization() { - echo $READ_MAX_DUTY_CYCLE 2> $CACHE > $CHANNEL_FOLDER'duty_cycle' - # on error, try setting duty_cycle to a lower value - if [[ ! -z $(cat $CACHE) ]]; then -- local READ_MAX_DUTY_CYCLE=$(($(cat $CHANNEL_FOLDER'period') - 100)) -+ local READ_MAX_DUTY_CYCLE=$(($(cat $CHANNEL_FOLDER'period')-100)) - > $CACHE - echo $READ_MAX_DUTY_CYCLE 2> $CACHE > $CHANNEL_FOLDER'duty_cycle' - if [[ ! -z $(cat $CACHE) ]]; then -@@ -124,12 +124,12 @@ fan_initialization() { - echo '[pwm-fan] Running fan at full speed for the next '$TIME_STARTUP' seconds...' - echo 1 > $CHANNEL_FOLDER'enable' - sleep $TIME_STARTUP -- echo $((MAX_DUTY_CYCLE / 2)) > $CHANNEL_FOLDER'duty_cycle' -- echo '[pwm-fan] Initialization done. Duty cycle at 50% now: '$((MAX_DUTY_CYCLE / 2))' ns.' -+ echo $((MAX_DUTY_CYCLE/2)) > $CHANNEL_FOLDER'duty_cycle' -+ echo '[pwm-fan] Initialization done. Duty cycle at 50% now: '$((MAX_DUTY_CYCLE/2))' ns.' - sleep 1 - } - --fan_run() { -+fan_run () { - if [[ $THERMAL_STATUS -eq 0 ]]; then - fan_run_max - else -@@ -137,7 +137,7 @@ fan_run() { - fi - } - --fan_run_max() { -+fan_run_max () { - echo '[pwm-fan] Running fan at full speed until stopped (Ctrl+C or kill '$$')...' - while true; do - echo $MAX_DUTY_CYCLE > $CHANNEL_FOLDER'duty_cycle' -@@ -146,7 +146,7 @@ fan_run_max() { - done - } - --fan_run_thermal() { -+fan_run_thermal () { - echo '[pwm-fan] Running fan in temp monitor mode until stopped (Ctrl+C or kill '$$')...' - if [[ -z $THERMAL_ABS_THRESH_LOW ]]; then - THERMAL_ABS_THRESH_LOW=25 -@@ -161,7 +161,7 @@ fan_run_thermal() { - if [[ -z $DC_PERCENT_MAX ]]; then - DC_PERCENT_MAX=100 - fi -- DC_ABS_THRESH=($(((DC_PERCENT_MIN * MAX_DUTY_CYCLE) / 100)) $(((DC_PERCENT_MAX * MAX_DUTY_CYCLE) / 100))) -+ DC_ABS_THRESH=($(((DC_PERCENT_MIN*MAX_DUTY_CYCLE)/100)) $(((DC_PERCENT_MAX*MAX_DUTY_CYCLE)/100))) - if [[ -z $TEMPS_SIZE ]]; then - TEMPS_SIZE=6 - fi -@@ -183,9 +183,9 @@ fan_run_thermal() { - for TEMP in ${TEMPS[@]}; do - let TEMPS_SUM+=$TEMP - done -- # moving mid-point -- MEAN_TEMP=$((TEMPS_SUM / ${#TEMPS[@]})) -- DEV_MEAN_CRITICAL=$((MEAN_TEMP - 100)) -+ # moving mid-point -+ MEAN_TEMP=$((TEMPS_SUM/${#TEMPS[@]})) -+ DEV_MEAN_CRITICAL=$((MEAN_TEMP-100)) - X0=${DEV_MEAN_CRITICAL#-} - # args: x, x0, L, a, b (k=a/b) - MODEL=$(function_logistic ${TEMPS[-1]} $X0 ${DC_ABS_THRESH[-1]} 1 10) -@@ -201,7 +201,7 @@ fan_run_thermal() { - done - } - --fan_startup() { -+fan_startup () { - if [[ -z $PERIOD ]]; then - PERIOD=25000000 - fi -@@ -222,25 +222,25 @@ fan_startup() { - done - } - --function_logistic() { -- # https://en.wikipedia.org/wiki/Logistic_function -- local x=$1 -- local x0=$2 -- local L=$3 -- # k=a/b -- local a=$4 -- local b=$5 -- local equation="output=$L/(1+e(-($a/$b)*($x-$x0)));scale=0;output/1" -- local result=$(echo $equation | bc -lq) -- echo $result -+function_logistic () { -+ # https://en.wikipedia.org/wiki/Logistic_function -+ local x=$1 -+ local x0=$2 -+ local L=$3 -+ # k=a/b -+ local a=$4 -+ local b=$5 -+ local equation="output=$L/(1+e(-($a/$b)*($x-$x0)));scale=0;output/1" -+ local result=$(echo $equation | bc -lq) -+ echo $result - } - --interrupt() { -+interrupt () { - echo '!! ATTENTION !!' - end 'Received a signal to stop the script.' 0 - } - --pwmchip() { -+pwmchip () { - if [[ -z $PWMCHIP ]]; then - PWMCHIP='pwmchip1' - fi -@@ -257,7 +257,7 @@ pwmchip() { - CHANNEL_FOLDER="$PWMCHIP_FOLDER""$CHANNEL"'/' - } - --set_default() { -+set_default () { - cache 'set_default_duty_cycle' - echo 0 2> $CACHE > $CHANNEL_FOLDER'duty_cycle' - if [[ ! -z $(cat $CACHE) ]]; then -@@ -273,13 +273,13 @@ set_default() { - local decrement=100 - local rate=$decrement - until [[ $PERIOD_NEW -le 200 ]]; do -- local PERIOD_NEW=$((PERIOD - rate)) -+ local PERIOD_NEW=$((PERIOD-rate)) - > $CACHE - echo $PERIOD_NEW 2> $CACHE > $CHANNEL_FOLDER'period' - if [[ -z $(cat $CACHE) ]]; then - break - fi -- local rate=$((rate + decrement)) -+ local rate=$((rate+decrement)) - done - PERIOD=$PERIOD_NEW - if [[ $PERIOD -le 100 ]]; then -@@ -292,7 +292,7 @@ set_default() { - echo '[pwm-fan] Default duty cycle: '$(cat $CHANNEL_FOLDER'duty_cycle')' ns' - } - --start() { -+start () { - echo '####################################################' - echo '# STARTING PWM-FAN SCRIPT' - echo '# Date and time: '$(date) -@@ -300,15 +300,15 @@ start() { - check_requisites - } - --thermal_meter() { -+thermal_meter () { - if [[ -f $TEMP_FILE ]]; then - local TEMP=$(cat $TEMP_FILE 2> /dev/null) - # TEMP is in millidegrees, so convert to degrees -- echo $((TEMP / 1000)) -+ echo $((TEMP/1000)) - fi - } - --thermal_monit() { -+thermal_monit () { - if [[ -z $MONIT_DEVICE ]]; then - # soc for legacy Kernel or cpu for latest Kernel - MONIT_DEVICE='(soc|cpu)' -@@ -333,7 +333,7 @@ thermal_monit() { - THERMAL_STATUS=0 - } - --unexport_pwmchip_channel() { -+unexport_pwmchip_channel () { - if [[ -d "$CHANNEL_FOLDER" ]]; then - echo '[pwm-fan] Freeing up the channel '$CHANNEL' controlled by the '$PWMCHIP'.' - echo 0 > $CHANNEL_FOLDER'enable' -@@ -351,135 +351,135 @@ unexport_pwmchip_channel() { - } - - usage() { -- echo '' -- echo 'Usage:' -- echo '' -- echo "$0" '[OPTIONS]' -- echo '' -- echo ' Options:' -- echo ' -c str Name of the PWM CHANNEL (e.g., pwm0, pwm1). Default: pwm0' -- echo ' -C str Name of the PWM CONTROLLER (e.g., pwmchip0, pwmchip1). Default: pwmchip1' -- echo ' -d int Lowest DUTY CYCLE threshold (in percentage of the period). Default: 25' -- echo ' -D int Highest DUTY CYCLE threshold (in percentage of the period). Default: 100' -- echo ' -f Fan runs at FULL SPEED all the time. If omitted (default), speed depends on temperature.' -- echo ' -F int TIME (in seconds) to run the fan at full speed during STARTUP. Default: 60' -- echo ' -h Show this HELP message.' -- echo ' -l int TIME (in seconds) to LOOP thermal reads. Lower means higher resolution but uses ever more resources. Default: 10' -- echo ' -m str Name of the DEVICE to MONITOR the temperature in the thermal sysfs interface. Default: (soc|cpu)' -- echo ' -p int The fan PERIOD (in nanoseconds). Default (25kHz): 25000000.' -- echo ' -s int The MAX SIZE of the TEMPERATURE ARRAY. Interval between data points is set by -l. Default (store last 1min data): 6.' -- echo ' -t int Lowest TEMPERATURE threshold (in Celsius). Lower temps set the fan speed to min. Default: 25' -- echo ' -T int Highest TEMPERATURE threshold (in Celsius). Higher temps set the fan speed to max. Default: 75' -- echo '' -- echo ' If no options are provided, the script will run with default values.' -- echo ' Defaults have been tested and optimized for the following hardware:' -- echo ' - NanoPi-M4 v2' -- echo ' - M4 SATA hat' -- echo ' - Fan 12V (.08A and .2A)' -- echo ' And software:' -- echo ' - Kernel: Linux 4.4.231-rk3399' -- echo ' - OS: Armbian Buster (20.08.9) stable' -- echo ' - GNU bash v5.0.3' -- echo ' - bc v1.07.1' -- echo '' -- echo 'Author: cgomesu' -- echo 'Repo: https://github.com/cgomesu/nanopim4-satahat-fan' -- echo '' -- echo 'This is free. There is NO WARRANTY. Use at your own risk.' -- echo '' -+ echo '' -+ echo 'Usage:' -+ echo '' -+ echo "$0" '[OPTIONS]' -+ echo '' -+ echo ' Options:' -+ echo ' -c str Name of the PWM CHANNEL (e.g., pwm0, pwm1). Default: pwm0' -+ echo ' -C str Name of the PWM CONTROLLER (e.g., pwmchip0, pwmchip1). Default: pwmchip1' -+ echo ' -d int Lowest DUTY CYCLE threshold (in percentage of the period). Default: 25' -+ echo ' -D int Highest DUTY CYCLE threshold (in percentage of the period). Default: 100' -+ echo ' -f Fan runs at FULL SPEED all the time. If omitted (default), speed depends on temperature.' -+ echo ' -F int TIME (in seconds) to run the fan at full speed during STARTUP. Default: 60' -+ echo ' -h Show this HELP message.' -+ echo ' -l int TIME (in seconds) to LOOP thermal reads. Lower means higher resolution but uses ever more resources. Default: 10' -+ echo ' -m str Name of the DEVICE to MONITOR the temperature in the thermal sysfs interface. Default: (soc|cpu)' -+ echo ' -p int The fan PERIOD (in nanoseconds). Default (25kHz): 25000000.' -+ echo ' -s int The MAX SIZE of the TEMPERATURE ARRAY. Interval between data points is set by -l. Default (store last 1min data): 6.' -+ echo ' -t int Lowest TEMPERATURE threshold (in Celsius). Lower temps set the fan speed to min. Default: 25' -+ echo ' -T int Highest TEMPERATURE threshold (in Celsius). Higher temps set the fan speed to max. Default: 75' -+ echo '' -+ echo ' If no options are provided, the script will run with default values.' -+ echo ' Defaults have been tested and optimized for the following hardware:' -+ echo ' - NanoPi-M4 v2' -+ echo ' - M4 SATA hat' -+ echo ' - Fan 12V (.08A and .2A)' -+ echo ' And software:' -+ echo ' - Kernel: Linux 4.4.231-rk3399' -+ echo ' - OS: Armbian Buster (20.08.9) stable' -+ echo ' - GNU bash v5.0.3' -+ echo ' - bc v1.07.1' -+ echo '' -+ echo 'Author: cgomesu' -+ echo 'Repo: https://github.com/cgomesu/nanopim4-satahat-fan' -+ echo '' -+ echo 'This is free. There is NO WARRANTY. Use at your own risk.' -+ echo '' - } - - while getopts 'c:C:d:D:fF:hl:m:p:s:t:T:' OPT; do -- case ${OPT} in -- c) -- CHANNEL="$OPTARG" -- if [[ ! $CHANNEL =~ ^pwm[0-9]+$ ]]; then -- echo 'The name of the pwm channel must contain pwm and at least a number (pwm0).' -- exit 1 -- fi -- ;; -- C) -- PWMCHIP="$OPTARG" -- if [[ ! $PWMCHIP =~ ^pwmchip[0-9]+$ ]]; then -- echo 'The name of the pwm controller must contain pwmchip and at least a number (pwmchip1).' -- exit 1 -- fi -- ;; -- d) -- DC_PERCENT_MIN="$OPTARG" -- if [[ ! $DC_PERCENT_MIN =~ ^([0-6][0-9]?|70)$ ]]; then -- echo 'The lowest duty cycle threshold must be an integer between 0 and 70.' -- exit 1 -- fi -- ;; -- D) -- DC_PERCENT_MAX="$OPTARG" -- if [[ ! $DC_PERCENT_MAX =~ ^([8-9][0-9]?|100)$ ]]; then -- echo 'The highest duty cycle threshold must be an integer between 80 and 100.' -- exit 1 -- fi -- ;; -- f) -- SKIP_THERMAL=1 -- ;; -- F) -- TIME_STARTUP="$OPTARG" -- if [[ ! $TIME_STARTUP =~ ^[0-9]+$ ]]; then -- echo 'The time to run the fan at full speed during startup must be an integer.' -- exit 1 -- fi -- ;; -- h) -- usage -- exit 0 -- ;; -- l) -- TIME_LOOP="$OPTARG" -- if [[ ! $TIME_LOOP =~ ^[0-9]+$ ]]; then -- echo 'The time to loop thermal reads must be an integer.' -- exit 1 -- fi -- ;; -- m) -- MONIT_DEVICE="$OPTARG" -- ;; -- p) -- PERIOD="$OPTARG" -- if [[ ! $PERIOD =~ ^[0-9]+$ ]]; then -- echo 'The period must be an integer.' -- exit 1 -- fi -- ;; -- s) -- TEMPS_SIZE="$OPTARG" -- if [[ ! $TEMPS_SIZE =~ ^[0-9]+$ ]]; then -- echo 'The max size of the temperature array must be an integer.' -- exit 1 -- fi -- ;; -- t) -- THERMAL_ABS_THRESH_LOW="$OPTARG" -- if [[ ! $THERMAL_ABS_THRESH_LOW =~ ^[0-4][0-9]?$ ]]; then -- echo 'The lowest temperature threshold must be an integer between 0 and 49.' -- exit 1 -- fi -- ;; -- T) -- THERMAL_ABS_THRESH_HIGH="$OPTARG" -- if [[ ! $THERMAL_ABS_THRESH_HIGH =~ ^([5-9][0-9]?|1[0-1][0-9]?|120)$ ]]; then -- echo 'The highest temperature threshold must be an integer between 50 and 120.' -- exit 1 -- fi -- ;; -- \?) -- echo '!! ATTENTION !!' -- echo '................................' -- echo 'Detected an invalid option.' -- echo 'Try: '"$0"' -h' -- echo '................................' -- exit 1 -- ;; -- esac -+ case ${OPT} in -+ c) -+ CHANNEL="$OPTARG" -+ if [[ ! $CHANNEL =~ ^pwm[0-9]+$ ]]; then -+ echo 'The name of the pwm channel must contain pwm and at least a number (pwm0).' -+ exit 1 -+ fi -+ ;; -+ C) -+ PWMCHIP="$OPTARG" -+ if [[ ! $PWMCHIP =~ ^pwmchip[0-9]+$ ]]; then -+ echo 'The name of the pwm controller must contain pwmchip and at least a number (pwmchip1).' -+ exit 1 -+ fi -+ ;; -+ d) -+ DC_PERCENT_MIN="$OPTARG" -+ if [[ ! $DC_PERCENT_MIN =~ ^([0-6][0-9]?|70)$ ]]; then -+ echo 'The lowest duty cycle threshold must be an integer between 0 and 70.' -+ exit 1 -+ fi -+ ;; -+ D) -+ DC_PERCENT_MAX="$OPTARG" -+ if [[ ! $DC_PERCENT_MAX =~ ^([8-9][0-9]?|100)$ ]]; then -+ echo 'The highest duty cycle threshold must be an integer between 80 and 100.' -+ exit 1 -+ fi -+ ;; -+ f) -+ SKIP_THERMAL=1 -+ ;; -+ F) -+ TIME_STARTUP="$OPTARG" -+ if [[ ! $TIME_STARTUP =~ ^[0-9]+$ ]]; then -+ echo 'The time to run the fan at full speed during startup must be an integer.' -+ exit 1 -+ fi -+ ;; -+ h) -+ usage -+ exit 0 -+ ;; -+ l) -+ TIME_LOOP="$OPTARG" -+ if [[ ! $TIME_LOOP =~ ^[0-9]+$ ]]; then -+ echo 'The time to loop thermal reads must be an integer.' -+ exit 1 -+ fi -+ ;; -+ m) -+ MONIT_DEVICE="$OPTARG" -+ ;; -+ p) -+ PERIOD="$OPTARG" -+ if [[ ! $PERIOD =~ ^[0-9]+$ ]]; then -+ echo 'The period must be an integer.' -+ exit 1 -+ fi -+ ;; -+ s) -+ TEMPS_SIZE="$OPTARG" -+ if [[ ! $TEMPS_SIZE =~ ^[0-9]+$ ]]; then -+ echo 'The max size of the temperature array must be an integer.' -+ exit 1 -+ fi -+ ;; -+ t) -+ THERMAL_ABS_THRESH_LOW="$OPTARG" -+ if [[ ! $THERMAL_ABS_THRESH_LOW =~ ^[0-4][0-9]?$ ]]; then -+ echo 'The lowest temperature threshold must be an integer between 0 and 49.' -+ exit 1 -+ fi -+ ;; -+ T) -+ THERMAL_ABS_THRESH_HIGH="$OPTARG" -+ if [[ ! $THERMAL_ABS_THRESH_HIGH =~ ^([5-9][0-9]?|1[0-1][0-9]?|120)$ ]]; then -+ echo 'The highest temperature threshold must be an integer between 50 and 120.' -+ exit 1 -+ fi -+ ;; -+ \?) -+ echo '!! ATTENTION !!' -+ echo '................................' -+ echo 'Detected an invalid option.' -+ echo 'Try: '"$0"' -h' -+ echo '................................' -+ exit 1 -+ ;; -+ esac - done - - start -diff --git a/packages/bsp/odroid/c1_init.sh b/packages/bsp/odroid/c1_init.sh -index 2b7b7e6f7..0192d68bb 100644 ---- a/packages/bsp/odroid/c1_init.sh -+++ b/packages/bsp/odroid/c1_init.sh -@@ -11,9 +11,9 @@ HPD_STATE=/sys/class/amhdmitx/amhdmitx0/hpd_state - DISP_CAP=/sys/class/amhdmitx/amhdmitx0/disp_cap - DISP_MODE=/sys/class/display/mode - --hdmi=$(cat $HPD_STATE) -+hdmi=`cat $HPD_STATE` - if [ $hdmi -eq 1 ]; then -- echo $mode > $DISP_MODE -+ echo $mode > $DISP_MODE - fi - - outputmode=$mode -@@ -26,20 +26,20 @@ common_display_setup() { - echo 1 > /sys/class/graphics/fb0/freescale_mode - - case $outputmode in -- 800x480*) M="0 0 799 479" ;; -- vga*) M="0 0 639 749" ;; -- 800x600p60*) M="0 0 799 599" ;; -- 1024x600p60h*) M="0 0 1023 599" ;; -- 1024x768p60h*) M="0 0 1023 767" ;; -- sxga*) M="0 0 1279 1023" ;; -- 1440x900p60*) M="0 0 1439 899" ;; -- 480*) M="0 0 719 479" ;; -- 576*) M="0 0 719 575" ;; -- 720*) M="0 0 1279 719" ;; -- 800*) M="0 0 1279 799" ;; -- 1080*) M="0 0 1919 1079" ;; -- 1920x1200*) M="0 0 1919 1199" ;; -- 1680x1050p60*) M="0 0 1679 1049" ;; -+ 800x480*) M="0 0 799 479" ;; -+ vga*) M="0 0 639 749" ;; -+ 800x600p60*) M="0 0 799 599" ;; -+ 1024x600p60h*) M="0 0 1023 599" ;; -+ 1024x768p60h*) M="0 0 1023 767" ;; -+ sxga*) M="0 0 1279 1023" ;; -+ 1440x900p60*) M="0 0 1439 899" ;; -+ 480*) M="0 0 719 479" ;; -+ 576*) M="0 0 719 575" ;; -+ 720*) M="0 0 1279 719" ;; -+ 800*) M="0 0 1279 799" ;; -+ 1080*) M="0 0 1919 1079" ;; -+ 1920x1200*) M="0 0 1919 1199" ;; -+ 1680x1050p60*) M="0 0 1679 1049" ;; - 1360x768p60*) M="0 0 1359 767" ;; - 1366x768p60*) M="0 0 1365 767" ;; - 1600x900p60*) M="0 0 1599 899" ;; -@@ -52,81 +52,32 @@ common_display_setup() { - } - - case $mode in -- 800x480*) -- fbset -fb /dev/fb0 -g 800 480 800 960 $bpp -- common_display_setup -- ;; -- vga*) -- fbset -fb /dev/fb0 -g 640 480 640 960 $bpp -- common_display_setup -- ;; -- 480*) -- fbset -fb /dev/fb0 -g 720 480 720 960 $bpp -- common_display_setup -- ;; -- 800x600p60*) -- fbset -fb /dev/fb0 -g 800 600 800 1200 $bpp -- common_display_setup -- ;; -- 576*) -- fbset -fb /dev/fb0 -g 720 576 720 1152 $bpp -- common_display_setup -- ;; -- 1024x600p60h*) -- fbset -fb /dev/fb0 -g 1024 600 1024 1200 $bpp -- common_display_setup -- ;; -- 1024x768p60h*) -- fbset -fb /dev/fb0 -g 1024 768 1024 1536 $bpp -- common_display_setup -- ;; -- 720*) -- fbset -fb /dev/fb0 -g 1280 720 1280 1440 $bpp -- common_display_setup -- ;; -- 800*) -- fbset -fb /dev/fb0 -g 1280 800 1280 1600 $bpp -- common_display_setup -- ;; -- sxga*) -- fbset -fb /dev/fb0 -g 1280 1024 1280 2048 $bpp -- common_display_setup -- ;; -- 1440x900p60*) -- fbset -fb /dev/fb0 -g 1440 900 1440 1800 $bpp -- common_display_setup -- ;; -- 1080*) -- fbset -fb /dev/fb0 -g 1920 1080 1920 2160 $bpp -- common_display_setup -- ;; -- 1920x1200*) -- fbset -fb /dev/fb0 -g 1920 1200 1920 2400 $bpp -- common_display_setup -- ;; -- 1360x768p60*) -- fbset -fb /dev/fb0 -g 1360 768 1360 1536 $bpp -- common_display_setup -- ;; -- 1366x768p60*) -- fbset -fb /dev/fb0 -g 1366 768 1366 1536 $bpp -- common_display_setup -- ;; -- 1600x900p60*) -- fbset -fb /dev/fb0 -g 1600 900 1600 1800 $bpp -- common_display_setup -- ;; -- 1680x1050p60*) -- fbset -fb /dev/fb0 -g 1680 1050 1680 2100 $bpp -- common_display_setup -- ;; -- -+ 800x480*) fbset -fb /dev/fb0 -g 800 480 800 960 $bpp; common_display_setup ;; -+ vga*) fbset -fb /dev/fb0 -g 640 480 640 960 $bpp; common_display_setup ;; -+ 480*) fbset -fb /dev/fb0 -g 720 480 720 960 $bpp; common_display_setup ;; -+ 800x600p60*) fbset -fb /dev/fb0 -g 800 600 800 1200 $bpp; common_display_setup ;; -+ 576*) fbset -fb /dev/fb0 -g 720 576 720 1152 $bpp; common_display_setup ;; -+ 1024x600p60h*) fbset -fb /dev/fb0 -g 1024 600 1024 1200 $bpp; common_display_setup ;; -+ 1024x768p60h*) fbset -fb /dev/fb0 -g 1024 768 1024 1536 $bpp; common_display_setup ;; -+ 720*) fbset -fb /dev/fb0 -g 1280 720 1280 1440 $bpp; common_display_setup ;; -+ 800*) fbset -fb /dev/fb0 -g 1280 800 1280 1600 $bpp; common_display_setup ;; -+ sxga*) fbset -fb /dev/fb0 -g 1280 1024 1280 2048 $bpp; common_display_setup ;; -+ 1440x900p60*) fbset -fb /dev/fb0 -g 1440 900 1440 1800 $bpp; common_display_setup ;; -+ 1080*) fbset -fb /dev/fb0 -g 1920 1080 1920 2160 $bpp; common_display_setup ;; -+ 1920x1200*) fbset -fb /dev/fb0 -g 1920 1200 1920 2400 $bpp; common_display_setup ;; -+ 1360x768p60*) fbset -fb /dev/fb0 -g 1360 768 1360 1536 $bpp; common_display_setup ;; -+ 1366x768p60*) fbset -fb /dev/fb0 -g 1366 768 1366 1536 $bpp; common_display_setup ;; -+ 1600x900p60*) fbset -fb /dev/fb0 -g 1600 900 1600 1800 $bpp; common_display_setup ;; -+ 1680x1050p60*) fbset -fb /dev/fb0 -g 1680 1050 1680 2100 $bpp; common_display_setup ;; -+ - esac - -+ - # Console unblack - echo 0 > /sys/class/graphics/fb0/blank - echo 0 > /sys/class/graphics/fb1/blank - -+ - # Network Tweaks. Thanks to mlinuxguy - echo 32768 > /proc/sys/net/core/rps_sock_flow_entries - echo 2048 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt -@@ -137,7 +88,7 @@ echo 7 > /sys/class/net/eth0/queues/tx-0/xps_cpus - echo 1,2 > /proc/irq/40/smp_affinity_list - - # Workaround for a cron issue --DT=$(date +%Y) -+DT=`date +%Y` - if [ "$DT" -lt "1980" ]; then - date -s "1/1/1980" - fi -diff --git a/packages/bsp/odroid/c2_init.sh b/packages/bsp/odroid/c2_init.sh -index 2cf93a21d..3465c042b 100644 ---- a/packages/bsp/odroid/c2_init.sh -+++ b/packages/bsp/odroid/c2_init.sh -@@ -4,11 +4,11 @@ - [ -f /boot/.next ] && exit - - for x in $(cat /proc/cmdline); do -- case ${x} in -- m_bpp=*) export bpp=${x#*=} ;; -- hdmimode=*) export mode=${x#*=} ;; -- modeline=*) export modeline=${x#*=} ;; -- esac -+ case ${x} in -+ m_bpp=*) export bpp=${x#*=} ;; -+ hdmimode=*) export mode=${x#*=} ;; -+ modeline=*) export modeline=${x#*=} ;; -+ esac - done - - HPD_STATE=/sys/class/amhdmitx/amhdmitx0/hpd_state -@@ -23,128 +23,127 @@ fi - echo $mode > $DISP_MODE - - common_display_setup() { -- M="0 0 $(($X - 1)) $(($Y - 1))" -- Y_VIRT=$(($Y * 2)) -- fbset -fb /dev/fb0 -g $X $Y $X $Y_VIRT $bpp -- fbset -fb /dev/fb1 -g 32 32 32 32 32 -- echo $mode > /sys/class/display/mode -- echo 0 > /sys/class/graphics/fb0/free_scale -- echo 1 > /sys/class/graphics/fb0/freescale_mode -- echo $M > /sys/class/graphics/fb0/free_scale_axis -- echo $M > /sys/class/graphics/fb0/window_axis -- echo 0 > /sys/class/graphics/fb1/free_scale -- echo 1 > /sys/class/graphics/fb1/freescale_mode -+ M="0 0 $(($X - 1)) $(($Y - 1))" -+ Y_VIRT=$(($Y * 2)) -+ fbset -fb /dev/fb0 -g $X $Y $X $Y_VIRT $bpp -+ fbset -fb /dev/fb1 -g 32 32 32 32 32 -+ echo $mode > /sys/class/display/mode -+ echo 0 > /sys/class/graphics/fb0/free_scale -+ echo 1 > /sys/class/graphics/fb0/freescale_mode -+ echo $M > /sys/class/graphics/fb0/free_scale_axis -+ echo $M > /sys/class/graphics/fb0/window_axis -+ echo 0 > /sys/class/graphics/fb1/free_scale -+ echo 1 > /sys/class/graphics/fb1/freescale_mode - } - - case $mode in -- custombuilt*) -- export X=$(echo $modeline | cut -f1 -d",") -- export Y=$(echo $modeline | cut -f2 -d",") -- ;; -- 480x320*) -- export X=480 -- export Y=320 -- ;; -- 480x800*) -- export X=480 -- export Y=800 -- ;; -- 480i* | 480p*) -- export X=720 -- export Y=480 -- ;; -- 576*) -- export X=720 -- export Y=576 -- ;; -- 720p*) -- export X=1280 -- export Y=720 -- ;; -- 1080*) -- export X=1920 -- export Y=1080 -- ;; -- 2160p*) -- export X=3840 -- export Y=2160 -- ;; -- smpte24hz*) -- export X=3840 -- export Y=2160 -- ;; -- 640x480p60hz*) -- export X=640 -- export Y=480 -- ;; -- 800x480p60hz*) -- export X=800 -- export Y=480 -- ;; -- 800x600p60hz*) -- export X=800 -- export Y=600 -- ;; -- 1024x600p60hz*) -- export X=1024 -- export Y=600 -- ;; -- 1024x768p60hz*) -- export X=1024 -- export Y=768 -- ;; -- 1280x800p60hz*) -- export X=1280 -- export Y=800 -- ;; -- 1280x1024p60hz*) -- export X=1280 -- export Y=1024 -- ;; -- 1360x768p60hz*) -- export X=1360 -- export Y=768 -- ;; -- 1366x768p60hz*) -- export X=1366 -- export Y=768 -- ;; -- 1440x900p60hz*) -- export X=1440 -- export Y=900 -- ;; -- 1600x900p60hz*) -- export X=1600 -- export Y=900 -- ;; -- 1680x1050p60hz*) -- export X=1680 -- export Y=1050 -- ;; -- 1600x1200p60hz*) -- export X=1600 -- export Y=1200 -- ;; -- 1920x1200p60hz*) -- export X=1920 -- export Y=1200 -- ;; -- 2560x1080p60hz*) -- export X=2560 -- export Y=1080 -- ;; -- 2560x1440p60hz*) -- export X=2560 -- export Y=1440 -- ;; -- 2560x1600p60hz*) -- export X=2560 -- export Y=1600 -- ;; -- 3440x1440p60hz*) -- export X=3440 -- export Y=1440 -- ;; -+ custombuilt*) -+ export X=`echo $modeline | cut -f1 -d","` -+ export Y=`echo $modeline | cut -f2 -d","` -+ ;; -+ 480x320*) -+ export X=480 -+ export Y=320 -+ ;; -+ 480x800*) -+ export X=480 -+ export Y=800 -+ ;; -+ 480i*|480p*) -+ export X=720 -+ export Y=480 -+ ;; -+ 576*) -+ export X=720 -+ export Y=576 -+ ;; -+ 720p*) -+ export X=1280 -+ export Y=720 -+ ;; -+ 1080*) -+ export X=1920 -+ export Y=1080 -+ ;; -+ 2160p*) -+ export X=3840 -+ export Y=2160 -+ ;; -+ smpte24hz*) -+ export X=3840 -+ export Y=2160 -+ ;; -+ 640x480p60hz*) -+ export X=640 -+ export Y=480 -+ ;; -+ 800x480p60hz*) -+ export X=800 -+ export Y=480 -+ ;; -+ 800x600p60hz*) -+ export X=800 -+ export Y=600 -+ ;; -+ 1024x600p60hz*) -+ export X=1024 -+ export Y=600 -+ ;; -+ 1024x768p60hz*) -+ export X=1024 -+ export Y=768 -+ ;; -+ 1280x800p60hz*) -+ export X=1280 -+ export Y=800 -+ ;; -+ 1280x1024p60hz*) -+ export X=1280 -+ export Y=1024 -+ ;; -+ 1360x768p60hz*) -+ export X=1360 -+ export Y=768 -+ ;; -+ 1366x768p60hz*) -+ export X=1366 -+ export Y=768 -+ ;; -+ 1440x900p60hz*) -+ export X=1440 -+ export Y=900 -+ ;; -+ 1600x900p60hz*) -+ export X=1600 -+ export Y=900 -+ ;; -+ 1680x1050p60hz*) -+ export X=1680 -+ export Y=1050 -+ ;; -+ 1600x1200p60hz*) -+ export X=1600 -+ export Y=1200 -+ ;; -+ 1920x1200p60hz*) -+ export X=1920 -+ export Y=1200 -+ ;; -+ 2560x1080p60hz*) -+ export X=2560 -+ export Y=1080 -+ ;; -+ 2560x1440p60hz*) -+ export X=2560 -+ export Y=1440 -+ ;; -+ 2560x1600p60hz*) -+ export X=2560 -+ export Y=1600 -+ ;; -+ 3440x1440p60hz*) -+ export X=3440 -+ export Y=1440 - esac - - # force 16bpp for 4k -@@ -154,12 +153,12 @@ common_display_setup - - # Console unblack - case $mode in -- *cvbs* | 480i* | 576i* | 1080i*) -+ *cvbs*|480i*|576i*|1080i*) - echo 0 > /sys/class/graphics/fb0/blank - echo 1 > /sys/class/graphics/fb1/blank - ;; -- *) -+ *) - echo 0 > /sys/class/graphics/fb0/blank -- echo 0 > /sys/class/graphics/fb1/blank -+ echo 0 > /sys/class/graphics/fb1/blank - ;; --esac -+esac -\ No newline at end of file -diff --git a/packages/bsp/rk3328/z28pro/start_bt.sh b/packages/bsp/rk3328/z28pro/start_bt.sh -index 0fbb36499..31dbb369b 100644 ---- a/packages/bsp/rk3328/z28pro/start_bt.sh -+++ b/packages/bsp/rk3328/z28pro/start_bt.sh -@@ -7,6 +7,7 @@ function die_on_error { - fi - } - -+ - # Kill any rtk_hciattach actually running. - # Do not complain if we didn't kill anything. - killall -q -SIGTERM 8822b_hciattach -diff --git a/packages/bsp/rockchip/start_bt.sh b/packages/bsp/rockchip/start_bt.sh -index 25e4a36a4..ca9335b90 100644 ---- a/packages/bsp/rockchip/start_bt.sh -+++ b/packages/bsp/rockchip/start_bt.sh -@@ -1,6 +1,6 @@ - #!/bin/bash - --GPIO_CONFIGURED_CHECK_DIRECTORY="/var/run/rtk_bt" -+GPIO_CONFIGURED_CHECK_DIRECTORY="/var/run/rtk_bt" - GPIO_CONFIGURED_CHECK_FILE="/var/run/rtk_bt/gpio_configured" - - function die_on_error { -@@ -14,8 +14,9 @@ function die_on_error { - # Do not complain if we didn't kill anything. - killall -q -SIGTERM rtk_hciattach - --# If the GPIO are not yet configured --if [ ! -f "$GPIO_CONFIGURED_CHECK_FILE" ]; then -+# If the GPIO are not yet configured -+if [ ! -f "$GPIO_CONFIGURED_CHECK_FILE" ]; -+then - # We'll create the directory first - # So that, if the user is not root - # he'll get a user permission error -@@ -40,11 +41,11 @@ fi - - echo "Resetting the Bluetooth chip" - echo 0 > /sys/class/gpio/gpio149/value && -- echo -e "\tBluetooth chip power down..." && -- sleep 1 && -- echo 1 > /sys/class/gpio/gpio149/value && -- echo -e "\tBluetooth chip power up..." && -- sleep 1 -+echo -e "\tBluetooth chip power down..." && -+sleep 1 && -+echo 1 > /sys/class/gpio/gpio149/value && -+echo -e "\tBluetooth chip power up..." && -+sleep 1 - echo -e "\tResetting done" - - /usr/bin/rtk_hciattach -n -s 115200 /dev/ttyS0 rtk_h5 || die_on_error "Could not create hci0 through rtk_hciattach" -diff --git a/packages/bsp/sunxi/zeroplus2-bt.sh b/packages/bsp/sunxi/zeroplus2-bt.sh -index e99daa74f..87631908b 100755 ---- a/packages/bsp/sunxi/zeroplus2-bt.sh -+++ b/packages/bsp/sunxi/zeroplus2-bt.sh -@@ -1,9 +1,6 @@ - #!/bin/bash - --MAC=$( -- echo -n 1c:1b -- dd bs=1 count=4 if=/dev/random 2> /dev/null | hexdump -v -e '/1 ":%02X"' --) -+MAC=$(echo -n 1c:1b; dd bs=1 count=4 if=/dev/random 2>/dev/null | hexdump -v -e '/1 ":%02X"') - - rfkill unblock all - echo "0" > /sys/class/rfkill/rfkill0/state -diff --git a/packages/extras-buildpkgs/hostapd-realtek/debian/ifupdown/hostapd.sh b/packages/extras-buildpkgs/hostapd-realtek/debian/ifupdown/hostapd.sh -index ce578818a..c5d235776 100644 ---- a/packages/extras-buildpkgs/hostapd-realtek/debian/ifupdown/hostapd.sh -+++ b/packages/extras-buildpkgs/hostapd-realtek/debian/ifupdown/hostapd.sh -@@ -1,6 +1,6 @@ - #!/bin/sh - --# Copyright (C) 2006-2009 Debian hostapd maintainers -+# Copyright (C) 2006-2009 Debian hostapd maintainers - # Faidon Liambotis - # Kel Modderman - # -@@ -43,7 +43,7 @@ else - TO_NULL="/dev/null" - fi - --hostapd_msg() { -+hostapd_msg () { - case "$1" in - verbose) - shift -@@ -53,12 +53,12 @@ hostapd_msg() { - shift - echo "$HOSTAPD_PNAME: $@" > /dev/stderr - ;; -- *) ;; -- -+ *) -+ ;; - esac - } - --test_hostapd_pidfile() { -+test_hostapd_pidfile () { - if [ -n "$1" ] && [ -f "$2" ]; then - if start-stop-daemon --stop --quiet --signal 0 \ - --exec "$1" --pidfile "$2"; then -@@ -72,10 +72,10 @@ test_hostapd_pidfile() { - fi - } - --init_hostapd() { -+init_hostapd () { - HOSTAPD_OPTIONS="-B -P $HOSTAPD_PIDFILE $HOSTAPD_CONF" - HOSTAPD_MESSAGE="$HOSTAPD_BIN $HOSTAPD_OPTIONS" -- -+ - test_hostapd_pidfile "$HOSTAPD_BIN" "$HOSTAPD_PIDFILE" && return 0 - - hostapd_msg verbose "$HOSTAPD_MESSAGE" -@@ -102,19 +102,19 @@ init_hostapd() { - return 0 - } - --kill_hostapd() { -+kill_hostapd () { - HOSTAPD_MESSAGE="stopping $HOSTAPD_PNAME via pidfile: $HOSTAPD_PIDFILE" - - test_hostapd_pidfile "$HOSTAPD_BIN" "$HOSTAPD_PIDFILE" || return 0 -- -+ - hostapd_msg verbose "$HOSTAPD_MESSAGE" - start-stop-daemon --stop --oknodo --quiet --exec "$HOSTAPD_BIN" \ - --pidfile "$HOSTAPD_PIDFILE" > "$TO_NULL" -- -+ - [ "$HOSTAPD_OMIT_PIDFILE" ] && rm -f "$HOSTAPD_OMIT_PIDFILE" - } - --case "$MODE" in -+case "$MODE" in - start) - case "$PHASE" in - pre-up) -diff --git a/packages/extras-buildpkgs/hostapd/debian/ifupdown/hostapd.sh b/packages/extras-buildpkgs/hostapd/debian/ifupdown/hostapd.sh -index ce578818a..c5d235776 100644 ---- a/packages/extras-buildpkgs/hostapd/debian/ifupdown/hostapd.sh -+++ b/packages/extras-buildpkgs/hostapd/debian/ifupdown/hostapd.sh -@@ -1,6 +1,6 @@ - #!/bin/sh - --# Copyright (C) 2006-2009 Debian hostapd maintainers -+# Copyright (C) 2006-2009 Debian hostapd maintainers - # Faidon Liambotis - # Kel Modderman - # -@@ -43,7 +43,7 @@ else - TO_NULL="/dev/null" - fi - --hostapd_msg() { -+hostapd_msg () { - case "$1" in - verbose) - shift -@@ -53,12 +53,12 @@ hostapd_msg() { - shift - echo "$HOSTAPD_PNAME: $@" > /dev/stderr - ;; -- *) ;; -- -+ *) -+ ;; - esac - } - --test_hostapd_pidfile() { -+test_hostapd_pidfile () { - if [ -n "$1" ] && [ -f "$2" ]; then - if start-stop-daemon --stop --quiet --signal 0 \ - --exec "$1" --pidfile "$2"; then -@@ -72,10 +72,10 @@ test_hostapd_pidfile() { - fi - } - --init_hostapd() { -+init_hostapd () { - HOSTAPD_OPTIONS="-B -P $HOSTAPD_PIDFILE $HOSTAPD_CONF" - HOSTAPD_MESSAGE="$HOSTAPD_BIN $HOSTAPD_OPTIONS" -- -+ - test_hostapd_pidfile "$HOSTAPD_BIN" "$HOSTAPD_PIDFILE" && return 0 - - hostapd_msg verbose "$HOSTAPD_MESSAGE" -@@ -102,19 +102,19 @@ init_hostapd() { - return 0 - } - --kill_hostapd() { -+kill_hostapd () { - HOSTAPD_MESSAGE="stopping $HOSTAPD_PNAME via pidfile: $HOSTAPD_PIDFILE" - - test_hostapd_pidfile "$HOSTAPD_BIN" "$HOSTAPD_PIDFILE" || return 0 -- -+ - hostapd_msg verbose "$HOSTAPD_MESSAGE" - start-stop-daemon --stop --oknodo --quiet --exec "$HOSTAPD_BIN" \ - --pidfile "$HOSTAPD_PIDFILE" > "$TO_NULL" -- -+ - [ "$HOSTAPD_OMIT_PIDFILE" ] && rm -f "$HOSTAPD_OMIT_PIDFILE" - } - --case "$MODE" in -+case "$MODE" in - start) - case "$PHASE" in - pre-up) - -From c216282d323014ca365a1539a305911ca835906b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 2 Mar 2022 12:44:36 +0100 -Subject: [PATCH] armbian-next: manual merge (11) of all lib/*.sh changes - between revisions 3305d45b8175dbdd647dc1dc53fa6f0a522920c7 and - ed589b248aef675cb5e845fcb55c12dfbcc5e925 - ---- - lib/functions/compilation/patch/kernel-bootsplash.sh | 2 ++ - lib/functions/compilation/patch/kernel-drivers.sh | 2 +- - lib/functions/configuration/main-config.sh | 14 +++----------- - lib/functions/main/config-prepare.sh | 2 +- - 4 files changed, 7 insertions(+), 13 deletions(-) - -diff --git a/lib/functions/compilation/patch/kernel-bootsplash.sh b/lib/functions/compilation/patch/kernel-bootsplash.sh -index e5d279110..f4e078bfb 100644 ---- a/lib/functions/compilation/patch/kernel-bootsplash.sh -+++ b/lib/functions/compilation/patch/kernel-bootsplash.sh -@@ -8,11 +8,13 @@ function apply_kernel_patches_for_bootsplash() { - - display_alert "Adding" "Kernel bootsplash patch" "info" - -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0000-Revert-fbcon-Avoid-cap-set-but-not-used-warning.patch" "applying" - process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0001-Revert-fbcon-Add-option-to-enable-legacy-hardware-ac.patch" "applying" - - if linux-version compare "${version}" ge 5.15; then - process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0002-Revert-vgacon-drop-unused-vga_init_done.patch" "applying" - fi -+ - process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0003-Revert-vgacon-remove-software-scrollback-support.patch" "applying" - process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0004-Revert-drivers-video-fbcon-fix-NULL-dereference-in-f.patch" "applying" - process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0005-Revert-fbcon-remove-no-op-fbcon_set_origin.patch" "applying" -diff --git a/lib/functions/compilation/patch/kernel-drivers.sh b/lib/functions/compilation/patch/kernel-drivers.sh -index 61f1cb630..0f9d54bfe 100644 ---- a/lib/functions/compilation/patch/kernel-drivers.sh -+++ b/lib/functions/compilation/patch/kernel-drivers.sh -@@ -31,7 +31,7 @@ function prepare_extra_kernel_drivers() { - # - # Older versions have AUFS support with a patch - -- if linux-version compare "${version}" ge 5.1 && linux-version compare "${version}" le 5.12 && [ "$AUFS" == yes ]; then -+ if linux-version compare "${version}" ge 5.1 && linux-version compare "${version}" le 5.17 && [ "$AUFS" == yes ]; then - # @TODO: Fasthash for this whole block is only the git hash of revision we'd apply from Mr. Okajima - local aufs_tag # attach to specifics tag or branch - aufs_tag=$(echo "${version}" | cut -f 1-2 -d ".") -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index d96938dd0..5bf904f58 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -33,7 +33,7 @@ function do_main_configuration() { - [[ -z $EXIT_PATCHING_ERROR ]] && EXIT_PATCHING_ERROR="" # exit patching if failed - [[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board - cd "${SRC}" || exit -- [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=14 -+ [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=15 - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 - BUILD_REPOSITORY_URL=$(git remote get-url "$(git remote 2> /dev/null | grep origin)" 2> /dev/null) - BUILD_REPOSITORY_COMMIT=$(git describe --match=d_e_a_d_b_e_e_f --always --dirty 2> /dev/null) -@@ -51,16 +51,8 @@ function do_main_configuration() { - - # image artefact destination with or without subfolder - FINALDEST=$DEST/images -- if [[ "${MAKE_FOLDERS}" == yes ]]; then -- -- if [[ "$RC" == yes ]]; then -- FINALDEST=$DEST/images/"${BOARD}"/rc -- elif [[ "$BETA" == yes ]]; then -- FINALDEST=$DEST/images/"${BOARD}"/nightly -- else -- FINALDEST=$DEST/images/"${BOARD}"/archive -- fi -- -+ if [[ -n "${MAKE_FOLDERS}" ]]; then -+ FINALDEST=$DEST/images/"${BOARD}"/"${MAKE_FOLDERS}" - install -d ${FINALDEST} - fi - -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index 7984e3c1b..013b903d4 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -117,7 +117,7 @@ function prepare_and_config_main_build_single() { - - if [[ $BETA == yes ]]; then - IMAGE_TYPE=nightly -- elif [[ $BETA != "yes" && $BUILD_ALL == yes && -n $GPG_PASS ]]; then -+ elif [[ $BETA != "yes" && $BUILD_ALL == yes ]]; then - IMAGE_TYPE=stable - else - IMAGE_TYPE=user-built - -From c2871d87a4237f167e274f9ec38442e6ff4e0934 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 2 Mar 2022 02:31:37 +0100 -Subject: [PATCH] armbian-next: more refactorings, general logging; fixes; - split image stuff - -- logging flowing correct to LOGDIR, still needs packaging ---- - lib/extensions.sh | 14 ++- - lib/functions/compilation/kernel.sh | 9 +- - lib/functions/configuration/main-config.sh | 6 +- - lib/functions/general/chroot-helpers.sh | 23 ++--- - lib/functions/image/compress-checksum.sh | 72 ++++++++++++++ - lib/functions/{general => image}/fingerprint.sh | 0 - lib/functions/image/partitioning.sh | 2 +- - lib/functions/image/rootfs-to-image.sh | 122 ++---------------------- - lib/functions/image/write-device.sh | 41 ++++++++ - lib/functions/logging/logging.sh | 11 ++- - lib/functions/logging/traps.sh | 6 ++ - lib/functions/main/default-build.sh | 8 +- - lib/functions/main/rootfs-image.sh | 70 ++++++++------ - lib/library-functions.sh | 36 +++++-- - 14 files changed, 237 insertions(+), 183 deletions(-) - -diff --git a/lib/extensions.sh b/lib/extensions.sh -index 12a86fcfe..2bec020ce 100644 ---- a/lib/extensions.sh -+++ b/lib/extensions.sh -@@ -336,15 +336,19 @@ enable_extension() { - local extension_dir extension_file extension_file_in_dir extension_floating_file - local stacktrace - -- # capture the stack leading to this, possibly with a hint in front. -- stacktrace="${ENABLE_EXTENSION_TRACE_HINT}$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}")" -- - # if LOG_ENABLE_EXTENSION, output useful stack, so user can figure out which extensions are being added where -- [[ "${LOG_ENABLE_EXTENSION}" == "yes" ]] && -- display_alert "Extension being added" "${extension_name} :: added by ${stacktrace}" "" -+ if [[ "${LOG_ENABLE_EXTENSION}" == "yes" ]]; then -+ if [[ "${SHOW_DEBUG}" == "yes" ]]; then -+ stacktrace="${ENABLE_EXTENSION_TRACE_HINT}$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}")" -+ display_alert "Enabling extension" "${extension_name} :: added by ${stacktrace}" "debug" -+ else -+ display_alert "Enabling extension" "${extension_name}" "" -+ fi -+ fi - - # first a check, has the extension manager already initialized? then it is too late to enable_extension(). bail. - if [[ ${initialize_extension_manager_counter} -gt 0 ]]; then -+ stacktrace="${ENABLE_EXTENSION_TRACE_HINT}$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}")" - display_alert "Extension problem" "already initialized -- too late to add '${extension_name}' (trace: ${stacktrace})" "err" - exit 2 - fi -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 68a748d46..e663e0265 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -68,7 +68,7 @@ function compile_kernel() { - - function kernel_prepare_git() { - if [[ -n $KERNELSOURCE ]]; then -- [[ -d "${kernel_work_dir}" ]] && "${kernel_work_dir}" && fasthash_debug "pre git, existing tree" -+ [[ -d "${kernel_work_dir}" ]] && cd "${kernel_work_dir}" && fasthash_debug "pre git, existing tree" - - display_alert "Downloading sources" "kernel" "git" - -@@ -268,7 +268,8 @@ function kernel_package_source() { - local sources_pkg_dir tmp_src_dir tarball_size package_size - tmp_src_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. - -- sources_pkg_dir=${tmp_src_dir}/${CHOSEN_KSRC}_${REVISION}_all -+ sources_pkg_dir="${tmp_src_dir}/${CHOSEN_KSRC}_${REVISION}_all" -+ - mkdir -p "${sources_pkg_dir}"/usr/src/ \ - "${sources_pkg_dir}/usr/share/doc/linux-source-${version}-${LINUXFAMILY}" \ - "${sources_pkg_dir}"/DEBIAN -@@ -287,7 +288,7 @@ function kernel_package_source() { - tarball_size="$(du -h -s "${output_tarball}" | awk '{print $1}')" - - cat <<- EOF > "${sources_pkg_dir}"/DEBIAN/control -- Package: linux-source-${version}-${BRANCH}-${LINUXFAMILY} -+ Package: linux-source-${BRANCH}-${LINUXFAMILY} - Version: ${version}-${BRANCH}-${LINUXFAMILY}+${REVISION} - Architecture: all - Maintainer: ${MAINTAINER} <${MAINTAINERMAIL}> -@@ -302,7 +303,7 @@ function kernel_package_source() { - fakeroot_dpkg_deb_build -Znone -z0 "${sources_pkg_dir}" "${sources_pkg_dir}.deb" # do not compress .deb, it already contains a zstd compressed tarball! ignores ${KDEB_COMPRESS} on purpose - package_size="$(du -h -s "${sources_pkg_dir}.deb" | awk '{print $1}')" - run_host_command_logged rsync --remove-source-files -r "${sources_pkg_dir}.deb" "${DEB_STORAGE}/" -- display_alert "linux-source-${version}-${BRANCH}-${LINUXFAMILY} packaged" "$((SECONDS - ts)) seconds, ${tarball_size} tarball, ${package_size} .deb" "info" -+ display_alert "$(basename "${sources_pkg_dir}.deb" ".deb") packaged" "$((SECONDS - ts)) seconds, ${tarball_size} tarball, ${package_size} .deb" "info" - } - - function kernel_make_headers_dtbs_image_modules() { -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 8fc63c032..d96938dd0 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -422,12 +422,10 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - to confirm or change any packages. - POST_AGGREGATE_PACKAGES - -- # If not only capturing defs, write the output file. This an early write to disk, and @TODO: should be moved later into the configuration phase -- [[ "${CONFIG_DEFS_ONLY}" == "yes" ]] || write_config_summary_output_file -- - display_alert "Done with main-config.sh" "do_main_configuration" "debug" - } - -+# This is called by main_default_build_single(), which is logged correctly. so just output to stdout here. - function write_config_summary_output_file() { - local debug_dpkg_arch debug_uname debug_virt debug_src_mount debug_src_perms debug_src_temp_perms - debug_dpkg_arch="$(dpkg --print-architecture)" -@@ -438,7 +436,7 @@ function write_config_summary_output_file() { - debug_src_temp_perms="$(getfacl -p "${SRC}"/.tmp 2> /dev/null)" - - display_alert "Writing build config summary to" "debug log" "debug" -- run_host_command_logged cat "1>&2" <<- EOF -+ run_host_command_logged cat <<- EOF - ## BUILD SCRIPT ENVIRONMENT - - Repository: $REPOSITORY_URL -diff --git a/lib/functions/general/chroot-helpers.sh b/lib/functions/general/chroot-helpers.sh -index fcd092993..8c90cc578 100644 ---- a/lib/functions/general/chroot-helpers.sh -+++ b/lib/functions/general/chroot-helpers.sh -@@ -28,30 +28,31 @@ umount_chroot() { - } - - # demented recursive version, for final umount. --umount_chroot_recursive() { -- set +e # really, ignore errors. we wanna unmount everything and will try very hard. -- local target="$1" -+function umount_chroot_recursive() { -+ local target="${1}/" - -- if [[ ! -d "${target}" ]]; then # only even try if target is a directory -- return 0 # success, nothing to do. -+ if [[ ! -d "${target}" ]]; then # only even try if target is a directory -+ return 0 # success, nothing to do. -+ elif [[ "${target}" == "/" ]]; then # make sure we're not trying to umount root itself. -+ return 0 - fi -- display_alert "Unmounting recursively" "$target" "" -+ display_alert "Unmounting recursively" "${target}" "" - sync # sync. coalesce I/O. wait for writes to flush to disk. it might take a second. - # First, try to umount some well-known dirs, in a certain order. for speed. - local -a well_known_list=("dev/pts" "dev" "proc" "sys" "boot/efi" "boot/firmware" "boot" "tmp" ".") - for well_known in "${well_known_list[@]}"; do -- umount --recursive "${target}${well_known}" &> /dev/null && sync -+ umount --recursive "${target}${well_known}" &> /dev/null || true # ignore errors - done - - # now try in a loop to unmount all that's still mounted under the target -- local -i tries=1 # the first try above -- mapfile -t current_mount_list < <(cut -d " " -f 2 "/proc/mounts" | grep "^${target}") -+ local -i tries=1 # the first try above -+ mapfile -t current_mount_list < <(cut -d " " -f 2 "/proc/mounts" | grep "^${target}" || true) # don't let grep error out. - while [[ ${#current_mount_list[@]} -gt 0 ]]; do - if [[ $tries -gt 10 ]]; then - display_alert "${#current_mount_list[@]} dirs still mounted after ${tries} tries:" "${current_mount_list[*]}" "wrn" - fi -- cut -d " " -f 2 "/proc/mounts" | grep "^${target}" | xargs -n1 umount --recursive &> /dev/null -- sync # wait for fsync, then count again for next loop. -+ cut -d " " -f 2 "/proc/mounts" | grep "^${target}" | xargs -n1 umount --recursive &> /dev/null || true # ignore errors -+ sync # wait for fsync, then count again for next loop. - mapfile -t current_mount_list < <(cut -d " " -f 2 "/proc/mounts" | grep "^${target}") - tries=$((tries + 1)) - done -diff --git a/lib/functions/image/compress-checksum.sh b/lib/functions/image/compress-checksum.sh -new file mode 100644 -index 000000000..0a9e5898c ---- /dev/null -+++ b/lib/functions/image/compress-checksum.sh -@@ -0,0 +1,72 @@ -+function image_compress_and_checksum() { -+ [[ -n $SEND_TO_SERVER ]] && return 0 -+ -+ if [[ $COMPRESS_OUTPUTIMAGE == "" || $COMPRESS_OUTPUTIMAGE == no ]]; then -+ COMPRESS_OUTPUTIMAGE="sha,gpg,img" -+ elif [[ $COMPRESS_OUTPUTIMAGE == yes ]]; then -+ COMPRESS_OUTPUTIMAGE="sha,gpg,7z" -+ fi -+ -+ if [[ $COMPRESS_OUTPUTIMAGE == *gz* ]]; then -+ display_alert "Compressing" "${DESTIMG}/${version}.img.gz" "info" -+ pigz -3 < $DESTIMG/${version}.img > $DESTIMG/${version}.img.gz -+ compression_type=".gz" -+ fi -+ -+ if [[ $COMPRESS_OUTPUTIMAGE == *xz* ]]; then -+ # @TODO: rpardini: I'd just move to zstd and be done with it. It does it right. -+ -+ display_alert "Compressing" "${DESTIMG}/${version}.img.xz" "info" -+ # compressing consumes a lot of memory we don't have. Waiting for previous packing job to finish helps to run a lot more builds in parallel -+ available_cpu=$(grep -c 'processor' /proc/cpuinfo) -+ [[ ${available_cpu} -gt 16 ]] && available_cpu=16 # using more cpu cores for compressing is pointless -+ available_mem=$(LC_ALL=c free | grep Mem | awk '{print $4/$2 * 100.0}' | awk '{print int($1)}') # in percentage -+ # build optimisations when memory drops below 5% -+ if [[ ${BUILD_ALL} == yes && (${available_mem} -lt 15 || $(ps -uax | grep "pixz" | wc -l) -gt 4) ]]; then -+ while [[ $(ps -uax | grep "pixz" | wc -l) -gt 2 ]]; do -+ echo -en "#" -+ sleep 20 -+ done -+ fi -+ pixz -7 -p ${available_cpu} -f $(expr ${available_cpu} + 2) < $DESTIMG/${version}.img > ${DESTIMG}/${version}.img.xz -+ compression_type=".xz" -+ fi -+ -+ if [[ $COMPRESS_OUTPUTIMAGE == *img* || $COMPRESS_OUTPUTIMAGE == *7z* ]]; then -+ # mv $DESTIMG/${version}.img ${FINALDEST}/${version}.img || exit 1 -+ compression_type="" -+ fi -+ -+ if [[ $COMPRESS_OUTPUTIMAGE == *sha* ]]; then -+ cd ${DESTIMG} -+ display_alert "SHA256 calculating" "${version}.img${compression_type}" "info" -+ sha256sum -b ${version}.img${compression_type} > ${version}.img${compression_type}.sha -+ fi -+ -+ if [[ $COMPRESS_OUTPUTIMAGE == *gpg* ]]; then -+ cd ${DESTIMG} -+ if [[ -n $GPG_PASS ]]; then -+ display_alert "GPG signing" "${version}.img${compression_type}" "info" -+ if [[ -n $SUDO_USER ]]; then -+ sudo chown -R ${SUDO_USER}:${SUDO_USER} "${DESTIMG}"/ -+ SUDO_PREFIX="sudo -H -u ${SUDO_USER}" -+ else -+ SUDO_PREFIX="" -+ fi -+ echo "${GPG_PASS}" | $SUDO_PREFIX bash -c "gpg --passphrase-fd 0 --armor --detach-sign --pinentry-mode loopback --batch --yes ${DESTIMG}/${version}.img${compression_type}" || exit 1 -+ else -+ display_alert "GPG signing skipped - no GPG_PASS" "${version}.img" "wrn" -+ fi -+ fi -+ -+ fingerprint_image "${DESTIMG}/${version}.img${compression_type}.txt" "${version}" -+ -+ if [[ $COMPRESS_OUTPUTIMAGE == *7z* ]]; then -+ display_alert "Compressing" "${DESTIMG}/${version}.7z" "info" -+ 7za a -t7z -bd -m0=lzma2 -mx=3 -mfb=64 -md=32m -ms=on \ -+ ${DESTIMG}/${version}.7z ${version}.key ${version}.img* > /dev/null 2>&1 -+ find ${DESTIMG}/ -type \ -+ f \( -name "${version}.img" -o -name "${version}.img.asc" -o -name "${version}.img.txt" -o -name "${version}.img.sha" \) -print0 | -+ xargs -0 rm > /dev/null 2>&1 -+ fi -+} -diff --git a/lib/functions/general/fingerprint.sh b/lib/functions/image/fingerprint.sh -similarity index 100% -rename from lib/functions/general/fingerprint.sh -rename to lib/functions/image/fingerprint.sh -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 2aa7c6f7b..ef4714757 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -227,7 +227,7 @@ prepare_partitions() { - - export LOOP - LOOP=$(losetup -f) || exit_with_error "Unable to find free loop device" -- display_alert "Allocated loop device" "LOOP=${LOOP}" "wrn" -+ display_alert "Allocated loop device" "LOOP=${LOOP}" - - check_loop_device "$LOOP" - -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index 8c6e26081..d38a14ad1 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -84,101 +84,28 @@ PRE_UMOUNT_FINAL_IMAGE - [[ $ROOTFS_TYPE != nfs ]] && umount "${MOUNT}" - [[ $CRYPTROOT_ENABLE == yes ]] && cryptsetup luksClose $ROOT_MAPPER - -+ umount_chroot_recursive "${MOUNT}" # @TODO: wait. NFS is not really unmounted above. -+ - call_extension_method "post_umount_final_image" "config_post_umount_final_image" <<- 'POST_UMOUNT_FINAL_IMAGE' - *allow config to hack into the image after the unmount* - Called after unmounting both `/root` and `/boot`. - POST_UMOUNT_FINAL_IMAGE - -- # @TODO: this is simply wrong and never does anything. we should use the recursive unmounter here -- while grep -Eq '(${MOUNT}|${DESTIMG})' /proc/mounts; do -- display_alert "Wait for unmount" "${MOUNT}" "info" -- sleep 5 -- done -- -- display_alert "Freeing loop device" "${LOOP}" "wrn" -+ display_alert "Freeing loop device" "${LOOP}" - losetup -d "${LOOP}" - unset LOOP # unset so cleanup handler does not try it again - - # Don't delete $DESTIMG here, extensions might have put nice things there already. -- rm -rf --one-file-system $MOUNT -+ rm -rf --one-file-system "${MOUNT}" - -- mkdir -p $DESTIMG -- mv ${SDCARD}.raw $DESTIMG/${version}.img -+ mkdir -p "${DESTIMG}" -+ mv "${SDCARD}.raw" "${DESTIMG}/${version}.img" - - # custom post_build_image_modify hook to run before fingerprinting and compression - [[ $(type -t post_build_image_modify) == function ]] && display_alert "Custom Hook Detected" "post_build_image_modify" "info" && post_build_image_modify "${DESTIMG}/${version}.img" - -- if [[ -z $SEND_TO_SERVER ]]; then -- -- if [[ $COMPRESS_OUTPUTIMAGE == "" || $COMPRESS_OUTPUTIMAGE == no ]]; then -- COMPRESS_OUTPUTIMAGE="sha,gpg,img" -- elif [[ $COMPRESS_OUTPUTIMAGE == yes ]]; then -- COMPRESS_OUTPUTIMAGE="sha,gpg,7z" -- fi -- -- if [[ $COMPRESS_OUTPUTIMAGE == *gz* ]]; then -- display_alert "Compressing" "${DESTIMG}/${version}.img.gz" "info" -- pigz -3 < $DESTIMG/${version}.img > $DESTIMG/${version}.img.gz -- compression_type=".gz" -- fi -- -- if [[ $COMPRESS_OUTPUTIMAGE == *xz* ]]; then -- display_alert "Compressing" "${DESTIMG}/${version}.img.xz" "info" -- # compressing consumes a lot of memory we don't have. Waiting for previous packing job to finish helps to run a lot more builds in parallel -- available_cpu=$(grep -c 'processor' /proc/cpuinfo) -- #[[ ${BUILD_ALL} == yes ]] && available_cpu=$(( $available_cpu * 30 / 100 )) # lets use 20% of resources in case of build-all -- [[ ${available_cpu} -gt 16 ]] && available_cpu=16 # using more cpu cores for compressing is pointless -- available_mem=$(LC_ALL=c free | grep Mem | awk '{print $4/$2 * 100.0}' | awk '{print int($1)}') # in percentage -- # build optimisations when memory drops below 5% -- if [[ ${BUILD_ALL} == yes && (${available_mem} -lt 15 || $(ps -uax | grep "pixz" | wc -l) -gt 4) ]]; then -- while [[ $(ps -uax | grep "pixz" | wc -l) -gt 2 ]]; do -- echo -en "#" -- sleep 20 -- done -- fi -- pixz -7 -p ${available_cpu} -f $(expr ${available_cpu} + 2) < $DESTIMG/${version}.img > ${DESTIMG}/${version}.img.xz -- compression_type=".xz" -- fi -- -- if [[ $COMPRESS_OUTPUTIMAGE == *img* || $COMPRESS_OUTPUTIMAGE == *7z* ]]; then -- # mv $DESTIMG/${version}.img ${FINALDEST}/${version}.img || exit 1 -- compression_type="" -- fi -- -- if [[ $COMPRESS_OUTPUTIMAGE == *sha* ]]; then -- cd ${DESTIMG} -- display_alert "SHA256 calculating" "${version}.img${compression_type}" "info" -- sha256sum -b ${version}.img${compression_type} > ${version}.img${compression_type}.sha -- fi -- -- if [[ $COMPRESS_OUTPUTIMAGE == *gpg* ]]; then -- cd ${DESTIMG} -- if [[ -n $GPG_PASS ]]; then -- display_alert "GPG signing" "${version}.img${compression_type}" "info" -- if [[ -n $SUDO_USER ]]; then -- sudo chown -R ${SUDO_USER}:${SUDO_USER} "${DESTIMG}"/ -- SUDO_PREFIX="sudo -H -u ${SUDO_USER}" -- else -- SUDO_PREFIX="" -- fi -- echo "${GPG_PASS}" | $SUDO_PREFIX bash -c "gpg --passphrase-fd 0 --armor --detach-sign --pinentry-mode loopback --batch --yes ${DESTIMG}/${version}.img${compression_type}" || exit 1 -- else -- display_alert "GPG signing skipped - no GPG_PASS" "${version}.img" "wrn" -- fi -- fi -- -- fingerprint_image "${DESTIMG}/${version}.img${compression_type}.txt" "${version}" -- -- if [[ $COMPRESS_OUTPUTIMAGE == *7z* ]]; then -- display_alert "Compressing" "${DESTIMG}/${version}.7z" "info" -- 7za a -t7z -bd -m0=lzma2 -mx=3 -mfb=64 -md=32m -ms=on \ -- ${DESTIMG}/${version}.7z ${version}.key ${version}.img* > /dev/null 2>&1 -- find ${DESTIMG}/ -type \ -- f \( -name "${version}.img" -o -name "${version}.img.asc" -o -name "${version}.img.txt" -o -name "${version}.img.sha" \) -print0 | -- xargs -0 rm > /dev/null 2>&1 -- fi -+ image_compress_and_checksum - -- fi - display_alert "Done building" "${FINALDEST}/${version}.img" "info" # A bit predicting the future, since it's still in DESTIMG at this point. - - # Previously, post_build_image passed the .img path as an argument to the hook. Now its an ENV var. -@@ -197,39 +124,6 @@ PRE_UMOUNT_FINAL_IMAGE - rm -rf --one-file-system $DESTIMG - - # write image to SD card -- if [[ $(lsblk "$CARD_DEVICE" 2> /dev/null) && -f ${FINALDEST}/${version}.img ]]; then -- -- # make sha256sum if it does not exists. we need it for comparisson -- if [[ -f "${FINALDEST}/${version}".img.sha ]]; then -- local ifsha=$(cat ${FINALDEST}/${version}.img.sha | awk '{print $1}') -- else -- local ifsha=$(sha256sum -b "${FINALDEST}/${version}".img | awk '{print $1}') -- fi -- -- display_alert "Writing image" "$CARD_DEVICE ${readsha}" "info" -- -- # write to SD card -- pv -p -b -r -c -N "$(logging_echo_prefix_for_pv "write_device") dd" ${FINALDEST}/${version}.img | dd of=$CARD_DEVICE bs=1M iflag=fullblock oflag=direct status=none -- -- call_extension_method "post_write_sdcard" <<- 'POST_BUILD_IMAGE' -- *run after writing img to sdcard* -- After the image is written to `$CARD_DEVICE`, but before verifying it. -- You can still set SKIP_VERIFY=yes to skip verification. -- POST_BUILD_IMAGE -- -- if [[ "${SKIP_VERIFY}" != "yes" ]]; then -- # read and compare -- display_alert "Verifying. Please wait!" -- local ofsha=$(dd if=$CARD_DEVICE count=$(du -b ${FINALDEST}/${version}.img | cut -f1) status=none iflag=count_bytes oflag=direct | sha256sum | awk '{print $1}') -- if [[ $ifsha == $ofsha ]]; then -- display_alert "Writing verified" "${version}.img" "info" -- else -- display_alert "Writing failed" "${version}.img" "err" -- fi -- fi -- elif [[ $(systemd-detect-virt) == 'docker' && -n $CARD_DEVICE ]]; then -- # display warning when we want to write sd card under Docker -- display_alert "Can't write to $CARD_DEVICE" "Enable docker privileged mode in config-docker.conf" "wrn" -- fi -+ write_image_to_device "${FINALDEST}/${version}.img" "${CARD_DEVICE}" - - } -diff --git a/lib/functions/image/write-device.sh b/lib/functions/image/write-device.sh -new file mode 100644 -index 000000000..7aefbd2fc ---- /dev/null -+++ b/lib/functions/image/write-device.sh -@@ -0,0 +1,41 @@ -+# @TODO: make usable as a separate tool as well -+function write_image_to_device() { -+ local image_file="${1}" -+ local device="${2}" -+ if [[ $(lsblk "${device}" 2> /dev/null) && -f "${image_file}" ]]; then -+ # create sha256sum if it does not exist. we need it for comparison, later. -+ local if_sha="" -+ if [[ -f "${image_file}.img.sha" ]]; then -+ # shellcheck disable=SC2002 # cat most definitely is useful. she purrs. -+ if_sha=$(cat "${image_file}.sha" | awk '{print $1}') -+ else -+ if_sha=$(sha256sum -b "${image_file}" | awk '{print $1}') -+ fi -+ -+ display_alert "Writing image" "${device} ${if_sha}" "info" -+ -+ # write to SD card -+ pv -p -b -r -c -N "$(logging_echo_prefix_for_pv "write_device") dd" "${image_file}" | dd "of=${device}" bs=1M iflag=fullblock oflag=direct status=none -+ -+ call_extension_method "post_write_sdcard" <<- 'POST_BUILD_IMAGE' -+ *run after writing img to sdcard* -+ After the image is written to `${device}`, but before verifying it. -+ You can still set SKIP_VERIFY=yes to skip verification. -+ POST_BUILD_IMAGE -+ -+ if [[ "${SKIP_VERIFY}" != "yes" ]]; then -+ # read and compare -+ display_alert "Verifying. Please wait!" -+ local of_sha="" -+ of_sha=$(dd "if=${device}" "count=$(du -b "${image_file}" | cut -f1)" status=none iflag=count_bytes oflag=direct | sha256sum | awk '{print $1}') -+ if [[ "$if_sha" == "$of_sha" ]]; then -+ display_alert "Writing verified" "${image_file}" "info" -+ else -+ display_alert "Writing failed" "${image_file}" "err" -+ fi -+ fi -+ elif [[ $(systemd-detect-virt) == 'docker' && -n ${device} ]]; then -+ # display warning when we want to write sd card under Docker -+ display_alert "Can't write to ${device}" "Enable docker privileged mode in config-docker.conf" "wrn" -+ fi -+} -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 64001b013..519cb5031 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -45,7 +45,8 @@ function start_logging_section() { - export CURRENT_LOGGING_COUNTER - CURRENT_LOGGING_COUNTER="$(printf "%03d" "$logging_section_counter")" - export CURRENT_LOGGING_SECTION=${LOG_SECTION:-early} # default to "early", should be overwritten soon enough -- export CURRENT_LOGGING_DIR="${LOGDIR}" # set in cli-entrypoint.sh -+ export CURRENT_LOGGING_SECTION_START=${SECONDS} -+ export CURRENT_LOGGING_DIR="${LOGDIR}" # set in cli-entrypoint.sh - export CURRENT_LOGFILE="${CURRENT_LOGGING_DIR}/${CURRENT_LOGGING_COUNTER}.${CURRENT_LOGGING_SECTION}.log" - mkdir -p "${CURRENT_LOGGING_DIR}" - touch "${CURRENT_LOGFILE}" # Touch it, make sure it's writable. -@@ -54,7 +55,7 @@ function start_logging_section() { - if [[ "${CI}" == "true" ]]; then # On CI, this has special meaning. - echo "::group::[🥑] Group ${CURRENT_LOGGING_SECTION}" - else -- display_alert "start group" "<${CURRENT_LOGGING_SECTION}>" "group" -+ display_alert "" "<${CURRENT_LOGGING_SECTION}>" "group" - fi - return 0 - } -@@ -62,9 +63,10 @@ function start_logging_section() { - function finish_logging_section() { - # Close opened CI group. - if [[ "${CI}" == "true" ]]; then -+ echo "Section '${CURRENT_LOGGING_SECTION}' took $((SECONDS - CURRENT_LOGGING_SECTION_START))s to execute." 1>&2 # write directly to stderr - echo "::endgroup::" - else -- display_alert "finish group" "" "group" -+ display_alert "" " in $((SECONDS - CURRENT_LOGGING_SECTION_START))s" "group" - fi - } - -@@ -93,6 +95,7 @@ function do_with_logging() { - exec 3> >( - cd "${SRC}" || exit 2 - #grep --line-buffered -v "^$" | \ -+ # @TODO: tee to CURRENT_LOGFILE. - sed -u -e "${prefix_sed_cmd}" - ) - "$@" >&3 -@@ -166,7 +169,7 @@ function display_alert() { - return 0 - fi - level_indicator="🦋" -- inline_logs_color="\e[1;36m" # cyan -+ inline_logs_color="\e[1;34m" # blue; 36 would be cyan - ;; - - command) -diff --git a/lib/functions/logging/traps.sh b/lib/functions/logging/traps.sh -index 7c3eb97cd..c6279cabc 100644 ---- a/lib/functions/logging/traps.sh -+++ b/lib/functions/logging/traps.sh -@@ -94,6 +94,12 @@ function add_cleanup_handler() { - trap_manager_cleanup_handlers+=("$callback") - } - -+function execute_and_remove_cleanup_handler() { -+ local callback="$1" -+ display_alert "Execute and remove cleanup handler" "${callback}" "cleanup" -+ # @TODO implement! -+} -+ - function remove_all_trap_handlers() { - display_alert "Will remove ALL trap handlers, for a clean exit..." "" "cleanup" - } -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index e2882082b..2e40456c0 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -1,6 +1,6 @@ - # This does NOT run under the logging manager. We should invoke the do_with_logging wrapper for - # strategic parts of this. Attention: rootfs does it's own logging, so just let that be. --main_default_build_single() { -+function main_default_build_single() { - - # Starting work. Export TMPDIR, which will be picked up by all `mktemp` invocations hopefully. - # Runner functions in logging/runners.sh will explicitly unset TMPDIR before invoking chroot. -@@ -12,6 +12,10 @@ main_default_build_single() { - export TMPDIR="${WORKDIR}" - - start=$(date +%s) -+ -+ ### Write config summary to its own logging section. -+ LOG_SECTION="config_summary" do_with_logging write_config_summary_output_file -+ - # Check and install dependencies, directory structure and settings - LOG_SECTION="prepare_host" do_with_logging prepare_host - -@@ -103,7 +107,7 @@ main_default_build_single() { - FULL="" REPLACE="-full" LOG_SECTION="compile_firmware" do_with_logging compile_firmware - - # Build the full version of firmware package -- FULL="-full" REPLACE="" LOG_SECTION="compile_firmware" do_with_logging compile_firmware -+ FULL="-full" REPLACE="" LOG_SECTION="compile_firmware_full" do_with_logging compile_firmware - - fi - fi -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index 270145b04..bca09eca0 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -11,26 +11,31 @@ - function build_rootfs_and_image() { - display_alert "Starting rootfs and image building process for" "${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL}" "info" - -- [[ $ROOTFS_TYPE != ext4 ]] && display_alert "Assuming $BOARD $BRANCH kernel supports $ROOTFS_TYPE" "" "wrn" -+ [[ $ROOTFS_TYPE != ext4 ]] && display_alert "Assuming ${BOARD} ${BRANCH} kernel supports ${ROOTFS_TYPE}" "" "wrn" - - # add handler to cleanup when done or if something fails or is interrupted. - add_cleanup_handler trap_handler_cleanup_rootfs_and_image - - # stage: clean and create directories -- rm -rf $SDCARD $MOUNT -- mkdir -p $SDCARD $MOUNT $DEST/images $SRC/cache/rootfs -+ rm -rf "${SDCARD}" "${MOUNT}" -+ mkdir -p "${SDCARD}" "${MOUNT}" "${DEST}/images" "${SRC}/cache/rootfs" - - # bind mount rootfs if defined - if [[ -d "${ARMBIAN_CACHE_ROOTFS_PATH}" ]]; then -- mountpoint -q "${SRC}"/cache/rootfs && umount -l "${SRC}"/cache/toolchain -- mount --bind "${ARMBIAN_CACHE_ROOTFS_PATH}" "${SRC}"/cache/rootfs -+ mountpoint -q "${SRC}"/cache/rootfs && umount "${SRC}"/cache/toolchain -+ mount --bind "${ARMBIAN_CACHE_ROOTFS_PATH}" "${SRC}/cache/rootfs" - fi - - # stage: verify tmpfs configuration and mount - # CLI needs ~1.5GiB, desktop - ~3.5GiB - # calculate and set tmpfs mount to use 9/10 of available RAM+SWAP -+ # @TODO: this does not make sense; swap should not be considered. Actually, only free + cached memory should be considered! - local phymem=$(((($(awk '/MemTotal/ {print $2}' /proc/meminfo) + $(awk '/SwapTotal/ {print $2}' /proc/meminfo))) / 1024 * 9 / 10)) # MiB -- if [[ $BUILD_DESKTOP == yes ]]; then local tmpfs_max_size=3500; else local tmpfs_max_size=1500; fi # MiB -+ local tmpfs_max_size=1500 # MiB -+ if [[ $BUILD_DESKTOP == yes ]]; then -+ tmpfs_max_size=3500 -+ fi -+ - if [[ $FORCE_USE_RAMDISK == no ]]; then - local use_tmpfs=no - elif [[ $FORCE_USE_RAMDISK == yes || $phymem -gt $tmpfs_max_size ]]; then -@@ -38,7 +43,10 @@ function build_rootfs_and_image() { - fi - [[ -n $FORCE_TMPFS_SIZE ]] && phymem=$FORCE_TMPFS_SIZE - -- [[ $use_tmpfs == yes ]] && mount -t tmpfs -o size=${phymem}M tmpfs $SDCARD -+ if [[ $use_tmpfs == yes ]]; then -+ display_alert "Using tmpfs for rootfs" "${phymem}M" "debug" -+ mount -t tmpfs -o "size=${phymem}M" tmpfs "${SDCARD}" -+ fi - - # stage: prepare basic rootfs: unpack cache or create from scratch - LOG_SECTION="get_or_create_rootfs_cache_chroot_sdcard" do_with_logging get_or_create_rootfs_cache_chroot_sdcard -@@ -51,25 +59,24 @@ function build_rootfs_and_image() { - # stage: install kernel and u-boot packages - # install distribution and board specific applications - -- LOG_SECTION="distro" do_with_logging install_distribution_specific -+ LOG_SECTION="install_distribution_specific_${RELEASE}" do_with_logging install_distribution_specific - LOG_SECTION="install_distribution_agnostic" do_with_logging install_distribution_agnostic - -- # install locally built packages -+ # install locally built packages # @TODO: armbian-nextify this eventually - [[ $EXTERNAL_NEW == compile ]] && LOG_SECTION="packages_local" do_with_logging chroot_installpackages_local - -- # install from apt.armbian.com -+ # install from apt.armbian.com # @TODO: armbian-nextify this eventually - [[ $EXTERNAL_NEW == prebuilt ]] && LOG_SECTION="packages_prebuilt" do_with_logging chroot_installpackages "yes" - - # stage: user customization script - # NOTE: installing too many packages may fill tmpfs mount -- LOG_SECTION="custom" do_with_logging customize_image -+ LOG_SECTION="customize_image" do_with_logging customize_image - - # remove packages that are no longer needed. rootfs cache + uninstall might have leftovers. -- LOG_SECTION="rootfs_apt_get_autoremove" do_with_logging apt_purge_unneeded_packages -+ LOG_SECTION="apt_purge_unneeded_packages" do_with_logging apt_purge_unneeded_packages - -- # create list of installed packages for debug purposes -- display_alert "Recording list of installed packages" "debug log" "debug" -- chroot_sdcard dpkg --get-selections "| grep -v deinstall | awk '{print \$1}' | cut -f1 -d':' 1>&2" -+ # for reference, debugging / sanity checking -+ LOG_SECTION="list_installed_packages" do_with_logging list_installed_packages - - # clean up / prepare for making the image - umount_chroot "$SDCARD" -@@ -85,31 +92,34 @@ function build_rootfs_and_image() { - display_alert "Starting FEL boot" "$BOARD" "info" - start_fel_boot - else -- LOG_SECTION="partitioning" do_with_logging prepare_partitions -- LOG_SECTION="image" do_with_logging create_image_from_sdcard_rootfs -+ LOG_SECTION="prepare_partitions" do_with_logging prepare_partitions -+ LOG_SECTION="create_image_from_sdcard_rootfs" do_with_logging create_image_from_sdcard_rootfs - fi - -- # stage: unmount tmpfs -- umount $SDCARD 2>&1 -- if [[ $use_tmpfs = yes ]]; then -- while grep -qs "$SDCARD" /proc/mounts; do -- umount $SDCARD -- sleep 5 -- done -- fi -- rm -rf $SDCARD -+ # Completely and recursively unmount the directory. This will remove the tmpfs mount too -+ umount_chroot_recursive "${SDCARD}" -+ -+ # Remove the dir -+ [[ -d "${SDCARD}" ]] && rm -rf --one-file-system "${SDCARD}" -+ -+ # Run the cleanup handler. @TODO: this already does the above, so can be simpler. -+ execute_and_remove_cleanup_handler trap_handler_cleanup_rootfs_and_image - -- # No need to remove the cleanup handler here, it's automatic. - return 0 - } - -+function list_installed_packages() { -+ display_alert "Recording list of installed packages" "debug log" "debug" -+ chroot_sdcard dpkg --get-selections "| grep -v deinstall | awk '{print \$1}' | cut -f1 -d':' | column -c 80" -+} -+ - function trap_handler_cleanup_rootfs_and_image() { - display_alert "Cleanup for rootfs and image" "trap_handler_cleanup_rootfs_and_image" "cleanup" - - cd "${SRC}" || echo "Failed to cwd to ${SRC}" # Move pwd away, so unmounts work - # those will loop until they're unmounted. -- umount_chroot_recursive "${SDCARD}/" || true -- umount_chroot_recursive "${MOUNT}/" || true -+ umount_chroot_recursive "${SDCARD}" || true -+ umount_chroot_recursive "${MOUNT}" || true - - mountpoint -q "${SRC}"/cache/toolchain && umount -l "${SRC}"/cache/toolchain >&2 # @TODO: why does Igor uses lazy umounts? nfs? - mountpoint -q "${SRC}"/cache/rootfs && umount -l "${SRC}"/cache/rootfs >&2 -@@ -123,4 +133,6 @@ function trap_handler_cleanup_rootfs_and_image() { - - [[ -d "${SDCARD}" ]] && rm -rf --one-file-system "${SDCARD}" - [[ -d "${MOUNT}" ]] && rm -rf --one-file-system "${MOUNT}" -+ -+ return 0 # short-circuit above, so exit clean here - } -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 75771db01..dc62374e0 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -235,15 +235,6 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/general/downloads.sh - source "${SRC}"/lib/functions/general/downloads.sh - --# no errors tolerated. invoked before each sourced file to make sure. --#set -o pipefail # trace ERR through pipes - will be enabled "soon" --#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled --set -o errtrace # trace ERR through - enabled --set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/general/fingerprint.sh --# shellcheck source=lib/functions/general/fingerprint.sh --source "${SRC}"/lib/functions/general/fingerprint.sh -- - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -@@ -271,6 +262,24 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/general/repo.sh - source "${SRC}"/lib/functions/general/repo.sh - -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/image/compress-checksum.sh -+# shellcheck source=lib/functions/image/compress-checksum.sh -+source "${SRC}"/lib/functions/image/compress-checksum.sh -+ -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/image/fingerprint.sh -+# shellcheck source=lib/functions/image/fingerprint.sh -+source "${SRC}"/lib/functions/image/fingerprint.sh -+ - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -@@ -307,6 +316,15 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/image/rootfs-to-image.sh - source "${SRC}"/lib/functions/image/rootfs-to-image.sh - -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/image/write-device.sh -+# shellcheck source=lib/functions/image/write-device.sh -+source "${SRC}"/lib/functions/image/write-device.sh -+ - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - -From c7862c7c5e2807060ead176597998270256faff9 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Tue, 1 Mar 2022 11:44:32 +0100 -Subject: [PATCH] armbian-next: complete removal of usages of `LOG_SUBPATH`; - 100% error handled - -- loose ends, use new LOGDIR -- remove the last shortcircuit in extensions execution, now it's 100% error handled -- many logging fixes -- still missing: final log consolidation/cleanup ---- - extensions/gen-sample-extension-docs.sh | 2 +- - extensions/grub.sh | 1 + - lib/extensions.sh | 15 ++++---- - lib/functions/bsp/bsp-desktop.sh | 14 +++----- - lib/functions/cli/cli-entrypoint.sh | 41 +++++++++++---------- - lib/functions/configuration/main-config.sh | 15 ++------ - lib/functions/general/downloads.sh | 35 +++++++++--------- - lib/functions/general/host.sh | 3 +- - lib/functions/image/initrd.sh | 2 +- - lib/functions/image/partitioning.sh | 57 +++++++++++++++--------------- - lib/functions/image/rootfs-to-image.sh | 23 ++++++------ - lib/functions/logging/logging.sh | 12 +++++-- - lib/functions/logging/runners.sh | 10 ++++-- - lib/functions/main/config-prepare.sh | 32 ----------------- - lib/functions/main/rootfs-image.sh | 3 +- - lib/functions/rootfs/distro-agnostic.sh | 2 +- - lib/functions/rootfs/rootfs-desktop.sh | 8 ++--- - 17 files changed, 116 insertions(+), 159 deletions(-) - -diff --git a/extensions/gen-sample-extension-docs.sh b/extensions/gen-sample-extension-docs.sh -index ea78631f7..728585c76 100644 ---- a/extensions/gen-sample-extension-docs.sh -+++ b/extensions/gen-sample-extension-docs.sh -@@ -4,7 +4,7 @@ function extension_metadata_ready__499_display_docs_generation_start_info() { - } - - function extension_metadata_ready__docs_markdown() { -- generate_markdown_docs_to_stdout > "${DEST}/"${LOG_SUBPATH}"/hooks.auto.docs.md" -+ generate_markdown_docs_to_stdout > "${EXTENSION_MANAGER_TMP_DIR}/hooks.auto.docs.md" - } - - function extension_metadata_ready__docs_sample_extension() { -diff --git a/extensions/grub.sh b/extensions/grub.sh -index e1b20a87e..0ae97ed43 100644 ---- a/extensions/grub.sh -+++ b/extensions/grub.sh -@@ -75,6 +75,7 @@ post_family_tweaks_bsp__remove_uboot_grub() { - pre_umount_final_image__remove_uboot_initramfs_hook_grub() { - # even if BSP still contained this (cached .deb), make sure by removing from ${MOUNT} - [[ -f "$MOUNT"/etc/initramfs/post-update.d/99-uboot ]] && rm -v "$MOUNT"/etc/initramfs/post-update.d/99-uboot -+ return 0 # shortcircuit above - } - - pre_umount_final_image__install_grub() { -diff --git a/lib/extensions.sh b/lib/extensions.sh -index ad215bdf0..12a86fcfe 100644 ---- a/lib/extensions.sh -+++ b/lib/extensions.sh -@@ -20,7 +20,7 @@ export LOG_ENABLE_EXTENSION=yes # colorful logs with stacktrace when enable_exte - # notice: this is not involved in how the hook functions came to be. read below for that. - call_extension_method() { - # First, consume the stdin and write metadata about the call. -- write_hook_point_metadata "$@" || true -+ write_hook_point_metadata "$@" - - # @TODO: hack to handle stdin again, possibly with '< /dev/tty' - -@@ -36,9 +36,9 @@ call_extension_method() { - # Then call the hooks, if they are defined. - for hook_name in "$@"; do - echo "-- Extension Method being called: ${hook_name}" >> "${EXTENSION_MANAGER_LOG_FILE}" -- # shellcheck disable=SC2086 -- # shellcheck disable=SC2015 -- [[ $(type -t ${hook_name} || true) == function ]] && { ${hook_name}; } || true -+ if [[ $(type -t ${hook_name} || true) == function ]]; then -+ ${hook_name} -+ fi - done - } - -@@ -66,7 +66,7 @@ initialize_extension_manager() { - mkdir -p "${EXTENSION_MANAGER_TMP_DIR}" - - # Log destination. -- export EXTENSION_MANAGER_LOG_FILE="${EXTENSION_MANAGER_TMP_DIR}/extensions.log" -+ export EXTENSION_MANAGER_LOG_FILE="${LOGDIR}/999.extensions.log" - [[ "${WRITE_EXTENSIONS_METADATA:-yes}" == "no" ]] && echo -n "" > "${EXTENSION_MANAGER_TMP_DIR}/hook_point_calls.txt" - - # Add trap handler to cleanup and not leave garbage behind when exiting. -@@ -270,10 +270,7 @@ function cleanup_handler_extensions() { - display_alert "yeah the extensions trap handler..." "cleanup_handler_extensions" "cleanup" - cleanup_extension_manager - -- # Move temporary log file over to final destination. -- if [[ -f "${EXTENSION_MANAGER_LOG_FILE}" ]]; then -- mv "${EXTENSION_MANAGER_LOG_FILE}" "${DEST}/${LOG_SUBPATH:-debug}/extensions.log" -- fi -+ # Stop logging. - unset EXTENSION_MANAGER_LOG_FILE - - # cleanup our tmpdir. -diff --git a/lib/functions/bsp/bsp-desktop.sh b/lib/functions/bsp/bsp-desktop.sh -index 54259fc4a..8ebc53738 100644 ---- a/lib/functions/bsp/bsp-desktop.sh -+++ b/lib/functions/bsp/bsp-desktop.sh -@@ -10,10 +10,7 @@ - # https://github.com/armbian/build/ - - create_desktop_package() { -- -- echo "Showing PACKAGE_LIST_DESKTOP before postprocessing" >> "${DEST}"/${LOG_SUBPATH}/output.log -- # Use quotes to show leading and trailing spaces -- echo "\"$PACKAGE_LIST_DESKTOP\"" >> "${DEST}"/${LOG_SUBPATH}/output.log -+ display_alert "bsp-desktop: PACKAGE_LIST_DESKTOP" "'${PACKAGE_LIST_DESKTOP}'" "debug" - - # Remove leading and trailing spaces with some bash monstruosity - # https://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-a-bash-variable#12973694 -@@ -24,7 +21,7 @@ create_desktop_package() { - # Remove others 'spacing characters' (like tabs) - DEBIAN_RECOMMENDS=${DEBIAN_RECOMMENDS//[[:space:]]/} - -- echo "DEBIAN_RECOMMENDS : ${DEBIAN_RECOMMENDS}" >> "${DEST}"/${LOG_SUBPATH}/output.log -+ display_alert "bsp-desktop: DEBIAN_RECOMMENDS" "'${DEBIAN_RECOMMENDS}'" "debug" - - # Replace whitespace characters by commas - PACKAGE_LIST_PREDEPENDS=${PACKAGE_LIST_PREDEPENDS// /,} -@@ -37,7 +34,7 @@ create_desktop_package() { - rm -rf "${destination}" - mkdir -p "${destination}"/DEBIAN - -- echo "${PACKAGE_LIST_PREDEPENDS}" >> "${DEST}"/${LOG_SUBPATH}/output.log -+ display_alert "bsp-desktop: PACKAGE_LIST_PREDEPENDS" "'${PACKAGE_LIST_PREDEPENDS}'" "debug" - - # set up control file - cat <<- EOF > "${destination}"/DEBIAN/control -@@ -65,9 +62,6 @@ create_desktop_package() { - - chmod 755 "${destination}"/DEBIAN/postinst - -- #display_alert "Showing ${destination}/DEBIAN/postinst" -- cat "${destination}/DEBIAN/postinst" >> "${DEST}/${LOG_SUBPATH}/bsp_postinst.log" -- - # Armbian create_desktop_package scripts - - unset aggregated_content -@@ -138,7 +132,7 @@ create_bsp_desktop_package() { - local aggregated_content="" - aggregate_all_desktop "debian/armbian-bsp-desktop/prepare.sh" $'\n' - eval "${aggregated_content}" -- [[ $? -ne 0 ]] && display_alert "prepare.sh exec error" "" "wrn" -+ [[ $? -ne 0 ]] && display_alert "prepare.sh exec error" "" "wrn" # @TODO: this is a fantasy, error would be thrown in line above - - mkdir -p "${DEB_STORAGE}/${RELEASE}" - cd "${destination}" -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index 22de78eb4..3b8c1ad7d 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -1,22 +1,3 @@ --function bla_cleanup1() { -- echo "-- bla cleanup1" 1>&2 --} --function bla_cleanup2() { -- echo "-- bla cleanup2" 1>&2 --} -- --function bla() { -- display_alert "bla starting" "bla is here! PID: $$ - BASHPID: $BASHPID" "debug" -- add_cleanup_handler bla_cleanup1 -- add_cleanup_handler bla_cleanup2 -- -- #sleep 10 -- #explode_here -- #exit 66 # exit with error -- exit_with_error "something" "wrong" -- #exit 0 # exit without error --} -- - function cli_entrypoint() { - if [[ "${ARMBIAN_ENABLE_CALL_TRACING}" == "yes" ]]; then - set -T # inherit return/debug traps -@@ -90,6 +71,28 @@ function cli_entrypoint() { - - CONFIG_PATH=$(dirname "${CONFIG_FILE}") - -+ # DEST is the main output dir. -+ # destination. # @TODO: logging this is when we can start logging to file. make sure. -+ declare DEST="${SRC}/output" -+ if [ -d "$CONFIG_PATH/output" ]; then -+ DEST="${CONFIG_PATH}/output" -+ fi -+ display_alert "Output directory DEST:" "${DEST}" "debug" -+ -+ # set unique mounting directory for this build. -+ export ARMBIAN_BUILD_UUID="$(uuidgen)" -+ display_alert "Build UUID:" "${ARMBIAN_BUILD_UUID}" "debug" -+ -+ # Super-global variables, used everywhere. The directories are NOT _created_ here, since this very early stage. -+ export WORKDIR="${SRC}/.tmp/work-${ARMBIAN_BUILD_UUID}" # WORKDIR at this stage. It will become TMPDIR later. It has special significance to `mktemp` and others! -+ export SDCARD="${SRC}/.tmp/rootfs-${ARMBIAN_BUILD_UUID}" # SDCARD (which is NOT an sdcard, but will be, maybe, one day) is where we work the rootfs before final imaging. "rootfs" stage. -+ export MOUNT="${SRC}/.tmp/mount-${ARMBIAN_BUILD_UUID}" # MOUNT ("mounted on the loop") is the mounted root on final image (via loop). "image" stage -+ export EXTENSION_MANAGER_TMP_DIR="${SRC}/.tmp/extensions-${ARMBIAN_BUILD_UUID}" # EXTENSION_MANAGER_TMP_DIR used to store extension-composed functions -+ export DESTIMG="${SRC}/.tmp/image-${ARMBIAN_BUILD_UUID}" # DESTIMG is where the backing image (raw, huge, sparse file) is kept -+ export LOGDIR="${SRC}/.tmp/logs-${ARMBIAN_BUILD_UUID}" # Will be initialized very soon, literally, below. -+ -+ LOG_SECTION=entrypoint start_logging_section # This creates LOGDIR. Hopefully. -+ - # Source the extensions manager library at this point, before sourcing the config. - # This allows early calls to enable_extension(), but initialization proper is done later. - # shellcheck source=lib/extensions.sh -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index b5b2e9ca5..8fc63c032 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -10,16 +10,6 @@ - # https://github.com/armbian/build/ - - function do_main_configuration() { -- # set unique mounting directory for this build. -- MOUNT_UUID=$(uuidgen) -- -- # Super-global variables, used everywhere. The directories are NOT _created_ here, since this is config stage, not build. -- export WORKDIR="${SRC}/.tmp/work-${MOUNT_UUID}" # WORKDIR at this stage. It will become TMPDIR later. It has special significance to `mktemp` and others! -- export SDCARD="${SRC}/.tmp/rootfs-${MOUNT_UUID}" # SDCARD (which is NOT an sdcard, but will be, maybe, one day) is where we work the rootfs before final imaging. "rootfs" stage. -- export MOUNT="${SRC}/.tmp/mount-${MOUNT_UUID}" # MOUNT ("mounted on the loop") is the mounted root on final image (via loop). "image" stage -- export EXTENSION_MANAGER_TMP_DIR="${SRC}/.tmp/extensions-${MOUNT_UUID}" # EXTENSION_MANAGER_TMP_DIR used to store extension-composed functions -- export DESTIMG="${SRC}/.tmp/image-${MOUNT_UUID}" # DESTIMG is where the backing image (raw, huge, sparse file) is kept -- - display_alert "Starting main configuration" "${MOUNT_UUID}" "info" - - # common options -@@ -439,7 +429,6 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - } - - function write_config_summary_output_file() { -- local build_script_env_file="${DEST}/${LOG_SUBPATH}/output.log" - local debug_dpkg_arch debug_uname debug_virt debug_src_mount debug_src_perms debug_src_temp_perms - debug_dpkg_arch="$(dpkg --print-architecture)" - debug_uname="$(uname -a)" -@@ -448,8 +437,8 @@ function write_config_summary_output_file() { - debug_src_perms="$(getfacl -p "${SRC}")" - debug_src_temp_perms="$(getfacl -p "${SRC}"/.tmp 2> /dev/null)" - -- display_alert "Writing build config summary to" "${build_script_env_file}" "debug" -- cat <<- EOF >> "${build_script_env_file}" -+ display_alert "Writing build config summary to" "debug log" "debug" -+ run_host_command_logged cat "1>&2" <<- EOF - ## BUILD SCRIPT ENVIRONMENT - - Repository: $REPOSITORY_URL -diff --git a/lib/functions/general/downloads.sh b/lib/functions/general/downloads.sh -index 5d36282c0..b51f0d9c4 100644 ---- a/lib/functions/general/downloads.sh -+++ b/lib/functions/general/downloads.sh -@@ -80,7 +80,6 @@ download_and_verify() { - - # download torrent first - if [[ ${USE_TORRENT} == "yes" ]]; then -- - display_alert "downloading using torrent network" "$filename" - local ariatorrent="--summary-interval=0 --auto-save-interval=0 --seed-time=0 --bt-stop-timeout=120 --console-log-level=error \ - --allow-overwrite=true --download-result=hide --rpc-save-upload-metadata=false --auto-file-renaming=false \ -@@ -90,14 +89,13 @@ download_and_verify() { - # exception. It throws error if dht.dat file does not exists. Error suppress needed only at first download. - if [[ -f "${SRC}"/cache/.aria2/dht.dat ]]; then - # shellcheck disable=SC2086 -- aria2c ${ariatorrent} -+ run_host_command_logged aria2c ${ariatorrent} - else - # shellcheck disable=SC2035 -- aria2c ${ariatorrent} &> "${DEST}"/${LOG_SUBPATH}/torrent.log -+ run_host_command_logged aria2c ${ariatorrent} - fi - # mark complete -- [[ $? -eq 0 ]] && touch "${localdir}/${filename}.complete" -- -+ touch "${localdir}/${filename}.complete" - fi - - # direct download if torrent fails -@@ -126,39 +124,38 @@ download_and_verify() { - # Verify archives with Linaro and Armbian GPG keys - - if [ x"" != x"${http_proxy}" ]; then -- (gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --list-keys 8F427EAF >> "${DEST}"/${LOG_SUBPATH}/output.log 2>&1 || gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning \ -+ (gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --list-keys 8F427EAF || gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning \ - --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-options http-proxy="${http_proxy}" \ -- --recv-keys 8F427EAF >> "${DEST}"/${LOG_SUBPATH}/output.log 2>&1) -+ --recv-keys 8F427EAF) - -- (gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --list-keys 9F0E78D5 >> "${DEST}"/${LOG_SUBPATH}/output.log 2>&1 || gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning \ -+ (gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --list-keys 9F0E78D5 || gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning \ - --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-options http-proxy="${http_proxy}" \ -- --recv-keys 9F0E78D5 >> "${DEST}"/${LOG_SUBPATH}/output.log 2>&1) -+ --recv-keys 9F0E78D5) - else -- (gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --list-keys 8F427EAF >> "${DEST}"/${LOG_SUBPATH}/output.log 2>&1 || gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning \ -+ (gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --list-keys 8F427EAF || gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning \ - --keyserver hkp://keyserver.ubuntu.com:80 \ -- --recv-keys 8F427EAF >> "${DEST}"/${LOG_SUBPATH}/output.log 2>&1) -+ --recv-keys 8F427EAF) - -- (gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --list-keys 9F0E78D5 >> "${DEST}"/${LOG_SUBPATH}/output.log 2>&1 || gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning \ -+ (gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --list-keys 9F0E78D5 || gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning \ - --keyserver hkp://keyserver.ubuntu.com:80 \ -- --recv-keys 9F0E78D5 >> "${DEST}"/${LOG_SUBPATH}/output.log 2>&1) -+ --recv-keys 9F0E78D5) - fi - - gpg --homedir "${SRC}"/cache/.gpg --no-permission-warning --verify \ -- --trust-model always -q "${localdir}/${filename}.asc" >> "${DEST}"/${LOG_SUBPATH}/output.log 2>&1 -+ --trust-model always -q "${localdir}/${filename}.asc" - [[ ${PIPESTATUS[0]} -eq 0 ]] && verified=true && display_alert "Verified" "PGP" "info" - - else -- - md5sum -c --status "${localdir}/${filename}.asc" && verified=true && display_alert "Verified" "MD5" "info" -- - fi - - if [[ $verified == true ]]; then - if [[ "${filename:(-6)}" == "tar.xz" ]]; then -- - display_alert "decompressing" -- pv -p -b -r -c -N "$(logging_echo_prefix_for_pv "decompress") ${filename}" "${filename}" | xz -dc | tar xp --xattrs --no-same-owner --overwrite -- [[ $? -eq 0 ]] && touch "${localdir}/${dirname}/.download-complete" -+ pv -p -b -r -c -N "$(logging_echo_prefix_for_pv "decompress") ${filename}" "${filename}" | -+ xz -dc | -+ tar xp --xattrs --no-same-owner --overwrite && -+ touch "${localdir}/${dirname}/.download-complete" - fi - else - exit_with_error "verification failed" -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index 2af993dc9..818541c6c 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -186,7 +186,8 @@ prepare_host() { - find "${SRC}"/output "${USERPATCHES_PATH}" -type d ! -group sudo -exec chgrp --quiet sudo {} \; - find "${SRC}"/output "${USERPATCHES_PATH}" -type d ! -perm -g+w,g+s -exec chmod --quiet g+w,g+s {} \; - fi -- mkdir -p "${DEST}"/debs-beta/extra "${DEST}"/debs/extra "${DEST}"/{config,debug,patch} "${USERPATCHES_PATH}"/overlay "${SRC}"/cache/{sources,hash,hash-beta,toolchain,utility,rootfs} "${SRC}"/.tmp -+ # @TODO: original: mkdir -p "${DEST}"/debs-beta/extra "${DEST}"/debs/extra "${DEST}"/{config,debug,patch} "${USERPATCHES_PATH}"/overlay "${SRC}"/cache/{sources,hash,hash-beta,toolchain,utility,rootfs} "${SRC}"/.tmp -+ mkdir -p "${USERPATCHES_PATH}"/overlay "${SRC}"/cache/{sources,hash,hash-beta,toolchain,utility,rootfs} "${SRC}"/.tmp - - # build aarch64 - if [[ $(dpkg --print-architecture) == amd64 ]]; then -diff --git a/lib/functions/image/initrd.sh b/lib/functions/image/initrd.sh -index a3ea4b186..de431cbbc 100644 ---- a/lib/functions/image/initrd.sh -+++ b/lib/functions/image/initrd.sh -@@ -23,7 +23,7 @@ update_initramfs() { - cp "/usr/bin/$QEMU_BINARY" "$chroot_target/usr/bin"/ - mount_chroot "$chroot_target/" - -- local logging_filter="| grep --line-buffered -v -e '.xz' -e 'ORDER ignored' -e 'Adding binary' " -+ local logging_filter="2>&1 | grep --line-buffered -v -e '.xz' -e 'ORDER ignored' -e 'Adding binary ' -e 'Adding module ' " - chroot_custom_long_running "$chroot_target" "$update_initramfs_cmd" "${logging_filter}" || { - exit_with_error "Updating initramfs FAILED" - } -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 2387f37e0..2aa7c6f7b 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -161,7 +161,7 @@ prepare_partitions() { - - # stage: create partition table - display_alert "Creating partitions" "${bootfs:+/boot: $bootfs }root: $ROOTFS_TYPE" "info" -- parted -s ${SDCARD}.raw -- mklabel ${IMAGE_PARTITION_TABLE} -+ run_host_command_logged parted -s ${SDCARD}.raw -- mklabel ${IMAGE_PARTITION_TABLE} - if [[ "${USE_HOOK_FOR_PARTITION}" == "yes" ]]; then - call_extension_method "create_partition_table" <<- 'CREATE_PARTITION_TABLE' - *only called when USE_HOOK_FOR_PARTITION=yes to create the complete partition table* -@@ -170,7 +170,7 @@ prepare_partitions() { - CREATE_PARTITION_TABLE - elif [[ $ROOTFS_TYPE == nfs ]]; then - # single /boot partition -- parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$bootfs]} ${bootstart}s "100%" -+ run_host_command_logged parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$bootfs]} ${bootstart}s "100%" - elif [[ $UEFISIZE -gt 0 ]]; then - # uefi partition + root partition - if [[ "${IMAGE_PARTITION_TABLE}" == "gpt" ]]; then -@@ -182,38 +182,38 @@ prepare_partitions() { - local rootstart=$(($uefistart + ($UEFISIZE * 2048))) - local biosend=$(($uefistart - 1)) - local uefiend=$(($rootstart - 1)) -- parted -s ${SDCARD}.raw -- mkpart bios fat32 ${biosstart}s ${biosend}s -- parted -s ${SDCARD}.raw -- mkpart efi fat32 ${uefistart}s ${uefiend}s -- parted -s ${SDCARD}.raw -- mkpart rootfs ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" -+ run_host_command_logged parted -s ${SDCARD}.raw -- mkpart bios fat32 ${biosstart}s ${biosend}s -+ run_host_command_logged parted -s ${SDCARD}.raw -- mkpart efi fat32 ${uefistart}s ${uefiend}s -+ run_host_command_logged parted -s ${SDCARD}.raw -- mkpart rootfs ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" - # transpose so BIOS is in sda14; EFI is in sda15 and root in sda1; requires sgdisk, parted cant do numbers -- sgdisk --transpose 1:14 ${SDCARD}.raw -- sgdisk --transpose 2:15 ${SDCARD}.raw -- sgdisk --transpose 3:1 ${SDCARD}.raw -+ run_host_command_logged sgdisk --transpose 1:14 ${SDCARD}.raw -+ run_host_command_logged sgdisk --transpose 2:15 ${SDCARD}.raw -+ run_host_command_logged sgdisk --transpose 3:1 ${SDCARD}.raw - # set the ESP (efi) flag on 15 -- parted -s ${SDCARD}.raw -- set 14 bios_grub on -- parted -s ${SDCARD}.raw -- set 15 esp on -+ run_host_command_logged parted -s ${SDCARD}.raw -- set 14 bios_grub on -+ run_host_command_logged parted -s ${SDCARD}.raw -- set 15 esp on - else - display_alert "Creating partitions" "UEFI+rootfs (no BIOS)" "info" - # Simple EFI + root partition on GPT, no BIOS. -- parted -s ${SDCARD}.raw -- mkpart efi fat32 ${bootstart}s ${bootend}s -- parted -s ${SDCARD}.raw -- mkpart rootfs ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" -+ run_host_command_logged parted -s ${SDCARD}.raw -- mkpart efi fat32 ${bootstart}s ${bootend}s -+ run_host_command_logged parted -s ${SDCARD}.raw -- mkpart rootfs ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" - # transpose so EFI is in sda15 and root in sda1; requires sgdisk, parted cant do numbers -- sgdisk --transpose 1:15 ${SDCARD}.raw -- sgdisk --transpose 2:1 ${SDCARD}.raw -+ run_host_command_logged sgdisk --transpose 1:15 ${SDCARD}.raw -+ run_host_command_logged sgdisk --transpose 2:1 ${SDCARD}.raw - # set the ESP (efi) flag on 15 -- parted -s ${SDCARD}.raw -- set 15 esp on -+ run_host_command_logged parted -s ${SDCARD}.raw -- set 15 esp on - fi - else -- parted -s ${SDCARD}.raw -- mkpart primary fat32 ${bootstart}s ${bootend}s -- parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" -+ run_host_command_logged parted -s ${SDCARD}.raw -- mkpart primary fat32 ${bootstart}s ${bootend}s -+ run_host_command_logged parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" - fi - elif [[ $BOOTSIZE == 0 ]]; then - # single root partition -- parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" -+ run_host_command_logged parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" - else - # /boot partition + root partition -- parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$bootfs]} ${bootstart}s ${bootend}s -- parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" -+ run_host_command_logged parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$bootfs]} ${bootstart}s ${bootend}s -+ run_host_command_logged parted -s ${SDCARD}.raw -- mkpart primary ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" - fi - - call_extension_method "post_create_partitions" <<- 'POST_CREATE_PARTITIONS' -@@ -231,12 +231,13 @@ prepare_partitions() { - - check_loop_device "$LOOP" - -- losetup $LOOP ${SDCARD}.raw -+ run_host_command_logged losetup $LOOP ${SDCARD}.raw - - # loop device was grabbed here, unlock - flock -u $FD - -- partprobe $LOOP -+ display_alert "Running partprobe" "${LOOP}" "debug" -+ run_host_command_logged partprobe $LOOP - - # stage: create fs, mount partitions, create fstab - rm -f $SDCARD/etc/fstab -@@ -259,7 +260,7 @@ prepare_partitions() { - if [[ $ROOTFS_TYPE == btrfs && $BTRFS_COMPRESSION != none ]]; then - local fscreateopt="-o compress-force=${BTRFS_COMPRESSION}" - fi -- mount ${fscreateopt} $rootdevice $MOUNT/ -+ run_host_command_logged mount ${fscreateopt} $rootdevice $MOUNT/ - # create fstab (and crypttab) entry - if [[ $CRYPTROOT_ENABLE == yes ]]; then - # map the LUKS container partition via its UUID to be the 'cryptroot' device -@@ -273,17 +274,17 @@ prepare_partitions() { - if [[ -n $bootpart ]]; then - display_alert "Creating /boot" "$bootfs on ${LOOP}p${bootpart}" - check_loop_device "${LOOP}p${bootpart}" -- mkfs.${mkfs[$bootfs]} ${mkopts[$bootfs]} ${LOOP}p${bootpart} 2>&1 -+ run_host_command_logged mkfs.${mkfs[$bootfs]} ${mkopts[$bootfs]} ${LOOP}p${bootpart} 2>&1 - mkdir -p $MOUNT/boot/ -- mount ${LOOP}p${bootpart} $MOUNT/boot/ -+ run_host_command_logged mount ${LOOP}p${bootpart} $MOUNT/boot/ - echo "UUID=$(blkid -s UUID -o value ${LOOP}p${bootpart}) /boot ${mkfs[$bootfs]} defaults${mountopts[$bootfs]} 0 2" >> $SDCARD/etc/fstab - fi - if [[ -n $uefipart ]]; then - display_alert "Creating EFI partition" "FAT32 ${UEFI_MOUNT_POINT} on ${LOOP}p${uefipart} label ${UEFI_FS_LABEL}" - check_loop_device "${LOOP}p${uefipart}" -- mkfs.fat -F32 -n "${UEFI_FS_LABEL^^}" ${LOOP}p${uefipart} 2>&1 # "^^" makes variable UPPERCASE, required for FAT32. -+ run_host_command_logged mkfs.fat -F32 -n "${UEFI_FS_LABEL^^}" ${LOOP}p${uefipart} 2>&1 # "^^" makes variable UPPERCASE, required for FAT32. - mkdir -p "${MOUNT}${UEFI_MOUNT_POINT}" -- mount ${LOOP}p${uefipart} "${MOUNT}${UEFI_MOUNT_POINT}" -+ run_host_command_logged mount ${LOOP}p${uefipart} "${MOUNT}${UEFI_MOUNT_POINT}" - echo "UUID=$(blkid -s UUID -o value ${LOOP}p${uefipart}) ${UEFI_MOUNT_POINT} vfat defaults 0 2" >> $SDCARD/etc/fstab - fi - [[ $ROOTFS_TYPE == nfs ]] && echo "/dev/nfs / nfs defaults 0 0" >> $SDCARD/etc/fstab -@@ -334,7 +335,7 @@ prepare_partitions() { - - # recompile .cmd to .scr if boot.cmd exists - [[ -f $SDCARD/boot/boot.cmd ]] && -- mkimage -C none -A arm -T script -d $SDCARD/boot/boot.cmd $SDCARD/boot/boot.scr > /dev/null 2>&1 -+ run_host_command_logged mkimage -C none -A arm -T script -d $SDCARD/boot/boot.cmd $SDCARD/boot/boot.scr - - # create extlinux config - if [[ -f $SDCARD/boot/extlinux/extlinux.conf ]]; then -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index 77d61fc2c..8c6e26081 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -19,7 +19,7 @@ create_image_from_sdcard_rootfs() { - [[ $ROOTFS_TYPE == nfs ]] && version=${version}_nfsboot - - if [[ $ROOTFS_TYPE != nfs ]]; then -- display_alert "Copying files via rsync to" "/" -+ display_alert "Copying files via rsync to" "/ at ${MOUNT}" - run_host_command_logged rsync -aHWXh \ - --exclude="/boot/*" \ - --exclude="/dev/*" \ -@@ -38,7 +38,7 @@ create_image_from_sdcard_rootfs() { - fi - - # stage: rsync /boot -- display_alert "Copying files to" "/boot" -+ display_alert "Copying files to" "/boot at ${MOUNT}" - if [[ $(findmnt --target $MOUNT/boot -o FSTYPE -n) == vfat ]]; then - # fat32 - run_host_command_logged rsync -rLtWh --info=progress0,stats1 "$SDCARD/boot" "$MOUNT" -@@ -58,11 +58,10 @@ create_image_from_sdcard_rootfs() { - } - - # DEBUG: print free space -- local freespace=$(LC_ALL=C df -h) -- # @TODO: this is very specific; we don't want it on screen ever? -- #echo $freespace >> $DEST/${LOG_SUBPATH}/debootstrap.log -- display_alert "Free SD cache" "$(echo -e "$freespace" | grep $SDCARD | awk '{print $5}')" "info" -- display_alert "Mount point" "$(echo -e "$freespace" | grep $MOUNT | head -1 | awk '{print $5}')" "info" -+ local freespace -+ freespace=$(LC_ALL=C df -h) -+ display_alert "Free SD cache" "$(echo -e "$freespace" | grep "${SDCARD}" | awk '{print $5}')" "info" -+ display_alert "Mount point" "$(echo -e "$freespace" | grep "${MOUNT}" | head -1 | awk '{print $5}')" "info" - - # stage: write u-boot, unless the deb is not there, which would happen if BOOTCONFIG=none - # exception: if we use the one from repository, install version which was downloaded from repo -@@ -78,11 +77,11 @@ create_image_from_sdcard_rootfs() { - Called before unmounting both `/root` and `/boot`. - PRE_UMOUNT_FINAL_IMAGE - -- # unmount /boot/efi first, then /boot, rootfs third, image file last # @TODO: why using lazy unmount? -+ # unmount /boot/efi first, then /boot, rootfs third, image file last - sync -- [[ $UEFISIZE != 0 ]] && umount -l "${MOUNT}${UEFI_MOUNT_POINT}" -- [[ $BOOTSIZE != 0 ]] && umount -l $MOUNT/boot -- [[ $ROOTFS_TYPE != nfs ]] && umount -l $MOUNT -+ [[ $UEFISIZE != 0 ]] && umount "${MOUNT}${UEFI_MOUNT_POINT}" -+ [[ $BOOTSIZE != 0 ]] && umount "${MOUNT}/boot" -+ [[ $ROOTFS_TYPE != nfs ]] && umount "${MOUNT}" - [[ $CRYPTROOT_ENABLE == yes ]] && cryptsetup luksClose $ROOT_MAPPER - - call_extension_method "post_umount_final_image" "config_post_umount_final_image" <<- 'POST_UMOUNT_FINAL_IMAGE' -@@ -90,7 +89,7 @@ PRE_UMOUNT_FINAL_IMAGE - Called after unmounting both `/root` and `/boot`. - POST_UMOUNT_FINAL_IMAGE - -- # to make sure its unmounted # @TODO: maybe use the recursive unmount we have now -+ # @TODO: this is simply wrong and never does anything. we should use the recursive unmounter here - while grep -Eq '(${MOUNT}|${DESTIMG})' /proc/mounts; do - display_alert "Wait for unmount" "${MOUNT}" "info" - sleep 5 -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index e73a6e2d5..64001b013 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -44,10 +44,11 @@ function start_logging_section() { - export logging_section_counter=$((logging_section_counter + 1)) # increment counter, used in filename - export CURRENT_LOGGING_COUNTER - CURRENT_LOGGING_COUNTER="$(printf "%03d" "$logging_section_counter")" -- export CURRENT_LOGGING_SECTION=${LOG_SECTION:-build} # default to "build" -- export CURRENT_LOGGING_DIR="${DEST}/${LOG_SUBPATH}" # origin: build-all-ng - @TODO: rpardini: lets revisit this later -+ export CURRENT_LOGGING_SECTION=${LOG_SECTION:-early} # default to "early", should be overwritten soon enough -+ export CURRENT_LOGGING_DIR="${LOGDIR}" # set in cli-entrypoint.sh - export CURRENT_LOGFILE="${CURRENT_LOGGING_DIR}/${CURRENT_LOGGING_COUNTER}.${CURRENT_LOGGING_SECTION}.log" - mkdir -p "${CURRENT_LOGGING_DIR}" -+ touch "${CURRENT_LOGFILE}" # Touch it, make sure it's writable. - - # Markers for CI (GitHub Actions); CI env var comes predefined as true there. - if [[ "${CI}" == "true" ]]; then # On CI, this has special meaning. -@@ -192,8 +193,13 @@ function display_alert() { - pids_info="${tool_color}(${normal_color}$$ - ${BASHPID}${tool_color})" # BASHPID is the current subshell; $$ is parent's? - fi - -+ local bashopts_info="" -+ if [[ "${SHOW_BASHOPTS}" == "yes" ]]; then -+ bashopts_info="${tool_color}(${normal_color}$-${tool_color})" # $- is the currently active bashopts -+ fi -+ - [[ -n $2 ]] && extra=" [${inline_logs_color} ${2} ${normal_color}]" -- echo -e "${normal_color}${left_marker}${padding}${level_indicator}${padding}${normal_color}${right_marker}${timing_info}${pids_info} ${normal_color}${message}${extra}${normal_color}" >&2 -+ echo -e "${normal_color}${left_marker}${padding}${level_indicator}${padding}${normal_color}${right_marker}${timing_info}${pids_info}${bashopts_info} ${normal_color}${message}${extra}${normal_color}" >&2 - - # Now write to CI, if we're running on it - if [[ "${CI}" == "true" ]] && [[ "${ci_log}" != "" ]]; then -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 3ef7071c8..0d0c887ed 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -14,11 +14,16 @@ function chroot_sdcard_apt_get() { - chroot_sdcard DEBIAN_FRONTEND=noninteractive apt-get "${apt_params[@]}" "$@" - } - --# please, please, unify around this function. if SDCARD is not enough, I'll make a mount version. -+# please, please, unify around this function. - function chroot_sdcard() { - TMPDIR="" run_host_command_logged_raw chroot "${SDCARD}" /bin/bash -e -o pipefail -c "$*" - } - -+# please, please, unify around this function. -+function chroot_mount() { -+ TMPDIR="" run_host_command_logged_raw chroot "${MOUNT}" /bin/bash -e -o pipefail -c "$*" -+} -+ - # This should be used if you need to capture the stdout produced by the command. It is NOT logged, and NOT run thru bash, and NOT quoted. - function chroot_sdcard_with_stdout() { - TMPDIR="" chroot "${SDCARD}" "$@" -@@ -127,9 +132,8 @@ function run_host_command_logged_raw() { - if [[ -f "${CURRENT_LOGFILE}" ]]; then - echo " " >> "${CURRENT_LOGFILE}" # blank line for reader's benefit - echo "-->" "$*" " <- at $(date --utc)" >> "${CURRENT_LOGFILE}" -- else -- display_alert "Command debug" "$*" "command" # A special 'command' level. - fi -+ display_alert "Command debug" "$*" "command" # A special 'command' level. - - # uncomment when desperate to understand what's going on - # echo "cmd about to run" "$@" >&2 -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index cd795ccd2..7984e3c1b 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -3,44 +3,12 @@ function prepare_and_config_main_build_single() { - # this is used instead of making the chmod in prepare_host() recursive - umask 002 - -- # destination. # @TODO: logging this is when we can start logging to file. make sure. -- if [ -d "$CONFIG_PATH/output" ]; then -- DEST="${CONFIG_PATH}"/output -- else -- DEST="${SRC}"/output -- fi -- display_alert "Determined DEST:" "${DEST}" "debug" -- - interactive_config_prepare_terminal - - # Warnings mitigation - [[ -z $LANGUAGE ]] && export LANGUAGE="en_US:en" # set to english if not set - [[ -z $CONSOLE_CHAR ]] && export CONSOLE_CHAR="UTF-8" # set console to UTF-8 if not set - -- # @TODO: rpardini: this definitely should NOT be done during config preparation. move outside -- if [[ "${CONFIG_DEFS_ONLY}" != "yes" ]]; then -- # set log path -- LOG_SUBPATH=${LOG_SUBPATH:=debug} -- mkdir -p "${DEST}/${LOG_SUBPATH}" # This creates the logging output. -- -- # compress and remove old logs, if they exist. -- if [[ -f "${DEST}/${LOG_SUBPATH}/timestamp" ]]; then -- if ls "${DEST}/${LOG_SUBPATH}/"*.log &> /dev/null; then -- display_alert "Archiving previous build logs..." "${DEST}/${LOG_SUBPATH}" "info" -- (cd "${DEST}/${LOG_SUBPATH}" && tar -czf logs-"$(< timestamp)".tgz ./*.log) # > /dev/null 2>&1 -- rm -f "${DEST}/${LOG_SUBPATH}"/*.log -- fi -- # delete compressed logs older than 7 days -- find "${DEST}"/${LOG_SUBPATH} -name '*.tgz' -mtime +7 -delete -- fi -- -- # Mark a timestamp, for next build. -- date +"%d_%m_%Y-%H_%M_%S" > "${DEST}"/${LOG_SUBPATH}/timestamp -- fi -- -- # PROGRESS_LOG_TO_FILE is either yes, or unset. (@TODO: this is still used in buildpkg) -- if [[ $PROGRESS_LOG_TO_FILE != yes ]]; then unset PROGRESS_LOG_TO_FILE; fi -- - export SHOW_WARNING=yes # If you try something that requires EXPERT=yes. - - display_alert "Starting single build process" "${BOARD}" "info" -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index a43659f43..270145b04 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -68,7 +68,8 @@ function build_rootfs_and_image() { - LOG_SECTION="rootfs_apt_get_autoremove" do_with_logging apt_purge_unneeded_packages - - # create list of installed packages for debug purposes -- chroot $SDCARD /bin/bash -c "dpkg --get-selections" | grep -v deinstall | awk '{print $1}' | cut -f1 -d':' > $DEST/${LOG_SUBPATH}/installed-packages-${RELEASE}$([[ ${BUILD_MINIMAL} == yes ]] && echo "-minimal")$([[ ${BUILD_DESKTOP} == yes ]] && echo "-desktop").list.log 2>&1 -+ display_alert "Recording list of installed packages" "debug log" "debug" -+ chroot_sdcard dpkg --get-selections "| grep -v deinstall | awk '{print \$1}' | cut -f1 -d':' 1>&2" - - # clean up / prepare for making the image - umount_chroot "$SDCARD" -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 7732a5b80..4188a6a48 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -1,4 +1,4 @@ --install_distribution_agnostic() { -+function install_distribution_agnostic() { - display_alert "Installing distro-agnostic part of rootfs" "install_distribution_agnostic" "debug" - - # install rootfs encryption related packages separate to not break packages cache -diff --git a/lib/functions/rootfs/rootfs-desktop.sh b/lib/functions/rootfs/rootfs-desktop.sh -index 3564d8df2..b0785949a 100644 ---- a/lib/functions/rootfs/rootfs-desktop.sh -+++ b/lib/functions/rootfs/rootfs-desktop.sh -@@ -62,14 +62,10 @@ add_apt_sources() { - } - - add_desktop_package_sources() { -- -- # Myy : I see Snap and Flatpak coming up in the next releases -- # so... let's prepare for that - add_apt_sources - chroot_sdcard_apt_get "update" -- ls -l "${SDCARD}/etc/apt/sources.list.d" >> "${DEST}/${LOG_SUBPATH}/desktop_packages_apt_sources.log" -- cat "${SDCARD}/etc/apt/sources.list" >> "${DEST}/${LOG_SUBPATH}/desktop_packages_apt_sources.log" -- -+ run_host_command_logged ls -l "${SDCARD}/etc/apt/sources.list.d" -+ run_host_command_logged cat "${SDCARD}/etc/apt/sources.list" - } - - # a-kind-of-hook, called by install_distribution_agnostic() if it's a desktop build - -From 11d89f69e44b97e6f494a92ea688099f2c9b8370 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 28 Feb 2022 20:36:55 +0100 -Subject: [PATCH] logging: blue groups if `SHOW_DEBUG=yes` or `SHOW_GROUPS=yes` - (console equivalent of CI's avocado) - ---- - lib/functions/logging/logging.sh | 14 +++++++++++++- - 1 file changed, 13 insertions(+), 1 deletion(-) - -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index cb6876420..e73a6e2d5 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -50,8 +50,10 @@ function start_logging_section() { - mkdir -p "${CURRENT_LOGGING_DIR}" - - # Markers for CI (GitHub Actions); CI env var comes predefined as true there. -- if [[ "${CI}" == "true" ]]; then -+ if [[ "${CI}" == "true" ]]; then # On CI, this has special meaning. - echo "::group::[🥑] Group ${CURRENT_LOGGING_SECTION}" -+ else -+ display_alert "start group" "<${CURRENT_LOGGING_SECTION}>" "group" - fi - return 0 - } -@@ -60,6 +62,8 @@ function finish_logging_section() { - # Close opened CI group. - if [[ "${CI}" == "true" ]]; then - echo "::endgroup::" -+ else -+ display_alert "finish group" "" "group" - fi - } - -@@ -156,6 +160,14 @@ function display_alert() { - inline_logs_color="\e[1;33m" - ;; - -+ group) -+ if [[ "${SHOW_DEBUG}" != "yes" && "${SHOW_GROUPS}" != "yes" ]]; then # show when debugging, or when specifically requested -+ return 0 -+ fi -+ level_indicator="🦋" -+ inline_logs_color="\e[1;36m" # cyan -+ ;; -+ - command) - if [[ "${SHOW_COMMAND}" != "yes" ]]; then # enable to log all calls to external cmds - return 0 - -From c3f70639f0f0323baef75950f664e10517ef94fb Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 28 Feb 2022 17:20:18 +0100 -Subject: [PATCH] armbian-next: shut down some too-verbose logging: logo - building and update-initramfs - ---- - lib/functions/image/initrd.sh | 3 ++- - lib/functions/rootfs/boot_logo.sh | 3 ++- - 2 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/lib/functions/image/initrd.sh b/lib/functions/image/initrd.sh -index 8c90321a1..a3ea4b186 100644 ---- a/lib/functions/image/initrd.sh -+++ b/lib/functions/image/initrd.sh -@@ -23,7 +23,8 @@ update_initramfs() { - cp "/usr/bin/$QEMU_BINARY" "$chroot_target/usr/bin"/ - mount_chroot "$chroot_target/" - -- chroot_custom_long_running "$chroot_target" "$update_initramfs_cmd" || { -+ local logging_filter="| grep --line-buffered -v -e '.xz' -e 'ORDER ignored' -e 'Adding binary' " -+ chroot_custom_long_running "$chroot_target" "$update_initramfs_cmd" "${logging_filter}" || { - exit_with_error "Updating initramfs FAILED" - } - display_alert "Updated initramfs." "${update_initramfs_cmd}" "info" -diff --git a/lib/functions/rootfs/boot_logo.sh b/lib/functions/rootfs/boot_logo.sh -index 4b5e98aa9..5b2861e57 100644 ---- a/lib/functions/rootfs/boot_logo.sh -+++ b/lib/functions/rootfs/boot_logo.sh -@@ -102,7 +102,8 @@ function boot_logo() { - --blob "${SDCARD}"/tmp/throbber72.rgb \ - --blob "${SDCARD}"/tmp/throbber73.rgb \ - --blob "${SDCARD}"/tmp/throbber74.rgb \ -- "${SDCARD}"/lib/firmware/bootsplash.armbian -+ "${SDCARD}"/lib/firmware/bootsplash.armbian \ -+ "| grep --line-buffered -v -e 'File header' -e 'Picture header' -e 'Blob header' -e 'length:' -e 'type:' -e 'picture_id:' -e 'bg_' -e 'num_' -e '^$'" - - if [[ $BOOT_LOGO == yes || $BOOT_LOGO == desktop && $BUILD_DESKTOP == yes ]]; then - [[ -f "${SDCARD}"/boot/armbianEnv.txt ]] && grep -q '^bootlogo' "${SDCARD}"/boot/armbianEnv.txt && - -From 9218d4a1196a4b7d0f303a972e2f5c293e789d90 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 28 Feb 2022 15:43:03 +0100 -Subject: [PATCH] armbian-next: git/patching, kernel: use date from git as - mtime minimum for patched files - -- use revision's date from git log as mtime for all fetch_from_repo -- fix patched files date at least checkout date, otherwise some patches never build ---- - lib/functions/compilation/kernel.sh | 7 ++++ - lib/functions/compilation/patch/fasthash.sh | 26 +++++++------- - lib/functions/compilation/patch/patching.sh | 56 +++++++++++++---------------- - lib/functions/general/git.sh | 36 ++++++++++++------- - 4 files changed, 67 insertions(+), 58 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 54304e34f..68a748d46 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -43,7 +43,9 @@ function run_kernel_make_long_running() { - function compile_kernel() { - local kernel_work_dir="${SRC}/cache/sources/${LINUXSOURCEDIR}" - display_alert "Kernel build starting" "${LINUXSOURCEDIR}" "info" -+ declare checked_out_revision_mtime="" # set by fetch_from_repo - LOG_SECTION="kernel_prepare_git" do_with_logging do_with_hooks kernel_prepare_git -+ declare kernel_base_revision_mtime="${checked_out_revision_mtime}" - LOG_SECTION="kernel_maybe_clean" do_with_logging do_with_hooks kernel_maybe_clean - local version hash pre_patch_version - local kernel_packaging_target -@@ -66,6 +68,8 @@ function compile_kernel() { - - function kernel_prepare_git() { - if [[ -n $KERNELSOURCE ]]; then -+ [[ -d "${kernel_work_dir}" ]] && "${kernel_work_dir}" && fasthash_debug "pre git, existing tree" -+ - display_alert "Downloading sources" "kernel" "git" - - # Does not work well with rpi for example: GIT_WARM_REMOTE_SHALLOW_AT_TAG="v${KERNEL_MAJOR_MINOR}" \ -@@ -127,6 +131,9 @@ function kernel_patching() { - ## - (always) produce a fasthash: represents "what would be done" (eg: md5 of a patch, crc32 of description). - ## - (optionally) execute modification against living tree (eg: apply a patch, copy a file, etc). only if `DO_MODIFY=yes` - ## - (always) call mark_change_commit with the description of what was done and fasthash. -+ declare -i patch_minimum_target_mtime="${kernel_base_revision_mtime}" -+ display_alert "patch_minimum_target_mtime:" "${patch_minimum_target_mtime}" "debug" -+ - initialize_fasthash "kernel" "${hash}" "${pre_patch_version}" "${kernel_work_dir}" - fasthash_debug "init" - -diff --git a/lib/functions/compilation/patch/fasthash.sh b/lib/functions/compilation/patch/fasthash.sh -index 0e0cc60f3..8158ab477 100644 ---- a/lib/functions/compilation/patch/fasthash.sh -+++ b/lib/functions/compilation/patch/fasthash.sh -@@ -20,7 +20,7 @@ function report_fasthash() { - function initialize_fasthash() { - display_alert "initialize_fasthash" "$*" "debug" - return 0 -- declare -a fast_hash_list=() -+ declare -a fast_hash_list=() # @TODO: declaring here won't do it any good, this is a shared var - } - - function fasthash_branch() { -@@ -43,25 +43,25 @@ function fasthash_debug() { - sort -n | tail -n 10 1>&2 - } - --function get_file_modification_time() { -- local file_date -+function get_file_modification_time() { # @TODO: This is almost always called from a subshell. No use throwing errors? -+ local -i file_date - if [[ ! -f "${1}" ]]; then - exit_with_error "Can't get modification time of nonexisting file" "${1}" -+ return 1 - fi -- -- # [[CC]YY]MMDDhhmm.[ss] - it is NOT a valid integer -- file_date=$(date +%Y%m%d%H%M.%S -r "${1}") -- display_alert "Got date ${file_date} for file" "${1}" "debug" -- -- # @TODO: if MIN_PATCH_AGE -+ # YYYYMMDDhhmm.ss - it is NOT a valid integer, but is what 'touch' wants for its "-t" parameter -+ # YYYYMMDDhhmmss - IS a valid integer and we can do math to it. 'touch' code will format it later -+ file_date=$(date +%Y%m%d%H%M%S -r "${1}") - echo -n "${file_date}" -- - return 0 - } - -+# This is for simple "set without thinking" usage, date preservation is done directly by process_patch_file - function set_files_modification_time() { -- local mtime="${1}" -+ local -i mtime="${1}" -+ local formatted_mtime - shift -- display_alert "Setting date ${mtime} " "${*}" "debug" -- touch -m -t "${mtime}" "${@}" -+ display_alert "Setting date ${mtime}" "${*} (no newer check)" "debug" -+ formatted_mtime="${mtime:0:12}.${mtime:12}" -+ touch --no-create -m -t "${formatted_mtime}" "${@}" - } -diff --git a/lib/functions/compilation/patch/patching.sh b/lib/functions/compilation/patch/patching.sh -index 32351d1b8..df253d969 100644 ---- a/lib/functions/compilation/patch/patching.sh -+++ b/lib/functions/compilation/patch/patching.sh -@@ -81,49 +81,41 @@ advanced_patch() { - # : additional status text - # - process_patch_file() { -- local patch=$1 -- local status=$2 -- local patch_date -- -- # get the modification date of the patch. make it not less than MIN_PATCH_AGE, if set. -- # [[CC]YY]MMDDhhmm[.ss] time format -- patch_date=$(get_file_modification_time "${patch}") -- -- # detect and remove files which patch will create -- lsdiff -s --strip=1 "${patch}" | grep '^+' | awk '{print $2}' | xargs -I % sh -c 'rm -f %' -- -- # store an array of the files that patch will modify, we'll set their modification times after the fact -- declare -a patched_files -- mapfile -t patched_files < <(lsdiff -s --strip=1 "${patch}" | awk '{print $2}') -- -- # @TODO: try patching with `git am` first, so git contains the patch commit info/msg. -- For future git-based hashing. -- # shellcheck disable=SC2015 # noted, thanks. I need to handle exit code here. -- patch --batch -p1 -N < "${patch}" && { -- set_files_modification_time "${patch_date}" "${patched_files[@]}" -- display_alert "* $status $(basename "${patch}")" "" "info" -- } || { -- display_alert "* $status $(basename "${patch}")" "failed" "wrn" -- [[ $EXIT_PATCHING_ERROR == yes ]] && exit_with_error "Aborting due to" "EXIT_PATCHING_ERROR" -- } -- return 0 # short-circuit above, avoid exiting with error --} --function new_process_patch_file() { -- local patch="$1" # full filename -- local status="$2" # message, may contain ANSI -+ local patch="${1}" -+ local status="${2}" -+ local -i patch_date - local relative_patch="${patch##"${SRC}"/}" # ${FOO##prefix} remove prefix from FOO - - # report_fashtash_should_execute is report_fasthash returns true only if we're supposed to apply the patch on disk. - if report_fashtash_should_execute file "${patch}" "Apply patch ${relative_patch}"; then -+ -+ # get the modification date of the patch. make it not less than MIN_PATCH_AGE, if set. -+ patch_date=$(get_file_modification_time "${patch}") -+ # shellcheck disable=SC2154 # patch_minimum_target_mtime can be declared in outer scope -+ if [[ "${patch_minimum_target_mtime}" != "" ]]; then -+ if [[ ${patch_date} -lt ${patch_minimum_target_mtime} ]]; then -+ display_alert "Patch before minimum date" "${patch_date} -lt ${patch_minimum_target_mtime}" "debug" -+ patch_date=${patch_minimum_target_mtime} -+ fi -+ fi -+ - # detect and remove files which patch will create - lsdiff -s --strip=1 "${patch}" | grep '^+' | awk '{print $2}' | xargs -I % sh -c 'rm -f %' - -+ # store an array of the files that patch will add or modify, we'll set their modification times after the fact -+ declare -a patched_files -+ mapfile -t patched_files < <(lsdiff -s --strip=1 "${patch}" | grep -e '^+' -e '^!' | awk '{print $2}') -+ - # @TODO: try patching with `git am` first, so git contains the patch commit info/msg. -- For future git-based hashing. - # shellcheck disable=SC2015 # noted, thanks. I need to handle exit code here. - patch --batch -p1 -N < "${patch}" && { -- display_alert "* ${status} ${relative_patch}" "" "info" || true -+ # Fix the dates. -+ set_files_modification_time "${patch_date}" "${patched_files[@]}" -+ -+ display_alert "* $status ${relative_patch}" "" "info" - } || { -- display_alert "* ${status} ${relative_patch}" "failed" "wrn" -- [[ $EXIT_PATCHING_ERROR == yes ]] && exit_with_error "Aborting due to EXIT_PATCHING_ERROR" "Patch ${relative_patch} failed" -+ display_alert "* $status ${relative_patch}" "failed" "wrn" -+ [[ $EXIT_PATCHING_ERROR == yes ]] && exit_with_error "Aborting due to" "EXIT_PATCHING_ERROR" - } - mark_fasthash_done # will do git commit, associate fasthash to real hash. - fi -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 73c066be4..c4477ca0a 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -138,6 +138,8 @@ fetch_from_repo() { - - fi # offline - -+ local checkout_from="HEAD" # Probably best to use the local revision? -+ - if [[ "${changed}" == "true" ]]; then - git_handle_cold_and_warm_bundle_remotes # Delegate to function to find or create cache if appropriate. - -@@ -153,21 +155,25 @@ fetch_from_repo() { - head) improved_git_fetch --no-tags origin HEAD ;; - esac - display_alert "Origin fetch completed, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size again -- -- display_alert "Checking out" "$dir $ref_name" -- regular_git checkout -f -q FETCH_HEAD -- regular_git clean -q -d -f -- display_alert "After checkout, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -- -- elif [[ -n $(git status -uno --porcelain --ignore-submodules=all) ]]; then # if not changed, but dirty... -- display_alert "Cleaning git dir" "$(git status -s | wc -l) files" # working directory is not clean, show it -- regular_git checkout -f -q HEAD # Return the files that are tracked by git to the initial state. -- regular_git clean -q -d -f # Files that are not tracked by git and were added when the patch was applied must be removed. -- else # not changed, not dirty. -- display_alert "Up to date" "$dir $ref_name at revision ${local_hash}" # working directory is clean, nothing to do -+ checkout_from="FETCH_HEAD" - fi - -- display_alert "Final working copy size" "$(du -h -s | awk '{print $1}')" "debug" -+ # should be declared in outside scope, so can be read. -+ checked_out_revision_mtime="$(git log --date='format:%Y%m%d%H%M%S' --format='format:%ad' -1 "${checkout_from}")" -+ display_alert "checked_out_revision_mtime set!" "${checked_out_revision_mtime}" "debug" -+ -+ display_alert "Cleaning git dir" "$(git status -s 2> /dev/null | wc -l) files" # working directory is not clean, show it -+ -+ fasthash_debug "before git checkout of $dir $ref_name" # fasthash interested in this -+ regular_git checkout -f -q "${checkout_from}" # Return the files that are tracked by git to the initial state. -+ -+ fasthash_debug "before git clean of $dir $ref_name" -+ regular_git clean -q -d -f # Files that are not tracked by git and were added when the patch was applied must be removed. -+ -+ # set the checkout date on all the versioned files. -+ git ls-tree -r -z --name-only "${checkout_from}" | xargs -0 -- touch -m -t "${checked_out_revision_mtime:0:12}.${checked_out_revision_mtime:12}" -+ -+ fasthash_debug "after setting checkout time for $dir $ref_name" #yeah - - if [[ -f .gitmodules ]]; then - display_alert "Updating submodules" "" "ext" -@@ -182,9 +188,13 @@ fetch_from_repo() { - else - sref="head" - fi -+ # @TODO: in case of the bundle stuff this will fail terribly - fetch_from_repo "$surl" "$workdir/$i" "$sref" - done - fi -+ -+ display_alert "Final working copy size" "$(du -h -s | awk '{print $1}')" "debug" -+ fasthash_debug "at the end of fetch_from_repo $dir $ref_name" - } - - function git_fetch_from_bundle_file() { - -From 839e3ab254e7d5f91fa5eeb1f456e66bf0483a1c Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 28 Feb 2022 00:20:41 +0100 -Subject: [PATCH] armbian-next: first attempt at kernel packaging rework; just - linux-image pkg, no dtbs yet - -- correctly predict KERNELRELEASE, put image-dtbs in the right spot for flash-kernel -- remove dpkg-gencontrol, do it all directly ---- - lib/functions/compilation/kernel-debs.sh | 154 ++++++++++++++++++++++++++ - lib/functions/compilation/kernel.sh | 92 +++++++++------ - lib/functions/compilation/patch/kernel-pkg.sh | 3 + - lib/library-functions.sh | 9 ++ - 4 files changed, 227 insertions(+), 31 deletions(-) - -diff --git a/lib/functions/compilation/kernel-debs.sh b/lib/functions/compilation/kernel-debs.sh -new file mode 100644 -index 000000000..26a9bc3cd ---- /dev/null -+++ b/lib/functions/compilation/kernel-debs.sh -@@ -0,0 +1,154 @@ -+# This is a re-imagining of mkdebian and builddeb from the kernel tree. -+ -+# We wanna produce Debian/Ubuntu compatible packages so we're able to use their standard tools, like -+# `flash-kernel`, `u-boot-menu`, `grub2`, and others, so we gotta stick to their conventions. -+ -+# Headers are important. We wanna be compatible with `dkms` stuff from Ubuntu, like `nvidia-driver-xxx`. -+# This is affected by cross-compilation: Armbian usually builds arm64 on amd64, and the KBUILD tools -+# that would be included in such headers package will be the wrong arch for `dkms`ing on target arm64 machine. -+ -+# The main difference is that this is NOT invoked from KBUILD's Makefile, but instead -+# directly by Armbian, with references to the dirs where KBUILD's -+# `make install dtbs_install modules_install headers_install` have already successfully been run. -+ -+# This will create a SET of packages. It should always create these: -+# image package: vmlinuz and such, config, modules, and dtbs (if exist) in /usr/lib/xxx -+# libc header package: just the libc headers -+# linux-headers package: just the image headers. (what about the binaries? cross compilation?) -+# linux-dtbs package: only dtbs, if they exist. in /boot/ -+ -+# So this will handle -+# - Creating .deb package skeleton dir (mktemp) -+# - Moving/copying around of KBUILD installed stuff for Debian/Ubuntu/Armbian standard locations, in the correct packages -+# - Separating headers, between image and libc packages. -+# - Fixing the symlinks to stuff so they fit a target system. -+# - building the .debs; -+ -+is_enabled() { -+ grep -q "^$1=y" include/config/auto.conf -+} -+ -+if_enabled_echo() { -+ if is_enabled "$1"; then -+ echo -n "$2" -+ elif [ $# -ge 3 ]; then -+ echo -n "$3" -+ fi -+} -+ -+function prepare_kernel_packaging_debs() { -+ declare kernel_work_dir="${1}" -+ declare kernel_version="${2}" -+ declare -n tmp_kernel_install_dirs="${3}" # nameref to declare -n kernel_install_dirs dictionary -+ declare kernel_package_dir -+ -+ kernel_package_dir=$(mktemp -d "${WORKDIR}/kernel.image.package.XXXXXXXXX") # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. -+ display_alert "kernel_package_dir" "${kernel_package_dir}" "debug" -+ -+ # Some variables and settings used throughout the script -+ declare kernel_version_family="${kernel_version}-${LINUXFAMILY}" -+ declare packageversion="${REVISION}" -+ declare linux_image_package_name="linux-image-${BRANCH}-${LINUXFAMILY}" -+ -+ mkdir -p "${kernel_package_dir}/DEBIAN" -+ -+ # Generate copyright file -+ mkdir -p "${kernel_package_dir}/usr/share/doc/${linux_image_package_name}" -+ cat <<- EOF > "${kernel_package_dir}/usr/share/doc/${linux_image_package_name}/copyright" -+ This is a packaged Armbian patched version of the Linux kernel. -+ -+ The sources may be found at most Linux archive sites, including: -+ https://www.kernel.org/pub/linux/kernel -+ -+ Copyright: 1991 - 2018 Linus Torvalds and others. -+ -+ The git repository for mainline kernel development is at: -+ git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; version 2 dated June, 1991. -+ -+ On Debian GNU/Linux systems, the complete text of the GNU General Public -+ License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. -+ EOF -+ -+ # Generate a control file -+ cat <<- EOF > "${kernel_package_dir}/DEBIAN/control" -+ Package: ${linux_image_package_name} -+ Version: ${packageversion} -+ Architecture: ${ARCH} -+ Maintainer: ${MAINTAINER} <${MAINTAINERMAIL}> -+ Section: kernel -+ Provides: linux-image, linux-image-armbian, armbian-$BRANCH -+ Description: Linux kernel, armbian version $kernel_version_family $BRANCH -+ This package contains the Linux kernel, modules and corresponding other -+ files, kernel_version_family: $kernel_version_family. -+ EOF -+ -+ # Install the maintainer scripts -+ # Note: hook scripts under /etc/kernel are also executed by official Debian -+ # kernel packages, as well as kernel packages built using make-kpkg. -+ # make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and -+ # so do we; recent versions of dracut and initramfs-tools will obey this. -+ declare debhookdir="/etc/kernel" -+ for script in postinst postrm preinst prerm; do -+ mkdir -p "${kernel_package_dir}${debhookdir}/${script}.d" -+ cat <<- EOF > "${kernel_package_dir}/DEBIAN/${script}" -+ #!/bin/bash -+ set -x -+ set -e -+ -+ # Pass maintainer script parameters to hook scripts -+ export DEB_MAINT_PARAMS="\$*" -+ -+ # Tell initramfs builder whether it's wanted -+ export INITRD=$(if_enabled_echo CONFIG_BLK_DEV_INITRD Yes No) -+ -+ test -d $debhookdir/$script.d && run-parts --arg="$kernel_version_family" --arg="/$installed_image_path" $debhookdir/$script.d -+ exit 0 -+ EOF -+ chmod 755 "${kernel_package_dir}/DEBIAN/${script}" -+ done -+ -+ display_alert "tmp_kernel_install_dirs INSTALL_PATH:" "${tmp_kernel_install_dirs[INSTALL_PATH]}" "debug" -+ display_alert "tmp_kernel_install_dirs INSTALL_MOD_PATH:" "${tmp_kernel_install_dirs[INSTALL_MOD_PATH]}" "debug" -+ display_alert "tmp_kernel_install_dirs INSTALL_HDR_PATH:" "${tmp_kernel_install_dirs[INSTALL_HDR_PATH]}" "debug" -+ -+ display_alert "Kernel install dir" "tree 1" "debug" -+ run_host_command_logged tree -C -h --du -d -L 3 "${tmp_kernel_install_dirs[INSTALL_PATH]}/../.." -+ -+ run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_PATH]}" "${kernel_package_dir}/" # /boot stuff -+ run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_MOD_PATH]}/lib" "${kernel_package_dir}/" # so "lib" stuff sits at the root -+ -+ if [[ -d "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" ]]; then -+ display_alert "tmp_kernel_install_dirs INSTALL_DTBS_PATH:" "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" "debug" -+ display_alert "Kernel build will produce DTBs package!" "DTBs YES PACKAGE" "debug" -+ -+ # /usr/lib/linux-image-${kernel_version_family} is wanted by flash-kernel -+ # /lib/firmware/${kernel_version_family}/device-tree/ would also be acceptable -+ mkdir -p "${kernel_package_dir}/usr/lib" -+ run_host_command_logged cp -rp "${tmp_kernel_install_dirs[INSTALL_DTBS_PATH]}" "${kernel_package_dir}/usr/lib/linux-image-${kernel_version_family}" -+ fi -+ -+ run_host_command_logged chown -R root:root "${kernel_package_dir}" # Fix ownership and permissions -+ run_host_command_logged chmod -R go-w "${kernel_package_dir}" # Fix ownership and permissions -+ run_host_command_logged chmod -R a+rX "${kernel_package_dir}" # in case we are in a restrictive umask environment like 0077 -+ run_host_command_logged chmod -R ug-s "${kernel_package_dir}" # in case we build in a setuid/setgid directory -+ -+ cd "${kernel_package_dir}" || exit_with_error "major failure 774" -+ -+ # create md5sums file. needed? @TODO: convert to subshell? -+ sh -c "cd '${kernel_package_dir}'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' | xargs -r0 md5sum > DEBIAN/md5sums" -+ -+ declare unpacked_size -+ unpacked_size="$(du -h -s "${kernel_package_dir}" | awk '{print $1}')" -+ display_alert "Unpacked linux-kernel image" "${unpacked_size}" "debug" -+ -+ # Show it -+ display_alert "Package dir" "tree 2" "debug" -+ run_host_command_logged tree -C -h --du -d -L 3 "${kernel_package_dir}" -+ -+ run_host_command_logged dpkg-deb ${DEB_COMPRESS:+-Z$DEB_COMPRESS} --build "${kernel_package_dir}" "${kernel_work_dir}/.." # not KDEB compress, we're not under a Makefile -+ -+} -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 8c5db9e92..54304e34f 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -9,20 +9,19 @@ function run_kernel_make() { - ) - - common_make_params_quoted=( -- "$CTHREADS" # Parallel compile, "-j X" for X cpus -- "LOCALVERSION=-${LINUXFAMILY}" # Kernel param -- "KDEB_PKGVERSION=${REVISION}" # deb package version -- "KDEB_COMPRESS=${DEB_COMPRESS}" # dpkg compression for deb -- "BRANCH=${BRANCH}" # @TODO: rpardini: Wonder what BRANCH is used for during packaging? -- "INSTALL_HDR_PATH=debian/hdrtmp/usr" # For packaging headers_install used for headers -- "INSTALL_MOD_PATH=debian/tmp" # For packaging modules for image package -- "INSTALL_DTBS_PATH=debian/dtbtmp/boot/dtbs_install" # For packaging DTBs for dtb package -- "ARCH=${ARCHITECTURE}" # Why? -- "KBUILD_DEBARCH=${ARCH}" # Where used? -- "DEBFULLNAME=${MAINTAINER}" # For changelog generation -- "DEBEMAIL=${MAINTAINERMAIL}" # idem -- "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # Prefix for tool invocations. -- "KCFLAGS=-fdiagnostics-color=always" # Force GCC colored messages. -+ "$CTHREADS" # Parallel compile, "-j X" for X cpus -+ "ARCH=${ARCHITECTURE}" # Key param. Everything depends on this. -+ "LOCALVERSION=-${LINUXFAMILY}" # Change the internal kernel version to include the family.? -+ -+ "BRANCH=${BRANCH}" # For mkdebian/builddep packaging only -+ "KBUILD_DEBARCH=${ARCH}" # For mkdebian/builddep packaging only -+ "KDEB_PKGVERSION=${REVISION}" # For mkdebian/builddep packaging only -+ "KDEB_COMPRESS=${DEB_COMPRESS}" # For mkdebian/builddep packaging only -+ "DEBFULLNAME=${MAINTAINER}" # For mkdebian/builddep packaging only -+ "DEBEMAIL=${MAINTAINERMAIL}" # For mkdebian/builddep packaging only -+ "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # For mkdebian/builddep packaging only -+ -+ "KCFLAGS=-fdiagnostics-color=always" # Force GCC colored messages. - ) - - # last statement, so it passes the result to calling function. -@@ -58,8 +57,9 @@ function compile_kernel() { - LOG_SECTION="kernel_make_headers_dtbs_image_modules" do_with_logging do_with_hooks kernel_make_headers_dtbs_image_modules - LOG_SECTION="kernel_package" do_with_logging do_with_hooks kernel_package - display_alert "Done with" "kernel compile" "debug" -- cd .. || exit -+ cd "${kernel_work_dir}/.." || exit - rm -f linux-firmware-image-*.deb # remove firmware image packages here - easier than patching ~40 packaging scripts at once -+ #run_host_command_logged dpkg-deb --contents ./*.deb || true - rsync --remove-source-files -rq ./*.deb "${DEB_STORAGE}/" || exit_with_error "Failed moving kernel DEBs" - return 0 - } -@@ -323,30 +323,60 @@ function kernel_make_headers_dtbs_image_modules() { - } - - function kernel_package() { -+ cd "${kernel_work_dir}" -+ -+ declare kernel_dest_install_dir -+ kernel_dest_install_dir=$(mktemp -d "${WORKDIR}/kernel.temp.install.target.XXXXXXXXX") # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. -+ -+ # define dict with vars passed and target directories -+ declare -A kernel_install_dirs=( -+ ["INSTALL_PATH"]="${kernel_dest_install_dir}/image/boot" # Used by `make install` -+ ["INSTALL_HDR_PATH"]="${kernel_dest_install_dir}/headers" # Used by `make headers_install` -+ ["INSTALL_MOD_PATH"]="${kernel_dest_install_dir}/modules" # Used by `make modules_install` -+ ) -+ -+ local -a prepackage_targets=(install modules_install headers_install) -+ if [[ "${KERNEL_BUILD_DTBS:-yes}" == "yes" ]]; then -+ display_alert "Kernel build will produce DTBs!" "DTBs YES" "debug" -+ prepackage_targets+=("dtbs_install") -+ kernel_install_dirs+=(["INSTALL_DTBS_PATH"]="${kernel_dest_install_dir}/dtbs") # Used by `make dtbs_install` -+ fi - -- local -a prepackage_targets=(modules_install headers_install) -- [[ "${KERNEL_BUILD_DTBS:-yes}" == "yes" ]] && prepackage_targets+=("dtbs_install") -+ display_alert "Packaging Kernel" "${LINUXCONFIG} $kernel_packaging_target at ${kernel_dest_install_dir}" "info" - -- display_alert "Packaging Kernel" "${LINUXCONFIG} $kernel_packaging_target" "info" -+ # loop over the keys above, get the value, create param value in array; also mkdir the dir -+ declare -a install_make_params_quoted -+ local dir_key -+ for dir_key in "${!kernel_install_dirs[@]}"; do -+ local dir="${kernel_install_dirs["${dir_key}"]}" -+ local value="${dir_key}=${dir}" -+ mkdir -p "${dir}" -+ display_alert "Adding kernel packaging param" "${value}" "debug" -+ install_make_params_quoted+=("${value}") -+ done - -+ # See https://www.kernel.org/doc/Documentation/kbuild/headers_install.txt - # Prepare for packaging, using the exact same options as original compile. - display_alert "Installing kernel headers and modules for packaging" "${LINUXCONFIG} ${prepackage_targets[*]}" "info" - fasthash_debug "pre-prepackage" -- make_filter="| grep --line-buffered -v -e 'INSTALL' -e 'SIGN' -e 'XZ'" run_kernel_make_long_running "${prepackage_targets[@]}" -+ make_filter="| grep --line-buffered -v -e 'INSTALL' -e 'SIGN' -e 'XZ'" run_kernel_make_long_running "${install_make_params_quoted[@]@Q}" "${prepackage_targets[@]}" - fasthash_debug "post-prepackage" - -- # produce deb packages: image, headers, firmware, dtb -- # This mostly only does -- fasthash_debug "pre-packaging" -- run_kernel_make_long_running $kernel_packaging_target -- fasthash_debug "post-packaging" -- -- if [[ "${DOUBLE_COMPILE_KERNEL}" == "yes" ]]; then -- display_alert "DOUBLE Packaging Kernel, Headers and DTBs" "${LINUXCONFIG} $kernel_packaging_target" "info" -- fasthash_debug "pre-double-packaging" -- run_kernel_make_long_running $kernel_packaging_target -- fasthash_debug "post-double-packaging" -- fi -+ cd "${kernel_work_dir}" -+ prepare_kernel_packaging_debs "${kernel_work_dir}" "${version}" kernel_install_dirs -+ -+ ### # produce deb packages: image, headers, firmware, dtb -+ ### # This mostly only does -+ ### fasthash_debug "pre-packaging" -+ ### run_kernel_make_long_running "${install_make_params_quoted[@]@Q}" $kernel_packaging_target -+ ### fasthash_debug "post-packaging" -+ ### -+ ### if [[ "${DOUBLE_COMPILE_KERNEL}" == "yes" ]]; then -+ ### display_alert "DOUBLE Packaging Kernel, Headers and DTBs" "${LINUXCONFIG} $kernel_packaging_target" "info" -+ ### fasthash_debug "pre-double-packaging" -+ ### run_kernel_make_long_running $kernel_packaging_target -+ ### fasthash_debug "post-double-packaging" -+ ### fi - - display_alert "Package building done" "${LINUXCONFIG} $kernel_packaging_target" "info" - } -diff --git a/lib/functions/compilation/patch/kernel-pkg.sh b/lib/functions/compilation/patch/kernel-pkg.sh -index e1653a66e..51e163b1e 100644 ---- a/lib/functions/compilation/patch/kernel-pkg.sh -+++ b/lib/functions/compilation/patch/kernel-pkg.sh -@@ -7,6 +7,9 @@ function apply_kernel_patches_for_packaging() { - # Temporally set for new "default->legacy,next->current" family naming - - if linux-version compare "${version}" ge 5.10; then -+ display_alert "NOT using old packaging mkdebian etc" "skipping mkdebian patching" "warn" -+ return 0 # Not anymore for new packaging. -+ - # This case is special: it does not use process_patch_file. fasthash manually. - local builddeb="packages/armbian/builddeb" - local mkdebian="packages/armbian/mkdebian" -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 6b14c18a2..75771db01 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -64,6 +64,15 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/compilation/debs.sh - source "${SRC}"/lib/functions/compilation/debs.sh - -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/kernel-debs.sh -+# shellcheck source=lib/functions/compilation/kernel-debs.sh -+source "${SRC}"/lib/functions/compilation/kernel-debs.sh -+ - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - -From 477926aac9205e2b7bc07c14e2727730eba11a27 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 25 Feb 2022 22:49:47 +0100 -Subject: [PATCH] armbian-next: rework kernel source packaging, now exporting - from git, to .tar.zst - -- compress with zstdmt (multi-thread zstd), remove pv indicator, it's much faster anyway -- export from git (soon will have all patches et al too) -- better logging, show pkg name -- much, much faster due to zstdmt and deb with none compression ---- - lib/functions/compilation/kernel.sh | 51 +++++++++++++++++-------------------- - 1 file changed, 24 insertions(+), 27 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index e4cb38908..8c5db9e92 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -22,13 +22,12 @@ function run_kernel_make() { - "DEBFULLNAME=${MAINTAINER}" # For changelog generation - "DEBEMAIL=${MAINTAINERMAIL}" # idem - "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # Prefix for tool invocations. -+ "KCFLAGS=-fdiagnostics-color=always" # Force GCC colored messages. - ) - -- common_make_params_quoted+=("KCFLAGS=-fdiagnostics-color=always") # Force GCC colored messages. -- - # last statement, so it passes the result to calling function. - full_command=("${KERNEL_MAKE_RUNNER:-run_host_command_logged}" "${common_make_envs[@]}" -- make "$@" "${common_make_params_quoted[@]@Q}" "${make_filter}") -+ make "${common_make_params_quoted[@]@Q}" "$@" "${make_filter}") - "${full_command[@]}" # and exit with it's code, since it's the last statement - } - -@@ -254,38 +253,37 @@ function kernel_config() { - } - - function kernel_package_source() { -- # create linux-source package - with already patched sources -- # We will build this package first and clear the memory. -- if [[ $BUILD_KSRC != no ]]; then -- display_alert "Creating kernel source package" "${LINUXCONFIG}" "info" -- create_linux-source_package -- fi --} -+ [[ "${BUILD_KSRC}" != "yes" ]] && return 0 -+ -+ display_alert "Creating kernel source package" "${LINUXCONFIG}" "info" - --create_linux-source_package() { -- ts=$(date +%s) -- local sources_pkg_dir tmp_src_dir -+ local ts=${SECONDS} -+ local sources_pkg_dir tmp_src_dir tarball_size package_size - tmp_src_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. - - sources_pkg_dir=${tmp_src_dir}/${CHOSEN_KSRC}_${REVISION}_all - mkdir -p "${sources_pkg_dir}"/usr/src/ \ -- "${sources_pkg_dir}"/usr/share/doc/linux-source-${version}-${LINUXFAMILY} \ -+ "${sources_pkg_dir}/usr/share/doc/linux-source-${version}-${LINUXFAMILY}" \ - "${sources_pkg_dir}"/DEBIAN - -- cp "${SRC}/config/kernel/${LINUXCONFIG}.config" "default_${LINUXCONFIG}.config" -- xz < .config > "${sources_pkg_dir}/usr/src/${LINUXCONFIG}_${version}_${REVISION}_config.xz" -+ run_host_command_logged cp -v "${SRC}/config/kernel/${LINUXCONFIG}.config" "${sources_pkg_dir}/usr/src/${LINUXCONFIG}_${version}_${REVISION}_config" -+ run_host_command_logged cp -v COPYING "${sources_pkg_dir}/usr/share/doc/linux-source-${version}-${LINUXFAMILY}/LICENSE" - -- display_alert "Compressing sources for the linux-source package" -- tar cp --directory="$kernel_work_dir" --exclude='.git' --owner=root . | -- pv -N "$(logging_echo_prefix_for_pv "compress_kernel_sources") $display_name" -p -b -r -s "$(du -sb "$kernel_work_dir" --exclude=='.git' | cut -f1)" | -- pixz -0 > "${sources_pkg_dir}/usr/src/linux-source-${version}-${LINUXFAMILY}.tar.xz" # @TODO: .deb will compress this later. -0 for now, but should be a plain tar -- cp COPYING "${sources_pkg_dir}/usr/share/doc/linux-source-${version}-${LINUXFAMILY}/LICENSE" -+ display_alert "Compressing sources for the linux-source package" "exporting from git" "info" -+ cd "${kernel_work_dir}" -+ -+ local tar_prefix="${version}/" -+ local output_tarball="${sources_pkg_dir}/usr/src/linux-source-${version}-${LINUXFAMILY}.tar.zst" -+ -+ # export tar with `git archive`; we point it at HEAD, but could be anything else too -+ run_host_command_logged git archive "--prefix=${tar_prefix}" --format=tar HEAD "| zstdmt > '${output_tarball}'" -+ tarball_size="$(du -h -s "${output_tarball}" | awk '{print $1}')" - - cat <<- EOF > "${sources_pkg_dir}"/DEBIAN/control - Package: linux-source-${version}-${BRANCH}-${LINUXFAMILY} - Version: ${version}-${BRANCH}-${LINUXFAMILY}+${REVISION} - Architecture: all -- Maintainer: $MAINTAINER <$MAINTAINERMAIL> -+ Maintainer: ${MAINTAINER} <${MAINTAINERMAIL}> - Section: kernel - Priority: optional - Depends: binutils, coreutils -@@ -294,11 +292,10 @@ create_linux-source_package() { - Description: This package provides the source code for the Linux kernel $version - EOF - -- fakeroot_dpkg_deb_build -z0 "${sources_pkg_dir}" "${sources_pkg_dir}.deb" -- rsync --remove-source-files -rq "${sources_pkg_dir}.deb" "${DEB_STORAGE}/" -- -- te=$(date +%s) -- display_alert "Make the linux-source package" "$(($te - $ts)) sec." "info" -+ fakeroot_dpkg_deb_build -Znone -z0 "${sources_pkg_dir}" "${sources_pkg_dir}.deb" # do not compress .deb, it already contains a zstd compressed tarball! ignores ${KDEB_COMPRESS} on purpose -+ package_size="$(du -h -s "${sources_pkg_dir}.deb" | awk '{print $1}')" -+ run_host_command_logged rsync --remove-source-files -r "${sources_pkg_dir}.deb" "${DEB_STORAGE}/" -+ display_alert "linux-source-${version}-${BRANCH}-${LINUXFAMILY} packaged" "$((SECONDS - ts)) seconds, ${tarball_size} tarball, ${package_size} .deb" "info" - } - - function kernel_make_headers_dtbs_image_modules() { - -From d14b2a9265f92d47185047eb8520a956f6ce9ea4 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 25 Feb 2022 00:50:27 +0100 -Subject: [PATCH] armbian-next: a bit atrocious, nameref loaded, - `get_list_of_all_buildable_boards()` - -- in the process, add support for userpatches/config structure mirroring core, for easy upstreaming ---- - lib/functions/compilation/kernel.sh | 3 ++ - lib/functions/configuration/interactive.sh | 75 +++++++++++++++++++----------- - lib/functions/configuration/main-config.sh | 25 ++++++++-- - lib/functions/main/config-prepare.sh | 31 ++++++------ - 4 files changed, 85 insertions(+), 49 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 5cde24980..e4cb38908 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -189,6 +189,9 @@ function kernel_config() { - if [[ -f $USERPATCHES_PATH/$LINUXCONFIG.config ]]; then - display_alert "Using kernel config provided by user" "userpatches/$LINUXCONFIG.config" "info" - cp -p "${USERPATCHES_PATH}/${LINUXCONFIG}.config" .config -+ elif [[ -f "${USERPATCHES_PATH}/config/kernel/${LINUXCONFIG}.config" ]]; then -+ display_alert "Using kernel config provided by user in config/kernel folder" "config/kernel/${LINUXCONFIG}.config" "info" -+ cp -p "${USERPATCHES_PATH}/config/kernel/${LINUXCONFIG}.config" .config - else - display_alert "Using kernel config file" "config/kernel/$LINUXCONFIG.config" "info" - cp -p "${SRC}/config/kernel/${LINUXCONFIG}.config" .config -diff --git a/lib/functions/configuration/interactive.sh b/lib/functions/configuration/interactive.sh -index 165f6257f..325553433 100644 ---- a/lib/functions/configuration/interactive.sh -+++ b/lib/functions/configuration/interactive.sh -@@ -39,8 +39,48 @@ function interactive_config_ask_kernel_configure() { - unset options - } - -+# Required usage: -+# declare -a arr_all_board_names=() arr_all_board_options=() # arrays -+# declare -A dict_all_board_types=() dict_all_board_source_files=() dict_all_board_descriptions=() # dictionaries -+# get_list_of_all_buildable_boards arr_all_board_names arr_all_board_options dict_all_board_types dict_all_board_source_files dict_all_board_descriptions # invoke -+function get_list_of_all_buildable_boards() { -+ local -a board_types=("conf") -+ [[ "${WIP_STATE}" != "supported" ]] && board_types+=("wip" "csc" "eos" "tvb") -+ local -a board_file_paths=("${SRC}/config/boards" "${USERPATCHES_PATH}/config/boards") -+ -+ # local -n is a name reference, see https://www.linuxjournal.com/content/whats-new-bash-parameter-expansion -+ # it works with arrays and associative arrays/dictionaries -+ local -n ref_arr_all_board_names="${1}" -+ [[ "${2}" != "" ]] && local -n ref_arr_all_board_options="${2}" # optional -+ local -n ref_dict_all_board_types="${3}" -+ local -n ref_dict_all_board_source_files="${4}" -+ [[ "${5}" != "" ]] && local -n ref_dict_all_board_descriptions="${5}" # optional -+ -+ local board_file_path board_type full_board_file -+ for board_file_path in "${board_file_paths[@]}"; do -+ [[ ! -d "${board_file_path}" ]] && continue -+ for board_type in "${board_types[@]}"; do -+ for full_board_file in "${board_file_path}"/*."${board_type}"; do -+ [[ "${full_board_file}" == *"*"* ]] && continue # ignore non-matches, due to bash's (non-)globbing behaviour -+ local board_name board_desc -+ board_name="$(basename "${full_board_file}" | cut -d'.' -f1)" -+ ref_dict_all_board_types["${board_name}"]="${board_type}" -+ ref_dict_all_board_source_files["${board_name}"]="${ref_dict_all_board_source_files["${board_name}"]} ${full_board_file}" # accumulate, will have extra space -+ -+ if [[ "${2}" != "" || "${5}" != "" ]]; then # only if second or fifth reference specified, otherwise too costly -+ board_desc="$(head -1 "${full_board_file}" | cut -d'#' -f2)" -+ ref_arr_all_board_options+=("${board_name}" "\Z1(${board_type})\Zn ${board_desc}") -+ ref_dict_all_board_descriptions["${board_name}"]="${board_desc}" -+ fi -+ done -+ done -+ done -+ ref_arr_all_board_names=("${!ref_dict_all_board_types[@]}") # Expand the keys of one of the dicts, that's the list of boards. -+ return 0 -+} -+ - function interactive_config_ask_board_list() { -- # if BOARD is not set, display selection menu -+ # if BOARD is not set, display selection menu, otherwise return success - [[ -n ${BOARD} ]] && return 0 - - WIP_STATE=supported -@@ -49,27 +89,11 @@ function interactive_config_ask_board_list() { - temp_rc=$(mktemp) # @TODO: this is a _very_ early call to mktemp - no TMPDIR set yet - it needs to be cleaned-up somehow - - while true; do -- options=() -- if [[ $WIP_STATE == supported ]]; then -- for board in "${SRC}"/config/boards/*.conf; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "$(head -1 "${board}" | cut -d'#' -f2)") -- done -- else -- for board in "${SRC}"/config/boards/*.wip; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(WIP)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -- done -- for board in "${SRC}"/config/boards/*.csc; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(CSC)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -- done -- for board in "${SRC}"/config/boards/*.eos; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(EOS)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -- done -- for board in "${SRC}"/config/boards/*.tvb; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(TVB)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -- done -- fi -- -- if [[ $WIP_STATE != supported ]]; then -+ declare -a arr_all_board_names=() arr_all_board_options=() # arrays -+ declare -A dict_all_board_types=() dict_all_board_source_files=() dict_all_board_descriptions=() # dictionaries -+ get_list_of_all_buildable_boards arr_all_board_names arr_all_board_options dict_all_board_types dict_all_board_source_files dict_all_board_descriptions # invoke -+ echo > "${temp_rc}" # zero out the rcfile to start -+ if [[ $WIP_STATE != supported ]]; then # be if wip csc etc included. I personally disagree here. - cat <<- 'EOF' > "${temp_rc}" - dialog_color = (RED,WHITE,OFF) - screen_color = (WHITE,RED,ON) -@@ -78,14 +102,12 @@ function interactive_config_ask_board_list() { - tag_selected_color = (WHITE,RED,ON) - tag_key_selected_color = (WHITE,RED,ON) - EOF -- else -- echo > "${temp_rc}" - fi - - DIALOGRC=$temp_rc \ - dialog_if_terminal_set_vars --title "Choose a board" --backtitle "$backtitle" --scrollbar \ - --colors --extra-label "Show $WIP_BUTTON" --extra-button \ -- --menu "Select the target board. Displaying:\n$STATE_DESCRIPTION" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" -+ --menu "Select the target board. Displaying:\n$STATE_DESCRIPTION" $TTY_Y $TTY_X $((TTY_Y - 8)) "${arr_all_board_options[@]}" - BOARD="${DIALOG_RESULT}" - STATUS=${DIALOG_EXIT_CODE} - -@@ -101,7 +123,7 @@ function interactive_config_ask_board_list() { - STATE_DESCRIPTION=' - boards with high level of software maturity' - WIP_STATE=supported - WIP_BUTTON='CSC/WIP/EOS' -- EXPERT=no -+ EXPERT=no # @TODO: this overrides an "expert" mode that could be set on by the user. revert to original one? - fi - continue - elif [[ $STATUS == 0 ]]; then -@@ -109,7 +131,6 @@ function interactive_config_ask_board_list() { - else - exit_with_error "You cancelled interactive config" "Build cancelled, board not chosen" - fi -- unset options - done - } - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 4183d4041..b5b2e9ca5 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -190,19 +190,36 @@ function do_main_configuration() { - - # single ext4 partition is the default and preferred configuration - #BOOTFS_TYPE='' -- [[ ! -f ${SRC}/config/sources/families/$LINUXFAMILY.conf ]] && -- exit_with_error "Sources configuration not found" "$LINUXFAMILY" - -- display_alert "Sourcing family configuration" "${LINUXFAMILY}.conf" "info" -- source "${SRC}/config/sources/families/${LINUXFAMILY}.conf" -+ ## ------ Sourcing family config --------------------------- - -+ declare -a family_source_paths=("${SRC}/config/sources/families/${LINUXFAMILY}.conf" "${USERPATCHES_PATH}/config/sources/families/${LINUXFAMILY}.conf") -+ declare -i family_sourced_ok=0 -+ for family_source_path in "${family_source_paths[@]}"; do -+ [[ ! -f "${family_source_path}" ]] && continue -+ -+ display_alert "Sourcing family configuration" "${family_source_path}" "info" -+ # shellcheck source=/dev/null -+ source "${family_source_path}" -+ -+ # @TODO: reset error handling, go figure what they do in there. -+ -+ family_sourced_ok=$((family_sourced_ok + 1)) -+ done -+ -+ [[ ${family_sourced_ok} -lt 1 ]] && -+ exit_with_error "Sources configuration not found" "tried ${family_source_paths[*]}" -+ -+ # This is for compatibility only; path above should suffice - if [[ -f $USERPATCHES_PATH/sources/families/$LINUXFAMILY.conf ]]; then - display_alert "Adding user provided $LINUXFAMILY overrides" -+ # shellcheck source=/dev/null - source "$USERPATCHES_PATH/sources/families/${LINUXFAMILY}.conf" - fi - - # load architecture defaults - display_alert "Sourcing arch configuration" "${ARCH}.conf" "info" -+ # shellcheck source=/dev/null - source "${SRC}/config/sources/${ARCH}.conf" - - ## Extensions: at this point we've sourced all the config files that will be used, -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index e26f11b3f..cd795ccd2 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -83,29 +83,24 @@ function prepare_and_config_main_build_single() { - [[ -z $KERNEL_ONLY ]] && exit_with_error "No option selected: KERNEL_ONLY" - [[ -z $KERNEL_CONFIGURE ]] && exit_with_error "No option selected: KERNEL_CONFIGURE" - -- interactive_config_ask_board_list # @TODO: rpardini: This obtains a list of boards. refactor that... -+ interactive_config_ask_board_list # this uses get_list_of_all_buildable_boards too - [[ -z $BOARD ]] && exit_with_error "No board selected: BOARD" - -- if [[ -f $SRC/config/boards/${BOARD}.conf ]]; then -- BOARD_TYPE='conf' -- elif [[ -f $SRC/config/boards/${BOARD}.csc ]]; then -- BOARD_TYPE='csc' -- elif [[ -f $SRC/config/boards/${BOARD}.wip ]]; then -- BOARD_TYPE='wip' -- elif [[ -f $SRC/config/boards/${BOARD}.eos ]]; then -- BOARD_TYPE='eos' -- elif [[ -f $SRC/config/boards/${BOARD}.tvb ]]; then -- BOARD_TYPE='tvb' -- fi -+ declare -a arr_all_board_names=() # arrays -+ declare -A dict_all_board_types=() dict_all_board_source_files=() # dictionaries -+ get_list_of_all_buildable_boards arr_all_board_names "" dict_all_board_types dict_all_board_source_files "" # invoke - -- # @TODO: rpardini: this is when Alice enters the hole. Sourcing stuff, extensions getting activated, etc. -+ BOARD_TYPE="${dict_all_board_types["${BOARD}"]}" -+ BOARD_SOURCE_FILES="${dict_all_board_source_files["${BOARD}"]}" - -- display_alert "Sourcing board configuration" "${BOARD}.${BOARD_TYPE}" "info" -- # shellcheck source=/dev/null -- source "${SRC}/config/boards/${BOARD}.${BOARD_TYPE}" -- LINUXFAMILY="${BOARDFAMILY}" # @TODO: wtf? why? this is (100%?) rewritten by family config! -+ for BOARD_SOURCE_FILE in ${BOARD_SOURCE_FILES}; do # No quotes, so expand the space-delimited list -+ display_alert "Sourcing board configuration" "${BOARD_SOURCE_FILE}" "info" -+ # shellcheck source=/dev/null -+ source "${BOARD_SOURCE_FILE}" -+ done - -- # @TODO: interesting. this sourced the board config. What sources the family? do_main_configuration! -+ LINUXFAMILY="${BOARDFAMILY}" # @TODO: wtf? why? this is (100%?) rewritten by family config! -+ # this sourced the board config. do_main_configuration will source the family file. - - [[ -z $KERNEL_TARGET ]] && exit_with_error "Board configuration does not define valid kernel config" - - -From bc0d123dc5e1baf21a20ef86d5c4e32aff3aa931 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 19:57:43 +0100 -Subject: [PATCH] armbian-next: make `SKIP_EXTERNAL_TOOLCHAINS=yes` default. - lets see what breaks [WiP] - ---- - lib/functions/configuration/main-config.sh | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 5aa637534..4183d4041 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -35,6 +35,7 @@ function do_main_configuration() { - [[ -z $MAINTAINER ]] && MAINTAINER="Igor Pecovnik" # deb signature - [[ -z $MAINTAINERMAIL ]] && MAINTAINERMAIL="igor.pecovnik@****l.com" # deb signature - [[ -z $DEB_COMPRESS ]] && DEB_COMPRESS="xz" # compress .debs with XZ by default. Use 'none' for faster/larger builds -+ export SKIP_EXTERNAL_TOOLCHAINS="${SKIP_EXTERNAL_TOOLCHAINS:-yes}" # don't use any external toolchains, by default. - TZDATA=$(cat /etc/timezone) # Timezone for target is taken from host or defined here. - USEALLCORES=yes # Use all CPU cores for compiling - HOSTRELEASE=$(cat /etc/os-release | grep VERSION_CODENAME | cut -d"=" -f2) - -From 7fb54baca48ed6ae60b6a0025e83b0e29380164f Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 19:57:17 +0100 -Subject: [PATCH] armbian-next: keeping stdout clean, use display_alert() for - cleanup logging - ---- - compile.sh | 3 ++- - lib/functions/configuration/config-desktop.sh | 5 ++--- - lib/functions/configuration/main-config.sh | 1 - - lib/functions/main/rootfs-image.sh | 2 +- - 4 files changed, 5 insertions(+), 6 deletions(-) - -diff --git a/compile.sh b/compile.sh -index fcd9046a0..0c35c5fd6 100755 ---- a/compile.sh -+++ b/compile.sh -@@ -53,4 +53,5 @@ traps_init - # Execute the main CLI entrypoint. - cli_entrypoint "$@" - --echo "-- very last thing" 1>&2 -+# Log the last statement of this script for debugging purposes. -+display_alert "Armbian build script exiting" "very last thing" "cleanup" -diff --git a/lib/functions/configuration/config-desktop.sh b/lib/functions/configuration/config-desktop.sh -index 72ddd07ec..9ff0106da 100644 ---- a/lib/functions/configuration/config-desktop.sh -+++ b/lib/functions/configuration/config-desktop.sh -@@ -2,9 +2,8 @@ function desktop_element_available_for_arch() { - local desktop_element_path="${1}" - local targeted_arch="${2}" - local arch_limitation_file="${1}/only_for" -- echo "Checking if ${desktop_element_path} is available for ${targeted_arch} in ${arch_limitation_file}" >> "${DEST}"/${LOG_SUBPATH}/output.log - if [[ -f "${arch_limitation_file}" ]]; then -- if ! grep -- "${targeted_arch}" "${arch_limitation_file}"; then -+ if ! grep -- "${targeted_arch}" "${arch_limitation_file}" &> /dev/null; then - return 1 - fi - fi -@@ -35,7 +34,7 @@ function desktop_element_supported() { - function desktop_environments_prepare_menu() { - for desktop_env_dir in "${DESKTOP_CONFIGS_DIR}/"*; do - local desktop_env_name expert_infos="" desktop_element_supported_result=0 -- desktop_env_name=$(basename ${desktop_env_dir}) -+ desktop_env_name="$(basename "${desktop_env_dir}")" - [[ "${EXPERT}" == "yes" ]] && expert_infos="[$(cat "${desktop_env_dir}/support" 2> /dev/null)]" - desktop_element_supported "${desktop_env_dir}" "${ARCH}" - [[ ${desktop_element_supported_result} == 0 ]] && options+=("${desktop_env_name}" "${desktop_env_name^} desktop environment ${expert_infos}") -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 5f43fb075..5aa637534 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -245,7 +245,6 @@ function do_main_configuration() { - CLI_CONFIG_PATH="${SRC}/config/cli/${RELEASE}" - DEBOOTSTRAP_CONFIG_PATH="${CLI_CONFIG_PATH}/debootstrap" - -- - AGGREGATION_SEARCH_ROOT_ABSOLUTE_DIRS=" - ${SRC}/config - ${SRC}/config/optional/_any_board/_config -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index db8fe5b40..a43659f43 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -103,7 +103,7 @@ function build_rootfs_and_image() { - } - - function trap_handler_cleanup_rootfs_and_image() { -- echo "-- trap_handler_cleanup_rootfs_and_image cleaning up..." 1>&2 -+ display_alert "Cleanup for rootfs and image" "trap_handler_cleanup_rootfs_and_image" "cleanup" - - cd "${SRC}" || echo "Failed to cwd to ${SRC}" # Move pwd away, so unmounts work - # those will loop until they're unmounted. - -From a3b64e15f9130871ff37061aa533ca0649c0bc0c Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 19:35:23 +0100 -Subject: [PATCH] armbian-next: library cleanups; remove `build-all.sh` for - good; bring `patching.sh` back - ---- - .../compilation/patch/{apply.sh => patching.sh} | 0 - lib/functions/multi/build-all.sh | 440 --------------------- - lib/library-functions.sh | 27 +- - 3 files changed, 9 insertions(+), 458 deletions(-) - -diff --git a/lib/functions/compilation/patch/apply.sh b/lib/functions/compilation/patch/patching.sh -similarity index 100% -rename from lib/functions/compilation/patch/apply.sh -rename to lib/functions/compilation/patch/patching.sh -diff --git a/lib/functions/multi/build-all.sh b/lib/functions/multi/build-all.sh -deleted file mode 100644 -index 762a588d7..000000000 ---- a/lib/functions/multi/build-all.sh -+++ /dev/null -@@ -1,440 +0,0 @@ --function do_main_build_all_ng() { -- if [[ -z $VENDOR ]]; then VENDOR="Armbian"; fi -- if [[ $BETA == "yes" ]]; then STABILITY="beta"; else STABILITY="stable"; fi -- if [[ $BETA == "yes" ]]; then upload_subdir=nightly; else upload_subdir="archive"; fi -- if [[ $MAKE_ALL_BETA == "yes" ]]; then STABILITY="stable"; fi -- if [[ -z $KERNEL_ONLY ]]; then KERNEL_ONLY="yes"; fi -- if [[ -z $MULTITHREAD ]]; then MULTITHREAD=0; fi -- if [[ -z $START ]]; then START=0; fi -- if [[ -z $KERNEL_CONFIGURE ]]; then KERNEL_CONFIGURE="no"; fi -- if [[ -z $CLEAN_LEVEL ]]; then CLEAN_LEVEL="make,oldcache"; fi -- -- MAINLINE_KERNEL_SOURCE='https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable' -- -- # cleanup -- rm -f /run/armbian/*.pid -- mkdir -p /run/armbian -- -- # read user defined targets if exits -- if [[ -f $USERPATCHES_PATH/targets.conf ]]; then -- display_alert "Adding user provided targets configuration" -- BUILD_TARGETS="${USERPATCHES_PATH}/targets.conf" -- else -- BUILD_TARGETS="${SRC}/config/targets.conf" -- fi -- -- # bump version in case there was a change -- if [[ ${BUMP_VERSION} == yes ]]; then -- cd "${SRC}" || exit -- CURRENT_VERSION=$(cat VERSION) -- NEW_VERSION="${CURRENT_VERSION%%-trunk}" -- if [[ $CURRENT_VERSION == *trunk* ]]; then -- NEW_VERSION=$(echo "${CURRENT_VERSION}" | cut -d. -f1-3)"."$((${NEW_VERSION##*.} + 1)) -- else -- NEW_VERSION=$(echo "${CURRENT_VERSION}" | cut -d. -f1-2)"."$((${NEW_VERSION##*.} + 1)) -- fi -- -- echo "${NEW_VERSION}" > VERSION -- improved_git add "${SRC}"/VERSION -- improved_git commit -m "Bumping to new version" -m "" -m "Adding following kernels:" -m "$(find output/debs-beta/ -type f -name "linux-image*${CURRENT_VERSION}*.deb" -printf "%f\n" | sort)" -- improved_git push -- display_alert "Bumping to new version" "${NEW_VERSION}" "info" -- else -- -- # display what will be build -- echo "" -- [[ -f userpatches/family.skip ]] && display_alert "userpatches/family.skip exists and familes noted there will be skipped" "" "wrn" -- display_alert "Building all targets" "$STABILITY $(if [[ $KERNEL_ONLY == "yes" ]]; then -- echo "kernels" -- else echo "images"; fi)" "info" -- -- printf "\n%s\t%-32s\t%-8s\t%-14s\t%-6s\t%-6s\t%-6s\t%-6s\n\n" "" "board" "branch" "release" "DE" "desktop" "minimal" "DE app groups" -- -- # display what we will build -- build_all "dryrun" -- -- if [[ $BUILD_ALL != demo ]]; then -- echo "" -- # build -- build_all -- fi -- -- # wait until they are not finshed -- sleep 5 -- while :; do -- if [[ $(df | grep -c /.tmp) -lt 1 ]]; then -- break -- fi -- sleep 5 -- done -- -- while :; do -- if [[ -z $(ps -uax | grep 7z | grep Armbian) ]]; then -- break -- fi -- sleep 5 -- done -- -- fi -- -- [[ $n -eq 0 ]] && display_alert "No changes in upstream sources, patches or configs found. Exiting." "info" -- -- buildall_end=$(date +%s) -- buildall_runtime=$(((buildall_end - buildall_start) / 60)) -- display_alert "Runtime in total" "${buildall_runtime} min" "info" -- mkdir -p .tmp -- echo "${n}" > "${SRC}"/.tmp/n -- -- # display what we will build -- build_all "dryrun" -- display_alert "Done" --} -- --unset_all() { -- cleanup_extension_manager -- unset LINUXFAMILY LINUXCONFIG KERNELDIR KERNELSOURCE KERNELBRANCH BOOTDIR BOOTSOURCE BOOTBRANCH ARCH UBOOT_USE_GCC KERNEL_USE_GCC CPUMIN CPUMAX \ -- UBOOT_VER KERNEL_VER GOVERNOR BOOTSIZE BOOTFS_TYPE UBOOT_TOOLCHAIN KERNEL_TOOLCHAIN DEBOOTSTRAP_LIST PACKAGE_LIST_EXCLUDE KERNEL_IMAGE_TYPE \ -- write_uboot_platform family_tweaks family_tweaks_bsp setup_write_uboot_platform uboot_custom_postprocess atf_custom_postprocess family_tweaks_s \ -- LOCALVERSION UBOOT_COMPILER KERNEL_COMPILER BOOTCONFIG BOOTCONFIG_VAR_NAME INITRD_ARCH BOOTENV_FILE BOOTDELAY ATF_TOOLCHAIN2 MOUNT SDCARD \ -- BOOTPATCHDIR KERNELPATCHDIR RELEASE IMAGE_TYPE OVERLAY_PREFIX ASOUND_STATE ATF_COMPILER ATF_USE_GCC ATFSOURCE ATFDIR ATFBRANCH ATFSOURCEDIR \ -- PACKAGE_LIST_RM NM_IGNORE_DEVICES DISPLAY_MANAGER family_tweaks_bsp_s CRYPTROOT_ENABLE CRYPTROOT_PASSPHRASE CRYPTROOT_SSH_UNLOCK \ -- CRYPTROOT_SSH_UNLOCK_PORT CRYPTROOT_SSH_UNLOCK_KEY_NAME ROOT_MAPPER NETWORK HDMI USB WIRELESS ARMBIANMONITOR FORCE_BOOTSCRIPT_UPDATE \ -- UBOOT_TOOLCHAIN2 toolchain2 BUILD_REPOSITORY_URL BUILD_REPOSITORY_COMMIT BUILD_TARGET HOST BUILD_IMAGE DEB_STORAGE REPO_STORAGE REPO_CONFIG \ -- REPOSITORY_UPDATE PACKAGE_LIST_RELEASE LOCAL_MIRROR COMPILE_ATF PACKAGE_LIST_BOARD PACKAGE_LIST_FAMILY PACKAGE_LIST_DESKTOP_BOARD \ -- PACKAGE_LIST_DESKTOP_FAMILY ATF_COMPILE ATFPATCHDIR OFFSET BOOTSOURCEDIR \ -- BOOT_SOC DDR_BLOB MINILOADER_BLOB BL31_BLOB BOOT_SCENARIO BOOT_SUPPORT_SPI OFFLINE_WORK VAR_SHALLOW_ORIGINAL KERNELSWITCHOBJ \ -- IMAGE_PARTITION_TABLE BOOT_LOGO UBOOT_REPO_VERSION FORCED_MONTH_OFFSET PACKAGE_LIST_BOARD_REMOVE PACKAGE_LIST_FAMILY_REMOVE PACKAGE_LIST_DESKTOP \ -- PACKAGE_LIST_DESKTOP_BOARD_REMOVE PACKAGE_LIST_DESKTOP_FAMILY_REMOVE BOOTCONFIG_EDGE DESKTOP_ENVIRONMENT DESKTOP_ENVIRONMENT_CONFIG_NAME \ -- DESKTOP_APPGROUPS_SELECTED DESKTOP_APT_FLAGS_SELECTED DESKTOP_ENVIRONMENT_DIRPATH DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH UBOOT_TARGET_MAP \ -- DESKTOP_ENVIRONMENT_DIRPATH DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH DESKTOP_CONFIG_PREFIX DESKTOP_CONFIGS_DIR DESKTOP_APPGROUPS_DIR \ -- DEBIAN_RECOMMENDS USE_OVERLAYFS aggregated_content DEBOOTSTRAP_COMPONENTS DEBOOTSTRAP_OPTION DEB_COMPRESS MAINTAINER MAINTAINERMAIL EXTRAWIFI BOOTSCRIPT --} -- --pack_upload() { -- -- # pack and upload to server or just pack -- -- display_alert "Signing" "Please wait!" "info" -- local version="${VENDOR}_${REVISION}_${BOARD^}_${RELEASE}_${BRANCH}_${VER/-$LINUXFAMILY/}${DESKTOP_ENVIRONMENT:+_$DESKTOP_ENVIRONMENT}" -- compression_type="" -- -- [[ $BUILD_DESKTOP == yes ]] && version=${version}_desktop -- [[ $BUILD_MINIMAL == yes ]] && version=${version}_minimal -- [[ $BETA == yes ]] && local subdir=nightly -- [[ $RC == yes ]] && local subdir=rc -- -- cd "${DESTIMG}" || exit -- -- if [[ $COMPRESS_OUTPUTIMAGE == yes ]]; then -- COMPRESS_OUTPUTIMAGE="sha,gpg,7z" -- fi -- -- if [[ $COMPRESS_OUTPUTIMAGE == *gz* ]]; then -- display_alert "Compressing" "$DEST/images/${version}.img.gz" "info" -- pigz "$DESTIMG/${version}.img" -- rm "${DESTIMG}/${version}.img" -- compression_type=".gz" -- fi -- -- if [[ $COMPRESS_OUTPUTIMAGE == *xz* ]]; then -- display_alert "Compressing" "$DEST/images/${version}.img.xz" "info" -- pixz -9 < "$DESTIMG/${version}.img" > "${DESTIMG}/${version}.img.xz" -- rm "${DESTIMG}/${version}.img" -- compression_type=".xz" -- fi -- -- if [[ $COMPRESS_OUTPUTIMAGE == *sha* ]]; then -- display_alert "SHA256 calculating" "${version}.img" "info" -- sha256sum -b "${version}.img${compression_type}" > "${version}.img${compression_type}.sha" -- fi -- -- if [[ $COMPRESS_OUTPUTIMAGE == *gpg* ]]; then -- if [[ -n "${GPG_PASS}" && "${SUDO_USER}" ]]; then -- display_alert "GPG signing" "${version}.img" "info" -- [[ -n ${SUDO_USER} ]] && sudo chown -R ${SUDO_USER}:${SUDO_USER} "${DEST}"/images/ -- echo "${GPG_PASS}" | sudo -H -u ${SUDO_USER} bash -c "gpg --passphrase-fd 0 --armor --detach-sign --pinentry-mode loopback --batch --yes ${version}.img${compression_type}" || exit 1 -- else -- display_alert "GPG signing skipped - no GPG_PASS" "${version}.img" "wrn" -- fi -- fi -- -- fingerprint_image "${version}.img${compression_type}.txt" "${version}" -- -- if [[ $COMPRESS_OUTPUTIMAGE == *7z* ]]; then -- display_alert "Compressing" "${version}.7z" "info" -- 7za a -t7z -bd -m0=lzma2 -mx=3 -mfb=64 -md=32m -ms=on "${version}".7z "${version}".img* > /dev/null 2>&1 -- find . -type f -not -name '*.7z' -print0 | xargs -0 rm -- -- fi -- -- if [[ -n "${SEND_TO_SERVER}" ]]; then -- ssh "${SEND_TO_SERVER}" "mkdir -p ${SEND_TO_LOCATION}${BOARD}/{archive,nightly}" & -- display_alert "Uploading" "Please wait!" "info" -- nice -n 19 bash -c "rsync -arP --info=progress2 --prune-empty-dirs $DESTIMG/ -e 'ssh -T -c aes128-ctr -o Compression=no -x -p 22' ${SEND_TO_SERVER}:${SEND_TO_LOCATION}${BOARD}/${subdir}; rm -rf ${DESTIMG}/*" & -- else -- mv "${DESTIMG}"/*.* "${DEST}"/images/ -- fi -- --} -- --build_main() { -- # shellcheck source=/dev/null -- source "$USERPATCHES_PATH"/lib.config -- # build images which we do pack or kernel -- local upload_image -- upload_image="${VENDOR}_$(cat "${SRC}"/VERSION)_${BOARD^}_${RELEASE}_${BRANCH}_*${VER/-$LINUXFAMILY/}" -- -- [[ $BUILD_DESKTOP == yes ]] && upload_image=${upload_image}_desktop -- [[ $BUILD_MINIMAL == yes ]] && upload_image=${upload_image}_minimal -- -- touch "/run/armbian/${VENDOR}_${BOARD^}_${BRANCH}_${RELEASE}_${DESKTOP_ENVIRONMENT}_${BUILD_DESKTOP}_${BUILD_MINIMAL}.pid" -- LOG_SUBPATH="debug/${VENDOR}/${BOARD^}/${BRANCH}/${RELEASE}/${DESKTOP_ENVIRONMENT}_${BUILD_DESKTOP}_${BUILD_MINIMAL}" -- -- if [[ $KERNEL_ONLY != yes ]]; then -- #if ssh ${SEND_TO_SERVER} stat ${SEND_TO_LOCATION}${BOARD}/${upload_subdir}/${upload_image}* \> /dev/null 2\>\&1; then -- # echo "$n exists $upload_image" -- #else -- #shellcheck source=lib/main.sh -- source "${SRC}"/lib/main.sh -- [[ "$BSP_BUILD" != yes && -n "${SEND_TO_SERVER}" ]] && pack_upload -- #fi -- -- else -- #shellcheck source=lib/main.sh -- source "${SRC}"/lib/main.sh -- -- fi -- -- cd "${SRC}" -- rm "/run/armbian/${VENDOR}_${BOARD^}_${BRANCH}_${RELEASE}_${DESKTOP_ENVIRONMENT}_${BUILD_DESKTOP}_${BUILD_MINIMAL}.pid" --} -- --array_contains() { -- -- # utility snippet -- -- local array="$1[@]" -- local seeking=$2 -- local in=1 -- -- for element in "${!array}"; do -- if [[ "${element}" == "${seeking}" ]]; then -- in=0 -- break -- fi -- done -- return $in -- --} -- --function check_hash() { -- local BOARDFAMILY ref_type ref_name -- -- BOARDFAMILY=$(grep BOARDFAMILY "${SRC}/config/boards/${BOARD}".* | cut -d \" -f2) -- # shellcheck source=/dev/null -- source "${SRC}/config/sources/families/${BOARDFAMILY}.conf" &> /dev/null -- # shellcheck source=/dev/null -- source "${SRC}/config/sources/${ARCH}.conf" &> /dev/null -- ref_type=${KERNELBRANCH%%:*} -- if [[ $ref_type == head ]]; then -- ref_name=HEAD -- else -- ref_name=${KERNELBRANCH##*:} -- fi -- [[ -z $LINUXFAMILY ]] && LINUXFAMILY=$BOARDFAMILY -- [[ -z ${KERNELPATCHDIR} ]] && KERNELPATCHDIR=$LINUXFAMILY-$BRANCH -- [[ -z ${LINUXCONFIG} ]] && LINUXCONFIG=linux-$LINUXFAMILY-$BRANCH -- hash_watch_1=$(LC_COLLATE=C find -L "${SRC}/patch/kernel/${KERNELPATCHDIR}"/ -name '*.patch' -mindepth 1 -maxdepth 1 -printf '%s %P\n' 2> /dev/null | LC_COLLATE=C sort -n) -- hash_watch_2=$(cat "${SRC}/config/kernel/${LINUXCONFIG}.config" 2> /dev/null) -- patch_hash=$(echo "${hash_watch_1}${hash_watch_2}" | improved_git hash-object --stdin) -- -- case $ref_type in -- branch) hash=$(improved_git ls-remote "${KERNELSOURCE}" refs/heads/"${ref_name}" 2> /dev/null | awk '{print $1}') ;; -- tag) hash=$(improved_git ls-remote "${KERNELSOURCE}" tags/"${ref_name}" 2> /dev/null | awk '{print $1}') ;; -- head) hash=$(improved_git ls-remote "${KERNELSOURCE}" HEAD 2> /dev/null | awk '{print $1}') ;; -- commit) hash=$ref_name ;; -- esac -- # ignore diff checking in case of network errrors -- local kernel_hash="${SRC}/cache/hash"$([[ ${BETA} == yes ]] && echo "-beta")"/linux-image-${BRANCH}-${LINUXFAMILY}.githash" -- if [[ -f ${kernel_hash} ]]; then -- [[ "$hash" == "$(head -1 "${kernel_hash}")" && "$patch_hash" == "$(tail -1 "${kernel_hash}")" || -z $hash ]] && echo "IDENTICAL" -- fi --} -- --function build_all() { -- -- # main routine -- -- buildall_start=$(date +%s) -- n=0 -- ARRAY=() -- buildlist="cat " -- -- # building selected ones -- if [[ -n ${REBUILD_IMAGES} ]]; then -- -- buildlist="grep -w '" -- filter="'" -- for build in $(tr ',' ' ' <<< "${REBUILD_IMAGES}"); do -- buildlist=$buildlist"$build\|" -- filter=$filter"$build\|" -- done -- buildlist=${buildlist::-2}"'" -- filter=${filter::-2}"'" -- -- fi -- -- # find unique boards - we will build debs for all variants -- sorted_unique_ids=($(echo "${ids[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')) -- unique_boards=$(eval "${buildlist}" "${SRC}"/config/targets.conf | sed '/^#/ d' | awk '{print $1}') -- read -r -a unique_boards <<< "$(echo "${unique_boards[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')" -- -- while read -r line; do -- # @TODO: this almost a complete copy of main.sh. refactor. -- -- [[ "${line}" =~ ^#.*$ ]] && continue -- [[ -n "${REBUILD_IMAGES}" ]] && [[ -z $(echo "${line}" | eval grep -w "${filter}") ]] && continue -- #[[ $n -lt $START ]] && ((n+=1)) && continue -- -- unset_all -- # unset also board related variables -- unset BOARDFAMILY DESKTOP_AUTOLOGIN DEFAULT_CONSOLE FULL_DESKTOP MODULES MODULES_CURRENT MODULES_LEGACY MODULES_EDGE \ -- BOOTCONFIG MODULES_BLACKLIST MODULES_BLACKLIST_LEGACY MODULES_BLACKLIST_CURRENT MODULES_BLACKLIST_EDGE DEFAULT_OVERLAYS SERIALCON \ -- BUILD_MINIMAL RELEASE ATFBRANCH BOOT_FDT_FILE BOOTCONFIG_EDGE BOOTSOURCEDIR SRC_CMDLINE SRC_EXTLINUX INITRD_ARCH -- -- read -r BOARD BRANCH RELEASE BUILD_TARGET BUILD_STABILITY BUILD_IMAGE DESKTOP_ENVIRONMENT DESKTOP_ENVIRONMENT_CONFIG_NAME DESKTOP_APPGROUPS_SELECTED <<< "${line}" -- DESKTOP_APPGROUPS_SELECTED="${DESKTOP_APPGROUPS_SELECTED//,/ }" -- # read all possible configurations -- # shellcheck source=/dev/null -- source "${SRC}/config/boards/${BOARD}".eos 2> /dev/null -- # shellcheck source=/dev/null -- source "${SRC}/config/boards/${BOARD}".tvb 2> /dev/null -- # shellcheck source=/dev/null -- source "${SRC}/config/boards/${BOARD}".csc 2> /dev/null -- # shellcheck source=/dev/null -- source "${SRC}/config/boards/${BOARD}".wip 2> /dev/null -- # shellcheck source=/dev/null -- source "${SRC}/config/boards/${BOARD}".conf 2> /dev/null -- -- # override branch to build selected branches if defined -- if [[ -n "${BROVER}" ]]; then -- if [[ "${KERNEL_TARGET}" == *${BROVER}* ]]; then -- BRANCH=${BROVER} -- else -- continue -- fi -- fi -- -- # exceptions handling -- [[ ${BOARDFAMILY} == sun*i ]] && BOARDFAMILY=sunxi -- [[ ${BOARDFAMILY} == sun8i-v3s ]] && BOARDFAMILY=sunxi -- [[ ${BOARDFAMILY} == sun*iw* ]] && BOARDFAMILY=sunxi64 -- [[ ${BOARDFAMILY} == meson8b ]] && BOARDFAMILY=meson -- [[ ${BOARDFAMILY} == meson-* ]] && BOARDFAMILY=meson64 -- # small optimisation. we only (try to) build needed kernels -- if [[ $KERNEL_ONLY == yes ]]; then -- LINUXFAMILY="${BOARDFAMILY}" -- array_contains ARRAY "${LINUXFAMILY}${BRANCH}${BUILD_STABILITY}" && continue -- -- elif [[ $BUILD_IMAGE == no ]]; then -- -- continue -- -- fi -- ARRAY+=("${LINUXFAMILY}${BRANCH}${BUILD_STABILITY}") -- -- BUILD_DESKTOP="no" -- BUILD_MINIMAL="no" -- -- [[ ${BUILD_TARGET} == "desktop" && ${BSP_BUILD} != "yes" ]] && BUILD_DESKTOP="yes" -- [[ ${BUILD_TARGET} == "minimal" ]] && BUILD_MINIMAL="yes" -- [[ ${BSP_BUILD} == yes ]] && BUILD_STABILITY=$STABILITY -- -- # create a file and put grep style list of the one that must be skipped: sunxi\|sunxi64 -- [[ -f userpatches/family.skip ]] && grep -qw "$BOARDFAMILY" userpatches/family.skip && continue -- -- # create beta or stable -- if [[ "${BUILD_STABILITY}" == "${STABILITY}" ]]; then -- # check if currnt hash is the same as upstream -- if [[ "$IGNORE_HASH" != yes ]]; then -- local store_hash -- store_hash=$(check_hash) -- fi -- if [[ "$store_hash" != IDENTICAL ]]; then -- -- if [[ $1 != "dryrun" ]] && [[ $n -ge $START ]]; then -- ((n += 1)) -- while :; do -- if [[ $(find /run/armbian/*.pid 2> /dev/null | wc -l) -le ${MULTITHREAD} || ${MULTITHREAD} -eq 0 ]]; then -- break -- fi -- sleep 5 -- done -- -- display_alert "Building ${n}." -- if [[ "$KERNEL_ONLY" == "no" && "${MULTITHREAD}" -gt 0 ]]; then -- build_main & -- sleep $((RANDOM % 25)) -- elif [[ "${MULTITHREAD}" -gt 0 ]]; then -- build_main & -- sleep $((RANDOM % 5)) -- else -- build_main -- fi -- -- # create BSP for all boards -- elif [[ "${BSP_BUILD}" == yes ]]; then -- ((n += 1)) -- for BOARD in "${unique_boards[@]}"; do -- # shellcheck source=/dev/null -- source "${SRC}/config/boards/${BOARD}".eos 2> /dev/null -- # shellcheck source=/dev/null -- source "${SRC}/config/boards/${BOARD}".tvb 2> /dev/null -- # shellcheck source=/dev/null -- source "${SRC}/config/boards/${BOARD}".csc 2> /dev/null -- # shellcheck source=/dev/null -- source "${SRC}/config/boards/${BOARD}".wip 2> /dev/null -- # shellcheck source=/dev/null -- source "${SRC}/config/boards/${BOARD}".conf 2> /dev/null -- IFS=',' read -r -a RELBRANCH <<< "${KERNEL_TARGET}" -- for BRANCH in "${RELBRANCH[@]}"; do -- RELTARGETS=($(ls -1d config/distributions/*/ | cut -d"/" -f3)) -- # we don't need to cycle all distributions when making u-boot package -- [[ $BOOTONLY == "yes" ]] && RELTARGETS=(focal) -- for RELEASE in "${RELTARGETS[@]}"; do -- display_alert "BSP for ${BOARD} ${BRANCH} ${RELEASE}." -- if [[ "$IGNORE_HASH" == yes && "$KERNEL_ONLY" != "yes" && "${MULTITHREAD}" -gt 0 ]]; then -- build_main & -- sleep 0.02 -- elif [[ "${MULTITHREAD}" -gt 0 ]]; then -- build_main & -- sleep $((RANDOM % 5)) -- else -- build_main -- fi -- # unset non board related stuff -- unset_all -- done -- done -- done -- display_alert "Done building all BSP images" -- exit -- else -- ((n += 1)) -- # In dryrun it only prints out what will be build but also color green if file already exists -- FIND="$SRC/output/images/$BOARD/$upload_subdir/Armbian_$(cat "${SRC}"/VERSION)_${BOARD^}_${RELEASE}_${BRANCH}" -- if ls $FIND* 1> /dev/null 2>&1; then -- echo -ne "\e[0;92m" -- else -- echo -ne "\x1B[0m" -- fi -- printf "%s\t%-32s\t%-8s\t%-14s\t%-6s\t%-6s\t%-6s\t%-6s\n" "${n}." \ -- "$BOARD (${BOARDFAMILY})" "${BRANCH}" "${RELEASE}" "${DESKTOP_ENVIRONMENT}" "${BUILD_DESKTOP}" "${BUILD_MINIMAL}" "${DESKTOP_APPGROUPS_SELECTED}" -- fi -- fi -- fi -- -- # at which image to stop -- [[ "$STOP" == "$n" ]] && [[ $1 != "dryrun" ]] && exit -- done < "${BUILD_TARGETS}" -- --} -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index cec0c0fc7..6b14c18a2 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -73,15 +73,6 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/compilation/kernel.sh - source "${SRC}"/lib/functions/compilation/kernel.sh - --# no errors tolerated. invoked before each sourced file to make sure. --#set -o pipefail # trace ERR through pipes - will be enabled "soon" --#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled --set -o errtrace # trace ERR through - enabled --set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/compilation/patch/apply.sh --# shellcheck source=lib/functions/compilation/patch/apply.sh --source "${SRC}"/lib/functions/compilation/patch/apply.sh -- - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -@@ -118,6 +109,15 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/compilation/patch/kernel-pkg.sh - source "${SRC}"/lib/functions/compilation/patch/kernel-pkg.sh - -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/patch/patching.sh -+# shellcheck source=lib/functions/compilation/patch/patching.sh -+source "${SRC}"/lib/functions/compilation/patch/patching.sh -+ - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -@@ -370,15 +370,6 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/main/rootfs-image.sh - source "${SRC}"/lib/functions/main/rootfs-image.sh - --# no errors tolerated. invoked before each sourced file to make sure. --#set -o pipefail # trace ERR through pipes - will be enabled "soon" --#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled --set -o errtrace # trace ERR through - enabled --set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/multi/build-all.sh --# shellcheck source=lib/functions/multi/build-all.sh --source "${SRC}"/lib/functions/multi/build-all.sh -- - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - -From 68efe99a09da93c27a9cf20d1f14fc9354c73b92 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 19:27:06 +0100 -Subject: [PATCH] armbian-next: `interactive_desktop_main_configuration()` and - stderr'ed + error handl'ed dialog - -- use redirection to fd 3 for dialog, now cleanly on stderr -- `show_menu()` -> `dialog_menu()` et al -- interactive configuration now works again! ---- - lib/functions/configuration/config-desktop.sh | 61 ++++++++++++--------------- - lib/functions/configuration/interactive.sh | 14 +++--- - lib/functions/configuration/main-config.sh | 16 ++----- - lib/functions/configuration/menu.sh | 49 +++++++++++++-------- - lib/functions/general/host.sh | 2 +- - lib/functions/main/config-prepare.sh | 3 +- - 6 files changed, 72 insertions(+), 73 deletions(-) - -diff --git a/lib/functions/configuration/config-desktop.sh b/lib/functions/configuration/config-desktop.sh -index 32afa4a95..72ddd07ec 100644 ---- a/lib/functions/configuration/config-desktop.sh -+++ b/lib/functions/configuration/config-desktop.sh -@@ -66,7 +66,8 @@ function desktop_environment_check_if_valid() { - exit_with_error "${error_msg}" - } - --function desktop_main_configuration_interactive() { -+function interactive_desktop_main_configuration() { -+ [[ $BUILD_DESKTOP != "yes" ]] && return 0 # Only for desktops. - - # Myy : Once we got a list of selected groups, parse the PACKAGE_LIST inside configuration.sh - DESKTOP_ELEMENTS_DIR="${SRC}/config/desktop/${RELEASE}" -@@ -74,37 +75,36 @@ function desktop_main_configuration_interactive() { - DESKTOP_CONFIG_PREFIX="config_" - DESKTOP_APPGROUPS_DIR="${DESKTOP_ELEMENTS_DIR}/appgroups" - -- display_alert "Handling some" "desktop config stuff 1" "${DESKTOP_CONFIGS_DIR}" "debug" -+ display_alert "desktop-config" "DESKTOP_ENVIRONMENT entry: ${DESKTOP_ENVIRONMENT}" "debug" - -- if [[ $BUILD_DESKTOP == "yes" && -z $DESKTOP_ENVIRONMENT ]]; then -+ if [[ -z $DESKTOP_ENVIRONMENT ]]; then - options=() - desktop_environments_prepare_menu - if [[ "${options[0]}" == "" ]]; then - exit_with_error "No desktop environment seems to be available for your board ${BOARD} (ARCH : ${ARCH} - EXPERT : ${EXPERT})" - fi -- DESKTOP_ENVIRONMENT=$(show_menu "Choose a desktop environment" "$backtitle" "Select the default desktop environment to bundle with this image" "${options[@]}") -+ -+ display_alert "Desktops available" "${options[*]}" "debug" -+ dialog_menu "Choose a desktop environment" "$backtitle" "Select the default desktop environment to bundle with this image" "${options[@]}" -+ DESKTOP_ENVIRONMENT="${DIALOG_MENU_RESULT}" -+ - unset options - if [[ -z "${DESKTOP_ENVIRONMENT}" ]]; then - exit_with_error "No desktop environment selected..." - fi - fi -- display_alert "Handling some" "desktop config stuff 2" "debug" - -- if [[ $BUILD_DESKTOP == "yes" ]]; then -- DESKTOP_ENVIRONMENT_DIRPATH="${DESKTOP_CONFIGS_DIR}/${DESKTOP_ENVIRONMENT}" -- desktop_environment_check_if_valid # Make sure desktop config is sane. -- fi -+ display_alert "desktop-config" "DESKTOP_ENVIRONMENT selected: ${DESKTOP_ENVIRONMENT}" "debug" - -- display_alert "Handling some" "desktop config stuff 3" "debug" -+ DESKTOP_ENVIRONMENT_DIRPATH="${DESKTOP_CONFIGS_DIR}/${DESKTOP_ENVIRONMENT}" -+ desktop_environment_check_if_valid # Make sure desktop config is sane. - -- if [[ $BUILD_DESKTOP == "yes" && -z $DESKTOP_ENVIRONMENT_CONFIG_NAME ]]; then -- # FIXME Check for empty folders, just in case the current maintainer -- # messed up -- # Note, we could also ignore it and don't show anything in the previous -- # menu, but that hides information and make debugging harder, which I -- # don't like. Adding desktop environments as a maintainer is not a -- # trivial nor common task. -+ display_alert "desktop-config" "DESKTOP_ENVIRONMENT_CONFIG_NAME entry: ${DESKTOP_ENVIRONMENT_CONFIG_NAME}" "debug" - -+ if [[ -z $DESKTOP_ENVIRONMENT_CONFIG_NAME ]]; then -+ # @FIXME: Myy: Check for empty folders, just in case the current maintainer messed up -+ # Note, we could also ignore it and don't show anything in the previous menu, but that hides information and make debugging harder, which I -+ # don't like. Adding desktop environments as a maintainer is not a trivial nor common task. - options=() - for configuration in "${DESKTOP_ENVIRONMENT_DIRPATH}/${DESKTOP_CONFIG_PREFIX}"*; do - config_filename=$(basename ${configuration}) -@@ -112,38 +112,33 @@ function desktop_main_configuration_interactive() { - options+=("${config_filename}" "${config_name} configuration") - done - -- DESKTOP_ENVIRONMENT_CONFIG_NAME=$(show_menu "Choose the desktop environment config" "$backtitle" "Select the configuration for this environment.\nThese are sourced from ${desktop_environment_config_dir}" "${options[@]}") -+ dialog_menu "Choose the desktop environment config" "$backtitle" "Select the configuration for this environment.\nThese are sourced from ${desktop_environment_config_dir}" "${options[@]}" -+ DESKTOP_ENVIRONMENT_CONFIG_NAME="${DIALOG_MENU_RESULT}" - unset options - - if [[ -z $DESKTOP_ENVIRONMENT_CONFIG_NAME ]]; then - exit_with_error "No desktop configuration selected... Do you really want a desktop environment ?" - fi - fi -- display_alert "Handling some" "desktop config stuff 4" "debug" -+ display_alert "desktop-config" "DESKTOP_ENVIRONMENT_CONFIG_NAME exit: ${DESKTOP_ENVIRONMENT_CONFIG_NAME}" "debug" - -- if [[ $BUILD_DESKTOP == "yes" ]]; then -- DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH="${DESKTOP_ENVIRONMENT_DIRPATH}/${DESKTOP_ENVIRONMENT_CONFIG_NAME}" -- DESKTOP_ENVIRONMENT_PACKAGE_LIST_FILEPATH="${DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH}/packages" -- fi -+ export DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH="${DESKTOP_ENVIRONMENT_DIRPATH}/${DESKTOP_ENVIRONMENT_CONFIG_NAME}" -+ export DESKTOP_ENVIRONMENT_PACKAGE_LIST_FILEPATH="${DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH}/packages" - -+ display_alert "desktop-config" "DESKTOP_APPGROUPS_SELECTED+x entry: ${DESKTOP_APPGROUPS_SELECTED+x}" "debug" - # "-z ${VAR+x}" allows to check for unset variable - # Technically, someone might want to build a desktop with no additional - # appgroups. -- if [[ $BUILD_DESKTOP == "yes" && -z ${DESKTOP_APPGROUPS_SELECTED+x} ]]; then -+ if [[ -z ${DESKTOP_APPGROUPS_SELECTED+x} ]]; then - options=() - for appgroup_path in "${DESKTOP_APPGROUPS_DIR}/"*; do - appgroup="$(basename "${appgroup_path}")" - options+=("${appgroup}" "${appgroup^}" off) - done -- # FIXME: pardini: here's a subshell to run dialog. in the middle of the main config. refactor this away -- DESKTOP_APPGROUPS_SELECTED=$( -- show_select_menu \ -- "Choose desktop softwares to add" \ -- "$backtitle" \ -- "Select which kind of softwares you'd like to add to your build" \ -- "${options[@]}" -- ) -+ -+ dialog_checklist "Choose desktop softwares to add" "$backtitle" "Select which kind of softwares you'd like to add to your build" "${options[@]}" -+ DESKTOP_APPGROUPS_SELECTED="${DIALOG_CHECKLIST_RESULT}" - unset options - fi -- display_alert "Done with" "desktop config stuff - END" "debug" -+ display_alert "desktop-config" "DESKTOP_APPGROUPS_SELECTED exit: ${DESKTOP_APPGROUPS_SELECTED}" "debug" - } -diff --git a/lib/functions/configuration/interactive.sh b/lib/functions/configuration/interactive.sh -index 28486fa02..165f6257f 100644 ---- a/lib/functions/configuration/interactive.sh -+++ b/lib/functions/configuration/interactive.sh -@@ -22,7 +22,7 @@ function interactive_config_ask_kernel_only() { - [[ -n ${KERNEL_ONLY} ]] && return 0 - options+=("yes" "U-boot and kernel packages") - options+=("no" "Full OS image for flashing") -- dialog_if_terminal_set_vars --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags --menu "Select what to build" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" -+ dialog_if_terminal_set_vars --title "Choose an option" --backtitle "$backtitle" --no-tags --menu "Select what to build" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" - KERNEL_ONLY="${DIALOG_RESULT}" - [[ "${DIALOG_EXIT_CODE}" != "0" ]] && exit_with_error "You cancelled interactive during KERNEL_ONLY selection: '${DIALOG_EXIT_CODE}'" "Build cancelled: ${DIALOG_EXIT_CODE}" - unset options -@@ -33,7 +33,7 @@ function interactive_config_ask_kernel_configure() { - options+=("no" "Do not change the kernel configuration") - options+=("yes" "Show a kernel configuration menu before compilation") - options+=("prebuilt" "Use precompiled packages from Armbian repository") -- dialog_if_terminal_set_vars --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags --menu "Select the kernel configuration" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" -+ dialog_if_terminal_set_vars --title "Choose an option" --backtitle "$backtitle" --no-tags --menu "Select the kernel configuration" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" - KERNEL_CONFIGURE="${DIALOG_RESULT}" - [[ ${DIALOG_EXIT_CODE} != 0 ]] && exit_with_error "You cancelled interactive during kernel configuration" "Build cancelled" - unset options -@@ -83,7 +83,7 @@ function interactive_config_ask_board_list() { - fi - - DIALOGRC=$temp_rc \ -- dialog_if_terminal_set_vars --stdout --title "Choose a board" --backtitle "$backtitle" --scrollbar \ -+ dialog_if_terminal_set_vars --title "Choose a board" --backtitle "$backtitle" --scrollbar \ - --colors --extra-label "Show $WIP_BUTTON" --extra-button \ - --menu "Select the target board. Displaying:\n$STATE_DESCRIPTION" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" - BOARD="${DIALOG_RESULT}" -@@ -125,7 +125,7 @@ function interactive_config_ask_branch() { - if [[ "${#options[@]}" == 2 ]]; then - BRANCH="${options[0]}" - else -- dialog_if_terminal_set_vars --stdout --title "Choose a kernel" --backtitle "$backtitle" --colors \ -+ dialog_if_terminal_set_vars --title "Choose a kernel" --backtitle "$backtitle" --colors \ - --menu "Select the target kernel branch\nExact kernel versions depend on selected board" \ - $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" - BRANCH="${DIALOG_RESULT}" -@@ -141,7 +141,7 @@ function interactive_config_ask_release() { - - options=() - distros_options -- dialog_if_terminal_set_vars --stdout --title "Choose a release package base" --backtitle "$backtitle" --menu "Select the target OS release package base" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" -+ dialog_if_terminal_set_vars --title "Choose a release package base" --backtitle "$backtitle" --menu "Select the target OS release package base" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" - RELEASE="${DIALOG_RESULT}" - [[ -z ${RELEASE} ]] && exit_with_error "No release selected" - unset options -@@ -158,7 +158,7 @@ function interactive_config_ask_desktop_build() { - options=() - options+=("no" "Image with console interface (server)") - options+=("yes" "Image with desktop environment") -- dialog_if_terminal_set_vars --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ -+ dialog_if_terminal_set_vars --title "Choose image type" --backtitle "$backtitle" --no-tags \ - --menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" - BUILD_DESKTOP="${DIALOG_RESULT}" - unset options -@@ -177,7 +177,7 @@ function interactive_config_ask_standard_or_minimal() { - options=() - options+=("no" "Standard image with console interface") - options+=("yes" "Minimal image with console interface") -- dialog_if_terminal_set_vars --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ -+ dialog_if_terminal_set_vars --title "Choose image type" --backtitle "$backtitle" --no-tags \ - --menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" - BUILD_MINIMAL="${DIALOG_RESULT}" - unset options -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 848474b09..5f43fb075 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -217,7 +217,7 @@ function do_main_configuration() { - it is often used to in turn override those. - POST_FAMILY_CONFIG - -- desktop_main_configuration_interactive -+ interactive_desktop_main_configuration - - # dropbear needs to be configured differently # @TODO: rpardini: yes, and? are you a lost leftover comment from a previous era? - [[ $CRYPTROOT_ENABLE == yes && $RELEASE == xenial ]] && exit_with_error "Encrypted rootfs is not supported in Xenial" -@@ -295,17 +295,9 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - PACKAGE_LIST="$(one_line aggregate_all_cli "packages" " ")" - PACKAGE_LIST_ADDITIONAL="$(one_line aggregate_all_cli "packages.additional" " ")" - -- LOG_OUTPUT_FILE="$SRC/output/${LOG_SUBPATH}/debootstrap-list.log" -- -- # Dependent desktop packages -- # Myy : Sources packages from file here -- -- # Myy : FIXME Rename aggregate_all to aggregate_all_desktop # @TODO: rpardini: already done? - if [[ $BUILD_DESKTOP == "yes" ]]; then - PACKAGE_LIST_DESKTOP+="$(one_line aggregate_all_desktop "packages" " ")" -- echo -e "\nGroups selected ${DESKTOP_APPGROUPS_SELECTED} -> PACKAGES :" >> "${LOG_OUTPUT_FILE}" - fi -- unset LOG_OUTPUT_FILE - - DEBIAN_MIRROR='deb.debian.org/debian' - DEBIAN_SECURTY='security.debian.org/' -@@ -333,10 +325,8 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - # don't use mirrors that throws garbage on 404 - if [[ -z ${ARMBIAN_MIRROR} ]]; then - while true; do -- - ARMBIAN_MIRROR=$(wget -SO- -T 1 -t 1 https://redirect.armbian.com 2>&1 | egrep -i "Location" | awk '{print $2}' | head -1) - [[ ${ARMBIAN_MIRROR} != *armbian.hosthatch* ]] && break -- - done - fi - -@@ -363,10 +353,9 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - EXTENSION_PREPARE_CONFIG - - # apt-cacher-ng mirror configurarion -+ APT_MIRROR=$DEBIAN_MIRROR - if [[ $DISTRIBUTION == Ubuntu ]]; then - APT_MIRROR=$UBUNTU_MIRROR -- else -- APT_MIRROR=$DEBIAN_MIRROR - fi - - [[ -n $APT_PROXY_ADDR ]] && display_alert "Using custom apt-cacher-ng address" "$APT_PROXY_ADDR" "info" -@@ -391,6 +380,7 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - PACKAGE_LIST_UNINSTALL="$(cleanup_list aggregated_content)" - unset aggregated_content - -+ # @TODO: rpardini: this has to stop. refactor this into array or dict-based and stop the madness. - if [[ -n $PACKAGE_LIST_RM ]]; then - # Turns out that \b can be tricked by dashes. - # So if you remove mesa-utils but still want to install "mesa-utils-extra" -diff --git a/lib/functions/configuration/menu.sh b/lib/functions/configuration/menu.sh -index c0ecc6e06..64b5350f3 100644 ---- a/lib/functions/configuration/menu.sh -+++ b/lib/functions/configuration/menu.sh -@@ -1,47 +1,60 @@ - # Stuff involving dialog - - # rpardini: dialog reports what happened via nonzero exit codes. --# most certainly, we also want to capture the stdout of dialog. -+# we also want to capture the stdout of dialog. - # this is a helper function that handles the error logging on/off and does the capturing --# then reports via exported variables, which we can test directly. --# warning: this will exit on errors if dialog is not a terminal or running under CI, or if dialog not installed --# otherwise it will NOT exit on common errors. -+# then reports via exported variables, which the caller can/should test for later. -+# warning: this will exit with error if stdin/stdout/stderr is not a terminal or running under CI, or if dialog not installed -+# otherwise it will NOT exit with error, even if user cancelled. -+# This is a boring topic, see https://askubuntu.com/questions/491509/how-to-get-dialog-box-input-directed-to-a-variable - function dialog_if_terminal_set_vars() { - export DIALOG_RESULT="" - export DIALOG_EXIT_CODE=0 -+ - [[ ! -t 0 ]] && exit_with_error "stdin is not a terminal. can't use dialog." "dialog_if_terminal_set_vars ${*}" "err" -+ [[ ! -t 1 ]] && exit_with_error "stdout is not a terminal. can't use dialog." "dialog_if_terminal_set_vars ${*}" "err" -+ [[ ! -t 2 ]] && exit_with_error "stderr is not a terminal. can't use dialog." "dialog_if_terminal_set_vars ${*}" "err" -+ - [[ "${CI}" == "true" ]] && exit_with_error "CI=true. can't use dialog." "dialog_if_terminal_set_vars ${*}" "err" -+ - [[ ! -f /usr/bin/dialog ]] && exit_with_error "Dialog is not installed at /usr/bin/dialog" "dialog_if_terminal_set_vars ${*}" "err" -+ - set +e # allow errors through - set +o errtrace # do not trap errors inside a subshell/function - set +o errexit # disable -- DIALOG_RESULT=$(dialog "$@") -- export DIALOG_EXIT_CODE=$? -- export DIALOG_RESULT -+ -+ exec 3>&1 # open fd 3... -+ DIALOG_RESULT=$(dialog "$@" 2>&1 1>&3) # juggle fds and capture. -+ DIALOG_EXIT_CODE=$? # get the exit code. -+ exec 3>&- # close fd 3... -+ - set -e # back to normal - set -o errtrace # back to normal - set -o errexit # back to normal -- return 0 # always success -+ -+ return 0 # always success, caller must check DIALOG_EXIT_CODE and DIALOG_RESULT - } - - # Myy : Menu configuration for choosing desktop configurations --show_menu() { -+dialog_menu() { -+ export DIALOG_MENU_RESULT="" - provided_title=$1 - provided_backtitle=$2 - provided_menuname=$3 -- dialog_if_terminal_set_vars --stdout --title "$provided_title" --backtitle "${provided_backtitle}" --menu "$provided_menuname" $TTY_Y $TTY_X $((TTY_Y - 8)) "${@:4}" -- [[ $DIALOG_EXIT_CODE != 0 ]] && return $DIALOG_EXIT_CODE -- echo -n "${DIALOG_RESULT}" -+ dialog_if_terminal_set_vars --title "$provided_title" --backtitle "${provided_backtitle}" --menu "$provided_menuname" $TTY_Y $TTY_X $((TTY_Y - 8)) "${@:4}" -+ DIALOG_MENU_RESULT="${DIALOG_RESULT}" -+ return $DIALOG_EXIT_CODE - } - --# Myy : FIXME Factorize --show_select_menu() { -+# Almost identical, but is a checklist instead of menu -+dialog_checklist() { -+ export DIALOG_CHECKLIST_RESULT="" - provided_title=$1 - provided_backtitle=$2 - provided_menuname=$3 -- dialog_if_terminal_set_vars --stdout --title "${provided_title}" --backtitle "${provided_backtitle}" --checklist "${provided_menuname}" $TTY_Y $TTY_X $((TTY_Y - 8)) "${@:4}" -- [[ $DIALOG_EXIT_CODE != 0 ]] && return $DIALOG_EXIT_CODE -- echo -n "${DIALOG_RESULT}" -+ dialog_if_terminal_set_vars --title "${provided_title}" --backtitle "${provided_backtitle}" --checklist "${provided_menuname}" $TTY_Y $TTY_X $((TTY_Y - 8)) "${@:4}" -+ DIALOG_CHECKLIST_RESULT="${DIALOG_RESULT}" -+ return $DIALOG_EXIT_CODE - } - - # Other menu stuff -@@ -63,7 +76,7 @@ show_developer_warning() { - - Forum posts related to dev kernel, CSC, WIP and EOS boards - should be created in the \Z2\"Community forums\"\Zn section - " -- DIALOGRC=$temp_rc dialog_if_terminal_set_vars --stdout --title "Expert mode warning" --backtitle "${backtitle}" --colors --defaultno --no-label "I do not agree" --yes-label "I understand and agree" --yesno "$warn_text" "${TTY_Y}" "${TTY_X}" -+ DIALOGRC=$temp_rc dialog_if_terminal_set_vars --title "Expert mode warning" --backtitle "${backtitle}" --colors --defaultno --no-label "I do not agree" --yes-label "I understand and agree" --yesno "$warn_text" "${TTY_Y}" "${TTY_X}" - [[ ${DIALOG_EXIT_CODE} -ne 0 ]] && exit_with_error "Error switching to the expert mode" - SHOW_WARNING=no - } -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index ff5f9ee89..2af993dc9 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -268,7 +268,7 @@ prepare_host() { - display_alert "Low free space left" "$(($freespace / 1073741824)) GiB" "wrn" - # pause here since dialog-based menu will hide this message otherwise - echo -e "Press \e[0;33m\x1B[0m to abort compilation, \e[0;33m\x1B[0m to ignore and continue" -- read -+ read # @TODO: this fails if stdin is not a tty, or just hangs - fi - } - -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index 98a0260e6..e26f11b3f 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -17,6 +17,7 @@ function prepare_and_config_main_build_single() { - [[ -z $LANGUAGE ]] && export LANGUAGE="en_US:en" # set to english if not set - [[ -z $CONSOLE_CHAR ]] && export CONSOLE_CHAR="UTF-8" # set console to UTF-8 if not set - -+ # @TODO: rpardini: this definitely should NOT be done during config preparation. move outside - if [[ "${CONFIG_DEFS_ONLY}" != "yes" ]]; then - # set log path - LOG_SUBPATH=${LOG_SUBPATH:=debug} -@@ -40,7 +41,7 @@ function prepare_and_config_main_build_single() { - # PROGRESS_LOG_TO_FILE is either yes, or unset. (@TODO: this is still used in buildpkg) - if [[ $PROGRESS_LOG_TO_FILE != yes ]]; then unset PROGRESS_LOG_TO_FILE; fi - -- SHOW_WARNING=yes -+ export SHOW_WARNING=yes # If you try something that requires EXPERT=yes. - - display_alert "Starting single build process" "${BOARD}" "info" - - -From 8aed5b427cbc6fd3ddef54b604ee0a8287ebdd7b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 16:36:59 +0100 -Subject: [PATCH] armbian-next: logging: `SHOW_PIDS=yes` - ---- - lib/functions/logging/logging.sh | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index a3c6523ad..cb6876420 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -175,8 +175,13 @@ function display_alert() { - timing_info="${tool_color}(${normal_color}$(printf "%3s" "${SECONDS}")${tool_color})" # SECONDS is bash builtin for seconds since start of script. - fi - -+ local pids_info="" -+ if [[ "${SHOW_PIDS}" == "yes" ]]; then -+ pids_info="${tool_color}(${normal_color}$$ - ${BASHPID}${tool_color})" # BASHPID is the current subshell; $$ is parent's? -+ fi -+ - [[ -n $2 ]] && extra=" [${inline_logs_color} ${2} ${normal_color}]" -- echo -e "${normal_color}${left_marker}${padding}${level_indicator}${padding}${normal_color}${right_marker}${timing_info} ${normal_color}${message}${extra}${normal_color}" >&2 -+ echo -e "${normal_color}${left_marker}${padding}${level_indicator}${padding}${normal_color}${right_marker}${timing_info}${pids_info} ${normal_color}${message}${extra}${normal_color}" >&2 - - # Now write to CI, if we're running on it - if [[ "${CI}" == "true" ]] && [[ "${ci_log}" != "" ]]; then - -From 5ede8ce433706f6e98413a2e976c8698bbc85afa Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 16:36:18 +0100 -Subject: [PATCH] armbian-next: refactor and error-handle most of desktop - configuration, incl menus/dialog - -- `dialog_if_terminal_set_vars()` in place of `dialog_if_terminal()` ---- - lib/functions/configuration/config-desktop.sh | 137 ++++++++++--- - lib/functions/configuration/interactive.sh | 278 ++++++++++++++------------ - lib/functions/configuration/main-config.sh | 96 +-------- - lib/functions/configuration/menu.sh | 51 +++-- - lib/functions/general/repo.sh | 1 + - lib/functions/main/config-prepare.sh | 6 +- - 6 files changed, 289 insertions(+), 280 deletions(-) - -diff --git a/lib/functions/configuration/config-desktop.sh b/lib/functions/configuration/config-desktop.sh -index 89658fe3b..32afa4a95 100644 ---- a/lib/functions/configuration/config-desktop.sh -+++ b/lib/functions/configuration/config-desktop.sh -@@ -1,61 +1,60 @@ --desktop_element_available_for_arch() { -+function desktop_element_available_for_arch() { - local desktop_element_path="${1}" - local targeted_arch="${2}" -- - local arch_limitation_file="${1}/only_for" -- - echo "Checking if ${desktop_element_path} is available for ${targeted_arch} in ${arch_limitation_file}" >> "${DEST}"/${LOG_SUBPATH}/output.log - if [[ -f "${arch_limitation_file}" ]]; then -- grep -- "${targeted_arch}" "${arch_limitation_file}" -- return $? -- else -- return 0 -+ if ! grep -- "${targeted_arch}" "${arch_limitation_file}"; then -+ return 1 -+ fi - fi -+ return 0 - } --desktop_element_supported() { - -+function desktop_element_supported() { - local desktop_element_path="${1}" -- - local support_level_filepath="${desktop_element_path}/support" -+ export desktop_element_supported_result=0 - if [[ -f "${support_level_filepath}" ]]; then - local support_level="$(cat "${support_level_filepath}")" - if [[ "${support_level}" != "supported" && "${EXPERT}" != "yes" ]]; then -- return 65 -+ desktop_element_supported_result=65 -+ return 0 - fi -- -- desktop_element_available_for_arch "${desktop_element_path}" "${ARCH}" -- if [[ $? -ne 0 ]]; then -- return 66 -+ if ! desktop_element_available_for_arch "${desktop_element_path}" "${ARCH}"; then -+ desktop_element_supported_result=66 -+ return 0 - fi - else -- return 64 -+ desktop_element_supported_result=64 -+ return 0 - fi -- - return 0 -- - } --desktop_environments_prepare_menu() { -+ -+function desktop_environments_prepare_menu() { - for desktop_env_dir in "${DESKTOP_CONFIGS_DIR}/"*; do -- local desktop_env_name=$(basename ${desktop_env_dir}) -- local expert_infos="" -+ local desktop_env_name expert_infos="" desktop_element_supported_result=0 -+ desktop_env_name=$(basename ${desktop_env_dir}) - [[ "${EXPERT}" == "yes" ]] && expert_infos="[$(cat "${desktop_env_dir}/support" 2> /dev/null)]" -- desktop_element_supported "${desktop_env_dir}" "${ARCH}" && options+=("${desktop_env_name}" "${desktop_env_name^} desktop environment ${expert_infos}") -+ desktop_element_supported "${desktop_env_dir}" "${ARCH}" -+ [[ ${desktop_element_supported_result} == 0 ]] && options+=("${desktop_env_name}" "${desktop_env_name^} desktop environment ${expert_infos}") - done -+ return 0 - } --desktop_environment_check_if_valid() { - -- local error_msg="" -+function desktop_environment_check_if_valid() { -+ local error_msg="" desktop_element_supported_result=0 - desktop_element_supported "${DESKTOP_ENVIRONMENT_DIRPATH}" "${ARCH}" -- local retval=$? - -- if [[ ${retval} == 0 ]]; then -+ if [[ ${desktop_element_supported_result} == 0 ]]; then - return -- elif [[ ${retval} == 64 ]]; then -+ elif [[ ${desktop_element_supported_result} == 64 ]]; then - error_msg+="Either the desktop environment ${DESKTOP_ENVIRONMENT} does not exist " - error_msg+="or the file ${DESKTOP_ENVIRONMENT_DIRPATH}/support is missing" -- elif [[ ${retval} == 65 ]]; then -+ elif [[ ${desktop_element_supported_result} == 65 ]]; then - error_msg+="Only experts can build an image with the desktop environment \"${DESKTOP_ENVIRONMENT}\", since the Armbian team won't offer any support for it (EXPERT=${EXPERT})" -- elif [[ ${retval} == 66 ]]; then -+ elif [[ ${desktop_element_supported_result} == 66 ]]; then - error_msg+="The desktop environment \"${DESKTOP_ENVIRONMENT}\" has no packages for your targeted board architecture (BOARD=${BOARD} ARCH=${ARCH}). " - error_msg+="The supported boards architectures are : " - error_msg+="$(cat "${DESKTOP_ENVIRONMENT_DIRPATH}/only_for")" -@@ -66,3 +65,85 @@ desktop_environment_check_if_valid() { - - exit_with_error "${error_msg}" - } -+ -+function desktop_main_configuration_interactive() { -+ -+ # Myy : Once we got a list of selected groups, parse the PACKAGE_LIST inside configuration.sh -+ DESKTOP_ELEMENTS_DIR="${SRC}/config/desktop/${RELEASE}" -+ DESKTOP_CONFIGS_DIR="${DESKTOP_ELEMENTS_DIR}/environments" -+ DESKTOP_CONFIG_PREFIX="config_" -+ DESKTOP_APPGROUPS_DIR="${DESKTOP_ELEMENTS_DIR}/appgroups" -+ -+ display_alert "Handling some" "desktop config stuff 1" "${DESKTOP_CONFIGS_DIR}" "debug" -+ -+ if [[ $BUILD_DESKTOP == "yes" && -z $DESKTOP_ENVIRONMENT ]]; then -+ options=() -+ desktop_environments_prepare_menu -+ if [[ "${options[0]}" == "" ]]; then -+ exit_with_error "No desktop environment seems to be available for your board ${BOARD} (ARCH : ${ARCH} - EXPERT : ${EXPERT})" -+ fi -+ DESKTOP_ENVIRONMENT=$(show_menu "Choose a desktop environment" "$backtitle" "Select the default desktop environment to bundle with this image" "${options[@]}") -+ unset options -+ if [[ -z "${DESKTOP_ENVIRONMENT}" ]]; then -+ exit_with_error "No desktop environment selected..." -+ fi -+ fi -+ display_alert "Handling some" "desktop config stuff 2" "debug" -+ -+ if [[ $BUILD_DESKTOP == "yes" ]]; then -+ DESKTOP_ENVIRONMENT_DIRPATH="${DESKTOP_CONFIGS_DIR}/${DESKTOP_ENVIRONMENT}" -+ desktop_environment_check_if_valid # Make sure desktop config is sane. -+ fi -+ -+ display_alert "Handling some" "desktop config stuff 3" "debug" -+ -+ if [[ $BUILD_DESKTOP == "yes" && -z $DESKTOP_ENVIRONMENT_CONFIG_NAME ]]; then -+ # FIXME Check for empty folders, just in case the current maintainer -+ # messed up -+ # Note, we could also ignore it and don't show anything in the previous -+ # menu, but that hides information and make debugging harder, which I -+ # don't like. Adding desktop environments as a maintainer is not a -+ # trivial nor common task. -+ -+ options=() -+ for configuration in "${DESKTOP_ENVIRONMENT_DIRPATH}/${DESKTOP_CONFIG_PREFIX}"*; do -+ config_filename=$(basename ${configuration}) -+ config_name=${config_filename#"${DESKTOP_CONFIG_PREFIX}"} -+ options+=("${config_filename}" "${config_name} configuration") -+ done -+ -+ DESKTOP_ENVIRONMENT_CONFIG_NAME=$(show_menu "Choose the desktop environment config" "$backtitle" "Select the configuration for this environment.\nThese are sourced from ${desktop_environment_config_dir}" "${options[@]}") -+ unset options -+ -+ if [[ -z $DESKTOP_ENVIRONMENT_CONFIG_NAME ]]; then -+ exit_with_error "No desktop configuration selected... Do you really want a desktop environment ?" -+ fi -+ fi -+ display_alert "Handling some" "desktop config stuff 4" "debug" -+ -+ if [[ $BUILD_DESKTOP == "yes" ]]; then -+ DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH="${DESKTOP_ENVIRONMENT_DIRPATH}/${DESKTOP_ENVIRONMENT_CONFIG_NAME}" -+ DESKTOP_ENVIRONMENT_PACKAGE_LIST_FILEPATH="${DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH}/packages" -+ fi -+ -+ # "-z ${VAR+x}" allows to check for unset variable -+ # Technically, someone might want to build a desktop with no additional -+ # appgroups. -+ if [[ $BUILD_DESKTOP == "yes" && -z ${DESKTOP_APPGROUPS_SELECTED+x} ]]; then -+ options=() -+ for appgroup_path in "${DESKTOP_APPGROUPS_DIR}/"*; do -+ appgroup="$(basename "${appgroup_path}")" -+ options+=("${appgroup}" "${appgroup^}" off) -+ done -+ # FIXME: pardini: here's a subshell to run dialog. in the middle of the main config. refactor this away -+ DESKTOP_APPGROUPS_SELECTED=$( -+ show_select_menu \ -+ "Choose desktop softwares to add" \ -+ "$backtitle" \ -+ "Select which kind of softwares you'd like to add to your build" \ -+ "${options[@]}" -+ ) -+ unset options -+ fi -+ display_alert "Done with" "desktop config stuff - END" "debug" -+} -diff --git a/lib/functions/configuration/interactive.sh b/lib/functions/configuration/interactive.sh -index 1f6989ae9..28486fa02 100644 ---- a/lib/functions/configuration/interactive.sh -+++ b/lib/functions/configuration/interactive.sh -@@ -8,171 +8,183 @@ function interactive_config_prepare_terminal() { - export TTY_Y=$(($(stty size | awk '{print $1}') - 6)) # determine terminal height - fi - fi -- - # We'll use this title on all menus -- export backtitle="Armbian building script, https://www.armbian.com | https://docs.armbian.com | (c) 2013-2021 Igor Pecovnik " -+ export backtitle="Armbian building script, https://www.armbian.com | https://docs.armbian.com | (c) 2013-2022 Igor Pecovnik " - } - - function interactive_config_ask_kernel() { -- # @TODO: rpardini: should be refactored into 'menu' or something -+ interactive_config_ask_kernel_only -+ interactive_config_ask_kernel_configure -+} -+ -+function interactive_config_ask_kernel_only() { - # if KERNEL_ONLY, KERNEL_CONFIGURE, BOARD, BRANCH or RELEASE are not set, display selection menu -- if [[ -z $KERNEL_ONLY ]]; then -- options+=("yes" "U-boot and kernel packages") -- options+=("no" "Full OS image for flashing") -- KERNEL_ONLY=$(dialog_if_terminal --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags \ -- --menu "Select what to build" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- unset options -- fi -+ [[ -n ${KERNEL_ONLY} ]] && return 0 -+ options+=("yes" "U-boot and kernel packages") -+ options+=("no" "Full OS image for flashing") -+ dialog_if_terminal_set_vars --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags --menu "Select what to build" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" -+ KERNEL_ONLY="${DIALOG_RESULT}" -+ [[ "${DIALOG_EXIT_CODE}" != "0" ]] && exit_with_error "You cancelled interactive during KERNEL_ONLY selection: '${DIALOG_EXIT_CODE}'" "Build cancelled: ${DIALOG_EXIT_CODE}" -+ unset options -+} - -- if [[ -z $KERNEL_CONFIGURE ]]; then -- options+=("no" "Do not change the kernel configuration") -- options+=("yes" "Show a kernel configuration menu before compilation") -- options+=("prebuilt" "Use precompiled packages from Armbian repository") -- KERNEL_CONFIGURE=$(dialog_if_terminal --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags \ -- --menu "Select the kernel configuration" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- unset options -- fi -+function interactive_config_ask_kernel_configure() { -+ [[ -n ${KERNEL_CONFIGURE} ]] && return 0 -+ options+=("no" "Do not change the kernel configuration") -+ options+=("yes" "Show a kernel configuration menu before compilation") -+ options+=("prebuilt" "Use precompiled packages from Armbian repository") -+ dialog_if_terminal_set_vars --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags --menu "Select the kernel configuration" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" -+ KERNEL_CONFIGURE="${DIALOG_RESULT}" -+ [[ ${DIALOG_EXIT_CODE} != 0 ]] && exit_with_error "You cancelled interactive during kernel configuration" "Build cancelled" -+ unset options - } - - function interactive_config_ask_board_list() { -- if [[ -z $BOARD ]]; then -- WIP_STATE=supported -- WIP_BUTTON='CSC/WIP/EOS/TVB' -- STATE_DESCRIPTION=' - boards with high level of software maturity' -- temp_rc=$(mktemp) # @TODO: this is a _very_ early call to mktemp - no TMPDIR set yet - it needs to be cleaned-up somehow -- -- while true; do -- options=() -- if [[ $WIP_STATE == supported ]]; then -- for board in "${SRC}"/config/boards/*.conf; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "$(head -1 "${board}" | cut -d'#' -f2)") -- done -- else -- for board in "${SRC}"/config/boards/*.wip; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(WIP)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -- done -- for board in "${SRC}"/config/boards/*.csc; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(CSC)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -- done -- for board in "${SRC}"/config/boards/*.eos; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(EOS)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -- done -- for board in "${SRC}"/config/boards/*.tvb; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(TVB)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -- done -- fi -+ # if BOARD is not set, display selection menu -+ [[ -n ${BOARD} ]] && return 0 - -- if [[ $WIP_STATE != supported ]]; then -- cat <<- 'EOF' > "${temp_rc}" -- dialog_color = (RED,WHITE,OFF) -- screen_color = (WHITE,RED,ON) -- tag_color = (RED,WHITE,ON) -- item_selected_color = (WHITE,RED,ON) -- tag_selected_color = (WHITE,RED,ON) -- tag_key_selected_color = (WHITE,RED,ON) -- EOF -- else -- echo > "${temp_rc}" -- fi -- BOARD=$(DIALOGRC=$temp_rc dialog_if_terminal --stdout --title "Choose a board" --backtitle "$backtitle" --scrollbar \ -- --colors --extra-label "Show $WIP_BUTTON" --extra-button \ -- --menu "Select the target board. Displaying:\n$STATE_DESCRIPTION" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- STATUS=$? -- if [[ $STATUS == 3 ]]; then -- if [[ $WIP_STATE == supported ]]; then -- [[ $SHOW_WARNING == yes ]] && show_developer_warning -- STATE_DESCRIPTION=' - \Z1(CSC)\Zn - Community Supported Configuration\n - \Z1(WIP)\Zn - Work In Progress -- \n - \Z1(EOS)\Zn - End Of Support\n - \Z1(TVB)\Zn - TV boxes' -- WIP_STATE=unsupported -- WIP_BUTTON='matured' -- EXPERT=yes -- else -- STATE_DESCRIPTION=' - boards with high level of software maturity' -- WIP_STATE=supported -- WIP_BUTTON='CSC/WIP/EOS' -- EXPERT=no -- fi -- continue -- elif [[ $STATUS == 0 ]]; then -- break -- fi -- unset options -- done -- fi --} -+ WIP_STATE=supported -+ WIP_BUTTON='CSC/WIP/EOS/TVB' -+ STATE_DESCRIPTION=' - boards with high level of software maturity' -+ temp_rc=$(mktemp) # @TODO: this is a _very_ early call to mktemp - no TMPDIR set yet - it needs to be cleaned-up somehow - --function interactive_config_ask_branch() { -- # @TODO: rpardini, again, refactor into menu/interactive config stuff -- if [[ -z $BRANCH ]]; then -+ while true; do - options=() -- [[ $KERNEL_TARGET == *current* ]] && options+=("current" "Recommended. Come with best support") -- [[ $KERNEL_TARGET == *legacy* ]] && options+=("legacy" "Old stable / Legacy") -- [[ $KERNEL_TARGET == *edge* && $EXPERT = yes ]] && options+=("edge" "\Z1Bleeding edge from @kernel.org\Zn") -+ if [[ $WIP_STATE == supported ]]; then -+ for board in "${SRC}"/config/boards/*.conf; do -+ options+=("$(basename "${board}" | cut -d'.' -f1)" "$(head -1 "${board}" | cut -d'#' -f2)") -+ done -+ else -+ for board in "${SRC}"/config/boards/*.wip; do -+ options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(WIP)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -+ done -+ for board in "${SRC}"/config/boards/*.csc; do -+ options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(CSC)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -+ done -+ for board in "${SRC}"/config/boards/*.eos; do -+ options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(EOS)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -+ done -+ for board in "${SRC}"/config/boards/*.tvb; do -+ options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(TVB)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -+ done -+ fi -+ -+ if [[ $WIP_STATE != supported ]]; then -+ cat <<- 'EOF' > "${temp_rc}" -+ dialog_color = (RED,WHITE,OFF) -+ screen_color = (WHITE,RED,ON) -+ tag_color = (RED,WHITE,ON) -+ item_selected_color = (WHITE,RED,ON) -+ tag_selected_color = (WHITE,RED,ON) -+ tag_key_selected_color = (WHITE,RED,ON) -+ EOF -+ else -+ echo > "${temp_rc}" -+ fi -+ -+ DIALOGRC=$temp_rc \ -+ dialog_if_terminal_set_vars --stdout --title "Choose a board" --backtitle "$backtitle" --scrollbar \ -+ --colors --extra-label "Show $WIP_BUTTON" --extra-button \ -+ --menu "Select the target board. Displaying:\n$STATE_DESCRIPTION" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" -+ BOARD="${DIALOG_RESULT}" -+ STATUS=${DIALOG_EXIT_CODE} - -- # do not display selection dialog if only one kernel branch is available -- if [[ "${#options[@]}" == 2 ]]; then -- BRANCH="${options[0]}" -+ if [[ $STATUS == 3 ]]; then -+ if [[ $WIP_STATE == supported ]]; then -+ [[ $SHOW_WARNING == yes ]] && show_developer_warning -+ STATE_DESCRIPTION=' - \Z1(CSC)\Zn - Community Supported Configuration\n - \Z1(WIP)\Zn - Work In Progress -+ \n - \Z1(EOS)\Zn - End Of Support\n - \Z1(TVB)\Zn - TV boxes' -+ WIP_STATE=unsupported -+ WIP_BUTTON='matured' -+ EXPERT=yes -+ else -+ STATE_DESCRIPTION=' - boards with high level of software maturity' -+ WIP_STATE=supported -+ WIP_BUTTON='CSC/WIP/EOS' -+ EXPERT=no -+ fi -+ continue -+ elif [[ $STATUS == 0 ]]; then -+ break - else -- BRANCH=$(dialog_if_terminal --stdout --title "Choose a kernel" --backtitle "$backtitle" --colors \ -- --menu "Select the target kernel branch\nExact kernel versions depend on selected board" \ -- $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -+ exit_with_error "You cancelled interactive config" "Build cancelled, board not chosen" - fi - unset options -- [[ $BRANCH == dev && $SHOW_WARNING == yes ]] && show_developer_warning -+ done -+} -+ -+function interactive_config_ask_branch() { -+ # if BRANCH not set, display selection menu -+ [[ -n $BRANCH ]] && return 0 -+ options=() -+ [[ $KERNEL_TARGET == *current* ]] && options+=("current" "Recommended. Come with best support") -+ [[ $KERNEL_TARGET == *legacy* ]] && options+=("legacy" "Old stable / Legacy") -+ [[ $KERNEL_TARGET == *edge* && $EXPERT = yes ]] && options+=("edge" "\Z1Bleeding edge from @kernel.org\Zn") -+ -+ # do not display selection dialog if only one kernel branch is available -+ if [[ "${#options[@]}" == 2 ]]; then -+ BRANCH="${options[0]}" - else -- [[ $BRANCH == next ]] && KERNEL_TARGET="next" -- # next = new legacy. Should stay for backward compatibility, but be removed from menu above -- # or we left definitions in board configs and only remove menu -+ dialog_if_terminal_set_vars --stdout --title "Choose a kernel" --backtitle "$backtitle" --colors \ -+ --menu "Select the target kernel branch\nExact kernel versions depend on selected board" \ -+ $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" -+ BRANCH="${DIALOG_RESULT}" - fi -+ [[ -z ${BRANCH} ]] && exit_with_error "No kernel branch selected" -+ unset options - return 0 - } - - function interactive_config_ask_release() { -- if [[ $KERNEL_ONLY != yes && -z $RELEASE ]]; then -- options=() -- distros_options -- RELEASE=$(dialog_if_terminal --stdout --title "Choose a release package base" --backtitle "$backtitle" \ -- --menu "Select the target OS release package base" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- echo "options : ${options}" -- unset options -- fi -+ [[ $KERNEL_ONLY == yes ]] && return 0 # Don't ask if building packages only. -+ [[ -n ${RELEASE} ]] && return 0 -+ -+ options=() -+ distros_options -+ dialog_if_terminal_set_vars --stdout --title "Choose a release package base" --backtitle "$backtitle" --menu "Select the target OS release package base" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" -+ RELEASE="${DIALOG_RESULT}" -+ [[ -z ${RELEASE} ]] && exit_with_error "No release selected" -+ unset options - } - - function interactive_config_ask_desktop_build() { - # don't show desktop option if we choose minimal build - [[ $BUILD_MINIMAL == yes ]] && BUILD_DESKTOP=no - -- if [[ $KERNEL_ONLY != yes && -z $BUILD_DESKTOP ]]; then -- # read distribution support status which is written to the armbian-release file -- set_distribution_status -- options=() -- options+=("no" "Image with console interface (server)") -- options+=("yes" "Image with desktop environment") -- BUILD_DESKTOP=$(dialog_if_terminal --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ -- --menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- unset options -- [[ -z $BUILD_DESKTOP ]] && exit_with_error "No option selected" -- if [[ ${BUILD_DESKTOP} == "yes" ]]; then -- BUILD_MINIMAL=no -- SELECTED_CONFIGURATION="desktop" -- fi -+ [[ $KERNEL_ONLY == yes ]] && return 0 -+ [[ -n ${BUILD_DESKTOP} ]] && return 0 -+ # read distribution support status which is written to the armbian-release file -+ set_distribution_status -+ options=() -+ options+=("no" "Image with console interface (server)") -+ options+=("yes" "Image with desktop environment") -+ dialog_if_terminal_set_vars --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ -+ --menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" -+ BUILD_DESKTOP="${DIALOG_RESULT}" -+ unset options -+ [[ -z $BUILD_DESKTOP ]] && exit_with_error "No image type selected" -+ if [[ ${BUILD_DESKTOP} == "yes" ]]; then -+ BUILD_MINIMAL=no -+ SELECTED_CONFIGURATION="desktop" - fi - return 0 - } - - function interactive_config_ask_standard_or_minimal() { -- if [[ $KERNEL_ONLY != yes && $BUILD_DESKTOP == no && -z $BUILD_MINIMAL ]]; then -- options=() -- options+=("no" "Standard image with console interface") -- options+=("yes" "Minimal image with console interface") -- BUILD_MINIMAL=$(dialog_if_terminal --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ -- --menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- unset options -- [[ -z $BUILD_MINIMAL ]] && exit_with_error "No option selected" -- if [[ $BUILD_MINIMAL == "yes" ]]; then -- SELECTED_CONFIGURATION="cli_minimal" -- else -- SELECTED_CONFIGURATION="cli_standard" -- fi -+ [[ $KERNEL_ONLY == yes ]] && return 0 -+ [[ $BUILD_DESKTOP != no ]] && return 0 -+ [[ -n $BUILD_MINIMAL ]] && return 0 -+ options=() -+ options+=("no" "Standard image with console interface") -+ options+=("yes" "Minimal image with console interface") -+ dialog_if_terminal_set_vars --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ -+ --menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}" -+ BUILD_MINIMAL="${DIALOG_RESULT}" -+ unset options -+ [[ -z $BUILD_MINIMAL ]] && exit_with_error "No standard/minimal selected" -+ if [[ $BUILD_MINIMAL == "yes" ]]; then -+ SELECTED_CONFIGURATION="cli_minimal" -+ else -+ SELECTED_CONFIGURATION="cli_standard" - fi - } -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 883550d79..848474b09 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -217,98 +217,7 @@ function do_main_configuration() { - it is often used to in turn override those. - POST_FAMILY_CONFIG - -- display_alert "Handling some" "desktop config stuff 1" "debug" -- -- # Myy : Once we got a list of selected groups, parse the PACKAGE_LIST inside configuration.sh -- DESKTOP_ELEMENTS_DIR="${SRC}/config/desktop/${RELEASE}" -- DESKTOP_CONFIGS_DIR="${DESKTOP_ELEMENTS_DIR}/environments" -- DESKTOP_CONFIG_PREFIX="config_" -- DESKTOP_APPGROUPS_DIR="${DESKTOP_ELEMENTS_DIR}/appgroups" -- -- if [[ $BUILD_DESKTOP == "yes" && -z $DESKTOP_ENVIRONMENT ]]; then -- -- options=() -- desktop_environments_prepare_menu -- -- if [[ "${options[0]}" == "" ]]; then -- exit_with_error "No desktop environment seems to be available for your board ${BOARD} (ARCH : ${ARCH} - EXPERT : ${EXPERT})" -- fi -- -- DESKTOP_ENVIRONMENT=$(show_menu "Choose a desktop environment" "$backtitle" "Select the default desktop environment to bundle with this image" "${options[@]}") -- -- unset options -- -- if [[ -z "${DESKTOP_ENVIRONMENT}" ]]; then -- exit_with_error "No desktop environment selected..." -- fi -- -- fi -- display_alert "Handling some" "desktop config stuff 2" "debug" -- -- if [[ $BUILD_DESKTOP == "yes" ]]; then -- # Expected environment variables : -- # - options -- # - ARCH -- -- DESKTOP_ENVIRONMENT_DIRPATH="${DESKTOP_CONFIGS_DIR}/${DESKTOP_ENVIRONMENT}" -- -- desktop_environment_check_if_valid -- fi -- display_alert "Handling some" "desktop config stuff 3" "debug" -- -- if [[ $BUILD_DESKTOP == "yes" && -z $DESKTOP_ENVIRONMENT_CONFIG_NAME ]]; then -- # FIXME Check for empty folders, just in case the current maintainer -- # messed up -- # Note, we could also ignore it and don't show anything in the previous -- # menu, but that hides information and make debugging harder, which I -- # don't like. Adding desktop environments as a maintainer is not a -- # trivial nor common task. -- -- options=() -- for configuration in "${DESKTOP_ENVIRONMENT_DIRPATH}/${DESKTOP_CONFIG_PREFIX}"*; do -- config_filename=$(basename ${configuration}) -- config_name=${config_filename#"${DESKTOP_CONFIG_PREFIX}"} -- options+=("${config_filename}" "${config_name} configuration") -- done -- -- DESKTOP_ENVIRONMENT_CONFIG_NAME=$(show_menu "Choose the desktop environment config" "$backtitle" "Select the configuration for this environment.\nThese are sourced from ${desktop_environment_config_dir}" "${options[@]}") -- unset options -- -- if [[ -z $DESKTOP_ENVIRONMENT_CONFIG_NAME ]]; then -- exit_with_error "No desktop configuration selected... Do you really want a desktop environment ?" -- fi -- fi -- display_alert "Handling some" "desktop config stuff 4" "debug" -- -- if [[ $BUILD_DESKTOP == "yes" ]]; then -- DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH="${DESKTOP_ENVIRONMENT_DIRPATH}/${DESKTOP_ENVIRONMENT_CONFIG_NAME}" -- DESKTOP_ENVIRONMENT_PACKAGE_LIST_FILEPATH="${DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH}/packages" -- fi -- -- # "-z ${VAR+x}" allows to check for unset variable -- # Technically, someone might want to build a desktop with no additional -- # appgroups. -- if [[ $BUILD_DESKTOP == "yes" && -z ${DESKTOP_APPGROUPS_SELECTED+x} ]]; then -- -- options=() -- for appgroup_path in "${DESKTOP_APPGROUPS_DIR}/"*; do -- appgroup="$(basename "${appgroup_path}")" -- options+=("${appgroup}" "${appgroup^}" off) -- done -- -- # FIXME: pardini: here's a subshell to run dialog. in the middle of the main config. refactor this away -- DESKTOP_APPGROUPS_SELECTED=$( -- show_select_menu \ -- "Choose desktop softwares to add" \ -- "$backtitle" \ -- "Select which kind of softwares you'd like to add to your build" \ -- "${options[@]}" -- ) -- -- unset options -- fi -- -- display_alert "Done with" "desktop config stuff - END" "debug" -+ desktop_main_configuration_interactive - - # dropbear needs to be configured differently # @TODO: rpardini: yes, and? are you a lost leftover comment from a previous era? - [[ $CRYPTROOT_ENABLE == yes && $RELEASE == xenial ]] && exit_with_error "Encrypted rootfs is not supported in Xenial" -@@ -336,9 +245,6 @@ function do_main_configuration() { - CLI_CONFIG_PATH="${SRC}/config/cli/${RELEASE}" - DEBOOTSTRAP_CONFIG_PATH="${CLI_CONFIG_PATH}/debootstrap" - -- if [[ $? != 0 ]]; then -- exit_with_error "The desktop environment ${DESKTOP_ENVIRONMENT} is not available for your architecture ${ARCH}" -- fi - - AGGREGATION_SEARCH_ROOT_ABSOLUTE_DIRS=" - ${SRC}/config -diff --git a/lib/functions/configuration/menu.sh b/lib/functions/configuration/menu.sh -index 92afcc5c5..c0ecc6e06 100644 ---- a/lib/functions/configuration/menu.sh -+++ b/lib/functions/configuration/menu.sh -@@ -1,10 +1,27 @@ - # Stuff involving dialog - --# Pardini: dialog_if_terminal prints error and exits if stdin is not a terminal, or if running under CI. --function dialog_if_terminal() { -- [[ ! -t 0 ]] && exit_with_error "stdin is not a terminal. can't use dialog." "dialog_if_terminal ${*}" "err" -- [[ "${CI}" == "true" ]] && exit_with_error "CI=true. can't use dialog." "dialog_if_terminal ${*}" "err" -- dialog "$@" -+# rpardini: dialog reports what happened via nonzero exit codes. -+# most certainly, we also want to capture the stdout of dialog. -+# this is a helper function that handles the error logging on/off and does the capturing -+# then reports via exported variables, which we can test directly. -+# warning: this will exit on errors if dialog is not a terminal or running under CI, or if dialog not installed -+# otherwise it will NOT exit on common errors. -+function dialog_if_terminal_set_vars() { -+ export DIALOG_RESULT="" -+ export DIALOG_EXIT_CODE=0 -+ [[ ! -t 0 ]] && exit_with_error "stdin is not a terminal. can't use dialog." "dialog_if_terminal_set_vars ${*}" "err" -+ [[ "${CI}" == "true" ]] && exit_with_error "CI=true. can't use dialog." "dialog_if_terminal_set_vars ${*}" "err" -+ [[ ! -f /usr/bin/dialog ]] && exit_with_error "Dialog is not installed at /usr/bin/dialog" "dialog_if_terminal_set_vars ${*}" "err" -+ set +e # allow errors through -+ set +o errtrace # do not trap errors inside a subshell/function -+ set +o errexit # disable -+ DIALOG_RESULT=$(dialog "$@") -+ export DIALOG_EXIT_CODE=$? -+ export DIALOG_RESULT -+ set -e # back to normal -+ set -o errtrace # back to normal -+ set -o errexit # back to normal -+ return 0 # always success - } - - # Myy : Menu configuration for choosing desktop configurations -@@ -12,14 +29,9 @@ show_menu() { - provided_title=$1 - provided_backtitle=$2 - provided_menuname=$3 -- # Myy : I don't know why there's a TTY_Y - 8... -- #echo "Provided title : $provided_title" -- #echo "Provided backtitle : $provided_backtitle" -- #echo "Provided menuname : $provided_menuname" -- #echo "Provided options : " "${@:4}" -- #echo "TTY X: $TTY_X Y: $TTY_Y" -- dialog_if_terminal --stdout --title "$provided_title" --backtitle "${provided_backtitle}" \ -- --menu "$provided_menuname" $TTY_Y $TTY_X $((TTY_Y - 8)) "${@:4}" -+ dialog_if_terminal_set_vars --stdout --title "$provided_title" --backtitle "${provided_backtitle}" --menu "$provided_menuname" $TTY_Y $TTY_X $((TTY_Y - 8)) "${@:4}" -+ [[ $DIALOG_EXIT_CODE != 0 ]] && return $DIALOG_EXIT_CODE -+ echo -n "${DIALOG_RESULT}" - } - - # Myy : FIXME Factorize -@@ -27,12 +39,12 @@ show_select_menu() { - provided_title=$1 - provided_backtitle=$2 - provided_menuname=$3 -- dialog_if_terminal --stdout --title "${provided_title}" --backtitle "${provided_backtitle}" \ -- --checklist "${provided_menuname}" $TTY_Y $TTY_X $((TTY_Y - 8)) "${@:4}" -+ dialog_if_terminal_set_vars --stdout --title "${provided_title}" --backtitle "${provided_backtitle}" --checklist "${provided_menuname}" $TTY_Y $TTY_X $((TTY_Y - 8)) "${@:4}" -+ [[ $DIALOG_EXIT_CODE != 0 ]] && return $DIALOG_EXIT_CODE -+ echo -n "${DIALOG_RESULT}" - } - - # Other menu stuff -- - show_developer_warning() { - local temp_rc - temp_rc=$(mktemp) # @TODO: this is a _very_ early call to mktemp - no TMPDIR set yet - it needs to be cleaned-up somehow -@@ -51,16 +63,14 @@ show_developer_warning() { - - Forum posts related to dev kernel, CSC, WIP and EOS boards - should be created in the \Z2\"Community forums\"\Zn section - " -- DIALOGRC=$temp_rc dialog_if_terminal --title "Expert mode warning" --backtitle "${backtitle}" --colors --defaultno --no-label "I do not agree" \ -- --yes-label "I understand and agree" --yesno "$warn_text" "${TTY_Y}" "${TTY_X}" -- [[ $? -ne 0 ]] && exit_with_error "Error switching to the expert mode" -+ DIALOGRC=$temp_rc dialog_if_terminal_set_vars --stdout --title "Expert mode warning" --backtitle "${backtitle}" --colors --defaultno --no-label "I do not agree" --yes-label "I understand and agree" --yesno "$warn_text" "${TTY_Y}" "${TTY_X}" -+ [[ ${DIALOG_EXIT_CODE} -ne 0 ]] && exit_with_error "Error switching to the expert mode" - SHOW_WARNING=no - } - - # Stuff that was in config files - function distro_menu() { - # create a select menu for choosing a distribution based EXPERT status -- - local distrib_dir="${1}" - - if [[ -d "${distrib_dir}" && -f "${distrib_dir}/support" ]]; then -@@ -75,7 +85,6 @@ function distro_menu() { - options+=("${distro_codename}" "${distro_fullname} ${expert_infos}") - fi - fi -- - } - - function distros_options() { -diff --git a/lib/functions/general/repo.sh b/lib/functions/general/repo.sh -index be3121527..155151300 100644 ---- a/lib/functions/general/repo.sh -+++ b/lib/functions/general/repo.sh -@@ -193,6 +193,7 @@ repo-manipulate() { - LIST=("${new_list[@]}") - LIST_LENGTH=$((${#LIST[@]} / 2)) - exec 3>&1 -+ # @TODO: this is broken!! revisit - TARGET_VERSION=$(dialog_if_terminal --cancel-label "Cancel" --backtitle "BACKTITLE" --no-collapse --title "Remove packages from repositories" --clear --menu "Delete" $((9 + ${LIST_LENGTH})) 82 65 "${LIST[@]}" 2>&1 1>&3) - exitstatus=$? - exec 3>&- -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index 875295a2a..98a0260e6 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -82,7 +82,7 @@ function prepare_and_config_main_build_single() { - [[ -z $KERNEL_ONLY ]] && exit_with_error "No option selected: KERNEL_ONLY" - [[ -z $KERNEL_CONFIGURE ]] && exit_with_error "No option selected: KERNEL_CONFIGURE" - -- interactive_config_ask_board_list -+ interactive_config_ask_board_list # @TODO: rpardini: This obtains a list of boards. refactor that... - [[ -z $BOARD ]] && exit_with_error "No board selected: BOARD" - - if [[ -f $SRC/config/boards/${BOARD}.conf ]]; then -@@ -113,7 +113,7 @@ function prepare_and_config_main_build_single() { - [[ $KERNEL_TARGET != *$BRANCH* ]] && display_alert "Kernel branch not defined for this board" "$BRANCH for ${BOARD}" "warn" - - interactive_config_ask_release -- [[ -z $RELEASE ]] && exit_with_error "No release selected: RELEASE" -+ [[ -z $RELEASE && ${KERNEL_ONLY} != yes ]] && exit_with_error "No release selected: RELEASE" - - interactive_config_ask_desktop_build - -@@ -191,7 +191,7 @@ function prepare_and_config_main_build_single() { - export KERNEL_MAJOR=5 - export KERNEL_MAJOR_SHALLOW_TAG="v${KERNEL_MAJOR_MINOR}-rc1" - elif linux-version compare "${KERNEL_MAJOR_MINOR}" ge "4.4" && linux-version compare "${KERNEL_MAJOR_MINOR}" lt "5.0"; then -- export KERNEL_MAJOR=4 # We support 4.x from 4.4; all require custom packaging. -+ export KERNEL_MAJOR=4 # We support 4.x from 4.4; all require custom packaging. - export KERNEL_MAJOR_SHALLOW_TAG="v${KERNEL_MAJOR_MINOR}-rc1" - else - exit_with_error "Kernel series unsupported" "'${KERNEL_MAJOR_MINOR}' is unsupported, or bad config" - -From 6d5802b05da59513e169dd2837d293b8d99e95c4 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 01:27:39 +0100 -Subject: [PATCH] [WiP] ddk stuff, allow if not in `$KERNEL_TARGET` - ---- - lib/functions/main/config-prepare.sh | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index 56616cff6..875295a2a 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -102,7 +102,7 @@ function prepare_and_config_main_build_single() { - display_alert "Sourcing board configuration" "${BOARD}.${BOARD_TYPE}" "info" - # shellcheck source=/dev/null - source "${SRC}/config/boards/${BOARD}.${BOARD_TYPE}" -- LINUXFAMILY="${BOARDFAMILY}" -+ LINUXFAMILY="${BOARDFAMILY}" # @TODO: wtf? why? this is (100%?) rewritten by family config! - - # @TODO: interesting. this sourced the board config. What sources the family? do_main_configuration! - -@@ -110,7 +110,7 @@ function prepare_and_config_main_build_single() { - - interactive_config_ask_branch - [[ -z $BRANCH ]] && exit_with_error "No kernel branch selected: BRANCH" -- [[ $KERNEL_TARGET != *$BRANCH* ]] && exit_with_error "Kernel branch not defined for this board" "$BRANCH" -+ [[ $KERNEL_TARGET != *$BRANCH* ]] && display_alert "Kernel branch not defined for this board" "$BRANCH for ${BOARD}" "warn" - - interactive_config_ask_release - [[ -z $RELEASE ]] && exit_with_error "No release selected: RELEASE" - -From e1e33a3e9413fda79f7240abf61a9bd3ef95d27a Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 00:39:31 +0100 -Subject: [PATCH] armbian-next: split `compile_kernel()` function into smaller - functions (+logging) - -- `do_with_logging()` galore, much better error reporting for kernel -- `do_with_hooks()` is for the future, just a placeholder for now ---- - lib/functions/compilation/kernel.sh | 135 +++++++++++++++++++++--------------- - lib/functions/main/default-build.sh | 2 +- - 2 files changed, 79 insertions(+), 58 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 28debe659..5cde24980 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -44,7 +44,28 @@ function run_kernel_make_long_running() { - - function compile_kernel() { - local kernel_work_dir="${SRC}/cache/sources/${LINUXSOURCEDIR}" -+ display_alert "Kernel build starting" "${LINUXSOURCEDIR}" "info" -+ LOG_SECTION="kernel_prepare_git" do_with_logging do_with_hooks kernel_prepare_git -+ LOG_SECTION="kernel_maybe_clean" do_with_logging do_with_hooks kernel_maybe_clean -+ local version hash pre_patch_version -+ local kernel_packaging_target -+ LOG_SECTION="kernel_prepare_patching" do_with_logging do_with_hooks kernel_prepare_patching -+ LOG_SECTION="kernel_patching" do_with_logging do_with_hooks kernel_patching -+ [[ $CREATE_PATCHES == yes ]] && userpatch_create "kernel" # create patch for manual source changes -+ local version -+ local toolchain -+ LOG_SECTION="kernel_config" do_with_logging do_with_hooks kernel_config -+ LOG_SECTION="kernel_package_source" do_with_logging do_with_hooks kernel_package_source -+ LOG_SECTION="kernel_make_headers_dtbs_image_modules" do_with_logging do_with_hooks kernel_make_headers_dtbs_image_modules -+ LOG_SECTION="kernel_package" do_with_logging do_with_hooks kernel_package -+ display_alert "Done with" "kernel compile" "debug" -+ cd .. || exit -+ rm -f linux-firmware-image-*.deb # remove firmware image packages here - easier than patching ~40 packaging scripts at once -+ rsync --remove-source-files -rq ./*.deb "${DEB_STORAGE}/" || exit_with_error "Failed moving kernel DEBs" -+ return 0 -+} - -+function kernel_prepare_git() { - if [[ -n $KERNELSOURCE ]]; then - display_alert "Downloading sources" "kernel" "git" - -@@ -62,15 +83,20 @@ function compile_kernel() { - GIT_COLD_BUNDLE_URL="${MAINLINE_KERNEL_COLD_BUNDLE_URL}" \ - fetch_from_repo "$KERNELSOURCE" "unused:set via GIT_FIXED_WORKDIR" "$KERNELBRANCH" "yes" - fi -+} - -+function kernel_maybe_clean() { - if [[ $CLEAN_LEVEL == *make* ]]; then - display_alert "Cleaning" "$LINUXSOURCEDIR" "info" - ( - cd "${kernel_work_dir}" - make ARCH="${ARCHITECTURE}" clean > /dev/null 2>&1 - ) -+ fasthash_debug "post make clean" - fi -- fasthash_debug "post git clean" -+} -+ -+function kernel_prepare_patching() { - - if [[ $USE_OVERLAYFS == yes ]]; then - display_alert "Using overlayfs_wrapper" "kernel_${LINUXFAMILY}_${BRANCH}" "debug" -@@ -82,20 +108,21 @@ function compile_kernel() { - rm -f localversion - - # read kernel version -- local version hash pre_patch_version - version=$(grab_version "$kernel_work_dir") - pre_patch_version="${version}" - display_alert "Pre-patch kernel version" "${pre_patch_version}" "debug" - - # different packaging for 4.3+ -- local kernel_packaging_target="deb-pkg" -+ kernel_packaging_target="deb-pkg" - if linux-version compare "${version}" ge 4.3; then - kernel_packaging_target="bindeb-pkg" - fi - - # read kernel git hash - hash=$(git --git-dir="$kernel_work_dir"/.git rev-parse HEAD) -+} - -+function kernel_patching() { - ## Start kernel patching process. - ## There's a few objectives here: - ## - (always) produce a fasthash: represents "what would be done" (eg: md5 of a patch, crc32 of description). -@@ -130,12 +157,10 @@ function compile_kernel() { - - fasthash_debug "finish" - finish_fasthash "kernel" # this reports the final hash and creates git branch to build ID. All modifications commited. -+} - -- # create patch for manual source changes in debug mode -- [[ $CREATE_PATCHES == yes ]] && userpatch_create "kernel" -- -+function kernel_config() { - # re-read kernel version after patching -- local version - version=$(grab_version "$kernel_work_dir") - - display_alert "Compiling $BRANCH kernel" "$version" "info" -@@ -146,7 +171,6 @@ function compile_kernel() { - display_alert "Native compilation" "target ${ARCH} on host $(dpkg --print-architecture)" - elif [[ $(dpkg --print-architecture) == amd64 ]]; then - display_alert "Cross compilation" "target ${ARCH} on host $(dpkg --print-architecture)" -- local toolchain - toolchain=$(find_toolchain "$KERNEL_COMPILER" "$KERNEL_USE_GCC") - [[ -z $toolchain ]] && exit_with_error "Could not find required toolchain" "${KERNEL_COMPILER}gcc $KERNEL_USE_GCC" - else -@@ -224,14 +248,57 @@ function compile_kernel() { - - # Restore the date of .config. Above delta is a pure function, theoretically. - set_files_modification_time "${kernel_config_mtime}" ".config" -+} - -+function kernel_package_source() { - # create linux-source package - with already patched sources - # We will build this package first and clear the memory. - if [[ $BUILD_KSRC != no ]]; then - display_alert "Creating kernel source package" "${LINUXCONFIG}" "info" - create_linux-source_package - fi -+} -+ -+create_linux-source_package() { -+ ts=$(date +%s) -+ local sources_pkg_dir tmp_src_dir -+ tmp_src_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. -+ -+ sources_pkg_dir=${tmp_src_dir}/${CHOSEN_KSRC}_${REVISION}_all -+ mkdir -p "${sources_pkg_dir}"/usr/src/ \ -+ "${sources_pkg_dir}"/usr/share/doc/linux-source-${version}-${LINUXFAMILY} \ -+ "${sources_pkg_dir}"/DEBIAN - -+ cp "${SRC}/config/kernel/${LINUXCONFIG}.config" "default_${LINUXCONFIG}.config" -+ xz < .config > "${sources_pkg_dir}/usr/src/${LINUXCONFIG}_${version}_${REVISION}_config.xz" -+ -+ display_alert "Compressing sources for the linux-source package" -+ tar cp --directory="$kernel_work_dir" --exclude='.git' --owner=root . | -+ pv -N "$(logging_echo_prefix_for_pv "compress_kernel_sources") $display_name" -p -b -r -s "$(du -sb "$kernel_work_dir" --exclude=='.git' | cut -f1)" | -+ pixz -0 > "${sources_pkg_dir}/usr/src/linux-source-${version}-${LINUXFAMILY}.tar.xz" # @TODO: .deb will compress this later. -0 for now, but should be a plain tar -+ cp COPYING "${sources_pkg_dir}/usr/share/doc/linux-source-${version}-${LINUXFAMILY}/LICENSE" -+ -+ cat <<- EOF > "${sources_pkg_dir}"/DEBIAN/control -+ Package: linux-source-${version}-${BRANCH}-${LINUXFAMILY} -+ Version: ${version}-${BRANCH}-${LINUXFAMILY}+${REVISION} -+ Architecture: all -+ Maintainer: $MAINTAINER <$MAINTAINERMAIL> -+ Section: kernel -+ Priority: optional -+ Depends: binutils, coreutils -+ Provides: linux-source, linux-source-${version}-${LINUXFAMILY} -+ Recommends: gcc, make -+ Description: This package provides the source code for the Linux kernel $version -+ EOF -+ -+ fakeroot_dpkg_deb_build -z0 "${sources_pkg_dir}" "${sources_pkg_dir}.deb" -+ rsync --remove-source-files -rq "${sources_pkg_dir}.deb" "${DEB_STORAGE}/" -+ -+ te=$(date +%s) -+ display_alert "Make the linux-source package" "$(($te - $ts)) sec." "info" -+} -+ -+function kernel_make_headers_dtbs_image_modules() { - local -a build_targets=("headers") - [[ "${KERNEL_BUILD_DTBS:-yes}" == "yes" ]] && build_targets+=("dtbs") - build_targets+=("${KERNEL_IMAGE_TYPE}" modules) -@@ -253,6 +320,9 @@ function compile_kernel() { - if [[ ! -f "${check_built_kernel_file}" ]]; then - exit_with_error "Kernel was not built" "${check_built_kernel_file}" - fi -+} -+ -+function kernel_package() { - - local -a prepackage_targets=(modules_install headers_install) - [[ "${KERNEL_BUILD_DTBS:-yes}" == "yes" ]] && prepackage_targets+=("dtbs_install") -@@ -279,53 +349,4 @@ function compile_kernel() { - fi - - display_alert "Package building done" "${LINUXCONFIG} $kernel_packaging_target" "info" -- -- display_alert "Done with" "kernel compile" "debug" -- -- cd .. || exit -- # remove firmware image packages here - easier than patching ~40 packaging scripts at once -- rm -f linux-firmware-image-*.deb -- -- rsync --remove-source-files -rq ./*.deb "${DEB_STORAGE}/" || exit_with_error "Failed moving kernel DEBs" -- -- return 0 --} -- --create_linux-source_package() { -- ts=$(date +%s) -- local sources_pkg_dir tmp_src_dir -- tmp_src_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. -- -- sources_pkg_dir=${tmp_src_dir}/${CHOSEN_KSRC}_${REVISION}_all -- mkdir -p "${sources_pkg_dir}"/usr/src/ \ -- "${sources_pkg_dir}"/usr/share/doc/linux-source-${version}-${LINUXFAMILY} \ -- "${sources_pkg_dir}"/DEBIAN -- -- cp "${SRC}/config/kernel/${LINUXCONFIG}.config" "default_${LINUXCONFIG}.config" -- xz < .config > "${sources_pkg_dir}/usr/src/${LINUXCONFIG}_${version}_${REVISION}_config.xz" -- -- display_alert "Compressing sources for the linux-source package" -- tar cp --directory="$kernel_work_dir" --exclude='.git' --owner=root . | -- pv -N "$(logging_echo_prefix_for_pv "compress_kernel_sources") $display_name" -p -b -r -s "$(du -sb "$kernel_work_dir" --exclude=='.git' | cut -f1)" | -- pixz -0 > "${sources_pkg_dir}/usr/src/linux-source-${version}-${LINUXFAMILY}.tar.xz" # @TODO: .deb will compress this later. -0 for now, but should be a plain tar -- cp COPYING "${sources_pkg_dir}/usr/share/doc/linux-source-${version}-${LINUXFAMILY}/LICENSE" -- -- cat <<- EOF > "${sources_pkg_dir}"/DEBIAN/control -- Package: linux-source-${version}-${BRANCH}-${LINUXFAMILY} -- Version: ${version}-${BRANCH}-${LINUXFAMILY}+${REVISION} -- Architecture: all -- Maintainer: $MAINTAINER <$MAINTAINERMAIL> -- Section: kernel -- Priority: optional -- Depends: binutils, coreutils -- Provides: linux-source, linux-source-${version}-${LINUXFAMILY} -- Recommends: gcc, make -- Description: This package provides the source code for the Linux kernel $version -- EOF -- -- fakeroot_dpkg_deb_build -z0 "${sources_pkg_dir}" "${sources_pkg_dir}.deb" -- rsync --remove-source-files -rq "${sources_pkg_dir}.deb" "${DEB_STORAGE}/" -- -- te=$(date +%s) -- display_alert "Make the linux-source package" "$(($te - $ts)) sec." "info" - } -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 3d621c8a1..e2882082b 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -71,7 +71,7 @@ main_default_build_single() { - if [[ ! -f ${DEB_STORAGE}/${CHOSEN_KERNEL}_${REVISION}_${ARCH}.deb ]]; then - export KDEB_CHANGELOG_DIST=$RELEASE - if [[ -n $KERNELSOURCE ]] && [[ "${REPOSITORY_INSTALL}" != *kernel* ]]; then -- LOG_SECTION="compile_kernel" do_with_logging compile_kernel -+ compile_kernel # This handles its own logging sections. - fi - fi - if [[ "${exit_after_kernel_build}" == "yes" ]]; then - -From e16b1e19e04308d5313908a5750e74ed2bdd72aa Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 00:31:23 +0100 -Subject: [PATCH] armbian-next: `do_with_hooks()` placeholder for future ideas - ---- - lib/extensions.sh | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/lib/extensions.sh b/lib/extensions.sh -index ae3775b14..ad215bdf0 100644 ---- a/lib/extensions.sh -+++ b/lib/extensions.sh -@@ -267,7 +267,7 @@ cleanup_extension_manager() { - } - - function cleanup_handler_extensions() { -- display_alert "yeah the extensions trap handler..." "cleanup_handler_extensions" "cleanup" -+ display_alert "yeah the extensions trap handler..." "cleanup_handler_extensions" "cleanup" - cleanup_extension_manager - - # Move temporary log file over to final destination. -@@ -417,3 +417,8 @@ enable_extension() { - done - - } -+ -+# Fancy placeholder for future ideas. allow any core function to be hooked. maybe with "voters" infrastructure? -+function do_with_hooks() { -+ "$@" -+} - -From 4416b6b18cdb3c9311aa254189b21dfdf03747cf Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 00:30:55 +0100 -Subject: [PATCH] armbian-next: logging: small refactor and `do_with_logging` - admit it does not do error control - ---- - lib/functions/logging/logging.sh | 40 +++++++++++++++++++++++----------------- - 1 file changed, 23 insertions(+), 17 deletions(-) - -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index fd23722b8..a3c6523ad 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -40,10 +40,7 @@ function logging_error_show_log() { - return 0 - } - --function do_with_logging() { -- [[ -z "${DEST}" ]] && exit_with_error "DEST is not defined. Can't start logging." -- -- # @TODO: check we're not currently logging (eg: this has been called 2 times without exiting) -+function start_logging_section() { - export logging_section_counter=$((logging_section_counter + 1)) # increment counter, used in filename - export CURRENT_LOGGING_COUNTER - CURRENT_LOGGING_COUNTER="$(printf "%03d" "$logging_section_counter")" -@@ -56,13 +53,31 @@ function do_with_logging() { - if [[ "${CI}" == "true" ]]; then - echo "::group::[🥑] Group ${CURRENT_LOGGING_SECTION}" - fi -+ return 0 -+} -+ -+function finish_logging_section() { -+ # Close opened CI group. -+ if [[ "${CI}" == "true" ]]; then -+ echo "::endgroup::" -+ fi -+} -+ -+function do_with_logging() { -+ [[ -z "${DEST}" ]] && exit_with_error "DEST is not defined. Can't start logging." -+ -+ # @TODO: check we're not currently logging (eg: this has been called 2 times without exiting) -+ -+ start_logging_section -+ -+ # Important: no error control is done here. -+ # Called arguments are run with set -e in effect. - - # We now execute whatever was passed as parameters, in some different conditions: - # In both cases, writing to stderr will display to terminal. - # So whatever is being called, should prevent rogue stuff writing to stderr. - # this is mostly handled by redirecting stderr to stdout: 2>&1 - -- local exit_code=176 # fail by default... - if [[ "${SHOW_LOG}" == "yes" ]]; then - local prefix_sed_contents - prefix_sed_contents="$(logging_echo_prefix_for_pv "tool") $(echo -n -e "${tool_color}")" -@@ -76,24 +91,15 @@ function do_with_logging() { - sed -u -e "${prefix_sed_cmd}" - ) - "$@" >&3 -- exit_code=$? # hopefully this is the pipe -- exec 3>&- # close the file descriptor, lest sed keeps running forever. -+ exec 3>&- # close the file descriptor, lest sed keeps running forever. - else - # If not showing the log, just send stdout to logfile. stderr will flow to screen. - "$@" >> "${CURRENT_LOGFILE}" -- exit_code=$? - fi - -- # Close opened CI group. -- if [[ "${CI}" == "true" ]]; then -- echo "::endgroup::" -- fi -+ finish_logging_section - -- if [[ $exit_code != 0 ]]; then -- display_alert "build group FAILED: exit code: ${exit_code}" "${CURRENT_LOGGING_SECTION}" "err" -- fi -- -- return $exit_code -+ return 0 - } - - function display_alert() { - -From 3047f4362cad224283a9febd1dc05c4178768964 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 00:28:09 +0100 -Subject: [PATCH] armbian-next: fix: traps: `trap_manager_error_handled` is - integer (`-i`) not array (`-a`) - ---- - lib/functions/logging/traps.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/functions/logging/traps.sh b/lib/functions/logging/traps.sh -index a465e718d..7c3eb97cd 100644 ---- a/lib/functions/logging/traps.sh -+++ b/lib/functions/logging/traps.sh -@@ -5,7 +5,7 @@ function traps_init() { - # shellcheck disable=SC2034 # Array of cleanup handlers. - declare -a trap_manager_cleanup_handlers=() - # shellcheck disable=SC2034 # Global to avoid doubly reporting ERR/EXIT pairs. -- declare -a trap_manager_error_handled=0 -+ declare -i trap_manager_error_handled=0 - trap 'main_trap_handler "ERR" "$?"' ERR - trap 'main_trap_handler "EXIT" "$?"' EXIT - trap 'main_trap_handler "INT" "$?"' INT - -From a6df63b905f60045a41f640f98c01e8e5305e8ed Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 00:25:30 +0100 -Subject: [PATCH] armbian-next: sunxi-tools: fix logging for sunxi-tools - compilation - ---- - extensions/sunxi-tools.sh | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/extensions/sunxi-tools.sh b/extensions/sunxi-tools.sh -index 5b699ac14..8f0909426 100644 ---- a/extensions/sunxi-tools.sh -+++ b/extensions/sunxi-tools.sh -@@ -6,12 +6,12 @@ function build_host_tools__compile_sunxi_tools() { - # Compile and install only if git commit hash changed - cd "${SRC}"/cache/sources/sunxi-tools || exit - # need to check if /usr/local/bin/sunxi-fexc to detect new Docker containers with old cached sources -- if [[ ! -f .commit_id || $(improved_git rev-parse @ 2> /dev/null) != $(< .commit_id) || ! -f /usr/local/bin/sunxi-fexc ]]; then -+ if [[ ! -f .commit_id || $(git rev-parse @ 2> /dev/null) != $(< .commit_id) || ! -f /usr/local/bin/sunxi-fexc ]]; then - display_alert "Compiling" "sunxi-tools" "info" -- make -s clean > /dev/null -- make -s tools > /dev/null -+ run_host_command_logged make -s clean -+ run_host_command_logged make -s tools - mkdir -p /usr/local/bin/ -- make install-tools > /dev/null 2>&1 -- improved_git rev-parse @ 2> /dev/null > .commit_id -+ run_host_command_logged make install-tools -+ git rev-parse @ 2> /dev/null > .commit_id - fi - } - -From 1f1f7c01f3e77fa8de9c5657a123f0bf723cceb0 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 24 Feb 2022 00:24:33 +0100 -Subject: [PATCH] armbian-next: runners now run bash with `-o pipefail` in - addition to `-e` - -- attention, only affects stuff run through the functions in runners.sh ---- - lib/functions/logging/runners.sh | 20 ++++++++++---------- - 1 file changed, 10 insertions(+), 10 deletions(-) - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index a85914f55..3ef7071c8 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -16,7 +16,7 @@ function chroot_sdcard_apt_get() { - - # please, please, unify around this function. if SDCARD is not enough, I'll make a mount version. - function chroot_sdcard() { -- TMPDIR="" run_host_command_logged_raw chroot "${SDCARD}" /bin/bash -e -c "$*" -+ TMPDIR="" run_host_command_logged_raw chroot "${SDCARD}" /bin/bash -e -o pipefail -c "$*" - } - - # This should be used if you need to capture the stdout produced by the command. It is NOT logged, and NOT run thru bash, and NOT quoted. -@@ -31,21 +31,21 @@ function chroot_custom_long_running() { - # @TODO: disabled, the pipe causes the left-hand side to subshell and caos ensues. - # local _exit_code=1 - # if [[ "${SHOW_LOG}" == "yes" ]] || [[ "${CI}" == "true" ]]; then -- # TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" -+ # TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -o pipefail -c "$*" - # _exit_code=$? - # else -- # TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" | pv -N "$(logging_echo_prefix_for_pv "${INDICATOR:-compile}")" --progress --timer --line-mode --force --cursor --delay-start 0 -i "0.5" -+ # TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -o pipefail -c "$*" | pv -N "$(logging_echo_prefix_for_pv "${INDICATOR:-compile}")" --progress --timer --line-mode --force --cursor --delay-start 0 -i "0.5" - # _exit_code=$? - # fi - # return $_exit_code - -- TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" -+ TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -o pipefail -c "$*" - } - - function chroot_custom() { - local target=$1 - shift -- TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" -+ TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -o pipefail -c "$*" - } - - # for deb building. -@@ -62,16 +62,16 @@ function run_host_command_logged_long_running() { - # @TODO: disabled. The Pipe used for "pv" causes the left-hand side to run in a subshell. - #local _exit_code=1 - #if [[ "${SHOW_LOG}" == "yes" ]] || [[ "${CI}" == "true" ]]; then -- # run_host_command_logged_raw /bin/bash -e -c "$*" -+ # run_host_command_logged_raw /bin/bash -e -o pipefail-c "$*" - # _exit_code=$? - #else -- # run_host_command_logged_raw /bin/bash -e -c "$*" | pv -N "$(logging_echo_prefix_for_pv "${INDICATOR:-compile}") " --progress --timer --line-mode --force --cursor --delay-start 0 -i "2" -+ # run_host_command_logged_raw /bin/bash -e -o pipefail -c "$*" | pv -N "$(logging_echo_prefix_for_pv "${INDICATOR:-compile}") " --progress --timer --line-mode --force --cursor --delay-start 0 -i "2" - # _exit_code=$? - #fi - #return $_exit_code - - # Run simple and exit with it's code. Sorry. -- run_host_command_logged_raw /bin/bash -e -c "$*" -+ run_host_command_logged_raw /bin/bash -e -o pipefail -c "$*" - } - - # For installing packages host-side. Not chroot! -@@ -113,12 +113,12 @@ function run_host_x86_binary_logged() { - - # run_host_command_logged is the very basic, should be used for everything, but, please use helpers above, this is very low-level. - function run_host_command_logged() { -- run_host_command_logged_raw /bin/bash -e -c "$*" -+ run_host_command_logged_raw /bin/bash -e -o pipefail -c "$*" - } - - # for interactive, dialog-like host-side invocations. no redirections performed, but same bash usage and expansion, for consistency. - function run_host_command_dialog() { -- /bin/bash -e -c "$*" -+ /bin/bash -e -o pipefail -c "$*" - } - - # do NOT use directly, it does NOT expand the way it should (through bash) - -From cdfe8e12f9940a457f5161798d11c5131c99b81b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 23 Feb 2022 21:02:10 +0100 -Subject: [PATCH] armbian-next: kernel: reduce logging clutter (CC,LD,AR) - -- hide fasthash_debug under `SHOW_FASTHASH` ---- - lib/functions/compilation/kernel.sh | 4 ++-- - lib/functions/compilation/patch/fasthash.sh | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 014e4d337..28debe659 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -186,7 +186,7 @@ function compile_kernel() { - # hack for OdroidXU4. Copy firmare files - if [[ $BOARD == odroidxu4 ]]; then - mkdir -p "${kernel_work_dir}/firmware/edid" -- cp "${SRC}"/packages/blobs/odroidxu4/*.bin "${kernel_work_dir}/firmware/edid" -+ cp -p "${SRC}"/packages/blobs/odroidxu4/*.bin "${kernel_work_dir}/firmware/edid" - fi - - # hack for deb builder. To pack what's missing in headers pack. -@@ -238,7 +238,7 @@ function compile_kernel() { - - display_alert "Compiling Kernel" "${LINUXCONFIG} ${KERNEL_IMAGE_TYPE}" "info" - fasthash_debug "pre-compile" -- run_kernel_make_long_running "${build_targets[@]}" -+ make_filter="| grep --line-buffered -v -e 'CC' -e 'LD' -e 'AR'" run_kernel_make_long_running "${build_targets[@]}" - fasthash_debug "post-compile" - - if [[ "${DOUBLE_COMPILE_KERNEL}" == "yes" ]]; then -diff --git a/lib/functions/compilation/patch/fasthash.sh b/lib/functions/compilation/patch/fasthash.sh -index 724b8d3cf..0e0cc60f3 100644 ---- a/lib/functions/compilation/patch/fasthash.sh -+++ b/lib/functions/compilation/patch/fasthash.sh -@@ -34,10 +34,10 @@ function finish_fasthash() { - } - - function fasthash_debug() { -- display_alert "fasthash_debug" "$*" "debug" -- if [[ "${SHOW_DEBUG}" != "yes" ]]; then # enable debug for many, many debugging msgs -+ if [[ "${SHOW_FASTHASH}" != "yes" ]]; then # enable debug for many, many debugging msgs - return 0 - fi -+ display_alert "fasthash_debug" "$*" "debug" - find . -type f -printf '%T@ %p\n' | - grep -v -e "\.ko" -e "\.o" -e "\.cmd" -e "\.mod" -e "\.a" -e "\.tmp" -e "\.dtb" -e ".scr" -e "\.\/debian" | - sort -n | tail -n 10 1>&2 - -From 9ffb0891d8572ab04126bff74632dcabc31a81b1 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 23 Feb 2022 21:00:59 +0100 -Subject: [PATCH] armbian-next: `armhf` should make `zImage` -- or should it? - ---- - config/sources/armhf.conf | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/config/sources/armhf.conf b/config/sources/armhf.conf -index 2d4682408..01a9eac47 100644 ---- a/config/sources/armhf.conf -+++ b/config/sources/armhf.conf -@@ -16,7 +16,7 @@ INITRD_ARCH=arm - QEMU_BINARY="qemu-arm-static" - ARCHITECTURE=arm - ARCH=armhf --KERNEL_IMAGE_TYPE=Image -+KERNEL_IMAGE_TYPE=zImage - CAN_BUILD_STRETCH=yes - FAST_CREATE_IMAGE="yes" - - -From 4d8eab13c18560b8d64735858b2cf2462ac3f644 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 23 Feb 2022 13:22:21 +0100 -Subject: [PATCH] armbian-next: show logs through ccze; avoid ANSI escapes in - file; `SHOW_xxx` control - -- `SHOW_DEBUG` shows the debug level -- `SHOW_COMMAND` shows all invoked commands through the runners -- `SHOW_TRAPS` to show 'cleanup' and 'trap' level -- `SHOW_TIMING` to show $SECONDS but pretty -- replace hardcoded traps/cleanups logging ---- - lib/extensions.sh | 2 +- - lib/functions/compilation/patch/fasthash.sh | 6 +++-- - lib/functions/general/host.sh | 2 +- - lib/functions/logging/logging.sh | 37 +++++++++++++++++++++++++---- - lib/functions/logging/stacktraces.sh | 6 +++-- - lib/functions/logging/traps.sh | 8 +++---- - lib/functions/main/default-build.sh | 2 +- - 7 files changed, 47 insertions(+), 16 deletions(-) - -diff --git a/lib/extensions.sh b/lib/extensions.sh -index 9cbc4b78b..ae3775b14 100644 ---- a/lib/extensions.sh -+++ b/lib/extensions.sh -@@ -267,7 +267,7 @@ cleanup_extension_manager() { - } - - function cleanup_handler_extensions() { -- echo "-- yeah the extensions trap handler..." 1>&2 -+ display_alert "yeah the extensions trap handler..." "cleanup_handler_extensions" "cleanup" - cleanup_extension_manager - - # Move temporary log file over to final destination. -diff --git a/lib/functions/compilation/patch/fasthash.sh b/lib/functions/compilation/patch/fasthash.sh -index a01fe7664..724b8d3cf 100644 ---- a/lib/functions/compilation/patch/fasthash.sh -+++ b/lib/functions/compilation/patch/fasthash.sh -@@ -21,7 +21,6 @@ function initialize_fasthash() { - display_alert "initialize_fasthash" "$*" "debug" - return 0 - declare -a fast_hash_list=() -- - } - - function fasthash_branch() { -@@ -36,6 +35,9 @@ function finish_fasthash() { - - function fasthash_debug() { - display_alert "fasthash_debug" "$*" "debug" -+ if [[ "${SHOW_DEBUG}" != "yes" ]]; then # enable debug for many, many debugging msgs -+ return 0 -+ fi - find . -type f -printf '%T@ %p\n' | - grep -v -e "\.ko" -e "\.o" -e "\.cmd" -e "\.mod" -e "\.a" -e "\.tmp" -e "\.dtb" -e ".scr" -e "\.\/debian" | - sort -n | tail -n 10 1>&2 -@@ -47,7 +49,7 @@ function get_file_modification_time() { - exit_with_error "Can't get modification time of nonexisting file" "${1}" - fi - -- # [[CC]YY]MMDDhhmm[ss] - it is a valid integer -+ # [[CC]YY]MMDDhhmm.[ss] - it is NOT a valid integer - file_date=$(date +%Y%m%d%H%M.%S -r "${1}") - display_alert "Got date ${file_date} for file" "${1}" "debug" - -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index 34f17a38e..ff5f9ee89 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -69,7 +69,7 @@ prepare_host() { - nfs-kernel-server ntpdate p7zip-full parted patchutils pigz pixz \ - pkg-config pv python3-dev python3-distutils qemu-user-static rsync swig \ - systemd-container u-boot-tools udev unzip uuid-dev wget whiptail zip \ -- zlib1g-dev file" -+ zlib1g-dev file ccze" - - if [[ $(dpkg --print-architecture) == amd64 ]]; then - -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 368d0a8d6..fd23722b8 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -24,8 +24,15 @@ function logging_error_show_log() { - local prefix_sed_contents="${normal_color}${left_marker}${padding}👉${padding}${right_marker} " - local prefix_sed_cmd="s/^/${prefix_sed_contents}/;" - display_alert " 👇👇👇 Showing logfile below 👇👇👇" "${logfile_to_show}" "err" -- # shellcheck disable=SC2002 # my cat is great. thank you, shellcheck. -- cat "${logfile_to_show}" | grep -v -e "^$" | sed -e "${prefix_sed_cmd}" 1>&2 # write it to stderr!! -+ -+ if [[ -f /usr/bin/ccze ]]; then # use 'ccze' to colorize the log, making errors a lot more obvious. -+ # shellcheck disable=SC2002 # my cat is great. thank you, shellcheck. -+ cat "${logfile_to_show}" | grep -v -e "^$" | /usr/bin/ccze -A | sed -e "${prefix_sed_cmd}" 1>&2 # write it to stderr!! -+ else -+ # shellcheck disable=SC2002 # my cat is great. thank you, shellcheck. -+ cat "${logfile_to_show}" | grep -v -e "^$" | sed -e "${prefix_sed_cmd}" 1>&2 # write it to stderr!! -+ fi -+ - display_alert " 👆👆👆 Showing logfile above 👆👆👆" "${logfile_to_show}" "err" - else - display_alert "✋ Error log not available at this stage of build" "check messages above" "debug" -@@ -92,12 +99,12 @@ function do_with_logging() { - function display_alert() { - # We'll be writing to stderr (" >&2"), so also write the message to the generic logfile, for context. - if [[ -f "${CURRENT_LOGFILE}" ]]; then -- echo "--> A: [" "$@" "]" >> "${CURRENT_LOGFILE}" -+ echo -e "--> A: [" "$@" "]" | sed 's/\x1b\[[0-9;]*m//g' >> "${CURRENT_LOGFILE}" - fi - - # If asked, avoid any fancy ANSI escapes completely. - if [[ "${ANSI_COLOR}" == "none" ]]; then -- echo "${@}" >&2 -+ echo -e "${@}" | sed 's/\x1b\[[0-9;]*m//g' >&2 - return 0 - fi - -@@ -127,12 +134,26 @@ function display_alert() { - inline_logs_color="\e[0;32m" - ;; - -+ cleanup | trap) -+ if [[ "${SHOW_TRAPS}" != "yes" ]]; then # enable debug for many, many debugging msgs -+ return 0 -+ fi -+ level_indicator="🧽" -+ inline_logs_color="\e[1;33m" -+ ;; -+ - debug | deprecation) -+ if [[ "${SHOW_DEBUG}" != "yes" ]]; then # enable debug for many, many debugging msgs -+ return 0 -+ fi - level_indicator="✨" - inline_logs_color="\e[1;33m" - ;; - - command) -+ if [[ "${SHOW_COMMAND}" != "yes" ]]; then # enable to log all calls to external cmds -+ return 0 -+ fi - level_indicator="🐸" - inline_logs_color="${tool_color}" # either gray or normal, a bit subdued. - ;; -@@ -142,8 +163,14 @@ function display_alert() { - inline_logs_color="\e[1;37m" - ;; - esac -+ -+ local timing_info="" -+ if [[ "${SHOW_TIMING}" == "yes" ]]; then -+ timing_info="${tool_color}(${normal_color}$(printf "%3s" "${SECONDS}")${tool_color})" # SECONDS is bash builtin for seconds since start of script. -+ fi -+ - [[ -n $2 ]] && extra=" [${inline_logs_color} ${2} ${normal_color}]" -- echo -e "${normal_color}${left_marker}${padding}${level_indicator}${padding}${normal_color}${right_marker} ${normal_color}${message}${extra}${normal_color}" >&2 -+ echo -e "${normal_color}${left_marker}${padding}${level_indicator}${padding}${normal_color}${right_marker}${timing_info} ${normal_color}${message}${extra}${normal_color}" >&2 - - # Now write to CI, if we're running on it - if [[ "${CI}" == "true" ]] && [[ "${ci_log}" != "" ]]; then -diff --git a/lib/functions/logging/stacktraces.sh b/lib/functions/logging/stacktraces.sh -index 3ab2900ef..a08c03499 100644 ---- a/lib/functions/logging/stacktraces.sh -+++ b/lib/functions/logging/stacktraces.sh -@@ -34,11 +34,13 @@ function show_caller_full() { - local line_no - local function_name - local file_name -+ local padded_function_name -+ local short_file_name - while caller $i; do - ((i++)) - done | while read -r line_no function_name file_name; do -- local padded_function_name=$(printf "%30s" "$function_name()") -- local short_file_name="${file_name/"${SRC}/"/"./"}" -+ padded_function_name="$(printf "%30s" "$function_name()")" -+ short_file_name="${file_name/"${SRC}/"/"./"}" - echo -e "$padded_function_name --> $short_file_name:$line_no" - done - } || true # always success -diff --git a/lib/functions/logging/traps.sh b/lib/functions/logging/traps.sh -index fb294e06e..a465e718d 100644 ---- a/lib/functions/logging/traps.sh -+++ b/lib/functions/logging/traps.sh -@@ -32,7 +32,7 @@ function main_trap_handler() { - stack_caller="$(show_caller_full)" - short_stack="${BASH_SOURCE[1]}:${BASH_LINENO[0]}" - -- echo "-- main_trap_handler: ${trap_type} and ${trap_exit_code} trap_manager_error_handled:${trap_manager_error_handled} " 1>&2 -+ display_alert "main_trap_handler" "${trap_type} and ${trap_exit_code} trap_manager_error_handled:${trap_manager_error_handled}" "trap" - - case "${trap_type}" in - TERM | INT) -@@ -71,7 +71,7 @@ function main_trap_handler() { - - # Run the cleanup handlers, if any, and clean the cleanup list. - function run_cleanup_handlers() { -- echo "-- run_cleanup_handlers! list: ${trap_manager_cleanup_handlers[*]}" 1>&2 -+ display_alert "run_cleanup_handlers! list:" "${trap_manager_cleanup_handlers[*]}" "cleanup" - if [[ ${#trap_manager_cleanup_handlers[@]} -lt 1 ]]; then - return 0 # No handlers set, just return. - else -@@ -90,12 +90,12 @@ function run_cleanup_handlers() { - # Adds a callback for trap types; first argument is function name; extra params are the types to add for. - function add_cleanup_handler() { - local callback="$1" -- echo "-- Add callback ${callback} as cleanup handler" 1>&2 -+ display_alert "Add callback as cleanup handler" "${callback}" "cleanup" - trap_manager_cleanup_handlers+=("$callback") - } - - function remove_all_trap_handlers() { -- echo "-- Will remove ALL trap handlers, for a clean exit..." 1>&2 -+ display_alert "Will remove ALL trap handlers, for a clean exit..." "" "cleanup" - } - - # exit_with_error -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 112628729..3d621c8a1 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -178,7 +178,7 @@ main_default_build_single() { - } - - function trap_handler_cleanup_workdir() { -- echo "-- cleanup handler: Should cleanup $WORKDIR WORKDIR here" 1>&2 -+ display_alert "Cleanup WORKDIR: $WORKDIR" "trap_handler_cleanup_workdir" "cleanup" - unset TMPDIR - if [[ -d "${WORKDIR}" ]]; then - display_alert "Cleaning up WORKDIR" "$(du -h -s "$WORKDIR")" "debug" - -From 6cbb8c84798438b5ca5b353829b011cdbc263f1b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Tue, 22 Feb 2022 14:36:41 +0100 -Subject: [PATCH] armbian-next: add `KERNEL_MAJOR_MINOR=x.z` to every family, - manually from the `KERNELBRANCH` - ---- - config/sources/families/imx6.conf | 4 +++- - config/sources/families/imx7d.conf | 4 +++- - config/sources/families/include/meson_common.inc | 3 +++ - config/sources/families/include/rockchip64_common.inc | 10 +++++----- - config/sources/families/include/sunxi64_common.inc | 3 +++ - config/sources/families/include/sunxi_common.inc | 3 +++ - config/sources/families/jetson-nano.conf | 3 +++ - config/sources/families/media.conf | 4 ++++ - config/sources/families/mt7623.conf | 1 + - config/sources/families/mvebu.conf | 5 ++++- - config/sources/families/mvebu64.conf | 3 +++ - config/sources/families/odroidxu4.conf | 3 +++ - config/sources/families/rk322x.conf | 3 +++ - config/sources/families/rk3399.conf | 1 + - config/sources/families/rk35xx.conf | 2 ++ - config/sources/families/rockchip.conf | 3 +++ - config/sources/families/rockchip64.conf | 1 + - config/sources/families/rockpis.conf | 1 + - config/sources/families/s5p6818.conf | 1 + - config/sources/families/sun50iw9.conf | 1 + - config/sources/families/virtual.conf | 1 + - config/sources/families/zynq.conf | 1 + - 22 files changed, 53 insertions(+), 8 deletions(-) - -diff --git a/config/sources/families/imx6.conf b/config/sources/families/imx6.conf -index ad22c4982..d63f84266 100644 ---- a/config/sources/families/imx6.conf -+++ b/config/sources/families/imx6.conf -@@ -9,13 +9,15 @@ case $BRANCH in - - current) - -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. - KERNELBRANCH='branch:linux-5.15.y' - - ;; - - edge) - -- KERNELBRANCH='branch:linux-5.19.y' -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.16.y' - - ;; - -diff --git a/config/sources/families/imx7d.conf b/config/sources/families/imx7d.conf -index aa50d4970..8f6c2d3fa 100644 ---- a/config/sources/families/imx7d.conf -+++ b/config/sources/families/imx7d.conf -@@ -11,13 +11,15 @@ case $BRANCH in - legacy) - - KERNELSOURCE='https://source.codeaurora.org/external/imx/linux-imx' -+ export KERNEL_MAJOR_MINOR="4.14" # Major and minor versions of this kernel. - KERNELBRANCH='branch:imx_4.14.98_2.0.0_ga' - KERNELDIR='linux-imx7' - BOOTBRANCH='branch:imx_v2018.03_4.14.98_2.0.0_ga' - BOOTPATCHDIR="u-boot-imx7d-legacy" - ;; -- current | default) -+ current) - KERNELSOURCE='https://source.codeaurora.org/external/imx/linux-imx' -+ export KERNEL_MAJOR_MINOR="5.4" # Major and minor versions of this kernel. - KERNELBRANCH='branch:imx_5.4.70_2.3.0' - KERNELDIR='linux-imx7-current' - BOOTBRANCH='branch:imx_v2020.04_5.4.70_2.3.0' -diff --git a/config/sources/families/include/meson_common.inc b/config/sources/families/include/meson_common.inc -index 62f30cfde..d24ac85ee 100644 ---- a/config/sources/families/include/meson_common.inc -+++ b/config/sources/families/include/meson_common.inc -@@ -17,18 +17,21 @@ GOVERNOR=ondemand - case $BRANCH in - legacy) - -+ export KERNEL_MAJOR_MINOR="5.4" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.4.y" - KERNELPATCHDIR='meson-'$BRANCH - - ;; - current) - -+ export KERNEL_MAJOR_MINOR="5.10" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.10.y" - KERNELPATCHDIR='meson-current' - - ;; - edge) - -+ export KERNEL_MAJOR_MINOR="5.11" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.11.y" - KERNELPATCHDIR='meson-current' - -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index 0f0000d26..815e87b26 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -90,8 +90,8 @@ case $BRANCH in - - current) - -- KERNELBRANCH="branch:linux-5.15.y" -- KERNELBRANCH="tag:v5.15.35" -+ export KERNEL_MAJOR_MINOR="5.10" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.10.y" - KERNELPATCHDIR='rockchip64-'$BRANCH - LINUXFAMILY=rockchip64 - LINUXCONFIG='linux-rockchip64-'$BRANCH -@@ -100,8 +100,8 @@ case $BRANCH in - edge) - - KERNELPATCHDIR='rockchip64-'$BRANCH -- KERNELBRANCH="branch:linux-5.17.y" -- KERNELBRANCH="tag:v5.17.5" -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. -+ KERNELBRANCH="branch:linux-5.15.y" - LINUXFAMILY=rockchip64 - LINUXCONFIG='linux-rockchip64-'$BRANCH - -@@ -234,7 +234,7 @@ family_tweaks() { - - chroot $SDCARD /bin/bash -c "systemctl --no-reload enable z28pro-bluetooth.service >/dev/null 2>&1" - -- elif [[ $BOARD == nanopi-r2s || $BOARD == nanopi-r2c || $BOARD == orangepi-r1plus || $BOARD == orangepi-r1plus-lts ]]; then -+ elif [[ $BOARD == nanopi-r2s || $BOARD == nanopi-r2c || $BOARD == orangepi-r1plus ]]; then - - # rename USB based network to lan0 - mkdir -p $SDCARD/etc/udev/rules.d/ -diff --git a/config/sources/families/include/sunxi64_common.inc b/config/sources/families/include/sunxi64_common.inc -index c7a3e0a20..323d67c1c 100644 ---- a/config/sources/families/include/sunxi64_common.inc -+++ b/config/sources/families/include/sunxi64_common.inc -@@ -14,16 +14,19 @@ export KERNELPATCHDIR='sunxi-'$BRANCH - case $BRANCH in - - legacy) -+ export KERNEL_MAJOR_MINOR="5.10" # Major and minor versions of this kernel. - export KERNELBRANCH="branch:linux-5.10.y" - export KERNELBRANCH_MEGOUS="branch:orange-pi-5.10" - ;; - - current) -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. - export KERNELBRANCH="branch:linux-5.15.y" - export KERNELBRANCH_MEGOUS="branch:orange-pi-5.15" - ;; - - edge) -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. - export KERNELBRANCH="branch:linux-5.16.y" - export KERNELBRANCH_MEGOUS="branch:orange-pi-5.16" - ;; -diff --git a/config/sources/families/include/sunxi_common.inc b/config/sources/families/include/sunxi_common.inc -index c450fecbd..a9f14f950 100644 ---- a/config/sources/families/include/sunxi_common.inc -+++ b/config/sources/families/include/sunxi_common.inc -@@ -15,16 +15,19 @@ export KERNELPATCHDIR='sunxi-'$BRANCH - case $BRANCH in - - legacy) -+ export KERNEL_MAJOR_MINOR="5.10" # Major and minor versions of this kernel. - export KERNELBRANCH="branch:linux-5.10.y" - export KERNELBRANCH_MEGOUS="branch:orange-pi-5.10" - ;; - - current) -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. - export KERNELBRANCH="branch:linux-5.15.y" - export KERNELBRANCH_MEGOUS="branch:orange-pi-5.15" - ;; - - edge) -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. - export KERNELBRANCH="branch:linux-5.16.y" - export KERNELBRANCH_MEGOUS="branch:orange-pi-5.16" - ;; -diff --git a/config/sources/families/jetson-nano.conf b/config/sources/families/jetson-nano.conf -index fbc14d5af..77b83e479 100644 ---- a/config/sources/families/jetson-nano.conf -+++ b/config/sources/families/jetson-nano.conf -@@ -13,6 +13,7 @@ case $BRANCH in - legacy) - KERNELDIR='linux-nano' - KERNELSOURCE='https://github.com/150balbes/Jetson-Nano' -+ export KERNEL_MAJOR_MINOR="4.9" # Major and minor versions of this kernel. - KERNELBRANCH='branch:4.9.201' - EXTRAWIFI="no" - BOOT_FDT_FILE="none" -@@ -21,6 +22,7 @@ case $BRANCH in - ;; - - current) -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.15.y" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media -@@ -30,6 +32,7 @@ case $BRANCH in - - edge) - SKIP_BOOTSPLASH="yes" -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.16.y" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media -diff --git a/config/sources/families/media.conf b/config/sources/families/media.conf -index 7c5a76af6..07529a634 100644 ---- a/config/sources/families/media.conf -+++ b/config/sources/families/media.conf -@@ -13,6 +13,7 @@ case $BRANCH in - - if [[ $BOARD == station-p2 || $BOARD == station-m2 ]]; then - KERNELSOURCE='https://github.com/150balbes/rockchip-kernel' -+ export KERNEL_MAJOR_MINOR="4.19" # Major and minor versions of this kernel. - KERNELBRANCH='branch:kernel-4.19' - KERNELPATCHDIR='station-p2-'$BRANCH - LINUXCONFIG='linux-station-p2-'$BRANCH -@@ -21,6 +22,7 @@ case $BRANCH in - WIREGUARD="no" - else - KERNELSOURCE='https://github.com/ayufan-rock64/linux-kernel' -+ export KERNEL_MAJOR_MINOR="4.4" # Major and minor versions of this kernel. - KERNELBRANCH='tag:4.4.202-1237-rockchip-ayufan' - KERNELPATCHDIR='rockchip64-'$BRANCH - LINUXCONFIG='linux-rockchip64-'$BRANCH -@@ -29,6 +31,7 @@ case $BRANCH in - ;; - - current) -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.15.y" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media -@@ -37,6 +40,7 @@ case $BRANCH in - - edge) - SKIP_BOOTSPLASH="yes" -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.16.y" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media -diff --git a/config/sources/families/mt7623.conf b/config/sources/families/mt7623.conf -index 8c0d9f754..2eb00c881 100644 ---- a/config/sources/families/mt7623.conf -+++ b/config/sources/families/mt7623.conf -@@ -9,6 +9,7 @@ case $BRANCH in - - legacy) - -+ export KERNEL_MAJOR_MINOR="4.19" # Major and minor versions of this kernel. - KERNELBRANCH='branch:linux-4.19.y' - - ;; -diff --git a/config/sources/families/mvebu.conf b/config/sources/families/mvebu.conf -index 66abc39c3..ad240d6b6 100644 ---- a/config/sources/families/mvebu.conf -+++ b/config/sources/families/mvebu.conf -@@ -11,19 +11,22 @@ fi - case $BRANCH in - legacy) - -+ export KERNEL_MAJOR_MINOR="4.19" # Major and minor versions of this kernel. - KERNELBRANCH='tag:v4.19.167' - - ;; - - current) - -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. - KERNELBRANCH='branch:linux-5.15.y' - - ;; - - edge) - -- KERNELBRANCH='branch:linux-5.17.y' -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. -+ KERNELBRANCH='branch:linux-5.16.y' - - LINUXCONFIG='linux-mvebu-edge' - KERNELPATCHDIR="mvebu-edge" -diff --git a/config/sources/families/mvebu64.conf b/config/sources/families/mvebu64.conf -index 58d66ab98..27c4e318a 100644 ---- a/config/sources/families/mvebu64.conf -+++ b/config/sources/families/mvebu64.conf -@@ -29,6 +29,7 @@ case $BRANCH in - legacy) - - KERNELSOURCE='https://github.com/MarvellEmbeddedProcessors/linux-marvell.git' -+ export KERNEL_MAJOR_MINOR="4.14" # Major and minor versions of this kernel. - KERNELBRANCH='branch:linux-4.14.22-armada-18.06' - KERNELDIR='linux-marvell' - -@@ -36,11 +37,13 @@ case $BRANCH in - - current) - -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. - KERNELBRANCH='branch:linux-5.15.y' - - ;; - - edge) -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. - KERNELBRANCH='branch:linux-5.16.y' - ;; - -diff --git a/config/sources/families/odroidxu4.conf b/config/sources/families/odroidxu4.conf -index ee4a32af5..02a9947a9 100644 ---- a/config/sources/families/odroidxu4.conf -+++ b/config/sources/families/odroidxu4.conf -@@ -10,6 +10,7 @@ case $BRANCH in - legacy) - - KERNELSOURCE='https://github.com/hardkernel/linux' -+ export KERNEL_MAJOR_MINOR="4.14" # Major and minor versions of this kernel. - KERNELBRANCH='branch:odroidxu4-4.14.y' - KERNELDIR='linux-odroidxu4' - -@@ -18,11 +19,13 @@ case $BRANCH in - current) - - KERNELSOURCE='https://github.com/hardkernel/linux' -+ export KERNEL_MAJOR_MINOR="5.4" # Major and minor versions of this kernel. - KERNELBRANCH='branch:odroid-5.4.y' - KERNELDIR='linux-odroidxu4' - ;; - - edge) -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. - KERNELBRANCH='branch:linux-5.16.y' - ;; - -diff --git a/config/sources/families/rk322x.conf b/config/sources/families/rk322x.conf -index 1a8ba863f..897a452db 100644 ---- a/config/sources/families/rk322x.conf -+++ b/config/sources/families/rk322x.conf -@@ -12,6 +12,7 @@ case $BRANCH in - legacy) - - KERNELSOURCE='https://github.com/armbian/linux' -+ export KERNEL_MAJOR_MINOR="4.4" # Major and minor versions of this kernel. - KERNELBRANCH='branch:stable-4.4-rk3288-linux-v2.x' - KERNELDIR='linux-rockchip' - -@@ -19,12 +20,14 @@ case $BRANCH in - - current) - -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. - KERNELBRANCH='branch:linux-5.15.y' - - ;; - - edge) - -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. - KERNELBRANCH='branch:linux-5.16.y' - - ;; -diff --git a/config/sources/families/rk3399.conf b/config/sources/families/rk3399.conf -index b7d5ccdb7..cc1f3ba71 100644 ---- a/config/sources/families/rk3399.conf -+++ b/config/sources/families/rk3399.conf -@@ -5,6 +5,7 @@ case $BRANCH in - legacy) - - KERNELSOURCE='https://github.com/friendlyarm/kernel-rockchip' -+ export KERNEL_MAJOR_MINOR="4.4" # Major and minor versions of this kernel. - KERNELBRANCH='branch:nanopi4-linux-v4.4.y' - KERNELDIR='linux-rockchip64' - KERNELCONFIG='linux-rockchip64' -diff --git a/config/sources/families/rk35xx.conf b/config/sources/families/rk35xx.conf -index acc5ffc16..3744e6e5f 100644 ---- a/config/sources/families/rk35xx.conf -+++ b/config/sources/families/rk35xx.conf -@@ -12,6 +12,7 @@ case $BRANCH in - UBOOT_USE_GCC='< 8.0' - BOOTDIR='u-boot-rockchip64' - KERNELSOURCE='https://github.com/radxa/kernel' -+ export KERNEL_MAJOR_MINOR="4.19" # Major and minor versions of this kernel. - KERNELBRANCH='branch:stable-4.19-rock3' - KERNELDIR='linux-rockchip64' - KERNELPATCHDIR='rk35xx-legacy' -@@ -23,6 +24,7 @@ case $BRANCH in - - # temporary until kernel 5.16 is well supported for rockchip64 - edge) -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. - KERNELBRANCH="branch:linux-5.16.y" - KERNELPATCHDIR='rk35xx-'$BRANCH - SKIP_BOOTSPLASH="yes" -diff --git a/config/sources/families/rockchip.conf b/config/sources/families/rockchip.conf -index 5870ed1fb..55f56e492 100644 ---- a/config/sources/families/rockchip.conf -+++ b/config/sources/families/rockchip.conf -@@ -20,6 +20,7 @@ case $BRANCH in - legacy) - - KERNELSOURCE='https://github.com/armbian/linux' -+ export KERNEL_MAJOR_MINOR="4.4" # Major and minor versions of this kernel. - KERNELBRANCH='branch:stable-4.4-rk3288-linux' - KERNELDIR='linux-rockchip' - -@@ -27,12 +28,14 @@ case $BRANCH in - - current) - -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. - KERNELBRANCH='branch:linux-5.15.y' - - ;; - - edge) - -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. - KERNELBRANCH='branch:linux-5.16.y' - - ;; -diff --git a/config/sources/families/rockchip64.conf b/config/sources/families/rockchip64.conf -index 6790c35b7..7734f69a7 100644 ---- a/config/sources/families/rockchip64.conf -+++ b/config/sources/families/rockchip64.conf -@@ -5,6 +5,7 @@ case $BRANCH in - legacy) - KERNELDIR='linux-rockchip64' - KERNELSOURCE='https://github.com/ayufan-rock64/linux-kernel' -+ export KERNEL_MAJOR_MINOR="4.4" # Major and minor versions of this kernel. - KERNELBRANCH='tag:4.4.202-1237-rockchip-ayufan' - KERNELPATCHDIR='rockchip64-'$BRANCH - ;; -diff --git a/config/sources/families/rockpis.conf b/config/sources/families/rockpis.conf -index 0f40c9ad7..2dd31ae5b 100644 ---- a/config/sources/families/rockpis.conf -+++ b/config/sources/families/rockpis.conf -@@ -35,6 +35,7 @@ case $BRANCH in - UBOOT_USE_GCC='< 8.0' - BOOTDIR='u-boot-rockchip64' - KERNELSOURCE='https://github.com/piter75/rockchip-kernel' -+ export KERNEL_MAJOR_MINOR="4.4" # Major and minor versions of this kernel. - KERNELBRANCH='branch:rockpis-develop-4.4' - KERNELDIR='linux-rockchip64' - unset IDBLOADER_BLOB -diff --git a/config/sources/families/s5p6818.conf b/config/sources/families/s5p6818.conf -index 9074ba85a..38e4e566e 100644 ---- a/config/sources/families/s5p6818.conf -+++ b/config/sources/families/s5p6818.conf -@@ -9,6 +9,7 @@ ATF_COMPILE="no" - case $BRANCH in - legacy | current) - KERNELSOURCE='https://github.com/armbian/linux' -+ export KERNEL_MAJOR_MINOR="4.14" # Major and minor versions of this kernel. See https://github.com/armbian/linux/blob/s5p6818/Makefile - KERNELBRANCH='branch:s5p6818' - KERNELDIR='linux-mainline' - ;; -diff --git a/config/sources/families/sun50iw9.conf b/config/sources/families/sun50iw9.conf -index 3384f869a..c8b311493 100644 ---- a/config/sources/families/sun50iw9.conf -+++ b/config/sources/families/sun50iw9.conf -@@ -10,6 +10,7 @@ case $BRANCH in - - LINUXFAMILY=sun50iw9 - KERNELSOURCE='https://github.com/orangepi-xunlong/linux-orangepi.git' -+ export KERNEL_MAJOR_MINOR="4.9" # Major and minor versions of this kernel. - KERNELBRANCH="branch:orange-pi-4.9-sun50iw9" - KERNELPATCHDIR=${BOARDFAMILY}-${BRANCH} - KERNELDIR='linux-orangepi' -diff --git a/config/sources/families/virtual.conf b/config/sources/families/virtual.conf -index 41d36d1f9..3745afee6 100644 ---- a/config/sources/families/virtual.conf -+++ b/config/sources/families/virtual.conf -@@ -1,5 +1,6 @@ - BOOTBRANCH='tag:v2021.04' - -+export KERNEL_MAJOR_MINOR="5.10" # Major and minor versions of this kernel. - KERNELBRANCH='branch:linux-5.10.y' - - ARCH=arm64 -diff --git a/config/sources/families/zynq.conf b/config/sources/families/zynq.conf -index b69bcc347..2bc2d6e9d 100644 ---- a/config/sources/families/zynq.conf -+++ b/config/sources/families/zynq.conf -@@ -3,6 +3,7 @@ SERIALCON='ttyPS0' - LINUXFAMILY=zynq - - KERNELSOURCE='https://github.com/Xilinx/linux-xlnx.git' -+export KERNEL_MAJOR_MINOR="5.4" # Major and minor versions of this kernel. See https://github.com/Xilinx/linux-xlnx/blob/xilinx-v2020.2/Makefile - KERNELBRANCH='tag:xilinx-v2020.2' - KERNELDIR='linux-xlnx' - KERNELPATCHDIR='zynq-'$BRANCH - -From 7b907d446bfae3db8c5afb4431d8e9bbd9e5df9e Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Tue, 22 Feb 2022 02:27:09 +0100 -Subject: [PATCH] armbian-next: cold/warm bundles import/download/export for - fetch_from_repo - -- warm remote, if present, can be exported shallow -- if warm remote bundle is present, can be imported shallow too -- fallback to cold bundle if warm not present -- export (from cold, if exists + warm) shallow bundle -- use temp clone and DATE (not rev or tag) for shallowing, WORKS! -- info JSON/CSV, include "config_ok" true/false, kernel/uboot info - - include logs for failed configs too - - core reports ARMBIAN_WILL_BUILD_KERNEL and ARMBIAN_WILL_BUILD_UBOOT now with package names ---- - lib/functions/compilation/kernel.sh | 16 ++- - lib/functions/general/git.sh | 259 +++++++++++++++++++++++++---------- - lib/functions/main/config-prepare.sh | 50 +++++-- - lib/tools/info.py | 17 +-- - lib/tools/json2csv.py | 2 + - 5 files changed, 246 insertions(+), 98 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 9deb439eb..014e4d337 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -47,10 +47,18 @@ function compile_kernel() { - - if [[ -n $KERNELSOURCE ]]; then - display_alert "Downloading sources" "kernel" "git" -+ -+ # Does not work well with rpi for example: GIT_WARM_REMOTE_SHALLOW_AT_TAG="v${KERNEL_MAJOR_MINOR}" \ -+ # GIT_WARM_REMOTE_SHALLOW_AT_TAG sets GIT_WARM_REMOTE_SHALLOW_AT_DATE for you, as long as it is included by GIT_WARM_REMOTE_FETCH_TAGS -+ # GIT_WARM_REMOTE_SHALLOW_AT_DATE is the only one really used for making shallow -+ - GIT_FIXED_WORKDIR="${LINUXSOURCEDIR}" \ -- WARM_REMOTE_NAME="kernel-stable-${KERNEL_MAJOR_MINOR}" \ -- WARM_REMOTE_URL="${MAINLINE_KERNEL_SOURCE}" \ -- WARM_REMOTE_BRANCH="branch:linux-${KERNEL_MAJOR_MINOR}.y" \ -+ GIT_WARM_REMOTE_NAME="kernel-stable-${KERNEL_MAJOR_MINOR}" \ -+ GIT_WARM_REMOTE_URL="${MAINLINE_KERNEL_SOURCE}" \ -+ GIT_WARM_REMOTE_BRANCH="linux-${KERNEL_MAJOR_MINOR}.y" \ -+ GIT_WARM_REMOTE_FETCH_TAGS="v${KERNEL_MAJOR_MINOR}*" \ -+ GIT_WARM_REMOTE_SHALLOW_AT_TAG="${KERNEL_MAJOR_SHALLOW_TAG}" \ -+ GIT_WARM_REMOTE_BUNDLE="kernel-stable-${KERNEL_MAJOR_MINOR}" \ - GIT_COLD_BUNDLE_URL="${MAINLINE_KERNEL_COLD_BUNDLE_URL}" \ - fetch_from_repo "$KERNELSOURCE" "unused:set via GIT_FIXED_WORKDIR" "$KERNELBRANCH" "yes" - fi -@@ -254,7 +262,7 @@ function compile_kernel() { - # Prepare for packaging, using the exact same options as original compile. - display_alert "Installing kernel headers and modules for packaging" "${LINUXCONFIG} ${prepackage_targets[*]}" "info" - fasthash_debug "pre-prepackage" -- make_filter="| grep --line-buffered -v -e 'INSTALL' -e 'SIGN'" run_kernel_make_long_running "${prepackage_targets[@]}" -+ make_filter="| grep --line-buffered -v -e 'INSTALL' -e 'SIGN' -e 'XZ'" run_kernel_make_long_running "${prepackage_targets[@]}" - fasthash_debug "post-prepackage" - - # produce deb packages: image, headers, firmware, dtb -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 15a5cbbd2..73c066be4 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -8,7 +8,7 @@ improved_git() { - local delay=10 - local count=0 - while [ $count -lt $retries ]; do -- run_host_command_logged_raw "$real_git" --no-pager "$@" && return 0 # this gobbles up errors, but returns if OK, so everything after is error -+ run_host_command_logged_raw eatmydata "$real_git" --no-pager "$@" && return 0 # this gobbles up errors, but returns if OK, so everything after is error - count=$((count + 1)) - display_alert "improved_git try $count failed, retrying in ${delay} seconds" "git $*" "warn" - sleep $delay -@@ -17,6 +17,11 @@ improved_git() { - return 17 # explode with error if this is reached, "too many retries" - } - -+# Not improved, just regular, but logged "correctly". -+regular_git() { -+ run_host_command_logged_raw eatmydata -- git --no-pager "$@" -+} -+ - # avoid repeating myself too much - function improved_git_fetch() { - improved_git fetch --progress --verbose --no-auto-maintenance "$@" -@@ -67,6 +72,7 @@ fetch_from_repo() { - - git_work_dir="${SRC}/cache/sources/${workdir}" - -+ # if GIT_FIXED_WORKDIR has something, ignore above logic and use that directly. - if [[ "${GIT_FIXED_WORKDIR}" != "" ]]; then - display_alert "GIT_FIXED_WORKDIR is set to" "${GIT_FIXED_WORKDIR}" "debug" - git_work_dir="${SRC}/cache/sources/${GIT_FIXED_WORKDIR}" -@@ -83,11 +89,15 @@ fetch_from_repo() { - exit_with_error "Remote URL does not match. Stopping!" "${git_work_dir} $dir $ref_name" "warn" - fi - -+ local do_warmup_remote="no" do_cold_bundle="no" do_add_origin="no" -+ - if [[ "$(git rev-parse --git-dir)" != ".git" ]]; then - display_alert "Creating local copy" "$dir $ref_name" -- improved_git init -q --initial-branch="armbian_unused_initial_branch" . -- improved_git remote add origin "${url}" -- offline=false # Force online, we'll need to fetch. -+ regular_git init -q --initial-branch="armbian_unused_initial_branch" . -+ offline=false # Force online, we'll need to fetch. -+ do_add_origin="yes" # Just created the repo, it needs an origin later. -+ do_warmup_remote="yes" # Just created the repo, mark it as ready to receive the warm remote if exists. -+ do_cold_bundle="yes" # Just created the repo, mark it as ready to receive a cold bundle if that is available. - fi - - local changed=false -@@ -129,61 +139,12 @@ fetch_from_repo() { - fi # offline - - if [[ "${changed}" == "true" ]]; then -+ git_handle_cold_and_warm_bundle_remotes # Delegate to function to find or create cache if appropriate. - -- # If there's a cold bundle URL specified: -- # - if there's already a cold_bundle_xxx remote, move on. -- # - grab the bundle via http/https first, and fetch from that, into "cold_bundle_xxx" remote. -- # - do nothing else with this, it'll be used internally by git to avoid a huge fetch later. -- # - but, after this, the wanted branch will be fetched. signal has_fetched_from_bundle=1 for later. -- local has_fetched_from_bundle=0 -- if [[ "${GIT_COLD_BUNDLE_URL}" != "" ]]; then -- local git_cold_bundle_id git_cold_bundle_cache_dir git_cold_bundle_cache_file git_cold_bundle_remote_id git_cold_bundle_fetched_marker_file -- # calculate the id, dir and name of local file and remote -- git_cold_bundle_cache_dir="${SRC}/cache/gitbundles" -- mkdir -p "${git_cold_bundle_cache_dir}" -- git_cold_bundle_id="$(echo -n "${GIT_COLD_BUNDLE_URL}" | md5sum | awk '{print $1}')" # md5 of the URL. -- git_cold_bundle_cache_file="${git_cold_bundle_cache_dir}/${git_cold_bundle_id}.gitbundle" -- git_cold_bundle_remote_id="cold_bundle_${git_cold_bundle_id}" -- git_cold_bundle_fetched_marker_file=".git/fetched-from-bundle-${git_cold_bundle_id}" -- -- display_alert "There's a " "${GIT_COLD_BUNDLE_URL} -- ${git_cold_bundle_id} -- file: ${git_cold_bundle_cache_file}" "debug" -- -- # Don't do if already done before for this bundle. -- if [[ ! -f "${git_cold_bundle_fetched_marker_file}" ]]; then -- -- # Download the bundle file if it does not exist. -- if [[ ! -f "${git_cold_bundle_cache_file}" ]]; then -- display_alert "Downloading cold bundle from remote server" "${GIT_COLD_BUNDLE_URL}" "debug" -- run_host_command_logged wget --continue --output-document="${git_cold_bundle_cache_file}" "${GIT_COLD_BUNDLE_URL}" -- else -- display_alert "Cold bundle file exists, using it" "${git_cold_bundle_cache_file}" "debug" -- fi -- -- # Make sure bundle is valid. -- improved_git bundle verify "${git_cold_bundle_cache_file}" -- -- # Get a list of remotes in the repo; add remote to bundle if it does not exist, and fetch from it. -- # This should be done only once per workdir, so I use a marker file to denote completion. -- if git remote get-url "${git_cold_bundle_remote_id}" 2> /dev/null; then -- display_alert "Git already has bundle remote" "incomplete fetch? ${git_cold_bundle_id}" "debug" -- else -- improved_git remote add "${git_cold_bundle_remote_id}" "${git_cold_bundle_cache_file}" # Add the remote pointing to the cold bundle file -- fi -- -- display_alert "Fetching from git bundle, wait" "${git_cold_bundle_id}" "info" -- improved_git_fetch --no-tags "${git_cold_bundle_remote_id}" # Fetch it! (all refs!) -- has_fetched_from_bundle=1 # marker for pruning logic below -- echo "${remote_hash}" > "${git_cold_bundle_fetched_marker_file}" # marker for future invocation -- display_alert "Bundle fetch completed, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -- -- fi -+ if [[ "${do_add_origin}" == "yes" ]]; then -+ regular_git remote add origin "${url}" - fi - -- # @TODO: If there's a warmup remote specified: (for u-boot and others) -- # - if there's already a warmup remote, move on. -- # - if there's a cached warmup bundle file, add it as remote and fetch from it, and move on. -- # - add the warmup as remote, fetch from it; export it as a cached bundle for next time. -- - # remote was updated, fetch and check out updates, but not tags; tags pull their respective commits too, making it a huge fetch. - display_alert "Fetching updates from origin" "$dir $ref_name" - case $ref_type in -@@ -194,25 +155,14 @@ fetch_from_repo() { - display_alert "Origin fetch completed, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size again - - display_alert "Checking out" "$dir $ref_name" -- improved_git checkout -f -q FETCH_HEAD -- improved_git clean -q -d -f -+ regular_git checkout -f -q FETCH_HEAD -+ regular_git clean -q -d -f - display_alert "After checkout, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull - -- # @TODO: find fork point, shallow from there, repack, and export bundle for that version; -- # would need a mainline reference to to this (eg: find 5.10.0, export 5.10 bundle from there) -- if [[ $has_fetched_from_bundle -gt 0 ]]; then -- display_alert "Pre-pruning, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -- display_alert "@TODO" "export bundle after full fetch" "warn" -- # echo -n "${remote_hash}" > .git/shallow # commit to keep for shallowing, can be something else. for now is full prune. -- # improved_git remote remove "${git_cold_bundle_remote_id}" -- # improved_git reflog expire --expire=0 --all -- # improved_git gc --prune=all -- fi -- - elif [[ -n $(git status -uno --porcelain --ignore-submodules=all) ]]; then # if not changed, but dirty... - display_alert "Cleaning git dir" "$(git status -s | wc -l) files" # working directory is not clean, show it -- improved_git checkout -f -q HEAD # Return the files that are tracked by git to the initial state. -- improved_git clean -q -d -f # Files that are not tracked by git and were added when the patch was applied must be removed. -+ regular_git checkout -f -q HEAD # Return the files that are tracked by git to the initial state. -+ regular_git clean -q -d -f # Files that are not tracked by git and were added when the patch was applied must be removed. - else # not changed, not dirty. - display_alert "Up to date" "$dir $ref_name at revision ${local_hash}" # working directory is clean, nothing to do - fi -@@ -236,3 +186,170 @@ fetch_from_repo() { - done - fi - } -+ -+function git_fetch_from_bundle_file() { -+ local bundle_file="${1}" remote_name="${2}" shallow_file="${3}" -+ regular_git bundle verify "${bundle_file}" # Make sure bundle is valid. -+ regular_git remote add "${remote_name}" "${bundle_file}" # Add the remote pointing to the cold bundle file -+ if [[ -f "${shallow_file}" ]]; then -+ display_alert "Bundle is shallow" "${shallow_file}" "debug" -+ cp -p "${shallow_file}" ".git/shallow" -+ fi -+ improved_git_fetch --tags "${remote_name}" # Fetch it! (including tags!) -+ display_alert "Bundle fetch '${remote_name}' completed, working copy size" "$(du -h -s | awk '{print $1}')" "debug" -+} -+ -+function download_git_bundle_from_http() { -+ local bundle_file="${1}" bundle_url="${2}" -+ if [[ ! -f "${git_cold_bundle_cache_file}" ]]; then # Download the bundle file if it does not exist. -+ display_alert "Downloading cold bundle from remote server" "${bundle_url}" "debug" # This gonna take a while. And waste bandwidth -+ run_host_command_logged wget --continue --output-document="${bundle_file}" "${bundle_url}" # @TODO: progress giga? -+ else -+ display_alert "Cold bundle file exists, using it" "${bundle_file}" "debug" -+ fi -+} -+ -+function git_remove_cold_and_warm_bundle_remotes() { -+ # Remove the cold bundle remote, otherwise it holds references that impede the shallow to actually work. -+ if [[ ${has_git_cold_remote} -gt 0 ]]; then -+ regular_git remote remove "${git_cold_bundle_remote_name}" -+ has_git_cold_remote=0 -+ fi -+ -+ # Remove the warmup remote, otherwise it holds references forever. -+ if [[ ${has_git_warm_remote} -gt 0 ]]; then -+ regular_git remote remove "${GIT_WARM_REMOTE_NAME}" -+ has_git_warm_remote=0 -+ fi -+} -+ -+function git_handle_cold_and_warm_bundle_remotes() { -+ -+ local has_git_cold_remote=0 -+ local has_git_warm_remote=0 -+ local git_warm_remote_bundle_file git_warm_remote_bundle_cache_dir git_warm_remote_bundle_file_shallowfile -+ local git_warm_remote_bundle_extra_fn="" -+ -+ # First check the warm remote bundle cache. If that exists, use that, and skip the cold bundle. -+ if [[ "${do_warmup_remote}" == "yes" ]]; then -+ if [[ "${GIT_WARM_REMOTE_NAME}" != "" ]] && [[ "${GIT_WARM_REMOTE_BUNDLE}" != "" ]]; then -+ # Add extras to filename, for shallow by tag or revision -+ if [[ "${GIT_WARM_REMOTE_SHALLOW_REVISION}" != "" ]]; then -+ git_warm_remote_bundle_extra_fn="-shallow-rev-${GIT_WARM_REMOTE_SHALLOW_REVISION}" -+ elif [[ "${GIT_WARM_REMOTE_SHALLOW_AT_TAG}" != "" ]]; then -+ git_warm_remote_bundle_extra_fn="-shallow-tag-${GIT_WARM_REMOTE_SHALLOW_AT_TAG}" -+ fi -+ git_warm_remote_bundle_cache_dir="${SRC}/cache/gitbundles/warm" # calculate the id, dir and name of local file and remote -+ git_warm_remote_bundle_file="${git_warm_remote_bundle_cache_dir}/${GIT_WARM_REMOTE_BUNDLE}${git_warm_remote_bundle_extra_fn}.gitbundle" # final filename of bundle -+ git_warm_remote_bundle_file_shallowfile="${git_warm_remote_bundle_file}.shallow" # it can be there's a shallow revision -+ if [[ -f "${git_warm_remote_bundle_file}" ]]; then -+ display_alert "Fetching from Warm git bundle, wait" "${GIT_WARM_REMOTE_BUNDLE}" "info" # This is gonna take a long while... -+ git_fetch_from_bundle_file "${git_warm_remote_bundle_file}" "${GIT_WARM_REMOTE_NAME}" "${git_warm_remote_bundle_file_shallowfile}" -+ do_cold_bundle="no" # Skip the cold bundle, below. -+ do_warmup_remote="no" # Skip the warm bundle creation, below, too. -+ has_git_warm_remote=1 # mark warm remote as added. -+ else -+ display_alert "Could not find warm bundle file" "${git_warm_remote_bundle_file}" "debug" -+ fi -+ fi -+ fi -+ -+ if [[ "${do_cold_bundle}" == "yes" ]]; then -+ # If there's a cold bundle URL specified: -+ # - if there's already a cold_bundle_xxx remote, move on. -+ # - grab the bundle via http/https first, and fetch from that, into "cold_bundle_xxx" remote. -+ # - do nothing else with this, it'll be used internally by git to avoid a huge fetch later. -+ # - but, after this, the wanted branch will be fetched. signal has_git_cold_remote=1 for later. -+ if [[ "${GIT_COLD_BUNDLE_URL}" != "" ]]; then -+ display_alert "There's a " "${GIT_COLD_BUNDLE_URL} -- ${git_cold_bundle_id} -- file: ${git_cold_bundle_cache_file}" "debug" # @TODO: remove -+ local git_cold_bundle_id git_cold_bundle_cache_dir git_cold_bundle_cache_file git_cold_bundle_remote_name -+ git_cold_bundle_cache_dir="${SRC}/cache/gitbundles/cold" # calculate the id, dir and name of local file and remote -+ git_cold_bundle_id="$(echo -n "${GIT_COLD_BUNDLE_URL}" | md5sum | awk '{print $1}')" # md5 of the URL. -+ git_cold_bundle_cache_file="${git_cold_bundle_cache_dir}/${git_cold_bundle_id}.gitbundle" # final filename of bundle -+ git_cold_bundle_remote_name="cold_bundle_${git_cold_bundle_id}" # name of the remote that will point to bundle -+ mkdir -p "${git_cold_bundle_cache_dir}" # make sure directory exists before downloading -+ download_git_bundle_from_http "${git_cold_bundle_cache_file}" "${GIT_COLD_BUNDLE_URL}" -+ display_alert "Fetching from cold git bundle, wait" "${git_cold_bundle_id}" "info" # This is gonna take a long while... -+ git_fetch_from_bundle_file "${git_cold_bundle_cache_file}" "${git_cold_bundle_remote_name}" -+ has_git_cold_remote=1 # marker for pruning logic below -+ fi -+ fi -+ -+ # If there's a warmup remote specified. -+ # - if there's a cached warmup bundle file, add it as remote and fetch from it, and move on. -+ # - add the warmup as remote, fetch from it; export it as a cached bundle for next time. -+ if [[ "${do_warmup_remote}" == "yes" ]]; then -+ if [[ "${GIT_WARM_REMOTE_NAME}" != "" ]] && [[ "${GIT_WARM_REMOTE_URL}" != "" ]] && [[ "${GIT_WARM_REMOTE_BRANCH}" != "" ]]; then -+ -+ display_alert "Using Warmup Remote before origin fetch" "${GIT_WARM_REMOTE_NAME} - ${GIT_WARM_REMOTE_BRANCH}" "debug" -+ regular_git remote add "${GIT_WARM_REMOTE_NAME}" "${GIT_WARM_REMOTE_URL}" # Add the remote to the warmup source -+ has_git_warm_remote=1 # mark as done. Will export the bundle! -+ -+ improved_git_fetch --no-tags "${GIT_WARM_REMOTE_NAME}" "${GIT_WARM_REMOTE_BRANCH}" # Fetch the remote branch, but no tags -+ display_alert "After warm bundle, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -+ -+ # Checkout that to a branch. We wanna have a local reference to what has been fetched. -+ # @TODO: could be a param instead of FETCH_HEAD; would drop commits after that rev -+ local git_warm_branch_name="warm__${GIT_WARM_REMOTE_BRANCH}" -+ regular_git branch "${git_warm_branch_name}" FETCH_HEAD || true -+ -+ improved_git_fetch "${GIT_WARM_REMOTE_NAME}" "'refs/tags/${GIT_WARM_REMOTE_FETCH_TAGS}:refs/tags/${GIT_WARM_REMOTE_FETCH_TAGS}'" || true # Fetch the remote branch, but no tags -+ display_alert "After warm bundle tags, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -+ -+ # Lookup the tag (at the warm remote directly) to find the rev to shallow to. -+ if [[ "${GIT_WARM_REMOTE_SHALLOW_AT_TAG}" != "" ]]; then -+ display_alert "GIT_WARM_REMOTE_SHALLOW_AT_TAG" "${GIT_WARM_REMOTE_SHALLOW_AT_TAG}" "debug" -+ GIT_WARM_REMOTE_SHALLOW_AT_DATE="$(git tag --list --format="%(creatordate)" "${GIT_WARM_REMOTE_SHALLOW_AT_TAG}")" -+ display_alert "GIT_WARM_REMOTE_SHALLOW_AT_TAG ${GIT_WARM_REMOTE_SHALLOW_AT_TAG} resulted in GIT_WARM_REMOTE_SHALLOW_AT_DATE" "Date: ${GIT_WARM_REMOTE_SHALLOW_AT_DATE}" "debug" -+ fi -+ -+ # At this stage, we might wanna make the local copy shallow and re-pack it. -+ if [[ "${GIT_WARM_REMOTE_SHALLOW_AT_DATE}" != "" ]]; then -+ display_alert "Making working copy shallow" "before date ${GIT_WARM_REMOTE_SHALLOW_AT_DATE}" "debug" -+ -+ # 'git clone' is the only consistent, usable thing we can do to do this. -+ # it does require a temporary dir, though. use one. -+ -+ local temp_git_dir="${git_work_dir}.making.shallow.temp" -+ rm -rf "${temp_git_dir}" -+ -+ regular_git clone --no-checkout --progress --verbose \ -+ --single-branch --branch="${git_warm_branch_name}" \ -+ --tags --shallow-since="${GIT_WARM_REMOTE_SHALLOW_AT_DATE}" \ -+ "file://${git_work_dir}" "${temp_git_dir}" -+ -+ display_alert "After shallow clone, temp_git_dir" "$(du -h -s "${temp_git_dir}" | awk '{print $1}')" "debug" # Show size after shallow -+ -+ # Get rid of original, replace with new. Move cwd so no warnings are produced. -+ cd "${SRC}" || exit_with_error "Failed to move cwd away so we can remove" "${git_work_dir}" -+ rm -rf "${git_work_dir}" -+ mv -v "${temp_git_dir}" "${git_work_dir}" -+ cd "${git_work_dir}" || exit_with_error "Failed to get new dir after clone" "${git_work_dir}" -+ -+ # dir switched, no more the original remotes. but origin is leftover, remove it -+ regular_git remote remove origin || true -+ has_git_cold_remote=0 -+ has_git_warm_remote=0 -+ -+ display_alert "After shallow, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after shallow -+ fi -+ -+ # Now git working copy has a precious state we might wanna preserve (export the bundle). -+ if [[ "${GIT_WARM_REMOTE_BUNDLE}" != "" ]]; then -+ mkdir -p "${git_warm_remote_bundle_cache_dir}" -+ display_alert "Exporting warm remote bundle" "${git_warm_remote_bundle_file}" "debug" -+ regular_git bundle create "${git_warm_remote_bundle_file}" --all -+ -+ rm -f "${git_warm_remote_bundle_file_shallowfile}" # not shallow at first... -+ if [[ -f ".git/shallow" ]]; then -+ display_alert "Exported bundle is shallow" "Will copy to ${git_warm_remote_bundle_file_shallowfile}" "debug" -+ cp -p ".git/shallow" "${git_warm_remote_bundle_file_shallowfile}" -+ fi -+ -+ fi -+ fi -+ fi -+ -+ # Make sure to remove the cold and warm bundle remote, otherwise it holds references for no good reason. -+ git_remove_cold_and_warm_bundle_remotes -+} -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index 618f4eb9c..56616cff6 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -160,22 +160,8 @@ function prepare_and_config_main_build_single() { - fi - - export BOOTSOURCEDIR="${BOOTDIR}/$(branch2dir "${BOOTBRANCH}")" -- export LINUXSOURCEDIR="${KERNELDIR}/$(branch2dir "${KERNELBRANCH}")" - [[ -n $ATFSOURCE ]] && export ATFSOURCEDIR="${ATFDIR}/$(branch2dir "${ATFBRANCH}")" - -- # So for kernel full cached rebuilds. -- # We wanna be able to rebuild kernels very fast. so it only makes sense to use a dir for each built kernel. -- # That is the "default" layout; there will be as many source dirs as there are built kernel debs. -- # But, it really makes much more sense if the major.minor (such as 5.10, 5.15, or 4.4) of kernel has its own -- # tree. So in the end: -- # -[-] -- # So we gotta explictly know the major.minor to be able to do that scheme. -- # If we don't know, we could use BRANCH as reference, but that changes over time, and leads to wastage. -- if [[ "x${KERNEL_MAJOR_MINOR}x" == "xx" ]]; then -- exit_with_error "BAD config, missing" "KERNEL_MAJOR_MINOR" "err" -- fi -- export LINUXSOURCEDIR="kernel/${ARCH}__${KERNEL_MAJOR_MINOR}__${LINUXFAMILY}" -- - export BSP_CLI_PACKAGE_NAME="armbian-bsp-cli-${BOARD}${EXTRA_BSP_NAME}" - export BSP_CLI_PACKAGE_FULLNAME="${BSP_CLI_PACKAGE_NAME}_${REVISION}_${ARCH}" - export BSP_DESKTOP_PACKAGE_NAME="armbian-bsp-desktop-${BOARD}${EXTRA_BSP_NAME}" -@@ -186,7 +172,41 @@ function prepare_and_config_main_build_single() { - export CHOSEN_ROOTFS=${BSP_CLI_PACKAGE_NAME} - export CHOSEN_DESKTOP=armbian-${RELEASE}-desktop-${DESKTOP_ENVIRONMENT} - export CHOSEN_KSRC=linux-source-${BRANCH}-${LINUXFAMILY} -- export CHOSEN_KERNEL_WITH_ARCH=${CHOSEN_KERNEL}-${ARCH} # Only for reporting purposes. -+ -+ # So for kernel full cached rebuilds. -+ # We wanna be able to rebuild kernels very fast. so it only makes sense to use a dir for each built kernel. -+ # That is the "default" layout; there will be as many source dirs as there are built kernel debs. -+ # But, it really makes much more sense if the major.minor (such as 5.10, 5.15, or 4.4) of kernel has its own -+ # tree. So in the end: -+ # -[-] -+ # So we gotta explictly know the major.minor to be able to do that scheme. -+ # If we don't know, we could use BRANCH as reference, but that changes over time, and leads to wastage. -+ if [[ -n "${KERNELSOURCE}" ]]; then -+ export ARMBIAN_WILL_BUILD_KERNEL="${CHOSEN_KERNEL}-${ARCH}" -+ if [[ "x${KERNEL_MAJOR_MINOR}x" == "xx" ]]; then -+ exit_with_error "BAD config, missing" "KERNEL_MAJOR_MINOR" "err" -+ fi -+ # Parse/validate the the major, bail if no match -+ if linux-version compare "${KERNEL_MAJOR_MINOR}" ge "5.4"; then # We support 5.x from 5.4; 5.10+ brings unified packaging. -+ export KERNEL_MAJOR=5 -+ export KERNEL_MAJOR_SHALLOW_TAG="v${KERNEL_MAJOR_MINOR}-rc1" -+ elif linux-version compare "${KERNEL_MAJOR_MINOR}" ge "4.4" && linux-version compare "${KERNEL_MAJOR_MINOR}" lt "5.0"; then -+ export KERNEL_MAJOR=4 # We support 4.x from 4.4; all require custom packaging. -+ export KERNEL_MAJOR_SHALLOW_TAG="v${KERNEL_MAJOR_MINOR}-rc1" -+ else -+ exit_with_error "Kernel series unsupported" "'${KERNEL_MAJOR_MINOR}' is unsupported, or bad config" -+ fi -+ -+ export LINUXSOURCEDIR="kernel/${ARCH}__${KERNEL_MAJOR_MINOR}__${LINUXFAMILY}" -+ else -+ export ARMBIAN_WILL_BUILD_KERNEL=no -+ fi -+ -+ if [[ -n "${BOOTCONFIG}" ]] && [[ "${BOOTCONFIG}" != "none" ]]; then -+ export ARMBIAN_WILL_BUILD_UBOOT=yes -+ else -+ export ARMBIAN_WILL_BUILD_UBOOT=no -+ fi - - display_alert "Done with prepare_and_config_main_build_single" "${BOARD}.${BOARD_TYPE}" "info" - } -diff --git a/lib/tools/info.py b/lib/tools/info.py -index 088d4738a..6319a1427 100755 ---- a/lib/tools/info.py -+++ b/lib/tools/info.py -@@ -44,7 +44,8 @@ def map_to_armbian_params(map_params): - - def run_armbian_compile_and_parse(path_to_compile_sh, compile_params): - exec_cmd = ([path_to_compile_sh] + map_to_armbian_params(compile_params)) -- # print(exec_cmd) -+ result = None -+ logs = ["Not available"] - try: - result = subprocess.run( - exec_cmd, -@@ -62,7 +63,11 @@ def run_armbian_compile_and_parse(path_to_compile_sh, compile_params): - compile_params, e.returncode, e.stderr - ) - ) -- raise e -+ return {"in": compile_params, "out": {}, "logs": e.stderr.split("\n"), "config_ok": False} -+ -+ if result is not None: -+ if result.stderr: -+ logs = result.stderr.split("\n") - - # Now parse it with regex-power! - # regex = r"^declare (..) (.*?)=\"(.*?)\"$" # old multiline version -@@ -83,11 +88,7 @@ def run_armbian_compile_and_parse(path_to_compile_sh, compile_params): - - all_keys[key] = value - -- logs = ["Not available"] -- if result.stderr: -- logs = result.stderr.split("\n") -- -- return {"in": compile_params, "out": all_keys, "logs": logs} -+ return {"in": compile_params, "out": all_keys, "logs": logs, "config_ok": True} - - - # Find the location of compile.sh, relative to this Python script. -@@ -160,7 +161,7 @@ def get_info_for_one_board(board_file, board_name, common_params, board_info): - return parsed | board_info - except: - eprint("Failed get info for board '{}'".format(board_name)) -- return None -+ return board_info | {"ARMBIAN_CONFIG_OK": False} - - - if True: -diff --git a/lib/tools/json2csv.py b/lib/tools/json2csv.py -index 7933ed9d6..68c1decb0 100755 ---- a/lib/tools/json2csv.py -+++ b/lib/tools/json2csv.py -@@ -33,6 +33,8 @@ for obj in flat: - value = obj[key] - if type(value) == str: - columns_map[key] = True -+ if type(value) == bool: -+ columns_map[key] = True - - columns = columns_map.keys() - - -From 8eca261f5e3e41d7f363514a79b4fd764c3e9b71 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 21 Feb 2022 17:39:40 +0100 -Subject: [PATCH] armbian-next: `KERNELDIR` is out, `KERNEL_MAJOR_MINOR` is in - for all `meson64`, `rpi4b` and `uefi` - ---- - config/sources/families/bcm2711.conf | 3 ++- - config/sources/families/include/meson64_common.inc | 7 ++++--- - config/sources/families/include/uefi_common.inc | 8 ++++---- - extensions/grub.sh | 1 - - 4 files changed, 10 insertions(+), 9 deletions(-) - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index 0dc25fc3f..a5a0bff7f 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -3,7 +3,6 @@ export LINUXFAMILY=bcm2711 - export ARCH=arm64 - export UEFI_FS_LABEL="RPICFG" # Windows/Mac users will see this if they mount the SD card. Configurable, but should be uppercase always - export SKIP_BOOTSPLASH="yes" # video is init-ed before us --export KERNELDIR='linux-rpi' # Avoid sharing a source tree with others, until we know it's safe. - export FK__PUBLISHED_KERNEL_VERSION="raspi" # flash kernel (FK) configuration - export FK__KERNEL_PACKAGES="" - export RASPI_ROOT_FS_LABEL="armbian" -@@ -20,6 +19,7 @@ case "${BRANCH}" in - current) - export RASPI_DISTRO_KERNEL=no - export KERNELSOURCE='https://github.com/raspberrypi/linux' -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. For mainline caching. - export KERNELBRANCH="branch:rpi-5.15.y" - export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" - export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" -@@ -28,6 +28,7 @@ case "${BRANCH}" in - edge) - export RASPI_DISTRO_KERNEL=no - export KERNELSOURCE='https://github.com/raspberrypi/linux' -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. For mainline caching. - export KERNELBRANCH="branch:rpi-5.16.y" - export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" - export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" -diff --git a/config/sources/families/include/meson64_common.inc b/config/sources/families/include/meson64_common.inc -index f69669a5f..ea4363e81 100644 ---- a/config/sources/families/include/meson64_common.inc -+++ b/config/sources/families/include/meson64_common.inc -@@ -24,17 +24,18 @@ case $BRANCH in - - legacy) - KERNELSOURCE='https://github.com/hardkernel/linux' -- #KERNELBRANCH='branch:odroidg12-4.9.y' -- KERNELBRANCH='tag:4.9.277-122' -- KERNELDIR='linux-odroid' -+ export KERNEL_MAJOR_MINOR="4.9" # Major and minor versions of this kernel. For mainline caching. -+ KERNELBRANCH='branch:odroidg12-4.9.y' - ;; - - current) -+ export KERNEL_MAJOR_MINOR="5.10" # Major and minor versions of this kernel. For mainline caching. - KERNELBRANCH='branch:linux-5.10.y' - KERNELPATCHDIR='meson64-current' - ;; - - edge) -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. For mainline caching. - KERNELBRANCH='branch:linux-5.15.y' - KERNELPATCHDIR='meson64-edge' - ;; -diff --git a/config/sources/families/include/uefi_common.inc b/config/sources/families/include/uefi_common.inc -index 7d6c97e0a..b362bcba0 100644 ---- a/config/sources/families/include/uefi_common.inc -+++ b/config/sources/families/include/uefi_common.inc -@@ -14,16 +14,16 @@ case "${BRANCH}" in - current) - export DISTRO_GENERIC_KERNEL=no - export LINUXCONFIG="linux-uefi-${LINUXFAMILY}-${BRANCH}" -- export KERNELBRANCH="branch:linux-5.15.y" -+ export KERNEL_MAJOR_MINOR="5.15" # Major and minor versions of this kernel. For mainline caching. -+ export KERNELBRANCH="branch:linux-5.15.y" # Branch or tag to build from. It should match MAJOR_MINOR - export KERNELPATCHDIR="uefi-${LINUXFAMILY}-${BRANCH}" # Might be empty. -- export KERNELDIR="linux-uefi-${LINUXFAMILY}" # Avoid sharing a source tree with others, until we know it's safe. - ;; - - edge) - export DISTRO_GENERIC_KERNEL=no - export LINUXCONFIG="linux-uefi-${LINUXFAMILY}-${BRANCH}" -- export KERNELBRANCH="branch:linux-5.16.y" -+ export KERNEL_MAJOR_MINOR="5.16" # Major and minor versions of this kernel. For mainline caching. -+ export KERNELBRANCH="branch:linux-5.16.y" # Branch or tag to build from. It should match MAJOR_MINOR - export KERNELPATCHDIR="uefi-${LINUXFAMILY}-${BRANCH}" # Might be empty. -- export KERNELDIR="linux-uefi-${LINUXFAMILY}" # Avoid sharing a source tree with others, until we know it's safe. - ;; - esac -diff --git a/extensions/grub.sh b/extensions/grub.sh -index 3f0478454..e1b20a87e 100644 ---- a/extensions/grub.sh -+++ b/extensions/grub.sh -@@ -53,7 +53,6 @@ function extension_prepare_config__prepare_flash_kernel() { - unset KERNELSOURCE # This should make Armbian skip most stuff. At least, I hacked it to. - export INSTALL_ARMBIAN_FIRMWARE=no # Should skip build and install of Armbian-firmware. - else -- export KERNELDIR="linux-uefi-${LINUXFAMILY}" # Avoid sharing a source tree with others, until we know it's safe. - # Don't install anything. Armbian handles everything. - DISTRO_KERNEL_PACKAGES="" - DISTRO_FIRMWARE_PACKAGES="" - -From 6f046c4f36a156468666b8c7bfff995934c44264 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 21 Feb 2022 17:37:10 +0100 -Subject: [PATCH] armbian-next: new kernel workdir layout: - cache/sources/kernel/-- - -- `GIT_FIXED_WORKDIR` is used to ignore 2nd param and use a specific dir -- this now REQUIRES `KERNEL_MAJOR_MINOR` to be set. -- prepare some `WARM_REMOTE_NAME` and related, based on it ---- - lib/functions/compilation/kernel.sh | 41 ++++++++++++++++++++---------------- - lib/functions/general/git.sh | 7 +++++- - lib/functions/main/config-prepare.sh | 13 ++++++++++++ - lib/functions/main/default-build.sh | 2 +- - 4 files changed, 43 insertions(+), 20 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index f429110d2..9deb439eb 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -43,34 +43,39 @@ function run_kernel_make_long_running() { - } - - function compile_kernel() { -+ local kernel_work_dir="${SRC}/cache/sources/${LINUXSOURCEDIR}" -+ - if [[ -n $KERNELSOURCE ]]; then - display_alert "Downloading sources" "kernel" "git" -- GIT_COLD_BUNDLE_URL="${MAINLINE_KERNEL_COLD_BUNDLE_URL}" \ -- fetch_from_repo "$KERNELSOURCE" "$KERNELDIR" "$KERNELBRANCH" "yes" -+ GIT_FIXED_WORKDIR="${LINUXSOURCEDIR}" \ -+ WARM_REMOTE_NAME="kernel-stable-${KERNEL_MAJOR_MINOR}" \ -+ WARM_REMOTE_URL="${MAINLINE_KERNEL_SOURCE}" \ -+ WARM_REMOTE_BRANCH="branch:linux-${KERNEL_MAJOR_MINOR}.y" \ -+ GIT_COLD_BUNDLE_URL="${MAINLINE_KERNEL_COLD_BUNDLE_URL}" \ -+ fetch_from_repo "$KERNELSOURCE" "unused:set via GIT_FIXED_WORKDIR" "$KERNELBRANCH" "yes" - fi - - if [[ $CLEAN_LEVEL == *make* ]]; then - display_alert "Cleaning" "$LINUXSOURCEDIR" "info" - ( -- cd "${SRC}/cache/sources/${LINUXSOURCEDIR}" -+ cd "${kernel_work_dir}" - make ARCH="${ARCHITECTURE}" clean > /dev/null 2>&1 - ) - fi - fasthash_debug "post git clean" - -- local kerneldir="$SRC/cache/sources/$LINUXSOURCEDIR" - if [[ $USE_OVERLAYFS == yes ]]; then - display_alert "Using overlayfs_wrapper" "kernel_${LINUXFAMILY}_${BRANCH}" "debug" -- kerneldir=$(overlayfs_wrapper "wrap" "$SRC/cache/sources/$LINUXSOURCEDIR" "kernel_${LINUXFAMILY}_${BRANCH}") -+ kernel_work_dir=$(overlayfs_wrapper "wrap" "$SRC/cache/sources/$LINUXSOURCEDIR" "kernel_${LINUXFAMILY}_${BRANCH}") - fi -- cd "${kerneldir}" || exit -+ cd "${kernel_work_dir}" || exit - - # @TODO: why would we delete localversion? - rm -f localversion - - # read kernel version - local version hash pre_patch_version -- version=$(grab_version "$kerneldir") -+ version=$(grab_version "$kernel_work_dir") - pre_patch_version="${version}" - display_alert "Pre-patch kernel version" "${pre_patch_version}" "debug" - -@@ -81,14 +86,14 @@ function compile_kernel() { - fi - - # read kernel git hash -- hash=$(git --git-dir="$kerneldir"/.git rev-parse HEAD) -+ hash=$(git --git-dir="$kernel_work_dir"/.git rev-parse HEAD) - - ## Start kernel patching process. - ## There's a few objectives here: - ## - (always) produce a fasthash: represents "what would be done" (eg: md5 of a patch, crc32 of description). - ## - (optionally) execute modification against living tree (eg: apply a patch, copy a file, etc). only if `DO_MODIFY=yes` - ## - (always) call mark_change_commit with the description of what was done and fasthash. -- initialize_fasthash "kernel" "${hash}" "${pre_patch_version}" "${kerneldir}" -+ initialize_fasthash "kernel" "${hash}" "${pre_patch_version}" "${kernel_work_dir}" - fasthash_debug "init" - - # Apply a series of patches if a series file exists -@@ -96,17 +101,17 @@ function compile_kernel() { - if test -f "${series_conf}"; then - display_alert "series.conf file visible. Apply" - fasthash_branch "patches-${KERNELPATCHDIR}-series.conf" -- apply_patch_series "${kerneldir}" "${series_conf}" # applies a series of patches, read from a file. calls process_patch_file -+ apply_patch_series "${kernel_work_dir}" "${series_conf}" # applies a series of patches, read from a file. calls process_patch_file - fi - - # mostly local-based packaging fixes. - fasthash_branch "packaging-patches" -- apply_kernel_patches_for_packaging "${kerneldir}" "${version}" # calls process_patch_file and other stuff. -+ apply_kernel_patches_for_packaging "${kernel_work_dir}" "${version}" # calls process_patch_file and other stuff. - - # applies a humongous amount of patches coming from github repos. - # it's mostly conditional, and very complex. - # @TODO: re-enable after finishing converting it with fasthash magic -- # apply_kernel_patches_for_drivers "${kerneldir}" "${version}" # calls process_patch_file and other stuff. there is A LOT of it. -+ # apply_kernel_patches_for_drivers "${kernel_work_dir}" "${version}" # calls process_patch_file and other stuff. there is A LOT of it. - - # applies a series of patches, in directory order, from multiple directories (default/"user" patches) - # @TODO: I believe using the $BOARD here is the most confusing thing in the whole of Armbian. It should be disabled. -@@ -123,7 +128,7 @@ function compile_kernel() { - - # re-read kernel version after patching - local version -- version=$(grab_version "$kerneldir") -+ version=$(grab_version "$kernel_work_dir") - - display_alert "Compiling $BRANCH kernel" "$version" "info" - -@@ -172,8 +177,8 @@ function compile_kernel() { - - # hack for OdroidXU4. Copy firmare files - if [[ $BOARD == odroidxu4 ]]; then -- mkdir -p "${kerneldir}/firmware/edid" -- cp "${SRC}"/packages/blobs/odroidxu4/*.bin "${kerneldir}/firmware/edid" -+ mkdir -p "${kernel_work_dir}/firmware/edid" -+ cp "${SRC}"/packages/blobs/odroidxu4/*.bin "${kernel_work_dir}/firmware/edid" - fi - - # hack for deb builder. To pack what's missing in headers pack. -@@ -236,7 +241,7 @@ function compile_kernel() { - fi - - # Check for built kernel image file file; can override default with KERNEL_IMAGE_TYPE_PATH -- local check_built_kernel_file="${kerneldir}/${KERNEL_IMAGE_TYPE_PATH:-"arch/${ARCHITECTURE}/boot/${KERNEL_IMAGE_TYPE}"}" -+ local check_built_kernel_file="${kernel_work_dir}/${KERNEL_IMAGE_TYPE_PATH:-"arch/${ARCHITECTURE}/boot/${KERNEL_IMAGE_TYPE}"}" - if [[ ! -f "${check_built_kernel_file}" ]]; then - exit_with_error "Kernel was not built" "${check_built_kernel_file}" - fi -@@ -292,8 +297,8 @@ create_linux-source_package() { - xz < .config > "${sources_pkg_dir}/usr/src/${LINUXCONFIG}_${version}_${REVISION}_config.xz" - - display_alert "Compressing sources for the linux-source package" -- tar cp --directory="$kerneldir" --exclude='.git' --owner=root . | -- pv -N "$(logging_echo_prefix_for_pv "compress_kernel_sources") $display_name" -p -b -r -s "$(du -sb "$kerneldir" --exclude=='.git' | cut -f1)" | -+ tar cp --directory="$kernel_work_dir" --exclude='.git' --owner=root . | -+ pv -N "$(logging_echo_prefix_for_pv "compress_kernel_sources") $display_name" -p -b -r -s "$(du -sb "$kernel_work_dir" --exclude=='.git' | cut -f1)" | - pixz -0 > "${sources_pkg_dir}/usr/src/linux-source-${version}-${LINUXFAMILY}.tar.xz" # @TODO: .deb will compress this later. -0 for now, but should be a plain tar - cp COPYING "${sources_pkg_dir}/usr/share/doc/linux-source-${version}-${LINUXFAMILY}/LICENSE" - -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 81b64586b..15a5cbbd2 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -67,6 +67,11 @@ fetch_from_repo() { - - git_work_dir="${SRC}/cache/sources/${workdir}" - -+ if [[ "${GIT_FIXED_WORKDIR}" != "" ]]; then -+ display_alert "GIT_FIXED_WORKDIR is set to" "${GIT_FIXED_WORKDIR}" "debug" -+ git_work_dir="${SRC}/cache/sources/${GIT_FIXED_WORKDIR}" -+ fi -+ - mkdir -p "${git_work_dir}" || exit_with_error "No path or no write permission" "${git_work_dir}" - - cd "${git_work_dir}" || exit -@@ -82,7 +87,7 @@ fetch_from_repo() { - display_alert "Creating local copy" "$dir $ref_name" - improved_git init -q --initial-branch="armbian_unused_initial_branch" . - improved_git remote add origin "${url}" -- offline=false # Force only, we'll need to fetch. -+ offline=false # Force online, we'll need to fetch. - fi - - local changed=false -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index bb3831889..618f4eb9c 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -163,6 +163,19 @@ function prepare_and_config_main_build_single() { - export LINUXSOURCEDIR="${KERNELDIR}/$(branch2dir "${KERNELBRANCH}")" - [[ -n $ATFSOURCE ]] && export ATFSOURCEDIR="${ATFDIR}/$(branch2dir "${ATFBRANCH}")" - -+ # So for kernel full cached rebuilds. -+ # We wanna be able to rebuild kernels very fast. so it only makes sense to use a dir for each built kernel. -+ # That is the "default" layout; there will be as many source dirs as there are built kernel debs. -+ # But, it really makes much more sense if the major.minor (such as 5.10, 5.15, or 4.4) of kernel has its own -+ # tree. So in the end: -+ # -[-] -+ # So we gotta explictly know the major.minor to be able to do that scheme. -+ # If we don't know, we could use BRANCH as reference, but that changes over time, and leads to wastage. -+ if [[ "x${KERNEL_MAJOR_MINOR}x" == "xx" ]]; then -+ exit_with_error "BAD config, missing" "KERNEL_MAJOR_MINOR" "err" -+ fi -+ export LINUXSOURCEDIR="kernel/${ARCH}__${KERNEL_MAJOR_MINOR}__${LINUXFAMILY}" -+ - export BSP_CLI_PACKAGE_NAME="armbian-bsp-cli-${BOARD}${EXTRA_BSP_NAME}" - export BSP_CLI_PACKAGE_FULLNAME="${BSP_CLI_PACKAGE_NAME}_${REVISION}_${ARCH}" - export BSP_DESKTOP_PACKAGE_NAME="armbian-bsp-desktop-${BOARD}${EXTRA_BSP_NAME}" -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 5430e9e97..112628729 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -75,7 +75,7 @@ main_default_build_single() { - fi - fi - if [[ "${exit_after_kernel_build}" == "yes" ]]; then -- display "Only building kernel and exiting" "NOW" "debug" -+ display_alert "Only building kernel and exiting" "NOW" "debug" - exit 0 - fi - fi - -From e736b5233c440555fa8a1a654f1c3ac9ae664580 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 21 Feb 2022 16:01:19 +0100 -Subject: [PATCH] armbian-next: JUST_KERNEL=yes (opposed to KERNEL_ONLY=yes) is - really just the kernel build - ---- - lib/functions/main/default-build.sh | 56 ++++++++++++++++++++++++++----------- - 1 file changed, 39 insertions(+), 17 deletions(-) - -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 94c202aff..5430e9e97 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -23,38 +23,60 @@ main_default_build_single() { - cleaning "sources" - fi - -+ # Too many things being done. Allow doing only one thing. For core development, mostly. -+ # Also because "KERNEL_ONLY=yes" should really be spelled "PACKAGES_ONLY=yes" -+ local do_build_uboot="yes" do_build_kernel="yes" exit_after_kernel_build="no" do_host_tools="yes" -+ if [[ "${JUST_KERNEL}" == "yes" ]]; then -+ display_alert "JUST_KERNEL set to yes" "Building only kernel and exiting after that" "debug" -+ do_build_uboot="no" -+ exit_after_kernel_build="yes" -+ do_host_tools="no" -+ fi -+ - # ignore updates help on building all images - for internal purposes - if [[ $IGNORE_UPDATES != yes ]]; then -- LOG_SECTION="fetch_and_build_host_tools" do_with_logging fetch_and_build_host_tools -+ -+ # Fetch and build the host tools (via extensions) -+ if [[ "${do_host_tools}" == "yes" ]]; then -+ LOG_SECTION="fetch_and_build_host_tools" do_with_logging fetch_and_build_host_tools -+ fi - - for option in $(tr ',' ' ' <<< "${CLEAN_LEVEL}"); do - if [[ $option != sources ]]; then - LOG_SECTION="cleaning" do_with_logging cleaning "$option" -- fasthash_debug "main_cleaning_armbian" -+ #fasthash_debug "main_cleaning_armbian" - fi - done - fi - -- # Don't build u-boot at all if the BOOTCONFIG is 'none'. -- if [[ "${BOOTCONFIG}" != "none" ]]; then -- # @TODO: refactor this. we use it very often -- # Compile u-boot if packed .deb does not exist or use the one from repository -- if [[ ! -f "${DEB_STORAGE}"/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb ]]; then -- if [[ -n "${ATFSOURCE}" && "${ATFSOURCE}" != "none" && "${REPOSITORY_INSTALL}" != *u-boot* ]]; then -- LOG_SECTION="compile_atf" do_with_logging compile_atf -- fi -- # @TODO: refactor this construct. we use it too many times. -- if [[ "${REPOSITORY_INSTALL}" != *u-boot* ]]; then -- LOG_SECTION="compile_uboot" do_with_logging compile_uboot -+ if [[ "${do_build_uboot}" == "yes" ]]; then -+ # Don't build u-boot at all if the BOOTCONFIG is 'none'. -+ if [[ "${BOOTCONFIG}" != "none" ]]; then -+ # @TODO: refactor this. we use it very often -+ # Compile u-boot if packed .deb does not exist or use the one from repository -+ if [[ ! -f "${DEB_STORAGE}"/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb ]]; then -+ if [[ -n "${ATFSOURCE}" && "${ATFSOURCE}" != "none" && "${REPOSITORY_INSTALL}" != *u-boot* ]]; then -+ LOG_SECTION="compile_atf" do_with_logging compile_atf -+ fi -+ # @TODO: refactor this construct. we use it too many times. -+ if [[ "${REPOSITORY_INSTALL}" != *u-boot* ]]; then -+ LOG_SECTION="compile_uboot" do_with_logging compile_uboot -+ fi - fi - fi - fi - - # Compile kernel if packed .deb does not exist or use the one from repository -- if [[ ! -f ${DEB_STORAGE}/${CHOSEN_KERNEL}_${REVISION}_${ARCH}.deb ]]; then -- export KDEB_CHANGELOG_DIST=$RELEASE -- if [[ -n $KERNELSOURCE ]] && [[ "${REPOSITORY_INSTALL}" != *kernel* ]]; then -- LOG_SECTION="compile_kernel" do_with_logging compile_kernel -+ if [[ "${do_build_kernel}" == "yes" ]]; then -+ if [[ ! -f ${DEB_STORAGE}/${CHOSEN_KERNEL}_${REVISION}_${ARCH}.deb ]]; then -+ export KDEB_CHANGELOG_DIST=$RELEASE -+ if [[ -n $KERNELSOURCE ]] && [[ "${REPOSITORY_INSTALL}" != *kernel* ]]; then -+ LOG_SECTION="compile_kernel" do_with_logging compile_kernel -+ fi -+ fi -+ if [[ "${exit_after_kernel_build}" == "yes" ]]; then -+ display "Only building kernel and exiting" "NOW" "debug" -+ exit 0 - fi - fi - - -From df90ffa11bff94bcb3b90b3460bacd7ed102a567 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 21 Feb 2022 14:40:47 +0100 -Subject: [PATCH] armbian-next: fetch_from_repos now done when actually - compiling atf/uboot/kernel, not before - -- lib regen after removing empty files (sources.sh and errors.sh are now gone) ---- - lib/functions/compilation/atf.sh | 5 +++++ - lib/functions/compilation/kernel.sh | 6 ++++++ - lib/functions/compilation/sources.sh | 17 ----------------- - lib/functions/compilation/uboot.sh | 5 +++++ - lib/functions/logging/errors.sh | 10 ---------- - lib/functions/main/default-build.sh | 2 +- - lib/library-functions.sh | 18 ------------------ - 7 files changed, 17 insertions(+), 46 deletions(-) - -diff --git a/lib/functions/compilation/atf.sh b/lib/functions/compilation/atf.sh -index f5e9aa691..7f20028da 100644 ---- a/lib/functions/compilation/atf.sh -+++ b/lib/functions/compilation/atf.sh -@@ -1,4 +1,9 @@ - compile_atf() { -+ if [[ -n "${ATFSOURCE}" && "${ATFSOURCE}" != "none" ]]; then -+ display_alert "Downloading sources" "atf" "git" -+ fetch_from_repo "$ATFSOURCE" "$ATFDIR" "$ATFBRANCH" "yes" -+ fi -+ - if [[ $CLEAN_LEVEL == *make* ]]; then - display_alert "Cleaning" "$ATFSOURCEDIR" "info" - ( -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 3b2219579..f429110d2 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -43,6 +43,12 @@ function run_kernel_make_long_running() { - } - - function compile_kernel() { -+ if [[ -n $KERNELSOURCE ]]; then -+ display_alert "Downloading sources" "kernel" "git" -+ GIT_COLD_BUNDLE_URL="${MAINLINE_KERNEL_COLD_BUNDLE_URL}" \ -+ fetch_from_repo "$KERNELSOURCE" "$KERNELDIR" "$KERNELBRANCH" "yes" -+ fi -+ - if [[ $CLEAN_LEVEL == *make* ]]; then - display_alert "Cleaning" "$LINUXSOURCEDIR" "info" - ( -diff --git a/lib/functions/compilation/sources.sh b/lib/functions/compilation/sources.sh -deleted file mode 100644 -index 377d4510b..000000000 ---- a/lib/functions/compilation/sources.sh -+++ /dev/null -@@ -1,17 +0,0 @@ --function fetch_sources_kernel_uboot_atf() { -- if [[ -n $KERNELSOURCE ]]; then -- display_alert "Downloading sources" "kernel" "git" -- GIT_COLD_BUNDLE_URL="${MAINLINE_KERNEL_COLD_BUNDLE_URL}" \ -- fetch_from_repo "$KERNELSOURCE" "$KERNELDIR" "$KERNELBRANCH" "yes" -- fi -- -- if [[ -n $BOOTSOURCE ]] && [[ "${BOOTSOURCE}" != "none" ]]; then -- display_alert "Downloading sources" "u-boot" "git" -- fetch_from_repo "$BOOTSOURCE" "$BOOTDIR" "$BOOTBRANCH" "yes" # fetch_from_repo -- fi -- -- if [[ -n "${ATFSOURCE}" && "${ATFSOURCE}" != "none" ]]; then -- display_alert "Downloading sources" "atf" "git" -- fetch_from_repo "$ATFSOURCE" "$ATFDIR" "$ATFBRANCH" "yes" -- fi --} -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index 053312875..33415c2e2 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -96,6 +96,11 @@ function compile_uboot_target() { - } - - compile_uboot() { -+ if [[ -n $BOOTSOURCE ]] && [[ "${BOOTSOURCE}" != "none" ]]; then -+ display_alert "Downloading sources" "u-boot" "git" -+ fetch_from_repo "$BOOTSOURCE" "$BOOTDIR" "$BOOTBRANCH" "yes" # fetch_from_repo -+ fi -+ - # not optimal, but extra cleaning before overlayfs_wrapper should keep sources directory clean - if [[ $CLEAN_LEVEL == *make* ]]; then - display_alert "Cleaning" "$BOOTSOURCEDIR" "info" -diff --git a/lib/functions/logging/errors.sh b/lib/functions/logging/errors.sh -deleted file mode 100644 -index 29263306c..000000000 ---- a/lib/functions/logging/errors.sh -+++ /dev/null -@@ -1,10 +0,0 @@ --#!/bin/bash --# --# Copyright (c) 2015 Igor Pecovnik, igor.pecovnik@gma**.com --# --# This file is licensed under the terms of the GNU General Public --# License version 2. This program is licensed "as is" without any --# warranty of any kind, whether express or implied. -- --# This file is a part of the Armbian build script --# https://github.com/armbian/build/ -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 5b80314ef..94c202aff 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -22,9 +22,9 @@ main_default_build_single() { - if [[ $CLEAN_LEVEL == *sources* ]]; then - cleaning "sources" - fi -+ - # ignore updates help on building all images - for internal purposes - if [[ $IGNORE_UPDATES != yes ]]; then -- LOG_SECTION="fetch_sources_kernel_uboot_atf" do_with_logging fetch_sources_kernel_uboot_atf - LOG_SECTION="fetch_and_build_host_tools" do_with_logging fetch_and_build_host_tools - - for option in $(tr ',' ' ' <<< "${CLEAN_LEVEL}"); do -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 2e720a66f..cec0c0fc7 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -118,15 +118,6 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/compilation/patch/kernel-pkg.sh - source "${SRC}"/lib/functions/compilation/patch/kernel-pkg.sh - --# no errors tolerated. invoked before each sourced file to make sure. --#set -o pipefail # trace ERR through pipes - will be enabled "soon" --#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled --set -o errtrace # trace ERR through - enabled --set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/compilation/sources.sh --# shellcheck source=lib/functions/compilation/sources.sh --source "${SRC}"/lib/functions/compilation/sources.sh -- - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -@@ -316,15 +307,6 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/logging/capture.sh - source "${SRC}"/lib/functions/logging/capture.sh - --# no errors tolerated. invoked before each sourced file to make sure. --#set -o pipefail # trace ERR through pipes - will be enabled "soon" --#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled --set -o errtrace # trace ERR through - enabled --set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/logging/errors.sh --# shellcheck source=lib/functions/logging/errors.sh --source "${SRC}"/lib/functions/logging/errors.sh -- - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - -From a44e91752d1005daa5bba5eb0b0114654199e3e5 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 21 Feb 2022 01:50:16 +0100 -Subject: [PATCH] armbian-next: linux: back to Torvalds bundle, no tags; - reminder about export - ---- - lib/functions/configuration/main-config.sh | 2 +- - lib/functions/general/git.sh | 25 ++++++++++++++----------- - 2 files changed, 15 insertions(+), 12 deletions(-) - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 722371f3e..883550d79 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -115,7 +115,7 @@ function do_main_configuration() { - # URL for the git bundle used to "bootstrap" local git copies without too much server load. This applies independently of git mirror below. - export MAINLINE_KERNEL_TORVALDS_BUNDLE_URL="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/clone.bundle" # this is plain torvalds, single branch - export MAINLINE_KERNEL_STABLE_BUNDLE_URL="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/clone.bundle" # this is all stable branches. with tags! -- export MAINLINE_KERNEL_COLD_BUNDLE_URL="${MAINLINE_KERNEL_COLD_BUNDLE_URL:-$MAINLINE_KERNEL_STABLE_BUNDLE_URL}" # default to stable. it's bigger but more useful for developers. -+ export MAINLINE_KERNEL_COLD_BUNDLE_URL="${MAINLINE_KERNEL_COLD_BUNDLE_URL:-${MAINLINE_KERNEL_TORVALDS_BUNDLE_URL}}" # default to Torvalds; everything else is small enough with this - - case $MAINLINE_MIRROR in - google) -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 51f658d31..81b64586b 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -166,7 +166,7 @@ fetch_from_repo() { - fi - - display_alert "Fetching from git bundle, wait" "${git_cold_bundle_id}" "info" -- improved_git_fetch --tags "${git_cold_bundle_remote_id}" # Fetch it! and all its tags, too. -+ improved_git_fetch --no-tags "${git_cold_bundle_remote_id}" # Fetch it! (all refs!) - has_fetched_from_bundle=1 # marker for pruning logic below - echo "${remote_hash}" > "${git_cold_bundle_fetched_marker_file}" # marker for future invocation - display_alert "Bundle fetch completed, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -@@ -182,9 +182,9 @@ fetch_from_repo() { - # remote was updated, fetch and check out updates, but not tags; tags pull their respective commits too, making it a huge fetch. - display_alert "Fetching updates from origin" "$dir $ref_name" - case $ref_type in -- branch | commit) improved_git_fetch --tags origin "${ref_name}" ;; -- tag) improved_git_fetch --tags origin tags/"${ref_name}" ;; -- head) improved_git_fetch --tags origin HEAD ;; -+ branch | commit) improved_git_fetch --no-tags origin "${ref_name}" ;; -+ tag) improved_git_fetch --no-tags origin tags/"${ref_name}" ;; -+ head) improved_git_fetch --no-tags origin HEAD ;; - esac - display_alert "Origin fetch completed, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size again - -@@ -193,13 +193,16 @@ fetch_from_repo() { - improved_git clean -q -d -f - display_alert "After checkout, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull - -- #if [[ $has_fetched_from_bundle -gt 0 ]]; then -- # display_alert "Pre-pruning, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -- # echo -n "${remote_hash}" > .git/shallow # commit to keep for shallowing, can be something else. for now is full prune. -- # improved_git remote remove "${git_cold_bundle_remote_id}" -- # improved_git reflog expire --expire=0 --all -- # improved_git gc --prune=all -- #fi -+ # @TODO: find fork point, shallow from there, repack, and export bundle for that version; -+ # would need a mainline reference to to this (eg: find 5.10.0, export 5.10 bundle from there) -+ if [[ $has_fetched_from_bundle -gt 0 ]]; then -+ display_alert "Pre-pruning, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -+ display_alert "@TODO" "export bundle after full fetch" "warn" -+ # echo -n "${remote_hash}" > .git/shallow # commit to keep for shallowing, can be something else. for now is full prune. -+ # improved_git remote remove "${git_cold_bundle_remote_id}" -+ # improved_git reflog expire --expire=0 --all -+ # improved_git gc --prune=all -+ fi - - elif [[ -n $(git status -uno --porcelain --ignore-submodules=all) ]]; then # if not changed, but dirty... - display_alert "Cleaning git dir" "$(git status -s | wc -l) files" # working directory is not clean, show it - -From 9acef6be57519029f5e4eeccabac183e27e3f845 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 19 Feb 2022 02:29:27 +0100 -Subject: [PATCH] armbian-next: full cached kernel build; refactor all make's - in a single place, even for packaging - -- 2nd+ runs build in less than a minute -- kernel: compile and package in a single step, more efficient? -- KERNEL_BUILD_DTBS yes/no to build or not dtbs, replaces KERNEL_EXTRA_TARGETS -- dtbs_install, modules_install and headers_install now called by Armbian, not packaging -- kernel with split, but identical, build and install makes for modules/headers/dtbs -- make mkdebian and builddeb idempotent as possible -- keep a lot more cache, specially 'debian' folder -- filtering logging of install stuff -- might be a few leftovers, revisit gains with packaging later - - keeping the arm64 makefile Image.gz vs Image hack - - fix order of packaging patch byteshift, but still there - - cleaning of scripts tools on cross compile removed (!) ---- - config/sources/amd64.conf | 4 +- - lib/functions/compilation/kernel.sh | 138 +++++++------ - lib/functions/compilation/patch/apply.sh | 10 + - lib/functions/compilation/patch/fasthash.sh | 40 +++- - lib/functions/compilation/patch/kernel-pkg.sh | 16 +- - lib/functions/compilation/sources.sh | 4 +- - lib/functions/main/default-build.sh | 4 +- - packages/armbian/builddeb | 218 ++++++++------------- - packages/armbian/mkdebian | 268 +++++++++++++------------- - 9 files changed, 352 insertions(+), 350 deletions(-) - -diff --git a/config/sources/amd64.conf b/config/sources/amd64.conf -index 510d1b6b6..cc1b4b256 100644 ---- a/config/sources/amd64.conf -+++ b/config/sources/amd64.conf -@@ -3,8 +3,8 @@ export ARCHITECTURE=x86_64 # "kernel" arch - export QEMU_BINARY="qemu-x86_64-static" # Hopefully you have this installed. - export KERNEL_COMPILER=' ' # hack: use single space for host gcc. won't work on arm64 hosts - export KERNEL_USE_GCC=' ' # more hacks. --export KERNEL_IMAGE_TYPE="bzImage" # Ubuntu Standard --export KERNEL_EXTRA_TARGETS=" " # default is "dtbs" but x86_64 has no DTB. use a space for no target -+export KERNEL_IMAGE_TYPE="bzImage" # Passed to kernel's `make` -+export KERNEL_BUILD_DTBS="no" # amd64 has no DTBs. that I know of. - #export INITRD_ARCH=amd64 # Used by u-boot for mkimage in initramfs. No u-boot for x86 yet. - - export UBOOT_USE_GCC="none" # required by configuration.sh -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index c6591d5cc..3b2219579 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -5,25 +5,30 @@ function run_kernel_make() { - common_make_envs=( - "CCACHE_BASEDIR=\"$(pwd)\"" # Base directory for ccache, for cache reuse - "PATH=\"${toolchain}:${PATH}\"" # Insert the toolchain first into the PATH. -+ "DPKG_COLORS=always" # Use colors for dpkg - ) - - common_make_params_quoted=( -- "$CTHREADS" # Parallel compile, "-j X" for X cpus -- "LOCALVERSION=-${LINUXFAMILY}" # Kernel param -- "KDEB_PKGVERSION=${REVISION}" # deb package version -- "KDEB_COMPRESS=${DEB_COMPRESS}" # dpkg compression for deb -- "BRANCH=${BRANCH}" # @TODO: rpardini: Wonder what BRANCH is used for during packaging? -- "ARCH=${ARCHITECTURE}" # Why? -- "KBUILD_DEBARCH=${ARCH}" # Where used? -- "DEBFULLNAME=${MAINTAINER}" # For changelog generation -- "DEBEMAIL=${MAINTAINERMAIL}" # idem -- "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # Prefix for tool invocations. -+ "$CTHREADS" # Parallel compile, "-j X" for X cpus -+ "LOCALVERSION=-${LINUXFAMILY}" # Kernel param -+ "KDEB_PKGVERSION=${REVISION}" # deb package version -+ "KDEB_COMPRESS=${DEB_COMPRESS}" # dpkg compression for deb -+ "BRANCH=${BRANCH}" # @TODO: rpardini: Wonder what BRANCH is used for during packaging? -+ "INSTALL_HDR_PATH=debian/hdrtmp/usr" # For packaging headers_install used for headers -+ "INSTALL_MOD_PATH=debian/tmp" # For packaging modules for image package -+ "INSTALL_DTBS_PATH=debian/dtbtmp/boot/dtbs_install" # For packaging DTBs for dtb package -+ "ARCH=${ARCHITECTURE}" # Why? -+ "KBUILD_DEBARCH=${ARCH}" # Where used? -+ "DEBFULLNAME=${MAINTAINER}" # For changelog generation -+ "DEBEMAIL=${MAINTAINERMAIL}" # idem -+ "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # Prefix for tool invocations. - ) - - common_make_params_quoted+=("KCFLAGS=-fdiagnostics-color=always") # Force GCC colored messages. - - # last statement, so it passes the result to calling function. -- full_command=("${KERNEL_MAKE_RUNNER:-run_host_command_logged}" "${common_make_envs[@]}" make "$@" "${common_make_params_quoted[@]@Q}") -+ full_command=("${KERNEL_MAKE_RUNNER:-run_host_command_logged}" "${common_make_envs[@]}" -+ make "$@" "${common_make_params_quoted[@]@Q}" "${make_filter}") - "${full_command[@]}" # and exit with it's code, since it's the last statement - } - -@@ -32,7 +37,9 @@ function run_kernel_make_dialog() { - } - - function run_kernel_make_long_running() { -+ local seconds_start=${SECONDS} # Bash has a builtin SECONDS that is seconds since start of script - KERNEL_MAKE_RUNNER="run_host_command_logged_long_running" run_kernel_make "$@" -+ display_alert "Kernel Make '$*' took" "$((SECONDS - seconds_start)) seconds" "debug" - } - - function compile_kernel() { -@@ -43,6 +50,7 @@ function compile_kernel() { - make ARCH="${ARCHITECTURE}" clean > /dev/null 2>&1 - ) - fi -+ fasthash_debug "post git clean" - - local kerneldir="$SRC/cache/sources/$LINUXSOURCEDIR" - if [[ $USE_OVERLAYFS == yes ]]; then -@@ -51,6 +59,7 @@ function compile_kernel() { - fi - cd "${kerneldir}" || exit - -+ # @TODO: why would we delete localversion? - rm -f localversion - - # read kernel version -@@ -59,6 +68,12 @@ function compile_kernel() { - pre_patch_version="${version}" - display_alert "Pre-patch kernel version" "${pre_patch_version}" "debug" - -+ # different packaging for 4.3+ -+ local kernel_packaging_target="deb-pkg" -+ if linux-version compare "${version}" ge 4.3; then -+ kernel_packaging_target="bindeb-pkg" -+ fi -+ - # read kernel git hash - hash=$(git --git-dir="$kerneldir"/.git rev-parse HEAD) - -@@ -68,7 +83,7 @@ function compile_kernel() { - ## - (optionally) execute modification against living tree (eg: apply a patch, copy a file, etc). only if `DO_MODIFY=yes` - ## - (always) call mark_change_commit with the description of what was done and fasthash. - initialize_fasthash "kernel" "${hash}" "${pre_patch_version}" "${kerneldir}" -- declare -a fast_hash_list=() -+ fasthash_debug "init" - - # Apply a series of patches if a series file exists - local series_conf="${SRC}"/patch/kernel/${KERNELPATCHDIR}/series.conf -@@ -94,6 +109,7 @@ function compile_kernel() { - fasthash_branch "patches-${KERNELPATCHDIR}-$BRANCH" - advanced_patch "kernel" "$KERNELPATCHDIR" "$BOARD" "" "$BRANCH" "$LINUXFAMILY-$BRANCH" # calls process_patch_file, "target" is empty there - -+ fasthash_debug "finish" - finish_fasthash "kernel" # this reports the final hash and creates git branch to build ID. All modifications commited. - - # create patch for manual source changes in debug mode -@@ -137,6 +153,10 @@ function compile_kernel() { - fi - fi - -+ # Store the .config modification date at this time, for restoring later. Otherwise rebuilds. -+ local kernel_config_mtime -+ kernel_config_mtime=$(get_file_modification_time ".config") -+ - call_extension_method "custom_kernel_config" <<- 'CUSTOM_KERNEL_CONFIG' - *Kernel .config is in place, still clean from git version* - Called after ${LINUXCONFIG}.config is put in place (.config). -@@ -156,12 +176,7 @@ function compile_kernel() { - display_alert "Kernel configuration" "${LINUXCONFIG}" "info" - - if [[ $KERNEL_CONFIGURE != yes ]]; then -- if [[ $BRANCH == default ]]; then -- run_kernel_make silentoldconfig # This will exit with generic error if it fails. -- else -- # TODO: check if required -- run_kernel_make olddefconfig -- fi -+ run_kernel_make olddefconfig # @TODO: what is this? does it fuck up dates? - else - display_alert "Starting kernel oldconfig+menuconfig" "${LINUXCONFIG}" "debug" - -@@ -170,6 +185,9 @@ function compile_kernel() { - # No logging for this. this is UI piece - run_kernel_make_dialog "${KERNEL_MENUCONFIG:-menuconfig}" - -+ # Capture new date. Otherwise changes not detected by make. -+ kernel_config_mtime=$(get_file_modification_time ".config") -+ - # store kernel config in easily reachable place - display_alert "Exporting new kernel config" "$DEST/config/$LINUXCONFIG.config" "info" - cp .config "${DEST}/config/${LINUXCONFIG}.config" -@@ -185,6 +203,9 @@ function compile_kernel() { - fi - fi - -+ # Restore the date of .config. Above delta is a pure function, theoretically. -+ set_files_modification_time "${kernel_config_mtime}" ".config" -+ - # create linux-source package - with already patched sources - # We will build this package first and clear the memory. - if [[ $BUILD_KSRC != no ]]; then -@@ -192,65 +213,62 @@ function compile_kernel() { - create_linux-source_package - fi - -- display_alert "Compiling Kernel" "${LINUXCONFIG} ${KERNEL_IMAGE_TYPE}" "info" -- run_kernel_make_long_running "${KERNEL_IMAGE_TYPE}" modules "${KERNEL_EXTRA_TARGETS:-dtbs}" -- #run_kernel_make "${KERNEL_IMAGE_TYPE}" modules "${KERNEL_EXTRA_TARGETS:-dtbs}" -+ local -a build_targets=("headers") -+ [[ "${KERNEL_BUILD_DTBS:-yes}" == "yes" ]] && build_targets+=("dtbs") -+ build_targets+=("${KERNEL_IMAGE_TYPE}" modules) - -- if [[ ! -f arch/$ARCHITECTURE/boot/$KERNEL_IMAGE_TYPE ]]; then -- exit_with_error "Kernel was not built" "arch/$ARCHITECTURE/boot/$KERNEL_IMAGE_TYPE" -+ display_alert "Compiling Kernel" "${LINUXCONFIG} ${KERNEL_IMAGE_TYPE}" "info" -+ fasthash_debug "pre-compile" -+ run_kernel_make_long_running "${build_targets[@]}" -+ fasthash_debug "post-compile" -+ -+ if [[ "${DOUBLE_COMPILE_KERNEL}" == "yes" ]]; then -+ display_alert "DOUBLE Compiling Kernel" "${LINUXCONFIG} ${KERNEL_IMAGE_TYPE}" "info" -+ fasthash_debug "pre-double-compile" -+ run_kernel_make_long_running "${build_targets[@]}" -+ fasthash_debug "post-double-compile" - fi - -- # different packaging for 4.3+ -- if linux-version compare "${version}" ge 4.3; then -- local kernel_packaging_target="bindeb-pkg" -- else -- local kernel_packaging_target="deb-pkg" -+ # Check for built kernel image file file; can override default with KERNEL_IMAGE_TYPE_PATH -+ local check_built_kernel_file="${kerneldir}/${KERNEL_IMAGE_TYPE_PATH:-"arch/${ARCHITECTURE}/boot/${KERNEL_IMAGE_TYPE}"}" -+ if [[ ! -f "${check_built_kernel_file}" ]]; then -+ exit_with_error "Kernel was not built" "${check_built_kernel_file}" - fi - -- display_alert "Creating kernel packages" "${LINUXCONFIG} $kernel_packaging_target" "info" -+ local -a prepackage_targets=(modules_install headers_install) -+ [[ "${KERNEL_BUILD_DTBS:-yes}" == "yes" ]] && prepackage_targets+=("dtbs_install") -+ -+ display_alert "Packaging Kernel" "${LINUXCONFIG} $kernel_packaging_target" "info" -+ -+ # Prepare for packaging, using the exact same options as original compile. -+ display_alert "Installing kernel headers and modules for packaging" "${LINUXCONFIG} ${prepackage_targets[*]}" "info" -+ fasthash_debug "pre-prepackage" -+ make_filter="| grep --line-buffered -v -e 'INSTALL' -e 'SIGN'" run_kernel_make_long_running "${prepackage_targets[@]}" -+ fasthash_debug "post-prepackage" - - # produce deb packages: image, headers, firmware, dtb -+ # This mostly only does -+ fasthash_debug "pre-packaging" - run_kernel_make_long_running $kernel_packaging_target -+ fasthash_debug "post-packaging" -+ -+ if [[ "${DOUBLE_COMPILE_KERNEL}" == "yes" ]]; then -+ display_alert "DOUBLE Packaging Kernel, Headers and DTBs" "${LINUXCONFIG} $kernel_packaging_target" "info" -+ fasthash_debug "pre-double-packaging" -+ run_kernel_make_long_running $kernel_packaging_target -+ fasthash_debug "post-double-packaging" -+ fi - - display_alert "Package building done" "${LINUXCONFIG} $kernel_packaging_target" "info" - -+ display_alert "Done with" "kernel compile" "debug" -+ - cd .. || exit - # remove firmware image packages here - easier than patching ~40 packaging scripts at once - rm -f linux-firmware-image-*.deb - - rsync --remove-source-files -rq ./*.deb "${DEB_STORAGE}/" || exit_with_error "Failed moving kernel DEBs" - -- if [[ "a" == "b" ]]; then # @TODO DISABLED! TOO CRAZY -- display_alert "Update Kernel hashes" "${LINUXCONFIG} $kernel_packaging_target" -- -- # store git hash to the file and create a change log -- HASHTARGET="${SRC}/cache/hash$([[ ${BETA} == yes ]] && echo "-beta" || true)/linux-image-${BRANCH}-${LINUXFAMILY}" -- OLDHASHTARGET=$(head -1 "${HASHTARGET}.githash" 2> /dev/null || true) -- -- git -C ${kerneldir} cat-file -t ${OLDHASHTARGET} > /dev/null 2>&1 && OLDHASHTARGET=$(git -C ${kerneldir} rev-list --max-parents=0 HEAD) -- -- [[ -z ${KERNELPATCHDIR} ]] && KERNELPATCHDIR=$LINUXFAMILY-$BRANCH -- [[ -z ${LINUXCONFIG} ]] && LINUXCONFIG=linux-$LINUXFAMILY-$BRANCH -- -- # calculate URL -- if [[ "$KERNELSOURCE" == *"github.com"* ]]; then -- URL="${KERNELSOURCE/git:/https:}/commit/${HASH}" -- elif [[ "$KERNELSOURCE" == *"kernel.org"* ]]; then -- URL="${KERNELSOURCE/git:/https:}/commit/?h=$(echo $KERNELBRANCH | cut -d":" -f2)&id=${HASH}" -- else -- URL="${KERNELSOURCE}/+/$HASH" -- fi -- -- # create change log -- git --no-pager -C ${kerneldir} log --abbrev-commit --oneline --no-patch --no-merges --date-order --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%C(black bold)%ad%Creset%C(auto) | %s | <%an> | %H' ${OLDHASHTARGET}..${hash} > "${HASHTARGET}.gitlog" -- -- echo "${hash}" > "${HASHTARGET}.githash" -- hash_watch_1=$(LC_COLLATE=C find -L "${SRC}/patch/kernel/${KERNELPATCHDIR}"/ -name '*.patch' -mindepth 1 -maxdepth 1 -printf '%s %P\n' 2> /dev/null | LC_COLLATE=C sort -n) -- hash_watch_2=$(cat "${SRC}/config/kernel/${LINUXCONFIG}.config") -- echo "${hash_watch_1}${hash_watch_2}" | git hash-object --stdin >> "${HASHTARGET}.githash" -- -- display_alert "Finished updating kernel hashes" "${LINUXCONFIG} $kernel_packaging_target" "info" -- fi - return 0 - } - -diff --git a/lib/functions/compilation/patch/apply.sh b/lib/functions/compilation/patch/apply.sh -index 3387c061a..32351d1b8 100644 ---- a/lib/functions/compilation/patch/apply.sh -+++ b/lib/functions/compilation/patch/apply.sh -@@ -83,13 +83,23 @@ advanced_patch() { - process_patch_file() { - local patch=$1 - local status=$2 -+ local patch_date -+ -+ # get the modification date of the patch. make it not less than MIN_PATCH_AGE, if set. -+ # [[CC]YY]MMDDhhmm[.ss] time format -+ patch_date=$(get_file_modification_time "${patch}") - - # detect and remove files which patch will create - lsdiff -s --strip=1 "${patch}" | grep '^+' | awk '{print $2}' | xargs -I % sh -c 'rm -f %' - -+ # store an array of the files that patch will modify, we'll set their modification times after the fact -+ declare -a patched_files -+ mapfile -t patched_files < <(lsdiff -s --strip=1 "${patch}" | awk '{print $2}') -+ - # @TODO: try patching with `git am` first, so git contains the patch commit info/msg. -- For future git-based hashing. - # shellcheck disable=SC2015 # noted, thanks. I need to handle exit code here. - patch --batch -p1 -N < "${patch}" && { -+ set_files_modification_time "${patch_date}" "${patched_files[@]}" - display_alert "* $status $(basename "${patch}")" "" "info" - } || { - display_alert "* $status $(basename "${patch}")" "failed" "wrn" -diff --git a/lib/functions/compilation/patch/fasthash.sh b/lib/functions/compilation/patch/fasthash.sh -index 306966d38..a01fe7664 100644 ---- a/lib/functions/compilation/patch/fasthash.sh -+++ b/lib/functions/compilation/patch/fasthash.sh -@@ -1,5 +1,6 @@ - function report_fashtash_should_execute() { -- display_alert "report_fashtash_should_execute" "$*" "debug" -+ report_fasthash "$@" -+ # @TODO: if fasthash only, return 1 - return 0 - } - -@@ -9,13 +10,18 @@ function mark_fasthash_done() { - } - - function report_fasthash() { -- display_alert "report_fasthash" "$*" "debug" -+ local type="${1}" -+ local obj="${2}" -+ local desc="${3}" -+ display_alert "report_fasthash" "${type}: ${desc}" "debug" - return 0 - } - - function initialize_fasthash() { - display_alert "initialize_fasthash" "$*" "debug" - return 0 -+ declare -a fast_hash_list=() -+ - } - - function fasthash_branch() { -@@ -27,3 +33,33 @@ function finish_fasthash() { - display_alert "finish_fasthash" "$*" "debug" - return 0 - } -+ -+function fasthash_debug() { -+ display_alert "fasthash_debug" "$*" "debug" -+ find . -type f -printf '%T@ %p\n' | -+ grep -v -e "\.ko" -e "\.o" -e "\.cmd" -e "\.mod" -e "\.a" -e "\.tmp" -e "\.dtb" -e ".scr" -e "\.\/debian" | -+ sort -n | tail -n 10 1>&2 -+} -+ -+function get_file_modification_time() { -+ local file_date -+ if [[ ! -f "${1}" ]]; then -+ exit_with_error "Can't get modification time of nonexisting file" "${1}" -+ fi -+ -+ # [[CC]YY]MMDDhhmm[ss] - it is a valid integer -+ file_date=$(date +%Y%m%d%H%M.%S -r "${1}") -+ display_alert "Got date ${file_date} for file" "${1}" "debug" -+ -+ # @TODO: if MIN_PATCH_AGE -+ echo -n "${file_date}" -+ -+ return 0 -+} -+ -+function set_files_modification_time() { -+ local mtime="${1}" -+ shift -+ display_alert "Setting date ${mtime} " "${*}" "debug" -+ touch -m -t "${mtime}" "${@}" -+} -diff --git a/lib/functions/compilation/patch/kernel-pkg.sh b/lib/functions/compilation/patch/kernel-pkg.sh -index 11d7d4244..e1653a66e 100644 ---- a/lib/functions/compilation/patch/kernel-pkg.sh -+++ b/lib/functions/compilation/patch/kernel-pkg.sh -@@ -1,5 +1,4 @@ - function apply_kernel_patches_for_packaging() { -- set -x - local kerneldir="${1}" - local version="${2}" - # Packaging patch for modern kernels should be one for all. -@@ -13,15 +12,16 @@ function apply_kernel_patches_for_packaging() { - local mkdebian="packages/armbian/mkdebian" - local kernel_package_dir="${kerneldir}/scripts/package" - if report_fashtash_should_execute text "$(cat "${SRC}/${builddeb}" "${SRC}/${mkdebian}")" "armbian builddeb and mkdebian replace"; then -- rm -rf "${kerneldir}/debian"/* -- -- # @TODO: is this idempotent? -- # shellcheck disable=SC2016 -- sed -i -e 's/^KBUILD_IMAGE := \$(boot)\/Image\.gz$/KBUILD_IMAGE := \$(boot)\/Image/' "${kerneldir}/arch/arm64/Makefile" -+ # Read mtime, then sed, then restore it -+ local arm64_makefile="${kerneldir}/arch/arm64/Makefile" arm64_makefile_mtime -+ arm64_makefile_mtime="$(get_file_modification_time "${arm64_makefile}")" -+ # shellcheck disable=SC2016 # this should be a .patch? -+ sed -i -e 's/^KBUILD_IMAGE := \$(boot)\/Image\.gz$/KBUILD_IMAGE := \$(boot)\/Image/' "${arm64_makefile}" -+ set_files_modification_time "${arm64_makefile_mtime}" "${arm64_makefile}" - - # cp with -p to preserve the original dates -- cp -p "${SRC}/${builddeb}" "${kernel_package_dir}/builddeb" -- cp -p "${SRC}/${mkdebian}" "${kernel_package_dir}/mkdebian" -+ cp -pv "${SRC}/${builddeb}" "${kernel_package_dir}/builddeb" -+ cp -pv "${SRC}/${mkdebian}" "${kernel_package_dir}/mkdebian" - - chmod 755 "${kernel_package_dir}/builddeb" "${kernel_package_dir}/mkdebian" - mark_fasthash_done # will do git commit, associate fasthash to real hash. -diff --git a/lib/functions/compilation/sources.sh b/lib/functions/compilation/sources.sh -index b4dd11c17..377d4510b 100644 ---- a/lib/functions/compilation/sources.sh -+++ b/lib/functions/compilation/sources.sh -@@ -5,12 +5,12 @@ function fetch_sources_kernel_uboot_atf() { - fetch_from_repo "$KERNELSOURCE" "$KERNELDIR" "$KERNELBRANCH" "yes" - fi - -- if [[ -n $BOOTSOURCE ]]; then -+ if [[ -n $BOOTSOURCE ]] && [[ "${BOOTSOURCE}" != "none" ]]; then - display_alert "Downloading sources" "u-boot" "git" - fetch_from_repo "$BOOTSOURCE" "$BOOTDIR" "$BOOTBRANCH" "yes" # fetch_from_repo - fi - -- if [[ -n $ATFSOURCE ]]; then -+ if [[ -n "${ATFSOURCE}" && "${ATFSOURCE}" != "none" ]]; then - display_alert "Downloading sources" "atf" "git" - fetch_from_repo "$ATFSOURCE" "$ATFDIR" "$ATFBRANCH" "yes" - fi -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 7fc46c3d6..5b80314ef 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -13,7 +13,6 @@ main_default_build_single() { - - start=$(date +%s) - # Check and install dependencies, directory structure and settings -- # The OFFLINE_WORK variable inside the function - LOG_SECTION="prepare_host" do_with_logging prepare_host - - if [[ "${JUST_INIT}" == "yes" ]]; then -@@ -31,6 +30,7 @@ main_default_build_single() { - for option in $(tr ',' ' ' <<< "${CLEAN_LEVEL}"); do - if [[ $option != sources ]]; then - LOG_SECTION="cleaning" do_with_logging cleaning "$option" -+ fasthash_debug "main_cleaning_armbian" - fi - done - fi -@@ -40,7 +40,7 @@ main_default_build_single() { - # @TODO: refactor this. we use it very often - # Compile u-boot if packed .deb does not exist or use the one from repository - if [[ ! -f "${DEB_STORAGE}"/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb ]]; then -- if [[ -n "${ATFSOURCE}" && "${REPOSITORY_INSTALL}" != *u-boot* ]]; then -+ if [[ -n "${ATFSOURCE}" && "${ATFSOURCE}" != "none" && "${REPOSITORY_INSTALL}" != *u-boot* ]]; then - LOG_SECTION="compile_atf" do_with_logging compile_atf - fi - # @TODO: refactor this construct. we use it too many times. -diff --git a/packages/armbian/builddeb b/packages/armbian/builddeb -index d57ba1d76..631380a0c 100755 ---- a/packages/armbian/builddeb -+++ b/packages/armbian/builddeb -@@ -1,4 +1,4 @@ --#!/bin/sh -+#!/usr/bin/bash - # - # builddeb 1.3 - # Copyright 2003 Wichert Akkerman -@@ -45,11 +45,13 @@ create_package() { - local pname="$1" pdir="$2" - local dpkg_deb_opts - -+ echo "Armbian kernel packaging: ${pname} ${pdir}" -+ - mkdir -m 755 -p "$pdir/DEBIAN" - mkdir -p "$pdir/usr/share/doc/$pname" -- cp debian/copyright "$pdir/usr/share/doc/$pname/" -- cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian" -- gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian" -+ cp -pv debian/copyright "$pdir/usr/share/doc/$pname/" -+ cp -pv debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian" -+ gzip --force -9 "$pdir/usr/share/doc/$pname/changelog.Debian" - sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \ - | xargs -r0 md5sum > DEBIAN/md5sums" - -@@ -114,13 +116,14 @@ create_package() { - - # Create the package - dpkg-gencontrol -p$pname -P"$pdir" -+ echo "Building deb package with compression '$KDEB_COMPRESS'" 1>&2 - dpkg-deb ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. - } - - deploy_kernel_headers() { -- pdir=$1 -+ pdir=$1 # kernel_headers_dir - -- rm -rf $pdir -+ echo "Armbian deploy_kernel_headers: ${pdir}" - - destdir=$pdir/usr/src/linux-headers-$version - mkdir -p $destdir -@@ -128,15 +131,14 @@ deploy_kernel_headers() { - ( - cd $srctree - find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl -- find arch/*/include include scripts -type f -o -type l -+ find arch/*/include include scripts -type f -o -type l # @TODO: could strip off some stuff? - find security/*/include -type f - find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform - find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f -- ) > debian/hdrsrcfiles -+ ) | grep -v "^\/debian" > debian/hdrsrcfiles - - { - if is_enabled CONFIG_STACK_VALIDATION; then -- # echo tools/objtool/objtool - find tools/objtool -type f -executable - fi - -@@ -145,147 +147,77 @@ deploy_kernel_headers() { - if is_enabled CONFIG_GCC_PLUGINS; then - find scripts/gcc-plugins -name \*.so -o -name gcc-common.h - fi -- } > debian/hdrobjfiles -+ } | grep -v "^\/debian" > debian/hdrobjfiles -+ -+ echo "Headers copying over..." -+ tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir # Copy over using tar pipes, sources -+ tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir # Copy over using tar pipes, object files -+ rm -f debian/hdrsrcfiles debian/hdrobjfiles # remove file lists - -+ # After copying over, apply patch; - if is_native; then - echo "info: Build native: Skip headers-debian-byteshift.patch" >&2 - elif is_build_on_amd64; then - ( - cd $destdir -- patch -p1 < /tmp/headers-debian-byteshift.patch -+ # detect and remove files which patch will create -+ lsdiff -s --strip=1 "/tmp/headers-debian-byteshift.patch" | grep '^+' | awk '{print $2}' | xargs -I % sh -c 'rm -f %' -+ patch --batch -p1 < "/tmp/headers-debian-byteshift.patch" - ) - fi - -- tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir -- tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir -- rm -f debian/hdrsrcfiles debian/hdrobjfiles -- - # copy .config manually to be where it's expected to be -- cp $KCONFIG_CONFIG $destdir/.config -+ cp -pv $KCONFIG_CONFIG $destdir/.config - - mkdir -p $pdir/lib/modules/$version/ -+ rm -f $pdir/lib/modules/$version/build - ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build - } - - deploy_libc_headers() { - pdir=$1 -- -- rm -rf $pdir -- -- $MAKE -f $srctree/Makefile headers -- $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH=$pdir/usr -- - # move asm headers to /usr/include//asm to match the structure - # used by Debian-based distros (to support multi-arch) - host_arch=$(dpkg-architecture -a$(cat debian/arch) -qDEB_HOST_MULTIARCH) -- mkdir $pdir/usr/include/$host_arch -- mv $pdir/usr/include/asm $pdir/usr/include/$host_arch/ -+ mkdir -p $pdir/usr/include/$host_arch -+ [ -d $pdir/usr/include/asm ] && cp -rv $pdir/usr/include/asm $pdir/usr/include/$host_arch/ -+ return 0 - } - --version=$KERNELRELEASE -+# set -x -+echo "Armbian builddeb starting: ${KERNELRELEASE}..." -+ -+version=${KERNELRELEASE} - tmpdir="debian/tmp" - kernel_headers_dir="debian/hdrtmp" --libc_headers_dir="debian/headertmp" -+libc_headers_dir="debian/libc_header_tmp" - dbg_dir="debian/dbgtmp" - dtb_dir="debian/dtbtmp" --packagename=linux-image-"$BRANCH$LOCALVERSION" --kernel_headers_packagename=linux-headers-"$BRANCH$LOCALVERSION" --dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" -+packagename=linux-image-"${BRANCH}${LOCALVERSION}" -+kernel_headers_packagename=linux-headers-"${BRANCH}${LOCALVERSION}" -+dtb_packagename=linux-dtb-"${BRANCH}${LOCALVERSION}" - libc_headers_packagename=linux-libc-dev --dbg_packagename=$packagename-dbg -- --if [ "$ARCH" = "um" ]; then -- packagename=user-mode-linux-$version --fi -- --# Not all arches have the same installed path in debian --# XXX: have each arch Makefile export a variable of the canonical image install --# path instead --case $ARCH in -- ++aarch64|arm64) -- image_name=Image -- installed_image_path="boot/vmlinuz-$version" -- ;; -- arm*) -- image_name=zImage -- installed_image_path="boot/vmlinuz-$version" -- ;; -- um) -- installed_image_path="usr/bin/linux-$version" -- ;; -- parisc|mips|powerpc) -- installed_image_path="boot/vmlinux-$version" -- ;; -- *) -- image_name=vmlinuz -- installed_image_path="boot/vmlinuz-$version" -- ;; --esac -+dbg_packagename=${packagename}-dbg -+installed_image_path="boot/vmlinuz-$version" # for all arches - - BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes) - --# Setup the directory structure --rm -rf "$tmpdir" "$dbg_dir" "$dtb_dir" debian/files -+# Complement the directory structure - mkdir -m 755 -p "$tmpdir/DEBIAN" - mkdir -p "$tmpdir/lib" "$tmpdir/boot" - mkdir -m 755 -p "$dtb_dir/DEBIAN" --mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename" -+mkdir -p "$dtb_dir/usr/share/doc/$dtb_packagename" - mkdir -m 755 -p "$kernel_headers_dir/lib/modules/$version/" - mkdir -m 755 -p "$libc_headers_dir/DEBIAN" - --# Install the kernel --if [ "$ARCH" = "um" ]; then -- mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename" -- $MAKE linux -- cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map" -- cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config" -- gzip "$tmpdir/usr/share/doc/$packagename/config" --else -- cp System.map "$tmpdir/boot/System.map-$version" -- cp $KCONFIG_CONFIG "$tmpdir/boot/config-$version" --fi --cp "$($MAKE -s -f $srctree/Makefile image_name)" "$tmpdir/$installed_image_path" -- --if is_enabled CONFIG_OF_EARLY_FLATTREE; then -- # Only some architectures with OF support have this target -- if [ -d "${srctree}/arch/$SRCARCH/boot/dts" ]; then -- $MAKE -f $srctree/Makefile INSTALL_DTBS_PATH="$tmpdir/usr/lib/linux-image-$version" dtbs_install -- fi --fi -+# Install the kernel's System.map and config -+cp -pv System.map "$tmpdir/boot/System.map-$version" -+cp -pv $KCONFIG_CONFIG "$tmpdir/boot/config-$version" - --if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG; then -- #mkdir -p "$tmpdir/boot/dtb" -- INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install --fi -- --if is_enabled CONFIG_MODULES; then -- INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_install -- rm -f "$tmpdir/lib/modules/$version/build" -- rm -f "$tmpdir/lib/modules/$version/source" -- -- if [ "$ARCH" = "um" ]; then -- mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/" -- rmdir "$tmpdir/lib/modules/$version" -- fi -- -- if [ -n "$BUILD_DEBUG" ]; then -- for module in $(find $tmpdir/lib/modules/ -name *.ko -printf '%P\n'); do -- module=lib/modules/$module -- mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module) -- # only keep debug symbols in the debug file -- $OBJCOPY --only-keep-debug $tmpdir/$module $dbg_dir/usr/lib/debug/$module -- # strip original module from debug symbols -- $OBJCOPY --strip-debug $tmpdir/$module -- # then add a link to those -- $OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module -- done -- -- # resign stripped modules -- if is_enabled CONFIG_MODULE_SIG_ALL; then -- INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_sign -- fi -- fi --fi -+# Get the image from the makefile and install it as vmlinuz -+image_name_from_makefile="$($MAKE -s -f "$srctree/Makefile" image_name)" -+cp -pv "${image_name_from_makefile}" "$tmpdir/$installed_image_path" -+image_name="$(basename "${image_name_from_makefile}")" # Just the file name - - # Install the maintainer scripts - # Note: hook scripts under /etc/kernel are also executed by official Debian -@@ -297,7 +229,7 @@ for script in postinst postrm preinst prerm; do - mkdir -p "$tmpdir$debhookdir/$script.d" - cat <<- EOF > "$tmpdir/DEBIAN/$script" - #!/bin/bash -- -+ set -x - set -e - - # Pass maintainer script parameters to hook scripts -@@ -330,12 +262,12 @@ cat >> $tmpdir/DEBIAN/preinst <<- EOT - # exit if we are running chroot - if [ "\$(stat -c %d:%i /)" != "\$(stat -c %d:%i /proc/1/root/.)" ]; then exit 0; fi - -- check_boot_dev (){ -+ check_and_unmount (){ - boot_device=\$(mountpoint -d /boot) - - for file in /dev/* ; do - CURRENT_DEVICE=\$(printf "%d:%d" \$(stat --printf="0x%t 0x%T" \$file)) -- if [[ "\$CURRENT_DEVICE" = "\$boot_device" ]]; then -+ if [ "\$CURRENT_DEVICE" = "\$boot_device" ]; then - boot_partition=\$file - break - fi -@@ -343,41 +275,43 @@ cat >> $tmpdir/DEBIAN/preinst <<- EOT - - bootfstype=\$(blkid -s TYPE -o value \$boot_partition) - if [ "\$bootfstype" = "vfat" ]; then -+ umount /boot - rm -f /boot/System.map* /boot/config* /boot/vmlinuz* /boot/$image_name /boot/uImage - fi - } -- mountpoint -q /boot && check_boot_dev -+ mountpoint -q /boot && check_and_unmount - exit 0 - EOT - - create_package "$packagename" "$tmpdir" - --if [ "$ARCH" != "um" ]; then -+# Put the DTBs, installed by kernel make at "$dtb_dir/boot/dtbs_install", at "$dtb_dir/boot/dtb-$version" -+if [ -d "$dtb_dir/boot/dtbs_install" ]; then -+ echo "Armbian: DTB " "$dtb_dir/boot/dtbs_install" "exists, moving to" "$dtb_dir/boot/dtb-$version" -+ [ -d "$dtb_dir/boot/dtb-$version" ] && rm -rf "$dtb_dir/boot/dtb-$version" -+ mv -v "$dtb_dir/boot/dtbs_install" "$dtb_dir/boot/dtb-$version" -+ create_package "$dtb_packagename" "$dtb_dir" "dtb" -+fi - -- if [ "$(cat debian/arch)" != "amd64" ]; then # No DTB for amd64 target -- create_package "$dtb_packagename" "$dtb_dir" "dtb" -- fi -+deploy_libc_headers ${libc_headers_dir} -+create_package $libc_headers_packagename $libc_headers_dir - -- deploy_libc_headers $libc_headers_dir -- create_package $libc_headers_packagename $libc_headers_dir -- -- if is_enabled CONFIG_MODULES; then -- if is_native; then -- # echo "Skip scripts folder cleaning" >&2 -- # echo "Skip creating postinst prerm scripts for headers" >&2 -- deploy_kernel_headers $kernel_headers_dir -- create_package $kernel_headers_packagename $kernel_headers_dir -- else -- # Clean up the executables that are left over from -- # cross-compilation for a different host architecture. -- #( -- # cd $srctree -- # make M=scripts clean -- #) -- echo "-- NOT CLEANING before packaging headers. " 1>&2 -- deploy_kernel_headers $kernel_headers_dir -- create_package $kernel_headers_packagename $kernel_headers_dir "headers" -- fi -+if is_enabled CONFIG_MODULES; then -+ if is_native; then -+ # echo "Skip scripts folder cleaning" >&2 -+ # echo "Skip creating postinst prerm scripts for headers" >&2 -+ deploy_kernel_headers $kernel_headers_dir -+ create_package $kernel_headers_packagename $kernel_headers_dir # no "headers" here, no postinst -+ else -+ # Clean up the executables that are left over from -+ # cross-compilation for a different host architecture. -+ #( -+ # cd $srctree -+ # make M=scripts clean -+ #) -+ echo "-- NOT CLEANING before packaging headers. " 1>&2 -+ deploy_kernel_headers $kernel_headers_dir -+ create_package $kernel_headers_packagename $kernel_headers_dir "headers" - fi - - fi -@@ -387,7 +321,7 @@ if [ -n "$BUILD_DEBUG" ]; then - # Different tools want the image in different locations - # perf - mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/ -- cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/ -+ cp -pv vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/ - # systemtap - mkdir -p $dbg_dir/usr/lib/debug/boot/ - ln -s ../lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/boot/vmlinux-$version -diff --git a/packages/armbian/mkdebian b/packages/armbian/mkdebian -index 003195372..83a37b99d 100755 ---- a/packages/armbian/mkdebian -+++ b/packages/armbian/mkdebian -@@ -1,4 +1,4 @@ --#!/bin/sh -+#!/usr/bin/bash - # - # Copyright 2003 Wichert Akkerman - # -@@ -19,57 +19,64 @@ if_enabled_echo() { - } - - set_debarch() { -- if [ -n "$KBUILD_DEBARCH" ] ; then -+ if [ -n "$KBUILD_DEBARCH" ]; then - debarch="$KBUILD_DEBARCH" - return - fi - - # Attempt to find the correct Debian architecture - case "$UTS_MACHINE" in -- i386|ia64|alpha|m68k|riscv*) -- debarch="$UTS_MACHINE" ;; -- x86_64) -- debarch=amd64 ;; -- sparc*) -- debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;; -- s390*) -- debarch=s390x ;; -- ppc*) -- if is_enabled CONFIG_64BIT; then -- debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el) -- else -- debarch=powerpc$(if_enabled_echo CONFIG_SPE spe) -- fi -- ;; -- parisc*) -- debarch=hppa ;; -- mips*) -- if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then -- debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el -- elif is_enabled CONFIG_CPU_MIPSR6; then -- debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6 -- else -- debarch=mips -- fi -- ;; -- aarch64|arm64) -- debarch=arm64 ;; -- arm*) -- if is_enabled CONFIG_AEABI; then -- debarch=arm$(if_enabled_echo CONFIG_VFP hf el) -- else -- debarch=arm -- fi -- ;; -- openrisc) -- debarch=or1k ;; -- sh) -- if is_enabled CONFIG_CPU_SH3; then -- debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) -- elif is_enabled CONFIG_CPU_SH4; then -- debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) -- fi -- ;; -+ i386 | ia64 | alpha | m68k | riscv*) -+ debarch="$UTS_MACHINE" -+ ;; -+ x86_64) -+ debarch=amd64 -+ ;; -+ sparc*) -+ debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) -+ ;; -+ s390*) -+ debarch=s390x -+ ;; -+ ppc*) -+ if is_enabled CONFIG_64BIT; then -+ debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el) -+ else -+ debarch=powerpc$(if_enabled_echo CONFIG_SPE spe) -+ fi -+ ;; -+ parisc*) -+ debarch=hppa -+ ;; -+ mips*) -+ if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then -+ debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el -+ elif is_enabled CONFIG_CPU_MIPSR6; then -+ debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6 -+ else -+ debarch=mips -+ fi -+ ;; -+ aarch64 | arm64) -+ debarch=arm64 -+ ;; -+ arm*) -+ if is_enabled CONFIG_AEABI; then -+ debarch=arm$(if_enabled_echo CONFIG_VFP hf el) -+ else -+ debarch=arm -+ fi -+ ;; -+ openrisc) -+ debarch=or1k -+ ;; -+ sh) -+ if is_enabled CONFIG_CPU_SH3; then -+ debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) -+ elif is_enabled CONFIG_CPU_SH4; then -+ debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) -+ fi -+ ;; - esac - if [ -z "$debarch" ]; then - debarch=$(dpkg-architecture -qDEB_HOST_ARCH) -@@ -84,6 +91,9 @@ set_debarch() { - fi - } - -+#set -x -+echo "Armbian mkdebian starting..." -+ - # Some variables and settings used throughout the script - KDEB_SOURCENAME=linux-$KERNELRELEASE - version=$KERNELRELEASE -@@ -91,7 +101,7 @@ if [ -n "$KDEB_PKGVERSION" ]; then - packageversion=$KDEB_PKGVERSION - revision=${packageversion##*-} - else -- revision=$(cat .version 2>/dev/null||echo 1) -+ revision=$(cat .version 2> /dev/null || echo 1) - packageversion=$version-$revision - fi - sourcename=$KDEB_SOURCENAME -@@ -101,10 +111,6 @@ libc_headers_packagename=linux-libc-dev - dtb_packagename=linux-dtb-"$BRANCH$LOCALVERSION" - dbg_packagename=$packagename-dbg - --if [ "$ARCH" = "um" ] ; then -- packagename=user-mode-linux-$version --fi -- - debarch= - set_debarch - -@@ -118,7 +124,7 @@ else - user=${KBUILD_BUILD_USER-$(id -nu)} - name=${DEBFULLNAME-$user} - if [ -z "$email" ]; then -- buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)} -+ buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2> /dev/null || hostname)} - email="$user@$buildhost" - fi - maintainer="$name <$email>" -@@ -126,14 +132,14 @@ fi - - # Try to determine distribution - if [ -n "$KDEB_CHANGELOG_DIST" ]; then -- distribution=$KDEB_CHANGELOG_DIST -+ distribution=$KDEB_CHANGELOG_DIST - # In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog --elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then -- : # nothing to do in this case -+elif distribution=$(lsb_release -cs 2> /dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then -+ : # nothing to do in this case - else -- distribution="unstable" -- echo >&2 "Using default distribution of 'unstable' in the changelog" -- echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" -+ distribution="unstable" -+ echo >&2 "Using default distribution of 'unstable' in the changelog" -+ echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" - fi - - mkdir -p debian/source/ -@@ -144,111 +150,109 @@ extra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)" - extra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)" - - # Generate a simple changelog template --cat < debian/changelog --$sourcename ($packageversion) $distribution; urgency=low -+cat <<- EOF > debian/changelog -+ $sourcename ($packageversion) $distribution; urgency=low - -- * Armbian built Linux kernel. $BRANCH -+ * Armbian built Linux kernel. $BRANCH - -- -- $maintainer $(date -R) -+ -- $maintainer $(date -R) - EOF - - # Generate copyright file --cat < debian/copyright --This is a packacked armbian patches version of the Linux kernel. -+cat <<- EOF > debian/copyright -+ This is a packacked armbian patches version of the Linux kernel. - --The sources may be found at most Linux archive sites, including: --https://www.kernel.org/pub/linux/kernel -+ The sources may be found at most Linux archive sites, including: -+ https://www.kernel.org/pub/linux/kernel - --Copyright: 1991 - 2018 Linus Torvalds and others. -+ Copyright: 1991 - 2018 Linus Torvalds and others. - --The git repository for mainline kernel development is at: --git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git -+ The git repository for mainline kernel development is at: -+ git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git - -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; version 2 dated June, 1991. -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; version 2 dated June, 1991. - --On Debian GNU/Linux systems, the complete text of the GNU General Public --License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. -+ On Debian GNU/Linux systems, the complete text of the GNU General Public -+ License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. - EOF - - # Generate a control file --cat < debian/control --Source: $sourcename --Section: kernel --Priority: optional --Maintainer: $maintainer --Build-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends --Homepage: https://www.kernel.org/ -- --Package: $packagename --Architecture: $debarch --Provides: linux-image, linux-image-armbian, armbian-$BRANCH --Description: Linux kernel, armbian version $version $BRANCH -- This package contains the Linux kernel, modules and corresponding other -- files, version: $version. -- --Package: $libc_headers_packagename --Section: devel --Provides: linux-kernel-headers --Conflicts: linux-kernel-headers --Replaces: linux-kernel-headers --Architecture: $debarch --Description: Armbian Linux support headers for userspace development -- This package provides userspaces headers from the Linux kernel. These headers -- are used by the installed headers for GNU glibc and other system libraries. --Multi-Arch: same -- --Package: $dtb_packagename --Architecture: $debarch --Provides: linux-dtb, linux-dtb-armbian, armbian-$BRANCH --Description: Armbian Linux DTB, version $version $BRANCH -- This package contains device blobs from the Linux kernel, version $version -+cat <<- EOF > debian/control -+ Source: $sourcename -+ Section: kernel -+ Priority: optional -+ Maintainer: $maintainer -+ Build-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends -+ Homepage: https://www.kernel.org/ -+ -+ Package: $packagename -+ Architecture: $debarch -+ Provides: linux-image, linux-image-armbian, armbian-$BRANCH -+ Description: Linux kernel, armbian version $version $BRANCH -+ This package contains the Linux kernel, modules and corresponding other -+ files, version: $version. -+ -+ Package: $libc_headers_packagename -+ Section: devel -+ Provides: linux-kernel-headers -+ Conflicts: linux-kernel-headers -+ Replaces: linux-kernel-headers -+ Architecture: $debarch -+ Description: Armbian Linux support headers for userspace development -+ This package provides userspaces headers from the Linux kernel. These headers -+ are used by the installed headers for GNU glibc and other system libraries. -+ Multi-Arch: same -+ -+ Package: $dtb_packagename -+ Architecture: $debarch -+ Provides: linux-dtb, linux-dtb-armbian, armbian-$BRANCH -+ Description: Armbian Linux DTB, version $version $BRANCH -+ This package contains device blobs from the Linux kernel, version $version - EOF - - if is_enabled CONFIG_MODULES; then --cat <> debian/control -- --Package: $kernel_headers_packagename --Section: devel --Architecture: $debarch --Provides: linux-headers, linux-headers-armbian, armbian-$BRANCH --Depends: make, gcc, libc6-dev, bison, flex, libssl-dev --Description: Linux kernel headers for $version on $debarch $BRANCH -- This package provides kernel header files for $version on $debarch -- . -- This is useful for people who need to build external modules --EOF -+ cat <<- EOF >> debian/control -+ -+ Package: $kernel_headers_packagename -+ Section: devel -+ Architecture: $debarch -+ Provides: linux-headers, linux-headers-armbian, armbian-$BRANCH -+ Depends: make, gcc, libc6-dev, bison, flex, libssl-dev -+ Description: Linux kernel headers for $version on $debarch $BRANCH -+ This package provides kernel header files for $version on $debarch -+ . -+ This is useful for people who need to build external modules -+ EOF - fi - - if is_enabled CONFIG_DEBUG_INFO; then --cat <> debian/control -- --Package: $dbg_packagename --Section: debug --Architecture: $debarch --Description: Linux kernel debugging symbols for $version -- This package will come in handy if you need to debug the kernel. It provides -- all the necessary debug symbols for the kernel and its modules. --EOF -+ cat <<- EOF >> debian/control -+ -+ Package: $dbg_packagename -+ Section: debug -+ Architecture: $debarch -+ Description: Linux kernel debugging symbols for $version -+ This package will come in handy if you need to debug the kernel. It provides -+ all the necessary debug symbols for the kernel and its modules. -+ EOF - fi - --cat < debian/rules -+cat << EOF > debian/rules - #!$(command -v $MAKE) -f - - srctree ?= . - - build: -- \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ -- KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile -+ echo "Kernel should be built, headers and modules installed before calling this." - - binary-arch: -- \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ -- KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile intdeb-pkg -+ echo "Armbian: Calling builddep via make intdeb-pkg" -+ \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile intdeb-pkg - - clean: - rm -rf debian/*tmp debian/files -- \$(MAKE) clean - - binary: binary-arch - EOF - -From 0e26d1439e8e6ad7ae331247a618db4ea4a4130c Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 19 Feb 2022 01:06:32 +0100 -Subject: [PATCH] armbian-next: minor stylistic changes that I end up doing - while working on other stuff - -- I am `OFFLINE_WORK`'ing, I don't wanna waste 3 seconds, thanks -- OCD-fix of double `local` declarations ---- - lib/functions/cli/cli-entrypoint.sh | 8 ++------ - lib/functions/general/git.sh | 22 ++++++++++------------ - 2 files changed, 12 insertions(+), 18 deletions(-) - -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index d9da56acc..22de78eb4 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -17,7 +17,6 @@ function bla() { - #exit 0 # exit without error - } - -- - function cli_entrypoint() { - if [[ "${ARMBIAN_ENABLE_CALL_TRACING}" == "yes" ]]; then - set -T # inherit return/debug traps -@@ -42,12 +41,9 @@ function cli_entrypoint() { - fi - - # The only way to get this is via ENV var... -- if [ "$OFFLINE_WORK" == "yes" ]; then -- echo -e "\n" -- display_alert "* " "You are working offline." -+ if [ "${OFFLINE_WORK}" == "yes" ]; then -+ display_alert "* " "You are working offline!" - display_alert "* " "Sources, time and host will not be checked" -- echo -e "\n" -- sleep 3s - else - # check and install the basic utilities here # @TODO: logging? - prepare_host_basic -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 6b043832b..51f658d31 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -47,18 +47,15 @@ fetch_from_repo() { - url=${url//'https://github.com/'/$GITHUB_SOURCE} - - # The 'offline' variable must always be set to 'true' or 'false' -- if [ "$OFFLINE_WORK" == "yes" ]; then -- local offline=true -- else -- local offline=false -+ local offline=false -+ if [[ "${OFFLINE_WORK}" == "yes" ]]; then -+ offline=true - fi - - [[ -z $ref || ($ref != tag:* && $ref != branch:* && $ref != head && $ref != commit:*) ]] && exit_with_error "Error in configuration" -- local ref_type=${ref%%:*} -+ local ref_type=${ref%%:*} ref_name=${ref##*:} - if [[ $ref_type == head ]]; then -- local ref_name=HEAD -- else -- local ref_name=${ref##*:} -+ ref_name=HEAD - fi - - display_alert "Getting sources from Git" "$dir $ref_name" "info" -@@ -76,7 +73,6 @@ fetch_from_repo() { - - display_alert "Git working dir" "${git_work_dir}" "debug" - -- - # "Sanity check" since we only support one "origin" - if [[ "$(git rev-parse --git-dir)" == ".git" && "$url" != *"$(git remote get-url origin | sed 's/^.*@//' | sed 's/^.*\/\///')" ]]; then - exit_with_error "Remote URL does not match. Stopping!" "${git_work_dir} $dir $ref_name" "warn" -@@ -91,10 +87,12 @@ fetch_from_repo() { - - local changed=false - -+ # get local hash; might fail -+ local local_hash -+ local_hash=$(git rev-parse @ 2> /dev/null || true) # Don't fail nor output anything if failure -+ - # when we work offline we simply return the sources to their original state - if ! $offline; then -- local local_hash -- local_hash=$(git rev-parse @ 2> /dev/null || true) # Don't fail nor output anything if failure - - case $ref_type in - branch) -@@ -125,7 +123,7 @@ fetch_from_repo() { - - fi # offline - -- if [[ $changed == true ]]; then -+ if [[ "${changed}" == "true" ]]; then - - # If there's a cold bundle URL specified: - # - if there's already a cold_bundle_xxx remote, move on. - -From 1b0d604efc56025a1dfd8a2d9ef3485799fbbe1b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 18 Feb 2022 04:26:28 +0100 -Subject: [PATCH] [giga-wip] rework patching, introducing fasthash - ---- - lib/functions/compilation/kernel.sh | 41 +++-- - .../compilation/{patching.sh => patch/apply.sh} | 85 +++++---- - lib/functions/compilation/patch/fasthash.sh | 29 ++++ - .../compilation/patch/kernel-bootsplash.sh | 34 ++++ - .../{extra-drivers.sh => patch/kernel-drivers.sh} | 189 ++++----------------- - lib/functions/compilation/patch/kernel-pkg.sh | 92 ++++++++++ - lib/functions/compilation/sources.sh | 10 +- - lib/library-functions.sh | 45 ++++- - 8 files changed, 303 insertions(+), 222 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index d33c18f9f..c6591d5cc 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -44,11 +44,10 @@ function compile_kernel() { - ) - fi - -+ local kerneldir="$SRC/cache/sources/$LINUXSOURCEDIR" - if [[ $USE_OVERLAYFS == yes ]]; then -- local kerneldir -+ display_alert "Using overlayfs_wrapper" "kernel_${LINUXFAMILY}_${BRANCH}" "debug" - kerneldir=$(overlayfs_wrapper "wrap" "$SRC/cache/sources/$LINUXSOURCEDIR" "kernel_${LINUXFAMILY}_${BRANCH}") -- else -- local kerneldir="$SRC/cache/sources/$LINUXSOURCEDIR" - fi - cd "${kerneldir}" || exit - -@@ -63,19 +62,39 @@ function compile_kernel() { - # read kernel git hash - hash=$(git --git-dir="$kerneldir"/.git rev-parse HEAD) - -+ ## Start kernel patching process. -+ ## There's a few objectives here: -+ ## - (always) produce a fasthash: represents "what would be done" (eg: md5 of a patch, crc32 of description). -+ ## - (optionally) execute modification against living tree (eg: apply a patch, copy a file, etc). only if `DO_MODIFY=yes` -+ ## - (always) call mark_change_commit with the description of what was done and fasthash. -+ initialize_fasthash "kernel" "${hash}" "${pre_patch_version}" "${kerneldir}" -+ declare -a fast_hash_list=() -+ - # Apply a series of patches if a series file exists -- if test -f "${SRC}"/patch/kernel/"${KERNELPATCHDIR}"/series.conf; then -+ local series_conf="${SRC}"/patch/kernel/${KERNELPATCHDIR}/series.conf -+ if test -f "${series_conf}"; then - display_alert "series.conf file visible. Apply" -- series_conf="${SRC}"/patch/kernel/${KERNELPATCHDIR}/series.conf -- -- # apply_patch_series -- apply_patch_series "${kerneldir}" "$series_conf" -+ fasthash_branch "patches-${KERNELPATCHDIR}-series.conf" -+ apply_patch_series "${kerneldir}" "${series_conf}" # applies a series of patches, read from a file. calls process_patch_file - fi - -- # build 3rd party drivers; # @TODO: does it build? or only patch? -- prepare_extra_kernel_drivers -+ # mostly local-based packaging fixes. -+ fasthash_branch "packaging-patches" -+ apply_kernel_patches_for_packaging "${kerneldir}" "${version}" # calls process_patch_file and other stuff. -+ -+ # applies a humongous amount of patches coming from github repos. -+ # it's mostly conditional, and very complex. -+ # @TODO: re-enable after finishing converting it with fasthash magic -+ # apply_kernel_patches_for_drivers "${kerneldir}" "${version}" # calls process_patch_file and other stuff. there is A LOT of it. -+ -+ # applies a series of patches, in directory order, from multiple directories (default/"user" patches) -+ # @TODO: I believe using the $BOARD here is the most confusing thing in the whole of Armbian. It should be disabled. -+ # @TODO: Armbian built kernels dont't vary per-board, but only per "$ARCH-$LINUXFAMILY-$BRANCH" -+ # @TODO: allowing for board-specific kernel patches creates insanity. uboot is enough. -+ fasthash_branch "patches-${KERNELPATCHDIR}-$BRANCH" -+ advanced_patch "kernel" "$KERNELPATCHDIR" "$BOARD" "" "$BRANCH" "$LINUXFAMILY-$BRANCH" # calls process_patch_file, "target" is empty there - -- advanced_patch "kernel" "$KERNELPATCHDIR" "$BOARD" "" "$BRANCH" "$LINUXFAMILY-$BRANCH" -+ finish_fasthash "kernel" # this reports the final hash and creates git branch to build ID. All modifications commited. - - # create patch for manual source changes in debug mode - [[ $CREATE_PATCHES == yes ]] && userpatch_create "kernel" -diff --git a/lib/functions/compilation/patching.sh b/lib/functions/compilation/patch/apply.sh -similarity index 71% -rename from lib/functions/compilation/patching.sh -rename to lib/functions/compilation/patch/apply.sh -index 7ebcef3ac..3387c061a 100644 ---- a/lib/functions/compilation/patching.sh -+++ b/lib/functions/compilation/patch/apply.sh -@@ -97,54 +97,49 @@ process_patch_file() { - } - return 0 # short-circuit above, avoid exiting with error - } -+function new_process_patch_file() { -+ local patch="$1" # full filename -+ local status="$2" # message, may contain ANSI -+ local relative_patch="${patch##"${SRC}"/}" # ${FOO##prefix} remove prefix from FOO -+ -+ # report_fashtash_should_execute is report_fasthash returns true only if we're supposed to apply the patch on disk. -+ if report_fashtash_should_execute file "${patch}" "Apply patch ${relative_patch}"; then -+ # detect and remove files which patch will create -+ lsdiff -s --strip=1 "${patch}" | grep '^+' | awk '{print $2}' | xargs -I % sh -c 'rm -f %' -+ -+ # @TODO: try patching with `git am` first, so git contains the patch commit info/msg. -- For future git-based hashing. -+ # shellcheck disable=SC2015 # noted, thanks. I need to handle exit code here. -+ patch --batch -p1 -N < "${patch}" && { -+ display_alert "* ${status} ${relative_patch}" "" "info" || true -+ } || { -+ display_alert "* ${status} ${relative_patch}" "failed" "wrn" -+ [[ $EXIT_PATCHING_ERROR == yes ]] && exit_with_error "Aborting due to EXIT_PATCHING_ERROR" "Patch ${relative_patch} failed" -+ } -+ mark_fasthash_done # will do git commit, associate fasthash to real hash. -+ fi - --# apply_patch_series --apply_patch_series() { -- local t_dir="${1}" -- local series="${2}" -- local bzdir="$(dirname $series)" -- local flag -- local err_pt=$(mktemp /tmp/apply_patch_series_XXXXX) # @OTODO: rpardini: hmm, why is this different from all others? -- -- list=$(awk '$0 !~ /^#.*|^-.*|^$/' "${series}") -- skiplist=$(awk '$0 ~ /^-.*/{print $NF}' "${series}") -- -- display_alert "apply a series of " "[$(echo $list | wc -w)] patches" -- display_alert "skip [$(echo $skiplist | wc -w)] patches" -- -- cd "${t_dir}" || exit 1 -- for p in $list; do -- # Detect and remove files as '*.patch' which patch will create. -- # So we need to delete the file before applying the patch if it exists. -- lsdiff -s --strip=1 "$bzdir/$p" | -- awk '$0 ~ /^+.*patch$/{print $2}' | -- xargs -I % sh -c 'rm -f %' -- -- set +e # has to tolerate error here to catch them -- patch --batch --silent --no-backup-if-mismatch -p1 -N < $bzdir/"$p" >> $err_pt 2>&1 -- flag=$? -- set -e # back to normal, errors cause stop. -+ return 0 # short-circuit above, avoid exiting with error -+} - -- case $flag in -- 0) -- printf "[\033[32m done \033[0m] %s\n" "${p}" -- printf "[ done ] %s\n" "${p}" >> "${DEST}"/debug/patching.log -- ;; -- 1) -- printf "[\033[33m FAILED \033[0m] %s\n" "${p}" -- echo -e "[ FAILED ] For ${p} \t\tprocess exit [ $flag ]" >> "${DEST}"/debug/patching.log -- cat $err_pt >> "${DEST}"/debug/patching.log -- ;; -- 2) -- printf "[\033[31m Patch wrong \033[0m] %s\n" "${p}" -- echo -e "Patch wrong ${p}\t\tprocess exit [ $flag ]" >> "${DEST}"/debug/patching.log -- cat $err_pt >> "${DEST}"/debug/patching.log -- ;; -- esac -- echo "" > $err_pt -+# apply_patch_series -+apply_patch_series() { -+ local target_dir="${1}" -+ local series_file_full_path="${2}" -+ local included_list skip_list skip_count counter=1 base_dir -+ base_dir="$(dirname "${series_file_full_path}")" -+ included_list="$(awk '$0 !~ /^#.*|^-.*|^$/' "${series_file_full_path}")" -+ included_count=$(echo -n "${included_list}" | wc -w) -+ skip_list="$(awk '$0 ~ /^-.*/{print $NF}' "${series_file_full_path}")" -+ skip_count=$(echo -n "${skip_list}" | wc -w) -+ display_alert "apply a series of " "[$(echo -n "$included_list" | wc -w)] patches" "info" -+ [[ ${skip_count} -gt 0 ]] && display_alert "skipping" "[${skip_count}] patches" "warn" -+ cd "${target_dir}" || exit 1 -+ -+ for p in $included_list; do -+ process_patch_file "${base_dir}/${p}" "${counter}/${included_count}" -+ counter=$((counter + 1)) - done -- echo "" >> "${DEST}"/debug/patching.log -- rm $err_pt -+ display_alert "done applying patch series " "[$(echo -n "$included_list" | wc -w)] patches" "info" - } - - userpatch_create() { -diff --git a/lib/functions/compilation/patch/fasthash.sh b/lib/functions/compilation/patch/fasthash.sh -new file mode 100644 -index 000000000..306966d38 ---- /dev/null -+++ b/lib/functions/compilation/patch/fasthash.sh -@@ -0,0 +1,29 @@ -+function report_fashtash_should_execute() { -+ display_alert "report_fashtash_should_execute" "$*" "debug" -+ return 0 -+} -+ -+function mark_fasthash_done() { -+ display_alert "mark_fasthash_done" "$*" "debug" -+ return 0 -+} -+ -+function report_fasthash() { -+ display_alert "report_fasthash" "$*" "debug" -+ return 0 -+} -+ -+function initialize_fasthash() { -+ display_alert "initialize_fasthash" "$*" "debug" -+ return 0 -+} -+ -+function fasthash_branch() { -+ display_alert "fasthash_branch" "$*" "debug" -+ return 0 -+} -+ -+function finish_fasthash() { -+ display_alert "finish_fasthash" "$*" "debug" -+ return 0 -+} -diff --git a/lib/functions/compilation/patch/kernel-bootsplash.sh b/lib/functions/compilation/patch/kernel-bootsplash.sh -new file mode 100644 -index 000000000..e5d279110 ---- /dev/null -+++ b/lib/functions/compilation/patch/kernel-bootsplash.sh -@@ -0,0 +1,34 @@ -+# -+# Linux splash file -+# -+function apply_kernel_patches_for_bootsplash() { -+ # previously: if linux-version compare "${version}" ge 5.10 && [ $SKIP_BOOTSPLASH != yes ]; then -+ [[ "${SKIP_BOOTSPLASH}" == "yes" ]] && return 0 -+ linux-version compare "${version}" le 5.10 && return 0 -+ -+ display_alert "Adding" "Kernel bootsplash patch" "info" -+ -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0001-Revert-fbcon-Add-option-to-enable-legacy-hardware-ac.patch" "applying" -+ -+ if linux-version compare "${version}" ge 5.15; then -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0002-Revert-vgacon-drop-unused-vga_init_done.patch" "applying" -+ fi -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0003-Revert-vgacon-remove-software-scrollback-support.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0004-Revert-drivers-video-fbcon-fix-NULL-dereference-in-f.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0005-Revert-fbcon-remove-no-op-fbcon_set_origin.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0006-Revert-fbcon-remove-now-unusued-softback_lines-curso.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0007-Revert-fbcon-remove-soft-scrollback-code.patch" "applying" -+ -+ process_patch_file "${SRC}/patch/misc/0001-bootsplash.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/0002-bootsplash.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/0003-bootsplash.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/0004-bootsplash.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/0005-bootsplash.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/0006-bootsplash.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/0007-bootsplash.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/0008-bootsplash.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/0009-bootsplash.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/0010-bootsplash.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/0011-bootsplash.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/0012-bootsplash.patch" "applying" -+} -diff --git a/lib/functions/compilation/extra-drivers.sh b/lib/functions/compilation/patch/kernel-drivers.sh -similarity index 75% -rename from lib/functions/compilation/extra-drivers.sh -rename to lib/functions/compilation/patch/kernel-drivers.sh -index f731b4319..61f1cb630 100644 ---- a/lib/functions/compilation/extra-drivers.sh -+++ b/lib/functions/compilation/patch/kernel-drivers.sh -@@ -9,125 +9,7 @@ - # This file is a part of the Armbian build script - # https://github.com/armbian/build/ - --prepare_extra_kernel_drivers() { -- -- # Packaging patch for modern kernels should be one for all. -- # Currently we have it per kernel family since we can't have one -- # Maintaining one from central location starting with 5.3+ -- # Temporally set for new "default->legacy,next->current" family naming -- -- if linux-version compare "${version}" ge 5.10; then -- -- if test -d ${kerneldir}/debian; then -- rm -rf ${kerneldir}/debian/* -- fi -- sed -i -e ' -- s/^KBUILD_IMAGE := \$(boot)\/Image\.gz$/KBUILD_IMAGE := \$(boot)\/Image/ -- ' ${kerneldir}/arch/arm64/Makefile -- -- rm -f ${kerneldir}/scripts/package/{builddeb,mkdebian} -- -- cp ${SRC}/packages/armbian/builddeb ${kerneldir}/scripts/package/builddeb -- cp ${SRC}/packages/armbian/mkdebian ${kerneldir}/scripts/package/mkdebian -- -- chmod 755 ${kerneldir}/scripts/package/{builddeb,mkdebian} -- -- elif linux-version compare "${version}" ge 5.8.17 && -- linux-version compare "${version}" le 5.9 || -- linux-version compare "${version}" ge 5.9.2; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-5.8-9.y.patch" "applying" -- elif linux-version compare "${version}" ge 5.6; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-5.6.y.patch" "applying" -- elif linux-version compare "${version}" ge 5.3; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-5.3.y.patch" "applying" -- fi -- -- if [[ "${version}" == "4.19."* ]] && [[ "$LINUXFAMILY" == sunxi* || "$LINUXFAMILY" == meson64 || -- "$LINUXFAMILY" == mvebu64 || "$LINUXFAMILY" == mt7623 || "$LINUXFAMILY" == mvebu ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.19.y.patch" "applying" -- fi -- -- if [[ "${version}" == "4.19."* ]] && [[ "$LINUXFAMILY" == rk35xx ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.19.y-rk35xx.patch" "applying" -- fi -- -- if [[ "${version}" == "4.14."* ]] && [[ "$LINUXFAMILY" == s5p6818 || "$LINUXFAMILY" == mvebu64 || -- "$LINUXFAMILY" == imx7d || "$LINUXFAMILY" == odroidxu4 || "$LINUXFAMILY" == mvebu ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.14.y.patch" "applying" -- fi -- -- if [[ "${version}" == "4.4."* || "${version}" == "4.9."* ]] && -- [[ "$LINUXFAMILY" == rockpis || "$LINUXFAMILY" == rk3399 ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.4.y-rk3399.patch" "applying" -- fi -- -- if [[ "${version}" == "4.4."* ]] && -- [[ "$LINUXFAMILY" == rockchip64 || "$LINUXFAMILY" == station* ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.4.y-rockchip64.patch" "applying" -- fi -- -- if [[ "${version}" == "4.4."* ]] && [[ "$LINUXFAMILY" == rockchip || "$LINUXFAMILY" == rk322x ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.4.y.patch" "applying" -- fi -- -- if [[ "${version}" == "4.9."* ]] && [[ "$LINUXFAMILY" == meson64 || "$LINUXFAMILY" == odroidc4 ]]; then -- display_alert "Adjusting" "packaging" "info" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/patch/misc/general-packaging-4.9.y.patch" "applying" -- fi -- -- # -- # Linux splash file -- # -- -- if linux-version compare "${version}" ge 5.10 && [ $SKIP_BOOTSPLASH != yes ]; then -- -- display_alert "Adding" "Kernel splash file" "info" -- -- process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0001-Revert-fbcon-Add-option-to-enable-legacy-hardware-ac.patch" "applying" -- -- if linux-version compare "${version}" ge 5.15; then -- process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0002-Revert-vgacon-drop-unused-vga_init_done.patch" "applying" -- fi -- process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0003-Revert-vgacon-remove-software-scrollback-support.patch" "applying" -- process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0004-Revert-drivers-video-fbcon-fix-NULL-dereference-in-f.patch" "applying" -- process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0005-Revert-fbcon-remove-no-op-fbcon_set_origin.patch" "applying" -- process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0006-Revert-fbcon-remove-now-unusued-softback_lines-curso.patch" "applying" -- process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0007-Revert-fbcon-remove-soft-scrollback-code.patch" "applying" -- -- process_patch_file "${SRC}/patch/misc/0001-bootsplash.patch" "applying" -- process_patch_file "${SRC}/patch/misc/0002-bootsplash.patch" "applying" -- process_patch_file "${SRC}/patch/misc/0003-bootsplash.patch" "applying" -- process_patch_file "${SRC}/patch/misc/0004-bootsplash.patch" "applying" -- process_patch_file "${SRC}/patch/misc/0005-bootsplash.patch" "applying" -- process_patch_file "${SRC}/patch/misc/0006-bootsplash.patch" "applying" -- process_patch_file "${SRC}/patch/misc/0007-bootsplash.patch" "applying" -- process_patch_file "${SRC}/patch/misc/0008-bootsplash.patch" "applying" -- process_patch_file "${SRC}/patch/misc/0009-bootsplash.patch" "applying" -- process_patch_file "${SRC}/patch/misc/0010-bootsplash.patch" "applying" -- process_patch_file "${SRC}/patch/misc/0011-bootsplash.patch" "applying" -- process_patch_file "${SRC}/patch/misc/0012-bootsplash.patch" "applying" -- -- fi -- -+function prepare_extra_kernel_drivers() { - # - # mac80211 wireless driver injection features from Kali Linux - # -@@ -150,45 +32,35 @@ prepare_extra_kernel_drivers() { - # Older versions have AUFS support with a patch - - if linux-version compare "${version}" ge 5.1 && linux-version compare "${version}" le 5.12 && [ "$AUFS" == yes ]; then -- -- # attach to specifics tag or branch -- local aufstag -- aufstag=$(echo "${version}" | cut -f 1-2 -d ".") -+ # @TODO: Fasthash for this whole block is only the git hash of revision we'd apply from Mr. Okajima -+ local aufs_tag # attach to specifics tag or branch -+ aufs_tag=$(echo "${version}" | cut -f 1-2 -d ".") - - # manual overrides -- if linux-version compare "${version}" ge 5.4.3 && linux-version compare "${version}" le 5.5; then aufstag="5.4.3"; fi -- if linux-version compare "${version}" ge 5.10.82 && linux-version compare "${version}" le 5.11; then aufstag="5.10.82"; fi -- if linux-version compare "${version}" ge 5.15.5 && linux-version compare "${version}" le 5.16; then aufstag="5.15.5"; fi -- -- # check if Mr. Okajima already made a branch for this version -- improved_git ls-remote --exit-code --heads https://github.com/sfjro/aufs5-standalone "aufs${aufstag}" > /dev/null -- -- if [ "$?" -ne "0" ]; then -- # then use rc branch -- aufstag="5.x-rcN" -- # @TODO: this does not do what you think it does; nonzero explode always -- improved_git ls-remote --exit-code --heads https://github.com/sfjro/aufs5-standalone "aufs${aufstag}" > /dev/null -- fi -- -- if [ "$?" -eq "0" ]; then -- -- display_alert "Adding" "AUFS ${aufstag}" "info" -- local aufsver="branch:aufs${aufstag}" -- fetch_from_repo "https://github.com/sfjro/aufs5-standalone" "aufs5" "branch:${aufsver}" "yes" -- cd "$kerneldir" || exit -- process_patch_file "${SRC}/cache/sources/aufs5/${aufsver#*:}/aufs5-kbuild.patch" "applying" -- process_patch_file "${SRC}/cache/sources/aufs5/${aufsver#*:}/aufs5-base.patch" "applying" -- process_patch_file "${SRC}/cache/sources/aufs5/${aufsver#*:}/aufs5-mmap.patch" "applying" -- process_patch_file "${SRC}/cache/sources/aufs5/${aufsver#*:}/aufs5-standalone.patch" "applying" -- cp -R "${SRC}/cache/sources/aufs5/${aufsver#*:}"/{Documentation,fs} . -- cp "${SRC}/cache/sources/aufs5/${aufsver#*:}"/include/uapi/linux/aufs_type.h include/uapi/linux/ -- -- fi -+ if linux-version compare "${version}" ge 5.4.3 && linux-version compare "${version}" le 5.5; then aufs_tag="5.4.3"; fi -+ if linux-version compare "${version}" ge 5.10.82 && linux-version compare "${version}" le 5.11; then aufs_tag="5.10.82"; fi -+ if linux-version compare "${version}" ge 5.15.5 && linux-version compare "${version}" le 5.16; then aufs_tag="5.15.5"; fi -+ -+ # check if Mr. Okajima already made a branch for this version, otherwise use RC. -+ git ls-remote --exit-code --heads https://github.com/sfjro/aufs5-standalone "aufs${aufs_tag}" > /dev/null || { -+ aufs_tag="5.x-rcN" # then use rc branch -+ git ls-remote --exit-code --heads https://github.com/sfjro/aufs5-standalone "aufs${aufs_tag}" > /dev/null -+ } -+ display_alert "Adding" "AUFS ${aufs_tag}" "info" -+ local aufs_branch="branch:aufs${aufs_tag}" -+ fetch_from_repo "https://github.com/sfjro/aufs5-standalone" "aufs5" "branch:${aufs_branch}" "yes" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/cache/sources/aufs5/${aufs_branch#*:}/aufs5-kbuild.patch" "applying" -+ process_patch_file "${SRC}/cache/sources/aufs5/${aufs_branch#*:}/aufs5-base.patch" "applying" -+ process_patch_file "${SRC}/cache/sources/aufs5/${aufs_branch#*:}/aufs5-mmap.patch" "applying" -+ process_patch_file "${SRC}/cache/sources/aufs5/${aufs_branch#*:}/aufs5-standalone.patch" "applying" -+ cp -R "${SRC}/cache/sources/aufs5/${aufs_branch#*:}"/{Documentation,fs} . -+ cp "${SRC}/cache/sources/aufs5/${aufs_branch#*:}"/include/uapi/linux/aufs_type.h include/uapi/linux/ - fi - - # WireGuard VPN for Linux 3.10 - 5.5 - if linux-version compare "${version}" ge 3.10 && linux-version compare "${version}" le 5.5 && [ "${WIREGUARD}" == yes ]; then -- -+ # @TODO: fasthash for this is... ? remote git hash? - # attach to specifics tag or branch - local wirever="branch:master" - -@@ -218,6 +90,7 @@ prepare_extra_kernel_drivers() { - # Updated USB network drivers for RTL8152/RTL8153 based dongles that also support 2.5Gbs variants - - if linux-version compare "${version}" ge 5.4 && linux-version compare "${version}" le 5.12 && [ $LINUXFAMILY != mvebu64 ] && [ $LINUXFAMILY != rk322x ] && [ $LINUXFAMILY != odroidxu4 ] && [ $EXTRAWIFI == yes ]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch - local rtl8152ver="branch:master" -@@ -232,6 +105,7 @@ prepare_extra_kernel_drivers() { - # Wireless drivers for Realtek 8189ES chipsets - - if linux-version compare "${version}" ge 3.14 && [ "$EXTRAWIFI" == yes ]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch - local rtl8189esver="branch:master" -@@ -264,6 +138,7 @@ prepare_extra_kernel_drivers() { - # Wireless drivers for Realtek 8189FS chipsets - - if linux-version compare "${version}" ge 3.14 && [ "$EXTRAWIFI" == yes ]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch - local rtl8189fsver="branch:rtl8189fs" -@@ -296,6 +171,7 @@ prepare_extra_kernel_drivers() { - # Wireless drivers for Realtek 8192EU chipsets - - if linux-version compare "${version}" ge 3.14 && [ "$EXTRAWIFI" == yes ]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch - local rtl8192euver="branch:realtek-4.4.x" -@@ -328,6 +204,7 @@ prepare_extra_kernel_drivers() { - # Wireless drivers for Realtek 8811, 8812, 8814 and 8821 chipsets - - if linux-version compare "${version}" ge 3.14 && [ "$EXTRAWIFI" == yes ]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch - local rtl8812auver="branch:v5.6.4.2" -@@ -358,6 +235,7 @@ prepare_extra_kernel_drivers() { - - # Wireless drivers for Xradio XR819 chipsets - if linux-version compare "${version}" ge 4.19 && [[ "$LINUXFAMILY" == sunxi* ]] && [[ "$EXTRAWIFI" == yes ]]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - display_alert "Adding" "Wireless drivers for Xradio XR819 chipsets" "info" - -@@ -391,6 +269,7 @@ prepare_extra_kernel_drivers() { - # Wireless drivers for Realtek RTL8811CU and RTL8821C chipsets - - if linux-version compare "${version}" ge 3.14 && [ "$EXTRAWIFI" == yes ]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch - local rtl8811cuver="commit:2bebdb9a35c1d9b6e6a928e371fa39d5fcec8a62" -@@ -440,6 +319,7 @@ prepare_extra_kernel_drivers() { - if linux-version compare "${version}" ge 3.14 && - linux-version compare "${version}" lt 5.15 && - [ "$EXTRAWIFI" == yes ]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch - local rtl8188euver="branch:v5.7.6.1" -@@ -481,6 +361,7 @@ prepare_extra_kernel_drivers() { - # Wireless drivers for Realtek 88x2bu chipsets - - if linux-version compare "${version}" ge 5.0 && [ "$EXTRAWIFI" == yes ]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch - local rtl88x2buver="branch:5.8.7.1_35809.20191129_COEX20191120-7777" -@@ -517,6 +398,7 @@ prepare_extra_kernel_drivers() { - # Wireless drivers for Realtek 88x2cs chipsets - - if linux-version compare "${version}" ge 5.9 && [ "$EXTRAWIFI" == yes ]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch - local rtl88x2csver="branch:tune_for_jethub" -@@ -564,6 +446,7 @@ prepare_extra_kernel_drivers() { - # Wireless drivers for Realtek 8723DS chipsets - - if linux-version compare "${version}" ge 5.0 && [ "$EXTRAWIFI" == yes ]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch - local rtl8723dsver="branch:master" -@@ -600,6 +483,7 @@ prepare_extra_kernel_drivers() { - # Wireless drivers for Realtek 8723DU chipsets - - if linux-version compare $version ge 5.0 && [ "$EXTRAWIFI" == yes ]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch - if linux-version compare $version ge 5.12; then -@@ -636,6 +520,7 @@ prepare_extra_kernel_drivers() { - # Wireless drivers for Realtek 8822BS chipsets - - if linux-version compare "${version}" ge 4.4 && [ "$EXTRAWIFI" == yes ]; then -+ # @TODO: fasthash for this is... ? remote git hash? - - # attach to specifics tag or branch - display_alert "Adding" "Wireless drivers for Realtek 8822BS chipsets ${rtl8822bsver}" "info" -diff --git a/lib/functions/compilation/patch/kernel-pkg.sh b/lib/functions/compilation/patch/kernel-pkg.sh -new file mode 100644 -index 000000000..11d7d4244 ---- /dev/null -+++ b/lib/functions/compilation/patch/kernel-pkg.sh -@@ -0,0 +1,92 @@ -+function apply_kernel_patches_for_packaging() { -+ set -x -+ local kerneldir="${1}" -+ local version="${2}" -+ # Packaging patch for modern kernels should be one for all. -+ # Currently we have it per kernel family since we can't have one -+ # Maintaining one from central location starting with 5.3+ -+ # Temporally set for new "default->legacy,next->current" family naming -+ -+ if linux-version compare "${version}" ge 5.10; then -+ # This case is special: it does not use process_patch_file. fasthash manually. -+ local builddeb="packages/armbian/builddeb" -+ local mkdebian="packages/armbian/mkdebian" -+ local kernel_package_dir="${kerneldir}/scripts/package" -+ if report_fashtash_should_execute text "$(cat "${SRC}/${builddeb}" "${SRC}/${mkdebian}")" "armbian builddeb and mkdebian replace"; then -+ rm -rf "${kerneldir}/debian"/* -+ -+ # @TODO: is this idempotent? -+ # shellcheck disable=SC2016 -+ sed -i -e 's/^KBUILD_IMAGE := \$(boot)\/Image\.gz$/KBUILD_IMAGE := \$(boot)\/Image/' "${kerneldir}/arch/arm64/Makefile" -+ -+ # cp with -p to preserve the original dates -+ cp -p "${SRC}/${builddeb}" "${kernel_package_dir}/builddeb" -+ cp -p "${SRC}/${mkdebian}" "${kernel_package_dir}/mkdebian" -+ -+ chmod 755 "${kernel_package_dir}/builddeb" "${kernel_package_dir}/mkdebian" -+ mark_fasthash_done # will do git commit, associate fasthash to real hash. -+ fi -+ -+ elif linux-version compare "${version}" ge 5.8.17 && -+ linux-version compare "${version}" le 5.9 || -+ linux-version compare "${version}" ge 5.9.2; then -+ display_alert "Adjusting" "packaging" "info" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/patch/misc/general-packaging-5.8-9.y.patch" "applying" -+ elif linux-version compare "${version}" ge 5.6; then -+ display_alert "Adjusting" "packaging" "info" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/patch/misc/general-packaging-5.6.y.patch" "applying" -+ elif linux-version compare "${version}" ge 5.3; then -+ display_alert "Adjusting" "packaging" "info" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/patch/misc/general-packaging-5.3.y.patch" "applying" -+ fi -+ -+ if [[ "${version}" == "4.19."* ]] && [[ "$LINUXFAMILY" == sunxi* || "$LINUXFAMILY" == meson64 || -+ "$LINUXFAMILY" == mvebu64 || "$LINUXFAMILY" == mt7623 || "$LINUXFAMILY" == mvebu ]]; then -+ display_alert "Adjusting" "packaging" "info" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/patch/misc/general-packaging-4.19.y.patch" "applying" -+ fi -+ -+ if [[ "${version}" == "4.19."* ]] && [[ "$LINUXFAMILY" == rk35xx ]]; then -+ display_alert "Adjusting" "packaging" "info" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/patch/misc/general-packaging-4.19.y-rk35xx.patch" "applying" -+ fi -+ -+ if [[ "${version}" == "4.14."* ]] && [[ "$LINUXFAMILY" == s5p6818 || "$LINUXFAMILY" == mvebu64 || -+ "$LINUXFAMILY" == imx7d || "$LINUXFAMILY" == odroidxu4 || "$LINUXFAMILY" == mvebu ]]; then -+ display_alert "Adjusting" "packaging" "info" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/patch/misc/general-packaging-4.14.y.patch" "applying" -+ fi -+ -+ if [[ "${version}" == "4.4."* || "${version}" == "4.9."* ]] && -+ [[ "$LINUXFAMILY" == rockpis || "$LINUXFAMILY" == rk3399 ]]; then -+ display_alert "Adjusting" "packaging" "info" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/patch/misc/general-packaging-4.4.y-rk3399.patch" "applying" -+ fi -+ -+ if [[ "${version}" == "4.4."* ]] && -+ [[ "$LINUXFAMILY" == rockchip64 || "$LINUXFAMILY" == station* ]]; then -+ display_alert "Adjusting" "packaging" "info" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/patch/misc/general-packaging-4.4.y-rockchip64.patch" "applying" -+ fi -+ -+ if [[ "${version}" == "4.4."* ]] && [[ "$LINUXFAMILY" == rockchip || "$LINUXFAMILY" == rk322x ]]; then -+ display_alert "Adjusting" "packaging" "info" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/patch/misc/general-packaging-4.4.y.patch" "applying" -+ fi -+ -+ if [[ "${version}" == "4.9."* ]] && [[ "$LINUXFAMILY" == meson64 || "$LINUXFAMILY" == odroidc4 ]]; then -+ display_alert "Adjusting" "packaging" "info" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/patch/misc/general-packaging-4.9.y.patch" "applying" -+ fi -+ -+} -diff --git a/lib/functions/compilation/sources.sh b/lib/functions/compilation/sources.sh -index 1fcacf8a3..b4dd11c17 100644 ---- a/lib/functions/compilation/sources.sh -+++ b/lib/functions/compilation/sources.sh -@@ -1,15 +1,15 @@ - function fetch_sources_kernel_uboot_atf() { -- if [[ -n $BOOTSOURCE ]]; then -- display_alert "Downloading sources" "u-boot" "git" -- fetch_from_repo "$BOOTSOURCE" "$BOOTDIR" "$BOOTBRANCH" "yes" # fetch_from_repo -- fi -- - if [[ -n $KERNELSOURCE ]]; then - display_alert "Downloading sources" "kernel" "git" - GIT_COLD_BUNDLE_URL="${MAINLINE_KERNEL_COLD_BUNDLE_URL}" \ - fetch_from_repo "$KERNELSOURCE" "$KERNELDIR" "$KERNELBRANCH" "yes" - fi - -+ if [[ -n $BOOTSOURCE ]]; then -+ display_alert "Downloading sources" "u-boot" "git" -+ fetch_from_repo "$BOOTSOURCE" "$BOOTDIR" "$BOOTBRANCH" "yes" # fetch_from_repo -+ fi -+ - if [[ -n $ATFSOURCE ]]; then - display_alert "Downloading sources" "atf" "git" - fetch_from_repo "$ATFSOURCE" "$ATFDIR" "$ATFBRANCH" "yes" -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 39792dbe5..2e720a66f 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -69,27 +69,54 @@ source "${SRC}"/lib/functions/compilation/debs.sh - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/compilation/extra-drivers.sh --# shellcheck source=lib/functions/compilation/extra-drivers.sh --source "${SRC}"/lib/functions/compilation/extra-drivers.sh -+### lib/functions/compilation/kernel.sh -+# shellcheck source=lib/functions/compilation/kernel.sh -+source "${SRC}"/lib/functions/compilation/kernel.sh - - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/compilation/kernel.sh --# shellcheck source=lib/functions/compilation/kernel.sh --source "${SRC}"/lib/functions/compilation/kernel.sh -+### lib/functions/compilation/patch/apply.sh -+# shellcheck source=lib/functions/compilation/patch/apply.sh -+source "${SRC}"/lib/functions/compilation/patch/apply.sh -+ -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/patch/fasthash.sh -+# shellcheck source=lib/functions/compilation/patch/fasthash.sh -+source "${SRC}"/lib/functions/compilation/patch/fasthash.sh -+ -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/patch/kernel-bootsplash.sh -+# shellcheck source=lib/functions/compilation/patch/kernel-bootsplash.sh -+source "${SRC}"/lib/functions/compilation/patch/kernel-bootsplash.sh -+ -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/patch/kernel-drivers.sh -+# shellcheck source=lib/functions/compilation/patch/kernel-drivers.sh -+source "${SRC}"/lib/functions/compilation/patch/kernel-drivers.sh - - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/compilation/patching.sh --# shellcheck source=lib/functions/compilation/patching.sh --source "${SRC}"/lib/functions/compilation/patching.sh -+### lib/functions/compilation/patch/kernel-pkg.sh -+# shellcheck source=lib/functions/compilation/patch/kernel-pkg.sh -+source "${SRC}"/lib/functions/compilation/patch/kernel-pkg.sh - - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - -From 8939a9142a7e08f0dae8bc866811687119501c5e Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 18 Feb 2022 04:17:22 +0100 -Subject: [PATCH] [wip] git: experiment with stable kernel bundle, and all - tags. nice, but for what? - -- also: never delete working copy, exit with error instead. ---- - lib/functions/configuration/main-config.sh | 6 ++++-- - lib/functions/general/git.sh | 34 +++++++++++++----------------- - 2 files changed, 19 insertions(+), 21 deletions(-) - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 800845483..722371f3e 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -112,8 +112,10 @@ function do_main_configuration() { - # used by multiple sources - reduce code duplication - [[ $USE_MAINLINE_GOOGLE_MIRROR == yes ]] && MAINLINE_MIRROR=google - -- # URL for the git bundle used to "bootstrap" local git copies. -- export MAINLINE_KERNEL_COLD_BUNDLE_URL="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/clone.bundle" -+ # URL for the git bundle used to "bootstrap" local git copies without too much server load. This applies independently of git mirror below. -+ export MAINLINE_KERNEL_TORVALDS_BUNDLE_URL="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/clone.bundle" # this is plain torvalds, single branch -+ export MAINLINE_KERNEL_STABLE_BUNDLE_URL="https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/clone.bundle" # this is all stable branches. with tags! -+ export MAINLINE_KERNEL_COLD_BUNDLE_URL="${MAINLINE_KERNEL_COLD_BUNDLE_URL:-$MAINLINE_KERNEL_STABLE_BUNDLE_URL}" # default to stable. it's bigger but more useful for developers. - - case $MAINLINE_MIRROR in - google) -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index e6a2fe521..6b043832b 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -76,15 +76,10 @@ fetch_from_repo() { - - display_alert "Git working dir" "${git_work_dir}" "debug" - -- # check if existing remote URL for the repo or branch does not match current one -- # may not be supported by older git versions -- # Check the folder as a git repository. -- # Then the target URL matches the local URL. - -+ # "Sanity check" since we only support one "origin" - if [[ "$(git rev-parse --git-dir)" == ".git" && "$url" != *"$(git remote get-url origin | sed 's/^.*@//' | sed 's/^.*\/\///')" ]]; then -- display_alert "Remote URL does not match, removing existing local copy" "$dir $ref_name" "warn" -- rm -rf "${git_work_dir}" -- mkdir -p "${git_work_dir}" -+ exit_with_error "Remote URL does not match. Stopping!" "${git_work_dir} $dir $ref_name" "warn" - fi - - if [[ "$(git rev-parse --git-dir)" != ".git" ]]; then -@@ -187,25 +182,26 @@ fetch_from_repo() { - # - add the warmup as remote, fetch from it; export it as a cached bundle for next time. - - # remote was updated, fetch and check out updates, but not tags; tags pull their respective commits too, making it a huge fetch. -- display_alert "Fetching updates from origin" "$dir $ref_name " -+ display_alert "Fetching updates from origin" "$dir $ref_name" - case $ref_type in -- branch | commit) improved_git_fetch origin "${ref_name}" ;; -- tag) improved_git_fetch origin tags/"${ref_name}" ;; -- head) improved_git_fetch origin HEAD ;; -+ branch | commit) improved_git_fetch --tags origin "${ref_name}" ;; -+ tag) improved_git_fetch --tags origin tags/"${ref_name}" ;; -+ head) improved_git_fetch --tags origin HEAD ;; - esac - display_alert "Origin fetch completed, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size again - - display_alert "Checking out" "$dir $ref_name" - improved_git checkout -f -q FETCH_HEAD - improved_git clean -q -d -f -- -- if [[ $has_fetched_from_bundle -gt 0 ]]; then -- display_alert "Pre-pruning, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -- echo -n "${remote_hash}" > .git/shallow # commit to keep for shallowing, can be something else. for now is full prune. -- improved_git remote remove "${git_cold_bundle_remote_id}" -- improved_git reflog expire --expire=0 --all -- improved_git gc --prune=all -- fi -+ display_alert "After checkout, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -+ -+ #if [[ $has_fetched_from_bundle -gt 0 ]]; then -+ # display_alert "Pre-pruning, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -+ # echo -n "${remote_hash}" > .git/shallow # commit to keep for shallowing, can be something else. for now is full prune. -+ # improved_git remote remove "${git_cold_bundle_remote_id}" -+ # improved_git reflog expire --expire=0 --all -+ # improved_git gc --prune=all -+ #fi - - elif [[ -n $(git status -uno --porcelain --ignore-submodules=all) ]]; then # if not changed, but dirty... - display_alert "Cleaning git dir" "$(git status -s | wc -l) files" # working directory is not clean, show it - -From b853358ccab458dce0efca486ec5a15fda4ec193 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 18 Feb 2022 04:09:37 +0100 -Subject: [PATCH] [wip] disable make clean during packaging. I wanna rebuild - fast, always [NO PR?] - ---- - packages/armbian/builddeb | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/packages/armbian/builddeb b/packages/armbian/builddeb -index 0163d401a..d57ba1d76 100755 ---- a/packages/armbian/builddeb -+++ b/packages/armbian/builddeb -@@ -370,10 +370,11 @@ if [ "$ARCH" != "um" ]; then - else - # Clean up the executables that are left over from - # cross-compilation for a different host architecture. -- ( -- cd $srctree -- make M=scripts clean -- ) -+ #( -+ # cd $srctree -+ # make M=scripts clean -+ #) -+ echo "-- NOT CLEANING before packaging headers. " 1>&2 - deploy_kernel_headers $kernel_headers_dir - create_package $kernel_headers_packagename $kernel_headers_dir "headers" - fi - -From d61b6ddd982f316604bdedd82a0907beef7cfa0b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 17 Feb 2022 22:21:33 +0100 -Subject: [PATCH] armbian-next: export CHOSEN_KERNEL_WITH_ARCH for reporting - info - -- fix info gathering, parse all boards first, and stop if some failed -- fix KERNEL_TARGET regex by including optional "export " -- add export from info to CSV, very basic stuff, but works ---- - lib/functions/main/config-prepare.sh | 1 + - lib/tools/info.py | 21 +++++++++------ - lib/tools/json2csv.py | 51 ++++++++++++++++++++++++++++++++++++ - 3 files changed, 65 insertions(+), 8 deletions(-) - -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index b416b1302..bb3831889 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -173,6 +173,7 @@ function prepare_and_config_main_build_single() { - export CHOSEN_ROOTFS=${BSP_CLI_PACKAGE_NAME} - export CHOSEN_DESKTOP=armbian-${RELEASE}-desktop-${DESKTOP_ENVIRONMENT} - export CHOSEN_KSRC=linux-source-${BRANCH}-${LINUXFAMILY} -+ export CHOSEN_KERNEL_WITH_ARCH=${CHOSEN_KERNEL}-${ARCH} # Only for reporting purposes. - - display_alert "Done with prepare_and_config_main_build_single" "${BOARD}.${BOARD_TYPE}" "info" - } -diff --git a/lib/tools/info.py b/lib/tools/info.py -index af932eefa..088d4738a 100755 ---- a/lib/tools/info.py -+++ b/lib/tools/info.py -@@ -135,8 +135,8 @@ def parse_board_file_for_static_info(board_file, board_id): - hw_desc_clean = hw_desc_line.strip("# ").strip("\n") - - # Parse KERNEL_TARGET line. -- kernel_target_matches = re.findall(r"^KERNEL_TARGET=\"(.*)\"", "\n".join(file_lines), re.MULTILINE) -- kernel_targets = kernel_target_matches[0].split(",") -+ kernel_target_matches = re.findall(r"^(export )?KERNEL_TARGET=\"(.*)\"", "\n".join(file_lines), re.MULTILINE) -+ kernel_targets = kernel_target_matches[0][1].split(",") - eprint("Possible kernel branches for board: ", board_id, " : ", kernel_targets) - - return { -@@ -167,16 +167,21 @@ if True: - all_boards = get_all_boards_list_from_armbian(armbian_src_path) - # eprint(json.dumps(all_boards, indent=4, sort_keys=True)) - -+ # first, gather the board_info for every board. if any fail, stop. -+ info_for_board = {} -+ for board in all_boards.keys(): -+ try: -+ board_info = parse_board_file_for_static_info(all_boards[board], board) -+ info_for_board[board] = board_info -+ except BaseException as e: -+ eprint("** Failed to parse board file {} static: {}".format(board, e)) -+ raise e -+ # now loop over gathered infos - every_info = [] - with concurrent.futures.ProcessPoolExecutor(max_workers=32) as executor: - every_future = [] - for board in all_boards.keys(): -- try: -- board_info = parse_board_file_for_static_info(all_boards[board], board) -- except: -- eprint("** Failed to parse board file {} static.".format(board)) -- continue -- -+ board_info = info_for_board[board] - for possible_branch in board_info["BOARD_POSSIBLE_BRANCHES"]: - all_params = common_compile_params | board_compile_params | {"BRANCH": possible_branch} - eprint("Submitting future for board {} with BRANCH={}".format(board, possible_branch)) -diff --git a/lib/tools/json2csv.py b/lib/tools/json2csv.py -new file mode 100755 -index 000000000..7933ed9d6 ---- /dev/null -+++ b/lib/tools/json2csv.py -@@ -0,0 +1,51 @@ -+#!/usr/bin/env python3 -+import collections.abc -+import json -+import sys -+ -+ -+def eprint(*args, **kwargs): -+ print(*args, file=sys.stderr, **kwargs) -+ -+ -+def flatten(d, parent_key='', sep='_'): -+ items = [] -+ for k, v in d.items(): -+ new_key = parent_key + sep + k if parent_key else k -+ if isinstance(v, collections.abc.MutableMapping): -+ items.extend(flatten(v, new_key, sep=sep).items()) -+ else: -+ items.append((new_key, v)) -+ return dict(items) -+ -+ -+json_object = json.load(sys.stdin) -+eprint("Loaded {} objects from stdin...".format(len(json_object))) -+ -+flat = [] -+for obj in json_object: -+ flat.append(flatten(obj, '', '.')) -+ -+columns_map = {} -+for obj in flat: -+ # get the string keys -+ for key in obj.keys(): -+ value = obj[key] -+ if type(value) == str: -+ columns_map[key] = True -+ -+columns = columns_map.keys() -+ -+eprint("columns: {}".format(columns_map)) -+ -+eprint("columns: {}".format(columns)) -+ -+import csv -+ -+with open('boards_vs_branches.csv', 'w', newline='') as csvfile: -+ fieldnames = columns -+ writer = csv.DictWriter(csvfile, fieldnames=fieldnames, extrasaction='ignore') -+ -+ writer.writeheader() -+ for obj in flat: -+ writer.writerow(obj) - -From dcf101ccbcb61fb4bf0af97f8592f6f166a20b92 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 17 Feb 2022 21:47:02 +0100 -Subject: [PATCH] [squash] remove ddk bullshit from KERNEL_TARGET - ---- - config/boards/rpi4b.wip | 2 +- - config/boards/uefi-arm64.conf | 2 +- - config/boards/uefi-x86.conf | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/config/boards/rpi4b.wip b/config/boards/rpi4b.wip -index b471e3421..c78b14060 100644 ---- a/config/boards/rpi4b.wip -+++ b/config/boards/rpi4b.wip -@@ -1,7 +1,7 @@ - # Broadcom BCM2711 quad core 1-8Gb RAM SoC USB3 GBE USB-C WiFi/BT - export BOARD_NAME="Raspberry Pi 4" - export BOARDFAMILY="bcm2711" --export KERNEL_TARGET="ddk,current,edge" -+export KERNEL_TARGET="legacy,current,edge" - export FK__MACHINE_MODEL="Raspberry Pi 4 Model B" # this is passed to flash-kernel. - export ASOUND_STATE="asound.state.rpi" - -diff --git a/config/boards/uefi-arm64.conf b/config/boards/uefi-arm64.conf -index 523e488ce..8f5e201f7 100644 ---- a/config/boards/uefi-arm64.conf -+++ b/config/boards/uefi-arm64.conf -@@ -1,4 +1,4 @@ - # aarch64 via UEFI for all UEFI-enabled boards - export BOARD_NAME="UEFI arm64" - export BOARDFAMILY="uefi-arm64" --export KERNEL_TARGET="ddk,current,edge" -+export KERNEL_TARGET="legacy,current,edge" -diff --git a/config/boards/uefi-x86.conf b/config/boards/uefi-x86.conf -index 186e5fdba..7ff375bb8 100644 ---- a/config/boards/uefi-x86.conf -+++ b/config/boards/uefi-x86.conf -@@ -1,4 +1,4 @@ - # x86_64 via UEFI/BIOS for all boards - export BOARD_NAME="UEFI x86" - export BOARDFAMILY="uefi-x86" --export KERNEL_TARGET="ddk,current,edge" -+export KERNEL_TARGET="legacy,current,edge" - -From 7183b3290b9df1c4fce8307813702c23846be817 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 17 Feb 2022 15:49:27 +0100 -Subject: [PATCH] armbian-next: remove file logging of aggregation stuff. - config phase can't touch disk anymore. - ---- - lib/functions/configuration/aggregation.sh | 46 ------------------------------ - lib/functions/configuration/main-config.sh | 11 ------- - 2 files changed, 57 deletions(-) - -diff --git a/lib/functions/configuration/aggregation.sh b/lib/functions/configuration/aggregation.sh -index e89275995..0dc729544 100644 ---- a/lib/functions/configuration/aggregation.sh -+++ b/lib/functions/configuration/aggregation.sh -@@ -5,22 +5,12 @@ - # Write to variables : - # - aggregated_content - aggregate_content() { -- [[ "${CONFIG_DEFS_ONLY}" == "yes" ]] && return 0 # Don't write to disk in this case. -- LOG_OUTPUT_FILE="$SRC/output/${LOG_SUBPATH}/potential-paths.log" -- echo -e "Potential paths :" >> "${LOG_OUTPUT_FILE}" -- show_checklist_variables potential_paths - for filepath in ${potential_paths}; do - if [[ -f "${filepath}" ]]; then -- echo -e "${filepath/"$SRC"\//} yes" >> "${LOG_OUTPUT_FILE}" - aggregated_content+=$(cat "${filepath}") - aggregated_content+="${separator}" -- # else -- # echo -e "${filepath/"$SRC"\//} no\n" >> "${LOG_OUTPUT_FILE}" - fi -- - done -- echo "" >> "${LOG_OUTPUT_FILE}" -- unset LOG_OUTPUT_FILE - } - - get_all_potential_paths() { -@@ -35,14 +25,6 @@ get_all_potential_paths() { - done - done - done -- # for ppath in ${potential_paths}; do -- # echo "Checking for ${ppath}" -- # if [[ -f "${ppath}" ]]; then -- # echo "OK !|" -- # else -- # echo "Nope|" -- # fi -- # done - } - - # Environment variables expected : -@@ -110,31 +92,3 @@ cleanup_list() { - list_to_clean="${list_to_clean%"${list_to_clean##*[![:space:]]}"}" - echo ${list_to_clean} - } -- --# is a formatted output of the values of variables --# from the list at the place of the function call. --# --# The LOG_OUTPUT_FILE variable must be defined in the calling function --# before calling the `show_checklist_variables` function and unset after. --# --show_checklist_variables() { -- [[ "${CONFIG_DEFS_ONLY}" == "yes" ]] && return 0 # Don't write to disk in this case. -- local checklist=$* -- local var pval -- local log_file=${LOG_OUTPUT_FILE:-"${SRC}"/output/${LOG_SUBPATH}/trash.log} -- local _line=${BASH_LINENO[0]} -- local _function=${FUNCNAME[1]} -- local _file=$(basename "${BASH_SOURCE[1]}") -- -- echo -e "Show variables in function: $_function" "[$_file:$_line]\n" >> $log_file -- -- for var in $checklist; do -- eval pval=\$$var -- echo -e "\n$var =:" >> $log_file -- if [ $(echo "$pval" | gawk -F"/" '{print NF}') -ge 4 ]; then -- printf "%s\n" $pval >> $log_file -- else -- printf "%-30s %-30s %-30s %-30s\n" $pval >> $log_file -- fi -- done --} -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index e21bb2de9..800845483 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -388,7 +388,6 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - PACKAGE_LIST_ADDITIONAL="$(one_line aggregate_all_cli "packages.additional" " ")" - - LOG_OUTPUT_FILE="$SRC/output/${LOG_SUBPATH}/debootstrap-list.log" -- show_checklist_variables "DEBOOTSTRAP_LIST DEBOOTSTRAP_COMPONENTS PACKAGE_LIST PACKAGE_LIST_ADDITIONAL PACKAGE_LIST_UNINSTALL" - - # Dependent desktop packages - # Myy : Sources packages from file here -@@ -397,7 +396,6 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - if [[ $BUILD_DESKTOP == "yes" ]]; then - PACKAGE_LIST_DESKTOP+="$(one_line aggregate_all_desktop "packages" " ")" - echo -e "\nGroups selected ${DESKTOP_APPGROUPS_SELECTED} -> PACKAGES :" >> "${LOG_OUTPUT_FILE}" -- show_checklist_variables PACKAGE_LIST_DESKTOP - fi - unset LOG_OUTPUT_FILE - -@@ -509,8 +507,6 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - PACKAGE_MAIN_LIST="$(echo ${PACKAGE_MAIN_LIST})" - fi - -- [[ "${CONFIG_DEFS_ONLY}" == "yes" ]] || write_deboostrap_list_debug_log -- - # Give the option to configure DNS server used in the chroot during the build process - [[ -z $NAMESERVER ]] && NAMESERVER="1.0.0.1" # default is cloudflare alternate - -@@ -527,13 +523,6 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - display_alert "Done with main-config.sh" "do_main_configuration" "debug" - } - --function write_deboostrap_list_debug_log() { -- LOG_OUTPUT_FILE="$SRC/output/${LOG_SUBPATH}/debootstrap-list.log" -- echo -e "\nVariables after manual configuration" >> $LOG_OUTPUT_FILE -- show_checklist_variables "DEBOOTSTRAP_COMPONENTS DEBOOTSTRAP_LIST PACKAGE_LIST PACKAGE_MAIN_LIST" -- unset LOG_OUTPUT_FILE --} -- - function write_config_summary_output_file() { - local build_script_env_file="${DEST}/${LOG_SUBPATH}/output.log" - local debug_dpkg_arch debug_uname debug_virt debug_src_mount debug_src_perms debug_src_temp_perms - -From 4f858ace7b8674c8d5555e311bd053819555648a Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 17 Feb 2022 03:24:08 +0100 -Subject: [PATCH] [WiP] git cold bundle; no: shallow clones/fetched; yes: - locally packed repo - ---- - config/sources/families/include/sunxi64_common.inc | 80 ++--- - config/sources/families/include/sunxi_common.inc | 81 ++--- - lib/functions/compilation/debs.sh | 4 +- - lib/functions/compilation/extra-drivers.sh | 1 + - lib/functions/compilation/kernel.sh | 11 +- - lib/functions/compilation/patching.sh | 2 + - lib/functions/compilation/sources.sh | 3 +- - lib/functions/compilation/uboot.sh | 4 +- - lib/functions/configuration/main-config.sh | 7 +- - lib/functions/general/git.sh | 338 ++++++++------------- - lib/functions/multi/build-all.sh | 2 +- - 11 files changed, 194 insertions(+), 339 deletions(-) - -diff --git a/config/sources/families/include/sunxi64_common.inc b/config/sources/families/include/sunxi64_common.inc -index 6a570b341..c7a3e0a20 100644 ---- a/config/sources/families/include/sunxi64_common.inc -+++ b/config/sources/families/include/sunxi64_common.inc -@@ -1,44 +1,42 @@ - enable_extension "sunxi-tools" --ARCH=arm64 --ATF_TARGET_MAP="PLAT=$ATF_PLAT DEBUG=1 bl31;;build/$ATF_PLAT/debug/bl31.bin" --BOOTDELAY=1 -- --BOOTPATCHDIR='u-boot-sunxi' --BOOTENV_FILE='sunxi.txt' --UBOOT_TARGET_MAP=';;u-boot-sunxi-with-spl.bin' --BOOTSCRIPT='boot-sun50i-next.cmd:boot.cmd' --LINUXFAMILY=sunxi64 -+export ARCH=arm64 -+export ATF_TARGET_MAP="PLAT=$ATF_PLAT DEBUG=1 bl31;;build/$ATF_PLAT/debug/bl31.bin" -+export BOOTDELAY=1 -+ -+export BOOTPATCHDIR='u-boot-sunxi' -+export BOOTENV_FILE='sunxi.txt' -+export UBOOT_TARGET_MAP=';;u-boot-sunxi-with-spl.bin' -+export BOOTSCRIPT='boot-sun50i-next.cmd:boot.cmd' -+export LINUXFAMILY=sunxi64 -+export KERNELSOURCE=$MAINLINE_KERNEL_SOURCE -+export KERNELPATCHDIR='sunxi-'$BRANCH - - case $BRANCH in - -- legacy) KERNEL_VERSION_LEVEL="5.10" ;; -- -- current) KERNEL_VERSION_LEVEL="5.15" ;; -- -- edge) KERNEL_VERSION_LEVEL="5.16" ;; --esac -- --case "$KERNEL_VERSION_LEVEL" in -+ legacy) -+ export KERNELBRANCH="branch:linux-5.10.y" -+ export KERNELBRANCH_MEGOUS="branch:orange-pi-5.10" -+ ;; - -- 5.10 | 5.15 | 5.16) -- KERNELSOURCE=$MAINLINE_KERNEL_SOURCE -- KERNELSOURCENAME='name=origin' -- KERNELBRANCH="branch:linux-${KERNEL_VERSION_LEVEL}.y" -+ current) -+ export KERNELBRANCH="branch:linux-5.15.y" -+ export KERNELBRANCH_MEGOUS="branch:orange-pi-5.15" - ;; - -- *) -- KERNELSOURCE="https://github.com/megous/linux" -- KERNELSOURCENAME='name=megous' -- KERNELBRANCH="branch:orange-pi-$KERNEL_VERSION_LEVEL" -+ edge) -+ export KERNELBRANCH="branch:linux-5.16.y" -+ export KERNELBRANCH_MEGOUS="branch:orange-pi-5.16" - ;; - esac - --KERNELPATCHDIR='sunxi-'$BRANCH -+# Hack for easily using megous for tests. -+if [[ "$USE_MEGOUS" == "yes" ]]; then -+ display_alert "Using megous/linux for kernel" "USE_MEGOUS: ${USE_MEGOUS}" "debug" -+ export KERNELSOURCE="https://github.com/megous/linux" -+ export KERNELBRANCH="${KERNELBRANCH_MEGOUS}" -+fi - --# An optional parameter for switching to a git object such as a tag, commit, --# or a specific branch. The object must exist in the local repository. --# KERNELSWITCHOBJ="" --# tag|obj|commit=v5.10.15|megous/$branch|$hash -+unset KERNELBRANCH_MEGOUS - - family_tweaks() { - # execute specific tweaks function if present -@@ -71,25 +69,3 @@ setup_write_uboot_platform() { - [[ -n $dev && $dev == mmcblk* ]] && DEVICE="/dev/$dev" - fi - } -- --# default settings for kernel variables of the original kernel --# VAR_SHALLOW_ORIGINAL=var_origin_kernel --# Note: rpardini: this is called via VAR_SHALLOW_ORIGINAL during fetch_from_repo via waiter_local_repo --var_origin_kernel() { -- url=$MAINLINE_KERNEL_SOURCE -- name='origin' -- branch="linux-${KERNEL_VERSION_LEVEL}.y" -- start_tag="v$KERNEL_VERSION_LEVEL" -- -- # checking the reachability of the initial tag -- if [ "$(git ls-remote --tags $url $start_tag | awk -F'/' '{if (NR == 1) print $NF}' || true)" != "$start_tag" ]; then -- exit 177 -- fi -- -- # Exceptions to the rule are when the desired tag is not -- # a bifurcation point at which all previous merge branches converge. -- # This is due to the subsequent extraction of `megous` -- [ "$KERNEL_VERSION_LEVEL" == "5.12" ] && start_tag="v5.12-rc7" -- -- return 0 # don't fail due to short-circuit above --} -diff --git a/config/sources/families/include/sunxi_common.inc b/config/sources/families/include/sunxi_common.inc -index c84c45186..c450fecbd 100644 ---- a/config/sources/families/include/sunxi_common.inc -+++ b/config/sources/families/include/sunxi_common.inc -@@ -1,44 +1,43 @@ - enable_extension "sunxi-tools" --ARCH=armhf --BOOTDELAY=1 --BOOTPATCHDIR='u-boot-sunxi' --UBOOT_TARGET_MAP=';;u-boot-sunxi-with-spl.bin' --BOOTSCRIPT="boot-sunxi.cmd:boot.cmd" --BOOTENV_FILE='sunxi.txt' --LINUXFAMILY=sunxi --UBOOT_FW_ENV='0x88000,0x20000' # /etc/fw_env.config offset and env size --ASOUND_STATE='asound.state.sunxi-next' --GOVERNOR=ondemand -+export ARCH=armhf -+export BOOTDELAY=1 -+export BOOTPATCHDIR='u-boot-sunxi' -+export UBOOT_TARGET_MAP=';;u-boot-sunxi-with-spl.bin' -+export BOOTSCRIPT="boot-sunxi.cmd:boot.cmd" -+export BOOTENV_FILE='sunxi.txt' -+export LINUXFAMILY=sunxi -+export UBOOT_FW_ENV='0x88000,0x20000' # /etc/fw_env.config offset and env size -+export ASOUND_STATE='asound.state.sunxi-next' -+export GOVERNOR=ondemand -+export KERNELSOURCE=$MAINLINE_KERNEL_SOURCE -+export KERNELPATCHDIR='sunxi-'$BRANCH - - case $BRANCH in - -- legacy) KERNEL_VERSION_LEVEL="5.10" ;; -- current) KERNEL_VERSION_LEVEL="5.15" ;; -- edge) KERNEL_VERSION_LEVEL="5.16" ;; -- --esac -- --case "$KERNEL_VERSION_LEVEL" in -+ legacy) -+ export KERNELBRANCH="branch:linux-5.10.y" -+ export KERNELBRANCH_MEGOUS="branch:orange-pi-5.10" -+ ;; - -- 5.10 | 5.15 | 5.16) -- KERNELSOURCE=$MAINLINE_KERNEL_SOURCE -- KERNELSOURCENAME='name=origin' -- KERNELBRANCH="branch:linux-${KERNEL_VERSION_LEVEL}.y" -+ current) -+ export KERNELBRANCH="branch:linux-5.15.y" -+ export KERNELBRANCH_MEGOUS="branch:orange-pi-5.15" - ;; - -- *) -- KERNELSOURCE="https://github.com/megous/linux" -- KERNELSOURCENAME='name=megous' -- KERNELBRANCH="branch:orange-pi-$KERNEL_VERSION_LEVEL" -+ edge) -+ export KERNELBRANCH="branch:linux-5.16.y" -+ export KERNELBRANCH_MEGOUS="branch:orange-pi-5.16" - ;; - esac - --KERNELPATCHDIR='sunxi-'$BRANCH -+# Hack for easily using megous for tests. -+if [[ "$USE_MEGOUS" == "yes" ]]; then -+ display_alert "Using megous/linux for kernel" "USE_MEGOUS: ${USE_MEGOUS}" "debug" -+ export KERNELSOURCE="https://github.com/megous/linux" -+ export KERNELBRANCH="${KERNELBRANCH_MEGOUS}" -+fi - --# An optional parameter for switching to a git object such as a tag, commit, --# or a specific branch. The object must exist in the local repository. --# KERNELSWITCHOBJ="tag=v5.10.15" --# tag|obj|commit=v5.10.15|megous/$branch|$hash -+unset KERNELBRANCH_MEGOUS - - family_tweaks() { - # execute specific tweaks function if present -@@ -78,25 +77,3 @@ setup_write_uboot_platform() { - done - fi - } -- --# default settings for kernel variables of the original kernel --# VAR_SHALLOW_ORIGINAL=var_origin_kernel --# Note: rpardini: this is called via VAR_SHALLOW_ORIGINAL during fetch_from_repo via waiter_local_repo --var_origin_kernel() { -- url=$MAINLINE_KERNEL_SOURCE -- name='origin' -- branch="linux-${KERNEL_VERSION_LEVEL}.y" -- start_tag="v$KERNEL_VERSION_LEVEL" -- -- # checking the reachability of the initial tag -- if [ "$(git ls-remote --tags $url $start_tag | awk -F'/' '{if (NR == 1) print $NF}' || true)" != "$start_tag" ]; then -- exit 177 -- fi -- -- # Exceptions to the rule are when the desired tag is not -- # a bifurcation point at which all previous merge branches converge. -- # This is due to the subsequent extraction of `megous` -- [ "$KERNEL_VERSION_LEVEL" == "5.12" ] && start_tag="v5.12-rc7" -- -- return 0 # don't fail due to short-circuit above --} -diff --git a/lib/functions/compilation/debs.sh b/lib/functions/compilation/debs.sh -index b00d12c60..a48bd3058 100644 ---- a/lib/functions/compilation/debs.sh -+++ b/lib/functions/compilation/debs.sh -@@ -180,13 +180,13 @@ compile_xilinx_bootgen() { - - # Compile and install only if git commit hash changed - # need to check if /usr/local/bin/bootgen to detect new Docker containers with old cached sources -- if [[ ! -f .commit_id || $(improved_git rev-parse @ 2> /dev/null) != $(< .commit_id) || ! -f /usr/local/bin/bootgen ]]; then -+ if [[ ! -f .commit_id || $(git rev-parse @ 2> /dev/null) != $(< .commit_id) || ! -f /usr/local/bin/bootgen ]]; then - display_alert "Compiling" "xilinx-bootgen" "info" - make -s clean > /dev/null - make -s -j$(nproc) bootgen > /dev/null - mkdir -p /usr/local/bin/ - install bootgen /usr/local/bin > /dev/null 2>&1 -- improved_git rev-parse @ 2> /dev/null > .commit_id -+ git rev-parse @ 2> /dev/null > .commit_id - fi - - popd -diff --git a/lib/functions/compilation/extra-drivers.sh b/lib/functions/compilation/extra-drivers.sh -index d41be6307..f731b4319 100644 ---- a/lib/functions/compilation/extra-drivers.sh -+++ b/lib/functions/compilation/extra-drivers.sh -@@ -166,6 +166,7 @@ prepare_extra_kernel_drivers() { - if [ "$?" -ne "0" ]; then - # then use rc branch - aufstag="5.x-rcN" -+ # @TODO: this does not do what you think it does; nonzero explode always - improved_git ls-remote --exit-code --heads https://github.com/sfjro/aufs5-standalone "aufs${aufstag}" > /dev/null - fi - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index e2232659d..d33c18f9f 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -61,7 +61,7 @@ function compile_kernel() { - display_alert "Pre-patch kernel version" "${pre_patch_version}" "debug" - - # read kernel git hash -- hash=$(improved_git --git-dir="$kerneldir"/.git rev-parse HEAD) -+ hash=$(git --git-dir="$kerneldir"/.git rev-parse HEAD) - - # Apply a series of patches if a series file exists - if test -f "${SRC}"/patch/kernel/"${KERNELPATCHDIR}"/series.conf; then -@@ -208,12 +208,7 @@ function compile_kernel() { - HASHTARGET="${SRC}/cache/hash$([[ ${BETA} == yes ]] && echo "-beta" || true)/linux-image-${BRANCH}-${LINUXFAMILY}" - OLDHASHTARGET=$(head -1 "${HASHTARGET}.githash" 2> /dev/null || true) - -- # check if OLDHASHTARGET commit exists otherwise use oldest -- if [[ -z ${KERNEL_VERSION_LEVEL} ]]; then -- git -C ${kerneldir} cat-file -t ${OLDHASHTARGET} > /dev/null 2>&1 && OLDHASHTARGET=$(git -C ${kerneldir} show HEAD~199 --pretty=format:"%H" --no-patch) -- else -- git -C ${kerneldir} cat-file -t ${OLDHASHTARGET} > /dev/null 2>&1 && OLDHASHTARGET=$(git -C ${kerneldir} rev-list --max-parents=0 HEAD) -- fi -+ git -C ${kerneldir} cat-file -t ${OLDHASHTARGET} > /dev/null 2>&1 && OLDHASHTARGET=$(git -C ${kerneldir} rev-list --max-parents=0 HEAD) - - [[ -z ${KERNELPATCHDIR} ]] && KERNELPATCHDIR=$LINUXFAMILY-$BRANCH - [[ -z ${LINUXCONFIG} ]] && LINUXCONFIG=linux-$LINUXFAMILY-$BRANCH -@@ -233,7 +228,7 @@ function compile_kernel() { - echo "${hash}" > "${HASHTARGET}.githash" - hash_watch_1=$(LC_COLLATE=C find -L "${SRC}/patch/kernel/${KERNELPATCHDIR}"/ -name '*.patch' -mindepth 1 -maxdepth 1 -printf '%s %P\n' 2> /dev/null | LC_COLLATE=C sort -n) - hash_watch_2=$(cat "${SRC}/config/kernel/${LINUXCONFIG}.config") -- echo "${hash_watch_1}${hash_watch_2}" | improved_git hash-object --stdin >> "${HASHTARGET}.githash" -+ echo "${hash_watch_1}${hash_watch_2}" | git hash-object --stdin >> "${HASHTARGET}.githash" - - display_alert "Finished updating kernel hashes" "${LINUXCONFIG} $kernel_packaging_target" "info" - fi -diff --git a/lib/functions/compilation/patching.sh b/lib/functions/compilation/patching.sh -index 99cb31719..7ebcef3ac 100644 ---- a/lib/functions/compilation/patching.sh -+++ b/lib/functions/compilation/patching.sh -@@ -120,8 +120,10 @@ apply_patch_series() { - awk '$0 ~ /^+.*patch$/{print $2}' | - xargs -I % sh -c 'rm -f %' - -+ set +e # has to tolerate error here to catch them - patch --batch --silent --no-backup-if-mismatch -p1 -N < $bzdir/"$p" >> $err_pt 2>&1 - flag=$? -+ set -e # back to normal, errors cause stop. - - case $flag in - 0) -diff --git a/lib/functions/compilation/sources.sh b/lib/functions/compilation/sources.sh -index 67fbad040..1fcacf8a3 100644 ---- a/lib/functions/compilation/sources.sh -+++ b/lib/functions/compilation/sources.sh -@@ -6,7 +6,8 @@ function fetch_sources_kernel_uboot_atf() { - - if [[ -n $KERNELSOURCE ]]; then - display_alert "Downloading sources" "kernel" "git" -- fetch_from_repo "$KERNELSOURCE" "$KERNELDIR" "$KERNELBRANCH" "yes" -+ GIT_COLD_BUNDLE_URL="${MAINLINE_KERNEL_COLD_BUNDLE_URL}" \ -+ fetch_from_repo "$KERNELSOURCE" "$KERNELDIR" "$KERNELBRANCH" "yes" - fi - - if [[ -n $ATFSOURCE ]]; then -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index d2d6447a2..053312875 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -9,7 +9,7 @@ function compile_uboot_target() { - - # needed for multiple targets and for calling compile_uboot directly - display_alert "${uboot_prefix} Checking out to clean sources" "{$BOOTSOURCEDIR} for ${target_make}" -- improved_git checkout -f -q HEAD -+ git checkout -f -q HEAD - - if [[ $CLEAN_LEVEL == *make* ]]; then - display_alert "${uboot_prefix}Cleaning" "${BOOTSOURCEDIR}" "info" -@@ -116,7 +116,7 @@ compile_uboot() { - # read uboot version - local version hash - version=$(grab_version "$ubootdir") -- hash=$(improved_git --git-dir="$ubootdir"/.git rev-parse HEAD) -+ hash=$(git --git-dir="$ubootdir"/.git rev-parse HEAD) - - display_alert "Compiling u-boot" "$version ${ubootdir}" "info" - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 25dd263a5..e21bb2de9 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -44,8 +44,8 @@ function do_main_configuration() { - cd "${SRC}" || exit - [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=14 - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 -- BUILD_REPOSITORY_URL=$(improved_git remote get-url $(improved_git remote 2> /dev/null | grep origin) 2> /dev/null) -- BUILD_REPOSITORY_COMMIT=$(improved_git describe --match=d_e_a_d_b_e_e_f --always --dirty 2> /dev/null) -+ BUILD_REPOSITORY_URL=$(git remote get-url "$(git remote 2> /dev/null | grep origin)" 2> /dev/null) -+ BUILD_REPOSITORY_COMMIT=$(git describe --match=d_e_a_d_b_e_e_f --always --dirty 2> /dev/null) - ROOTFS_CACHE_MAX=200 # max number of rootfs cache, older ones will be cleaned up - - if [[ $BETA == yes ]]; then -@@ -112,6 +112,9 @@ function do_main_configuration() { - # used by multiple sources - reduce code duplication - [[ $USE_MAINLINE_GOOGLE_MIRROR == yes ]] && MAINLINE_MIRROR=google - -+ # URL for the git bundle used to "bootstrap" local git copies. -+ export MAINLINE_KERNEL_COLD_BUNDLE_URL="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/clone.bundle" -+ - case $MAINLINE_MIRROR in - google) - MAINLINE_KERNEL_SOURCE='https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable' -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 37aff6b3c..e6a2fe521 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -2,159 +2,24 @@ - # This function retries Git operations to avoid failure in case remote is borked - # - improved_git() { -- local realgit=$(command -v git) -+ local real_git -+ real_git="$(command -v git)" - local retries=3 - local delay=10 -- local count=1 -+ local count=0 - while [ $count -lt $retries ]; do -- $realgit "$@" 2>&1 -- if [[ $? -eq 0 || -f .git/index.lock ]]; then -- retries=0 -- break -- fi -- let count=$count+1 -+ run_host_command_logged_raw "$real_git" --no-pager "$@" && return 0 # this gobbles up errors, but returns if OK, so everything after is error -+ count=$((count + 1)) -+ display_alert "improved_git try $count failed, retrying in ${delay} seconds" "git $*" "warn" - sleep $delay - done -+ display_alert "improved_git, too many retries" "git $*" "err" -+ return 17 # explode with error if this is reached, "too many retries" - } - --clean_up_repo() { -- local target_dir=$1 -- -- # Files that are not tracked by git and were added -- # when the patch was applied must be removed. -- improved_git -C $target_dir clean -qdf -- -- # Return the files that are tracked by git to the initial state. -- improved_git -C $target_dir checkout -qf HEAD --} -- --# used : waiter_local_repo arg1='value' arg2:'value' --# waiter_local_repo \ --# url='https://github.com/megous/linux' \ --# name='megous' \ --# dir='linux-mainline/5.14' \ --# branch='orange-pi-5.14' \ --# obj= or tag:$tag ... --waiter_local_repo() { -- for arg in $@; do -- -- case $arg in -- url=* | https://* | git://*) -- eval "local url=${arg/url=/}" -- ;; -- dir=* | /*/*/*) -- eval "local dir=${arg/dir=/}" -- ;; -- *=* | *:*) -- eval "local ${arg/:/=}" -- ;; -- esac -- -- done -- -- # Required variables cannot be empty. -- for var in url name dir branch; do -- [ "${var#*=}" == "" ] && exit_with_error "Error in configuration" -- done -- -- local reachability -- -- # The 'offline' variable must always be set to 'true' or 'false' -- if [ "$OFFLINE_WORK" == "yes" ]; then -- local offline=true -- else -- local offline=false -- fi -- -- local work_dir="$(realpath ${SRC}/cache/sources)/$dir" -- mkdir -p $work_dir -- cd $work_dir || exit_with_error -- -- display_alert "Checking git sources" "$dir $url$name/$branch" "info" -- -- if [ "$(git rev-parse --git-dir 2> /dev/null)" != ".git" ]; then -- git init -q . -- -- # Run in the sub shell to avoid mixing environment variables. -- if [ -n "$VAR_SHALLOW_ORIGINAL" ]; then -- ( -- $VAR_SHALLOW_ORIGINAL -- -- display_alert "Add original git sources" "$dir $url$name/$branch" "info" -- if [ "$(git ls-remote -h $url $branch | -- awk -F'/' '{if (NR == 1) print $NF}')" != "$branch" ]; then -- display_alert "Bad $branch for $url in $VAR_SHALLOW_ORIGINAL" -- exit 177 -- fi -- -- git remote add -t $branch $name $url -- -- # Handle an exception if the initial tag is the top of the branch -- # As v5.16 == HEAD -- if [ "${start_tag}.1" == "$(git ls-remote -t $url ${start_tag}.1 | -- awk -F'/' '{ print $NF }')" ]; then -- git fetch --shallow-exclude=$start_tag $name -- else -- git fetch --depth 1 $name -- fi -- git fetch --deepen=1 $name -- # For a shallow clone, this works quickly and saves space. -- git gc -- ) -- -- [ "$?" == "177" ] && exit -- fi -- fi -- -- files_for_clean="$(git status -s | wc -l)" -- if [ "$files_for_clean" != "0" ]; then -- display_alert " Cleaning .... " "$files_for_clean files" -- clean_up_repo $work_dir -- fi -- -- if [ "$name" != "$(git remote show | grep $name || true)" ]; then -- git remote add -t $branch $name $url -- fi -- -- if ! $offline; then -- for t_name in $(git remote show); do -- git fetch $t_name -- done -- fi -- -- # When switching, we use the concept of only "detached branch". Therefore, -- # we extract the hash from the tag, the branch name, or from the hash itself. -- # This serves as a check of the reachability of the extraction. -- # We do not use variables that characterize the current state of the git, -- # such as `HEAD` and `FETCH_HEAD`. -- reachability=false -- for var in obj tag commit branch; do -- eval pval=\$$var -- -- if [ -n "$pval" ] && [ "$pval" != *HEAD ]; then -- case $var in -- obj | tag | commit) obj=$pval ;; -- branch) obj=${name}/$branch ;; -- esac -- -- if t_hash=$(git rev-parse $obj 2> /dev/null); then -- reachability=true -- break -- else -- display_alert "Variable $var=$obj unreachable for extraction" -- fi -- fi -- done -- -- if $reachability && [ "$t_hash" != "$(git rev-parse @ 2> /dev/null)" ]; then -- # Switch "detached branch" as hash -- display_alert "Switch $obj = $t_hash" -- git checkout -qf $t_hash -- else -- # the working directory corresponds to the target commit, -- # nothing needs to be done -- display_alert "Up to date" -- fi -+# avoid repeating myself too much -+function improved_git_fetch() { -+ improved_git fetch --progress --verbose --no-auto-maintenance "$@" - } - - # fetch_from_repo -@@ -171,23 +36,16 @@ waiter_local_repo() { - # : "yes" to create subdirectory for tag or branch name - # - fetch_from_repo() { -+ display_alert "fetch_from_repo" "$*" "debug" - local url=$1 - local dir=$2 - local ref=$3 - local ref_subdir=$4 -+ local git_work_dir - - # Set GitHub mirror before anything else touches $url - url=${url//'https://github.com/'/$GITHUB_SOURCE} - -- if [ "$dir" == "linux-mainline" ] && [[ "$LINUXFAMILY" == sunxi* ]]; then -- unset LINUXSOURCEDIR -- LINUXSOURCEDIR="linux-mainline/$KERNEL_VERSION_LEVEL" -- VAR_SHALLOW_ORIGINAL=var_origin_kernel -- waiter_local_repo "url=$url $KERNELSOURCENAME $KERNELBRANCH dir=$LINUXSOURCEDIR $KERNELSWITCHOBJ" -- unset VAR_SHALLOW_ORIGINAL -- return -- fi -- - # The 'offline' variable must always be set to 'true' or 'false' - if [ "$OFFLINE_WORK" == "yes" ]; then - local offline=true -@@ -203,40 +61,37 @@ fetch_from_repo() { - local ref_name=${ref##*:} - fi - -- display_alert "Checking git sources" "$dir $ref_name" "info" -- -- # get default remote branch name without cloning -- # local ref_name=$(git ls-remote --symref $url HEAD | grep -o 'refs/heads/\S*' | sed 's%refs/heads/%%') -- # for git:// protocol comparing hashes of "git ls-remote -h $url" and "git ls-remote --symref $url HEAD" is needed -+ display_alert "Getting sources from Git" "$dir $ref_name" "info" - -+ local workdir=$dir - if [[ $ref_subdir == yes ]]; then -- local workdir=$dir/$ref_name -- else -- local workdir=$dir -+ workdir=$dir/$ref_name - fi - -- mkdir -p "${SRC}/cache/sources/${workdir}" 2> /dev/null || -- exit_with_error "No path or no write permission" "${SRC}/cache/sources/${workdir}" -+ git_work_dir="${SRC}/cache/sources/${workdir}" -+ -+ mkdir -p "${git_work_dir}" || exit_with_error "No path or no write permission" "${git_work_dir}" -+ -+ cd "${git_work_dir}" || exit - -- cd "${SRC}/cache/sources/${workdir}" || exit -+ display_alert "Git working dir" "${git_work_dir}" "debug" - - # check if existing remote URL for the repo or branch does not match current one - # may not be supported by older git versions - # Check the folder as a git repository. - # Then the target URL matches the local URL. - -- if [[ "$(improved_git rev-parse --git-dir 2> /dev/null)" == ".git" && -- "$url" != *"$(improved_git remote get-url origin | sed 's/^.*@//' | sed 's/^.*\/\///' 2> /dev/null)" ]]; then -- display_alert "Remote URL does not match, removing existing local copy" "$dir $ref_name" -- rm -rf .git ./* -+ if [[ "$(git rev-parse --git-dir)" == ".git" && "$url" != *"$(git remote get-url origin | sed 's/^.*@//' | sed 's/^.*\/\///')" ]]; then -+ display_alert "Remote URL does not match, removing existing local copy" "$dir $ref_name" "warn" -+ rm -rf "${git_work_dir}" -+ mkdir -p "${git_work_dir}" - fi - -- if [[ "$(improved_git rev-parse --git-dir 2> /dev/null)" != ".git" ]]; then -+ if [[ "$(git rev-parse --git-dir)" != ".git" ]]; then - display_alert "Creating local copy" "$dir $ref_name" -- improved_git init -q . -+ improved_git init -q --initial-branch="armbian_unused_initial_branch" . - improved_git remote add origin "${url}" -- # Here you need to upload from a new address -- offline=false -+ offline=false # Force only, we'll need to fetch. - fi - - local changed=false -@@ -244,26 +99,26 @@ fetch_from_repo() { - # when we work offline we simply return the sources to their original state - if ! $offline; then - local local_hash -- local_hash=$(git rev-parse @ 2> /dev/null || true) -+ local_hash=$(git rev-parse @ 2> /dev/null || true) # Don't fail nor output anything if failure - - case $ref_type in - branch) - # TODO: grep refs/heads/$name - local remote_hash -- remote_hash=$(improved_git ls-remote -h "${url}" "$ref_name" | head -1 | cut -f1) -- [[ -z $local_hash || "${local_hash}" != "${remote_hash}" ]] && changed=true -+ remote_hash=$(git ls-remote -h "${url}" "$ref_name" | head -1 | cut -f1) -+ [[ -z $local_hash || "${local_hash}" != "a${remote_hash}" ]] && changed=true - ;; - tag) - local remote_hash -- remote_hash=$(improved_git ls-remote -t "${url}" "$ref_name" | cut -f1) -+ remote_hash=$(git ls-remote -t "${url}" "$ref_name" | cut -f1) - if [[ -z $local_hash || "${local_hash}" != "${remote_hash}" ]]; then -- remote_hash=$(improved_git ls-remote -t "${url}" "$ref_name^{}" | cut -f1) -+ remote_hash=$(git ls-remote -t "${url}" "$ref_name^{}" | cut -f1) - [[ -z $remote_hash || "${local_hash}" != "${remote_hash}" ]] && changed=true - fi - ;; - head) - local remote_hash -- remote_hash=$(improved_git ls-remote "${url}" HEAD | cut -f1) -+ remote_hash=$(git ls-remote "${url}" HEAD | cut -f1) - [[ -z $local_hash || "${local_hash}" != "${remote_hash}" ]] && changed=true - ;; - commit) -@@ -271,60 +126,105 @@ fetch_from_repo() { - ;; - esac - -+ display_alert "Git local_hash vs remote_hash" "${local_hash} vs ${remote_hash}" "debug" -+ - fi # offline - - if [[ $changed == true ]]; then -- # remote was updated, fetch and check out updates -- display_alert "Fetching updates" "$dir $ref_name" -- case $ref_type in -- branch) improved_git fetch --depth 200 origin "${ref_name}" ;; -- tag) improved_git fetch --depth 200 origin tags/"${ref_name}" ;; -- head) improved_git fetch --depth 200 origin HEAD ;; -- esac - -- # commit type needs support for older git servers that doesn't support fetching id directly -- if [[ $ref_type == commit ]]; then -- improved_git fetch --depth 200 origin "${ref_name}" -+ # If there's a cold bundle URL specified: -+ # - if there's already a cold_bundle_xxx remote, move on. -+ # - grab the bundle via http/https first, and fetch from that, into "cold_bundle_xxx" remote. -+ # - do nothing else with this, it'll be used internally by git to avoid a huge fetch later. -+ # - but, after this, the wanted branch will be fetched. signal has_fetched_from_bundle=1 for later. -+ local has_fetched_from_bundle=0 -+ if [[ "${GIT_COLD_BUNDLE_URL}" != "" ]]; then -+ local git_cold_bundle_id git_cold_bundle_cache_dir git_cold_bundle_cache_file git_cold_bundle_remote_id git_cold_bundle_fetched_marker_file -+ # calculate the id, dir and name of local file and remote -+ git_cold_bundle_cache_dir="${SRC}/cache/gitbundles" -+ mkdir -p "${git_cold_bundle_cache_dir}" -+ git_cold_bundle_id="$(echo -n "${GIT_COLD_BUNDLE_URL}" | md5sum | awk '{print $1}')" # md5 of the URL. -+ git_cold_bundle_cache_file="${git_cold_bundle_cache_dir}/${git_cold_bundle_id}.gitbundle" -+ git_cold_bundle_remote_id="cold_bundle_${git_cold_bundle_id}" -+ git_cold_bundle_fetched_marker_file=".git/fetched-from-bundle-${git_cold_bundle_id}" -+ -+ display_alert "There's a " "${GIT_COLD_BUNDLE_URL} -- ${git_cold_bundle_id} -- file: ${git_cold_bundle_cache_file}" "debug" -+ -+ # Don't do if already done before for this bundle. -+ if [[ ! -f "${git_cold_bundle_fetched_marker_file}" ]]; then -+ -+ # Download the bundle file if it does not exist. -+ if [[ ! -f "${git_cold_bundle_cache_file}" ]]; then -+ display_alert "Downloading cold bundle from remote server" "${GIT_COLD_BUNDLE_URL}" "debug" -+ run_host_command_logged wget --continue --output-document="${git_cold_bundle_cache_file}" "${GIT_COLD_BUNDLE_URL}" -+ else -+ display_alert "Cold bundle file exists, using it" "${git_cold_bundle_cache_file}" "debug" -+ fi -+ -+ # Make sure bundle is valid. -+ improved_git bundle verify "${git_cold_bundle_cache_file}" -+ -+ # Get a list of remotes in the repo; add remote to bundle if it does not exist, and fetch from it. -+ # This should be done only once per workdir, so I use a marker file to denote completion. -+ if git remote get-url "${git_cold_bundle_remote_id}" 2> /dev/null; then -+ display_alert "Git already has bundle remote" "incomplete fetch? ${git_cold_bundle_id}" "debug" -+ else -+ improved_git remote add "${git_cold_bundle_remote_id}" "${git_cold_bundle_cache_file}" # Add the remote pointing to the cold bundle file -+ fi -+ -+ display_alert "Fetching from git bundle, wait" "${git_cold_bundle_id}" "info" -+ improved_git_fetch --tags "${git_cold_bundle_remote_id}" # Fetch it! and all its tags, too. -+ has_fetched_from_bundle=1 # marker for pruning logic below -+ echo "${remote_hash}" > "${git_cold_bundle_fetched_marker_file}" # marker for future invocation -+ display_alert "Bundle fetch completed, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull - -- # cover old type -- if [[ $? -ne 0 ]]; then -- display_alert "Commit checkout not supported on this repository. Doing full clone." "" "wrn" -- improved_git pull -- improved_git checkout -fq "${ref_name}" -- display_alert "Checkout out to" "$(improved_git --no-pager log -2 --pretty=format:"$ad%s [%an]" | head -1)" "info" -- else -- display_alert "Checking out" "$dir $ref_name" -- improved_git checkout -f -q FETCH_HEAD -- improved_git clean -qdf - fi -- else -- display_alert "Checking out" "$dir $ref_name" -- improved_git checkout -f -q FETCH_HEAD -- improved_git clean -qdf - fi -- elif [[ -n $(improved_git status -uno --porcelain --ignore-submodules=all) ]]; then -- # working directory is not clean -- display_alert " Cleaning .... " "$(improved_git status -s | wc -l) files" - -- # Return the files that are tracked by git to the initial state. -- improved_git checkout -f -q HEAD -+ # @TODO: If there's a warmup remote specified: (for u-boot and others) -+ # - if there's already a warmup remote, move on. -+ # - if there's a cached warmup bundle file, add it as remote and fetch from it, and move on. -+ # - add the warmup as remote, fetch from it; export it as a cached bundle for next time. - -- # Files that are not tracked by git and were added -- # when the patch was applied must be removed. -- improved_git clean -qdf -- else -- # working directory is clean, nothing to do -- display_alert "Up to date" "$dir $ref_name" -+ # remote was updated, fetch and check out updates, but not tags; tags pull their respective commits too, making it a huge fetch. -+ display_alert "Fetching updates from origin" "$dir $ref_name " -+ case $ref_type in -+ branch | commit) improved_git_fetch origin "${ref_name}" ;; -+ tag) improved_git_fetch origin tags/"${ref_name}" ;; -+ head) improved_git_fetch origin HEAD ;; -+ esac -+ display_alert "Origin fetch completed, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size again -+ -+ display_alert "Checking out" "$dir $ref_name" -+ improved_git checkout -f -q FETCH_HEAD -+ improved_git clean -q -d -f -+ -+ if [[ $has_fetched_from_bundle -gt 0 ]]; then -+ display_alert "Pre-pruning, working copy size" "$(du -h -s | awk '{print $1}')" "debug" # Show size after bundle pull -+ echo -n "${remote_hash}" > .git/shallow # commit to keep for shallowing, can be something else. for now is full prune. -+ improved_git remote remove "${git_cold_bundle_remote_id}" -+ improved_git reflog expire --expire=0 --all -+ improved_git gc --prune=all -+ fi -+ -+ elif [[ -n $(git status -uno --porcelain --ignore-submodules=all) ]]; then # if not changed, but dirty... -+ display_alert "Cleaning git dir" "$(git status -s | wc -l) files" # working directory is not clean, show it -+ improved_git checkout -f -q HEAD # Return the files that are tracked by git to the initial state. -+ improved_git clean -q -d -f # Files that are not tracked by git and were added when the patch was applied must be removed. -+ else # not changed, not dirty. -+ display_alert "Up to date" "$dir $ref_name at revision ${local_hash}" # working directory is clean, nothing to do - fi - -+ display_alert "Final working copy size" "$(du -h -s | awk '{print $1}')" "debug" -+ - if [[ -f .gitmodules ]]; then - display_alert "Updating submodules" "" "ext" - # FML: http://stackoverflow.com/a/17692710 -- for i in $(improved_git config -f .gitmodules --get-regexp path | awk '{ print $2 }'); do -- cd "${SRC}/cache/sources/${workdir}" || exit -+ for i in $(git config -f .gitmodules --get-regexp path | awk '{ print $2 }'); do -+ cd "${git_work_dir}" || exit - local surl sref -- surl=$(improved_git config -f .gitmodules --get "submodule.$i.url") -- sref=$(improved_git config -f .gitmodules --get "submodule.$i.branch") -+ surl=$(git config -f .gitmodules --get "submodule.$i.url") -+ sref=$(git config -f .gitmodules --get "submodule.$i.branch") - if [[ -n $sref ]]; then - sref="branch:$sref" - else -diff --git a/lib/functions/multi/build-all.sh b/lib/functions/multi/build-all.sh -index 5f8496157..762a588d7 100644 ---- a/lib/functions/multi/build-all.sh -+++ b/lib/functions/multi/build-all.sh -@@ -101,7 +101,7 @@ unset_all() { - CRYPTROOT_SSH_UNLOCK_PORT CRYPTROOT_SSH_UNLOCK_KEY_NAME ROOT_MAPPER NETWORK HDMI USB WIRELESS ARMBIANMONITOR FORCE_BOOTSCRIPT_UPDATE \ - UBOOT_TOOLCHAIN2 toolchain2 BUILD_REPOSITORY_URL BUILD_REPOSITORY_COMMIT BUILD_TARGET HOST BUILD_IMAGE DEB_STORAGE REPO_STORAGE REPO_CONFIG \ - REPOSITORY_UPDATE PACKAGE_LIST_RELEASE LOCAL_MIRROR COMPILE_ATF PACKAGE_LIST_BOARD PACKAGE_LIST_FAMILY PACKAGE_LIST_DESKTOP_BOARD \ -- PACKAGE_LIST_DESKTOP_FAMILY ATF_COMPILE ATFPATCHDIR OFFSET BOOTSOURCEDIR KERNEL_VERSION_LEVEL KERNELSOURCENAME \ -+ PACKAGE_LIST_DESKTOP_FAMILY ATF_COMPILE ATFPATCHDIR OFFSET BOOTSOURCEDIR \ - BOOT_SOC DDR_BLOB MINILOADER_BLOB BL31_BLOB BOOT_SCENARIO BOOT_SUPPORT_SPI OFFLINE_WORK VAR_SHALLOW_ORIGINAL KERNELSWITCHOBJ \ - IMAGE_PARTITION_TABLE BOOT_LOGO UBOOT_REPO_VERSION FORCED_MONTH_OFFSET PACKAGE_LIST_BOARD_REMOVE PACKAGE_LIST_FAMILY_REMOVE PACKAGE_LIST_DESKTOP \ - PACKAGE_LIST_DESKTOP_BOARD_REMOVE PACKAGE_LIST_DESKTOP_FAMILY_REMOVE BOOTCONFIG_EDGE DESKTOP_ENVIRONMENT DESKTOP_ENVIRONMENT_CONFIG_NAME \ - -From 134877c13df20aa7403185b41d75ee3db95c4485 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 16 Feb 2022 23:06:37 +0100 -Subject: [PATCH] armbian-next: reorder functions in file, they have a ~logical - call-tree order - ---- - lib/functions/logging/runners.sh | 50 ++++++++++++++++++++-------------------- - 1 file changed, 25 insertions(+), 25 deletions(-) - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 8bd8845f1..a85914f55 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -86,6 +86,31 @@ function host_apt_get() { - run_host_command_logged DEBIAN_FRONTEND=noninteractive apt-get "${apt_params[@]}" "$@" - } - -+# For host-side invocations of binaries we _know_ are x86-only. -+# Determine if we're building on non-amd64, and if so, which qemu binary to use. -+function run_host_x86_binary_logged() { -+ local -a qemu_invocation target_bin_arch -+ target_bin_arch="unknown - file util missing" -+ if [[ -f /usr/bin/file ]]; then -+ target_bin_arch="$(file -b "$1" | cut -d "," -f 1,2 | xargs echo -n)" # obtain the ELF name from the binary using 'file' -+ fi -+ qemu_invocation=("$@") # Default to calling directly, without qemu. -+ if [[ "$(uname -m)" != "x86_64" ]]; then # If we're NOT on x86... -+ if [[ -f /usr/bin/qemu-x86_64-static ]]; then -+ display_alert "Using qemu-x86_64-static for running on $(uname -m)" "$1 (${target_bin_arch})" "debug" -+ qemu_invocation=("/usr/bin/qemu-x86_64-static" "-L" "/usr/x86_64-linux-gnu" "$@") -+ elif [[ -f /usr/bin/qemu-x86_64 ]]; then -+ display_alert "Using qemu-x86_64 (non-static) for running on $(uname -m)" "$1 (${target_bin_arch})" "debug" -+ qemu_invocation=("/usr/bin/qemu-x86_64" "-L" "/usr/x86_64-linux-gnu" "$@") -+ else -+ exit_with_error "Can't find appropriate qemu binary for running '$1' on $(uname -m), missing packages?" -+ fi -+ else -+ display_alert "Not using qemu for running x86 binary on $(uname -m)" "$1 (${target_bin_arch})" "debug" -+ fi -+ run_host_command_logged "${qemu_invocation[@]}" # Exit with this result code -+} -+ - # run_host_command_logged is the very basic, should be used for everything, but, please use helpers above, this is very low-level. - function run_host_command_logged() { - run_host_command_logged_raw /bin/bash -e -c "$*" -@@ -130,28 +155,3 @@ function run_host_command_logged_raw() { - run_on_sdcard() { - chroot_sdcard "${@}" - } -- --# For host-side invocations of binaries we _know_ are x86-only. --# Determine if we're building on non-amd64, and if so, which qemu binary to use. --function run_host_x86_binary_logged() { -- local -a qemu_invocation target_bin_arch -- target_bin_arch="unknown - file util missing" -- if [[ -f /usr/bin/file ]]; then -- target_bin_arch="$(file -b "$1" | cut -d "," -f 1,2 | xargs echo -n)" # obtain the ELF name from the binary using 'file' -- fi -- qemu_invocation=("$@") # Default to calling directly, without qemu. -- if [[ "$(uname -m)" != "x86_64" ]]; then # If we're NOT on x86... -- if [[ -f /usr/bin/qemu-x86_64-static ]]; then -- display_alert "Using qemu-x86_64-static for running on $(uname -m)" "$1 (${target_bin_arch})" "debug" -- qemu_invocation=("/usr/bin/qemu-x86_64-static" "-L" "/usr/x86_64-linux-gnu" "$@") -- elif [[ -f /usr/bin/qemu-x86_64 ]]; then -- display_alert "Using qemu-x86_64 (non-static) for running on $(uname -m)" "$1 (${target_bin_arch})" "debug" -- qemu_invocation=("/usr/bin/qemu-x86_64" "-L" "/usr/x86_64-linux-gnu" "$@") -- else -- exit_with_error "Can't find appropriate qemu binary for running '$1' on $(uname -m), missing packages?" -- fi -- else -- display_alert "Not using qemu for running x86 binary on $(uname -m)" "$1 (${target_bin_arch})" "debug" -- fi -- run_host_command_logged "${qemu_invocation[@]}" # Exit with this result code --} - -From f148d9aa6b42c96ee1fe9c58053886d693a5c58e Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 16 Feb 2022 23:05:28 +0100 -Subject: [PATCH] armbian-next: move `fingerprint_image()` out of `git.sh` into - its own file - ---- - lib/functions/general/fingerprint.sh | 47 +++++++++++++++++++++++++++++++++++ - lib/functions/general/git.sh | 48 ------------------------------------ - lib/library-functions.sh | 9 +++++++ - lib/tools/gen-library.sh | 1 + - 4 files changed, 57 insertions(+), 48 deletions(-) - -diff --git a/lib/functions/general/fingerprint.sh b/lib/functions/general/fingerprint.sh -new file mode 100644 -index 000000000..566f76faf ---- /dev/null -+++ b/lib/functions/general/fingerprint.sh -@@ -0,0 +1,47 @@ -+#-------------------------------------------------------------------------------------------------------------------------------- -+# fingerprint_image [image_filename] -+# Saving build summary to the image -+#-------------------------------------------------------------------------------------------------------------------------------- -+fingerprint_image() { -+ cat <<- EOF > "${1}" -+ -------------------------------------------------------------------------------- -+ Title: ${VENDOR} $REVISION ${BOARD^} $BRANCH -+ Kernel: Linux $VER -+ Build date: $(date +'%d.%m.%Y') -+ Maintainer: $MAINTAINER <$MAINTAINERMAIL> -+ Authors: https://www.armbian.com/authors -+ Sources: https://github.com/armbian/ -+ Support: https://forum.armbian.com/ -+ Changelog: https://www.armbian.com/logbook/ -+ Documantation: https://docs.armbian.com/ -+ EOF -+ -+ if [ -n "$2" ]; then -+ cat <<- EOF >> "${1}" -+ -------------------------------------------------------------------------------- -+ Partitioning configuration: $IMAGE_PARTITION_TABLE offset: $OFFSET -+ Boot partition type: ${BOOTFS_TYPE:-(none)} ${BOOTSIZE:+"(${BOOTSIZE} MB)"} -+ Root partition type: $ROOTFS_TYPE ${FIXED_IMAGE_SIZE:+"(${FIXED_IMAGE_SIZE} MB)"} -+ -+ CPU configuration: $CPUMIN - $CPUMAX with $GOVERNOR -+ -------------------------------------------------------------------------------- -+ Verify GPG signature: -+ gpg --verify $2.img.asc -+ -+ Verify image file integrity: -+ sha256sum --check $2.img.sha -+ -+ Prepare SD card (four methodes): -+ zcat $2.img.gz | pv | dd of=/dev/mmcblkX bs=1M -+ dd if=$2.img of=/dev/mmcblkX bs=1M -+ balena-etcher $2.img.gz -d /dev/mmcblkX -+ balena-etcher $2.img -d /dev/mmcblkX -+ EOF -+ fi -+ -+ cat <<- EOF >> "${1}" -+ -------------------------------------------------------------------------------- -+ $(cat "${SRC}"/LICENSE) -+ -------------------------------------------------------------------------------- -+ EOF -+} -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index a02faa1f2..37aff6b3c 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -333,52 +333,4 @@ fetch_from_repo() { - fetch_from_repo "$surl" "$workdir/$i" "$sref" - done - fi --} ############################################################################# -- --#-------------------------------------------------------------------------------------------------------------------------------- --# fingerprint_image [image_filename] --# Saving build summary to the image --#-------------------------------------------------------------------------------------------------------------------------------- --fingerprint_image() { -- cat <<- EOF > "${1}" -- -------------------------------------------------------------------------------- -- Title: ${VENDOR} $REVISION ${BOARD^} $BRANCH -- Kernel: Linux $VER -- Build date: $(date +'%d.%m.%Y') -- Maintainer: $MAINTAINER <$MAINTAINERMAIL> -- Authors: https://www.armbian.com/authors -- Sources: https://github.com/armbian/ -- Support: https://forum.armbian.com/ -- Changelog: https://www.armbian.com/logbook/ -- Documantation: https://docs.armbian.com/ -- EOF -- -- if [ -n "$2" ]; then -- cat <<- EOF >> "${1}" -- -------------------------------------------------------------------------------- -- Partitioning configuration: $IMAGE_PARTITION_TABLE offset: $OFFSET -- Boot partition type: ${BOOTFS_TYPE:-(none)} ${BOOTSIZE:+"(${BOOTSIZE} MB)"} -- Root partition type: $ROOTFS_TYPE ${FIXED_IMAGE_SIZE:+"(${FIXED_IMAGE_SIZE} MB)"} -- -- CPU configuration: $CPUMIN - $CPUMAX with $GOVERNOR -- -------------------------------------------------------------------------------- -- Verify GPG signature: -- gpg --verify $2.img.asc -- -- Verify image file integrity: -- sha256sum --check $2.img.sha -- -- Prepare SD card (four methodes): -- zcat $2.img.gz | pv | dd of=/dev/mmcblkX bs=1M -- dd if=$2.img of=/dev/mmcblkX bs=1M -- balena-etcher $2.img.gz -d /dev/mmcblkX -- balena-etcher $2.img -d /dev/mmcblkX -- EOF -- fi -- -- cat <<- EOF >> "${1}" -- -------------------------------------------------------------------------------- -- $(cat "${SRC}"/LICENSE) -- -------------------------------------------------------------------------------- -- EOF - } -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 00f05c37a..39792dbe5 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -208,6 +208,15 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/general/downloads.sh - source "${SRC}"/lib/functions/general/downloads.sh - -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/general/fingerprint.sh -+# shellcheck source=lib/functions/general/fingerprint.sh -+source "${SRC}"/lib/functions/general/fingerprint.sh -+ - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -diff --git a/lib/tools/gen-library.sh b/lib/tools/gen-library.sh -index 3b851fe67..11de9946f 100755 ---- a/lib/tools/gen-library.sh -+++ b/lib/tools/gen-library.sh -@@ -16,6 +16,7 @@ cat <<- AUTOGEN_INCLUDES_HEADER > "${TARGET_SH}" - # This file is/was autogenerated by ${0}; don't modify manually - - AUTOGEN_INCLUDES_HEADER -+cd "${SRC}" - - find lib/functions -type f -name \*.sh | sort -h | while read -r path; do - ref="$(echo -n "${path}")" - -From 9f774b4dac5b1c1808c2a57b2cb7b7ed2dd2e308 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 16 Feb 2022 12:02:32 +0100 -Subject: [PATCH] logging: fix for double stderr redirect during - `fakeroot_dpkg_deb_build` - ---- - lib/functions/logging/runners.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 2ea496cbe..8bd8845f1 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -51,7 +51,7 @@ function chroot_custom() { - # for deb building. - function fakeroot_dpkg_deb_build() { - display_alert "Building .deb package" "$(basename "${3:-${2:-${1}}}" || true)" "debug" -- run_host_command_logged_raw fakeroot dpkg-deb -b "-Z${DEB_COMPRESS}" "$@" 2>&1 -+ run_host_command_logged_raw fakeroot dpkg-deb -b "-Z${DEB_COMPRESS}" "$@" - } - - # for long-running, host-side expanded bash invocations. - -From 8164916306b8b4bc06cd8dca5f7d937d0bfee368 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 16 Feb 2022 11:47:38 +0100 -Subject: [PATCH] logging: subdued "command" logging for debugging low level - cmd invocations ("frog") - ---- - lib/functions/compilation/kernel.sh | 2 -- - lib/functions/logging/logging.sh | 19 ++++++++++++------- - lib/functions/logging/runners.sh | 2 +- - 3 files changed, 13 insertions(+), 10 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 3bf77ae1b..e2232659d 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -24,8 +24,6 @@ function run_kernel_make() { - - # last statement, so it passes the result to calling function. - full_command=("${KERNEL_MAKE_RUNNER:-run_host_command_logged}" "${common_make_envs[@]}" make "$@" "${common_make_params_quoted[@]@Q}") -- display_alert "Kernel make" "${full_command[*]}" "debug" -- # echo "${full_command[@]}" >&2 # last-resort bash-quoting debugging - "${full_command[@]}" # and exit with it's code, since it's the last statement - } - -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index bd19b8e10..368d0a8d6 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -6,6 +6,10 @@ function logging_init() { - export normal_color="\x1B[0m" gray_color="\e[1;30m" # "bright black", which is grey - declare -i logging_section_counter=0 # -i: integer - export logging_section_counter -+ export tool_color="${gray_color}" # default to gray... (should be ok on terminals) -+ if [[ "${CI}" == "true" ]]; then # ... but that is too dark for Github Actions -+ export tool_color="${normal_color}" -+ fi - } - - function logging_error_show_log() { -@@ -54,10 +58,6 @@ function do_with_logging() { - local exit_code=176 # fail by default... - if [[ "${SHOW_LOG}" == "yes" ]]; then - local prefix_sed_contents -- local tool_color="${gray_color}" # default to gray... (should be ok on terminals) -- if [[ "${CI}" == "true" ]]; then # ... but that is too dark for Github Actions -- tool_color="${normal_color}" -- fi - prefix_sed_contents="$(logging_echo_prefix_for_pv "tool") $(echo -n -e "${tool_color}")" - local prefix_sed_cmd="s/^/${prefix_sed_contents}/;" - -@@ -123,17 +123,22 @@ function display_alert() { - ;; - - info) -- level_indicator="🌱" # "🌴" 🥑 -+ level_indicator="🌱" - inline_logs_color="\e[0;32m" - ;; - - debug | deprecation) -- level_indicator="✨" # "🌴" 🥑 -+ level_indicator="✨" - inline_logs_color="\e[1;33m" - ;; - -+ command) -+ level_indicator="🐸" -+ inline_logs_color="${tool_color}" # either gray or normal, a bit subdued. -+ ;; -+ - *) -- level_indicator="🌿" # "✨" 🌿 🪵 -+ level_indicator="🌿" - inline_logs_color="\e[1;37m" - ;; - esac -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index af60b1950..2ea496cbe 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -103,7 +103,7 @@ function run_host_command_logged_raw() { - echo " " >> "${CURRENT_LOGFILE}" # blank line for reader's benefit - echo "-->" "$*" " <- at $(date --utc)" >> "${CURRENT_LOGFILE}" - else -- display_alert "Running at host: " "$*" "debug" -+ display_alert "Command debug" "$*" "command" # A special 'command' level. - fi - - # uncomment when desperate to understand what's going on - -From b173dbe20aff3996a3ad8b32860d001336eaa34c Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 16 Feb 2022 02:23:16 +0100 -Subject: [PATCH] armbian-next: when showing log, emit all host-side - invocations as `debug` too. - ---- - lib/functions/logging/runners.sh | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index cdce6ead3..af60b1950 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -102,6 +102,8 @@ function run_host_command_logged_raw() { - if [[ -f "${CURRENT_LOGFILE}" ]]; then - echo " " >> "${CURRENT_LOGFILE}" # blank line for reader's benefit - echo "-->" "$*" " <- at $(date --utc)" >> "${CURRENT_LOGFILE}" -+ else -+ display_alert "Running at host: " "$*" "debug" - fi - - # uncomment when desperate to understand what's going on - -From 550e748f1a27d875cf9badfa85d6f1c251fa52aa Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 13 Feb 2022 16:49:58 +0100 -Subject: [PATCH] [WiP] trap handler abstraction, somewhat works! - ---- - compile.sh | 11 ++- - lib/extensions.sh | 33 +++++-- - lib/functions/cli/cli-entrypoint.sh | 48 ++++++---- - lib/functions/image/rootfs-to-image.sh | 6 +- - lib/functions/logging/errors.sh | 44 --------- - lib/functions/logging/logging.sh | 17 +--- - lib/functions/logging/stacktraces.sh | 2 +- - lib/functions/logging/traps.sh | 162 ++++++++++++++++++++++----------- - lib/functions/main/default-build.sh | 22 ++--- - lib/functions/main/rootfs-image.sh | 30 +++++- - lib/functions/rootfs/create-cache.sh | 4 +- - 11 files changed, 220 insertions(+), 159 deletions(-) - -diff --git a/compile.sh b/compile.sh -index 64fcfb4f1..fcd9046a0 100755 ---- a/compile.sh -+++ b/compile.sh -@@ -44,8 +44,13 @@ fi - # shellcheck source=lib/single.sh - source "${SRC}"/lib/single.sh - --# hook up the error handler early, we wanna see stack for all errors. --trap 'main_error_monitor "$?"' ERR EXIT -+# initialize logging variables. -+logging_init - --# And execute the main entrypoint. -+# initialize the traps -+traps_init -+ -+# Execute the main CLI entrypoint. - cli_entrypoint "$@" -+ -+echo "-- very last thing" 1>&2 -diff --git a/lib/extensions.sh b/lib/extensions.sh -index 737656a38..9cbc4b78b 100644 ---- a/lib/extensions.sh -+++ b/lib/extensions.sh -@@ -69,6 +69,9 @@ initialize_extension_manager() { - export EXTENSION_MANAGER_LOG_FILE="${EXTENSION_MANAGER_TMP_DIR}/extensions.log" - [[ "${WRITE_EXTENSIONS_METADATA:-yes}" == "no" ]] && echo -n "" > "${EXTENSION_MANAGER_TMP_DIR}/hook_point_calls.txt" - -+ # Add trap handler to cleanup and not leave garbage behind when exiting. -+ add_cleanup_handler cleanup_handler_extensions -+ - # globally initialize the extensions log. - echo "-- lib/extensions.sh included. logs will be below, followed by the debug generated by the initialize_extension_manager() function." > "${EXTENSION_MANAGER_LOG_FILE}" - -@@ -252,18 +255,32 @@ initialize_extension_manager() { - cleanup_extension_manager() { - if [[ -f "${fragment_manager_cleanup_file}" ]]; then - display_alert "Cleaning up" "extension manager" "info" -- # this will unset all the functions. - # shellcheck disable=SC1090 # dynamic source, thanks, shellcheck -- source "${fragment_manager_cleanup_file}" -- # file is removed together with EXTENSION_MANAGER_TMP_DIR below. -+ source "${fragment_manager_cleanup_file}" # this will unset all the functions. -+ rm -f "${fragment_manager_cleanup_file}" # also remove the file. -+ unset fragment_manager_cleanup_file # and unset the var. -+ fi -+ -+ # reset/unset the variables used -+ initialize_extension_manager_counter=0 -+ unset extension_function_info defined_hook_point_functions hook_point_function_trace_sources hook_point_function_trace_lines fragment_manager_cleanup_file -+} -+ -+function cleanup_handler_extensions() { -+ echo "-- yeah the extensions trap handler..." 1>&2 -+ cleanup_extension_manager -+ -+ # Move temporary log file over to final destination. -+ if [[ -f "${EXTENSION_MANAGER_LOG_FILE}" ]]; then -+ mv "${EXTENSION_MANAGER_LOG_FILE}" "${DEST}/${LOG_SUBPATH:-debug}/extensions.log" - fi -+ unset EXTENSION_MANAGER_LOG_FILE -+ - # cleanup our tmpdir. - if [[ -d "${EXTENSION_MANAGER_TMP_DIR}" ]]; then - rm -rf "${EXTENSION_MANAGER_TMP_DIR}" - fi -- # reset/unset the variables used -- initialize_extension_manager_counter=0 -- unset extension_function_info defined_hook_point_functions hook_point_function_trace_sources hook_point_function_trace_lines fragment_manager_cleanup_file -+ unset EXTENSION_MANAGER_TMP_DIR - } - - # why not eat our own dog food? -@@ -290,10 +307,6 @@ run_after_build__999_finish_extension_manager() { - - `${hook_point_function_trace_lines}` is the same, but BASH_LINENO info. - After this hook is done, the `${EXTENSION_MANAGER_TMP_DIR}` will be removed. - EXTENSION_METADATA_READY -- -- # Move temporary log file over to final destination, and start writing to it instead (although 999 is pretty late in the game) -- mv "${EXTENSION_MANAGER_LOG_FILE}" "${DEST}/${LOG_SUBPATH:-debug}/extensions.log" -- export EXTENSION_MANAGER_LOG_FILE="${DEST}/${LOG_SUBPATH:-debug}/extensions.log" - } - - # This is called by call_extension_method(). To say the truth, this should be in an extension. But then it gets too meta for anyone's head. -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index 587348b01..d9da56acc 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -1,3 +1,23 @@ -+function bla_cleanup1() { -+ echo "-- bla cleanup1" 1>&2 -+} -+function bla_cleanup2() { -+ echo "-- bla cleanup2" 1>&2 -+} -+ -+function bla() { -+ display_alert "bla starting" "bla is here! PID: $$ - BASHPID: $BASHPID" "debug" -+ add_cleanup_handler bla_cleanup1 -+ add_cleanup_handler bla_cleanup2 -+ -+ #sleep 10 -+ #explode_here -+ #exit 66 # exit with error -+ exit_with_error "something" "wrong" -+ #exit 0 # exit without error -+} -+ -+ - function cli_entrypoint() { - if [[ "${ARMBIAN_ENABLE_CALL_TRACING}" == "yes" ]]; then - set -T # inherit return/debug traps -@@ -6,8 +26,6 @@ function cli_entrypoint() { - trap 'echo "${BASH_LINENO[@]}|${BASH_SOURCE[@]}|${FUNCNAME[@]}" >> ${SRC}/output/debug/calls.txt ;' RETURN - fi - -- logging_init # initialize logging. -- - check_args "$@" - do_update_src "$@" - -@@ -108,27 +126,23 @@ function cli_entrypoint() { - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled - -- if [[ "${BUILD_ALL}" == "yes" || "${BUILD_ALL}" == "demo" ]]; then -- do_main_build_all_ng -- else -- # configuration etc - it initializes the extension manager. -- do_capturing_defs prepare_and_config_main_build_single # this sets CAPTURED_VARS -- -- if [[ "${CONFIG_DEFS_ONLY}" == "yes" ]]; then -- echo "${CAPTURED_VARS}" # to stdout! -- cleanup_extension_manager # manually cleanup extension manager before exiting -- return 0 -- else -- unset CAPTURED_VARS -- fi -+ # configuration etc - it initializes the extension manager. -+ do_capturing_defs prepare_and_config_main_build_single # this sets CAPTURED_VARS - -+ if [[ "${CONFIG_DEFS_ONLY}" == "yes" ]]; then -+ echo "${CAPTURED_VARS}" # to stdout! -+ else -+ unset CAPTURED_VARS - # Allow for custom user-invoked functions, or do the default build. - if [[ -z $1 ]]; then -- main_default_build_single # this cleans up the extension manager -+ main_default_build_single - else - # @TODO: check this with extensions usage? - eval "$@" - fi -- - fi -+ -+ # Build done, run the cleanup handlers explicitly. -+ # This zeroes out the list of cleanups, so it's not done again when the main script exits. -+ run_cleanup_handlers - } -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index 898a7372b..77d61fc2c 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -78,7 +78,7 @@ create_image_from_sdcard_rootfs() { - Called before unmounting both `/root` and `/boot`. - PRE_UMOUNT_FINAL_IMAGE - -- # unmount /boot/efi first, then /boot, rootfs third, image file last -+ # unmount /boot/efi first, then /boot, rootfs third, image file last # @TODO: why using lazy unmount? - sync - [[ $UEFISIZE != 0 ]] && umount -l "${MOUNT}${UEFI_MOUNT_POINT}" - [[ $BOOTSIZE != 0 ]] && umount -l $MOUNT/boot -@@ -90,7 +90,7 @@ PRE_UMOUNT_FINAL_IMAGE - Called after unmounting both `/root` and `/boot`. - POST_UMOUNT_FINAL_IMAGE - -- # to make sure its unmounted -+ # to make sure its unmounted # @TODO: maybe use the recursive unmount we have now - while grep -Eq '(${MOUNT}|${DESTIMG})' /proc/mounts; do - display_alert "Wait for unmount" "${MOUNT}" "info" - sleep 5 -@@ -98,6 +98,8 @@ PRE_UMOUNT_FINAL_IMAGE - - display_alert "Freeing loop device" "${LOOP}" "wrn" - losetup -d "${LOOP}" -+ unset LOOP # unset so cleanup handler does not try it again -+ - # Don't delete $DESTIMG here, extensions might have put nice things there already. - rm -rf --one-file-system $MOUNT - -diff --git a/lib/functions/logging/errors.sh b/lib/functions/logging/errors.sh -index f3766399d..29263306c 100644 ---- a/lib/functions/logging/errors.sh -+++ b/lib/functions/logging/errors.sh -@@ -8,47 +8,3 @@ - - # This file is a part of the Armbian build script - # https://github.com/armbian/build/ -- --# exit_with_error --# --# a way to terminate build process --# with verbose error message --# -- --function exit_with_error() { -- local _file -- local _line=${BASH_LINENO[0]} -- local _function=${FUNCNAME[1]} -- local _description=$1 -- local _highlight=$2 -- _file=$(basename "${BASH_SOURCE[1]}") -- local stacktrace logfile -- stacktrace="$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}" || true)" -- -- local logfile_to_show="${CURRENT_LOGFILE}" # store it -- unset CURRENT_LOGFILE # stop logging, otherwise crazy -- -- display_alert "ERROR in function $_function" "$stacktrace" "err" -- display_alert "$_description" "$_highlight" "err" -- -- # delegate to logging to make it pretty -- logging_error_show_log "$_description" "$_highlight" "${stacktrace}" "${logfile_to_show}" -- -- if [[ "${ERROR_DEBUG_SHELL}" == "yes" ]]; then -- display_alert "MOUNT" "${MOUNT}" "err" -- display_alert "SDCARD" "${SDCARD}" "err" -- display_alert "Here's a shell." "debug it" "err" -- bash < /dev/tty || true -- fi -- -- display_alert "Build terminating... wait for cleanups..." "" "err" -- -- overlayfs_wrapper "cleanup" -- # unlock loop device access in case of starvation # @TODO: hmm, say that again? -- exec {FD}> /var/lock/armbian-debootstrap-losetup -- flock -u "${FD}" -- -- export ALREADY_EXITING_WITH_ERROR=yes # marker for future trap handlers. avoid showing errors twice. -- exit 43 -- display_alert "Never to be seen" "after exit and traps" "bye" --} -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 8c3bfa315..bd19b8e10 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -9,18 +9,13 @@ function logging_init() { - } - - function logging_error_show_log() { -- # Do nothing if we're already showing the log on stderr. -- [[ "${SHOW_LOG}" == "yes" ]] && return 0 -- -- # Close opened CI group, even if there is none; errors would be buried otherwise. -- if [[ "${CI}" == "true" ]]; then -+ local logfile_to_show="${CURRENT_LOGFILE}" # store current logfile in separate var -+ unset CURRENT_LOGFILE # stop logging, otherwise crazy -+ [[ "${SHOW_LOG}" == "yes" ]] && return 0 # Do nothing if we're already showing the log on stderr. -+ if [[ "${CI}" == "true" ]]; then # Close opened CI group, even if there is none; errors would be buried otherwise. - echo "::endgroup::" - fi - -- local message="$1" -- local stacktrace="$3" -- local logfile_to_show="$4" -- - if [[ -f "${logfile_to_show}" ]]; then - local prefix_sed_contents="${normal_color}${left_marker}${padding}👉${padding}${right_marker} " - local prefix_sed_cmd="s/^/${prefix_sed_contents}/;" -@@ -28,10 +23,8 @@ function logging_error_show_log() { - # shellcheck disable=SC2002 # my cat is great. thank you, shellcheck. - cat "${logfile_to_show}" | grep -v -e "^$" | sed -e "${prefix_sed_cmd}" 1>&2 # write it to stderr!! - display_alert " 👆👆👆 Showing logfile above 👆👆👆" "${logfile_to_show}" "err" -- display_alert "🦞 Error Msg" "$message" "err" -- display_alert "🐞 Error stacktrace" "$stacktrace" "err" - else -- display_alert "✋ Error Log not Available" "${logfile_to_show}" "err" -+ display_alert "✋ Error log not available at this stage of build" "check messages above" "debug" - fi - return 0 - } -diff --git a/lib/functions/logging/stacktraces.sh b/lib/functions/logging/stacktraces.sh -index 14e74171f..3ab2900ef 100644 ---- a/lib/functions/logging/stacktraces.sh -+++ b/lib/functions/logging/stacktraces.sh -@@ -37,7 +37,7 @@ function show_caller_full() { - while caller $i; do - ((i++)) - done | while read -r line_no function_name file_name; do -- local padded_function_name=$(printf "%30s" "$function_name") -+ local padded_function_name=$(printf "%30s" "$function_name()") - local short_file_name="${file_name/"${SRC}/"/"./"}" - echo -e "$padded_function_name --> $short_file_name:$line_no" - done -diff --git a/lib/functions/logging/traps.sh b/lib/functions/logging/traps.sh -index f403547c9..fb294e06e 100644 ---- a/lib/functions/logging/traps.sh -+++ b/lib/functions/logging/traps.sh -@@ -1,65 +1,121 @@ --# unmount_on_exit - used during rootfs building, to avoid leaving mounted stuff behind --# --unmount_on_exit() { -- set +e # we just wanna plow through this, ignoring errors. -- trap - INT TERM EXIT # remove the trap -+# Initialize and prepare the trap managers, one for each of ERR, INT, TERM and EXIT traps. -+# Bash goes insane regarding line numbers and other stuff if we try to overwrite the traps. -+# This also implements the custom "cleanup" handlers, which always run at the end of build, or when exiting prematurely for any reason. -+function traps_init() { -+ # shellcheck disable=SC2034 # Array of cleanup handlers. -+ declare -a trap_manager_cleanup_handlers=() -+ # shellcheck disable=SC2034 # Global to avoid doubly reporting ERR/EXIT pairs. -+ declare -a trap_manager_error_handled=0 -+ trap 'main_trap_handler "ERR" "$?"' ERR -+ trap 'main_trap_handler "EXIT" "$?"' EXIT -+ trap 'main_trap_handler "INT" "$?"' INT -+ trap 'main_trap_handler "TERM" "$?"' TERM -+} - -- local stack_here -- stack_here="$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}" || true)" -- display_alert "trap caught, shutting down" "${stack_here}" "err" -- if [[ "${ERROR_DEBUG_SHELL}" == "yes" ]]; then -- ERROR_DEBUG_SHELL=no # dont do it twice -- display_alert "MOUNT" "${MOUNT}" "err" -- display_alert "SDCARD" "${SDCARD}" "err" -- display_alert "ERROR_DEBUG_SHELL=yes, starting a shell." "ERROR_DEBUG_SHELL" "err" -- bash < /dev/tty >&2 || true -- fi -+# This is setup early in compile.sh as a trap handler for ERR, EXIT and INT signals. -+# There are arrays trap_manager_error_handlers=() trap_manager_exit_handlers=() trap_manager_int_handlers=() -+# that will receive the actual handlers. -+# First param is the type of trap, the second is the value of "$?" -+# In order of occurrence. -+# 1) Ctrl-C causes INT [stack unreliable], then ERR, then EXIT with trap_exit_code > 0 -+# 2) Stuff failing causes ERR [stack OK], then EXIT with trap_exit_code > 0 -+# 3) exit_with_error causes EXIT [stack OK, with extra frame] directly with trap_exit_code == 43 -+# 4) EXIT can also be called directly [stack unreliable], with trap_exit_code == 0 if build successful. -+# So the EXIT trap will do: -+# - show stack, if not previously shown (trap_manager_error_handled==0), and if trap_exit_code > 0 -+# - allow for debug shell, if trap_exit_code > 0 -+# - call all the cleanup functions (always) -+function main_trap_handler() { -+ local trap_type="${1}" -+ local trap_exit_code="${2}" -+ local stack_caller short_stack -+ stack_caller="$(show_caller_full)" -+ short_stack="${BASH_SOURCE[1]}:${BASH_LINENO[0]}" - -- cd "${SRC}" || echo "Failed to cwd to ${SRC}" # Move pwd away, so unmounts work -- # those will loop until they're unmounted. -- umount_chroot_recursive "${SDCARD}/" -- umount_chroot_recursive "${MOUNT}/" -+ echo "-- main_trap_handler: ${trap_type} and ${trap_exit_code} trap_manager_error_handled:${trap_manager_error_handled} " 1>&2 - -- mountpoint -q "${SRC}"/cache/toolchain && umount -l "${SRC}"/cache/toolchain >&2 # @TODO: why does Igor uses lazy umounts? nfs? -- mountpoint -q "${SRC}"/cache/rootfs && umount -l "${SRC}"/cache/rootfs >&2 -- [[ $CRYPTROOT_ENABLE == yes ]] && cryptsetup luksClose "${ROOT_MAPPER}" >&2 -+ case "${trap_type}" in -+ TERM | INT) -+ display_alert "Build interrupted" "Build interrupted by SIG${trap_type}" "warn" -+ trap_manager_error_handled=1 -+ return # Nothing else to do here. Let the ERR trap show the stack, and the EXIT trap do cleanups. -+ ;; - -- # shellcheck disable=SC2153 # global var. also a local 'loop' in another function. sorry. -- if [[ -b "${LOOP}" ]]; then -- display_alert "Freeing loop" "unmount_on_exit ${LOOP}" "wrn" -- losetup -d "${LOOP}" >&2 -- fi -+ ERR) -+ logging_error_show_log -+ display_alert "Error occurred" "code ${trap_exit_code} at ${short_stack}\n${stack_caller}\n" "err" -+ trap_manager_error_handled=1 -+ return # Nothing else to do here, let the EXIT trap do the cleanups. -+ ;; - -- [[ -d "${SDCARD}" ]] && rm -rf --one-file-system "${SDCARD}" -- [[ -d "${MOUNT}" ]] && rm -rf --one-file-system "${MOUNT}" -+ EXIT) -+ if [[ ${trap_manager_error_handled} -lt 1 ]] && [[ ${trap_exit_code} -gt 0 ]]; then -+ logging_error_show_log -+ display_alert "Exit with error detected" "${trap_exit_code} at ${short_stack} -\n${stack_caller}\n" "err" -+ trap_manager_error_handled=1 -+ fi - -- # if we've been called by exit_with_error itself, don't recurse. -- if [[ "${ALREADY_EXITING_WITH_ERROR:-no}" != "yes" ]]; then -- exit_with_error "generic error during build_rootfs_image: ${stack_here}" || true # but don't trigger error again -- fi -+ if [[ ${trap_exit_code} -gt 0 ]] && [[ "${ERROR_DEBUG_SHELL}" == "yes" ]]; then -+ export ERROR_DEBUG_SHELL=no # dont do it twice -+ display_alert "MOUNT" "${MOUNT}" "debug" -+ display_alert "SDCARD" "${SDCARD}" "debug" -+ display_alert "ERROR_DEBUG_SHELL=yes, starting a shell." "ERROR_DEBUG_SHELL; exit to cleanup." "debug" -+ bash < /dev/tty >&2 || true -+ fi - -- return 49 # trap returns error. -+ # Run the cleanup handlers, always. -+ run_cleanup_handlers || true -+ ;; -+ esac - } - --# added by main_default_build_single to show details about errors when they happen and exit. exit might trigger the above. --function main_error_monitor() { -- if [[ "${ALREADY_EXITING_WITH_ERROR}" == "yes" ]]; then -- return 46 -+# Run the cleanup handlers, if any, and clean the cleanup list. -+function run_cleanup_handlers() { -+ echo "-- run_cleanup_handlers! list: ${trap_manager_cleanup_handlers[*]}" 1>&2 -+ if [[ ${#trap_manager_cleanup_handlers[@]} -lt 1 ]]; then -+ return 0 # No handlers set, just return. -+ else -+ display_alert "Cleaning up" "please wait for cleanups to finish" "debug" - fi -- local errcode="${1}" -- # If there's no error, do nothing. -- if [[ $errcode -eq 0 ]]; then -- return 0 -- fi -- local stack_caller="$(show_caller_full)" -- if [[ "${ALREADY_EXITING_WITH_ERROR}" != "yes" ]]; then # Don't do this is exit_with_error already did it. -- local logfile_to_show="${CURRENT_LOGFILE}" # store it -- unset CURRENT_LOGFILE # stop logging, otherwise crazy -- logging_error_show_log "main_error_monitor unknown error" "main_error_monitor unknown highlight" "${stack_caller}" "${logfile_to_show}" -- fi -- display_alert "main_error_monitor: error code ${errcode}" "\n${stack_caller}\n" "err" -+ # Loop over the handlers, execute one by one. Ignore errors. -+ local one_cleanup_handler -+ for one_cleanup_handler in "${trap_manager_cleanup_handlers[@]}"; do -+ display_alert "Running cleanup handler" "${one_cleanup_handler}" "debug" -+ "${one_cleanup_handler}" || true -+ done -+ # Clear the cleanup handler list, so they don't accidentally run again. -+ trap_manager_cleanup_handlers=() -+} -+ -+# Adds a callback for trap types; first argument is function name; extra params are the types to add for. -+function add_cleanup_handler() { -+ local callback="$1" -+ echo "-- Add callback ${callback} as cleanup handler" 1>&2 -+ trap_manager_cleanup_handlers+=("$callback") -+} -+ -+function remove_all_trap_handlers() { -+ echo "-- Will remove ALL trap handlers, for a clean exit..." 1>&2 -+} -+ -+# exit_with_error -+# a way to terminate build process with verbose error message -+function exit_with_error() { -+ # Log the error and exit. -+ # Everything else will be done by shared trap handling, above. -+ local _file="${BASH_SOURCE[1]}" -+ local _function=${FUNCNAME[1]} -+ local _line="${BASH_LINENO[0]}" -+ -+ display_alert "error: ${1}" "${2} in ${_function}() at ${_file}:${_line}" "err" -+ -+ # @TODO: move this into trap handler -+ # @TODO: integrate both overlayfs and the FD locking with cleanup logic -+ display_alert "Build terminating... wait for cleanups..." "" "err" -+ overlayfs_wrapper "cleanup" -+ # unlock loop device access in case of starvation # @TODO: hmm, say that again? -+ exec {FD}> /var/lock/armbian-debootstrap-losetup -+ flock -u "${FD}" - -- ALREADY_EXITING_WITH_ERROR=yes -- exit 45 -- return 44 -+ exit 43 - } -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 3e81d7cd5..7fc46c3d6 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -7,8 +7,9 @@ main_default_build_single() { - # Invoking chroot directly will fail in subtle ways, so, please use the runner.sh functions. - display_alert "Starting single build, exporting TMPDIR" "${WORKDIR}" "debug" - mkdir -p "${WORKDIR}" -+ add_cleanup_handler trap_handler_cleanup_workdir -+ - export TMPDIR="${WORKDIR}" -- # @todo: handle this in the exit trap, don't leave garbage behind when exiting. - - start=$(date +%s) - # Check and install dependencies, directory structure and settings -@@ -132,16 +133,6 @@ main_default_build_single() { - - *NOTE:* this will run only if there were no errors during build process. - RUN_AFTER_BUILD - -- # Cleanup. Remove the WORKDIR, unset the TMPDIR -- unset TMPDIR -- if [[ -d "${WORKDIR}" ]]; then -- display_alert "Cleaning up WORKDIR" "$(du -h -s "$WORKDIR")" "debug" -- rm -rf "${WORKDIR}" -- fi -- -- # cleanup the extension manager, that was initialized during prepare_and_config_main_build_single -- cleanup_extension_manager -- - end=$(date +%s) - runtime=$(((end - start) / 60)) - display_alert "Runtime" "$runtime min" "info" -@@ -163,3 +154,12 @@ main_default_build_single() { - display_alert "Repeat Build Options" "${repeat_args[*]}" "ext" # * = expand array, space delimited, single-word. - - } -+ -+function trap_handler_cleanup_workdir() { -+ echo "-- cleanup handler: Should cleanup $WORKDIR WORKDIR here" 1>&2 -+ unset TMPDIR -+ if [[ -d "${WORKDIR}" ]]; then -+ display_alert "Cleaning up WORKDIR" "$(du -h -s "$WORKDIR")" "debug" -+ rm -rf "${WORKDIR}" -+ fi -+} -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index e31c319fb..db8fe5b40 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -13,8 +13,8 @@ function build_rootfs_and_image() { - - [[ $ROOTFS_TYPE != ext4 ]] && display_alert "Assuming $BOARD $BRANCH kernel supports $ROOTFS_TYPE" "" "wrn" - -- # trap to unmount stuff in case of error/manual interruption -- trap unmount_on_exit INT TERM EXIT -+ # add handler to cleanup when done or if something fails or is interrupted. -+ add_cleanup_handler trap_handler_cleanup_rootfs_and_image - - # stage: clean and create directories - rm -rf $SDCARD $MOUNT -@@ -98,6 +98,28 @@ function build_rootfs_and_image() { - fi - rm -rf $SDCARD - -- # remove exit trap -- trap - INT TERM EXIT -+ # No need to remove the cleanup handler here, it's automatic. -+ return 0 -+} -+ -+function trap_handler_cleanup_rootfs_and_image() { -+ echo "-- trap_handler_cleanup_rootfs_and_image cleaning up..." 1>&2 -+ -+ cd "${SRC}" || echo "Failed to cwd to ${SRC}" # Move pwd away, so unmounts work -+ # those will loop until they're unmounted. -+ umount_chroot_recursive "${SDCARD}/" || true -+ umount_chroot_recursive "${MOUNT}/" || true -+ -+ mountpoint -q "${SRC}"/cache/toolchain && umount -l "${SRC}"/cache/toolchain >&2 # @TODO: why does Igor uses lazy umounts? nfs? -+ mountpoint -q "${SRC}"/cache/rootfs && umount -l "${SRC}"/cache/rootfs >&2 -+ [[ $CRYPTROOT_ENABLE == yes ]] && cryptsetup luksClose "${ROOT_MAPPER}" >&2 -+ -+ # shellcheck disable=SC2153 # global var. -+ if [[ -b "${LOOP}" ]]; then -+ display_alert "Freeing loop" "trap_handler_cleanup_rootfs_and_image ${LOOP}" "wrn" -+ losetup -d "${LOOP}" >&2 || true -+ fi -+ -+ [[ -d "${SDCARD}" ]] && rm -rf --one-file-system "${SDCARD}" -+ [[ -d "${MOUNT}" ]] && rm -rf --one-file-system "${MOUNT}" - } -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index acadbf6e3..eec9f2fa3 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -61,7 +61,7 @@ get_or_create_rootfs_cache_chroot_sdcard() { - umount --lazy "$SDCARD" - rm -rf $SDCARD - # remove exit trap -- trap - INT TERM EXIT -+ remove_all_trap_handlers INT TERM EXIT - exit - fi - -@@ -87,7 +87,7 @@ get_or_create_rootfs_cache_chroot_sdcard() { - umount --lazy "$SDCARD" - rm -rf $SDCARD - # remove exit trap -- trap - INT TERM EXIT -+ remove_all_trap_handlers INT TERM EXIT - exit - fi - - -From 7f06253437a0ae20d4570e09e8babe3302bb8350 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 16 Feb 2022 00:01:54 +0100 -Subject: [PATCH] armbian-next: manual merge (10) of all lib/*.sh changes - between revisions a4ae3a22703a66f1e383a193d74655533ff96c3a and - 3305d45b8175dbdd647dc1dc53fa6f0a522920c7 - but NOT the git unshallow stuff, - that will be rewritten - ---- - config/sources/families/bcm2711.conf | 9 ++++++++- - config/sources/families/include/uefi_common.inc | 14 ++++++++++--- - lib/functions/configuration/main-config.sh | 5 +---- - lib/functions/image/partitioning.sh | 27 +++++++------------------ - packages/armbian/builddeb | 9 --------- - 5 files changed, 27 insertions(+), 37 deletions(-) - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index 2198c490c..0dc25fc3f 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -57,7 +57,14 @@ pre_flash_kernel__symlink_dtb_and_kernel() { - Kernel-Flavors: any - EOD - -- ## DTB compatibility has been moved to symlink done in packages/armbian/builddeb -+ ## @TODO: rpardini: a horrible hack. I'll sort this out together with overlays, later. -+ local oneDTB dtbBase -+ for oneDTB in "${MOUNT}"/boot/dtb/broadcom/*.dtb; do -+ dtbBase=$(basename "${oneDTB}") -+ cp "${MOUNT}"/boot/dtb/broadcom/"${dtbBase}" "${MOUNT}"/etc/flash-kernel/dtbs/"${dtbBase}" -+ done -+ -+ rm -rf "${MOUNT}"/boot/dtb* || true - - # @TODO: rpardini: packaging could maybe already use the correct names? I can't figure out how. - ln -s ./Image "${MOUNT}"/boot/vmlinuz -diff --git a/config/sources/families/include/uefi_common.inc b/config/sources/families/include/uefi_common.inc -index 907e55ad1..7d6c97e0a 100644 ---- a/config/sources/families/include/uefi_common.inc -+++ b/config/sources/families/include/uefi_common.inc -@@ -3,19 +3,27 @@ export SERIALCON="tty1" # Cant reasonably expect UEFI s - export SKIP_BOOTSPLASH="yes" # No splash. - export UEFI_GRUB_TIMEOUT=${UEFI_GRUB_TIMEOUT:-3} # Default 3-seconds timeout for GRUB menu. - export BOARD_FIRMWARE_INSTALL="-full" # Install full firmware for UEFI boards --export DISTRO_GENERIC_KERNEL=no # no, build from source; yes: use distro - case "${BRANCH}" in - -- current | ddk) -+ legacy | ddk) - # This will force `unset KERNELSOURCE` later; no kernel will be built. - # Instead, the distro's default linux-generic kernel will be installed. - export DISTRO_GENERIC_KERNEL=yes - ;; - -- edge) -+ current) -+ export DISTRO_GENERIC_KERNEL=no - export LINUXCONFIG="linux-uefi-${LINUXFAMILY}-${BRANCH}" - export KERNELBRANCH="branch:linux-5.15.y" - export KERNELPATCHDIR="uefi-${LINUXFAMILY}-${BRANCH}" # Might be empty. - export KERNELDIR="linux-uefi-${LINUXFAMILY}" # Avoid sharing a source tree with others, until we know it's safe. - ;; -+ -+ edge) -+ export DISTRO_GENERIC_KERNEL=no -+ export LINUXCONFIG="linux-uefi-${LINUXFAMILY}-${BRANCH}" -+ export KERNELBRANCH="branch:linux-5.16.y" -+ export KERNELPATCHDIR="uefi-${LINUXFAMILY}-${BRANCH}" # Might be empty. -+ export KERNELDIR="linux-uefi-${LINUXFAMILY}" # Avoid sharing a source tree with others, until we know it's safe. -+ ;; - esac -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 06eb888fd..25dd263a5 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -151,14 +151,11 @@ function do_main_configuration() { - - case $GITHUB_MIRROR in - fastgit) -- GITHUB_SOURCE='https://hub.fastgit.org/' -+ GITHUB_SOURCE='https://hub.fastgit.xyz/' - ;; - gitclone) - GITHUB_SOURCE='https://gitclone.com/github.com/' - ;; -- cnpmjs) -- GITHUB_SOURCE='https://github.com.cnpmjs.org/' -- ;; - *) - GITHUB_SOURCE='https://github.com/' - ;; -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 0e075132a..2387f37e0 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -134,26 +134,13 @@ prepare_partitions() { - fi - else - local imagesize=$(($rootfs_size + $OFFSET + $BOOTSIZE + $UEFISIZE + $EXTRA_ROOTFS_MIB_SIZE)) # MiB -- case $ROOTFS_TYPE in -- btrfs) -- # Used for server images, currently no swap functionality, so disk space -- if [[ $BTRFS_COMPRESSION == none ]]; then -- local sdsize=$(bc -l <<< "scale=0; (($imagesize * 1.25) / 4 + 1) * 4") -- else -- # requirements are rather low since rootfs gets filled with compress-force=zlib -- local sdsize=$(bc -l <<< "scale=0; (($imagesize * 0.8) / 4 + 1) * 4") -- fi -- ;; -- *) -- # Hardcoded overhead +25% is needed for desktop images, -- # for CLI it could be lower. Align the size up to 4MiB -- if [[ $BUILD_DESKTOP == yes ]]; then -- local sdsize=$(bc -l <<< "scale=0; ((($imagesize * 1.30) / 1 + 0) / 4 + 1) * 4") -- else -- local sdsize=$(bc -l <<< "scale=0; ((($imagesize * 1.25) / 1 + 0) / 4 + 1) * 4") -- fi -- ;; -- esac -+ # Hardcoded overhead +25% is needed for desktop images, -+ # for CLI it could be lower. Align the size up to 4MiB -+ if [[ $BUILD_DESKTOP == yes ]]; then -+ local sdsize=$(bc -l <<< "scale=0; ((($imagesize * 1.30) / 1 + 0) / 4 + 1) * 4") -+ else -+ local sdsize=$(bc -l <<< "scale=0; ((($imagesize * 1.25) / 1 + 0) / 4 + 1) * 4") -+ fi - fi - - # stage: create blank image -diff --git a/packages/armbian/builddeb b/packages/armbian/builddeb -index 0209f3528..0163d401a 100755 ---- a/packages/armbian/builddeb -+++ b/packages/armbian/builddeb -@@ -74,23 +74,14 @@ create_package() { - exit 0 - EOT - -- # for Ubuntu/Debian compatiblity, copy DTBs to /lib/firmware/$version/device-tree - cat >> $pdir/DEBIAN/postinst <<- EOT - cd /boot - ln -sfT dtb-$version dtb 2> /dev/null || mv dtb-$version dtb -- mkdir -p /lib/firmware/$version -- rm -rf /lib/firmware/$version/device-tree -- cp -rp /boot/dtb-$version /lib/firmware/$version/device-tree - exit 0 - EOT - -- cat >> $pdir/DEBIAN/postrm <<- EOT -- rm -rf /lib/firmware/$version -- EOT -- - chmod 775 $pdir/DEBIAN/preinst - chmod 775 $pdir/DEBIAN/postinst -- chmod 775 $pdir/DEBIAN/postrm - fi - - # Create postinst prerm script for headers - -From dcbc1fa8d159e9a7423e82c5bc81b223c20dfbc1 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 13 Feb 2022 14:35:36 +0100 -Subject: [PATCH] armbian-next: trapmanager pt1, identifying spots for trap - manager intervention - ---- - lib/functions/bsp/bsp-cli.sh | 2 +- - lib/functions/bsp/bsp-desktop.sh | 4 ++-- - lib/functions/compilation/atf.sh | 2 +- - lib/functions/compilation/debs.sh | 6 +++--- - lib/functions/compilation/kernel.sh | 2 +- - lib/functions/compilation/uboot.sh | 2 +- - 6 files changed, 9 insertions(+), 9 deletions(-) - -diff --git a/lib/functions/bsp/bsp-cli.sh b/lib/functions/bsp/bsp-cli.sh -index a4e6db654..ee557963c 100644 ---- a/lib/functions/bsp/bsp-cli.sh -+++ b/lib/functions/bsp/bsp-cli.sh -@@ -1,7 +1,7 @@ - create_board_package() { - display_alert "Creating board support package for CLI" "$CHOSEN_ROOTFS" "info" - -- bsptempdir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. -+ bsptempdir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. - chmod 700 ${bsptempdir} - - local destination=${bsptempdir}/${BSP_CLI_PACKAGE_FULLNAME} -diff --git a/lib/functions/bsp/bsp-desktop.sh b/lib/functions/bsp/bsp-desktop.sh -index 7ccba50c2..54259fc4a 100644 ---- a/lib/functions/bsp/bsp-desktop.sh -+++ b/lib/functions/bsp/bsp-desktop.sh -@@ -32,7 +32,7 @@ create_desktop_package() { - PACKAGE_LIST_PREDEPENDS=${PACKAGE_LIST_PREDEPENDS//[[:space:]]/} - - local destination tmp_dir -- tmp_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. -+ tmp_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. - destination=${tmp_dir}/${BOARD}/${CHOSEN_DESKTOP}_${REVISION}_all - rm -rf "${destination}" - mkdir -p "${destination}"/DEBIAN -@@ -97,7 +97,7 @@ create_bsp_desktop_package() { - local package_name="${BSP_DESKTOP_PACKAGE_FULLNAME}" - - local destination tmp_dir -- tmp_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. -+ tmp_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. - destination=${tmp_dir}/${BOARD}/${BSP_DESKTOP_PACKAGE_FULLNAME} - rm -rf "${destination}" - mkdir -p "${destination}"/DEBIAN -diff --git a/lib/functions/compilation/atf.sh b/lib/functions/compilation/atf.sh -index 857c1744f..f5e9aa691 100644 ---- a/lib/functions/compilation/atf.sh -+++ b/lib/functions/compilation/atf.sh -@@ -57,7 +57,7 @@ compile_atf() { - - [[ $(type -t atf_custom_postprocess) == function ]] && atf_custom_postprocess 2>&1 - -- atftempdir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. -+ atftempdir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. - chmod 700 ${atftempdir} - - # copy files to temp directory -diff --git a/lib/functions/compilation/debs.sh b/lib/functions/compilation/debs.sh -index f491715a3..b00d12c60 100644 ---- a/lib/functions/compilation/debs.sh -+++ b/lib/functions/compilation/debs.sh -@@ -3,7 +3,7 @@ compile_firmware() { - - local firmwaretempdir plugin_dir - -- firmwaretempdir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. -+ firmwaretempdir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. - chmod 700 ${firmwaretempdir} - - plugin_dir="armbian-firmware${FULL}" -@@ -50,7 +50,7 @@ compile_firmware() { - compile_armbian-zsh() { - - local tmp_dir armbian_zsh_dir -- tmp_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. -+ tmp_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. - chmod 700 ${tmp_dir} - - armbian_zsh_dir=armbian-zsh_${REVISION}_all -@@ -124,7 +124,7 @@ compile_armbian-zsh() { - compile_armbian-config() { - - local tmp_dir armbian_config_dir -- tmp_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. -+ tmp_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. - chmod 700 ${tmp_dir} - - armbian_config_dir=armbian-config_${REVISION}_all -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 306fbb839..3bf77ae1b 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -245,7 +245,7 @@ function compile_kernel() { - create_linux-source_package() { - ts=$(date +%s) - local sources_pkg_dir tmp_src_dir -- tmp_src_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. -+ tmp_src_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. - - sources_pkg_dir=${tmp_src_dir}/${CHOSEN_KSRC}_${REVISION}_all - mkdir -p "${sources_pkg_dir}"/usr/src/ \ -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index 051dbfdb7..d2d6447a2 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -142,7 +142,7 @@ compile_uboot() { - local uboot_name="${CHOSEN_UBOOT}_${REVISION}_${ARCH}" - - # create directory structure for the .deb package -- uboottempdir="$(mktemp -d)" # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. -+ uboottempdir="$(mktemp -d)" # subject to TMPDIR/WORKDIR, so is protected by single/common error trapmanager to clean-up. - chmod 700 "${uboottempdir}" - mkdir -p "$uboottempdir/$uboot_name/usr/lib/u-boot" "$uboottempdir/$uboot_name/usr/lib/$uboot_name" "$uboottempdir/$uboot_name/DEBIAN" - - -From d2c3f332f9e9a04ff68d2bf1e694a223999e3304 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 13 Feb 2022 13:42:44 +0100 -Subject: [PATCH] armbian-next: `install_pkg_deb` -> - `install_host_side_packages` which is completely rewritten version - -- much simplified; compare installed packages vs wanted, and only update if some missing ---- - lib/functions/general/host.sh | 141 ++++++++------------------------------- - lib/functions/logging/runners.sh | 14 +++- - 2 files changed, 40 insertions(+), 115 deletions(-) - -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index 2f24d4826..34f17a38e 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -157,9 +157,8 @@ prepare_host() { - # don't prompt for apt cacher selection - sudo echo "apt-cacher-ng apt-cacher-ng/tunnelenable boolean false" | sudo debconf-set-selections - -- LOG_OUTPUT_FILE="${DEST}"/${LOG_SUBPATH}/hostdeps.log -- install_pkg_deb "$hostdeps" -- unset LOG_OUTPUT_FILE -+ # This handles the wanted list in $hostdeps, updates apt only if needed -+ install_host_side_packages "$hostdeps" - - update-ccache-symlinks - -@@ -308,119 +307,33 @@ function fetch_and_build_host_tools() { - - } - --# Installing debian packages in the armbian build system. --# The function accepts four optional parameters: --# autoupdate - If the installation list is not empty then update first. --# upgrade, clean - the same name for apt --# verbose - detailed log for the function --# --# list="pkg1 pkg2 pkg3 pkgbadname pkg-1.0 | pkg-2.0 pkg5 (>= 9)" --# install_pkg_deb upgrade verbose $list --# or --# install_pkg_deb autoupdate $list --# --# If the package has a bad name, we will see it in the log file. --# If there is an LOG_OUTPUT_FILE variable and it has a value as --# the full real path to the log file, then all the information will be there. --# --# The LOG_OUTPUT_FILE variable must be defined in the calling function --# before calling the install_pkg_deb function and unset after. --# --install_pkg_deb() { -- local list="" -- local log_file -- local for_install -- local need_autoup=false -- local need_upgrade=false -- local need_clean=false -- local need_verbose=false -- local _line=${BASH_LINENO[0]} -- local _function=${FUNCNAME[1]} -- local _file=$(basename "${BASH_SOURCE[1]}") -- local tmp_file=$(mktemp /tmp/install_log_XXXXX) # @TODO: rpardini: hmm. why? lets use TMPDIR just like everyone else. -- export DEBIAN_FRONTEND=noninteractive -- -- list=$( -- for p in $*; do -- case $p in -- autoupdate) -- need_autoup=true -- continue -- ;; -- upgrade) -- need_upgrade=true -- continue -- ;; -- clean) -- need_clean=true -- continue -- ;; -- verbose) -- need_verbose=true -- continue -- ;; -- \| | \(* | *\)) continue ;; -- esac -- echo " $p" -- done -- ) -- -- if [ -d $(dirname $LOG_OUTPUT_FILE) ]; then -- log_file=${LOG_OUTPUT_FILE} -- else -- log_file="${SRC}/output/${LOG_SUBPATH}/install.log" -- fi -- -- # This is necessary first when there is no apt cache. -- if $need_upgrade; then -- apt-get -q update || echo "apt cannot update" >> $tmp_file -- apt-get -y upgrade || echo "apt cannot upgrade" >> $tmp_file -- fi -- -- # If the package is not installed, check the latest -- # up-to-date version in the apt cache. -- # Exclude bad package names and send a message to the log. -- for_install=$( -- for p in $list; do -- if $(dpkg-query -W -f '${db:Status-Abbrev}' $p |& awk '/ii/{exit 1}'); then -- apt-cache show $p -o APT::Cache::AllVersions=no |& -- awk -v p=$p -v tmp_file=$tmp_file \ -- '/^Package:/{print $2} /^E:/{print "Bad package name: ",p >>tmp_file}' -- fi -- done -- ) -- -- # This information should be logged. -- if [ -s $tmp_file ]; then -- echo -e "\nInstalling packages in function: $_function" "[$_file:$_line]" \ -- >> $log_file -- echo -e "\nIncoming list:" >> $log_file -- printf "%-30s %-30s %-30s %-30s\n" $list >> $log_file -- echo "" >> $log_file -- cat $tmp_file >> $log_file -- fi -- -- if [ -n "$for_install" ]; then -- if $need_autoup; then -- apt-get -q update -- apt-get -y upgrade -+# Install the whitespace-delimited packages listed in the first parameter, in the host (not chroot). -+# It handles correctly the case where all wanted packages are already installed, and in that case does nothing. -+# If packages are to be installed, it does an apt-get update first. -+function install_host_side_packages() { -+ declare wanted_packages_string -+ declare -a currently_installed_packages missing_packages -+ wanted_packages_string=${*} -+ missing_packages=() -+ # shellcheck disable=SC2207 # I wanna split, thanks. -+ currently_installed_packages=($(dpkg-query --show --showformat='${Package} ')) -+ for PKG_TO_INSTALL in ${wanted_packages_string}; do -+ # shellcheck disable=SC2076 # I wanna match literally, thanks. -+ if [[ ! " ${currently_installed_packages[*]} " =~ " ${PKG_TO_INSTALL} " ]]; then -+ display_alert "Should install package" "${PKG_TO_INSTALL}" -+ missing_packages+=("${PKG_TO_INSTALL}") - fi -- apt-get install -qq -y --no-install-recommends $for_install -- echo -e "\nPackages installed:" >> $log_file -- dpkg-query -W \ -- -f '${binary:Package;-27} ${Version;-23}\n' \ -- $for_install >> $log_file -- -- fi -+ done - -- # We will show the status after installation all listed -- if $need_verbose; then -- echo -e "\nstatus after installation:" >> $log_file -- dpkg-query -W \ -- -f '${binary:Package;-27} ${Version;-23} [ ${Status} ]\n' \ -- $list >> $log_file -+ if [[ ${#missing_packages[@]} -gt 0 ]]; then -+ display_alert "Updating apt host-side for installing packages" "${#missing_packages[@]} packages" "info" -+ host_apt_get update -+ display_alert "Installing host-side packages" "${missing_packages[*]}" "info" -+ host_apt_get_install "${missing_packages[@]}" -+ else -+ display_alert "All host-side dependencies/packages already installed." "Skipping host-hide install" "debug" - fi - -- if $need_clean; then apt-get clean; fi -- rm $tmp_file -+ unset currently_installed_packages -+ return 0 - } -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 66bd54015..cdce6ead3 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -8,8 +8,8 @@ function chroot_sdcard_apt_get() { - [[ $NO_APT_CACHER != yes ]] && apt_params+=( - -o "Acquire::http::Proxy=\"http://${APT_PROXY_ADDR:-localhost:3142}\"" - -o "Acquire::http::Proxy::localhost=\"DIRECT\"" -- -o "Dpkg::Use-Pty=0" # Please be quiet - ) -+ apt_params+=(-o "Dpkg::Use-Pty=0") # Please be quiet - # IMPORTANT: this function returns the exit code of last statement, in this case chroot (which gets its result from bash which calls apt-get) - chroot_sdcard DEBIAN_FRONTEND=noninteractive apt-get "${apt_params[@]}" "$@" - } -@@ -74,6 +74,18 @@ function run_host_command_logged_long_running() { - run_host_command_logged_raw /bin/bash -e -c "$*" - } - -+# For installing packages host-side. Not chroot! -+function host_apt_get_install() { -+ host_apt_get --no-install-recommends install "$@" -+} -+ -+# For running apt-get stuff host-side. Not chroot! -+function host_apt_get() { -+ local -a apt_params=("-${APT_OPTS:-y}") -+ apt_params+=(-o "Dpkg::Use-Pty=0") # Please be quiet -+ run_host_command_logged DEBIAN_FRONTEND=noninteractive apt-get "${apt_params[@]}" "$@" -+} -+ - # run_host_command_logged is the very basic, should be used for everything, but, please use helpers above, this is very low-level. - function run_host_command_logged() { - run_host_command_logged_raw /bin/bash -e -c "$*" - -From 3b2d026b59d86cd463119876a9b69b02fd6ecf45 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 13 Feb 2022 13:27:31 +0100 -Subject: [PATCH] armbian-next: force u-boot and kernel's gcc to output colors - to make easy to spot warnings and errors - ---- - lib/functions/compilation/kernel.sh | 4 +--- - lib/functions/compilation/uboot.sh | 4 ++-- - 2 files changed, 3 insertions(+), 5 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index e10c5af72..306fbb839 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -20,9 +20,7 @@ function run_kernel_make() { - "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # Prefix for tool invocations. - ) - -- #if [[ "${SHOW_LOG}" == "yes" ]]; then -- common_make_params_quoted+=("KCFLAGS=-fdiagnostics-color=always") # Force GCC colored messages. -- #fi -+ common_make_params_quoted+=("KCFLAGS=-fdiagnostics-color=always") # Force GCC colored messages. - - # last statement, so it passes the result to calling function. - full_command=("${KERNEL_MAKE_RUNNER:-run_host_command_logged}" "${common_make_envs[@]}" make "$@" "${common_make_params_quoted[@]@Q}") -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index ca56fbfa1..051dbfdb7 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -32,7 +32,7 @@ function compile_uboot_target() { - display_alert "${uboot_prefix}Preparing u-boot config" "${version} ${target_make}" "info" - export MSG_IF_ERROR="${uboot_prefix}Failed to configure u-boot ${version} $BOOTCONFIG ${target_make}" - run_host_command_logged CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" \ -- make "$CTHREADS" "$BOOTCONFIG" "CROSS_COMPILE=\"$CCACHE $UBOOT_COMPILER\"" -+ make "$CTHREADS" "$BOOTCONFIG" "CROSS_COMPILE=\"$CCACHE $UBOOT_COMPILER\"" "KCFLAGS=-fdiagnostics-color=always" - - # armbian specifics u-boot settings - [[ -f .config ]] && sed -i 's/CONFIG_LOCALVERSION=""/CONFIG_LOCALVERSION="-armbian"/g' .config -@@ -66,7 +66,7 @@ function compile_uboot_target() { - - display_alert "${uboot_prefix}Compiling u-boot" "${version} ${target_make}" "info" - export MSG_IF_ERROR="${uboot_prefix}Failed to build u-boot ${version} ${target_make}" -- run_host_command_logged_long_running CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" make "$target_make" "$CTHREADS" "${cross_compile}" -+ run_host_command_logged_long_running CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" make "$target_make" "$CTHREADS" "${cross_compile}" "KCFLAGS=-fdiagnostics-color=always" - - if [[ $(type -t uboot_custom_postprocess) == function ]]; then - display_alert "${uboot_prefix}Postprocessing u-boot" "${version} ${target_make}" - -From fb4be3fa4a0d19043ee8d7ff1304ec3ccdf618cb Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 13 Feb 2022 13:23:51 +0100 -Subject: [PATCH] docker: pass the `CI` env var through Docker invocation, for - GitHub Actions - ---- - config/templates/config-docker.conf | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/config/templates/config-docker.conf b/config/templates/config-docker.conf -index 54f655b59..0a59dfb28 100644 ---- a/config/templates/config-docker.conf -+++ b/config/templates/config-docker.conf -@@ -90,6 +90,9 @@ DOCKER_FLAGS+=(-v=${SRC}/cache:/root/armbian/cache -v=armbian-ccache:/root/.ccac - - DOCKER_FLAGS+=(-e COLUMNS="`tput cols`" -e LINES="`tput lines`") - -+# Pass the "CI" env variable that comes from Github Actions. -+DOCKER_FLAGS+=(-e CI="${CI}") -+ - # pass other command line arguments like KERNEL_ONLY=yes, KERNEL_CONFIGURE=yes, etc. - # pass "docker-guest" as an additional config name that will be sourced in the container if exists - if [[ $SHELL_ONLY == yes ]]; then - -From 3db36a4fd3e6ad8c1b2d47d88d664936274bb875 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 13 Feb 2022 13:23:09 +0100 -Subject: [PATCH] armbian-next: avoid warning if "file" utility not installed - -- should not happen, but better safe than sorry ---- - lib/functions/logging/runners.sh | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 01bc1c8cd..66bd54015 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -121,9 +121,12 @@ run_on_sdcard() { - # Determine if we're building on non-amd64, and if so, which qemu binary to use. - function run_host_x86_binary_logged() { - local -a qemu_invocation target_bin_arch -- target_bin_arch="$(file -b "$1" | cut -d "," -f 1,2 | xargs echo -n)" # obtain the ELF name from the binary using 'file' -- qemu_invocation=("$@") # Default to calling directly, without qemu. -- if [[ "$(uname -m)" != "x86_64" ]]; then # If we're NOT on x86... -+ target_bin_arch="unknown - file util missing" -+ if [[ -f /usr/bin/file ]]; then -+ target_bin_arch="$(file -b "$1" | cut -d "," -f 1,2 | xargs echo -n)" # obtain the ELF name from the binary using 'file' -+ fi -+ qemu_invocation=("$@") # Default to calling directly, without qemu. -+ if [[ "$(uname -m)" != "x86_64" ]]; then # If we're NOT on x86... - if [[ -f /usr/bin/qemu-x86_64-static ]]; then - display_alert "Using qemu-x86_64-static for running on $(uname -m)" "$1 (${target_bin_arch})" "debug" - qemu_invocation=("/usr/bin/qemu-x86_64-static" "-L" "/usr/x86_64-linux-gnu" "$@") - -From d986cbc68bc926d9dc8fca44cbe9b5a19d6a88b6 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 13 Feb 2022 13:22:33 +0100 -Subject: [PATCH] armbian-next: disable long_running `pv` progress bar for - custom case too - -- will rework later, for now pipe causes subshell and caos ---- - lib/functions/logging/runners.sh | 22 +++++++++++++--------- - 1 file changed, 13 insertions(+), 9 deletions(-) - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 9cf069834..01bc1c8cd 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -27,15 +27,19 @@ function chroot_sdcard_with_stdout() { - function chroot_custom_long_running() { - local target=$1 - shift -- local _exit_code=1 -- if [[ "${SHOW_LOG}" == "yes" ]] || [[ "${CI}" == "true" ]]; then -- TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" -- _exit_code=$? -- else -- TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" | pv -N "$(logging_echo_prefix_for_pv "${INDICATOR:-compile}")" --progress --timer --line-mode --force --cursor --delay-start 0 -i "0.5" -- _exit_code=$? -- fi -- return $_exit_code -+ -+ # @TODO: disabled, the pipe causes the left-hand side to subshell and caos ensues. -+ # local _exit_code=1 -+ # if [[ "${SHOW_LOG}" == "yes" ]] || [[ "${CI}" == "true" ]]; then -+ # TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" -+ # _exit_code=$? -+ # else -+ # TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" | pv -N "$(logging_echo_prefix_for_pv "${INDICATOR:-compile}")" --progress --timer --line-mode --force --cursor --delay-start 0 -i "0.5" -+ # _exit_code=$? -+ # fi -+ # return $_exit_code -+ -+ TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" - } - - function chroot_custom() { - -From 7d49d5f6a72be78fa8afcd362fe7984e34d28614 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 13 Feb 2022 13:21:12 +0100 -Subject: [PATCH] armbian-next: if `CI=true` then `SHOW_LOG=yes` always - ---- - compile.sh | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/compile.sh b/compile.sh -index 3a5052989..64fcfb4f1 100755 ---- a/compile.sh -+++ b/compile.sh -@@ -36,6 +36,11 @@ if [[ ! -f "${SRC}"/lib/single.sh ]]; then - exit 255 - fi - -+# Most CI runners, GitHub Actions included, pass env var "CI=true". In this case, force full logging. -+if [[ "${CI}" == "true" ]]; then -+ export SHOW_LOG=yes -+fi -+ - # shellcheck source=lib/single.sh - source "${SRC}"/lib/single.sh - - -From a803a9dbbb8b86301ca930214675c1365e9125a7 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 12 Feb 2022 23:18:05 +0100 -Subject: [PATCH] docker: add arm64 toolchain to Dockerfile; warn, but don't - break, on modprobe failure - ---- - config/templates/Dockerfile | 2 ++ - lib/functions/general/host.sh | 2 +- - 2 files changed, 3 insertions(+), 1 deletion(-) - -diff --git a/config/templates/Dockerfile b/config/templates/Dockerfile -index 06f873cf1..9a56ca2e9 100644 ---- a/config/templates/Dockerfile -+++ b/config/templates/Dockerfile -@@ -53,6 +53,8 @@ RUN apt-get update \ - gcc-arm-linux-gnueabihf \ - gcc-arm-linux-gnueabi \ - gcc-arm-none-eabi \ -+ gcc-aarch64-linux-gnu \ -+ g++-aarch64-linux-gnu \ - gdisk \ - git \ - imagemagick \ -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index 94409fafd..2f24d4826 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -244,7 +244,7 @@ prepare_host() { - - # enable arm binary format so that the cross-architecture chroot environment will work - if [[ $KERNEL_ONLY != yes ]]; then -- modprobe -q binfmt_misc -+ modprobe -q binfmt_misc || display_alert "Failed to modprobe" "binfmt_misc" "warn" - mountpoint -q /proc/sys/fs/binfmt_misc/ || mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc - if [[ "$(arch)" != "aarch64" ]]; then - test -e /proc/sys/fs/binfmt_misc/qemu-arm || update-binfmts --enable qemu-arm - -From aaed9afade2dda38d9e92a7054f3477801468760 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 12 Feb 2022 21:52:01 +0100 -Subject: [PATCH] armbian-next: docker: use ubuntu:rolling, fix deps, use - `$SRC/cache` as container's cache dir - ---- - config/templates/Dockerfile | 7 ++----- - config/templates/config-docker.conf | 4 ++-- - 2 files changed, 4 insertions(+), 7 deletions(-) - -diff --git a/config/templates/Dockerfile b/config/templates/Dockerfile -index 3666170d1..06f873cf1 100644 ---- a/config/templates/Dockerfile -+++ b/config/templates/Dockerfile -@@ -1,7 +1,4 @@ --ARG BASE_IMAGE=ubuntu:jammy --FROM $BASE_IMAGE as armbian_builder --ARG CUSTOM_PACKAGES='g++-11-arm-linux-gnueabihf libssl3' --ENV CUSTOM_PACKAGES $CUSTOM_PACKAGES -+FROM ubuntu:rolling - ARG DEBIAN_FRONTEND=noninteractive - RUN apt-get update && apt-get -y dist-upgrade && apt-get -y install \ - joe \ -@@ -23,7 +20,6 @@ RUN sh -c " \ - RUN apt-get update \ - && apt-get -y dist-upgrade \ - && apt-get install -y --no-install-recommends \ -- $CUSTOM_PACKAGES \ - acl \ - aptly \ - aria2 \ -@@ -51,6 +47,7 @@ RUN apt-get update \ - fakeroot \ - fdisk \ - flex \ -+ g++-arm-linux-gnueabihf \ - gawk \ - gcc-aarch64-linux-gnu \ - gcc-arm-linux-gnueabihf \ -diff --git a/config/templates/config-docker.conf b/config/templates/config-docker.conf -index 60b9a22ac..54f655b59 100644 ---- a/config/templates/config-docker.conf -+++ b/config/templates/config-docker.conf -@@ -83,10 +83,10 @@ fi - #DOCKER_FLAGS+=(-v /dev/bus/usb:/dev/bus/usb:ro) - - # map source to Docker Working dir. --DOCKER_FLAGS+=(-v=$SRC/:/root/armbian/) -+DOCKER_FLAGS+=(-v=${SRC}/:/root/armbian/) - - # mount 2 named volumes - for cacheable data and compiler cache --DOCKER_FLAGS+=(-v=armbian-cache:/root/armbian/cache -v=armbian-ccache:/root/.ccache) -+DOCKER_FLAGS+=(-v=${SRC}/cache:/root/armbian/cache -v=armbian-ccache:/root/.ccache) - - DOCKER_FLAGS+=(-e COLUMNS="`tput cols`" -e LINES="`tput lines`") - - -From 6e52c4d1b50f4bff209d7536573329f7ea9e5e47 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 12 Feb 2022 23:17:20 +0100 -Subject: [PATCH] armbian-next: logging fixes (padding, don't show error more - than once, don't remove trap) - ---- - lib/functions/logging/logging.sh | 1 - - lib/functions/logging/stacktraces.sh | 2 +- - lib/functions/logging/traps.sh | 4 +--- - 3 files changed, 2 insertions(+), 5 deletions(-) - -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 65ad6db33..8c3bfa315 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -22,7 +22,6 @@ function logging_error_show_log() { - local logfile_to_show="$4" - - if [[ -f "${logfile_to_show}" ]]; then -- - local prefix_sed_contents="${normal_color}${left_marker}${padding}👉${padding}${right_marker} " - local prefix_sed_cmd="s/^/${prefix_sed_contents}/;" - display_alert " 👇👇👇 Showing logfile below 👇👇👇" "${logfile_to_show}" "err" -diff --git a/lib/functions/logging/stacktraces.sh b/lib/functions/logging/stacktraces.sh -index a1c256bb5..14e74171f 100644 ---- a/lib/functions/logging/stacktraces.sh -+++ b/lib/functions/logging/stacktraces.sh -@@ -37,7 +37,7 @@ function show_caller_full() { - while caller $i; do - ((i++)) - done | while read -r line_no function_name file_name; do -- local padded_function_name=$(printf "%20s" "$function_name") -+ local padded_function_name=$(printf "%30s" "$function_name") - local short_file_name="${file_name/"${SRC}/"/"./"}" - echo -e "$padded_function_name --> $short_file_name:$line_no" - done -diff --git a/lib/functions/logging/traps.sh b/lib/functions/logging/traps.sh -index 7891db338..f403547c9 100644 ---- a/lib/functions/logging/traps.sh -+++ b/lib/functions/logging/traps.sh -@@ -44,8 +44,7 @@ unmount_on_exit() { - # added by main_default_build_single to show details about errors when they happen and exit. exit might trigger the above. - function main_error_monitor() { - if [[ "${ALREADY_EXITING_WITH_ERROR}" == "yes" ]]; then -- display_alert "second run detected" "ERR trap" "err" -- #exit 46 -+ return 46 - fi - local errcode="${1}" - # If there's no error, do nothing. -@@ -61,7 +60,6 @@ function main_error_monitor() { - display_alert "main_error_monitor: error code ${errcode}" "\n${stack_caller}\n" "err" - - ALREADY_EXITING_WITH_ERROR=yes -- trap - EXIT # remove EXIT trap, we're gonna exit... - exit 45 - return 44 - } - -From 5022af1c97af824af73d6e79bee988a3bf3773d1 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 12 Feb 2022 21:50:37 +0100 -Subject: [PATCH] armbian-next: fixes for early error handling and logging - -- split stacktrace-related functions into their own lib file -- simplify the traps -- some stacktrace formatting for readability ---- - compile.sh | 3 ++- - lib/extensions.sh | 45 ------------------------------------ - lib/functions/logging/stacktraces.sh | 45 ++++++++++++++++++++++++++++++++++++ - lib/functions/logging/traps.sh | 8 +++---- - lib/library-functions.sh | 10 ++++++++ - 5 files changed, 60 insertions(+), 51 deletions(-) - -diff --git a/compile.sh b/compile.sh -index 5e92ddefe..3a5052989 100755 ---- a/compile.sh -+++ b/compile.sh -@@ -15,6 +15,7 @@ - - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -e - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled - # Important, go read http://mywiki.wooledge.org/BashFAQ/105 NOW! -@@ -39,7 +40,7 @@ fi - source "${SRC}"/lib/single.sh - - # hook up the error handler early, we wanna see stack for all errors. --trap 'main_error_monitor "$?" "$(show_caller_full)" "$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}")"' ERR EXIT -+trap 'main_error_monitor "$?"' ERR EXIT - - # And execute the main entrypoint. - cli_entrypoint "$@" -diff --git a/lib/extensions.sh b/lib/extensions.sh -index c9f9cc9c4..737656a38 100644 ---- a/lib/extensions.sh -+++ b/lib/extensions.sh -@@ -314,51 +314,6 @@ write_hook_point_metadata() { - echo "${main_hook_point_name}" >> "${EXTENSION_MANAGER_TMP_DIR}/hook_point_calls.txt" - } - --# Helper function, to get clean "stack traces" that do not include the hook/extension infrastructure code. --get_extension_hook_stracktrace() { -- local sources_str="$1" # Give this ${BASH_SOURCE[*]} - expanded -- local lines_str="$2" # And this # Give this ${BASH_LINENO[*]} - expanded -- local sources lines index final_stack="" -- IFS=' ' read -r -a sources <<< "${sources_str}" -- IFS=' ' read -r -a lines <<< "${lines_str}" -- for index in "${!sources[@]}"; do -- local source="${sources[index]}" line="${lines[((index - 1))]}" -- # skip extension infrastructure sources, these only pollute the trace and add no insight to users -- [[ ${source} == */.tmp/extension_function_definition.sh ]] && continue -- [[ ${source} == *lib/extensions.sh ]] && continue -- [[ ${source} == *lib/functions/logging.sh ]] && continue -- [[ ${source} == */compile.sh ]] && continue -- [[ ${line} -lt 1 ]] && continue -- # relativize the source, otherwise too long to display -- source="${source#"${SRC}/"}" -- # remove 'lib/'. hope this is not too confusing. -- source="${source#"lib/functions/"}" -- source="${source#"lib/"}" -- # add to the list -- # shellcheck disable=SC2015 # i know. thanks. I won't write an if here -- arrow="$([[ "$final_stack" != "" ]] && echo "-> " || true)" -- final_stack="${source}:${line} ${arrow} ${final_stack} " -- done -- # output the result, no newline -- # shellcheck disable=SC2086 # I wanna suppress double spacing, thanks -- echo -n $final_stack --} -- --show_caller_full() { -- { -- local i=0 -- local line_no -- local function_name -- local file_name -- echo "" # line break -- while caller $i; do -- ((i++)) -- done | while read -r line_no function_name file_name; do -- echo -e "\t$file_name:$line_no\tat\t$function_name" -- done -- } || true # always success --} -- - # can be called by board, family, config or user to make sure an extension is included. - # single argument is the extension name. - # will look for it in /userpatches/extensions first. -diff --git a/lib/functions/logging/stacktraces.sh b/lib/functions/logging/stacktraces.sh -new file mode 100644 -index 000000000..a1c256bb5 ---- /dev/null -+++ b/lib/functions/logging/stacktraces.sh -@@ -0,0 +1,45 @@ -+# Helper function, to get clean "stack traces" that do not include the hook/extension infrastructure code. -+function get_extension_hook_stracktrace() { -+ local sources_str="$1" # Give this ${BASH_SOURCE[*]} - expanded -+ local lines_str="$2" # And this # Give this ${BASH_LINENO[*]} - expanded -+ local sources lines index final_stack="" -+ IFS=' ' read -r -a sources <<< "${sources_str}" -+ IFS=' ' read -r -a lines <<< "${lines_str}" -+ for index in "${!sources[@]}"; do -+ local source="${sources[index]}" line="${lines[((index - 1))]}" -+ # skip extension infrastructure sources, these only pollute the trace and add no insight to users -+ [[ ${source} == */extension_function_definition.sh ]] && continue -+ [[ ${source} == *lib/extensions.sh ]] && continue -+ [[ ${source} == *lib/functions/logging.sh ]] && continue -+ [[ ${source} == */compile.sh ]] && continue -+ [[ ${line} -lt 1 ]] && continue -+ # relativize the source, otherwise too long to display -+ source="${source#"${SRC}/"}" -+ # remove 'lib/'. hope this is not too confusing. -+ source="${source#"lib/functions/"}" -+ source="${source#"lib/"}" -+ # add to the list -+ # shellcheck disable=SC2015 # i know. thanks. I won't write an if here -+ arrow="$([[ "$final_stack" != "" ]] && echo "-> " || true)" -+ final_stack="${source}:${line} ${arrow} ${final_stack} " -+ done -+ # output the result, no newline -+ # shellcheck disable=SC2086 # I wanna suppress double spacing, thanks -+ echo -n $final_stack -+} -+ -+function show_caller_full() { -+ { -+ local i=1 # skip the first frame -+ local line_no -+ local function_name -+ local file_name -+ while caller $i; do -+ ((i++)) -+ done | while read -r line_no function_name file_name; do -+ local padded_function_name=$(printf "%20s" "$function_name") -+ local short_file_name="${file_name/"${SRC}/"/"./"}" -+ echo -e "$padded_function_name --> $short_file_name:$line_no" -+ done -+ } || true # always success -+} -diff --git a/lib/functions/logging/traps.sh b/lib/functions/logging/traps.sh -index faf9d8192..7891db338 100644 ---- a/lib/functions/logging/traps.sh -+++ b/lib/functions/logging/traps.sh -@@ -47,23 +47,21 @@ function main_error_monitor() { - display_alert "second run detected" "ERR trap" "err" - #exit 46 - fi -- #trap - ERR # remove this trap - local errcode="${1}" - # If there's no error, do nothing. - if [[ $errcode -eq 0 ]]; then - return 0 - fi -- local stack_caller="${2}" -- local full_stack_caller="${3}" -+ local stack_caller="$(show_caller_full)" - if [[ "${ALREADY_EXITING_WITH_ERROR}" != "yes" ]]; then # Don't do this is exit_with_error already did it. - local logfile_to_show="${CURRENT_LOGFILE}" # store it - unset CURRENT_LOGFILE # stop logging, otherwise crazy - logging_error_show_log "main_error_monitor unknown error" "main_error_monitor unknown highlight" "${stack_caller}" "${logfile_to_show}" - fi -- display_alert "main_error_monitor: ${errcode}! stack:" "${stack_caller}" "err" -- display_alert "main_error_monitor: ${errcode}! full:" "${full_stack_caller}" "err" -+ display_alert "main_error_monitor: error code ${errcode}" "\n${stack_caller}\n" "err" - - ALREADY_EXITING_WITH_ERROR=yes -+ trap - EXIT # remove EXIT trap, we're gonna exit... - exit 45 - return 44 - } -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index f7a679dcc..00f05c37a 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -307,6 +307,15 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/logging/runners.sh - source "${SRC}"/lib/functions/logging/runners.sh - -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/logging/stacktraces.sh -+# shellcheck source=lib/functions/logging/stacktraces.sh -+source "${SRC}"/lib/functions/logging/stacktraces.sh -+ - # no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -@@ -424,6 +433,7 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/rootfs/rootfs-desktop.sh - source "${SRC}"/lib/functions/rootfs/rootfs-desktop.sh - -+ - # no errors tolerated. one last time for the win! - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - -From a94d0cf61be12647c9ce5ce05440b6fe44b53cb4 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 12 Feb 2022 21:45:05 +0100 -Subject: [PATCH] armbian-next: fix: don't `trap` `ERR` twice, it causes bash - to go bananas regarding `caller` - ---- - lib/extensions.sh | 17 ----------------- - 1 file changed, 17 deletions(-) - -diff --git a/lib/extensions.sh b/lib/extensions.sh -index 8b7ba183c..c9f9cc9c4 100644 ---- a/lib/extensions.sh -+++ b/lib/extensions.sh -@@ -420,29 +420,12 @@ enable_extension() { - # store a list of existing functions at this point, before sourcing the extension. - before_function_list="$(compgen -A function)" - -- # error handling during a 'source' call is quite insane in bash after 4.3. -- # to be able to catch errors in sourced scripts the only way is to trap -- declare -i extension_source_generated_error=0 -- trap 'extension_source_generated_error=1;' ERR -- -- # source the file. extensions are not supposed to do anything except export variables and define functions, so nothing should happen here. -- # there is no way to enforce it though, short of static analysis. -- # we could punish the extension authors who violate it by removing some essential variables temporarily from the environment during this source, and restore them later. - # shellcheck disable=SC1090 - source "${extension_file}" - -- # remove the trap we set. -- trap - ERR -- - # decrement the recurse counter, so calls to this method are allowed again. - enable_extension_recurse_counter=$((enable_extension_recurse_counter - 1)) - -- # test if it fell into the trap, and abort immediately with an error. -- if [[ $extension_source_generated_error != 0 ]]; then -- display_alert "Extension failed to load" "${extension_file}" "err" -- exit 4 -- fi -- - # get a new list of functions after sourcing the extension - after_function_list="$(compgen -A function)" - - -From 54ce1b35ffac8eb5933a147b264352ac7ceb026a Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 12 Feb 2022 17:01:00 +0100 -Subject: [PATCH] armbian-next: `UPSTEM_VER` -> `UBOOT_REPO_VERSION` and - related fixes - ---- - lib/functions/image/loop.sh | 4 ++-- - lib/functions/image/rootfs-to-image.sh | 6 ++---- - lib/functions/multi/build-all.sh | 2 +- - lib/functions/rootfs/distro-agnostic.sh | 2 +- - 4 files changed, 6 insertions(+), 8 deletions(-) - -diff --git a/lib/functions/image/loop.sh b/lib/functions/image/loop.sh -index 296697b44..97ee1891e 100644 ---- a/lib/functions/image/loop.sh -+++ b/lib/functions/image/loop.sh -@@ -34,8 +34,8 @@ write_uboot_to_loop_image() { - TEMP_DIR=$(mktemp -d) # set-e is in effect. no need to exit on errors explicitly - chmod 700 ${TEMP_DIR} - revision=${REVISION} -- if [[ -n $UPSTREM_VER ]]; then -- revision=${UPSTREM_VER} -+ if [[ -n $UBOOT_REPO_VERSION ]]; then -+ revision=${UBOOT_REPO_VERSION} - dpkg -x "${DEB_STORAGE}/linux-u-boot-${BOARD}-${BRANCH}_${revision}_${ARCH}.deb" ${TEMP_DIR}/ 2>&1 - else - dpkg -x "${DEB_STORAGE}/${CHOSEN_UBOOT}_${revision}_${ARCH}.deb" ${TEMP_DIR}/ 2>&1 -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index b39ab161a..898a7372b 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -66,10 +66,8 @@ create_image_from_sdcard_rootfs() { - - # stage: write u-boot, unless the deb is not there, which would happen if BOOTCONFIG=none - # exception: if we use the one from repository, install version which was downloaded from repo -- if [[ -f "${DEB_STORAGE}"/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb ]]; then -- write_uboot $LOOP -- elif [[ "${UPSTREM_VER}" ]]; then -- write_uboot $LOOP -+ if [[ -f "${DEB_STORAGE}"/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb ]] || [[ -n $UBOOT_REPO_VERSION ]]; then -+ write_uboot_to_loop_image $LOOP - fi - - # fix wrong / permissions -diff --git a/lib/functions/multi/build-all.sh b/lib/functions/multi/build-all.sh -index 5f33ecffa..5f8496157 100644 ---- a/lib/functions/multi/build-all.sh -+++ b/lib/functions/multi/build-all.sh -@@ -103,7 +103,7 @@ unset_all() { - REPOSITORY_UPDATE PACKAGE_LIST_RELEASE LOCAL_MIRROR COMPILE_ATF PACKAGE_LIST_BOARD PACKAGE_LIST_FAMILY PACKAGE_LIST_DESKTOP_BOARD \ - PACKAGE_LIST_DESKTOP_FAMILY ATF_COMPILE ATFPATCHDIR OFFSET BOOTSOURCEDIR KERNEL_VERSION_LEVEL KERNELSOURCENAME \ - BOOT_SOC DDR_BLOB MINILOADER_BLOB BL31_BLOB BOOT_SCENARIO BOOT_SUPPORT_SPI OFFLINE_WORK VAR_SHALLOW_ORIGINAL KERNELSWITCHOBJ \ -- IMAGE_PARTITION_TABLE BOOT_LOGO UPSTREM_VER FORCED_MONTH_OFFSET PACKAGE_LIST_BOARD_REMOVE PACKAGE_LIST_FAMILY_REMOVE PACKAGE_LIST_DESKTOP \ -+ IMAGE_PARTITION_TABLE BOOT_LOGO UBOOT_REPO_VERSION FORCED_MONTH_OFFSET PACKAGE_LIST_BOARD_REMOVE PACKAGE_LIST_FAMILY_REMOVE PACKAGE_LIST_DESKTOP \ - PACKAGE_LIST_DESKTOP_BOARD_REMOVE PACKAGE_LIST_DESKTOP_FAMILY_REMOVE BOOTCONFIG_EDGE DESKTOP_ENVIRONMENT DESKTOP_ENVIRONMENT_CONFIG_NAME \ - DESKTOP_APPGROUPS_SELECTED DESKTOP_APT_FLAGS_SELECTED DESKTOP_ENVIRONMENT_DIRPATH DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH UBOOT_TARGET_MAP \ - DESKTOP_ENVIRONMENT_DIRPATH DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH DESKTOP_CONFIG_PREFIX DESKTOP_CONFIGS_DIR DESKTOP_APPGROUPS_DIR \ -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 31d7f4c62..7732a5b80 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -283,7 +283,7 @@ install_distribution_agnostic() { - install_deb_chroot "${DEB_STORAGE}/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb" - else - install_deb_chroot "linux-u-boot-${BOARD}-${BRANCH}" "remote" "yes" -- UPSTREM_VER=$(dpkg-deb -f "${SDCARD}"/var/cache/apt/archives/linux-u-boot-${BOARD}-${BRANCH}*_${ARCH}.deb Version) -+ UBOOT_REPO_VERSION=$(dpkg-deb -f "${SDCARD}"/var/cache/apt/archives/linux-u-boot-${BOARD}-${BRANCH}*_${ARCH}.deb Version) - fi - } - - -From e4d30f131db7f9ab15759e4fa7fe5f18117cccd6 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 12 Feb 2022 16:06:30 +0100 -Subject: [PATCH] armbian-next: oops, fix some non-lib changes I missed, up to - revision ff4346c4682e260be3137a2301ac7a69b97c044d - ---- - .../deepin/armbian/create_desktop_package.sh | 2 +- - .../sources/families/include/rockchip64_common.inc | 31 ++++++++++++++++++---- - config/sources/families/include/sunxi64_common.inc | 8 +++--- - config/sources/families/include/sunxi_common.inc | 6 ++--- - config/sources/families/jetson-nano.conf | 13 +++++---- - config/sources/families/mvebu64.conf | 6 ++--- - config/sources/families/odroidxu4.conf | 2 +- - config/sources/families/rk322x.conf | 4 +-- - config/sources/families/rk35xx.conf | 23 +++++++--------- - config/sources/families/rockchip64.conf | 2 +- - config/templates/config-example.conf | 2 +- - packages/armbian/builddeb | 5 ++-- - 12 files changed, 62 insertions(+), 42 deletions(-) - -diff --git a/config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh b/config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh -index d25ffd974..78f4d23be 100755 ---- a/config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh -+++ b/config/desktop/focal/environments/deepin/armbian/create_desktop_package.sh -@@ -22,7 +22,7 @@ mkdir -p "${destination}"/usr/share/pixmaps/armbian - cp "${SRC}"/packages/blobs/desktop/icons/armbian.png "${destination}"/usr/share/pixmaps/armbian - - #generate wallpaper list for background changer --mkdir -p "${destination}"/usr/sharedeepin-background-properties -+mkdir -p "${destination}"/usr/share/deepin-background-properties - cat << EOF > "${destination}"/usr/share/deepin-background-properties/armbian.xml - - -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index a6cc52133..0f0000d26 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -15,18 +15,27 @@ BOOTPATCHDIR="u-boot-rockchip64" - PACKAGE_LIST_FAMILY="ethtool" - - RKBIN_DIR="$SRC/cache/sources/rkbin-tools" -+ - BOOT_SOC=$(expr $BOOTCONFIG : '.*\(rk[[:digit:]]\+.*\)_.*') - -+CPUMIN=${CPUMIN:="408000"} -+ - if [[ $BOOT_SOC == rk3399 ]]; then - -- CPUMIN=${CPUMIN:="408000"} - CPUMAX=${CPUMAX:="2016000"} - --else # rk3308, rk3328 -+elif [[ $BOOT_SOC == rk3328 || $BOOT_SOC == rk3308 ]]; then - -- CPUMIN=${CPUMIN:="408000"} - CPUMAX=${CPUMAX:="1296000"} - -+elif [[ "${BOOT_SOC}" == rk3566 ]]; then -+ -+ CPUMAX=${CPUMAX:="1800000"} -+ -+elif [[ "${BOOT_SOC}" == rk3568 ]]; then -+ -+ CPUMAX=${CPUMAX:="1992000"} -+ - fi - - if [[ $BOOT_SOC == rk3328 ]]; then -@@ -50,6 +59,18 @@ elif [[ $BOOT_SOC == rk3399pro ]]; then - MINILOADER_BLOB='rk33/rk3399pro_miniloader_v1.26.bin' - BL31_BLOB='rk33/rk3399pro_bl31_v1.35.elf' - -+elif [[ $BOOT_SOC == rk3566 ]]; then -+ -+ BOOT_SCENARIO="${BOOT_SCENARIO:=spl-blobs}" -+ DDR_BLOB='rk35/rk3566_ddr_1056MHz_v1.10.bin' -+ BL31_BLOB='rk35/rk3568_bl31_v1.29.elf' -+ -+elif [[ $BOOT_SOC == rk3568 ]]; then -+ -+ BOOT_SCENARIO="${BOOT_SCENARIO:=spl-blobs}" -+ DDR_BLOB='rk35/rk3568_ddr_1560MHz_v1.10.bin' -+ BL31_BLOB='rk35/rk3568_bl31_v1.29.elf' -+ - elif [[ $BOARD == rockpi-s ]]; then - - BOOT_SCENARIO="${BOOT_SCENARIO:=only-blobs}" -@@ -274,8 +295,8 @@ family_tweaks_bsp() { - cat <<- EOF > "$destination"/etc/X11/xorg.conf.d/02-driver.conf - # set fbdev as default driver. - Section "Device" -- Identifier "NOGPU" -- Driver "fbdev" -+ Identifier "NOGPU" -+ Driver "fbdev" - EndSection - EOF - fi -diff --git a/config/sources/families/include/sunxi64_common.inc b/config/sources/families/include/sunxi64_common.inc -index 4c44d37bf..6a570b341 100644 ---- a/config/sources/families/include/sunxi64_common.inc -+++ b/config/sources/families/include/sunxi64_common.inc -@@ -11,16 +11,16 @@ LINUXFAMILY=sunxi64 - - case $BRANCH in - -- legacy) KERNEL_VERSION_LEVEL="5.4" ;; -+ legacy) KERNEL_VERSION_LEVEL="5.10" ;; - -- current) KERNEL_VERSION_LEVEL="5.10" ;; -+ current) KERNEL_VERSION_LEVEL="5.15" ;; - -- edge) KERNEL_VERSION_LEVEL="5.15" ;; -+ edge) KERNEL_VERSION_LEVEL="5.16" ;; - esac - - case "$KERNEL_VERSION_LEVEL" in - -- 5.10 | 5.15) -+ 5.10 | 5.15 | 5.16) - KERNELSOURCE=$MAINLINE_KERNEL_SOURCE - KERNELSOURCENAME='name=origin' - KERNELBRANCH="branch:linux-${KERNEL_VERSION_LEVEL}.y" -diff --git a/config/sources/families/include/sunxi_common.inc b/config/sources/families/include/sunxi_common.inc -index eabacf86b..c84c45186 100644 ---- a/config/sources/families/include/sunxi_common.inc -+++ b/config/sources/families/include/sunxi_common.inc -@@ -12,9 +12,9 @@ GOVERNOR=ondemand - - case $BRANCH in - -- legacy) KERNEL_VERSION_LEVEL="5.4" ;; -- current) KERNEL_VERSION_LEVEL="5.10" ;; -- edge) KERNEL_VERSION_LEVEL="5.15" ;; -+ legacy) KERNEL_VERSION_LEVEL="5.10" ;; -+ current) KERNEL_VERSION_LEVEL="5.15" ;; -+ edge) KERNEL_VERSION_LEVEL="5.16" ;; - - esac - -diff --git a/config/sources/families/jetson-nano.conf b/config/sources/families/jetson-nano.conf -index 03717a673..fbc14d5af 100644 ---- a/config/sources/families/jetson-nano.conf -+++ b/config/sources/families/jetson-nano.conf -@@ -1,11 +1,8 @@ - ARCH=arm64 - KERNEL_IMAGE_TYPE=Image -+BOOTCONFIG=none - ATF_COMPILE="no" - OFFSET=16 --BOOTDELAY=0 --BOOTBRANCH="tag:v2021.07" --BOOTPATCHDIR="u-boot-rockchip64" --UBOOT_TARGET_MAP=";;u-boot.bin" - - CPUMIN=504000 - CPUMAX=2132000 -@@ -18,7 +15,9 @@ case $BRANCH in - KERNELSOURCE='https://github.com/150balbes/Jetson-Nano' - KERNELBRANCH='branch:4.9.201' - EXTRAWIFI="no" -- BOOT_FDT_FILE="tegra210-p3448-0000-p3449-0000-a02.dtb" -+ BOOT_FDT_FILE="none" -+ SRC_CMDLINE='console=ttyS0,115200n8 console=tty0 tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb debug_uartport=lsport,4 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1075 core_edp_ma=4000 tegra_fbmem=0x800000@0x92ca9000 is_hdmi_initialised=1 earlycon=uart8250,mmio32,0x70006000 fbcon=map:0' -+ MODULES_INITRD="jetson-nano-legacy" - ;; - - current) -@@ -26,6 +25,7 @@ case $BRANCH in - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -+ MODULES_INITRD="jetson-nano-current" - ;; - - edge) -@@ -34,6 +34,7 @@ case $BRANCH in - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -+ MODULES_INITRD="jetson-nano-edge" - ;; - - esac -@@ -44,6 +45,8 @@ write_uboot_platform() { - - family_tweaks() { - -+ install -m 755 $SRC/packages/blobs/jetson/jetson.sh $SDCARD/etc/initramfs-tools/hooks/jetson.sh -+ - if [[ $BRANCH == legacy ]]; then - install -m 755 $SRC/packages/blobs/jetson/tegra21x_xusb_firmware $SDCARD/lib/firmware/tegra21x_xusb_firmware - install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrahda $SDCARD/etc/asound.conf.tegrahda -diff --git a/config/sources/families/mvebu64.conf b/config/sources/families/mvebu64.conf -index 0a0979287..58d66ab98 100644 ---- a/config/sources/families/mvebu64.conf -+++ b/config/sources/families/mvebu64.conf -@@ -1,6 +1,6 @@ - enable_extension "marvell-tools" - ARCH=arm64 --BOOTBRANCH='branch:v2021.01' -+BOOTBRANCH='branch:v2022.01' - BOOTENV_FILE='mvebu64.txt' - ATFSOURCE='https://github.com/MarvellEmbeddedProcessors/atf-marvell' - ATFDIR='arm-trusted-firmware-espressobin' -@@ -36,12 +36,12 @@ case $BRANCH in - - current) - -- KERNELBRANCH='branch:linux-5.10.y' -+ KERNELBRANCH='branch:linux-5.15.y' - - ;; - - edge) -- KERNELBRANCH='branch:linux-5.15.y' -+ KERNELBRANCH='branch:linux-5.16.y' - ;; - - esac -diff --git a/config/sources/families/odroidxu4.conf b/config/sources/families/odroidxu4.conf -index 76edb26d6..ee4a32af5 100644 ---- a/config/sources/families/odroidxu4.conf -+++ b/config/sources/families/odroidxu4.conf -@@ -23,7 +23,7 @@ case $BRANCH in - ;; - - edge) -- KERNELBRANCH='branch:linux-5.15.y' -+ KERNELBRANCH='branch:linux-5.16.y' - ;; - - esac -diff --git a/config/sources/families/rk322x.conf b/config/sources/families/rk322x.conf -index 637527d36..1a8ba863f 100644 ---- a/config/sources/families/rk322x.conf -+++ b/config/sources/families/rk322x.conf -@@ -19,13 +19,13 @@ case $BRANCH in - - current) - -- KERNELBRANCH='branch:linux-5.10.y' -+ KERNELBRANCH='branch:linux-5.15.y' - - ;; - - edge) - -- KERNELBRANCH='branch:linux-5.15.y' -+ KERNELBRANCH='branch:linux-5.16.y' - - ;; - -diff --git a/config/sources/families/rk35xx.conf b/config/sources/families/rk35xx.conf -index bdcf9c6a4..acc5ffc16 100644 ---- a/config/sources/families/rk35xx.conf -+++ b/config/sources/families/rk35xx.conf -@@ -5,16 +5,6 @@ BOOTBRANCH='branch:stable-4.19-rock3' - BOOTPATCHDIR="u-boot-rk35xx" - OVERLAY_PREFIX='rk35xx' - --if [[ "${BOOT_SOC}" == rk3566 ]]; then -- CPUMAX=1800000 -- DDR_BLOB='rk35/rk3566_ddr_1056MHz_v1.10.bin' -- BL31_BLOB='rk35/rk3568_bl31_v1.29.elf' --elif [[ "${BOOT_SOC}" == rk3568 ]]; then -- CPUMAX=1992000 -- DDR_BLOB='rk35/rk3568_ddr_1056MHz_v1.10.bin' -- BL31_BLOB='rk35/rk3568_bl31_v1.29.elf' --fi -- - case $BRANCH in - - legacy) -@@ -31,14 +21,19 @@ case $BRANCH in - - ;; - -+ # temporary until kernel 5.16 is well supported for rockchip64 -+ edge) -+ KERNELBRANCH="branch:linux-5.16.y" -+ KERNELPATCHDIR='rk35xx-'$BRANCH -+ SKIP_BOOTSPLASH="yes" -+ LINUXCONFIG='linux-rk35xx-'$BRANCH -+ -+ ;; -+ - esac - - prepare_boot_configuration - --uboot_custom_postprocess() { -- tools/mkimage -n rk356x -T rksd -d $RKBIN_DIR/$DDR_BLOB:spl/u-boot-spl.bin idbloader.img --} -- - family_tweaks_bsp() { - : - } -diff --git a/config/sources/families/rockchip64.conf b/config/sources/families/rockchip64.conf -index 729c47315..6790c35b7 100644 ---- a/config/sources/families/rockchip64.conf -+++ b/config/sources/families/rockchip64.conf -@@ -3,9 +3,9 @@ source "${BASH_SOURCE%/*}/include/rockchip64_common.inc" - case $BRANCH in - - legacy) -+ KERNELDIR='linux-rockchip64' - KERNELSOURCE='https://github.com/ayufan-rock64/linux-kernel' - KERNELBRANCH='tag:4.4.202-1237-rockchip-ayufan' -- KERNELDIR='linux-rockchip64' - KERNELPATCHDIR='rockchip64-'$BRANCH - ;; - -diff --git a/config/templates/config-example.conf b/config/templates/config-example.conf -index 41578ea32..b75e4b44b 100644 ---- a/config/templates/config-example.conf -+++ b/config/templates/config-example.conf -@@ -19,6 +19,6 @@ DEST_LANG="en_US.UTF-8" # sl_SI.UTF-8, en_US.UTF-8 - EXTERNAL_NEW="prebuilt" # compile and install or install prebuilt additional packages - INSTALL_HEADERS="" # install kernel headers package - LIB_TAG="master" # change to "branchname" to use any branch currently available. --USE_TORRENT="yes" # use torrent network for faster toolchain and cache download -+USE_TORRENT="no" # use torrent network for faster toolchain and cache download - DOWNLOAD_MIRROR="" # set to "china" to use mirrors.tuna.tsinghua.edu.cn - CARD_DEVICE="" # device name /dev/sdx of your SD card to burn directly to the card when done -diff --git a/packages/armbian/builddeb b/packages/armbian/builddeb -index 0080bb87c..0209f3528 100755 ---- a/packages/armbian/builddeb -+++ b/packages/armbian/builddeb -@@ -74,12 +74,13 @@ create_package() { - exit 0 - EOT - -- # for Ubuntu/Debian compatiblity, symlink in /lib/firmware/$version/device-tree -+ # for Ubuntu/Debian compatiblity, copy DTBs to /lib/firmware/$version/device-tree - cat >> $pdir/DEBIAN/postinst <<- EOT - cd /boot - ln -sfT dtb-$version dtb 2> /dev/null || mv dtb-$version dtb - mkdir -p /lib/firmware/$version -- [ ! -L /lib/firmware/$version/device-tree ] && ln -s /boot/dtb-$version /lib/firmware/$version/device-tree -+ rm -rf /lib/firmware/$version/device-tree -+ cp -rp /boot/dtb-$version /lib/firmware/$version/device-tree - exit 0 - EOT - - -From 326548a2fb5909159b84ad75d11c714b4dbe42b3 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 12 Feb 2022 15:46:09 +0100 -Subject: [PATCH] armbian-next: manual merge (9) of all lib/*.sh changes - between revisions 3b7f5b1f3418b7ad7a7c03f2af6d8da66f20bcb9 and - ff4346c4682e260be3137a2301ac7a69b97c044d - ---- - lib/functions/compilation/extra-drivers.sh | 26 ++++++++++++++------------ - lib/functions/configuration/main-config.sh | 2 +- - lib/functions/image/partitioning.sh | 2 +- - lib/functions/image/rootfs-to-image.sh | 7 ++++++- - lib/functions/rootfs/distro-agnostic.sh | 10 +++++----- - 5 files changed, 27 insertions(+), 20 deletions(-) - -diff --git a/lib/functions/compilation/extra-drivers.sh b/lib/functions/compilation/extra-drivers.sh -index b466c940b..d41be6307 100644 ---- a/lib/functions/compilation/extra-drivers.sh -+++ b/lib/functions/compilation/extra-drivers.sh -@@ -98,21 +98,20 @@ prepare_extra_kernel_drivers() { - # Linux splash file - # - -- if linux-version compare "${version}" ge 5.8.10 && [ $SKIP_BOOTSPLASH != yes ]; then -+ if linux-version compare "${version}" ge 5.10 && [ $SKIP_BOOTSPLASH != yes ]; then - - display_alert "Adding" "Kernel splash file" "info" - -- if linux-version compare "${version}" ge 5.13; then -- process_patch_file "${SRC}/patch/misc/bootsplash-5.10.y-0001-Revert-vgacon-drop-unused-vga_init_done.patch" "applying" -- fi -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0001-Revert-fbcon-Add-option-to-enable-legacy-hardware-ac.patch" "applying" - -- process_patch_file "${SRC}/patch/misc/bootsplash-5.8.10-0001-Revert-vgacon-remove-software-scrollback-support.patch" "applying" -- process_patch_file "${SRC}/patch/misc/bootsplash-5.8.10-0002-Revert-fbcon-remove-now-unusued-softback_lines-curso.patch" "applying" -- if linux-version compare "${version}" ge 5.10; then -- process_patch_file "${SRC}/patch/misc/bootsplash-5.10.y-0003-Revert-fbcon-remove-soft-scrollback-code.patch" "applying" -- else -- process_patch_file "${SRC}/patch/misc/bootsplash-5.8.10-0003-Revert-fbcon-remove-soft-scrollback-code.patch" "applying" -+ if linux-version compare "${version}" ge 5.15; then -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0002-Revert-vgacon-drop-unused-vga_init_done.patch" "applying" - fi -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0003-Revert-vgacon-remove-software-scrollback-support.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0004-Revert-drivers-video-fbcon-fix-NULL-dereference-in-f.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0005-Revert-fbcon-remove-no-op-fbcon_set_origin.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0006-Revert-fbcon-remove-now-unusued-softback_lines-curso.patch" "applying" -+ process_patch_file "${SRC}/patch/misc/bootsplash-5.16.y-0007-Revert-fbcon-remove-soft-scrollback-code.patch" "applying" - - process_patch_file "${SRC}/patch/misc/0001-bootsplash.patch" "applying" - process_patch_file "${SRC}/patch/misc/0002-bootsplash.patch" "applying" -@@ -159,6 +158,7 @@ prepare_extra_kernel_drivers() { - # manual overrides - if linux-version compare "${version}" ge 5.4.3 && linux-version compare "${version}" le 5.5; then aufstag="5.4.3"; fi - if linux-version compare "${version}" ge 5.10.82 && linux-version compare "${version}" le 5.11; then aufstag="5.10.82"; fi -+ if linux-version compare "${version}" ge 5.15.5 && linux-version compare "${version}" le 5.16; then aufstag="5.15.5"; fi - - # check if Mr. Okajima already made a branch for this version - improved_git ls-remote --exit-code --heads https://github.com/sfjro/aufs5-standalone "aufs${aufstag}" > /dev/null -@@ -436,14 +436,16 @@ prepare_extra_kernel_drivers() { - - # Wireless drivers for Realtek 8188EU 8188EUS and 8188ETV chipsets - -- if linux-version compare "${version}" ge 3.14 && [ "$EXTRAWIFI" == yes ]; then -+ if linux-version compare "${version}" ge 3.14 && -+ linux-version compare "${version}" lt 5.15 && -+ [ "$EXTRAWIFI" == yes ]; then - - # attach to specifics tag or branch - local rtl8188euver="branch:v5.7.6.1" - - display_alert "Adding" "Wireless drivers for Realtek 8188EU 8188EUS and 8188ETV chipsets ${rtl8188euver}" "info" - -- fetch_from_repo "https://github.com/aircrack-ng/rtl8188eus" "rtl8188eu" "${rtl8188euver}" "yes" -+ fetch_from_repo "$GITHUB_SOURCE/aircrack-ng/rtl8188eus" "rtl8188eu" "${rtl8188euver}" "yes" - cd "$kerneldir" || exit - rm -rf "$kerneldir/drivers/net/wireless/rtl8188eu" - mkdir -p "$kerneldir/drivers/net/wireless/rtl8188eu/" -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 1457e6bca..06eb888fd 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -63,7 +63,7 @@ function do_main_configuration() { - if [[ "${MAKE_FOLDERS}" == yes ]]; then - - if [[ "$RC" == yes ]]; then -- FINALDEST=$DEST/images/"${BOARD}"/RC -+ FINALDEST=$DEST/images/"${BOARD}"/rc - elif [[ "$BETA" == yes ]]; then - FINALDEST=$DEST/images/"${BOARD}"/nightly - else -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index b8b6e0595..0e075132a 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -351,7 +351,7 @@ prepare_partitions() { - - # create extlinux config - if [[ -f $SDCARD/boot/extlinux/extlinux.conf ]]; then -- echo " APPEND root=$rootfs $SRC_CMDLINE $MAIN_CMDLINE" >> $SDCARD/boot/extlinux/extlinux.conf -+ echo " append root=$rootfs $SRC_CMDLINE $MAIN_CMDLINE" >> $SDCARD/boot/extlinux/extlinux.conf - [[ -f $SDCARD/boot/armbianEnv.txt ]] && rm $SDCARD/boot/armbianEnv.txt - fi - -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index c0aace136..b39ab161a 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -65,7 +65,12 @@ create_image_from_sdcard_rootfs() { - display_alert "Mount point" "$(echo -e "$freespace" | grep $MOUNT | head -1 | awk '{print $5}')" "info" - - # stage: write u-boot, unless the deb is not there, which would happen if BOOTCONFIG=none -- [[ -f "${DEB_STORAGE}"/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb ]] && write_uboot_to_loop_image $LOOP -+ # exception: if we use the one from repository, install version which was downloaded from repo -+ if [[ -f "${DEB_STORAGE}"/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb ]]; then -+ write_uboot $LOOP -+ elif [[ "${UPSTREM_VER}" ]]; then -+ write_uboot $LOOP -+ fi - - # fix wrong / permissions - chmod 755 $MOUNT -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index e3c9e41aa..31d7f4c62 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -154,16 +154,16 @@ install_distribution_agnostic() { - if [[ $SRC_EXTLINUX == yes ]]; then - mkdir -p $SDCARD/boot/extlinux - cat <<- EOF > "$SDCARD/boot/extlinux/extlinux.conf" -- LABEL ${VENDOR} -- LINUX /boot/$NAME_KERNEL -- INITRD /boot/$NAME_INITRD -+ label ${VENDOR} -+ kernel /boot/$NAME_KERNEL -+ initrd /boot/$NAME_INITRD - EOF - if [[ -n $BOOT_FDT_FILE ]]; then - if [[ $BOOT_FDT_FILE != "none" ]]; then -- echo " FDT /boot/dtb/$BOOT_FDT_FILE" >> "$SDCARD/boot/extlinux/extlinux.conf" -+ echo " fdt /boot/dtb/$BOOT_FDT_FILE" >> "$SDCARD/boot/extlinux/extlinux.conf" - fi - else -- echo " FDTDIR /boot/dtb/" >> "$SDCARD/boot/extlinux/extlinux.conf" -+ echo " fdtdir /boot/dtb/" >> "$SDCARD/boot/extlinux/extlinux.conf" - fi - else - - -From 8180b79f136be27a79d225ade02faa823012923f Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 12 Feb 2022 10:18:32 +0100 -Subject: [PATCH] armbian-next: more error handling fixes. avoid shortcircuits. - -- store previous error message in `MSG_IF_ERROR` (still to be actually shown somewhere during error) ---- - lib/functions/compilation/atf.sh | 2 +- - lib/functions/compilation/uboot.sh | 10 ++++------ - lib/functions/image/partitioning.sh | 19 ++++++++++--------- - lib/functions/rootfs/apt.sh | 5 ++--- - lib/functions/rootfs/create-cache.sh | 31 +++++++++++-------------------- - lib/functions/rootfs/distro-agnostic.sh | 5 +---- - 6 files changed, 29 insertions(+), 43 deletions(-) - -diff --git a/lib/functions/compilation/atf.sh b/lib/functions/compilation/atf.sh -index 91ca8aaf1..857c1744f 100644 ---- a/lib/functions/compilation/atf.sh -+++ b/lib/functions/compilation/atf.sh -@@ -51,7 +51,7 @@ compile_atf() { - # Check: https://github.com/armbian/build/issues/1157 - CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" \ - make ENABLE_BACKTRACE="0" $target_make $CTHREADS \ -- CROSS_COMPILE="$CCACHE $ATF_COMPILER" 2>&1 || { -+ CROSS_COMPILE="$CCACHE $ATF_COMPILER" 2>&1 || { # HANDLED SHORTCIRCUIT: direct command invocation; @TODO: replace with runner - exit_with_error "ATF compilation failed" - } - -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index 188c062d6..ca56fbfa1 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -30,10 +30,9 @@ function compile_uboot_target() { - fi - - display_alert "${uboot_prefix}Preparing u-boot config" "${version} ${target_make}" "info" -+ export MSG_IF_ERROR="${uboot_prefix}Failed to configure u-boot ${version} $BOOTCONFIG ${target_make}" - run_host_command_logged CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" \ -- make "$CTHREADS" "$BOOTCONFIG" "CROSS_COMPILE=\"$CCACHE $UBOOT_COMPILER\"" || { -- exit_with_error "${uboot_prefix}Failed to configure u-boot ${version} $BOOTCONFIG ${target_make}" -- } -+ make "$CTHREADS" "$BOOTCONFIG" "CROSS_COMPILE=\"$CCACHE $UBOOT_COMPILER\"" - - # armbian specifics u-boot settings - [[ -f .config ]] && sed -i 's/CONFIG_LOCALVERSION=""/CONFIG_LOCALVERSION="-armbian"/g' .config -@@ -66,9 +65,8 @@ function compile_uboot_target() { - [[ -n $UBOOT_TOOLCHAIN2 ]] && cross_compile="ARMBIAN=foe" # empty parameter is not allowed - - display_alert "${uboot_prefix}Compiling u-boot" "${version} ${target_make}" "info" -- run_host_command_logged_long_running CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" make "$target_make" "$CTHREADS" "${cross_compile}" || { -- exit_with_error "${uboot_prefix}Failed to build u-boot ${version} ${target_make}" -- } -+ export MSG_IF_ERROR="${uboot_prefix}Failed to build u-boot ${version} ${target_make}" -+ run_host_command_logged_long_running CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" make "$target_make" "$CTHREADS" "${cross_compile}" - - if [[ $(type -t uboot_custom_postprocess) == function ]]; then - display_alert "${uboot_prefix}Postprocessing u-boot" "${version} ${target_make}" -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 36683314d..b8b6e0595 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -199,22 +199,22 @@ prepare_partitions() { - parted -s ${SDCARD}.raw -- mkpart efi fat32 ${uefistart}s ${uefiend}s - parted -s ${SDCARD}.raw -- mkpart rootfs ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" - # transpose so BIOS is in sda14; EFI is in sda15 and root in sda1; requires sgdisk, parted cant do numbers -- sgdisk --transpose 1:14 ${SDCARD}.raw &> /dev/null || echo "*** TRANSPOSE 1:14 FAILED" -- sgdisk --transpose 2:15 ${SDCARD}.raw &> /dev/null || echo "*** TRANSPOSE 2:15 FAILED" -- sgdisk --transpose 3:1 ${SDCARD}.raw &> /dev/null || echo "*** TRANSPOSE 3:1 FAILED" -+ sgdisk --transpose 1:14 ${SDCARD}.raw -+ sgdisk --transpose 2:15 ${SDCARD}.raw -+ sgdisk --transpose 3:1 ${SDCARD}.raw - # set the ESP (efi) flag on 15 -- parted -s ${SDCARD}.raw -- set 14 bios_grub on || echo "*** SETTING bios_grub ON 14 FAILED" -- parted -s ${SDCARD}.raw -- set 15 esp on || echo "*** SETTING ESP ON 15 FAILED" -+ parted -s ${SDCARD}.raw -- set 14 bios_grub on -+ parted -s ${SDCARD}.raw -- set 15 esp on - else - display_alert "Creating partitions" "UEFI+rootfs (no BIOS)" "info" - # Simple EFI + root partition on GPT, no BIOS. - parted -s ${SDCARD}.raw -- mkpart efi fat32 ${bootstart}s ${bootend}s - parted -s ${SDCARD}.raw -- mkpart rootfs ${parttype[$ROOTFS_TYPE]} ${rootstart}s "100%" - # transpose so EFI is in sda15 and root in sda1; requires sgdisk, parted cant do numbers -- sgdisk --transpose 1:15 ${SDCARD}.raw &> /dev/null || echo "*** TRANSPOSE 1:15 FAILED" -- sgdisk --transpose 2:1 ${SDCARD}.raw &> /dev/null || echo "*** TRANSPOSE 2:1 FAILED" -+ sgdisk --transpose 1:15 ${SDCARD}.raw -+ sgdisk --transpose 2:1 ${SDCARD}.raw - # set the ESP (efi) flag on 15 -- parted -s ${SDCARD}.raw -- set 15 esp on || echo "*** SETTING ESP ON 15 FAILED" -+ parted -s ${SDCARD}.raw -- set 15 esp on - fi - else - parted -s ${SDCARD}.raw -- mkpart primary fat32 ${bootstart}s ${bootend}s -@@ -238,7 +238,8 @@ prepare_partitions() { - exec {FD}> /var/lock/armbian-debootstrap-losetup - flock -x $FD - -- export LOOP=$(losetup -f) || exit_with_error "Unable to find free loop device" -+ export LOOP -+ LOOP=$(losetup -f) || exit_with_error "Unable to find free loop device" - display_alert "Allocated loop device" "LOOP=${LOOP}" "wrn" - - check_loop_device "$LOOP" -diff --git a/lib/functions/rootfs/apt.sh b/lib/functions/rootfs/apt.sh -index 29833851a..768636fc9 100644 ---- a/lib/functions/rootfs/apt.sh -+++ b/lib/functions/rootfs/apt.sh -@@ -29,9 +29,8 @@ install_deb_chroot() { - [[ $BUILD_ALL == yes && ${variant} == remote ]] && chroot_sdcard_apt_get update - - # install in chroot via apt-get, not dpkg, so dependencies are also installed from repo if needed. -- chroot_sdcard_apt_get --no-install-recommends install "${name}" || { -- exit_with_error "Installation of $name failed" "${BOARD} ${RELEASE} ${BUILD_DESKTOP} ${LINUXFAMILY}" -- } -+ export MSG_IF_ERROR="Installation of $name failed ${BOARD} ${RELEASE} ${BUILD_DESKTOP} ${LINUXFAMILY}" -+ chroot_sdcard_apt_get --no-install-recommends install "${name}" - - # @TODO: mysterious. store installed/downloaded packages in deb storage. only used for u-boot deb. why? - [[ ${variant} == remote && ${transfer} == yes ]] && rsync -rq "${SDCARD}"/var/cache/apt/archives/*.deb "${DEB_STORAGE}"/ -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index c83cdaf99..acadbf6e3 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -126,9 +126,8 @@ function create_new_rootfs_cache() { - cp /usr/share/keyrings/*-archive-keyring.gpg "${SDCARD}/usr/share/keyrings/" - - display_alert "Installing base system" "Stage 2/2" "info" -- chroot_sdcard LC_ALL=C LANG=C /debootstrap/debootstrap --second-stage 2>&1 || { # invoke inside chroot/qemu, stderr to stdout. -- exit_with_error "Debootstrap second stage failed" "${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL}" -- } -+ export MSG_IF_ERROR="Debootstrap second stage failed ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL}" -+ chroot_sdcard LC_ALL=C LANG=C /debootstrap/debootstrap --second-stage - [[ ! -f "${SDCARD}/bin/bash" ]] && exit_with_error "Debootstrap first stage did not produce /bin/bash" - - mount_chroot "${SDCARD}" -@@ -171,15 +170,11 @@ function create_new_rootfs_cache() { - - # stage: update packages list - display_alert "Updating package list" "$RELEASE" "info" -- chroot_sdcard_apt_get update || { -- display_alert "Updating package lists" "failed" "wrn" -- } -+ chroot_sdcard_apt_get update - - # stage: upgrade base packages from xxx-updates and xxx-backports repository branches - display_alert "Upgrading base packages" "Armbian" "info" -- chroot_sdcard_apt_get upgrade || { -- display_alert "Upgrading packages" "failed" "wrn" -- } -+ chroot_sdcard_apt_get upgrade - - # Myy: Dividing the desktop packages installation steps into multiple - # ones. We first install the "ADDITIONAL_PACKAGES" in order to get -@@ -189,9 +184,8 @@ function create_new_rootfs_cache() { - - # stage: install additional packages - display_alert "Installing the main packages for" "Armbian" "info" -- chroot_sdcard_apt_get_install "$PACKAGE_MAIN_LIST" || { -- exit_with_error "Installation of Armbian main packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed" -- } -+ export MSG_IF_ERROR="Installation of Armbian main packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed" -+ chroot_sdcard_apt_get_install "$PACKAGE_MAIN_LIST" - - if [[ $BUILD_DESKTOP == "yes" ]]; then - # FIXME Myy : Are we keeping this only for Desktop users, -@@ -213,22 +207,19 @@ function create_new_rootfs_cache() { - fi - - display_alert "Installing the desktop packages for" "Armbian" "info" -- chroot_sdcard_apt_get install ${apt_desktop_install_flags} $PACKAGE_LIST_DESKTOP || { -- exit_with_error "Installation of Armbian desktop packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed" -- } -+ MSG_IF_ERROR="Installation of Armbian desktop packages for ${BRANCH} ${BOARD} ${RELEASE} ${DESKTOP_APPGROUPS_SELECTED} ${DESKTOP_ENVIRONMENT} ${BUILD_MINIMAL} failed" -+ chroot_sdcard_apt_get install ${apt_desktop_install_flags} $PACKAGE_LIST_DESKTOP - fi - - # Remove packages from packages.uninstall - display_alert "Uninstall packages" "$PACKAGE_LIST_UNINSTALL" "info" - # shellcheck disable=SC2086 -- chroot_sdcard_apt_get purge $PACKAGE_LIST_UNINSTALL || exit_with_error "Un-Installation of packages failed" -+ chroot_sdcard_apt_get purge $PACKAGE_LIST_UNINSTALL - - # stage: purge residual packages - display_alert "Purging residual packages for" "Armbian" "info" - PURGINGPACKAGES=$(chroot $SDCARD /bin/bash -c "dpkg -l | grep \"^rc\" | awk '{print \$2}' | tr \"\n\" \" \"") -- chroot_sdcard_apt_get remove --purge $PURGINGPACKAGES || { -- exit_with_error "Purging of residual Armbian packages failed" -- } -+ chroot_sdcard_apt_get remove --purge $PURGINGPACKAGES - - # stage: remove downloaded packages - chroot_sdcard_apt_get autoremove -@@ -280,7 +271,7 @@ get_package_list_hash() { - local list_content - read -ra package_arr <<< "${DEBOOTSTRAP_LIST} ${PACKAGE_LIST}" - read -ra exclude_arr <<< "${PACKAGE_LIST_EXCLUDE}" -- ( -+ ( - ( - printf "%s\n" "${package_arr[@]}" - printf -- "-%s\n" "${exclude_arr[@]}" -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index ef8c40720..e3c9e41aa 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -249,10 +249,7 @@ install_distribution_agnostic() { - _pkg_list=${PACKAGE_LIST_BOARD} - display_alert "Installing PACKAGE_LIST_BOARD packages" "${_pkg_list}" - # shellcheck disable=SC2086 # we need to expand. -- chroot_sdcard_apt_get_install ${_pkg_list} || { -- # exit_with_error will collaborate with logging to show the current log before exiting. -- exit_with_error "Failed to install PACKAGE_LIST_BOARD" "${_pkg_list}" "err" -- } -+ chroot_sdcard_apt_get_install ${_pkg_list} - fi - - # remove family packages - -From f549907b967be0199cb10b995f8aa3449e0de8ad Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 12 Feb 2022 09:17:38 +0100 -Subject: [PATCH] armbian-next: more error handling fixes. avoid subshells, - shortcircuits, and pipes - -- add `CFLAGS=-fdiagnostics-color=always` to kernel compile; would need also for u-boot soon ---- - lib/functions/compilation/kernel.sh | 24 +++++++++++------------- - lib/functions/logging/logging.sh | 2 +- - lib/functions/logging/runners.sh | 31 +++++++++++++++++++------------ - lib/functions/logging/traps.sh | 6 ++++++ - 4 files changed, 37 insertions(+), 26 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index dc357ee93..e10c5af72 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -1,4 +1,5 @@ - function run_kernel_make() { -+ set -e - declare -a common_make_params_quoted common_make_envs full_command - - common_make_envs=( -@@ -19,6 +20,10 @@ function run_kernel_make() { - "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # Prefix for tool invocations. - ) - -+ #if [[ "${SHOW_LOG}" == "yes" ]]; then -+ common_make_params_quoted+=("KCFLAGS=-fdiagnostics-color=always") # Force GCC colored messages. -+ #fi -+ - # last statement, so it passes the result to calling function. - full_command=("${KERNEL_MAKE_RUNNER:-run_host_command_logged}" "${common_make_envs[@]}" make "$@" "${common_make_params_quoted[@]@Q}") - display_alert "Kernel make" "${full_command[*]}" "debug" -@@ -34,7 +39,7 @@ function run_kernel_make_long_running() { - KERNEL_MAKE_RUNNER="run_host_command_logged_long_running" run_kernel_make "$@" - } - --compile_kernel() { -+function compile_kernel() { - if [[ $CLEAN_LEVEL == *make* ]]; then - display_alert "Cleaning" "$LINUXSOURCEDIR" "info" - ( -@@ -140,9 +145,7 @@ compile_kernel() { - run_kernel_make silentoldconfig # This will exit with generic error if it fails. - else - # TODO: check if required -- run_kernel_make olddefconfig || { -- exit_with_error "Error kernel olddefconfig" -- } -+ run_kernel_make olddefconfig - fi - else - display_alert "Starting kernel oldconfig+menuconfig" "${LINUXCONFIG}" "debug" -@@ -150,9 +153,7 @@ compile_kernel() { - run_kernel_make oldconfig - - # No logging for this. this is UI piece -- run_kernel_make_dialog "${KERNEL_MENUCONFIG:-menuconfig}" || { -- exit_with_error "Error kernel menuconfig failed" -- } -+ run_kernel_make_dialog "${KERNEL_MENUCONFIG:-menuconfig}" - - # store kernel config in easily reachable place - display_alert "Exporting new kernel config" "$DEST/config/$LINUXCONFIG.config" "info" -@@ -177,9 +178,8 @@ compile_kernel() { - fi - - display_alert "Compiling Kernel" "${LINUXCONFIG} ${KERNEL_IMAGE_TYPE}" "info" -- run_kernel_make_long_running "${KERNEL_IMAGE_TYPE}" modules "${KERNEL_EXTRA_TARGETS:-dtbs}" || { -- exit_with_error "Failure during kernel compile" "@host" -- } -+ run_kernel_make_long_running "${KERNEL_IMAGE_TYPE}" modules "${KERNEL_EXTRA_TARGETS:-dtbs}" -+ #run_kernel_make "${KERNEL_IMAGE_TYPE}" modules "${KERNEL_EXTRA_TARGETS:-dtbs}" - - if [[ ! -f arch/$ARCHITECTURE/boot/$KERNEL_IMAGE_TYPE ]]; then - exit_with_error "Kernel was not built" "arch/$ARCHITECTURE/boot/$KERNEL_IMAGE_TYPE" -@@ -195,9 +195,7 @@ compile_kernel() { - display_alert "Creating kernel packages" "${LINUXCONFIG} $kernel_packaging_target" "info" - - # produce deb packages: image, headers, firmware, dtb -- run_kernel_make_long_running $kernel_packaging_target || { -- exit_with_error "Failure during kernel packaging" "@host" -- } -+ run_kernel_make_long_running $kernel_packaging_target - - display_alert "Package building done" "${LINUXCONFIG} $kernel_packaging_target" "info" - -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 90a376608..65ad6db33 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -97,7 +97,7 @@ function do_with_logging() { - return $exit_code - } - --display_alert() { -+function display_alert() { - # We'll be writing to stderr (" >&2"), so also write the message to the generic logfile, for context. - if [[ -f "${CURRENT_LOGFILE}" ]]; then - echo "--> A: [" "$@" "]" >> "${CURRENT_LOGFILE}" -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 64f463648..9cf069834 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -24,7 +24,6 @@ function chroot_sdcard_with_stdout() { - TMPDIR="" chroot "${SDCARD}" "$@" - } - -- - function chroot_custom_long_running() { - local target=$1 - shift -@@ -56,15 +55,19 @@ function fakeroot_dpkg_deb_build() { - # the raw version is already redirect stderr to stdout, and we'll be running under do_with_logging, - # so: _the stdout must flow_!!! - function run_host_command_logged_long_running() { -- local _exit_code=1 -- if [[ "${SHOW_LOG}" == "yes" ]] || [[ "${CI}" == "true" ]]; then -- run_host_command_logged_raw /bin/bash -e -c "$*" -- _exit_code=$? -- else -- run_host_command_logged_raw /bin/bash -e -c "$*" | pv -N "$(logging_echo_prefix_for_pv "${INDICATOR:-compile}") " --progress --timer --line-mode --force --cursor --delay-start 0 -i "2" -- _exit_code=$? -- fi -- return $_exit_code -+ # @TODO: disabled. The Pipe used for "pv" causes the left-hand side to run in a subshell. -+ #local _exit_code=1 -+ #if [[ "${SHOW_LOG}" == "yes" ]] || [[ "${CI}" == "true" ]]; then -+ # run_host_command_logged_raw /bin/bash -e -c "$*" -+ # _exit_code=$? -+ #else -+ # run_host_command_logged_raw /bin/bash -e -c "$*" | pv -N "$(logging_echo_prefix_for_pv "${INDICATOR:-compile}") " --progress --timer --line-mode --force --cursor --delay-start 0 -i "2" -+ # _exit_code=$? -+ #fi -+ #return $_exit_code -+ -+ # Run simple and exit with it's code. Sorry. -+ run_host_command_logged_raw /bin/bash -e -c "$*" - } - - # run_host_command_logged is the very basic, should be used for everything, but, please use helpers above, this is very low-level. -@@ -88,15 +91,19 @@ function run_host_command_logged_raw() { - # uncomment when desperate to understand what's going on - # echo "cmd about to run" "$@" >&2 - -+ # In this case I wanna KNOW exactly what failed, thus disable errexit, then re-enable immediately after running. -+ set +e - local exit_code=666 - "$@" 2>&1 # redirect stderr to stdout. $* is NOT $@! - exit_code=$? -+ set -e - if [[ -f "${CURRENT_LOGFILE}" ]]; then - echo "--> cmd exited with code ${exit_code} at $(date --utc)" >> "${CURRENT_LOGFILE}" - fi - if [[ $exit_code != 0 ]]; then -- display_alert "cmd exited with code ${exit_code}" "$*" "wrn" -- display_alert "stacktrace for failed command" "$(show_caller_full)" "wrn" -+ # This is very specific; remove CURRENT_LOGFILE's value when calling display_alert here otherwise logged twice. -+ CURRENT_LOGFILE="" display_alert "cmd exited with code ${exit_code}" "$*" "wrn" -+ CURRENT_LOGFILE="" display_alert "stacktrace for failed command" "$(show_caller_full)" "wrn" - fi - return $exit_code - } -diff --git a/lib/functions/logging/traps.sh b/lib/functions/logging/traps.sh -index 47878a0b0..faf9d8192 100644 ---- a/lib/functions/logging/traps.sh -+++ b/lib/functions/logging/traps.sh -@@ -55,8 +55,14 @@ function main_error_monitor() { - fi - local stack_caller="${2}" - local full_stack_caller="${3}" -+ if [[ "${ALREADY_EXITING_WITH_ERROR}" != "yes" ]]; then # Don't do this is exit_with_error already did it. -+ local logfile_to_show="${CURRENT_LOGFILE}" # store it -+ unset CURRENT_LOGFILE # stop logging, otherwise crazy -+ logging_error_show_log "main_error_monitor unknown error" "main_error_monitor unknown highlight" "${stack_caller}" "${logfile_to_show}" -+ fi - display_alert "main_error_monitor: ${errcode}! stack:" "${stack_caller}" "err" - display_alert "main_error_monitor: ${errcode}! full:" "${full_stack_caller}" "err" -+ - ALREADY_EXITING_WITH_ERROR=yes - exit 45 - return 44 - -From 6e3a035ec4ba55378e61e0229fb0290f3b0cdf99 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 31 Jan 2022 20:03:34 +0100 -Subject: [PATCH] WiP: indexing JSON into OpenSearch, all-hardcoded version - ---- - lib/tools/index-opensearch.py | 52 +++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 52 insertions(+) - -diff --git a/lib/tools/index-opensearch.py b/lib/tools/index-opensearch.py -new file mode 100755 -index 000000000..b6b82a2d2 ---- /dev/null -+++ b/lib/tools/index-opensearch.py -@@ -0,0 +1,52 @@ -+#!/usr/bin/env python3 -+import json -+import sys -+ -+from opensearchpy import OpenSearch # pip install opensearch-py -+ -+ -+def eprint(*args, **kwargs): -+ print(*args, file=sys.stderr, **kwargs) -+ -+ -+# info = get_info_for_one_board(board, all_params) -+print(json.dumps({}, indent=4, sort_keys=True)) -+ -+eprint("Hello") -+ -+# Read JSON from stdin -+# - should be array of objects -+# - loop over array and index each obj into OS in to the passed index -+# read_from_stdin = sys.stdin.read() -+ -+json_object = json.load(sys.stdin) -+ -+eprint("Loaded {} objects from stdin...".format(len(json_object))) -+ -+host = '192.168.66.55' -+port = 31920 -+ -+# Create the OpenSearch client. -+client = OpenSearch(hosts=[{'host': host, 'port': port}], http_compress=False, use_ssl=False) -+ -+# Create an index with non-default settings. -+index_name = 'board-vars-build' -+index_body = {'settings': {'index': {'number_of_shards': 1, 'number_of_replicas': 0}}} -+ -+# Delete the index; remove old data. -+try: -+ response = client.indices.delete(index=index_name) -+ print('\nDeleting index:') -+ print(response) -+except: -+ eprint("Failed to delete index {}".format(index_name)) -+ -+response = client.indices.create(index_name, body=index_body) -+print('\nCreating index:') -+print(response) -+ -+for obj in json_object: -+ # print(obj) -+ response = client.index(index=index_name, body=obj, refresh=True) -+ print('\nAdding document:') -+ print(response) - -From a1e81b3a46d9511962246ff6852ae9549b154fb9 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 6 Feb 2022 01:57:09 +0100 -Subject: [PATCH] rpi: add DTB symlink in Debian/Ubuntu standard location - /lib/firmware/$version/device-tree; remove build-time-only hacks - -- this allows us to remove the most horrible hack -- should allow for correctly working DTB upgrades -- should NOT impact other families, although a new symlink will be created, nothing uses it. ---- - config/sources/families/bcm2711.conf | 9 +-------- - packages/armbian/builddeb | 8 ++++++++ - 2 files changed, 9 insertions(+), 8 deletions(-) - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index 0dc25fc3f..2198c490c 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -57,14 +57,7 @@ pre_flash_kernel__symlink_dtb_and_kernel() { - Kernel-Flavors: any - EOD - -- ## @TODO: rpardini: a horrible hack. I'll sort this out together with overlays, later. -- local oneDTB dtbBase -- for oneDTB in "${MOUNT}"/boot/dtb/broadcom/*.dtb; do -- dtbBase=$(basename "${oneDTB}") -- cp "${MOUNT}"/boot/dtb/broadcom/"${dtbBase}" "${MOUNT}"/etc/flash-kernel/dtbs/"${dtbBase}" -- done -- -- rm -rf "${MOUNT}"/boot/dtb* || true -+ ## DTB compatibility has been moved to symlink done in packages/armbian/builddeb - - # @TODO: rpardini: packaging could maybe already use the correct names? I can't figure out how. - ln -s ./Image "${MOUNT}"/boot/vmlinuz -diff --git a/packages/armbian/builddeb b/packages/armbian/builddeb -index 0163d401a..0080bb87c 100755 ---- a/packages/armbian/builddeb -+++ b/packages/armbian/builddeb -@@ -74,14 +74,22 @@ create_package() { - exit 0 - EOT - -+ # for Ubuntu/Debian compatiblity, symlink in /lib/firmware/$version/device-tree - cat >> $pdir/DEBIAN/postinst <<- EOT - cd /boot - ln -sfT dtb-$version dtb 2> /dev/null || mv dtb-$version dtb -+ mkdir -p /lib/firmware/$version -+ [ ! -L /lib/firmware/$version/device-tree ] && ln -s /boot/dtb-$version /lib/firmware/$version/device-tree - exit 0 - EOT - -+ cat >> $pdir/DEBIAN/postrm <<- EOT -+ rm -rf /lib/firmware/$version -+ EOT -+ - chmod 775 $pdir/DEBIAN/preinst - chmod 775 $pdir/DEBIAN/postinst -+ chmod 775 $pdir/DEBIAN/postrm - fi - - # Create postinst prerm script for headers - -From e665d2fb3e9a25b2e9e927e3749ff14065f29ffb Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 5 Feb 2022 23:37:01 +0100 -Subject: [PATCH] rpi: fix: flash-kernel fix to ignore kernel 'flavour' for all - raspi's - ---- - config/sources/families/bcm2711.conf | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index 0a1322ac3..0dc25fc3f 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -52,8 +52,8 @@ pre_flash_kernel__symlink_dtb_and_kernel() { - mkdir -p "${MOUNT}"/etc/flash-kernel/dtbs - - cat <<- EOD >> "${MOUNT}"/etc/flash-kernel/db -- # Armbian kernels have a different flavour than expected. -- Machine: ${FK__MACHINE_MODEL} -+ # Armbian kernels don't have a 'flavour'. Ignore flavors for all rpi revisions. -+ Machine: Raspberry Pi * - Kernel-Flavors: any - EOD - - -From acb9b1ee273bb16ab3a5caf47830f63a9eedef37 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 6 Feb 2022 14:19:04 +0100 -Subject: [PATCH] armbian-next: don't try to remove packages that are not - installed to begin with - -- much faster -- new chroot_sdcard_with_stdout() runner, without bash or any escaping. ---- - lib/functions/logging/runners.sh | 6 ++++++ - lib/functions/rootfs/distro-agnostic.sh | 13 ++++++++++--- - 2 files changed, 16 insertions(+), 3 deletions(-) - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 82ea46dae..64f463648 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -19,6 +19,12 @@ function chroot_sdcard() { - TMPDIR="" run_host_command_logged_raw chroot "${SDCARD}" /bin/bash -e -c "$*" - } - -+# This should be used if you need to capture the stdout produced by the command. It is NOT logged, and NOT run thru bash, and NOT quoted. -+function chroot_sdcard_with_stdout() { -+ TMPDIR="" chroot "${SDCARD}" "$@" -+} -+ -+ - function chroot_custom_long_running() { - local target=$1 - shift -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 5569580c1..ef8c40720 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -262,13 +262,20 @@ install_distribution_agnostic() { - chroot_sdcard_apt_get remove --auto-remove ${_pkg_list} - fi - -- # remove board packages -+ # remove board packages. loop over the list to remove, check if they're actually installed, then remove individually. - if [[ -n ${PACKAGE_LIST_BOARD_REMOVE} ]]; then - _pkg_list=${PACKAGE_LIST_BOARD_REMOVE} -- display_alert "Removing PACKAGE_LIST_BOARD_REMOVE packages" "${_pkg_list}" -+ declare -a currently_installed_packages -+ # shellcheck disable=SC2207 # I wanna split, thanks. -+ currently_installed_packages=($(chroot_sdcard_with_stdout dpkg-query --show --showformat='${Package} ')) - for PKG_REMOVE in ${_pkg_list}; do -- chroot_sdcard_apt_get remove --auto-remove "${PKG_REMOVE}" -+ # shellcheck disable=SC2076 # I wanna match literally, thanks. -+ if [[ " ${currently_installed_packages[*]} " =~ " ${PKG_REMOVE} " ]]; then -+ display_alert "Removing PACKAGE_LIST_BOARD_REMOVE package" "${PKG_REMOVE}" -+ chroot_sdcard_apt_get remove --auto-remove "${PKG_REMOVE}" -+ fi - done -+ unset currently_installed_packages - fi - - # install u-boot - -From c2a084f37049b0a3338e8f8bdf1e103539439c89 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 6 Feb 2022 12:42:25 +0100 -Subject: [PATCH] armbian-next: don't try to enable systemd services for units - that don't exist - -- those might be removed by a bsp extension, so check for existence before trying to enable ---- - lib/functions/rootfs/distro-agnostic.sh | 18 +++++++++--------- - 1 file changed, 9 insertions(+), 9 deletions(-) - -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 3d8607de0..5569580c1 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -267,7 +267,7 @@ install_distribution_agnostic() { - _pkg_list=${PACKAGE_LIST_BOARD_REMOVE} - display_alert "Removing PACKAGE_LIST_BOARD_REMOVE packages" "${_pkg_list}" - for PKG_REMOVE in ${_pkg_list}; do -- chroot_sdcard_apt_get remove --auto-remove "${PKG_REMOVE}" 2>&1 -+ chroot_sdcard_apt_get remove --auto-remove "${PKG_REMOVE}" - done - fi - -@@ -414,14 +414,14 @@ install_distribution_agnostic() { - It allows implementors access to the rootfs (`${SDCARD}`) in its pristine state after packages are installed. - FAMILY_TWEAKS - -- # enable additional services -- chroot_sdcard systemctl --no-reload enable armbian-firstrun.service || true -- chroot_sdcard systemctl --no-reload enable armbian-firstrun-config.service || true -- chroot_sdcard systemctl --no-reload enable armbian-zram-config.service || true -- chroot_sdcard systemctl --no-reload enable armbian-hardware-optimize.service || true -- chroot_sdcard systemctl --no-reload enable armbian-ramlog.service || true -- chroot_sdcard systemctl --no-reload enable armbian-resize-filesystem.service || true -- chroot_sdcard systemctl --no-reload enable armbian-hardware-monitor.service || true -+ # enable additional services, if they exist. -+ [[ -f "${SDCARD}"/lib/systemd/system/armbian-firstrun.service ]] && chroot_sdcard systemctl --no-reload enable armbian-firstrun.service -+ [[ -f "${SDCARD}"/lib/systemd/system/armbian-firstrun-config.service ]] && chroot_sdcard systemctl --no-reload enable armbian-firstrun-config.service -+ [[ -f "${SDCARD}"/lib/systemd/system/armbian-zram-config.service ]] && chroot_sdcard systemctl --no-reload enable armbian-zram-config.service -+ [[ -f "${SDCARD}"/lib/systemd/system/armbian-hardware-optimize.service ]] && chroot_sdcard systemctl --no-reload enable armbian-hardware-optimize.service -+ [[ -f "${SDCARD}"/lib/systemd/system/armbian-ramlog.service ]] && chroot_sdcard systemctl --no-reload enable armbian-ramlog.service -+ [[ -f "${SDCARD}"/lib/systemd/system/armbian-resize-filesystem.service ]] && chroot_sdcard systemctl --no-reload enable armbian-resize-filesystem.service -+ [[ -f "${SDCARD}"/lib/systemd/system/armbian-hardware-monitor.service ]] && chroot_sdcard systemctl --no-reload enable armbian-hardware-monitor.service - - # copy "first run automated config, optional user configured" - cp "${SRC}"/packages/bsp/armbian_first_run.txt.template "${SDCARD}"/boot/armbian_first_run.txt.template - -From 9291369c6d68660e9a43f43ee3fc94c8ad0fc774 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 6 Feb 2022 12:12:01 +0100 -Subject: [PATCH] armbian-next: don't error/warn on failure to enable - bootsplash when systemd units missing - ---- - lib/functions/rootfs/boot_logo.sh | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/lib/functions/rootfs/boot_logo.sh b/lib/functions/rootfs/boot_logo.sh -index 319ea1144..4b5e98aa9 100644 ---- a/lib/functions/rootfs/boot_logo.sh -+++ b/lib/functions/rootfs/boot_logo.sh -@@ -108,10 +108,11 @@ function boot_logo() { - [[ -f "${SDCARD}"/boot/armbianEnv.txt ]] && grep -q '^bootlogo' "${SDCARD}"/boot/armbianEnv.txt && - sed -i 's/^bootlogo.*/bootlogo=true/' "${SDCARD}"/boot/armbianEnv.txt || echo 'bootlogo=true' >> "${SDCARD}"/boot/armbianEnv.txt - [[ -f "${SDCARD}"/boot/boot.ini ]] && sed -i 's/^setenv bootlogo.*/setenv bootlogo "true"/' "${SDCARD}"/boot/boot.ini -+ -+ # enable additional services. @TODO: rpardini: really wonder where do these come from? -+ chroot_sdcard "systemctl --no-reload enable bootsplash-ask-password-console.path || true" -+ chroot_sdcard "systemctl --no-reload enable bootsplash-hide-when-booted.service || true" -+ chroot_sdcard "systemctl --no-reload enable bootsplash-show-on-shutdown.service || true" - fi -- # enable additional services -- chroot_sdcard systemctl --no-reload enable bootsplash-ask-password-console.path || true -- chroot_sdcard systemctl --no-reload enable bootsplash-hide-when-booted.service || true -- chroot_sdcard systemctl --no-reload enable bootsplash-show-on-shutdown.service || true - return 0 - } - -From ee634ea265ad9947f4061cd3bc0ffdf7d83d3e78 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 6 Feb 2022 11:24:33 +0100 -Subject: [PATCH] armbian-next: use indented HEREDOCS for all - call_extension_method's - ---- - lib/extensions.sh | 30 +++++++++++++++--------------- - lib/functions/bsp/bsp-cli.sh | 8 ++++---- - lib/functions/image/partitioning.sh | 22 +++++++++++----------- - lib/functions/image/rootfs-to-image.sh | 30 +++++++++++++++--------------- - lib/functions/main/default-build.sh | 10 +++++----- - lib/functions/main/rootfs-image.sh | 8 ++++---- - lib/functions/rootfs/customize.sh | 18 +++++++++--------- - lib/functions/rootfs/distro-agnostic.sh | 28 ++++++++++++++-------------- - lib/functions/rootfs/post-tweaks.sh | 10 +++++----- - 9 files changed, 82 insertions(+), 82 deletions(-) - -diff --git a/lib/extensions.sh b/lib/extensions.sh -index 516700bbb..8b7ba183c 100644 ---- a/lib/extensions.sh -+++ b/lib/extensions.sh -@@ -275,21 +275,21 @@ run_after_build__999_finish_extension_manager() { - export defined_hook_point_functions hook_point_function_trace_sources - - # eat our own dog food, pt2. -- call_extension_method "extension_metadata_ready" << 'EXTENSION_METADATA_READY' --*meta-Meta time!* --Implement this hook to work with/on the meta-data made available by the extension manager. --Interesting stuff to process: --- `"${EXTENSION_MANAGER_TMP_DIR}/hook_point_calls.txt"` contains a list of all hook points called, in order. --- For each hook_point in the list, more files will have metadata about that hook point. -- - `${EXTENSION_MANAGER_TMP_DIR}/hook_point.orig.md` contains the hook documentation at the call site (inline docs), hopefully in Markdown format. -- - `${EXTENSION_MANAGER_TMP_DIR}/hook_point.compat` contains the compatibility names for the hooks. -- - `${EXTENSION_MANAGER_TMP_DIR}/hook_point.exports` contains _exported_ environment variables. -- - `${EXTENSION_MANAGER_TMP_DIR}/hook_point.vars` contains _all_ environment variables. --- `${defined_hook_point_functions}` is a map of _all_ the defined hook point functions and their extension information. --- `${hook_point_function_trace_sources}` is a map of all the hook point functions _that were really called during the build_ and their BASH_SOURCE information. --- `${hook_point_function_trace_lines}` is the same, but BASH_LINENO info. --After this hook is done, the `${EXTENSION_MANAGER_TMP_DIR}` will be removed. --EXTENSION_METADATA_READY -+ call_extension_method "extension_metadata_ready" <<- 'EXTENSION_METADATA_READY' -+ *meta-Meta time!* -+ Implement this hook to work with/on the meta-data made available by the extension manager. -+ Interesting stuff to process: -+ - `"${EXTENSION_MANAGER_TMP_DIR}/hook_point_calls.txt"` contains a list of all hook points called, in order. -+ - For each hook_point in the list, more files will have metadata about that hook point. -+ - `${EXTENSION_MANAGER_TMP_DIR}/hook_point.orig.md` contains the hook documentation at the call site (inline docs), hopefully in Markdown format. -+ - `${EXTENSION_MANAGER_TMP_DIR}/hook_point.compat` contains the compatibility names for the hooks. -+ - `${EXTENSION_MANAGER_TMP_DIR}/hook_point.exports` contains _exported_ environment variables. -+ - `${EXTENSION_MANAGER_TMP_DIR}/hook_point.vars` contains _all_ environment variables. -+ - `${defined_hook_point_functions}` is a map of _all_ the defined hook point functions and their extension information. -+ - `${hook_point_function_trace_sources}` is a map of all the hook point functions _that were really called during the build_ and their BASH_SOURCE information. -+ - `${hook_point_function_trace_lines}` is the same, but BASH_LINENO info. -+ After this hook is done, the `${EXTENSION_MANAGER_TMP_DIR}` will be removed. -+ EXTENSION_METADATA_READY - - # Move temporary log file over to final destination, and start writing to it instead (although 999 is pretty late in the game) - mv "${EXTENSION_MANAGER_LOG_FILE}" "${DEST}/${LOG_SUBPATH:-debug}/extensions.log" -diff --git a/lib/functions/bsp/bsp-cli.sh b/lib/functions/bsp/bsp-cli.sh -index a2c0adc58..a4e6db654 100644 ---- a/lib/functions/bsp/bsp-cli.sh -+++ b/lib/functions/bsp/bsp-cli.sh -@@ -289,10 +289,10 @@ create_board_package() { - display_alert "Done with family_tweaks_bsp" "${LINUXFAMILY}" "debug" - fi - -- call_extension_method "post_family_tweaks_bsp" << 'POST_FAMILY_TWEAKS_BSP' --*family_tweaks_bsp overrrides what is in the config, so give it a chance to override the family tweaks* --This should be implemented by the config to tweak the BSP, after the board or family has had the chance to. --POST_FAMILY_TWEAKS_BSP -+ call_extension_method "post_family_tweaks_bsp" <<- 'POST_FAMILY_TWEAKS_BSP' -+ *family_tweaks_bsp overrrides what is in the config, so give it a chance to override the family tweaks* -+ This should be implemented by the config to tweak the BSP, after the board or family has had the chance to. -+ POST_FAMILY_TWEAKS_BSP - - # add some summary to the image - fingerprint_image "${destination}/etc/armbian.txt" -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 4090d96e1..36683314d 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -68,10 +68,10 @@ prepare_partitions() { - UEFI_MOUNT_POINT=${UEFI_MOUNT_POINT:-/boot/efi} - UEFI_FS_LABEL="${UEFI_FS_LABEL:-ARMBIEFI}" # Should be always uppercase - -- call_extension_method "pre_prepare_partitions" "prepare_partitions_custom" << 'PRE_PREPARE_PARTITIONS' --*allow custom options for mkfs* --Good time to change stuff like mkfs opts, types etc. --PRE_PREPARE_PARTITIONS -+ call_extension_method "pre_prepare_partitions" "prepare_partitions_custom" <<- 'PRE_PREPARE_PARTITIONS' -+ *allow custom options for mkfs* -+ Good time to change stuff like mkfs opts, types etc. -+ PRE_PREPARE_PARTITIONS - - # stage: determine partition configuration - if [[ -n $BOOTFS_TYPE ]]; then -@@ -117,13 +117,13 @@ PRE_PREPARE_PARTITIONS - export rootfs_size=$(du -sm $SDCARD/ | cut -f1) # MiB - display_alert "Current rootfs size" "$rootfs_size MiB" "info" - -- call_extension_method "prepare_image_size" "config_prepare_image_size" << 'PREPARE_IMAGE_SIZE' --*allow dynamically determining the size based on the $rootfs_size* --Called after `${rootfs_size}` is known, but before `${FIXED_IMAGE_SIZE}` is taken into account. --A good spot to determine `FIXED_IMAGE_SIZE` based on `rootfs_size`. --UEFISIZE can be set to 0 for no UEFI partition, or to a size in MiB to include one. --Last chance to set `USE_HOOK_FOR_PARTITION`=yes and then implement create_partition_table hook_point. --PREPARE_IMAGE_SIZE -+ call_extension_method "prepare_image_size" "config_prepare_image_size" <<- 'PREPARE_IMAGE_SIZE' -+ *allow dynamically determining the size based on the $rootfs_size* -+ Called after `${rootfs_size}` is known, but before `${FIXED_IMAGE_SIZE}` is taken into account. -+ A good spot to determine `FIXED_IMAGE_SIZE` based on `rootfs_size`. -+ UEFISIZE can be set to 0 for no UEFI partition, or to a size in MiB to include one. -+ Last chance to set `USE_HOOK_FOR_PARTITION`=yes and then implement create_partition_table hook_point. -+ PREPARE_IMAGE_SIZE - - if [[ -n $FIXED_IMAGE_SIZE && $FIXED_IMAGE_SIZE =~ ^[0-9]+$ ]]; then - display_alert "Using user-defined image size" "$FIXED_IMAGE_SIZE MiB" "info" -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index 8b89d6217..c0aace136 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -47,10 +47,10 @@ create_image_from_sdcard_rootfs() { - run_host_command_logged rsync -aHWXh --info=progress0,stats1 "$SDCARD/boot" "$MOUNT" - fi - -- call_extension_method "pre_update_initramfs" "config_pre_update_initramfs" << 'PRE_UPDATE_INITRAMFS' --*allow config to hack into the initramfs create process* --Called after rsync has synced both `/root` and `/root` on the target, but before calling `update_initramfs`. --PRE_UPDATE_INITRAMFS -+ call_extension_method "pre_update_initramfs" "config_pre_update_initramfs" <<- 'PRE_UPDATE_INITRAMFS' -+ *allow config to hack into the initramfs create process* -+ Called after rsync has synced both `/root` and `/root` on the target, but before calling `update_initramfs`. -+ PRE_UPDATE_INITRAMFS - - # stage: create final initramfs - [[ -n $KERNELSOURCE ]] && { -@@ -82,10 +82,10 @@ PRE_UMOUNT_FINAL_IMAGE - [[ $ROOTFS_TYPE != nfs ]] && umount -l $MOUNT - [[ $CRYPTROOT_ENABLE == yes ]] && cryptsetup luksClose $ROOT_MAPPER - -- call_extension_method "post_umount_final_image" "config_post_umount_final_image" << 'POST_UMOUNT_FINAL_IMAGE' --*allow config to hack into the image after the unmount* --Called after unmounting both `/root` and `/boot`. --POST_UMOUNT_FINAL_IMAGE -+ call_extension_method "post_umount_final_image" "config_post_umount_final_image" <<- 'POST_UMOUNT_FINAL_IMAGE' -+ *allow config to hack into the image after the unmount* -+ Called after unmounting both `/root` and `/boot`. -+ POST_UMOUNT_FINAL_IMAGE - - # to make sure its unmounted - while grep -Eq '(${MOUNT}|${DESTIMG})' /proc/mounts; do -@@ -179,13 +179,13 @@ POST_UMOUNT_FINAL_IMAGE - - # Previously, post_build_image passed the .img path as an argument to the hook. Now its an ENV var. - export FINAL_IMAGE_FILE="${DESTIMG}/${version}.img" -- call_extension_method "post_build_image" << 'POST_BUILD_IMAGE' --*custom post build hook* --Called after the final .img file is built, before it is (possibly) written to an SD writer. --- *NOTE*: this hook used to take an argument ($1) for the final image produced. -- - Now it is passed as an environment variable `${FINAL_IMAGE_FILE}` --It is the last possible chance to modify `$CARD_DEVICE`. --POST_BUILD_IMAGE -+ call_extension_method "post_build_image" <<- 'POST_BUILD_IMAGE' -+ *custom post build hook* -+ Called after the final .img file is built, before it is (possibly) written to an SD writer. -+ - *NOTE*: this hook used to take an argument ($1) for the final image produced. -+ - Now it is passed as an environment variable `${FINAL_IMAGE_FILE}` -+ It is the last possible chance to modify `$CARD_DEVICE`. -+ POST_BUILD_IMAGE - - # move artefacts from temporally directory to its final destination - [[ -n $compression_type ]] && rm $DESTIMG/${version}.img -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 00a11e47e..3e81d7cd5 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -126,11 +126,11 @@ main_default_build_single() { - display_alert "Done building image" "${BOARD}" "target-reached" - fi - -- call_extension_method "run_after_build" << 'RUN_AFTER_BUILD' --*hook for function to run after build, i.e. to change owner of `$SRC`* --Really one of the last hooks ever called. The build has ended. Congratulations. --- *NOTE:* this will run only if there were no errors during build process. --RUN_AFTER_BUILD -+ call_extension_method "run_after_build" <<- 'RUN_AFTER_BUILD' -+ *hook for function to run after build, i.e. to change owner of `$SRC`* -+ Really one of the last hooks ever called. The build has ended. Congratulations. -+ - *NOTE:* this will run only if there were no errors during build process. -+ RUN_AFTER_BUILD - - # Cleanup. Remove the WORKDIR, unset the TMPDIR - unset TMPDIR -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index 9996d4b94..e31c319fb 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -43,10 +43,10 @@ function build_rootfs_and_image() { - # stage: prepare basic rootfs: unpack cache or create from scratch - LOG_SECTION="get_or_create_rootfs_cache_chroot_sdcard" do_with_logging get_or_create_rootfs_cache_chroot_sdcard - -- call_extension_method "pre_install_distribution_specific" "config_pre_install_distribution_specific" << 'PRE_INSTALL_DISTRIBUTION_SPECIFIC' --*give config a chance to act before install_distribution_specific* --Called after `create_rootfs_cache` (_prepare basic rootfs: unpack cache or create from scratch_) but before `install_distribution_specific` (_install distribution and board specific applications_). --PRE_INSTALL_DISTRIBUTION_SPECIFIC -+ call_extension_method "pre_install_distribution_specific" "config_pre_install_distribution_specific" <<- 'PRE_INSTALL_DISTRIBUTION_SPECIFIC' -+ *give config a chance to act before install_distribution_specific* -+ Called after `create_rootfs_cache` (_prepare basic rootfs: unpack cache or create from scratch_) but before `install_distribution_specific` (_install distribution and board specific applications_). -+ PRE_INSTALL_DISTRIBUTION_SPECIFIC - - # stage: install kernel and u-boot packages - # install distribution and board specific applications -diff --git a/lib/functions/rootfs/customize.sh b/lib/functions/rootfs/customize.sh -index 2dc59d712..5405b814f 100644 ---- a/lib/functions/rootfs/customize.sh -+++ b/lib/functions/rootfs/customize.sh -@@ -3,11 +3,11 @@ customize_image() { - # for users that need to prepare files at host - [[ -f $USERPATCHES_PATH/customize-image-host.sh ]] && source "$USERPATCHES_PATH"/customize-image-host.sh - -- call_extension_method "pre_customize_image" "image_tweaks_pre_customize" << 'PRE_CUSTOMIZE_IMAGE' --*run before customize-image.sh* --This hook is called after `customize-image-host.sh` is called, but before the overlay is mounted. --It thus can be used for the same purposes as `customize-image-host.sh`. --PRE_CUSTOMIZE_IMAGE -+ call_extension_method "pre_customize_image" "image_tweaks_pre_customize" <<- 'PRE_CUSTOMIZE_IMAGE' -+ *run before customize-image.sh* -+ This hook is called after `customize-image-host.sh` is called, but before the overlay is mounted. -+ It thus can be used for the same purposes as `customize-image-host.sh`. -+ PRE_CUSTOMIZE_IMAGE - - cp "$USERPATCHES_PATH"/customize-image.sh "${SDCARD}"/tmp/customize-image.sh - chmod +x "${SDCARD}"/tmp/customize-image.sh -@@ -23,10 +23,10 @@ PRE_CUSTOMIZE_IMAGE - exit_with_error "customize-image.sh exited with error (rc: $CUSTOMIZE_IMAGE_RC)" - fi - -- call_extension_method "post_customize_image" "image_tweaks_post_customize" << 'POST_CUSTOMIZE_IMAGE' --*post customize-image.sh hook* --Run after the customize-image.sh script is run, and the overlay is unmounted. --POST_CUSTOMIZE_IMAGE -+ call_extension_method "post_customize_image" "image_tweaks_post_customize" <<- 'POST_CUSTOMIZE_IMAGE' -+ *post customize-image.sh hook* -+ Run after the customize-image.sh script is run, and the overlay is unmounted. -+ POST_CUSTOMIZE_IMAGE - - return 0 - } -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 0f916b8e6..3d8607de0 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -283,10 +283,10 @@ install_distribution_agnostic() { - fi - } - -- call_extension_method "pre_install_kernel_debs" << 'PRE_INSTALL_KERNEL_DEBS' --*called before installing the Armbian-built kernel deb packages* --It is not too late to `unset KERNELSOURCE` here and avoid kernel install. --PRE_INSTALL_KERNEL_DEBS -+ call_extension_method "pre_install_kernel_debs" <<- 'PRE_INSTALL_KERNEL_DEBS' -+ *called before installing the Armbian-built kernel deb packages* -+ It is not too late to `unset KERNELSOURCE` here and avoid kernel install. -+ PRE_INSTALL_KERNEL_DEBS - - # install kernel - [[ -n $KERNELSOURCE ]] && { -@@ -312,11 +312,11 @@ PRE_INSTALL_KERNEL_DEBS - fi - } - -- call_extension_method "post_install_kernel_debs" << 'POST_INSTALL_KERNEL_DEBS' --*allow config to do more with the installed kernel/headers* --Called after packages, u-boot, kernel and headers installed in the chroot, but before the BSP is installed. --If `KERNELSOURCE` is (still?) unset after this, Armbian-built firmware will not be installed. --POST_INSTALL_KERNEL_DEBS -+ call_extension_method "post_install_kernel_debs" <<- 'POST_INSTALL_KERNEL_DEBS' -+ *allow config to do more with the installed kernel/headers* -+ Called after packages, u-boot, kernel and headers installed in the chroot, but before the BSP is installed. -+ If `KERNELSOURCE` is (still?) unset after this, Armbian-built firmware will not be installed. -+ POST_INSTALL_KERNEL_DEBS - - # install board support packages - if [[ "${REPOSITORY_INSTALL}" != *bsp* ]]; then -@@ -408,11 +408,11 @@ POST_INSTALL_KERNEL_DEBS - display_alert "Done with family_tweaks" "$BOARD :: $LINUXFAMILY" "debug" - fi - -- call_extension_method "post_family_tweaks" << 'FAMILY_TWEAKS' --*customize the tweaks made by $LINUXFAMILY-specific family_tweaks* --It is run after packages are installed in the rootfs, but before enabling additional services. --It allows implementors access to the rootfs (`${SDCARD}`) in its pristine state after packages are installed. --FAMILY_TWEAKS -+ call_extension_method "post_family_tweaks" <<- 'FAMILY_TWEAKS' -+ *customize the tweaks made by $LINUXFAMILY-specific family_tweaks* -+ It is run after packages are installed in the rootfs, but before enabling additional services. -+ It allows implementors access to the rootfs (`${SDCARD}`) in its pristine state after packages are installed. -+ FAMILY_TWEAKS - - # enable additional services - chroot_sdcard systemctl --no-reload enable armbian-firstrun.service || true -diff --git a/lib/functions/rootfs/post-tweaks.sh b/lib/functions/rootfs/post-tweaks.sh -index c7cb23ea9..ec26f46af 100644 ---- a/lib/functions/rootfs/post-tweaks.sh -+++ b/lib/functions/rootfs/post-tweaks.sh -@@ -6,10 +6,10 @@ post_debootstrap_tweaks() { - chroot "${SDCARD}" /bin/bash -c "dpkg-divert --quiet --local --rename --remove /sbin/start-stop-daemon" - rm -f "${SDCARD}"/usr/sbin/policy-rc.d "${SDCARD}/usr/bin/${QEMU_BINARY}" - -- call_extension_method "post_post_debootstrap_tweaks" "config_post_debootstrap_tweaks" << 'POST_POST_DEBOOTSTRAP_TWEAKS' --*run after removing diversions and qemu with chroot unmounted* --Last chance to touch the `${SDCARD}` filesystem before it is copied to the final media. --It is too late to run any chrooted commands, since the supporting filesystems are already unmounted. --POST_POST_DEBOOTSTRAP_TWEAKS -+ call_extension_method "post_post_debootstrap_tweaks" "config_post_debootstrap_tweaks" <<- 'POST_POST_DEBOOTSTRAP_TWEAKS' -+ *run after removing diversions and qemu with chroot unmounted* -+ Last chance to touch the `${SDCARD}` filesystem before it is copied to the final media. -+ It is too late to run any chrooted commands, since the supporting filesystems are already unmounted. -+ POST_POST_DEBOOTSTRAP_TWEAKS - - } - -From cba342a0ce4843cf69144c11ea881e0ce0b6ba40 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 6 Feb 2022 14:39:49 +0100 -Subject: [PATCH] armbian-next: manual merge (8) of all lib/*.sh changes - between revisions 1d499d9ac282d44d4fdb052e5f64fb902688c18f and - 3b7f5b1f3418b7ad7a7c03f2af6d8da66f20bcb9 - ---- - lib/functions/compilation/patching.sh | 14 ++++++++------ - 1 file changed, 8 insertions(+), 6 deletions(-) - -diff --git a/lib/functions/compilation/patching.sh b/lib/functions/compilation/patching.sh -index 0d32729ab..99cb31719 100644 ---- a/lib/functions/compilation/patching.sh -+++ b/lib/functions/compilation/patching.sh -@@ -120,26 +120,28 @@ apply_patch_series() { - awk '$0 ~ /^+.*patch$/{print $2}' | - xargs -I % sh -c 'rm -f %' - -- patch --batch --silent --no-backup-if-mismatch -p1 -N < $bzdir/"$p" > $err_pt 2>&1 -+ patch --batch --silent --no-backup-if-mismatch -p1 -N < $bzdir/"$p" >> $err_pt 2>&1 - flag=$? - - case $flag in - 0) -- printf "%-77s [\033[32m done \033[0m]\n" "${p}" -- printf "%-77s [ done ]\n" "${p}" >> "${DEST}"/debug/patching.log -+ printf "[\033[32m done \033[0m] %s\n" "${p}" -+ printf "[ done ] %s\n" "${p}" >> "${DEST}"/debug/patching.log - ;; - 1) -- printf "%-77s [\033[33m FAILED \033[0m]\n" "${p}" -- echo -e "For ${p} \t\tprocess exit [ $flag ]" >> "${DEST}"/debug/patching.log -+ printf "[\033[33m FAILED \033[0m] %s\n" "${p}" -+ echo -e "[ FAILED ] For ${p} \t\tprocess exit [ $flag ]" >> "${DEST}"/debug/patching.log - cat $err_pt >> "${DEST}"/debug/patching.log - ;; - 2) -- printf "%-77s [\033[31m Patch wrong \033[0m]\n" "${p}" -+ printf "[\033[31m Patch wrong \033[0m] %s\n" "${p}" - echo -e "Patch wrong ${p}\t\tprocess exit [ $flag ]" >> "${DEST}"/debug/patching.log - cat $err_pt >> "${DEST}"/debug/patching.log - ;; - esac -+ echo "" > $err_pt - done -+ echo "" >> "${DEST}"/debug/patching.log - rm $err_pt - } - - -From b2b1fdf3dae9193072994369c7b5bac7318366eb Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 5 Feb 2022 22:05:21 +0100 -Subject: [PATCH] armbian-next: manual merge (7) of all lib/*.sh changes - between revisions d885bfc97d908b09dddac06393c2987995704d0a and - 1d499d9ac282d44d4fdb052e5f64fb902688c18f - ---- - lib/functions/compilation/extra-drivers.sh | 3 +-- - lib/functions/configuration/main-config.sh | 22 ++++++++++++++++++++-- - lib/functions/general/git.sh | 4 ++-- - lib/functions/image/rootfs-to-image.sh | 14 -------------- - lib/functions/main/default-build.sh | 6 ++++++ - lib/functions/rootfs/distro-agnostic.sh | 5 +++-- - lib/functions/rootfs/distro-specific.sh | 7 +++++++ - 7 files changed, 39 insertions(+), 22 deletions(-) - -diff --git a/lib/functions/compilation/extra-drivers.sh b/lib/functions/compilation/extra-drivers.sh -index 7fb60c37c..b466c940b 100644 ---- a/lib/functions/compilation/extra-drivers.sh -+++ b/lib/functions/compilation/extra-drivers.sh -@@ -552,9 +552,8 @@ prepare_extra_kernel_drivers() { - - # Bluetooth support for Realtek 8822CS (hci_ver 0x8) chipsets - # For sunxi, these two patches are applied in a series. -- if linux-version compare "${version}" ge 5.11 && [[ "$LINUXFAMILY" != sunxi* ]] && [[ "$EXTRAWIFI" == yes ]]; then -+ if linux-version compare "${version}" ge 5.11 && [[ "$LINUXFAMILY" != sunxi* ]]; then - display_alert "Adding" "Bluetooth support for Realtek 8822CS (hci_ver 0x8) chipsets" "info" -- - process_patch_file "${SRC}/patch/misc/bluetooth-rtl8822cs-hci_ver-0x8.patch" "applying" - process_patch_file "${SRC}/patch/misc/Bluetooth-hci_h5-Add-power-reset-via-gpio-in-h5_btrt.patch" "applying" - fi -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 5f6a21b1a..1457e6bca 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -42,7 +42,7 @@ function do_main_configuration() { - [[ -z $EXIT_PATCHING_ERROR ]] && EXIT_PATCHING_ERROR="" # exit patching if failed - [[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board - cd "${SRC}" || exit -- [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=13 -+ [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=14 - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 - BUILD_REPOSITORY_URL=$(improved_git remote get-url $(improved_git remote 2> /dev/null | grep origin) 2> /dev/null) - BUILD_REPOSITORY_COMMIT=$(improved_git describe --match=d_e_a_d_b_e_e_f --always --dirty 2> /dev/null) -@@ -58,6 +58,21 @@ function do_main_configuration() { - REPO_CONFIG="aptly.conf" - fi - -+ # image artefact destination with or without subfolder -+ FINALDEST=$DEST/images -+ if [[ "${MAKE_FOLDERS}" == yes ]]; then -+ -+ if [[ "$RC" == yes ]]; then -+ FINALDEST=$DEST/images/"${BOARD}"/RC -+ elif [[ "$BETA" == yes ]]; then -+ FINALDEST=$DEST/images/"${BOARD}"/nightly -+ else -+ FINALDEST=$DEST/images/"${BOARD}"/archive -+ fi -+ -+ install -d ${FINALDEST} -+ fi -+ - # TODO: fixed name can't be used for parallel image building - ROOT_MAPPER="armbian-root" - -@@ -87,7 +102,7 @@ function do_main_configuration() { - china) - [[ -z $USE_MAINLINE_GOOGLE_MIRROR ]] && [[ -z $MAINLINE_MIRROR ]] && MAINLINE_MIRROR=tuna - [[ -z $USE_GITHUB_UBOOT_MIRROR ]] && [[ -z $UBOOT_MIRROR ]] && UBOOT_MIRROR=gitee -- [[ -z $GITHUB_MIRROR ]] && GITHUB_MIRROR=fastgit -+ [[ -z $GITHUB_MIRROR ]] && GITHUB_MIRROR=cnpmjs - [[ -z $DOWNLOAD_MIRROR ]] && DOWNLOAD_MIRROR=china - ;; - *) ;; -@@ -404,6 +419,9 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - - if [[ "${ARCH}" == "amd64" ]]; then - UBUNTU_MIRROR='archive.ubuntu.com/ubuntu' # ports are only for non-amd64, of course. -+ if [[ -n ${CUSTOM_UBUNTU_MIRROR} ]]; then # ubuntu redirector doesn't work well on amd64 -+ UBUNTU_MIRROR="${CUSTOM_UBUNTU_MIRROR}" -+ fi - fi - - # don't use mirrors that throws garbage on 404 -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 6d0bda152..a02faa1f2 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -70,7 +70,7 @@ waiter_local_repo() { - mkdir -p $work_dir - cd $work_dir || exit_with_error - -- display_alert "Checking git sources" "$dir $name/$branch" "info" -+ display_alert "Checking git sources" "$dir $url$name/$branch" "info" - - if [ "$(git rev-parse --git-dir 2> /dev/null)" != ".git" ]; then - git init -q . -@@ -80,7 +80,7 @@ waiter_local_repo() { - ( - $VAR_SHALLOW_ORIGINAL - -- display_alert "Add original git sources" "$dir $name/$branch" "info" -+ display_alert "Add original git sources" "$dir $url$name/$branch" "info" - if [ "$(git ls-remote -h $url $branch | - awk -F'/' '{if (NR == 1) print $NF}')" != "$branch" ]; then - display_alert "Bad $branch for $url in $VAR_SHALLOW_ORIGINAL" -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index b62ad1f5c..8b89d6217 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -101,20 +101,6 @@ POST_UMOUNT_FINAL_IMAGE - mkdir -p $DESTIMG - mv ${SDCARD}.raw $DESTIMG/${version}.img - -- FINALDEST=$DEST/images -- [[ "${BUILD_ALL}" == yes ]] && MAKE_FOLDERS="yes" -- -- if [[ "${MAKE_FOLDERS}" == yes ]]; then -- if [[ "$RC" == yes ]]; then -- FINALDEST=$DEST/images/"${BOARD}"/RC -- elif [[ "$BETA" == yes ]]; then -- FINALDEST=$DEST/images/"${BOARD}"/nightly -- else -- FINALDEST=$DEST/images/"${BOARD}"/archive -- fi -- install -d ${FINALDEST} -- fi -- - # custom post_build_image_modify hook to run before fingerprinting and compression - [[ $(type -t post_build_image_modify) == function ]] && display_alert "Custom Hook Detected" "post_build_image_modify" "info" && post_build_image_modify "${DESTIMG}/${version}.img" - -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 34aafb1d0..00a11e47e 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -101,6 +101,12 @@ main_default_build_single() { - LOG_SECTION="create_bsp_desktop_package" do_with_logging create_bsp_desktop_package - fi - -+ # skip image creation if exists. useful for CI when making a lot of images -+ if [ "$IMAGE_PRESENT" == yes ] && ls "${FINALDEST}/${VENDOR}_${REVISION}_${BOARD^}_${RELEASE}_${BRANCH}_${VER/-$LINUXFAMILY/}${DESKTOP_ENVIRONMENT:+_$DESKTOP_ENVIRONMENT}"*.xz 1> /dev/null 2>&1; then -+ display_alert "Skipping image creation" "image already made - IMAGE_PRESENT is set" "wrn" -+ exit -+ fi -+ - # build additional packages - if [[ $EXTERNAL_NEW == compile ]]; then - LOG_SECTION="chroot_build_packages" do_with_logging chroot_build_packages -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index d48879929..0f916b8e6 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -152,7 +152,6 @@ install_distribution_agnostic() { - - # create extlinux config file @TODO: refactor into extensions u-boot, extlinux - if [[ $SRC_EXTLINUX == yes ]]; then -- - mkdir -p $SDCARD/boot/extlinux - cat <<- EOF > "$SDCARD/boot/extlinux/extlinux.conf" - LABEL ${VENDOR} -@@ -160,7 +159,9 @@ install_distribution_agnostic() { - INITRD /boot/$NAME_INITRD - EOF - if [[ -n $BOOT_FDT_FILE ]]; then -- echo " FDT /boot/dtb/$BOOT_FDT_FILE" >> "$SDCARD/boot/extlinux/extlinux.conf" -+ if [[ $BOOT_FDT_FILE != "none" ]]; then -+ echo " FDT /boot/dtb/$BOOT_FDT_FILE" >> "$SDCARD/boot/extlinux/extlinux.conf" -+ fi - else - echo " FDTDIR /boot/dtb/" >> "$SDCARD/boot/extlinux/extlinux.conf" - fi -diff --git a/lib/functions/rootfs/distro-specific.sh b/lib/functions/rootfs/distro-specific.sh -index 7ba7e19e7..4770af4bc 100644 ---- a/lib/functions/rootfs/distro-specific.sh -+++ b/lib/functions/rootfs/distro-specific.sh -@@ -78,6 +78,13 @@ install_distribution_specific() { - chroot "${SDCARD}" /bin/bash -c "systemctl --no-reload mask ondemand.service >/dev/null 2>&1" - ;; - esac -+ -+ # use list modules INITRAMFS -+ if [ -f "${SRC}"/config/modules/"${MODULES_INITRD}" ]; then -+ display_alert "Use file list modules INITRAMFS" "${MODULES_INITRD}" -+ sed -i "s/^MODULES=.*/MODULES=list/" "${SDCARD}"/etc/initramfs-tools/initramfs.conf -+ cat "${SRC}"/config/modules/"${MODULES_INITRD}" >> "${SDCARD}"/etc/initramfs-tools/modules -+ fi - } - - # create_sources_list - -From b2849431e1736e9bae4eeddd3ef363a058352465 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 30 Jan 2022 22:21:50 +0100 -Subject: [PATCH] armbian-next: manual merge (6) of all lib/*.sh changes - between revisions c7f3c239fe93f8fcfdd1b1edf6f11e143802e379 and - d885bfc97d908b09dddac06393c2987995704d0a - ---- - lib/functions/compilation/extra-drivers.sh | 4 ++-- - lib/functions/compilation/patching.sh | 12 ++++++------ - lib/functions/configuration/main-config.sh | 2 +- - lib/functions/general/git.sh | 8 ++------ - lib/functions/rootfs/create-cache.sh | 3 ++- - 5 files changed, 13 insertions(+), 16 deletions(-) - -diff --git a/lib/functions/compilation/extra-drivers.sh b/lib/functions/compilation/extra-drivers.sh -index d45913f32..7fb60c37c 100644 ---- a/lib/functions/compilation/extra-drivers.sh -+++ b/lib/functions/compilation/extra-drivers.sh -@@ -551,8 +551,8 @@ prepare_extra_kernel_drivers() { - fi - - # Bluetooth support for Realtek 8822CS (hci_ver 0x8) chipsets -- -- if linux-version compare "${version}" ge 5.11 && [ "$EXTRAWIFI" == yes ]; then -+ # For sunxi, these two patches are applied in a series. -+ if linux-version compare "${version}" ge 5.11 && [[ "$LINUXFAMILY" != sunxi* ]] && [[ "$EXTRAWIFI" == yes ]]; then - display_alert "Adding" "Bluetooth support for Realtek 8822CS (hci_ver 0x8) chipsets" "info" - - process_patch_file "${SRC}/patch/misc/bluetooth-rtl8822cs-hci_ver-0x8.patch" "applying" -diff --git a/lib/functions/compilation/patching.sh b/lib/functions/compilation/patching.sh -index 861054de2..0d32729ab 100644 ---- a/lib/functions/compilation/patching.sh -+++ b/lib/functions/compilation/patching.sh -@@ -106,8 +106,8 @@ apply_patch_series() { - local flag - local err_pt=$(mktemp /tmp/apply_patch_series_XXXXX) # @OTODO: rpardini: hmm, why is this different from all others? - -- list=$(gawk '$0 !~ /^#.*|^-.*|^$/' "${series}") -- skiplist=$(gawk '$0 ~ /^-.*/' "${series}") -+ list=$(awk '$0 !~ /^#.*|^-.*|^$/' "${series}") -+ skiplist=$(awk '$0 ~ /^-.*/{print $NF}' "${series}") - - display_alert "apply a series of " "[$(echo $list | wc -w)] patches" - display_alert "skip [$(echo $skiplist | wc -w)] patches" -@@ -125,16 +125,16 @@ apply_patch_series() { - - case $flag in - 0) -- printf "%-72s [\033[32m done \033[0m]\n" "${p#*/}" -- printf "%-72s [ done ]\n" "${p#*/}" >> "${DEST}"/debug/patching.log -+ printf "%-77s [\033[32m done \033[0m]\n" "${p}" -+ printf "%-77s [ done ]\n" "${p}" >> "${DEST}"/debug/patching.log - ;; - 1) -- printf "%-72s [\033[33m FAILED \033[0m]\n" "${p#*/}" -+ printf "%-77s [\033[33m FAILED \033[0m]\n" "${p}" - echo -e "For ${p} \t\tprocess exit [ $flag ]" >> "${DEST}"/debug/patching.log - cat $err_pt >> "${DEST}"/debug/patching.log - ;; - 2) -- printf "%-72s [\033[31m Patch wrong \033[0m]\n" "${p#*/}" -+ printf "%-77s [\033[31m Patch wrong \033[0m]\n" "${p}" - echo -e "Patch wrong ${p}\t\tprocess exit [ $flag ]" >> "${DEST}"/debug/patching.log - cat $err_pt >> "${DEST}"/debug/patching.log - ;; -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 0acb3b671..5f6a21b1a 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -42,7 +42,7 @@ function do_main_configuration() { - [[ -z $EXIT_PATCHING_ERROR ]] && EXIT_PATCHING_ERROR="" # exit patching if failed - [[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board - cd "${SRC}" || exit -- [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=12 -+ [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=13 - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 - BUILD_REPOSITORY_URL=$(improved_git remote get-url $(improved_git remote 2> /dev/null | grep origin) 2> /dev/null) - BUILD_REPOSITORY_COMMIT=$(improved_git describe --match=d_e_a_d_b_e_e_f --always --dirty 2> /dev/null) -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index e4a03f278..6d0bda152 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -91,12 +91,8 @@ waiter_local_repo() { - - # Handle an exception if the initial tag is the top of the branch - # As v5.16 == HEAD -- if $( -- git ls-remote -t $url ${start_tag}\* | -- awk -F'/' '$NF !~ /v[4-5][.][1-9]{1,2}[.][1]$/ { -- exit 1 -- }' -- ); then -+ if [ "${start_tag}.1" == "$(git ls-remote -t $url ${start_tag}.1 | -+ awk -F'/' '{ print $NF }')" ]; then - git fetch --shallow-exclude=$start_tag $name - else - git fetch --depth 1 $name -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index 13e2565fd..c83cdaf99 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -231,6 +231,7 @@ function create_new_rootfs_cache() { - } - - # stage: remove downloaded packages -+ chroot_sdcard_apt_get autoremove - chroot_sdcard_apt_get clean - - # DEBUG: print free space -@@ -260,7 +261,7 @@ function create_new_rootfs_cache() { - umount_chroot "$SDCARD" - - tar cp --xattrs --directory=$SDCARD/ --exclude='./dev/*' --exclude='./proc/*' --exclude='./run/*' --exclude='./tmp/*' \ -- --exclude='./sys/*' . | pv -p -b -r -s "$(du -sb $SDCARD/ | cut -f1)" -N "$(logging_echo_prefix_for_pv "store_rootfs") $display_name" | lz4 -5 -c > "$cache_fname" -+ --exclude='./sys/*' --exclude='./home/*' --exclude='./root/*' . | pv -p -b -r -s "$(du -sb $SDCARD/ | cut -f1)" -N "$(logging_echo_prefix_for_pv "store_rootfs") $display_name" | lz4 -5 -c > "$cache_fname" - - # sign rootfs cache archive that it can be used for web cache once. Internal purposes - if [[ -n "${GPG_PASS}" && "${SUDO_USER}" ]]; then - -From 4fcb0204e5df9bc6c540806096def9ce8e3126e1 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 24 Jan 2022 00:16:42 +0100 -Subject: [PATCH] armbian-next: avoid writing to disk during configuration; - `ANSI_COLOR=none` logging; make CONFIG_DEFS_ONLY=yes runnable without sudo - -- when `CONFIG_DEFS_ONLY=yes`, avoid writing the config summary output.log file. - - refactor that into a function as to be easy to if-out-of - - don't write to disk during aggregate_content() if `CONFIG_DEFS_ONLY=yes` - - don't write to disk during show_checklist_variables() if `CONFIG_DEFS_ONLY=yes` - - don't write to disk during write_deboostrap_list_debug_log() if `CONFIG_DEFS_ONLY=yes` - - don't compress and rotate logs if `CONFIG_DEFS_ONLY=yes` -- don't pretend to be handling errors we can't handle during var capture -- I foresee a world we can build all .debs without sudo -- and a some kind of split of codebase entrypoint due to that future feature -- some python info.py enhancements, not ready yet ---- - lib/extensions.sh | 13 ++-- - lib/functions/cli/cli-entrypoint.sh | 7 ++- - lib/functions/configuration/aggregation.sh | 2 + - lib/functions/configuration/main-config.sh | 39 +++++++----- - lib/functions/logging/capture.sh | 11 ++-- - lib/functions/logging/logging.sh | 6 ++ - lib/functions/main/config-prepare.sh | 32 +++++----- - lib/tools/info.py | 95 ++++++++++++++++++++++++------ - 8 files changed, 142 insertions(+), 63 deletions(-) - -diff --git a/lib/extensions.sh b/lib/extensions.sh -index 5398de20f..516700bbb 100644 ---- a/lib/extensions.sh -+++ b/lib/extensions.sh -@@ -61,13 +61,13 @@ initialize_extension_manager() { - # This marks the manager as initialized, no more extensions are allowed to load after this. - export initialize_extension_manager_counter=$((initialize_extension_manager_counter + 1)) - -- # Extensions has its own work/tmp directory, defined by do_main_configuration, with build UUID. We just create it here. -- display_alert "EXTENSION_MANAGER_TMP_DIR" "${EXTENSION_MANAGER_TMP_DIR}" "debug" -+ # Extensions has its own work/tmp directory, defined by do_main_configuration, with build UUID. We just create it here, unless told not to. -+ display_alert "Initializing EXTENSION_MANAGER_TMP_DIR" "${EXTENSION_MANAGER_TMP_DIR}" "debug" - mkdir -p "${EXTENSION_MANAGER_TMP_DIR}" - - # Log destination. - export EXTENSION_MANAGER_LOG_FILE="${EXTENSION_MANAGER_TMP_DIR}/extensions.log" -- echo -n "" > "${EXTENSION_MANAGER_TMP_DIR}/hook_point_calls.txt" -+ [[ "${WRITE_EXTENSIONS_METADATA:-yes}" == "no" ]] && echo -n "" > "${EXTENSION_MANAGER_TMP_DIR}/hook_point_calls.txt" - - # globally initialize the extensions log. - echo "-- lib/extensions.sh included. logs will be below, followed by the debug generated by the initialize_extension_manager() function." > "${EXTENSION_MANAGER_LOG_FILE}" -@@ -87,7 +87,7 @@ initialize_extension_manager() { - declare -i hook_points_counter=0 hook_functions_counter=0 hook_point_functions_counter=0 - - # initialize the cleanups file. -- fragment_manager_cleanup_file="${SRC}"/.tmp/extension_function_cleanup.sh -+ fragment_manager_cleanup_file="${EXTENSION_MANAGER_TMP_DIR}/extension_function_cleanup.sh" - echo "# cleanups: " > "${fragment_manager_cleanup_file}" - - local FUNCTION_SORT_OPTIONS="--general-numeric-sort --ignore-case" # --random-sort could be used to introduce chaos -@@ -255,7 +255,7 @@ cleanup_extension_manager() { - # this will unset all the functions. - # shellcheck disable=SC1090 # dynamic source, thanks, shellcheck - source "${fragment_manager_cleanup_file}" -- rm "${fragment_manager_cleanup_file}" # remove the cleanup file -+ # file is removed together with EXTENSION_MANAGER_TMP_DIR below. - fi - # cleanup our tmpdir. - if [[ -d "${EXTENSION_MANAGER_TMP_DIR}" ]]; then -@@ -298,6 +298,9 @@ EXTENSION_METADATA_READY - - # This is called by call_extension_method(). To say the truth, this should be in an extension. But then it gets too meta for anyone's head. - write_hook_point_metadata() { -+ # Dont do anything if told not to. -+ [[ "${WRITE_EXTENSIONS_METADATA:-yes}" == "no" ]] && return 0 -+ - local main_hook_point_name="$1" - - [[ ! -d "${EXTENSION_MANAGER_TMP_DIR}" ]] && mkdir -p "${EXTENSION_MANAGER_TMP_DIR}" -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index b16ea387d..587348b01 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -15,8 +15,8 @@ function cli_entrypoint() { - : - elif [[ "${1}" == docker || "${1}" == dockerpurge || "${1}" == docker-shell ]] && grep -q "$(whoami)" <(getent group docker); then - : -- elif [[ "${CONFIG_DEFS_ONLY}" == "yes" ]]; then # not really building in this case, just gathering meta-data. -- : -+ elif [[ "${CONFIG_DEFS_ONLY}" == "yes" ]]; then # this var is set in the ENVIRONMENT, not as parameter. -+ display_alert "No sudo for" "env CONFIG_DEFS_ONLY=yes" "debug" # not really building in this case, just gathering meta-data. - else - display_alert "This script requires root privileges, trying to use sudo" "" "wrn" - sudo "${SRC}/compile.sh" "$@" -@@ -115,7 +115,8 @@ function cli_entrypoint() { - do_capturing_defs prepare_and_config_main_build_single # this sets CAPTURED_VARS - - if [[ "${CONFIG_DEFS_ONLY}" == "yes" ]]; then -- echo "${CAPTURED_VARS}" # to stdout! -+ echo "${CAPTURED_VARS}" # to stdout! -+ cleanup_extension_manager # manually cleanup extension manager before exiting - return 0 - else - unset CAPTURED_VARS -diff --git a/lib/functions/configuration/aggregation.sh b/lib/functions/configuration/aggregation.sh -index c57529ca7..e89275995 100644 ---- a/lib/functions/configuration/aggregation.sh -+++ b/lib/functions/configuration/aggregation.sh -@@ -5,6 +5,7 @@ - # Write to variables : - # - aggregated_content - aggregate_content() { -+ [[ "${CONFIG_DEFS_ONLY}" == "yes" ]] && return 0 # Don't write to disk in this case. - LOG_OUTPUT_FILE="$SRC/output/${LOG_SUBPATH}/potential-paths.log" - echo -e "Potential paths :" >> "${LOG_OUTPUT_FILE}" - show_checklist_variables potential_paths -@@ -117,6 +118,7 @@ cleanup_list() { - # before calling the `show_checklist_variables` function and unset after. - # - show_checklist_variables() { -+ [[ "${CONFIG_DEFS_ONLY}" == "yes" ]] && return 0 # Don't write to disk in this case. - local checklist=$* - local var pval - local log_file=${LOG_OUTPUT_FILE:-"${SRC}"/output/${LOG_SUBPATH}/trash.log} -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 4cc607176..0acb3b671 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -491,33 +491,42 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - PACKAGE_MAIN_LIST="$(echo ${PACKAGE_MAIN_LIST})" - fi - -- LOG_OUTPUT_FILE="$SRC/output/${LOG_SUBPATH}/debootstrap-list.log" -- echo -e "\nVariables after manual configuration" >> $LOG_OUTPUT_FILE -- show_checklist_variables "DEBOOTSTRAP_COMPONENTS DEBOOTSTRAP_LIST PACKAGE_LIST PACKAGE_MAIN_LIST" -- unset LOG_OUTPUT_FILE -+ [[ "${CONFIG_DEFS_ONLY}" == "yes" ]] || write_deboostrap_list_debug_log - - # Give the option to configure DNS server used in the chroot during the build process - [[ -z $NAMESERVER ]] && NAMESERVER="1.0.0.1" # default is cloudflare alternate - -- call_extension_method "post_aggregate_packages" "user_config_post_aggregate_packages" << 'POST_AGGREGATE_PACKAGES' --*For final user override, using a function, after all aggregations are done* --Called after aggregating all package lists, before the end of `compilation.sh`. --Packages will still be installed after this is called, so it is the last chance --to confirm or change any packages. --POST_AGGREGATE_PACKAGES -+ call_extension_method "post_aggregate_packages" "user_config_post_aggregate_packages" <<- 'POST_AGGREGATE_PACKAGES' -+ *For final user override, using a function, after all aggregations are done* -+ Called after aggregating all package lists, before the end of `compilation.sh`. -+ Packages will still be installed after this is called, so it is the last chance -+ to confirm or change any packages. -+ POST_AGGREGATE_PACKAGES - -- local build_script_env_file="${DEST}/${LOG_SUBPATH}/output.log" -- display_alert "Writing build config summary to" "${build_script_env_file}" "debug" -+ # If not only capturing defs, write the output file. This an early write to disk, and @TODO: should be moved later into the configuration phase -+ [[ "${CONFIG_DEFS_ONLY}" == "yes" ]] || write_config_summary_output_file - -- # debug -+ display_alert "Done with main-config.sh" "do_main_configuration" "debug" -+} -+ -+function write_deboostrap_list_debug_log() { -+ LOG_OUTPUT_FILE="$SRC/output/${LOG_SUBPATH}/debootstrap-list.log" -+ echo -e "\nVariables after manual configuration" >> $LOG_OUTPUT_FILE -+ show_checklist_variables "DEBOOTSTRAP_COMPONENTS DEBOOTSTRAP_LIST PACKAGE_LIST PACKAGE_MAIN_LIST" -+ unset LOG_OUTPUT_FILE -+} -+ -+function write_config_summary_output_file() { -+ local build_script_env_file="${DEST}/${LOG_SUBPATH}/output.log" - local debug_dpkg_arch debug_uname debug_virt debug_src_mount debug_src_perms debug_src_temp_perms - debug_dpkg_arch="$(dpkg --print-architecture)" - debug_uname="$(uname -a)" -- debug_virt="$(systemd-detect-virt)" -+ debug_virt="$(systemd-detect-virt || true)" - debug_src_mount="$(findmnt -o TARGET,SOURCE,FSTYPE,AVAIL -T "${SRC}")" - debug_src_perms="$(getfacl -p "${SRC}")" - debug_src_temp_perms="$(getfacl -p "${SRC}"/.tmp 2> /dev/null)" - -+ display_alert "Writing build config summary to" "${build_script_env_file}" "debug" - cat <<- EOF >> "${build_script_env_file}" - ## BUILD SCRIPT ENVIRONMENT - -@@ -565,6 +574,4 @@ POST_AGGREGATE_PACKAGES - - CPU configuration: $CPUMIN - $CPUMAX with $GOVERNOR - EOF -- -- display_alert "Done with main-config.sh" "do_main_configuration" "debug" - } -diff --git a/lib/functions/logging/capture.sh b/lib/functions/logging/capture.sh -index 660068c89..775923419 100644 ---- a/lib/functions/logging/capture.sh -+++ b/lib/functions/logging/capture.sh -@@ -1,10 +1,11 @@ - function do_capturing_defs() { - # make sure to local with a value, otherwise they will appear in the list... -- local pre_exec_vars="" exit_code=0 post_exec_vars="" new_vars_list="" onevar="" all_vars_array=() -+ local pre_exec_vars="" post_exec_vars="" new_vars_list="" onevar="" all_vars_array=() - pre_exec_vars="$(compgen -A variable | grep -E '[[:upper:]]+' | grep -v -e "^BASH_" | sort)" - -- # run parameters passed -- "$@" || exit_code=$? -+ # run parameters passed. if this fails, so will we, immediately, and not capture anything correctly. -+ # if you ever find stacks referring here, please look at the caller and $1 -+ "$@" - - post_exec_vars="$(compgen -A variable | grep -E '[[:upper:]]+' | grep -v -e "^BASH_" | sort)" - new_vars_list="$(comm -13 <(echo "$pre_exec_vars") <(echo "${post_exec_vars}"))" -@@ -14,9 +15,9 @@ function do_capturing_defs() { - all_vars_array+=("$(declare -p "${onevar}")") - done - #IFS=$'\n' -- CAPTURED_VARS="${all_vars_array[*]}" -+ export CAPTURED_VARS="${all_vars_array[*]}" - #display_alert "Vars defined during ${*@Q}:" "${CAPTURED_VARS}" "debug" - unset all_vars_array post_exec_vars new_vars_list pre_exec_vars onevar join_by - -- return ${exit_code} -+ return 0 # return success explicitly , preemptively preventing short-circuit problems. - } -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 66aeb9d40..90a376608 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -103,6 +103,12 @@ display_alert() { - echo "--> A: [" "$@" "]" >> "${CURRENT_LOGFILE}" - fi - -+ # If asked, avoid any fancy ANSI escapes completely. -+ if [[ "${ANSI_COLOR}" == "none" ]]; then -+ echo "${@}" >&2 -+ return 0 -+ fi -+ - local message="$1" level="$3" # params - local level_indicator="" inline_logs_color="" extra="" ci_log="" # this log - case "${level}" in -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index cad494207..b416b1302 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -17,23 +17,25 @@ function prepare_and_config_main_build_single() { - [[ -z $LANGUAGE ]] && export LANGUAGE="en_US:en" # set to english if not set - [[ -z $CONSOLE_CHAR ]] && export CONSOLE_CHAR="UTF-8" # set console to UTF-8 if not set - -- # set log path -- LOG_SUBPATH=${LOG_SUBPATH:=debug} -- mkdir -p "${DEST}/${LOG_SUBPATH}" # This creates the logging output. -- -- # compress and remove old logs, if they exist. -- if [[ -f "${DEST}/${LOG_SUBPATH}/timestamp" ]]; then -- if ls "${DEST}/${LOG_SUBPATH}/"*.log &> /dev/null; then -- display_alert "Archiving previous build logs..." "${DEST}/${LOG_SUBPATH}" "info" -- (cd "${DEST}/${LOG_SUBPATH}" && tar -czf logs-"$(< timestamp)".tgz ./*.log) # > /dev/null 2>&1 -- rm -f "${DEST}/${LOG_SUBPATH}"/*.log -+ if [[ "${CONFIG_DEFS_ONLY}" != "yes" ]]; then -+ # set log path -+ LOG_SUBPATH=${LOG_SUBPATH:=debug} -+ mkdir -p "${DEST}/${LOG_SUBPATH}" # This creates the logging output. -+ -+ # compress and remove old logs, if they exist. -+ if [[ -f "${DEST}/${LOG_SUBPATH}/timestamp" ]]; then -+ if ls "${DEST}/${LOG_SUBPATH}/"*.log &> /dev/null; then -+ display_alert "Archiving previous build logs..." "${DEST}/${LOG_SUBPATH}" "info" -+ (cd "${DEST}/${LOG_SUBPATH}" && tar -czf logs-"$(< timestamp)".tgz ./*.log) # > /dev/null 2>&1 -+ rm -f "${DEST}/${LOG_SUBPATH}"/*.log -+ fi -+ # delete compressed logs older than 7 days -+ find "${DEST}"/${LOG_SUBPATH} -name '*.tgz' -mtime +7 -delete - fi -- # delete compressed logs older than 7 days -- find "${DEST}"/${LOG_SUBPATH} -name '*.tgz' -mtime +7 -delete -- fi - -- # Mark a timestamp, for next build. -- date +"%d_%m_%Y-%H_%M_%S" > "${DEST}"/${LOG_SUBPATH}/timestamp -+ # Mark a timestamp, for next build. -+ date +"%d_%m_%Y-%H_%M_%S" > "${DEST}"/${LOG_SUBPATH}/timestamp -+ fi - - # PROGRESS_LOG_TO_FILE is either yes, or unset. (@TODO: this is still used in buildpkg) - if [[ $PROGRESS_LOG_TO_FILE != yes ]]; then unset PROGRESS_LOG_TO_FILE; fi -diff --git a/lib/tools/info.py b/lib/tools/info.py -index 308d482e7..af932eefa 100755 ---- a/lib/tools/info.py -+++ b/lib/tools/info.py -@@ -1,4 +1,4 @@ --#!/bin/env python3 -+#!/usr/bin/env python3 - import concurrent.futures - import glob - import json -@@ -18,11 +18,12 @@ def armbian_value_parse_list(item_value): - - - def get_all_boards_list_from_armbian(src_path): -- ret = [] -+ ret = {} - for file in glob.glob(src_path + "/config/boards/*.*"): - stem = Path(file).stem - if stem != "README": -- ret.append(stem) -+ ret[stem] = file -+ # return ret - return ret - - -@@ -42,10 +43,26 @@ def map_to_armbian_params(map_params): - - - def run_armbian_compile_and_parse(path_to_compile_sh, compile_params): -- result = subprocess.run( -- [path_to_compile_sh] + map_to_armbian_params(compile_params), -- stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True, universal_newlines=True -- ) -+ exec_cmd = ([path_to_compile_sh] + map_to_armbian_params(compile_params)) -+ # print(exec_cmd) -+ try: -+ result = subprocess.run( -+ exec_cmd, -+ stdout=subprocess.PIPE, check=True, universal_newlines=True, -+ env={ -+ "CONFIG_DEFS_ONLY": "yes", # Dont do anything. Just output vars. -+ "ANSI_COLOR": "none", # Do not use ANSI colors in logging output -+ "WRITE_EXTENSIONS_METADATA": "no" # Not interested in ext meta here -+ }, -+ stderr=subprocess.PIPE -+ ) -+ except subprocess.CalledProcessError as e: -+ eprint( -+ "Error calling Armbian: params: {}, return code: {}, stderr: {}".format( -+ compile_params, e.returncode, e.stderr -+ ) -+ ) -+ raise e - - # Now parse it with regex-power! - # regex = r"^declare (..) (.*?)=\"(.*?)\"$" # old multiline version -@@ -66,7 +83,11 @@ def run_armbian_compile_and_parse(path_to_compile_sh, compile_params): - - all_keys[key] = value - -- return {"in": compile_params, "out": all_keys, "logs": result.stderr.split("\n")} -+ logs = ["Not available"] -+ if result.stderr: -+ logs = result.stderr.split("\n") -+ -+ return {"in": compile_params, "out": all_keys, "logs": logs} - - - # Find the location of compile.sh, relative to this Python script. -@@ -90,25 +111,53 @@ common_compile_params = { - "CLOUD_IMAGE": "yes", - "CLEAN_LEVEL": "debs", - "SHOW_LOG": "yes", -+ "SKIP_EXTERNAL_TOOLCHAINS": "yes", - "CONFIG_DEFS_ONLY": "yes", - "KERNEL_CONFIGURE": "no", - "EXPERT": "yes" - } - - board_compile_params = { -- "BOARD": "uefi-x86", -- "BRANCH": "current", - "RELEASE": "impish", - "BUILD_DESKTOP": "no" - } - - --def get_info_for_one_board(board_name, common_params): -- eprint("Getting info for board '{}'".format(board_name)) -+# I've to read the first line from the board file, that's the hardware description in a pound comment. -+# Also, 'KERNEL_TARGET="legacy,current,edge"' which we need to parse. -+def parse_board_file_for_static_info(board_file, board_id): -+ file_handle = open(board_file, 'r') -+ file_lines = file_handle.readlines() -+ file_handle.close() -+ -+ file_lines.reverse() -+ hw_desc_line = file_lines.pop() -+ hw_desc_clean = hw_desc_line.strip("# ").strip("\n") -+ -+ # Parse KERNEL_TARGET line. -+ kernel_target_matches = re.findall(r"^KERNEL_TARGET=\"(.*)\"", "\n".join(file_lines), re.MULTILINE) -+ kernel_targets = kernel_target_matches[0].split(",") -+ eprint("Possible kernel branches for board: ", board_id, " : ", kernel_targets) -+ -+ return { -+ "BOARD_FILE_HARDWARE_DESC": hw_desc_clean, -+ "BOARD_POSSIBLE_BRANCHES": kernel_targets, -+ "BOARD_DESC_ID": board_id -+ } -+ -+ -+def get_info_for_one_board(board_file, board_name, common_params, board_info): -+ eprint( -+ "Getting info for board '{}' branch '{}' in file '{}'".format( -+ board_name, common_params["BRANCH"], board_file -+ ) -+ ) -+ -+ # eprint("Running Armbian bash for board '{}'".format(board_name)) - try: - parsed = run_armbian_compile_and_parse(compile_sh_full_path, common_params | {"BOARD": board_name}) - # print(json.dumps(parsed, indent=4, sort_keys=True)) -- return parsed -+ return parsed | board_info - except: - eprint("Failed get info for board '{}'".format(board_name)) - return None -@@ -116,16 +165,24 @@ def get_info_for_one_board(board_name, common_params): - - if True: - all_boards = get_all_boards_list_from_armbian(armbian_src_path) -- # print(json.dumps(all_boards, indent=4, sort_keys=True)) -+ # eprint(json.dumps(all_boards, indent=4, sort_keys=True)) - - every_info = [] - with concurrent.futures.ProcessPoolExecutor(max_workers=32) as executor: - every_future = [] -- for board in all_boards: -- all_params = common_compile_params | board_compile_params -- eprint("Submitting future for board {}".format(board)) -- future = executor.submit(get_info_for_one_board, board, all_params) -- every_future.append(future) -+ for board in all_boards.keys(): -+ try: -+ board_info = parse_board_file_for_static_info(all_boards[board], board) -+ except: -+ eprint("** Failed to parse board file {} static.".format(board)) -+ continue -+ -+ for possible_branch in board_info["BOARD_POSSIBLE_BRANCHES"]: -+ all_params = common_compile_params | board_compile_params | {"BRANCH": possible_branch} -+ eprint("Submitting future for board {} with BRANCH={}".format(board, possible_branch)) -+ future = executor.submit(get_info_for_one_board, all_boards[board], board, all_params, -+ board_info) -+ every_future.append(future) - - eprint("Waiting for all futures...") - executor.shutdown(wait=True) - -From c7785c788f81bce938f2af6b3d576ba9834433b7 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 23 Jan 2022 23:00:17 +0100 -Subject: [PATCH] armbian-next: shellfmt and regen library (after rebase from - master n.5) - ---- - lib/functions/compilation/atf.sh | 2 +- - lib/functions/logging/logging.sh | 4 +- - lib/functions/rootfs/create-cache.sh | 2 +- - lib/library-functions.sh | 365 +++++++++++++++++------------------ - 4 files changed, 186 insertions(+), 187 deletions(-) - -diff --git a/lib/functions/compilation/atf.sh b/lib/functions/compilation/atf.sh -index d2a30d09f..91ca8aaf1 100644 ---- a/lib/functions/compilation/atf.sh -+++ b/lib/functions/compilation/atf.sh -@@ -57,7 +57,7 @@ compile_atf() { - - [[ $(type -t atf_custom_postprocess) == function ]] && atf_custom_postprocess 2>&1 - -- atftempdir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. -+ atftempdir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. - chmod 700 ${atftempdir} - - # copy files to temp directory -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 5981d9547..66aeb9d40 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -4,7 +4,7 @@ function logging_init() { - # globals - export padding="" left_marker="[" right_marker="]" - export normal_color="\x1B[0m" gray_color="\e[1;30m" # "bright black", which is grey -- declare -i logging_section_counter=0 # -i: integer -+ declare -i logging_section_counter=0 # -i: integer - export logging_section_counter - } - -@@ -45,7 +45,7 @@ function do_with_logging() { - export CURRENT_LOGGING_COUNTER - CURRENT_LOGGING_COUNTER="$(printf "%03d" "$logging_section_counter")" - export CURRENT_LOGGING_SECTION=${LOG_SECTION:-build} # default to "build" -- export CURRENT_LOGGING_DIR="${DEST}/${LOG_SUBPATH}" # origin: build-all-ng - @TODO: rpardini: lets revisit this later -+ export CURRENT_LOGGING_DIR="${DEST}/${LOG_SUBPATH}" # origin: build-all-ng - @TODO: rpardini: lets revisit this later - export CURRENT_LOGFILE="${CURRENT_LOGGING_DIR}/${CURRENT_LOGGING_COUNTER}.${CURRENT_LOGGING_SECTION}.log" - mkdir -p "${CURRENT_LOGGING_DIR}" - -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index f969159cf..13e2565fd 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -279,7 +279,7 @@ get_package_list_hash() { - local list_content - read -ra package_arr <<< "${DEBOOTSTRAP_LIST} ${PACKAGE_LIST}" - read -ra exclude_arr <<< "${PACKAGE_LIST_EXCLUDE}" -- ( -+ ( - ( - printf "%s\n" "${package_arr[@]}" - printf -- "-%s\n" "${exclude_arr[@]}" -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 09139086b..f7a679dcc 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -1,97 +1,97 @@ - #!/usr/bin/env bash - # This file is/was autogenerated by lib/tools/gen-library.sh; don't modify manually - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/general/repo.sh --# shellcheck source=lib/functions/general/repo.sh --source "${SRC}"/lib/functions/general/repo.sh -+### lib/functions/bsp/bsp-cli.sh -+# shellcheck source=lib/functions/bsp/bsp-cli.sh -+source "${SRC}"/lib/functions/bsp/bsp-cli.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/general/host.sh --# shellcheck source=lib/functions/general/host.sh --source "${SRC}"/lib/functions/general/host.sh -+### lib/functions/bsp/bsp-desktop.sh -+# shellcheck source=lib/functions/bsp/bsp-desktop.sh -+source "${SRC}"/lib/functions/bsp/bsp-desktop.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/general/git.sh --# shellcheck source=lib/functions/general/git.sh --source "${SRC}"/lib/functions/general/git.sh -+### lib/functions/bsp/utils-bsp.sh -+# shellcheck source=lib/functions/bsp/utils-bsp.sh -+source "${SRC}"/lib/functions/bsp/utils-bsp.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/general/downloads.sh --# shellcheck source=lib/functions/general/downloads.sh --source "${SRC}"/lib/functions/general/downloads.sh -+### lib/functions/cli/cli-entrypoint.sh -+# shellcheck source=lib/functions/cli/cli-entrypoint.sh -+source "${SRC}"/lib/functions/cli/cli-entrypoint.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/general/cleaning.sh --# shellcheck source=lib/functions/general/cleaning.sh --source "${SRC}"/lib/functions/general/cleaning.sh -+### lib/functions/cli/utils-cli.sh -+# shellcheck source=lib/functions/cli/utils-cli.sh -+source "${SRC}"/lib/functions/cli/utils-cli.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/general/chroot-helpers.sh --# shellcheck source=lib/functions/general/chroot-helpers.sh --source "${SRC}"/lib/functions/general/chroot-helpers.sh -+### lib/functions/compilation/atf.sh -+# shellcheck source=lib/functions/compilation/atf.sh -+source "${SRC}"/lib/functions/compilation/atf.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/extras/buildpkg.sh --# shellcheck source=lib/functions/extras/buildpkg.sh --source "${SRC}"/lib/functions/extras/buildpkg.sh -+### lib/functions/compilation/debs.sh -+# shellcheck source=lib/functions/compilation/debs.sh -+source "${SRC}"/lib/functions/compilation/debs.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/extras/fel.sh --# shellcheck source=lib/functions/extras/fel.sh --source "${SRC}"/lib/functions/extras/fel.sh -+### lib/functions/compilation/extra-drivers.sh -+# shellcheck source=lib/functions/compilation/extra-drivers.sh -+source "${SRC}"/lib/functions/compilation/extra-drivers.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/compilation/debs.sh --# shellcheck source=lib/functions/compilation/debs.sh --source "${SRC}"/lib/functions/compilation/debs.sh -+### lib/functions/compilation/kernel.sh -+# shellcheck source=lib/functions/compilation/kernel.sh -+source "${SRC}"/lib/functions/compilation/kernel.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/compilation/uboot.sh --# shellcheck source=lib/functions/compilation/uboot.sh --source "${SRC}"/lib/functions/compilation/uboot.sh -+### lib/functions/compilation/patching.sh -+# shellcheck source=lib/functions/compilation/patching.sh -+source "${SRC}"/lib/functions/compilation/patching.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled -@@ -100,16 +100,16 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/compilation/sources.sh - source "${SRC}"/lib/functions/compilation/sources.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/compilation/extra-drivers.sh --# shellcheck source=lib/functions/compilation/extra-drivers.sh --source "${SRC}"/lib/functions/compilation/extra-drivers.sh -+### lib/functions/compilation/uboot.sh -+# shellcheck source=lib/functions/compilation/uboot.sh -+source "${SRC}"/lib/functions/compilation/uboot.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled -@@ -118,268 +118,250 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/compilation/utils-compilation.sh - source "${SRC}"/lib/functions/compilation/utils-compilation.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. --#set -o pipefail # trace ERR through pipes - will be enabled "soon" --#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled --set -o errtrace # trace ERR through - enabled --set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/compilation/patching.sh --# shellcheck source=lib/functions/compilation/patching.sh --source "${SRC}"/lib/functions/compilation/patching.sh -- --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/compilation/kernel.sh --# shellcheck source=lib/functions/compilation/kernel.sh --source "${SRC}"/lib/functions/compilation/kernel.sh -- --# no errors tolerated. set -e is invoked before each sourced file to make sure. --#set -o pipefail # trace ERR through pipes - will be enabled "soon" --#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled --set -o errtrace # trace ERR through - enabled --set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/compilation/atf.sh --# shellcheck source=lib/functions/compilation/atf.sh --source "${SRC}"/lib/functions/compilation/atf.sh -+### lib/functions/configuration/aggregation.sh -+# shellcheck source=lib/functions/configuration/aggregation.sh -+source "${SRC}"/lib/functions/configuration/aggregation.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/cli/cli-entrypoint.sh --# shellcheck source=lib/functions/cli/cli-entrypoint.sh --source "${SRC}"/lib/functions/cli/cli-entrypoint.sh -+### lib/functions/configuration/config-desktop.sh -+# shellcheck source=lib/functions/configuration/config-desktop.sh -+source "${SRC}"/lib/functions/configuration/config-desktop.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/cli/utils-cli.sh --# shellcheck source=lib/functions/cli/utils-cli.sh --source "${SRC}"/lib/functions/cli/utils-cli.sh -+### lib/functions/configuration/interactive.sh -+# shellcheck source=lib/functions/configuration/interactive.sh -+source "${SRC}"/lib/functions/configuration/interactive.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/logging/errors.sh --# shellcheck source=lib/functions/logging/errors.sh --source "${SRC}"/lib/functions/logging/errors.sh -+### lib/functions/configuration/main-config.sh -+# shellcheck source=lib/functions/configuration/main-config.sh -+source "${SRC}"/lib/functions/configuration/main-config.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/logging/runners.sh --# shellcheck source=lib/functions/logging/runners.sh --source "${SRC}"/lib/functions/logging/runners.sh -+### lib/functions/configuration/menu.sh -+# shellcheck source=lib/functions/configuration/menu.sh -+source "${SRC}"/lib/functions/configuration/menu.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/logging/capture.sh --# shellcheck source=lib/functions/logging/capture.sh --source "${SRC}"/lib/functions/logging/capture.sh -+### lib/functions/extras/buildpkg.sh -+# shellcheck source=lib/functions/extras/buildpkg.sh -+source "${SRC}"/lib/functions/extras/buildpkg.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/logging/traps.sh --# shellcheck source=lib/functions/logging/traps.sh --source "${SRC}"/lib/functions/logging/traps.sh -+### lib/functions/extras/fel.sh -+# shellcheck source=lib/functions/extras/fel.sh -+source "${SRC}"/lib/functions/extras/fel.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/logging/logging.sh --# shellcheck source=lib/functions/logging/logging.sh --source "${SRC}"/lib/functions/logging/logging.sh -+### lib/functions/general/chroot-helpers.sh -+# shellcheck source=lib/functions/general/chroot-helpers.sh -+source "${SRC}"/lib/functions/general/chroot-helpers.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/bsp/utils-bsp.sh --# shellcheck source=lib/functions/bsp/utils-bsp.sh --source "${SRC}"/lib/functions/bsp/utils-bsp.sh -+### lib/functions/general/cleaning.sh -+# shellcheck source=lib/functions/general/cleaning.sh -+source "${SRC}"/lib/functions/general/cleaning.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/bsp/bsp-desktop.sh --# shellcheck source=lib/functions/bsp/bsp-desktop.sh --source "${SRC}"/lib/functions/bsp/bsp-desktop.sh -+### lib/functions/general/downloads.sh -+# shellcheck source=lib/functions/general/downloads.sh -+source "${SRC}"/lib/functions/general/downloads.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/bsp/bsp-cli.sh --# shellcheck source=lib/functions/bsp/bsp-cli.sh --source "${SRC}"/lib/functions/bsp/bsp-cli.sh -+### lib/functions/general/git.sh -+# shellcheck source=lib/functions/general/git.sh -+source "${SRC}"/lib/functions/general/git.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/main/default-build.sh --# shellcheck source=lib/functions/main/default-build.sh --source "${SRC}"/lib/functions/main/default-build.sh -+### lib/functions/general/host.sh -+# shellcheck source=lib/functions/general/host.sh -+source "${SRC}"/lib/functions/general/host.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/main/config-prepare.sh --# shellcheck source=lib/functions/main/config-prepare.sh --source "${SRC}"/lib/functions/main/config-prepare.sh -+### lib/functions/general/repo.sh -+# shellcheck source=lib/functions/general/repo.sh -+source "${SRC}"/lib/functions/general/repo.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/main/rootfs-image.sh --# shellcheck source=lib/functions/main/rootfs-image.sh --source "${SRC}"/lib/functions/main/rootfs-image.sh -+### lib/functions/image/initrd.sh -+# shellcheck source=lib/functions/image/initrd.sh -+source "${SRC}"/lib/functions/image/initrd.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/configuration/aggregation.sh --# shellcheck source=lib/functions/configuration/aggregation.sh --source "${SRC}"/lib/functions/configuration/aggregation.sh -+### lib/functions/image/loop.sh -+# shellcheck source=lib/functions/image/loop.sh -+source "${SRC}"/lib/functions/image/loop.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/configuration/main-config.sh --# shellcheck source=lib/functions/configuration/main-config.sh --source "${SRC}"/lib/functions/configuration/main-config.sh -+### lib/functions/image/partitioning.sh -+# shellcheck source=lib/functions/image/partitioning.sh -+source "${SRC}"/lib/functions/image/partitioning.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/configuration/interactive.sh --# shellcheck source=lib/functions/configuration/interactive.sh --source "${SRC}"/lib/functions/configuration/interactive.sh -+### lib/functions/image/rootfs-to-image.sh -+# shellcheck source=lib/functions/image/rootfs-to-image.sh -+source "${SRC}"/lib/functions/image/rootfs-to-image.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/configuration/menu.sh --# shellcheck source=lib/functions/configuration/menu.sh --source "${SRC}"/lib/functions/configuration/menu.sh -+### lib/functions/logging/capture.sh -+# shellcheck source=lib/functions/logging/capture.sh -+source "${SRC}"/lib/functions/logging/capture.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/configuration/config-desktop.sh --# shellcheck source=lib/functions/configuration/config-desktop.sh --source "${SRC}"/lib/functions/configuration/config-desktop.sh -+### lib/functions/logging/errors.sh -+# shellcheck source=lib/functions/logging/errors.sh -+source "${SRC}"/lib/functions/logging/errors.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/multi/build-all.sh --# shellcheck source=lib/functions/multi/build-all.sh --source "${SRC}"/lib/functions/multi/build-all.sh -+### lib/functions/logging/logging.sh -+# shellcheck source=lib/functions/logging/logging.sh -+source "${SRC}"/lib/functions/logging/logging.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/image/initrd.sh --# shellcheck source=lib/functions/image/initrd.sh --source "${SRC}"/lib/functions/image/initrd.sh -+### lib/functions/logging/runners.sh -+# shellcheck source=lib/functions/logging/runners.sh -+source "${SRC}"/lib/functions/logging/runners.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/image/rootfs-to-image.sh --# shellcheck source=lib/functions/image/rootfs-to-image.sh --source "${SRC}"/lib/functions/image/rootfs-to-image.sh -+### lib/functions/logging/traps.sh -+# shellcheck source=lib/functions/logging/traps.sh -+source "${SRC}"/lib/functions/logging/traps.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/image/loop.sh --# shellcheck source=lib/functions/image/loop.sh --source "${SRC}"/lib/functions/image/loop.sh -+### lib/functions/main/config-prepare.sh -+# shellcheck source=lib/functions/main/config-prepare.sh -+source "${SRC}"/lib/functions/main/config-prepare.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/image/partitioning.sh --# shellcheck source=lib/functions/image/partitioning.sh --source "${SRC}"/lib/functions/image/partitioning.sh -+### lib/functions/main/default-build.sh -+# shellcheck source=lib/functions/main/default-build.sh -+source "${SRC}"/lib/functions/main/default-build.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/rootfs/post-tweaks.sh --# shellcheck source=lib/functions/rootfs/post-tweaks.sh --source "${SRC}"/lib/functions/rootfs/post-tweaks.sh -+### lib/functions/main/rootfs-image.sh -+# shellcheck source=lib/functions/main/rootfs-image.sh -+source "${SRC}"/lib/functions/main/rootfs-image.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/rootfs/rootfs-desktop.sh --# shellcheck source=lib/functions/rootfs/rootfs-desktop.sh --source "${SRC}"/lib/functions/rootfs/rootfs-desktop.sh -+### lib/functions/multi/build-all.sh -+# shellcheck source=lib/functions/multi/build-all.sh -+source "${SRC}"/lib/functions/multi/build-all.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/rootfs/distro-agnostic.sh --# shellcheck source=lib/functions/rootfs/distro-agnostic.sh --source "${SRC}"/lib/functions/rootfs/distro-agnostic.sh -+### lib/functions/rootfs/apt.sh -+# shellcheck source=lib/functions/rootfs/apt.sh -+source "${SRC}"/lib/functions/rootfs/apt.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled -@@ -388,16 +370,16 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/rootfs/boot_logo.sh - source "${SRC}"/lib/functions/rootfs/boot_logo.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/rootfs/apt.sh --# shellcheck source=lib/functions/rootfs/apt.sh --source "${SRC}"/lib/functions/rootfs/apt.sh -+### lib/functions/rootfs/create-cache.sh -+# shellcheck source=lib/functions/rootfs/create-cache.sh -+source "${SRC}"/lib/functions/rootfs/create-cache.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled -@@ -406,16 +388,16 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/rootfs/customize.sh - source "${SRC}"/lib/functions/rootfs/customize.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled - set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled --### lib/functions/rootfs/create-cache.sh --# shellcheck source=lib/functions/rootfs/create-cache.sh --source "${SRC}"/lib/functions/rootfs/create-cache.sh -+### lib/functions/rootfs/distro-agnostic.sh -+# shellcheck source=lib/functions/rootfs/distro-agnostic.sh -+source "${SRC}"/lib/functions/rootfs/distro-agnostic.sh - --# no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. invoked before each sourced file to make sure. - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled - set -o errtrace # trace ERR through - enabled -@@ -424,6 +406,23 @@ set -o errexit ## set -e : exit the script if any statement returns a non-true - # shellcheck source=lib/functions/rootfs/distro-specific.sh - source "${SRC}"/lib/functions/rootfs/distro-specific.sh - -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/rootfs/post-tweaks.sh -+# shellcheck source=lib/functions/rootfs/post-tweaks.sh -+source "${SRC}"/lib/functions/rootfs/post-tweaks.sh -+ -+# no errors tolerated. invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/rootfs/rootfs-desktop.sh -+# shellcheck source=lib/functions/rootfs/rootfs-desktop.sh -+source "${SRC}"/lib/functions/rootfs/rootfs-desktop.sh - - # no errors tolerated. one last time for the win! - #set -o pipefail # trace ERR through pipes - will be enabled "soon" - -From ac99b0432bdbb7d2ee589a5f41a72e17dcbfecee Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 23 Jan 2022 22:59:25 +0100 -Subject: [PATCH] tools/shellfmt.sh: exclude "cache" and ".tmp" from - formatting, for obvious reasons - ---- - lib/tools/shellfmt.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/tools/shellfmt.sh b/lib/tools/shellfmt.sh -index 9e84606c0..69d2bbb05 100755 ---- a/lib/tools/shellfmt.sh -+++ b/lib/tools/shellfmt.sh -@@ -54,7 +54,7 @@ cd "${SRC}" - - # Should match the .editorconfig [*.{sh,inc,conf,eos,wip,tvb,csc}] - --declare -a ALL_BASH_FILES=($(find . -type f -name '*.sh') $(find ./config -type f -name '*.inc' -o -name '*.conf' -o -name '*.eos' -o -name '*.wip' -o -name '*.tvb' -o -name '*.csc' | grep -v -e "\/config\/aptly" -e "\/config\/targets")) -+declare -a ALL_BASH_FILES=($(find . -type f -name '*.sh' | grep -v -e "^./cache/" -e "^./.tmp/") $(find ./config -type f -name '*.inc' -o -name '*.conf' -o -name '*.eos' -o -name '*.wip' -o -name '*.tvb' -o -name '*.csc' | grep -v -e "\/config\/aptly" -e "\/config\/targets")) - - echo "All files:" "${ALL_BASH_FILES[@]}" - - -From b17bb64ddc739b7084b98d070848aade693f3794 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 23 Jan 2022 22:58:36 +0100 -Subject: [PATCH] tools/gen-library.sh: sort function files, so it does not - keep changing between runs on different machines. - -- order should not be important, since files only contain functions, but avoid git churn ---- - lib/tools/gen-library.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/tools/gen-library.sh b/lib/tools/gen-library.sh -index 8abfad05e..3b851fe67 100755 ---- a/lib/tools/gen-library.sh -+++ b/lib/tools/gen-library.sh -@@ -17,7 +17,7 @@ cat <<- AUTOGEN_INCLUDES_HEADER > "${TARGET_SH}" - - AUTOGEN_INCLUDES_HEADER - --find lib/functions -type f -name \*.sh | while read -r path; do -+find lib/functions -type f -name \*.sh | sort -h | while read -r path; do - ref="$(echo -n "${path}")" - cat <<- AUTOGEN_INCLUDES_EACH >> "${TARGET_SH}" - # no errors tolerated. invoked before each sourced file to make sure. - -From d84cbf9f3a367ab068bd619619daa58c56e7c96f Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 23 Jan 2022 22:42:25 +0100 -Subject: [PATCH] armbian-next: manual merge (5) of all lib/*.sh changes - between revisions 1b18df3c834c5c4166e99f731d53ec88d14caf7d and - e7962bb2b555d3afdca0ff168982cc45235ca0a8 - -- most PKG_PREFIX work was already done ---- - config/sources/families/jetson-nano.conf | 50 +++++++++++++++----------------- - lib/functions/general/host.sh | 2 +- - lib/functions/rootfs/distro-agnostic.sh | 3 ++ - 3 files changed, 27 insertions(+), 28 deletions(-) - -diff --git a/config/sources/families/jetson-nano.conf b/config/sources/families/jetson-nano.conf -index f4710d751..03717a673 100644 ---- a/config/sources/families/jetson-nano.conf -+++ b/config/sources/families/jetson-nano.conf -@@ -22,13 +22,18 @@ case $BRANCH in - ;; - - current) -- KERNELBRANCH="branch:linux-5.10.y" -- KERNELPATCHDIR='rockchip64-'$BRANCH -+ KERNELBRANCH="branch:linux-5.15.y" -+ KERNELPATCHDIR='media-'$BRANCH -+ LINUXFAMILY=media -+ LINUXCONFIG='linux-media-'$BRANCH - ;; - - edge) -- KERNELBRANCH="branch:linux-5.15.y" -- KERNELPATCHDIR='rockchip64-'$BRANCH -+ SKIP_BOOTSPLASH="yes" -+ KERNELBRANCH="branch:linux-5.16.y" -+ KERNELPATCHDIR='media-'$BRANCH -+ LINUXFAMILY=media -+ LINUXCONFIG='linux-media-'$BRANCH - ;; - - esac -@@ -39,28 +44,19 @@ write_uboot_platform() { - - family_tweaks() { - -- case $BRANCH in -- -- legacy) -- -- install -m 755 $SRC/packages/blobs/jetson/tegra21x_xusb_firmware $SDCARD/lib/firmware/tegra21x_xusb_firmware -- install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrahda $SDCARD/etc/asound.conf.tegrahda -- install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrahda $SDCARD/etc/asound.conf -- install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrasndt210ref $SDCARD/etc/asound.conf.tegrasndt210ref -- install -m 755 $SRC/packages/blobs/jetson/tegra-hda.conf $SDCARD/usr/share/alsa/cards/tegra-hda.conf -- install -m 755 $SRC/packages/blobs/jetson/tegra-snd-t210r.conf $SDCARD/usr/share/alsa/cards/tegra-snd-t210r.conf -- -- sed -e 's/exit 0//g' -i $SDCARD/etc/rc.local -- echo "su -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'" >> $SDCARD/etc/rc.local -- echo "exit 0" >> $SDCARD/etc/rc.local -- -- ;; -- -- edge) -- -- cp -R $SRC/packages/blobs/jetson/firmware/* $SDCARD/lib/firmware/ -- -- ;; -- esac -+ if [[ $BRANCH == legacy ]]; then -+ install -m 755 $SRC/packages/blobs/jetson/tegra21x_xusb_firmware $SDCARD/lib/firmware/tegra21x_xusb_firmware -+ install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrahda $SDCARD/etc/asound.conf.tegrahda -+ install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrahda $SDCARD/etc/asound.conf -+ install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrasndt210ref $SDCARD/etc/asound.conf.tegrasndt210ref -+ install -m 755 $SRC/packages/blobs/jetson/tegra-hda.conf $SDCARD/usr/share/alsa/cards/tegra-hda.conf -+ install -m 755 $SRC/packages/blobs/jetson/tegra-snd-t210r.conf $SDCARD/usr/share/alsa/cards/tegra-snd-t210r.conf -+ -+ sed -e 's/exit 0//g' -i $SDCARD/etc/rc.local -+ echo "su -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'" >> $SDCARD/etc/rc.local -+ echo "exit 0" >> $SDCARD/etc/rc.local -+ else -+ cp -R $SRC/packages/blobs/jetson/firmware/* $SDCARD/lib/firmware/ -+ fi - - } -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index fa1fcbc52..94409fafd 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -73,7 +73,7 @@ prepare_host() { - - if [[ $(dpkg --print-architecture) == amd64 ]]; then - -- hostdeps+=" distcc lib32ncurses-dev lib32stdc++6 libc6-i386 zlib1g:i386" -+ hostdeps+=" distcc lib32ncurses-dev lib32stdc++6 libc6-i386" - grep -q i386 <(dpkg --print-foreign-architectures) || dpkg --add-architecture i386 - - elif [[ $(dpkg --print-architecture) == arm64 ]]; then -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index d348e4d39..d48879929 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -229,6 +229,9 @@ install_distribution_agnostic() { - display_alert "Temporarily disabling" "initramfs-tools hook for kernel" - chroot_sdcard chmod -v -x /etc/kernel/postinst.d/initramfs-tools - -+ display_alert "Cleaning" "package lists" -+ APT_OPTS="y" chroot_sdcard_apt_get clean -+ - display_alert "Updating" "apt package lists" - APT_OPTS="y" chroot_sdcard_apt_get update - - -From b18f3c81a1613e4b1550674a471f309a59526167 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 23 Jan 2022 22:08:16 +0100 -Subject: [PATCH] armbian-next: `TMPDIR` for all, many logging fixes, error - handling: leave-no-garbage-behind without needing traps. - -- set `MOUNT_UUID` and `WORKDIR`/`MOUNT`/`SDCARD`/`EXTENSION_MANAGER_TMP_DIR`/`DESTIMG` early in do_main_configuration() - - but, they're just _set_ there, dirs are not created early, but on demand later - - still @TODO: actually clean those during error trap. (unhappy path leaves garbage still) - - but does not leave garbage behind during "successful" runs at least (happy path works) -- actually export `TMPDIR` (== `WORKDIR`) during start of build (not config!), so all `mktemp` are subject to it - - `runners.sh` has helpers to avoid passing `TMPDIR` to chroot. Use the helpers! don't call `chroot` directly. - - don't trap/cleanup individual `mktemp` temp dirs during .deb packaging's, all is handled at once now. - - kernel packaging, for example, automatically picks up `TMPDIR` too. So now hosts `/tmp` is mostly left alone. -- fix some "infodumps" that are done into `.log` files directly. -- don't use sudo if `CONFIG_DEFS_ONLY=yes`; we'll only be collecting info, not doing anything. -- simpler logging for `rsync` operations (just dump to stdout, logging will handle it!) -- use padded counter for section logfiles, so we know which order things ran. exported as `CURRENT_LOGGING_COUNTER` -- no reason to use `apt-get` with `-yqq` anymore, since all logging is handled, so now `-y` by default -- desktop: using runners helpers for rootfs-desktop.sh, which should help a lot with acng caching and finding of problems -- extensions: correctly cleanup temp stuff, extensions has its own tmp/workdir now, and is always cleaned up at end of build. ---- - lib/extensions.sh | 14 +++++++++----- - lib/functions/bsp/bsp-cli.sh | 7 +------ - lib/functions/bsp/bsp-desktop.sh | 12 +++--------- - lib/functions/cli/cli-entrypoint.sh | 10 +++++++--- - lib/functions/compilation/atf.sh | 5 +---- - lib/functions/compilation/debs.sh | 16 +++------------- - lib/functions/compilation/kernel.sh | 7 ++----- - lib/functions/compilation/patching.sh | 2 +- - lib/functions/compilation/uboot.sh | 3 +-- - lib/functions/configuration/main-config.sh | 21 +++++++++++---------- - lib/functions/configuration/menu.sh | 2 +- - lib/functions/general/host.sh | 2 +- - lib/functions/image/rootfs-to-image.sh | 16 ++++++---------- - lib/functions/logging/logging.sh | 11 ++++++++--- - lib/functions/logging/runners.sh | 2 +- - lib/functions/main/config-prepare.sh | 2 +- - lib/functions/main/default-build.sh | 19 +++++++++++++++++++ - lib/functions/rootfs/rootfs-desktop.sh | 22 +++++++++++----------- - 18 files changed, 87 insertions(+), 86 deletions(-) - -diff --git a/lib/extensions.sh b/lib/extensions.sh -index 1f7cd2db8..5398de20f 100644 ---- a/lib/extensions.sh -+++ b/lib/extensions.sh -@@ -61,8 +61,8 @@ initialize_extension_manager() { - # This marks the manager as initialized, no more extensions are allowed to load after this. - export initialize_extension_manager_counter=$((initialize_extension_manager_counter + 1)) - -- # Have a unique temporary dir, even if being built concurrently by build_all_ng. -- export EXTENSION_MANAGER_TMP_DIR="${SRC}/.tmp/.extensions/${LOG_SUBPATH}" -+ # Extensions has its own work/tmp directory, defined by do_main_configuration, with build UUID. We just create it here. -+ display_alert "EXTENSION_MANAGER_TMP_DIR" "${EXTENSION_MANAGER_TMP_DIR}" "debug" - mkdir -p "${EXTENSION_MANAGER_TMP_DIR}" - - # Log destination. -@@ -245,6 +245,8 @@ initialize_extension_manager() { - # Dont show any output until we have more than 1 hook function (we implement one already, below) - [[ ${hook_functions_counter} -gt 0 ]] && - display_alert "Extension manager" "processed ${hook_points_counter} Extension Methods calls and ${hook_functions_counter} Extension Method implementations" "info" | tee -a "${EXTENSION_MANAGER_LOG_FILE}" -+ -+ return 0 # exit with success, short-circuit above. - } - - cleanup_extension_manager() { -@@ -253,6 +255,11 @@ cleanup_extension_manager() { - # this will unset all the functions. - # shellcheck disable=SC1090 # dynamic source, thanks, shellcheck - source "${fragment_manager_cleanup_file}" -+ rm "${fragment_manager_cleanup_file}" # remove the cleanup file -+ fi -+ # cleanup our tmpdir. -+ if [[ -d "${EXTENSION_MANAGER_TMP_DIR}" ]]; then -+ rm -rf "${EXTENSION_MANAGER_TMP_DIR}" - fi - # reset/unset the variables used - initialize_extension_manager_counter=0 -@@ -287,9 +294,6 @@ EXTENSION_METADATA_READY - # Move temporary log file over to final destination, and start writing to it instead (although 999 is pretty late in the game) - mv "${EXTENSION_MANAGER_LOG_FILE}" "${DEST}/${LOG_SUBPATH:-debug}/extensions.log" - export EXTENSION_MANAGER_LOG_FILE="${DEST}/${LOG_SUBPATH:-debug}/extensions.log" -- -- # Cleanup. Leave no trace... -- [[ -d "${EXTENSION_MANAGER_TMP_DIR}" ]] && rm -rf "${EXTENSION_MANAGER_TMP_DIR}" - } - - # This is called by call_extension_method(). To say the truth, this should be in an extension. But then it gets too meta for anyone's head. -diff --git a/lib/functions/bsp/bsp-cli.sh b/lib/functions/bsp/bsp-cli.sh -index 71f0ea765..a2c0adc58 100644 ---- a/lib/functions/bsp/bsp-cli.sh -+++ b/lib/functions/bsp/bsp-cli.sh -@@ -1,10 +1,8 @@ - create_board_package() { - display_alert "Creating board support package for CLI" "$CHOSEN_ROOTFS" "info" - -- bsptempdir=$(mktemp -d) -+ bsptempdir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. - chmod 700 ${bsptempdir} -- # @TODO: these traps are a real trap. -- #trap "rm -rf \"${bsptempdir}\" ; exit 0" 0 1 2 3 15 - - local destination=${bsptempdir}/${BSP_CLI_PACKAGE_FULLNAME} - mkdir -p "${destination}"/DEBIAN -@@ -309,7 +307,4 @@ POST_FAMILY_TWEAKS_BSP - rsync --remove-source-files -rq "${destination}.deb" "${DEB_STORAGE}/" 2>&1 - - display_alert "Done building BSP CLI package" "${destination}" "debug" -- -- # cleanup -- rm -rf ${bsptempdir} - } -diff --git a/lib/functions/bsp/bsp-desktop.sh b/lib/functions/bsp/bsp-desktop.sh -index baa585d7f..7ccba50c2 100644 ---- a/lib/functions/bsp/bsp-desktop.sh -+++ b/lib/functions/bsp/bsp-desktop.sh -@@ -32,7 +32,7 @@ create_desktop_package() { - PACKAGE_LIST_PREDEPENDS=${PACKAGE_LIST_PREDEPENDS//[[:space:]]/} - - local destination tmp_dir -- tmp_dir=$(mktemp -d) -+ tmp_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. - destination=${tmp_dir}/${BOARD}/${CHOSEN_DESKTOP}_${REVISION}_all - rm -rf "${destination}" - mkdir -p "${destination}"/DEBIAN -@@ -66,7 +66,7 @@ create_desktop_package() { - chmod 755 "${destination}"/DEBIAN/postinst - - #display_alert "Showing ${destination}/DEBIAN/postinst" -- cat "${destination}/DEBIAN/postinst" >> "${DEST}"/${LOG_SUBPATH}/install.log -+ cat "${destination}/DEBIAN/postinst" >> "${DEST}/${LOG_SUBPATH}/bsp_postinst.log" - - # Armbian create_desktop_package scripts - -@@ -86,9 +86,6 @@ create_desktop_package() { - cd .. - fakeroot_dpkg_deb_build "${destination}" "${DEB_STORAGE}/${RELEASE}/${CHOSEN_DESKTOP}_${REVISION}_all.deb" - -- # cleanup -- rm -rf "${tmp_dir}" -- - unset aggregated_content - - } -@@ -100,7 +97,7 @@ create_bsp_desktop_package() { - local package_name="${BSP_DESKTOP_PACKAGE_FULLNAME}" - - local destination tmp_dir -- tmp_dir=$(mktemp -d) -+ tmp_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. - destination=${tmp_dir}/${BOARD}/${BSP_DESKTOP_PACKAGE_FULLNAME} - rm -rf "${destination}" - mkdir -p "${destination}"/DEBIAN -@@ -148,9 +145,6 @@ create_bsp_desktop_package() { - cd .. - fakeroot_dpkg_deb_build "${destination}" "${DEB_STORAGE}/${RELEASE}/${package_name}.deb" - -- # cleanup -- rm -rf "${tmp_dir}" -- - unset aggregated_content - - } -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index 4590d7e37..b16ea387d 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -15,6 +15,8 @@ function cli_entrypoint() { - : - elif [[ "${1}" == docker || "${1}" == dockerpurge || "${1}" == docker-shell ]] && grep -q "$(whoami)" <(getent group docker); then - : -+ elif [[ "${CONFIG_DEFS_ONLY}" == "yes" ]]; then # not really building in this case, just gathering meta-data. -+ : - else - display_alert "This script requires root privileges, trying to use sudo" "" "wrn" - sudo "${SRC}/compile.sh" "$@" -@@ -109,7 +111,7 @@ function cli_entrypoint() { - if [[ "${BUILD_ALL}" == "yes" || "${BUILD_ALL}" == "demo" ]]; then - do_main_build_all_ng - else -- # configuration etc -+ # configuration etc - it initializes the extension manager. - do_capturing_defs prepare_and_config_main_build_single # this sets CAPTURED_VARS - - if [[ "${CONFIG_DEFS_ONLY}" == "yes" ]]; then -@@ -119,11 +121,13 @@ function cli_entrypoint() { - unset CAPTURED_VARS - fi - -- # Allow for custom user-invoked functions. @TODO: check this with extensions usage? -+ # Allow for custom user-invoked functions, or do the default build. - if [[ -z $1 ]]; then -- main_default_build_single -+ main_default_build_single # this cleans up the extension manager - else -+ # @TODO: check this with extensions usage? - eval "$@" - fi -+ - fi - } -diff --git a/lib/functions/compilation/atf.sh b/lib/functions/compilation/atf.sh -index 10d9bdec3..d2a30d09f 100644 ---- a/lib/functions/compilation/atf.sh -+++ b/lib/functions/compilation/atf.sh -@@ -57,12 +57,9 @@ compile_atf() { - - [[ $(type -t atf_custom_postprocess) == function ]] && atf_custom_postprocess 2>&1 - -- atftempdir=$(mktemp -d) -+ atftempdir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. - chmod 700 ${atftempdir} - -- # @TODO: these traps are a real trap. -- #trap "rm -rf \"${atftempdir}\" ; exit 0" 0 1 2 3 15 -- - # copy files to temp directory - for f in $target_files; do - local f_src -diff --git a/lib/functions/compilation/debs.sh b/lib/functions/compilation/debs.sh -index 2932264c0..f491715a3 100644 ---- a/lib/functions/compilation/debs.sh -+++ b/lib/functions/compilation/debs.sh -@@ -3,11 +3,9 @@ compile_firmware() { - - local firmwaretempdir plugin_dir - -- firmwaretempdir=$(mktemp -d) -+ firmwaretempdir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. - chmod 700 ${firmwaretempdir} - -- # @TODO: these traps are a real trap. -- #trap "rm -rf \"${firmwaretempdir}\" ; exit 0" 0 1 2 3 15 - plugin_dir="armbian-firmware${FULL}" - mkdir -p "${firmwaretempdir}/${plugin_dir}/lib/firmware" - -@@ -47,18 +45,14 @@ compile_firmware() { - mv "armbian-firmware${FULL}_${REVISION}_all" "armbian-firmware${FULL}" - rsync -rq "armbian-firmware${FULL}_${REVISION}_all.deb" "${DEB_STORAGE}/" - -- # remove temp directory - @TODO: maybe not, just leave thrash behind. -- rm -rf "${firmwaretempdir}" - } - - compile_armbian-zsh() { - - local tmp_dir armbian_zsh_dir -- tmp_dir=$(mktemp -d) -+ tmp_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. - chmod 700 ${tmp_dir} - -- # @TODO: these traps are a real trap. -- #trap "rm -rf \"${tmp_dir}\" ; exit 0" 0 1 2 3 15 - armbian_zsh_dir=armbian-zsh_${REVISION}_all - display_alert "Building deb" "armbian-zsh" "info" - -@@ -124,18 +118,15 @@ compile_armbian-zsh() { - - fakeroot_dpkg_deb_build "${tmp_dir}/${armbian_zsh_dir}" - rsync --remove-source-files -rq "${tmp_dir}/${armbian_zsh_dir}.deb" "${DEB_STORAGE}/" -- rm -rf "${tmp_dir}" - - } - - compile_armbian-config() { - - local tmp_dir armbian_config_dir -- tmp_dir=$(mktemp -d) -+ tmp_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. - chmod 700 ${tmp_dir} - -- # @TODO: these traps are a real trap. -- #trap "rm -rf \"${tmp_dir}\" ; exit 0" 0 1 2 3 15 - armbian_config_dir=armbian-config_${REVISION}_all - display_alert "Building deb" "armbian-config" "info" - -@@ -179,7 +170,6 @@ compile_armbian-config() { - - fakeroot_dpkg_deb_build "${tmp_dir}/${armbian_config_dir}" - rsync --remove-source-files -rq "${tmp_dir}/${armbian_config_dir}.deb" "${DEB_STORAGE}/" -- rm -rf "${tmp_dir}" - } - - compile_xilinx_bootgen() { -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index e0bce0699..dc357ee93 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -249,10 +249,8 @@ compile_kernel() { - create_linux-source_package() { - ts=$(date +%s) - local sources_pkg_dir tmp_src_dir -- tmp_src_dir=$(mktemp -d) -+ tmp_src_dir=$(mktemp -d) # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. - -- # @TODO: these traps are a real trap. -- #trap "rm -rf \"${tmp_src_dir}\" ; exit 0" 0 1 2 3 15 - sources_pkg_dir=${tmp_src_dir}/${CHOSEN_KSRC}_${REVISION}_all - mkdir -p "${sources_pkg_dir}"/usr/src/ \ - "${sources_pkg_dir}"/usr/share/doc/linux-source-${version}-${LINUXFAMILY} \ -@@ -264,7 +262,7 @@ create_linux-source_package() { - display_alert "Compressing sources for the linux-source package" - tar cp --directory="$kerneldir" --exclude='.git' --owner=root . | - pv -N "$(logging_echo_prefix_for_pv "compress_kernel_sources") $display_name" -p -b -r -s "$(du -sb "$kerneldir" --exclude=='.git' | cut -f1)" | -- pixz -4 > "${sources_pkg_dir}/usr/src/linux-source-${version}-${LINUXFAMILY}.tar.xz" -+ pixz -0 > "${sources_pkg_dir}/usr/src/linux-source-${version}-${LINUXFAMILY}.tar.xz" # @TODO: .deb will compress this later. -0 for now, but should be a plain tar - cp COPYING "${sources_pkg_dir}/usr/share/doc/linux-source-${version}-${LINUXFAMILY}/LICENSE" - - cat <<- EOF > "${sources_pkg_dir}"/DEBIAN/control -@@ -285,5 +283,4 @@ create_linux-source_package() { - - te=$(date +%s) - display_alert "Make the linux-source package" "$(($te - $ts)) sec." "info" -- rm -rf "${tmp_src_dir}" - } -diff --git a/lib/functions/compilation/patching.sh b/lib/functions/compilation/patching.sh -index 52d00010f..861054de2 100644 ---- a/lib/functions/compilation/patching.sh -+++ b/lib/functions/compilation/patching.sh -@@ -104,7 +104,7 @@ apply_patch_series() { - local series="${2}" - local bzdir="$(dirname $series)" - local flag -- local err_pt=$(mktemp /tmp/apply_patch_series_XXXXX) -+ local err_pt=$(mktemp /tmp/apply_patch_series_XXXXX) # @OTODO: rpardini: hmm, why is this different from all others? - - list=$(gawk '$0 !~ /^#.*|^-.*|^$/' "${series}") - skiplist=$(gawk '$0 ~ /^-.*/' "${series}") -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index fba1d185b..188c062d6 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -144,7 +144,7 @@ compile_uboot() { - local uboot_name="${CHOSEN_UBOOT}_${REVISION}_${ARCH}" - - # create directory structure for the .deb package -- uboottempdir="$(mktemp -d)" -+ uboottempdir="$(mktemp -d)" # subject to TMPDIR/WORKDIR, so is protected by single/common error trap to clean-up. - chmod 700 "${uboottempdir}" - mkdir -p "$uboottempdir/$uboot_name/usr/lib/u-boot" "$uboottempdir/$uboot_name/usr/lib/$uboot_name" "$uboottempdir/$uboot_name/DEBIAN" - -@@ -227,7 +227,6 @@ compile_uboot() { - [[ ! -f $uboottempdir/${uboot_name}.deb ]] && exit_with_error "Building u-boot package failed" - - rsync --remove-source-files -rq "$uboottempdir/${uboot_name}.deb" "${DEB_STORAGE}/" 2>&1 -- rm -rf "$uboottempdir" - - display_alert "Built u-boot deb OK" "${uboot_name}.deb" "info" - return 0 # success -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index d4995a6b7..4cc607176 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -10,7 +10,17 @@ - # https://github.com/armbian/build/ - - function do_main_configuration() { -- display_alert "Starting main configuration" "" "info" -+ # set unique mounting directory for this build. -+ MOUNT_UUID=$(uuidgen) -+ -+ # Super-global variables, used everywhere. The directories are NOT _created_ here, since this is config stage, not build. -+ export WORKDIR="${SRC}/.tmp/work-${MOUNT_UUID}" # WORKDIR at this stage. It will become TMPDIR later. It has special significance to `mktemp` and others! -+ export SDCARD="${SRC}/.tmp/rootfs-${MOUNT_UUID}" # SDCARD (which is NOT an sdcard, but will be, maybe, one day) is where we work the rootfs before final imaging. "rootfs" stage. -+ export MOUNT="${SRC}/.tmp/mount-${MOUNT_UUID}" # MOUNT ("mounted on the loop") is the mounted root on final image (via loop). "image" stage -+ export EXTENSION_MANAGER_TMP_DIR="${SRC}/.tmp/extensions-${MOUNT_UUID}" # EXTENSION_MANAGER_TMP_DIR used to store extension-composed functions -+ export DESTIMG="${SRC}/.tmp/image-${MOUNT_UUID}" # DESTIMG is where the backing image (raw, huge, sparse file) is kept -+ -+ display_alert "Starting main configuration" "${MOUNT_UUID}" "info" - - # common options - # daily beta build contains date in subrevision -@@ -283,15 +293,6 @@ function do_main_configuration() { - - display_alert "Done with" "desktop config stuff - END" "debug" - -- # set unique mounting directory -- MOUNT_UUID=$(uuidgen) -- -- # Super-global variables, used everywhere. They're not _created_ here, since this is config stage, not build. -- export WORKDIR="${SRC}/.tmp/work-${MOUNT_UUID}" # WORKDIR at this stage. It will become TMPDIR later. It has special significance to `mktemp` and others! -- export SDCARD="${SRC}/.tmp/rootfs-${MOUNT_UUID}" # SDCARD (which is NOT an sdcard, but will be, maybe, one day) is where we work the rootfs before final imaging. "rootfs" stage. -- export MOUNT="${SRC}/.tmp/mount-${MOUNT_UUID}" # MOUNT ("mounted on the loop") is the mounted root on final image (via loop). "image" stage -- export DESTIMG="${SRC}/.tmp/image-${MOUNT_UUID}" # DESTIMG is where the backing image (raw, huge, sparse file) is kept -- - # dropbear needs to be configured differently # @TODO: rpardini: yes, and? are you a lost leftover comment from a previous era? - [[ $CRYPTROOT_ENABLE == yes && $RELEASE == xenial ]] && exit_with_error "Encrypted rootfs is not supported in Xenial" - [[ $RELEASE == stretch && $CAN_BUILD_STRETCH != yes ]] && exit_with_error "Building Debian Stretch images with selected kernel is not supported" -diff --git a/lib/functions/configuration/menu.sh b/lib/functions/configuration/menu.sh -index 2d4ac1462..92afcc5c5 100644 ---- a/lib/functions/configuration/menu.sh -+++ b/lib/functions/configuration/menu.sh -@@ -35,7 +35,7 @@ show_select_menu() { - - show_developer_warning() { - local temp_rc -- temp_rc=$(mktemp) -+ temp_rc=$(mktemp) # @TODO: this is a _very_ early call to mktemp - no TMPDIR set yet - it needs to be cleaned-up somehow - cat <<- 'EOF' > "${temp_rc}" - screen_color = (WHITE,RED,ON) - EOF -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index e875dc340..fa1fcbc52 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -337,7 +337,7 @@ install_pkg_deb() { - local _line=${BASH_LINENO[0]} - local _function=${FUNCNAME[1]} - local _file=$(basename "${BASH_SOURCE[1]}") -- local tmp_file=$(mktemp /tmp/install_log_XXXXX) -+ local tmp_file=$(mktemp /tmp/install_log_XXXXX) # @TODO: rpardini: hmm. why? lets use TMPDIR just like everyone else. - export DEBIAN_FRONTEND=noninteractive - - list=$( -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index f1d327a84..b62ad1f5c 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -19,15 +19,15 @@ create_image_from_sdcard_rootfs() { - [[ $ROOTFS_TYPE == nfs ]] && version=${version}_nfsboot - - if [[ $ROOTFS_TYPE != nfs ]]; then -- display_alert "Copying files to" "/" -- rsync -aHWXh \ -+ display_alert "Copying files via rsync to" "/" -+ run_host_command_logged rsync -aHWXh \ - --exclude="/boot/*" \ - --exclude="/dev/*" \ - --exclude="/proc/*" \ - --exclude="/run/*" \ - --exclude="/tmp/*" \ - --exclude="/sys/*" \ -- --info=progress0,stats1 $SDCARD/ $MOUNT/ 2>&1 -+ --info=progress0,stats1 $SDCARD/ $MOUNT/ - else - display_alert "Creating rootfs archive" "rootfs.tgz" "info" - tar cp --xattrs --directory=$SDCARD/ --exclude='./boot/*' --exclude='./dev/*' --exclude='./proc/*' --exclude='./run/*' --exclude='./tmp/*' \ -@@ -41,14 +41,10 @@ create_image_from_sdcard_rootfs() { - display_alert "Copying files to" "/boot" - if [[ $(findmnt --target $MOUNT/boot -o FSTYPE -n) == vfat ]]; then - # fat32 -- rsync -rLtWh \ -- --info=progress0,stats1 \ -- --log-file="${DEST}"/${LOG_SUBPATH}/install.log $SDCARD/boot $MOUNT 2>&1 #@TODO: log to stdout, terse? -+ run_host_command_logged rsync -rLtWh --info=progress0,stats1 "$SDCARD/boot" "$MOUNT" - else - # ext4 -- rsync -aHWXh \ -- --info=progress0,stats1 \ -- --log-file="${DEST}"/${LOG_SUBPATH}/install.log $SDCARD/boot $MOUNT 2>&1 #@TODO: log to stdout, terse? -+ run_host_command_logged rsync -aHWXh --info=progress0,stats1 "$SDCARD/boot" "$MOUNT" - fi - - call_extension_method "pre_update_initramfs" "config_pre_update_initramfs" << 'PRE_UPDATE_INITRAMFS' -@@ -58,7 +54,7 @@ PRE_UPDATE_INITRAMFS - - # stage: create final initramfs - [[ -n $KERNELSOURCE ]] && { -- update_initramfs $MOUNT -+ update_initramfs "$MOUNT" - } - - # DEBUG: print free space -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index b075a76ab..5981d9547 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -4,6 +4,8 @@ function logging_init() { - # globals - export padding="" left_marker="[" right_marker="]" - export normal_color="\x1B[0m" gray_color="\e[1;30m" # "bright black", which is grey -+ declare -i logging_section_counter=0 # -i: integer -+ export logging_section_counter - } - - function logging_error_show_log() { -@@ -39,9 +41,12 @@ function do_with_logging() { - [[ -z "${DEST}" ]] && exit_with_error "DEST is not defined. Can't start logging." - - # @TODO: check we're not currently logging (eg: this has been called 2 times without exiting) -- export CURRENT_LOGGING_SECTION=${LOG_SECTION:-build} -- export CURRENT_LOGGING_DIR="${DEST}/${LOG_SUBPATH}" -- export CURRENT_LOGFILE="${CURRENT_LOGGING_DIR}/000.${CURRENT_LOGGING_SECTION}.log" -+ export logging_section_counter=$((logging_section_counter + 1)) # increment counter, used in filename -+ export CURRENT_LOGGING_COUNTER -+ CURRENT_LOGGING_COUNTER="$(printf "%03d" "$logging_section_counter")" -+ export CURRENT_LOGGING_SECTION=${LOG_SECTION:-build} # default to "build" -+ export CURRENT_LOGGING_DIR="${DEST}/${LOG_SUBPATH}" # origin: build-all-ng - @TODO: rpardini: lets revisit this later -+ export CURRENT_LOGFILE="${CURRENT_LOGGING_DIR}/${CURRENT_LOGGING_COUNTER}.${CURRENT_LOGGING_SECTION}.log" - mkdir -p "${CURRENT_LOGGING_DIR}" - - # Markers for CI (GitHub Actions); CI env var comes predefined as true there. -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 255281667..82ea46dae 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -4,7 +4,7 @@ function chroot_sdcard_apt_get_install() { - } - - function chroot_sdcard_apt_get() { -- local -a apt_params=("-${APT_OPTS:-yqq}") -+ local -a apt_params=("-${APT_OPTS:-y}") - [[ $NO_APT_CACHER != yes ]] && apt_params+=( - -o "Acquire::http::Proxy=\"http://${APT_PROXY_ADDR:-localhost:3142}\"" - -o "Acquire::http::Proxy::localhost=\"DIRECT\"" -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index 32be7355d..cad494207 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -133,7 +133,7 @@ function prepare_and_config_main_build_single() { - [[ ${KERNEL_CONFIGURE} == prebuilt ]] && [[ -z ${REPOSITORY_INSTALL} ]] && - REPOSITORY_INSTALL="u-boot,kernel,bsp,armbian-zsh,armbian-config,armbian-bsp-cli,armbian-firmware${BUILD_DESKTOP:+,armbian-desktop,armbian-bsp-desktop}" - -- do_main_configuration -+ do_main_configuration # This initializes the extension manager among a lot of other things - - # @TODO: this does not belong in configuration. it's a compilation thing. move there - # optimize build time with 100% CPU usage -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 5d868a381..34aafb1d0 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -1,6 +1,15 @@ - # This does NOT run under the logging manager. We should invoke the do_with_logging wrapper for - # strategic parts of this. Attention: rootfs does it's own logging, so just let that be. - main_default_build_single() { -+ -+ # Starting work. Export TMPDIR, which will be picked up by all `mktemp` invocations hopefully. -+ # Runner functions in logging/runners.sh will explicitly unset TMPDIR before invoking chroot. -+ # Invoking chroot directly will fail in subtle ways, so, please use the runner.sh functions. -+ display_alert "Starting single build, exporting TMPDIR" "${WORKDIR}" "debug" -+ mkdir -p "${WORKDIR}" -+ export TMPDIR="${WORKDIR}" -+ # @todo: handle this in the exit trap, don't leave garbage behind when exiting. -+ - start=$(date +%s) - # Check and install dependencies, directory structure and settings - # The OFFLINE_WORK variable inside the function -@@ -117,6 +126,16 @@ Really one of the last hooks ever called. The build has ended. Congratulations. - - *NOTE:* this will run only if there were no errors during build process. - RUN_AFTER_BUILD - -+ # Cleanup. Remove the WORKDIR, unset the TMPDIR -+ unset TMPDIR -+ if [[ -d "${WORKDIR}" ]]; then -+ display_alert "Cleaning up WORKDIR" "$(du -h -s "$WORKDIR")" "debug" -+ rm -rf "${WORKDIR}" -+ fi -+ -+ # cleanup the extension manager, that was initialized during prepare_and_config_main_build_single -+ cleanup_extension_manager -+ - end=$(date +%s) - runtime=$(((end - start) / 60)) - display_alert "Runtime" "$runtime min" "info" -diff --git a/lib/functions/rootfs/rootfs-desktop.sh b/lib/functions/rootfs/rootfs-desktop.sh -index 571571045..3564d8df2 100644 ---- a/lib/functions/rootfs/rootfs-desktop.sh -+++ b/lib/functions/rootfs/rootfs-desktop.sh -@@ -9,7 +9,7 @@ install_ppa_prerequisites() { - - # Myy : TODO Try to find a way to install this package only when - # we encounter a PPA. -- run_on_sdcard "DEBIAN_FRONTEND=noninteractive apt install -yqq software-properties-common" -+ chroot_sdcard_apt_get_install "software-properties-common" - - } - -@@ -34,7 +34,7 @@ add_apt_sources() { - display_alert "Adding APT Source ${new_apt_source}" - # -y -> Assumes yes to all queries - # -n -> Do not update package cache after adding -- run_on_sdcard "add-apt-repository -y -n \"${new_apt_source}\"" -+ chroot_sdcard "add-apt-repository -y -n \"${new_apt_source}\"" - display_alert "Return code : $?" - - # temporally exception for jammy -@@ -52,7 +52,7 @@ add_apt_sources() { - display_alert "Adding GPG Key ${apt_source_gpg_filepath}" - local apt_source_gpg_filename="$(basename ${apt_source_gpg_filepath})" - cp "${apt_source_gpg_filepath}" "${SDCARD}/tmp/${apt_source_gpg_filename}" -- run_on_sdcard "apt-key add \"/tmp/${apt_source_gpg_filename}\"" -+ chroot_sdcard "apt-key add \"/tmp/${apt_source_gpg_filename}\"" - echo "APT Key returned : $?" - fi - done -@@ -66,9 +66,9 @@ add_desktop_package_sources() { - # Myy : I see Snap and Flatpak coming up in the next releases - # so... let's prepare for that - add_apt_sources -- run_on_sdcard "apt -y -q update" -- ls -l "${SDCARD}/etc/apt/sources.list.d" >> "${DEST}"/${LOG_SUBPATH}/install.log -- cat "${SDCARD}/etc/apt/sources.list" >> "${DEST}"/${LOG_SUBPATH}/install.log -+ chroot_sdcard_apt_get "update" -+ ls -l "${SDCARD}/etc/apt/sources.list.d" >> "${DEST}/${LOG_SUBPATH}/desktop_packages_apt_sources.log" -+ cat "${SDCARD}/etc/apt/sources.list" >> "${DEST}/${LOG_SUBPATH}/desktop_packages_apt_sources.log" - - } - -@@ -76,20 +76,20 @@ add_desktop_package_sources() { - desktop_postinstall() { - - # disable display manager for the first run -- run_on_sdcard "systemctl --no-reload disable lightdm.service >/dev/null 2>&1" -- run_on_sdcard "systemctl --no-reload disable gdm3.service >/dev/null 2>&1" -+ chroot_sdcard "systemctl --no-reload disable lightdm.service" -+ chroot_sdcard "systemctl --no-reload disable gdm3.service" - - # update packages index -- run_on_sdcard "DEBIAN_FRONTEND=noninteractive apt-get update >/dev/null 2>&1" -+ chroot_sdcard_apt_get "update" - - # install per board packages - if [[ -n ${PACKAGE_LIST_DESKTOP_BOARD} ]]; then -- run_on_sdcard "DEBIAN_FRONTEND=noninteractive apt-get -yqq --no-install-recommends install $PACKAGE_LIST_DESKTOP_BOARD" -+ chroot_sdcard_apt_get_install "$PACKAGE_LIST_DESKTOP_BOARD" - fi - - # install per family packages - if [[ -n ${PACKAGE_LIST_DESKTOP_FAMILY} ]]; then -- run_on_sdcard "DEBIAN_FRONTEND=noninteractive apt-get -yqq --no-install-recommends install $PACKAGE_LIST_DESKTOP_FAMILY" -+ chroot_sdcard_apt_get_install "$PACKAGE_LIST_DESKTOP_FAMILY" - fi - - } - -From 84ad3ec52fa01eacca30bd3754853cff312dde5a Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 22 Jan 2022 10:35:06 +0000 -Subject: [PATCH] armbian-next: bye `PKG_PREFIX`, hello - `run_host_x86_binary_logged()` wrapper function; better error handling - -- we've x86-only utilities that might need to be run on non-x86 build machines -- previously duplicated logic in PKG_PREFIX variable refactored into logged function -- added centralized debug logging -- replace all PKG_PREFIX usage with the new wrapper function, which already handles logging and errors. - - mostly FIP tooling invocations - - but also the boot_logo image builder - - wrapper function delegates to common `run_host_command_logged` -- wrap other FIP invocations with `run_host_command_logged` too, for tidy logging -- avoid using conditionals when invoking functions; that completely disables error handling inside the called function -- use explicit bash opts instead of shortcuts like `set -e` -- a _lot_ of debug logging added ---- - compile.sh | 7 +- - config/sources/families/include/meson64_common.inc | 94 ++-- - .../sources/families/include/rockchip64_common.inc | 17 +- - config/sources/families/meson-gxbb.conf | 58 +-- - config/sources/families/meson-gxl.conf | 6 - - lib/functions/cli/cli-entrypoint.sh | 6 +- - lib/functions/compilation/uboot.sh | 6 +- - lib/functions/general/host.sh | 2 +- - lib/functions/logging/runners.sh | 23 + - lib/functions/rootfs/boot_logo.sh | 12 +- - lib/library-functions.sh | 558 ++++++++++++++------- - lib/tools/gen-library.sh | 12 +- - 12 files changed, 497 insertions(+), 304 deletions(-) - -diff --git a/compile.sh b/compile.sh -index 27d598bd2..5e92ddefe 100755 ---- a/compile.sh -+++ b/compile.sh -@@ -13,8 +13,11 @@ - # use configuration files like config-default.conf to set the build configuration - # check Armbian documentation https://docs.armbian.com/ for more info - --set -e # disallow errors --set -o errtrace # error trace -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+# Important, go read http://mywiki.wooledge.org/BashFAQ/105 NOW! - - SRC="$(dirname "$(realpath "${BASH_SOURCE[0]}")")" - cd "${SRC}" || exit -diff --git a/config/sources/families/include/meson64_common.inc b/config/sources/families/include/meson64_common.inc -index 4d9c9e7c9..f69669a5f 100644 ---- a/config/sources/families/include/meson64_common.inc -+++ b/config/sources/families/include/meson64_common.inc -@@ -41,48 +41,38 @@ case $BRANCH in - - esac - --if [ "$(uname -m)" = "aarch64" ]; then -- if [[ "$(lsb_release -sc)" == "bullseye" || "$(lsb_release -sc)" == "focal" || "$(lsb_release -sc)" == "hirsute" || "$(lsb_release -sc)" == "impish" || "$(lsb_release -sc)" == "jammy" ]]; then -- PKG_PREFIX="qemu-x86_64-static -L /usr/x86_64-linux-gnu " -- else -- PKG_PREFIX="qemu-x86_64 " -- fi --else -- PKG_PREFIX="" --fi -- - # this helper function includes postprocess for p212 and its variants. - # $1 PATH for uboot blob repo - # $2 dir name in uboot blob repo - uboot_gxl_postprocess() { -- mv u-boot.bin bl33.bin -+ run_host_command_logged mv -v u-boot.bin bl33.bin - -- $1/blx_fix.sh $1/$2/bl30.bin \ -+ run_host_command_logged $1/blx_fix.sh $1/$2/bl30.bin \ - $1/$2/zero_tmp \ - $1/$2/bl30_zero.bin \ - $1/$2/bl301.bin \ - $1/$2/bl301_zero.bin \ - $1/$2/bl30_new.bin bl30 - -- python $1/acs_tool.pyc $1/$2/bl2.bin \ -+ run_host_command_logged python $1/acs_tool.pyc $1/$2/bl2.bin \ - $1/$2/bl2_acs.bin \ - $1/$2/acs.bin 0 - -- $1/blx_fix.sh $1/$2/bl2_acs.bin \ -+ run_host_command_logged $1/blx_fix.sh $1/$2/bl2_acs.bin \ - $1/$2/zero_tmp \ - $1/$2/bl2_zero.bin \ - $1/$2/bl21.bin \ - $1/$2/bl21_zero.bin \ - $1/$2/bl2_new.bin bl2 - -- $PKG_PREFIX$1/$2/aml_encrypt_gxl --bl3enc --input $1/$2/bl30_new.bin -- $PKG_PREFIX$1/$2/aml_encrypt_gxl --bl3enc --input $1/$2/bl31.img -- $PKG_PREFIX$1/$2/aml_encrypt_gxl --bl3enc --input bl33.bin -+ run_host_x86_binary_logged $1/$2/aml_encrypt_gxl --bl3enc --input $1/$2/bl30_new.bin -+ run_host_x86_binary_logged $1/$2/aml_encrypt_gxl --bl3enc --input $1/$2/bl31.img -+ run_host_x86_binary_logged $1/$2/aml_encrypt_gxl --bl3enc --input bl33.bin - -- $PKG_PREFIX$1/$2/aml_encrypt_gxl --bl2sig --input $1/$2/bl2_new.bin \ -+ run_host_x86_binary_logged $1/$2/aml_encrypt_gxl --bl2sig --input $1/$2/bl2_new.bin \ - --output bl2.n.bin.sig - -- $PKG_PREFIX$1/$2/aml_encrypt_gxl --bootmk \ -+ run_host_x86_binary_logged $1/$2/aml_encrypt_gxl --bootmk \ - --output u-boot.bin \ - --bl2 bl2.n.bin.sig \ - --bl30 $1/$2/bl30_new.bin.enc \ -@@ -94,42 +84,42 @@ uboot_gxl_postprocess() { - # $1 PATH for uboot blob repo - # $2 dir name in uboot blob repo - uboot_axg_postprocess_ng() { -- mv u-boot.bin bl33.bin -+ run_host_command_logged mv -v u-boot.bin bl33.bin - -- $1/blx_fix.sh $1/$2/bl30.bin \ -+ run_host_command_logged $1/blx_fix.sh $1/$2/bl30.bin \ - $1/$2/zero_tmp \ - $1/$2/bl30_zero.bin \ - $1/$2/bl301.bin \ - $1/$2/bl301_zero.bin \ - $1/$2/bl30_new.bin bl30 - -- python3 $1/acs_tool.py $1/$2/bl2.bin \ -+ run_host_command_logged python3 $1/acs_tool.py $1/$2/bl2.bin \ - $1/$2/bl2_acs.bin \ - $1/$2/acs.bin 0 - -- $1/blx_fix.sh $1/$2/bl2_acs.bin \ -+ run_host_command_logged $1/blx_fix.sh $1/$2/bl2_acs.bin \ - $1/$2/zero_tmp \ - $1/$2/bl2_zero.bin \ - $1/$2/bl21.bin \ - $1/$2/bl21_zero.bin \ - $1/$2/bl2_new.bin bl2 - -- $PKG_PREFIX$1/$2/aml_encrypt_axg --bl3sig --input $1/$2/bl30_new.bin \ -+ run_host_x86_binary_logged $1/$2/aml_encrypt_axg --bl3sig --input $1/$2/bl30_new.bin \ - --output bl30_new.bin.enc \ - --level v3 --type bl30 - -- $PKG_PREFIX$1/$2/aml_encrypt_axg --bl3sig --input $1/$2/bl31.img \ -+ run_host_x86_binary_logged $1/$2/aml_encrypt_axg --bl3sig --input $1/$2/bl31.img \ - --output bl31.img.enc \ - --level v3 --type bl31 - -- $PKG_PREFIX$1/$2/aml_encrypt_axg --bl3sig --input bl33.bin --compress lz4 \ -+ run_host_x86_binary_logged $1/$2/aml_encrypt_axg --bl3sig --input bl33.bin --compress lz4 \ - --output bl33.bin.enc \ - --level v3 --type bl33 - -- $PKG_PREFIX$1/$2/aml_encrypt_axg --bl2sig --input $1/$2/bl2_new.bin \ -+ run_host_x86_binary_logged $1/$2/aml_encrypt_axg --bl2sig --input $1/$2/bl2_new.bin \ - --output bl2.n.bin.sig - -- $PKG_PREFIX$1/$2/aml_encrypt_axg --bootmk \ -+ run_host_x86_binary_logged $1/$2/aml_encrypt_axg --bootmk \ - --output u-boot.bin \ - --bl2 bl2.n.bin.sig \ - --bl30 bl30_new.bin.enc \ -@@ -141,44 +131,44 @@ uboot_axg_postprocess_ng() { - # $1 PATH for uboot blob repo - # $2 family g12a or g12b - uboot_g12_postprocess() { -- mv u-boot.bin bl33.bin -+ run_host_command_logged mv -v u-boot.bin bl33.bin - -- $1/blx_fix.sh $1/bl30.bin \ -+ run_host_command_logged $1/blx_fix.sh $1/bl30.bin \ - zero_tmp \ - bl30_zero.bin \ - $1/bl301.bin \ - bl301_zero.bin \ - bl30_new.bin bl30 - -- $1/blx_fix.sh $1/bl2.bin \ -+ run_host_command_logged $1/blx_fix.sh $1/bl2.bin \ - zero_tmp \ - bl2_zero.bin \ - $1/acs.bin \ - bl21_zero.bin \ - bl2_new.bin bl2 - -- $PKG_PREFIX$1/aml_encrypt_$2 --bl30sig \ -+ run_host_x86_binary_logged $1/aml_encrypt_$2 --bl30sig \ - --input bl30_new.bin \ - --output bl30_new.bin.g12.enc \ - --level v3 -- $PKG_PREFIX$1/aml_encrypt_$2 --bl3sig \ -+ run_host_x86_binary_logged $1/aml_encrypt_$2 --bl3sig \ - --input bl30_new.bin.g12.enc \ - --output bl30_new.bin.enc \ - --level v3 --type bl30 -- $PKG_PREFIX$1/aml_encrypt_$2 --bl3sig \ -+ run_host_x86_binary_logged $1/aml_encrypt_$2 --bl3sig \ - --input $1/bl31.img \ - --output bl31.img.enc \ - --level v3 --type bl31 -- $PKG_PREFIX$1/aml_encrypt_$2 --bl3sig \ -+ run_host_x86_binary_logged $1/aml_encrypt_$2 --bl3sig \ - --input bl33.bin \ - --compress lz4 \ - --output bl33.bin.enc \ - --level v3 --type bl33 -- $PKG_PREFIX$1/aml_encrypt_$2 --bl2sig \ -+ run_host_x86_binary_logged $1/aml_encrypt_$2 --bl2sig \ - --input bl2_new.bin \ - --output bl2.n.bin.sig - if [ -e $1/lpddr3_1d.fw ]; then -- $PKG_PREFIX$1/aml_encrypt_$2 --bootmk --output u-boot.bin \ -+ run_host_x86_binary_logged $1/aml_encrypt_$2 --bootmk --output u-boot.bin \ - --bl2 bl2.n.bin.sig \ - --bl30 bl30_new.bin.enc \ - --bl31 bl31.img.enc \ -@@ -194,7 +184,7 @@ uboot_g12_postprocess() { - --ddrfw9 $1/lpddr3_1d.fw \ - --level v3 - else -- $PKG_PREFIX$1/aml_encrypt_$2 --bootmk --output u-boot.bin \ -+ run_host_x86_binary_logged $1/aml_encrypt_$2 --bootmk --output u-boot.bin \ - --bl2 bl2.n.bin.sig \ - --bl30 bl30_new.bin.enc \ - --bl31 bl31.img.enc \ -@@ -215,31 +205,31 @@ uboot_g12_postprocess() { - # this helper function includes postprocess for meson gxl and gxm. - # $1 PATH for uboot blob repo - uboot_gxl_postprocess_ng() { -- mv u-boot.bin bl33.bin -+ run_host_command_logged mv -v u-boot.bin bl33.bin - -- $1/blx_fix.sh $1/bl30.bin \ -+ run_host_command_logged $1/blx_fix.sh $1/bl30.bin \ - $1/zero_tmp \ - $1/bl30_zero.bin \ - $1/bl301.bin \ - $1/bl301_zero.bin \ - $1/bl30_new.bin bl30 - -- python3 $1/acs_tool.py $1/bl2.bin $1/bl2_acs.bin $1/acs.bin 0 -+ run_host_command_logged python3 $1/acs_tool.py $1/bl2.bin $1/bl2_acs.bin $1/acs.bin 0 - -- $1/blx_fix.sh $1/bl2_acs.bin \ -+ run_host_command_logged $1/blx_fix.sh $1/bl2_acs.bin \ - $1/zero_tmp \ - $1/bl2_zero.bin \ - $1/bl21.bin \ - $1/bl21_zero.bin \ - $1/bl2_new.bin bl2 - -- $1/aml_encrypt_gxl --bl3enc --input $1/bl30_new.bin -- $1/aml_encrypt_gxl --bl3enc --input $1/bl31.img -- $1/aml_encrypt_gxl --bl3enc --input bl33.bin -- $1/aml_encrypt_gxl --bl2sig --input $1/bl2_new.bin \ -+ run_host_command_logged $1/aml_encrypt_gxl --bl3enc --input $1/bl30_new.bin -+ run_host_command_logged $1/aml_encrypt_gxl --bl3enc --input $1/bl31.img -+ run_host_command_logged $1/aml_encrypt_gxl --bl3enc --input bl33.bin -+ run_host_command_logged $1/aml_encrypt_gxl --bl2sig --input $1/bl2_new.bin \ - --output bl2.n.bin.sig - -- $1/aml_encrypt_gxl --bootmk --output u-boot.bin \ -+ run_host_command_logged $1/aml_encrypt_gxl --bootmk --output u-boot.bin \ - --bl2 bl2.n.bin.sig \ - --bl30 $1/bl30_new.bin.enc \ - --bl31 $1/bl31.img.enc \ -@@ -247,8 +237,8 @@ uboot_gxl_postprocess_ng() { - } - - write_uboot_platform() { -- dd if=$1/u-boot.bin of=$2 bs=1 count=442 conv=fsync > /dev/null 2>&1 -- dd if=$1/u-boot.bin of=$2 bs=512 skip=1 seek=1 conv=fsync > /dev/null 2>&1 -+ dd if=$1/u-boot.bin of=$2 bs=1 count=442 conv=fsync 2>&1 -+ dd if=$1/u-boot.bin of=$2 bs=512 skip=1 seek=1 conv=fsync 2>&1 - } - - family_tweaks_bsp() { -@@ -283,7 +273,7 @@ family_tweaks_bsp() { - cat <<- EOF > "$destination"/etc/X11/xorg.conf - Section "Device" - Identifier "DRM Graphics Acclerated" -- -+ - ## Use modesetting and glamor - Driver "modesetting" - Option "AccelMethod" "glamor" ### "glamor" to enable 3D acceleration, "none" to disable. -@@ -291,9 +281,9 @@ family_tweaks_bsp() { - Option "Dri2Vsync" "true" - Option "TripleBuffer" "True" - ## End glamor configuration -- -+ - EndSection -- -+ - Section "Screen" - Identifier "Default Screen" - SubSection "Display" -diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc -index 03efae1ed..a6cc52133 100644 ---- a/config/sources/families/include/rockchip64_common.inc -+++ b/config/sources/families/include/rockchip64_common.inc -@@ -15,19 +15,6 @@ BOOTPATCHDIR="u-boot-rockchip64" - PACKAGE_LIST_FAMILY="ethtool" - - RKBIN_DIR="$SRC/cache/sources/rkbin-tools" --if [ "$(uname -m)" = "aarch64" ]; then -- case "$(lsb_release -sc)" in -- "bullseye" | "focal" | "hirsute" | "impish" | "jammy") -- PKG_PREFIX="qemu-x86_64-static -L /usr/x86_64-linux-gnu " -- ;; -- *) -- PKG_PREFIX="qemu-x86_64 -L /usr/x86_64-linux-gnu " -- ;; -- esac --else -- PKG_PREFIX="" --fi -- - BOOT_SOC=$(expr $BOOTCONFIG : '.*\(rk[[:digit:]]\+.*\)_.*') - - if [[ $BOOT_SOC == rk3399 ]]; then -@@ -153,8 +140,8 @@ uboot_custom_postprocess() { - local tempfile=$(mktemp) - tools/mkimage -n $BOOT_SOC -T rksd -d $RKBIN_DIR/$DDR_BLOB idbloader.bin - cat $RKBIN_DIR/$MINILOADER_BLOB >> idbloader.bin -- $PKG_PREFIX$RKBIN_DIR/tools/loaderimage --pack --uboot ./u-boot-dtb.bin uboot.img 0x200000 -- $PKG_PREFIX$RKBIN_DIR/tools/trust_merger --replace bl31.elf $RKBIN_DIR/$BL31_BLOB trust.ini -+ run_host_x86_binary_logged $RKBIN_DIR/tools/loaderimage --pack --uboot ./u-boot-dtb.bin uboot.img 0x200000 -+ run_host_x86_binary_logged $RKBIN_DIR/tools/trust_merger --replace bl31.elf $RKBIN_DIR/$BL31_BLOB trust.ini - - else - echo "Unsupported u-boot processing configuration!" -diff --git a/config/sources/families/meson-gxbb.conf b/config/sources/families/meson-gxbb.conf -index e78c1739d..2c02fbc6d 100644 ---- a/config/sources/families/meson-gxbb.conf -+++ b/config/sources/families/meson-gxbb.conf -@@ -5,16 +5,16 @@ fi - - uboot_custom_postprocess() { - if [[ $BOARD == odroidc2 ]]; then -- local t=$SRC/cache/sources/odroidc2-blobs/ -- $PKG_PREFIX$t/fip_create --bl30 $t/gxb/bl30.bin \ -- --bl301 $t/gxb/bl301.bin \ -- --bl31 $t/gxb/bl31.bin \ -+ local fip_blobs_dir="$SRC/cache/sources/odroidc2-blobs/" -+ run_host_x86_binary_logged $fip_blobs_dir/fip_create --bl30 $fip_blobs_dir/gxb/bl30.bin \ -+ --bl301 $fip_blobs_dir/gxb/bl301.bin \ -+ --bl31 $fip_blobs_dir/gxb/bl31.bin \ - --bl33 u-boot.bin \ - fip.bin -- $PKG_PREFIX$t/fip_create --dump fip.bin -- cat $t/gxb/bl2.package fip.bin > boot_new.bin -+ run_host_x86_binary_logged $fip_blobs_dir/fip_create --dump fip.bin -+ cat $fip_blobs_dir/gxb/bl2.package fip.bin > boot_new.bin - rm -f u-boot.img -- $PKG_PREFIX$t/gxb/aml_encrypt_gxb --bootsig \ -+ run_host_x86_binary_logged $fip_blobs_dir/gxb/aml_encrypt_gxb --bootsig \ - --input boot_new.bin \ - --output u-boot.img - rm -f u-boot.bin -@@ -22,37 +22,37 @@ uboot_custom_postprocess() { - fi - - if [[ $BOARD == nanopik2-s905 ]]; then -- local t=$SRC/cache/sources/odroidc2-blobs/ -+ local fip_blobs_dir=$SRC/cache/sources/odroidc2-blobs/ - mv u-boot.bin bl33.bin - -- $t/blx_fix.sh $t/k2/bl30.bin \ -- $t/k2/zero_tmp \ -- $t/k2/bl30_zero.bin \ -- $t/k2/bl301.bin \ -- $t/k2/bl301_zero.bin \ -- $t/k2/bl30_new.bin bl30 -+ $fip_blobs_dir/blx_fix.sh $fip_blobs_dir/k2/bl30.bin \ -+ $fip_blobs_dir/k2/zero_tmp \ -+ $fip_blobs_dir/k2/bl30_zero.bin \ -+ $fip_blobs_dir/k2/bl301.bin \ -+ $fip_blobs_dir/k2/bl301_zero.bin \ -+ $fip_blobs_dir/k2/bl30_new.bin bl30 - -- $PKG_PREFIX$t/k2/fip_create --bl30 $t/k2/bl30_new.bin \ -- --bl31 $t/k2/bl31.img \ -+ run_host_x86_binary_logged $fip_blobs_dir/k2/fip_create --bl30 $fip_blobs_dir/k2/bl30_new.bin \ -+ --bl31 $fip_blobs_dir/k2/bl31.img \ - --bl33 bl33.bin \ -- $t/k2/fip.bin -+ $fip_blobs_dir/k2/fip.bin - -- $PKG_PREFIX$t/k2/fip_create --dump $t/k2/fip.bin -+ run_host_x86_binary_logged $fip_blobs_dir/k2/fip_create --dump $fip_blobs_dir/k2/fip.bin - -- python $t/acs_tool.pyc $t/k2/bl2.bin \ -- $t/k2/bl2_acs.bin \ -- $t/k2/acs.bin 0 -+ python $fip_blobs_dir/acs_tool.pyc $fip_blobs_dir/k2/bl2.bin \ -+ $fip_blobs_dir/k2/bl2_acs.bin \ -+ $fip_blobs_dir/k2/acs.bin 0 - -- $t/blx_fix.sh $t/k2/bl2_acs.bin \ -- $t/k2/zero_tmp \ -- $t/k2/bl2_zero.bin \ -- $t/k2/bl21.bin \ -- $t/k2/bl21_zero.bin \ -- $t/k2/bl2_new.bin bl2 -+ $fip_blobs_dir/blx_fix.sh $fip_blobs_dir/k2/bl2_acs.bin \ -+ $fip_blobs_dir/k2/zero_tmp \ -+ $fip_blobs_dir/k2/bl2_zero.bin \ -+ $fip_blobs_dir/k2/bl21.bin \ -+ $fip_blobs_dir/k2/bl21_zero.bin \ -+ $fip_blobs_dir/k2/bl2_new.bin bl2 - -- cat $t/k2/bl2_new.bin $t/k2/fip.bin > boot_new.bin -+ cat $fip_blobs_dir/k2/bl2_new.bin $fip_blobs_dir/k2/fip.bin > boot_new.bin - -- $PKG_PREFIX$t/k2/aml_encrypt_gxb --bootsig \ -+ run_host_x86_binary_logged $fip_blobs_dir/k2/aml_encrypt_gxb --bootsig \ - --input boot_new.bin \ - --output u-boot.bin - -diff --git a/config/sources/families/meson-gxl.conf b/config/sources/families/meson-gxl.conf -index 8f42459ea..8a98b09ef 100644 ---- a/config/sources/families/meson-gxl.conf -+++ b/config/sources/families/meson-gxl.conf -@@ -1,23 +1,17 @@ - source "${BASH_SOURCE%/*}/include/meson64_common.inc" - - if [[ $BOARD == lafrite ]]; then -- - UBOOT_TARGET_MAP="u-boot-dtb.img;;u-boot.bin:u-boot.bin u-boot-dtb.img" -- - fi - - if [[ $BOARD = khadas-vim1 ]]; then -- - # temporally workaround - using prebuild u-boot from https://github.com/khadas/khadas-uboot/releases/tag/0.11 - UBOOT_TARGET_MAP=";;$SRC/packages/blobs/meson/u-boot-vim1-sd.bin:u-boot.bin" -- - fi - - if [[ $BOARD = khadas-vim2 ]]; then -- - # temporally workaround - using prebuild u-boot from https://github.com/khadas/khadas-uboot/releases/tag/0.11 - UBOOT_TARGET_MAP=";;$SRC/packages/blobs/meson/u-boot-vim2-sd.bin:u-boot.bin" -- - fi - - family_tweaks() { -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index 99adc61a4..4590d7e37 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -101,8 +101,10 @@ function cli_entrypoint() { - ## - - # reset completely after sourcing config file -- set -e # disallow errors -- set -o errtrace # error trace -+ #set -o pipefail # trace ERR through pipes - will be enabled "soon" -+ #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+ set -o errtrace # trace ERR through - enabled -+ set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled - - if [[ "${BUILD_ALL}" == "yes" || "${BUILD_ALL}" == "demo" ]]; then - do_main_build_all_ng -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index 183298c4b..fba1d185b 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -72,7 +72,7 @@ function compile_uboot_target() { - - if [[ $(type -t uboot_custom_postprocess) == function ]]; then - display_alert "${uboot_prefix}Postprocessing u-boot" "${version} ${target_make}" -- uboot_custom_postprocess 2>&1 -+ uboot_custom_postprocess - fi - - display_alert "${uboot_prefix}Preparing u-boot targets packaging" "${version} ${target_make}" -@@ -155,9 +155,7 @@ compile_uboot() { - for target in ${UBOOT_TARGET_MAP}; do - IFS="${_old_ifs}" # restore for the body of loop - export target uboot_name uboottempdir toolchain version uboot_target_counter -- compile_uboot_target || { -- exit_with_error "Failed to compile u-boot target" "${target}" -- } -+ compile_uboot_target - uboot_target_counter=$((uboot_target_counter + 1)) - IFS="${_new_ifs}" # split on newlines only for rest of loop - done -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index d292fcf10..e875dc340 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -69,7 +69,7 @@ prepare_host() { - nfs-kernel-server ntpdate p7zip-full parted patchutils pigz pixz \ - pkg-config pv python3-dev python3-distutils qemu-user-static rsync swig \ - systemd-container u-boot-tools udev unzip uuid-dev wget whiptail zip \ -- zlib1g-dev" -+ zlib1g-dev file" - - if [[ $(dpkg --print-architecture) == amd64 ]]; then - -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 97b13ddef..255281667 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -90,6 +90,7 @@ function run_host_command_logged_raw() { - fi - if [[ $exit_code != 0 ]]; then - display_alert "cmd exited with code ${exit_code}" "$*" "wrn" -+ display_alert "stacktrace for failed command" "$(show_caller_full)" "wrn" - fi - return $exit_code - } -@@ -98,3 +99,25 @@ function run_host_command_logged_raw() { - run_on_sdcard() { - chroot_sdcard "${@}" - } -+ -+# For host-side invocations of binaries we _know_ are x86-only. -+# Determine if we're building on non-amd64, and if so, which qemu binary to use. -+function run_host_x86_binary_logged() { -+ local -a qemu_invocation target_bin_arch -+ target_bin_arch="$(file -b "$1" | cut -d "," -f 1,2 | xargs echo -n)" # obtain the ELF name from the binary using 'file' -+ qemu_invocation=("$@") # Default to calling directly, without qemu. -+ if [[ "$(uname -m)" != "x86_64" ]]; then # If we're NOT on x86... -+ if [[ -f /usr/bin/qemu-x86_64-static ]]; then -+ display_alert "Using qemu-x86_64-static for running on $(uname -m)" "$1 (${target_bin_arch})" "debug" -+ qemu_invocation=("/usr/bin/qemu-x86_64-static" "-L" "/usr/x86_64-linux-gnu" "$@") -+ elif [[ -f /usr/bin/qemu-x86_64 ]]; then -+ display_alert "Using qemu-x86_64 (non-static) for running on $(uname -m)" "$1 (${target_bin_arch})" "debug" -+ qemu_invocation=("/usr/bin/qemu-x86_64" "-L" "/usr/x86_64-linux-gnu" "$@") -+ else -+ exit_with_error "Can't find appropriate qemu binary for running '$1' on $(uname -m), missing packages?" -+ fi -+ else -+ display_alert "Not using qemu for running x86 binary on $(uname -m)" "$1 (${target_bin_arch})" "debug" -+ fi -+ run_host_command_logged "${qemu_invocation[@]}" # Exit with this result code -+} -diff --git a/lib/functions/rootfs/boot_logo.sh b/lib/functions/rootfs/boot_logo.sh -index 9559b5917..319ea1144 100644 ---- a/lib/functions/rootfs/boot_logo.sh -+++ b/lib/functions/rootfs/boot_logo.sh -@@ -1,9 +1,4 @@ - function boot_logo() { -- if [[ $(dpkg --print-architecture) != amd64 ]]; then -- display_alert "Can't build boot_logo throbber using this arch" "$(dpkg --print-architecture)" -- return 0 -- fi -- - display_alert "Building kernel splash logo" "$RELEASE" "info" - - LOGO=${SRC}/packages/blobs/splash/logo.png -@@ -14,8 +9,8 @@ function boot_logo() { - THROBBER_HEIGHT=$(identify $THROBBER | head -1 | cut -d " " -f 3 | cut -d x -f 2) - convert -alpha remove -background "#000000" $LOGO "${SDCARD}"/tmp/logo.rgb - convert -alpha remove -background "#000000" $THROBBER "${SDCARD}"/tmp/throbber%02d.rgb -- # @TODO I guess this is a x86 binary? -- ${SRC}/packages/blobs/splash/bootsplash-packer \ -+ -+ run_host_x86_binary_logged "${SRC}/packages/blobs/splash/bootsplash-packer" \ - --bg_red 0x00 \ - --bg_green 0x00 \ - --bg_blue 0x00 \ -@@ -107,7 +102,8 @@ function boot_logo() { - --blob "${SDCARD}"/tmp/throbber72.rgb \ - --blob "${SDCARD}"/tmp/throbber73.rgb \ - --blob "${SDCARD}"/tmp/throbber74.rgb \ -- "${SDCARD}"/lib/firmware/bootsplash.armbian > /dev/null 2>&1 -+ "${SDCARD}"/lib/firmware/bootsplash.armbian -+ - if [[ $BOOT_LOGO == yes || $BOOT_LOGO == desktop && $BUILD_DESKTOP == yes ]]; then - [[ -f "${SDCARD}"/boot/armbianEnv.txt ]] && grep -q '^bootlogo' "${SDCARD}"/boot/armbianEnv.txt && - sed -i 's/^bootlogo.*/bootlogo=true/' "${SDCARD}"/boot/armbianEnv.txt || echo 'bootlogo=true' >> "${SDCARD}"/boot/armbianEnv.txt -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 564af3c42..09139086b 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -1,241 +1,433 @@ - #!/usr/bin/env bash - # This file is/was autogenerated by lib/tools/gen-library.sh; don't modify manually - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/configuration/menu.sh --# shellcheck source=lib/functions/configuration/menu.sh --source "${SRC}"/lib/functions/configuration/menu.sh -- --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/configuration/interactive.sh --# shellcheck source=lib/functions/configuration/interactive.sh --source "${SRC}"/lib/functions/configuration/interactive.sh -- --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/configuration/config-desktop.sh --# shellcheck source=lib/functions/configuration/config-desktop.sh --source "${SRC}"/lib/functions/configuration/config-desktop.sh -- --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/configuration/main-config.sh --# shellcheck source=lib/functions/configuration/main-config.sh --source "${SRC}"/lib/functions/configuration/main-config.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/general/repo.sh -+# shellcheck source=lib/functions/general/repo.sh -+source "${SRC}"/lib/functions/general/repo.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/configuration/aggregation.sh --# shellcheck source=lib/functions/configuration/aggregation.sh --source "${SRC}"/lib/functions/configuration/aggregation.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/general/host.sh -+# shellcheck source=lib/functions/general/host.sh -+source "${SRC}"/lib/functions/general/host.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/rootfs/create-cache.sh --# shellcheck source=lib/functions/rootfs/create-cache.sh --source "${SRC}"/lib/functions/rootfs/create-cache.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/general/git.sh -+# shellcheck source=lib/functions/general/git.sh -+source "${SRC}"/lib/functions/general/git.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/rootfs/apt.sh --# shellcheck source=lib/functions/rootfs/apt.sh --source "${SRC}"/lib/functions/rootfs/apt.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/general/downloads.sh -+# shellcheck source=lib/functions/general/downloads.sh -+source "${SRC}"/lib/functions/general/downloads.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/rootfs/distro-specific.sh --# shellcheck source=lib/functions/rootfs/distro-specific.sh --source "${SRC}"/lib/functions/rootfs/distro-specific.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/general/cleaning.sh -+# shellcheck source=lib/functions/general/cleaning.sh -+source "${SRC}"/lib/functions/general/cleaning.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/rootfs/rootfs-desktop.sh --# shellcheck source=lib/functions/rootfs/rootfs-desktop.sh --source "${SRC}"/lib/functions/rootfs/rootfs-desktop.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/general/chroot-helpers.sh -+# shellcheck source=lib/functions/general/chroot-helpers.sh -+source "${SRC}"/lib/functions/general/chroot-helpers.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/rootfs/post-tweaks.sh --# shellcheck source=lib/functions/rootfs/post-tweaks.sh --source "${SRC}"/lib/functions/rootfs/post-tweaks.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/extras/buildpkg.sh -+# shellcheck source=lib/functions/extras/buildpkg.sh -+source "${SRC}"/lib/functions/extras/buildpkg.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/rootfs/customize.sh --# shellcheck source=lib/functions/rootfs/customize.sh --source "${SRC}"/lib/functions/rootfs/customize.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/extras/fel.sh -+# shellcheck source=lib/functions/extras/fel.sh -+source "${SRC}"/lib/functions/extras/fel.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/rootfs/distro-agnostic.sh --# shellcheck source=lib/functions/rootfs/distro-agnostic.sh --source "${SRC}"/lib/functions/rootfs/distro-agnostic.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/debs.sh -+# shellcheck source=lib/functions/compilation/debs.sh -+source "${SRC}"/lib/functions/compilation/debs.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/rootfs/boot_logo.sh --# shellcheck source=lib/functions/rootfs/boot_logo.sh --source "${SRC}"/lib/functions/rootfs/boot_logo.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/uboot.sh -+# shellcheck source=lib/functions/compilation/uboot.sh -+source "${SRC}"/lib/functions/compilation/uboot.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/general/chroot-helpers.sh --# shellcheck source=lib/functions/general/chroot-helpers.sh --source "${SRC}"/lib/functions/general/chroot-helpers.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/sources.sh -+# shellcheck source=lib/functions/compilation/sources.sh -+source "${SRC}"/lib/functions/compilation/sources.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/general/repo.sh --# shellcheck source=lib/functions/general/repo.sh --source "${SRC}"/lib/functions/general/repo.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/extra-drivers.sh -+# shellcheck source=lib/functions/compilation/extra-drivers.sh -+source "${SRC}"/lib/functions/compilation/extra-drivers.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/general/cleaning.sh --# shellcheck source=lib/functions/general/cleaning.sh --source "${SRC}"/lib/functions/general/cleaning.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/utils-compilation.sh -+# shellcheck source=lib/functions/compilation/utils-compilation.sh -+source "${SRC}"/lib/functions/compilation/utils-compilation.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/general/git.sh --# shellcheck source=lib/functions/general/git.sh --source "${SRC}"/lib/functions/general/git.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/patching.sh -+# shellcheck source=lib/functions/compilation/patching.sh -+source "${SRC}"/lib/functions/compilation/patching.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/general/host.sh --# shellcheck source=lib/functions/general/host.sh --source "${SRC}"/lib/functions/general/host.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/kernel.sh -+# shellcheck source=lib/functions/compilation/kernel.sh -+source "${SRC}"/lib/functions/compilation/kernel.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/general/downloads.sh --# shellcheck source=lib/functions/general/downloads.sh --source "${SRC}"/lib/functions/general/downloads.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/compilation/atf.sh -+# shellcheck source=lib/functions/compilation/atf.sh -+source "${SRC}"/lib/functions/compilation/atf.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/multi/build-all.sh --# shellcheck source=lib/functions/multi/build-all.sh --source "${SRC}"/lib/functions/multi/build-all.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/cli/cli-entrypoint.sh -+# shellcheck source=lib/functions/cli/cli-entrypoint.sh -+source "${SRC}"/lib/functions/cli/cli-entrypoint.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled - ### lib/functions/cli/utils-cli.sh - # shellcheck source=lib/functions/cli/utils-cli.sh - source "${SRC}"/lib/functions/cli/utils-cli.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/cli/cli-entrypoint.sh --# shellcheck source=lib/functions/cli/cli-entrypoint.sh --source "${SRC}"/lib/functions/cli/cli-entrypoint.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/logging/errors.sh -+# shellcheck source=lib/functions/logging/errors.sh -+source "${SRC}"/lib/functions/logging/errors.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/bsp/bsp-cli.sh --# shellcheck source=lib/functions/bsp/bsp-cli.sh --source "${SRC}"/lib/functions/bsp/bsp-cli.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/logging/runners.sh -+# shellcheck source=lib/functions/logging/runners.sh -+source "${SRC}"/lib/functions/logging/runners.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/bsp/bsp-desktop.sh --# shellcheck source=lib/functions/bsp/bsp-desktop.sh --source "${SRC}"/lib/functions/bsp/bsp-desktop.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/logging/capture.sh -+# shellcheck source=lib/functions/logging/capture.sh -+source "${SRC}"/lib/functions/logging/capture.sh -+ -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/logging/traps.sh -+# shellcheck source=lib/functions/logging/traps.sh -+source "${SRC}"/lib/functions/logging/traps.sh -+ -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/logging/logging.sh -+# shellcheck source=lib/functions/logging/logging.sh -+source "${SRC}"/lib/functions/logging/logging.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled - ### lib/functions/bsp/utils-bsp.sh - # shellcheck source=lib/functions/bsp/utils-bsp.sh - source "${SRC}"/lib/functions/bsp/utils-bsp.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/image/loop.sh --# shellcheck source=lib/functions/image/loop.sh --source "${SRC}"/lib/functions/image/loop.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/bsp/bsp-desktop.sh -+# shellcheck source=lib/functions/bsp/bsp-desktop.sh -+source "${SRC}"/lib/functions/bsp/bsp-desktop.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/image/initrd.sh --# shellcheck source=lib/functions/image/initrd.sh --source "${SRC}"/lib/functions/image/initrd.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/bsp/bsp-cli.sh -+# shellcheck source=lib/functions/bsp/bsp-cli.sh -+source "${SRC}"/lib/functions/bsp/bsp-cli.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/image/rootfs-to-image.sh --# shellcheck source=lib/functions/image/rootfs-to-image.sh --source "${SRC}"/lib/functions/image/rootfs-to-image.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/main/default-build.sh -+# shellcheck source=lib/functions/main/default-build.sh -+source "${SRC}"/lib/functions/main/default-build.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/image/partitioning.sh --# shellcheck source=lib/functions/image/partitioning.sh --source "${SRC}"/lib/functions/image/partitioning.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/main/config-prepare.sh -+# shellcheck source=lib/functions/main/config-prepare.sh -+source "${SRC}"/lib/functions/main/config-prepare.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled - ### lib/functions/main/rootfs-image.sh - # shellcheck source=lib/functions/main/rootfs-image.sh - source "${SRC}"/lib/functions/main/rootfs-image.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/main/config-prepare.sh --# shellcheck source=lib/functions/main/config-prepare.sh --source "${SRC}"/lib/functions/main/config-prepare.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/configuration/aggregation.sh -+# shellcheck source=lib/functions/configuration/aggregation.sh -+source "${SRC}"/lib/functions/configuration/aggregation.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/main/default-build.sh --# shellcheck source=lib/functions/main/default-build.sh --source "${SRC}"/lib/functions/main/default-build.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/configuration/main-config.sh -+# shellcheck source=lib/functions/configuration/main-config.sh -+source "${SRC}"/lib/functions/configuration/main-config.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/compilation/sources.sh --# shellcheck source=lib/functions/compilation/sources.sh --source "${SRC}"/lib/functions/compilation/sources.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/configuration/interactive.sh -+# shellcheck source=lib/functions/configuration/interactive.sh -+source "${SRC}"/lib/functions/configuration/interactive.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/compilation/uboot.sh --# shellcheck source=lib/functions/compilation/uboot.sh --source "${SRC}"/lib/functions/compilation/uboot.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/configuration/menu.sh -+# shellcheck source=lib/functions/configuration/menu.sh -+source "${SRC}"/lib/functions/configuration/menu.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/compilation/atf.sh --# shellcheck source=lib/functions/compilation/atf.sh --source "${SRC}"/lib/functions/compilation/atf.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/configuration/config-desktop.sh -+# shellcheck source=lib/functions/configuration/config-desktop.sh -+source "${SRC}"/lib/functions/configuration/config-desktop.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/compilation/utils-compilation.sh --# shellcheck source=lib/functions/compilation/utils-compilation.sh --source "${SRC}"/lib/functions/compilation/utils-compilation.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/multi/build-all.sh -+# shellcheck source=lib/functions/multi/build-all.sh -+source "${SRC}"/lib/functions/multi/build-all.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/compilation/kernel.sh --# shellcheck source=lib/functions/compilation/kernel.sh --source "${SRC}"/lib/functions/compilation/kernel.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/image/initrd.sh -+# shellcheck source=lib/functions/image/initrd.sh -+source "${SRC}"/lib/functions/image/initrd.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/compilation/debs.sh --# shellcheck source=lib/functions/compilation/debs.sh --source "${SRC}"/lib/functions/compilation/debs.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/image/rootfs-to-image.sh -+# shellcheck source=lib/functions/image/rootfs-to-image.sh -+source "${SRC}"/lib/functions/image/rootfs-to-image.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/compilation/extra-drivers.sh --# shellcheck source=lib/functions/compilation/extra-drivers.sh --source "${SRC}"/lib/functions/compilation/extra-drivers.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/image/loop.sh -+# shellcheck source=lib/functions/image/loop.sh -+source "${SRC}"/lib/functions/image/loop.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/compilation/patching.sh --# shellcheck source=lib/functions/compilation/patching.sh --source "${SRC}"/lib/functions/compilation/patching.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/image/partitioning.sh -+# shellcheck source=lib/functions/image/partitioning.sh -+source "${SRC}"/lib/functions/image/partitioning.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/logging/capture.sh --# shellcheck source=lib/functions/logging/capture.sh --source "${SRC}"/lib/functions/logging/capture.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/rootfs/post-tweaks.sh -+# shellcheck source=lib/functions/rootfs/post-tweaks.sh -+source "${SRC}"/lib/functions/rootfs/post-tweaks.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/logging/runners.sh --# shellcheck source=lib/functions/logging/runners.sh --source "${SRC}"/lib/functions/logging/runners.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/rootfs/rootfs-desktop.sh -+# shellcheck source=lib/functions/rootfs/rootfs-desktop.sh -+source "${SRC}"/lib/functions/rootfs/rootfs-desktop.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/logging/errors.sh --# shellcheck source=lib/functions/logging/errors.sh --source "${SRC}"/lib/functions/logging/errors.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/rootfs/distro-agnostic.sh -+# shellcheck source=lib/functions/rootfs/distro-agnostic.sh -+source "${SRC}"/lib/functions/rootfs/distro-agnostic.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/logging/logging.sh --# shellcheck source=lib/functions/logging/logging.sh --source "${SRC}"/lib/functions/logging/logging.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/rootfs/boot_logo.sh -+# shellcheck source=lib/functions/rootfs/boot_logo.sh -+source "${SRC}"/lib/functions/rootfs/boot_logo.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/logging/traps.sh --# shellcheck source=lib/functions/logging/traps.sh --source "${SRC}"/lib/functions/logging/traps.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/rootfs/apt.sh -+# shellcheck source=lib/functions/rootfs/apt.sh -+source "${SRC}"/lib/functions/rootfs/apt.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/extras/fel.sh --# shellcheck source=lib/functions/extras/fel.sh --source "${SRC}"/lib/functions/extras/fel.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/rootfs/customize.sh -+# shellcheck source=lib/functions/rootfs/customize.sh -+source "${SRC}"/lib/functions/rootfs/customize.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/extras/buildpkg.sh --# shellcheck source=lib/functions/extras/buildpkg.sh --source "${SRC}"/lib/functions/extras/buildpkg.sh -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/rootfs/create-cache.sh -+# shellcheck source=lib/functions/rootfs/create-cache.sh -+source "${SRC}"/lib/functions/rootfs/create-cache.sh -+ -+# no errors tolerated. set -e is invoked before each sourced file to make sure. -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled -+### lib/functions/rootfs/distro-specific.sh -+# shellcheck source=lib/functions/rootfs/distro-specific.sh -+source "${SRC}"/lib/functions/rootfs/distro-specific.sh - - --set -e # no errors tolerated. one last time for the win! -+# no errors tolerated. one last time for the win! -+#set -o pipefail # trace ERR through pipes - will be enabled "soon" -+#set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+set -o errtrace # trace ERR through - enabled -+set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled - # This file is/was autogenerated by lib/tools/gen-library.sh; don't modify manually -diff --git a/lib/tools/gen-library.sh b/lib/tools/gen-library.sh -index fd6f200e7..8abfad05e 100755 ---- a/lib/tools/gen-library.sh -+++ b/lib/tools/gen-library.sh -@@ -20,7 +20,11 @@ AUTOGEN_INCLUDES_HEADER - find lib/functions -type f -name \*.sh | while read -r path; do - ref="$(echo -n "${path}")" - cat <<- AUTOGEN_INCLUDES_EACH >> "${TARGET_SH}" -- set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. -+ # no errors tolerated. invoked before each sourced file to make sure. -+ #set -o pipefail # trace ERR through pipes - will be enabled "soon" -+ #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+ set -o errtrace # trace ERR through - enabled -+ set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled - ### ${path} - # shellcheck source=${ref} - source "\${SRC}"/${path} -@@ -30,7 +34,11 @@ done - - cat <<- AUTOGEN_INCLUDES_FOOTER >> "${TARGET_SH}" - -- set -e # no errors tolerated. one last time for the win! -+ # no errors tolerated. one last time for the win! -+ #set -o pipefail # trace ERR through pipes - will be enabled "soon" -+ #set -o nounset ## set -u : exit the script if you try to use an uninitialised variable - one day will be enabled -+ set -o errtrace # trace ERR through - enabled -+ set -o errexit ## set -e : exit the script if any statement returns a non-true return value - enabled - # This file is/was autogenerated by ${0}; don't modify manually - AUTOGEN_INCLUDES_FOOTER - - -From f9e02b2152c1c82a74312ccf48ef530dac167512 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 22 Jan 2022 10:32:08 +0000 -Subject: [PATCH] armbian-next: always use UPPERCASE labels for FAT32 UEFI - filesystems (rpi4b, uefi-*) - ---- - config/sources/families/bcm2711.conf | 2 +- - lib/functions/image/partitioning.sh | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index eac9895d4..0a1322ac3 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -1,7 +1,7 @@ - enable_extension "flash-kernel" - export LINUXFAMILY=bcm2711 - export ARCH=arm64 --export UEFI_FS_LABEL="rpicfg" # Windows/Mac users will see this if they mount the SD card. Configurable -+export UEFI_FS_LABEL="RPICFG" # Windows/Mac users will see this if they mount the SD card. Configurable, but should be uppercase always - export SKIP_BOOTSPLASH="yes" # video is init-ed before us - export KERNELDIR='linux-rpi' # Avoid sharing a source tree with others, until we know it's safe. - export FK__PUBLISHED_KERNEL_VERSION="raspi" # flash kernel (FK) configuration -diff --git a/lib/functions/image/partitioning.sh b/lib/functions/image/partitioning.sh -index 92f5940c1..4090d96e1 100644 ---- a/lib/functions/image/partitioning.sh -+++ b/lib/functions/image/partitioning.sh -@@ -66,7 +66,7 @@ prepare_partitions() { - UEFISIZE=${UEFISIZE:-0} - BIOSSIZE=${BIOSSIZE:-0} - UEFI_MOUNT_POINT=${UEFI_MOUNT_POINT:-/boot/efi} -- UEFI_FS_LABEL="${UEFI_FS_LABEL:-armbiefi}" -+ UEFI_FS_LABEL="${UEFI_FS_LABEL:-ARMBIEFI}" # Should be always uppercase - - call_extension_method "pre_prepare_partitions" "prepare_partitions_custom" << 'PRE_PREPARE_PARTITIONS' - *allow custom options for mkfs* -@@ -293,7 +293,7 @@ PREPARE_IMAGE_SIZE - if [[ -n $uefipart ]]; then - display_alert "Creating EFI partition" "FAT32 ${UEFI_MOUNT_POINT} on ${LOOP}p${uefipart} label ${UEFI_FS_LABEL}" - check_loop_device "${LOOP}p${uefipart}" -- mkfs.fat -F32 -n "${UEFI_FS_LABEL}" ${LOOP}p${uefipart} 2>&1 -+ mkfs.fat -F32 -n "${UEFI_FS_LABEL^^}" ${LOOP}p${uefipart} 2>&1 # "^^" makes variable UPPERCASE, required for FAT32. - mkdir -p "${MOUNT}${UEFI_MOUNT_POINT}" - mount ${LOOP}p${uefipart} "${MOUNT}${UEFI_MOUNT_POINT}" - echo "UUID=$(blkid -s UUID -o value ${LOOP}p${uefipart}) ${UEFI_MOUNT_POINT} vfat defaults 0 2" >> $SDCARD/etc/fstab - -From acbc2f21da023796c5a72e3b78e0b20f09cf5ed0 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 20 Jan 2022 23:41:18 +0000 -Subject: [PATCH] armbian-next: shellfmt after rebase onto master - ---- - config/sources/families/media.conf | 83 +++++++------------------------------- - 1 file changed, 15 insertions(+), 68 deletions(-) - -diff --git a/config/sources/families/media.conf b/config/sources/families/media.conf -index fe5e96c60..7c5a76af6 100644 ---- a/config/sources/families/media.conf -+++ b/config/sources/families/media.conf -@@ -1,100 +1,47 @@ - source "${BASH_SOURCE%/*}/include/rockchip64_common.inc" - --if [[ $BOARD == station-p2 || $BOARD == station-m2 || $BOARD == bananapir2pro ]]; then -+if [[ $BOARD == station-p2 || $BOARD == station-m2 ]]; then - BOOTSOURCE='https://github.com/150balbes/u-boot-rk' - BOOTBRANCH='branch:rk356x' - BOOTPATCHDIR="u-boot-station-p2" --elif [[ $BOARD == quartz64a ]]; then -- BOOTSOURCE='https://github.com/150balbes/u-boot-rk' -- BOOTBRANCH='branch:rk35xx' -- BOOTPATCHDIR="u-boot-station-p2" --elif [[ $BOARD == station-m3 ]]; then -- BOOTSOURCE='https://github.com/150balbes/u-boot-rk' -- BOOTBRANCH='branch:rk3588' -- BOOTPATCHDIR="u-boot-station-p2" --else -- BOOTBRANCH="tag:v2022.07" -- BOOTPATCHDIR="u-boot-media" - fi - --SKIP_BOOTSPLASH="yes" -- - case $BRANCH in - - legacy) - KERNELDIR='linux-rockchip64' - -- if [[ $BOARD == station-p2 || $BOARD == station-m2 || $BOARD == bananapir2pro ]]; then -+ if [[ $BOARD == station-p2 || $BOARD == station-m2 ]]; then - KERNELSOURCE='https://github.com/150balbes/rockchip-kernel' - KERNELBRANCH='branch:kernel-4.19' - KERNELPATCHDIR='station-p2-'$BRANCH -- LINUXFAMILY=station-p2 - LINUXCONFIG='linux-station-p2-'$BRANCH -+ LINUXFAMILY=station-p2 - EXTRAWIFI="no" - WIREGUARD="no" -- elif [[ $BOARD == station-m3 ]]; then -- KERNELSOURCE='https://github.com/150balbes/rockchip-kernel' -- KERNELBRANCH='branch:kernel-5.10' -- LINUXFAMILY=station-m3 -- LINUXCONFIG='linux-station-m3-'$BRANCH -- KERNELPATCHDIR='station-m3-'$BRANCH -- AUFS="no" -- elif [[ $BOARD == jetson-nano ]]; then -- KERNELDIR='linux-nano' -- KERNELSOURCE='https://github.com/150balbes/Jetson-Nano' -- KERNELBRANCH='branch:4.9.201' -- KERNELPATCHDIR='jetson-nano-'$BRANCH -- LINUXFAMILY=jetson-nano -- LINUXCONFIG='linux-jetson-nano-'$BRANCH -- EXTRAWIFI="no" -- BOOT_FDT_FILE="none" -- SRC_CMDLINE='console=ttyS0,115200n8 console=tty0 tegraid=21.1.2.0.0 ddr_die=4096M@2048M section=512M memtype=0 vpr_resize usb_port_owner_info=0 lane_owner_info=0 emc_max_dvfs=0 touch_id=0@63 video=tegrafb debug_uartport=lsport,4 earlyprintk=uart8250-32bit,0x70006000 maxcpus=4 usbcore.old_scheme_first=1 lp0_vec=0x1000@0xff780000 core_edp_mv=1075 core_edp_ma=4000 tegra_fbmem=0x800000@0x92ca9000 is_hdmi_initialised=1 earlycon=uart8250,mmio32,0x70006000 fbcon=map:0' -- MODULES_INITRD="jetson-nano-legacy" - else -- if [[ $BOARD == nanopct4 ]]; then -- KERNELSOURCE='https://github.com/friendlyarm/kernel-rockchip' -- KERNELBRANCH='branch:nanopi4-linux-v4.4.y' -- KERNELPATCHDIR='rk3399-'$BRANCH -- LINUXFAMILY=rk3399 -- LINUXCONFIG='linux-rk3399-'$BRANCH -- else -- KERNELSOURCE='https://github.com/ayufan-rock64/linux-kernel' -- KERNELBRANCH='tag:4.4.202-1237-rockchip-ayufan' -- KERNELPATCHDIR='rockchip64-'$BRANCH -- LINUXFAMILY=rockchip64 -- LINUXCONFIG='linux-rockchip64-'$BRANCH -- fi -+ KERNELSOURCE='https://github.com/ayufan-rock64/linux-kernel' -+ KERNELBRANCH='tag:4.4.202-1237-rockchip-ayufan' -+ KERNELPATCHDIR='rockchip64-'$BRANCH -+ LINUXCONFIG='linux-rockchip64-'$BRANCH -+ LINUXFAMILY=rockchip64 - fi -- ;; -+ ;; - - current) -- -- KERNELBRANCH="branch:linux-5.18.y" -- LINUXCONFIG='linux-media-'$BRANCH -- -- if [[ $BOARD == station-p2 || $BOARD == station-m2 || $BOARD == quartz64a || $BOARD == bananapir2pro ]]; then -- KERNELPATCHDIR='station-p2-'$BRANCH -- LINUXFAMILY=station-p2 -- else -+ KERNELBRANCH="branch:linux-5.15.y" - KERNELPATCHDIR='media-'$BRANCH - LINUXFAMILY=media -- -- if [[ $BOARD == jetson-nano ]]; then -- MODULES_INITRD="jetson-nano-current" -- fi -- fi -- ;; -+ LINUXCONFIG='linux-media-'$BRANCH -+ ;; - - edge) -+ SKIP_BOOTSPLASH="yes" -+ KERNELBRANCH="branch:linux-5.16.y" - KERNELPATCHDIR='media-'$BRANCH -- KERNELBRANCH='branch:linux-5.19.y' - LINUXFAMILY=media - LINUXCONFIG='linux-media-'$BRANCH -- -- if [[ $BOARD == jetson-nano ]]; then -- MODULES_INITRD="jetson-nano-edge" -- fi -- ;; -+ ;; - esac - - prepare_boot_configuration - -From 407ecdb1b9108b57afea57b3ca6a17ed86ef1fcc Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Thu, 20 Jan 2022 23:35:46 +0000 -Subject: [PATCH] armbian-next: manual merge (4) of all lib/*.sh changes - between revisions 23afccf56e295610340188dc2613143d5323659e and - e610f00bc7fdcab5ba4c648fa21148518b4b767b - -- plus ooops ---- - config/sources/families/bcm2711.conf | 26 ++++++++++++----------- - config/sources/families/include/sunxi_common.inc | 2 +- - config/sources/families/jethub.conf | 2 +- - lib/functions/configuration/main-config.sh | 2 +- - lib/functions/general/git.sh | 27 +++++++++++++++--------- - lib/functions/general/host.sh | 20 ------------------ - 6 files changed, 34 insertions(+), 45 deletions(-) - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index 74e80cd03..eac9895d4 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -1,13 +1,10 @@ - enable_extension "flash-kernel" - export LINUXFAMILY=bcm2711 - export ARCH=arm64 --export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" # config is per family and branch --export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" # patches per family and branch --export UEFI_FS_LABEL="RPICFG" # Windows/Mac users will see this if they mount the SD card. UPPERCASE --export SKIP_BOOTSPLASH="yes" # video is init-ed before us --export KERNELDIR='linux-rpi' # Avoid sharing a source tree with others, until we know it's safe. --export RASPI_DISTRO_KERNEL=no # use default distor kernel? default is no, build from source. --export FK__PUBLISHED_KERNEL_VERSION="raspi" # flash kernel (FK) configuration -+export UEFI_FS_LABEL="rpicfg" # Windows/Mac users will see this if they mount the SD card. Configurable -+export SKIP_BOOTSPLASH="yes" # video is init-ed before us -+export KERNELDIR='linux-rpi' # Avoid sharing a source tree with others, until we know it's safe. -+export FK__PUBLISHED_KERNEL_VERSION="raspi" # flash kernel (FK) configuration - export FK__KERNEL_PACKAGES="" - export RASPI_ROOT_FS_LABEL="armbian" - export CPUMIN=500000 -@@ -16,19 +13,24 @@ export GOVERNOR=ondemand - - case "${BRANCH}" in - -- ddk) -- # Use distro's default kernel (ddk). Disables kernel building. -- export RASPI_DISTRO_KERNEL=yes -+ legacy | ddk) -+ export RASPI_DISTRO_KERNEL=yes # This will cause board to include distro's prebuilt kernel, not from source - ;; - - current) -+ export RASPI_DISTRO_KERNEL=no - export KERNELSOURCE='https://github.com/raspberrypi/linux' - export KERNELBRANCH="branch:rpi-5.15.y" -+ export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" -+ export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" - ;; - - edge) -+ export RASPI_DISTRO_KERNEL=no - export KERNELSOURCE='https://github.com/raspberrypi/linux' - export KERNELBRANCH="branch:rpi-5.16.y" -+ export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" -+ export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" - ;; - esac - -@@ -40,7 +42,7 @@ prepare_partitions_custom__add_rootfs_raspi_label_to_mkfs() { - - pre_initramfs_flash_kernel__write_raspi_cmdline() { - cat <<- EOD > "${FIRMWARE_DIR}/cmdline.txt" -- root=LABEL=${RASPI_ROOT_FS_LABEL} rootfstype=ext4 elevator=deadline rootwait fixrtc cgroup_enable=memory cgroup_memory=1 console=tty1 -+ root=LABEL=${RASPI_ROOT_FS_LABEL} rootfstype=ext4 elevator=deadline rootwait fixrtc cgroup_enable=memory cgroup_memory=1 console=tty1 logo.nologo loglevel=1 - EOD - } - -@@ -55,7 +57,7 @@ pre_flash_kernel__symlink_dtb_and_kernel() { - Kernel-Flavors: any - EOD - -- ## @TODO: rpardini: a horrible hack. I'll sort this out together with overlays, later. This is pressing. -+ ## @TODO: rpardini: a horrible hack. I'll sort this out together with overlays, later. - local oneDTB dtbBase - for oneDTB in "${MOUNT}"/boot/dtb/broadcom/*.dtb; do - dtbBase=$(basename "${oneDTB}") -diff --git a/config/sources/families/include/sunxi_common.inc b/config/sources/families/include/sunxi_common.inc -index 641cceb1c..eabacf86b 100644 ---- a/config/sources/families/include/sunxi_common.inc -+++ b/config/sources/families/include/sunxi_common.inc -@@ -20,7 +20,7 @@ esac - - case "$KERNEL_VERSION_LEVEL" in - -- 5.10 | 5.15) -+ 5.10 | 5.15 | 5.16) - KERNELSOURCE=$MAINLINE_KERNEL_SOURCE - KERNELSOURCENAME='name=origin' - KERNELBRANCH="branch:linux-${KERNEL_VERSION_LEVEL}.y" -diff --git a/config/sources/families/jethub.conf b/config/sources/families/jethub.conf -index e747ed57c..16481c176 100644 ---- a/config/sources/families/jethub.conf -+++ b/config/sources/families/jethub.conf -@@ -172,7 +172,7 @@ family_tweaks() { - display_alert "Adding JetHome repository and authentication key" "/etc/apt/sources.list.d/jethome.list" "info" - cp "${SRC}"/packages/bsp/jethub/jethome.gpg "${SDCARD}/etc/apt/trusted.gpg.d/" - -- echo "deb http://repo.jethome.ru"$([[ $BETA == yes ]] && echo "/beta" )" ${RELEASE} jethome-${RELEASE}" \ -+ echo "deb http://repo.jethome.ru"$([[ $BETA == yes ]] && echo "/beta")" ${RELEASE} jethome-${RELEASE}" \ - >> "${SDCARD}"/etc/apt/sources.list.d/jethome.list - } - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 759deaf5d..d4995a6b7 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -32,7 +32,7 @@ function do_main_configuration() { - [[ -z $EXIT_PATCHING_ERROR ]] && EXIT_PATCHING_ERROR="" # exit patching if failed - [[ -z $HOST ]] && HOST="$BOARD" # set hostname to the board - cd "${SRC}" || exit -- [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=11 -+ [[ -z "${ROOTFSCACHE_VERSION}" ]] && ROOTFSCACHE_VERSION=12 - [[ -z "${CHROOT_CACHE_VERSION}" ]] && CHROOT_CACHE_VERSION=7 - BUILD_REPOSITORY_URL=$(improved_git remote get-url $(improved_git remote 2> /dev/null | grep origin) 2> /dev/null) - BUILD_REPOSITORY_COMMIT=$(improved_git describe --match=d_e_a_d_b_e_e_f --always --dirty 2> /dev/null) -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index f66b5ea90..e4a03f278 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -72,31 +72,38 @@ waiter_local_repo() { - - display_alert "Checking git sources" "$dir $name/$branch" "info" - -- # Check the exception for 5.15 sunxi. We will remove this after a while. -- if [ "$dir" == "linux-mainline/5.15" ] && -- [ "$(git remote show | grep megous || true)" == "megous" ]; then -- display_alert "Remove mistakenly created and excessively large" "$dir" "info" -- rm -rf .git ./* -- fi -- - if [ "$(git rev-parse --git-dir 2> /dev/null)" != ".git" ]; then - git init -q . - - # Run in the sub shell to avoid mixing environment variables. - if [ -n "$VAR_SHALLOW_ORIGINAL" ]; then -- display_alert "Unshallowing original:" "${VAR_SHALLOW_ORIGINAL}" "debug" - ( - $VAR_SHALLOW_ORIGINAL - - display_alert "Add original git sources" "$dir $name/$branch" "info" -- if [ "$(git ls-remote -h $url $branch | awk -F'/' '{if (NR == 1) print $NF}' || true)" != "$branch" ]; then -+ if [ "$(git ls-remote -h $url $branch | -+ awk -F'/' '{if (NR == 1) print $NF}')" != "$branch" ]; then - display_alert "Bad $branch for $url in $VAR_SHALLOW_ORIGINAL" - exit 177 - fi - - git remote add -t $branch $name $url -- git fetch --shallow-exclude=$start_tag $name -+ -+ # Handle an exception if the initial tag is the top of the branch -+ # As v5.16 == HEAD -+ if $( -+ git ls-remote -t $url ${start_tag}\* | -+ awk -F'/' '$NF !~ /v[4-5][.][1-9]{1,2}[.][1]$/ { -+ exit 1 -+ }' -+ ); then -+ git fetch --shallow-exclude=$start_tag $name -+ else -+ git fetch --depth 1 $name -+ fi - git fetch --deepen=1 $name -+ # For a shallow clone, this works quickly and saves space. -+ git gc - ) - - [ "$?" == "177" ] && exit -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index d262d4baa..d292fcf10 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -153,26 +153,6 @@ prepare_host() { - - if [ -n "${EXTRA_BUILD_DEPS}" ]; then hostdeps+=" ${EXTRA_BUILD_DEPS}"; fi - -- # distribution packages are buggy, download from author -- -- # build aarch64 -- if [[ $(dpkg --print-architecture) == amd64 ]]; then -- -- if [[ ! -f /etc/apt/sources.list.d/aptly.list ]]; then -- display_alert "Updating from external repository" "aptly" "info" -- if [ x"" != x"${http_proxy}" ]; then -- apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-options http-proxy="${http_proxy}" --recv-keys ED75B5A4483DA07C > /dev/null 2>&1 -- else -- apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys ED75B5A4483DA07C > /dev/null 2>&1 -- fi -- echo "deb http://repo.aptly.info/ nightly main" > /etc/apt/sources.list.d/aptly.list -- else -- sed "s/squeeze/nightly/" -i /etc/apt/sources.list.d/aptly.list -- fi -- -- # build aarch64 -- fi -- - display_alert "Installing build dependencies" - # don't prompt for apt cacher selection - sudo echo "apt-cacher-ng apt-cacher-ng/tunnelenable boolean false" | sudo debconf-set-selections - -From cdf0389ba5f0a747f4c1f9feee9527001aa61a35 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 16 Jan 2022 23:02:52 +0100 -Subject: [PATCH] atf: fix for `set -e` mode; fix CROSS_COMPILE quoting - -Signed-off-by: Ricardo Pardini ---- - lib/functions/compilation/atf.sh | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/lib/functions/compilation/atf.sh b/lib/functions/compilation/atf.sh -index 73fa4a574..10d9bdec3 100644 ---- a/lib/functions/compilation/atf.sh -+++ b/lib/functions/compilation/atf.sh -@@ -51,7 +51,7 @@ compile_atf() { - # Check: https://github.com/armbian/build/issues/1157 - CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${toolchain2}:${PATH}" \ - make ENABLE_BACKTRACE="0" $target_make $CTHREADS \ -- CROSS_COMPILE=$CCACHE $ATF_COMPILER 2>&1 || { -+ CROSS_COMPILE="$CCACHE $ATF_COMPILER" 2>&1 || { - exit_with_error "ATF compilation failed" - } - -@@ -80,4 +80,6 @@ compile_atf() { - - # copy license file to pack it to u-boot package later - [[ -f license.md ]] && cp license.md "${atftempdir}"/ -+ -+ return 0 # avoid error due to short-circuit above - } - -From eea2f5f4041541f8055be549eea4cf8c2f32a901 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 16 Jan 2022 23:03:45 +0100 -Subject: [PATCH] logging: predict the future location of .img file - -- otherwise it's really unhelpful - -Signed-off-by: Ricardo Pardini ---- - lib/functions/image/rootfs-to-image.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/functions/image/rootfs-to-image.sh b/lib/functions/image/rootfs-to-image.sh -index 96e6c9ea4..f1d327a84 100644 ---- a/lib/functions/image/rootfs-to-image.sh -+++ b/lib/functions/image/rootfs-to-image.sh -@@ -193,7 +193,7 @@ POST_UMOUNT_FINAL_IMAGE - fi - - fi -- display_alert "Done building" "${DESTIMG}/${version}.img" "info" -+ display_alert "Done building" "${FINALDEST}/${version}.img" "info" # A bit predicting the future, since it's still in DESTIMG at this point. - - # Previously, post_build_image passed the .img path as an argument to the hook. Now its an ENV var. - export FINAL_IMAGE_FILE="${DESTIMG}/${version}.img" - -From 873136d95f303e1acfce017ad7d38464ee0058ec Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 15 Jan 2022 19:37:27 +0100 -Subject: [PATCH] uefi: alias `BRANCH=ddk` to `current`'s - `DISTRO_GENERIC_KERNEL=yes` - -- no real change, just to match rpi4b's BRANCH=style -- opens space for Armbian-built `current` soon - -Signed-off-by: Ricardo Pardini ---- - config/boards/uefi-arm64.conf | 4 +--- - config/boards/uefi-x86.conf | 4 +--- - config/sources/families/include/uefi_common.inc | 4 ++-- - 3 files changed, 4 insertions(+), 8 deletions(-) - -diff --git a/config/boards/uefi-arm64.conf b/config/boards/uefi-arm64.conf -index 5a705cdeb..523e488ce 100644 ---- a/config/boards/uefi-arm64.conf -+++ b/config/boards/uefi-arm64.conf -@@ -1,6 +1,4 @@ - # aarch64 via UEFI for all UEFI-enabled boards - export BOARD_NAME="UEFI arm64" - export BOARDFAMILY="uefi-arm64" --export KERNEL_TARGET="current,edge" -- --export BOOT_LOGO=desktop -+export KERNEL_TARGET="ddk,current,edge" -diff --git a/config/boards/uefi-x86.conf b/config/boards/uefi-x86.conf -index d6153e717..186e5fdba 100644 ---- a/config/boards/uefi-x86.conf -+++ b/config/boards/uefi-x86.conf -@@ -1,6 +1,4 @@ - # x86_64 via UEFI/BIOS for all boards - export BOARD_NAME="UEFI x86" - export BOARDFAMILY="uefi-x86" --export KERNEL_TARGET="current,edge" -- --export BOOT_LOGO=desktop -+export KERNEL_TARGET="ddk,current,edge" -diff --git a/config/sources/families/include/uefi_common.inc b/config/sources/families/include/uefi_common.inc -index 28ec78ffc..907e55ad1 100644 ---- a/config/sources/families/include/uefi_common.inc -+++ b/config/sources/families/include/uefi_common.inc -@@ -3,16 +3,16 @@ export SERIALCON="tty1" # Cant reasonably expect UEFI s - export SKIP_BOOTSPLASH="yes" # No splash. - export UEFI_GRUB_TIMEOUT=${UEFI_GRUB_TIMEOUT:-3} # Default 3-seconds timeout for GRUB menu. - export BOARD_FIRMWARE_INSTALL="-full" # Install full firmware for UEFI boards -+export DISTRO_GENERIC_KERNEL=no # no, build from source; yes: use distro - case "${BRANCH}" in - -- current) -+ current | ddk) - # This will force `unset KERNELSOURCE` later; no kernel will be built. - # Instead, the distro's default linux-generic kernel will be installed. - export DISTRO_GENERIC_KERNEL=yes - ;; - - edge) -- export DISTRO_GENERIC_KERNEL=no - export LINUXCONFIG="linux-uefi-${LINUXFAMILY}-${BRANCH}" - export KERNELBRANCH="branch:linux-5.15.y" - export KERNELPATCHDIR="uefi-${LINUXFAMILY}-${BRANCH}" # Might be empty. - -From fe8e12e095465e7098e5f4cff98fdb4ee80769ff Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 15 Jan 2022 02:46:02 +0100 -Subject: [PATCH] rpi: `legacy`->`ddk` (distro default kernel), remove - overclock - -- common vars in bcm2711.conf moved to top -- removed overclock/overvolt that was leftover my old setup -- confirmed: works with rpi3b too, should work with CM4/CM3 and others -- use valid UPPERCASE FAT label for RPICFG (in place of `rpicfg`) - -Signed-off-by: Ricardo Pardini ---- - config/boards/rpi4b.wip | 12 ++---------- - config/sources/families/bcm2711.conf | 25 ++++++++++++------------- - 2 files changed, 14 insertions(+), 23 deletions(-) - -diff --git a/config/boards/rpi4b.wip b/config/boards/rpi4b.wip -index 56a785a25..b471e3421 100644 ---- a/config/boards/rpi4b.wip -+++ b/config/boards/rpi4b.wip -@@ -1,8 +1,8 @@ - # Broadcom BCM2711 quad core 1-8Gb RAM SoC USB3 GBE USB-C WiFi/BT - export BOARD_NAME="Raspberry Pi 4" - export BOARDFAMILY="bcm2711" --export KERNEL_TARGET="legacy,current,edge" --export FK__MACHINE_MODEL="Raspberry Pi 4 Model B" # flash kernel (FK) configuration -+export KERNEL_TARGET="ddk,current,edge" -+export FK__MACHINE_MODEL="Raspberry Pi 4 Model B" # this is passed to flash-kernel. - export ASOUND_STATE="asound.state.rpi" - - # configure stuff at the appropriate time in flash-kernel -@@ -24,14 +24,6 @@ pre_initramfs_flash_kernel__write_raspi_config() { - # bootloader logs to serial, second stage - # enable_uart=1 - -- # overclock. requires decent thermals. COMMENT OUT IF DON'T USE A GREAT COOLER OR HEATSINK. -- over_voltage=6 -- arm_freq=2000 -- -- # uncomment to disable wifi or bt. -- #dtoverlay=disable-wifi -- #dtoverlay=disable-bt -- - # gpu and 3d stuff. - gpu_mem=256 - dtoverlay=vc4-fkms-v3d -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index 55bad2a14..74e80cd03 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -1,10 +1,13 @@ - enable_extension "flash-kernel" - export LINUXFAMILY=bcm2711 - export ARCH=arm64 --export UEFI_FS_LABEL="rpicfg" # Windows/Mac users will see this if they mount the SD card. Configurable --export SKIP_BOOTSPLASH="yes" # video is init-ed before us --export KERNELDIR='linux-rpi' # Avoid sharing a source tree with others, until we know it's safe. --export FK__PUBLISHED_KERNEL_VERSION="raspi" # flash kernel (FK) configuration -+export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" # config is per family and branch -+export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" # patches per family and branch -+export UEFI_FS_LABEL="RPICFG" # Windows/Mac users will see this if they mount the SD card. UPPERCASE -+export SKIP_BOOTSPLASH="yes" # video is init-ed before us -+export KERNELDIR='linux-rpi' # Avoid sharing a source tree with others, until we know it's safe. -+export RASPI_DISTRO_KERNEL=no # use default distor kernel? default is no, build from source. -+export FK__PUBLISHED_KERNEL_VERSION="raspi" # flash kernel (FK) configuration - export FK__KERNEL_PACKAGES="" - export RASPI_ROOT_FS_LABEL="armbian" - export CPUMIN=500000 -@@ -13,23 +16,19 @@ export GOVERNOR=ondemand - - case "${BRANCH}" in - -- legacy) -- export RASPI_DISTRO_KERNEL=yes # This will cause board to include distro's prebuilt kernel, not from source -+ ddk) -+ # Use distro's default kernel (ddk). Disables kernel building. -+ export RASPI_DISTRO_KERNEL=yes - ;; - - current) -- export RASPI_DISTRO_KERNEL=no - export KERNELSOURCE='https://github.com/raspberrypi/linux' - export KERNELBRANCH="branch:rpi-5.15.y" -- export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" -- export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" - ;; -+ - edge) -- export RASPI_DISTRO_KERNEL=no - export KERNELSOURCE='https://github.com/raspberrypi/linux' - export KERNELBRANCH="branch:rpi-5.16.y" -- export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" -- export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" - ;; - esac - -@@ -56,7 +55,7 @@ pre_flash_kernel__symlink_dtb_and_kernel() { - Kernel-Flavors: any - EOD - -- ## @TODO: rpardini: a horrible hack. I'll sort this out together with overlays, later. -+ ## @TODO: rpardini: a horrible hack. I'll sort this out together with overlays, later. This is pressing. - local oneDTB dtbBase - for oneDTB in "${MOUNT}"/boot/dtb/broadcom/*.dtb; do - dtbBase=$(basename "${oneDTB}") - -From 1390b62e7c08fc0d0e834854ddd5d19c5243aa8d Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 15 Jan 2022 02:37:48 +0100 -Subject: [PATCH] armbian-next: shellfmt again after rebase - -Signed-off-by: Ricardo Pardini ---- - config/boards/rpi4b.wip | 2 +- - config/sources/families/bcm2711.conf | 40 ++++++++++++++++++------------------ - 2 files changed, 21 insertions(+), 21 deletions(-) - -diff --git a/config/boards/rpi4b.wip b/config/boards/rpi4b.wip -index 9afe14f75..56a785a25 100644 ---- a/config/boards/rpi4b.wip -+++ b/config/boards/rpi4b.wip -@@ -9,7 +9,7 @@ export ASOUND_STATE="asound.state.rpi" - pre_initramfs_flash_kernel__write_raspi_config() { - # for serial console, there is also 'BOOT_UART=1' in 'rpi-eeprom-config' but that is for an earlier stage. - # look at with it rpi-eeprom-config, change with 'EDITOR=nano rpi-eeprom-config --edit' -- cat <<-EOD >"${FIRMWARE_DIR}/config.txt" -+ cat <<- EOD > "${FIRMWARE_DIR}/config.txt" - [pi4] - max_framebuffers=2 - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index 31ecdf529..55bad2a14 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -13,24 +13,24 @@ export GOVERNOR=ondemand - - case "${BRANCH}" in - --legacy) -- export RASPI_DISTRO_KERNEL=yes # This will cause board to include distro's prebuilt kernel, not from source -- ;; -+ legacy) -+ export RASPI_DISTRO_KERNEL=yes # This will cause board to include distro's prebuilt kernel, not from source -+ ;; - --current) -- export RASPI_DISTRO_KERNEL=no -- export KERNELSOURCE='https://github.com/raspberrypi/linux' -- export KERNELBRANCH="branch:rpi-5.15.y" -- export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" -- export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" -- ;; --edge) -- export RASPI_DISTRO_KERNEL=no -- export KERNELSOURCE='https://github.com/raspberrypi/linux' -- export KERNELBRANCH="branch:rpi-5.16.y" -- export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" -- export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" -- ;; -+ current) -+ export RASPI_DISTRO_KERNEL=no -+ export KERNELSOURCE='https://github.com/raspberrypi/linux' -+ export KERNELBRANCH="branch:rpi-5.15.y" -+ export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" -+ export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" -+ ;; -+ edge) -+ export RASPI_DISTRO_KERNEL=no -+ export KERNELSOURCE='https://github.com/raspberrypi/linux' -+ export KERNELBRANCH="branch:rpi-5.16.y" -+ export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" -+ export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" -+ ;; - esac - - # Add a label to the root partition - this is common, should refactor into a separate segment -@@ -40,7 +40,7 @@ prepare_partitions_custom__add_rootfs_raspi_label_to_mkfs() { - } - - pre_initramfs_flash_kernel__write_raspi_cmdline() { -- cat <<-EOD >"${FIRMWARE_DIR}/cmdline.txt" -+ cat <<- EOD > "${FIRMWARE_DIR}/cmdline.txt" - root=LABEL=${RASPI_ROOT_FS_LABEL} rootfstype=ext4 elevator=deadline rootwait fixrtc cgroup_enable=memory cgroup_memory=1 console=tty1 - EOD - } -@@ -50,7 +50,7 @@ pre_flash_kernel__symlink_dtb_and_kernel() { - display_alert "Preparing DTBs and Kernel..." "bcm2711" "info" - mkdir -p "${MOUNT}"/etc/flash-kernel/dtbs - -- cat <<-EOD >>"${MOUNT}"/etc/flash-kernel/db -+ cat <<- EOD >> "${MOUNT}"/etc/flash-kernel/db - # Armbian kernels have a different flavour than expected. - Machine: ${FK__MACHINE_MODEL} - Kernel-Flavors: any -@@ -85,7 +85,7 @@ extension_prepare_config__prepare_rpi_flash_kernel() { - fi - - if [[ "${RASPI_DISTRO_KERNEL}" == "yes" ]]; then # and firmware. -- unset KERNELSOURCE # Make sure Armbian will not try to compile from source. -+ unset KERNELSOURCE # Make sure Armbian will not try to compile from source. - export FK__KERNEL_PACKAGES="${FK__KERNEL_PACKAGES} linux-tools-raspi linux-raspi linux-image-raspi " - # Ubuntu Impish+ split the kernel modules, add the extra ones too. - if [[ "$RELEASE" =~ ^(impish|jammy)$ ]]; then - -From 03b4020135b5915e54895f5dcd53250df25d57e5 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Tue, 11 Jan 2022 11:36:25 +0100 -Subject: [PATCH] armbian-next: manual merge (3) of all lib/*.sh changes - between revisions 1035905760884fbea567717684c38faae3ef28a4 and - e4e4ab0791e60e1e7a204dd0409fa29a1cf7a376 - -- missed non lib change on Several improvements for RPi builds (#3391) -- I just realized I will have to drop all non lib changes ---- - config/boards/rpi4b.wip | 2 +- - config/sources/families/bcm2711.conf | 35 +++++++++++++++++++++++------------ - lib/functions/compilation/debs.sh | 2 +- - lib/functions/general/downloads.sh | 19 +++++++++++-------- - lib/functions/general/host.sh | 14 +++++++++++--- - 5 files changed, 47 insertions(+), 25 deletions(-) - -diff --git a/config/boards/rpi4b.wip b/config/boards/rpi4b.wip -index 56a785a25..9afe14f75 100644 ---- a/config/boards/rpi4b.wip -+++ b/config/boards/rpi4b.wip -@@ -9,7 +9,7 @@ export ASOUND_STATE="asound.state.rpi" - pre_initramfs_flash_kernel__write_raspi_config() { - # for serial console, there is also 'BOOT_UART=1' in 'rpi-eeprom-config' but that is for an earlier stage. - # look at with it rpi-eeprom-config, change with 'EDITOR=nano rpi-eeprom-config --edit' -- cat <<- EOD > "${FIRMWARE_DIR}/config.txt" -+ cat <<-EOD >"${FIRMWARE_DIR}/config.txt" - [pi4] - max_framebuffers=2 - -diff --git a/config/sources/families/bcm2711.conf b/config/sources/families/bcm2711.conf -index 950e90b14..31ecdf529 100644 ---- a/config/sources/families/bcm2711.conf -+++ b/config/sources/families/bcm2711.conf -@@ -7,19 +7,30 @@ export KERNELDIR='linux-rpi' # Avoid sharing a source tree with o - export FK__PUBLISHED_KERNEL_VERSION="raspi" # flash kernel (FK) configuration - export FK__KERNEL_PACKAGES="" - export RASPI_ROOT_FS_LABEL="armbian" -+export CPUMIN=500000 -+export CPUMAX=2000000 -+export GOVERNOR=ondemand - - case "${BRANCH}" in - -- current) -- export RASPI_DISTRO_KERNEL=yes # This will cause board to include distro's prebuilt kernel, not from source -- ;; -+legacy) -+ export RASPI_DISTRO_KERNEL=yes # This will cause board to include distro's prebuilt kernel, not from source -+ ;; - -- edge) -- export RASPI_DISTRO_KERNEL=no -- export KERNELBRANCH="branch:linux-5.15.y" -- export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" -- export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" -- ;; -+current) -+ export RASPI_DISTRO_KERNEL=no -+ export KERNELSOURCE='https://github.com/raspberrypi/linux' -+ export KERNELBRANCH="branch:rpi-5.15.y" -+ export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" -+ export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" -+ ;; -+edge) -+ export RASPI_DISTRO_KERNEL=no -+ export KERNELSOURCE='https://github.com/raspberrypi/linux' -+ export KERNELBRANCH="branch:rpi-5.16.y" -+ export KERNELPATCHDIR="${LINUXFAMILY}-${BRANCH}" -+ export LINUXCONFIG="linux-${LINUXFAMILY}-${BRANCH}" -+ ;; - esac - - # Add a label to the root partition - this is common, should refactor into a separate segment -@@ -29,7 +40,7 @@ prepare_partitions_custom__add_rootfs_raspi_label_to_mkfs() { - } - - pre_initramfs_flash_kernel__write_raspi_cmdline() { -- cat <<- EOD > "${FIRMWARE_DIR}/cmdline.txt" -+ cat <<-EOD >"${FIRMWARE_DIR}/cmdline.txt" - root=LABEL=${RASPI_ROOT_FS_LABEL} rootfstype=ext4 elevator=deadline rootwait fixrtc cgroup_enable=memory cgroup_memory=1 console=tty1 - EOD - } -@@ -39,7 +50,7 @@ pre_flash_kernel__symlink_dtb_and_kernel() { - display_alert "Preparing DTBs and Kernel..." "bcm2711" "info" - mkdir -p "${MOUNT}"/etc/flash-kernel/dtbs - -- cat <<- EOD >> "${MOUNT}"/etc/flash-kernel/db -+ cat <<-EOD >>"${MOUNT}"/etc/flash-kernel/db - # Armbian kernels have a different flavour than expected. - Machine: ${FK__MACHINE_MODEL} - Kernel-Flavors: any -@@ -74,7 +85,7 @@ extension_prepare_config__prepare_rpi_flash_kernel() { - fi - - if [[ "${RASPI_DISTRO_KERNEL}" == "yes" ]]; then # and firmware. -- unset KERNELSOURCE # Make sure Armbian will not try to compile from source. -+ unset KERNELSOURCE # Make sure Armbian will not try to compile from source. - export FK__KERNEL_PACKAGES="${FK__KERNEL_PACKAGES} linux-tools-raspi linux-raspi linux-image-raspi " - # Ubuntu Impish+ split the kernel modules, add the extra ones too. - if [[ "$RELEASE" =~ ^(impish|jammy)$ ]]; then -diff --git a/lib/functions/compilation/debs.sh b/lib/functions/compilation/debs.sh -index d696b9d86..2932264c0 100644 ---- a/lib/functions/compilation/debs.sh -+++ b/lib/functions/compilation/debs.sh -@@ -14,7 +14,7 @@ compile_firmware() { - fetch_from_repo "https://github.com/armbian/firmware" "armbian-firmware-git" "branch:master" - - if [[ -n $FULL ]]; then -- fetch_from_repo "$MAINLINE_FIRMWARE_SOURCE" "linux-firmware-git" "branch:master" -+ fetch_from_repo "$MAINLINE_FIRMWARE_SOURCE" "linux-firmware-git" "branch:main" - # cp : create hardlinks - cp -af --reflink=auto "${SRC}"/cache/sources/linux-firmware-git/* "${firmwaretempdir}/${plugin_dir}/lib/firmware/" - fi -diff --git a/lib/functions/general/downloads.sh b/lib/functions/general/downloads.sh -index 74659ead8..5d36282c0 100644 ---- a/lib/functions/general/downloads.sh -+++ b/lib/functions/general/downloads.sh -@@ -1,19 +1,22 @@ - function webseed() { - # list of mirrors that host our files - unset text -- WEBSEED=("$(curl -s https://redirect.armbian.com/mirrors | jq '.[] |.[] | values' | grep https | awk '!a[$0]++')") -+ # Hardcoded to EU mirrors since -+ local CCODE=$(curl -s redirect.armbian.com/geoip | jq '.continent.code' -r) -+ WEBSEED=($(curl -s https://redirect.armbian.com/mirrors | jq -r '.'${CCODE}' | .[] | values')) - # aria2 simply split chunks based on sources count not depending on download speed - # when selecting china mirrors, use only China mirror, others are very slow there - if [[ $DOWNLOAD_MIRROR == china ]]; then -- WEBSEED=("https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/") -+ WEBSEED=( -+ https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/ -+ ) - elif [[ $DOWNLOAD_MIRROR == bfsu ]]; then -- WEBSEED=("https://mirrors.bfsu.edu.cn/armbian-releases/") -+ WEBSEED=( -+ https://mirrors.bfsu.edu.cn/armbian-releases/ -+ ) - fi -- for toolchain in "${WEBSEED[@]}"; do -- # use only live, tnahosting return ok also when file is absent -- if [[ $(wget -S --spider "${toolchain}${1}" 2>&1 > /dev/null | grep 'HTTP/1.1 200 OK') && ${toolchain} != *tnahosting* ]]; then -- text="${text} ${toolchain}${1}" -- fi -+ for toolchain in ${WEBSEED[@]}; do -+ text="${text} ${toolchain}${1}" - done - text="${text:1}" - echo "${text}" -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index 6766aa78a..d262d4baa 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -23,7 +23,7 @@ prepare_host_basic() { - - if [[ -n $install_pack ]]; then - display_alert "Installing basic packages" "$install_pack" -- apt-get -qq update && apt-get install -qq -y --no-install-recommends $install_pack -+ sudo bash -c "apt-get -qq update && apt-get install -qq -y --no-install-recommends $install_pack" - fi - - } -@@ -329,12 +329,15 @@ function fetch_and_build_host_tools() { - } - - # Installing debian packages in the armbian build system. --# The function accepts three optional parameters: -+# The function accepts four optional parameters: -+# autoupdate - If the installation list is not empty then update first. - # upgrade, clean - the same name for apt - # verbose - detailed log for the function - # - # list="pkg1 pkg2 pkg3 pkgbadname pkg-1.0 | pkg-2.0 pkg5 (>= 9)" - # install_pkg_deb upgrade verbose $list -+# or -+# install_pkg_deb autoupdate $list - # - # If the package has a bad name, we will see it in the log file. - # If there is an LOG_OUTPUT_FILE variable and it has a value as -@@ -347,6 +350,7 @@ install_pkg_deb() { - local list="" - local log_file - local for_install -+ local need_autoup=false - local need_upgrade=false - local need_clean=false - local need_verbose=false -@@ -359,6 +363,10 @@ install_pkg_deb() { - list=$( - for p in $*; do - case $p in -+ autoupdate) -+ need_autoup=true -+ continue -+ ;; - upgrade) - need_upgrade=true - continue -@@ -413,7 +421,7 @@ install_pkg_deb() { - fi - - if [ -n "$for_install" ]; then -- if ! $need_upgrade; then -+ if $need_autoup; then - apt-get -q update - apt-get -y upgrade - fi - -From 1f2306a3ad4f0abf5730bb5eb26a70c979d86ff3 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 9 Jan 2022 15:22:10 +0100 -Subject: [PATCH] rockship: fixes for `set -e` mode in rockship armhf family - and bsp tweaks - -Signed-off-by: Ricardo Pardini ---- - config/sources/families/rockchip.conf | 17 +++++++++++------ - 1 file changed, 11 insertions(+), 6 deletions(-) - -diff --git a/config/sources/families/rockchip.conf b/config/sources/families/rockchip.conf -index 089fa5450..5870ed1fb 100644 ---- a/config/sources/families/rockchip.conf -+++ b/config/sources/families/rockchip.conf -@@ -68,11 +68,15 @@ uboot_custom_postprocess() { - - family_tweaks() { - if [[ $BOARD == tinkerboard ]]; then -- chroot $SDCARD /bin/bash -c "apt-get -y -qq install rfkill bluetooth bluez bluez-tools" -- chroot $SDCARD /bin/bash -c "systemctl --no-reload enable tinker-bluetooth.service >/dev/null 2>&1" -- sed -i -e "/#load-module module-alsa-sink/r $SRC/packages/bsp/rockchip/pulseaudio.txt" $SDCARD/etc/pulse/default.pa > /dev/null 2>&1 -+ chroot $SDCARD /bin/bash -c "apt-get -y -qq install rfkill bluetooth bluez bluez-tools" 2>&1 -+ chroot $SDCARD /bin/bash -c "systemctl --no-reload enable tinker-bluetooth.service" 2>&1 -+ if [[ -f "$SDCARD/etc/pulse/default.pa" ]]; then -+ sed -i -e "/#load-module module-alsa-sink/r $SRC/packages/bsp/rockchip/pulseaudio.txt" "$SDCARD/etc/pulse/default.pa" 2>&1 -+ else -+ display_alert "Can't find pulseaudio config" "${BOARD} - family_tweaks" "warn" -+ fi - fi -- -+ return 0 - } - - family_tweaks_bsp() { -@@ -87,8 +91,8 @@ family_tweaks_bsp() { - install -m 755 $SRC/packages/bsp/rockchip/hdmi-hotplug $destination/usr/local/bin - - # Peripheral access for specific groups -- addgroup --system --quiet --gid 997 gpio -- addgroup --system --quiet --gid 998 i2c -+ addgroup --system --quiet --gid 997 gpio || display_alert "Failed to create 997 group gid" "gpio" "warn" -+ addgroup --system --quiet --gid 998 i2c || display_alert "Failed to create 997 group gid" "gpio" "warn" - cp $SRC/packages/bsp/rockchip/70-gpio.rules $destination/etc/udev/rules.d - cp $SRC/packages/bsp/rockchip/71-i2c.rules $destination/etc/udev/rules.d - -@@ -105,4 +109,5 @@ family_tweaks_bsp() { - mkdir -p $destination/etc/initramfs-tools/hooks - install -m 550 $SRC/packages/bsp/rockchip/ap6330-initramfs-firmware $destination/etc/initramfs-tools/hooks - -+ return 0 # exit with success - } - -From 7bfb222e11c2a658ce29df17d17981fce8e03382 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 9 Jan 2022 15:21:40 +0100 -Subject: [PATCH] armhf: enable building armhf targets on amd64 using system - toolchains - -- SKIP_EXTERNAL_TOOLCHAINS=yes on amd64 should use the same system toolchains as an arm64 build - -Signed-off-by: Ricardo Pardini ---- - config/sources/armhf.conf | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/config/sources/armhf.conf b/config/sources/armhf.conf -index 89ce1441a..2d4682408 100644 ---- a/config/sources/armhf.conf -+++ b/config/sources/armhf.conf -@@ -43,4 +43,8 @@ fi - [[ -z $KERNELSOURCE ]] && KERNELSOURCE=$MAINLINE_KERNEL_SOURCE - [[ -z $KERNELBRANCH ]] && KERNELBRANCH='branch:linux-5.4.y' - -+## System toolchains don't have the -none- variant, remove it -+[[ "${SKIP_EXTERNAL_TOOLCHAINS}" == "yes" ]] && [[ "${UBOOT_COMPILER}" = *none* ]] && UBOOT_COMPILER="${UBOOT_COMPILER//-none-/-}" -+[[ "${SKIP_EXTERNAL_TOOLCHAINS}" == "yes" ]] && [[ "${ATF_COMPILER}" = *none* ]] && ATF_COMPILER="${ATF_COMPILER//-none-/-}" -+ - true # don't fail due to conditional above. - -From 79348c956a29a2077e017c2d83e129beed99208d Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 9 Jan 2022 15:20:50 +0100 -Subject: [PATCH] logging: better logging about family_tweaks and - family_tweaks_bsp - -Signed-off-by: Ricardo Pardini ---- - lib/functions/bsp/bsp-cli.sh | 8 +++++++- - lib/functions/rootfs/distro-agnostic.sh | 8 +++++--- - 2 files changed, 12 insertions(+), 4 deletions(-) - -diff --git a/lib/functions/bsp/bsp-cli.sh b/lib/functions/bsp/bsp-cli.sh -index d4bb3daab..71f0ea765 100644 ---- a/lib/functions/bsp/bsp-cli.sh -+++ b/lib/functions/bsp/bsp-cli.sh -@@ -285,7 +285,11 @@ create_board_package() { - sed -i 's/#no-auto-down/no-auto-down/g' "${destination}"/etc/network/interfaces.default - - # execute $LINUXFAMILY-specific tweaks -- [[ $(type -t family_tweaks_bsp) == function ]] && family_tweaks_bsp 2>&1 -+ if [[ $(type -t family_tweaks_bsp) == function ]]; then -+ display_alert "Running family_tweaks_bsp" "${LINUXFAMILY}" "debug" -+ family_tweaks_bsp 2>&1 -+ display_alert "Done with family_tweaks_bsp" "${LINUXFAMILY}" "debug" -+ fi - - call_extension_method "post_family_tweaks_bsp" << 'POST_FAMILY_TWEAKS_BSP' - *family_tweaks_bsp overrrides what is in the config, so give it a chance to override the family tweaks* -@@ -304,6 +308,8 @@ POST_FAMILY_TWEAKS_BSP - mkdir -p "${DEB_STORAGE}/" - rsync --remove-source-files -rq "${destination}.deb" "${DEB_STORAGE}/" 2>&1 - -+ display_alert "Done building BSP CLI package" "${destination}" "debug" -+ - # cleanup - rm -rf ${bsptempdir} - } -diff --git a/lib/functions/rootfs/distro-agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -index 6249376b7..d348e4d39 100644 ---- a/lib/functions/rootfs/distro-agnostic.sh -+++ b/lib/functions/rootfs/distro-agnostic.sh -@@ -397,10 +397,12 @@ POST_INSTALL_KERNEL_DEBS - # copy boot splash images - cp "${SRC}"/packages/blobs/splash/armbian-u-boot.bmp "${SDCARD}"/boot/boot.bmp - -- display_alert "Running tweaks" "$BOARD :: $LINUXFAMILY" "info" -- - # execute $LINUXFAMILY-specific tweaks -- [[ $(type -t family_tweaks) == function ]] && family_tweaks -+ if [[ $(type -t family_tweaks) == function ]]; then -+ display_alert "Running family_tweaks" "$BOARD :: $LINUXFAMILY" "debug" -+ family_tweaks -+ display_alert "Done with family_tweaks" "$BOARD :: $LINUXFAMILY" "debug" -+ fi - - call_extension_method "post_family_tweaks" << 'FAMILY_TWEAKS' - *customize the tweaks made by $LINUXFAMILY-specific family_tweaks* - -From eca8ea1ba1b44474c3fd1baae9bdacae5ef7e431 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 8 Jan 2022 21:26:08 +0100 -Subject: [PATCH] kernel: unblock cross compilation, warn about headers package - -Signed-off-by: Ricardo Pardini ---- - lib/functions/compilation/kernel.sh | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index 291cf7285..e0bce0699 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -95,8 +95,7 @@ compile_kernel() { - toolchain=$(find_toolchain "$KERNEL_COMPILER" "$KERNEL_USE_GCC") - [[ -z $toolchain ]] && exit_with_error "Could not find required toolchain" "${KERNEL_COMPILER}gcc $KERNEL_USE_GCC" - else -- display_alert "'Reverse Cross compilation'" "target ${ARCH} on host $(dpkg --print-architecture)" -- exit_with_error "Architecture [$ARCH] is not supported" -+ display_alert "Unhandled cross compilation combo" "target ${ARCH} on host $(dpkg --print-architecture) - headers might not work" "warn" - fi - - kernel_compiler_version="$(eval env PATH="${toolchain}:${PATH}" "${KERNEL_COMPILER}gcc" -dumpversion)" - -From 739a4fe4d589a9d9ce58a725ed1d7db76b9aab3b Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 8 Jan 2022 20:02:23 +0100 -Subject: [PATCH] logging: fixes for sunxi/megous stuff with `set -e` - -Signed-off-by: Ricardo Pardini ---- - config/sources/families/include/sunxi64_common.inc | 6 ++++-- - config/sources/families/include/sunxi_common.inc | 6 ++++-- - lib/functions/general/git.sh | 8 ++++---- - 3 files changed, 12 insertions(+), 8 deletions(-) - -diff --git a/config/sources/families/include/sunxi64_common.inc b/config/sources/families/include/sunxi64_common.inc -index 4d16fa449..4c44d37bf 100644 ---- a/config/sources/families/include/sunxi64_common.inc -+++ b/config/sources/families/include/sunxi64_common.inc -@@ -74,6 +74,7 @@ setup_write_uboot_platform() { - - # default settings for kernel variables of the original kernel - # VAR_SHALLOW_ORIGINAL=var_origin_kernel -+# Note: rpardini: this is called via VAR_SHALLOW_ORIGINAL during fetch_from_repo via waiter_local_repo - var_origin_kernel() { - url=$MAINLINE_KERNEL_SOURCE - name='origin' -@@ -81,8 +82,7 @@ var_origin_kernel() { - start_tag="v$KERNEL_VERSION_LEVEL" - - # checking the reachability of the initial tag -- if [ "$(git ls-remote --tags $url $start_tag | -- awk -F'/' '{if (NR == 1) print $NF}')" != "$start_tag" ]; then -+ if [ "$(git ls-remote --tags $url $start_tag | awk -F'/' '{if (NR == 1) print $NF}' || true)" != "$start_tag" ]; then - exit 177 - fi - -@@ -90,4 +90,6 @@ var_origin_kernel() { - # a bifurcation point at which all previous merge branches converge. - # This is due to the subsequent extraction of `megous` - [ "$KERNEL_VERSION_LEVEL" == "5.12" ] && start_tag="v5.12-rc7" -+ -+ return 0 # don't fail due to short-circuit above - } -diff --git a/config/sources/families/include/sunxi_common.inc b/config/sources/families/include/sunxi_common.inc -index 7b9907a58..641cceb1c 100644 ---- a/config/sources/families/include/sunxi_common.inc -+++ b/config/sources/families/include/sunxi_common.inc -@@ -81,6 +81,7 @@ setup_write_uboot_platform() { - - # default settings for kernel variables of the original kernel - # VAR_SHALLOW_ORIGINAL=var_origin_kernel -+# Note: rpardini: this is called via VAR_SHALLOW_ORIGINAL during fetch_from_repo via waiter_local_repo - var_origin_kernel() { - url=$MAINLINE_KERNEL_SOURCE - name='origin' -@@ -88,8 +89,7 @@ var_origin_kernel() { - start_tag="v$KERNEL_VERSION_LEVEL" - - # checking the reachability of the initial tag -- if [ "$(git ls-remote --tags $url $start_tag | -- awk -F'/' '{if (NR == 1) print $NF}')" != "$start_tag" ]; then -+ if [ "$(git ls-remote --tags $url $start_tag | awk -F'/' '{if (NR == 1) print $NF}' || true)" != "$start_tag" ]; then - exit 177 - fi - -@@ -97,4 +97,6 @@ var_origin_kernel() { - # a bifurcation point at which all previous merge branches converge. - # This is due to the subsequent extraction of `megous` - [ "$KERNEL_VERSION_LEVEL" == "5.12" ] && start_tag="v5.12-rc7" -+ -+ return 0 # don't fail due to short-circuit above - } -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 9fb0dfcf3..f66b5ea90 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -74,7 +74,7 @@ waiter_local_repo() { - - # Check the exception for 5.15 sunxi. We will remove this after a while. - if [ "$dir" == "linux-mainline/5.15" ] && -- [ "$(git remote show | grep megous)" == "megous" ]; then -+ [ "$(git remote show | grep megous || true)" == "megous" ]; then - display_alert "Remove mistakenly created and excessively large" "$dir" "info" - rm -rf .git ./* - fi -@@ -84,12 +84,12 @@ waiter_local_repo() { - - # Run in the sub shell to avoid mixing environment variables. - if [ -n "$VAR_SHALLOW_ORIGINAL" ]; then -+ display_alert "Unshallowing original:" "${VAR_SHALLOW_ORIGINAL}" "debug" - ( - $VAR_SHALLOW_ORIGINAL - - display_alert "Add original git sources" "$dir $name/$branch" "info" -- if [ "$(git ls-remote -h $url $branch | -- awk -F'/' '{if (NR == 1) print $NF}')" != "$branch" ]; then -+ if [ "$(git ls-remote -h $url $branch | awk -F'/' '{if (NR == 1) print $NF}' || true)" != "$branch" ]; then - display_alert "Bad $branch for $url in $VAR_SHALLOW_ORIGINAL" - exit 177 - fi -@@ -109,7 +109,7 @@ waiter_local_repo() { - clean_up_repo $work_dir - fi - -- if [ "$name" != "$(git remote show | grep $name)" ]; then -+ if [ "$name" != "$(git remote show | grep $name || true)" ]; then - git remote add -t $branch $name $url - fi - - -From 9fc0bd5788857c43c3f4d6e217928539ccd894a9 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 8 Jan 2022 15:01:03 +0100 -Subject: [PATCH] logging: fix shellcheck references generation - -Signed-off-by: Ricardo Pardini ---- - lib/library-functions.sh | 94 ++++++++++++++++++++++++------------------------ - lib/tools/gen-library.sh | 2 +- - 2 files changed, 48 insertions(+), 48 deletions(-) - -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 46f984a97..564af3c42 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -3,237 +3,237 @@ - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/configuration/menu.sh --# shellcheck source=functions/configuration/menu.sh -+# shellcheck source=lib/functions/configuration/menu.sh - source "${SRC}"/lib/functions/configuration/menu.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/configuration/interactive.sh --# shellcheck source=functions/configuration/interactive.sh -+# shellcheck source=lib/functions/configuration/interactive.sh - source "${SRC}"/lib/functions/configuration/interactive.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/configuration/config-desktop.sh --# shellcheck source=functions/configuration/config-desktop.sh -+# shellcheck source=lib/functions/configuration/config-desktop.sh - source "${SRC}"/lib/functions/configuration/config-desktop.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/configuration/main-config.sh --# shellcheck source=functions/configuration/main-config.sh -+# shellcheck source=lib/functions/configuration/main-config.sh - source "${SRC}"/lib/functions/configuration/main-config.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/configuration/aggregation.sh --# shellcheck source=functions/configuration/aggregation.sh -+# shellcheck source=lib/functions/configuration/aggregation.sh - source "${SRC}"/lib/functions/configuration/aggregation.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/create-cache.sh --# shellcheck source=functions/rootfs/create-cache.sh -+# shellcheck source=lib/functions/rootfs/create-cache.sh - source "${SRC}"/lib/functions/rootfs/create-cache.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/apt.sh --# shellcheck source=functions/rootfs/apt.sh -+# shellcheck source=lib/functions/rootfs/apt.sh - source "${SRC}"/lib/functions/rootfs/apt.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/distro-specific.sh --# shellcheck source=functions/rootfs/distro-specific.sh -+# shellcheck source=lib/functions/rootfs/distro-specific.sh - source "${SRC}"/lib/functions/rootfs/distro-specific.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/rootfs-desktop.sh --# shellcheck source=functions/rootfs/rootfs-desktop.sh -+# shellcheck source=lib/functions/rootfs/rootfs-desktop.sh - source "${SRC}"/lib/functions/rootfs/rootfs-desktop.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/post-tweaks.sh --# shellcheck source=functions/rootfs/post-tweaks.sh -+# shellcheck source=lib/functions/rootfs/post-tweaks.sh - source "${SRC}"/lib/functions/rootfs/post-tweaks.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/customize.sh --# shellcheck source=functions/rootfs/customize.sh -+# shellcheck source=lib/functions/rootfs/customize.sh - source "${SRC}"/lib/functions/rootfs/customize.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/distro-agnostic.sh --# shellcheck source=functions/rootfs/distro-agnostic.sh -+# shellcheck source=lib/functions/rootfs/distro-agnostic.sh - source "${SRC}"/lib/functions/rootfs/distro-agnostic.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/boot_logo.sh --# shellcheck source=functions/rootfs/boot_logo.sh -+# shellcheck source=lib/functions/rootfs/boot_logo.sh - source "${SRC}"/lib/functions/rootfs/boot_logo.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/general/chroot-helpers.sh --# shellcheck source=functions/general/chroot-helpers.sh -+# shellcheck source=lib/functions/general/chroot-helpers.sh - source "${SRC}"/lib/functions/general/chroot-helpers.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/general/repo.sh --# shellcheck source=functions/general/repo.sh -+# shellcheck source=lib/functions/general/repo.sh - source "${SRC}"/lib/functions/general/repo.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/general/cleaning.sh --# shellcheck source=functions/general/cleaning.sh -+# shellcheck source=lib/functions/general/cleaning.sh - source "${SRC}"/lib/functions/general/cleaning.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/general/git.sh --# shellcheck source=functions/general/git.sh -+# shellcheck source=lib/functions/general/git.sh - source "${SRC}"/lib/functions/general/git.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/general/host.sh --# shellcheck source=functions/general/host.sh -+# shellcheck source=lib/functions/general/host.sh - source "${SRC}"/lib/functions/general/host.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/general/downloads.sh --# shellcheck source=functions/general/downloads.sh -+# shellcheck source=lib/functions/general/downloads.sh - source "${SRC}"/lib/functions/general/downloads.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/multi/build-all.sh --# shellcheck source=functions/multi/build-all.sh -+# shellcheck source=lib/functions/multi/build-all.sh - source "${SRC}"/lib/functions/multi/build-all.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/cli/utils-cli.sh --# shellcheck source=functions/cli/utils-cli.sh -+# shellcheck source=lib/functions/cli/utils-cli.sh - source "${SRC}"/lib/functions/cli/utils-cli.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/cli/cli-entrypoint.sh --# shellcheck source=functions/cli/cli-entrypoint.sh -+# shellcheck source=lib/functions/cli/cli-entrypoint.sh - source "${SRC}"/lib/functions/cli/cli-entrypoint.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/bsp/bsp-cli.sh --# shellcheck source=functions/bsp/bsp-cli.sh -+# shellcheck source=lib/functions/bsp/bsp-cli.sh - source "${SRC}"/lib/functions/bsp/bsp-cli.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/bsp/bsp-desktop.sh --# shellcheck source=functions/bsp/bsp-desktop.sh -+# shellcheck source=lib/functions/bsp/bsp-desktop.sh - source "${SRC}"/lib/functions/bsp/bsp-desktop.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/bsp/utils-bsp.sh --# shellcheck source=functions/bsp/utils-bsp.sh -+# shellcheck source=lib/functions/bsp/utils-bsp.sh - source "${SRC}"/lib/functions/bsp/utils-bsp.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/image/loop.sh --# shellcheck source=functions/image/loop.sh -+# shellcheck source=lib/functions/image/loop.sh - source "${SRC}"/lib/functions/image/loop.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/image/initrd.sh --# shellcheck source=functions/image/initrd.sh -+# shellcheck source=lib/functions/image/initrd.sh - source "${SRC}"/lib/functions/image/initrd.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/image/rootfs-to-image.sh --# shellcheck source=functions/image/rootfs-to-image.sh -+# shellcheck source=lib/functions/image/rootfs-to-image.sh - source "${SRC}"/lib/functions/image/rootfs-to-image.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/image/partitioning.sh --# shellcheck source=functions/image/partitioning.sh -+# shellcheck source=lib/functions/image/partitioning.sh - source "${SRC}"/lib/functions/image/partitioning.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/main/rootfs-image.sh --# shellcheck source=functions/main/rootfs-image.sh -+# shellcheck source=lib/functions/main/rootfs-image.sh - source "${SRC}"/lib/functions/main/rootfs-image.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/main/config-prepare.sh --# shellcheck source=functions/main/config-prepare.sh -+# shellcheck source=lib/functions/main/config-prepare.sh - source "${SRC}"/lib/functions/main/config-prepare.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/main/default-build.sh --# shellcheck source=functions/main/default-build.sh -+# shellcheck source=lib/functions/main/default-build.sh - source "${SRC}"/lib/functions/main/default-build.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/sources.sh --# shellcheck source=functions/compilation/sources.sh -+# shellcheck source=lib/functions/compilation/sources.sh - source "${SRC}"/lib/functions/compilation/sources.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/uboot.sh --# shellcheck source=functions/compilation/uboot.sh -+# shellcheck source=lib/functions/compilation/uboot.sh - source "${SRC}"/lib/functions/compilation/uboot.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/atf.sh --# shellcheck source=functions/compilation/atf.sh -+# shellcheck source=lib/functions/compilation/atf.sh - source "${SRC}"/lib/functions/compilation/atf.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/utils-compilation.sh --# shellcheck source=functions/compilation/utils-compilation.sh -+# shellcheck source=lib/functions/compilation/utils-compilation.sh - source "${SRC}"/lib/functions/compilation/utils-compilation.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/kernel.sh --# shellcheck source=functions/compilation/kernel.sh -+# shellcheck source=lib/functions/compilation/kernel.sh - source "${SRC}"/lib/functions/compilation/kernel.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/debs.sh --# shellcheck source=functions/compilation/debs.sh -+# shellcheck source=lib/functions/compilation/debs.sh - source "${SRC}"/lib/functions/compilation/debs.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/extra-drivers.sh --# shellcheck source=functions/compilation/extra-drivers.sh -+# shellcheck source=lib/functions/compilation/extra-drivers.sh - source "${SRC}"/lib/functions/compilation/extra-drivers.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/patching.sh --# shellcheck source=functions/compilation/patching.sh -+# shellcheck source=lib/functions/compilation/patching.sh - source "${SRC}"/lib/functions/compilation/patching.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/logging/capture.sh --# shellcheck source=functions/logging/capture.sh -+# shellcheck source=lib/functions/logging/capture.sh - source "${SRC}"/lib/functions/logging/capture.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/logging/runners.sh --# shellcheck source=functions/logging/runners.sh -+# shellcheck source=lib/functions/logging/runners.sh - source "${SRC}"/lib/functions/logging/runners.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/logging/errors.sh --# shellcheck source=functions/logging/errors.sh -+# shellcheck source=lib/functions/logging/errors.sh - source "${SRC}"/lib/functions/logging/errors.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/logging/logging.sh --# shellcheck source=functions/logging/logging.sh -+# shellcheck source=lib/functions/logging/logging.sh - source "${SRC}"/lib/functions/logging/logging.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/logging/traps.sh --# shellcheck source=functions/logging/traps.sh -+# shellcheck source=lib/functions/logging/traps.sh - source "${SRC}"/lib/functions/logging/traps.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/extras/fel.sh --# shellcheck source=functions/extras/fel.sh -+# shellcheck source=lib/functions/extras/fel.sh - source "${SRC}"/lib/functions/extras/fel.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/extras/buildpkg.sh --# shellcheck source=functions/extras/buildpkg.sh -+# shellcheck source=lib/functions/extras/buildpkg.sh - source "${SRC}"/lib/functions/extras/buildpkg.sh - - -diff --git a/lib/tools/gen-library.sh b/lib/tools/gen-library.sh -index 10a62fa70..fd6f200e7 100755 ---- a/lib/tools/gen-library.sh -+++ b/lib/tools/gen-library.sh -@@ -18,7 +18,7 @@ cat <<- AUTOGEN_INCLUDES_HEADER > "${TARGET_SH}" - AUTOGEN_INCLUDES_HEADER - - find lib/functions -type f -name \*.sh | while read -r path; do -- ref="$(echo -n "${path}" | sed -e 's/lib\///g')" -+ ref="$(echo -n "${path}")" - cat <<- AUTOGEN_INCLUDES_EACH >> "${TARGET_SH}" - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### ${path} - -From 49cdd43f9fa208e13607eae9dad138d4d49a0a5f Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 8 Jan 2022 13:56:36 +0100 -Subject: [PATCH] logging: manual merge (2) of all lib/*.sh changes between - revisions 117633687e9942ade647a8b7d3f80f01e3145193 and - 30830388555e463402161a6e0d6993dd6fb0544e - -Signed-off-by: Ricardo Pardini ---- - lib/functions/cli/utils-cli.sh | 8 ++++---- - lib/functions/general/host.sh | 14 ++++++++------ - 2 files changed, 12 insertions(+), 10 deletions(-) - -diff --git a/lib/functions/cli/utils-cli.sh b/lib/functions/cli/utils-cli.sh -index 593237601..d9f6a571c 100644 ---- a/lib/functions/cli/utils-cli.sh -+++ b/lib/functions/cli/utils-cli.sh -@@ -93,12 +93,12 @@ function handle_docker_vagrant() { - [[ "${codename}" =~ focal|hirsute ]] && DOCKER_BINARY="docker containerd docker.io" - - display_alert "Docker not installed." "Installing" "Info" -- echo "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/${codeid} ${codename} stable" > /etc/apt/sources.list.d/docker.list -+ sudo bash -c "echo \"deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/${codeid} ${codename} stable\" > /etc/apt/sources.list.d/docker.list" - -- curl -fsSL "https://download.docker.com/linux/${codeid}/gpg" | apt-key add -qq - > /dev/null 2>&1 -+ sudo bash -c "curl -fsSL \"https://download.docker.com/linux/${codeid}/gpg\" | apt-key add -qq - > /dev/null 2>&1 " - export DEBIAN_FRONTEND=noninteractive -- apt-get update -- apt-get install -y -qq --no-install-recommends ${DOCKER_BINARY} -+ sudo apt-get update -+ sudo apt-get install -y -qq --no-install-recommends ${DOCKER_BINARY} - display_alert "Add yourself to docker group to avoid root privileges" "" "wrn" - "${SRC}/compile.sh" "$@" - exit $? -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index ef681d301..6766aa78a 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -178,7 +178,7 @@ prepare_host() { - sudo echo "apt-cacher-ng apt-cacher-ng/tunnelenable boolean false" | sudo debconf-set-selections - - LOG_OUTPUT_FILE="${DEST}"/${LOG_SUBPATH}/hostdeps.log -- install_pkg_deb "upgrade $hostdeps" -+ install_pkg_deb "$hostdeps" - unset LOG_OUTPUT_FILE - - update-ccache-symlinks -@@ -383,11 +383,10 @@ install_pkg_deb() { - log_file="${SRC}/output/${LOG_SUBPATH}/install.log" - fi - -- apt-get -q update -- if [ "$?" != "0" ]; then echo "apt cannot update" >> $log_file; fi -+ # This is necessary first when there is no apt cache. - if $need_upgrade; then -- apt-get -y upgrade -- if [ "$?" != "0" ]; then echo "apt cannot upgrade" >> $log_file; fi -+ apt-get -q update || echo "apt cannot update" >> $tmp_file -+ apt-get -y upgrade || echo "apt cannot upgrade" >> $tmp_file - fi - - # If the package is not installed, check the latest -@@ -414,7 +413,10 @@ install_pkg_deb() { - fi - - if [ -n "$for_install" ]; then -- -+ if ! $need_upgrade; then -+ apt-get -q update -+ apt-get -y upgrade -+ fi - apt-get install -qq -y --no-install-recommends $for_install - echo -e "\nPackages installed:" >> $log_file - dpkg-query -W \ - -From 496713bb6f122440105626db767b39db7dd41e2f Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 8 Jan 2022 13:35:51 +0100 -Subject: [PATCH] logging: renaming function files a bit more consistently - -Signed-off-by: Ricardo Pardini ---- - lib/functions/cli/{cli-utils.sh => utils-cli.sh} | 0 - .../{compilation-utils.sh => utils-compilation.sh} | 0 - .../{distro_agnostic.sh => distro-agnostic.sh} | 0 - .../{distro_specific.sh => distro-specific.sh} | 0 - lib/library-functions.sh | 28 +++++++++++----------- - 5 files changed, 14 insertions(+), 14 deletions(-) - -diff --git a/lib/functions/cli/cli-utils.sh b/lib/functions/cli/utils-cli.sh -similarity index 100% -rename from lib/functions/cli/cli-utils.sh -rename to lib/functions/cli/utils-cli.sh -diff --git a/lib/functions/compilation/compilation-utils.sh b/lib/functions/compilation/utils-compilation.sh -similarity index 100% -rename from lib/functions/compilation/compilation-utils.sh -rename to lib/functions/compilation/utils-compilation.sh -diff --git a/lib/functions/rootfs/distro_agnostic.sh b/lib/functions/rootfs/distro-agnostic.sh -similarity index 100% -rename from lib/functions/rootfs/distro_agnostic.sh -rename to lib/functions/rootfs/distro-agnostic.sh -diff --git a/lib/functions/rootfs/distro_specific.sh b/lib/functions/rootfs/distro-specific.sh -similarity index 100% -rename from lib/functions/rootfs/distro_specific.sh -rename to lib/functions/rootfs/distro-specific.sh -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 61f800a56..46f984a97 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -37,20 +37,15 @@ set -e # no errors tolerated. set -e is invoked before each sourced file to make - source "${SRC}"/lib/functions/rootfs/apt.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/rootfs/distro_agnostic.sh --# shellcheck source=functions/rootfs/distro_agnostic.sh --source "${SRC}"/lib/functions/rootfs/distro_agnostic.sh -+### lib/functions/rootfs/distro-specific.sh -+# shellcheck source=functions/rootfs/distro-specific.sh -+source "${SRC}"/lib/functions/rootfs/distro-specific.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/rootfs-desktop.sh - # shellcheck source=functions/rootfs/rootfs-desktop.sh - source "${SRC}"/lib/functions/rootfs/rootfs-desktop.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/rootfs/distro_specific.sh --# shellcheck source=functions/rootfs/distro_specific.sh --source "${SRC}"/lib/functions/rootfs/distro_specific.sh -- - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/post-tweaks.sh - # shellcheck source=functions/rootfs/post-tweaks.sh -@@ -61,6 +56,11 @@ set -e # no errors tolerated. set -e is invoked before each sourced file to make - # shellcheck source=functions/rootfs/customize.sh - source "${SRC}"/lib/functions/rootfs/customize.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. -+### lib/functions/rootfs/distro-agnostic.sh -+# shellcheck source=functions/rootfs/distro-agnostic.sh -+source "${SRC}"/lib/functions/rootfs/distro-agnostic.sh -+ - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/boot_logo.sh - # shellcheck source=functions/rootfs/boot_logo.sh -@@ -102,9 +102,9 @@ set -e # no errors tolerated. set -e is invoked before each sourced file to make - source "${SRC}"/lib/functions/multi/build-all.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/cli/cli-utils.sh --# shellcheck source=functions/cli/cli-utils.sh --source "${SRC}"/lib/functions/cli/cli-utils.sh -+### lib/functions/cli/utils-cli.sh -+# shellcheck source=functions/cli/utils-cli.sh -+source "${SRC}"/lib/functions/cli/utils-cli.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/cli/cli-entrypoint.sh -@@ -177,9 +177,9 @@ set -e # no errors tolerated. set -e is invoked before each sourced file to make - source "${SRC}"/lib/functions/compilation/atf.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/compilation/compilation-utils.sh --# shellcheck source=functions/compilation/compilation-utils.sh --source "${SRC}"/lib/functions/compilation/compilation-utils.sh -+### lib/functions/compilation/utils-compilation.sh -+# shellcheck source=functions/compilation/utils-compilation.sh -+source "${SRC}"/lib/functions/compilation/utils-compilation.sh - - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/kernel.sh - -From 3c36aa6e495d06ab1fc599585e14c3a66ec14f03 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 8 Jan 2022 01:46:22 +0100 -Subject: [PATCH] logging: removing leftover empty file after all the moving - around - -Signed-off-by: Ricardo Pardini ---- - lib/functions/image.sh | 1 - - lib/library-functions.sh | 5 ----- - 2 files changed, 6 deletions(-) - -diff --git a/lib/functions/image.sh b/lib/functions/image.sh -deleted file mode 100644 -index 8b1378917..000000000 ---- a/lib/functions/image.sh -+++ /dev/null -@@ -1 +0,0 @@ -- -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 1f4a18415..61f800a56 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -146,11 +146,6 @@ set -e # no errors tolerated. set -e is invoked before each sourced file to make - # shellcheck source=functions/image/partitioning.sh - source "${SRC}"/lib/functions/image/partitioning.sh - --set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. --### lib/functions/image.sh --# shellcheck source=functions/image.sh --source "${SRC}"/lib/functions/image.sh -- - set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/main/rootfs-image.sh - # shellcheck source=functions/main/rootfs-image.sh - -From 5d19b3686e732d07ac0d49abba76e03b42f4309e Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 8 Jan 2022 01:16:55 +0100 -Subject: [PATCH] logging: really insist on set -e during library loading - -Signed-off-by: Ricardo Pardini ---- - lib/library-functions.sh | 54 +++++++++++++++++++++++++++++++++++++++++++++--- - lib/tools/gen-library.sh | 6 +++--- - 2 files changed, 54 insertions(+), 6 deletions(-) - -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 3a3953118..1f4a18415 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -1,198 +1,246 @@ - #!/usr/bin/env bash - # This file is/was autogenerated by lib/tools/gen-library.sh; don't modify manually - --set -e # no errors tolerated -- -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/configuration/menu.sh - # shellcheck source=functions/configuration/menu.sh - source "${SRC}"/lib/functions/configuration/menu.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/configuration/interactive.sh - # shellcheck source=functions/configuration/interactive.sh - source "${SRC}"/lib/functions/configuration/interactive.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/configuration/config-desktop.sh - # shellcheck source=functions/configuration/config-desktop.sh - source "${SRC}"/lib/functions/configuration/config-desktop.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/configuration/main-config.sh - # shellcheck source=functions/configuration/main-config.sh - source "${SRC}"/lib/functions/configuration/main-config.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/configuration/aggregation.sh - # shellcheck source=functions/configuration/aggregation.sh - source "${SRC}"/lib/functions/configuration/aggregation.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/create-cache.sh - # shellcheck source=functions/rootfs/create-cache.sh - source "${SRC}"/lib/functions/rootfs/create-cache.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/apt.sh - # shellcheck source=functions/rootfs/apt.sh - source "${SRC}"/lib/functions/rootfs/apt.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/distro_agnostic.sh - # shellcheck source=functions/rootfs/distro_agnostic.sh - source "${SRC}"/lib/functions/rootfs/distro_agnostic.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/rootfs-desktop.sh - # shellcheck source=functions/rootfs/rootfs-desktop.sh - source "${SRC}"/lib/functions/rootfs/rootfs-desktop.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/distro_specific.sh - # shellcheck source=functions/rootfs/distro_specific.sh - source "${SRC}"/lib/functions/rootfs/distro_specific.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/post-tweaks.sh - # shellcheck source=functions/rootfs/post-tweaks.sh - source "${SRC}"/lib/functions/rootfs/post-tweaks.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/customize.sh - # shellcheck source=functions/rootfs/customize.sh - source "${SRC}"/lib/functions/rootfs/customize.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/rootfs/boot_logo.sh - # shellcheck source=functions/rootfs/boot_logo.sh - source "${SRC}"/lib/functions/rootfs/boot_logo.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/general/chroot-helpers.sh - # shellcheck source=functions/general/chroot-helpers.sh - source "${SRC}"/lib/functions/general/chroot-helpers.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/general/repo.sh - # shellcheck source=functions/general/repo.sh - source "${SRC}"/lib/functions/general/repo.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/general/cleaning.sh - # shellcheck source=functions/general/cleaning.sh - source "${SRC}"/lib/functions/general/cleaning.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/general/git.sh - # shellcheck source=functions/general/git.sh - source "${SRC}"/lib/functions/general/git.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/general/host.sh - # shellcheck source=functions/general/host.sh - source "${SRC}"/lib/functions/general/host.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/general/downloads.sh - # shellcheck source=functions/general/downloads.sh - source "${SRC}"/lib/functions/general/downloads.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/multi/build-all.sh - # shellcheck source=functions/multi/build-all.sh - source "${SRC}"/lib/functions/multi/build-all.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/cli/cli-utils.sh - # shellcheck source=functions/cli/cli-utils.sh - source "${SRC}"/lib/functions/cli/cli-utils.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/cli/cli-entrypoint.sh - # shellcheck source=functions/cli/cli-entrypoint.sh - source "${SRC}"/lib/functions/cli/cli-entrypoint.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/bsp/bsp-cli.sh - # shellcheck source=functions/bsp/bsp-cli.sh - source "${SRC}"/lib/functions/bsp/bsp-cli.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/bsp/bsp-desktop.sh - # shellcheck source=functions/bsp/bsp-desktop.sh - source "${SRC}"/lib/functions/bsp/bsp-desktop.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/bsp/utils-bsp.sh - # shellcheck source=functions/bsp/utils-bsp.sh - source "${SRC}"/lib/functions/bsp/utils-bsp.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/image/loop.sh - # shellcheck source=functions/image/loop.sh - source "${SRC}"/lib/functions/image/loop.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/image/initrd.sh - # shellcheck source=functions/image/initrd.sh - source "${SRC}"/lib/functions/image/initrd.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/image/rootfs-to-image.sh - # shellcheck source=functions/image/rootfs-to-image.sh - source "${SRC}"/lib/functions/image/rootfs-to-image.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/image/partitioning.sh - # shellcheck source=functions/image/partitioning.sh - source "${SRC}"/lib/functions/image/partitioning.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/image.sh - # shellcheck source=functions/image.sh - source "${SRC}"/lib/functions/image.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/main/rootfs-image.sh - # shellcheck source=functions/main/rootfs-image.sh - source "${SRC}"/lib/functions/main/rootfs-image.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/main/config-prepare.sh - # shellcheck source=functions/main/config-prepare.sh - source "${SRC}"/lib/functions/main/config-prepare.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/main/default-build.sh - # shellcheck source=functions/main/default-build.sh - source "${SRC}"/lib/functions/main/default-build.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/sources.sh - # shellcheck source=functions/compilation/sources.sh - source "${SRC}"/lib/functions/compilation/sources.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/uboot.sh - # shellcheck source=functions/compilation/uboot.sh - source "${SRC}"/lib/functions/compilation/uboot.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/atf.sh - # shellcheck source=functions/compilation/atf.sh - source "${SRC}"/lib/functions/compilation/atf.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/compilation-utils.sh - # shellcheck source=functions/compilation/compilation-utils.sh - source "${SRC}"/lib/functions/compilation/compilation-utils.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/kernel.sh - # shellcheck source=functions/compilation/kernel.sh - source "${SRC}"/lib/functions/compilation/kernel.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/debs.sh - # shellcheck source=functions/compilation/debs.sh - source "${SRC}"/lib/functions/compilation/debs.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/extra-drivers.sh - # shellcheck source=functions/compilation/extra-drivers.sh - source "${SRC}"/lib/functions/compilation/extra-drivers.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/compilation/patching.sh - # shellcheck source=functions/compilation/patching.sh - source "${SRC}"/lib/functions/compilation/patching.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/logging/capture.sh - # shellcheck source=functions/logging/capture.sh - source "${SRC}"/lib/functions/logging/capture.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/logging/runners.sh - # shellcheck source=functions/logging/runners.sh - source "${SRC}"/lib/functions/logging/runners.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/logging/errors.sh - # shellcheck source=functions/logging/errors.sh - source "${SRC}"/lib/functions/logging/errors.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/logging/logging.sh - # shellcheck source=functions/logging/logging.sh - source "${SRC}"/lib/functions/logging/logging.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/logging/traps.sh - # shellcheck source=functions/logging/traps.sh - source "${SRC}"/lib/functions/logging/traps.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/extras/fel.sh - # shellcheck source=functions/extras/fel.sh - source "${SRC}"/lib/functions/extras/fel.sh - -+set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### lib/functions/extras/buildpkg.sh - # shellcheck source=functions/extras/buildpkg.sh - source "${SRC}"/lib/functions/extras/buildpkg.sh - --# This file is/was autogenerated by lib/tools/gen-library.sh; don't modify manually - thanks -+ -+set -e # no errors tolerated. one last time for the win! -+# This file is/was autogenerated by lib/tools/gen-library.sh; don't modify manually -diff --git a/lib/tools/gen-library.sh b/lib/tools/gen-library.sh -index 49ba242be..10a62fa70 100755 ---- a/lib/tools/gen-library.sh -+++ b/lib/tools/gen-library.sh -@@ -15,13 +15,12 @@ cat <<- AUTOGEN_INCLUDES_HEADER > "${TARGET_SH}" - #!/usr/bin/env bash - # This file is/was autogenerated by ${0}; don't modify manually - -- set -e # no errors tolerated -- - AUTOGEN_INCLUDES_HEADER - - find lib/functions -type f -name \*.sh | while read -r path; do - ref="$(echo -n "${path}" | sed -e 's/lib\///g')" - cat <<- AUTOGEN_INCLUDES_EACH >> "${TARGET_SH}" -+ set -e # no errors tolerated. set -e is invoked before each sourced file to make sure. - ### ${path} - # shellcheck source=${ref} - source "\${SRC}"/${path} -@@ -31,7 +30,8 @@ done - - cat <<- AUTOGEN_INCLUDES_FOOTER >> "${TARGET_SH}" - -- # This file is/was autogenerated by ${0}; don't modify manually - thanks -+ set -e # no errors tolerated. one last time for the win! -+ # This file is/was autogenerated by ${0}; don't modify manually - AUTOGEN_INCLUDES_FOOTER - - echo "done." - -From dc2dd8dd4ced5244a5c615fe815b08455b119bbb Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 7 Jan 2022 23:35:25 +0100 -Subject: [PATCH] logging: shellfmt again after rebasing master - -Signed-off-by: Ricardo Pardini ---- - config/boards/jetson-nano.conf | 1 - - config/sources/families/jetson-nano.conf | 66 ++++++++++++++++++++++++++++++++ - extensions/flash-kernel.sh | 4 +- - lib/functions/configuration/menu.sh | 2 - - lib/library-functions.sh | 1 - - 5 files changed, 68 insertions(+), 6 deletions(-) - -diff --git a/config/boards/jetson-nano.conf b/config/boards/jetson-nano.conf -index 476b90bfb..fc2779817 100644 ---- a/config/boards/jetson-nano.conf -+++ b/config/boards/jetson-nano.conf -@@ -8,4 +8,3 @@ BOOT_LOGO="desktop" - BOOT_FDT_FILE="nvidia/tegra210-p3450-0000.dtb" - SRC_EXTLINUX="yes" - SRC_CMDLINE="console=ttyS0,115200n8 console=tty0" -- -diff --git a/config/sources/families/jetson-nano.conf b/config/sources/families/jetson-nano.conf -new file mode 100644 -index 000000000..f4710d751 ---- /dev/null -+++ b/config/sources/families/jetson-nano.conf -@@ -0,0 +1,66 @@ -+ARCH=arm64 -+KERNEL_IMAGE_TYPE=Image -+ATF_COMPILE="no" -+OFFSET=16 -+BOOTDELAY=0 -+BOOTBRANCH="tag:v2021.07" -+BOOTPATCHDIR="u-boot-rockchip64" -+UBOOT_TARGET_MAP=";;u-boot.bin" -+ -+CPUMIN=504000 -+CPUMAX=2132000 -+GOVERNOR=ondemand -+ -+case $BRANCH in -+ -+ legacy) -+ KERNELDIR='linux-nano' -+ KERNELSOURCE='https://github.com/150balbes/Jetson-Nano' -+ KERNELBRANCH='branch:4.9.201' -+ EXTRAWIFI="no" -+ BOOT_FDT_FILE="tegra210-p3448-0000-p3449-0000-a02.dtb" -+ ;; -+ -+ current) -+ KERNELBRANCH="branch:linux-5.10.y" -+ KERNELPATCHDIR='rockchip64-'$BRANCH -+ ;; -+ -+ edge) -+ KERNELBRANCH="branch:linux-5.15.y" -+ KERNELPATCHDIR='rockchip64-'$BRANCH -+ ;; -+ -+esac -+ -+write_uboot_platform() { -+ dd if=$1/u-boot.bin of=$2 bs=32k seek=1 status=noxfer > /dev/null 2>&1 -+} -+ -+family_tweaks() { -+ -+ case $BRANCH in -+ -+ legacy) -+ -+ install -m 755 $SRC/packages/blobs/jetson/tegra21x_xusb_firmware $SDCARD/lib/firmware/tegra21x_xusb_firmware -+ install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrahda $SDCARD/etc/asound.conf.tegrahda -+ install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrahda $SDCARD/etc/asound.conf -+ install -m 755 $SRC/packages/blobs/jetson/asound.conf.tegrasndt210ref $SDCARD/etc/asound.conf.tegrasndt210ref -+ install -m 755 $SRC/packages/blobs/jetson/tegra-hda.conf $SDCARD/usr/share/alsa/cards/tegra-hda.conf -+ install -m 755 $SRC/packages/blobs/jetson/tegra-snd-t210r.conf $SDCARD/usr/share/alsa/cards/tegra-snd-t210r.conf -+ -+ sed -e 's/exit 0//g' -i $SDCARD/etc/rc.local -+ echo "su -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'" >> $SDCARD/etc/rc.local -+ echo "exit 0" >> $SDCARD/etc/rc.local -+ -+ ;; -+ -+ edge) -+ -+ cp -R $SRC/packages/blobs/jetson/firmware/* $SDCARD/lib/firmware/ -+ -+ ;; -+ esac -+ -+} -diff --git a/extensions/flash-kernel.sh b/extensions/flash-kernel.sh -index 0390a3b37..847eb37b7 100644 ---- a/extensions/flash-kernel.sh -+++ b/extensions/flash-kernel.sh -@@ -84,7 +84,7 @@ function pre_update_initramfs__setup_flash_kernel() { - - local update_initramfs_cmd="update-initramfs -c -k all" - display_alert "Updating flash-kernel initramfs..." "$update_initramfs_cmd" "" -- chroot_custom "$chroot_target" "$update_initramfs_cmd" || { -+ chroot_custom "$chroot_target" "$update_initramfs_cmd" || { - display_alert "Failed to run '$update_initramfs_cmd'" "Check logs" "err" - exit 29 - } -@@ -97,7 +97,7 @@ function pre_update_initramfs__setup_flash_kernel() { - - local flash_kernel_cmd="flash-kernel --machine '${FK__MACHINE_MODEL}'" - display_alert "flash-kernel" "${FK__MACHINE_MODEL}" "info" -- chroot_custom "$chroot_target" "${flash_kernel_cmd}" || { -+ chroot_custom "$chroot_target" "${flash_kernel_cmd}" || { - display_alert "Failed to run '${flash_kernel_cmd}'" "Check logs" "err" - exit 29 - } -diff --git a/lib/functions/configuration/menu.sh b/lib/functions/configuration/menu.sh -index 6d6f0b266..2d4ac1462 100644 ---- a/lib/functions/configuration/menu.sh -+++ b/lib/functions/configuration/menu.sh -@@ -57,7 +57,6 @@ show_developer_warning() { - SHOW_WARNING=no - } - -- - # Stuff that was in config files - function distro_menu() { - # create a select menu for choosing a distribution based EXPERT status -@@ -84,4 +83,3 @@ function distros_options() { - distro_menu "${distrib_dir}" - done - } -- -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index 285f7e84e..3a3953118 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -195,5 +195,4 @@ source "${SRC}"/lib/functions/extras/fel.sh - # shellcheck source=functions/extras/buildpkg.sh - source "${SRC}"/lib/functions/extras/buildpkg.sh - -- - # This file is/was autogenerated by lib/tools/gen-library.sh; don't modify manually - thanks - -From ce5bebdb917d1e3c88e36899c268207779716965 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 7 Jan 2022 23:28:12 +0100 -Subject: [PATCH] logging: manual merge of all lib/*.sh changes between - revisions f6143eff670d435cc8d15b52335b1b70ccb91e1c and - f3388b9aee0d1564a28fbc661c6e7b0415a6dfd0 - -Signed-off-by: Ricardo Pardini ---- - lib/functions/bsp/bsp-cli.sh | 34 ++-- - lib/functions/compilation/extra-drivers.sh | 8 +- - lib/functions/extras/buildpkg.sh | 173 +++++++++++++++----- - lib/functions/general/git.sh | 4 +- - lib/functions/general/host.sh | 251 ++++++++++++++++++----------- - lib/functions/main/default-build.sh | 2 +- - lib/functions/rootfs/distro_agnostic.sh | 5 +- - 7 files changed, 316 insertions(+), 161 deletions(-) - -diff --git a/lib/functions/bsp/bsp-cli.sh b/lib/functions/bsp/bsp-cli.sh -index 67baede0d..d4bb3daab 100644 ---- a/lib/functions/bsp/bsp-cli.sh -+++ b/lib/functions/bsp/bsp-cli.sh -@@ -6,7 +6,7 @@ create_board_package() { - # @TODO: these traps are a real trap. - #trap "rm -rf \"${bsptempdir}\" ; exit 0" 0 1 2 3 15 - -- local destination=${bsptempdir}/${RELEASE}/${BSP_CLI_PACKAGE_FULLNAME} -+ local destination=${bsptempdir}/${BSP_CLI_PACKAGE_FULLNAME} - mkdir -p "${destination}"/DEBIAN - cd $destination - -@@ -59,7 +59,7 @@ create_board_package() { - Replaces: zram-config, base-files, armbian-tools-$RELEASE, linux-${RELEASE}-root-legacy-$BOARD (<< $REVISION~), linux-${RELEASE}-root-current-$BOARD (<< $REVISION~), linux-${RELEASE}-root-edge-$BOARD (<< $REVISION~) - Breaks: linux-${RELEASE}-root-legacy-$BOARD (<< $REVISION~), linux-${RELEASE}-root-current-$BOARD (<< $REVISION~), linux-${RELEASE}-root-edge-$BOARD (<< $REVISION~) - Recommends: bsdutils, parted, util-linux, toilet -- Description: Tweaks for Armbian $RELEASE on $BOARD -+ Description: Armbian board support files for $BOARD - EOF - - # set up pre install script -@@ -229,10 +229,15 @@ create_board_package() { - mv /usr/lib/chromium-browser/master_preferences.dpkg-dist /usr/lib/chromium-browser/master_preferences - fi - -- sed -i "s/^PRETTY_NAME=.*/PRETTY_NAME=\"${VENDOR} $REVISION "${RELEASE^}"\"/" /etc/os-release -- echo "${VENDOR} ${REVISION} ${RELEASE^} \\l \n" > /etc/issue -- echo "${VENDOR} ${REVISION} ${RELEASE^}" > /etc/issue.net -+ # Read release value -+ if [ -f /etc/lsb-release ]; then -+ RELEASE=\$(cat /etc/lsb-release | grep CODENAME | cut -d"=" -f2 | sed 's/.*/\u&/') -+ sed -i "s/^PRETTY_NAME=.*/PRETTY_NAME=\"${VENDOR} $REVISION "\${RELEASE}"\"/" /etc/os-release -+ echo "${VENDOR} ${REVISION} \${RELEASE} \\l \n" > /etc/issue -+ echo "${VENDOR} ${REVISION} \${RELEASE}" > /etc/issue.net -+ fi - -+ # Reload services - systemctl --no-reload enable armbian-hardware-monitor.service armbian-hardware-optimize.service armbian-zram-config.service >/dev/null 2>&1 - exit 0 - EOF -@@ -253,8 +258,11 @@ create_board_package() { - activate update-initramfs - EOF - -- # read distribution support status -- set_distribution_status -+ # copy distribution support status -+ local releases=($(find ${SRC}/config/distributions -mindepth 1 -maxdepth 1 -type d)) -+ for i in ${releases[@]}; do -+ echo "$(echo $i | sed 's/.*\///')=$(cat $i/support)" >> "${destination}"/etc/armbian-distribution-status -+ done - - # armhwinfo, firstrun, armbianmonitor, etc. config file - cat <<- EOF > "${destination}"/etc/armbian-release -@@ -264,8 +272,6 @@ create_board_package() { - BOARDFAMILY=${BOARDFAMILY} - BUILD_REPOSITORY_URL=${BUILD_REPOSITORY_URL} - BUILD_REPOSITORY_COMMIT=${BUILD_REPOSITORY_COMMIT} -- DISTRIBUTION_CODENAME=${RELEASE} -- DISTRIBUTION_STATUS=${DISTRIBUTION_STATUS} - VERSION=$REVISION - LINUXFAMILY=$LINUXFAMILY - ARCH=$ARCHITECTURE -@@ -275,12 +281,6 @@ create_board_package() { - KERNEL_IMAGE_TYPE=$KERNEL_IMAGE_TYPE - EOF - -- if [[ $BUILD_DESKTOP == yes ]]; then -- cat <<- EOF >> "${destination}"/etc/armbian-release -- DESKTOP=$DESKTOP_ENVIRONMENT -- EOF -- fi -- - # this is required for NFS boot to prevent deconfiguring the network on shutdown - sed -i 's/#no-auto-down/no-auto-down/g' "${destination}"/etc/network/interfaces.default - -@@ -301,8 +301,8 @@ POST_FAMILY_TWEAKS_BSP - - # create board DEB file - fakeroot_dpkg_deb_build "${destination}" "${destination}.deb" -- mkdir -p "${DEB_STORAGE}/${RELEASE}/" -- rsync --remove-source-files -rq "${destination}.deb" "${DEB_STORAGE}/${RELEASE}/" 2>&1 -+ mkdir -p "${DEB_STORAGE}/" -+ rsync --remove-source-files -rq "${destination}.deb" "${DEB_STORAGE}/" 2>&1 - - # cleanup - rm -rf ${bsptempdir} -diff --git a/lib/functions/compilation/extra-drivers.sh b/lib/functions/compilation/extra-drivers.sh -index 69e287d81..d45913f32 100644 ---- a/lib/functions/compilation/extra-drivers.sh -+++ b/lib/functions/compilation/extra-drivers.sh -@@ -49,12 +49,18 @@ prepare_extra_kernel_drivers() { - fi - - if [[ "${version}" == "4.19."* ]] && [[ "$LINUXFAMILY" == sunxi* || "$LINUXFAMILY" == meson64 || -- "$LINUXFAMILY" == mvebu64 || "$LINUXFAMILY" == mt7623 || "$LINUXFAMILY" == mvebu || "$LINUXFAMILY" == rk35xx ]]; then -+ "$LINUXFAMILY" == mvebu64 || "$LINUXFAMILY" == mt7623 || "$LINUXFAMILY" == mvebu ]]; then - display_alert "Adjusting" "packaging" "info" - cd "$kerneldir" || exit - process_patch_file "${SRC}/patch/misc/general-packaging-4.19.y.patch" "applying" - fi - -+ if [[ "${version}" == "4.19."* ]] && [[ "$LINUXFAMILY" == rk35xx ]]; then -+ display_alert "Adjusting" "packaging" "info" -+ cd "$kerneldir" || exit -+ process_patch_file "${SRC}/patch/misc/general-packaging-4.19.y-rk35xx.patch" "applying" -+ fi -+ - if [[ "${version}" == "4.14."* ]] && [[ "$LINUXFAMILY" == s5p6818 || "$LINUXFAMILY" == mvebu64 || - "$LINUXFAMILY" == imx7d || "$LINUXFAMILY" == odroidxu4 || "$LINUXFAMILY" == mvebu ]]; then - display_alert "Adjusting" "packaging" "info" -diff --git a/lib/functions/extras/buildpkg.sh b/lib/functions/extras/buildpkg.sh -index 2e97d652b..af92f1b84 100644 ---- a/lib/functions/extras/buildpkg.sh -+++ b/lib/functions/extras/buildpkg.sh -@@ -9,9 +9,17 @@ - # This file is a part of the Armbian build script - # https://github.com/armbian/build/ - --# create_chroot_for_buildpkg -+# Functions: -+ -+# create_chroot -+# chroot_prepare_distccd -+# chroot_build_packages -+# chroot_installpackages_local -+# chroot_installpackages -+ -+# create_chroot - # --create_chroot_for_buildpkg() { -+create_chroot() { - local target_dir="$1" - local release=$2 - local arch=$3 -@@ -34,18 +42,33 @@ create_chroot_for_buildpkg() { - components['impish']='main,universe,multiverse' - components['jammy']='main,universe,multiverse' - display_alert "Creating build chroot" "$release/$arch" "info" -- local includes="ccache,locales,git,ca-certificates,devscripts,libfile-fcntllock-perl,debhelper,rsync,python3,distcc" -+ local includes="ccache,locales,git,ca-certificates,devscripts,libfile-fcntllock-perl,debhelper,rsync,python3,distcc,apt-utils" -+ - # perhaps a temporally workaround -- [[ $release == buster || $release == bullseye || $release == focal || $release == hirsute || $release == sid ]] && includes=${includes}",perl-openssl-defaults,libnet-ssleay-perl" -+ case $release in -+ buster | bullseye | focal | hirsute | sid) -+ includes=${includes}",perl-openssl-defaults,libnet-ssleay-perl" -+ ;; -+ esac -+ - if [[ $NO_APT_CACHER != yes ]]; then - local mirror_addr="http://localhost:3142/${apt_mirror[${release}]}" - else - local mirror_addr="http://${apt_mirror[${release}]}" - fi -+ - mkdir -p "${target_dir}" - cd "${target_dir}" -- debootstrap --variant=buildd --components="${components[${release}]}" --arch="${arch}" $DEBOOTSTRAP_OPTION --foreign --include="${includes}" "${release}" "${target_dir}" "${mirror_addr}" -- [[ $? -ne 0 || ! -f "${target_dir}"/debootstrap/debootstrap ]] && exit_with_error "Create chroot first stage failed" -+ -+ debootstrap --variant=buildd \ -+ --components="${components[${release}]}" \ -+ --arch="${arch}" $DEBOOTSTRAP_OPTION \ -+ --foreign \ -+ --include="${includes}" "${release}" "${target_dir}" "${mirror_addr}" -+ -+ [[ $? -ne 0 || ! -f "${target_dir}"/debootstrap/debootstrap ]] && -+ exit_with_error "Create chroot first stage failed" -+ - cp /usr/bin/${qemu_binary[$arch]} "${target_dir}"/usr/bin/ - [[ ! -f "${target_dir}"/usr/share/keyrings/debian-archive-keyring.gpg ]] && - mkdir -p "${target_dir}"/usr/share/keyrings/ && -@@ -53,6 +76,7 @@ create_chroot_for_buildpkg() { - - chroot "${target_dir}" /bin/bash -c "/debootstrap/debootstrap --second-stage" - [[ $? -ne 0 || ! -f "${target_dir}"/bin/bash ]] && exit_with_error "Create chroot second stage failed" -+ - create_sources_list "$release" "${target_dir}" - [[ $NO_APT_CACHER != yes ]] && - echo 'Acquire::http { Proxy "http://localhost:3142"; };' > "${target_dir}"/etc/apt/apt.conf.d/02proxy -@@ -60,8 +84,10 @@ create_chroot_for_buildpkg() { - APT::Install-Recommends "0"; - APT::Install-Suggests "0"; - EOF -- [[ -f "${target_dir}"/etc/locale.gen ]] && sed -i "s/^# en_US.UTF-8/en_US.UTF-8/" "${target_dir}"/etc/locale.gen -+ [[ -f "${target_dir}"/etc/locale.gen ]] && -+ sed -i "s/^# en_US.UTF-8/en_US.UTF-8/" "${target_dir}"/etc/locale.gen - chroot "${target_dir}" /bin/bash -c "locale-gen; update-locale LANG=en_US:en LC_ALL=en_US.UTF-8" -+ - printf '#!/bin/sh\nexit 101' > "${target_dir}"/usr/sbin/policy-rc.d - chmod 755 "${target_dir}"/usr/sbin/policy-rc.d - rm "${target_dir}"/etc/resolv.conf 2> /dev/null -@@ -74,7 +100,17 @@ create_chroot_for_buildpkg() { - mkdir -p "${target_dir}"/var/lock - fi - chroot "${target_dir}" /bin/bash -c "/usr/sbin/update-ccache-symlinks" -- [[ $release == bullseye || $release == focal || $release == hirsute || $release == sid ]] && chroot "${target_dir}" /bin/bash -c "ln -s /usr/bin/python3 /usr/bin/python" -+ -+ display_alert "Upgrading packages in" "${target_dir}" "info" -+ chroot "${target_dir}" /bin/bash -c "apt-get -q update; apt-get -q -y upgrade; apt-get clean" -+ date +%s > "$target_dir/root/.update-timestamp" -+ -+ case $release in -+ bullseye | focal | hirsute | sid) -+ chroot "${target_dir}" /bin/bash -c "apt-get install python-is-python3" -+ ;; -+ esac -+ - touch "${target_dir}"/root/.debootstrap-complete - display_alert "Debootstrap complete" "${release}/${arch}" "info" - } ############################################################################# -@@ -133,27 +169,63 @@ chroot_build_packages() { - for arch in $target_arch; do - display_alert "Starting package building process" "$release/$arch" "info" - -- local target_dir -- target_dir="${SRC}/cache/buildpkg/${release}-${arch}-v${CHROOT_CACHE_VERSION}" -+ local t_name=${release}-${arch}-v${CHROOT_CACHE_VERSION} - local distcc_bindaddr="127.0.0.2" - -- [[ ! -f "${target_dir}"/root/.debootstrap-complete ]] && create_chroot_for_buildpkg "${target_dir}" "${release}" "${arch}" -- [[ ! -f "${target_dir}"/root/.debootstrap-complete ]] && exit_with_error "Creating chroot failed" "${release}/${arch}" -+ # Create a clean environment archive if it does not exist. -+ if [ ! -f "${SRC}/cache/buildpkg/${t_name}.tar.xz" ]; then -+ local tmp_dir=$(mktemp -d "${SRC}"/.tmp/debootstrap-XXXXX) -+ create_chroot "${tmp_dir}/${t_name}" "${release}" "${arch}" -+ display_alert "Create a clean Environment archive" "${t_name}.tar.xz" "info" -+ ( -+ tar -cp --directory="${tmp_dir}/" ${t_name} | -+ pv -p -b -r -s "$(du -sb "${tmp_dir}/${t_name}" | cut -f1)" | -+ pixz -4 > "${SRC}/cache/buildpkg/${t_name}.tar.xz" -+ ) -+ rm -rf $tmp_dir -+ fi - -- [[ -f /var/run/distcc/"${release}-${arch}".pid ]] && kill "$(< "/var/run/distcc/${release}-${arch}.pid")" > /dev/null 2>&1 -+ # Unpack the clean environment archive, if it exists. -+ if [ -f "${SRC}/cache/buildpkg/${t_name}.tar.xz" ]; then -+ local tmp_dir=$(mktemp -d "${SRC}"/.tmp/build-XXXXX) -+ ( -+ cd $tmp_dir -+ display_alert "Unpack the clean environment" "${t_name}.tar.xz" "info" -+ tar -xJf "${SRC}/cache/buildpkg/${t_name}.tar.xz" || -+ exit_with_error "Is not extracted" "${SRC}/cache/buildpkg/${t_name}.tar.xz" -+ ) -+ target_dir="$tmp_dir/${t_name}" -+ else -+ exit_with_error "Creating chroot failed" "${release}/${arch}" -+ fi -+ -+ [[ -f /var/run/distcc/"${release}-${arch}".pid ]] && -+ kill "$(< "/var/run/distcc/${release}-${arch}.pid")" > /dev/null 2>&1 - - chroot_prepare_distccd "${release}" "${arch}" - - # DISTCC_TCP_DEFER_ACCEPT=0 -- DISTCC_CMDLIST=/tmp/distcc/${release}-${arch}/cmdlist TMPDIR=/tmp/distcc distccd --daemon \ -- --pid-file "/var/run/distcc/${release}-${arch}.pid" --listen $distcc_bindaddr --allow 127.0.0.0/24 \ -+ DISTCC_CMDLIST=/tmp/distcc/${release}-${arch}/cmdlist \ -+ TMPDIR=/tmp/distcc distccd --daemon \ -+ --pid-file "/var/run/distcc/${release}-${arch}.pid" \ -+ --listen $distcc_bindaddr --allow 127.0.0.0/24 \ - --log-file "/tmp/distcc/${release}-${arch}.log" --user distccd - -+ [[ -d $target_dir ]] || -+ exit_with_error "Clean Environment is not visible" "$target_dir" -+ - local t=$target_dir/root/.update-timestamp - if [[ ! -f ${t} || $((($(date +%s) - $(< "${t}")) / 86400)) -gt 7 ]]; then - display_alert "Upgrading packages" "$release/$arch" "info" - systemd-nspawn -a -q -D "${target_dir}" /bin/bash -c "apt-get -q update; apt-get -q -y upgrade; apt-get clean" - date +%s > "${t}" -+ display_alert "Repack a clean Environment archive after upgrading" "${t_name}.tar.xz" "info" -+ rm "${SRC}/cache/buildpkg/${t_name}.tar.xz" -+ ( -+ tar -cp --directory="${tmp_dir}/" ${t_name} | -+ pv -p -b -r -s "$(du -sb "${tmp_dir}/${t_name}" | cut -f1)" | -+ pixz -4 > "${SRC}/cache/buildpkg/${t_name}.tar.xz" -+ ) - fi - - for plugin in "${SRC}"/packages/extras-buildpkgs/*.conf; do -@@ -186,12 +258,30 @@ chroot_build_packages() { - display_alert "Packages are up to date" "$package_name $release/$arch" "info" - continue - fi -+ -+ # Delete the environment if there was a build in it. -+ # And unpack the clean environment again. -+ if [[ -f "${target_dir}"/root/build.sh ]] && [[ -d $tmp_dir ]]; then -+ rm -rf $tmp_dir -+ local tmp_dir=$(mktemp -d "${SRC}"/.tmp/build-XXXXX) -+ ( -+ cd $tmp_dir -+ display_alert "Unpack the clean environment" "${t_name}.tar.xz" "info" -+ tar -xJf "${SRC}/cache/buildpkg/${t_name}.tar.xz" || -+ exit_with_error "Is not extracted" "${SRC}/cache/buildpkg/${t_name}.tar.xz" -+ ) -+ target_dir="$tmp_dir/${t_name}" -+ fi -+ - display_alert "Building packages" "$package_name $release/$arch" "ext" -+ ts=$(date +%s) - local dist_builddeps_name="package_builddeps_${release}" - [[ -v $dist_builddeps_name ]] && package_builddeps="${package_builddeps} ${!dist_builddeps_name}" - - # create build script -+ LOG_OUTPUT_FILE=/root/build-"${package_name}".log - create_build_script -+ unset LOG_OUTPUT_FILE - - fetch_from_repo "$package_repo" "extra/$package_name" "$package_ref" - -@@ -209,26 +299,31 @@ chroot_build_packages() { - built_ok+=("$package_name:$release/$arch") - fi - mv "${target_dir}"/root/*.deb "${plugin_target_dir}" 2> /dev/null -+ mv "${target_dir}"/root/*.log "$DEST/${LOG_SUBPATH}/" -+ te=$(date +%s) -+ display_alert "Build time $package_name " " $(($te - $ts)) sec." "info" - done -+ # Delete a temporary directory -+ if [ -d $tmp_dir ]; then rm -rf $tmp_dir; fi - # cleanup for distcc - kill $(< /var/run/distcc/${release}-${arch}.pid) - done - done - if [[ ${#built_ok[@]} -gt 0 ]]; then - display_alert "Following packages were built without errors" "" "info" -- for p in "${built_ok[@]}"; do -+ for p in ${built_ok[@]}; do - display_alert "$p" - done - fi - if [[ ${#failed[@]} -gt 0 ]]; then - display_alert "Following packages failed to build" "" "wrn" -- for p in "${failed[@]}"; do -+ for p in ${failed[@]}; do - display_alert "$p" - done - fi - } ############################################################################# - --# create build script # @TODO: what is this? -+# create build script - create_build_script() { - cat <<- EOF > "${target_dir}"/root/build.sh - #!/bin/bash -@@ -248,32 +343,10 @@ create_build_script() { - export DEBEMAIL="$MAINTAINERMAIL" - $(declare -f display_alert) - -- cd /root/build -- if [[ -n "${package_builddeps}" ]]; then -- # can be replaced with mk-build-deps -- deps=() -- installed=\$( -- dpkg-query -W -f '\${db:Status-Abbrev}|\${binary:Package}\n' '*' 2>/dev/null | \ -- grep '^ii' | \ -- awk -F '|' '{print \$2}' | \ -- cut -d ':' -f 1 -- ) -- -- for packet in $package_builddeps -- do -- grep -q -x -e "\$packet" <<< "\$installed" || deps+=("\$packet") -- done -- -- if [[ \${#deps[@]} -gt 0 ]]; then -- display_alert "Installing build dependencies" -- apt-get -y -q update -- apt-get -y -q \ -- --no-install-recommends \ -- --show-progress \ -- -o DPKG::Progress-Fancy=1 install "\${deps[@]}" -- fi -- fi -+ LOG_OUTPUT_FILE=$LOG_OUTPUT_FILE -+ $(declare -f install_pkg_deb) - -+ cd /root/build - display_alert "Copying sources" - rsync -aq /root/sources/"${package_name}" /root/build/ - -@@ -281,6 +354,16 @@ create_build_script() { - # copy overlay / "debianization" files - [[ -d "/root/overlay/${package_name}/" ]] && rsync -aq /root/overlay/"${package_name}" /root/build/ - -+ package_builddeps="$package_builddeps" -+ if [ -z "\$package_builddeps" ]; then -+ # Calculate build dependencies by a standard function and -+ # еxclude special comparison characters like "|" "(>= 9)" -+ package_builddeps="\$(dpkg-checkbuilddeps |& awk -F":" '{gsub(/[|]|[(].*[)]/, " ", \$0); print \$NF}')" -+ fi -+ if [[ -n "\${package_builddeps}" ]]; then -+ install_pkg_deb \${package_builddeps} -+ fi -+ - # set upstream version - [[ -n "${package_upstream_version}" ]] && debchange --preserve --newversion "${package_upstream_version}" "Import from upstream" - -@@ -289,7 +372,9 @@ create_build_script() { - debchange -l~armbian"${REVISION}"+ "Custom $VENDOR release" - - display_alert "Building package" -- dpkg-buildpackage -b -us -j2 -+ # Set the number of build threads and certainly send -+ # the standard error stream to the log file. -+ dpkg-buildpackage -b -us -j${NCPU_CHROOT:-2} 2>>\$LOG_OUTPUT_FILE - - if [[ \$? -eq 0 ]]; then - cd /root/build -diff --git a/lib/functions/general/git.sh b/lib/functions/general/git.sh -index 2b70de167..9fb0dfcf3 100644 ---- a/lib/functions/general/git.sh -+++ b/lib/functions/general/git.sh -@@ -339,8 +339,8 @@ fetch_from_repo() { - fingerprint_image() { - cat <<- EOF > "${1}" - -------------------------------------------------------------------------------- -- Title: ${VENDOR} $REVISION ${BOARD^} $DISTRIBUTION $RELEASE $BRANCH -- Kernel: Linux $VER -+ Title: ${VENDOR} $REVISION ${BOARD^} $BRANCH -+ Kernel: Linux $VER - Build date: $(date +'%d.%m.%Y') - Maintainer: $MAINTAINER <$MAINTAINERMAIL> - Authors: https://www.armbian.com/authors -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index 5156c4ed8..ef681d301 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -43,17 +43,6 @@ prepare_host() { - else - local offline=false - fi -- # build aarch64 -- if [[ $(dpkg --print-architecture) != arm64 ]]; then -- -- if [[ $(dpkg --print-architecture) != amd64 ]]; then -- display_alert "Please read documentation to set up proper compilation environment" -- display_alert "https://www.armbian.com/using-armbian-tools/" -- exit_with_error "Running this tool on non x86_64 build host is not supported" -- fi -- -- # build aarch64 -- fi - - # wait until package manager finishes possible system maintanace - wait_for_package_manager -@@ -69,35 +58,38 @@ prepare_host() { - # packages list for host - # NOTE: please sync any changes here with the Dockerfile and Vagrantfile - -- # build aarch64 -+ local hostdeps="acl aptly aria2 bc binfmt-support bison btrfs-progs \ -+ build-essential ca-certificates ccache cpio cryptsetup curl \ -+ debian-archive-keyring debian-keyring debootstrap device-tree-compiler \ -+ dialog dirmngr dosfstools dwarves f2fs-tools fakeroot flex gawk \ -+ gcc-arm-linux-gnueabihf gdisk gnupg1 gpg imagemagick jq kmod libbison-dev \ -+ libc6-dev-armhf-cross libelf-dev libfdt-dev libfile-fcntllock-perl \ -+ libfl-dev liblz4-tool libncurses-dev libpython2.7-dev libssl-dev \ -+ libusb-1.0-0-dev linux-base locales lzop ncurses-base ncurses-term \ -+ nfs-kernel-server ntpdate p7zip-full parted patchutils pigz pixz \ -+ pkg-config pv python3-dev python3-distutils qemu-user-static rsync swig \ -+ systemd-container u-boot-tools udev unzip uuid-dev wget whiptail zip \ -+ zlib1g-dev" -+ - if [[ $(dpkg --print-architecture) == amd64 ]]; then - -- local hostdeps="wget ca-certificates device-tree-compiler pv bc lzop zip binfmt-support build-essential ccache debootstrap ntpdate \ -- gawk gcc-arm-linux-gnueabihf qemu-user-static u-boot-tools uuid-dev zlib1g-dev unzip libusb-1.0-0-dev fakeroot \ -- parted pkg-config libncurses5-dev whiptail debian-keyring debian-archive-keyring f2fs-tools libfile-fcntllock-perl rsync libssl-dev \ -- nfs-kernel-server btrfs-progs ncurses-term p7zip-full kmod dosfstools libc6-dev-armhf-cross imagemagick \ -- curl patchutils liblz4-tool libpython2.7-dev linux-base swig aptly acl python3-dev python3-distutils \ -- locales ncurses-base pixz dialog systemd-container udev libfdt-dev libelf-dev lib32stdc++6 libc6-i386 lib32ncurses5 lib32tinfo5 \ -- bison libbison-dev flex libfl-dev cryptsetup gpg gnupg cpio aria2 pigz dirmngr python3-distutils jq distcc gdisk dwarves" -+ hostdeps+=" distcc lib32ncurses-dev lib32stdc++6 libc6-i386 zlib1g:i386" -+ grep -q i386 <(dpkg --print-foreign-architectures) || dpkg --add-architecture i386 -+ -+ elif [[ $(dpkg --print-architecture) == arm64 ]]; then -+ -+ hostdeps+=" gcc-arm-linux-gnueabi gcc-arm-none-eabi libc6 libc6-amd64-cross qemu" - -- # build aarch64 - else - -- local hostdeps="wget ca-certificates device-tree-compiler pv bc lzop zip binfmt-support build-essential ccache debootstrap ntpdate \ -- gawk gcc-arm-linux-gnueabihf gcc-arm-linux-gnueabi gcc-arm-none-eabi \ -- qemu-user-static u-boot-tools uuid-dev zlib1g-dev unzip libusb-1.0-0-dev fakeroot \ -- parted pkg-config libncurses5-dev whiptail debian-keyring debian-archive-keyring f2fs-tools libfile-fcntllock-perl rsync libssl-dev \ -- nfs-kernel-server btrfs-progs ncurses-term p7zip-full kmod dosfstools libc6-amd64-cross libc6-dev-armhf-cross imagemagick \ -- curl patchutils liblz4-tool libpython2.7-dev linux-base swig aptly acl python3-dev \ -- locales ncurses-base pixz dialog systemd-container udev libfdt-dev libelf-dev libc6 qemu \ -- bison libbison-dev flex libfl-dev cryptsetup gpg gnupg cpio aria2 pigz \ -- dirmngr python3-distutils jq gdisk dwarves" -+ display_alert "Please read documentation to set up proper compilation environment" -+ display_alert "https://www.armbian.com/using-armbian-tools/" -+ exit_with_error "Running this tool on non x86_64 build host is not supported" - -- # build aarch64 - fi - - # Add support for Ubuntu 20.04, 21.04 and Mint 20.x -- if [[ $HOSTRELEASE =~ ^(focal|impish|hirsute|jammy|ulyana|ulyssa|bullseye|uma)$ ]]; then -+ if [[ $HOSTRELEASE =~ ^(focal|impish|hirsute|ulyana|ulyssa|bullseye|uma)$ ]]; then - hostdeps+=" python2 python3" - ln -fs /usr/bin/python2.7 /usr/bin/python2 - ln -fs /usr/bin/python2.7 /usr/bin/python -@@ -112,7 +104,7 @@ prepare_host() { - # - # NO_HOST_RELEASE_CHECK overrides the check for a supported host system - # Disable host OS check at your own risk. Any issues reported with unsupported releases will be closed without discussion -- if [[ -z $HOSTRELEASE || "buster bullseye focal impish hirsute jammy debbie tricia ulyana ulyssa uma" != *"$HOSTRELEASE"* ]]; then -+ if [[ -z $HOSTRELEASE || "buster bullseye focal impish hirsute debbie tricia ulyana ulyssa uma" != *"$HOSTRELEASE"* ]]; then - if [[ $NO_HOST_RELEASE_CHECK == yes ]]; then - display_alert "You are running on an unsupported system" "${HOSTRELEASE:-(unknown)}" "wrn" - display_alert "Do not report any errors, warnings or other issues encountered beyond this point" "" "wrn" -@@ -129,17 +121,6 @@ prepare_host() { - fi - fi - -- # build aarch64 -- if [[ $(dpkg --print-architecture) == amd64 ]]; then -- -- if [[ -z $HOSTRELEASE || $HOSTRELEASE =~ ^(focal|debbie|buster|bullseye|impish|hirsute|ulyana|ulyssa|uma)$ ]]; then -- hostdeps="${hostdeps/lib32ncurses5 lib32tinfo5/lib32ncurses6 lib32tinfo6}" -- fi -- -- grep -q i386 <(dpkg --print-foreign-architectures) || dpkg --add-architecture i386 -- # build aarch64 -- fi -- - if systemd-detect-virt -q -c; then - display_alert "Running in container" "$(systemd-detect-virt)" "info" - # disable apt-cacher unless NO_APT_CACHER=no is not specified explicitly -@@ -159,12 +140,10 @@ prepare_host() { - # Skip verification if you are working offline - if ! $offline; then - -- # warning: apt-cacher-ng will fail if installed and used both on host and in container/chroot environment with shared network -+ # warning: apt-cacher-ng will fail if installed and used both on host and in -+ # container/chroot environment with shared network - # set NO_APT_CACHER=yes to prevent installation errors in such case -- if [[ $NO_APT_CACHER != yes ]]; then hostdeps="$hostdeps apt-cacher-ng"; fi -- -- local deps=() -- local installed=$(dpkg-query -W -f '${db:Status-Abbrev}|${binary:Package}\n' '*' 2> /dev/null | grep '^ii' | awk -F '|' '{print $2}' | cut -d ':' -f 1) -+ if [[ $NO_APT_CACHER != yes ]]; then hostdeps+=" apt-cacher-ng"; fi - - export EXTRA_BUILD_DEPS="" - call_extension_method "add_host_dependencies" <<- 'ADD_HOST_DEPENDENCIES' -@@ -172,9 +151,7 @@ prepare_host() { - you can add packages to install, space separated, to ${EXTRA_BUILD_DEPS} here. - ADD_HOST_DEPENDENCIES - -- for packet in $hostdeps ${EXTRA_BUILD_DEPS}; do -- if ! grep -q -x -e "$packet" <<< "$installed"; then deps+=("$packet"); fi -- done -+ if [ -n "${EXTRA_BUILD_DEPS}" ]; then hostdeps+=" ${EXTRA_BUILD_DEPS}"; fi - - # distribution packages are buggy, download from author - -@@ -196,18 +173,15 @@ prepare_host() { - # build aarch64 - fi - -- if [[ ${#deps[@]} -gt 0 ]]; then -- display_alert "Installing build dependencies" -- # don't prompt for apt cacher selection -- sudo echo "apt-cacher-ng apt-cacher-ng/tunnelenable boolean false" | sudo debconf-set-selections -- display_alert "Updating apt host-side" "apt update" "info" -- apt-get -q update 2>&1 -- display_alert "Upgrading apt host-side" "apt upgrade" "info" -- apt-get -y upgrade 2>&1 -- display_alert "Installing host-side dependency packages" "apt upgrade" "info" -- apt-get -q -y --no-install-recommends install -o Dpkg::Options::='--force-confold' "${deps[@]}" 2>&1 -- update-ccache-symlinks -- fi -+ display_alert "Installing build dependencies" -+ # don't prompt for apt cacher selection -+ sudo echo "apt-cacher-ng apt-cacher-ng/tunnelenable boolean false" | sudo debconf-set-selections -+ -+ LOG_OUTPUT_FILE="${DEST}"/${LOG_SUBPATH}/hostdeps.log -+ install_pkg_deb "upgrade $hostdeps" -+ unset LOG_OUTPUT_FILE -+ -+ update-ccache-symlinks - - export FINAL_HOST_DEPS="$hostdeps ${EXTRA_BUILD_DEPS}" - call_extension_method "host_dependencies_ready" <<- 'HOST_DEPENDENCIES_READY' -@@ -223,16 +197,6 @@ prepare_host() { - ntpdate -s "${NTP_SERVER:-pool.ntp.org}" - fi - -- # build aarch64 -- if [[ $(dpkg --print-architecture) == amd64 ]]; then -- -- if [[ $(dpkg-query -W -f='${db:Status-Abbrev}\n' 'zlib1g:i386' 2> /dev/null) != *ii* ]]; then -- apt-get install -qq -y --no-install-recommends zlib1g:i386 > /dev/null 2>&1 -- fi -- -- # build aarch64 -- fi -- - # create directory structure - mkdir -p "${SRC}"/{cache,output} "${USERPATCHES_PATH}" - if [[ -n $SUDO_USER ]]; then -@@ -243,20 +207,11 @@ prepare_host() { - find "${SRC}"/output "${USERPATCHES_PATH}" -type d ! -group sudo -exec chgrp --quiet sudo {} \; - find "${SRC}"/output "${USERPATCHES_PATH}" -type d ! -perm -g+w,g+s -exec chmod --quiet g+w,g+s {} \; - fi -- # @TODO: rpardini: _very_ important spot, this is where ".tmp" is created. A _huge_ opportunity for tmpfs here. -- display_alert "Creating directory structure: .tmp" "${SRC}/.tmp" "debug" -- display_alert "Creating directory structure: DEST" "${DEST}" "debug" -- mkdir -p "${DEST}"/debs-beta/extra "${DEST}"/debs/extra "${DEST}"/{config,debug,patch} \ -- "${USERPATCHES_PATH}"/overlay "${SRC}"/cache/{sources,hash,hash-beta,toolchain,utility,rootfs} \ -- "${SRC}"/.tmp "${WORKDIR}" -- -- display_alert "Setting TMPDIR" "${WORKDIR}" "debug" -- export TMPDIR="${WORKDIR}" -+ mkdir -p "${DEST}"/debs-beta/extra "${DEST}"/debs/extra "${DEST}"/{config,debug,patch} "${USERPATCHES_PATH}"/overlay "${SRC}"/cache/{sources,hash,hash-beta,toolchain,utility,rootfs} "${SRC}"/.tmp - - # build aarch64 - if [[ $(dpkg --print-architecture) == amd64 ]]; then - if [[ "${SKIP_EXTERNAL_TOOLCHAINS}" != "yes" ]]; then -- display_alert "Warning! SKIP_EXTERNAL_TOOLCHAINS is not yes. This is deprecated, upgrade!" "please set SKIP_EXTERNAL_TOOLCHAINS=yes" "deprecation" - - # bind mount toolchain if defined - if [[ -d "${ARMBIAN_CACHE_TOOLCHAIN_PATH}" ]]; then -@@ -301,21 +256,20 @@ prepare_host() { - fi - done - else -- display_alert "Ignoring toolchains" "SKIP_EXTERNAL_TOOLCHAINS=${SKIP_EXTERNAL_TOOLCHAINS}" "info" -- fi -- fi # check offline -- -- # enable arm binary format so that the cross-architecture chroot environment will work -- if [[ $KERNEL_ONLY != yes ]]; then -- modprobe -q binfmt_misc -- mountpoint -q /proc/sys/fs/binfmt_misc/ || mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc -- if [[ "$(arch)" != "aarch64" ]]; then -- test -e /proc/sys/fs/binfmt_misc/qemu-arm || update-binfmts --enable qemu-arm -- test -e /proc/sys/fs/binfmt_misc/qemu-aarch64 || update-binfmts --enable qemu-aarch64 -+ display_alert "Ignoring toolchains" "SKIP_EXTERNAL_TOOLCHAINS: ${SKIP_EXTERNAL_TOOLCHAINS}" "info" - fi - fi - -- # build aarch64 -+ fi # check offline -+ -+ # enable arm binary format so that the cross-architecture chroot environment will work -+ if [[ $KERNEL_ONLY != yes ]]; then -+ modprobe -q binfmt_misc -+ mountpoint -q /proc/sys/fs/binfmt_misc/ || mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc -+ if [[ "$(arch)" != "aarch64" ]]; then -+ test -e /proc/sys/fs/binfmt_misc/qemu-arm || update-binfmts --enable qemu-arm -+ test -e /proc/sys/fs/binfmt_misc/qemu-aarch64 || update-binfmts --enable qemu-aarch64 -+ fi - fi - - [[ ! -f "${USERPATCHES_PATH}"/customize-image.sh ]] && cp "${SRC}"/config/templates/customize-image.sh.template "${USERPATCHES_PATH}"/customize-image.sh -@@ -373,3 +327,110 @@ function fetch_and_build_host_tools() { - BUILD_HOST_TOOLS - - } -+ -+# Installing debian packages in the armbian build system. -+# The function accepts three optional parameters: -+# upgrade, clean - the same name for apt -+# verbose - detailed log for the function -+# -+# list="pkg1 pkg2 pkg3 pkgbadname pkg-1.0 | pkg-2.0 pkg5 (>= 9)" -+# install_pkg_deb upgrade verbose $list -+# -+# If the package has a bad name, we will see it in the log file. -+# If there is an LOG_OUTPUT_FILE variable and it has a value as -+# the full real path to the log file, then all the information will be there. -+# -+# The LOG_OUTPUT_FILE variable must be defined in the calling function -+# before calling the install_pkg_deb function and unset after. -+# -+install_pkg_deb() { -+ local list="" -+ local log_file -+ local for_install -+ local need_upgrade=false -+ local need_clean=false -+ local need_verbose=false -+ local _line=${BASH_LINENO[0]} -+ local _function=${FUNCNAME[1]} -+ local _file=$(basename "${BASH_SOURCE[1]}") -+ local tmp_file=$(mktemp /tmp/install_log_XXXXX) -+ export DEBIAN_FRONTEND=noninteractive -+ -+ list=$( -+ for p in $*; do -+ case $p in -+ upgrade) -+ need_upgrade=true -+ continue -+ ;; -+ clean) -+ need_clean=true -+ continue -+ ;; -+ verbose) -+ need_verbose=true -+ continue -+ ;; -+ \| | \(* | *\)) continue ;; -+ esac -+ echo " $p" -+ done -+ ) -+ -+ if [ -d $(dirname $LOG_OUTPUT_FILE) ]; then -+ log_file=${LOG_OUTPUT_FILE} -+ else -+ log_file="${SRC}/output/${LOG_SUBPATH}/install.log" -+ fi -+ -+ apt-get -q update -+ if [ "$?" != "0" ]; then echo "apt cannot update" >> $log_file; fi -+ if $need_upgrade; then -+ apt-get -y upgrade -+ if [ "$?" != "0" ]; then echo "apt cannot upgrade" >> $log_file; fi -+ fi -+ -+ # If the package is not installed, check the latest -+ # up-to-date version in the apt cache. -+ # Exclude bad package names and send a message to the log. -+ for_install=$( -+ for p in $list; do -+ if $(dpkg-query -W -f '${db:Status-Abbrev}' $p |& awk '/ii/{exit 1}'); then -+ apt-cache show $p -o APT::Cache::AllVersions=no |& -+ awk -v p=$p -v tmp_file=$tmp_file \ -+ '/^Package:/{print $2} /^E:/{print "Bad package name: ",p >>tmp_file}' -+ fi -+ done -+ ) -+ -+ # This information should be logged. -+ if [ -s $tmp_file ]; then -+ echo -e "\nInstalling packages in function: $_function" "[$_file:$_line]" \ -+ >> $log_file -+ echo -e "\nIncoming list:" >> $log_file -+ printf "%-30s %-30s %-30s %-30s\n" $list >> $log_file -+ echo "" >> $log_file -+ cat $tmp_file >> $log_file -+ fi -+ -+ if [ -n "$for_install" ]; then -+ -+ apt-get install -qq -y --no-install-recommends $for_install -+ echo -e "\nPackages installed:" >> $log_file -+ dpkg-query -W \ -+ -f '${binary:Package;-27} ${Version;-23}\n' \ -+ $for_install >> $log_file -+ -+ fi -+ -+ # We will show the status after installation all listed -+ if $need_verbose; then -+ echo -e "\nstatus after installation:" >> $log_file -+ dpkg-query -W \ -+ -f '${binary:Package;-27} ${Version;-23} [ ${Status} ]\n' \ -+ $list >> $log_file -+ fi -+ -+ if $need_clean; then apt-get clean; fi -+ rm $tmp_file -+} -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index d85e8650c..5d868a381 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -80,7 +80,7 @@ main_default_build_single() { - overlayfs_wrapper "cleanup" - - # create board support package -- if [[ -n "${RELEASE}" && ! -f "${DEB_STORAGE}/$RELEASE/${BSP_CLI_PACKAGE_FULLNAME}.deb" && "${REPOSITORY_INSTALL}" != *armbian-bsp-cli* ]]; then -+ if [[ -n "${RELEASE}" && ! -f "${DEB_STORAGE}/${BSP_CLI_PACKAGE_FULLNAME}.deb" && "${REPOSITORY_INSTALL}" != *armbian-bsp-cli* ]]; then - LOG_SECTION="create_board_package" do_with_logging create_board_package - fi - -diff --git a/lib/functions/rootfs/distro_agnostic.sh b/lib/functions/rootfs/distro_agnostic.sh -index a226ce0eb..6249376b7 100644 ---- a/lib/functions/rootfs/distro_agnostic.sh -+++ b/lib/functions/rootfs/distro_agnostic.sh -@@ -316,7 +316,7 @@ POST_INSTALL_KERNEL_DEBS - - # install board support packages - if [[ "${REPOSITORY_INSTALL}" != *bsp* ]]; then -- install_deb_chroot "${DEB_STORAGE}/$RELEASE/${BSP_CLI_PACKAGE_FULLNAME}.deb" -+ install_deb_chroot "${DEB_STORAGE}/${BSP_CLI_PACKAGE_FULLNAME}.deb" - else - install_deb_chroot "${CHOSEN_ROOTFS}" "remote" - fi -@@ -570,6 +570,9 @@ FAMILY_TWEAKS - # build logo in any case - boot_logo - -+ # disable MOTD for first boot - we want as clean 1st run as possible -+ chmod -x "${SDCARD}"/etc/update-motd.d/* -+ - return 0 # make sure to exit with success - } - - -From 9486f6117f1011dbeefd44fdda9e1d9e7f3c7425 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sun, 26 Dec 2021 12:39:03 +0100 -Subject: [PATCH] logging: generic do_capturing_defs wrapper; Python parser - -- enabled by passing CONFIG_DEFS_ONLY=yes; in this case does not build anything -- [WiP] Python3 info reader / matrix expander - - multithreaded version - -Signed-off-by: Ricardo Pardini ---- - compile.sh | 2 +- - config/boards/virtual-qemu.wip | 2 +- - lib/functions/cli/cli-entrypoint.sh | 9 +- - lib/functions/configuration/main-config.sh | 32 ++++--- - lib/functions/logging/capture.sh | 22 +++++ - lib/functions/logging/traps.sh | 4 + - lib/functions/main/config-prepare.sh | 4 +- - lib/functions/main/default-build.sh | 2 +- - lib/library-functions.sh | 4 + - lib/tools/info.py | 140 +++++++++++++++++++++++++++++ - 10 files changed, 204 insertions(+), 17 deletions(-) - -diff --git a/compile.sh b/compile.sh -index d4d07cfe0..27d598bd2 100755 ---- a/compile.sh -+++ b/compile.sh -@@ -36,7 +36,7 @@ fi - source "${SRC}"/lib/single.sh - - # hook up the error handler early, we wanna see stack for all errors. --trap 'main_error_monitor "$?" "$(show_caller_full)" "$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}")"; exit 48' ERR EXIT -+trap 'main_error_monitor "$?" "$(show_caller_full)" "$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}")"' ERR EXIT - - # And execute the main entrypoint. - cli_entrypoint "$@" -diff --git a/config/boards/virtual-qemu.wip b/config/boards/virtual-qemu.wip -index 0573bfa0b..4d7121221 100644 ---- a/config/boards/virtual-qemu.wip -+++ b/config/boards/virtual-qemu.wip -@@ -33,7 +33,7 @@ EXTRAWIFI='no' - ROOTFS_TYPE="ext4" - PACKAGE_LIST_DESKTOP_BOARD="spice-vdagent" - --post_build_image_modify() { -+post_build_image_modify() { # @TODO: rpardini: hmm, wonder why there is a failsafe? function leaking in build-all? - - if [[ ${BOARD} == "virtual-qemu" ]]; then - local IMAGE_PATH=${1} -diff --git a/lib/functions/cli/cli-entrypoint.sh b/lib/functions/cli/cli-entrypoint.sh -index d5434ee1d..99adc61a4 100644 ---- a/lib/functions/cli/cli-entrypoint.sh -+++ b/lib/functions/cli/cli-entrypoint.sh -@@ -108,7 +108,14 @@ function cli_entrypoint() { - do_main_build_all_ng - else - # configuration etc -- prepare_and_config_main_build_single -+ do_capturing_defs prepare_and_config_main_build_single # this sets CAPTURED_VARS -+ -+ if [[ "${CONFIG_DEFS_ONLY}" == "yes" ]]; then -+ echo "${CAPTURED_VARS}" # to stdout! -+ return 0 -+ else -+ unset CAPTURED_VARS -+ fi - - # Allow for custom user-invoked functions. @TODO: check this with extensions usage? - if [[ -z $1 ]]; then -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 4632fd488..759deaf5d 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -377,7 +377,7 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - # Dependent desktop packages - # Myy : Sources packages from file here - -- # Myy : FIXME Rename aggregate_all to aggregate_all_desktop -+ # Myy : FIXME Rename aggregate_all to aggregate_all_desktop # @TODO: rpardini: already done? - if [[ $BUILD_DESKTOP == "yes" ]]; then - PACKAGE_LIST_DESKTOP+="$(one_line aggregate_all_desktop "packages" " ")" - echo -e "\nGroups selected ${DESKTOP_APPGROUPS_SELECTED} -> PACKAGES :" >> "${LOG_OUTPUT_FILE}" -@@ -446,7 +446,7 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - - [[ -n $APT_PROXY_ADDR ]] && display_alert "Using custom apt-cacher-ng address" "$APT_PROXY_ADDR" "info" - -- # Build final package list after possible override -+ display_alert "Build final package list" "after possible override" "debug" - PACKAGE_LIST="$PACKAGE_LIST $PACKAGE_LIST_RELEASE $PACKAGE_LIST_ADDITIONAL" - PACKAGE_MAIN_LIST="$(cleanup_list PACKAGE_LIST)" - -@@ -505,28 +505,38 @@ Packages will still be installed after this is called, so it is the last chance - to confirm or change any packages. - POST_AGGREGATE_PACKAGES - -- # debug -- cat <<- EOF >> "${DEST}"/${LOG_SUBPATH}/output.log -+ local build_script_env_file="${DEST}/${LOG_SUBPATH}/output.log" -+ display_alert "Writing build config summary to" "${build_script_env_file}" "debug" - -+ # debug -+ local debug_dpkg_arch debug_uname debug_virt debug_src_mount debug_src_perms debug_src_temp_perms -+ debug_dpkg_arch="$(dpkg --print-architecture)" -+ debug_uname="$(uname -a)" -+ debug_virt="$(systemd-detect-virt)" -+ debug_src_mount="$(findmnt -o TARGET,SOURCE,FSTYPE,AVAIL -T "${SRC}")" -+ debug_src_perms="$(getfacl -p "${SRC}")" -+ debug_src_temp_perms="$(getfacl -p "${SRC}"/.tmp 2> /dev/null)" -+ -+ cat <<- EOF >> "${build_script_env_file}" - ## BUILD SCRIPT ENVIRONMENT - - Repository: $REPOSITORY_URL - Version: $REPOSITORY_COMMIT - - Host OS: $HOSTRELEASE -- Host arch: $(dpkg --print-architecture) -- Host system: $(uname -a) -- Virtualization type: $(systemd-detect-virt) -+ Host arch: ${debug_dpkg_arch} -+ Host system: ${debug_uname} -+ Virtualization type: ${debug_virt} - - ## Build script directories - Build directory is located on: -- $(findmnt -o TARGET,SOURCE,FSTYPE,AVAIL -T "${SRC}") -+ ${debug_src_mount} - - Build directory permissions: -- $(getfacl -p "${SRC}") -+ ${debug_src_perms} - - Temp directory permissions: -- $(getfacl -p "${SRC}"/.tmp 2> /dev/null) -+ ${debug_src_temp_perms} - - ## BUILD CONFIGURATION - -@@ -554,4 +564,6 @@ POST_AGGREGATE_PACKAGES - - CPU configuration: $CPUMIN - $CPUMAX with $GOVERNOR - EOF -+ -+ display_alert "Done with main-config.sh" "do_main_configuration" "debug" - } -diff --git a/lib/functions/logging/capture.sh b/lib/functions/logging/capture.sh -new file mode 100644 -index 000000000..660068c89 ---- /dev/null -+++ b/lib/functions/logging/capture.sh -@@ -0,0 +1,22 @@ -+function do_capturing_defs() { -+ # make sure to local with a value, otherwise they will appear in the list... -+ local pre_exec_vars="" exit_code=0 post_exec_vars="" new_vars_list="" onevar="" all_vars_array=() -+ pre_exec_vars="$(compgen -A variable | grep -E '[[:upper:]]+' | grep -v -e "^BASH_" | sort)" -+ -+ # run parameters passed -+ "$@" || exit_code=$? -+ -+ post_exec_vars="$(compgen -A variable | grep -E '[[:upper:]]+' | grep -v -e "^BASH_" | sort)" -+ new_vars_list="$(comm -13 <(echo "$pre_exec_vars") <(echo "${post_exec_vars}"))" -+ -+ for onevar in ${new_vars_list}; do -+ # @TODO: rpardini: handle arrays and maps specially? -+ all_vars_array+=("$(declare -p "${onevar}")") -+ done -+ #IFS=$'\n' -+ CAPTURED_VARS="${all_vars_array[*]}" -+ #display_alert "Vars defined during ${*@Q}:" "${CAPTURED_VARS}" "debug" -+ unset all_vars_array post_exec_vars new_vars_list pre_exec_vars onevar join_by -+ -+ return ${exit_code} -+} -diff --git a/lib/functions/logging/traps.sh b/lib/functions/logging/traps.sh -index 9a5daa670..47878a0b0 100644 ---- a/lib/functions/logging/traps.sh -+++ b/lib/functions/logging/traps.sh -@@ -49,6 +49,10 @@ function main_error_monitor() { - fi - #trap - ERR # remove this trap - local errcode="${1}" -+ # If there's no error, do nothing. -+ if [[ $errcode -eq 0 ]]; then -+ return 0 -+ fi - local stack_caller="${2}" - local full_stack_caller="${3}" - display_alert "main_error_monitor: ${errcode}! stack:" "${stack_caller}" "err" -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index 196142608..32be7355d 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -102,8 +102,7 @@ function prepare_and_config_main_build_single() { - source "${SRC}/config/boards/${BOARD}.${BOARD_TYPE}" - LINUXFAMILY="${BOARDFAMILY}" - -- # @TODO: interesting. this sourced the board config. What sources the family? -- -+ # @TODO: interesting. this sourced the board config. What sources the family? do_main_configuration! - - [[ -z $KERNEL_TARGET ]] && exit_with_error "Board configuration does not define valid kernel config" - -@@ -174,7 +173,6 @@ function prepare_and_config_main_build_single() { - export CHOSEN_KSRC=linux-source-${BRANCH}-${LINUXFAMILY} - - display_alert "Done with prepare_and_config_main_build_single" "${BOARD}.${BOARD_TYPE}" "info" -- - } - - # cli-bsp also uses this -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index e9f3af0ed..d85e8650c 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -18,7 +18,7 @@ main_default_build_single() { - LOG_SECTION="fetch_sources_kernel_uboot_atf" do_with_logging fetch_sources_kernel_uboot_atf - LOG_SECTION="fetch_and_build_host_tools" do_with_logging fetch_and_build_host_tools - -- for option in $(tr ',' ' ' <<< "$CLEAN_LEVEL"); do -+ for option in $(tr ',' ' ' <<< "${CLEAN_LEVEL}"); do - if [[ $option != sources ]]; then - LOG_SECTION="cleaning" do_with_logging cleaning "$option" - fi -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index f9bb093a4..285f7e84e 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -167,6 +167,10 @@ source "${SRC}"/lib/functions/compilation/extra-drivers.sh - # shellcheck source=functions/compilation/patching.sh - source "${SRC}"/lib/functions/compilation/patching.sh - -+### lib/functions/logging/capture.sh -+# shellcheck source=functions/logging/capture.sh -+source "${SRC}"/lib/functions/logging/capture.sh -+ - ### lib/functions/logging/runners.sh - # shellcheck source=functions/logging/runners.sh - source "${SRC}"/lib/functions/logging/runners.sh -diff --git a/lib/tools/info.py b/lib/tools/info.py -new file mode 100755 -index 000000000..308d482e7 ---- /dev/null -+++ b/lib/tools/info.py -@@ -0,0 +1,140 @@ -+#!/bin/env python3 -+import concurrent.futures -+import glob -+import json -+import os -+import re -+import subprocess -+import sys -+from pathlib import Path -+ -+ -+def eprint(*args, **kwargs): -+ print(*args, file=sys.stderr, **kwargs) -+ -+ -+def armbian_value_parse_list(item_value): -+ return item_value.split() -+ -+ -+def get_all_boards_list_from_armbian(src_path): -+ ret = [] -+ for file in glob.glob(src_path + "/config/boards/*.*"): -+ stem = Path(file).stem -+ if stem != "README": -+ ret.append(stem) -+ return ret -+ -+ -+def armbian_value_parse_newline_map(item_value): -+ lines = item_value.split("\n") -+ ret = [] -+ for line in lines: -+ ret.append(line.split(";")) -+ return ret -+ -+ -+def map_to_armbian_params(map_params): -+ ret = [] -+ for param in map_params: -+ ret.append(param + "=" + map_params[param]) -+ return ret -+ -+ -+def run_armbian_compile_and_parse(path_to_compile_sh, compile_params): -+ result = subprocess.run( -+ [path_to_compile_sh] + map_to_armbian_params(compile_params), -+ stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True, universal_newlines=True -+ ) -+ -+ # Now parse it with regex-power! -+ # regex = r"^declare (..) (.*?)=\"(.*?)\"$" # old multiline version -+ regex = r"declare (..) (.*?)=\"(.*?)\"" -+ test_str = result.stdout -+ matches = re.finditer(regex, test_str, re.DOTALL | re.MULTILINE) -+ all_keys = {} -+ -+ for matchNum, match in enumerate(matches, start=1): -+ flags = match.group(1) -+ key = match.group(2) -+ value = match.group(3) -+ -+ if ("_LIST" in key) or ("_DIRS" in key): -+ value = armbian_value_parse_list(value) -+ elif "_TARGET_MAP" in key: -+ value = armbian_value_parse_newline_map(value) -+ -+ all_keys[key] = value -+ -+ return {"in": compile_params, "out": all_keys, "logs": result.stderr.split("\n")} -+ -+ -+# Find the location of compile.sh, relative to this Python script. -+this_script_full_path = os.path.realpath(__file__) -+eprint("Real path to this script", this_script_full_path) -+ -+armbian_src_path = os.path.realpath(os.path.join(os.path.dirname(this_script_full_path), "..", "..")) -+eprint("Real path to Armbian SRC", armbian_src_path) -+ -+compile_sh_full_path = os.path.realpath(os.path.join(armbian_src_path, "compile.sh")) -+eprint("Real path to compile.sh", compile_sh_full_path) -+ -+# Make sure it exists -+if not os.path.exists(compile_sh_full_path): -+ raise Exception("Can't find compile.sh") -+ -+common_compile_params = { -+ "KERNEL_ONLY": "no", -+ "BUILD_MINIMAL": "no", -+ "DEB_COMPRESS": "none", -+ "CLOUD_IMAGE": "yes", -+ "CLEAN_LEVEL": "debs", -+ "SHOW_LOG": "yes", -+ "CONFIG_DEFS_ONLY": "yes", -+ "KERNEL_CONFIGURE": "no", -+ "EXPERT": "yes" -+} -+ -+board_compile_params = { -+ "BOARD": "uefi-x86", -+ "BRANCH": "current", -+ "RELEASE": "impish", -+ "BUILD_DESKTOP": "no" -+} -+ -+ -+def get_info_for_one_board(board_name, common_params): -+ eprint("Getting info for board '{}'".format(board_name)) -+ try: -+ parsed = run_armbian_compile_and_parse(compile_sh_full_path, common_params | {"BOARD": board_name}) -+ # print(json.dumps(parsed, indent=4, sort_keys=True)) -+ return parsed -+ except: -+ eprint("Failed get info for board '{}'".format(board_name)) -+ return None -+ -+ -+if True: -+ all_boards = get_all_boards_list_from_armbian(armbian_src_path) -+ # print(json.dumps(all_boards, indent=4, sort_keys=True)) -+ -+ every_info = [] -+ with concurrent.futures.ProcessPoolExecutor(max_workers=32) as executor: -+ every_future = [] -+ for board in all_boards: -+ all_params = common_compile_params | board_compile_params -+ eprint("Submitting future for board {}".format(board)) -+ future = executor.submit(get_info_for_one_board, board, all_params) -+ every_future.append(future) -+ -+ eprint("Waiting for all futures...") -+ executor.shutdown(wait=True) -+ eprint("Done, all futures awaited") -+ -+ for future in every_future: -+ info = future.result() -+ if info is not None: -+ every_info.append(info) -+ -+# info = get_info_for_one_board(board, all_params) -+print(json.dumps(every_info, indent=4, sort_keys=True)) - -From 328c4f75664d68f01579467631672c5645466cdc Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Sat, 25 Dec 2021 17:12:19 +0100 -Subject: [PATCH] logging: move some interactive parts of config into its own - functions - -- mostly from config-prepare; -- there is still a lot of others in main-config - -Signed-off-by: Ricardo Pardini ---- - lib/functions/configuration/interactive.sh | 178 +++++++++++++++++++++ - lib/functions/configuration/main-config.sh | 2 +- - lib/functions/configuration/menu.sh | 29 ++++ - lib/functions/main/config-prepare.sh | 241 ++++------------------------- - lib/library-functions.sh | 5 + - 5 files changed, 247 insertions(+), 208 deletions(-) - -diff --git a/lib/functions/configuration/interactive.sh b/lib/functions/configuration/interactive.sh -new file mode 100644 -index 000000000..1f6989ae9 ---- /dev/null -+++ b/lib/functions/configuration/interactive.sh -@@ -0,0 +1,178 @@ -+function interactive_config_prepare_terminal() { -+ if [[ $BUILD_ALL != "yes" && -z $ROOT_FS_CREATE_ONLY ]]; then -+ if [[ -t 0 ]]; then # "-t fd return True if file descriptor fd is open and refers to a terminal". 0 = stdin, 1 = stdout, 2 = stderr, 3+ custom -+ # override stty size, if stdin is a terminal. -+ [[ -n $COLUMNS ]] && stty cols $COLUMNS -+ [[ -n $LINES ]] && stty rows $LINES -+ export TTY_X=$(($(stty size | awk '{print $2}') - 6)) # determine terminal width -+ export TTY_Y=$(($(stty size | awk '{print $1}') - 6)) # determine terminal height -+ fi -+ fi -+ -+ # We'll use this title on all menus -+ export backtitle="Armbian building script, https://www.armbian.com | https://docs.armbian.com | (c) 2013-2021 Igor Pecovnik " -+} -+ -+function interactive_config_ask_kernel() { -+ # @TODO: rpardini: should be refactored into 'menu' or something -+ # if KERNEL_ONLY, KERNEL_CONFIGURE, BOARD, BRANCH or RELEASE are not set, display selection menu -+ if [[ -z $KERNEL_ONLY ]]; then -+ options+=("yes" "U-boot and kernel packages") -+ options+=("no" "Full OS image for flashing") -+ KERNEL_ONLY=$(dialog_if_terminal --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags \ -+ --menu "Select what to build" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -+ unset options -+ fi -+ -+ if [[ -z $KERNEL_CONFIGURE ]]; then -+ options+=("no" "Do not change the kernel configuration") -+ options+=("yes" "Show a kernel configuration menu before compilation") -+ options+=("prebuilt" "Use precompiled packages from Armbian repository") -+ KERNEL_CONFIGURE=$(dialog_if_terminal --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags \ -+ --menu "Select the kernel configuration" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -+ unset options -+ fi -+} -+ -+function interactive_config_ask_board_list() { -+ if [[ -z $BOARD ]]; then -+ WIP_STATE=supported -+ WIP_BUTTON='CSC/WIP/EOS/TVB' -+ STATE_DESCRIPTION=' - boards with high level of software maturity' -+ temp_rc=$(mktemp) # @TODO: this is a _very_ early call to mktemp - no TMPDIR set yet - it needs to be cleaned-up somehow -+ -+ while true; do -+ options=() -+ if [[ $WIP_STATE == supported ]]; then -+ for board in "${SRC}"/config/boards/*.conf; do -+ options+=("$(basename "${board}" | cut -d'.' -f1)" "$(head -1 "${board}" | cut -d'#' -f2)") -+ done -+ else -+ for board in "${SRC}"/config/boards/*.wip; do -+ options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(WIP)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -+ done -+ for board in "${SRC}"/config/boards/*.csc; do -+ options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(CSC)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -+ done -+ for board in "${SRC}"/config/boards/*.eos; do -+ options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(EOS)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -+ done -+ for board in "${SRC}"/config/boards/*.tvb; do -+ options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(TVB)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -+ done -+ fi -+ -+ if [[ $WIP_STATE != supported ]]; then -+ cat <<- 'EOF' > "${temp_rc}" -+ dialog_color = (RED,WHITE,OFF) -+ screen_color = (WHITE,RED,ON) -+ tag_color = (RED,WHITE,ON) -+ item_selected_color = (WHITE,RED,ON) -+ tag_selected_color = (WHITE,RED,ON) -+ tag_key_selected_color = (WHITE,RED,ON) -+ EOF -+ else -+ echo > "${temp_rc}" -+ fi -+ BOARD=$(DIALOGRC=$temp_rc dialog_if_terminal --stdout --title "Choose a board" --backtitle "$backtitle" --scrollbar \ -+ --colors --extra-label "Show $WIP_BUTTON" --extra-button \ -+ --menu "Select the target board. Displaying:\n$STATE_DESCRIPTION" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -+ STATUS=$? -+ if [[ $STATUS == 3 ]]; then -+ if [[ $WIP_STATE == supported ]]; then -+ [[ $SHOW_WARNING == yes ]] && show_developer_warning -+ STATE_DESCRIPTION=' - \Z1(CSC)\Zn - Community Supported Configuration\n - \Z1(WIP)\Zn - Work In Progress -+ \n - \Z1(EOS)\Zn - End Of Support\n - \Z1(TVB)\Zn - TV boxes' -+ WIP_STATE=unsupported -+ WIP_BUTTON='matured' -+ EXPERT=yes -+ else -+ STATE_DESCRIPTION=' - boards with high level of software maturity' -+ WIP_STATE=supported -+ WIP_BUTTON='CSC/WIP/EOS' -+ EXPERT=no -+ fi -+ continue -+ elif [[ $STATUS == 0 ]]; then -+ break -+ fi -+ unset options -+ done -+ fi -+} -+ -+function interactive_config_ask_branch() { -+ # @TODO: rpardini, again, refactor into menu/interactive config stuff -+ if [[ -z $BRANCH ]]; then -+ options=() -+ [[ $KERNEL_TARGET == *current* ]] && options+=("current" "Recommended. Come with best support") -+ [[ $KERNEL_TARGET == *legacy* ]] && options+=("legacy" "Old stable / Legacy") -+ [[ $KERNEL_TARGET == *edge* && $EXPERT = yes ]] && options+=("edge" "\Z1Bleeding edge from @kernel.org\Zn") -+ -+ # do not display selection dialog if only one kernel branch is available -+ if [[ "${#options[@]}" == 2 ]]; then -+ BRANCH="${options[0]}" -+ else -+ BRANCH=$(dialog_if_terminal --stdout --title "Choose a kernel" --backtitle "$backtitle" --colors \ -+ --menu "Select the target kernel branch\nExact kernel versions depend on selected board" \ -+ $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -+ fi -+ unset options -+ [[ $BRANCH == dev && $SHOW_WARNING == yes ]] && show_developer_warning -+ else -+ [[ $BRANCH == next ]] && KERNEL_TARGET="next" -+ # next = new legacy. Should stay for backward compatibility, but be removed from menu above -+ # or we left definitions in board configs and only remove menu -+ fi -+ return 0 -+} -+ -+function interactive_config_ask_release() { -+ if [[ $KERNEL_ONLY != yes && -z $RELEASE ]]; then -+ options=() -+ distros_options -+ RELEASE=$(dialog_if_terminal --stdout --title "Choose a release package base" --backtitle "$backtitle" \ -+ --menu "Select the target OS release package base" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -+ echo "options : ${options}" -+ unset options -+ fi -+} -+ -+function interactive_config_ask_desktop_build() { -+ # don't show desktop option if we choose minimal build -+ [[ $BUILD_MINIMAL == yes ]] && BUILD_DESKTOP=no -+ -+ if [[ $KERNEL_ONLY != yes && -z $BUILD_DESKTOP ]]; then -+ # read distribution support status which is written to the armbian-release file -+ set_distribution_status -+ options=() -+ options+=("no" "Image with console interface (server)") -+ options+=("yes" "Image with desktop environment") -+ BUILD_DESKTOP=$(dialog_if_terminal --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ -+ --menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -+ unset options -+ [[ -z $BUILD_DESKTOP ]] && exit_with_error "No option selected" -+ if [[ ${BUILD_DESKTOP} == "yes" ]]; then -+ BUILD_MINIMAL=no -+ SELECTED_CONFIGURATION="desktop" -+ fi -+ fi -+ return 0 -+} -+ -+function interactive_config_ask_standard_or_minimal() { -+ if [[ $KERNEL_ONLY != yes && $BUILD_DESKTOP == no && -z $BUILD_MINIMAL ]]; then -+ options=() -+ options+=("no" "Standard image with console interface") -+ options+=("yes" "Minimal image with console interface") -+ BUILD_MINIMAL=$(dialog_if_terminal --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ -+ --menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -+ unset options -+ [[ -z $BUILD_MINIMAL ]] && exit_with_error "No option selected" -+ if [[ $BUILD_MINIMAL == "yes" ]]; then -+ SELECTED_CONFIGURATION="cli_minimal" -+ else -+ SELECTED_CONFIGURATION="cli_standard" -+ fi -+ fi -+} -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 612003391..4632fd488 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -430,7 +430,7 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - but before assembling any package lists. - USER_CONFIG - -- display_alert "Extension initialization" "extension_prepare_config" "debug" -+ display_alert "Extensions: prepare configuration" "extension_prepare_config" "debug" - call_extension_method "extension_prepare_config" <<- 'EXTENSION_PREPARE_CONFIG' - *allow extensions to prepare their own config, after user config is done* - Implementors should preserve variable values pre-set, but can default values an/or validate them. -diff --git a/lib/functions/configuration/menu.sh b/lib/functions/configuration/menu.sh -index 32939ae36..6d6f0b266 100644 ---- a/lib/functions/configuration/menu.sh -+++ b/lib/functions/configuration/menu.sh -@@ -56,3 +56,32 @@ show_developer_warning() { - [[ $? -ne 0 ]] && exit_with_error "Error switching to the expert mode" - SHOW_WARNING=no - } -+ -+ -+# Stuff that was in config files -+function distro_menu() { -+ # create a select menu for choosing a distribution based EXPERT status -+ -+ local distrib_dir="${1}" -+ -+ if [[ -d "${distrib_dir}" && -f "${distrib_dir}/support" ]]; then -+ local support_level="$(cat "${distrib_dir}/support")" -+ if [[ "${support_level}" != "supported" && $EXPERT != "yes" ]]; then -+ : -+ else -+ local distro_codename="$(basename "${distrib_dir}")" -+ local distro_fullname="$(cat "${distrib_dir}/name")" -+ local expert_infos="" -+ [[ $EXPERT == "yes" ]] && expert_infos="(${support_level})" -+ options+=("${distro_codename}" "${distro_fullname} ${expert_infos}") -+ fi -+ fi -+ -+} -+ -+function distros_options() { -+ for distrib_dir in "config/distributions/"*; do -+ distro_menu "${distrib_dir}" -+ done -+} -+ -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index bdc642ded..196142608 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -11,19 +11,7 @@ function prepare_and_config_main_build_single() { - fi - display_alert "Determined DEST:" "${DEST}" "debug" - -- if [[ $BUILD_ALL != "yes" && -z $ROOT_FS_CREATE_ONLY ]]; then -- if [[ -t 0 ]]; then # "-t fd return True if file descriptor fd is open and refers to a terminal". 0 = stdin, 1 = stdout, 2 = stderr, 3+ custom -- display_alert "stdin is a terminal" "or is it?" "warning" -- # override stty size, if stdin is a terminal. -- [[ -n $COLUMNS ]] && stty cols $COLUMNS -- [[ -n $LINES ]] && stty rows $LINES -- TTY_X=$(($(stty size | awk '{print $2}') - 6)) # determine terminal width -- TTY_Y=$(($(stty size | awk '{print $1}') - 6)) # determine terminal height -- fi -- fi -- -- # We'll use this title on all menus -- backtitle="Armbian building script, https://www.armbian.com | https://docs.armbian.com | (c) 2013-2021 Igor Pecovnik " -+ interactive_config_prepare_terminal - - # Warnings mitigation - [[ -z $LANGUAGE ]] && export LANGUAGE="en_US:en" # set to english if not set -@@ -47,20 +35,14 @@ function prepare_and_config_main_build_single() { - # Mark a timestamp, for next build. - date +"%d_%m_%Y-%H_%M_%S" > "${DEST}"/${LOG_SUBPATH}/timestamp - -- if [[ $PROGRESS_DISPLAY == none ]]; then -- display_alert "Output will be silenced." "PROGRESS_DISPLAY=none" "warning" -- export OUTPUT_VERYSILENT=yes -- elif [[ $PROGRESS_DISPLAY == dialog ]]; then # @TODO: WHO SETS THIS?? this is key to solving the logging cray-cray -- export OUTPUT_DIALOG=yes -- fi -- -- # PROGRESS_LOG_TO_FILE is either yes, or unset. -+ # PROGRESS_LOG_TO_FILE is either yes, or unset. (@TODO: this is still used in buildpkg) - if [[ $PROGRESS_LOG_TO_FILE != yes ]]; then unset PROGRESS_LOG_TO_FILE; fi - - SHOW_WARNING=yes - - display_alert "Starting single build process" "${BOARD}" "info" - -+ # @TODO: rpardini: ccache belongs in compilation, not config. I think. - if [[ $USE_CCACHE != no ]]; then - CCACHE=ccache - export PATH="/usr/lib/ccache:$PATH" -@@ -71,6 +53,7 @@ function prepare_and_config_main_build_single() { - CCACHE="" - fi - -+ # @TODO: rpardini: refactor this into 'repo' stuff. Out of configuration, I think. - if [[ -n $REPOSITORY_UPDATE ]]; then - # select stable/beta configuration - if [[ $BETA == yes ]]; then -@@ -93,91 +76,12 @@ function prepare_and_config_main_build_single() { - exit - fi - -- # if KERNEL_ONLY, KERNEL_CONFIGURE, BOARD, BRANCH or RELEASE are not set, display selection menu -- if [[ -z $KERNEL_ONLY ]]; then -- options+=("yes" "U-boot and kernel packages") -- options+=("no" "Full OS image for flashing") -- KERNEL_ONLY=$(dialog_if_terminal --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags \ -- --menu "Select what to build" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- unset options -- [[ -z $KERNEL_ONLY ]] && exit_with_error "No option selected" -- fi -- -- if [[ -z $KERNEL_CONFIGURE ]]; then -- options+=("no" "Do not change the kernel configuration") -- options+=("yes" "Show a kernel configuration menu before compilation") -- options+=("prebuilt" "Use precompiled packages from Armbian repository") -- KERNEL_CONFIGURE=$(dialog_if_terminal --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags \ -- --menu "Select the kernel configuration" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- unset options -- [[ -z $KERNEL_CONFIGURE ]] && exit_with_error "No option selected" -- fi -+ interactive_config_ask_kernel -+ [[ -z $KERNEL_ONLY ]] && exit_with_error "No option selected: KERNEL_ONLY" -+ [[ -z $KERNEL_CONFIGURE ]] && exit_with_error "No option selected: KERNEL_CONFIGURE" - -- if [[ -z $BOARD ]]; then -- WIP_STATE=supported -- WIP_BUTTON='CSC/WIP/EOS/TVB' -- STATE_DESCRIPTION=' - boards with high level of software maturity' -- temp_rc=$(mktemp) # @TODO: this is a _very_ early call to mktemp - no TMPDIR set yet - it needs to be cleaned-up somehow -- -- while true; do -- options=() -- if [[ $WIP_STATE == supported ]]; then -- for board in "${SRC}"/config/boards/*.conf; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "$(head -1 "${board}" | cut -d'#' -f2)") -- done -- else -- for board in "${SRC}"/config/boards/*.wip; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(WIP)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -- done -- for board in "${SRC}"/config/boards/*.csc; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(CSC)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -- done -- for board in "${SRC}"/config/boards/*.eos; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(EOS)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -- done -- for board in "${SRC}"/config/boards/*.tvb; do -- options+=("$(basename "${board}" | cut -d'.' -f1)" "\Z1(TVB)\Zn $(head -1 "${board}" | cut -d'#' -f2)") -- done -- fi -- -- if [[ $WIP_STATE != supported ]]; then -- cat <<- 'EOF' > "${temp_rc}" -- dialog_color = (RED,WHITE,OFF) -- screen_color = (WHITE,RED,ON) -- tag_color = (RED,WHITE,ON) -- item_selected_color = (WHITE,RED,ON) -- tag_selected_color = (WHITE,RED,ON) -- tag_key_selected_color = (WHITE,RED,ON) -- EOF -- else -- echo > "${temp_rc}" -- fi -- BOARD=$(DIALOGRC=$temp_rc dialog_if_terminal --stdout --title "Choose a board" --backtitle "$backtitle" --scrollbar \ -- --colors --extra-label "Show $WIP_BUTTON" --extra-button \ -- --menu "Select the target board. Displaying:\n$STATE_DESCRIPTION" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- STATUS=$? -- if [[ $STATUS == 3 ]]; then -- if [[ $WIP_STATE == supported ]]; then -- [[ $SHOW_WARNING == yes ]] && show_developer_warning -- STATE_DESCRIPTION=' - \Z1(CSC)\Zn - Community Supported Configuration\n - \Z1(WIP)\Zn - Work In Progress -- \n - \Z1(EOS)\Zn - End Of Support\n - \Z1(TVB)\Zn - TV boxes' -- WIP_STATE=unsupported -- WIP_BUTTON='matured' -- EXPERT=yes -- else -- STATE_DESCRIPTION=' - boards with high level of software maturity' -- WIP_STATE=supported -- WIP_BUTTON='CSC/WIP/EOS' -- EXPERT=no -- fi -- continue -- elif [[ $STATUS == 0 ]]; then -- break -- fi -- unset options -- [[ -z $BOARD ]] && exit_with_error "No board selected" -- done -- fi -+ interactive_config_ask_board_list -+ [[ -z $BOARD ]] && exit_with_error "No board selected: BOARD" - - if [[ -f $SRC/config/boards/${BOARD}.conf ]]; then - BOARD_TYPE='conf' -@@ -191,80 +95,28 @@ function prepare_and_config_main_build_single() { - BOARD_TYPE='tvb' - fi - -+ # @TODO: rpardini: this is when Alice enters the hole. Sourcing stuff, extensions getting activated, etc. -+ - display_alert "Sourcing board configuration" "${BOARD}.${BOARD_TYPE}" "info" - # shellcheck source=/dev/null - source "${SRC}/config/boards/${BOARD}.${BOARD_TYPE}" - LINUXFAMILY="${BOARDFAMILY}" - -- [[ -z $KERNEL_TARGET ]] && exit_with_error "Board configuration does not define valid kernel config" -+ # @TODO: interesting. this sourced the board config. What sources the family? - -- if [[ -z $BRANCH ]]; then -- options=() -- [[ $KERNEL_TARGET == *current* ]] && options+=("current" "Recommended. Come with best support") -- [[ $KERNEL_TARGET == *legacy* ]] && options+=("legacy" "Old stable / Legacy") -- [[ $KERNEL_TARGET == *edge* && $EXPERT = yes ]] && options+=("edge" "\Z1Bleeding edge from @kernel.org\Zn") - -- # do not display selection dialog if only one kernel branch is available -- if [[ "${#options[@]}" == 2 ]]; then -- BRANCH="${options[0]}" -- else -- BRANCH=$(dialog_if_terminal --stdout --title "Choose a kernel" --backtitle "$backtitle" --colors \ -- --menu "Select the target kernel branch\nExact kernel versions depend on selected board" \ -- $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- fi -- unset options -- [[ -z $BRANCH ]] && exit_with_error "No kernel branch selected" -- [[ $BRANCH == dev && $SHOW_WARNING == yes ]] && show_developer_warning -- else -- [[ $BRANCH == next ]] && KERNEL_TARGET="next" -- # next = new legacy. Should stay for backward compatibility, but be removed from menu above -- # or we left definitions in board configs and only remove menu -- [[ $KERNEL_TARGET != *$BRANCH* ]] && exit_with_error "Kernel branch not defined for this board" "$BRANCH" -- fi -+ [[ -z $KERNEL_TARGET ]] && exit_with_error "Board configuration does not define valid kernel config" - -- if [[ $KERNEL_ONLY != yes && -z $RELEASE ]]; then -- options=() -- distros_options -- RELEASE=$(dialog_if_terminal --stdout --title "Choose a release package base" --backtitle "$backtitle" \ -- --menu "Select the target OS release package base" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- echo "options : ${options}" -- [[ -z $RELEASE ]] && exit_with_error "No release selected" -- unset options -- fi -+ interactive_config_ask_branch -+ [[ -z $BRANCH ]] && exit_with_error "No kernel branch selected: BRANCH" -+ [[ $KERNEL_TARGET != *$BRANCH* ]] && exit_with_error "Kernel branch not defined for this board" "$BRANCH" - -- # don't show desktop option if we choose minimal build -- [[ $BUILD_MINIMAL == yes ]] && BUILD_DESKTOP=no -- -- if [[ $KERNEL_ONLY != yes && -z $BUILD_DESKTOP ]]; then -- # read distribution support status which is written to the armbian-release file -- set_distribution_status -- options=() -- options+=("no" "Image with console interface (server)") -- options+=("yes" "Image with desktop environment") -- BUILD_DESKTOP=$(dialog_if_terminal --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ -- --menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- unset options -- [[ -z $BUILD_DESKTOP ]] && exit_with_error "No option selected" -- if [[ ${BUILD_DESKTOP} == "yes" ]]; then -- BUILD_MINIMAL=no -- SELECTED_CONFIGURATION="desktop" -- fi -- fi -+ interactive_config_ask_release -+ [[ -z $RELEASE ]] && exit_with_error "No release selected: RELEASE" - -- if [[ $KERNEL_ONLY != yes && $BUILD_DESKTOP == no && -z $BUILD_MINIMAL ]]; then -- options=() -- options+=("no" "Standard image with console interface") -- options+=("yes" "Minimal image with console interface") -- BUILD_MINIMAL=$(dialog_if_terminal --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ -- --menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") -- unset options -- [[ -z $BUILD_MINIMAL ]] && exit_with_error "No option selected" -- if [[ $BUILD_MINIMAL == "yes" ]]; then -- SELECTED_CONFIGURATION="cli_minimal" -- else -- SELECTED_CONFIGURATION="cli_standard" -- fi -- fi -+ interactive_config_ask_desktop_build -+ -+ interactive_config_ask_standard_or_minimal - - #prevent conflicting setup - if [[ $BUILD_DESKTOP == "yes" ]]; then -@@ -284,6 +136,7 @@ function prepare_and_config_main_build_single() { - - do_main_configuration - -+ # @TODO: this does not belong in configuration. it's a compilation thing. move there - # optimize build time with 100% CPU usage - CPUS=$(grep -c 'processor' /proc/cpuinfo) - if [[ $USEALLCORES != no ]]; then -@@ -305,20 +158,20 @@ function prepare_and_config_main_build_single() { - IMAGE_TYPE=user-built - fi - -- BOOTSOURCEDIR="${BOOTDIR}/$(branch2dir "${BOOTBRANCH}")" -- LINUXSOURCEDIR="${KERNELDIR}/$(branch2dir "${KERNELBRANCH}")" -- [[ -n $ATFSOURCE ]] && ATFSOURCEDIR="${ATFDIR}/$(branch2dir "${ATFBRANCH}")" -+ export BOOTSOURCEDIR="${BOOTDIR}/$(branch2dir "${BOOTBRANCH}")" -+ export LINUXSOURCEDIR="${KERNELDIR}/$(branch2dir "${KERNELBRANCH}")" -+ [[ -n $ATFSOURCE ]] && export ATFSOURCEDIR="${ATFDIR}/$(branch2dir "${ATFBRANCH}")" - -- BSP_CLI_PACKAGE_NAME="armbian-bsp-cli-${BOARD}${EXTRA_BSP_NAME}" -- BSP_CLI_PACKAGE_FULLNAME="${BSP_CLI_PACKAGE_NAME}_${REVISION}_${ARCH}" -- BSP_DESKTOP_PACKAGE_NAME="armbian-bsp-desktop-${BOARD}${EXTRA_BSP_NAME}" -- BSP_DESKTOP_PACKAGE_FULLNAME="${BSP_DESKTOP_PACKAGE_NAME}_${REVISION}_${ARCH}" -+ export BSP_CLI_PACKAGE_NAME="armbian-bsp-cli-${BOARD}${EXTRA_BSP_NAME}" -+ export BSP_CLI_PACKAGE_FULLNAME="${BSP_CLI_PACKAGE_NAME}_${REVISION}_${ARCH}" -+ export BSP_DESKTOP_PACKAGE_NAME="armbian-bsp-desktop-${BOARD}${EXTRA_BSP_NAME}" -+ export BSP_DESKTOP_PACKAGE_FULLNAME="${BSP_DESKTOP_PACKAGE_NAME}_${REVISION}_${ARCH}" - -- CHOSEN_UBOOT=linux-u-boot-${BRANCH}-${BOARD} -- CHOSEN_KERNEL=linux-image-${BRANCH}-${LINUXFAMILY} -- CHOSEN_ROOTFS=${BSP_CLI_PACKAGE_NAME} -- CHOSEN_DESKTOP=armbian-${RELEASE}-desktop-${DESKTOP_ENVIRONMENT} -- CHOSEN_KSRC=linux-source-${BRANCH}-${LINUXFAMILY} -+ export CHOSEN_UBOOT=linux-u-boot-${BRANCH}-${BOARD} -+ export CHOSEN_KERNEL=linux-image-${BRANCH}-${LINUXFAMILY} -+ export CHOSEN_ROOTFS=${BSP_CLI_PACKAGE_NAME} -+ export CHOSEN_DESKTOP=armbian-${RELEASE}-desktop-${DESKTOP_ENVIRONMENT} -+ export CHOSEN_KSRC=linux-source-${BRANCH}-${LINUXFAMILY} - - display_alert "Done with prepare_and_config_main_build_single" "${BOARD}.${BOARD_TYPE}" "info" - -@@ -338,32 +191,6 @@ function set_distribution_status() { - return 0 # due to last stmt above being a shortcut conditional - } - --function distro_menu() { -- # create a select menu for choosing a distribution based EXPERT status -- -- local distrib_dir="${1}" -- -- if [[ -d "${distrib_dir}" && -f "${distrib_dir}/support" ]]; then -- local support_level="$(cat "${distrib_dir}/support")" -- if [[ "${support_level}" != "supported" && $EXPERT != "yes" ]]; then -- : -- else -- local distro_codename="$(basename "${distrib_dir}")" -- local distro_fullname="$(cat "${distrib_dir}/name")" -- local expert_infos="" -- [[ $EXPERT == "yes" ]] && expert_infos="(${support_level})" -- options+=("${distro_codename}" "${distro_fullname} ${expert_infos}") -- fi -- fi -- --} -- --function distros_options() { -- for distrib_dir in "config/distributions/"*; do -- distro_menu "${distrib_dir}" -- done --} -- - # Some utility functions - branch2dir() { - [[ "${1}" == "head" ]] && echo "HEAD" || echo "${1##*:}" -diff --git a/lib/library-functions.sh b/lib/library-functions.sh -index b41fa1a8f..f9bb093a4 100644 ---- a/lib/library-functions.sh -+++ b/lib/library-functions.sh -@@ -7,6 +7,10 @@ set -e # no errors tolerated - # shellcheck source=functions/configuration/menu.sh - source "${SRC}"/lib/functions/configuration/menu.sh - -+### lib/functions/configuration/interactive.sh -+# shellcheck source=functions/configuration/interactive.sh -+source "${SRC}"/lib/functions/configuration/interactive.sh -+ - ### lib/functions/configuration/config-desktop.sh - # shellcheck source=functions/configuration/config-desktop.sh - source "${SRC}"/lib/functions/configuration/config-desktop.sh -@@ -187,4 +191,5 @@ source "${SRC}"/lib/functions/extras/fel.sh - # shellcheck source=functions/extras/buildpkg.sh - source "${SRC}"/lib/functions/extras/buildpkg.sh - -+ - # This file is/was autogenerated by lib/tools/gen-library.sh; don't modify manually - thanks - -From 078ad44f58e718d842b6a14d3f441560ac685022 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 24 Dec 2021 08:43:34 +0100 -Subject: [PATCH] logging: use chroot_custom for grub and flash-kernel - extension logging - -Signed-off-by: Ricardo Pardini ---- - extensions/flash-kernel.sh | 20 +++++++++----------- - extensions/grub.sh | 4 ++-- - 2 files changed, 11 insertions(+), 13 deletions(-) - -diff --git a/extensions/flash-kernel.sh b/extensions/flash-kernel.sh -index 2941d3a57..0390a3b37 100644 ---- a/extensions/flash-kernel.sh -+++ b/extensions/flash-kernel.sh -@@ -16,7 +16,6 @@ function extension_prepare_config__prepare_flash_kernel() { - export CLOUD_INIT_CONFIG_LOCATION="/boot/firmware" # use /boot/firmware for cloud-init as well - export VER="${FK__PUBLISHED_KERNEL_VERSION}" # For the VERSION - export EXTRA_BSP_NAME="${EXTRA_BSP_NAME}-fk${FK__PUBLISHED_KERNEL_VERSION}" # Unique bsp name. -- echo "-- starting" > "${DEST}"/"${LOG_SUBPATH}"/flash-kernel.log # Zero out the log for this extension. - } - - function post_install_kernel_debs__install_kernel_and_flash_packages() { -@@ -24,7 +23,7 @@ function post_install_kernel_debs__install_kernel_and_flash_packages() { - - if [[ "${FK__EXTRA_PACKAGES}" != "" ]]; then - display_alert "Installing flash-kernel extra packages" "${FK__EXTRA_PACKAGES}" -- chroot "${SDCARD}" /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get ${APT_EXTRA_DIST_PARAMS} -yqq --no-install-recommends install ${FK__EXTRA_PACKAGES}" || { -+ chroot_sdcard_apt_get_install "${FK__EXTRA_PACKAGES}" || { - display_alert "Failed to install flash-kernel's extra packages." "${EXTENSION}" "err" - exit 28 - } -@@ -32,7 +31,7 @@ function post_install_kernel_debs__install_kernel_and_flash_packages() { - - if [[ "${FK__KERNEL_PACKAGES}" != "" ]]; then - display_alert "Installing flash-kernel kernel packages" "${FK__KERNEL_PACKAGES}" -- chroot "${SDCARD}" /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get ${APT_EXTRA_DIST_PARAMS} -yqq --no-install-recommends install ${FK__KERNEL_PACKAGES}" || { -+ chroot_sdcard_apt_get_install "${FK__KERNEL_PACKAGES}" || { - display_alert "Failed to install flash-kernel's kernel packages." "${EXTENSION}" "err" - exit 28 - } -@@ -44,7 +43,7 @@ function post_install_kernel_debs__install_kernel_and_flash_packages() { - umount "${SDCARD}"/sys - mkdir -p "${SDCARD}"/sys/firmware/efi - -- chroot "${SDCARD}" /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get ${APT_EXTRA_DIST_PARAMS} -yqq --no-install-recommends install ${FK__TOOL_PACKAGE}" || { -+ chroot_sdcard_apt_get_install "${FK__TOOL_PACKAGE}" || { - display_alert "Failed to install flash-kernel package." "${EXTENSION}" "err" - exit 28 - } -@@ -74,9 +73,8 @@ function pre_update_initramfs__setup_flash_kernel() { - # hack, umount the chroot's /sys, otherwise flash-kernel tries to EFI flash due to the build host (!) being EFI - umount "$chroot_target/sys" - -- echo "-- flash-kernel disabling hooks" -- chroot "$chroot_target" /bin/bash -c "chmod -v -x /etc/kernel/postinst.d/initramfs-tools" 2>&1 -- chroot "$chroot_target" /bin/bash -c "chmod -v -x /etc/initramfs/post-update.d/flash-kernel" 2>&1 -+ chroot_custom "$chroot_target" chmod -v -x "/etc/kernel/postinst.d/initramfs-tools" -+ chroot_custom "$chroot_target" chmod -v -x "/etc/initramfs/post-update.d/flash-kernel" - - export FIRMWARE_DIR="${MOUNT}"/boot/firmware - call_extension_method "pre_initramfs_flash_kernel" <<- 'PRE_INITRAMFS_FLASH_KERNEL' -@@ -86,7 +84,7 @@ function pre_update_initramfs__setup_flash_kernel() { - - local update_initramfs_cmd="update-initramfs -c -k all" - display_alert "Updating flash-kernel initramfs..." "$update_initramfs_cmd" "" -- chroot "$chroot_target" /bin/bash -c "$update_initramfs_cmd" 2>&1 || { -+ chroot_custom "$chroot_target" "$update_initramfs_cmd" || { - display_alert "Failed to run '$update_initramfs_cmd'" "Check logs" "err" - exit 29 - } -@@ -99,14 +97,14 @@ function pre_update_initramfs__setup_flash_kernel() { - - local flash_kernel_cmd="flash-kernel --machine '${FK__MACHINE_MODEL}'" - display_alert "flash-kernel" "${FK__MACHINE_MODEL}" "info" -- chroot "$chroot_target" /bin/bash -c "${flash_kernel_cmd}" 2>&1 || { -+ chroot_custom "$chroot_target" "${flash_kernel_cmd}" || { - display_alert "Failed to run '${flash_kernel_cmd}'" "Check logs" "err" - exit 29 - } - - display_alert "Re-enabling" "initramfs-tools/flash-kernel hook for kernel" -- chroot "$chroot_target" /bin/bash -c "chmod -v +x /etc/kernel/postinst.d/initramfs-tools" 2>&1 -- chroot "$chroot_target" /bin/bash -c "chmod -v +x /etc/initramfs/post-update.d/flash-kernel" 2>&1 -+ chroot_custom "$chroot_target" chmod -v +x "/etc/kernel/postinst.d/initramfs-tools" -+ chroot_custom "$chroot_target" chmod -v +x "/etc/initramfs/post-update.d/flash-kernel" - - umount_chroot "$chroot_target/" - rm "$chroot_target"/usr/bin/"$QEMU_BINARY" -diff --git a/extensions/grub.sh b/extensions/grub.sh -index a0355f5bb..3f0478454 100644 ---- a/extensions/grub.sh -+++ b/extensions/grub.sh -@@ -96,14 +96,14 @@ pre_umount_final_image__install_grub() { - - if [[ "${UEFI_GRUB_TARGET_BIOS}" != "" ]]; then - display_alert "Installing GRUB BIOS..." "${UEFI_GRUB_TARGET_BIOS} device ${LOOP}" "" -- chroot "$chroot_target" /bin/bash -c "grub-install --target=${UEFI_GRUB_TARGET_BIOS} ${LOOP}" 2>&1 || { -+ chroot_custom "$chroot_target" grub-install --target=${UEFI_GRUB_TARGET_BIOS} "${LOOP}" || { - exit_with_error "${install_grub_cmdline} failed!" - } - fi - - local install_grub_cmdline="update-initramfs -c -k all && update-grub && grub-install --target=${UEFI_GRUB_TARGET} --no-nvram --removable" # nvram is global to the host, even across chroot. take care. - display_alert "Installing GRUB EFI..." "${UEFI_GRUB_TARGET}" "" -- chroot "$chroot_target" /bin/bash -c "$install_grub_cmdline" 2>&1 || { -+ chroot_custom "$chroot_target" "$install_grub_cmdline" || { - exit_with_error "${install_grub_cmdline} failed!" - } - - -From e4cc689b82986aa917ccf71cefcae121261559bd Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Fri, 24 Dec 2021 01:43:23 +0100 -Subject: [PATCH] logging: use line buffering, fix runner output color for GHA - -Signed-off-by: Ricardo Pardini ---- - lib/functions/logging/logging.sh | 15 ++++++++++----- - 1 file changed, 10 insertions(+), 5 deletions(-) - -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 765dda74f..b075a76ab 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -25,7 +25,7 @@ function logging_error_show_log() { - local prefix_sed_cmd="s/^/${prefix_sed_contents}/;" - display_alert " 👇👇👇 Showing logfile below 👇👇👇" "${logfile_to_show}" "err" - # shellcheck disable=SC2002 # my cat is great. thank you, shellcheck. -- cat "${logfile_to_show}" | grep -v -e "^$" | sed -e "${prefix_sed_cmd}" 1>&2 # write it TO stderr!! -+ cat "${logfile_to_show}" | grep -v -e "^$" | sed -e "${prefix_sed_cmd}" 1>&2 # write it to stderr!! - display_alert " 👆👆👆 Showing logfile above 👆👆👆" "${logfile_to_show}" "err" - display_alert "🦞 Error Msg" "$message" "err" - display_alert "🐞 Error stacktrace" "$stacktrace" "err" -@@ -55,16 +55,21 @@ function do_with_logging() { - # this is mostly handled by redirecting stderr to stdout: 2>&1 - - local exit_code=176 # fail by default... -- local prefix_sed_contents -- prefix_sed_contents="$(logging_echo_prefix_for_pv "tool") $(echo -n -e "${gray_color}")" -- local prefix_sed_cmd="s/^/${prefix_sed_contents}/;" - if [[ "${SHOW_LOG}" == "yes" ]]; then -+ local prefix_sed_contents -+ local tool_color="${gray_color}" # default to gray... (should be ok on terminals) -+ if [[ "${CI}" == "true" ]]; then # ... but that is too dark for Github Actions -+ tool_color="${normal_color}" -+ fi -+ prefix_sed_contents="$(logging_echo_prefix_for_pv "tool") $(echo -n -e "${tool_color}")" -+ local prefix_sed_cmd="s/^/${prefix_sed_contents}/;" -+ - # This is sick. Create a 3rd file descriptor sending it to sed. https://unix.stackexchange.com/questions/174849/redirecting-stdout-to-terminal-and-file-without-using-a-pipe - # Also terrible: don't hold a reference to cwd by changing to SRC always - exec 3> >( - cd "${SRC}" || exit 2 - #grep --line-buffered -v "^$" | \ -- sed -e "${prefix_sed_cmd}" -+ sed -u -e "${prefix_sed_cmd}" - ) - "$@" >&3 - exit_code=$? # hopefully this is the pipe - -From b1cfead3ac2957d5e19a3f10010a814ef0e70297 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 22 Dec 2021 01:19:47 +0100 -Subject: [PATCH] logging: wrap dpkg-deb; set TMPDIR (not in chroot); refactor - kernel make - -- And a huge amount of @TODO's added -- Add "debug" and "deprecation" `display_alert()` levels -- insist that `install_common` is now `install_distribution_agnostic` -- unrelated: realtek 8822CS is EXTRAWIFI=yes only now, sorry. -- many debug statements for desktop - -Signed-off-by: Ricardo Pardini ---- - config/sources/amd64.conf | 2 +- - lib/functions/bsp/bsp-cli.sh | 2 +- - lib/functions/bsp/bsp-desktop.sh | 4 +- - lib/functions/compilation/compilation-utils.sh | 2 +- - lib/functions/compilation/debs.sh | 9 +-- - lib/functions/compilation/extra-drivers.sh | 4 +- - lib/functions/compilation/kernel.sh | 86 ++++++++++++++++---------- - lib/functions/compilation/uboot.sh | 2 +- - lib/functions/configuration/main-config.sh | 20 ++++-- - lib/functions/general/host.sh | 11 +++- - lib/functions/image/loop.sh | 2 +- - lib/functions/logging/logging.sh | 5 ++ - lib/functions/logging/runners.sh | 19 ++++-- - lib/functions/main/config-prepare.sh | 3 +- - lib/functions/main/rootfs-image.sh | 2 +- - lib/functions/rootfs/apt.sh | 13 ++-- - lib/functions/rootfs/distro_agnostic.sh | 2 +- - 17 files changed, 122 insertions(+), 66 deletions(-) - -diff --git a/config/sources/amd64.conf b/config/sources/amd64.conf -index b7a20d2c3..510d1b6b6 100644 ---- a/config/sources/amd64.conf -+++ b/config/sources/amd64.conf -@@ -4,7 +4,7 @@ export QEMU_BINARY="qemu-x86_64-static" # Hopefully you have this installed. - export KERNEL_COMPILER=' ' # hack: use single space for host gcc. won't work on arm64 hosts - export KERNEL_USE_GCC=' ' # more hacks. - export KERNEL_IMAGE_TYPE="bzImage" # Ubuntu Standard --export KERNEL_EXTRA_TARGETS="modules" # default is "modules dtb" but x86_64 has no DTB -+export KERNEL_EXTRA_TARGETS=" " # default is "dtbs" but x86_64 has no DTB. use a space for no target - #export INITRD_ARCH=amd64 # Used by u-boot for mkimage in initramfs. No u-boot for x86 yet. - - export UBOOT_USE_GCC="none" # required by configuration.sh -diff --git a/lib/functions/bsp/bsp-cli.sh b/lib/functions/bsp/bsp-cli.sh -index b65f0b89e..67baede0d 100644 ---- a/lib/functions/bsp/bsp-cli.sh -+++ b/lib/functions/bsp/bsp-cli.sh -@@ -300,7 +300,7 @@ POST_FAMILY_TWEAKS_BSP - find "${destination}" ! -type l -print0 2> /dev/null | xargs -0r chmod 'go=rX,u+rw,a-s' - - # create board DEB file -- fakeroot dpkg-deb -b -Z${DEB_COMPRESS} "${destination}" "${destination}.deb" 2>&1 -+ fakeroot_dpkg_deb_build "${destination}" "${destination}.deb" - mkdir -p "${DEB_STORAGE}/${RELEASE}/" - rsync --remove-source-files -rq "${destination}.deb" "${DEB_STORAGE}/${RELEASE}/" 2>&1 - -diff --git a/lib/functions/bsp/bsp-desktop.sh b/lib/functions/bsp/bsp-desktop.sh -index 8de8b9927..baa585d7f 100644 ---- a/lib/functions/bsp/bsp-desktop.sh -+++ b/lib/functions/bsp/bsp-desktop.sh -@@ -84,7 +84,7 @@ create_desktop_package() { - mkdir -p "${DEB_STORAGE}/${RELEASE}" - cd "${destination}" - cd .. -- fakeroot dpkg-deb -b -Z${DEB_COMPRESS} "${destination}" "${DEB_STORAGE}/${RELEASE}/${CHOSEN_DESKTOP}_${REVISION}_all.deb" > /dev/null -+ fakeroot_dpkg_deb_build "${destination}" "${DEB_STORAGE}/${RELEASE}/${CHOSEN_DESKTOP}_${REVISION}_all.deb" - - # cleanup - rm -rf "${tmp_dir}" -@@ -146,7 +146,7 @@ create_bsp_desktop_package() { - mkdir -p "${DEB_STORAGE}/${RELEASE}" - cd "${destination}" - cd .. -- fakeroot dpkg-deb -b -Z${DEB_COMPRESS} "${destination}" "${DEB_STORAGE}/${RELEASE}/${package_name}.deb" > /dev/null -+ fakeroot_dpkg_deb_build "${destination}" "${DEB_STORAGE}/${RELEASE}/${package_name}.deb" - - # cleanup - rm -rf "${tmp_dir}" -diff --git a/lib/functions/compilation/compilation-utils.sh b/lib/functions/compilation/compilation-utils.sh -index 13f7138d3..e9ff44a09 100644 ---- a/lib/functions/compilation/compilation-utils.sh -+++ b/lib/functions/compilation/compilation-utils.sh -@@ -92,7 +92,7 @@ overlayfs_wrapper() { - local description="$3" - mkdir -p /tmp/overlay_components/ /tmp/armbian_build/ - local tempdir workdir mergeddir -- tempdir=$(mktemp -d --tmpdir="/tmp/overlay_components/") -+ tempdir=$(mktemp -d --tmpdir="/tmp/overlay_components/") # @TODO: WORKDIR? otherwise uses host's root disk, which might be small - workdir=$(mktemp -d --tmpdir="/tmp/overlay_components/") - mergeddir=$(mktemp -d --suffix="_$description" --tmpdir="/tmp/armbian_build/") - mount -t overlay overlay -o lowerdir="$srcdir",upperdir="$tempdir",workdir="$workdir" "$mergeddir" -diff --git a/lib/functions/compilation/debs.sh b/lib/functions/compilation/debs.sh -index 793bf9eeb..d696b9d86 100644 ---- a/lib/functions/compilation/debs.sh -+++ b/lib/functions/compilation/debs.sh -@@ -12,6 +12,7 @@ compile_firmware() { - mkdir -p "${firmwaretempdir}/${plugin_dir}/lib/firmware" - - fetch_from_repo "https://github.com/armbian/firmware" "armbian-firmware-git" "branch:master" -+ - if [[ -n $FULL ]]; then - fetch_from_repo "$MAINLINE_FIRMWARE_SOURCE" "linux-firmware-git" "branch:master" - # cp : create hardlinks -@@ -42,11 +43,11 @@ compile_firmware() { - # pack - mv "armbian-firmware${FULL}" "armbian-firmware${FULL}_${REVISION}_all" - display_alert "Building firmware package" "armbian-firmware${FULL}_${REVISION}_all" "info" -- fakeroot dpkg-deb -b -Z${DEB_COMPRESS} "armbian-firmware${FULL}_${REVISION}_all" 2>&1 -+ fakeroot_dpkg_deb_build "armbian-firmware${FULL}_${REVISION}_all" - mv "armbian-firmware${FULL}_${REVISION}_all" "armbian-firmware${FULL}" - rsync -rq "armbian-firmware${FULL}_${REVISION}_all.deb" "${DEB_STORAGE}/" - -- # remove temp directory -+ # remove temp directory - @TODO: maybe not, just leave thrash behind. - rm -rf "${firmwaretempdir}" - } - -@@ -121,7 +122,7 @@ compile_armbian-zsh() { - - chmod 755 "${tmp_dir}/${armbian_zsh_dir}"/DEBIAN/postinst - -- fakeroot dpkg-deb -b -Z${DEB_COMPRESS} "${tmp_dir}/${armbian_zsh_dir}" 2>&1 -+ fakeroot_dpkg_deb_build "${tmp_dir}/${armbian_zsh_dir}" - rsync --remove-source-files -rq "${tmp_dir}/${armbian_zsh_dir}.deb" "${DEB_STORAGE}/" - rm -rf "${tmp_dir}" - -@@ -176,7 +177,7 @@ compile_armbian-config() { - ln -sf /usr/sbin/armbian-config "${tmp_dir}/${armbian_config_dir}"/usr/bin/armbian-config - ln -sf /usr/sbin/softy "${tmp_dir}/${armbian_config_dir}"/usr/bin/softy - -- fakeroot dpkg-deb -b -Z${DEB_COMPRESS} "${tmp_dir}/${armbian_config_dir}" > /dev/null -+ fakeroot_dpkg_deb_build "${tmp_dir}/${armbian_config_dir}" - rsync --remove-source-files -rq "${tmp_dir}/${armbian_config_dir}.deb" "${DEB_STORAGE}/" - rm -rf "${tmp_dir}" - } -diff --git a/lib/functions/compilation/extra-drivers.sh b/lib/functions/compilation/extra-drivers.sh -index 39d092bbc..69e287d81 100644 ---- a/lib/functions/compilation/extra-drivers.sh -+++ b/lib/functions/compilation/extra-drivers.sh -@@ -545,14 +545,12 @@ prepare_extra_kernel_drivers() { - fi - - # Bluetooth support for Realtek 8822CS (hci_ver 0x8) chipsets -- # For sunxi, these two patches are applied in a series. -- if linux-version compare "${version}" ge 5.11 && [[ "$LINUXFAMILY" != sunxi* ]] ; then - -+ if linux-version compare "${version}" ge 5.11 && [ "$EXTRAWIFI" == yes ]; then - display_alert "Adding" "Bluetooth support for Realtek 8822CS (hci_ver 0x8) chipsets" "info" - - process_patch_file "${SRC}/patch/misc/bluetooth-rtl8822cs-hci_ver-0x8.patch" "applying" - process_patch_file "${SRC}/patch/misc/Bluetooth-hci_h5-Add-power-reset-via-gpio-in-h5_btrt.patch" "applying" -- - fi - - # Wireless drivers for Realtek 8723DS chipsets -diff --git a/lib/functions/compilation/kernel.sh b/lib/functions/compilation/kernel.sh -index df9c85ee2..291cf7285 100644 ---- a/lib/functions/compilation/kernel.sh -+++ b/lib/functions/compilation/kernel.sh -@@ -1,3 +1,39 @@ -+function run_kernel_make() { -+ declare -a common_make_params_quoted common_make_envs full_command -+ -+ common_make_envs=( -+ "CCACHE_BASEDIR=\"$(pwd)\"" # Base directory for ccache, for cache reuse -+ "PATH=\"${toolchain}:${PATH}\"" # Insert the toolchain first into the PATH. -+ ) -+ -+ common_make_params_quoted=( -+ "$CTHREADS" # Parallel compile, "-j X" for X cpus -+ "LOCALVERSION=-${LINUXFAMILY}" # Kernel param -+ "KDEB_PKGVERSION=${REVISION}" # deb package version -+ "KDEB_COMPRESS=${DEB_COMPRESS}" # dpkg compression for deb -+ "BRANCH=${BRANCH}" # @TODO: rpardini: Wonder what BRANCH is used for during packaging? -+ "ARCH=${ARCHITECTURE}" # Why? -+ "KBUILD_DEBARCH=${ARCH}" # Where used? -+ "DEBFULLNAME=${MAINTAINER}" # For changelog generation -+ "DEBEMAIL=${MAINTAINERMAIL}" # idem -+ "CROSS_COMPILE=${CCACHE} ${KERNEL_COMPILER}" # Prefix for tool invocations. -+ ) -+ -+ # last statement, so it passes the result to calling function. -+ full_command=("${KERNEL_MAKE_RUNNER:-run_host_command_logged}" "${common_make_envs[@]}" make "$@" "${common_make_params_quoted[@]@Q}") -+ display_alert "Kernel make" "${full_command[*]}" "debug" -+ # echo "${full_command[@]}" >&2 # last-resort bash-quoting debugging -+ "${full_command[@]}" # and exit with it's code, since it's the last statement -+} -+ -+function run_kernel_make_dialog() { -+ KERNEL_MAKE_RUNNER="run_host_command_dialog" run_kernel_make "$@" -+} -+ -+function run_kernel_make_long_running() { -+ KERNEL_MAKE_RUNNER="run_host_command_logged_long_running" run_kernel_make "$@" -+} -+ - compile_kernel() { - if [[ $CLEAN_LEVEL == *make* ]]; then - display_alert "Cleaning" "$LINUXSOURCEDIR" "info" -@@ -18,14 +54,16 @@ compile_kernel() { - rm -f localversion - - # read kernel version -- local version hash -+ local version hash pre_patch_version - version=$(grab_version "$kerneldir") -+ pre_patch_version="${version}" -+ display_alert "Pre-patch kernel version" "${pre_patch_version}" "debug" - - # read kernel git hash - hash=$(improved_git --git-dir="$kerneldir"/.git rev-parse HEAD) - - # Apply a series of patches if a series file exists -- if test -f "${SRC}"/patch/kernel/${KERNELPATCHDIR}/series.conf; then -+ if test -f "${SRC}"/patch/kernel/"${KERNELPATCHDIR}"/series.conf; then - display_alert "series.conf file visible. Apply" - series_conf="${SRC}"/patch/kernel/${KERNELPATCHDIR}/series.conf - -@@ -33,7 +71,7 @@ compile_kernel() { - apply_patch_series "${kerneldir}" "$series_conf" - fi - -- # build 3rd party drivers -+ # build 3rd party drivers; # @TODO: does it build? or only patch? - prepare_extra_kernel_drivers - - advanced_patch "kernel" "$KERNELPATCHDIR" "$BOARD" "" "$BRANCH" "$LINUXFAMILY-$BRANCH" -@@ -61,7 +99,8 @@ compile_kernel() { - exit_with_error "Architecture [$ARCH] is not supported" - fi - -- display_alert "Compiler version" "${KERNEL_COMPILER}gcc $(eval env PATH="${toolchain}:${PATH}" "${KERNEL_COMPILER}gcc" -dumpversion)" "info" -+ kernel_compiler_version="$(eval env PATH="${toolchain}:${PATH}" "${KERNEL_COMPILER}gcc" -dumpversion)" -+ display_alert "Compiler version" "${KERNEL_COMPILER}gcc ${kernel_compiler_version}" "info" - - # copy kernel config - local COPY_CONFIG_BACK_TO="" -@@ -93,28 +132,26 @@ compile_kernel() { - fi - - # hack for deb builder. To pack what's missing in headers pack. -- cp "${SRC}"/patch/misc/headers-debian-byteshift.patch /tmp -+ cp "${SRC}"/patch/misc/headers-debian-byteshift.patch /tmp # @TODO: ok, but why /tmp? It's leaking there. - - display_alert "Kernel configuration" "${LINUXCONFIG}" "info" - - if [[ $KERNEL_CONFIGURE != yes ]]; then - if [[ $BRANCH == default ]]; then -- run_host_command_logged CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${PATH}" \ -- make "ARCH=$ARCHITECTURE" "CROSS_COMPILE=\"$CCACHE $KERNEL_COMPILER\"" silentoldconfig -+ run_kernel_make silentoldconfig # This will exit with generic error if it fails. - else - # TODO: check if required -- run_host_command_logged CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${PATH}" \ -- make "ARCH=$ARCHITECTURE" "CROSS_COMPILE=\"$CCACHE $KERNEL_COMPILER\"" olddefconfig || { -+ run_kernel_make olddefconfig || { - exit_with_error "Error kernel olddefconfig" - } - fi - else -- run_host_command_logged CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${PATH}" \ -- make "$CTHREADS" "ARCH=$ARCHITECTURE" "CROSS_COMPILE=\"$CCACHE $KERNEL_COMPILER\"" oldconfig -+ display_alert "Starting kernel oldconfig+menuconfig" "${LINUXCONFIG}" "debug" -+ -+ run_kernel_make oldconfig - - # No logging for this. this is UI piece -- CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${PATH}" \ -- make "$CTHREADS" "ARCH=$ARCHITECTURE" "CROSS_COMPILE=\"$CCACHE $KERNEL_COMPILER\"" "${KERNEL_MENUCONFIG:-menuconfig}" || { -+ run_kernel_make_dialog "${KERNEL_MENUCONFIG:-menuconfig}" || { - exit_with_error "Error kernel menuconfig failed" - } - -@@ -127,8 +164,7 @@ compile_kernel() { - - # export defconfig too if requested - if [[ $KERNEL_EXPORT_DEFCONFIG == yes ]]; then -- run_host_command_logged CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${PATH}" \ -- make "ARCH=$ARCHITECTURE" "CROSS_COMPILE=\"$CCACHE $KERNEL_COMPILER\"" savedefconfig -+ run_kernel_make savedefconfig - - [[ -f defconfig ]] && cp defconfig "${DEST}/config/${LINUXCONFIG}.defconfig" - fi -@@ -142,11 +178,7 @@ compile_kernel() { - fi - - display_alert "Compiling Kernel" "${LINUXCONFIG} ${KERNEL_IMAGE_TYPE}" "info" -- # shellcheck disable=SC2086 # sorry gotta expand the targets somewhere -- run_host_command_logged_long_running CCACHE_BASEDIR="$(pwd)" PATH="${toolchain}:${PATH}" \ -- make "$CTHREADS" "ARCH=$ARCHITECTURE" "CROSS_COMPILE=\"$CCACHE $KERNEL_COMPILER\"" \ -- "$SRC_LOADADDR" "LOCALVERSION=\"-$LINUXFAMILY\"" \ -- $KERNEL_IMAGE_TYPE ${KERNEL_EXTRA_TARGETS:-modules dtbs} || { -+ run_kernel_make_long_running "${KERNEL_IMAGE_TYPE}" modules "${KERNEL_EXTRA_TARGETS:-dtbs}" || { - exit_with_error "Failure during kernel compile" "@host" - } - -@@ -164,17 +196,7 @@ compile_kernel() { - display_alert "Creating kernel packages" "${LINUXCONFIG} $kernel_packaging_target" "info" - - # produce deb packages: image, headers, firmware, dtb -- run_host_command_logged_long_running CCACHE_BASEDIR="$(pwd)" env PATH="${toolchain}:${PATH}" \ -- make "$CTHREADS" $kernel_packaging_target \ -- "KDEB_PKGVERSION=$REVISION" \ -- "KDEB_COMPRESS=${DEB_COMPRESS}" \ -- "BRANCH=$BRANCH" \ -- "LOCALVERSION=\"-${LINUXFAMILY}\"" \ -- "KBUILD_DEBARCH=$ARCH" \ -- "ARCH=$ARCHITECTURE" \ -- "DEBFULLNAME=\"$MAINTAINER\"" \ -- "DEBEMAIL=\"$MAINTAINERMAIL\"" \ -- "CROSS_COMPILE=\"$CCACHE $KERNEL_COMPILER\"" || { -+ run_kernel_make_long_running $kernel_packaging_target || { - exit_with_error "Failure during kernel packaging" "@host" - } - -@@ -259,7 +281,7 @@ create_linux-source_package() { - Description: This package provides the source code for the Linux kernel $version - EOF - -- fakeroot dpkg-deb -b -Z${DEB_COMPRESS} -z0 "${sources_pkg_dir}" "${sources_pkg_dir}.deb" -+ fakeroot_dpkg_deb_build -z0 "${sources_pkg_dir}" "${sources_pkg_dir}.deb" - rsync --remove-source-files -rq "${sources_pkg_dir}.deb" "${DEB_STORAGE}/" - - te=$(date +%s) -diff --git a/lib/functions/compilation/uboot.sh b/lib/functions/compilation/uboot.sh -index 666a84033..183298c4b 100644 ---- a/lib/functions/compilation/uboot.sh -+++ b/lib/functions/compilation/uboot.sh -@@ -222,7 +222,7 @@ compile_uboot() { - [[ -n $atftempdir && -f $atftempdir/license.md ]] && cp "${atftempdir}/license.md" "$uboottempdir/${uboot_name}/usr/lib/u-boot/LICENSE.atf" 2>&1 - - display_alert "Building u-boot deb" "${uboot_name}.deb" -- fakeroot dpkg-deb -b -Z${DEB_COMPRESS} "$uboottempdir/${uboot_name}" "$uboottempdir/${uboot_name}.deb" 2>&1 -+ fakeroot_dpkg_deb_build "$uboottempdir/${uboot_name}" "$uboottempdir/${uboot_name}.deb" - rm -rf "$uboottempdir/${uboot_name}" - [[ -n $atftempdir ]] && rm -rf "${atftempdir}" - -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index 14953a5fe..612003391 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -190,7 +190,7 @@ function do_main_configuration() { - it is often used to in turn override those. - POST_FAMILY_CONFIG - -- display_alert "Handling some" "desktop config stuff 1" "warning" -+ display_alert "Handling some" "desktop config stuff 1" "debug" - - # Myy : Once we got a list of selected groups, parse the PACKAGE_LIST inside configuration.sh - DESKTOP_ELEMENTS_DIR="${SRC}/config/desktop/${RELEASE}" -@@ -216,6 +216,7 @@ function do_main_configuration() { - fi - - fi -+ display_alert "Handling some" "desktop config stuff 2" "debug" - - if [[ $BUILD_DESKTOP == "yes" ]]; then - # Expected environment variables : -@@ -226,6 +227,7 @@ function do_main_configuration() { - - desktop_environment_check_if_valid - fi -+ display_alert "Handling some" "desktop config stuff 3" "debug" - - if [[ $BUILD_DESKTOP == "yes" && -z $DESKTOP_ENVIRONMENT_CONFIG_NAME ]]; then - # FIXME Check for empty folders, just in case the current maintainer -@@ -249,6 +251,7 @@ function do_main_configuration() { - exit_with_error "No desktop configuration selected... Do you really want a desktop environment ?" - fi - fi -+ display_alert "Handling some" "desktop config stuff 4" "debug" - - if [[ $BUILD_DESKTOP == "yes" ]]; then - DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH="${DESKTOP_ENVIRONMENT_DIRPATH}/${DESKTOP_ENVIRONMENT_CONFIG_NAME}" -@@ -266,6 +269,7 @@ function do_main_configuration() { - options+=("${appgroup}" "${appgroup^}" off) - done - -+ # FIXME: pardini: here's a subshell to run dialog. in the middle of the main config. refactor this away - DESKTOP_APPGROUPS_SELECTED=$( - show_select_menu \ - "Choose desktop softwares to add" \ -@@ -277,15 +281,18 @@ function do_main_configuration() { - unset options - fi - -- #exit_with_error 'Testing' -+ display_alert "Done with" "desktop config stuff - END" "debug" - - # set unique mounting directory - MOUNT_UUID=$(uuidgen) -- SDCARD="${SRC}/.tmp/rootfs-${MOUNT_UUID}" -- MOUNT="${SRC}/.tmp/mount-${MOUNT_UUID}" -- DESTIMG="${SRC}/.tmp/image-${MOUNT_UUID}" - -- # dropbear needs to be configured differently -+ # Super-global variables, used everywhere. They're not _created_ here, since this is config stage, not build. -+ export WORKDIR="${SRC}/.tmp/work-${MOUNT_UUID}" # WORKDIR at this stage. It will become TMPDIR later. It has special significance to `mktemp` and others! -+ export SDCARD="${SRC}/.tmp/rootfs-${MOUNT_UUID}" # SDCARD (which is NOT an sdcard, but will be, maybe, one day) is where we work the rootfs before final imaging. "rootfs" stage. -+ export MOUNT="${SRC}/.tmp/mount-${MOUNT_UUID}" # MOUNT ("mounted on the loop") is the mounted root on final image (via loop). "image" stage -+ export DESTIMG="${SRC}/.tmp/image-${MOUNT_UUID}" # DESTIMG is where the backing image (raw, huge, sparse file) is kept -+ -+ # dropbear needs to be configured differently # @TODO: rpardini: yes, and? are you a lost leftover comment from a previous era? - [[ $CRYPTROOT_ENABLE == yes && $RELEASE == xenial ]] && exit_with_error "Encrypted rootfs is not supported in Xenial" - [[ $RELEASE == stretch && $CAN_BUILD_STRETCH != yes ]] && exit_with_error "Building Debian Stretch images with selected kernel is not supported" - [[ $RELEASE == bionic && $CAN_BUILD_STRETCH != yes ]] && exit_with_error "Building Ubuntu Bionic images with selected kernel is not supported" -@@ -423,6 +430,7 @@ desktop/${RELEASE}/environments/${DESKTOP_ENVIRONMENT}/appgroups - but before assembling any package lists. - USER_CONFIG - -+ display_alert "Extension initialization" "extension_prepare_config" "debug" - call_extension_method "extension_prepare_config" <<- 'EXTENSION_PREPARE_CONFIG' - *allow extensions to prepare their own config, after user config is done* - Implementors should preserve variable values pre-set, but can default values an/or validate them. -diff --git a/lib/functions/general/host.sh b/lib/functions/general/host.sh -index 3e750ebe7..5156c4ed8 100644 ---- a/lib/functions/general/host.sh -+++ b/lib/functions/general/host.sh -@@ -243,11 +243,20 @@ prepare_host() { - find "${SRC}"/output "${USERPATCHES_PATH}" -type d ! -group sudo -exec chgrp --quiet sudo {} \; - find "${SRC}"/output "${USERPATCHES_PATH}" -type d ! -perm -g+w,g+s -exec chmod --quiet g+w,g+s {} \; - fi -- mkdir -p "${DEST}"/debs-beta/extra "${DEST}"/debs/extra "${DEST}"/{config,debug,patch} "${USERPATCHES_PATH}"/overlay "${SRC}"/cache/{sources,hash,hash-beta,toolchain,utility,rootfs} "${SRC}"/.tmp -+ # @TODO: rpardini: _very_ important spot, this is where ".tmp" is created. A _huge_ opportunity for tmpfs here. -+ display_alert "Creating directory structure: .tmp" "${SRC}/.tmp" "debug" -+ display_alert "Creating directory structure: DEST" "${DEST}" "debug" -+ mkdir -p "${DEST}"/debs-beta/extra "${DEST}"/debs/extra "${DEST}"/{config,debug,patch} \ -+ "${USERPATCHES_PATH}"/overlay "${SRC}"/cache/{sources,hash,hash-beta,toolchain,utility,rootfs} \ -+ "${SRC}"/.tmp "${WORKDIR}" -+ -+ display_alert "Setting TMPDIR" "${WORKDIR}" "debug" -+ export TMPDIR="${WORKDIR}" - - # build aarch64 - if [[ $(dpkg --print-architecture) == amd64 ]]; then - if [[ "${SKIP_EXTERNAL_TOOLCHAINS}" != "yes" ]]; then -+ display_alert "Warning! SKIP_EXTERNAL_TOOLCHAINS is not yes. This is deprecated, upgrade!" "please set SKIP_EXTERNAL_TOOLCHAINS=yes" "deprecation" - - # bind mount toolchain if defined - if [[ -d "${ARMBIAN_CACHE_TOOLCHAIN_PATH}" ]]; then -diff --git a/lib/functions/image/loop.sh b/lib/functions/image/loop.sh -index c248a0065..296697b44 100644 ---- a/lib/functions/image/loop.sh -+++ b/lib/functions/image/loop.sh -@@ -31,7 +31,7 @@ write_uboot_to_loop_image() { - - local loop=$1 revision - display_alert "Preparing u-boot bootloader" "$loop" "info" -- TEMP_DIR=$(mktemp -d || exit 1) -+ TEMP_DIR=$(mktemp -d) # set-e is in effect. no need to exit on errors explicitly - chmod 700 ${TEMP_DIR} - revision=${REVISION} - if [[ -n $UPSTREM_VER ]]; then -diff --git a/lib/functions/logging/logging.sh b/lib/functions/logging/logging.sh -index 01d6b67d7..765dda74f 100644 ---- a/lib/functions/logging/logging.sh -+++ b/lib/functions/logging/logging.sh -@@ -119,6 +119,11 @@ display_alert() { - inline_logs_color="\e[0;32m" - ;; - -+ debug | deprecation) -+ level_indicator="✨" # "🌴" 🥑 -+ inline_logs_color="\e[1;33m" -+ ;; -+ - *) - level_indicator="🌿" # "✨" 🌿 🪵 - inline_logs_color="\e[1;37m" -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index 2c99ae571..97b13ddef 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -16,7 +16,7 @@ function chroot_sdcard_apt_get() { - - # please, please, unify around this function. if SDCARD is not enough, I'll make a mount version. - function chroot_sdcard() { -- run_host_command_logged_raw chroot "${SDCARD}" /bin/bash -e -c "$*" -+ TMPDIR="" run_host_command_logged_raw chroot "${SDCARD}" /bin/bash -e -c "$*" - } - - function chroot_custom_long_running() { -@@ -24,10 +24,10 @@ function chroot_custom_long_running() { - shift - local _exit_code=1 - if [[ "${SHOW_LOG}" == "yes" ]] || [[ "${CI}" == "true" ]]; then -- run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" -+ TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" - _exit_code=$? - else -- run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" | pv -N "$(logging_echo_prefix_for_pv "${INDICATOR:-compile}")" --progress --timer --line-mode --force --cursor --delay-start 0 -i "0.5" -+ TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" | pv -N "$(logging_echo_prefix_for_pv "${INDICATOR:-compile}")" --progress --timer --line-mode --force --cursor --delay-start 0 -i "0.5" - _exit_code=$? - fi - return $_exit_code -@@ -36,7 +36,13 @@ function chroot_custom_long_running() { - function chroot_custom() { - local target=$1 - shift -- run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" -+ TMPDIR="" run_host_command_logged_raw chroot "${target}" /bin/bash -e -c "$*" -+} -+ -+# for deb building. -+function fakeroot_dpkg_deb_build() { -+ display_alert "Building .deb package" "$(basename "${3:-${2:-${1}}}" || true)" "debug" -+ run_host_command_logged_raw fakeroot dpkg-deb -b "-Z${DEB_COMPRESS}" "$@" 2>&1 - } - - # for long-running, host-side expanded bash invocations. -@@ -60,6 +66,11 @@ function run_host_command_logged() { - run_host_command_logged_raw /bin/bash -e -c "$*" - } - -+# for interactive, dialog-like host-side invocations. no redirections performed, but same bash usage and expansion, for consistency. -+function run_host_command_dialog() { -+ /bin/bash -e -c "$*" -+} -+ - # do NOT use directly, it does NOT expand the way it should (through bash) - function run_host_command_logged_raw() { - # Log the command to the current logfile, so it has context of what was run. -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index c03c16d84..bdc642ded 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -9,6 +9,7 @@ function prepare_and_config_main_build_single() { - else - DEST="${SRC}"/output - fi -+ display_alert "Determined DEST:" "${DEST}" "debug" - - if [[ $BUILD_ALL != "yes" && -z $ROOT_FS_CREATE_ONLY ]]; then - if [[ -t 0 ]]; then # "-t fd return True if file descriptor fd is open and refers to a terminal". 0 = stdin, 1 = stdout, 2 = stderr, 3+ custom -@@ -116,7 +117,7 @@ function prepare_and_config_main_build_single() { - WIP_STATE=supported - WIP_BUTTON='CSC/WIP/EOS/TVB' - STATE_DESCRIPTION=' - boards with high level of software maturity' -- temp_rc=$(mktemp) -+ temp_rc=$(mktemp) # @TODO: this is a _very_ early call to mktemp - no TMPDIR set yet - it needs to be cleaned-up somehow - - while true; do - options=() -diff --git a/lib/functions/main/rootfs-image.sh b/lib/functions/main/rootfs-image.sh -index a5ce58de8..9996d4b94 100644 ---- a/lib/functions/main/rootfs-image.sh -+++ b/lib/functions/main/rootfs-image.sh -@@ -52,7 +52,7 @@ PRE_INSTALL_DISTRIBUTION_SPECIFIC - # install distribution and board specific applications - - LOG_SECTION="distro" do_with_logging install_distribution_specific -- LOG_SECTION="install_common" do_with_logging install_distribution_agnostic -+ LOG_SECTION="install_distribution_agnostic" do_with_logging install_distribution_agnostic - - # install locally built packages - [[ $EXTERNAL_NEW == compile ]] && LOG_SECTION="packages_local" do_with_logging chroot_installpackages_local -diff --git a/lib/functions/rootfs/apt.sh b/lib/functions/rootfs/apt.sh -index dd26c8b65..29833851a 100644 ---- a/lib/functions/rootfs/apt.sh -+++ b/lib/functions/rootfs/apt.sh -@@ -3,16 +3,18 @@ apt_purge_unneeded_packages() { - display_alert "No longer needed packages" "purge" "info" - chroot_sdcard_apt_get autoremove - } --# this is called by distributions.sh->install_common(), and thus already under a logging manager. -+ - install_deb_chroot() { - local package=$1 - local variant=$2 - local transfer=$3 - local name - local desc -+ - if [[ ${variant} != remote ]]; then - # @TODO: this can be sped up significantly by mounting debs readonly directly in chroot /root/debs and installing from there - # also won't require cleanup later -+ - name="/root/"$(basename "${package}") - [[ ! -f "${SDCARD}${name}" ]] && cp "${package}" "${SDCARD}${name}" - desc="" -@@ -21,11 +23,10 @@ install_deb_chroot() { - desc=" from repository" - fi - -- # @TODO: this is mostly duplicated in distributions.sh->install_common(), refactor into "chroot_apt_get()" - display_alert "Installing${desc}" "${name/\/root\//}" -- [[ $NO_APT_CACHER != yes ]] && local apt_extra="-o Acquire::http::Proxy=\"http://${APT_PROXY_ADDR:-localhost:3142}\" -o Acquire::http::Proxy::localhost=\"DIRECT\"" -+ - # when building in bulk from remote, lets make sure we have up2date index -- [[ $BUILD_ALL == yes && ${variant} == remote ]] && chroot "${SDCARD}" /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get $apt_extra -yqq update" -+ [[ $BUILD_ALL == yes && ${variant} == remote ]] && chroot_sdcard_apt_get update - - # install in chroot via apt-get, not dpkg, so dependencies are also installed from repo if needed. - chroot_sdcard_apt_get --no-install-recommends install "${name}" || { -@@ -33,8 +34,8 @@ install_deb_chroot() { - } - - # @TODO: mysterious. store installed/downloaded packages in deb storage. only used for u-boot deb. why? -- [[ ${variant} == remote && ${transfer} == yes ]] && rsync -rq "${SDCARD}"/var/cache/apt/archives/*.deb ${DEB_STORAGE}/ -+ [[ ${variant} == remote && ${transfer} == yes ]] && rsync -rq "${SDCARD}"/var/cache/apt/archives/*.deb "${DEB_STORAGE}"/ - -- # IMPORTANT! Do not use conditional above as last statement in a function, since it determines the result of the function. -+ # IMPORTANT! Do not use short-circuit above as last statement in a function, since it determines the result of the function. - return 0 - } -diff --git a/lib/functions/rootfs/distro_agnostic.sh b/lib/functions/rootfs/distro_agnostic.sh -index 50e6e4923..a226ce0eb 100644 ---- a/lib/functions/rootfs/distro_agnostic.sh -+++ b/lib/functions/rootfs/distro_agnostic.sh -@@ -1,5 +1,5 @@ - install_distribution_agnostic() { -- display_alert "Applying common tweaks" "install_common" "info" -+ display_alert "Installing distro-agnostic part of rootfs" "install_distribution_agnostic" "debug" - - # install rootfs encryption related packages separate to not break packages cache - # @TODO: terrible, this does not use apt-cacher, extract to extension and fix - -From 9869508b622be33fe5114313c02d107b500f79aa Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 22 Dec 2021 19:39:26 +0100 -Subject: [PATCH] logging: don't bail out on patching error - -Signed-off-by: Ricardo Pardini ---- - lib/functions/compilation/patching.sh | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) - -diff --git a/lib/functions/compilation/patching.sh b/lib/functions/compilation/patching.sh -index 7114cf0cd..52d00010f 100644 ---- a/lib/functions/compilation/patching.sh -+++ b/lib/functions/compilation/patching.sh -@@ -87,14 +87,15 @@ process_patch_file() { - # detect and remove files which patch will create - lsdiff -s --strip=1 "${patch}" | grep '^+' | awk '{print $2}' | xargs -I % sh -c 'rm -f %' - -- patch --batch -p1 -N < "${patch}" 2>&1 -- -- if [[ $? -ne 0 ]]; then -+ # @TODO: try patching with `git am` first, so git contains the patch commit info/msg. -- For future git-based hashing. -+ # shellcheck disable=SC2015 # noted, thanks. I need to handle exit code here. -+ patch --batch -p1 -N < "${patch}" && { -+ display_alert "* $status $(basename "${patch}")" "" "info" -+ } || { - display_alert "* $status $(basename "${patch}")" "failed" "wrn" - [[ $EXIT_PATCHING_ERROR == yes ]] && exit_with_error "Aborting due to" "EXIT_PATCHING_ERROR" -- else -- display_alert "* $status $(basename "${patch}")" "" "info" -- fi -+ } -+ return 0 # short-circuit above, avoid exiting with error - } - - # apply_patch_series - -From 91806c9e0934a7d4a01425bf76c013dca110f5f0 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Wed, 22 Dec 2021 01:18:23 +0100 -Subject: [PATCH] logging: bunch of fixes; no-stdin; traps; better stacks - -- mostly no-stdin dialog handling (desktop et al) -- let ERR trap run together with unmount trap (EXIT etc) - -Signed-off-by: Ricardo Pardini ---- - compile.sh | 2 +- - lib/extensions.sh | 13 ++++++++++--- - lib/functions/configuration/main-config.sh | 3 ++- - lib/functions/configuration/menu.sh | 13 ++++++++++--- - lib/functions/general/repo.sh | 2 +- - lib/functions/logging/traps.sh | 5 ++--- - lib/functions/main/config-prepare.sh | 17 +++++++++-------- - lib/functions/rootfs/create-cache.sh | 11 ++++++----- - 8 files changed, 41 insertions(+), 25 deletions(-) - -diff --git a/compile.sh b/compile.sh -index f6a2cd8f5..d4d07cfe0 100755 ---- a/compile.sh -+++ b/compile.sh -@@ -36,7 +36,7 @@ fi - source "${SRC}"/lib/single.sh - - # hook up the error handler early, we wanna see stack for all errors. --trap 'main_error_monitor "$?" "$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}")" "$(show_caller_full)"; exit 48' ERR EXIT -+trap 'main_error_monitor "$?" "$(show_caller_full)" "$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}")"; exit 48' ERR EXIT - - # And execute the main entrypoint. - cli_entrypoint "$@" -diff --git a/lib/extensions.sh b/lib/extensions.sh -index 4ea9bb111..1f7cd2db8 100644 ---- a/lib/extensions.sh -+++ b/lib/extensions.sh -@@ -339,12 +339,19 @@ get_extension_hook_stracktrace() { - - show_caller_full() { - { -- local frame=0 -- while caller $frame; do -- ((frame++)) -+ local i=0 -+ local line_no -+ local function_name -+ local file_name -+ echo "" # line break -+ while caller $i; do -+ ((i++)) -+ done | while read -r line_no function_name file_name; do -+ echo -e "\t$file_name:$line_no\tat\t$function_name" - done - } || true # always success - } -+ - # can be called by board, family, config or user to make sure an extension is included. - # single argument is the extension name. - # will look for it in /userpatches/extensions first. -diff --git a/lib/functions/configuration/main-config.sh b/lib/functions/configuration/main-config.sh -index e7487efe5..14953a5fe 100644 ---- a/lib/functions/configuration/main-config.sh -+++ b/lib/functions/configuration/main-config.sh -@@ -190,8 +190,9 @@ function do_main_configuration() { - it is often used to in turn override those. - POST_FAMILY_CONFIG - -- # Myy : Once we got a list of selected groups, parse the PACKAGE_LIST inside configuration.sh -+ display_alert "Handling some" "desktop config stuff 1" "warning" - -+ # Myy : Once we got a list of selected groups, parse the PACKAGE_LIST inside configuration.sh - DESKTOP_ELEMENTS_DIR="${SRC}/config/desktop/${RELEASE}" - DESKTOP_CONFIGS_DIR="${DESKTOP_ELEMENTS_DIR}/environments" - DESKTOP_CONFIG_PREFIX="config_" -diff --git a/lib/functions/configuration/menu.sh b/lib/functions/configuration/menu.sh -index 12880526c..32939ae36 100644 ---- a/lib/functions/configuration/menu.sh -+++ b/lib/functions/configuration/menu.sh -@@ -1,5 +1,12 @@ - # Stuff involving dialog - -+# Pardini: dialog_if_terminal prints error and exits if stdin is not a terminal, or if running under CI. -+function dialog_if_terminal() { -+ [[ ! -t 0 ]] && exit_with_error "stdin is not a terminal. can't use dialog." "dialog_if_terminal ${*}" "err" -+ [[ "${CI}" == "true" ]] && exit_with_error "CI=true. can't use dialog." "dialog_if_terminal ${*}" "err" -+ dialog "$@" -+} -+ - # Myy : Menu configuration for choosing desktop configurations - show_menu() { - provided_title=$1 -@@ -11,7 +18,7 @@ show_menu() { - #echo "Provided menuname : $provided_menuname" - #echo "Provided options : " "${@:4}" - #echo "TTY X: $TTY_X Y: $TTY_Y" -- dialog --stdout --title "$provided_title" --backtitle "${provided_backtitle}" \ -+ dialog_if_terminal --stdout --title "$provided_title" --backtitle "${provided_backtitle}" \ - --menu "$provided_menuname" $TTY_Y $TTY_X $((TTY_Y - 8)) "${@:4}" - } - -@@ -20,7 +27,7 @@ show_select_menu() { - provided_title=$1 - provided_backtitle=$2 - provided_menuname=$3 -- dialog --stdout --title "${provided_title}" --backtitle "${provided_backtitle}" \ -+ dialog_if_terminal --stdout --title "${provided_title}" --backtitle "${provided_backtitle}" \ - --checklist "${provided_menuname}" $TTY_Y $TTY_X $((TTY_Y - 8)) "${@:4}" - } - -@@ -44,7 +51,7 @@ show_developer_warning() { - - Forum posts related to dev kernel, CSC, WIP and EOS boards - should be created in the \Z2\"Community forums\"\Zn section - " -- DIALOGRC=$temp_rc dialog --title "Expert mode warning" --backtitle "${backtitle}" --colors --defaultno --no-label "I do not agree" \ -+ DIALOGRC=$temp_rc dialog_if_terminal --title "Expert mode warning" --backtitle "${backtitle}" --colors --defaultno --no-label "I do not agree" \ - --yes-label "I understand and agree" --yesno "$warn_text" "${TTY_Y}" "${TTY_X}" - [[ $? -ne 0 ]] && exit_with_error "Error switching to the expert mode" - SHOW_WARNING=no -diff --git a/lib/functions/general/repo.sh b/lib/functions/general/repo.sh -index f54d59562..be3121527 100644 ---- a/lib/functions/general/repo.sh -+++ b/lib/functions/general/repo.sh -@@ -193,7 +193,7 @@ repo-manipulate() { - LIST=("${new_list[@]}") - LIST_LENGTH=$((${#LIST[@]} / 2)) - exec 3>&1 -- TARGET_VERSION=$(dialog --cancel-label "Cancel" --backtitle "BACKTITLE" --no-collapse --title "Remove packages from repositories" --clear --menu "Delete" $((9 + ${LIST_LENGTH})) 82 65 "${LIST[@]}" 2>&1 1>&3) -+ TARGET_VERSION=$(dialog_if_terminal --cancel-label "Cancel" --backtitle "BACKTITLE" --no-collapse --title "Remove packages from repositories" --clear --menu "Delete" $((9 + ${LIST_LENGTH})) 82 65 "${LIST[@]}" 2>&1 1>&3) - exitstatus=$? - exec 3>&- - if [[ $exitstatus -eq 0 ]]; then -diff --git a/lib/functions/logging/traps.sh b/lib/functions/logging/traps.sh -index fa1abd262..9a5daa670 100644 ---- a/lib/functions/logging/traps.sh -+++ b/lib/functions/logging/traps.sh -@@ -1,12 +1,11 @@ - # unmount_on_exit - used during rootfs building, to avoid leaving mounted stuff behind - # - unmount_on_exit() { -- trap - ERR # Also remove any error trap. it's too late for that. - set +e # we just wanna plow through this, ignoring errors. - trap - INT TERM EXIT # remove the trap - - local stack_here -- stack_here="$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}")" -+ stack_here="$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}" || true)" - display_alert "trap caught, shutting down" "${stack_here}" "err" - if [[ "${ERROR_DEBUG_SHELL}" == "yes" ]]; then - ERROR_DEBUG_SHELL=no # dont do it twice -@@ -39,7 +38,7 @@ unmount_on_exit() { - exit_with_error "generic error during build_rootfs_image: ${stack_here}" || true # but don't trigger error again - fi - -- return 47 # trap returns error. # exit successfully. we're already handling a trap here. -+ return 49 # trap returns error. - } - - # added by main_default_build_single to show details about errors when they happen and exit. exit might trigger the above. -diff --git a/lib/functions/main/config-prepare.sh b/lib/functions/main/config-prepare.sh -index 0dd34a875..c03c16d84 100644 ---- a/lib/functions/main/config-prepare.sh -+++ b/lib/functions/main/config-prepare.sh -@@ -11,7 +11,8 @@ function prepare_and_config_main_build_single() { - fi - - if [[ $BUILD_ALL != "yes" && -z $ROOT_FS_CREATE_ONLY ]]; then -- if [[ -t 1 ]]; then # "-t fd return True if file descriptor fd is open and refers to a terminal" -+ if [[ -t 0 ]]; then # "-t fd return True if file descriptor fd is open and refers to a terminal". 0 = stdin, 1 = stdout, 2 = stderr, 3+ custom -+ display_alert "stdin is a terminal" "or is it?" "warning" - # override stty size, if stdin is a terminal. - [[ -n $COLUMNS ]] && stty cols $COLUMNS - [[ -n $LINES ]] && stty rows $LINES -@@ -95,7 +96,7 @@ function prepare_and_config_main_build_single() { - if [[ -z $KERNEL_ONLY ]]; then - options+=("yes" "U-boot and kernel packages") - options+=("no" "Full OS image for flashing") -- KERNEL_ONLY=$(dialog --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags \ -+ KERNEL_ONLY=$(dialog_if_terminal --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags \ - --menu "Select what to build" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") - unset options - [[ -z $KERNEL_ONLY ]] && exit_with_error "No option selected" -@@ -105,7 +106,7 @@ function prepare_and_config_main_build_single() { - options+=("no" "Do not change the kernel configuration") - options+=("yes" "Show a kernel configuration menu before compilation") - options+=("prebuilt" "Use precompiled packages from Armbian repository") -- KERNEL_CONFIGURE=$(dialog --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags \ -+ KERNEL_CONFIGURE=$(dialog_if_terminal --stdout --title "Choose an option" --backtitle "$backtitle" --no-tags \ - --menu "Select the kernel configuration" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") - unset options - [[ -z $KERNEL_CONFIGURE ]] && exit_with_error "No option selected" -@@ -150,7 +151,7 @@ function prepare_and_config_main_build_single() { - else - echo > "${temp_rc}" - fi -- BOARD=$(DIALOGRC=$temp_rc dialog --stdout --title "Choose a board" --backtitle "$backtitle" --scrollbar \ -+ BOARD=$(DIALOGRC=$temp_rc dialog_if_terminal --stdout --title "Choose a board" --backtitle "$backtitle" --scrollbar \ - --colors --extra-label "Show $WIP_BUTTON" --extra-button \ - --menu "Select the target board. Displaying:\n$STATE_DESCRIPTION" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") - STATUS=$? -@@ -206,7 +207,7 @@ function prepare_and_config_main_build_single() { - if [[ "${#options[@]}" == 2 ]]; then - BRANCH="${options[0]}" - else -- BRANCH=$(dialog --stdout --title "Choose a kernel" --backtitle "$backtitle" --colors \ -+ BRANCH=$(dialog_if_terminal --stdout --title "Choose a kernel" --backtitle "$backtitle" --colors \ - --menu "Select the target kernel branch\nExact kernel versions depend on selected board" \ - $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") - fi -@@ -223,7 +224,7 @@ function prepare_and_config_main_build_single() { - if [[ $KERNEL_ONLY != yes && -z $RELEASE ]]; then - options=() - distros_options -- RELEASE=$(dialog --stdout --title "Choose a release package base" --backtitle "$backtitle" \ -+ RELEASE=$(dialog_if_terminal --stdout --title "Choose a release package base" --backtitle "$backtitle" \ - --menu "Select the target OS release package base" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") - echo "options : ${options}" - [[ -z $RELEASE ]] && exit_with_error "No release selected" -@@ -239,7 +240,7 @@ function prepare_and_config_main_build_single() { - options=() - options+=("no" "Image with console interface (server)") - options+=("yes" "Image with desktop environment") -- BUILD_DESKTOP=$(dialog --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ -+ BUILD_DESKTOP=$(dialog_if_terminal --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ - --menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") - unset options - [[ -z $BUILD_DESKTOP ]] && exit_with_error "No option selected" -@@ -253,7 +254,7 @@ function prepare_and_config_main_build_single() { - options=() - options+=("no" "Standard image with console interface") - options+=("yes" "Minimal image with console interface") -- BUILD_MINIMAL=$(dialog --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ -+ BUILD_MINIMAL=$(dialog_if_terminal --stdout --title "Choose image type" --backtitle "$backtitle" --no-tags \ - --menu "Select the target image type" $TTY_Y $TTY_X $((TTY_Y - 8)) "${options[@]}") - unset options - [[ -z $BUILD_MINIMAL ]] && exit_with_error "No option selected" -diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh -index ab900d508..f969159cf 100644 ---- a/lib/functions/rootfs/create-cache.sh -+++ b/lib/functions/rootfs/create-cache.sh -@@ -239,13 +239,13 @@ function create_new_rootfs_cache() { - [[ -d "${MOUNT}" ]] && - display_alert "Mount point" "$(echo -e "$freespace" | grep $MOUNT | head -1 | awk '{print $5}')" "info" - -- # create list of installed packages for debug purposes -- chroot $SDCARD /bin/bash -c "dpkg --get-selections" | grep -v deinstall | awk '{print $1}' | cut -f1 -d':' > ${cache_fname}.list 2>&1 -+ # create list of installed packages for debug purposes - this captures it's own stdout. -+ chroot "${SDCARD}" /bin/bash -c "dpkg --get-selections" | grep -v deinstall | awk '{print $1}' | cut -f1 -d':' > "${cache_fname}.list" - - # creating xapian index that synaptic runs faster - if [[ $BUILD_DESKTOP == yes ]]; then - display_alert "Recreating Synaptic search index" "Please wait" "info" -- chroot $SDCARD /bin/bash -c "[[ -f /usr/sbin/update-apt-xapian-index ]] && /usr/sbin/update-apt-xapian-index -u" -+ chroot_sdcard "[[ -f /usr/sbin/update-apt-xapian-index ]] && /usr/sbin/update-apt-xapian-index -u || true" - fi - - # this is needed for the build process later since resolvconf generated file in /run is not saved -@@ -260,7 +260,7 @@ function create_new_rootfs_cache() { - umount_chroot "$SDCARD" - - tar cp --xattrs --directory=$SDCARD/ --exclude='./dev/*' --exclude='./proc/*' --exclude='./run/*' --exclude='./tmp/*' \ -- --exclude='./sys/*' . | pv -p -b -r -s $(du -sb $SDCARD/ | cut -f1) -N "$(logging_echo_prefix_for_pv "store_rootfs") $display_name" | lz4 -5 -c > $cache_fname -+ --exclude='./sys/*' . | pv -p -b -r -s "$(du -sb $SDCARD/ | cut -f1)" -N "$(logging_echo_prefix_for_pv "store_rootfs") $display_name" | lz4 -5 -c > "$cache_fname" - - # sign rootfs cache archive that it can be used for web cache once. Internal purposes - if [[ -n "${GPG_PASS}" && "${SUDO_USER}" ]]; then -@@ -268,6 +268,7 @@ function create_new_rootfs_cache() { - echo "${GPG_PASS}" | sudo -H -u ${SUDO_USER} bash -c "gpg --passphrase-fd 0 --armor --detach-sign --pinentry-mode loopback --batch --yes ${cache_fname}" || exit 1 - fi - -+ return 0 # protect against possible future short-circuiting above this - } - - # get_package_list_hash -@@ -278,7 +279,7 @@ get_package_list_hash() { - local list_content - read -ra package_arr <<< "${DEBOOTSTRAP_LIST} ${PACKAGE_LIST}" - read -ra exclude_arr <<< "${PACKAGE_LIST_EXCLUDE}" -- ( -+ ( - ( - printf "%s\n" "${package_arr[@]}" - printf -- "-%s\n" "${exclude_arr[@]}" - -From 70b9182fb02337c6c8d023469571acb2f1462317 Mon Sep 17 00:00:00 2001 -From: Ricardo Pardini -Date: Mon, 20 Dec 2021 23:29:18 +0100 -Subject: [PATCH] logging: trap ERR very early, pass-in caller info - -Signed-off-by: Ricardo Pardini ---- - compile.sh | 3 +++ - lib/extensions.sh | 13 ++++++++----- - lib/functions/logging/runners.sh | 2 +- - lib/functions/logging/traps.sh | 28 +++++++++++++++++----------- - lib/functions/main/default-build.sh | 2 -- - 5 files changed, 29 insertions(+), 19 deletions(-) - -diff --git a/compile.sh b/compile.sh -index 23919ae91..f6a2cd8f5 100755 ---- a/compile.sh -+++ b/compile.sh -@@ -35,5 +35,8 @@ fi - # shellcheck source=lib/single.sh - source "${SRC}"/lib/single.sh - -+# hook up the error handler early, we wanna see stack for all errors. -+trap 'main_error_monitor "$?" "$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}")" "$(show_caller_full)"; exit 48' ERR EXIT -+ - # And execute the main entrypoint. - cli_entrypoint "$@" -diff --git a/lib/extensions.sh b/lib/extensions.sh -index d8b3aed9c..4ea9bb111 100644 ---- a/lib/extensions.sh -+++ b/lib/extensions.sh -@@ -328,7 +328,8 @@ get_extension_hook_stracktrace() { - source="${source#"lib/functions/"}" - source="${source#"lib/"}" - # add to the list -- arrow="$([[ "$final_stack" != "" ]] && echo "-> ")" -+ # shellcheck disable=SC2015 # i know. thanks. I won't write an if here -+ arrow="$([[ "$final_stack" != "" ]] && echo "-> " || true)" - final_stack="${source}:${line} ${arrow} ${final_stack} " - done - # output the result, no newline -@@ -337,10 +338,12 @@ get_extension_hook_stracktrace() { - } - - show_caller_full() { -- local frame=0 -- while caller $frame; do -- ((frame++)) -- done -+ { -+ local frame=0 -+ while caller $frame; do -+ ((frame++)) -+ done -+ } || true # always success - } - # can be called by board, family, config or user to make sure an extension is included. - # single argument is the extension name. -diff --git a/lib/functions/logging/runners.sh b/lib/functions/logging/runners.sh -index ef0c2389c..2c99ae571 100644 ---- a/lib/functions/logging/runners.sh -+++ b/lib/functions/logging/runners.sh -@@ -49,7 +49,7 @@ function run_host_command_logged_long_running() { - run_host_command_logged_raw /bin/bash -e -c "$*" - _exit_code=$? - else -- run_host_command_logged_raw /bin/bash -e -c "$*" | pv -N "$(logging_echo_prefix_for_pv "${INDICATOR:-compile}")" --progress --timer --line-mode --force --cursor --delay-start 0 -i "0.5" -+ run_host_command_logged_raw /bin/bash -e -c "$*" | pv -N "$(logging_echo_prefix_for_pv "${INDICATOR:-compile}") " --progress --timer --line-mode --force --cursor --delay-start 0 -i "2" - _exit_code=$? - fi - return $_exit_code -diff --git a/lib/functions/logging/traps.sh b/lib/functions/logging/traps.sh -index 9edd1d956..fa1abd262 100644 ---- a/lib/functions/logging/traps.sh -+++ b/lib/functions/logging/traps.sh -@@ -5,9 +5,9 @@ unmount_on_exit() { - set +e # we just wanna plow through this, ignoring errors. - trap - INT TERM EXIT # remove the trap - -- local stacktrace -- stacktrace="$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}")" -- display_alert "trap caught, shutting down" "${stacktrace}" "err" -+ local stack_here -+ stack_here="$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}")" -+ display_alert "trap caught, shutting down" "${stack_here}" "err" - if [[ "${ERROR_DEBUG_SHELL}" == "yes" ]]; then - ERROR_DEBUG_SHELL=no # dont do it twice - display_alert "MOUNT" "${MOUNT}" "err" -@@ -36,7 +36,7 @@ unmount_on_exit() { - - # if we've been called by exit_with_error itself, don't recurse. - if [[ "${ALREADY_EXITING_WITH_ERROR:-no}" != "yes" ]]; then -- exit_with_error "generic error during build_rootfs_image: ${stacktrace}" || true # but don't trigger error again -+ exit_with_error "generic error during build_rootfs_image: ${stack_here}" || true # but don't trigger error again - fi - - return 47 # trap returns error. # exit successfully. we're already handling a trap here. -@@ -44,11 +44,17 @@ unmount_on_exit() { - - # added by main_default_build_single to show details about errors when they happen and exit. exit might trigger the above. - function main_error_monitor() { -- trap - ERR # remove this trap -- local stacktrace -- stacktrace="$(get_extension_hook_stracktrace "${BASH_SOURCE[*]}" "${BASH_LINENO[*]}" || true)" -- display_alert "main_error_monitor! '$*'" "${stacktrace}" "err" -- show_caller_full >&2 || true -- display_alert "main_error_monitor2! '$*'" "${stacktrace}" "err" -- exit 46 -+ if [[ "${ALREADY_EXITING_WITH_ERROR}" == "yes" ]]; then -+ display_alert "second run detected" "ERR trap" "err" -+ #exit 46 -+ fi -+ #trap - ERR # remove this trap -+ local errcode="${1}" -+ local stack_caller="${2}" -+ local full_stack_caller="${3}" -+ display_alert "main_error_monitor: ${errcode}! stack:" "${stack_caller}" "err" -+ display_alert "main_error_monitor: ${errcode}! full:" "${full_stack_caller}" "err" -+ ALREADY_EXITING_WITH_ERROR=yes -+ exit 45 -+ return 44 - } -diff --git a/lib/functions/main/default-build.sh b/lib/functions/main/default-build.sh -index 2bd62724f..e9f3af0ed 100644 ---- a/lib/functions/main/default-build.sh -+++ b/lib/functions/main/default-build.sh -@@ -10,8 +10,6 @@ main_default_build_single() { - exit 0 - fi - -- trap 'main_error_monitor $?' ERR -- - if [[ $CLEAN_LEVEL == *sources* ]]; then - cleaning "sources" - fi - -``` - diff --git a/README.md b/README.md index 11c3f0cab..04b377b16 100644 --- a/README.md +++ b/README.md @@ -3,19 +3,15 @@ Armbian logo
Armbian Linux Build Framework
-
-GitHub Workflow Status -GitHub Workflow Status -Smoke test success ratio -
- -
-Mastodon Follow -Discord -Liberapay patrons +

NEXT GENERATION

+

+Armbian OS
+( Classic build framework remains on master branch, frozen and unmaintained )

- +- in case of troubles, keep using master/v23.02 branch +- PR's are going to main branch, optional to master/v23.02 +- do not use master and main in the same folder ## Table of contents @@ -33,7 +29,7 @@ ## What this project does? -- Builds custom kernel, image or a distribution optimized for low resource HW such as single board computers, +- Builds custom kernel, image or a distribution optimized for low resource hardware, - Include filesystem generation, low-level control software, kernel image and bootloader compilation, - Provides a consistent user experience by keeping system standards across different platforms. @@ -41,15 +37,15 @@ ### Basic requirements -- x86_64 or aarch64 machine with at least 2GB of memory and ~35GB of disk space for a virtual machine, container or bare metal installation -- Ubuntu Jammy 22.04.x amd64 or aarch64 for native building or any [Docker](https://docs.armbian.com/Developer-Guide_Building-with-Docker/) capable amd64 / aarch64 Linux for containerised +- x86_64 or aarch64 machine with at least 2GB of memory and ~35GB of disk space for a virtual machine, [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install), container or bare metal installation +- Ubuntu Jammy 22.04.x amd64 or aarch64 for native building or any Docker capable amd64 / aarch64 Linux for containerised - Superuser rights (configured sudo or root access). ### Simply start with the build script ```bash apt-get -y install git -git clone --depth=1 --branch=master https://github.com/armbian/build +git clone --depth=1 --branch=main https://github.com/armbian/build cd build ./compile.sh ``` @@ -68,12 +64,6 @@ Show work in progress areas in interactive mode: ./compile.sh EXPERT="yes" ``` -Run build framework inside Docker container: - -```bash -./compile.sh docker -``` - Build minimal CLI Armbian Focal image for Orangepi Zero. Use modern kernel and write image to the SD card: ```bash diff --git a/VERSION b/VERSION index 4382e6987..d4e27b77c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -23.02.0-trunk +23.05.0-trunk diff --git a/config/distributions/bookworm/arhitectures b/config/distributions/bookworm/arhitectures new file mode 100644 index 000000000..aa3ead768 --- /dev/null +++ b/config/distributions/bookworm/arhitectures @@ -0,0 +1 @@ +arm64,armhf,amd64 diff --git a/config/distributions/bullseye/arhitectures b/config/distributions/bullseye/arhitectures new file mode 100644 index 000000000..aa3ead768 --- /dev/null +++ b/config/distributions/bullseye/arhitectures @@ -0,0 +1 @@ +arm64,armhf,amd64 diff --git a/config/distributions/buster/arhitectures b/config/distributions/buster/arhitectures new file mode 100644 index 000000000..aa3ead768 --- /dev/null +++ b/config/distributions/buster/arhitectures @@ -0,0 +1 @@ +arm64,armhf,amd64 diff --git a/config/distributions/focal/arhitectures b/config/distributions/focal/arhitectures new file mode 100644 index 000000000..aa3ead768 --- /dev/null +++ b/config/distributions/focal/arhitectures @@ -0,0 +1 @@ +arm64,armhf,amd64 diff --git a/config/distributions/jammy/arhitectures b/config/distributions/jammy/arhitectures new file mode 100644 index 000000000..6103381d1 --- /dev/null +++ b/config/distributions/jammy/arhitectures @@ -0,0 +1 @@ +arm64,armhf,riscv64,amd64 diff --git a/config/distributions/kinetic/arhitectures b/config/distributions/kinetic/arhitectures new file mode 100644 index 000000000..6103381d1 --- /dev/null +++ b/config/distributions/kinetic/arhitectures @@ -0,0 +1 @@ +arm64,armhf,riscv64,amd64 diff --git a/config/distributions/lunar/arhitectures b/config/distributions/lunar/arhitectures new file mode 100644 index 000000000..6103381d1 --- /dev/null +++ b/config/distributions/lunar/arhitectures @@ -0,0 +1 @@ +arm64,armhf,riscv64,amd64 diff --git a/config/distributions/sid/arhitectures b/config/distributions/sid/arhitectures new file mode 100644 index 000000000..6103381d1 --- /dev/null +++ b/config/distributions/sid/arhitectures @@ -0,0 +1 @@ +arm64,armhf,riscv64,amd64 diff --git a/config/targets-cli-beta.conf b/config/targets-cli-beta.conf deleted file mode 100644 index b599debba..000000000 --- a/config/targets-cli-beta.conf +++ /dev/null @@ -1,55 +0,0 @@ -#################################################################################################################### -# board branch release desktop|cli|minimal stable|beta create images # -#################################################################################################################### - -# JetHub J80 -jethubj80 edge jammy minimal beta yes - - -# JetHub J100/J110 -jethubj100 edge jammy minimal beta yes - - -# Odroid M1 -odroidm1 edge kinetic minimal beta yes - - -# Orangepi Zero 2 -orangepizero2 edge jammy minimal beta yes - - -# Quartz 64 A -quartz64a edge jammy minimal beta yes - - -# radxa-zero2 -radxa-zero2 edge jammy minimal beta yes - - -# Radxa rock-5b -rock-5b legacy jammy minimal beta yes -rock-5b edge lunar minimal beta yes - - -# Orange Pi 5 -orangepi5 legacy jammy minimal beta yes - - -# uefi-x86 -uefi-x86 edge jammy minimal beta yes - - -# uefi-arm64 -uefi-arm64 edge jammy minimal beta yes - - -# uefi-riscv64 -uefi-riscv64 current kinetic minimal beta no -uefi-riscv64 edge kinetic minimal beta yes - - -# kernel only -onecloud current jammy minimal beta no -onecloud edge jammy minimal beta no -odroidxu4 edge jammy minimal beta no -helios4 edge jammy minimal beta no diff --git a/config/targets-desktop-beta.conf b/config/targets-desktop-beta.conf deleted file mode 100644 index 0cc5f7e66..000000000 --- a/config/targets-desktop-beta.conf +++ /dev/null @@ -1,13 +0,0 @@ -########################################################################################################################################################### -# board branch release desktop|cli|minimal stable|beta create images DE DE config Comma delimited app groups # -########################################################################################################################################################### - -# orangepi5 -orangepi5 legacy jammy desktop beta yes xfce config_base - -# uefi-x86 -uefi-x86 current jammy desktop beta yes xfce config_base 3dsupport - -# uefi-arm64 -uefi-arm64 current jammy desktop beta yes xfce config_base 3dsupport - diff --git a/config/targets.conf b/config/targets.conf deleted file mode 100644 index 5dbe03554..000000000 --- a/config/targets.conf +++ /dev/null @@ -1,975 +0,0 @@ -################################################################################################################################################################# -# board branch release desktop stable yes DE DE config Comma delimited app groups # -# cli beta no # -# minimal (adv)ertise # -################################################################################################################################################################# - -# aml-s9xx-box -aml-s9xx-box current bullseye cli stable yes -aml-s9xx-box current jammy cli stable yes -# -aml-s9xx-box current bullseye desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -aml-s9xx-box current jammy desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Bananapi M1 / M1+ A20 -bananapi current bullseye cli stable yes -bananapi current jammy cli stable adv -bananapi current jammy minimal stable yes -bananapi current bullseye minimal stable yes -# -bananapi current bullseye desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapi current jammy desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Bananapi Pro A20 -bananapipro current bullseye cli stable yes -bananapipro current jammy cli stable adv -bananapipro current jammy minimal stable yes -bananapipro current bullseye minimal stable yes -# -bananapipro current bullseye desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapipro current jammy desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Bananapi M2+ H3 -bananapim2plus current bullseye cli stable yes -bananapim2plus current jammy cli stable adv -bananapim2plus current jammy minimal stable yes -bananapim2plus current bullseye minimal stable yes -# -bananapim2plus current bullseye desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapim2plus current jammy desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Bananapi M5 -bananapim5 current jammy cli stable adv -bananapim5 current bullseye cli stable yes -bananapim5 current jammy minimal stable yes -bananapim5 current bullseye minimal stable yes -# -bananapim5 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapim5 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapim5 current jammy desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapim5 current bullseye desktop stable adv gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapim5 current bullseye desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapim5 current bullseye desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Bananapi M64 -bananapim64 current jammy cli stable adv -bananapim64 current bullseye cli stable yes -bananapim64 current jammy minimal stable yes -bananapim64 current bullseye minimal stable yes -# -bananapim64 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapim64 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapim64 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Bananapi R2-pro -bananapir2pro legacy bullseye cli stable yes -bananapir2pro legacy jammy cli stable yes -bananapir2pro legacy bullseye desktop stable yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapir2pro legacy jammy desktop stable yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# -bananapir2pro current jammy cli stable yes -bananapir2pro current bullseye cli stable yes -# -bananapir2pro current bullseye desktop stable adv xfce config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapir2pro current jammy desktop stable yes gnome config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -bananapir2pro current jammy desktop stable adv xfce config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# clockworkpi-a06 -clockworkpi-a06 current jammy cli stable adv -clockworkpi-a06 current bullseye cli stable yes -# -clockworkpi-a06 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -clockworkpi-a06 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -clockworkpi-a06 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# EspressoBIN -espressobin current bullseye cli stable adv -espressobin current jammy cli stable adv -espressobin current bullseye minimal stable yes -espressobin current jammy minimal stable yes -# -espressobin edge jammy minimal stable no - - -# Helios4 -helios4 current bullseye cli stable adv -helios4 current jammy cli stable adv -helios4 current bullseye minimal stable yes -helios4 current jammy minimal stable yes -# -helios4 edge jammy cli stable no - - -# Clearfog Base -clearfogbase current bullseye cli stable adv -clearfogbase current jammy cli stable adv -clearfogbase current bullseye minimal stable yes -clearfogbase current jammy minimal stable yes - - -# Clearfog Pro -clearfogpro current bullseye cli stable adv -clearfogpro current jammy cli stable adv -clearfogpro current bullseye minimal stable yes -clearfogpro current jammy minimal stable yes - - -# Khadas Vim1 -khadas-vim1 current jammy cli stable adv -khadas-vim1 current bullseye cli stable yes -khadas-vim1 current jammy minimal stable yes -khadas-vim1 current bullseye minimal stable yes -# -khadas-vim1 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -khadas-vim1 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -khadas-vim1 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Khadas Vim2 -khadas-vim2 current jammy cli stable adv -khadas-vim2 current bullseye cli stable yes -khadas-vim2 current jammy minimal stable yes -khadas-vim2 current bullseye minimal stable yes -# -khadas-vim2 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -khadas-vim2 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -khadas-vim2 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Khadas Vim3l -khadas-vim3l current jammy cli stable adv -khadas-vim3l current bullseye cli stable yes -khadas-vim3l current jammy minimal stable yes -khadas-vim3l current bullseye minimal stable yes -# -khadas-vim3l current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -khadas-vim3l current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -khadas-vim3l current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Khadas Vim3 -khadas-vim3 current jammy cli stable adv -khadas-vim3 current bullseye cli stable yes -khadas-vim3 current jammy minimal stable yes -khadas-vim3 current bullseye minimal stable yes -# -khadas-vim3 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -khadas-vim3 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -khadas-vim3 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Khadas Edge V -khadas-edge current jammy cli stable adv -khadas-edge current bullseye cli stable yes -khadas-edge current jammy minimal stable yes -khadas-edge current bullseye minimal stable yes -# -khadas-edge current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -khadas-edge current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -khadas-edge current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Khadas Edge 2 -khadas-edge2 legacy jammy cli stable yes -khadas-edge2 legacy bullseye cli stable yes -# -khadas-edge2 legacy bullseye desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -khadas-edge2 legacy jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -khadas-edge2 legacy jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# La frite -lafrite current jammy cli stable adv -lafrite current bullseye cli stable yes -lafrite current jammy minimal stable yes -lafrite current bullseye minimal stable yes -# -lafrite current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -lafrite current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -lafrite current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Lepotato -lepotato current jammy cli stable adv -lepotato current bullseye cli stable yes -lepotato current jammy minimal stable yes -lepotato current bullseye minimal stable yes -# -lepotato current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -lepotato current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -lepotato current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Olimex Lime2 -lime2 current bullseye cli stable yes -lime2 current jammy cli stable adv -lime2 current bullseye minimal stable yes -lime2 current jammy minimal stable yes -# -lime2 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Olimex Lime A64 -lime-a64 current jammy cli stable adv -lime-a64 current bullseye cli stable yes -lime-a64 current jammy minimal stable yes -lime-a64 current bullseye minimal stable yes -# -lime-a64 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -lime-a64 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -lime-a64 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - -# nanopiduo -nanopiduo current jammy cli stable adv -nanopiduo current bullseye cli stable adv -nanopiduo current jammy minimal stable yes -nanopiduo current bullseye minimal stable yes - -# NanoPC T4 -nanopct4 current jammy cli stable adv -nanopct4 current bullseye cli stable yes -# -nanopct4 current bullseye desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -nanopct4 current bullseye desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -nanopct4 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -nanopct4 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# nanopi-r1 -nanopi-r1 current bullseye cli stable adv -nanopi-r1 current jammy cli stable adv -nanopi-r1 current bullseye minimal stable yes -nanopi-r1 current jammy minimal stable yes - -# nanopi-r1s-h5 -nanopi-r1s-h5 current bullseye cli stable adv -nanopi-r1s-h5 current jammy cli stable adv -nanopi-r1s-h5 current bullseye minimal stable yes -nanopi-r1s-h5 current jammy minimal stable yes - -# nanopi-r2s -nanopi-r2s current bullseye cli stable adv -nanopi-r2s current jammy cli stable adv -nanopi-r2s current bullseye minimal stable yes -nanopi-r2s current jammy minimal stable yes - -# nanopi-r2c -nanopi-r2c current bullseye cli stable adv -nanopi-r2c current jammy cli stable adv -nanopi-r2c current bullseye minimal stable yes -nanopi-r2c current jammy minimal stable yes - - -# nanopi-r4s -nanopi-r4s current bullseye cli stable adv -nanopi-r4s current jammy cli stable adv -nanopi-r4s current bullseye minimal stable yes -nanopi-r4s current jammy minimal stable yes - - -# nanopik1plus -nanopik1plus current jammy cli stable adv -nanopik1plus current bullseye cli stable yes -# -nanopik1plus current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -nanopik1plus current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -nanopik1plus current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# nanopim4 -nanopim4 current jammy cli stable adv -nanopim4 current bullseye cli stable yes -# -nanopim4 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -nanopim4 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -nanopim4 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# nanopim4v2 -nanopim4v2 current bullseye cli stable yes -nanopim4v2 current jammy cli stable adv -nanopim4v2 current bullseye minimal stable yes -nanopim4v2 current jammy minimal stable yes -# -nanopim4v2 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -nanopim4v2 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -nanopim4v2 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - - -# nanopineo -nanopineo current bullseye cli stable adv -nanopineo current jammy cli stable adv -nanopineo current bullseye minimal stable yes -nanopineo current jammy minimal stable yes - - - -# nanopineo2 -nanopineo2 current bullseye cli stable adv -nanopineo2 current jammy cli stable adv -nanopineo2 current bullseye minimal stable yes -nanopineo2 current jammy minimal stable yes - - - -# nanopineo3 -nanopineo3 current bullseye cli stable adv -nanopineo3 edge bullseye cli stable yes -nanopineo3 current jammy cli stable adv -nanopineo3 edge jammy cli stable yes -nanopineo3 current bullseye minimal stable yes -nanopineo3 current jammy minimal stable yes - -# nanopineoplus2 -nanopineoplus2 current bullseye cli stable adv -nanopineoplus2 current jammy cli stable adv -nanopineoplus2 current bullseye minimal stable yes -nanopineoplus2 current jammy minimal stable yes - - -# nanopineo2black -nanopineo2black current bullseye cli stable adv -nanopineo2black current jammy cli stable adv -nanopineo2black current bullseye minimal stable yes -nanopineo2black current jammy minimal stable yes - - -# Odroid C2 -odroidc2 current jammy cli stable adv -odroidc2 current bullseye cli stable yes -odroidc2 current jammy minimal stable yes -odroidc2 current bullseye minimal stable yes -# -odroidc2 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -odroidc2 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -odroidc2 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# - - -# Odroid N2 / N2+ -odroidn2 current jammy cli stable adv -odroidn2 current bullseye cli stable yes -odroidn2 current jammy minimal stable yes -odroidn2 current bullseye minimal stable yes -# -odroidn2 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -odroidn2 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -odroidn2 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# - - -# Odroid M1 -odroidm1 edge jammy cli stable adv -odroidm1 edge bullseye cli stable yes -odroidm1 edge jammy minimal stable yes -odroidm1 edge bullseye minimal stable yes -# -odroidm1 edge jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -odroidm1 edge jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -odroidm1 edge jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# - - -# Odroid HC4 -odroidhc4 current jammy cli stable adv -odroidhc4 current bullseye cli stable yes -odroidhc4 current jammy minimal stable yes -odroidhc4 current bullseye minimal stable yes -# -odroidhc4 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -odroidhc4 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -odroidhc4 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# - - -# Odroid C4 -odroidc4 current jammy cli stable adv -odroidc4 current bullseye cli stable yes -odroidc4 current jammy minimal stable yes -odroidc4 current bullseye minimal stable yes -# -odroidc4 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -odroidc4 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -odroidc4 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# - - -# Odroid XU4 -odroidxu4 current jammy cli stable adv -odroidxu4 current bullseye cli stable yes -odroidxu4 current jammy minimal stable yes -odroidxu4 current bullseye minimal stable yes -# -odroidxu4 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# -odroidxu4 edge jammy cli stable no - - -# orangepi 3 -orangepi3 current jammy cli stable adv -orangepi3 current bullseye cli stable yes -orangepi3 current jammy minimal stable yes -orangepi3 current bullseye minimal stable yes -# -orangepi3 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepi3 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepi3 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# orangepi 3 LTS -orangepi3-lts current jammy cli stable adv -orangepi3-lts current bullseye cli stable yes -orangepi3-lts current jammy minimal stable yes -orangepi3-lts current bullseye minimal stable yes -# -orangepi3-lts current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepi3-lts current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepi3-lts current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Orangepi 4 -orangepi4 current jammy cli stable adv -orangepi4 current bullseye cli stable yes -orangepi4 current jammy minimal stable yes -orangepi4 current bullseye minimal stable yes -# -orangepi4 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepi4 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepi4 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Orangepi 4 LTS -orangepi4-lts current jammy cli stable adv -orangepi4-lts current bullseye cli stable yes -orangepi4-lts current jammy minimal stable yes -orangepi4-lts current bullseye minimal stable yes -# -orangepi4-lts current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepi4-lts current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepi4-lts current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Orangepi 5 -orangepi5 legacy jammy cli stable adv -orangepi5 legacy bullseye cli stable yes -orangepi5 legacy jammy minimal stable yes -orangepi5 legacy bullseye minimal stable yes -orangepi5 legacy jammy desktop stable adv gnome config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepi5 legacy jammy desktop stable yes cinnamon config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepi5 legacy jammy desktop stable yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Orangepi R1 -orangepi-r1 current jammy cli stable adv -orangepi-r1 current bullseye cli stable adv -orangepi-r1 current jammy minimal stable yes -orangepi-r1 current bullseye minimal stable yes - - -# orangepi R1+ -orangepi-r1plus current jammy cli stable adv -orangepi-r1plus current bullseye cli stable adv -orangepi-r1plus current jammy minimal stable yes -orangepi-r1plus current bullseye minimal stable yes - - -# Orangepi R1+ LTS -orangepi-r1plus-lts current bullseye cli stable adv -orangepi-r1plus-lts current jammy cli stable adv -orangepi-r1plus-lts current bullseye minimal stable yes -orangepi-r1plus-lts current jammy minimal stable yes - - -# orangepilite -orangepilite current bullseye cli stable yes -orangepilite current jammy cli stable adv -orangepilite current bullseye minimal stable yes -orangepilite current jammy minimal stable yes -# -orangepilite current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# orangepilite2 -orangepilite2 current bullseye cli stable yes -orangepilite2 current jammy cli stable adv -orangepilite2 current bullseye minimal stable yes -orangepilite2 current jammy minimal stable yes -# -orangepilite2 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# orangepioneplus -orangepioneplus current bullseye cli stable yes -orangepioneplus current jammy cli stable adv -orangepioneplus current bullseye minimal stable yes -orangepioneplus current jammy minimal stable yes -# -orangepioneplus current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# orangepione -orangepione current bullseye cli stable yes -orangepione current jammy cli stable adv -orangepione current bullseye minimal stable yes -orangepione current jammy minimal stable yes -# -orangepione current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# orangepipc -orangepipc current bullseye cli stable yes -orangepipc current jammy cli stable adv -orangepipc current bullseye minimal stable yes -orangepipc current jammy minimal stable yes -# -orangepipc current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# orangepipc2 -orangepipc2 current jammy cli stable adv -orangepipc2 current bullseye cli stable yes -orangepipc2 current jammy minimal stable yes -orangepipc2 current bullseye minimal stable yes -# -orangepipc2 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepipc2 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepipc2 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# - - -# orangepipcplus -orangepipcplus current bullseye cli stable yes -orangepipcplus current jammy cli stable adv -orangepipcplus current bullseye minimal stable yes -orangepipcplus current jammy minimal stable yes -# -orangepipcplus current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# orangepiplus -orangepiplus current bullseye cli stable yes -orangepiplus current jammy cli stable adv -orangepiplus current bullseye minimal stable yes -orangepiplus current jammy minimal stable yes -# -orangepiplus current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# orangepiplus2e -orangepiplus2e current bullseye cli stable yes -orangepiplus2e current jammy cli stable adv -orangepiplus2e current jammy minimal stable yes -orangepiplus2e current bullseye minimal stable yes -# -orangepiplus2e current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Orangepi Prime -orangepiprime current jammy cli stable adv -orangepiprime current bullseye cli stable yes -orangepiprime current jammy minimal stable yes -orangepiprime current bullseye minimal stable yes -# -orangepiprime current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepiprime current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -orangepiprime current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# orangepizero -orangepizero current jammy cli stable adv -orangepizero current bullseye cli stable adv -orangepizero current jammy minimal stable yes -orangepizero current bullseye minimal stable yes - - -# orangepizero2 -orangepizero2 legacy jammy cli stable adv -orangepizero2 legacy bullseye cli stable adv -orangepizero2 edge jammy cli stable yes -orangepizero2 edge bullseye cli stable yes -orangepizero2 edge jammy minimal stable yes -orangepizero2 edge bullseye minimal stable yes - - -# orangepizeroplus -orangepizeroplus current jammy cli stable adv -orangepizeroplus current bullseye cli stable adv -orangepizeroplus current jammy minimal stable yes -orangepizeroplus current bullseye minimal stable yes - - -# orangepizeroplus h3 -orangepizeroplus2-h3 current bullseye cli stable yes -orangepizeroplus2-h3 current jammy cli stable adv -# -orangepizeroplus2-h3 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Pine 64 -pine64 current jammy cli stable adv -pine64 current bullseye cli stable yes -pine64 current jammy minimal stable yes -pine64 current bullseye minimal stable yes -# -pine64 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -pine64 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -pine64 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# So-Pine 64 -pine64so current bullseye cli stable adv -pine64so current jammy cli stable adv - - -# Pine H64 -pineh64-b current jammy cli stable adv -pineh64-b current bullseye cli stable yes -pineh64-b current jammy minimal stable yes -pineh64-b current bullseye minimal stable yes -# -pineh64-b current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -pineh64-b current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -pineh64-b current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Pinebook PRO -pinebook-pro edge jammy desktop stable adv gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -pinebook-pro edge jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -pinebook-pro edge jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Radxa Zero -radxa-zero current jammy cli stable adv -radxa-zero current bullseye cli stable yes -radxa-zero current jammy minimal stable yes -radxa-zero current bullseye minimal stable yes -# -radxa-zero current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -radxa-zero current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -radxa-zero current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Radxa Zero 2 -radxa-zero2 current jammy cli stable adv -radxa-zero2 current bullseye cli stable yes -radxa-zero2 current jammy minimal stable yes -radxa-zero2 current bullseye minimal stable yes -# -radxa-zero2 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -radxa-zero2 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -radxa-zero2 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Renegade -renegade current jammy cli stable adv -renegade current bullseye cli stable yes -renegade current jammy minimal stable yes -renegade current bullseye minimal stable yes -# -renegade current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -renegade current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -renegade current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - - -# Rock64pro -rockpro64 current jammy cli stable adv -rockpro64 current bullseye cli stable yes -rockpro64 current jammy minimal stable yes -rockpro64 current bullseye minimal stable yes -# -rockpro64 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rockpro64 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rockpro64 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# rk322x-box -rk322x-box current bullseye cli stable yes -rk322x-box current jammy cli stable adv -# -rk322x-box current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# -rk322x-box edge bullseye cli stable no - - -# rk3318-box -rk3318-box current bullseye cli stable yes -rk3318-box current jammy cli stable yes -# -rk3318-box current jammy desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# -rk3318-box edge bullseye cli stable no - - -# Rock64 -rock64 current jammy cli stable adv -rock64 current bullseye cli stable yes -rock64 current jammy minimal stable yes -rock64 current bullseye minimal stable yes -# -rock64 current jammy desktop stable yes gnome config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rock64 current jammy desktop stable yes cinnamon config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rock64 current jammy desktop stable adv xfce config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Rock-3a -rock-3a edge jammy cli stable adv -rock-3a edge bullseye cli stable yes -rock-3a edge jammy minimal stable yes -rock-3a edge bullseye minimal stable yes -# -rock-3a edge jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rock-3a edge jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rock-3a edge jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Rockpi 4a -rockpi-4a current jammy cli stable adv -rockpi-4a current bullseye cli stable yes -rockpi-4a current jammy minimal stable yes -rockpi-4a current bullseye minimal stable yes -# -rockpi-4a current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rockpi-4a current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rockpi-4a current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Rockpi 4b -rockpi-4b current jammy cli stable adv -rockpi-4b current bullseye cli stable yes -rockpi-4b current jammy minimal stable yes -rockpi-4b current bullseye minimal stable yes -# -rockpi-4b current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rockpi-4b current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rockpi-4b current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Rockpi 4c -rockpi-4c current jammy cli stable adv -rockpi-4c current bullseye cli stable yes -rockpi-4c current jammy minimal stable yes -rockpi-4c current bullseye minimal stable yes -# -rockpi-4c current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rockpi-4c current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rockpi-4c current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Rockpi 4c+ -rockpi-4cplus current jammy cli stable adv -rockpi-4cplus current bullseye cli stable yes -rockpi-4cplus current jammy minimal stable yes -rockpi-4cplus current bullseye minimal stable yes -# -rockpi-4cplus current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rockpi-4cplus current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rockpi-4cplus current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Radxa rock-5b -rock-5b legacy jammy cli stable adv -rock-5b legacy bullseye cli stable yes -rock-5b legacy jammy minimal stable yes -rock-5b legacy bullseye minimal stable yes -rock-5b legacy jammy desktop stable adv gnome config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rock-5b legacy jammy desktop stable yes cinnamon config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rock-5b legacy jammy desktop stable yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Rockpi-S -rockpi-s edge jammy cli stable adv -rockpi-s edge bullseye cli stable adv -rockpi-s edge jammy minimal stable yes -rockpi-s edge bullseye minimal stable yes - - -# Tinkerboard -tinkerboard current bullseye cli stable yes -tinkerboard current jammy cli stable adv -tinkerboard current bullseye minimal stable yes -tinkerboard current jammy minimal stable yes -# -tinkerboard current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# -tinkerboard edge bullseye cli stable no - - -# Tritium H3 -tritium-h3 current bullseye cli stable yes -tritium-h3 current jammy cli stable adv -tritium-h3 current bullseye minimal stable yes -tritium-h3 current jammy minimal stable yes -# -tritium-h3 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Tritium H5 -tritium-h5 current jammy cli stable adv -tritium-h5 current bullseye cli stable yes -tritium-h5 current jammy minimal stable yes -tritium-h5 current bullseye minimal stable yes -# -tritium-h5 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -tritium-h5 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -tritium-h5 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Firefly-rk3399 -firefly-rk3399 current jammy cli stable yes -firefly-rk3399 current bullseye cli stable yes -# -firefly-rk3399 current bullseye desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -firefly-rk3399 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -firefly-rk3399 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Station M1 -station-m1 current jammy cli stable yes -station-m1 current bullseye cli stable yes -# -station-m1 current bullseye desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -station-m1 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Station P1 -station-p1 current jammy cli stable yes -station-p1 current bullseye cli stable yes -# -station-p1 current bullseye desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -station-p1 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -station-p1 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Station M2 -station-m2 legacy bullseye cli stable yes -station-m2 legacy jammy cli stable yes -station-m2 legacy bullseye desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -station-m2 legacy jammy desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# -station-m2 current jammy cli stable yes -station-m2 current bullseye cli stable yes -# -station-m2 current bullseye desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -station-m2 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -station-m2 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Station M3 -station-m3 legacy bullseye cli stable yes -station-m3 legacy jammy cli stable yes -station-m3 legacy bullseye desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -station-m3 legacy jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -station-m3 legacy jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Station P2 -station-p2 legacy bullseye cli stable yes -station-p2 legacy jammy cli stable yes -station-p2 legacy bullseye desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -station-p2 legacy jammy desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# -station-p2 current jammy cli stable yes -station-p2 current bullseye cli stable yes -# -station-p2 current bullseye desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -station-p2 current jammy desktop stable yes gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -station-p2 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# xt-q8l-v10 -xt-q8l-v10 current bullseye cli stable yes -xt-q8l-v10 current jammy cli stable adv -# -xt-q8l-v10 current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# zeropi -zeropi current jammy cli stable adv -zeropi current bullseye cli stable adv -zeropi current jammy minimal stable yes -zeropi current bullseye minimal stable yes - - -# JetHub H1 (j80) -jethubj80 current bullseye cli stable adv -jethubj80 current jammy cli stable adv -jethubj80 edge jammy cli stable yes - - -# JetHub D1 (j100) -jethubj100 current bullseye cli stable adv -jethubj100 current jammy cli stable adv -jethubj100 edge jammy cli stable yes - - -# Jetson Nano -jetson-nano legacy jammy desktop stable yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -jetson-nano legacy bullseye desktop stable yes xfce config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# -jetson-nano current jammy cli stable yes -jetson-nano current bullseye cli stable yes -# -jetson-nano current bullseye desktop stable adv xfce config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -jetson-nano current jammy desktop stable adv xfce config_base browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Raspberry Pi4 -rpi4b current jammy cli stable yes -rpi4b current jammy minimal stable yes -# -rpi4b current jammy desktop stable adv gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rpi4b current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -rpi4b current jammy desktop stable adv xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -# -rpi4b edge jammy cli stable no - - -# uefi-x86 -uefi-x86 current jammy cli stable yes -uefi-x86 current bullseye cli stable yes -uefi-x86 current jammy minimal stable yes -uefi-x86 current bullseye minimal stable yes -# -uefi-x86 current jammy desktop stable adv gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -uefi-x86 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -uefi-x86 current jammy desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -uefi-x86 current bullseye desktop stable adv gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -uefi-x86 current bullseye desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -uefi-x86 current bullseye desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# uefi-arm64 -uefi-arm64 current jammy minimal stable yes -uefi-arm64 current bullseye minimal stable yes -uefi-arm64 current jammy cli stable yes -uefi-arm64 current bullseye cli stable yes -# -uefi-arm64 current jammy desktop stable adv gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -uefi-arm64 current jammy desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -uefi-arm64 current jammy desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -uefi-arm64 current bullseye desktop stable adv gnome config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -uefi-arm64 current bullseye desktop stable yes cinnamon config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop -uefi-arm64 current bullseye desktop stable yes xfce config_base 3dsupport,browsers,chat,desktop_tools,editors,email,internet,multimedia,office,programming,remote_desktop - - -# Virtual qemu -virtual-qemu current focal cli stable no - - -# Udoo -udoo current bullseye cli stable no -udoo edge bullseye cli stable no - - -# Mele A1000 -melea1000 edge bullseye cli stable no diff --git a/lib/functions/artifacts/artifact-firmware.sh b/lib/functions/artifacts/artifact-firmware.sh index d118666ea..e7ef489ba 100644 --- a/lib/functions/artifacts/artifact-firmware.sh +++ b/lib/functions/artifacts/artifact-firmware.sh @@ -67,7 +67,7 @@ function artifact_firmware_cli_adapter_config_prep() { } function artifact_firmware_get_default_oci_target() { - artifact_oci_target_base="ghcr.io/rpardini/armbian-release/" + artifact_oci_target_base="ghcr.io/armbian/cache-firmware/" } function artifact_firmware_is_available_in_local_cache() { diff --git a/lib/functions/artifacts/artifact-full_firmware.sh b/lib/functions/artifacts/artifact-full_firmware.sh index f65eeb938..7caf1e88e 100644 --- a/lib/functions/artifacts/artifact-full_firmware.sh +++ b/lib/functions/artifacts/artifact-full_firmware.sh @@ -74,7 +74,7 @@ function artifact_full_firmware_cli_adapter_config_prep() { } function artifact_full_firmware_get_default_oci_target() { - artifact_oci_target_base="ghcr.io/rpardini/armbian-release/" + artifact_oci_target_base="ghcr.io/armbian/cache-firmware/" } function artifact_full_firmware_is_available_in_local_cache() { diff --git a/lib/functions/artifacts/artifact-kernel.sh b/lib/functions/artifacts/artifact-kernel.sh index c4e679962..de458272f 100644 --- a/lib/functions/artifacts/artifact-kernel.sh +++ b/lib/functions/artifacts/artifact-kernel.sh @@ -151,7 +151,7 @@ function artifact_kernel_cli_adapter_config_prep() { } function artifact_kernel_get_default_oci_target() { - artifact_oci_target_base="ghcr.io/rpardini/armbian-release/" + artifact_oci_target_base="ghcr.io/armbian/cache-kernel/" } function artifact_kernel_is_available_in_local_cache() { diff --git a/lib/functions/artifacts/artifact-rootfs.sh b/lib/functions/artifacts/artifact-rootfs.sh index fb5510e19..d2cae5f1b 100644 --- a/lib/functions/artifacts/artifact-rootfs.sh +++ b/lib/functions/artifacts/artifact-rootfs.sh @@ -23,7 +23,7 @@ function artifact_rootfs_prepare_version() { # outer scope artifact_version="${rootfs_cache_id}" artifact_version_reason="${reasons[*]}" - artifact_name="rootfs-${ARCH}-${RELEASE}-${cache_type}" + artifact_name="${ARCH}-${RELEASE}-${cache_type}" artifact_type="tar.zst" artifact_base_dir="${SRC}/cache/rootfs" artifact_final_file="${SRC}/cache/rootfs/${ARCH}-${RELEASE}-${rootfs_cache_id}.tar.zst" @@ -116,7 +116,7 @@ function artifact_rootfs_cli_adapter_config_prep() { } function artifact_rootfs_get_default_oci_target() { - artifact_oci_target_base="ghcr.io/armbian/rootfs-cache/" + artifact_oci_target_base="ghcr.io/armbian/cache-root/" } function artifact_rootfs_is_available_in_local_cache() { diff --git a/lib/functions/artifacts/artifact-uboot.sh b/lib/functions/artifacts/artifact-uboot.sh index cabac18d5..f839b9ce7 100644 --- a/lib/functions/artifacts/artifact-uboot.sh +++ b/lib/functions/artifacts/artifact-uboot.sh @@ -96,7 +96,7 @@ function artifact_uboot_cli_adapter_config_prep() { } function artifact_uboot_get_default_oci_target() { - artifact_oci_target_base="ghcr.io/rpardini/armbian-release/" + artifact_oci_target_base="ghcr.io/armbian/cache-uboot/" } function artifact_uboot_is_available_in_local_cache() { diff --git a/lib/functions/rootfs/create-cache.sh b/lib/functions/rootfs/create-cache.sh index 7498372d6..812bb6213 100644 --- a/lib/functions/rootfs/create-cache.sh +++ b/lib/functions/rootfs/create-cache.sh @@ -17,7 +17,7 @@ function calculate_rootfs_cache_id() { # AGGREGATED_ROOTFS_HASH is produced by aggregation.py # Don't use a dash here, dashes are significant to legacy rootfs cache id's - declare -g -r packages_hash="${AGGREGATED_ROOTFS_HASH:0:16}B${bash_hash_short}" + declare -g -r packages_hash="${AGGREGATED_ROOTFS_HASH:0:12}B${bash_hash_short}" declare cache_type="cli" [[ ${BUILD_DESKTOP} == yes ]] && cache_type="xfce-desktop"