Ansible Tower 3.5.1 平台部署和破解

Ansible Tower (以前叫’AWX’)是能够帮助任何IT团队更容易使用Ansible的解决方案。该方案基于web。

Tower允许对用户进行权限控制,即使某用户不能传送某SSH凭证,你也可以通过Tower来对该用户共享该凭证。我们可以通过图形化界面来管理Inventory,也可以对各种各样的云资源做同步。Tower可以记录所有job的日志,也可以与LDAP集成,并且拥有强大的可浏览的REST API。Tower也提供了命令行工具,可以与Jenkins轻松集成。Provisioning回调对自动伸缩拓扑图提供了强大的支持。

请使用系统原生Python安装,否则很多依赖包会找不到

更新yum源

更新阿里云YUM源
1、备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/

## CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo ##CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3、清理并重建缓存

yum clean all
yum makecache

更新阿里云EPEL源
1、备份(如有配置其他epel源)

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

2、下载新repo 到/etc/yum.repos.d/

## epel(RHEL 7)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo ## epel(RHEL 6)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

安装、配置PostgreSQL

1、添加RPM

yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

2、安装PostgreSQL 9.6
yum install postgresql96-server postgresql96-contrib
3、初始化数据库
/usr/pgsql-9.6/bin/postgresql96-setup initdb
4、设置开机自启动
systemctl enable postgresql-9.6.service
5、启动服务
systemctl start postgresql-9.6.service
6、查看版本
psql --version
7、检查服务状态

systemctl status postgresql-9.6.service
netstat -anp|grep 5432

如果遇到启动失败,删除/var/lib/pgsql/9.6/data/pg_log
再重新初始化数据库
#/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database … OK

8、用户配置

su - postgres
psql -U postgres
postgres=# ALTER USER postgres WITH PASSWORD '123456';
postgres=# CREATE ROLE tower CREATEDB PASSWORD 'admin' LOGIN;
postgres=# \q

#修改配置

sed -i 's#peer#md5#g' /var/lib/pgsql/9.6/data/pg_hba.conf
sed -i 's#ident#md5#g' /var/lib/pgsql/9.6/data/pg_hba.conf

9、开启远程访问

vi /var/lib/pgsql/9.6/data/postgresql.conf

#修改listen_addresses = 'localhost' 为 :
listen_addresses='*'

#退出postgres用户
exit

10、信任远程连接

# vi /var/lib/pgsql/9.6/data/pg_hba.conf

###修改如下内容,信任指定服务器连接
# IPv4 local connections:
host all all 127.0.0.1/32 ident
host all all 192.168.137.1/32(需要连接的服务器IP) trust

11、重启服务

systemctl restart postgresql-9.6.service

12、测试用户连接
输入密码连接,并创建数据库

# psql -U tower -d postgres -h 127.0.0.1
\\ 输入密码
postgres=> create database tower;
CREATE DATABASE
postgres=> \q

安装、配置rabbitmq

1、下载rabbitmq
下载地址:https://www.rabbitmq.com/install-rpm.html#downloads
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.15/rabbitmq-server-3.7.15-1.el7.noarch.rpm

2、下载erlang
下载地址:http://www.rabbitmq.com/releases/erlang
wget https://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos.x86_64.rpm

3、安装(注意顺序,不要颠倒)
安装erlang

rpm -ivh erlang-19.0.4-1.el7.centos.x86_64.rpm
yum install erlang

测试是否安装成功

安装rabbitmq

rpm -ivh rabbitmq-server-3.6.6-1.el7.noarch.rpm

//在安装rabbitmq时提示依赖
//在安装rabbitmq时提示依赖socat
yum install socat
然后再次安装rabbitmq

4、启动服务

systemctl enable rabbitmq-server
systemctl start rabbitmq-server

如果报错,执行journalctl -xe 检查报错信息,一般是hostname问题

5、添加用户admin,密码admin123,并将admin添加至管理员组

