aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula/mongodb.rb
blob: 76cfe4d90024e37e8b939efcdf05441e05888a6d (plain)
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
require 'formula'

class SixtyFourBitRequired < Requirement
  def satisfied?
    MacOS.prefer_64_bit?
  end

  def fatal?; true end

  def message; <<-EOS.undent
    32-bit MongoDB binaries are no longer available.

    If you need to run a 32-bit version of MongoDB, you can
    compile the server from source:
      http://www.mongodb.org/display/DOCS/Building+for+OS+X
    EOS
  end
end

class Mongodb < Formula
  homepage 'http://www.mongodb.org/'
  url 'http://fastdl.mongodb.org/osx/mongodb-osx-x86_64-2.2.1.tgz'
  sha1 '6fc3054cdc7f7e64b12742f7e8f9df256a3253d9'
  version '2.2.1-x86_64'

  devel do
    url 'http://fastdl.mongodb.org/osx/mongodb-osx-x86_64-2.3.0.tgz'
    sha1 '816ca175bd31e2ec1eb8b61793b1d1e4a247a5da'
    version '2.3.0-x86_64'
  end

  depends_on SixtyFourBitRequired.new

  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
    (prefix+'mongod.conf').write mongodb_conf

    # Homebrew: it just works.
    # NOTE plist updated to use prefix/mongodb!
    mv bin/'mongod', prefix
    (bin/'mongod').write <<-EOS.undent
      #!/usr/bin/env ruby
      ARGV << '--config' << '#{etc}/mongod.conf' unless ARGV.find { |arg| arg =~ /\-\-config/ }
      exec "#{prefix}/mongod", *ARGV
    EOS

    # copy the config file to etc if this is the first install.
    etc.install prefix+'mongod.conf' unless File.exists? etc+"mongod.conf"
  end

  def caveats
    bn = plist_path.basename
    la = Pathname.new("#{ENV['HOME']}/Library/LaunchAgents")
    prettypath = "~/Library/LaunchAgents/#{bn}"
    domain = plist_path.basename('.plist')
    load = "launchctl load -w #{prettypath}"
    s = []

    # we readlink because this path probably doesn't exist since caveats
    # occurs before the link step of installation
    if not (la/bn).file?
      s << "To have launchd start #{name} at login:"
      s << "    mkdir -p ~/Library/LaunchAgents" unless la.directory?
      s << "    ln -s #{HOMEBREW_PREFIX}/opt/#{name}/*.plist ~/Library/LaunchAgents/"
      s << "Then to load #{name} now:"
      s << "    #{load}"
      s << "Or, if you don't want/need launchctl, you can just run:"
      s << "    mongod"
    elsif Kernel.system "/bin/launchctl list #{domain} &>/dev/null"
      s << "You should reload #{name}:"
      s << "    launchctl unload -w #{prettypath}"
      s << "    #{load}"
    else
      s << "To load #{name}:"
      s << "    #{load}"
    end
  end

  def mongodb_conf; <<-EOS.undent
    # Store data in #{var}/mongodb instead of the default /data/db
    dbpath = #{var}/mongodb

    # Append logs to #{var}/log/mongodb/mongo.log
    logpath = #{var}/log/mongodb/mongo.log
    logappend = true

    # Only accept local connections
    bind_ip = 127.0.0.1
    EOS
  end

  def startup_plist
    return <<-EOS
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>#{plist_name}</string>
  <key>ProgramArguments</key>
  <array>
    <string>#{opt_prefix}/mongod</string>
    <string>run</string>
    <string>--config</string>
    <string>#{etc}/mongod.conf</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>KeepAlive</key>
  <false/>
  <key>UserName</key>
  <string>#{`whoami`.chomp}</string>
  <key>WorkingDirectory</key>
  <string>#{HOMEBREW_PREFIX}</string>
  <key>StandardErrorPath</key>
  <string>#{var}/log/mongodb/output.log</string>
  <key>StandardOutPath</key>
  <string>#{var}/log/mongodb/output.log</string>
</dict>
</plist>
EOS
  end
end