Mac 系统下安装 Jira 7.11.2 破解版

前言

本文记录如何在 MacOS 系统上安装 jira 7.11.2 破解版的步骤,笔者分别尝试了独立安装容器安装两种方式,很遗憾,独立安装的方式最后一直失败,容器安装的反而非常的容易;如果你想快速搭建 MacOS 系统上的 Jira,那么可以直接跳到容器安装小节;

独立安装

Jira 安装步骤

  1. 安装 wget

    1
    brew install wget --with-libressl
  2. 下载最新版 jira 7.8.2

    1
    wget https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-7.8.2.tar.gz
  3. 解压

    1
    2
    $ gzip -d atlassian-jira-software-7.8.2.tar.gz
    $ tar -xvf atlassian-jira-software-7.8.2.tar
  4. [Optional] 修改 port

    1
    $ vim /Users/shangyang/tools/atlassian-jira-software-7.8.2-standalone/conf/server.xml

    找到 8080 并修改为你想要的任何端口,我使用的是 7070

  5. 将破解文件 atlassian-extras-3.2.jar 和 mysql 驱动拷贝到 jira 的 lib 目录中

    1
    2
    $ cp ~/tools/atlassian-extras-3.2.jar ~/tools/atlassian-jira-software-7.8.2-standalone/atlassian-jira/WEB-INF/lib
    $ cp ~/tools/mysql-connector-java-5.1.42-bin.jar ~/tools/atlassian-jira-software-7.8.2-standalone/atlassian-jira/WEB-INF/lib
  6. 设置 jira home
    官网教程中 https://confluence.atlassian.com/jirakb/startup-check-setting-your-jira-home-873901793.html 中提到三种设置 jira home 的方式,这里,我采用设置环境变量的方式

    1
    $ vim ~/.bash_profile

    添加

    1
    export JIRA_HOME="/Users/shangyang/tools/atlassian-jira-software-7.8.2-standalone/atlassian-jira"

    然后激活新增的环境变量

    1
    $ source ~/.bash_profile
  7. [Optional] 设置内网穿透
    由于 Jira 部署在内网服务器中,因此,这里设置内网穿透的方式,使得可以从外网 IP 访问,修改 ngrok.yml 文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    tunnels:
    http:
    subdomain: jenkins
    proto:
    http: 8080
    http2:
    subdomain: jira
    proto:
    http: 7070

    只需要在原来的 http tunnel 上新增一个 subdomain 即可,这样可以共享外网的端口;启动 ngrok 客户端使其同时支持 8080 和 7070 端口并非一帆风顺,过程比较曲折,

mysql 安装与配置

mysql 安装

因为 7.8.2 只能支持到 5.7+,因此,这里只能安装 msyql 5.7,这里使用 brew 进行安装,

  • 首先,检查 brew 是否包含了 mysql 5.7

    1
    $ brew info mysql@5.7
  • 安装

    1
    brew install mysql@5.7
  • 设置
    首先,force link,使得系统默认使用的是 mysql 5.7

    1
    $ brew link mysql@5.7 --force

    然后,检查

    1
    2
    $ mysql -V
    Ver 14.14 Distrib 5.7.22, for osx10.13 (x86_64)
  • 将 mysql 使用服务的方式启动,
    首先,安装 brew servers

    1
    $ brew tap homebrew/services

    然后,启动 mysql,注意,这里的 mysql 的服务名是 mysql@5.7

    1
    $ brew services start mysql@5.7

    再次,检查 mysql 的服务是否已经启动,

    1
    2
    3
    4
    5
    $ brew services list
    Name Status User Plist
    jenkins stopped
    mongodb@3.4 stopped
    mysql@5.7 started shangyang /Users/shangyang/Library/LaunchAgents/homebrew.mxcl.mysql@5.7.plist
  • 最后,设置 root 账户

    1
    mysqladmin -u root password 'uti&$ad23'

mysql 配置

