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 条评论