yuyulu
作者yuyulu·2015-08-19 10:09
系统工程师·自由职业

ICEHOUSE KEYSTONE DEV环境搭建

字数 11685阅读 1901评论 0赞 0
1.官方的搭建网站网址:http://docs.openstack.org/developer/keystone/setup.html

2.使用RHEL 6.5做为OS。

3.通过ez_install.py安装setuptools,这个东西用于安装其它的python包(下载连接是这个https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py):

1
[root@OS_DEV keystone]# python ez_install.py

4.通过setuptools安装PIP,这个东西类似于YUM,用于下载python包(百度搜一下这个在哪里下载就可以了):

1
2
3
4
[root@OS_DEV keystone]# cd pip-1.5.4
[root@OS_DEV pip-1.5.4]# ls
AUTHORS.txt  CHANGES.txt  docs  LICENSE.txt  MANIFEST.in  pip  pip.egg-info  PKG-INFO  PROJECT.txt  README.rst  setup.cfg  setup.py
[root@OS_DEV pip-1.5.4]# python setup.py install

5.安装git,这个git的功能就不多说啦,用于软件版本管理的:

1
[root@OS_DEV pip-1.5.4]# yum install git*

6.下载keystone的源码文件,安装好后就能在当前目录下看到我们的keystone啦(最好使用keystone用户执行这一步,当然我这里用的是root):

1
2
3
4
5
6
7
8
[root@OS_DEV keystone]# git clone https://github.com/openstack/keystone.git
Initialized empty Git repository in /root/Desktop/keystone/keystone/.git/
remote: Reusing existing pack: 42524, done.
remote: Total 42524 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (42524/42524), 17.12 MiB | 101 KiB/s, done.
Resolving deltas: 100% (29720/29720), done.
[root@OS_DEV keystone]# ls
keystone

看一下当前的仓库下有哪些东西:

1
2
3
4
5
6
7
[root@OS_DEV keystone]# git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/feature/key-dist
  remotes/origin/master
  remotes/origin/stable/havana
  remotes/origin/stable/icehouse

我们切换到icehouse上,关于git的一些用法可以看这里

1
2
3
4
5
6
[root@OS_DEV keystone]# git checkout --track -b myicehouse origin/stable/icehouse
Branch myicehouse set up to track remote branch stable/icehouse from origin.
Switched to a new branch 'myicehouse'
[root@OS_DEV keystone]# git branch
  master
* myicehouse

7.安装依赖。在keystone的源码包下有两个文件requirements.txt和test-requirements.txt,里边记录了需要的相关依赖。通过PIP可以很容易的安装这些依赖。先用yum安装一些需要的包,然后使用PIP安装keystone需要的依赖:

1
2
3
[root@OS_DEV keystone]# yum install yum install http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-2.noarch.rpm
[root@OS_DEV keystone]# yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@OS_DEV keystone]# yum upgrade

然后再尝试安装一些工具包和依赖包(速度可能会很慢,我试过yum clean all偶尔可以加快速度,如果有人有更好的提高下载速度的方法可以给我留言,多谢啦):
[root@OS_DEV keystone]# yum install openstack-utils openstack-selinux MySQL-python python-sqlite2 python-lxml python-greenlet-devel python-ldap openssl-devel
开始安装依赖(有些包在编译的时候会的报很多警告,就先忽略吧)。有两种安装方式,一种是下面的这个:

1
[root@OS_DEV keystone]# pip install -r requirements.txt

在我安装的时候遇到了下面这个告错:

1
2
3
4
5
6
7
8
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    load_entry_point('pip==1.5.4', 'console_scripts', 'pip')()
  File "/usr/lib/python2.6/site-packages/pip-1.5.4-py2.6.egg/pip/__init__.py", line 185, in main
    return command.main(cmd_args)
  File "/usr/lib/python2.6/site-packages/pip-1.5.4-py2.6.egg/pip/basecommand.py", line 161, in main
    text = 'n'.join(complete_log)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 67: ordinal not in range(128)

往上找,可以发现告错的原因:greenlet.h:8:20: error: Python.h: No such file or directory。所以安装下面的东东,然后再次执行上面的pip命令:

1
2
[root@OS_DEV keystone]# yum install python-devel
[root@OS_DEV keystone]# pip install -r requirements.txt

还有可能遇到下面的告错:

1
error: libxml/xmlversion.h: No such file or directory

那通过下面的命令安装相关的包就行了:

1
2
3
[root@OS_DEV keystone]# yum install libxml2-devel
[root@OS_DEV keystone]# yum install libxslt-devel
[root@OS_DEV keystone]# pip install -r requirements.txt

