92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| # $1 Full path to the installer (unused)
 | |
| # $2 Location of the Homebrew installation we may need to move into place
 | |
| # $3 Target install location (unused)
 | |
| # $4 System root directory (unused)
 | |
| set -euo pipefail
 | |
| 
 | |
| # disable analytics while installing
 | |
| export HOMEBREW_NO_ANALYTICS_THIS_RUN=1
 | |
| export HOMEBREW_NO_ANALYTICS_MESSAGE_OUTPUT=1
 | |
| 
 | |
| # verify the installation exists
 | |
| # default to /opt/homebrew to make development/testing easier
 | |
| homebrew_directory="${2:-/opt/homebrew}"
 | |
| if [[ ! -d "${homebrew_directory:?}" ]]
 | |
| then
 | |
|   echo "No directory at ${homebrew_directory}!" >&2
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| # add Git to path
 | |
| export PATH="/Library/Developer/CommandLineTools/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:${PATH}"
 | |
| 
 | |
| # avoid writing to user's global config file by overriding HOME
 | |
| # https://git-scm.com/docs/git-config#SCOPES
 | |
| unset XDG_CONFIG_HOME
 | |
| export HOME="${homebrew_directory}"
 | |
| 
 | |
| # reset Git repository
 | |
| cd "${homebrew_directory}"
 | |
| git config --global --add safe.directory "${homebrew_directory}"
 | |
| git reset --hard
 | |
| git checkout --force master
 | |
| git branch | grep -v '\*' | xargs -n 1 git branch --delete --force || true
 | |
| rm "${homebrew_directory}/.gitconfig"
 | |
| 
 | |
| # move to /usr/local if on x86_64
 | |
| if [[ $(uname -m) == "x86_64" ]]
 | |
| then
 | |
|   if [[ -f "/usr/local/bin/brew" && -d "/usr/local/Homebrew" ]]
 | |
|   then
 | |
|     cp -pRL "${homebrew_directory}/.git" "/usr/local/Homebrew/"
 | |
|     mv "${homebrew_directory}/cache_api" "/usr/local/Homebrew/"
 | |
| 
 | |
|     export HOME="/usr/local/Homebrew"
 | |
|     git config --global --add safe.directory /usr/local/Homebrew
 | |
|     git -C /usr/local/Homebrew reset --hard
 | |
|     git -C /usr/local/Homebrew checkout --force master
 | |
|     rm /usr/local/Homebrew/.gitconfig
 | |
|   else
 | |
|     mkdir -vp /usr/local/bin
 | |
|     mv "${homebrew_directory}" "/usr/local/Homebrew/"
 | |
| 
 | |
|     # create symlink to /usr/local/bin/brew
 | |
|     ln -svf "../Homebrew/bin/brew" "/usr/local/bin/brew"
 | |
|   fi
 | |
| 
 | |
|   rm -rf "${homebrew_directory}"
 | |
|   homebrew_directory="/usr/local/Homebrew"
 | |
|   cd /usr/local
 | |
| fi
 | |
| 
 | |
| # create missing directories
 | |
| mkdir -vp Cellar Frameworks etc include lib opt sbin share var/homebrew/linked
 | |
| 
 | |
| # optionally define an install user at /var/tmp/.homebrew_pkg_user.plist
 | |
| homebrew_pkg_user_plist="/var/tmp/.homebrew_pkg_user.plist"
 | |
| if [[ -f "${homebrew_pkg_user_plist}" ]] && [[ -n $(defaults read "${homebrew_pkg_user_plist}" HOMEBREW_PKG_USER) ]]
 | |
| then
 | |
|   homebrew_pkg_user=$(defaults read /var/tmp/.homebrew_pkg_user HOMEBREW_PKG_USER)
 | |
| # otherwise, get valid logged in user
 | |
| else
 | |
|   homebrew_pkg_user=$(echo "show State:/Users/ConsoleUser" | scutil | awk '/Name :/ { print $3 }')
 | |
| fi
 | |
| 
 | |
| # set permissions
 | |
| if [[ "${homebrew_directory}" == "/usr/local/Homebrew" ]]
 | |
| then
 | |
|   chown -R "${homebrew_pkg_user}:admin" Cellar Frameworks Homebrew bin etc include lib sbin share opt var
 | |
| else
 | |
|   chown -R "${homebrew_pkg_user}:admin" .
 | |
| fi
 | |
| 
 | |
| # move API cache to ~/Library/Caches/Homebrew
 | |
| user_home_dir=$(dscl . read /Users/"${homebrew_pkg_user}" NFSHomeDirectory | awk '{ print $2 }')
 | |
| user_cache_dir="${user_home_dir}/Library/Caches/Homebrew"
 | |
| user_api_cache_dir="${user_cache_dir}/api"
 | |
| mkdir -vp "${user_api_cache_dir}"
 | |
| mv -v "${homebrew_directory}/cache_api/"* "${user_api_cache_dir}"
 | |
| chown -R "${homebrew_pkg_user}:staff" "${user_cache_dir}"
 | |
| rm -vrf "${homebrew_directory}/cache_api"
 |