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

class Mongodb < Formula
  homepage 'http://www.mongodb.org/'

  if Hardware.is_64_bit? and not build.build_32_bit?
    url 'http://fastdl.mongodb.org/osx/mongodb-osx-x86_64-2.2.0.tgz'
    md5 '5ad0d0b046919118e73976d670dce5e5'
    version '2.2.0-x86_64'

    devel do
      url 'http://fastdl.mongodb.org/osx/mongodb-osx-x86_64-2.2.1-rc0.tgz'
      md5 '5c1a448faa2e568dcc10e81c177249e8'
      version '2.2.1-rc0-x86_64'
    end
  else
    url 'http://fastdl.mongodb.org/osx/mongodb-osx-i386-2.2.0.tgz'
    md5 '576cc456081f8348a59448675fd1afde'
    version '2.2.0-i386'

    devel do
      url 'http://fastdl.mongodb.org/osx/mongodb-osx-i386-2.2.1-rc0.tgz'
      md5 'fab99dfe25114e616ba4ae47665fd1cc'
      version '2.2.1-rc0-i386'
    end
  end

  option '32-bit'

  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 (sh = bin/'mongod'), prefix
    sh.write <<-EOS.undent
      #!/usr/bin/env ruby
      ARGV << '--config' << '#{etc}/mongod.conf' unless ARGV.include? '--config'
      exec "#{prefix}/mongod", *ARGV
    EOS
    sh.chmod 0755

    # 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