-
-
Save fenollp/1144389 to your computer and use it in GitHub Desktop.
| #!/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" |
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.
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)"