安装PBFT to red hat 7.2

1.安装Red Hat 7.2 

  物理机:ubuntu 12.04+虚拟机:kvm

  使用虚拟机管理程序virt-manager安装red hat 7.2(ISO文件:enigma-i386-disc1.iso+enigma-i386-disc2.iso)

  在建立虚拟机的步骤5的高级选项的网络模式中选择"Specify shared device name",使用网桥br0.在ubuntu中设置网桥

auto lo                                                                              
iface lo inet loopback

auto br0 
iface br0 inet static
bridge_ports eth0
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1

 

  选择"Installation Type"时,选择custom安装.

  给磁盘分区

  根据在ubuntu中建立的网桥地址设置ip(本人ip设置为192.168.1.150),不使用dhcp方式

  输入root密码并建立一个用户

  选择"Package Group Selection"时只保留"Network Support"和"Software Development".在勾选"Individual Package Selection"之后把"Applications/Internet中的openssh相关的都选上并安装依赖包.这样总的安装大小只有494MB

  开始安装,安装过程中要更换一次光盘,使用virt-manager安装的话光盘很好更换,从"显示图形控制台"切换到"显示虚拟硬件详情"栏,把IDE CDROM断开连接,更换新的iso文件之后就可以使用了

  安装完成后把IDE CDROM断开再重启系统

2.设置Red Hat 7.2

1.配置ssh并实现无密码登录

在red hat中使用scp把从enigma-i386-disc1.iso中把openssh-server-2.9p2-7.i386.rpm拉取到本地,并安装好,此时"rpm -qa |grep openssh"会显示openssh-client,openssh-server都已经装好了

在物理机上

ssh-keygen -t rsa
scp id_rsa.pub york@192.168.1.150:/home/york

在虚拟机上修改/etc/ssh/sshd_config为

RhostsAuthentication yes
RhostsRSAAuthentication yes
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no

并把pub文件输入authorzied_keys, 并修改authorized_keys权限为600, 并复制authorized_keys为authorized_keys2

cat id_rsa.pub >> .ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cp ~/.ssh/authorized_keys ~/.ssh/authorized_keys2

此时应当可以无密码连接(物理机连虚拟机)了

2.使用root用户修改开机时间 "vi /etc/grub.conf",把timeout改成1

3.利用自启动服务配置程序ntsysv把sendmail服务取消

4.修改/home/用户/.bash_profile,在PATH后面添加:/sbin:/usr/sbin:/usr/local/sbin:/usr/kerberos/sbin这几个路径。然后执行命令:source .bash_profile,这是修改用户的环境变量,使用户可以使用其它命令

3.安装程序

1.把gmp-5.0.5.tar.bz2, sfs-0.6.tar.gz, vim-7.3.tar.bz2, bft-base-src-rh72.tar.gz通过scp拷贝到虚拟机上

依次安装vim,, gmp, sfs

./configure
make
make install

 安装sfs时要创建sfs组和用户,再configure,make,make install

groupadd sfs;useradd -g sfs sfs

2.最后编译bft的libbyz,在此之前先要把sfs和gmp的头文件文件夹做链接

ln -s /usr/local/include/sfs-0.6 sfs
ln -s ~/bft/gmp-5.0.5 gmp

再修改sfs(/usr/local/include/sfs-0.6)中的rabin.h的函数(line 62,line 102)

-- Patch the file sfs/rabin.h to add the following method
to rabin_pub:

 bool verify (const char *msg, const unsigned sz, const bigint &s) const {
    bigint m;
    E2 (m, s);
    D1 (m, m);
    sha1ctx sc;
    sc.update (msg, sz);
    return post_verify (&sc, m, nbits);
  }

and the following method to rabin_priv:

bigint sign (const char *msg, unsigned len) const {
    sha1ctx sc;
    sc.update(msg, len);
    bigint m = pre_sign (&sc, nbits);
    E1 (m, m);
    D2 (m, m, rnd.getword ());
    return m;
  }

注释gmp/gmp.h中的4行(line 2227)

