File waydroid-jim.install of Package waydroid-jim

detect_init() {
  if [ -f /run/openrc/softlevel ]; then
    echo "openrc"
  elif [ -d /run/dinit.d ]; then
    echo "dinit"
  elif [ -d /run/runit/supervise.waydroid-container ]; then
    echo "runit"
  elif [ -d /run/s6-rc ]; then
    echo "s6"
  elif [ -d /run/systemd/system ]; then
    echo "systemd"
  else
    echo "unknown"
  fi
}

setup_binderfs() {
  if [ -d /dev/binderfs ]; then
    echo "BinderFS directory already exists."
  else
    echo "Creating BinderFS directory..."
    mkdir -p /dev/binderfs
  fi

  echo "Creating relationship with BinderFS..."
  mount -t binder binder /dev/binderfs 2>/dev/null || {
    echo "Warning: Failed to mount BinderFS. Ensure binder_linux module is loaded."
    echo "You may need to run: modprobe binder_linux"
  }

  if mountpoint -q /dev/binderfs 2>/dev/null; then
    echo "BinderFS successfully linked."
  fi
}

post_install() {
  INIT_SYSTEM=$(detect_init)
  echo "Detected init system: $INIT_SYSTEM"

  setup_binderfs

  echo ""
  echo "Enabling Waydroid Container for $INIT_SYSTEM..."

  case "$INIT_SYSTEM" in
    systemd)
      systemctl enable --now waydroid-container.service
      echo "Waydroid Container has been enabled via systemd."
      ;;
    openrc)
      rc-update add waydroid-container default
      rc-service waydroid-container start
      echo "Waydroid Container has been enabled via OpenRC."
      ;;
    runit)
      ln -sf /etc/sv/waydroid-container /run/runit/service/
      sv start waydroid-container
      echo "Waydroid Container has been enabled via runit."
      ;;
    dinit)
      dinitctl enable waydroid-container
      dinitctl start waydroid-container
      echo "Waydroid Container has been enabled via dinit."
      ;;
    s6)
      s6-rc-bundle-update add default waydroid-container
      s6-rc -u change waydroid-container
      echo "Waydroid Container has been enabled via s6."
      ;;
    *)
      echo "Warning: Unknown init system detected."
      echo "Please manually enable waydroid-container service for your init system."
      ;;
  esac

  echo ""
  echo "You can install the image packages we provide on Jim AUR or you can manually deploy it."
  echo "Waydroid will be fully operational after a restart."
}

post_upgrade() {
  INIT_SYSTEM=$(detect_init)
  echo "Restarting Waydroid Container if it's running..."

  case "$INIT_SYSTEM" in
    systemd)
      if systemctl is-active --quiet waydroid-container.service; then
        systemctl restart waydroid-container.service
      fi
      ;;
    openrc)
      if rc-service waydroid-container status >/dev/null 2>&1; then
        rc-service waydroid-container restart
      fi
      ;;
    runit)
      if sv status waydroid-container >/dev/null 2>&1; then
        sv restart waydroid-container
      fi
      ;;
    dinit)
      if dinitctl status waydroid-container >/dev/null 2>&1; then
        dinitctl restart waydroid-container
      fi
      ;;
    s6)
      if s6-rc -a list | grep -q waydroid-container; then
        s6-rc -d change waydroid-container
        s6-rc -u change waydroid-container
      fi
      ;;
  esac
}

pre_remove() {
  INIT_SYSTEM=$(detect_init)
  echo "Stopping and disabling Waydroid Container before uninstalling..."

  case "$INIT_SYSTEM" in
    systemd)
      systemctl stop waydroid-container.service 2>/dev/null || true
      systemctl disable waydroid-container.service 2>/dev/null || true
      ;;
    openrc)
      rc-service waydroid-container stop 2>/dev/null || true
      rc-update del waydroid-container default 2>/dev/null || true
      ;;
    runit)
      sv stop waydroid-container 2>/dev/null || true
      rm -f /run/runit/service/waydroid-container 2>/dev/null || true
      ;;
    dinit)
      dinitctl stop waydroid-container 2>/dev/null || true
      dinitctl disable waydroid-container 2>/dev/null || true
      ;;
    s6)
      s6-rc -d change waydroid-container 2>/dev/null || true
      s6-rc-bundle-update delete default waydroid-container 2>/dev/null || true
      ;;
  esac
}
openSUSE Build Service is sponsored by