From f399e139583ae6c0576b20844d4e7c27ee0b28aa Mon Sep 17 00:00:00 2001 From: Chris Blake Date: Thu, 30 May 2024 17:42:12 -0500 Subject: [PATCH] fix: add btrfs support using magic (#5) * Use old GPL release from https://github.com/fabianishere/udm-kernel/tree/master to build and steal it's btrfs kernel module + depends. * Can't use full kernel, NIC issues everywhere, so we will just use it for btrfs for OMV. Will move to our own kernel fully if I can get an updated GPL release from Ui. * BONUS: Fixup issue where system would reboot when shutdown from touch screen --- .gitignore | 1 + Dockerfile | 1 + README.md | 5 +- overlay/filesystem/usr/bin/ubnt-systool | 2 +- .../filesystem/usr/lib/init/boot/ubnt-init.sh | 1 + .../arch/arm64/configs/alpine_v2_defconfig | 372 ++++++++++++++++++ scripts/02_download_dependencies.sh | 27 ++ scripts/03_docker.sh | 12 + scripts/04_post_docker.sh | 4 +- scripts/docker/bootstrap/001-bootstrap | 3 + scripts/docker/build_kernel.sh | 54 +++ scripts/docker/run_debootstrap.sh | 9 +- scripts/vars.sh | 12 + 13 files changed, 495 insertions(+), 8 deletions(-) create mode 100644 overlay/kernel/arch/arm64/configs/alpine_v2_defconfig create mode 100755 scripts/02_download_dependencies.sh create mode 100755 scripts/docker/build_kernel.sh diff --git a/.gitignore b/.gitignore index ca6ca15..6a8c1a3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ unifi-firmware/*.bin BuildEnv output +downloads \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index c9593c8..5da41e5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,6 +40,7 @@ RUN apt-get update && apt-get install -yq \ qemu-user-static \ rsync \ swig \ + u-boot-tools \ unzip \ uuid-runtime \ wget \ diff --git a/README.md b/README.md index e2000c2..1019674 100644 --- a/README.md +++ b/README.md @@ -101,9 +101,8 @@ To restore back to the factory UNVR-Pro firmware, you can do the following steps * Installation is Hard * Need to simplify the install process, this should be much easier once I can get latest GPL kernel source (no more uboot env stuff) * OpenMediaVault - * BTRFS does not work, period - * No kernel module in UBNT kernel, need new kernel source and we can make so many things better... - * Might try to build an out-of-tree module for this, more research needed + * BTRFS is in TESTING + * Building an out-of-tree module for this using an OLD Unifi GPL release from https://github.com/fabianishere/udm-kernel * Reset Button * Only works to reboot the system diff --git a/overlay/filesystem/usr/bin/ubnt-systool b/overlay/filesystem/usr/bin/ubnt-systool index da6332a..5acf1c9 100755 --- a/overlay/filesystem/usr/bin/ubnt-systool +++ b/overlay/filesystem/usr/bin/ubnt-systool @@ -1,7 +1,7 @@ #!/bin/bash if [ "$1" == "poweroff" ]; then - poweroff + poweroff --halt elif [ "$1" == "reboot" ]; then reboot else diff --git a/overlay/filesystem/usr/lib/init/boot/ubnt-init.sh b/overlay/filesystem/usr/lib/init/boot/ubnt-init.sh index b50bf6c..97385c4 100755 --- a/overlay/filesystem/usr/lib/init/boot/ubnt-init.sh +++ b/overlay/filesystem/usr/lib/init/boot/ubnt-init.sh @@ -2,6 +2,7 @@ # Load our kernel modules /usr/sbin/modprobe ubnthal +/usr/sbin/modprobe btrfs # Set our kernel panic timeout SUPER short so we reboot on crash echo 2 > /proc/sys/kernel/panic diff --git a/overlay/kernel/arch/arm64/configs/alpine_v2_defconfig b/overlay/kernel/arch/arm64/configs/alpine_v2_defconfig new file mode 100644 index 0000000..82aa96c --- /dev/null +++ b/overlay/kernel/arch/arm64/configs/alpine_v2_defconfig @@ -0,0 +1,372 @@ +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_AUDIT=y +CONFIG_NO_HZ_IDLE=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_IRQ_TIME_ACCOUNTING=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_CGROUPS=y +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +CONFIG_BLK_CGROUP=y +CONFIG_CGROUP_SCHED=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CPUSETS=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_USER_NS=y +CONFIG_CHECKPOINT_RESTORE=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_KALLSYMS_ALL=y +CONFIG_DEBUG_PERF_USE_VMALLOC=y +CONFIG_PROFILING=y +CONFIG_ARCH_ALPINE=y +CONFIG_PCI=y +CONFIG_PCI_IOV=y +CONFIG_PCI_INTERNAL_ALPINE=y +CONFIG_PCI_EXTERNAL_ALPINE=y +CONFIG_PCI_EXTERNAL_ERR_ALPINE=y +CONFIG_NR_CPUS=4 +CONFIG_HZ_100=y +CONFIG_CRASH_DUMP=y +# CONFIG_ARM64_PAN is not set +# CONFIG_ARM64_LSE_ATOMICS is not set +# CONFIG_ARM64_VHE is not set +# CONFIG_ARM64_SVE is not set +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_ARM_CPUIDLE=y +# CONFIG_EFI_ARMSTUB_DTB_LOADER is not set +# CONFIG_STACKPROTECTOR_STRONG is not set +# CONFIG_VMAP_STACK is not set +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_BLK_DEV_THROTTLING=y +CONFIG_BLK_CGROUP_IOLATENCY=y +CONFIG_CFQ_GROUP_IOSCHED=y +# CONFIG_MQ_IOSCHED_DEADLINE is not set +# CONFIG_MQ_IOSCHED_KYBER is not set +CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM_USER=y +CONFIG_NET_KEY=m +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +# CONFIG_INET_DIAG is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +CONFIG_IPV6_SIT=m +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +CONFIG_NET_DSA=m +CONFIG_VLAN_8021Q=m +CONFIG_BPF_JIT=y +CONFIG_BT=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_BNEP=y +CONFIG_BT_HIDP=y +CONFIG_BT_NORDIC_QUIRK_LOOKUP_FIX=y +CONFIG_BT_HCIBTUSB=y +CONFIG_BT_HCIUART=y +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_FAILOVER=y +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_MTD=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_M25P80=y +CONFIG_MTD_NAND=m +CONFIG_MTD_NAND_AL=m +CONFIG_MTD_SPI_NOR=y +CONFIG_OF_OVERLAY=y +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=1 +CONFIG_EEPROM_AT24=y +CONFIG_EEPROM_AT25=m +# CONFIG_SCSI_PROC_FS is not set +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_SG=y +# CONFIG_SCSI_SAS_HOST_SMP is not set +CONFIG_SCSI_HISI_SAS=y +CONFIG_SCSI_HISI_SAS_PCI=y +CONFIG_SCSI_MPT2SAS=y +CONFIG_SCSI_UFSHCD=m +CONFIG_SCSI_UFSHCD_PLATFORM=m +CONFIG_ATA=y +# CONFIG_SATA_PMP is not set +CONFIG_SATA_AHCI=y +CONFIG_SATA_AHCI_PLATFORM=y +CONFIG_AHCI_ALPINE=y +CONFIG_SATA_SIL24=y +# CONFIG_ATA_SFF is not set +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +CONFIG_BLK_DEV_DM=y +CONFIG_DM_FLAKEY=m +CONFIG_DM_LOG_WRITES=m +CONFIG_NETDEVICES=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_NET_VENDOR_ADAPTEC is not set +# CONFIG_NET_VENDOR_AGERE is not set +# CONFIG_NET_VENDOR_ALACRITECH is not set +# CONFIG_NET_VENDOR_ALTEON is not set +# CONFIG_NET_VENDOR_AMAZON is not set +# CONFIG_NET_VENDOR_AMD is not set +# CONFIG_NET_VENDOR_AQUANTIA is not set +# CONFIG_NET_VENDOR_ARC is not set +# CONFIG_NET_VENDOR_ATHEROS is not set +# CONFIG_NET_VENDOR_AURORA is not set +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_BROCADE is not set +# CONFIG_NET_VENDOR_CADENCE is not set +# CONFIG_NET_VENDOR_CAVIUM is not set +# CONFIG_NET_VENDOR_CHELSIO is not set +# CONFIG_NET_VENDOR_CISCO is not set +# CONFIG_NET_VENDOR_CORTINA is not set +# CONFIG_NET_VENDOR_DEC is not set +# CONFIG_NET_VENDOR_DLINK is not set +# CONFIG_NET_VENDOR_EMULEX is not set +# CONFIG_NET_VENDOR_EZCHIP is not set +# CONFIG_NET_VENDOR_HISILICON is not set +# CONFIG_NET_VENDOR_HP is not set +# CONFIG_NET_VENDOR_HUAWEI is not set +# CONFIG_NET_VENDOR_INTEL is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MELLANOX is not set +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_MICROCHIP is not set +# CONFIG_NET_VENDOR_MICROSEMI is not set +# CONFIG_NET_VENDOR_MYRI is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_NETERION is not set +# CONFIG_NET_VENDOR_NETRONOME is not set +# CONFIG_NET_VENDOR_NI is not set +# CONFIG_NET_VENDOR_NVIDIA is not set +# CONFIG_NET_VENDOR_OKI is not set +# CONFIG_NET_VENDOR_PACKET_ENGINES is not set +# CONFIG_NET_VENDOR_QLOGIC is not set +# CONFIG_NET_VENDOR_QUALCOMM is not set +# CONFIG_NET_VENDOR_RDC is not set +# CONFIG_NET_VENDOR_REALTEK is not set +# CONFIG_NET_VENDOR_RENESAS is not set +# CONFIG_NET_VENDOR_ROCKER is not set +# CONFIG_NET_VENDOR_SAMSUNG is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SOLARFLARE is not set +# CONFIG_NET_VENDOR_SILAN is not set +# CONFIG_NET_VENDOR_SIS is not set +# CONFIG_NET_VENDOR_SMSC is not set +# CONFIG_NET_VENDOR_SOCIONEXT is not set +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_SUN is not set +# CONFIG_NET_VENDOR_SYNOPSYS is not set +CONFIG_NET_AL_ETH=y +# CONFIG_NET_VENDOR_TEHUTI is not set +# CONFIG_NET_VENDOR_TI is not set +# CONFIG_NET_VENDOR_VIA is not set +# CONFIG_NET_VENDOR_WIZNET is not set +CONFIG_AR8033_DISABLE_EEE=y +CONFIG_AT8033_SEL_1P8=y +CONFIG_AT803X_PHY=y +CONFIG_MARVELL_PHY=m +CONFIG_MARVELL_10G_PHY=m +CONFIG_MICREL_PHY=y +CONFIG_MICROCHIP_PHY=m +CONFIG_REALTEK_PHY=y +CONFIG_ROCKCHIP_PHY=y +# CONFIG_USB_NET_DRIVERS is not set +# CONFIG_WLAN is not set +# CONFIG_INPUT_LEDS is not set +CONFIG_INPUT_POLLDEV=m +CONFIG_INPUT_MATRIXKMAP=y +CONFIG_INPUT_EVDEV=y +# CONFIG_KEYBOARD_ATKBD is not set +CONFIG_KEYBOARD_GPIO=y +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIO_AMBAKMI=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_LEGACY_PTY_COUNT=16 +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_DW=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_CAVIUM=m +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y +CONFIG_I2C_MUX_PCA954x=y +CONFIG_I2C_DESIGNWARE_PLATFORM=y +CONFIG_I2C_DESIGNWARE_PCI=y +CONFIG_SPI=y +CONFIG_SPI_DESIGNWARE=y +CONFIG_SPI_DW_MMIO=y +CONFIG_SPI_SPIDEV=y +CONFIG_SPMI=y +CONFIG_PTP_1588_CLOCK=y +CONFIG_GPIOLIB=y +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_GENERIC_PLATFORM=y +CONFIG_GPIO_PL061=y +CONFIG_GPIO_AL_SGPO=y +CONFIG_GPIO_PCA953X=y +CONFIG_GPIO_PCA953X_IRQ=y +CONFIG_POWER_RESET_ALPINE=y +CONFIG_SENSORS_ADT7475=y +CONFIG_SENSORS_LM63=y +CONFIG_THERMAL=y +CONFIG_AL_THERMAL_V2=y +CONFIG_AL_THERMAL_V3=y +CONFIG_MFD_SYSCON=y +CONFIG_VGA_ARB_MAX_GPUS=0 +# CONFIG_USB_HID is not set +CONFIG_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PLATFORM=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_ACM=y +CONFIG_USB_STORAGE=y +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_CP210X=y +CONFIG_USB_SERIAL_FTDI_SIO=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_EXTERNAL=y +CONFIG_EDAC=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_NVMEM is not set +CONFIG_RTC_DRV_DS1307=y +CONFIG_RTC_DRV_S35390A=y +CONFIG_DMADEVICES=y +CONFIG_ASYNC_TX_DMA=y +CONFIG_AL_DMA=y +CONFIG_AL_DMA_STATS=y +CONFIG_AL_DMA_PCI_IOV=y +CONFIG_SYNC_FILE=y +# CONFIG_VIRTIO_MENU is not set +CONFIG_COMMON_CLK_VERSATILE=y +CONFIG_CLK_SP810=y +# CONFIG_COMMON_CLK_XGENE is not set +# CONFIG_FSL_ERRATUM_A008585 is not set +# CONFIG_HISILICON_ERRATUM_161010101 is not set +# CONFIG_ARM64_ERRATUM_858921 is not set +# CONFIG_IOMMU_SUPPORT is not set +CONFIG_ALPINE_PLATFORM="ALPINE_V2" +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_MEMORY=y +CONFIG_ALPINE_IOFIC=y +CONFIG_GENERIC_PHY=y +CONFIG_ARM_CCI_PMU=y +# CONFIG_ARM_CCI5xx_PMU is not set +# CONFIG_ARM_PMU is not set +CONFIG_RAS=y +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_BTRFS_FS=m +CONFIG_BTRFS_FS_POSIX_ACL=y +# CONFIG_MANDATORY_FILE_LOCKING is not set +CONFIG_QUOTA=y +# CONFIG_PRINT_QUOTA_WARNING is not set +CONFIG_OVERLAY_FS=y +CONFIG_PROC_KCORE=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_HUGETLBFS=y +CONFIG_CONFIGFS_FS=y +CONFIG_EFIVAR_FS=y +CONFIG_ECRYPT_FS=y +CONFIG_SQUASHFS=m +CONFIG_SQUASHFS_FILE_DIRECT=y +CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_ZSTD=y +CONFIG_PSTORE=y +CONFIG_PSTORE_CONSOLE=y +CONFIG_PSTORE_RAM=m +CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +CONFIG_NFS_SWAP=y +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y +CONFIG_NFS_V4_1_MIGRATION=y +CONFIG_ROOT_NFS=y +CONFIG_NFSD=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_NFSD_BLOCKLAYOUT=y +CONFIG_NFSD_SCSILAYOUT=y +CONFIG_NFSD_FLEXFILELAYOUT=y +CONFIG_NFSD_FAULT_INJECTION=y +CONFIG_SUNRPC_DEBUG=y +CONFIG_CIFS=y +# CONFIG_CIFS_DEBUG is not set +CONFIG_NLS_ISO8859_1=y +CONFIG_ENCRYPTED_KEYS=y +CONFIG_CRYPTO_RSA=y +# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set +CONFIG_CRYPTO_GF128MUL=y +CONFIG_CRYPTO_CRYPTD=y +CONFIG_CRYPTO_AUTHENC=y +CONFIG_CRYPTO_ECHAINIV=y +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_LZO=y +CONFIG_CRYPTO_ANSI_CPRNG=y +CONFIG_CRC64=y +CONFIG_LIBCRC32C=y +CONFIG_PRINTK_TIME=y +CONFIG_CONSOLE_LOGLEVEL_DEFAULT=4 +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_KERNEL=y +CONFIG_SOFTLOCKUP_DETECTOR=y +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y +CONFIG_PANIC_ON_OOPS=y +CONFIG_PANIC_TIMEOUT=5 +CONFIG_STACKTRACE=y +# CONFIG_RCU_TRACE is not set +# CONFIG_UPROBE_EVENTS is not set +# CONFIG_TRACING_EVENTS_GPIO is not set +# CONFIG_RUNTIME_TESTING_MENU is not set +# CONFIG_STRICT_DEVMEM is not set diff --git a/scripts/02_download_dependencies.sh b/scripts/02_download_dependencies.sh new file mode 100755 index 0000000..318c0d2 --- /dev/null +++ b/scripts/02_download_dependencies.sh @@ -0,0 +1,27 @@ +#!/bin/bash +set -e + +# Source our common vars +scripts_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +. ${scripts_path}/vars.sh + +debug_msg "Starting 02_download_dependencies.sh" + +# Make sure our BuildEnv dir exists +if [ ! -d ${root_path}/downloads ]; then + mkdir ${root_path}/downloads +fi + +# Toolchain +if [ ! -f ${root_path}/downloads/${toolchain_filename} ]; then + debug_msg "Downloading toolchain..." + wget ${toolchain_url} -P ${root_path}/downloads +fi + +# Kernel +if [ ! -f ${root_path}/downloads/${kernel_filename} ]; then + debug_msg "Downloading Kernel..." + wget ${kernel_src} -O ${root_path}/downloads/${kernel_filename} +fi + +debug_msg "Finished 02_download_dependencies.sh" diff --git a/scripts/03_docker.sh b/scripts/03_docker.sh index 23d22b4..04890d1 100755 --- a/scripts/03_docker.sh +++ b/scripts/03_docker.sh @@ -7,6 +7,18 @@ scripts_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" debug_msg "Starting 03_docker.sh" +# Start with things we can do now +if [ ! -d ${build_path}/toolchain ]; then + debug_msg "Setting up the toolchain for docker..." + mkdir -p ${build_path}/toolchain + tar -xf ${root_path}/downloads/${toolchain_filename} -C ${build_path}/toolchain +fi + +if [ ! -d ${build_path}/kernel ]; then + debug_msg "Docker: Building Kernel..." + docker run --ulimit nofile=1024 --rm -v "${root_path}:/repo:Z" -it ${docker_tag} /repo/scripts/docker/build_kernel.sh +fi + debug_msg "Doing safety checks... please enter your password for sudo if prompted..." # Before we do anything, make our dirs, and validate they are not mounted atm. If they are, exit! if mountpoint -q ${build_path}/rootfs/boot; then diff --git a/scripts/04_post_docker.sh b/scripts/04_post_docker.sh index a27f315..13c687c 100755 --- a/scripts/04_post_docker.sh +++ b/scripts/04_post_docker.sh @@ -20,6 +20,6 @@ docker run --rm -v "${root_path}:/repo:Z" -it ${docker_tag} /repo/scripts/docker TIMESTAMP=`date +%Y%m%d-%H%M` mkdir -p ${root_path}/output/${TIMESTAMP} mv ${build_path}/final/debian*.img.gz ${root_path}/output/${TIMESTAMP}/ -sudo rm -rf ${build_path} # Be gone, we done buildin! :) +#sudo rm -rf ${build_path} # Be gone, we done buildin! :) -debug_msg "Finished 04_post_docker.sh" \ No newline at end of file +debug_msg "Finished 04_post_docker.sh" diff --git a/scripts/docker/bootstrap/001-bootstrap b/scripts/docker/bootstrap/001-bootstrap index f2d7434..8ca095f 100755 --- a/scripts/docker/bootstrap/001-bootstrap +++ b/scripts/docker/bootstrap/001-bootstrap @@ -10,6 +10,9 @@ export APT_LISTCHANGES_FRONTEND=none debconf-set-selections /debconf.set rm -f /debconf.set +# Run depmod for our kernel so we pick up btrfs + more +depmod -a 4.19.152-alpine-unvr + # Initial package install apt-get clean apt-get update diff --git a/scripts/docker/build_kernel.sh b/scripts/docker/build_kernel.sh new file mode 100755 index 0000000..582f24a --- /dev/null +++ b/scripts/docker/build_kernel.sh @@ -0,0 +1,54 @@ +#!/bin/bash +set -e + +scripts_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )" +. ${scripts_path}/vars.sh + +# Make our temp builddir outside of the world of mounts for SPEEDS +kernel_builddir=$(mktemp -d) +tar -xzf ${root_path}/downloads/${kernel_filename} -C ${kernel_builddir} + +# Exports baby +export PATH=${build_path}/toolchain/${toolchain_bin_path}:${PATH} +export GCC_COLORS=auto +export CROSS_COMPILE=${toolchain_cross_compile} +export ARCH=arm64 + +# Here we go +cd ${kernel_builddir}/${kernel_filename%.tar.gz} + +# If we have patches, apply them +if [[ -d ${root_path}/patches/kernel/ ]]; then + for file in ${root_path}/patches/kernel/*.patch; do + echo "Applying kernel patch ${file}" + patch -p1 < ${file} + done +fi + +# Apply overlay if it exists +if [[ -d ${root_path}/overlay/${kernel_overlay_dir}/ ]]; then + echo "Applying ${kernel_overlay_dir} overlay" + cp -R ${root_path}/overlay/${kernel_overlay_dir}/* ./ +fi + +# Normally we would build a full kernel, but the old GPL doesn't work right with NICs and I don't +# want to debug a 2+ year old GPL source. Waiting for Unifi to release the lastest GPL code, and +# then we can fully move to our own custom kernel but for now we just use the old GPL to strip out +# some modules. This is why some lines below are commented out. + +# Build as normal, with our extra version set to a timestamp +make ${kernel_config} +make -j`getconf _NPROCESSORS_ONLN` EXTRAVERSION=-alpine-unvr # Build kernel and modules +#make -j`getconf _NPROCESSORS_ONLN` EXTRAVERSION=-alpine-unvr Image.gz # makes gzip image +make INSTALL_MOD_PATH=./modules-dir -j`getconf _NPROCESSORS_ONLN` EXTRAVERSION=-alpine-unvr modules_install # installs modules to dir +#mkimage -A arm64 -O linux -T kernel -C gzip -a 04080000 -e 04080000 -n "Linux-UNVR-NAS-$(date +%Y%m%d-%H%M%S)" -d ./arch/arm64/boot/Image.gz uImage + +# Save our config +mkdir -p ${build_path}/kernel +make savedefconfig +mv defconfig ${build_path}/kernel/kernel_config + +# Save our kernel(s) and libs +#cp ./arch/arm64/boot/Image.gz ${build_path}/kernel +#mv uImage ${build_path}/kernel +mv ./modules-dir ${build_path}/kernel/kernel-modules diff --git a/scripts/docker/run_debootstrap.sh b/scripts/docker/run_debootstrap.sh index e13d69c..025c65c 100755 --- a/scripts/docker/run_debootstrap.sh +++ b/scripts/docker/run_debootstrap.sh @@ -19,10 +19,15 @@ debootstrap --no-check-gpg --foreign --arch=${deb_arch} --include=apt-transport- cp /usr/bin/qemu-aarch64-static usr/bin/ chroot ${build_path}/rootfs /debootstrap/debootstrap --second-stage -# Copy over our kernel modules and kernel -mv -f "${build_path}/fw-extract/rootfs/lib/modules" ${build_path}/rootfs/lib +# Copy over our kernel modules and kernel from the FS image +# Note that in the future, we wanna use our own kernel, but the current GPL is way too old!!!!! +mv -f "${build_path}/fw-extract/rootfs/lib/modules" "${build_path}/rootfs/lib" cp "${build_path}/fw-extract/kernel.bin" "${build_path}/rootfs/boot/uImage" +# Now, for the old kernel we built, pull in btrfs + depends modules (we do depmod in bootstrap) +cp "${build_path}/kernel/kernel-modules/lib/modules/4.19.152-alpine-unvr/kernel/lib/zstd/zstd_compress.ko" "${build_path}/rootfs/lib/modules/4.19.152-alpine-unvr/extra/" +cp "${build_path}/kernel/kernel-modules/lib/modules/4.19.152-alpine-unvr/kernel/fs/btrfs/btrfs.ko" "${build_path}/rootfs/lib/modules/4.19.152-alpine-unvr/extra/" + # Copy over our overlay if we have one if [[ -d ${root_path}/overlay/${fs_overlay_dir}/ ]]; then echo "Applying ${fs_overlay_dir} overlay" diff --git a/scripts/vars.sh b/scripts/vars.sh index 93cfc10..1d224d5 100755 --- a/scripts/vars.sh +++ b/scripts/vars.sh @@ -10,6 +10,18 @@ docker_tag=unvr-nas:builder firmware_filename="f449-UNVRPRO-4.0.3-fdec2c4f-1855-4eb6-8711-e22f8f904922.bin" firmware_md5="5dcdc03bdec1524767007fcd12e81777" +# Toolchain +toolchain_url="https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz" +toolchain_filename="$(basename ${toolchain_url})" +toolchain_bin_path="${toolchain_filename%.tar.xz}/bin" +toolchain_cross_compile="aarch64-none-linux-gnu-" + +# Kernel +kernel_src="https://github.com/fabianishere/udm-kernel/archive/refs/heads/master.tar.gz" +kernel_filename="udm-kernel-master.tar.gz" +kernel_config="alpine_v2_defconfig" +kernel_overlay_dir="kernel" + # Genimage genimage_src="https://github.com/pengutronix/genimage/releases/download/v16/genimage-16.tar.xz" genimage_filename="$(basename ${genimage_src})"