还有一种安装方法是根据requirements.txt手工一条一条的执行相关包的安装(其实和上面的是一样的,上面的只是把这个过程自动化了)。我个人推荐手工的那种,就是类似于下面这样的(记得包的两头加个引号,不然会被shell解析成重定向),因为出错了可以大概知道是哪个依赖错了,同时也能让我们熟悉一下这些依赖:

1
2
3
[root@OS_DEV keystone]# pip install "pbr>=0.6,<1.0"
[root@OS_DEV keystone]# pip install "WebOb>=1.2.3"
......

对于test-requirements.txt也用同样的方法安装就可以了。
其实有空的话可以看下这些依赖,这里边的很多依赖我会的单独写文章去学习如何使用,在整个Openstack的生命中,这些依赖其实也和nova、keystone这些组件一样,是Openstack不可或缺的部分。

8.建立keystone的可执行环境

1
[root@OS_DEV keystone]# python setup.py develop

这里的develop和一般使用的install的区别在于,其只是把相关的包通过类似连接的方式进行安装(或者说引用),所以今后在本目录下对源码的修改都可以立刻生效。可以看下easy-install.pth文件,发现我们的源码目录被引用了:

1
2
3
4
5
6
[root@OS_DEV site-packages]# cat easy-install.pth
import sys; sys.__plen = len(sys.path)
./setuptools-3.4.3-py2.6.egg
./pip-1.5.4-py2.6.egg
/root/Desktop/keystone/keystone
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

这个时候我们就能运行相关的命令了,输入keystone,然后多按几次tab键,可以看到下面的输出:

1
2
[root@OS_DEV keystone]# keystone
keystone         keystone-all     keystone-manage

或者也可以在python中import keystone试试,如果没有报错,那么就OK了:

1
2
3
4
5
6
[root@OS_DEV keystone]# python
Python 2.6.6 (r266:84292, Sep  4 2013, 07:46:00)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import keystone
>>>

11.安装mysql。既然keystone那已经差不多了,那么我们就要开始安装一些基本的组件了。安装和配置方法如下:

1
[root@OS_DEV keystone]# yum install -y mysql-server

修改/etc/my.cnf文件,改成类似下面的东东:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
bind-address=192.168.10.10
default-storage-engine = innodb
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
 
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

启动服务:

1
2
[root@OS_DEV keystone]# service mysqld restart
[root@OS_DEV keystone]# chkconfig mysqld on

初始化数据库:

1
2
[root@OS_DEV keystone]# mysql_install_db
[root@OS_DEV keystone]# mysql_secure_installation #这里第一次提示root密码的时候直接按回车,然后问你要不要设置root密码的时候点击Y,然后输入一个密码就行了。其余的选项都选Y。

然后mysql就安装好了。

10.现在开始配置keystone,使之可以运行
keystone主要有两个配置文件:keystone-paste.ini,用于配置paste。keystone.conf,除了paste以外的其它配置都写在这个文件里,比如driver啥的。关于配置文件的事情我们以后再说,现在先让他跑起来。
keystone.conf的默认搜索路径是:~/.keystone/,~/,/etc/keystone/,/etc/,而keystone-paste.ini的搜索路径则由config_file参数决定。

但这里问题来了,我们的源码目录没有赠送一个keyston.conf和keystone-dist-paste.ini文件…所以直接从一个正常工作的keystone那里拷贝一个过来吧。拷贝的目的地址我这里选择/etc/keystone和/usr/share/keystone目录:

1
2
3
4
[root@OS_DEV keystone]# ll /etc/keystone/keystone.conf
-rw-r----- 1 keystone keystone 14884 Apr 10 09:09 /etc/keystone/keystone.conf
[root@OS_DEV keystone]# ll /usr/share/keystone/keystone-dist-paste.ini
-rw-r--r-- 1 root root 2880 Apr 10 09:11 /usr/share/keystone/keystone-dist-paste.ini

拷贝好后,建立一个keystone的数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@OS_DEV ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 3
Server version: 5.1.71 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
 
mysql> create database keystone;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on keystone.* to 'keystone'@'%' identified by 'keystonePass';
Query OK, 0 rows affected (0.01 sec)
mysql> quit
Bye

然后执行如下的命令按照实际情况修改下这个keystone.conf,同时初始化数据库。具体的参数含义我们以后再说(mysql中的相关命令需要替换成实际的用户、密码和主机名):

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@OS_DEV keystone]# groupadd keystone
[root@OS_DEV keystone]# useradd -g keystone keystone
[root@OS_DEV keystone]# openstack-config --set /etc/keystone/keystone.conf sql connection mysql://keystone:keystonePass@OS_DEV/keystone
[root@OS_DEV keystone]# keystone-manage db_sync #如果之前用的是keystone用户下载的git包,这里可以用su -s /bin/sh -c "keystone-manage db_sync" keystone
 
