require 'formula' require 'hardware' class Mongodb < Formula homepage 'http://www.mongodb.org/' packages = { :x86_64 => { :url => 'http://fastdl.mongodb.org/osx/mongodb-osx-x86_64-1.8.3.tgz', :md5 => '8bdb3e110d6391d66379c5425c1c4e6e', :version => '1.8.3-x86_64' }, :i386 => { :url => 'http://fastdl.mongodb.org/osx/mongodb-osx-i386-1.8.3.tgz', :md5 => '5629e49d6d24a99850fb094efb98685c', :version => '1.8.3-i386' } } package = (Hardware.is_64_bit? and not ARGV.include? '--32bit') ? packages[:x86_64] : packages[:i386] url package[:url] md5 package[:md5] version package[:version] skip_clean :all def options [ ['--32bit', 'Override arch detection and install the 32-bit version.'], ['--nojournal', 'Disable write-ahead logging (Journaling)'], ['--rest', 'Enable the REST Interface on the HTTP Status Page'], ] end def install # Copy the prebuilt binaries to prefix prefix.install Dir['*'] # Create the data and log directories under /var (var+'mongodb').mkpath (var+'log/mongodb').mkpath # Write the configuration files and launchd script (prefix+'mongod.conf').write mongodb_conf (prefix+'org.mongodb.mongod.plist').write startup_plist end def caveats s = "" s += <<-EOS.undent If this is your first install, automatically load on login with: mkdir -p ~/Library/LaunchAgents cp #{prefix}/org.mongodb.mongod.plist ~/Library/LaunchAgents/ launchctl load -w ~/Library/LaunchAgents/org.mongodb.mongod.plist If this is an upgrade and you already have the org.mongodb.mongod.plist loaded: launchctl unload -w ~/Library/LaunchAgents/org.mongodb.mongod.plist cp #{prefix}/org.mongodb.mongod.plist ~/Library/LaunchAgents/ launchctl load -w ~/Library/LaunchAgents/org.mongodb.mongod.plist Or start it manually: mongod run --config #{prefix}/mongod.conf EOS if ARGV.include? "--nojournal" s += "" s += <<-EOS.undent Write Ahead logging (Journaling) has been disabled. EOS else s += "" s += <<-EOS.undent MongoDB 1.8+ includes a feature for Write Ahead Logging (Journaling), which has been enabled by default. This is not the default in production (Journaling is disabled); to disable journaling, use --nojournal. EOS end return s end def mongodb_conf conf = "" conf += <<-EOS.undent # Store data in #{var}/mongodb instead of the default /data/db dbpath = #{var}/mongodb # Only accept local connections bind_ip = 127.0.0.1 EOS if !ARGV.include? '--nojournal' conf += <<-EOS.undent # Enable Write Ahead Logging (not enabled by default in production deployments) journal = true EOS end if ARGV.include? '--rest' conf += <<-EOS.undent # Enable the REST interface on the HTTP Console (startup port + 1000) rest = true EOS end return conf end def startup_plist return <<-EOS Label org.mongodb.mongod ProgramArguments #{bin}/mongod run --config #{prefix}/mongod.conf RunAtLoad KeepAlive UserName #{`whoami`.chomp} WorkingDirectory #{HOMEBREW_PREFIX} StandardErrorPath #{var}/log/mongodb/output.log StandardOutPath #{var}/log/mongodb/output.log EOS end end