当前位置: 首页 > 编程日记 > 正文

Openstack安装部署

系统版本 rhel7.4
关闭 iptables
关闭 selinux

foundation1: 172.25.254.1

server1: 172.25.254.11

server2: 172.25.254.12

可参考:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/                  //选择的mitaka

虚拟机上网

首先物理机必须可以上网,

[root@foundation1 Desktop]# iptables -t nat -I POSTROUTING -s 172.25.254.0/24 -j MASQUERADE   //允许虚拟机所在的网段

[root@foundation1 Desktop]# iptables -t nat -nL           //查看防火墙策略

server1和server2均操作:

[root@server2 ~]# route add default gw 172.25.254.1

[root@server2 ~]# route -n

[root@server2 ~]# vim /etc/resolv.conf

nameserver 114.114.114.114

[root@server2 ~]# ping baidu.com                          //此时可以上网了

挂载镜像

下载rhel7.4的镜像和mitaka.tar镜像

镜像mitaka.tar在 https://pan.baidu.com/disk/home?#/all?vmode=list&path=%2F%E6%88%91%E7%9A%84%E8%B5%84%E6%BA%90

[root@foundation1 Desktop]# mount /home/kiosk/Desktop/Mitaka.iso /var/www/html/mitaka/

server1和server2均操作:

[root@server1 ~]# vim /etc/yum.repos.d/dvd.repo

[rhel7.4]
name=rhel7.4
baseurl=http://172.25.254.1/rhel7.4
gpgcheck=0
enabled=1

[mitaka]
name=mitaka
baseurl=http://172.25.254.1/mitaka/Openstack-Mitaka
gpgcheck=0

在主机上升级包:

安装 Openstack客户端:
两个节点都要操作
[root@server1 ~]# yum install -y python-openstackclient
[root@server2 ~]# yum install openstack-selinux

[root@server1 ~]# yum upgrade
[root@server2 ~]# yum upgrade
[root@server2 ~]# yum install -y python-openstackclient
[root@server2 ~]# yum install openstack-selinux

安全并配置组件¶
以下操作控制节点上
[root@server1 ~]# yum install -y mariadb mariadb-server python2-PyMySQL

//在 [mysqld] 部分,设置 ``bind-address``值为控制节点的管理网络IP地址以使得其它节点可以通过管理网络访问数据库:
[root@server1 ~]# vim /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 172.25.254.11
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

完成安装
[root@server1 ~]# systemctl enable mariadb.service
[root@server1 ~]# systemctl start mariadb.service

//为了保证数据库服务的安全性,运行``mysql_secure_installation``脚本。特别需要说明的是,为数据库的root用户设置一个适当的密码。
[root@server1 ~]# mysql_secure_installation

安装MongoDB包:
[root@server1 ~]# yum install mongodb-server mongodb
[root@server1 ~]# vim /etc/mongod.conf
bind_ip = 172.25.254.11

默认情况下,MongoDB会在``/var/lib/mongodb/journal`` 目录下创建几个 1 GB 大小的日志文件。如果你想将每个日志文件大小减小到128MB并且限制日志文件占用的总空间为512MB,配置 smallfiles 的值:

完成安装

启动MongoDB 并配置它随系统启动:

[root@server1 ~]# systemctl enable mongod.service

[root@server1 ~]# systemctl start mongod.service

消息队列

安全并配置组件

1.安装包:

[root@server1 ~]# yum install -y rabbitmq-server

2.启动消息队列服务并将其配置为随系统启动:
[root@server1 ~]# systemctl enable rabbitmq-server.service
[root@server1 ~]# systemctl start rabbitmq-server.service

3.查看端口:

[root@server1 ~]# netstat -antlp | grep :5672

添加 openstack 用户,密码 为openstack
[root@server1 ~]# rabbitmqctl add_user openstack openstack

