Seit dieser Woche bietet einen kostenlosen Kurs für Java Entwicklern an: “M101J MongoDB for Java Developers.” Da ich internet-basierte Weiterbildungskurse immer wieder gerne nutze, habe ich mich dort angemeldet. Daher werde ich in den nächsten Wochen bestimmt eifrig damit beschäfigt sein, die Kursinhalte aufzunehmen und die gestellten Aufgaben zu lösen.
Daher stellt sich jetzt wieder einmal die Frage, wie ein Hintergrundprozess für die mongoDB Datenbank korrekt auf meinem OSX Server wie auch auf meinem Notebook installiert wird. Immerhin ist diese Datenbank in den nächsten Wochen ein fester Bestandteil der von mir genutzten Infrastruktur und sollte beständig verfügbar sein.
Die Installation beginnt daher wieder - aus Gründen der Sicherheit - mit dem Anlegen eines neuen technischen Benutzers und einer Benutzergruppe. Ich entscheide mich, nachdem ich die Liste der vorhandenen Gruppen durchgesehen habe, als für die Gruppe 302, die noch nicht vergeben ist. Unter dieser Gruppennummer lege ich nun eine Gruppe _mongodb neu an:
merlin:~ ralf$ sudo dscl
Entering interactive mode... (type "help" for commands)
> cd /Local/Default/
/Local/Default > ls Groups gid
utmp 45
wheel 0
...
/Local/Default > create Groups/_mongodb
/Local/Default > create Groups/_mongodb PrimaryGroupID 302
Nach dem gleichen Verfahren lege ich nun auch einen Benutzeraccount namens _mongodb an.
/Local/Default > ls Users uid
daemon 1
Guest 201
nobody -2
root 0
....
/Local/Default > create Users/_mongodb UserShell /bin/bash
/Local/Default > create Users/_mongodb UniqueID 302
/Local/Default > create Users/_mongodb PrimaryGroupID 302
/Local/Default > create Users/_mongodb NFSHomeDirectory /Users/_mongodb
/Local/Default > append Groups/_mongodb GroupMembership _mongodb
/Local/Default > exit
Da nun er Funktionsbenutzer angelegt ist, kann für diesen Nutzer nun das Benutzerverzeichnis erzeugt werden. Aus organisatorischen Gründen lege ich noch ein zweites Verzeichnis auf einer zusätzlichen Festplatte an. Dort werden die eigentlichen Dateien der Datenbank gespeichert.
merlin:~ ralf$ cd /Users/
merlin:Users ralf$ sudo mkdir _mongodb
merlin:Users ralf$ sudo chown _mongodb:_mongodb _mongodb
merlin:Users ralf$ ls -al
total 16
-rw-r--r--@ 1 root admin 6148 12 Jan 2012 .DS_Store
-rw-r--r-- 1 root wheel 0 25 Mai 2011 .localized
drwxr-xr-x 2 _mongodb _mongodb 68 18 Mai 08:47 _mongodb
drwxr-xr-x+ 53 ralf admin 1802 12 Mai 18:31 ralf
sh-3.2#
merlin:Users ralf$ mkdir /Volumes/Server/_mongodb
merlin:Users ralf$ cd /Volumes/Server/_mongodb
In dieses neue Verzeichnis kopiere ich die über 10gen mongoDB Downloads bezogene Version der Datenbank.
merlin:Users ralf$ sudo tar xvz ~ralf/Downloads/mongodb-osx-x86_64-2-1.4.3.tgz
x mongodb-osx-x86_64-2.4.3/README
x mongodb-osx-x86_64-2.4.3/THIRD-PARTY-NOTICES
x mongodb-osx-x86_64-2.4.3/GNU-AGPL-3.0
x mongodb-osx-x86_64-2.4.3/bin/mongodump
x mongodb-osx-x86_64-2.4.3/bin/mongorestore
x mongodb-osx-x86_64-2.4.3/bin/mongoexport
x mongodb-osx-x86_64-2.4.3/bin/mongoimport
x mongodb-osx-x86_64-2.4.3/bin/mongostat
x mongodb-osx-x86_64-2.4.3/bin/mongotop
x mongodb-osx-x86_64-2.4.3/bin/mongooplog
x mongodb-osx-x86_64-2.4.3/bin/mongofiles
x mongodb-osx-x86_64-2.4.3/bin/bsondump
x mongodb-osx-x86_64-2.4.3/bin/mongoperf
x mongodb-osx-x86_64-2.4.3/bin/mongosniff
x mongodb-osx-x86_64-2.4.3/bin/mongod
x mongodb-osx-x86_64-2.4.3/bin/mongos
x mongodb-osx-x86_64-2.4.3/bin/mongo
merlin:Users ralf$ sudo mv mongodb-osx-x86_64-2.4.3/bin .
merlin:Users ralf$ sudo rm -rf mongodb-osx-x86_64-2.4.3/
merlin:Users ralf$ sudo ln -s /Volumes/Server/_mongodb/bin/* /usr/local/bin
merlin:Users ralf$ sudo mkdir data
merlin:Users ralf$ sudo mkdir logs
merlin:Users ralf$ sudo chown -R _mongodb:_mongodb .
Nach diesen Schritten ist die Installation eigentlich abgeschlossen und es muss nun nur noch eine Konfiguration für den launchctl
eingerichtet werden:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//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>/Volumes/Server/_mongodb/bin/mongod</string>
<string>--dbpath</string>
<string>/Volumes/Server/_mongodb/data</string>
<string>--logpath</string>
<string>/Volumes/Server/_mongodb/logs/mongodb.log</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>WorkingDirectory</key>
<string>/Volumes/Server/_mongodb</string>
<key>UserName</key>
<string>_mongodb</string>
<key>HardResourceLimits</key>
<dict>
<key>NumberOfFiles</key>
<integer>1024</integer>
</dict>
</dict>
</plist>
Diese Konfiguration wird dem launchctl
übergeben und damit sollte eigentlich der mongod
Prozess aktviert sein.
merlin:Users ralf$ sudo cp org.mongodb.mongod.plist /Library/LaunchDaemons/
merlin:Users ralf$ sudo launchctl load /Library/LaunchDaemons/org.mongodb.mongod.plist
merlin:Users ralf$ sudo launchctl start org.mongodb.mongod
merlin:Users ralf$
Den Hausaufgaben steht damit nun nichts mehr im Wege…