Install Homebrew using official script

This commit is contained in:
T. R. Bernstein
2024-06-27 17:29:40 +02:00
committed by T. R. Bernstein
parent 349120f0a3
commit aca321294b

View File

@@ -68,95 +68,31 @@ function ensureHomebrewOwnershipAndPermission() {
chmod u=rwx,go=rx ${itemPath}
}
function ensureInstallPrefix() {
if [ ! -d "${INSTALL_PREFIX}" ]; then
mkdir -p "${INSTALL_PREFIX}"
chown root:wheel "${INSTALL_PREFIX}"
function ensureLocalBinFolder() {
local folder="/usr/local/bin"
if [ ! -d "${folder}" ]; then
mkdir -p "${folder}" 2> /dev/null || {
lop -- -e 'Could not create directory' -e $folder
return 10
}
chown root:admin "${folder}"
chmod ug=rwx,o=rx "${folder}"
fi
}
function makeDirsGroupWritableIfExist() {
local dir=
local directories=(bin etc include lib sbin share opt var Frameworks etc/bash_completion.d lib/pkgconfig share/aclocal share/doc share/info share/locale share/man share/man/man{1,2,3,4,5,6,7,8} var/log var/homebrew var/homebrew/linked bin/brew)
for dir in ${directories}; do
[[ ! -d "${dir}" ]] && continue
ensureHomebrewOwnershipAndPermission ${dir}
done
}
function ensureZSHDirectories() {
local dir=
local directories=(share/zsh share/zsh/site-functions)
for dir in ${directories}; do
ensureDirectoryWithDefaultMod ${dir}
chmod go=rx ${dir}
done
}
function ensureHomebrewDirectories() {
local dir=
local directories=(bin etc include lib sbin share var opt Homebrew var/homebrew var/homebrew/linked Cellar Caskroom Frameworks)
for dir in ${directories}; do
ensureDirectoryWithDefaultMod ${dir}
done
}
function ensureHomebrewCacheDirectory() {
ensureDirectoryWithDefaultMod "${homebrew_cache}"
runAsHomebrewUser touch "${homebrew_cache}/.cleaned"
}
function ensureHomebrewLogDirectory() {
ensureDirectoryWithDefaultMod ${homebrew_log}
}
function fixInstallPrefixPermissions() {
pushd -q ${dirPath}
makeDirsGroupWritableIfExist
ensureZSHDirectories
ensureHomebrewDirectories
popd -q
}
function configureInstallPrefix() {
local dirPath=$1
if [[ -d "${dirPath}" ]]; then
lop -y body -- -d "Install prefix at ${dirPath} already exists. Will correct permissions of possible enclosed folders."
indicateActivity 'Correct permissions of possible enclosed folders' fixInstallPrefixPermissions
function getHomebrewRepositoryPath() {
if [[ "${uname_machine}" == "arm64" ]]; then
print -- "/opt/homebrew"
else
lop -y body -- -d "Install prefix at ${dirPath} does not exist. Will create it."
indicateActivity 'Creating install prefix' createInstallPrefix
indicateActivity 'Create neccessary folders' fixInstallPrefixPermissions
print "/usr/local/Homebrew"
fi
}
function createInstallPrefix() {
mkdir -p ${dirPath} 2> /dev/null || {
lop -- -e 'Could not create directory' -e $dirPath
return 10
}
chown root:wheel "${dirPath}"
chmod 744 "${dirPath}"
}
function downloadHomebrew() {
cd "${homebrew_prefix}/Homebrew" > /dev/null || return 10
[ -d ".git" ] && return
runAsHomebrewUser git init -q
runAsHomebrewUser git config remote.origin.url "${git_homebrew_remote}"
runAsHomebrewUser git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
runAsHomebrewUser git config core.autocrlf false
runAsHomebrewUser git config --replace-all homebrew.analyticsmessage false
runAsHomebrewUser git config --replace-all homebrew.caskanalyticsmessage false
runAsHomebrewUser git fetch --quiet --force origin > /dev/null
runAsHomebrewUser git fetch --quiet --force --tags origin > /dev/null
runAsHomebrewUser git reset --hard origin/master
}
function createBrewCallerScript() {
ensureLocalBinFolder
local username=${homebrew_username}
local brewCallerPath="${homebrew_prefix}/Homebrew/bin/brew_caller"
local brewCallerPath="/usr/local/bin/brew"
[ -f "${brewCallerPath}" ] && rm "${brewCallerPath}"
cat <<- BREWCALLER > ${brewCallerPath}
#!/usr/bin/env zsh
if [ \"\$(id -un)\" != \"${username}\" ]; then
@@ -164,32 +100,21 @@ function createBrewCallerScript() {
sudo -E -u \"${username}\" \"\$0\" \"\$@\"
exit \$?
fi
export HOMEBREW_CACHE=\"${homebrew_cache}\"
export HOMEBREW_LOGS=\"${homebrew_log}\"
export HOMEBREW_CASK_OPTS=\"--no-quarantine \${HOMEBREW_CASK_OPTS}\"
export HOMEBREW_NO_AUTO_UPDATE=1
export HOMEBREW_NO_ANALYTICS=1
export HOMEBREW_NO_ANALYTICS_THIS_RUN=1
export HOMEBREW_NO_ANALYTICS_MESSAGE_OUTPUT=1
umask 002
\"${homebrew_prefix}/Homebrew/bin/brew\" \"\$@\"
\"$(getHomebrewRepositoryPath)/bin/brew\" \"\$@\"
BREWCALLER
chown ${username}:admin ${brewCallerPath}
chmod u+x,go-x ${brewCallerPath}
runAsHomebrewUser ln -sf ${homebrew_prefix}/Homebrew/bin/brew_caller "${homebrew_prefix}/bin/brew"
}
function installHomebrewCore() {
runAsHomebrewUser mkdir -p "${homebrew_prefix}/Homebrew/Library/Taps/homebrew/homebrew-core" || return 10
pushd -q "${homebrew_prefix}/Homebrew/Library/Taps/homebrew/homebrew-core"
[ -d ".git" ] && return
runAsHomebrewUser git init -q
runAsHomebrewUser git config remote.origin.url "${git_homebrew_core_remote}"
runAsHomebrewUser git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
runAsHomebrewUser git config core.autocrlf false
runAsHomebrewUser git fetch --quiet --force origin 'refs/heads/master:refs/remotes/origin/master' > /dev/null
runAsHomebrewUser git remote set-head origin --auto > /dev/null
runAsHomebrewUser git reset --hard origin/master
export NONINTERACTIVE=1
sudo --preserve-env=NONINTERACTIVE -u "${homebrew_username}" /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
}
function createLaunchDaemonsPlist() {
@@ -249,13 +174,9 @@ function configure_system() {
createHomebrewUserIfNeccessary || return 10
indicateActivity 'Ensure Homebrew user is in admin group' ensureUserIsInAdminGroup ${homebrew_username} || return 11
indicateActivity 'Ensure Homebrew user can run passwordless sudo' ensureUserCanRunPasswordlessSudo ${homebrew_username} || return 12
configureInstallPrefix ${homebrew_prefix} || return 13
ensureHomebrewCacheDirectory || return 14
ensureHomebrewLogDirectory || return 15
indicateActivity 'Downloading Homebrew' downloadHomebrew || return 16
indicateActivity 'Create brew caller script' createBrewCallerScript || return 17
indicateActivity 'Install Homebrew core' installHomebrewCore || return 18
indicateActivity 'Install Homebrew updater' installHomebrewUpdater || return 19
indicateActivity 'Install Homebrew core' installHomebrewCore || return 13
indicateActivity 'Create brew caller script' createBrewCallerScript || return 14
indicateActivity 'Install Homebrew updater' installHomebrewUpdater || return 15
pushd -q /
indicateActivity 'Tapping homebrew/cask' tapHomebrewCask
indicateActivity 'Tapping homebrew/cask-fonts' tapHomebrewCaskFonts
@@ -284,26 +205,6 @@ function getDefaultHomebrewUsername() {
print -- _homebrew
}
function getDefaultHomebrewPrefix() {
print -- /usr/local
}
function getDefaultHomebrewCachePath() {
print -- /Library/Caches/Homebrew
}
function getDefaultHomebrewLogPath() {
print -- /var/log/Homebrew
}
function getDefaultGitHomebrewURL() {
print -- ${HOMEBREW_BREW_GIT_REMOTE:-https://github.com/Homebrew/brew.git}
}
function getDefaultGitHomebrewCoreURL() {
print -- ${HOMEBREW_BREW_CORE_GIT_REMOTE:-https://github.com/Homebrew/homebrew-core.git}
}
function getDefaultGitHomebrewCaskURL() {
print -- ${HOMEBREW_BREW_CASK_GIT_REMOTE:-https://github.com/Homebrew/homebrew-cask.git}
}