docs/references/qubes-postgresql/bowabos.blogspot.co.uk/2013/12/how-to-set-up-jira-and-conf...

2133 lines
98 KiB
HTML

<!DOCTYPE html>
<html class='v2' dir='ltr'>
<head>
<meta content='width=1100' name='viewport'/>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
<script type="text/javascript">(function() { (function(){function c(a){this.t={};this.tick=function(a,c,b){var d=void 0!=b?b:(new Date).getTime();this.t[a]=[d,c];if(void 0==b)try{window.console.timeStamp("CSI/"+a)}catch(e){}};this.tick("start",null,a)}var a;window.performance&&(a=window.performance.timing);var h=a?new c(a.responseStart):new c;window.jstiming={Timer:c,load:h};if(a){var b=a.navigationStart,e=a.responseStart;0<b&&e>=b&&(window.jstiming.srt=e-b)}if(a){var d=window.jstiming.load;0<b&&e>=b&&(d.tick("_wtsrt",void 0,b),d.tick("wtsrt_",
"_wtsrt",e),d.tick("tbsd_","wtsrt_"))}try{a=null,window.chrome&&window.chrome.csi&&(a=Math.floor(window.chrome.csi().pageT),d&&0<b&&(d.tick("_tbnd",void 0,window.chrome.csi().startE),d.tick("tbnd_","_tbnd",b))),null==a&&window.gtbExternal&&(a=window.gtbExternal.pageT()),null==a&&window.external&&(a=window.external.pageT,d&&0<b&&(d.tick("_tbnd",void 0,window.external.startE),d.tick("tbnd_","_tbnd",b))),a&&(window.jstiming.pt=a)}catch(k){}})();window.tickAboveFold=function(c){var a=0;if(c.offsetParent){do a+=c.offsetTop;while(c=c.offsetParent)}c=a;750>=c&&window.jstiming.load.tick("aft")};var f=!1;function g(){f||(f=!0,window.jstiming.load.tick("firstScrollTime"))}window.addEventListener?window.addEventListener("scroll",g,!1):window.attachEvent("onscroll",g);
})();</script>
<meta content='blogger' name='generator'/>
<link href='http://bowabos.blogspot.co.uk/favicon.ico' rel='icon' type='image/x-icon'/>
<link href='http://bowabos.blogspot.com/2013/12/how-to-set-up-jira-and-confluence-on.html' rel='canonical'/>
<link rel="alternate" type="application/atom+xml" title="Bits Of Wood And Bits Of Strings - Atom" href="http://bowabos.blogspot.com/feeds/posts/default" />
<link rel="alternate" type="application/rss+xml" title="Bits Of Wood And Bits Of Strings - RSS" href="http://bowabos.blogspot.com/feeds/posts/default?alt=rss" />
<link rel="service.post" type="application/atom+xml" title="Bits Of Wood And Bits Of Strings - Atom" href="https://www.blogger.com/feeds/5313404859328252510/posts/default" />
<link rel="alternate" type="application/atom+xml" title="Bits Of Wood And Bits Of Strings - Atom" href="http://bowabos.blogspot.com/feeds/5614943045682456353/comments/default" />
<!--[if IE]><script type="text/javascript" src="https://www.blogger.com/static/v1/jsbin/1494333581-ieretrofit.js"></script>
<![endif]-->
<link href='https://plus.google.com/108291894852746097453' rel='publisher'/>
<!--[if IE]> <script> (function() { var html5 = ("abbr,article,aside,audio,canvas,datalist,details," + "figure,footer,header,hgroup,mark,menu,meter,nav,output," + "progress,section,time,video").split(','); for (var i = 0; i < html5.length; i++) { document.createElement(html5[i]); } try { document.execCommand('BackgroundImageCache', false, true); } catch(e) {} })(); </script> <![endif]-->
<title>Bits Of Wood And Bits Of Strings: How-to set up Jira and Confluence on Fedora VM in Qubes OS</title>
<link type='text/css' rel='stylesheet' href='../../../www.blogger.com/static/v1/widgets/2973171168-css_bundle_v2.css' />
<link type='text/css' rel='stylesheet' href='../../../www.blogger.com/dyn-css/authorization.css?targetBlogID=5313404859328252510&amp;zx=8e5d6211-5625-4a94-8c5a-926ad4b193e7' />
<style id='page-skin-1' type='text/css'><!--
/*
-----------------------------------------------
Blogger Template Style
Name: Simple
Designer: Josh Peterson
URL: www.noaesthetic.com
----------------------------------------------- */
/* Variable definitions
====================
<Variable name="keycolor" description="Main Color" type="color" default="#66bbdd"/>
<Group description="Page Text" selector="body">
<Variable name="body.font" description="Font" type="font"
default="normal normal 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="body.text.color" description="Text Color" type="color" default="#222222"/>
</Group>
<Group description="Backgrounds" selector=".body-fauxcolumns-outer">
<Variable name="body.background.color" description="Outer Background" type="color" default="#66bbdd"/>
<Variable name="content.background.color" description="Main Background" type="color" default="#ffffff"/>
<Variable name="header.background.color" description="Header Background" type="color" default="transparent"/>
</Group>
<Group description="Links" selector=".main-outer">
<Variable name="link.color" description="Link Color" type="color" default="#2288bb"/>
<Variable name="link.visited.color" description="Visited Color" type="color" default="#888888"/>
<Variable name="link.hover.color" description="Hover Color" type="color" default="#33aaff"/>
</Group>
<Group description="Blog Title" selector=".header h1">
<Variable name="header.font" description="Font" type="font"
default="normal normal 60px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="header.text.color" description="Title Color" type="color" default="#3399bb" />
</Group>
<Group description="Blog Description" selector=".header .description">
<Variable name="description.text.color" description="Description Color" type="color"
default="#777777" />
</Group>
<Group description="Tabs Text" selector=".tabs-inner .widget li a">
<Variable name="tabs.font" description="Font" type="font"
default="normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="tabs.text.color" description="Text Color" type="color" default="#999999"/>
<Variable name="tabs.selected.text.color" description="Selected Color" type="color" default="#000000"/>
</Group>
<Group description="Tabs Background" selector=".tabs-outer .PageList">
<Variable name="tabs.background.color" description="Background Color" type="color" default="#f5f5f5"/>
<Variable name="tabs.selected.background.color" description="Selected Color" type="color" default="#eeeeee"/>
</Group>
<Group description="Post Title" selector="h3.post-title, .comments h4">
<Variable name="post.title.font" description="Font" type="font"
default="normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
</Group>
<Group description="Date Header" selector=".date-header">
<Variable name="date.header.color" description="Text Color" type="color"
default="#cccccc"/>
<Variable name="date.header.background.color" description="Background Color" type="color"
default="transparent"/>
<Variable name="date.header.font" description="Text Font" type="font"
default="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="date.header.padding" description="Date Header Padding" type="string" default="inherit"/>
<Variable name="date.header.letterspacing" description="Date Header Letter Spacing" type="string" default="inherit"/>
<Variable name="date.header.margin" description="Date Header Margin" type="string" default="inherit"/>
</Group>
<Group description="Post Footer" selector=".post-footer">
<Variable name="post.footer.text.color" description="Text Color" type="color" default="#666666"/>
<Variable name="post.footer.background.color" description="Background Color" type="color"
default="#f9f9f9"/>
<Variable name="post.footer.border.color" description="Shadow Color" type="color" default="#eeeeee"/>
</Group>
<Group description="Gadgets" selector="h2">
<Variable name="widget.title.font" description="Title Font" type="font"
default="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/>
<Variable name="widget.title.text.color" description="Title Color" type="color" default="#000000"/>
<Variable name="widget.alternate.text.color" description="Alternate Color" type="color" default="#999999"/>
</Group>
<Group description="Images" selector=".main-inner">
<Variable name="image.background.color" description="Background Color" type="color" default="#ffffff"/>
<Variable name="image.border.color" description="Border Color" type="color" default="#eeeeee"/>
<Variable name="image.text.color" description="Caption Text Color" type="color" default="#cccccc"/>
</Group>
<Group description="Accents" selector=".content-inner">
<Variable name="body.rule.color" description="Separator Line Color" type="color" default="#eeeeee"/>
<Variable name="tabs.border.color" description="Tabs Border Color" type="color" default="#404040"/>
</Group>
<Variable name="body.background" description="Body Background" type="background"
color="#292929" default="$(color) none repeat scroll top left"/>
<Variable name="body.background.override" description="Body Background Override" type="string" default=""/>
<Variable name="body.background.gradient.cap" description="Body Gradient Cap" type="url"
default="url(//www.blogblog.com/1kt/simple/gradients_light.png)"/>
<Variable name="body.background.gradient.tile" description="Body Gradient Tile" type="url"
default="url(//www.blogblog.com/1kt/simple/body_gradient_tile_light.png)"/>
<Variable name="content.background.color.selector" description="Content Background Color Selector" type="string" default=".content-inner"/>
<Variable name="content.padding" description="Content Padding" type="length" default="10px" min="0" max="100px"/>
<Variable name="content.padding.horizontal" description="Content Horizontal Padding" type="length" default="10px" min="0" max="100px"/>
<Variable name="content.shadow.spread" description="Content Shadow Spread" type="length" default="40px" min="0" max="100px"/>
<Variable name="content.shadow.spread.webkit" description="Content Shadow Spread (WebKit)" type="length" default="5px" min="0" max="100px"/>
<Variable name="content.shadow.spread.ie" description="Content Shadow Spread (IE)" type="length" default="10px" min="0" max="100px"/>
<Variable name="main.border.width" description="Main Border Width" type="length" default="0" min="0" max="10px"/>
<Variable name="header.background.gradient" description="Header Gradient" type="url" default="none"/>
<Variable name="header.shadow.offset.left" description="Header Shadow Offset Left" type="length" default="-1px" min="-50px" max="50px"/>
<Variable name="header.shadow.offset.top" description="Header Shadow Offset Top" type="length" default="-1px" min="-50px" max="50px"/>
<Variable name="header.shadow.spread" description="Header Shadow Spread" type="length" default="1px" min="0" max="100px"/>
<Variable name="header.padding" description="Header Padding" type="length" default="30px" min="0" max="100px"/>
<Variable name="header.border.size" description="Header Border Size" type="length" default="1px" min="0" max="10px"/>
<Variable name="header.bottom.border.size" description="Header Bottom Border Size" type="length" default="1px" min="0" max="10px"/>
<Variable name="header.border.horizontalsize" description="Header Horizontal Border Size" type="length" default="0" min="0" max="10px"/>
<Variable name="description.text.size" description="Description Text Size" type="string" default="140%"/>
<Variable name="tabs.margin.top" description="Tabs Margin Top" type="length" default="0" min="0" max="100px"/>
<Variable name="tabs.margin.side" description="Tabs Side Margin" type="length" default="30px" min="0" max="100px"/>
<Variable name="tabs.background.gradient" description="Tabs Background Gradient" type="url"
default="url(//www.blogblog.com/1kt/simple/gradients_light.png)"/>
<Variable name="tabs.border.width" description="Tabs Border Width" type="length" default="1px" min="0" max="10px"/>
<Variable name="tabs.bevel.border.width" description="Tabs Bevel Border Width" type="length" default="1px" min="0" max="10px"/>
<Variable name="post.margin.bottom" description="Post Bottom Margin" type="length" default="25px" min="0" max="100px"/>
<Variable name="image.border.small.size" description="Image Border Small Size" type="length" default="2px" min="0" max="10px"/>
<Variable name="image.border.large.size" description="Image Border Large Size" type="length" default="5px" min="0" max="10px"/>
<Variable name="page.width.selector" description="Page Width Selector" type="string" default=".region-inner"/>
<Variable name="page.width" description="Page Width" type="string" default="auto"/>
<Variable name="main.section.margin" description="Main Section Margin" type="length" default="15px" min="0" max="100px"/>
<Variable name="main.padding" description="Main Padding" type="length" default="15px" min="0" max="100px"/>
<Variable name="main.padding.top" description="Main Padding Top" type="length" default="30px" min="0" max="100px"/>
<Variable name="main.padding.bottom" description="Main Padding Bottom" type="length" default="30px" min="0" max="100px"/>
<Variable name="paging.background"
color="#333333"
description="Background of blog paging area" type="background"
default="transparent none no-repeat scroll top center"/>
<Variable name="footer.bevel" description="Bevel border length of footer" type="length" default="0" min="0" max="10px"/>
<Variable name="mobile.background.overlay" description="Mobile Background Overlay" type="string"
default="transparent none repeat scroll top left"/>
<Variable name="mobile.background.size" description="Mobile Background Size" type="string" default="auto"/>
<Variable name="mobile.button.color" description="Mobile Button Color" type="color" default="#ffffff" />
<Variable name="startSide" description="Side where text starts in blog language" type="automatic" default="left"/>
<Variable name="endSide" description="Side where text ends in blog language" type="automatic" default="right"/>
*/
/* Content
----------------------------------------------- */
body {
font: normal normal 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #cccccc;
background: #292929 none repeat scroll top left;
padding: 0 40px 40px 40px;
}
html body .region-inner {
min-width: 0;
max-width: 100%;
width: auto;
}
h2 {
font-size: 22px;
}
a:link {
text-decoration:none;
color: #dd7700;
}
a:visited {
text-decoration:none;
color: #cc6600;
}
a:hover {
text-decoration:underline;
color: #cc6600;
}
.body-fauxcolumn-outer .fauxcolumn-inner {
background: transparent none repeat scroll top left;
_background-image: none;
}
.body-fauxcolumn-outer .cap-top {
position: absolute;
z-index: 1;
height: 400px;
width: 100%;
background: #292929 none repeat scroll top left;
}
.body-fauxcolumn-outer .cap-top .cap-left {
width: 100%;
background: transparent none repeat-x scroll top left;
_background-image: none;
}
.content-outer {
-moz-box-shadow: 0 0 40px rgba(0, 0, 0, .15);
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .15);
-goog-ms-box-shadow: 0 0 10px #333333;
box-shadow: 0 0 40px rgba(0, 0, 0, .15);
margin-bottom: 1px;
}
.content-inner {
padding: 10px 10px;
}
.content-inner {
background-color: #333333;
}
/* Header
----------------------------------------------- */
.header-outer {
background: transparent none repeat-x scroll 0 -400px;
_background-image: none;
}
.Header h1 {
font: normal normal 60px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #ffffff;
text-shadow: -1px -1px 1px rgba(0, 0, 0, .2);
}
.Header h1 a {
color: #ffffff;
}
.Header .description {
font-size: 140%;
color: #aaaaaa;
}
.header-inner .Header .titlewrapper {
padding: 22px 30px;
}
.header-inner .Header .descriptionwrapper {
padding: 0 30px;
}
/* Tabs
----------------------------------------------- */
.tabs-inner .section:first-child {
border-top: 1px solid #404040;
}
.tabs-inner .section:first-child ul {
margin-top: -1px;
border-top: 1px solid #404040;
border-left: 0 solid #404040;
border-right: 0 solid #404040;
}
.tabs-inner .widget ul {
background: #222222 none repeat-x scroll 0 -800px;
_background-image: none;
border-bottom: 1px solid #404040;
margin-top: 0;
margin-left: -30px;
margin-right: -30px;
}
.tabs-inner .widget li a {
display: inline-block;
padding: .6em 1em;
font: normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #999999;
border-left: 1px solid #333333;
border-right: 0 solid #404040;
}
.tabs-inner .widget li:first-child a {
border-left: none;
}
.tabs-inner .widget li.selected a, .tabs-inner .widget li a:hover {
color: #ffffff;
background-color: #000000;
text-decoration: none;
}
/* Columns
----------------------------------------------- */
.main-outer {
border-top: 0 solid #404040;
}
.fauxcolumn-left-outer .fauxcolumn-inner {
border-right: 1px solid #404040;
}
.fauxcolumn-right-outer .fauxcolumn-inner {
border-left: 1px solid #404040;
}
/* Headings
----------------------------------------------- */
div.widget > h2,
div.widget h2.title {
margin: 0 0 1em 0;
font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
color: #ffffff;
}
/* Widgets
----------------------------------------------- */
.widget .zippy {
color: #999999;
text-shadow: 2px 2px 1px rgba(0, 0, 0, .1);
}
.widget .popular-posts ul {
list-style: none;
}
/* Posts
----------------------------------------------- */
h2.date-header {
font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
}
.date-header span {
background-color: transparent;
color: #cccccc;
padding: inherit;
letter-spacing: inherit;
margin: inherit;
}
.main-inner {
padding-top: 30px;
padding-bottom: 30px;
}
.main-inner .column-center-inner {
padding: 0 15px;
}
.main-inner .column-center-inner .section {
margin: 0 15px;
}
.post {
margin: 0 0 25px 0;
}
h3.post-title, .comments h4 {
font: normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
margin: .75em 0 0;
}
.post-body {
font-size: 110%;
line-height: 1.4;
position: relative;
}
.post-body img, .post-body .tr-caption-container, .Profile img, .Image img,
.BlogList .item-thumbnail img {
padding: 0;
background: #111111;
border: 1px solid #111111;
-moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
-webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
}
.post-body img, .post-body .tr-caption-container {
padding: 1px;
}
.post-body .tr-caption-container {
color: #cccccc;
}
.post-body .tr-caption-container img {
padding: 0;
background: transparent;
border: none;
-moz-box-shadow: 0 0 0 rgba(0, 0, 0, .1);
-webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .1);
box-shadow: 0 0 0 rgba(0, 0, 0, .1);
}
.post-header {
margin: 0 0 1.5em;
line-height: 1.6;
font-size: 90%;
}
.post-footer {
margin: 20px -2px 0;
padding: 5px 10px;
color: #888888;
background-color: #303030;
border-bottom: 1px solid #444444;
line-height: 1.6;
font-size: 90%;
}
#comments .comment-author {
padding-top: 1.5em;
border-top: 1px solid #404040;
background-position: 0 1.5em;
}
#comments .comment-author:first-child {
padding-top: 0;
border-top: none;
}
.avatar-image-container {
margin: .2em 0 0;
}
#comments .avatar-image-container img {
border: 1px solid #111111;
}
/* Comments
----------------------------------------------- */
.comments .comments-content .icon.blog-author {
background-repeat: no-repeat;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9sLFwMeCjjhcOMAAAD+SURBVDjLtZSvTgNBEIe/WRRnm3U8RC1neQdsm1zSBIU9VVF1FkUguQQsD9ITmD7ECZIJSE4OZo9stoVjC/zc7ky+zH9hXwVwDpTAWWLrgS3QAe8AZgaAJI5zYAmc8r0G4AHYHQKVwII8PZrZFsBFkeRCABYiMh9BRUhnSkPTNCtVXYXURi1FpBDgArj8QU1eVXUzfnjv7yP7kwu1mYrkWlU33vs1QNu2qU8pwN0UpKoqokjWwCztrMuBhEhmh8bD5UDqur75asbcX0BGUB9/HAMB+r32hznJgXy2v0sGLBcyAJ1EK3LFcbo1s91JeLwAbwGYu7TP/3ZGfnXYPgAVNngtqatUNgAAAABJRU5ErkJggg==);
}
.comments .comments-content .loadmore a {
border-top: 1px solid #999999;
border-bottom: 1px solid #999999;
}
.comments .comment-thread.inline-thread {
background-color: #303030;
}
.comments .continue {
border-top: 2px solid #999999;
}
/* Accents
---------------------------------------------- */
.section-columns td.columns-cell {
border-left: 1px solid #404040;
}
.blog-pager {
background: transparent none no-repeat scroll top center;
}
.blog-pager-older-link, .home-link,
.blog-pager-newer-link {
background-color: #333333;
padding: 5px;
}
.footer-outer {
border-top: 0 dashed #bbbbbb;
}
/* Mobile
----------------------------------------------- */
body.mobile {
background-size: auto;
}
.mobile .body-fauxcolumn-outer {
background: transparent none repeat scroll top left;
}
.mobile .body-fauxcolumn-outer .cap-top {
background-size: 100% auto;
}
.mobile .content-outer {
-webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .15);
box-shadow: 0 0 3px rgba(0, 0, 0, .15);
}
.mobile .tabs-inner .widget ul {
margin-left: 0;
margin-right: 0;
}
.mobile .post {
margin: 0;
}
.mobile .main-inner .column-center-inner .section {
margin: 0;
}
.mobile .date-header span {
padding: 0.1em 10px;
margin: 0 -10px;
}
.mobile h3.post-title {
margin: 0;
}
.mobile .blog-pager {
background: transparent none no-repeat scroll top center;
}
.mobile .footer-outer {
border-top: none;
}
.mobile .main-inner, .mobile .footer-inner {
background-color: #333333;
}
.mobile-index-contents {
color: #cccccc;
}
.mobile-link-button {
background-color: #dd7700;
}
.mobile-link-button a:link, .mobile-link-button a:visited {
color: #ffffff;
}
.mobile .tabs-inner .section:first-child {
border-top: none;
}
.mobile .tabs-inner .PageList .widget-content {
background-color: #000000;
color: #ffffff;
border-top: 1px solid #404040;
border-bottom: 1px solid #404040;
}
.mobile .tabs-inner .PageList .widget-content .pagelist-arrow {
border-left: 1px solid #404040;
}
--></style>
<style id='template-skin-1' type='text/css'><!--
body {
min-width: 960px;
}
.content-outer, .content-fauxcolumn-outer, .region-inner {
min-width: 960px;
max-width: 960px;
_width: 960px;
}
.main-inner .columns {
padding-left: 0;
padding-right: 310px;
}
.main-inner .fauxcolumn-center-outer {
left: 0;
right: 310px;
/* IE6 does not respect left and right together */
_width: expression(this.parentNode.offsetWidth -
parseInt("0") -
parseInt("310px") + 'px');
}
.main-inner .fauxcolumn-left-outer {
width: 0;
}
.main-inner .fauxcolumn-right-outer {
width: 310px;
}
.main-inner .column-left-outer {
width: 0;
right: 100%;
margin-left: -0;
}
.main-inner .column-right-outer {
width: 310px;
margin-right: -310px;
}
#layout {
min-width: 0;
}
#layout .content-outer {
min-width: 0;
width: 800px;
}
#layout .region-inner {
min-width: 0;
width: auto;
}
--></style>
<script type="text/javascript">var a="&m=1",d="(^|&)m=",e="?",f="?m=1";function g(){var b=window.location.href,c=b.split(e);switch(c.length){case 1:return b+f;case 2:return 0<=c[1].search(d)?null:b+a;default:return null}}var h=navigator.userAgent;if(-1!=h.indexOf("Mobile")&&-1!=h.indexOf("WebKit")&&-1==h.indexOf("iPad")||-1!=h.indexOf("Opera Mini")||-1!=h.indexOf("IEMobile")){var k=g();k&&window.location.replace(k)};
</script><script type="text/javascript">
if (window.jstiming) window.jstiming.load.tick('headEnd');
</script></head>
<body class='loading variant-dark'>
<div class='navbar section' id='navbar' name='Navbar'><div class='widget Navbar' id='Navbar1'><script type="text/javascript">
function setAttributeOnload(object, attribute, val) {
if(window.addEventListener) {
window.addEventListener('load',
function(){ object[attribute] = val; }, false);
} else {
window.attachEvent('onload', function(){ object[attribute] = val; });
}
}
</script>
<div id="navbar-iframe-container"></div>
<script type="text/javascript" src="../../../apis.google.com/js/plusone.js"></script>
<script type="text/javascript">
gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() {
if (gapi.iframes && gapi.iframes.getContext) {
gapi.iframes.getContext().openChild({
url: 'https://www.blogger.com/navbar.g?targetBlogID\0755313404859328252510\46blogName\75Bits+Of+Wood+And+Bits+Of+Strings\46publishMode\75PUBLISH_MODE_BLOGSPOT\46navbarType\75LIGHT\46layoutType\75LAYOUTS\46searchRoot\75//bowabos.blogspot.com/search\46blogLocale\75en_GB\46v\0752\46homepageUrl\75http://bowabos.blogspot.com/\46targetPostID\0755614943045682456353\46blogPostOrPageUrl\75http://bowabos.blogspot.com/2013/12/how-to-set-up-jira-and-confluence-on.html\46vt\0757027869538893091329',
where: document.getElementById("navbar-iframe-container"),
id: "navbar-iframe"
});
}
});
</script><script type="text/javascript">
(function() {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '//pagead2.googlesyndication.com/pagead/js/google_top_exp.js';
var head = document.getElementsByTagName('head')[0];
if (head) {
head.appendChild(script);
}})();
</script>
</div></div>
<div class='body-fauxcolumns'>
<div class='fauxcolumn-outer body-fauxcolumn-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</div>
<div class='content'>
<div class='content-fauxcolumns'>
<div class='fauxcolumn-outer content-fauxcolumn-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</div>
<div class='content-outer'>
<div class='content-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left content-fauxborder-left'>
<div class='fauxborder-right content-fauxborder-right'></div>
<div class='content-inner'>
<header>
<div class='header-outer'>
<div class='header-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left header-fauxborder-left'>
<div class='fauxborder-right header-fauxborder-right'></div>
<div class='region-inner header-inner'>
<div class='header section' id='header' name='Header'><div class='widget Header' id='Header1'>
<div id='header-inner'>
<div class='titlewrapper'>
<h1 class='title'>
<a href='http://bowabos.blogspot.co.uk/'>Bits Of Wood And Bits Of Strings</a>
</h1>
</div>
<div class='descriptionwrapper'>
<p class='description'><span>Scala, Qubes OS, Linux, OS X...</span></p>
</div>
</div>
</div></div>
</div>
</div>
<div class='header-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</header>
<div class='tabs-outer'>
<div class='tabs-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left tabs-fauxborder-left'>
<div class='fauxborder-right tabs-fauxborder-right'></div>
<div class='region-inner tabs-inner'>
<div class='tabs section' id='crosscol' name='Cross-Column'></div>
<div class='tabs section' id='crosscol-overflow' name='Cross-Column 2'></div>
</div>
</div>
<div class='tabs-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<div class='main-outer'>
<div class='main-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left main-fauxborder-left'>
<div class='fauxborder-right main-fauxborder-right'></div>
<div class='region-inner main-inner'>
<div class='columns fauxcolumns'>
<div class='fauxcolumn-outer fauxcolumn-center-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<div class='fauxcolumn-outer fauxcolumn-left-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<div class='fauxcolumn-outer fauxcolumn-right-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<!-- corrects IE6 width calculation -->
<div class='columns-inner'>
<div class='column-center-outer'>
<div class='column-center-inner'>
<div class='main section' id='main' name='Main'><div class='widget Blog' id='Blog1'>
<div class='blog-posts hfeed'>
<div class="date-outer">
<h2 class='date-header'><span>Sunday, 1 December 2013</span></h2>
<div class="date-posts">
<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='5313404859328252510' itemprop='blogId'/>
<meta content='5614943045682456353' itemprop='postId'/>
<a name='5614943045682456353'></a>
<h3 class='post-title entry-title' itemprop='name'>
How-to set up Jira and Confluence on Fedora VM in Qubes OS
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-5614943045682456353' itemprop='description articleBody'>
This article describes how to set up <a href="https://www.atlassian.com/software/jira" target="_blank">Jira</a> 6.1.4 and <a href="https://www.atlassian.com/software/confluence" target="_blank">Confluence</a> 5.3.4 (hosted on <a href="http://tomcat.apache.org/" target="_blank">tomcat</a> 7.0.42 (running on Java OpenJDK JRE 1.7.0_45) with <a href="http://www.postgresql.org/" target="_blank">PostgreSQL</a> 9.2.5 as a database back-end and <a href="http://httpd.apache.org/" target="_blank">apache httpd</a> 2.4.6 as a reversy proxy front-end with SSL) on <a href="http://qubes-os.org/" target="_blank">Qubes OS</a> v2 Beta 2 (Fedora 18)<br />
<br />
<u>Audience:</u> Unix/Web admin who are trying to set these services up on Fedora, Fedora on Qubes or who want to get familiar with how to set-up a service on a Qubes VM.<br />
<u>Implementation time:</u> If you are an old developer and know the value of copie/paste to avoid problems, it should take you between 1 and 2 hours.<br />
<br />
<a href="https://www.atlassian.com/software/jira" target="_blank">Jira</a> and <a href="https://www.atlassian.com/software/confluence" target="_blank">Confluence</a> provide similar functionality to <a href="http://trac.edgewall.org/wiki/TracInstall" target="_blank">trac</a> (bugs/issues tracking and wiki). It is free for open source projects. You however have to pay for a licence otherwise. There is a 30 days trial licence if you want to check it out before you buy. I am using the 2x $10 starter licence for 10 users and find such investment very valuable. Moreover for this licence, all benefits are going to the Room to Read charity, which promotes literacy and gender equality in the developing world.<br />
<br />
<a href="http://qubes-os.org/" target="_blank">Qubes OS</a>
is at the time of writing, to my view, one of the most secure Linux
based desktop operating system. It can run Linux and Windows guest
virtual machines and isolate VMs, networking, usb and graphical stacks
levering on Xen hypervisor. It also leverage on a templating system to
minimize the disk footprint of VMs based on the same template. It does
not support 3D graphical operations out of the box but advanced users
can set-up a second Video card and dedicate it to one of their VM. It is aimed to be used by IT security specialist on the go but it is also a very nice fit as a home desktop that you can leverage on to host services (file share, web site, etc...) more securely while browsing the dark net or the red district at the same time on the same hardware.<br />
This blog post is discussed in the <a href="https://groups.google.com/forum/#!topic/qubes-users/2gHjwj3YRrI" target="_blank">Qubes user group</a>. <br />
<h2>
Target architecture</h2>
<h3>
Risk analysis</h3>
The only information of value is the data in the database.<br />
<br />
If Apache is compromised, The attacker would be able to impersonate any active user, and at
some point be able to retrieve all the data in the database.<br />
If
Jira or Confluence
is compromised, the credentials to the database would therefore be
compromised as they have to be readable by the application daemon. Even if encrypted with a pass-phrase provided during boot time, a valid
session is present in memory.<br />
We are therefore for now going to run Apache, Jira, Confluence and PostgreSQL in the same VM.<br />
<blockquote class="tr_bq">
<u>Note:</u> Based on the information provided in this tutorial it would however be easy to split into a three tier model Apache, Jira/Confluence, PostgreSQL with two legs (Jira/PostgreSQL and Confluence/PostgreSQL).</blockquote>
<h3>
Methodology</h3>
Qubes OS offers template VM which present its file system to other VM in read only mode and allow patching of fedora packages. We will therefore leverage as much as possible on this by using fedora packages whenever possible.<br />
In order to build and be able to test the various components as we stack them up, we will start with the far end by setting up the database, then Jira and Confluence and finally the reverse proxy which will sit in front.<br />
<h2>
Preparing the Template</h2>
<h3>
Installing PostgreSQL</h3>
Launch the terminal in the template.<br />
<ul>
<li>Click Application Menu (top left)</li>
<li>Select Template fedora-18-x64 / fedora-18-x64: Terminal</li>
</ul>
Install the PostgreSQL Server by typing in the template's Terminal:<br />
<ul>
<li>sudo yum install postgresql-server</li>
</ul>
<h3>
Installing Tomcat</h3>
Atlassian states that only Oracle
JRE is supported. I am going to take the risk of using OpenJDK instead as
I will have automatic update via fedora patches. I will also use the
Tomcat package provided by fedora for the same reasons.<br />
<blockquote class="tr_bq">
<u>Note:</u> If you want to use the Oracle JRE, do not install it in the template but in the app VM unless your are ready to patch it when required to ensure all your VMs use a patched version or if you are building a dedicated template.</blockquote>
Let's install tomcat.<br />
<ul>
<li>sudo yum install tomcat</li>
</ul>
&nbsp;In my case this installs Tomcat 7.0.42 and will use OpenJDK Runtime Environment 1.7.0_45.<br />
<br />
Let's create the Jira and Confluence user. <br />
<ul>
<li>sudo /usr/sbin/useradd -r --comment "Account to run JIRA" --shell /bin/bash jira</li>
<li>sudo /usr/sbin/useradd -r --comment "Account to run Confluence" --shell /bin/bash confluence </li>
</ul>
<h3>
Installing Apache httpd</h3>
Let's install httpd and make sure we can SSL enable it.<br />
<ul>
<li>sudo yum install httpd mod_ssl openssl</li>
</ul>
In my case this installs httpd 2.4.6<br />
<br />
For these changes to be visible to the wiki VM, shutdown the template VM.<br />
<ul>
<li>sudo halt </li>
</ul>
<h2>
Preparing the Wiki VM </h2>
<h3>
Creating a Wiki VM</h3>
In Qubes OS, this is trivial. In Qubes VM Manager:<br />
<ul>
<li>Select in the menu VM / Create AppVM</li>
<li>Give it the name wiki</li>
<li>Select the color blue</li>
<li>Launch the creation by pressing OK</li>
</ul>
<blockquote class="tr_bq">
<u>Note:</u>&nbsp; The attack surface of this VM is of medium size. However the threat is fairly small as I am planning on using this infrastructure only for personal use and will either access it within the same Qubes OS with a Disposable VM or possibly remotely after having connected to it via a reverse proxy hosted as a VM in my Qubes server with Client IP and Certificate validation and a Disposable VM Browser as a client. I have therefore used the blue color.</blockquote>
<h2>
Preparing the PostgreSQL databases</h2>
<div style="text-align: left;">
<h3>
Preparing the read-write partition </h3>
In the read-write partition, let's first prepare a set of folders on
which we will deploy our data so that it survives a
reboot.<br />
<br />
In Wiki VM's Terminal:<br />
<ul>
<li>cd /rw</li>
<li>sudo mkdir -p var/pgsql/data</li>
<li>sudo chown postgres:postgres var/pgsql/data</li>
<li>sudo chmod 700 var/pgsql/data </li>
<li>sudo mkdir -p var/pgsql/backups</li>
<li>sudo chown postgres:postgres var/pgsql/backups</li>
<li>sudo chmod 700 var/pgsql/backups</li>
</ul>
<h3>
Initializing the database</h3>
Let's initialize the database cluster.<br />
<div style="text-align: left;">
<ul>
<li>sudo su</li>
<li>rm -rf /var/lib/pgsql</li>
<li>ln -s /rw/var/pgsql /var/lib/pgsql</li>
<li>postgresql-setup initdb</li>
<li>exit </li>
</ul>
<h3>
Configuring the database cluster</h3>
Let's make sure we can connect to the database cluster.</div>
<div style="text-align: left;">
<ul>
<li>sudo su - postgres</li>
<li>vi /var/lib/pgsql/data/pg_hba.conf</li>
<li>host confluence confluence 127.0.0.1/32 md5</li>
<li>host jira jira 127.0.0.1/32 md5</li>
</ul>
</div>
<div style="text-align: left;">
Add the following lines toward the end of the file, below the IPv4 local connections.<br />
<blockquote class="tr_bq">
<u>Note:</u> If you wish to change the
port, or make the database listen to another address than the local loop
127.0.0.1, you will need to edit pgsql/data/postgresql.conf and
change the address above in pgsql/data/pg_hba.conf.</blockquote>
Once done exit from the posgres sudo session.<br />
<ul>
<li>exit </li>
</ul>
</div>
</div>
<h3>
Configuring the jira database</h3>
&nbsp;Let's create the jira database user and the database.<br />
<ul>
<li>sudo systemctl start postgresql</li>
<li>sudo -s -H -u postgres</li>
<li>/usr/bin/createuser -S -P -E jira</li>
</ul>
Enter the password for the jira database user and take note of it. Once done exit from the posgres sudo session.<br />
<ul>
<li>/usr/bin/createdb --owner jira --encoding utf8 jira</li>
</ul>
<h3>
Configuring the confluence database</h3>
Let's create the confluence database user and the database.<br />
<ul>
<li>/usr/bin/createuser -S -P -E confluence</li>
</ul>
Enter the password for the confluence database user and take note of it. Once done exit from the posgres sudo session. <br />
<ul>
<li>/usr/bin/createdb --owner confluence --encoding utf8 confluence</li>
<li>exit</li>
</ul>
<h3>
Preparing for a reboot </h3>
Let's now edit our rc.local script so that we set everything in place when the VM reboots. In Wiki VM's Terminal:<br />
<ul>
<li>sudo vi config/rc.local</li>
<li>#!/bin/bash</li>
<li>rm -rf /var/lib/pgsql</li>
<li>ln -s /rw/var/pgsql /var/lib/pgsql</li>
<li>/usr/bin/systemctl enable postgresql &amp;</li>
<li>/usr/bin/systemctl start postgresql &amp;</li>
</ul>
Let's not forget to make this file executable<br />
<ul>
<li>sudo chmod u+x config/rc.local</li>
</ul>
<h2>
</h2>
<h3>
Testing the databases</h3>
Stop the wiki VM.<br />
<ul>
<li>sudo halt</li>
</ul>
<br />
Start the VM by opening its Terminal.<br />
Let's test our databases.<br />
<ul>
<li>sudo systemctl status postgresql</li>
</ul>
This should give you a status of active (running).<br />
<br />
Try to connect to the Jira database. <br />
<ul>
<li>psql -U jira -h 127.0.0.1 -p 5432 -d jira</li>
</ul>
<blockquote class="tr_bq">
<u>Note:</u> Exit the database by typing "\q" and pressing [Enter]</blockquote>
Try to connect to the Confluence database. <br />
<ul>
<li>psql -U confluence -h 127.0.0.1 -p 5432 -d confluence</li>
</ul>
Hopefully you are like me, all set for the next stage. <br />
<h2>
Preparing the Jira Tomcat instance </h2>
<h3>
</h3>
<h3>
Preparing the read-write partition </h3>
In the read-write partition, let's first prepare a set of folders on which we will deploy our application and data so that they survive a reboot.In Wiki VM's Terminal:<br />
<ul>
<li>cd /rw</li>
<li>sudo mkdir -p opt/jira</li>
<li>sudo mkdir -p var/log/jira </li>
<li>sudo mkdir -p var/jira</li>
</ul>
<h3>
Integrating with systemd</h3>
Looking into systemd tomcat's service config
(/usr/lib/systemd/system/tomcat), it states that to run a new instance
of tomcat, we need to copy /etc/sysconfig/tomcat to /etc/sysconfig/jira
(jira being the name we want to give to this tomcat instance) and set
the variables we need. As the file will not be persisted in our Qubes
VM, let's prepare one that we will copy at boot time.<br />
<ul>
<li>sudo mkdir config/sysconfig</li>
<li>sudo vi config/sysconfig/jira</li>
<li>CATALINA_BASE="/opt/jira"</li>
<li>CATALINA_TMPDIR="/opt/jira/temp"</li>
<li>TOMCAT_USER="jira"</li>
<li>CATALINA_PID="/var/run/jira.pid"</li>
</ul>
<ul>
</ul>
<blockquote class="tr_bq">
<u>Note:</u> If you are new to linux a more natural text editor than <a href="http://www.vim.org/" target="_blank">vi</a> can be used. <a href="http://www.nano-editor.org/" target="_blank">nano</a> is a good one... replace vi with nano in all instructions. You just have to know to use [Ctrl] + [x] to exit and save your file.</blockquote>
<br />
We also have to provide a copy of /usr/lib/systemd/system/tomcat
for our service.<br />
<blockquote class="tr_bq">
<u>Note:</u> This copy needs to have SERVICE_NAME set prior to
launching the tomcat start-up script. As systemd mandate an absolute
path for the command to be executed, we are going to need to pass it via
a shell command.</blockquote>
In Wiki VM's Terminal:<br />
<ul>
<li>sudo mkdir -p config/systemd/system</li>
<li>sudo cp /usr/lib/systemd/system/tomcat.service config/systemd/system/jira.service</li>
</ul>
Let's modify the ExecStart, ExecStop, User and Group lines as follow:<br />
<ul>
<li>sudo vi config/systemd/system/jira.service</li>
<li>ExecStart=/bin/bash -c 'export SERVICE_NAME="jira"; /usr/sbin/tomcat-sysd start'</li>
<li>ExecStop=/bin/bash -c 'export SERVICE_NAME="jira"; /usr/sbin/tomcat-sysd stop'</li>
<li>User=jira</li>
<li>Group=jira</li>
</ul>
<ul>
</ul>
<ul>
</ul>
<h3>
Preparing CATALINA_BASE</h3>
Let's prepare our CATALINA_BASE (/opt/jira), but we first need our jira account set-up.<br />
<ul>
<li>sudo chown jira:root var/log/jira</li>
<li>sudo chmod 770 var/log/jira</li>
<li>sudo chown jira:root var/jira</li>
<li>sudo chmod 770 var/jira</li>
<li>cd opt/jira</li>
<li>sudo mkdir -p conf/Catalina/localhost logs temp webapps work</li>
<li>sudo chown jira logs temp work</li>
<li>sudo chmod 770 logs temp work</li>
</ul>
<br />
<h3>
</h3>
<h3>
Preparing for a reboot </h3>
Let's now edit our rc.local script so that we set everything in place when the VM reboots.<br />
<ul>
<li>cd /rw</li>
<li>sudo vi config/rc.local</li>
</ul>
At the end of the file add the following:<br />
<ul>
<li>rmdir /opt</li>
<li>ln -s /rw/opt /opt</li>
<li>ln -s /rw/var/jira /var/jira</li>
<li>ln -s /rw/var/log/jira /var/log/jira</li>
<li>cp /rw/config/sysconfig/jira /etc/sysconfig/</li>
<li>cp /rw/config/systemd/system/jira.service /usr/lib/systemd/system/</li>
<li>touch /var/run/jira.pid</li>
<li>chown jira:jira /var/run/jira.pid</li>
<li>/usr/bin/systemctl enable jira &amp;</li>
<li>/usr/bin/systemctl start jira &amp;</li>
</ul>
<h2>
Preparing the Confluence Tomcat instance </h2>
<h3>
Preparing the read-write partition </h3>
In the read-write partition,
let's first prepare a set of folders on which we will deploy our
application and data so that they survive a reboot.In Wiki VM's Terminal:<br />
<ul>
<li>sudo mkdir -p opt/confluence</li>
<li>sudo mkdir -p var/log/confluence </li>
<li>sudo mkdir -p var/confluence</li>
</ul>
<h3>
Integrating with systemd</h3>
Looking into systemd tomcat's service config
(/usr/lib/systemd/system/tomcat), it states that to run a new instance
of tomcat, we need to copy /etc/sysconfig/tomcat to /etc/sysconfig/confluence
(confluence being the name we want to give to this tomcat instance) and set
the variables we need. As the file will not be persisted in our Qubes
VM, let's prepare one that we will copy at boot time.<br />
<ul>
</ul>
<ul>
<li>sudo vi config/sysconfig/confluence</li>
<li>CATALINA_BASE="/opt/confluence"</li>
<li>CATALINA_TMPDIR="/opt/confluence/temp"</li>
<li>TOMCAT_USER="confluence"</li>
<li>CATALINA_PID="/var/run/confluence.pid"</li>
</ul>
<ul>
</ul>
We also have to provide a copy of /usr/lib/systemd/system/tomcat
for our service.<br />
<blockquote class="tr_bq">
<u>Note:</u> This copy needs to have SERVICE_NAME set prior to
launching the tomcat start-up script. As systemd mandate an absolute
path for the command to be executed, we are going to need to pass it via
a shell command.</blockquote>
In Wiki VM's Terminal:<br />
<ul>
<li>sudo cp config/systemd/system/jira.service config/systemd/system/confluence.service</li>
</ul>
Let's modify the ExecStart, ExecStop, User and Group lines as follow:<br />
<ul>
</ul>
<ul>
<li>sudo vi config/systemd/system/confluence.service</li>
<li>ExecStart=/bin/bash -c 'export SERVICE_NAME="confluence"; /usr/sbin/tomcat-sysd start'</li>
<li>ExecStop=/bin/bash -c 'export SERVICE_NAME="confluence"; /usr/sbin/tomcat-sysd stop'</li>
<li>User=confluence</li>
<li>Group=confluence</li>
</ul>
<ul>
</ul>
<h3>
Preparing CATALINA_BASE</h3>
Let's prepare our CATALINA_BASE (/opt/confluence), but we first need our confluence account set-up.<br />
<ul>
<li>sudo chown confluence:root var/log/confluence</li>
<li>sudo chmod 770 var/log/confluence</li>
<li>sudo chown confluence:root var/confluence</li>
<li>sudo chmod 770 var/confluence</li>
<li>cd opt/confluence</li>
<li>sudo mkdir -p conf/Catalina/localhost logs temp webapps work</li>
<li>sudo chown confluence logs temp work</li>
<li>sudo chmod 770 logs temp work</li>
</ul>
<h3>
Preparing for a reboot </h3>
Let's now edit our rc.local script so that we set everything in place when the VM reboots.<br />
<ul>
<li>cd /rw</li>
<li>sudo vi config/rc.local</li>
</ul>
At the end of the file add the following:<br />
<ul>
<li>ln -s /rw/var/confluence /var/confluence</li>
<li>ln -s /rw/var/log/confluence /var/log/confluence</li>
<li>cp /rw/config/sysconfig/confluence /etc/sysconfig/</li>
<li>cp /rw/config/systemd/system/confluence.service /usr/lib/systemd/system/</li>
<li>touch /var/run/confluence.pid</li>
<li>chown confluence:confluence /var/run/confluence.pid</li>
<li>/usr/bin/systemctl enable confluence &amp;</li>
<li>/usr/bin/systemctl start confluence &amp;</li>
</ul>
<h2>
Installing Jira</h2>
We have 2 potential way to proceed. Go with the WAR distribution and configure Tomcat based on Fedora basic settings or go with the standalone distribution and modify it to use our tomcat instance. I am going to fo with the second option as the editor (Atlassian) has already done a good job at configuring it, particularly in such a simple set up as the one I want to do.<br />
<blockquote class="tr_bq">
<u>Note:</u> In the background I
have looked at the differences between the two. I have used a tool to
remove html comments called <a href="http://xmlstar.sourceforge.net/" target="_blank">XMLStarlet</a>
using the command "xmlstarlet ed -d '//comment()' file.xml &gt; file-clean.xml" and a very good graphical diff program called <a href="http://meldmerge.org/" target="_blank">meld</a>. The Atlassian files are as expected better one to use as a starting point with a few exceptions like conf/web.xml (which contains more recent mime types).</blockquote>
<h3>
Downloading the standalone distribution</h3>
Go to&nbsp;<a href="https://www.atlassian.com/software/jira/download" target="_blank">Atlassian Jira download page</a><br />
<ul>
<li>Toward the bottom of the page toggle the "All JIRA Download Options"</li>
<li>Download the Linux tar.gz file</li>
</ul>
<h3>
Copying the tar.gz file to Wiki VM</h3>
This&nbsp; is documented in the <a href="http://qubes-os.org/trac/wiki/UserDoc" target="_blank">Qubes OS user documentation page</a>.<br />
<ul>
<li>In Firefox menu select Tools/Downloads.</li>
<li>Right-Click on atlassian-jira-&lt;version&gt;.tar.gz and select Open Containing Folder.</li>
<li>Right-Click on the file and select Scripts / Copy to other AppVM.</li>
<li>input wiki as the destination domain name.</li>
<li>Allow the transfer to happen by clicking Yes</li>
</ul>
<h3>
Install Jira in the read-write partition</h3>
Let's expand our Jira distribution. <br />
<ul>
<li>cd</li>
<li>tar xzvf QubesIncoming/disp&lt;X&gt;/atlassian-jira-&lt;version&gt;.tar.gz</li>
<li>cd atlassian-jira-&lt;version&gt;-standalone</li>
</ul>
Let's move into place the things we want.<br />
<ul>
<li>sudo mv conf/* /rw/opt/jira/conf</li>
<li>sudo chown -R root:root /rw/opt/jira/conf</li>
<li>sudo mv atlassian-jira /rw/opt/jira</li>
<li>sudo chown -R root:root /rw/opt/jira/atlassian-jira</li>
<li>sudo mv lib /rw/opt/jira</li>
<li>sudo chown -R root:root /rw/opt/jira/lib</li>
<li>sudo mv external-source /rw/opt/jira</li>
<li>sudo chown -R root:root /rw/opt/jira/external-source</li>
<li>sudo mv licenses /rw/opt/jira</li>
<li>sudo chown -R root:root /rw/opt/jira/licenses</li>
<li>sudo mv tomcat-docs /rw/opt/jira</li>
<li>sudo chown -R root:root /rw/opt/jira/tomcat-docs </li>
</ul>
Let's make sure all parameters are past to the JVM. You can review this which is what was in bin/setenv.sh which builds up JAVA_OPTS<br />
<ul>
<li>sudo vi /rw/config/sysconfig/jira</li>
</ul>
Add the following at the begining of the file: <br />
<ul>
<li>#</li>
<li>#&nbsp; Occasionally Atlassian Support may recommend that you set some specific JVM a rguments.&nbsp; You can use this variable below to do that.</li>
<li>#</li>
<li>JVM_SUPPORT_RECOMMENDED_ARGS=""</li>
<li>&nbsp;</li>
<li>#</li>
<li># The following 2 settings control the minimum and maximum given to the JIRA Jav a virtual machine.&nbsp; In larger JIRA instances, the maximum amount will need to be increased.</li>
<li>#</li>
<li>JVM_MINIMUM_MEMORY="384m"</li>
<li>JVM_MAXIMUM_MEMORY="768m"</li>
<li>&nbsp;</li>
<li>#</li>
<li># The following are the required arguments for JIRA.</li>
<li>#</li>
<li>JVM_REQUIRED_ARGS="-Djava.awt.headless=true -Datlassian.standalone=JIRA -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Dmail.mime.decodeparameters=true -Dorg.dom4j.factory=com.atlassian.core.xml.InterningDocumentFactory"</li>
<li>&nbsp;</li>
<li># Perm Gen size needs to be increased if encountering OutOfMemoryError: PermGen problems. Specifying PermGen size is not valid on IBM JDKs</li>
<li>JIRA_MAX_PERM_SIZE=384m</li>
</ul>
&nbsp;You should have then this...<br />
<ul>
<li>CATALINA_BASE="/opt/jira"</li>
<li>CATALINA_TMPDIR="/opt/jira/temp"</li>
<li>TOMCAT_USER="jira"</li>
<li>CATALINA_PID="/var/run/jira.pid"</li>
</ul>
Add the following at the end: <br />
<ul>
<li>#-----------------------------------------------------------------------------------</li>
<li>#</li>
<li># In general don't make changes below here</li>
<li>#</li>
<li>#-----------------------------------------------------------------------------------</li>
<li>JVM_EXTRA_ARGS="-XX:+PrintGCDateStamps -XX:-OmitStackTraceInFastThrow"</li>
<li>&nbsp;</li>
<li>JAVA_OPTS="-XX:MaxPermSize=${JIRA_MAX_PERM_SIZE} -Xms${JVM_MINIMUM_MEMORY} -Xmx${JVM_MAXIMUM_MEMORY} ${JAVA_OPTS} ${JVM_REQUIRED_ARGS} ${DISABLE_NOTIFICATIONS} ${JVM_SUPPORT_RECOMMENDED_ARGS} ${JVM_EXTRA_ARGS}</li>
</ul>
&nbsp;OK, let's clean the dust up.<br />
<ul>
<li>cd</li>
<li>rm -rf atlassian-jira-&lt;version&gt;-standalone</li>
</ul>
<ul>
</ul>
<h3>
Set the Jira Home directory</h3>
Let's set our JIRA Home Directory.<br />
<ul>
<li>sudo vi /rw/opt/jira/atlassian-jira/WEB-INF/classes/jira-application.properties</li>
<li>jira.home = /var/jira</li>
</ul>
<h3>
Fix the context</h3>
There is a small bug (or relaxed configuration as it is a standalone
distrib) in the Atlassian package as the server.xml is referring to
catalina.home instead of catalina.base.<br />
<ul>
<li>sudo vi /rw/opt/jira/conf/server.xml</li>
<li>replace the docBase value from ${catalina.home} to ${catalina.base}</li>
</ul>
<u>Note:</u> While you are at it, you may want to also change the ports the server is listening on.<br />
<h3>
Prepare Jira for reverse proxy aware responses</h3>
<h4>
Set the context path </h4>
<ul>
<li>sudo vi /rw/opt/jira/conf/server.xml</li>
</ul>
Replace the following line: <br />
<ul>
<li>&lt;Context path="" docBase="${catalina.base}/atlassian-jira" reloadable="false" useHttpOnly="true"&gt;</li>
</ul>
With: <br />
<ul>
<li>&lt;Context path="/jira" docBase="${catalina.base}/atlassian-jira" reloadable="false" useHttpOnly="true"&gt;</li>
</ul>
<h4>
Set the URL for redirection</h4>
<ul>
<li>&nbsp;sudo vi /rw/opt/jira/conf/server.xml</li>
</ul>
Replace the following line:<br />
<ul>
<li>&lt;Connector port="8080" maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false" maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443" acceptCount="100" disableUploadTimeout="true"/&gt;</li>
</ul>
With:<br />
<ul>
<li>&nbsp;&lt;Connector port="8080" maxThreads="150" minSpareThreads="25" connectionTimeout="20000" enableLookups="false" maxHttpHeaderSize="8192" protocol="HTTP/1.1" useBodyEncodingForURI="true" redirectPort="8443" acceptCount="100" disableUploadTimeout="true" <u>proxyName="www.example.com" proxyPort="443" scheme="https</u>"/&gt;</li>
</ul>
Which set the name of the external URL, its port and protocol so that content generated by Tomcat contains links in the form https://www.example.com/&lt;blah&gt;. Obviously replace www.example.com with your server name.<br />
<h2>
Installing Confluence</h2>
<h3>
Downloading the standalone distribution</h3>
Go to&nbsp;<a href="https://www.atlassian.com/software/confluence/download" target="_blank">Atlassian Confluence download page</a><br />
<ul>
<li>Download the Standalone Linux tar.gz file</li>
</ul>
<h3>
Copying the tar.gz file to Wiki VM</h3>
This&nbsp; is documented in the <a href="http://qubes-os.org/trac/wiki/UserDoc" target="_blank">Qubes OS user documentation page</a>.<br />
<ul>
<li>In Firefox menu select Tools/Downloads.</li>
<li>Right-Click on atlassian-confluence-&lt;version&gt;.tar.gz and select Open Containing Folder.</li>
<li>Right-Click on the file and select Scripts / Copy to other AppVM.</li>
<li>input wiki as the destination domain name.</li>
<li>Allow the transfer to happen by clicking Yes</li>
</ul>
<h3>
Install Confluence in the read-write partition</h3>
Let's expand our Confluence distribution. <br />
<ul>
<li>cd</li>
<li>tar xzvf QubesIncoming/disp&lt;X&gt;/atlassian-confluence-&lt;version&gt;.tar.gz</li>
<li>cd atlassian-confluence-&lt;version&gt;</li>
</ul>
Let's move into place the things we want.<br />
<ul>
<li>sudo mv conf/* /rw/opt/confluence/conf</li>
<li>sudo chown -R root:root /rw/opt/confluence/conf</li>
<li>sudo mv confluence /rw/opt/confluence</li>
<li>sudo chown -R root:root /rw/opt/confluence/confluence</li>
<li>sudo mv lib /rw/opt/confluence</li>
<li>sudo chown -R root:root /rw/opt/confluence/lib</li>
<li>sudo mv licenses /rw/opt/confluence</li>
<li>sudo chown -R root:root /rw/opt/confluence/licenses</li>
</ul>
Let's make sure all parameters are past to the JVM. You can review this
which is what was in bin/setenv.sh which builds up JAVA_OPTS<br />
<ul>
<li>&nbsp;sudo vi /rw/config/sysconfig/confluence</li>
</ul>
Add the following at the end of the file:<br />
<ul>
<li>JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxPermSize=256m $JAVA_OPTS -Djava.awt.headless=true "</li>
</ul>
And clean the dust up.<br />
<ul>
<li>cd</li>
<li>rm -rf atlassian-confluence-&lt;version&gt;</li>
</ul>
<h3>
Set the Confluence Home directory</h3>
Let's set our Confluence Home Directory.<br />
<ul>
<li>sudo vi /rw/opt/confluence/confluence/WEB-INF/classes/confluence-init.properties</li>
<li>confluence.home = /var/confluence</li>
</ul>
<h3>
Prepare Confluence for reverse proxy aware responses</h3>
<h4>
Set the context path </h4>
<ul>
<li>sudo vi /rw/opt/confluence/conf/server.xml</li>
</ul>
Replace the following line: <br />
<ul>
<li>&lt;Context path="" docBase="../confluence" debug="0" reloadable="false" useHttpOnly="true"&gt;</li>
</ul>
With: <br />
<ul>
<li>&lt;Context path="/confluence" docBase="../confluence" debug="0" reloadable="false" useHttpOnly="true"&gt;</li>
</ul>
<h4>
Set the URL for redirection</h4>
<ul>
<li>&nbsp;sudo vi /rw/opt/jira/conf/server.xml</li>
</ul>
Replace the following line:<br />
<ul>
<li>&lt;Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8090" minProcessors="5" maxProcessors="75" enableLookups="false" redirectPort="8443" acceptCount="10" debug="0" connectionTimeout="20000" useURIValidationHack="false" URIEncoding="UTF-8"/&gt;</li>
</ul>
With:<br />
<ul>
<li>&lt;Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8090" minProcessors="5" maxProcessors="75" enableLookups="false" redirectPort="8443" acceptCount="10" debug="0" connectionTimeout="20000" useURIValidationHack="false" URIEncoding="UTF-8" <u>proxyName="www.example.com" proxyPort="443" scheme="https"</u>/&gt;</li>
</ul>
Which
set the name of the external URL, its port and protocol so that content
generated by Tomcat contains links in the form
https://www.example.com/&lt;blah&gt;. Obviously replace www.example.com
with your server name.<br />
<div style="text-align: left;">
<h2>
Preparing the reverse proxy</h2>
In order to present both applications under the same web server and to map the ports to a default port, we are going to use <a href="http://httpd.apache.org/docs/2.4/mod/mod_proxy.html" target="_blank">mod_proxy </a>and <a href="http://httpd.apache.org/docs/2.4/mod/mod_proxy_http.html" target="_blank">mod_proxy_http</a>. For more information on how to set-up a more complex set-up you may want to look at the <a href="https://confluence.atlassian.com/display/DOC/Using+Apache+with+mod_proxy" target="_blank">Atlassian page</a>. We will not use <a href="http://httpd.apache.org/docs/2.4/mod/mod_proxy_connect.html" target="_blank">mod_proxy_connect</a> as we will decrypt the connection on our reverse proxy and forward the traffic unencrypted to tomcat. <br />
<blockquote class="tr_bq">
<u>Note:</u> If you are planning on hosting other web applications than Jira and Confluence, you may prefer to host the reverse proxy in a dedicated VM which will forward traffic to different web application back end VMs.<br />
<u>Note2:</u> This set-up does not provide caching due to the small expected number of users and the increased attack surface.</blockquote>
<h3>
</h3>
<h3>
Preparing the read-write partition </h3>
In the read-write partition,
let's first prepare a set of folders on which we will deploy our
application and data so that they survive a reboot.In Wiki VM's Terminal:<br />
<ul>
<li>cd /rw</li>
<li>sudo mkdir -p config/httpd/conf</li>
<li>sudo mkdir -p config/httpd/conf.d</li>
<li>sudo mkdir -p config/httpd/conf.modules.d </li>
</ul>
<h3>
Configuring httpd</h3>
Let's prepare our httpd.conf file.<br />
<ul>
<li>sudo cp /etc/httpd/conf/httpd.conf config/httpd/conf </li>
<li>sudo vi config/httpd/conf/httpd.conf</li>
</ul>
</div>
<div style="text-align: left;">
Comment out the following line:<br />
<ul>
<li>Listen 80 </li>
</ul>
Change the following line:<br />
<ul>
<li>ServerAdmin root@localhost</li>
</ul>
Add the following lines:</div>
<div style="text-align: left;">
<ul>
<li>ServerName www.example.com</li>
</ul>
The proxy load module file /etc/httpd/conf.modules.d/00-proxy.conf is already loading everything.Let's prepare the associated conf file: <br />
<ul>
</ul>
<ul>
<li>sudo vi config/httpd/conf.d/00-proxy.conf</li>
<li>ProxyRequests Off</li>
<li>ProxyPreserveHost On</li>
<li>&lt;Proxy *&gt;</li>
<li>&nbsp;&nbsp;&nbsp; Order deny,allow</li>
<li>&nbsp;&nbsp;&nbsp; Allow from all</li>
<li>&lt;/Proxy&gt;</li>
<li>&nbsp;</li>
<li>&lt;Location /confluence&gt;</li>
<li>&nbsp;&nbsp;&nbsp; Order allow,deny</li>
<li>&nbsp;&nbsp;&nbsp; Allow from all</li>
<li>&nbsp;&nbsp;&nbsp; ProxyPass http://127.0.0.1:8090/confluence</li>
<li>&nbsp;&nbsp;&nbsp; ProxyPassReverse http://127.0.0.1:8090/confluence</li>
<li>&nbsp;&nbsp;&nbsp; SetEnv proxy-sendchunks 1</li>
<li>&nbsp;&nbsp;&nbsp; SetEnv proxy-interim-response RFC</li>
<li>&nbsp;&nbsp;&nbsp; SetEnv proxy-initial-not-pooled 1</li>
<li>&lt;/Location&gt;</li>
<li>&nbsp;</li>
<li>&lt;Location /jira&gt;</li>
<li>&nbsp;&nbsp;&nbsp; Order allow,deny</li>
<li>&nbsp;&nbsp;&nbsp; Allow from all</li>
<li>&nbsp;&nbsp;&nbsp; ProxyPass http://127.0.0.1:8080/jira</li>
<li>&nbsp;&nbsp;&nbsp; ProxyPassReverse http://127.0.0.1:8080/jira</li>
<li>&nbsp;&nbsp;&nbsp; SetEnv proxy-sendchunks 1</li>
<li>&nbsp;&nbsp;&nbsp; SetEnv proxy-interim-response RFC</li>
<li>&nbsp;&nbsp;&nbsp; SetEnv proxy-initial-not-pooled 1</li>
<li>&lt;/Location&gt;</li>
</ul>
</div>
<div style="text-align: left;">
<h3>
Configuring openssl</h3>
Let's start by adjusting the SSL configuration file.<br />
<ul>
<li>sudo cp /etc/httpd/conf.d/ssl.conf config/httpd/conf.d</li>
<li>sudo vi config/httpd/conf.d/ssl.conf</li>
<li>SSLProtocol TLSv1.2</li>
<li>SSLCipherSuite ECDHE-ECDSA-AES128-SHA256:DHE-RSA-AES128-SHA</li>
<li>SSLHonorCipherOrder on</li>
</ul>
To enable TLSv1.2 in Firefox:<br />
<ul>
<li>browse to&nbsp;"about:config"</li>
<li>accept the risk</li>
<li>search for tls and set security.tls.version.max=3 </li>
</ul>
<br />
<div style="text-align: center;">
<span style="background-color: #ffd966;">/!\ Under construction /!\</span><span style="background-color: #ffd966;">|!| <u>Note:</u> Road blocked.</span><span style="background-color: #ffd966;">|!|</span><br />
<span style="background-color: #ffd966;">\!/&nbsp; &nbsp; &nbsp; After this sign &nbsp; &nbsp; \!/</span></div>
<br />
Let's generate our private key. I will not get it signed as I do not have a fixed IP address and do not want to trust Certificates Authorities.<br />
<ul>
<li>sudo yum install crypto-utils</li>
<li>genkey www.example.com</li>
</ul>
<blockquote class="tr_bq">
<u>Note:</u> I have used a 4096bits key without certificate request or passphrase.<br />
<u>Note2:</u> There is a bug in fedora broken by upstream package for self signed certificate (as reliant at the moment on md5).</blockquote>
<br />
<div style="text-align: center;">
<span style="background-color: #ffd966;">/!\ Under construction /!\</span><span style="background-color: #ffd966;">|!| <u>Note:</u> Road blocked.</span><span style="background-color: #ffd966;">|!|</span><br />
<span style="background-color: #ffd966;">\!/&nbsp; &nbsp; &nbsp; Before this sign &nbsp; &nbsp; \!/</span></div>
<br />
<h3>
Preparing for a reboot </h3>
Let's now edit our rc.local script so that we set everything in place when the VM reboots.<br />
<ul>
<li>sudo vi config/rc.local</li>
</ul>
At the end of the file add the following:<br />
<ul>
<li>mv /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.origin</li>
<li>cp /rw/config/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf</li>
<li>cp /rw/config/httpd/conf.d/00-proxy.conf /etc/httpd/conf.d</li>
<li>cp /rw/config/httpd/conf.d/ssl.conf /etc/httpd/conf.d</li>
<li>/usr/bin/systemctl enable httpd &amp;</li>
<li>/usr/bin/systemctl start httpd &amp;</li>
</ul>
If you want to be able to access Jira and Confluence from another browser than the wiki VM one, add the following line where 10.137.2.x is the wiki VM's IPAddress of eth0 (ifconfig | grep -i ast) and y.y.y.y/z is the subnet you want to allow in.<br />
<ul>
<li>/usr/sbin/iptables -I INPUT 5 -j ACCEPT -d 10.137.2.x -s y.y.y.y/z -p tcp --dport 443 -m state --state NEW</li>
</ul>
You need to have www.example.com configured in your DNS. If you prefer to do that later you can add the following line to allow you to continue the configuration via the wiki VM firewall without the DNS entry set.</div>
<div style="text-align: left;">
<ul>
<li>echo 10.137.2.x www.example.com &gt;&gt; /etc/hosts</li>
</ul>
<blockquote class="tr_bq">
<u>Note:</u> becareful to have two superior sign so that the line is appended to the file. </blockquote>
<h3>
Testing the httpd service</h3>
Stop the wiki VM.<br />
<ul>
<li>sudo halt</li>
</ul>
Start the VM by opening its Firefox browser and browse to:<br />
<ul>
<li>https://www.example.com</li>
</ul>
You should get a warning that "This Connection is Untrusted". This is because we have a self signed certificate.<br />
<ul>
<li>Click on I Understand the Risks</li>
<li>Add Exception...</li>
<li>Confirm Security Exception... </li>
</ul>
You should see the Fedora Apache test page.<br />
<blockquote class="tr_bq">
<u>Note:</u> If you get a "Secure Connection Failed", remember that you have to enable TLSv1.2 in Firefox as mentioned above.</blockquote>
<h3>
Troubleshooting httpd</h3>
</div>
<div style="text-align: left;">
If you have issues. Troubleshoot meticulously. Let's first do very basic check on the server side. <br />
<h4>
Apache httpd service is up</h4>
Check the service is started:<br />
<ul>
<li>sudo systemctl status httpd </li>
</ul>
<h4>
Apache httpd service is listening on the right port</h4>
Check the service is listening on the right port (443)<br />
<ul>
<li>netstat -an | grep LIST | grep -v STREAM </li>
</ul>
<h4>
Browser proxy settings</h4>
Your browser will use your browser proxy settings and either go direct or via proxy.<br />
<h4>
DNS resolution</h4>
If the browser is going via a proxy, the proxy will do the dns resolution. otherwise, the first thing your browser does is a dns query to the name you entered in the browser destination bar.<br />
<br />
Make sure you can resolve this name using a command line toolsuch as nslookup or dig.<br />
<br />
If it can't check you /etc/hosts file then your /etc/resolv.conf file where your dns server is defined.<br />
<h4>
TCP Connection </h4>
The next thing your browser (or proxy) will do is establish a TCP connection on port 443.This should give you a status of active (running).<br />
<br />
Make sure you can connect over TCP to the web server by issuing telnet 10.137.2.&lt;x&gt; 443. you should get a promt. If you don't, you can install a tool such as tcptraceroute to help identify where routing is broken or where a firewall is in the way.<br />
<h4>
SSL Handshake </h4>
If you have gone this far you should be OK unless there is a mismatch between the Protocol and Cipher supported by the web server and your browser. You can check the protocols you browser support by going to this <a href="https://cc.dcsec.uni-hannover.de/" target="_blank">Hannover's university web site</a>.<br />
If you manage to connect you can view which cipher suite you used by looking in the httpd logs:<br />
<ul>
<li>sudo su</li>
<li>tail /var/log/httpd/ssl_request_log</li>
<li>exit </li>
</ul>
<br />
<h3>
Testing the Jira and Confluence tomcat instances</h3>
Browse to Jira and Confluence:<br />
<ul>
<li>https://www.example.com/jira</li>
<li>https://www.example.com/confluence </li>
</ul>
After a little time you should see the Jira Welcome page and the Confluence Setup Wizard page.<br />
<h3>
Troubleshooting Jira and Confluence tomcat instances</h3>
<h4>
Jira tomcat instance is up</h4>
Check the service is started:<br />
<ul>
<li>sudo systemctl status jira&nbsp;</li>
</ul>
In case of issues check the logs:</div>
<div style="text-align: left;">
<ul>
<li>sudo cat /opt/jira/logs/catalina.out </li>
</ul>
<h4>
Jira tomcat instance is visible through the reverse proxy</h4>
Check that your request is hitting httpd:<br />
<ul>
<li>sudo su</li>
<li>tail /var/log/httpd/ssl_request_log</li>
<li>tail /var/log/httpd/ssl_access_log</li>
<li>tail /var/log/httpd/ssh_error_log</li>
<li>exit&nbsp;</li>
</ul>
Check that your request is hitting Jira tomcat instance:<br />
<ul>
<li>sudo su</li>
<li>tail /opt/jira/logs/access_log.&lt;date&gt;</li>
<li>exit </li>
</ul>
The first you should look for is a 302 response for /jira redirecting you.<br />
Which should therefore be followed by another 302 response for /jira/ redirecting you again.<br />
Which should then be followed by a 200 response for /jira/secure/SetupDatabase!default.jspa.<br />
<br />
If you are missing the 302 to /jira/ you may have an incorrect Connector set-up in /opt/jira/conf/server.xml. Verify your proxyName, proxyPort and scheme values. They should be so that whatever the server is sending to the client allows the client to connect back.<br />
<h2>
&nbsp;Configuring Jira and Confluence </h2>
</div>
<div style="text-align: left;">
<h3>
Configuring Jira</h3>
Open the wiki VM's Firefox browser and browse to:<br />
<ul>
<li>https://www.example.com/jira</li>
<li>Select the server Language.</li>
<li>Select My Own Database as the Database Connection</li>
<li>Select PostgreSQL as the Database Type</li>
<li>Input 127.0.0.1 as the Hostname</li>
<li>Input 5432 as the Port</li>
<li>Input jira as the Database</li>
<li>Input jira as the Username</li>
<li>Input the jira's database password as Password</li>
<li>Input public as the Schema</li>
<li>Click on Test Connection</li>
<li>Click on Next</li>
</ul>
It will take some time (a couple of minutes for me) for the database and Jira to be set-up, be patient.<br />
<ul>
<li>Input an Application Title</li>
<li>Select the Mode</li>
<li>Verify the Base URL (https://www.example.com/jira)</li>
</ul>
<u>Note:</u> I recommend you get the 10 users licences. The trial licence is for several hundreds of users, I suspect there is no issue in going for the 10 users licences later, but I haven't tested this.</div>
<div style="text-align: left;">
<ul>
<li>Select the I have a licence option</li>
</ul>
Open a Disposable VM Firefox Browser and go to&nbsp;<a href="https://my.atlassian.com/" target="_blank">https://my.atlassian.com/</a> to retrive it.</div>
<div style="text-align: left;">
<ul>
<li>Copy the licence from the disposable VM to the wiki VM browser.</li>
</ul>
After some time you will be prompted to enter the details of the administrator account.</div>
<div style="text-align: left;">
<h3>
Configuring Confluence</h3>
Open the wiki VM's Firefox browser and browse to:<br />
<ul>
<li>https://www.example.com/confluence</li>
<li>Copy the licence from the disposable VM to the wiki VM browser.</li>
<li>Select the external database option</li>
<li>select the JDBC connector option</li>
</ul>
Setup the Database <br />
<ul>
<li>&nbsp;Verify org.postsgresql.Driver is the Driver Class Name</li>
<li>Verify jdbc:postgresql://localhost:5432/confluence is the Database URL</li>
<li>Input confluence as the User Name</li>
<li>Input the confluence's database password as the Password</li>
<li>Click Next</li>
</ul>
</div>
<br />
<ul>
</ul>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://plus.google.com/108291894852746097453' itemprop='url'/>
<a class='g-profile' href='https://plus.google.com/108291894852746097453' rel='author' title='author profile'>
<span itemprop='name'>Alex Dubois</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='http://bowabos.blogspot.com/2013/12/how-to-set-up-jira-and-confluence-on.html' itemprop='url'/>
<a class='timestamp-link' href='how-to-set-up-jira-and-confluence-on.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2013-12-01T23:39:00Z'>23:39</abbr></a>
</span>
<span class='reaction-buttons'>
</span>
<span class='post-comment-link'>
</span>
<span class='post-backlinks post-comment-link'>
</span>
<span class='post-icons'>
<span class='item-control blog-admin pid-983056863'>
<a href='https://www.blogger.com/post-edit.g?blogID=5313404859328252510&postID=5614943045682456353&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='../../../img2.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='https://www.blogger.com/share-post.g?blogID=5313404859328252510&postID=5614943045682456353&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='https://www.blogger.com/share-post.g?blogID=5313404859328252510&postID=5614943045682456353&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='https://www.blogger.com/share-post.g?blogID=5313404859328252510&postID=5614943045682456353&target=twitter' target='_blank' title='Share to Twitter'><span class='share-button-link-text'>Share to Twitter</span></a><a class='goog-inline-block share-button sb-facebook' href='https://www.blogger.com/share-post.g?blogID=5313404859328252510&postID=5614943045682456353&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><a class='goog-inline-block share-button sb-pinterest' href='https://www.blogger.com/share-post.g?blogID=5313404859328252510&postID=5614943045682456353&target=pinterest' target='_blank' title='Share to Pinterest'><span class='share-button-link-text'>Share to Pinterest</span></a><div class='goog-inline-block google-plus-share-container'><g:plusone source='blogger:blog:plusone' href='http://bowabos.blogspot.com/2013/12/how-to-set-up-jira-and-confluence-on.html' size='medium' width='300' annotation='inline'/></div>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
Labels:
<a href='http://bowabos.blogspot.co.uk/search/label/Confluence' rel='tag'>Confluence</a>,
<a href='http://bowabos.blogspot.co.uk/search/label/Fedora' rel='tag'>Fedora</a>,
<a href='http://bowabos.blogspot.co.uk/search/label/Jira' rel='tag'>Jira</a>,
<a href='http://bowabos.blogspot.co.uk/search/label/Qubes%20OS' rel='tag'>Qubes OS</a>,
<a href='http://bowabos.blogspot.co.uk/search/label/Tomcat' rel='tag'>Tomcat</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
<div class='comments' id='comments'>
<a name='comments'></a>
<h4>No comments:</h4>
<div id='Blog1_comments-block-wrapper'>
<dl class='avatar-comment-indent' id='comments-block'>
</dl>
</div>
<p class='comment-footer'>
<div class='comment-form'>
<a name='comment-form'></a>
<h4 id='comment-post-message'>Post a Comment</h4>
<p>
</p>
<a href='https://www.blogger.com/comment-iframe.g?blogID=5313404859328252510&postID=5614943045682456353' id='comment-editor-src'></a>
<iframe allowtransparency='true' class='blogger-iframe-colorize blogger-comment-from-post' frameborder='0' height='410' id='comment-editor' name='comment-editor' src='how-to-set-up-jira-and-confluence-on.html' width='100%'></iframe>
<script type="text/javascript" src="../../../www.blogger.com/static/v1/jsbin/2443413180-comment_from_post_iframe.js"></script>
<script type='text/javascript'>
BLOG_CMT_createIframe('https://www.blogger.com/rpc_relay.html');
</script>
</div>
</p>
<div id='backlinks-container'>
<div id='Blog1_backlinks-container'>
</div>
</div>
</div>
</div>
</div></div>
</div>
<div class='blog-pager' id='blog-pager'>
<span id='blog-pager-older-link'>
<a class='blog-pager-older-link' href='http://bowabos.blogspot.co.uk/2013/11/how-to-set-up-dnscrypt-proxy-on-qubes-os.html' id='Blog1_blog-pager-older-link' title='Older Post'>Older Post</a>
</span>
<a class='home-link' href='http://bowabos.blogspot.co.uk/'>Home</a>
</div>
<div class='clear'></div>
<div class='post-feeds'>
<div class='feed-links'>
Subscribe to:
<a class='feed-link' href='http://bowabos.blogspot.com/feeds/5614943045682456353/comments/default' target='_blank' type='application/atom+xml'>Post Comments (Atom)</a>
</div>
</div>
<script type="text/javascript">window.___gcfg = {'lang': 'en_GB'};</script>
</div></div>
</div>
</div>
<div class='column-left-outer'>
<div class='column-left-inner'>
<aside>
</aside>
</div>
</div>
<div class='column-right-outer'>
<div class='column-right-inner'>
<aside>
<div class='sidebar section' id='sidebar-right-1'><div class='widget LinkList' id='LinkList1'>
<h2>Blogs</h2>
<div class='widget-content'>
<ul>
<li><a href='http://http://theinvisiblethings.blogspot.co.uk/'>Joanna Rutkowska's blog</a></li>
<li><a href='http://http://homakov.blogspot.co.uk'>Egor Homakov's blog</a></li>
</ul>
<div class='clear'></div>
<span class='widget-item-control'>
<span class='item-control blog-admin'>
<a class='quickedit' href='http://www.blogger.com/rearrange?blogID=5313404859328252510&amp;widgetType=LinkList&amp;widgetId=LinkList1&amp;action=editWidget&amp;sectionId=sidebar-right-1' onclick='return _WidgetManager._PopupConfig(document.getElementById("LinkList1"));' target='configLinkList1' title='Edit'>
<img alt='' height='18' src='../../../img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
</a>
</span>
</span>
<div class='clear'></div>
</div>
</div><div class='widget Profile' id='Profile1'>
<h2>About Me</h2>
<div class='widget-content'>
<a href='https://plus.google.com/108291894852746097453'><img alt='My Photo' class='profile-img' height='80' src='../../../lh6.googleusercontent.com/-2LSNWUVfIoQ/AAAAAAAAAAI/AAAAAAAAAPU/BTDctKuQJag/s80-c/photo.jpg' width='80'/></a>
<dl class='profile-datablock'>
<dt class='profile-data'>
<a class='profile-name-link g-profile' href='https://plus.google.com/108291894852746097453' rel='author' style='background-image: url(../../../www.google.com/images/icons/ui/gprofile_button-16.png);'>
Alex Dubois
</a>
<br/>
<div class='g-follow' data-annotation='bubble' data-height='20' data-href='https://plus.google.com/108291894852746097453'></div>
</dt>
<dd class='profile-textblock'>A Londoner from the French&#160;Alps (Val d&#39;Isere) who also lived in Lyon, Fontainebleau and Les Rousses</dd>
</dl>
<a class='profile-link' href='https://plus.google.com/108291894852746097453' rel='author'>View my complete profile</a>
<div class='clear'></div>
<span class='widget-item-control'>
<span class='item-control blog-admin'>
<a class='quickedit' href='http://www.blogger.com/rearrange?blogID=5313404859328252510&amp;widgetType=Profile&amp;widgetId=Profile1&amp;action=editWidget&amp;sectionId=sidebar-right-1' onclick='return _WidgetManager._PopupConfig(document.getElementById("Profile1"));' target='configProfile1' title='Edit'>
<img alt='' height='18' src='../../../img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
</a>
</span>
</span>
<div class='clear'></div>
</div>
</div></div>
<table border='0' cellpadding='0' cellspacing='0' class='section-columns columns-2'>
<tbody>
<tr>
<td class='first columns-cell'>
<div class='sidebar section' id='sidebar-right-2-1'><div class='widget Stats' id='Stats1'>
<h2>Total Pageviews</h2>
<div class='widget-content'>
<div id='Stats1_content' style='display: none;'>
<img alt='Sparkline' height='30' id='Stats1_sparkline' width='75'/>
<span class='counter-wrapper text-counter-wrapper' id='Stats1_totalCount'>
</span>
<div class='clear'></div>
<span class='widget-item-control'>
<span class='item-control blog-admin'>
<a class='quickedit' href='http://www.blogger.com/rearrange?blogID=5313404859328252510&amp;widgetType=Stats&amp;widgetId=Stats1&amp;action=editWidget&amp;sectionId=sidebar-right-2-1' onclick='return _WidgetManager._PopupConfig(document.getElementById("Stats1"));' target='configStats1' title='Edit'>
<img alt='' height='18' src='../../../img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
</a>
</span>
</span>
<div class='clear'></div>
</div>
</div>
</div></div>
</td>
<td class='columns-cell'>
<div class='sidebar section' id='sidebar-right-2-2'><div class='widget BlogArchive' id='BlogArchive1'>
<h2>Blog Archive</h2>
<div class='widget-content'>
<div id='ArchiveList'>
<div id='BlogArchive1_ArchiveList'>
<ul class='hierarchy'>
<li class='archivedate expanded'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy toggle-open'>
&#9660;&#160;
</span>
</a>
<a class='post-count-link' href='http://bowabos.blogspot.co.uk/search?updated-min=2013-01-01T00:00:00Z&amp;updated-max=2014-01-01T00:00:00Z&amp;max-results=2'>
2013
</a>
<span class='post-count' dir='ltr'>(2)</span>
<ul class='hierarchy'>
<li class='archivedate expanded'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy toggle-open'>
&#9660;&#160;
</span>
</a>
<a class='post-count-link' href='http://bowabos.blogspot.co.uk/2013_12_01_archive.html'>
December
</a>
<span class='post-count' dir='ltr'>(1)</span>
<ul class='posts'>
<li><a href='how-to-set-up-jira-and-confluence-on.html'>How-to set up Jira and Confluence on Fedora VM in ...</a></li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>
&#9658;&#160;
</span>
</a>
<a class='post-count-link' href='http://bowabos.blogspot.co.uk/2013_11_01_archive.html'>
November
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div class='clear'></div>
<span class='widget-item-control'>
<span class='item-control blog-admin'>
<a class='quickedit' href='http://www.blogger.com/rearrange?blogID=5313404859328252510&amp;widgetType=BlogArchive&amp;widgetId=BlogArchive1&amp;action=editWidget&amp;sectionId=sidebar-right-2-2' onclick='return _WidgetManager._PopupConfig(document.getElementById("BlogArchive1"));' target='configBlogArchive1' title='Edit'>
<img alt='' height='18' src='../../../img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
</a>
</span>
</span>
<div class='clear'></div>
</div>
</div></div>
</td>
</tr>
</tbody>
</table>
<div class='sidebar section' id='sidebar-right-3'><div class='widget Followers' id='Followers1'>
<h2 class='title'>Followers</h2>
<div class='widget-content'>
<div id='Followers1-wrapper'>
<div style='margin-right:2px;'>
<script type="text/javascript">
if (!window.google || !google.friendconnect) {
document.write('<script type="text/javascript"' +
'src="//www.google.com/friendconnect/script/friendconnect.js">' +
'</scr' + 'ipt>');
}
</script>
<script type="text/javascript">
if (!window.registeredBloggerCallbacks) {
window.registeredBloggerCallbacks = true;
gadgets.rpc.register('requestReload', function() {
document.location.reload();
});
gadgets.rpc.register('requestSignOut', function(siteId) {
google.friendconnect.container.openSocialSiteId = siteId;
google.friendconnect.requestSignOut();
});
}
</script>
<script type="text/javascript">
function registerGetBlogUrls() {
gadgets.rpc.register('getBlogUrls', function() {
var holder = {};
holder.currentPost = "https://www.blogger.com/feeds/5313404859328252510/posts/default/5614943045682456353";
holder.currentComments = "https://www.blogger.com/feeds/5313404859328252510/5614943045682456353/comments/default";
holder.currentPostUrl = "";
holder.currentPostId = 5614943045682456353
holder.postFeed = "https://www.blogger.com/feeds/5313404859328252510/posts/default";
holder.commentFeed = "https://www.blogger.com/feeds/5313404859328252510/comments/default";
holder.currentBlogUrl = "http://bowabos.blogspot.com/";
holder.currentBlogId = "5313404859328252510";
return holder;
});
}
</script>
<script type="text/javascript">
if (!window.registeredCommonBloggerCallbacks) {
window.registeredCommonBloggerCallbacks = true;
gadgets.rpc.register('resize_iframe', function(height) {
var el = document.getElementById(this['f']);
if (el) {
el.style.height = height + 'px';
}
});
gadgets.rpc.register('set_pref', function() {});
registerGetBlogUrls();
}
</script>
<div id="div-1p8gsvsbfooq7" style="width: 100%; "></div>
<script type="text/javascript">
var skin = {};
skin['FACE_SIZE'] = '32';
skin['HEIGHT'] = "260";
skin['BORDER_COLOR'] = "transparent";
skin['ENDCAP_BG_COLOR'] = "transparent";
skin['ENDCAP_TEXT_COLOR'] = "#cccccc";
skin['ENDCAP_LINK_COLOR'] = "#dd7700";
skin['CONTENT_BG_COLOR'] = "transparent";
skin['CONTENT_LINK_COLOR'] = "#dd7700";
skin['CONTENT_TEXT_COLOR'] = "#cccccc";
skin['CONTENT_SECONDARY_LINK_COLOR'] = "#dd7700";
skin['CONTENT_SECONDARY_TEXT_COLOR'] = "#999999";
skin['CONTENT_HEADLINE_COLOR'] = "#ffffff";
google.friendconnect.container.setParentUrl("/");
google.friendconnect.container["renderMembersGadget"](
{id: "div-1p8gsvsbfooq7",
height: 260,
site: "13582698084943644491",
locale: 'en_GB' },
skin);
</script>
</div>
</div>
<div class='clear'></div>
<span class='widget-item-control'>
<span class='item-control blog-admin'>
<a class='quickedit' href='http://www.blogger.com/rearrange?blogID=5313404859328252510&amp;widgetType=Followers&amp;widgetId=Followers1&amp;action=editWidget&amp;sectionId=sidebar-right-3' onclick='return _WidgetManager._PopupConfig(document.getElementById("Followers1"));' target='configFollowers1' title='Edit'>
<img alt='' height='18' src='../../../img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
</a>
</span>
</span>
<div class='clear'></div>
</div>
</div></div>
</aside>
</div>
</div>
</div>
<div style='clear: both'></div>
<!-- columns -->
</div>
<!-- main -->
</div>
</div>
<div class='main-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<footer>
<div class='footer-outer'>
<div class='footer-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left footer-fauxborder-left'>
<div class='fauxborder-right footer-fauxborder-right'></div>
<div class='region-inner footer-inner'>
<div class='foot section' id='footer-1'></div>
<table border='0' cellpadding='0' cellspacing='0' class='section-columns columns-2'>
<tbody>
<tr>
<td class='first columns-cell'>
<div class='foot section' id='footer-2-1'></div>
</td>
<td class='columns-cell'>
<div class='foot section' id='footer-2-2'></div>
</td>
</tr>
</tbody>
</table>
<!-- outside of the include in order to lock Attribution widget -->
<div class='foot section' id='footer-3' name='Footer'><div class='widget Attribution' id='Attribution1'>
<div class='widget-content' style='text-align: center;'>
Simple template. Powered by <a href='https://www.blogger.com' target='_blank'>Blogger</a>.
</div>
<div class='clear'></div>
<span class='widget-item-control'>
<span class='item-control blog-admin'>
<a class='quickedit' href='http://www.blogger.com/rearrange?blogID=5313404859328252510&amp;widgetType=Attribution&amp;widgetId=Attribution1&amp;action=editWidget&amp;sectionId=footer-3' onclick='return _WidgetManager._PopupConfig(document.getElementById("Attribution1"));' target='configAttribution1' title='Edit'>
<img alt='' height='18' src='../../../img1.blogblog.com/img/icon18_wrench_allbkg.png' width='18'/>
</a>
</span>
</span>
<div class='clear'></div>
</div></div>
</div>
</div>
<div class='footer-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</footer>
<!-- content -->
</div>
</div>
<div class='content-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</div>
<script type='text/javascript'>
window.setTimeout(function() {
document.body.className = document.body.className.replace('loading', '');
}, 10);
</script>
<script type="text/javascript">
if (window.jstiming) window.jstiming.load.tick('widgetJsBefore');
</script>
<!-- 'It is your responsibility to notify your visitors about cookies used on your blog. See http://www.blogger.com/go/cookiechoices for more details.' -->
<script src="../../js/cookiechoices.js" defer></script>
<script>
document.addEventListener('DOMContentLoaded', function(event) {
window.cookieChoices && cookieChoices.showCookieConsentBar && cookieChoices.showCookieConsentBar(
(window.cookieOptions && cookieOptions.msg) || 'This site uses cookies from Google to deliver its services, to personalise ads and to analyse traffic. Information about your use of this site is shared with Google. By using this site, you agree to its use of cookies.',
(window.cookieOptions && cookieOptions.close) || 'Got it',
(window.cookieOptions && cookieOptions.learn) || 'Learn more',
(window.cookieOptions && cookieOptions.link) || 'https://www.blogger.com/go/blogspot-cookies');
});
</script>
<script type="text/javascript" src="../../../www.blogger.com/static/v1/widgets/278981662-widgets.js"></script>
<script type="text/javascript" src="../../../apis.google.com/js/plusone.js"></script>
<script type='text/javascript'>
if (typeof(BLOG_attachCsiOnload) != 'undefined' && BLOG_attachCsiOnload != null) { window['blogger_templates_experiment_id'] = "templatesV2";window['blogger_blog_id'] = '5313404859328252510';BLOG_attachCsiOnload('item_'); }_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d5313404859328252510','//bowabos.blogspot.co.uk/2013/12/how-to-set-up-jira-and-confluence-on.html','5313404859328252510');
_WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '5313404859328252510', 'bloggerUrl': 'https://www.blogger.com', 'title': 'Bits Of Wood And Bits Of Strings', 'pageType': 'item', 'postId': '5614943045682456353', 'url': 'http://bowabos.blogspot.co.uk/2013/12/how-to-set-up-jira-and-confluence-on.html', 'canonicalUrl': 'http://bowabos.blogspot.com/2013/12/how-to-set-up-jira-and-confluence-on.html', 'homepageUrl': 'http://bowabos.blogspot.co.uk/', 'canonicalHomepageUrl': 'http://bowabos.blogspot.com/', 'blogspotFaviconUrl': 'http://bowabos.blogspot.co.uk/favicon.ico', 'enabledCommentProfileImages': true, 'adultContent': false, 'analyticsAccountNumber': '', 'useUniversalAnalytics': false, 'pageName': 'How-to set up Jira and Confluence on Fedora VM in Qubes OS', 'pageTitle': 'Bits Of Wood And Bits Of Strings: How-to set up Jira and Confluence on Fedora VM in Qubes OS', 'encoding': 'UTF-8', 'locale': 'en_GB', 'localeUnderscoreDelimited': 'en_gb', 'isPrivate': false, 'isMobile': false, 'isMobileRequest': false, 'mobileClass': '', 'isPrivateBlog': false, 'languageDirection': 'ltr', 'feedLinks': '\74link rel\75\42alternate\42 type\75\42application/atom+xml\42 title\75\42Bits Of Wood And Bits Of Strings - Atom\42 href\75\42http://bowabos.blogspot.com/feeds/posts/default\42 /\76\n\74link rel\75\42alternate\42 type\75\42application/rss+xml\42 title\75\42Bits Of Wood And Bits Of Strings - RSS\42 href\75\42http://bowabos.blogspot.com/feeds/posts/default?alt\75rss\42 /\76\n\74link rel\75\42service.post\42 type\75\42application/atom+xml\42 title\75\42Bits Of Wood And Bits Of Strings - Atom\42 href\75\42https://www.blogger.com/feeds/5313404859328252510/posts/default\42 /\76\n\n\74link rel\75\42alternate\42 type\75\42application/atom+xml\42 title\75\42Bits Of Wood And Bits Of Strings - Atom\42 href\75\42http://bowabos.blogspot.com/feeds/5614943045682456353/comments/default\42 /\76\n', 'meTag': '', 'openIdOpTag': '', 'googleProfileUrl': 'https://plus.google.com/108291894852746097453', 'latencyHeadScript': '\74script type\75\42text/javascript\42\76(function() { (function(){function c(a){this.t\75{};this.tick\75function(a,c,b){var d\75void 0!\75b?b:(new Date).getTime();this.t[a]\75[d,c];if(void 0\75\75b)try{window.console.timeStamp(\42CSI/\42+a)}catch(e){}};this.tick(\42start\42,null,a)}var a;window.performance\46\46(a\75window.performance.timing);var h\75a?new c(a.responseStart):new c;window.jstiming\75{Timer:c,load:h};if(a){var b\75a.navigationStart,e\75a.responseStart;0\74b\46\46e\76\75b\46\46(window.jstiming.srt\75e-b)}if(a){var d\75window.jstiming.load;0\74b\46\46e\76\75b\46\46(d.tick(\42_wtsrt\42,void 0,b),d.tick(\42wtsrt_\42,\n\42_wtsrt\42,e),d.tick(\42tbsd_\42,\42wtsrt_\42))}try{a\75null,window.chrome\46\46window.chrome.csi\46\46(a\75Math.floor(window.chrome.csi().pageT),d\46\0460\74b\46\46(d.tick(\42_tbnd\42,void 0,window.chrome.csi().startE),d.tick(\42tbnd_\42,\42_tbnd\42,b))),null\75\75a\46\46window.gtbExternal\46\46(a\75window.gtbExternal.pageT()),null\75\75a\46\46window.external\46\46(a\75window.external.pageT,d\46\0460\74b\46\46(d.tick(\42_tbnd\42,void 0,window.external.startE),d.tick(\42tbnd_\42,\42_tbnd\42,b))),a\46\46(window.jstiming.pt\75a)}catch(k){}})();window.tickAboveFold\75function(c){var a\0750;if(c.offsetParent){do a+\75c.offsetTop;while(c\75c.offsetParent)}c\75a;750\76\75c\46\46window.jstiming.load.tick(\42aft\42)};var f\75!1;function g(){f||(f\75!0,window.jstiming.load.tick(\42firstScrollTime\42))}window.addEventListener?window.addEventListener(\42scroll\42,g,!1):window.attachEvent(\42onscroll\42,g);\n })();\74/script\076', 'mobileHeadScript': '', 'ieCssRetrofitLinks': '\74!--[if IE]\76\74script type\75\42text/javascript\42 src\75\42https://www.blogger.com/static/v1/jsbin/1494333581-ieretrofit.js\42\76\74/script\76\n\74![endif]--\076', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/433c1c2e1ace5832', 'plusOneApiSrc': 'https://apis.google.com/js/plusone.js', 'sf': 'n', 'tf': ''}}, {'name': 'messages', 'data': {'archive': 'Archive', 'deleteBacklink': 'Delete Backlink', 'deleteComment': 'Delete Comment', 'emailAddress': 'Email Address', 'getEmailNotifications': 'Get email notifications', 'keepReading': 'Keep reading', 'labels': 'Labels', 'loadMorePosts': 'Load more posts', 'loading': 'Loading...', 'myBlogList': 'My Blog List', 'myFavoriteSites': 'My favourite sites', 'newer': 'Newer', 'newerPosts': 'Newer Posts', 'newest': 'Newest', 'noResultsFound': 'No results found', 'noTitle': 'No title', 'older': 'Older', 'olderPosts': 'Older Posts', 'oldest': 'Oldest', 'onlyTeamMembersCanComment': 'Note: only a member of this blog may post a comment.', 'popularPosts': 'Popular Posts', 'popularPostsFromThisBlog': 'Popular posts from this blog', 'postAComment': 'Post a Comment', 'reportAbuse': 'Report Abuse', 'search': 'Search', 'share': 'Share', 'showAll': 'Show All', 'subscribe': 'Subscribe', 'subscribeToThisBlog': 'Subscribe to this blog', 'theresNothingHere': 'There\47s nothing here!'}}, {'name': 'skin', 'data': {'vars': {'post_footer_background_color': '#303030', 'tabs_text_color': '#999999', 'date_header_letterspacing': 'inherit', 'content_shadow_spread': '40px', 'body_background_override': '', 'description_text_size': '140%', 'mobile_background_size': 'auto', 'header_shadow_spread': '1px', 'image_border_color': '#111111', 'date_header_color': '#cccccc', 'header_shadow_offset_top': '-1px', 'header_border_horizontalsize': '0', 'widget_title_font': 'normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'tabs_border_color': '#404040', 'tabs_bevel_border_width': '0', 'body_background_gradient_tile': 'none', 'description_text_color': '#aaaaaa', 'main_section_margin': '15px', 'post_title_font': 'normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'page_width': 'auto', 'paging_background': 'transparent none no-repeat scroll top center', 'body_text_color': '#cccccc', 'content_padding': '10px', 'header_background_gradient': 'none', 'post_margin_bottom': '25px', 'header_shadow_offset_left': '-1px', 'tabs_background_color': '#222222', 'content_background_color': '#333333', 'body_background_gradient_cap': 'none', 'main_padding_top': '30px', 'widget_alternate_text_color': '#999999', 'image_text_color': '#cccccc', 'link_visited_color': '#cc6600', 'tabs_margin_side': '30px', 'image_border_large_size': '1px', 'content_shadow_spread_webkit': '5px', 'mobile_button_color': '#ffffff', 'tabs_selected_text_color': '#ffffff', 'main_border_width': '0', 'content_background_color_selector': '.content-inner', 'link_color': '#dd7700', 'post_footer_border_color': '#444444', 'date_header_font': 'normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'tabs_background_gradient': 'none', 'content_padding_horizontal': '10px', 'header_font': 'normal normal 60px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'startSide': 'left', 'tabs_font': 'normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'widget_title_text_color': '#ffffff', 'header_border_size': '1px', 'tabs_selected_background_color': '#000000', 'date_header_margin': 'inherit', 'footer_bevel': '0', 'image_border_small_size': '0', 'content_shadow_spread_ie': '10px', 'mobile_background_overlay': 'transparent none repeat scroll top left', 'endSide': 'right', 'date_header_padding': 'inherit', 'image_background_color': '#111111', 'body_rule_color': '#404040', 'header_bottom_border_size': '1px', 'page_width_selector': '.region-inner', 'body_background_color': '#292929', 'header_text_color': '#ffffff', 'main_padding': '15px', 'date_header_background_color': 'transparent', 'tabs_border_width': '1px', 'body_font': 'normal normal 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'link_hover_color': '#cc6600', 'header_background_color': 'transparent', 'keycolor': '#dd7700', 'main_padding_bottom': '30px', 'post_footer_text_color': '#888888', 'tabs_margin_top': '0', 'header_padding': '30px'}, 'override': ''}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\75classic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\75flipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\75magazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\75mosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\75sidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\75snapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\75timeslide'}}}]);
_WidgetManager._RegisterWidget('_NavbarView', new _WidgetInfo('Navbar1', 'navbar', null, document.getElementById('Navbar1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', null, document.getElementById('Header1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', null, document.getElementById('Blog1'), {'cmtInteractionsEnabled': false, 'lightboxEnabled': true, 'lightboxModuleUrl': 'https://www.blogger.com/static/v1/jsbin/2455529948-lbx__en_gb.js', 'lightboxCssUrl': 'https://www.blogger.com/static/v1/v-css/1185134592-lightbox_bundle.css'}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_LinkListView', new _WidgetInfo('LinkList1', 'sidebar-right-1', null, document.getElementById('LinkList1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_ProfileView', new _WidgetInfo('Profile1', 'sidebar-right-1', null, document.getElementById('Profile1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_StatsView', new _WidgetInfo('Stats1', 'sidebar-right-2-1', null, document.getElementById('Stats1'), {'title': 'Total Pageviews', 'showGraphicalCounter': false, 'showAnimatedCounter': false, 'showSparkline': true, 'statsUrl': '//bowabos.blogspot.co.uk/b/stats?style\75BLACK_TRANSPARENT\46timeRange\75ALL_TIME\46token\75aeJl4FEBAAA.jxflmziOm8PqDCn4hty76J2kCnAPrdaexffzDTzVXCY.X4DD-75dqSL6XtNVz2R9mg'}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar-right-2-2', null, document.getElementById('BlogArchive1'), {'languageDirection': 'ltr', 'loadingMessage': 'Loading...'}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_FollowersView', new _WidgetInfo('Followers1', 'sidebar-right-3', null, document.getElementById('Followers1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_AttributionView', new _WidgetInfo('Attribution1', 'footer-3', null, document.getElementById('Attribution1'), {'attribution': 'Simple template. Powered by \74a href\75\47https://www.blogger.com\47 target\75\47_blank\47\76Blogger\74/a\76.'}, 'displayModeFull'));
</script>
</body>
</html>