diff --git a/buildroot-external/board/raspberrypi/cmdline.txt b/buildroot-external/board/raspberrypi/cmdline.txt index 3b2a965b..d87e9d92 100644 --- a/buildroot-external/board/raspberrypi/cmdline.txt +++ b/buildroot-external/board/raspberrypi/cmdline.txt @@ -1 +1 @@ -dwc_otg.lpm_enable=0 root=PARTUUID=c0932a41-44cf-463b-8152-d43188553ed4 rootfstype=ext4 elevator=deadline fsck.repair=yes console=ttyAMA0,115200 consoleblank=0 loglevel=0 vt.global_cursor_default=0 logo.nologo systemd.show_status=0 rootwait quiet splash +dwc_otg.lpm_enable=0 root=PARTUUID=c0932a41-44cf-463b-8152-d43188553ed4 rootfstype=ext4 elevator=deadline fsck.repair=yes zram.enabled=1 zram.num_devices=4 console=ttyAMA0,115200 consoleblank=0 loglevel=0 vt.global_cursor_default=0 logo.nologo systemd.show_status=0 rootwait quiet splash diff --git a/buildroot-external/board/raspberrypi/genimage-raspberrypi4-64.cfg b/buildroot-external/board/raspberrypi/genimage-raspberrypi4-64.cfg index 426af9a2..82623ddb 100644 --- a/buildroot-external/board/raspberrypi/genimage-raspberrypi4-64.cfg +++ b/buildroot-external/board/raspberrypi/genimage-raspberrypi4-64.cfg @@ -10,7 +10,7 @@ image boot.vfat { "Image" } } - size = 32M + size = 96M } image sdcard.img { diff --git a/buildroot-external/board/raspberrypi/kernel.config b/buildroot-external/board/raspberrypi/kernel.config index ec70df16..2aaf5bd4 100644 --- a/buildroot-external/board/raspberrypi/kernel.config +++ b/buildroot-external/board/raspberrypi/kernel.config @@ -1,3 +1,6 @@ CONFIG_SND_SOC_WM8960=m # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y + +CONFIG_ZRAM=y +CONFIG_ZSMALLOC=y diff --git a/buildroot-external/configs/rpi4_64-gui_defconfig b/buildroot-external/configs/rpi4_64-gui_defconfig index 9b7fe978..5fa166f4 100644 --- a/buildroot-external/configs/rpi4_64-gui_defconfig +++ b/buildroot-external/configs/rpi4_64-gui_defconfig @@ -451,6 +451,8 @@ BR2_PACKAGE_SUDO=y BR2_PACKAGE_TIME=y BR2_PACKAGE_WHICH=y BR2_PACKAGE_HTOP=y +BR2_PACKAGE_SYSTEMD_ANALYZE=y +BR2_PACKAGE_SYSTEMD_BACKLIGHT=y BR2_PACKAGE_SYSTEMD_FIRSTBOOT=y BR2_PACKAGE_SYSTEMD_HIBERNATE=y BR2_PACKAGE_SYSTEMD_LOCALED=y @@ -460,18 +462,20 @@ BR2_PACKAGE_SYSTEMD_POLKIT=y BR2_PACKAGE_SYSTEMD_RANDOMSEED=y BR2_PACKAGE_SYSTEMD_REPART=y # BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_SYSTEMD_BOOTCHART=y BR2_PACKAGE_TAR=y BR2_PACKAGE_UTIL_LINUX_BINARIES=y BR2_PACKAGE_UTIL_LINUX_HWCLOCK=y BR2_PACKAGE_UTIL_LINUX_KILL=y BR2_PACKAGE_UTIL_LINUX_MORE=y +BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y BR2_PACKAGE_NANO=y BR2_PACKAGE_VIM=y # BR2_PACKAGE_VIM_RUNTIME is not set BR2_TARGET_ROOTFS_EXT2=y BR2_TARGET_ROOTFS_EXT2_4=y BR2_TARGET_ROOTFS_EXT2_LABEL="rootfs1" -BR2_TARGET_ROOTFS_EXT2_SIZE="2527M" +BR2_TARGET_ROOTFS_EXT2_SIZE="4000M" BR2_TARGET_ROOTFS_EXT2_MKFS_OPTIONS="-O 64bit -U c0932a41-44cf-463b-8152-d43188553ed4" # BR2_TARGET_ROOTFS_TAR is not set BR2_PACKAGE_HOST_CMAKE=y diff --git a/buildroot-external/package/growdisk-service/growdisk.service b/buildroot-external/package/growdisk-service/growdisk.service index 45767c39..5f81093a 100644 --- a/buildroot-external/package/growdisk-service/growdisk.service +++ b/buildroot-external/package/growdisk-service/growdisk.service @@ -1,9 +1,9 @@ [Unit] Description=Growdisk service to auto expand the rootfs partition -DefaultDependencies=no Conflicts=shutdown.target -After=systemd-remount-fs.service -Before=sysinit.target shutdown.target +After=local-fs.target +Wants=local-fs.target +Before=shutdown.target [Service] Type=oneshot diff --git a/buildroot-external/rootfs-overlay/etc/fstab b/buildroot-external/rootfs-overlay/etc/fstab index 66eb28a8..e8ae59b0 100644 --- a/buildroot-external/rootfs-overlay/etc/fstab +++ b/buildroot-external/rootfs-overlay/etc/fstab @@ -1,12 +1,3 @@ # PARTUUID=9262aee5-2d23-4e09-baac-280591e2e834 /boot vfat defaults,noatime 0 0 PARTUUID=c0932a41-44cf-463b-8152-d43188553ed4 / ext4 defaults,noatime 0 1 -proc /proc proc defaults 0 0 -devpts /dev/pts devpts defaults,gid=5,mode=620,ptmxmode=0666 0 0 -tmpfs /dev/shm tmpfs mode=0777 0 0 -tmpfs /tmp tmpfs mode=1777 0 0 -tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0 -sysfs /sys sysfs defaults 0 0 -#tmpfs /var/log tmpfs defaults 0 0 -tmpfs /var/tmp tmpfs defaults 0 0 -tmpfs /ramdisk tmpfs rw,nodev,nosuid,size=20M 0 0 diff --git a/buildroot-external/rootfs-overlay/etc/sysctl.conf b/buildroot-external/rootfs-overlay/etc/sysctl.conf new file mode 100644 index 00000000..c8dc29f1 --- /dev/null +++ b/buildroot-external/rootfs-overlay/etc/sysctl.conf @@ -0,0 +1 @@ +vm.swappiness = 30 diff --git a/buildroot-external/rootfs-overlay/etc/tmpfiles.d/mycroft.conf b/buildroot-external/rootfs-overlay/etc/tmpfiles.d/mycroft.conf index 75383d19..76ee8fd5 100644 --- a/buildroot-external/rootfs-overlay/etc/tmpfiles.d/mycroft.conf +++ b/buildroot-external/rootfs-overlay/etc/tmpfiles.d/mycroft.conf @@ -1,2 +1,3 @@ d /var/log/mycroft 700 mycroft mycroft Z /opt/mycroft - mycroft mycroft +d /ramdisk 700 mycroft mycroft diff --git a/buildroot-external/rootfs-overlay/mnt/data/.empty b/buildroot-external/rootfs-overlay/mnt/data/.empty new file mode 100644 index 00000000..e69de29b diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/dev-zram0.swap b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/dev-zram0.swap new file mode 100644 index 00000000..a37c9248 --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/dev-zram0.swap @@ -0,0 +1,10 @@ +[Unit] +Description=OVOS ZRAM swap +Requires=zram-swap.service +After=zram-swap.service + +[Swap] +What=/dev/zram0 + +[Install] +WantedBy=swap.target diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/ovos-zram.target b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/ovos-zram.target new file mode 100644 index 00000000..10e8e323 --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/ovos-zram.target @@ -0,0 +1,6 @@ +[Unit] +Description=OVOS zram targets +Documentation=man:systemd.target(5) + +[Install] +WantedBy=multi-user.target diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/ramdisk.mount b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/ramdisk.mount new file mode 100644 index 00000000..75bd91f9 --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/ramdisk.mount @@ -0,0 +1,16 @@ +[Unit] +Description=OVOS ZRAM ramdisk +DefaultDependencies=no +Requires=zram-ramdisk.service +After=zram-ramdisk.service +Before=umount.target +Conflicts=umount.target + +[Mount] +What=/dev/zram1 +Where=/ramdisk +Type=ext4 +Options=rw,nobarrier,strictatime,nosuid,nodev + +[Install] +WantedBy=local-fs.target diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/var.mount b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/var.mount new file mode 100644 index 00000000..a158e531 --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/var.mount @@ -0,0 +1,16 @@ +[Unit] +Description=OVOS ZRAM var +DefaultDependencies=no +Requires=zram-var.service +After=zram-var.service +Before=umount.target +Conflicts=umount.target + +[Mount] +What=/dev/zram2 +Where=/var +Type=ext4 +Options=nobarrier + +[Install] +WantedBy=local-fs.target diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/zram-ramdisk.service b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/zram-ramdisk.service new file mode 100644 index 00000000..917e6d55 --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/zram-ramdisk.service @@ -0,0 +1,15 @@ +[Unit] +Description=OVOS ZRAM ramdisk +DefaultDependencies=no +Before=ramdisk.mount +RefuseManualStart=true +RefuseManualStop=true + +[Service] +Type=oneshot +ExecStart=/usr/libexec/ovos-zram -t fs -m ramdisk -s 20M +RemainAfterExit=true +StandardOutput=null + +[Install] +WantedBy=ovos-zram.target diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/zram-swap.service b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/zram-swap.service new file mode 100644 index 00000000..81532d1c --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/zram-swap.service @@ -0,0 +1,15 @@ +[Unit] +Description=OVOS ZRAM swap +DefaultDependencies=no +Before=dev-zram0.swap +RefuseManualStart=true +RefuseManualStop=true + +[Service] +Type=oneshot +ExecStart=/usr/libexec/ovos-zram -t swap +RemainAfterExit=true +StandardOutput=null + +[Install] +WantedBy=ovos-zram.target diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system/zram-var.service b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/zram-var.service new file mode 100644 index 00000000..f4e37898 --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system/zram-var.service @@ -0,0 +1,15 @@ +[Unit] +Description=OVOS ZRAM var +DefaultDependencies=no +Before=var.mount +RefuseManualStart=true +RefuseManualStop=true + +[Service] +Type=oneshot +ExecStart=/usr/libexec/ovos-zram -t fs -m var -s 32M +RemainAfterExit=true +StandardOutput=null + +[Install] +WantedBy=ovos-zram.target diff --git a/buildroot-external/rootfs-overlay/usr/libexec/ovos-zram b/buildroot-external/rootfs-overlay/usr/libexec/ovos-zram new file mode 100755 index 00000000..7ef94408 --- /dev/null +++ b/buildroot-external/rootfs-overlay/usr/libexec/ovos-zram @@ -0,0 +1,83 @@ +#!/bin/sh +# Credits go to: https://github.com/home-assistant/operating-system/ +set -e + +#### Options #### + +TYPE="" +MOUNT="" +DEVICE="" +SIZE=0 + +#### Parse arguments #### + +while [ "$1" != "" ]; do + key=$1 + case $key in + -t|--type) + TYPE=$2 + shift + ;; + -s|--size) + SIZE=$2 + shift + ;; + -m|--mount) + MOUNT=$2 + shift + ;; + *) + echo "[Error] $0 : Argument '$1' unknown" + exit 1 + ;; + esac + shift +done + +# Valide Type +if [ "$TYPE" != "swap" ] && [ "$TYPE" != "fs" ]; then + echo "[Error] Type unknown!" + exit 1 +fi + +# Lookup device +if [ "$TYPE" = "swap" ]; then + DEVICE="/dev/zram0" +elif [ "$MOUNT" = "ramdisk" ]; then + DEVICE="/dev/zram1" +elif [ "$MOUNT" = "var" ]; then + DEVICE="/dev/zram2" +#elif [ "$MOUNT" = "tmp" ]; then +# DEVICE="/dev/zram3" +else + echo "[Error] No device for lookup!" + exit 1 +fi + +# Calc 20% of memory for ZRAM swap partition +if [ "$TYPE" = "swap" ] && [ "$SIZE" -eq "0" ]; then + SIZE="$(awk '/MemTotal/{ print $2 * 0.20 }' /proc/meminfo)K" +fi + +# Init device +zramctl "$DEVICE" -s "$SIZE" -a lz4 + +# Swap +if [ "$TYPE" = "swap" ]; then + mkswap -L "ovos-zramswap" "$DEVICE" +fi + +# FileSystem +if [ "$TYPE" = "fs" ]; then + mkfs.ext4 -L "ovos-$MOUNT" -O ^has_journal "$DEVICE" +fi + +# Copy persistent file structures into zram device +if [ "$MOUNT" = "var" ]; then + # Check if this is a first run + if [ ! -d /mnt/data/var ]; then + mkdir -p /mnt/data/var + cp -af /var/* /mnt/data/var/ + fi + cp -af /mnt/data/var/* "$DEVICE" +fi