给``openstack``用户配置写和读权限:
[root@server1 ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"


[root@server1 ~]# rabbitmq-plugins list

[root@server1 ~]# rabbitmq-plugins enable rabbitmq_management


[root@server1 ~]# netstat -antlp | grep :15672

访问 http://172.25.254.11:15672/

Memcached

认证服务认证缓存使用Memcached缓存令牌。缓存服务memecached运行在控制节点。在生产部署中,我们推荐联合启用防火墙、认证和加密保证它的安全。

安全并配置组件
[root@server1 ~]# yum install memcached python-memcached
启动 memcached
[root@server1 ~]# systemctl enable memcached.service
[root@server1 ~]# systemctl start memcached.service

认证服务

Openstack 身份认证服务
在控制节点
进入 mysql 创建 keystone 数据库并授予权限

在你配置 OpenStack 身份认证服务前,你必须创建一个数据库和管理员令牌。

1、完成下面的步骤以创建数据库

>数据库连接客户端以 root 用户连接到数据库服务器:

[root@server1 ~]# mysql -uroot -p        //我在这里的密码是redhat

>创建 keystone 数据库:
MariaDB [(none)]> create database keystone;

>对``keystone``数据库授予恰当的权限:

MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'keystone';

>退出数据库客户端。
MariaDB [(none)]> exit

2、 生成一个随机值在初始的配置中作为管理员的令牌。
[root@server1 ~]# openssl rand -hex 10
29c27f7d00a35bc3380a

安全并配置组件

运行以下命令来安装 httpd,mod_wsgi,keystoen
[root@server1 ~]# yum install -y openstack-keystone httpd mod_wsgi

3、编辑文件 /etc/keystone/keystone.conf 并完成如下动作:
[root@server1 ~]# vim /etc/keystone/keystone.conf

[DEFAULT]                                                       //在``[DEFAULT]``部分,定义初始管理令牌的值
admin_token = 29c27f7d00a35bc3380a

[database]
connection = mysql+pymysql://keystone:keystone@controller/keystone           //在 [database] 部分,配置数据库访问

[token]
provider = fernet                             //在``[token]``部分,配置Fernet UUID令牌的提供者。

4、初始化身份认证服务的数据库:
[root@server1 ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone

5、初始化Fernet keys:

[root@server1 ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

配置 Apache HTTP 服务器

1、编辑``/etc/httpd/conf/httpd.conf`` 文件,配置``ServerName`` 选项为控制节点:
[root@server1 ~]# vim /etc/httpd/conf/httpd.conf
ServerName controller

2、用下面的内容创建文件 /etc/httpd/conf.d/wsgi-keystone.conf。

[root@server1 ~]# vim /etc/httpd/conf.d/wsgi-keystone.conf
Listen 5000
Listen 35357

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

<Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

<Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

启动 Apache HTTP 服务:

[root@server1 ~]# systemctl enable httpd.service
[root@server1 ~]# systemctl start httpd.service

创建服务实体和API端点

1、配置认证令牌:

[root@server1 ~]# export OS_TOKEN=29c27f7d00a35bc3380a

2、配置端点URL:
[root@server1 ~]# export OS_URL=http://controller:35357/v3

3、配置认证 API 版本:
[root@server1 ~]# export OS_IDENTITY_API_VERSION=3

创建服务实体和API端点

1、在你的Openstack环境中,认证服务管理服务目录。服务使用这个目录来决定您的环境中可用的服务。

>创建服务实体和身份认证服务:

[root@server1 ~]# openstack service create --name keystone --description "OpenStack Identity" identity

>创建认证服务的 API 端点:
[root@server1 ~]# openstack endpoint create --region RegionOne identity public http://controller:5000/v3
[root@server1 ~]# openstack endpoint create --region RegionOne identity admin http://controller:35357/v3

创建域、项目、用户和角色

1.创建域``default``:
[root@server1 ~]# openstack domain create --description "Default Domain" default
2.在你的环境中,为进行管理操作,创建管理的项目、用户和角色:

>创建 admin 项目
[root@server1 ~]# openstack project create --domain default --description "Admin Project" admin
>创建 admin 用户
[root@server1 ~]# openstack user create --domain default --password-prompt admin
>创建 admin 角色
[root@server1 ~]# openstack role create admin

>添加``admin`` 角色到 admin 项目和用户上:

[root@server1 ~]# $ openstack role add --project admin --user admin admin          //这个命令执行后没有输出。

3.本指南使用一个你添加到你的环境中每个服务包含独有用户的service 项目。创建``service``项目:

[root@server1 ~]# openstack project create --domain default  --description "Service Project" service

4.常规(非管理)任务应该使用无特权的项目和用户。作为例子,本指南创建 demo 项目和用户。

>创建``demo`` 项目:

[root@server1 ~]# penstack project create --domain default --description "Demo Project" demo

//当为这个项目创建额外用户时,不要重复这一步。

>创建``demo`` 用户:

[root@server1 ~]#  openstack user create --domain default --password-prompt demo

>创建 user 角色:

[root@server1 ~]#  openstack role create user

>添加 user``角色到 ``demo 项目和用户:

[root@server1 ~]# openstack role add --project demo --user demo user

//你可以重复此过程来创建额外的项目和用户。

验证操作

//在控制节点上执行这些命令。

1.重置``OS_TOKEN``和``OS_URL`` 环境变量:
unset OS_TOKEN OS_URL

2.作为 admin 用户,请求认证令牌:

[root@server1 ~]# openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue           //这个命令使用``admin``用户的密码。

3.作为``demo`` 用户,请求认证令牌:

[root@server1 ~]# openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username demo token issue

//这个命令使用``demo`` 用户的密码和API端口5000,这样只会允许对身份认证服务API的常规(非管理)访问。

创建 OpenStack 客户端环境脚本

创建脚本

1.编辑文件 admin-openrc 并添加如下内容:
[root@server1 ~]# vim admin-openrc                           //将 ADMIN_PASS 为在认证服务中为 admin 用户选择的密码,我的为westos

export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=westos
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

2.编辑文件 demo-openrc 并添加如下内容:

[root@server1 ~]# vim demo-openrc                  //将 DEMO_PASS 为在认证服务中为 demo 用户选择的密码,我这里也是westos

export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=westos
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

使用脚本

1.加载``admin-openrc``文件来身份认证服务的环境变量位置和``admin``项目和用户证书:

[root@server1 ~]# . admin-openrc

2.请求认证令牌:

[root@server1 ~]# openstack token issue

镜像服务

OpenStack镜像服务包括以下组件:

glance-api   :接收镜像API的调用,诸如镜像发现、恢复、存储。

glance-registry   :存储、处理和恢复镜像的元数据,元数据包括项诸如大小和类型。

数据库  :存放镜像元数据,用户是可以依据个人喜好选择数据库的,多数的部署使用MySQL或SQLite。

镜像文件的存储仓库:支持多种类型的仓库,它们有普通文件系统、对象存储、RADOS块设备、HTTP、以及亚马逊S3。记住,其中一些仓库仅支持只读方式使用。

元数据定义服务:通用的API,是用于为厂商,管理员,服务,以及用户自定义元数据。这种元数据可用于不同的资源,例如镜像,工件,卷,配额以及集合。一个定义包括了新属性的键,描述,约束以及可以与之关联的资源的类型。

安装和配置

安装和配置镜像服务之前,你必须创建创建一个数据库、服务凭证和API端点。

1.完成下面的步骤以创建数据库:

>用数据库连接客户端以 root 用户连接到数据库服务器:

[root@server1 ~]# mysql -u root -p

>创建 glance 数据库:

>对``glance``数据库授予恰当的权限:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';

>退出数据库客户端。

2.获得 admin 凭证来获取只有管理员能执行的命令的访问权限:

[root@server1 ~]# . admin-openrc

3.要创建服务证书,完成这些步骤:

>创建 glance 用户:

[root@server1 ~]# openstack user create --domain default --password-prompt glance

>添加 admin 角色到 glance 用户和 service 项目上。

[root@server1 ~]# openstack role add --project service --user glance admin              //这个命令执行后没有输出。

>创建``glance``服务实体:

[root@server1 ~]# openstack service create --name glance --description "OpenStack Image" image

>创建镜像服务的 API 端点:

[root@server1 ~]# openstack endpoint create --region RegionOne image public http://controller:9292

[root@server1 ~]# openstack endpoint create --region RegionOne image internal http://controller:9292

[root@server1 ~]# openstack endpoint create --region RegionOne  image admin http://controller:9292

安全并配置组件

1.安装软件包:

[root@server1 ~]# yum install openstack-glance

2.编辑文件 /etc/glance/glance-api.conf 并完成如下动作:

[root@server1 ~]# vim /etc/glance/glance-api.conf

>在 [database] 部分,配置数据库访问:

[database]
connection = mysql+pymysql://glance:glance@controller/glance

>在 [keystone_authtoken] 和 [paste_deploy] 部分,配置认证服务访问:

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance

[paste_deploy]
flavor = keystone

//GLANCE_PASS 为认证服务中 glance 用户选择的密码。

//在 [keystone_authtoken] 中注释或者删除其他选项。

>在 [glance_store] 部分,配置本地文件系统存储和镜像文件位置

[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/

3.编辑文件 ``/etc/glance/glance-registry.conf``并完成如下动作:

[root@server1 ~]# vim /etc/glance/glance-registry.conf

>在 [database] 部分,配置数据库访问:

[database]
connection = mysql+pymysql://glance:glance@controller/glance

>在 [keystone_authtoken] 和 [paste_deploy] 部分,配置认证服务访问:

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance

[paste_deploy]
flavor = keystone

//密码为镜像服务选择的密码。

4.写入镜像服务数据库

[root@server1 ~]# su -s /bin/sh -c "glance-manage db_sync" glance

查看 glance 数据库是否有数据已经同步:

[root@server1 ~]# mysql -uroot -p

MariaDB [(none)]> use glance;

MariaDB [glance]> show tables;

完成安装

启动镜像服务:

[root@server1 ~]# systemctl enable openstack-glance-api.service openstack-glance-registry.service

[root@server1 ~]# systemctl start openstack-glance-api.service openstack-glance-registry.service

验证操作

在控制节点上执行这些命令

1.获得 admin 凭证来获取只有管理员能执行的命令的访问权限:

[root@server1 ~]# . admin-openrc
[root@server1 ~]# wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
-bash: wget: command not found                          //没有此命令

如果您的发行版里没有包含wget,请安装它
[root@server1 ~]# yum install -y wget          //进行下载

2.下载源镜像:

[root@server1 ~]# wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img

该过程下载有点慢

3.使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它:

[root@server1 ~]# openstack image create "cirros" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --public

4.确认镜像的上传并验证属性:

[root@server1 ~]# openstack image list

计算服务概览

OpenStack计算服务由下列组件所构成:

nova-api 服务

nova-api-metadata 服务

``nova-compute``服务

``nova-scheduler``服务

``nova-conductor``模块

``nova-cert``模块

nova-network worker 守护进程

nova-consoleauth 守护进程

nova-novncproxy 守护进程

nova-spicehtml5proxy 守护进程

nova-xvpvncproxy 守护进程

nova-cert 守护进程

``nova``客户端

队列

SQL数据库

安装并配置控制节点

这个部分将描述如何在控制节点上安装和配置 Compute 服务

1.为了创建数据库,必须完成这些步骤:

>用数据库连接客户端以 root 用户连接到数据库服务器:

[root@server1 ~]# mysql -u root -p

>创建 nova_api 和 nova 数据库:

MariaDB [(none)]> CREATE DATABASE nova_api;

MariaDB [(none)]> CREATE DATABASE nova;

>对数据库进行正确的授权:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost'
    -> IDENTIFIED BY 'nova';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%'
    -> IDENTIFIED BY 'nova';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost'
    -> IDENTIFIED BY 'nova';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%'
    -> IDENTIFIED BY 'nova';

>退出数据库客户端。

2.获得 admin 凭证来获取只有管理员能执行的命令的访问权限:

[root@server1 ~]# . admin-openrc

3.要创建服务证书,完成这些步骤:

>创建 nova 用户:

[root@server1 ~]# openstack user create --domain default --password-prompt nova

>给 nova 用户添加 admin 角色:

[root@server1 ~]# $ openstack role add --project service --user nova admin

>创建 nova 服务实体:

[root@server1 ~]# openstack service create --name nova --description "OpenStack Compute" compute

4.创建 Compute 服务 API 端点 :

[root@server1 ~]# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1/%\(tenant_id\)s

[root@server1 ~]# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1/%\(tenant_id\)s

[root@server1 ~]# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1/%\(tenant_id\)s

安全并配置组件

1.安装软件包:

[root@server1 ~]# yum install openstack-nova-api openstack-nova-conductor   openstack-nova-console openstack-nova-novncproxy   openstack-nova-scheduler

2.编辑``/etc/nova/nova.conf``文件并完成下面的操作:

[root@server1 ~]# vim /etc/nova/nova.conf

>在``[DEFAULT]``部分,只启用计算和元数据API:

[DEFAULT]
enabled_apis = osapi_compute,metadata

>在``[api_database]``和``[database]``部分,配置数据库的连接:

api_database]
connection = mysql+pymysql://nova:nova@controller/nova_api

[database]
connection = mysql+pymysql://nova:nova@controller/nova

>在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列访问:

[DEFAULT]

rpc_backend = rabbit


[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack

[DEFAULT]

auth_strategy = keystone

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = nova

>在 [DEFAULT 部分,配置``my_ip`` 来使用控制节点的管理接口的IP 地址。

[DEFAULT]
my_ip = 172.25.254.11

>在 [DEFAULT] 部分,使能 Networking 服务:

[DEFAULT]
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

>在``[vnc]``部分,配置VNC代理使用控制节点的管理接口IP地址 :

[vnc]
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip

>在 [glance] 区域,配置镜像服务 API 的位置:

[glance]
api_servers = http://controller:9292

>在 [oslo_concurrency] 部分,配置锁路径:

[oslo_concurrency]
lock_path = /var/lib/nova/tmp

3.同步Compute 数据库:

[root@server1 ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
[root@server1 ~]# su -s /bin/sh -c "nova-manage db sync" nova

察看是否已经同步

[root@server1 ~]# mysql -p

MariaDB [(none)]> use nova;

MariaDB [nova_api]> show tables;

MariaDB [nova]> use nova_api;

MariaDB [nova_api]> show tables;

完成安装

启动 Compute 服务并将其设置为随系统启动:

[root@server1 ~]# systemctl enable openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

[root@server1 ~]# systemctl start openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

安装和配置计算节点

nova 计算节点上主要有组件:nova-compute

安全并配置组件

1.安装软件包:

[root@server1 ~]# yum install openstack-nova-compute

2.编辑``/etc/nova/nova.conf``文件并完成下面的操作:

[root@server1 ~]# vim /etc/nova/nova.conf

>在``[DEFAULT]`` 和 [oslo_messaging_rabbit]部分,配置``RabbitMQ``消息队列的连接:

>在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:

>在 [DEFAULT] 部分,配置 my_ip 选项:

>在 [DEFAULT] 部分,使能 Networking 服务:

>在``[vnc]``部分,启用并配置远程控制台访问:

>在 [glance] 区域,配置镜像服务 API 的位置:

>在 [oslo_concurrency] 部分,配置锁路径:

完成安装

剩余小部分待完成

相关文章:

在Xcode中使用Git进行源码版本控制

本文翻译自Understanding Git Source Control in Xcode &#xff08;译者myShire&#xff09;欢迎您加入我们的翻译小组。 在应用程序开发过程中&#xff0c;很重要的一部分工作就是如何进行源码的版本控制。当代码出现问题时&#xff0c;我们就需要将代码恢复到原先正常的版本…

敏捷开发之道(二)极限编程XP

上次的博文敏捷开发之道&#xff08;一&#xff09;敏捷开发宣言中&#xff0c;我们介绍了一下敏捷开发宣言&#xff0c;在其中&#xff0c;我们了解到了关于敏捷开发的几个重要的价值观。今天我们来了解一个敏捷开发的方法——极限编程XP 1、介绍 极限编程&#xff08;eXtreme…

spring 3.X与jdk 1.8不兼容

1、报错&#xff08;部分&#xff09; 2、解决 虽然Spring的jdk要求如下&#xff0c;但是spring 3与jdk1.8不兼容&#xff08;使用的是spring 3.2&#xff09; 在eclipse将jdk版本下调。这里将JDK调到1.7&#xff08;在eclipse如下设置&#xff09; 同时&#xff0c;需要设置服…

rhel-server-7.5-x86_64-dvd.iso镜像下载及rar压缩包的解压

主机名为server1 [rootserver1 ~]# ls rhel-server-7.5-x86_64-dvd.part1.rar rarlinux-5.6.1.tar.gz rhel-server-7.5-x86_64-dvd.part2.rar 1、如果没有rarlinux-5.6.1.tar.gz包可以去 https://www.rarlab.com/download.htm 这个网站下载RAR 5.61 for Linux 或者RAR 5.…

Expandable Table的Demo

在网上看到一个可点击cell展开的TableView的demo&#xff0c;原文是swift语言&#xff0c;我写了个oc版&#xff0c;有兴趣的朋友可以看下&#xff1a; 效果&#xff1a; oc源码&#xff08;带中文注释&#xff09;&#xff1a;http://download.csdn.net/detail/dolacmeng/941…

Java对多线程的支持

Java运行时系统实现了一个用于调度线程执行的线程调度器&#xff0c;用于确定某一时刻由哪一个线程在CPU上运行。在Java技术中&#xff0c;线程通常是抢占式的而不需要时间片分配进程&#xff08;分配给每个线程相等的CPU时间的进程&#xff09;。抢占式调度模型就是许多线程处…

ESP8266-iot-2

1.SDK概述 复制相关的工程文件到HelloWorld里面 要在版本esp8266_nonos_sdk_v2.0.0_16_07_19上面开发&#xff0c;那么就要复制相应文件 然后打开IDE 导入HelloWorld到工程里面 创建3个文件&#xff0c;如下图 再从lib里面添加文件 复制到我的下面 复制app里面的内容 打算从IoT…

iptables防火墙策略

环境&#xff1a; foundation1 172.25.1.250 172.25.254.1 server1 172.25.1.1 server2 172.25.1.2 server3 172.25.1.3 四个主机都做解析 iptables简介&#xff1a; netfilter/iptables&#xff08;简称为iptables&#xf…

ubuntu(16.04.01)学习-day1

1.修改root用户密码 sudo passwd root 按提示进行设置。 2.从Ubuntu 16.04开始&#xff0c;用户可以实现改变启动器的位置&#xff0c;可以将启动器移到屏幕底部&#xff0c;但是无法移到右边或顶部。打开终端&#xff0c;然后输入下面这个命令&#xff0c;即可将启动器移到屏幕…

HDU 1090 A+B for Input-Output Practice (II)

#include <cstdio> int main() {int n,a,b;scanf("%d",&n);for (int i1; i<n; i){ scanf("%d%d",&a,&b);printf("%d\n",ab);}return 0; } 转载于:https://www.cnblogs.com/forever97/p/3539605.html

监听UIWebView点击视频播放的事件

最近项目需要统计在跳转UIWebView后&#xff0c;用户点击网页上的视频进行播放的概率。找了很多监听进入视频播放的方法&#xff0c;最后在stackoverflow找到下面这个使用Notification的可行方法(如果是弹出)&#xff1a; #pragma mark Notification - (void)addNotification {…

linux系统下redhat7之虚拟机控制

基础操作&#xff1a; [kioskfoundation0 Desktop]$ rht-vmctl start desktop ###开启desktop虚拟机 Error: desktop not started (is already running) ###报错&#xff0c;desktop已经运行 [kioskfoundation0 Desktop]$ rht-vmctl view desktop …

如何设计一个 iOS 控件?(iOS 控件完全解析)

前言 一个控件从外在特征来说&#xff0c;主要是封装这几点&#xff1a; 交互方式显示样式数据使用 对外在特征的封装&#xff0c;能让我们在多种环境下达到 PM 对产品的要求&#xff0c;并且提到代码复用率&#xff0c;使维护工作保持在一个相对较小的范围内&#xff1b;而一个…

Chapter12:动态内存

智能指针——shared_ptr为了更容易地使用动态内存&#xff0c;新的标准提供了智能指针来管理动态对象。智能指针的行为类似常规指针&#xff0c;重要的区别是它负责自动释放指向的对象。 智能指针的使用方式与普通指针类似。解引用一个智能指针返回它指向的对象。 1 if (p1 &am…

判断JS对象是否拥有某属性两种方式

方式&#xff0c;但稍有区别 1&#xff0c;in 运算符 1 2 3 var obj {name:jack}; alert(name in obj); // --> true alert(toString in obj); // --> true 可看到无论是name&#xff0c;还是原形链上的toString&#xff0c;都能检测到返回true。 2&#xff0c;hasOwnP…

Linux之redhat7系统结构

一.linux系统结构 linux是一个倒树结构 linux中所有的东西都是文件 这些文件都在系统顶级目录“/” /就是根目录 /目录以下为二级目录这些目录都是系统装机时系统自动建立的 二级目录的作用 /bin ##二进制可执行文件也就是系统命令 /sbin ##系统管理命令存放位置 /boot …

ASP.NET优化

源地址&#xff1a;http://www.cnblogs.com/wangjingblogs/archive/2013/02/27/2934706.html http://jingyan.baidu.com/article/2d5afd69bfd0ff85a3e28e6d.html转载于:https://www.cnblogs.com/haizine/p/5841771.html

3D Touch介绍: 一个数字压力器App和Quick Actions

随着iPhone 6s and 6s Plus的发布&#xff0c;苹果介绍了全新的手机交互方式&#xff1a;重按手势。你应该知道&#xff0c;这个特性其实早已应用在苹果手表和MacBook产品中&#xff0c;名字叫Force Touch。它给用户交互添加了全新的维度&#xff01; 或许你对Force Touch为什么…

一些LUA函数(转载)

转自http://hi.baidu.com/chevallet/item/9a3a6410c20d929198ce3363 一些LUA函数 1、assert (v [, message])  功能&#xff1a;相当于C的断言&#xff0c;当表达式v为nil或false将触发错误,  message&#xff1a;发生错误时返回的信息&#xff0c;默认为"assertion f…

cifs------网络文件系统(1)

SMB文件共享 SMB&#xff08;Server Message Block&#xff09;通信协议是微软&#xff08;Microsoft&#xff09;和英特尔(Intel)在1987年制定的协议&#xff0c;主要是作为Microsoft网络的通讯协议。SMB 是在会话层&#xff08;session layer&#xff09;和表示层&#xff0…

Swift 教學:如何使用iOS Charts API 製作漂亮的圖表

在應付許多的資料時&#xff0c;比起只在表格中呈現&#xff0c;使用圖表來顯示資料&#xff0c;可以幫助使用者容易地了解資訊。有了圖表&#xff0c;相對於讀取整個資料表&#xff08;或幾個資料表&#xff09;你可以輕鬆地一眼便見到以圖形表示的資料&#xff0c;取得所需的…

在Proteus中添加标号

1.Proteus中添加组件后双击引脚可以快速生成一个最近的端口。 2.按A调出设置界面 3.在String中写&#xff1a;netH#,"H"可以换成自定义前缀。count为起始值&#xff0c;increment为增量。 4.依次点击想要编号的引脚。转载于:https://www.cnblogs.com/viaduct/p/58424…

九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目

题目地址&#xff1a;http://ac.jobdu.com/problem.php?pid1525 题目描述&#xff1a; 小明手中有很多字符串卡片&#xff0c;每个字符串中都包含有多个连续的空格&#xff0c;而且这些卡片在印刷的过程中将字符串的每个子串都打印反了&#xff0c;现在麻烦你帮小明将这些字符…

cifs------网络文件系统(2)

接着上篇博客继续&#xff1a; Samba 基本配置 [rootserver2 ~]# rpm -qc samba-common //查看smb的配置文件 1、黑、白名单的设定 默认白名单&#xff0c;设置的ip是黑名单用户&#xff1a;hosts deny ip 默认黑名单&#xff0c;设置的ip是白名单用户&#xff…

iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求

原文地址&#xff1a;https://github.com/ChenYilong/ParseSourceCodeStudy/blob/master/02_Parse的网络缓存与离线存储/iOS网络缓存扫盲篇.md 目录 当我们在谈论缓存的时候&#xff0c;我们在谈论什么&#xff1f;GET网络请求缓存 80%的缓存需求&#xff1a;两行代码就可满足…

YARN集群维护部分问题汇总

云梯开发人员在云梯Yarn集群的搭建和维护过程中做了许多工作&#xff0c;本文选择这期间部分较为典型的问题&#xff0c;通过对这些问题的分析和解决方案&#xff0c;为大家分享分布式系统问题调查的经验。 调查的问题 1. 2013年初引入社区0.23时&#xff0c;调查ResourceManag…

linux系统管理及vim

1.管理输入输出 在linux系统中&#xff0c;正确输出的编号为1&#xff0c;错误输出编号为2 在系统中用普通用户执行 "student" find /etc -name passwd 因为student用户权限问题会有以下输出 find: ‘/etc/pki/CA/private’: Permission denied ##没有进入权力…

如何用 OS X 的 Xcode 写C语言程序

這篇是給新手看的。 如果你在 Windows 習慣使用 Visual C 或 Dev-C 的話&#xff0c;到了 Mac OS X 可能會突然不知道要怎麼寫程式&#xff0c;尤其當你已經用 Visual C 的 Debugger 用得很上手的話。 最近我們系上的課充滿了 C programming&#xff0c;我也稍微摸懂了 Xcode 的…

【转】初等数论 ——原根、指标及其应用

转自&#xff1a;http://blog.163.com/gc_chdch126/blog/static/172279052201641935828402/ 学习总结&#xff1a;初等数论&#xff08;3&#xff09;——原根、指标及其应用 2016-05-19 15:58:28| 分类&#xff1a; 信息学——学习总 | 标签&#xff1a;初等数论 数学 |…

互联网产品评论索引

这里收集一些评论文章&#xff0c;定期查看文章观点的正确性&#xff0c;索引持续更新中 网站前期如何获得推广资源 专访陶瑾&#xff1a;微信公众平台开发先行者转载于:https://www.cnblogs.com/needrunning/p/3000353.html