rabbitmqctl add_user admin admin123
rabbitmqctl set_user_tags admin administrator

6、然后,我们启用WEB管理。

rabbitmq-plugins enable rabbitmq_management

至此,就可以用过浏览器访问rabbitmq了。

http://ip:15672

用户就是刚才创建的admin

安装准备

开始安装

cd /opt/
wget https://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-3.5.1-1.tar.gz
tar zxvf ansible-tower-setup-3.5.1-1.tar.gz
cd ansible-tower-setup-3.5.1-1/

复制以下内容覆盖 /opt/ansible-tower-setup-3.5.1-1/inventory 文件 (安装配置的清单文件)

[tower]
localhost ansible_connection=local [database] [all:vars]
admin_password='admin' pg_host='127.0.0.1'
pg_port='5432' pg_database='tower'
pg_username='tower'
pg_password='admin' rabbitmq_port=5672
rabbitmq_vhost=localhost
rabbitmq_username=admin
rabbitmq_password='admin123'
rabbitmq_cookie=cookiemonster # Needs to be true for fqdns and ip addresses
rabbitmq_use_long_name=false # Isolated Tower nodes automatically generate an RSA key for authentication;
# To disable this behavior, set this value to false
# isolated_key_generation=true

修改yum源

#修改yum源
sed -i 's#dl.fedoraproject.org/pub#mirrors.ustc.edu.cn#g' roles/repos_el/defaults/main.yml yum -y install centos-release-scl-rh centos-release-scl
sed -i 's#mirror.centos.org#centos.ustc.edu.cn#g' /etc/yum.repos.d/CentOS-SCLo-scl.repo
sed -i 's#mirror.centos.org#centos.ustc.edu.cn#g' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
yum -y install supervisor #根据 /etc/supervisord.conf 修改 supervisor.sock 位置
sed -i 's#/var/run/supervisor/supervisor.sock#/var/run/supervisor.sock#g' roles/supervisor/vars/RedHat.yml

运行安装 ./setup.py

# 手动创建nginx用户和组 ,否则会报错。
groupadd nginx
useradd -r -g nginx -s /sbin/nologin -M nginx

运行安装程序

cd /opt/ansible-tower-setup-3.5.1-1/
./setup.sh

全程大约10分钟左右,如无报错,看到如下信息,说明安装成功了。

默认用户为admin,密码为inventory文件admin_password字段配置的密码,我这里配置的密码也为admin.

报错1

TASK [postgres : create the postgres user and set the password] *************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Failed to import the required Python library (psycopg2) on admin1-ops-prod-bj2's Python /usr/bin/python. Please read module documentation and install in the appropriate location"}

解决方法:

pip install psycopg2

报错2

TASK [repos_el : Install yum repos that arrive via release packages] ********************************************************
[DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop
to supply multiple items and specifying `name: "{{ item }}"`, please use `name: '{{ yum_repo_packages }}'` and remove the
loop. This feature will be removed in version 2.11. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
failed: [localhost] (item=[u'centos-release-scl']) => {"ansible_loop_var": "item", "changed": false, "item": ["centos-release-scl"], "msg": "The Python 2 bindings for rpm are needed for this module. If you require Python 3 support use the `dnf` Ansible module instead.. The Python 2 yum module is needed for this module. If you require Python 3 support use the `dnf` Ansible module instead."}

解决方法:
#使用python导入模块失败:https://blog.51cto.com/qiangsh/2091266

[ root@tower-server ]# python
Python 3.6.8 (default, Jul 25 2019, 15:22:10)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import yum
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'yum'
>>>

#在group_vars/all中加入以下配置
ansible_python_interpreter: '/usr/bin/python2.6'

报错3

TASK [packages_el : Install the Tower RPM.] *********************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "No package matching 'ansible-tower == 3.5.1' found available, installed or updated", "rc": 126, "results": ["No package matching 'ansible-tower == 3.5.1' found available, installed or updated"]}

