-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall-java-jdk.sh
More file actions
133 lines (111 loc) · 4.07 KB
/
Copy pathinstall-java-jdk.sh
File metadata and controls
133 lines (111 loc) · 4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/zsh
# shellcheck shell=bash
################################################################################
# Script: install-java-jdk.sh
# Description: Installs OpenJDK (Java) on macOS via Homebrew.
# Designed for deployment via Microsoft Intune (machine level).
################################################################################
set -euo pipefail
# =============================================================================
# CONFIGURATIONS
# =============================================================================
readonly APP_NAME="OpenJDK"
readonly BREW_FORMULA="openjdk"
readonly LOG_DIR="/Library/Logs/Microsoft/IntuneScripts/java-jdk"
readonly LOG_FILE="${LOG_DIR}/java-jdk.log"
readonly SCRIPT_VERSION="1.0.0"
# Find Homebrew executable
if [[ -f "/opt/homebrew/bin/brew" ]]; then
BREW_BIN="/opt/homebrew/bin/brew" # Apple Silicon
elif [[ -f "/usr/local/bin/brew" ]]; then
BREW_BIN="/usr/local/bin/brew" # Intel
else
BREW_BIN=""
fi
# =============================================================================
# LOGGING & VALIDATION FUNCTIONS
# =============================================================================
setup_logging() {
if [[ ! -d "${LOG_DIR}" ]]; then mkdir -p "${LOG_DIR}"; fi
exec > >(tee -a "${LOG_FILE}") 2>&1
}
log_info() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] [INFO] $*"; }
log_warn() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] [WARN] $*"; }
log_error() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] [ERROR] $*"; }
log_success() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] [SUCCESS] $*"; }
log_separator() { echo "=============================================================================="; }
check_root() {
if [[ "$(id -u)" -ne 0 ]]; then
log_error "This script must be run as root."
exit 1
fi
}
check_internet() {
if ! curl -fsSL --connect-timeout 10 -o /dev/null "https://github.com"; then
log_error "No internet connectivity."
exit 1
fi
}
check_brew() {
if [[ -z "${BREW_BIN}" ]]; then
log_error "Homebrew is NOT installed on this Mac."
exit 1
fi
log_info "Homebrew found at: ${BREW_BIN}"
}
# =============================================================================
# INSTALLATION
# =============================================================================
get_console_user() {
local console_user
console_user=$(stat -f "%Su" /dev/console)
echo "${console_user}"
}
install_formula() {
local console_user
console_user=$(get_console_user)
if [[ "${console_user}" == "root" ]] || [[ -z "${console_user}" ]]; then
log_error "No user logged in. Homebrew cannot install packages as root."
exit 1
fi
log_info "Installing ${BREW_FORMULA} via Homebrew as user: ${console_user}"
if sudo -u "${console_user}" "${BREW_BIN}" install "${BREW_FORMULA}"; then
log_info "Symlinking Java wrapper into /Library/Java/JavaVirtualMachines..."
sudo -u "${console_user}" ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk || true
log_success "${BREW_FORMULA} installed successfully via Homebrew."
else
log_error "Failed to install ${BREW_FORMULA}."
exit 1
fi
}
verify_installation() {
log_info "Verifying ${APP_NAME}..."
local console_user
console_user=$(get_console_user)
if sudo -u "${console_user}" "${BREW_BIN}" list "${BREW_FORMULA}" &>/dev/null; then
log_success "Verified: ${BREW_FORMULA} is installed."
return 0
else
log_error "Verification failed: ${BREW_FORMULA} not found in brew list."
return 1
fi
}
# =============================================================================
# MAIN EXECUTION
# =============================================================================
main() {
setup_logging
log_separator
log_info "=== ${APP_NAME} Installation ==="
log_separator
check_root
check_internet
check_brew
install_formula
if verify_installation; then
exit 0
else
exit 1
fi
}
main "$@"