aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula/mongodb.rb
blob: 656658e01256487303f8e57ee968615d08202c9e (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
131
132
133
134
135
136
137
138
139
140
141
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-2.0.0.tgz',
      :md5 => '01776ae81c9bf12708f8a4f8a2d8c28e',
      :version => '2.0.0-x86_64'
    },
    :i386 => {
      :url => 'http://fastdl.mongodb.org/osx/mongodb-osx-i386-2.0.0.tgz',
      :md5 => '0a93663d1ceaed9fc99979ef17fbe32d',
      :version => '2.0.0-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
    (prefix+'org.mongodb.mongod.plist').chmod 0644
  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.
        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
      # Disable Write Ahead Logging
      nojournal = 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
<?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>org.mongodb.mongod</string>
  <key>ProgramArguments</key>
  <array>
    <string>#{bin}/mongod</string>
    <string>run</string>
    <string>--config</string>
    <string>#{prefix}/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