#!/usr/bin/env bash set -euo pipefail # Debugging DEBUG="${DEBUG:-false}" if [[ "${DEBUG}" == true ]]; then set -x fi # Check if gcc is installed & install it if it's not # (add VanillaOS package manager in the future when it gets supported) if ! command -v gcc &> /dev/null; then if command -v dnf5 &> /dev/null; then echo "Installing \"gcc\" package, which is necessary for Brew to function" dnf5 -y install gcc elif command -v rpm-ostree &> /dev/null; then echo "Installing \"gcc\" package, which is necessary for Brew to function" rpm-ostree install gcc fi else echo "ERROR: \"gcc\" package could not be found" echo " Brew depends on \"gcc\" in order to function" echo " Please include \"gcc\" in the list of packages to install with the system package manager" exit 1 fi # Check if zstd is installed & install it if it's not if ! command -v zstd &> /dev/null; then if command -v rpm-ostree &> /dev/null; then echo "Installing \"zstd\" package, which is necessary for Brew to function" rpm-ostree install zstd else echo "ERROR: \"zstd\" package could not be found" echo " Brew's installer depends on \"zstd\" in order to function" echo " Please include \"zstd\" in the list of packages to install with the system package manager" exit 1 fi fi # Module-specific directories and paths MODULE_DIRECTORY="${MODULE_DIRECTORY:-/tmp/modules}" # Configuration values AUTO_UPDATE=$(echo "${1}" | jq -r 'try .["auto-update"]') if [[ -z "${AUTO_UPDATE}" || "${AUTO_UPDATE}" == "null" ]]; then AUTO_UPDATE=true fi UPDATE_INTERVAL=$(echo "${1}" | jq -r 'try .["update-interval"]') if [[ -z "${UPDATE_INTERVAL}" || "${UPDATE_INTERVAL}" == "null" ]]; then UPDATE_INTERVAL="6h" fi UPDATE_WAIT_AFTER_BOOT=$(echo "${1}" | jq -r 'try .["update-wait-after-boot"]') if [[ -z "${UPDATE_WAIT_AFTER_BOOT}" || "${UPDATE_WAIT_AFTER_BOOT}" == "null" ]]; then UPDATE_WAIT_AFTER_BOOT="10min" fi AUTO_UPGRADE=$(echo "${1}" | jq -r 'try .["auto-upgrade"]') if [[ -z "${AUTO_UPGRADE}" || "${AUTO_UPGRADE}" == "null" ]]; then AUTO_UPGRADE=true fi UPGRADE_INTERVAL=$(echo "$1" | jq -r 'try .["upgrade-interval"]') if [[ -z "${UPGRADE_INTERVAL}" || "${UPGRADE_INTERVAL}" == "null" ]]; then UPGRADE_INTERVAL="8h" fi UPGRADE_WAIT_AFTER_BOOT=$(echo "${1}" | jq -r 'try .["upgrade-wait-after-boot"]') if [[ -z "${UPGRADE_WAIT_AFTER_BOOT}" || "${UPGRADE_WAIT_AFTER_BOOT}" == "null" ]]; then UPGRADE_WAIT_AFTER_BOOT="30min" fi NOFILE_LIMITS=$(echo "${1}" | jq -r 'try .["nofile-limits"]') if [[ -z "${NOFILE_LIMITS}" || "${NOFILE_LIMITS}" == "null" ]]; then NOFILE_LIMITS=false fi BREW_ANALYTICS=$(echo "${1}" | jq -r 'try .["brew-analytics"]') if [[ -z "${BREW_ANALYTICS}" || "${BREW_ANALYTICS}" == "null" ]]; then BREW_ANALYTICS=true fi # Create necessary directories mkdir -p /var/home mkdir -p /var/roothome # Convince the installer that we are in CI touch /.dockerenv # Always install Brew echo "Downloading and installing Brew..." curl -fLs --create-dirs https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh -o /tmp/brew-install echo "Downloaded Brew install script" chmod +x /tmp/brew-install /tmp/brew-install # Move Brew installation and set ownership to default user (UID 1000) tar --zstd -cvf /usr/share/homebrew.tar.zst /home/linuxbrew/.linuxbrew cp -R /home/linuxbrew /usr/share/homebrew chown -R 1000:1000 /usr/share/homebrew # Write systemd service files dynamically echo "Writing brew-setup service" cat >/usr/lib/systemd/system/brew-setup.service </usr/lib/systemd/system/brew-update.service </usr/lib/systemd/system/brew-upgrade.service </usr/lib/systemd/system/brew-update.timer </usr/lib/systemd/system/brew-upgrade.timer < /etc/profile.d/brew.sh </usr/lib/tmpfiles.d/homebrew.conf < "/etc/environment" # touch fails for some reason, probably a bug with it fi CURRENT_ENVIRONMENT=$(cat "/etc/environment") CURRENT_HOMEBREW_CONFIG=$(awk -F= '/HOMEBREW_NO_ANALYTICS/ {print $0}' "/etc/environment") if [[ -n "${CURRENT_ENVIRONMENT}" ]]; then if [[ "${CURRENT_HOMEBREW_CONFIG}" == "HOMEBREW_NO_ANALYTICS=0" ]]; then echo "Disabling Brew analytics" sed -i 's/HOMEBREW_NO_ANALYTICS=0/HOMEBREW_NO_ANALYTICS=1/' "/etc/environment" elif [[ -z "${CURRENT_HOMEBREW_CONFIG}" ]]; then echo "Disabling Brew analytics" echo "HOMEBREW_NO_ANALYTICS=1" >> "/etc/environment" elif [[ "${CURRENT_HOMEBREW_CONFIG}" == "HOMEBREW_NO_ANALYTICS=1" ]]; then echo "Brew analytics are already disabled!" fi elif [[ -z "${CURRENT_ENVIRONMENT}" ]]; then echo "Disabling Brew analytics" echo "HOMEBREW_NO_ANALYTICS=1" > "/etc/environment" fi fi echo "Brew setup completed"