ansible-tower包找不到,根据自动生成的repo,发现http://releases.ansible.com/ansible-tower/setup/ 该仓库是有对应版本的包的。只是enable=0被禁用了。

解决办法:

手动建一个repo,避免修改后被覆盖

cat >/etc/yum.repos.d/Ansible-Tower.repo <<EOF
[Ansible-Tower]
name=Ansible Tower Repository - $releasever $basearch
baseurl=http://releases.ansible.com/ansible-tower/rpm/epel-7-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ansible-release
EOF

再次执行setup.sh后成功安装并运行ansible-tower

报错4
#我的安装完成后,页面502错误,检查发现nginx没权限读取/var/run/tower/uwsgi.sock
解决方法:

# ll /var/run/tower/uwsgi.sock
srw-rw---- 1 awx nginx 0 Jul 9 11:30 /var/run/tower/uwsgi.sock # 修改nginx配置字段
# vim /etc/nginx/nginx.conf
user awx nginx;

破解

HOSTS限制破解

反汇编init.pyc

pip install uncompyle6

cd /var/lib/awx/venv/awx/lib/python3.6/site-packages/tower_license
uncompyle6 __init__.pyc >__init__.py
rm -f __init__.pyc __init__.pyo

更改文件init.py

cd /var/lib/awx/venv/awx/lib/python3.6/site-packages/tower_license/

vim __init__.py

# _check_cloudforms_subscription方法修改如下内容,特别需要注意格式,如下:
81 def _check_cloudforms_subscription(self):
# 添加下面一行直接返回 True
82 return True
83 if os.path.exists('/var/lib/awx/i18n.db'):
84 return True
85 else:
86 if os.path.isdir('/opt/rh/cfme-appliance'):
87 if os.path.isdir('/opt/rh/cfme-gemset'):
88 pass
89 try:
90 has_rpms = subprocess.call(['rpm', '--quiet', '-q', 'cfme', 'cfme-appliance', 'cfme-gemset'])
91 if has_rpms == 0:
92 return True
93 except OSError:
94 pass
95
96 return False

修改 license_date=253370764800L 为 license_date=253370764800

 74     def _generate_cloudforms_subscription(self):
75 self._attrs.update(dict(company_name='Red Hat CloudForms License', instance_count=9999999,
76 license_date=253370764800,
77 #license_date=253370764800L,
78 license_key='xxxx',
79 license_type='enterprise',
80 subscription_name='Red Hat CloudForms License'))

修改完重新编译一下:

python -m py_compile __init__.py
python -O -m py_compile __init__.py

重启服务:
ansible-tower-service restart

打开https://your_ip/#/license ,发现"Hosts Available"变成了9999999台,说明破解成功,如下:

查看日志:

/var/log/tower/setup-***********.log           # 安装报错
tail -100f /var/log/tower/tower.log
tail -100f /var/log/supervisor/supervisord.log
©著作权归作者所有:来自51CTO博客作者qianghong000的原创作品,如需转载,请注明出处,否则将追究法律责任

