Running the Atlassian Suite on My Mac

Published on: January 17th, 2015

Recently our Atlassian TAM stopped by for his quarterly visit. We had a very productive discussion, and I remarked that both he and his colleague were using Macs with Confluence and JIRA running natively despite the lack of “official” support. I was happy to hear that most of the engineering team are Mac users as well, and that while it’s not a production-worthy setup1 it’s regularly used by many Atlassians.

I, on the other hand, was activley running both in separate ubuntu VMs in Parallels2. This setup works, but I incur a relatively high memory/CPU penalty, as well as the nutso overhead of resuming a VM, syncing the local clock each time, etc. It’s silly just to test something out.

There are no decent, authoritative guides out there on the Interwebs, so I thought I’d publish one myself. Your mileage may vary. I’m (still) running OS X 10.9 Mavericks, so I can’t guarantee these steps will work on Yosemite3. In addition, while you don’t need to install MySQL as you may opt to use the local HSQL for both applications, I like being able to use the mysql client to see the data I’m using, and this makes it closer to my production setup.

Step 1: Install a compatible JVM

Presuming you only have the default version of Java 6 (1.6.0_65) at /Library/Java/Home, go download the latest Java 7 or Java 8 SDK from Oracle.4 Install it, then set its path as your JAVA_HOME environment variable. I use oh-my-zsh, so I added this to my .zshrc:

1
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home

Step 2: Install MySQL

I wanted to use homebrew as much as possible, so rather than download the branded installer, I did the following:

1
2
3
4
% brew update
% brew upgrade
% brew install mysql
% mysql.server start

Then, run the commands that Homebrew suggests to add MySQL to launchctl so it automatically launches at startup. These are most of the same instructions for Mavericks at coderwall, which worked flawlessly without the cleanup steps.5

Next, follow the Database Setup For MySQL guide, step 2, #2 to edit your my.cnf file. Then restart mysql.

After it restarts, log in and set up the DB users you will need later. Open mysql as root6:

1
$ mysql -uroot

…and run the following SQL:

1
2
3
4
5
CREATE DATABASE confluence CHARACTER SET utf8 COLLATE utf8_bin;
CREATE DATABASE jira CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON confluence.* TO 'confluenceuser'@'localhost' IDENTIFIED BY 'confluencepass';
GRANT ALL PRIVILEGES ON jira.* TO 'jirauser'@'localhost' IDENTIFIED BY 'jirapass';
flush privileges

Step 3: Download the MySQL Connector

You need this for both applications, so go grab the latest platform-independent connector here and unpack it somewhere handy. I chose ~/Downloads.

Step 4: Prepare A Home

You will need both an installation location as well as a home directory7 for each application:

1
2
3
4
5
$ cd /var
$ sudo mkdir atlassian
$ sudo chown mattshelton:staff atlassian
$ sudo chmod g+w atlassian
$ mkdir -p atlassian/jira/home atlassian/confluence/home

Step 5: Install JIRA

There is a guide for Installing JIRA on Mac OS X from Atlassian. It reads like the generic install overview was almost, kinda, updated for the Mac, but there are still sections like this:

If your operating system is *nix-based (for example, Linux or Solaris), type the following in a console:
$ sudo /usr/sbin/useradd –create-home –comment “Account for running JIRA” –shell /bin/bash jira
If your operating system is Windows: …

Here’s what I did:

Download and Unpack JIRA

  1. Download the JIRA tar.gz file here.
  2. Unzip the downloaded file. In my case, I unpacked it in /var/atlassian/atlassian-jira-6.3.13-standalone and created a symlink called current in the same directory. That way, JIRA is always installed at /var/atlassian/jira/current, and when I upgrade I always know where it is and I can keep the previous application directory around in case I need to grab customized files.

Set JIRA Home

