public
Created — forked from mxcl/install_homebrew.markdown

Installs Homebrew to /usr/local so you don't need sudo to `brew install`

  • Download Gist
install_homebrew.rb
Ruby
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 134 135 136 137 138 139 140 141 142 143 144
#!/usr/bin/ruby
# This script installs to /usr/local only. To install elsewhere you can just
# untar https://github.com/sceaga/homebrew/tarball/tiger anywhere you like.
 
module Tty extend self
def blue; bold 34; end
def white; bold 39; end
def red; underline 31; end
def reset; escape 0; end
def bold n; escape "1;#{n}" end
def underline n; escape "4;#{n}" end
def escape n; "\033[#{n}m" if STDOUT.tty? end
end
 
class Array
def shell_s
cp = dup
first = cp.shift
cp.map{ |arg| arg.gsub " ", "\\ " }.unshift(first) * " "
end
end
 
def ohai *args
puts "#{Tty.blue}==>#{Tty.white} #{args.shell_s}#{Tty.reset}"
end
 
def warn warning
puts "#{Tty.red}Warning#{Tty.reset}: #{warning.chomp}"
end
def system *args
abort "Failed during: #{args.shell_s}" unless Kernel.system *args
end
 
def sudo *args
args = if args.length > 1
args.unshift "/usr/bin/sudo"
else
"/usr/bin/sudo #{args.first}"
end
ohai *args
system *args
end
 
def getc # NOTE only tested on OS X
system "/bin/stty raw -echo"
if RUBY_VERSION >= '1.8.7'
STDIN.getbyte
else
STDIN.getc
end
ensure
system "/bin/stty -raw echo"
end
 
def badlibs
@badlibs ||= begin
Dir['/usr/local/lib/*.dylib'].select do |dylib|
ENV['dylib'] = dylib
File.file? dylib and not File.symlink? dylib and `/usr/bin/file "$dylib"` =~ /shared library/
end
end
end
 
####################################################################### script
abort "/usr/local/.git already exists!" unless Dir["/usr/local/.git/*"].empty?
abort "Don't run this as root!" if Process.uid == 0
abort <<-EOABORT unless `groups`.split.include? "staff"
This script requires the user #{ENV['USER']} to be in the staff group. If this
sucks for you then you can install Homebrew in your home directory or however
you please; please refer to the website. If you still want to use this script
the following command should work (under Tiger):
 
sudo dscl . append /Groups/staff GroupMembership $USER
 
You may also chown -Rf the target directory.
EOABORT
 
ohai "This script will install:"
puts "/usr/local/bin/brew"
puts "/usr/local/Library/Formula/..."
puts "/usr/local/Library/Homebrew/..."
 
chmods = %w( share/man lib/pkgconfig var/log share/locale
share/man/man1 share/man/man2 share/man/man3 share/man/man4
share/man/man5 share/man/man6 share/man/man7 share/man/man8
share/info share/doc share/aclocal ).map{ |d| "/usr/local/#{d}" }
root_dirs = []
%w(bin Cellar etc include lib Library sbin share var .git).each do |d|
d = "/usr/local/#{d}"
if File.directory? d then chmods else root_dirs end << d
end
chmods = chmods.select{ |d| File.directory? d and not File.writable? d }
chgrps = chmods.reject{ |d| File.stat(d).grpowned? }
 
unless chmods.empty?
ohai "The following directories will be made group writable:"
puts *chmods
end
unless chgrps.empty?
ohai "The following directories will have their group set to #{Tty.underline 39}staff#{Tty.reset}:"
puts *chgrps
end
 
 
if STDIN.tty?
puts
puts "Press enter to continue"
abort unless getc == 13
end
 
sudo "/bin/mkdir /usr/local" unless File.directory? "/usr/local"
sudo "/bin/chmod o+w /usr/local"
begin
sudo "/bin/chmod", "g+w", *chmods unless chmods.empty?
sudo "/usr/bin/chgrp", "staff", *chgrps unless chgrps.empty?
system "/bin/mkdir", *root_dirs unless root_dirs.empty?
 
Dir.chdir "/usr/local" do
ohai "Downloading and Installing Homebrew..."
# -m to stop tar erroring out if it can't modify the mtime for root owned directories
# pipefail to cause the exit status from curl to propogate if it fails
# REMOVED pipefail option (not available on Tiger PPC).
# REMOVED SSL security, using curl option '-k' (certificate can't be checked due to too old curl-ca.cert).
system "/bin/bash -c '/usr/bin/curl -sSfLk https://github.com/sceaga/homebrew/tarball/tiger | /usr/bin/tar xz -m --strip 1'"
end
ensure
# we reset the permissions of /usr/local because we want to minimise the
# amount of fiddling we do to the system. Some tools require /usr/local to
# be by non-writable for non-root users.
sudo "/bin/chmod o-w /usr/local"
end
 
warn "/usr/local/bin is not in your PATH." unless ENV['PATH'].split(':').include? '/usr/local/bin'
warn "Now install Xcode: http://developer.apple.com/technologies/xcode.html" unless Kernel.system "[ `/usr/bin/which gcc` = /usr/bin/gcc ]"
 
unless badlibs.empty?
warn "The following *evil* dylibs exist in /usr/local/lib"
puts "They may break builds or worse. You should consider deleting them:"
puts *badlibs
end
 
ohai "Installation successful!"
puts "Now type: brew help"

http://apple.stackexchange.com/questions/15445/how-to-install-homebrew-on-tiger
https://github.com/sceaga/homebrew/tree/tiger

An attempt as an installer to Homebrew for Tiger PPC.

INSTALL
/usr/bin/ruby -e "$(curl -fsSLk https://raw.github.com/gist/1144389/60af0b072505042279cb0d713f4aa0fdbb692020/install_homebrew.rb)"

Today groups revealed that staff exists. I may have created it or something as I didn't see it forewords.
So you may try: sudo dscl . -append /groups/staff GroupMembership $USER

You may need tar. I kinda messed up with fink and it replaced my former which and tar… When I removed fink, it also removed tar! Strangely enough my which is the former /usr/bin/which one…

If you're in my case, you may see a Warning about installing XCode and something about csh just before. It is because of fink's which.

If you see a Warning that says "/usr/local/bin is not in your PATH", you may type /bin/echo "export PATH=$PATH:/usr/local/bin" >> ~/.profile or whichever .bashrc, .csh, …

which -s doesn't exist on Tiger PPC, so I replaced it with [ `/usr/bin/which gcc` = /usr/bin/gcc ].

If you're having permissions issues (related to staff | wheel), do:

## Add yourself to group:staff
sudo dscl . append /Groups/staff GroupMembership $USER
dscl . -read /Groups/staff | grep GroupMembership
# sudo dscl . delete /Groups/staff GroupMembership $USER

## Change /usr/local/'s group & user (/usr/local is the default target directory)
sudo chown -Rf $USER:staff  /usr/local

## Remove Homebrew
cd `brew --prefix`
sudo rm -rf Cellar/
brew prune
sudo rm -rf Library .git .gitignore bin/brew README.md share/man/man1/brew
rm -rf ~/Library/Caches/Homebrew

## And reinstall Homebrew
# See first comment!

EDIT: I now give hints about this issue related to an old Mac OS X in the .rb
I think it's up to the user to chown his target dir (which can be anywhere) and to let himself be part of group:staff… that's why there're only hints in the .rb.

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.