按照 jira 官网的 https://confluence.atlassian.com/adminjiraserver/connecting-jira-applications-to-mysql-5-7-966063305.html 的提示,如果 mysql 的版本是 5.7.6 以后的,需要做如下的设置,

  1. 首先,通过命令行登录 mysql,然后初始化数据库和访问用户,

    1
    $ mysql -u root -p
    • 创建 jiradb 数据库

      1
      2
      mysql> CREATE DATABASE jiradb CHARACTER SET utf8 COLLATE utf8_bin;
      Query OK, 1 row affected (0.00 sec)
    • 然后,创建 jira 账户 shangyang,并将相应权限赋值给他;

      1
      2
      3
      mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,REFERENCES,ALTER,INDEX on jiradb.* TO 'shangyang'@'localhost' IDENTIFIED BY 'Jidaf@421';
      Query OK, 0 rows affected, 1 warning (0.00 sec)
      mysql> flush privileges;
    • 最后,退出

      1
      mysql> exit
  2. 然后,通过 my.cnf 文件对 mysql 进行配置,配置如下内容,

    1
    2
    3
    4
    5
    6
    7
    [mysqld]
    # Only allow connections from localhost
    bind-address = 127.0.0.1
    skip_ssl
    default-storage-engine=INNODB
    max_allowed_packet=256M
    innodb_log_file_size=256M

    默认 bind-address = 127.0.0.1 只允许本机访问,但是,我需要远程访问,因此进行了修改;
    (备注,通过 brew 安装后,找了半天也没有找到 my.cnf 在哪?使用了 mysql --help | grep my.cnf 所提示的路径也没有找到,后来无意之中在目录/usr/local/etc中找到了)

  3. 最后,重启 mysql
    1
    $ brew services restart mysql@5.7

jira 配置和破解

  1. 启动

    1
    2
    $ cd ~/tools/atlassian-jira-software-7.8.2-standalone/bin
    $ ./start-jira.sh
  2. 配置数据库

    • 首先,通过如下步骤设置 startupdatabase.xml,

      1
      2
      $ mkdir atlassian-jira/import/
      $ cp atlassian-jira/WEB-INF/classes/startupdatabase.xml atlassian-jira/import/
    • 然后配置数据库连接,进入 jira 开始设置,ip:7070 $\to$
      然后选择,我要自己设置(I’ll set it up myself),点击下一步 $\to$ 数据库设置,选择使用我自己的数据库,
      jira 数据库配置,点击 Test Connection,提示连接成功,然后点击 Next,

      按照网上的教程,走到这一步应该是直接能够成功的,但是我本地始终报错,错误异常java.nio.file.NoSuchFileException: /Users/shangyang/tools/atlassian-jira-software-7.8.2-standalone/atlassian-jira/import/startupdatabase.xml
      这个文件在 atlassian-jira/WEB-INF/classes 中,只需要将其拷贝到 atlassian-jira/import/ 目录中即可;
      https://community.atlassian.com/t5/Jira-questions/Jira-is-not-coming-up-because-of-no-startupdatabase-xml-file-amp/qaq-p/606453
      所以,我们需要拷贝startupdatabase.xml到指定的目录中,

      1
      2
      $ mkdir atlassian-jira/import/
      $ cp atlassian-jira/WEB-INF/classes/startupdatabase.xml atlassian-jira/import/
  3. 设置 Administrator 账户,输入如下信息
    Full name: Shang Yang
    Email Address: comedshang@163.com
    Username: shangyang
    Password: comedsh006
    点击下一步,

    报错,Cannot add user, all the user directories are read-only.
    查看日志,发现如下错误

    1
    Caused by: java.sql.SQLSyntaxErrorException: Unknown table 'ao_21d670_whitelist_rules' in information_schema

    https://confluence.atlassian.com/confkb/can-t-create-a-space-due-to-unknown-table-in-information_schema-when-using-mysql-953131768.html 知道,是因为我使用了 mysql 8.0 的 driver 所导致的,切换成 mysql 5.1 的驱动就解决了,但是,这个问题解决后,Cannot add user, all the user directories are read-only 问题依旧;

    最后就被卡在了这一步了,即便是我重新从官网通过 .dmg 的方式安装,到这一步后,同样出现这样的一个错误;… 放弃!最后还是使用 jira cloud,每个月 10 美金,还好,两杯咖啡的钱罢了!

容器安装

首先需要安装 Mac Docker Desktop

拉取 jira 和 mysql 的镜像

1
2
$ docker pull cptactionhank/atlassian-jira-software
$ docker pull mysql:5.7

在本机上创建容器挂载目录

在本地创建两个目录 ~/jira/home 和 ~/jira/mysql ,分别用来挂载 jira 和 mysql 容器中的数据文件

1
2
3
$ mkdir $HOME/jira
$ mkdir $HOME/jira/home
$ mkdir $HOME/jira/mysql

创建 mysql 容器

1
docker run --name jira-mysql --restart always -v $HOME/jira/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=<root_password> -d mysql:5.7

