MongoDB version manager
$ npm install -g m
or
$ git clone git://github.com/aheckmann/m.git && cd m && make install
Install a few versions, the version given becomes the active mongodb binary once installation is complete.
$ m 2.0.7
$ m 2.2.0-rc2
List installed binaries:
$ m
οMongoDB Versions: 2.0.6 ο 2.0.7 2.2.0-rc2
οOpsManager Versions: ο 2.0.1.332-1
Use or install the latest official release:
$ m latest
Use or install the stable official release:
$ m stable
Install a custom or patched version of mongodb from a tarball:
$ m custom 2.1.2-me https://github.com/aheckmann/mongo/tarball/r2.1.2
Install a version of mongodb from source (requires scons
):
$ m 2.2.3-rc0 source
Download OpsManager "deb" versions (works with "mlaunch init --opsmanager", the version given becomes the active OpsManager binary once download is complete.
$ m opsmanager 2.0.1.332-1
$ m opsmanager 2.0.2.337-1
Remove some versions:
$ m rm 2.2.0-rc1 2.0.4 2.4.0-rc0
Note that you cannot remove the actively running version. Change to a different version before removing.
When running multiple versions of mongodb, we can target
them directly by asking m
for the binary path:
$ m bin 2.0.7
/usr/local/m/versions/2.0.7/bin/
Start up mongod 2.0.7 regardless of the active version:
$ m use 2.0.7 --port 29000 --dbpath /data/2.0.7/
Execute a script with the 2.0.7 shell regardless of the active version:
$ m shell 2.0.7 some.js
with flags:
$ m s 2.0.7 --port 29000 --eval 1+1
When installing or changing the active version we might want to run custom scripts:
$ m pre install /path/to/my/script
$ m post install /path/to/script
$ m pre change /path/to/my/script
$ m post change /path/to/script
Multiple scripts may be added for any event. To add two pre change
scripts:
$ m pre change /path/to/script1
$ m pre change /path/to/script2
Scripts are executed in the order they were added.
List all pre change hooks:
$ m pre change
/path/to/script1
/path/to/script2
List all post install hooks:
$ m post install
/path/to/scriptA
/path/to/scriptB
/path/to/scriptC
To remove a post install hook:
$ m post install rm /path/to/scriptB
Remove all post install hooks:
$ m post install rm
Output from m --help
:
Usage: m [options] [COMMAND] [config]
Commands:
m Output versions installed
m latest [config ...] Install or activate the latest mongodb release
m stable [config ...] Install or activate the latest stable mongodb release
m <version> [config ...] Install and/or use mongodb <version>
m custom <version> <tarball> [config ...] Install custom mongodb <tarball> with [args ...]
m use <version> [args ...] Execute mongod <version> with [args ...]
m shard <version> [args ...] Execute mongos <version> with [args ...]
m shell <version> [args ...] Open a mongo shell <version> with [args ...]
m opsmanager <version> Download or activate the <version> opsmanger release
m bin <version> Output bin path for <version>
m rm <version ...> Remove the given version(s)
m --latest Output the latest mongodb version available
m --stable Output the latest stable mongodb version available
m ls Output the versions of mongodb/OpsManager available
m src <version> Output the url for source used for the given <version>
(useful if installed from source)
m pre <event> [script] Declare one or list scripts to execute before <event>
(scripts must use absolute paths)
m post <event> [script] Declare one or list scripts to execute after <event>
(scripts must use absolute paths)
m pre <event> rm [script] Remove pre <event> script
m post <event> rm [script] Remove post <event> script
Events:
change Occurs when switching mongodb versions
install Occurs when installing a previously uninstalled mongodb version
Options:
-V, --version Output current version of m
-h, --help Display help information
Aliases:
which bin
use as
shard sd
list ls
custom c
shell s
m
by default installs mongodb to /usr/local/m/versions, from
which it can see what you have currently installed, and activate previously installed versions of mongodb when m <version>
is invoked again.
Activated mongodb versions are then installed to the prefix /usr/local, which may be altered via the M_PREFIX environment variable.
To alter where m
operates simply export M_PREFIX to whatever you prefer.
Yes tj, this is nearly identical to n. Huge thanks!