[root@OS_DEV keystone]# ADMIN_TOKEN=$(openssl rand -hex 10)
[root@OS_DEV keystone]# echo $ADMIN_TOKEN #30ee9ccde0fb0411ac65
[root@OS_DEV keystone]# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token $ADMIN_TOKEN
[root@OS_DEV keystone]# keystone-manage pki_setup --keystone-user keystone --keystone-group keystone
[root@OS_DEV keystone]# mkdir -p /var/log/keystone/
[root@OS_DEV keystone]# touch /var/log/keystone/keystone.log
[root@OS_DEV keystone]# chown -R keystone:keystone /etc/keystone/* /var/log/keystone/keystone.log
[root@OS_DEV keystone]# chmod -R o-rwx /etc/keystone/ssl

可以考虑设置token的定时清理(当然开发测试环境不用这个也行啦)

1
[root@OS_DEV keystone]# (crontab -l 2>&1 | grep -q token_flush) || echo '@hourly /usr/bin/keystone-manage token_flush >/var/log/keystone/keystone-tokenflush.log 2>&1' >> /var/spool/cron/root

最后把keystone.conf中的config_file设置成你所存放的paste ini文件的路径就行了。

然后看看我们的keystone能否启动:

1
[root@OS_DEV keystone]# keystone-all --debug

成功的话可以看到下面的输出:

1
2
3
4
2014-04-10 09:16:10.164 28113 INFO keystone.common.environment.eventlet_server [-] Starting /usr/bin/keystone-all on 0.0.0.0:35357
2014-04-10 09:16:10.167 28113 INFO keystone.common.environment.eventlet_server [-] Starting /usr/bin/keystone-all on 0.0.0.0:5000
2014-04-10 09:16:10.168 28113 INFO eventlet.wsgi.server [-] (28113) wsgi starting up on http://0.0.0.0:35357/
2014-04-10 09:16:10.169 28113 INFO eventlet.wsgi.server [-] (28113) wsgi starting up on http://0.0.0.0:5000/

然后我们测试能否正常添加数据(这里的OS_SERVICE_TOKEN就是上面设置配置文件的那个token,在keystone.conf中也能找到):

1
2
3
4
5
6
7
8
9
10
11
[root@OS_DEV keystone]# export OS_SERVICE_TOKEN=30ee9ccde0fb0411ac65
[root@OS_DEV keystone]# export OS_SERVICE_ENDPOINT=http://OS_DEV:35357/v2.0
[root@OS_DEV keystone]# keystone tenant-create --name=admin --description="Admin Tenant"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |           Admin Tenant           |
|   enabled   |               True               |
|      id     | d742f3f76e5b43c986f411c68b74e089 |
|     name    |              admin               |
+-------------+----------------------------------+

ok啦,我们现在有了一个可以调试的keystone了,以后我们就可以在这个基础上去看看keystone的实现原理以及使用的组件了。我这里的话建立了下面的这些东东:

1
2
3
4
5
6
7
8
9
10
11
[root@OS_DEV keystone]# keystone tenant-create --name=admin --description="Admin Tenant"
[root@OS_DEV keystone]# keystone tenant-create --name=service --description="Service Tenant"
[root@OS_DEV keystone]# keystone role-create --name=admin
[root@OS_DEV keystone]# keystone user-create --name=admin --pass=adminPass --email=admin@example.com
[root@OS_DEV keystone]# keystone user-role-add --user=admin --tenant=admin --role=admin
[root@OS_DEV keystone]# keystone user-role-add --user=admin --role=_member_ --tenant=admin
[root@OS_DEV keystone]# keystone user-create --name=demo --pass=demoPass --email=demo@example.com
[root@OS_DEV keystone]# keystone tenant-create --name=demo --description="Demo Tenant"
[root@OS_DEV keystone]# keystone user-role-add --user=demo --role=_member_ --tenant=demo
[root@OS_DEV keystone]# keystone service-create --name=keystone --type=identity --description="Keystone Identity Service"
[root@OS_DEV keystone]# keystone endpoint-create --service-id=f2cfcf68a5684ebfaa724cf79fcb1394 --publicurl=http://OS_DEV:5000/v2.0 --internalurl=http://OS_DEV:5000/v2.0 --adminurl=http://OS_DEV:35357/v2.0

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广