This is identical to what is in the above Atlassian guide:

  1. Go to /var/atlassian/jira/current/atlassian-jira/WEB-INF/classes/.
  2. Edit the file jira-application.properties and set the value of jira.home to /var/atlassian/jira/home.

Database Configuration

Since you already created the database itself, all you need to do is tell JIRA how to connect to it:

  1. In /var/atlassian/jira/current/bin, run config.sh. This opens up a little swing app with a bunch of configuration options.
  2. In the second tab, configre the database as needed. You can test it from the same tab and save your settings once you have a working database connection.
  3. Copy the MySQL Connector into the JIRA lib directory:
1
$ cp ~/Downloads/mysql-connector-java-5.1.34/mysql-connector-java-5.1.34-bin.jar /var/atlassian/jira/current/atlassian-jira/WEB-INF/lib/.

Start JIRA

From /var/atlassian/jira/current/bin`:

1
2
$ ./start-jira.sh
$ tail -f ../logs/catalina.out

Once you see that the server has started, open http://localhost:8080/ and run the setup wizard.

Step 6: Install Confluence

This section is what inspired me to write this post in the first place. Unlike JIRA, there is no “Installing Confluence on Mac OS X” page. The steps, though, are nearly identical to JIRA, and are roughly the same as the guide for from the Confluence 3.4 documentation (written in 2010):

Download and Unpack Confluence

  1. Download the Confluence Standalone tar.gz file here.
  2. Unzip the downloaded file. In my case, I unpacked it in /var/atlassian/atlassian-confluence-5.6.5 and created a symlink called current in the same directory. That way, Confluence is always installed at /var/atlassian/confluence/current, and when I upgrade I always know where it is and I can keep the previous application directory around in case I need to grab customized files..

Configure Confluence Environment

  1. Go to /var/atlassian/confluence/current/confluence/WEB-INF/classes/.
  2. Edit the file confluence-init.properties and set the value of confluence.home to /var/atlassian/confluence/home.
  3. Copy the MySQL Connector into the Confluence lib directory:
1
$ cp ~/Downloads/mysql-connector-java-5.1.34/mysql-connector-java-5.1.34-bin.jar /var/atlassian/jira/current/confluence/WEB-INF/lib/.

Start Confluence

From /var/atlassian/confluence/current/bin`:

1
2
$ ./start-confluence.sh
$ tail -f ../logs/catalina.out

Once you see that the server has started, open http://localhost:8090/ and run the setup wizard. The setup wizard includes the data source configuration. Unlike JIRA, there is a web-based tool to specify this rather than a swing app.

Of note, the standalone installer also include some handy Mac OS Terminal command files in the bin directory, presumably so that you could have some shortcut icons to start/stop Confluence.

Conclusion

I chose to let Confluence use JIRA as its user directory to make this a one-stop shop as I expect I’ll always have both running. I’m saving myself ~4GB of memory without the VMs and there’s no spinning fan noise, which is a giant plus.

I titled this “Running the Atlassian Suite on my Mac”, but I have no intention of installing the other applications just yet. I’ll post again if I do.


  1. Ths is due to the relative lack of production hardware running MacOS, not the lack of production-worthiness of the OS itself.

  2. Not because this is the only option, but because the last time I tried to install each of them on my Mac it was a dismal failure.

  3. They should. Some of the steps I figured out from comments in other posts from Yosemite users.

  4. Account Required. Welcome to the new order.

  5. I should note, though, that homebrew now runs the last few commands specified in the guide as a part of the installation. I had very little to do to get an instance running quickly.

  6. The initial mysql password for root when installing from homebrow is empty. It might be wise to set one.

  7. Most guides will tell you to run each application as a dedicated user. This is unnecessary and overcomplicates the installation.

Taking Control of My iPhones

Published on: December 18th, 2014
Tags: geek life

I really enjoyed Bradley Chambers’ post on how he “took control” of the technology that was starting to take control of him. I’m in a similar boat being tied to one or more iPhones on a regular basis.

