commit 09c5d379f89183e1c40d3a736f3d634555d86451 Author: Dustin C. Hatch Date: Fri Nov 14 20:07:09 2025 -0600 Initial commit diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..769af42 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,11 @@ +[submodule "buildroot"] + path = buildroot + url = https://gitlab.com/buildroot.org/buildroot.git + branch = 2025.08.x + shallow = true + +[submodule "aimee-os"] + path = aimee-os + url = https://git.pyrocufflink.blue/AimeeOS/aimee-os.git + branch = master + shallow = true diff --git a/aimee-os b/aimee-os new file mode 160000 index 0000000..b2a0aab --- /dev/null +++ b/aimee-os @@ -0,0 +1 @@ +Subproject commit b2a0aab680766bfda5210c2b5435e41f98a40b32 diff --git a/buildroot b/buildroot new file mode 160000 index 0000000..ec0d27f --- /dev/null +++ b/buildroot @@ -0,0 +1 @@ +Subproject commit ec0d27f5667c132c5ebf4c08cfc5d29beda619c9 diff --git a/ci/Jenkinsfile b/ci/Jenkinsfile new file mode 100644 index 0000000..ff4a11f --- /dev/null +++ b/ci/Jenkinsfile @@ -0,0 +1,66 @@ +pipeline { + parameters { + booleanParam 'CLEAN_BUILD' + string 'CUSTOM_TARGET' + } + + options { + disableConcurrentBuilds() + } + + agent { + kubernetes { + yamlFile 'ci/podTemplate.yaml' + workspaceVolume persistentVolumeClaimWorkspaceVolume( + claimName: 'buildroot' + ) + defaultContainer 'build' + } + } + + environment { + BR2_CCACHE_DIR = "${env.JENKINS_AGENT_WORKDIR}/br2-ccache" + } + + stages { + stage('Clean') { + when { + expression { + return params.CLEAN_BUILD + } + } + steps { + sh 'git clean -fdx' + } + } + + stage('Build') { + steps { + sh '. ci/defconfig.sh' + script { + if (params.CUSTOM_TARGET) { + sh "make -C _build '${CUSTOM_TARGET}'" + } + } + sh 'make -C _build' + } + post { + success { + dir('_build') { + archiveArtifacts('.config') + } + dir('_build/images') { + sh 'zstd -f firmware.img' + sh 'zstd -f sdcard.img' + archiveArtifacts([ + 'firmware.img.zst', + 'rootfs.squashfs', + 'sdcard.img.zst', + 'update.tar.zstd', + ].join(',')) + } + } + } + } + } +} diff --git a/ci/defconfig.sh b/ci/defconfig.sh new file mode 100644 index 0000000..f742fa7 --- /dev/null +++ b/ci/defconfig.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +sed -i \ + -e '$a'"$( + grep BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION= buildroot/configs/raspberrypi3_defconfig + )" \ + -e /BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION/d \ + kioskpi_defconfig + +make \ + -C buildroot \ + O="${PWD}"/_build \ + BR2_EXTERNAL="${PWD}/aimee-os" \ + defconfig \ + BR2_DEFCONFIG="${PWD}"/kioskpi_defconfig diff --git a/ci/podTemplate.yaml b/ci/podTemplate.yaml new file mode 100644 index 0000000..ec21a88 --- /dev/null +++ b/ci/podTemplate.yaml @@ -0,0 +1,32 @@ +metadata: + annotations: + io.kubernetes.cri-o.TrySkipVolumeSELinuxLabel: 'true' +spec: + containers: + - name: build + image: git.pyrocufflink.net/containerimages/buildroot + resources: + limits: &resources + cpu: 6 + memory: 12Gi + requests: *resources + volumeMounts: + - mountPath: /etc/ssh/ssh_known_hosts + name: ssh-known-hosts + subPath: ssh_known_hosts + nodeSelector: + kubernetes.io/arch: amd64 + du5t1n.me/jenkins: '' + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + fsGroupChangePolicy: OnRootMismatch + seLinuxOptions: + level: s0:c596,c675 + tolerations: + - key: du5t1n.me/jenkins + volumes: + - name: ssh-known-hosts + configMap: + name: ssh-known-hosts diff --git a/kioskpi_defconfig b/kioskpi_defconfig new file mode 100644 index 0000000..4c752b4 --- /dev/null +++ b/kioskpi_defconfig @@ -0,0 +1,39 @@ +BR2_arm=y +BR2_cortex_a53=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_12=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_GLOBAL_PATCH_DIR="board/raspberrypi/patches" +BR2_DOWNLOAD_FORCE_CHECK_HASHES=y +BR2_TARGET_GENERIC_HOSTNAME="airplaypi" +BR2_INIT_SYSTEMD=y +BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_AIMEEOS_PATH)/board/raspberrypi3/post-image.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_DEFCONFIG="bcm2709" +BR2_LINUX_KERNEL_ZSTD=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2710-rpi-3-b broadcom/bcm2710-rpi-3-b-plus broadcom/bcm2710-rpi-cm3" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +# BR2_PACKAGE_BUSYBOX is not set +BR2_PACKAGE_ALSA_UTILS=y +BR2_PACKAGE_ALSA_UTILS_AMIXER=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_BRCMFMAC_SDIO_FIRMWARE_RPI=y +BR2_PACKAGE_BRCMFMAC_SDIO_FIRMWARE_RPI_BT=y +BR2_PACKAGE_BRCMFMAC_SDIO_FIRMWARE_RPI_WIFI=y +BR2_PACKAGE_READLINE=y +BR2_PACKAGE_RPI_FIRMWARE=y +BR2_PACKAGE_RPI_FIRMWARE_BOOTCODE_BIN=y +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI=y +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="$(BR2_EXTERNAL_AIMEEOS_PATH)/board/raspberrypi3/config.txt" +BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="$(BR2_EXTERNAL_AIMEEOS_PATH)/board/raspberrypi3/cmdline.txt" +BR2_PACKAGE_IPROUTE2=y +BR2_PACKAGE_IWD=y +BR2_PACKAGE_OPENSSH=y +# BR2_PACKAGE_OPENSSH_CLIENT is not set +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rpi_3_32b" +BR2_PACKAGE_HOST_KMOD_XZ=y +AIMEEOS=y +AIMEEOS_RPI=y