Ansible Tower 3.5.1 平台部署和破解的更多相关文章

  1. Ansible Tower系列 二(安装 Tower)【转】

    文档:http://docs.ansible.com/ansible-tower/ 安装前检查 python版本为2.6 保持网络畅通 内存预留充足 安装用户为root 软件下载 下载地址:http: ...

  2. Puppet基于Master/Agent模式实现LNMP平台部署

    前言 随着IT行业的迅猛发展,传统的运维方式靠大量人力比较吃力,运维人员面对日益增长的服务器和运维工作,不得不把很多重复的.繁琐的工作利用自动化处理.前期我们介绍了运维自动化工具ansible的简单应 ...

  3. CentOS平台部署vsftp(基于虚拟用户)

    1. 安装FTP 1 2 [root@task ~]# yum install vsftpd –y [root@task ~]# chkconfig vsftpd on          # 配置开机 ...

  4. Mesos+Zookeeper+Marathon的Docker管理平台部署记录(2)- 负载均衡marathon-lb

    之前介绍了Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)的操作,多余的废话不说了,下面接着说下在该集群环境下的负载均衡marathon-lb的部署过程: 默认情况 ...

  5. Mesos+Zookeeper+Marathon的Docker管理平台部署记录(1)

    随着"互联网+"时代的业务增长.变化速度及大规模计算的需求,廉价的.高可扩展的分布式x86集群已成为标准解决方案,如Google已经在几千万台服务器上部署分布式系统.Docker及 ...

  6. Ansible Tower系列 四(使用tower执行一个命令)【转】

    在主机清单页面中,选择一个主机清单,进入后,选择hosts里的主机 Paste_Image.png 点击 RUN COMMANDS MODULE 选择 commandARGUMENTS 填写 ifco ...

  7. Ansible Tower系列 三(使用tower执行一个任务)【转】

    创建playbook Tower playbook 项目默认存在 /var/lib/awx/projects/ su - awx cd projects/ mkdir ansible-for-devo ...

  8. elk实时日志分析平台部署搭建详细实现过程

    原文:http://blog.csdn.net/mchdba/article/details/52132663 1.ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段:以下内容 ...

  9. Mesos, Marathon, Docker 平台部署记录

    Mesos, Marathon, Docker 平台部署记录 所有组件部署基于Ubuntu 14.04 x64 主机 IP 角色 master 192.168.1.3 Mesos Master, Ma ...

随机推荐

  1. Codeforces_798

    A.暴力把每个位置的字符改成另外25个字符,判断是否回文. #include<bits/stdc++.h> using namespace std; string s; int main( ...

  2. Android Studio 学习笔记(三):简单控件及实例

    控件.组件.插件概念区分 说到控件,就不得不区分一些概念. 控件(Control):编程中用到的部件 组件(Component):软件的组成部分 插件(plugin): 应用程序中已经预留接口的组件 ...

  3. python之sorted用法

    operator.itemgetter函数 operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1, ...

  4. Go语言实现:【剑指offer】数据流中的中位数

    该题目来源于牛客网<剑指offer>专题. 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位 ...

  5. 罗德里格斯旋转公式(Rodrigues' rotation formula)推导

    本文综合了几个相关的维基百科,加了点自己的理解,从比较基础的向量投影和叉积讲起,推导出罗德里格斯旋转公式.公式比较繁杂,如有错误,欢迎评论区指出. 对于向量的三维旋转问题,给定旋转轴和旋转角度,用罗德 ...

  6. 动手学习pytorch——(2)softmax和分类模型

    内容太多,捡重要的讲. 在分类问题中,通常用离散的数值表示类别,这里存在两个问题.1.输出值的范围不确定,很难判断值的意义.2.真实标签是离散值,这些离散值与不确定的范围的输出值之间的误差难以衡量. ...

  7. VMware复制Linux虚拟机后网络配置

    1.启动虚拟机,点击我已复制 点击已复制后,VMware将会为重置虚拟机网卡mac地址. 2.修改网卡mac地址 3.ifconfig显示网卡名称与配置不一致处理 Centos6中ifconfig显示 ...

  8. Vue项目使用vant框架

    近期在开发h5端项目,用到vant框架,vant是一款基于Vue的移动UI组件,看了vant的官方文档(https://youzan.github.io/vant/#/zh-CN/)感觉不错,功能比较 ...

  9. Java Stack使用

    1.Stack继承自Vector.遵从先进后出的规则. 2.Stack 是线程同步的.(map.List.Set是线程不同步的,需要在外部封装的时候来同步) 试例代码: public static v ...

  10. linux中的正则表达式知识梳理

    1. 正则表达式 1.1 正则表达式使用 正则表达式是开发者为了处理大量的字符串和文本而定义的一套规则和方法,使用正则表达式可以提高效率,快速获取想要的内容. 正则表达式常用于linux三剑客grep ...