说明,

  • 将 <root_password> 部分替换成你的 root 密码,
  • docker run将从指定的镜像mysql:5.7中创建一个可执行的容器,
  • --name指定该容器的别名,
  • -v表示将容器中 mysql 的数据路径/var/lib/mysql映射到本地路径$HOME/jira/mysql中去;

检查,

  • 检查创建好的容器

    1
    2
    3
    $ docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    a677d27a1b20 mysql:5.7 "docker-entrypoint.s…" 1 min ago Up... 3306/tcp, 33060/tcp jira-mysql

    可以看到,我们成功创建并执行了一个别名为jira-mysql的 mysql 容器;

  • 检查本机挂载的路径

    1
    $ docker inspect jira-mysql

    直接找到 HostConfig 的属性Binds,确保映射路径如下,

    1
    2
    3
    4
    "HostConfig": {
    "Binds": [
    "/Users/shangyang/jira/mysql:/var/lib/mysql"
    ],

注意,

  • 由于 MacOS Docker Desktop 的特殊性,宿主机只能运行在Host模式下,因此这里不做端口映射;后续 jira 数据库配置的时候,笔者将会描述如何从宿主机中连接容器中的 msyql
  • docker run命令执行失败了,再次执行docker run命令会报错,提示容器jira-mysql容器已经存在了,不能重复创建了,这个时候,需要删除先前所创建的容器

    1
    $ docker rm a677d27a1b20

    指定容器 ID 直接删除即可;然后重新执行docker run创建 mysql 容器即可;

初始化 mysql

首先,通过docker run -it命令执行容器命令,进入容器中的 msyql 控制台

1
$ docker run -it --link jira-mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

然后,对 mysql 进行初始化配置,

  1. 创建 jira 所需要的表

    1
    2
    3
    mysql> create database jira default character set utf8 collate utf8_bin;
    mysql> CREATE USER `jira`@`%` IDENTIFIED BY 'jira';GRANT ALL ON *.* TO `jira`@`%` WITH GRANT OPTION;
    mysql> alter user 'jira'@'%' identified with mysql_native_password by '<jira_password>';

    上面的命令创建 jira 数据库以及用户 jira,注意,将<jira_password>替换为你自己 jira 用户的密码;

  2. 更改数据库事务级别
    1
    2
    3
    mysql> set global transaction isolation level read committed;
    mysql> set session transaction isolation level read committed;
    mysql> exit

创建 jira 容器

1
docker run --name jira detach --restart always -v $HOME/jira/home:/var/atlassian/jira --publish 7070:8080 cptactionhank/atlassian-jira-software

通过镜像 cptactionhank/atlassian-jira-software 创建一个名为jira的容器,注意,这里将容器中的 jira HOME 路径映射到了 $HOME/jira/home 上,并且,将容器中的 JIRA 端口 8080 映射到了 7070;检查,

1
2
3
4
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a677d27a1b20 mysql:5.7 "docker-entrypoint.s…" 14 hours ago Up 13 hours 3306/tcp, 33060/tcp jira-mysql
266a2ed13684 cptactionhank/atlassian-jira-software "/docker-entrypoint.…" 14 hours ago Up 13 hours 0.0.0.0:7070->8080/tcp jira

可见,jira 容器已经创建好了;

配置 jira

登录 http://localhost:7070 进行配置,过程参考jira 配置和破解一小节,唯一不同的是数据库的配置,如图
jira database connection.png
注意,172.17.0.2是容器相对于 Host 的 IP 地址,那么如何获得容器的 IP 呢?执行如下命令可以快速检查,

1
2
$ docker run -it --link jira-mysql:mysql --rm mysql sh -c 'echo "$MYSQL_PORT_3306_TCP_ADDR" "$MYSQL_PORT_3306_TCP_PORT" "$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
172.17.0.2 3306 xxx

破解 jira

  1. 替换 atlassian-extras-3.2.jar
    直接将破解包 atlassian-extras-3.2.jar 替换 jira 容器中 WEB-INF/lib/atlassian-extras-3.2.jar 即可,

    1
    docker cp atlassian-extras-3.2.jar 266a2ed13684:/opt/atlassian/jira/atlassian-jira/WEB-INF/lib/

    注意,266a2ed13684 是 jira 容器的 ID

  2. 重启 jira 容器

    1
    docker restart jira
  3. 检查
    jira cracked success.png
    如果显示 Unlimited users 则表示破解成功了!