The iPhone has made my life simpler and more streamlined in so many respects:

But it’s also a very easy tooltoy to use to the exclusion of the people and tasks around me. I have found myself being annoyed by being interrupted “working” on my phone when really I need to be minding my real life.

To top all of this off, I have two iPhones: one work and one personal, though I have tended to use my personal phone for everything except conference calls1.

Bradley took these steps:

  • Email doesn’t show badges and only downloads new messages when I open the app. Not only has this resulted in better battery life, but I’ve not missed out on anything important. If something is urgent, I will get a phone call or a text message.
  • No social media notifications (Twitter, Instagram, etc)
  • Slack is set to only push @replies
  • Do Not Disturb runs from 5:00 PM to 7:00 AM, but allows phone calls. This makes my iPhone act like an actual phone.

For me, I went a slightly different route:

  1. I asked my employer to upgrade my aging iPhone 4S to a new iPhone 6 Plus. It was up for the contract renewal price, so they did without much fuss.
  2. I removed every single thing work-related from my personal phone.2
  3. On my personal phone, I set my Do Not Disturb to 9:00 PM to 7:00 AM, but allowing phone calls.
  4. On my work phone, I set my Do Not Disturb to 7:00 PM to 7:00 AM, but allowing phone calls from my contacts only.
  5. I leave my work phone in the basement on my desk when I am doing things around the house, as well as most nights overnight.3
  6. I removed nearly every push notification and badge from my personal phone. I still let my personal email alert me, but only silently. I do let my work email notify me on my work phone, but hten it’s not always on me, so this matters far less.

So far, despite being in love with the display on the 6 Plus4 and compelled to look at it just because it’s so pretty, I have found myself less electronically engaged and more personally engaged, even in the last week since making these changes.

I expect I’ll find more ways to make this work as time goes on. I’m not ready to go away from push email just yet, but it may come soon enough.

NB: One negative side-effect, if you could call it that, is that since I’m pulling out my personal phone from my pocket far less than before, I get very far behind on twitter. I am typically a twitter completionist, and rely on twitter to keep me updated on current events, so this means I’m usually about 24 hours out of touch.

I don’t know if I care to do anything about this, honestly…


  1. I use about two dozen minutes a month on my personal line, but working remotely means that I use a few hundred minutes a month for work calls, even if almost all of them are otherwise “toll-free”, a concept that has become ridiculous now.

  2. I now almost never run out of battery. It’s incredible.

  3. This is the most critical change. By leaving my phone somewhere I am not, I am simply not bothered by alerts.

  4. Which is, to be pragmatic, far too big to be a useful “phone”, but is a fantastic piece of hardware otherwise.

Ending a Workday

Published on: December 2nd, 2014

Over at Wise Bread, Brittany Lyte shared her five best ways to spend the last 10 minutes of your workday. My favorite, which was also the favorite over at Lifehacker, was to clear your desk of clutter:

Studies show that a cluttered workspace actually hinders our ability to process information and concentrate. We aren’t aware of it, but clutter competes for our attention in much the same way as a whining child or a barking dog does.

Clutter absolutely competes for my attention the same way audible noise does; this has long been one of my triggers1. I’m a smidge obsessive about maintaining a semi-spartan2 workspace, so I’ve been doing something like this for years. I also make sure to power off my displays and speakers, put my trash/recycling where they can be easily retrieved by janitorial staff, and “reset” the furniture for the next day.


  1. Ask my wife.

  2. Read: minimalist. It’s such a buzzword and I hate to use it, but I do try to minimize everything that I have down to the bare necessities.

#Blessed

Published on: November 5th, 2014

If there’s one thing Christians love, it’s being blessed.

We’ve created a culture in which we measure God’s “blessings” in terms of dollars and cents, comfort and pleasure, wealth and well-being. So, if we’re happy and healthy and have everything we need, then we’re blessed, and we should thank God on social media.

Jamie hits it out of the park with this one.

