#!/bin/sh # Credits go to: https://github.com/home-assistant/operating-system/ set -e # Exit on any command failure # Options TYPE="" SIZE=0 MOUNT="" # Parse arguments while [ "$#" -gt 0 ]; do case "$1" in -t|--type) TYPE="$2"; shift 2 ;; -s|--size) SIZE="$2"; shift 2 ;; -m|--mount) MOUNT="$2"; shift 2 ;; *) echo "Error: Invalid argument '$1'"; exit 1 ;; esac done # Validate Type if [ "$TYPE" != "swap" ] && [ "$TYPE" != "fs" ]; then echo "Error: Type must be 'swap' or 'fs'" exit 1 fi # Determine device based on type and mount DEVICE="/dev/zram" if [ "$TYPE" = "swap" ]; then DEVICE+="0" elif [ "$MOUNT" = "var" ]; then DEVICE+="1" else echo "Error: No device for lookup!" exit 1 fi # Calculate 20% of memory for ZRAM swap partition if not specified if [ "$TYPE" = "swap" ] && [ "$SIZE" -eq 0 ]; then SIZE=$(awk '/MemTotal/{ print int($2 * 0.20) }' /proc/meminfo)K fi # Initialize ZRAM device zramctl "$DEVICE" -s "$SIZE" -a lz4 # Setup based on type if [ "$TYPE" = "swap" ]; then mkswap -L "ovos-zramswap" "$DEVICE" elif [ "$TYPE" = "fs" ]; then mkfs.ext4 -L "ovos-$MOUNT" -O ^has_journal "$DEVICE" fi # Handle var mount if [ "$MOUNT" = "var" ]; then VAR_DIR="/mnt/data/var" [ ! -d "$VAR_DIR" ] && mkdir -p "$VAR_DIR" && cp -af /var/* "$VAR_DIR" cp -af "$VAR_DIR"/* "$DEVICE" fi