当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪Openstack Folsom + Quantum 双网卡成功安装指南       Openstack Folsom 发布好久了,但由于新的组件Quantum的加入,以及知识的跨度,比如同时需要系统管理及网络工程方面的知识,所以Folsom的安装还是挺费事的。经过几天的测试,参考各种文档.........
    ▪#define用法集锦      Definition:The #define Directive  You can use the #define directive to give a meaningful name to a constant in your program. The two forms of the syntax are:  Syntax  #define identifier token-stringopt  #define identifier[( identifier.........
    ▪Linux 配置双机SSH信任      一、实现原理使用一种被称为"公私钥"认证的方式来进行ssh登录。"公私钥"认证方式简单的解释是:首先在客户端上创建一对公私钥(公钥文件:~/.ssh/id_rsa.pub;私钥文件:~/.ssh/id_rsa),然后.........

[1]Openstack Folsom + Quantum 双网卡成功安装指南
    来源:    发布时间: 2013-10-22
 
Openstack Folsom 发布好久了,但由于新的组件Quantum的加入,以及知识的跨度,比如同时需要系统管理及网络工程方面的知识,所以Folsom的安装还是挺费事的。
经过几天的测试,参考各种文档,终于完成了Folsom基于双网卡的安装,总结至此。
本文HTML版本见:https://github.com/888888/OpenStack-Folsom-Install-guide/blob/GRE/2NICs/OpenStack_Folsom_Install_Guide_WebVersion.rst
 
1. 需求说明
====================
 
:节点名称: NICs
:控制节点: eth0 (100.10.10.51), eth1 (192.168.100.51)
:网络节点: eth0 (100.10.10.52), eth2 (0.0.0.0)
:计算节点: eth0 (100.10.10.53)
 
**备注 1: ** 本文为双网卡安装Folsom设计,根据官方说明,网络节点最好采用三块网卡控制节点可以和计算节点合二为一.
 
**备注 2:** 本文安装指南环境为实现Folsom功能评估,力求简单方便,安全性差,不可用于生产环境。
 
**备注 3: ** 本文不适用于虚拟机环境.请使用物理计算机安装.
 
.. image:: http://i.imgur.com/4D51h.jpg
 
2. 控制节点
===============
 
2.1. 准备系统
-----------------
* 安装系统注意事项::
 
    - ubuntu-12.10-server-amd64.iso
    - 为Cinder服务预留独立分区 例如: /dev/sda5
    - 提前定义好各服务器主机名及IP,尽量别改,一定要改,请修改/etc/hosts中的对应关系
 
* 以下所有命令均在root权限下完成,所以在装好ubuntu后,请切换到root::
 
   sudo passwd
   su
 
* 更新系统(依据笔者经验,安装完Folsom环境后最好别再使用dist-upgrade,以免产生些许小问题,如虚拟机获得不了ip等..)::
 
   apt-get update
   apt-get upgrade
   apt-get dist-upgrade
   
* 因为要更新和下载的软件比较多,可以在空闲时间一次更新系统并提前安装所需要软件,以后只需要配置就行了:
   
   apt-get update && apt-get dist-upgrade -y && apt-get update -y && apt-get dist-upgrade -y && apt-get install -y rabbitmq-server ntp vlan bridge-utils keystone curl openssl glance quantum-server quantum-plugin-openvswitch nova-api nova-cert novnc nova-consoleauth nova-scheduler nova-novncproxy cinder-api cinder-scheduler cinder-volume iscsitarget open-iscsi iscsitarget-dkms openstack-dashboard memcached python-mysqldb mysql-server 
 
2.2.配置网卡
------------
 
* 主控应该有一个外网网卡::
 
   #访问Openstack API 
   auto eth1
   iface eth1 inet static
   address 192.168.100.51
   netmask 255.255.255.0
   gateway 192.168.100.1
   dns-nameservers 8.8.8.8
 
   #管理网络和虚拟机网络合二为一
   auto eth0
   iface eth0 inet static
   address 100.10.10.51
   netmask 255.255.255.0
 
