├── addClient.sh ├── addComputeNode.sh ├── delAll.sh ├── delStack.sh ├── gen_keystone_data.sh ├── oneStack.sh ├── readme.txt ├── resetStack.sh ├── setup_base.sh └── setup_test.sh /addClient.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # **addClient.sh** is a tool to deploy an environment to manage OpenStack cloud computing service. 3 | 4 | # Hily.Hoo@gmail.com (Kayven) 5 | # Learn more and get the most recent version at http://code.google.com/p/onestack/ 6 | 7 | set -o xtrace 8 | ## 请使用root执行本脚本! 9 | ## Ubuntu 12.04 ("Precise") 部署 OpenStack Essex,在client管理OpenStack安装nova管理工具 10 | ## 参考: 11 | ## http://docs.openstack.org/essex/openstack-compute/starter/content/ 12 | 13 | ## 1、设置root权限 14 | ## 为了简单,全部都是用root来运行。 15 | 16 | ########################################################################## 17 | ## 2、自行检查下面network/interfaces的两个网卡设置 18 | ServerControlIP="192.168.139.50" 19 | 20 | ## token, 登录dashboard密码 21 | ADMIN_TOKEN="admin" 22 | ########################################################################## 23 | 24 | ## 3、安装ntp 25 | apt-get install -y ntp 26 | echo "server $ServerControlIP" > /etc/ntp.conf 27 | service ntp restart 28 | 29 | ## 4、安装nova 30 | apt-get install -y python-novaclient glance-client swift qemu-kvm 31 | 32 | cat <> /etc/profile 33 | export OS_TENANT_NAME=admin 34 | export OS_USERNAME=admin 35 | export OS_PASSWORD=ADMIN 36 | export OS_AUTH_URL="http://192.168.139.50:5000/v2.0/" 37 | ENV_AUTH 38 | sed -i -e "s/ADMIN/$ADMIN_TOKEN/g" /etc/profile 39 | sed -i -e "s/192.168.139.50/$ServerControlIP/g" /etc/profile 40 | 41 | ## manage via web: http://192.168.139.50 ($ServerControlIP) 42 | ## command line: 43 | ## nova list 44 | ## glance index 45 | -------------------------------------------------------------------------------- /addComputeNode.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ## **addComputeNode.sh** is a tool to add nova-compute node to OpenStack cloud computing service. 3 | 4 | ## Hily.Hoo@gmail.com (Kayven) 5 | ## Learn more and get the most recent version at http://code.google.com/p/onestack/ 6 | 7 | set -o xtrace 8 | ## 请使用root执行本脚本! 9 | ## Ubuntu 12.04 ("Precise") 部署 OpenStack Essex,在client管理OpenStack安装nova管理工具 10 | ## 参考: 11 | ## http://docs.openstack.org/essex/openstack-compute/starter/content/ 12 | 13 | 14 | ########################################################################## 15 | ## 2、自行检查下面network/interfaces的两个网卡设置 16 | ServerControlIP="192.168.139.50" 17 | computeControlIP="192.168.139.150" 18 | 19 | ## token, 登录dashboard密码 20 | ADMIN_TOKEN="admin" 21 | 22 | ## network configure 23 | NETWORK_CONF=${NETWORK_CONF:-"/etc/network/interfaces"} 24 | cat <$NETWORK_CONF 25 | auto lo 26 | iface lo inet loopback 27 | 28 | # The primary network interface 29 | auto eth0 30 | iface eth0 inet static 31 | pre-up ifconfig eth0 hw ether b8:ac:6f:9a:ee:e5 32 | address 192.168.139.51 33 | netmask 255.255.255.0 34 | network 192.168.139.0 35 | broadcast 192.168.139.255 36 | gateway 192.168.139.253 37 | dns-nameservers 210.72.128.8 38 | 39 | auto br100 40 | iface br100 inet static 41 | bridge_ports eth1 42 | bridge_stp off 43 | bridge_maxwait 0 44 | bridge_fd 0 45 | pre-up ifconfig eth1 hw ether b8:ac:6f:9a:ee:e5 46 | address 10.0.0.150 47 | netmask 255.255.255.0 48 | network 10.0.0.0 49 | broadcast 10.0.0.255 50 | INTERFACES 51 | sed -i -e "s/192.168.139.51/$computeControlIP/g" $NETWORK_CONF 52 | /etc/init.d/networking restart 53 | 54 | ## 配置 /etc/nova/nova.conf,这里与控制节点的配置相同!比如ip是控制节点的ip 55 | MYSQL_PASSWD=${MYSQL_PASSWD:-"cloud1234"} 56 | NOVA_DB_USERNAME=${NOVA_DB_USERNAME:-"novadbadmin"} 57 | NOVA_DB_PASSWD=${NOVA_DB_PASSWD:-"cloud1234"} 58 | 59 | OUT_IP="192.168.139.50" 60 | OUT_IP_PRE="192.168.139" 61 | IN_IP="10.0.0.1" 62 | IN_IP_PRE="10.0.0" 63 | FLAT_IP="10.0.0.40" 64 | FLOAT_IP="192.168.139.225" 65 | 66 | ## 选择虚拟技术,裸机使用kvm,虚拟机里面使用qemu 67 | VIRT_TYPE="qemu" 68 | ########################################################################## 69 | 70 | ## 3、安装bridge-utils、ntp 71 | apt-get install -y bridge-utils ntp 72 | echo "server $ServerControlIP" > /etc/ntp.conf 73 | service ntp restart 74 | 75 | ## 4、安装nova 76 | apt-get install -y nova-compute 77 | 78 | ## 配置 /etc/nova/nova.conf,这里与控制节点的配置相同!比如ip是控制节点的ip 79 | ## 如果你是在虚拟机里测试Openstack。你需要把默认的虚拟化引擎从kvm改成qemu。 80 | cat < /etc/nova/nova.conf 81 | --dhcpbridge_flagfile=/etc/nova/nova.conf 82 | --dhcpbridge=/usr/bin/nova-dhcpbridge 83 | --logdir=/var/log/nova 84 | --state_path=/var/lib/nova 85 | --lock_path=/var/lock/nova 86 | --allow_admin_api=true 87 | --use_deprecated_auth=false 88 | --auth_strategy=keystone 89 | --scheduler_driver=nova.scheduler.simple.SimpleScheduler 90 | --s3_host=192.168.139.50 91 | --ec2_host=192.168.139.50 92 | --rabbit_host=192.168.139.50 93 | --cc_host=192.168.139.50 94 | --nova_url=http://192.168.139.50:8774/v1.1/ 95 | --routing_source_ip=192.168.139.50 96 | --glance_api_servers=192.168.139.50:9292 97 | --image_service=nova.image.glance.GlanceImageService 98 | --iscsi_ip_prefix=10.0.0 99 | --sql_connection=mysql://novadbadmin:cloud1234@192.168.139.50/nova 100 | --ec2_url=http://192.168.139.50:8773/services/Cloud 101 | --keystone_ec2_url=http://192.168.139.50:5000/v2.0/ec2tokens 102 | --api_paste_config=/etc/nova/api-paste.ini 103 | --libvirt_type=kvm 104 | --libvirt_use_virtio_for_bridges=true 105 | --start_guests_on_host_boot=true 106 | --resume_guests_state_on_host_boot=true 107 | 108 | #novnc 109 | --novnc_enabled=true 110 | --novncproxy_base_url= http://192.168.139.50:6080/vnc_auto.html 111 | --vncserver_proxyclient_address=192.168.139.51 112 | --vncserver_listen=192.168.139.51 113 | 114 | # network specific settings 115 | --network_manager=nova.network.manager.FlatDHCPManager 116 | --public_interface=eth0 117 | --flat_interface=eth1 118 | --flat_network_bridge=br100 119 | --fixed_range=10.0.0.1/27 120 | --floating_range=192.168.139.225/27 121 | --network_size=32 122 | --flat_network_dhcp_start=10.0.0.40 123 | --flat_injected=False 124 | --force_dhcp_release 125 | --iscsi_helper=tgtadm 126 | --connection_type=libvirt 127 | --root_helper=sudo nova-rootwrap 128 | #--verbose 129 | --verbose=False 130 | NOVAconf 131 | 132 | sed -i -e "s/novadbadmin/$NOVA_DB_USERNAME/g;s/cloud1234/$NOVA_DB_PASSWD/g" /etc/nova/nova.conf 133 | sed -i -e "s/192.168.139.50/$OUT_IP/g;s/192.168.139.225/$FLOAT_IP/g;" /etc/nova/nova.conf 134 | sed -i -e "s/10.0.0.1/$IN_IP/g;s/10.0.0.40/$FLAT_IP/g;s/10.0.0/$IN_IP_PRE/g;" /etc/nova/nova.conf 135 | ## kvm or qemu? 136 | sed -i -e "s/kvm/$VIRT_TYPE/g" /etc/nova/nova.conf 137 | sed -i -e "s/kvm/$VIRT_TYPE/g" /etc/nova/nova-compute.conf 138 | sed -i -e "s/192.168.139.51/$computeControlIP/g;" /etc/nova/nova.conf 139 | 140 | ## 5:配置/etc/nova/api-paste.ini 141 | sed -i -e " 142 | s/%SERVICE_TENANT_NAME%/admin/g; 143 | s/%SERVICE_USER%/admin/g; 144 | s/%SERVICE_PASSWORD%/$ADMIN_TOKEN/g; 145 | " /etc/nova/api-paste.ini 146 | ## 重启服务 147 | service nova-compute restart 148 | 149 | ## command line: 150 | ## nova-manage service list 151 | -------------------------------------------------------------------------------- /delAll.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ## If you don't want to uninstall all softs, please excute only ./delStack.sh 3 | 4 | set -o xtrace 5 | 6 | ## uninstall OpenStack and mysql 7 | apt-get remove -y keystone python-keystone python-keystoneclient \ 8 | glance glance-api glance-client glance-common glance-registry python-glance \ 9 | nova-api nova-cert nova-common nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume python-nova python-novaclient nova-consoleauth python-novnc novnc \ 10 | libapache2-mod-wsgi openstack-dashboard \ 11 | mysql-server python-mysqldb phpmyadmin 12 | 13 | ## uninstall other tools 14 | apt-get remove -y bridge-utils ntp \ 15 | tgt curl expect \ 16 | open-iscsi open-iscsi-utils \ 17 | rabbitmq-server memcached python-memcache \ 18 | kvm libvirt-bin qemu qemu-kvm 19 | 20 | ## clean cache 21 | apt-get clean 22 | apt-get autoclean 23 | ## You'd better reboot it. 24 | -------------------------------------------------------------------------------- /delStack.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # This script deletes three main OpenStack tools. 3 | # You can add others youself. 4 | 5 | # Hily.Hoo@gmail.com (Kayven) 6 | # Learn more and get the most recent version at http://code.google.com/p/onestack/ 7 | 8 | set -o xtrace 9 | 10 | ## 11 | apt-get remove -y keystone python-keystone python-keystoneclient 12 | apt-get remove -y glance glance-api glance-client glance-common glance-registry python-glance 13 | apt-get remove -y nova-api nova-cert nova-common nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume python-nova python-novaclient nova-consoleauth python-novnc novnc 14 | apt-get remove -y libapache2-mod-wsgi openstack-dashboard 15 | 16 | ## mysql 17 | MYSQL_PASSWD=${MYSQL_PASSWD:-"cloud1234"} 18 | mysql -uroot -p$MYSQL_PASSWD -e "DROP DATABASE IF EXISTS nova;" 19 | mysql -uroot -p$MYSQL_PASSWD -e "DROP DATABASE IF EXISTS glance;" 20 | mysql -uroot -p$MYSQL_PASSWD -e "DROP DATABASE IF EXISTS keystone;" 21 | #apt-get update 22 | dpkg -l |grep keystone|awk '{print $2}'|xargs dpkg -P 23 | dpkg -l |grep glance|awk '{print $2}'|xargs dpkg -P 24 | dpkg -l |grep nova|awk '{print $2}'|xargs dpkg -P 25 | -------------------------------------------------------------------------------- /gen_keystone_data.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Initial data for Keystone using python-keystoneclient 4 | # 5 | # Tenant User Roles 6 | # ------------------------------------------------------------------ 7 | # admin admin admin 8 | # service glance admin 9 | # service nova admin, [ResellerAdmin (swift only)] 10 | # service quantum admin # if enabled 11 | # service swift admin # if enabled 12 | # demo admin admin 13 | # demo demo Member, anotherrole 14 | # invisible_to_admin demo Member 15 | # 16 | # Variables set before calling this script: 17 | # SERVICE_TOKEN - aka admin_token in keystone.conf 18 | # SERVICE_ENDPOINT - local Keystone admin endpoint 19 | # SERVICE_TENANT_NAME - name of tenant containing service accounts 20 | # ENABLED_SERVICES - stack.sh's list of services to start 21 | # DEVSTACK_DIR - Top-level DevStack directory 22 | 23 | ADMIN_PASSWORD=${ADMIN_PASSWORD:-hastexo} 24 | SERVICE_PASSWORD=${SERVICE_PASSWORD:-$ADMIN_PASSWORD} 25 | export SERVICE_TOKEN="hastexo" 26 | export SERVICE_ENDPOINT="http://localhost:35357/v2.0" 27 | SERVICE_TENANT_NAME=${SERVICE_TENANT_NAME:-service} 28 | 29 | function get_id () { 30 | echo `$@ | awk '/ id / { print $4 }'` 31 | } 32 | 33 | # Tenants 34 | ADMIN_TENANT=$(get_id keystone tenant-create --name=admin) 35 | SERVICE_TENANT=$(get_id keystone tenant-create --name=$SERVICE_TENANT_NAME) 36 | DEMO_TENANT=$(get_id keystone tenant-create --name=demo) 37 | INVIS_TENANT=$(get_id keystone tenant-create --name=invisible_to_admin) 38 | 39 | 40 | # Users 41 | ADMIN_USER=$(get_id keystone user-create --name=admin \ 42 | --pass="$ADMIN_PASSWORD" \ 43 | --email=admin@hastexo.com) 44 | DEMO_USER=$(get_id keystone user-create --name=demo \ 45 | --pass="$ADMIN_PASSWORD" \ 46 | --email=demo@hastexo.com) 47 | 48 | 49 | # Roles 50 | ADMIN_ROLE=$(get_id keystone role-create --name=admin) 51 | KEYSTONEADMIN_ROLE=$(get_id keystone role-create --name=KeystoneAdmin) 52 | KEYSTONESERVICE_ROLE=$(get_id keystone role-create --name=KeystoneServiceAdmin) 53 | # ANOTHER_ROLE demonstrates that an arbitrary role may be created and used 54 | # TODO(sleepsonthefloor): show how this can be used for rbac in the future! 55 | ANOTHER_ROLE=$(get_id keystone role-create --name=anotherrole) 56 | 57 | 58 | # Add Roles to Users in Tenants 59 | keystone user-role-add --user $ADMIN_USER --role $ADMIN_ROLE --tenant_id $ADMIN_TENANT 60 | keystone user-role-add --user $ADMIN_USER --role $ADMIN_ROLE --tenant_id $DEMO_TENANT 61 | keystone user-role-add --user $DEMO_USER --role $ANOTHER_ROLE --tenant_id $DEMO_TENANT 62 | 63 | # TODO(termie): these two might be dubious 64 | keystone user-role-add --user $ADMIN_USER --role $KEYSTONEADMIN_ROLE --tenant_id $ADMIN_TENANT 65 | keystone user-role-add --user $ADMIN_USER --role $KEYSTONESERVICE_ROLE --tenant_id $ADMIN_TENANT 66 | 67 | 68 | # The Member role is used by Horizon and Swift so we need to keep it: 69 | MEMBER_ROLE=$(get_id keystone role-create --name=Member) 70 | keystone user-role-add --user $DEMO_USER --role $MEMBER_ROLE --tenant_id $DEMO_TENANT 71 | keystone user-role-add --user $DEMO_USER --role $MEMBER_ROLE --tenant_id $INVIS_TENANT 72 | 73 | 74 | # Configure service users/roles 75 | NOVA_USER=$(get_id keystone user-create --name=nova \ 76 | --pass="$SERVICE_PASSWORD" \ 77 | --tenant_id $SERVICE_TENANT \ 78 | --email=nova@hastexo.com) 79 | keystone user-role-add --tenant_id $SERVICE_TENANT \ 80 | --user $NOVA_USER \ 81 | --role $ADMIN_ROLE 82 | 83 | GLANCE_USER=$(get_id keystone user-create --name=glance \ 84 | --pass="$SERVICE_PASSWORD" \ 85 | --tenant_id $SERVICE_TENANT \ 86 | --email=glance@hastexo.com) 87 | keystone user-role-add --tenant_id $SERVICE_TENANT \ 88 | --user $GLANCE_USER \ 89 | --role $ADMIN_ROLE 90 | 91 | if [[ "$ENABLED_SERVICES" =~ "swift" ]]; then 92 | SWIFT_USER=$(get_id keystone user-create --name=swift \ 93 | --pass="$SERVICE_PASSWORD" \ 94 | --tenant_id $SERVICE_TENANT \ 95 | --email=swift@hastexo.com) 96 | keystone user-role-add --tenant_id $SERVICE_TENANT \ 97 | --user $SWIFT_USER \ 98 | --role $ADMIN_ROLE 99 | # Nova needs ResellerAdmin role to download images when accessing 100 | # swift through the s3 api. The admin role in swift allows a user 101 | # to act as an admin for their tenant, but ResellerAdmin is needed 102 | # for a user to act as any tenant. The name of this role is also 103 | # configurable in swift-proxy.conf 104 | RESELLER_ROLE=$(get_id keystone role-create --name=ResellerAdmin) 105 | keystone user-role-add --tenant_id $SERVICE_TENANT \ 106 | --user $NOVA_USER \ 107 | --role $RESELLER_ROLE 108 | fi 109 | 110 | if [[ "$ENABLED_SERVICES" =~ "quantum" ]]; then 111 | QUANTUM_USER=$(get_id keystone user-create --name=quantum \ 112 | --pass="$SERVICE_PASSWORD" \ 113 | --tenant_id $SERVICE_TENANT \ 114 | --email=quantum@hastexo.com) 115 | keystone user-role-add --tenant_id $SERVICE_TENANT \ 116 | --user $QUANTUM_USER \ 117 | --role $ADMIN_ROLE 118 | fi 119 | -------------------------------------------------------------------------------- /oneStack.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # **oneStack.sh** is a tool to deploy complete and real OpenStack cloud computing service. 3 | 4 | # This script installs and configures various combinations of *Glance*, 5 | # *Horizon*, *Keystone*, *Nova*, *Mysql* and others. 6 | 7 | # Hily.Hoo@gmail.com (Kayven) 8 | # Learn more and get the most recent version at http://code.google.com/p/onestack/ 9 | 10 | set -o xtrace 11 | ## 请使用root执行本脚本! 12 | ## Ubuntu 12.04 ("Precise") 部署 OpenStack Essex(或者ubuntu11.10版本) 13 | ## 参考: 14 | ## http://hi.baidu.com/chenshake/item/29a7b8c1b96fb82d46d5c0fb 15 | ## http://docs.openstack.org/essex/openstack-compute/starter/content/ 16 | 17 | ## 一:准备系统 18 | ## 1:下载ubuntu 12.04. 服务器版本 19 | ## http://mirrors.ustc.edu.cn/ubuntu-releases/12.04/ubuntu-12.04-server-amd64.iso 20 | ## 2:安装OS 21 | ## 最小化安装,只需要安装ssh server就可以。 22 | ## 装完系统后 更新源里的包,更新系统。确保你装的是最新版本的包。 23 | 24 | ## 3:设置root权限 25 | ## 为了简单,全部都是用root来运行。 26 | if [ `whoami` != "root" ]; then 27 | sudo passwd 28 | exec su -c 'sh ./oneStack.sh' 29 | fi 30 | 31 | ## 4:设置参数和环境配置,直到两行#号结束 32 | ## 这个配置以后就不需要更改了,比如看到192.168.139.50等ip,不用更改,脚本会自动替换这些初始值。 33 | ## 可以变动的是,第500行的image的下载;或者去掉第七步开始的部分(上传镜像,创建实例) 34 | ########################################################################## 35 | ########################################################################## 36 | ## 如果原来安装过OpenStack,请先执行 ./delStack.sh 37 | ## 1)配置参数 38 | ## 数据库相关 39 | MYSQL_PASSWD=${MYSQL_PASSWD:-"cloud1234"} 40 | NOVA_DB_USERNAME=${NOVA_DB_USERNAME:-"novadbadmin"} 41 | NOVA_DB_PASSWD=${NOVA_DB_PASSWD:-"cloud1234"} 42 | GLANCE_DB_USERNAME=${GLANCE_DB_USERNAME:-"glancedbadmin"} 43 | GLANCE_DB_PASSWD=${GLANCE_DB_PASSWD:-"cloud1234"} 44 | 45 | ## 注意:单网卡的去掉interfaces的eth1,并把nova.conf里面eth1改完eth0即可! 46 | ## 自行检查下面network/interfaces的两个网卡设置 47 | ## 本机器外网ip (包括局域网的内网ip,相对于OpenStack内网而言的) 48 | OUT_IP="192.168.139.50" 49 | OUT_IP_PRE="192.168.139" 50 | ## nova-network内网ip 51 | IN_IP="10.0.0.1" 52 | IN_IP_PRE="10.0.0" 53 | ## flat的起始ip 54 | FLAT_IP="10.0.0.40" 55 | ## 浮动ip的起始值 56 | FLOAT_IP="192.168.139.225" 57 | 58 | ## 选择虚拟技术,裸机使用kvm,虚拟机里面使用qemu 59 | VIRT_TYPE="qemu" 60 | ## token, 登录dashboard密码(用户名admin) 61 | ADMIN_TOKEN="admin" 62 | ########################################################################## 63 | ## 2)检查系统是否ubuntu12.04,据反映11.10也可以正常安装,可以去掉这一段检查 64 | # Determine what system we are running on. This provides ``os_VENDOR``... 65 | # Determine OS Vendor, Release and Update 66 | #if [[ -x "`which lsb_release 2>/dev/null`" ]]; then 67 | os_VENDOR=$(lsb_release -i -s) 68 | os_RELEASE=$(lsb_release -r -s) 69 | os_UPDATE="" 70 | os_CODENAME=$(lsb_release -c -s) 71 | #fi 72 | if [ "Ubuntu" = "$os_VENDOR" ]; then 73 | DISTRO=$os_CODENAME 74 | else 75 | echo "The os didn't seems to be Ubuntu." 76 | exit 1 77 | fi 78 | echo $DISTRO 79 | if [ "precise" != ${DISTRO} -a "oneiric" != ${DISTRO} ]; then 80 | echo "WARNING: this script has been tested on oneiric or precise" 81 | exit 1 82 | fi 83 | 84 | ############################################################################ 85 | ## 3)以下系统配置,语言中文支持、国内APT源、网络设置(两个网卡),可以自行配置,注释掉这些步骤。 86 | ## locale 87 | cat </var/lib/locales/supported.d/local 88 | en_US.UTF-8 UTF-8 89 | zh_CN.UTF-8 UTF-8 90 | zh_CN.GBK GBK 91 | EOF 92 | sed -i -e 's/zh_CN:UTF-8/en_US:UTF-8/g' /etc/default/locale 93 | sed -i -e 's/zh_CN:zh/en_US:en/g' /etc/default/locale 94 | dpkg-reconfigure locales 95 | locale-gen 96 | ############################################################################ 97 | ## 4:设置网络 98 | SOURCE_FILE=${SOURCE_FILE:-"/etc/apt/sources.list"} 99 | cp $SOURCE_FILE $SOURCE_FILE.bak 100 | cat <$SOURCE_FILE 101 | deb http://debian.ustc.edu.cn/ubuntu/ precise main restricted universe multiverse 102 | deb http://debian.ustc.edu.cn/ubuntu/ precise-backports restricted universe multiverse 103 | deb http://debian.ustc.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse 104 | deb http://debian.ustc.edu.cn/ubuntu/ precise-security main restricted universe multiverse 105 | deb http://debian.ustc.edu.cn/ubuntu/ precise-updates main restricted universe multiverse 106 | deb-src http://debian.ustc.edu.cn/ubuntu/ precise main restricted universe multiverse 107 | deb-src http://debian.ustc.edu.cn/ubuntu/ precise-backports main restricted universe multiverse 108 | deb-src http://debian.ustc.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse 109 | deb-src http://debian.ustc.edu.cn/ubuntu/ precise-security main restricted universe multiverse 110 | deb-src http://debian.ustc.edu.cn/ubuntu/ precise-updates main restricted universe multiverse 111 | APT 112 | #sed -i 's/debian.ustc.edu.cn/mirrors.163.com/g' $SOURCE_FILE 113 | 114 | # network configure 115 | NETWORK_CONF=${NETWORK_CONF:-"/etc/network/interfaces"} 116 | if ! grep -q eth1 $NETWORK_CONF; then 117 | cat <$NETWORK_CONF 118 | auto lo 119 | iface lo inet loopback 120 | 121 | # The primary network interface 122 | auto eth0 123 | iface eth0 inet static 124 | pre-up ifconfig eth0 hw ether b8:ac:6f:9a:ee:e4 125 | address 192.168.139.50 126 | netmask 255.255.255.0 127 | network 192.168.139.0 128 | broadcast 192.168.139.255 129 | gateway 192.168.139.253 130 | dns-nameservers 210.72.128.8 131 | 132 | auto eth1 133 | iface eth1 inet static 134 | pre-up ifconfig eth1 hw ether b8:ac:6f:9a:ee:e4 135 | address 10.0.0.1 136 | netmask 255.255.255.0 137 | network 10.0.0.0 138 | broadcast 10.0.0.255 139 | INTERFACES 140 | /etc/init.d/networking restart 141 | fi 142 | ## 以上系统配置,可以自行配置,注释掉这些步骤。 143 | ############################################################################ 144 | ############################################################################ 145 | 146 | apt-get update 147 | 148 | 149 | 150 | ## 5:安装bridge 151 | apt-get install -y bridge-utils 152 | ## 6:设置NTP 153 | apt-get install -y ntp 154 | if ! grep -q fudge "/etc/ntp.conf"; then 155 | cat < /etc/ntp.conf 156 | server ntp.ubuntu.com iburst 157 | server 127.127.1.0 158 | fudge 127.127.1.0 stratum 10 159 | NTPconf 160 | fi 161 | service ntp restart 162 | ## 7:设置Iscsi 163 | apt-get install -y tgt ssh w3m unzip wget curl expect 164 | ## 安装iscsi客户端、安装rabbitmq 165 | apt-get install -y open-iscsi open-iscsi-utils 166 | apt-get install -y rabbitmq-server memcached python-memcache 167 | apt-get install -y kvm libvirt-bin qemu qemu-kvm 168 | 169 | ## 二:安装mysql和创建相关数据库 170 | ## Openstack的组件:nova,keystone,glance,都需要数据库。不过目前官方建议keystone,采用sqlite存储,而不用mysql存放。所以我们只需要创建nova和glance两个数据库就可以。 171 | ## 1:安装mysql 172 | ## 过程中,会提示你输入root密码。通过debconf-set-selections读取跳过这一步. 173 | #MYSQL_PASSWD=${MYSQL_PASSWD:-"cloud1234"} 174 | ## apt-get install debconf debconf-utils 175 | cat <> /etc/apache2/httpd.conf 188 | /etc/init.d/apache2 restart 189 | fi 190 | 191 | ## 2:安装phpmyadmin (可选) 192 | cat <> /etc/profile 270 | export OS_TENANT_NAME=admin 271 | export OS_USERNAME=admin 272 | export OS_PASSWORD=ADMIN 273 | export OS_AUTH_URL="http://localhost:5000/v2.0/" 274 | ENV_AUTH 275 | sed -i -e "s/ADMIN/$ADMIN_TOKEN/g" /etc/profile 276 | export OS_TENANT_NAME=admin 277 | export OS_USERNAME=admin 278 | export OS_PASSWORD=$ADMIN_TOKEN 279 | export OS_AUTH_URL="http://localhost:5000/v2.0/" 280 | #source /etc/profile 281 | ## 检查检查 282 | ## # export | grep OS_ 283 | ## declare -x OS_AUTH_URL="http://localhost:5000/v2.0/" 284 | ## declare -x OS_PASSWORD="hastexo" 285 | ## declare -x OS_TENANT_NAME="admin" 286 | ## declare -x OS_USERNAME="admin" 287 | ## 这个时候,直接运行 288 | ## root@node6:~# keystone user-list 289 | 290 | 291 | ## 四:安装和配置glance 292 | ## 1:安装软件 293 | apt-get install -y glance glance-api glance-client glance-common glance-registry python-glance 294 | ## 2:配置/etc/glance/glance-api-paste.ini 295 | ## 修改文件最后3行,这些设置都是keystone导入数据的时候设置的。 296 | sed -i -e " 297 | s/%SERVICE_TENANT_NAME%/admin/g; 298 | s/%SERVICE_USER%/admin/g; 299 | s/%SERVICE_PASSWORD%/$ADMIN_TOKEN/g; 300 | " /etc/glance/glance-api-paste.ini 301 | 302 | ## 3:设置 /etc/glance/glance-registry-paste.ini 303 | sed -i -e " 304 | s/%SERVICE_TENANT_NAME%/admin/g; 305 | s/%SERVICE_USER%/admin/g; 306 | s/%SERVICE_PASSWORD%/$ADMIN_TOKEN/g; 307 | " /etc/glance/glance-registry-paste.ini 308 | ## 4:配置/etc/glance/glance-registry.conf 309 | ## 修改 310 | ## #sql_connection = sqlite:////var/lib/glance/glance.sqlite 311 | ## sql_connection = mysql://glancedbadmin:ohC3teiv@10.42.0.6/glance 312 | ## 在末尾添加两行 313 | ## [paste_deploy] 314 | ## flavor = keystone 315 | GLANCE_API_CONF=${GLANCE_API_CONF:-"/etc/glance/glance-api.conf"} 316 | GLANCE_REGISTRY_CONF=${GLANCE_REGISTRY_CONF:-"/etc/glance/glance-registry.conf"} 317 | PUBLIC_IP=${PUBLIC_IP:-"192.168.139.50"} 318 | sed -i '/sql_connection = .*/{s|sqlite:///.*|mysql://'"$GLANCE_DB_USERNAME"':'"$GLANCE_DB_PASSWD"'@'"$PUBLIC_IP"'/glance|g}' $GLANCE_API_CONF 319 | cat <>$GLANCE_API_CONF 320 | [paste_deploy] 321 | flavor = keystone 322 | EOF 323 | sed -i '/sql_connection = .*/{s|sqlite:///.*|mysql://'"$GLANCE_DB_USERNAME"':'"$GLANCE_DB_PASSWD"'@'"$PUBLIC_IP"'/glance|g}' $GLANCE_REGISTRY_CONF 324 | cat <>$GLANCE_REGISTRY_CONF 325 | [paste_deploy] 326 | flavor = keystone 327 | EOF 328 | 329 | ## 5:配置/etc/glance/glance-api.conf 330 | ## 6:同步数据库 331 | glance-manage version_control 0 332 | glance-manage db_sync 333 | service glance-api restart && service glance-registry restart 334 | 335 | ## 7:验证glance服务是否正常 336 | # glance index 337 | ## 没有任何的输出。表示正常。 338 | ## #echo $? 339 | ## 下面会输出0 ,表示正常。 340 | ## # glance --version 341 | ## glance 2012.1 342 | 343 | ## 8:下载镜像并上传 344 | ## ubuntu官方专门提供image,http://uec-images.ubuntu.com。不过一定要注意 345 | ## 这些镜像,都是必须使用密钥登录,直接用用户名密码是无法的登录的。 346 | ## 下载镜像 347 | ## http://cloud-images.ubuntu.com/precise/current/ 348 | ## 这应该是ubuntu提供的最新的稳定的镜像。 349 | #wget http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-amd64-disk1.img 350 | ## expect -c "spawn /usr/bin/scp yuan@192.168.139.84:/home/yuan/precise-server-cloudimg-amd64-disk1.img .; expect { 351 | ## \"password:\"; { 352 | ## send \"yyhu\r\n\"; 353 | ## }; \"Are you sure you want to continue connecting (yes/no)?\" { 354 | ## send \"yes\r\n\" ; 355 | ## expect \"password:\"; 356 | ## send \"yyhu\r\n\"; 357 | ## } 358 | ## } ; set timeout -1; expect -re \"100%\";" 359 | ##^^####sleep 5; expect -re \"password\"; send \"yyhu\r\n\"; 360 | 361 | 362 | # glance add name="Ubuntu12.04-amd64" is_public=true container_format=ovf disk_format=qcow2 < precise-server-cloudimg-amd64-disk1.img 363 | ## 这里还有一种方法上传,如果你没用环境变量。 364 | ## glance --tenant=admin--username=admin --password=hastexo --auth_url=http://127.0.0.1:5000/v2.0 add name="Ubuntu 11.10 cloudimg amd64" is_public=true container_format=ovf disk_format=qcow2 < /root/precise-server-cloudimg-amd64-disk1.img 365 | ## 上传完镜像后。在运行 366 | ## glance index 367 | 368 | 369 | ## 五:安装配置nova 370 | ## 1:安装nova相关组件 371 | apt-get install -y nova-api nova-cert nova-common nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume python-nova python-novaclient nova-consoleauth python-novnc novnc 372 | ## 2:配置 /etc/nova/nova.conf 373 | ## 如果你是在虚拟机里测试Openstack。你需要把默认的虚拟化引擎从kvm改成qemu。 374 | cat < /etc/nova/nova.conf 375 | --dhcpbridge_flagfile=/etc/nova/nova.conf 376 | --dhcpbridge=/usr/bin/nova-dhcpbridge 377 | --logdir=/var/log/nova 378 | --state_path=/var/lib/nova 379 | --lock_path=/var/lock/nova 380 | --allow_admin_api=true 381 | --use_deprecated_auth=false 382 | --auth_strategy=keystone 383 | --scheduler_driver=nova.scheduler.simple.SimpleScheduler 384 | --s3_host=192.168.139.50 385 | --ec2_host=192.168.139.50 386 | --rabbit_host=192.168.139.50 387 | --cc_host=192.168.139.50 388 | --nova_url=http://192.168.139.50:8774/v1.1/ 389 | --routing_source_ip=192.168.139.50 390 | --glance_api_servers=192.168.139.50:9292 391 | --image_service=nova.image.glance.GlanceImageService 392 | --iscsi_ip_prefix=10.0.0 393 | --sql_connection=mysql://novadbadmin:cloud1234@192.168.139.50/nova 394 | --ec2_url=http://192.168.139.50:8773/services/Cloud 395 | --keystone_ec2_url=http://192.168.139.50:5000/v2.0/ec2tokens 396 | --api_paste_config=/etc/nova/api-paste.ini 397 | --libvirt_type=kvm 398 | --libvirt_use_virtio_for_bridges=true 399 | --start_guests_on_host_boot=true 400 | --resume_guests_state_on_host_boot=true 401 | 402 | #novnc 403 | --novnc_enabled=true 404 | --novncproxy_base_url= http://192.168.139.50:6080/vnc_auto.html 405 | --vncserver_proxyclient_address=127.0.0.1 406 | --vncserver_listen=127.0.0.1 407 | 408 | # network specific settings 409 | --network_manager=nova.network.manager.FlatDHCPManager 410 | --public_interface=eth0 411 | --flat_interface=eth1 412 | --flat_network_bridge=br100 413 | --fixed_range=10.0.0.1/27 414 | --floating_range=192.168.139.225/27 415 | --network_size=32 416 | --flat_network_dhcp_start=10.0.0.40 417 | --flat_injected=False 418 | --force_dhcp_release 419 | --iscsi_helper=tgtadm 420 | --connection_type=libvirt 421 | --root_helper=sudo nova-rootwrap 422 | #--verbose 423 | --verbose=False 424 | NOVAconf 425 | ## if ! kvm-ok 1>/dev/null 2>&1; then 426 | ## sed -i -e "s/kvm/qemu/" /etc/nova/nova-compute.conf 427 | ## fi 428 | 429 | sed -i -e "s/novadbadmin/$NOVA_DB_USERNAME/g;s/cloud1234/$NOVA_DB_PASSWD/g" /etc/nova/nova.conf 430 | sed -i -e "s/192.168.139.50/$OUT_IP/g;s/192.168.139.225/$FLOAT_IP/g;" /etc/nova/nova.conf 431 | sed -i -e "s/10.0.0.1/$IN_IP/g;s/10.0.0.40/$FLAT_IP/g;s/10.0.0/$IN_IP_PRE/g;" /etc/nova/nova.conf 432 | ## kvm or qemu? 433 | sed -i -e "s/kvm/$VIRT_TYPE/g" /etc/nova/nova.conf 434 | sed -i -e "s/kvm/$VIRT_TYPE/g" /etc/nova/nova-compute.conf 435 | 436 | ## 3:配置/etc/nova/api-paste.ini 437 | sed -i -e " 438 | s/%SERVICE_TENANT_NAME%/admin/g; 439 | s/%SERVICE_USER%/admin/g; 440 | s/%SERVICE_PASSWORD%/$ADMIN_TOKEN/g; 441 | " /etc/nova/api-paste.ini 442 | # 4:停止和重启nova相关服务 443 | 444 | ## 更改卷组,否则启动nova-volume会出错。 445 | vgrename `hostname` nova-volumes 446 | ## 设置ipv4转发,否则外面能连接虚拟机,虚拟机访问不了外面 447 | sysctl -w net.ipv4.ip_forward=1 448 | ##or: 449 | ##echo 1 > /proc/sys/net/ipv4/ip_forward 450 | 451 | for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler novnc nova-volume nova-consoleauth; do service "$a" restart; done 452 | 453 | 454 | 455 | ## 六:安装和配置Dashbaord 456 | ## 1:安装dashbaord 457 | apt-get install -y libapache2-mod-wsgi openstack-dashboard 458 | /etc/init.d/apache2 restart 459 | 460 | ## 这个时候,你就可以登录dashboard 461 | ## http://192.168.139.50 462 | ## user:admin 463 | ## pass:ADMIN 464 | ## 之后通过前端web管理 465 | 466 | 467 | ## 七:创建第一个VM,可以通过上面安装的web管理系统创建。 468 | 469 | # 0:同步数据库 470 | ## 以前我运行同步数据库,如果正确, 当nova.conf 471 | ## --verbose=False 472 | ## 是没有任何的输出,否则有一堆是输出。 473 | nova-manage db sync 474 | 475 | # 创建网络 476 | nova-manage network create private --fixed_range_v4=10.0.0.1/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32 477 | 478 | ## 设定floating IP 479 | nova-manage floating create --ip_range=192.168.139.225/27 480 | 481 | ## 设置权限 482 | chown -R nova:nova /etc/nova 483 | ## 再重启相关服务 484 | for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler novnc nova-volume nova-consoleauth; do service "$a" restart; done 485 | sleep 10 486 | 487 | ## 1:检查nova服务 488 | ## 一路回车,就可以了。通过expect可以不用输入。 489 | if [ ! -e ~/.ssh/id_rsa ]; then 490 | expect -c "spawn ssh-keygen ; set timeout 5; expect \":\"; send \"\r\n\"; set timeout 3; expect \":\"; send \"\r\n\";set timeout 3; expect \":\"; send \"\r\n\"; expect eof;" 491 | fi 492 | ## 2:上传密钥到数据库 493 | nova keypair-add --pub_key ~/.ssh/id_rsa.pub key1 494 | ## nova keypair-list 495 | 496 | 497 | ## 打开防火墙 498 | nova secgroup-add-rule default tcp 1 65535 0.0.0.0/0 499 | nova secgroup-add-rule default udp 1 65535 0.0.0.0/0 500 | nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 501 | 502 | 503 | ## 4:开始创建虚拟机 504 | ## nova image-list 505 | ## nova flavor-list 506 | ## 创建虚拟机 507 | # nova-manage flavor create --name=m1.minitest --memory=384 --cpu=1 --root_gb=1 --flavor=6 --ephemeral_gb=1 508 | 509 | ## 上面的下载镜像移到这一步,可以去掉以下的步骤 510 | wget http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-amd64-disk1.img 511 | glance add name="Ubuntu12.04-amd64" is_public=true container_format=ovf disk_format=qcow2 < precise-server-cloudimg-amd64-disk1.img 512 | nova boot --flavor 1 --image "Ubuntu12.04-amd64" --key_name key1 cloud01 513 | # nova show cloud01 514 | # nova console-log cloud01 515 | 516 | ##关联vm 517 | sleep 10 518 | ## nova floating-ip-create 519 | ## nova add-floating-ip cloud01 192.168.139.226 520 | nova show cloud01 521 | nova add-floating-ip cloud01 `nova floating-ip-create | awk 'FNR==4{print $2}'` 522 | nova list 523 | nova show cloud01 524 | # ssh instance 525 | # ssh-keygen -f "/home/cloud/.ssh/known_hosts" -R 10.0.0.2 526 | # ssh -i ~/.ssh/id_rsa ubuntu@10.0.0.2 527 | 528 | ## 5.有用的命令 529 | ### 查看keypair 530 | ### nova keypair-list 531 | ### 删除keypair 532 | ### nova keypair-delete 533 | ### 查看vm 534 | ### nova list 535 | ### 删除vm,vm的ID 536 | ### nova delete 10d1bc19-b2c4-4eee-a5c8-b256bda3f343 537 | 538 | ## 八、完成安装部署 539 | cat <&1 540 | 1. login the dashboard 541 | http://192.168.139.50 542 | user:admin 543 | pass:admin or $ADMIN_TOKEN 544 | 2. login a instance("cloud01") 545 | ssh -i ~/.ssh/id_rsa ubuntu@10.0.0.2 546 | 3. view & manage 547 | nova list 548 | nova show cloud01 549 | ... 550 | 4. enjoy yourself! (Contact Hily.Hoo@gmail.com) 551 | EOF 552 | -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- 1 | 2 | ## 1. deploy OpenStack from scrach. 3 | ## 部署All-in-one的OpenStack系统 4 | Only checkout and run it! 5 | 1. Setup a fresh Ubuntu Precise(12.04) OS. 6 | 7 | 2. Clone onestack: 8 | ##svn checkout http://onestack.googlecode.com/svn/trunk/ onestack-read-only 9 | git clone git://github.com/Kayven/OneStack.git 10 | 11 | 3. run it. 12 | #cd onestack-read-only/ && ./oneStack.sh 13 | cd OneStack && ./oneStack.sh 14 | 15 | or 16 | 17 | ## set up OpenStack in 2 steps: 18 | ## 分拆oneStack.sh,首先安装基本系统包括5大组件和必要的服务,然后上传镜像,创建实例,需要先做网络等配置,参照oneStack.sh里面的说明 19 | base: ./setup_base.sh 20 | img and instance: ./setup_test.sh 21 | 22 | 23 | ## usefull tools 24 | ## 2. delete OpenStack 25 | ./delStack.sh 26 | 27 | ## 3. delete all 28 | ./delAll.sh 29 | 30 | ## 4. reset OpenStack 31 | ./resetStack.sh clear 32 | ./resetStack.sh 33 | 34 | ## 5. add OpenStack compute node 35 | ./addComputeNode.sh 36 | 37 | ## 6. add OpenStack client manage node 38 | ./addClient.sh 39 | 40 | ## 8. otherwise, contact me at Hily.Hoo@gmail.com, thanks. 41 | 42 | -------------------------------------------------------------------------------- /resetStack.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # *./resetStack.sh clear* clear the database. 3 | # *./resetStack.sh * reset the database and create a instance. 4 | 5 | # Hily.Hoo@gmail.com (Kayven) 6 | # Learn more and get the most recent version at http://code.google.com/p/onestack/ 7 | set -o xtrace 8 | 9 | if [ $1 ] && [ $1 = "clear" ]; then 10 | nova delete `nova list | awk 'FNR==4{print $4}'` 11 | MYSQL_PASSWD=${MYSQL_PASSWD:-"cloud1234"} 12 | NOVA_DB_USERNAME=${NOVA_DB_USERNAME:-"novadbadmin"} 13 | NOVA_DB_PASSWD=${NOVA_DB_PASSWD:-"cloud1234"} 14 | GLANCE_DB_USERNAME=${GLANCE_DB_USERNAME:-"glancedbadmin"} 15 | GLANCE_DB_PASSWD=${GLANCE_DB_PASSWD:-"cloud1234"} 16 | mysql -uroot -p$MYSQL_PASSWD -e "DROP DATABASE IF EXISTS nova;" 17 | mysql -uroot -p$MYSQL_PASSWD -e "CREATE DATABASE nova;" 18 | mysql -uroot -p$MYSQL_PASSWD -e "GRANT ALL ON nova.* TO '$NOVA_DB_USERNAME'@'%' IDENTIFIED BY '$NOVA_DB_PASSWD';" 19 | reboot 20 | else 21 | # 5:同步数据库 22 | ## 以前我运行同步数据库,如果正确, 当nova.conf 23 | ## --verbose=False 24 | ## 是没有任何的输出,否则有一堆是输出。 25 | nova-manage db sync 26 | 27 | # 创建网络 28 | nova-manage network create private --fixed_range_v4=10.0.0.1/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32 29 | 30 | ## 设定floating IP 31 | nova-manage floating create --ip_range=192.168.139.225/27 32 | 33 | ## 设置权限 34 | chown -R nova:nova /etc/nova 35 | ## 再重启相关服务 36 | for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler novnc nova-volume nova-consoleauth; do service "$a" restart; done 37 | sleep 10 38 | ## 6:检查nova服务 39 | ## 一路回车,就可以了。通过expect可以不用输入。 40 | if [ ! -e ~/.ssh/id_rsa ]; then 41 | expect -c "spawn ssh-keygen ; set timeout 5; expect \":\"; send \"\r\n\"; set timeout 3; expect \":\"; send \"\r\n\";set timeout 3; expect \":\"; send \"\r\n\"; expect eof;" 42 | fi 43 | ## 2:上传密钥到数据库 44 | nova keypair-add --pub_key ~/.ssh/id_rsa.pub key1 45 | ## nova keypair-list 46 | 47 | ## 打开防火墙 48 | nova secgroup-add-rule default tcp 1 65535 0.0.0.0/0 49 | nova secgroup-add-rule default udp 1 65535 0.0.0.0/0 50 | nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 51 | 52 | # ssh instance 53 | # ssh-keygen -f "/home/cloud/.ssh/known_hosts" -R 10.0.0.2 54 | # ssh -i ~/.ssh/id_rsa ubuntu@10.0.0.2 55 | 56 | ## 4:开始创建虚拟机 57 | ## nova image-list 58 | ## nova flavor-list 59 | ## 创建虚拟机 60 | # nova-manage flavor create --name=m1.minitest --memory=384 --cpu=1 --root_gb=1 --flavor=6 --ephemeral_gb=1 61 | nova boot --flavor 1 --image "Ubuntu12.04-amd64" --key_name key1 cloud01 62 | # nova show cloud01 63 | # nova console-log cloud01 64 | 65 | ##关联vm 66 | sleep 10 67 | ## nova floating-ip-create 68 | ## nova add-floating-ip cloud01 192.168.139.226 69 | nova show cloud01 70 | nova add-floating-ip cloud01 `nova floating-ip-create | awk 'FNR==4{print $2}'` 71 | nova list 72 | nova show cloud01 73 | fi 74 | -------------------------------------------------------------------------------- /setup_base.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # **setup_base.sh** is a tool to deploy base and real OpenStack cloud computing service. 3 | 4 | # This script installs and configures various combinations of *Glance*, 5 | # *Horizon*, *Keystone*, *Nova*, *Mysql* and others. 6 | 7 | # Hily.Hoo@gmail.com (Kayven) 8 | # Learn more and get the most recent version at http://code.google.com/p/onestack/ 9 | 10 | set -o xtrace 11 | ## 请使用root执行本脚本! 12 | ## Ubuntu 12.04 ("Precise") 部署 OpenStack Essex 13 | ## 参考: 14 | ## http://docs.openstack.org/essex/openstack-compute/starter/content/ 15 | 16 | ## 本脚本建立基本的OpenStack系统,没有上传镜像,没有创建实例,使用 setup_test.sh可以完成这些。 17 | ## 注意:如果没有设置apt源、网络等,请先设置,或者使用oneStack.sh安装(该脚本里面有详细说明)。 18 | 19 | 20 | 21 | ## 一:准备系统 22 | ## 1、设置参数 23 | ########################################################################## 24 | ## 如果原来安装过OpenStack,请先执行 ./delStack.sh 25 | ########################################################################## 26 | ## 配置参数 27 | MYSQL_PASSWD=${MYSQL_PASSWD:-"cloud1234"} 28 | NOVA_DB_USERNAME=${NOVA_DB_USERNAME:-"novadbadmin"} 29 | NOVA_DB_PASSWD=${NOVA_DB_PASSWD:-"cloud1234"} 30 | GLANCE_DB_USERNAME=${GLANCE_DB_USERNAME:-"glancedbadmin"} 31 | GLANCE_DB_PASSWD=${GLANCE_DB_PASSWD:-"cloud1234"} 32 | 33 | ## 自行检查下面network/interfaces的两个网卡设置 34 | OUT_IP="192.168.139.50" 35 | OUT_IP_PRE="192.168.139" 36 | IN_IP="10.0.0.1" 37 | IN_IP_PRE="10.0.0" 38 | FLAT_IP="10.0.0.40" 39 | FLOAT_IP="192.168.139.225" 40 | 41 | ## 选择虚拟技术,裸机使用kvm,虚拟机里面使用qemu 42 | VIRT_TYPE="qemu" 43 | ## token, 登录dashboard密码 44 | ADMIN_TOKEN="admin" 45 | ########################################################################## 46 | 47 | # Determine what system we are running on. This provides ``os_VENDOR``... 48 | # Determine OS Vendor, Release and Update 49 | #if [[ -x "`which lsb_release 2>/dev/null`" ]]; then 50 | os_VENDOR=$(lsb_release -i -s) 51 | os_RELEASE=$(lsb_release -r -s) 52 | os_UPDATE="" 53 | os_CODENAME=$(lsb_release -c -s) 54 | #fi 55 | 56 | if [ "Ubuntu" = "$os_VENDOR" ]; then 57 | DISTRO=$os_CODENAME 58 | else 59 | echo "The os didn't seems to be Ubuntu." 60 | exit 1 61 | fi 62 | echo $DISTRO 63 | if [ "precise" != ${DISTRO} -a "oneiric" != ${DISTRO} ]; then 64 | echo "WARNING: this script has been tested on oneiric or precise" 65 | exit 1 66 | fi 67 | 68 | ############################################################################ 69 | ############################################################################ 70 | 71 | 72 | ## 4:设置网络 73 | SOURCE_FILE=${SOURCE_FILE:-"/etc/apt/sources.list"} 74 | 75 | # network configure 76 | NETWORK_CONF=${NETWORK_CONF:-"/etc/network/interfaces"} 77 | if ! grep -q eth1 $NETWORK_CONF; then 78 | cat <$NETWORK_CONF 79 | auto lo 80 | iface lo inet loopback 81 | 82 | # The primary network interface 83 | auto eth0 84 | iface eth0 inet static 85 | pre-up ifconfig eth0 hw ether b8:ac:6f:9a:ee:e4 86 | address 192.168.139.50 87 | netmask 255.255.255.0 88 | network 192.168.139.0 89 | broadcast 192.168.139.255 90 | gateway 192.168.139.253 91 | dns-nameservers 210.72.128.8 92 | 93 | auto eth1 94 | iface eth1 inet static 95 | pre-up ifconfig eth1 hw ether b8:ac:6f:9a:ee:e4 96 | address 10.0.0.1 97 | netmask 255.255.255.0 98 | network 10.0.0.0 99 | broadcast 10.0.0.255 100 | INTERFACES 101 | /etc/init.d/networking restart 102 | fi 103 | ## 以上系统配置,可以自行配置,注释掉这些步骤。 104 | ############################################################################ 105 | ############################################################################ 106 | 107 | apt-get update 108 | 109 | ## 5:安装bridge 110 | apt-get install -y bridge-utils 111 | ## 6:设置NTP 112 | apt-get install -y ntp 113 | if ! grep -q fudge "/etc/ntp.conf"; then 114 | cat < /etc/ntp.conf 115 | server ntp.ubuntu.com iburst 116 | server 127.127.1.0 117 | fudge 127.127.1.0 stratum 10 118 | NTPconf 119 | fi 120 | service ntp restart 121 | ## 7:设置Iscsi 122 | apt-get install -y tgt ssh w3m unzip wget curl expect 123 | ## 安装iscsi客户端、安装rabbitmq 124 | apt-get install -y open-iscsi open-iscsi-utils 125 | apt-get install -y rabbitmq-server memcached python-memcache 126 | apt-get install -y kvm libvirt-bin qemu qemu-kvm 127 | 128 | ## 二:安装mysql和创建相关数据库 129 | ## Openstack的组件:nova,keystone,glance,都需要数据库。不过目前官方建议keystone,采用sqlite存储,而不用mysql存放。所以我们只需要创建nova和glance两个数据库就可以。 130 | ## 1:安装mysql 131 | ## 过程中,会提示你输入root密码。通过debconf-set-selections读取跳过这一步. 132 | #MYSQL_PASSWD=${MYSQL_PASSWD:-"cloud1234"} 133 | ## apt-get install debconf debconf-utils 134 | cat <> /etc/apache2/httpd.conf 147 | /etc/init.d/apache2 restart 148 | fi 149 | 150 | ## 2:安装phpmyadmin (可选) 151 | cat <> /etc/profile 229 | export OS_TENANT_NAME=admin 230 | export OS_USERNAME=admin 231 | export OS_PASSWORD=ADMIN 232 | export OS_AUTH_URL="http://localhost:5000/v2.0/" 233 | ENV_AUTH 234 | sed -i -e "s/ADMIN/$ADMIN_TOKEN/g" /etc/profile 235 | export OS_TENANT_NAME=admin 236 | export OS_USERNAME=admin 237 | export OS_PASSWORD=$ADMIN_TOKEN 238 | export OS_AUTH_URL="http://localhost:5000/v2.0/" 239 | #source /etc/profile 240 | ## 检查检查 241 | ## # export | grep OS_ 242 | ## declare -x OS_AUTH_URL="http://localhost:5000/v2.0/" 243 | ## declare -x OS_PASSWORD="hastexo" 244 | ## declare -x OS_TENANT_NAME="admin" 245 | ## declare -x OS_USERNAME="admin" 246 | ## 这个时候,直接运行 247 | ## root@node6:~# keystone user-list 248 | 249 | 250 | ## 四:安装和配置glance 251 | ## 1:安装软件 252 | apt-get install -y glance glance-api glance-client glance-common glance-registry python-glance 253 | ## 2:配置/etc/glance/glance-api-paste.ini 254 | ## 修改文件最后3行,这些设置都是keystone导入数据的时候设置的。 255 | sed -i -e " 256 | s/%SERVICE_TENANT_NAME%/admin/g; 257 | s/%SERVICE_USER%/admin/g; 258 | s/%SERVICE_PASSWORD%/$ADMIN_TOKEN/g; 259 | " /etc/glance/glance-api-paste.ini 260 | 261 | ## 3:设置 /etc/glance/glance-registry-paste.ini 262 | sed -i -e " 263 | s/%SERVICE_TENANT_NAME%/admin/g; 264 | s/%SERVICE_USER%/admin/g; 265 | s/%SERVICE_PASSWORD%/$ADMIN_TOKEN/g; 266 | " /etc/glance/glance-registry-paste.ini 267 | ## 4:配置/etc/glance/glance-registry.conf 268 | ## 修改 269 | ## #sql_connection = sqlite:////var/lib/glance/glance.sqlite 270 | ## sql_connection = mysql://glancedbadmin:ohC3teiv@10.42.0.6/glance 271 | ## 在末尾添加两行 272 | ## [paste_deploy] 273 | ## flavor = keystone 274 | GLANCE_API_CONF=${GLANCE_API_CONF:-"/etc/glance/glance-api.conf"} 275 | GLANCE_REGISTRY_CONF=${GLANCE_REGISTRY_CONF:-"/etc/glance/glance-registry.conf"} 276 | PUBLIC_IP=${PUBLIC_IP:-"192.168.139.50"} 277 | sed -i '/sql_connection = .*/{s|sqlite:///.*|mysql://'"$GLANCE_DB_USERNAME"':'"$GLANCE_DB_PASSWD"'@'"$PUBLIC_IP"'/glance|g}' $GLANCE_API_CONF 278 | cat <>$GLANCE_API_CONF 279 | [paste_deploy] 280 | flavor = keystone 281 | EOF 282 | sed -i '/sql_connection = .*/{s|sqlite:///.*|mysql://'"$GLANCE_DB_USERNAME"':'"$GLANCE_DB_PASSWD"'@'"$PUBLIC_IP"'/glance|g}' $GLANCE_REGISTRY_CONF 283 | cat <>$GLANCE_REGISTRY_CONF 284 | [paste_deploy] 285 | flavor = keystone 286 | EOF 287 | 288 | ## 5:配置/etc/glance/glance-api.conf 289 | ## 6:同步数据库 290 | glance-manage version_control 0 291 | glance-manage db_sync 292 | service glance-api restart && service glance-registry restart 293 | 294 | ## 7:验证glance服务是否正常 295 | # glance index 296 | ## 没有任何的输出。表示正常。 297 | ## #echo $? 298 | ## 下面会输出0 ,表示正常。 299 | ## # glance --version 300 | ## glance 2012.1 301 | 302 | 303 | ## 五:安装配置nova 304 | ## 1:安装nova相关组件 305 | apt-get install -y nova-api nova-cert nova-common nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume python-nova python-novaclient nova-consoleauth python-novnc novnc 306 | ## 2:配置 /etc/nova/nova.conf 307 | ## 如果你是在虚拟机里测试Openstack。你需要把默认的虚拟化引擎从kvm改成qemu。 308 | cat < /etc/nova/nova.conf 309 | --dhcpbridge_flagfile=/etc/nova/nova.conf 310 | --dhcpbridge=/usr/bin/nova-dhcpbridge 311 | --logdir=/var/log/nova 312 | --state_path=/var/lib/nova 313 | --lock_path=/var/lock/nova 314 | --allow_admin_api=true 315 | --use_deprecated_auth=false 316 | --auth_strategy=keystone 317 | --scheduler_driver=nova.scheduler.simple.SimpleScheduler 318 | --s3_host=192.168.139.50 319 | --ec2_host=192.168.139.50 320 | --rabbit_host=192.168.139.50 321 | --cc_host=192.168.139.50 322 | --nova_url=http://192.168.139.50:8774/v1.1/ 323 | --routing_source_ip=192.168.139.50 324 | --glance_api_servers=192.168.139.50:9292 325 | --image_service=nova.image.glance.GlanceImageService 326 | --iscsi_ip_prefix=10.0.0 327 | --sql_connection=mysql://novadbadmin:cloud1234@192.168.139.50/nova 328 | --ec2_url=http://192.168.139.50:8773/services/Cloud 329 | --keystone_ec2_url=http://192.168.139.50:5000/v2.0/ec2tokens 330 | --api_paste_config=/etc/nova/api-paste.ini 331 | --libvirt_type=kvm 332 | --libvirt_use_virtio_for_bridges=true 333 | --start_guests_on_host_boot=true 334 | --resume_guests_state_on_host_boot=true 335 | 336 | #novnc 337 | --novnc_enabled=true 338 | --novncproxy_base_url= http://192.168.139.50:6080/vnc_auto.html 339 | --vncserver_proxyclient_address=127.0.0.1 340 | --vncserver_listen=127.0.0.1 341 | 342 | # network specific settings 343 | --network_manager=nova.network.manager.FlatDHCPManager 344 | --public_interface=eth0 345 | --flat_interface=eth1 346 | --flat_network_bridge=br100 347 | --fixed_range=10.0.0.1/27 348 | --floating_range=192.168.139.225/27 349 | --network_size=32 350 | --flat_network_dhcp_start=10.0.0.40 351 | --flat_injected=False 352 | --force_dhcp_release 353 | --iscsi_helper=tgtadm 354 | --connection_type=libvirt 355 | --root_helper=sudo nova-rootwrap 356 | #--verbose 357 | --verbose=False 358 | NOVAconf 359 | ## if ! kvm-ok 1>/dev/null 2>&1; then 360 | ## sed -i -e "s/kvm/qemu/" /etc/nova/nova-compute.conf 361 | ## fi 362 | 363 | sed -i -e "s/novadbadmin/$NOVA_DB_USERNAME/g;s/cloud1234/$NOVA_DB_PASSWD/g" /etc/nova/nova.conf 364 | sed -i -e "s/192.168.139.50/$OUT_IP/g;s/192.168.139.225/$FLOAT_IP/g;" /etc/nova/nova.conf 365 | sed -i -e "s/10.0.0.1/$IN_IP/g;s/10.0.0.40/$FLAT_IP/g;s/10.0.0/$IN_IP_PRE/g;" /etc/nova/nova.conf 366 | ## kvm or qemu? 367 | sed -i -e "s/kvm/$VIRT_TYPE/g" /etc/nova/nova.conf 368 | sed -i -e "s/kvm/$VIRT_TYPE/g" /etc/nova/nova-compute.conf 369 | 370 | ## 3:配置/etc/nova/api-paste.ini 371 | sed -i -e " 372 | s/%SERVICE_TENANT_NAME%/admin/g; 373 | s/%SERVICE_USER%/admin/g; 374 | s/%SERVICE_PASSWORD%/$ADMIN_TOKEN/g; 375 | " /etc/nova/api-paste.ini 376 | # 4:停止和重启nova相关服务 377 | ## 更改卷组,否则启动nova-volume会出错。 378 | vgrename `hostname` nova-volumes 379 | ## 设置ipv4转发,否则外面能连接虚拟机,虚拟机访问不了外面 380 | sysctl -w net.ipv4.ip_forward=1 381 | ##or: 382 | ##echo 1 > /proc/sys/net/ipv4/ip_forward 383 | 384 | for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler novnc nova-volume nova-consoleauth; do service "$a" restart; done 385 | 386 | 387 | ## 六:安装和配置Dashbaord 388 | ## 1:安装dashbaord 389 | apt-get install -y libapache2-mod-wsgi openstack-dashboard 390 | /etc/init.d/apache2 restart 391 | 392 | ## 这个时候,你就可以登录dashboard 393 | ## http://192.168.139.50 394 | ## user:admin 395 | ## pass:ADMIN 396 | ## 之后通过前端web管理 397 | -------------------------------------------------------------------------------- /setup_test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # **setup_test.sh** is a tool to deploy test and real OpenStack cloud computing service. 3 | 4 | # This script add an image and an instance to OpenStack for test. 5 | 6 | # Hily.Hoo@gmail.com (Kayven) 7 | # Learn more and get the most recent version at http://code.google.com/p/onestack/ 8 | 9 | set -o xtrace 10 | ## 请使用root执行本脚本! 11 | ## Ubuntu 12.04 ("Precise") 部署 OpenStack Essex 12 | ## 参考: 13 | ## http://docs.openstack.org/essex/openstack-compute/starter/content/ 14 | 15 | 16 | 17 | 18 | ## 一:部署基本系统 19 | ## ./setup_base.sh 20 | 21 | 22 | 23 | 24 | ## 二:下载镜像并上传 25 | ## ubuntu官方专门提供image,http://uec-images.ubuntu.com。不过一定要注意 26 | ## 这些镜像,都是必须使用密钥登录,直接用用户名密码是无法的登录的。 27 | ## 下载镜像 28 | ## http://cloud-images.ubuntu.com/precise/current/ 29 | 30 | ## 1 这应该是ubuntu提供的最新的稳定的镜像。 31 | wget http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-amd64-disk1.img 32 | 33 | ## 2 如果本地镜像,放到本目录,名字改为precise-server-cloudimg-amd64-disk1.img,或者将下面镜像地址改为本地地址 34 | 35 | 36 | ## 3 如果scp,使用下面的方法 37 | ## expect -c "spawn /usr/bin/scp yuan@192.168.139.84:/home/yuan/precise-server-cloudimg-amd64-disk1.img .; expect { 38 | ## \"password:\"; { 39 | ## send \"yyhu\r\n\"; 40 | ## }; \"Are you sure you want to continue connecting (yes/no)?\" { 41 | ## send \"yes\r\n\" ; 42 | ## expect \"password:\"; 43 | ## send \"yyhu\r\n\"; 44 | ## } 45 | ## } ; set timeout -1; expect -re \"100%\";" 46 | 47 | 48 | 49 | ## 三:创建第一个VM,可以通过上面安装的web管理系统创建。 50 | 51 | # 0:同步数据库 52 | ## 以前我运行同步数据库,如果正确, 当nova.conf 53 | ## --verbose=False 54 | ## 是没有任何的输出,否则有一堆是输出。 55 | nova-manage db sync 56 | 57 | # 创建网络 58 | nova-manage network create private --fixed_range_v4=10.0.0.1/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32 59 | 60 | ## 设定floating IP 61 | nova-manage floating create --ip_range=192.168.139.225/27 62 | 63 | ## 设置权限 64 | chown -R nova:nova /etc/nova 65 | ## 再重启相关服务 66 | for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler novnc nova-volume nova-consoleauth; do service "$a" restart; done 67 | sleep 10 68 | 69 | ## 1:检查nova服务 70 | ## 一路回车,就可以了。通过expect可以不用输入。 71 | if [ ! -e ~/.ssh/id_rsa ]; then 72 | expect -c "spawn ssh-keygen ; set timeout 5; expect \":\"; send \"\r\n\"; set timeout 3; expect \":\"; send \"\r\n\";set timeout 3; expect \":\"; send \"\r\n\"; expect eof;" 73 | fi 74 | ## 2:上传密钥到数据库 75 | nova keypair-add --pub_key ~/.ssh/id_rsa.pub key1 76 | ## nova keypair-list 77 | 78 | 79 | ## 打开防火墙 80 | nova secgroup-add-rule default tcp 1 65535 0.0.0.0/0 81 | nova secgroup-add-rule default udp 1 65535 0.0.0.0/0 82 | nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 83 | 84 | 85 | ## 4:开始创建虚拟机 86 | ## nova image-list 87 | ## nova flavor-list 88 | ## 创建虚拟机 89 | # nova-manage flavor create --name=m1.minitest --memory=384 --cpu=1 --root_gb=1 --flavor=6 --ephemeral_gb=1 90 | glance add name="Ubuntu12.04-amd64" is_public=true container_format=ovf disk_format=qcow2 < precise-server-cloudimg-amd64-disk1.img 91 | nova boot --flavor 1 --image "Ubuntu12.04-amd64" --key_name key1 cloud01 92 | # nova show cloud01 93 | # nova console-log cloud01 94 | 95 | ##关联vm 96 | sleep 10 97 | ## nova floating-ip-create 98 | ## nova add-floating-ip cloud01 192.168.139.226 99 | nova show cloud01 100 | nova add-floating-ip cloud01 `nova floating-ip-create | awk 'FNR==4{print $2}'` 101 | nova list 102 | nova show cloud01 103 | # ssh instance 104 | # ssh-keygen -f "/home/cloud/.ssh/known_hosts" -R 10.0.0.2 105 | # ssh -i ~/.ssh/id_rsa ubuntu@10.0.0.2 106 | 107 | ## 5.有用的命令 108 | ### 查看keypair 109 | ### nova keypair-list 110 | ### 删除keypair 111 | ### nova keypair-delete 112 | ### 查看vm 113 | ### nova list 114 | ### 删除vm,vm的ID 115 | ### nova delete 10d1bc19-b2c4-4eee-a5c8-b256bda3f343 116 | 117 | 118 | 119 | 120 | ## 四、完成安装部署 121 | cat <&1 122 | 1. login the dashboard 123 | http://192.168.139.50 124 | user:admin 125 | pass:ADMIN or $ADMIN_TOKEN 126 | 2. login a instance("cloud01") 127 | ssh -i ~/.ssh/id_rsa ubuntu@10.0.0.2 128 | 3. view & manage 129 | nova list 130 | nova show cloud01 131 | ... 132 | 4. enjoy yourself! (Contact Hily.Hoo@gmail.com) 133 | EOF --------------------------------------------------------------------------------