#ifdef __cplusplus
__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpz_srcptr);
//__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpq_srcptr);      
//__GMP_DECLSPEC_XX std::ostream& operator<< (std::ostream &, mpf_srcptr);
__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpz_ptr);
//__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpq_ptr);
//__GMP_DECLSPEC_XX std::istream& operator>> (std::istream &, mpf_ptr);
#endif

最后编译libbyz(在libbyz中运行make)

3.编译difs和simple

把simple的makefile中的LIBDIRS一行后面加" -L/usr/local/lib/sfs-0.6/"(注意空格)

然后make就可以通过编译

4.配置pbft

1.把config_private做链接到simple中,把config_private/config也复制到simple中

ln -s ../config_private/
cp config_private/config .

2.按需求修改配置文件config(server放在前面,后面才是client,我需要mbft_0作为client 其他的作为replica)

generic
1
1800000
5
234.5.6.8 3669
mbft_1 192.168.1.151 3669 bfaa873efc926cb91646a89e45f96582041e3eed35cde0ef60b5c006cfad883781ee807411b0df3c74dc3ebbbce59c21d67711c83ecf596357c23dba33da338fb5577179a3b6188c59590aa1301eb852c0e14fa9225c0b377fee944eb9fa110ad7a316269e4b13b153887426a347c7c3c5feb1e3107bac4c6e29327b3343c405
mbft_2 192.168.1.152 3669 bfaa873efc926cb91646a89e45f96582041e3eed35cde0ef60b5c006cfad883781ee807411b0df3c74dc3ebbbce59c21d67711c83ecf596357c23dba33da338fb5577179a3b6188c59590aa1301eb852c0e14fa9225c0b377fee944eb9fa110ad7a316269e4b13b153887426a347c7c3c5feb1e3107bac4c6e29327b3343c405              mbft_3 192.168.1.153 3669 bfaa873efc926cb91646a89e45f96582041e3eed35cde0ef60b5c006cfad883781ee807411b0df3c74dc3ebbbce59c21d67711c83ecf596357c23dba33da338fb5577179a3b6188c59590aa1301eb852c0e14fa9225c0b377fee944eb9fa110ad7a316269e4b13b153887426a347c7c3c5feb1e3107bac4c6e29327b3343c405
mbft_4 192.168.1.154 3669 bfaa873efc926cb91646a89e45f96582041e3eed35cde0ef60b5c006cfad883781ee807411b0df3c74dc3ebbbce59c21d67711c83ecf596357c23dba33da338fb5577179a3b6188c59590aa1301eb852c0e14fa9225c0b377fee944eb9fa110ad7a316269e4b13b153887426a347c7c3c5feb1e3107bac4c6e29327b3343c405
mbft_0 192.168.1.150 3669 bfaa873efc926cb91646a89e45f96582041e3eed35cde0ef60b5c006cfad883781ee807411b0df3c74dc3ebbbce59c21d67711c83ecf596357c23dba33da338fb5577179a3b6188c59590aa1301eb852c0e14fa9225c0b377fee944eb9fa110ad7a316269e4b13b153887426a347c7c3c5feb1e3107bac4c6e29327b3343c405
5000
150
9999250000
// The format is:
// Service name
// Maximum number of faults
// Authentication period (ms)
// Number of principals (excluding group)
// IP multicast group address and port
// domain_name IP_address port public_key_base16
// .... (x Number of principals)
// Then the replica specific portion
// view change timeout in mseconds
// status timeout in mseconds
// recovery timeout in mseconds

3.在/etc/hosts中第一个非注释行添加(应该当被第一个检测)

192.168.1.150   mbft_0

至此,在simple下运行./server是可以建立起replica的

4.使用virt-manager拷贝虚拟机,拷贝完成后需要进行设置

进入/etc/hosts;修改ip和主机名

/etc/sysconfig/network修改主机名;

利用netconfig修改ip地址;

完成之后进入simple,mbft_1-4号机上执行./server mbft_0号机上执行./client就可以看到执行结果了

(详细的出错原因和调试过程在此处省略,需要查阅的请猛戳http://www.cnblogs.com/york-hust/category/394202.html查看安装log)

 

 

posted on 2012-08-24 11:44  york_hust  阅读(1661)  评论(0编辑  收藏  举报