* 重启网络服务::
   
   service networking restart
 
2.3. MySQL & RabbitMQ
------------
 
* 安装 MySQL 和 RabbitMQ::
 
   apt-get install mysql-server python-mysqldb rabbitmq-server 
 
* 配置Mysql监听所有地址::
 
   sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf
   service mysql restart
 
* 为了简化安装,以后所有连接mysql服务均使用 root:password登录,将root权限更改为所有主机可以访问(默认只能本机访问)
 
   mysql -uroot -ppassword
   use mysql;
   update user set host='%' where user='root' and host='localhost';
   flush privileges;
 
* 创建所有必须的数据库::
  
   create database keystone;
   create database nova;
   create database glance;
   create database cinder;
   create database quantum;
   
2.4. 节点时间同步
------------------
 
* 安装时间服务器,其它节点时间同此服务器同步::
 
   apt-get install ntp
   sed -i 's/server ntp.ubuntu.com/server ntp.ubuntu.comserver 127.127.1.0fudge 127.127.1.0 stratum 10/g' /etc/ntp.conf
   service ntp restart  
 
2.5. Others
-------------------
* 安装其它服务::
 
   apt-get install vlan bridge-utils
 
* 允许IP转发::
 
   vi /etc/sysctl.conf
 
   net.ipv4.conf.all.rp_filter = 0
   net.ipv4.conf.default.rp_filter = 0 
   sysctl net.ipv4.ip_forward=1
   
   # 检查一下
   sysctl -p 
 
2.6. Keystone
-------------------
 
 
* 安装组件::
 
   apt-get install keystone
 
 
* 编辑 /etc/keystone/keystone.conf 数据库连接::
 
   connection = mysql://root:password@100.10.10.51/keystone
 
* 重启keystone并初始化数据库::
 
   service keystone restart
   keystone-manage db_sync
 
* 使用 `自动化脚本 <https://github.com/888888/OpenStack-Folsom-Install-guide/tree/GRE/2NICs/Keystone_Scripts>`_ 创建keystone用户、服务、服务端点。为了简化,这里只创建admin一个用户,请不要修改此用户密码。 
 
    bash keystone_basic.sh
    执行一次,否则会创建多个service
    bash keystone_endpoints_basic.sh
 
* 创建/root/novarc文件,写入以下内容::
 
    export OS_TENANT_NAME=admin
    export OS_TENANT_ID=c7fb80d964a24ab1bc0fd370696c804e
    export OS_USERNAME=admin
    export OS_PASSWORD=password
    export OS_AUTH_URL="http://127.0.0.1:35357/v2.0"
    export OS_REGION_NAME=RegionOne
    export OS_IDENTITY_API_VERSION=2.0
    export SERVICE_TOKEN=ADMIN
    export SERVICE_ENDPOINT="http://127.0.0.1:35357/v2.0"
    
    各项值请根据实际情况替换
    keystone tenant-list
    将获取的tenant_id替换到novarc
    
    source /root/novarc
    echo "source /root/novarc" >> ~/.bashrc
 
 
2.7. Glance
-------------------
* 安装组件
 
    apt-get install glance
 
* 分别修改 /etc/glance/glance-api-paste.ini 和/etc/glance/glance-registry-paste.ini::
 
   [filter:authtoken]
   paste.filter_factory = keystone.middleware.auth_token:filter_factory
   auth_host = 100.10.10.51
   auth_port = 35357
   auth_protocol = http
   admin_tenant_name = admin
   admin_user = admin
   admin_password = password
 
* 分别修改 /etc/glance/glance-api.conf 和/etc/glance/glance-registry.conf ::
 
   sql_connection = mysql://root:password@100.10.10.51/glance
 
   [paste_deploy]
   flavor = keystone
 
 
* 重启glance服务并同步glance数据库::
 
   service glance-api restart; service glance-registry restart
 
   glance-manage db_sync
   
* 测试glance 服务,不输出任何结果代表成功::
 
    glance index
    