So Jesus, the very incarnation of God among us, was like, “Um. You keep saying this word, ‘blessed’. I do not think it means what you think it means.”

Because blessed does not mean pleased. Blessed does not mean happy. Blessed does not mean fulfilled. It doesn’t even mean fed or clothed or housed or healthy…

What it really means is that you are not alone, for God is with you.

Why You Must Vaccinate Your Kids

Published on: July 11th, 2014

Earlier this year there was a court decision in favor of several schools in New York state wherein the court determined that the schools could legally prevent unvaccinated children from attending school when another student has a vaccine-preventable disease:

Citing a 109-year-old Supreme Court ruling that gives states broad power in public health matters, Judge William F. Kuntz II of Federal District Court in Brooklyn ruled against three families who claimed that their right to free exercise of religion was violated when their children were kept from school, sometimes for a month at a time, because of the city’s immunization policies.

The Supreme Court, Judge Kuntz wrote in his ruling, has “strongly suggested that religious objectors are not constitutionally exempt from vaccinations”.

http://www.nytimes.com/2014/06/23/nyregion/judge-upholds-policy-barring-unvaccinated-students-during-illnesses.html Benjamin Mueller

This was the right decision, and while I’m glad it was decided as such, I’m anxious to see where it goes next. The plaintiffs are appealing, and as the chain of appeals goes in the US, I will be really interested to see if this lawsuit eventually makes it to the Supreme Court. Affirming that public health concerns over-rule 1st amendment claims seems like an important precedent to be set at the federal level.

Dr. Aaron E Carroll, a prolific health policy blogger and vid-caster, in addition to being a pediatrician and professor of medicine1, wrote a nice piece about this for CNN Opinion. He made several very good points about herd immunity, which is an often neglected point in conversations with those who are either uncomfortable with, or opposed to, vaccinating their children for whatever reason. For instance, regarding the Varicella2 vaccine, he wrote (emphasis mine):

What’s notable is that from 2004 through 2007, not one child less than 1 year of age died in the United States from chicken pox. None. This is remarkable, because we cannot give the varicella vaccine to babies. It’s only approved for children 1 year or older.

In other words, all those babies were saved not because we vaccinated them against this illness. They were saved because older children were.

http://www.cnn.com/2014/07/09/opinion/carroll-vaccinate-kids/index.html Aaron Carrol

I’ve read many of the objections to vaccination. Every single one of them is, in my opinion, without any merit. There is simply far too much research showing that vaccines are only positive, that they save lives, that they eradicate disease, and that avoiding them can cost lives.

Bottom line: If you are not having your children vaccinated, or you elect to delay vaccination to be on an alternative schedule which “makes sense to you”3, you are putting your children and everyone else’s children at risk. This is conscious negligence, not “exercising your parenting freedom”.

I have friends who vehemently disagree with me on this topic. Some day I will not be surprised if that disagreement becomes irrelevant and states begin enforcing vaccination by law. It’s my hope that this decision reinforces precedent allowing states to consider just that.4 I would not be surprised if the first state to attempt to do so is California, given that they declared a Pertussis epidemic last month, and this was not the first time it has done so this decade. Pertussis is a disease that should have been eradicated from the planet, and was technically near extinction, until folks stopped vaccinating their kids against it. Considered possible in 1975, eradication of Pertussis moved from a scientific challenge to a public health (enforcement) challenge in the late 1990s. That challenge seems to have failed, even with a vaccine with a 70% efficacy rate.

I still think Penn and Teller said it best.


  1. Among other things. Does this guy sleep?

  2. Chicken Pox

  3. It’s worth noting that the Institute of Medicine is attempting to determine if it’s feasible to study the effectiveness of some of the proposed alternative schedules out there, but until it’s been studied, it’s simply far safer for everybody to stick to the standard schedule, which has been extensively studied.

  4. Of course, I’m not a lawyer, so what do I know anyway?