* 上传个镜像::
 
   wget https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img
   glance image-create --name myFirstImage --is-public true --container-format bare
    --disk-format qcow2 < cirros-0.3.0-x86_64-disk.img
 
    
[2]#define用法集锦
    来源:    发布时间: 2013-10-22

Definition:

The #define Directive

  You can use the #define directive to give a meaningful name to a constant in your program. The two forms of the syntax are:

  Syntax

  #define identifier token-stringopt

  #define identifier[( identifieropt, ... , identifieropt )] token-stringopt

 

Usage:

 

1.       简单的define定义

#define MAXTIME 1000

一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写

if(i<MAXTIME){.........}

编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。

这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而不是作为一个量来使用,这个问题在下面反映的尤为突出。

2.define的“函数定义”

define可以像函数那样接受一些参数,如下

#define max(x,y) (x)>(y)?(x):(y);

这个定义就将返回两个数中较大的那个,看到了吗?因为这个“函数”没有类型检查,就好像一个函数模板似的,当然,它绝对没有模板那么安全就是了。可以作为一个简单的模板来使用而已。

但是这样做的话存在隐患,例子如下: #define Add(a,b) a+b; 在一般使用的时候是没有问题的,但是如果遇到如:c * Add(a,b) * d的时候就会出现问题,代数式的本意是a+b然后去和c,d相乘,但是因为使用了define(它只是一个简单的替换),所以式子实际上变成了 c*a + b*d

另外举一个例子: #define pin (int*); pin a,b; 本意是a和b都是int型指针,但是实际上变成int* a,b; a是int型指针,而b是int型变量。 这是应该使用typedef来代替define,这样a和b就都是int型指针了。

所以我们在定义的时候,养成一个良好的习惯,建议所有的层次都要加括号。

3.宏的单行定义(少见用法)

#define A(x) T_##x #define B(x) #@x #define C(x) #x

我们假设:x=1,则有:

A(1)------〉T_1 B(1)------〉'1' C(1)------〉"1"

(这里参考了 hustli的文章)

3.define的多行定义

define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心)

#define MACRO(arg1, arg2) do { \ /* declarations */ \ stmt1; \ stmt2; \ /* ... */ \ } while(0) /* (no trailing ; ) */ 关键是要在每一个换行的时候加上一个"\"

4.在大规模的开发过程中,特别是跨平台和系统的软件里,define最重要的功能是条件编译。

就是: #ifdef WINDOWS ...... ...... #endif #ifdef LINUX ...... ...... #endif

可以在编译的时候通过#define设置编译环境

5.如何定义宏、取消宏

//定义宏 #define [MacroName] [MacroValue] //取消宏 #undef [MacroName] //普通宏 #define PI (3.1415926)

带参数的宏 #define max(a,b) ((a)>(b)? (a),(b)) 关键是十分容易产生错误,包括机器和人理解上的差异等等。

6.条件编译 #ifdef XXX…(#else) … #endif 例如 #ifdef DV22_AUX_INPUT #define AUX_MODE 3 #else #define AUY_MODE 3 #endif #ifndef XXX … (#else) … #endif

7.头文件(.h)可以被头文件或C文件包含; 重复包含(重复定义) 由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的。 通过条件编译开关来避免重复包含(重复定义) 例如 #ifndef __headerfileXXX__ #define __headerfileXXX__ … //文件内容 … #endif

 

 

 Instances:

 

1、防止一个头文件被重复包含

#ifndef COMDEF_H

#define COMDEF_H

 //头文件内容

#endif

2、重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。

typedef  unsigned char      boolean;     /* Boolean value type. */

typedef  unsigned long int  uint32;      /* Unsigned 32 bit value */

typedef  unsigned short     uint16;      /* Unsigned 16 bit value */

typedef  unsigned char      uint8;       /* Unsigned 8  bit value */

typedef  signed long int    int32;       /* Signed 32 bit value */

typedef  signed short       int16;       /* Signed 16 bit value */

typedef  signed char        int8;        /* Signed 8  bit value */

//下面的不建议使用

typedef  unsigned char     byte;         /* Unsigned 8  bit value type. */

typedef  unsigned short    word;         /* Unsinged 16 bit value type. */

typedef  unsigned long     dword;        /* Unsigned 32 bit value type. */

typedef  unsigned char     uint1;        /* Unsigned 8  bit value type. */

typedef  unsigned short    uint2;        /* Unsigned 16 bit value type. */

typedef  unsigned long     uint4;        /* Unsigned 32 bit value type. */

typedef  signed char       int1;         /* Signed 8  bit value type. */

typedef  signed short      int2;         /* Signed 16 bit value type. */

typedef  long int          int4;         /* Signed 32 bit value type. */

typedef  signed long       sint31;       /* Signed 32 bit value */

typedef  signed short      sint15;       /* Signed 16 bit value */

typedef  signed char       sint7;        /* Signed 8  bit value */

3、得到指定地址上的一个字节或字

#define  MEM_B( x )  ( *( (byte *) (x) ) )

#define  MEM_W( x )  ( *( (word *) (x) ) )

4、求最大值和最小值

   #define  MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )

   #define  MIN( x, y ) ( ((x) < (y)) ? (x) : (y) )

5、得到一个field在结构体(struct)中的偏移量

#define FPOS( type, field ) \

/*lint -e545 */ ( (dword) &(( type *) 0)-> field ) /*lint +e545 */

6、得到一个结构体中field所占用的字节数

#define FSIZ( type, field ) sizeof( ((type *) 0)->field )

7、按照LSB格式把两个字节转化为一个Word

#define  FLIPW( ray ) ( (((word) (ray)[0]) * 256) + (ray)[1] )

8、按照LSB格式把一个Word转化

    
[3]Linux 配置双机SSH信任
    来源:    发布时间: 2013-10-22

一、实现原理

使用一种被称为"公私钥"认证的方式来进行ssh登录。"公私钥"认证方式简单的解释是:

首先在客户端上创建一对公私钥(公钥文件:~/.ssh/id_rsa.pub;私钥文件:~/.ssh/id_rsa),然后把公钥放到服务器上(~/.ssh/authorized_keys),自己保留好私钥。当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配。如果匹配成功就可以登录了。

二、实验环境

A机:TS-DEV/10.0.0.163

B机:CS-DEV/10.0.0.188

三、Linux/Unix双机建立信任

3.1 在A机生成证书

在A机root用户下执行ssh-keygen命令,在需要输入的地方,直接回车,生成建立安全信任关系的证书。

# ssh-keygen  -t  rsa

 

注意:在程序提示输入passphrase时直接输入回车,表示无证书密码。
   上述命令将生成私钥证书id_rsa和公钥证书id_rsa.pub,存放在用户家目录的.ssh子目录中。

3.2 查看~/.ssh生成密钥的文件

# cd ~/.ssh

# ll

3.3 A对B建立信任关系

将公钥证书id_rsa.pub复制到机器B的root家目录的.ssh子目录中,同时将文件名更换为authorized_keys,此时需要输入B机的root用户密码(还未建立信任关系)。建立了客户端到服务器端的信任关系后,客户端就可以不用再输入密码,就可以从服务器端拷贝数据了。

# scp -r id_rsa.pub 10.0.0.188:/root/.ssh/authorized_keys

3.4 B对A建立信任关系

在B机上执行同样的操作,建立B对A的信任关系。

# ssh-keygen -t rsa

 

# cd ~/.ssh/

# ll

# scp -r id_rsa.pub 10.0.0.163:/root/.ssh/authorized_keys

四、测试

在A机上:

# scp -r 10201_database_linux_x86_64.cpio 10.0.0.188:/tmp/david/

在B机上:

双机信任关系已经建立!

注:如果想让B,C同时可以scp不输入密码,传输A中的数据;
则要把B、C的公钥都给 A;
操作步骤:把两机器的id_rsa.pub中的数据都拷贝到A的/root/.ssh/authorized_keys文件中,一行表示一条;

本文链接


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3