之前尝试在CentOS7上部署ROOT集群,却发现无论是源码包安装,还是官方提供的二进制包,都缺少了关键的xproofd可执行文件,导致PoD不能运行。没有办法,只能尝试在其他OS上部署,这里我选择了Ubuntu14.04

部署准备

修改apt源

  修改/etc/apt/sources.list,换成国内的163源,下载会更快和稳定一些。

# vim /etc/apt/sources.list
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse

  再调用apt-get update更新index。

安装gcc,g++

  如果系统已经安装gcc和g++,可跳过此步骤。

# apt-get install gcc
# apt-get install g++

安装cmake

  直接通过apt-get安装的cmake在安装ROOT组件时会出现问题,所以这里建议源码安装,我这里使用的是2.8.8版本。官网下载地址:https://cmake.org/files/,可选择自己适合的版本。

- 解压:tar xvf cmake-2.8.8.tar.gz
- 进入解压目录:cd cmake-2.8.8
- ./bootstrap
- make
- make install

安装zlib库

  github上(https://github.com/madler/zlib)可下载对应的zlib库,我使用的是1.2.3版本,下载地址为:https://github.com/madler/zlib/archive/v1.2.3.zip

- 解压:unzip zlib-1.2.3.zip

- 进入解压目录:cd zlib-1.2.3

- ./configure

注意:在make之前,需要修改Makefile,否则调用库时会出现错误。找到 CFLAGS=-O3 -DUSE_MMAP这一行,在后面加入-fPIC,即变成CFLAGS=-O3 -DUSE_MMAP -fPIC

- make

- make install

其他库

apt-get install procmail

部署ROOT集群

安装ROOT

  binary安装:https://root.cern.ch/content/release-60606。选择对应的OS系统编译包。解压并将其移动至/opt目录下:

# tar zxvf root_v6.06.06.Linux-ubuntu14-x86_64-gcc4.8.tar.gz
# mv root /opt

  再将ROOT相关配置写入初始化文件,这里在/etc/profile.d/root.sh末尾加入以下语句:

export ROOTSYS=/opt/root
export PATH=$PATH:$ROOTSYS/bin
source $ROOTSYS/bin/thisroot.sh

  source /etc/profile.d/root.sh让配置生效。运行命令root -b测试root是否能正常运行:

#root -b
root: error while loading shared libraries: libXpm.so.4: cannot open shared object file: No such file or directory

  缺少libXpm库,运行apt-get install libxpm4命令安装。安装时有可能会提示缺少安装包,这和本地的源index有关系,需要先向远端源同步后(运行apt-get update命令),再安装xpm包。安装成功。

# apt-get install libxpm4
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
libxpm4
0 upgraded, 1 newly installed, 0 to remove and 5 not upgraded.
Need to get 37.0 kB of archives.
……

  再次运行root -b命令来测试,再次报错。

# root -b
ERROR in cling::CIFactory::createCI(): cannot extract standard library include paths!
Invoking:
echo | LC_ALL=C c++ -pipe -m64 -Wall -W -Woverloaded-virtual -fsigned-char -fPIC -pthread -std=c++11 -Wno-deprecated-declarations -Wno-comment -Wno-unused-parameter -Wno-maybe-uninitialized -Wno-unused-but-set-variable -Wno-missing-field-initializers -fPIC -fvisibility-inlines-hidden -std=c++11 -ffunction-sections -fdata-sections -fno-common -Woverloaded-virtual -Wcast-qual -fno-strict-aliasing -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -Wno-unused-local-typedefs -O2 -DNDEBUG -xc++ -E -v - 2>&1 >/dev/null | awk '/^#include </,/^End of search/{if (!/^#include </ && !/^End of search/){ print }}' | grep -E "(c|g)\+\+"
results in
results in
with exit code 256
input_line_1:1:10: fatal error: 'new' file not found
#include <new>

  缺少C++的new包,这个报错极有可能是未安装c++引起的,因为ROOT及其它组件都是使用C++编写的。因此需要安装gcc和gcc-c++。

# apt-get install gcc
……
# apt-get install g++
……

  运行root -b命令,终于成功,未报错。

安装XRootD

  安装XRootD有两种方法,通过ROOT源码包中的脚本安装,或者直接从官网下载源码安装。

通过ROOT源码包中的脚本安装XRootD

  进入ROOT源码包目录,执行以下语句即可:

./build/unix/installXrootd.sh -v 3.0.0 /opt

源码安装XRootD:

  解压后并进入源码目录:

# mkdir build; cd build
# cmake /root/xrootd-3.3.0 -DCMAKE_INSTALL_PREFIX=/opt/xrootd
# make
# make install

  如果完全成功,则可以相关配置写入初始化文件,这里可以继续加入/etc/profile.d/root.sh的末尾:

source $ROOTSYS/bin/setxrd.sh /opt/xrootd/

安装PoD

  官网(http://pod.gsi.de)下载源码,这里下载使用的是3.16版本的源码:pod.gsi.de/releases/pod/3.16/PoD-3.16-Source.tar.gz。如果连接失效,可自行查找。解压源码压缩包后,并进入源码目录:

cmake命令

mkdir build
cd build
cmake -C ../BuildSetup.cmake ..

  运行cmake时,提示缺少boost库,这里需要安装boost库。

apt-get install libboost-dev

  安装后继续运行上述的cmake命令,还是报错,提示缺少以下库:

  The following Boost libraries could not be found:

          boost_thread
boost_program_options
boost_filesystem
boost_system
boost_unit_test_framework

  有个小tips:这些库直接使用apt-get install +库名的方式是不成功的,因为安装包和这个名称并不完全匹配,这里可以用apt-cache search的方法来查找安装包的名称再安装,以boost_thread为例。

# apt-cache search boost | grep thread
libboost-thread-dev - portable C++ multi-threading (default version)
libboost-thread1.46-dev - portable C++ multi-threading
libboost-thread1.46.1 - portable C++ multi-threading
libboost-thread1.48-dev - portable C++ multi-threading
libboost-thread1.48.0 - portable C++ multi-threading

  根据这个提示,我就可以直接安装apt-get install libboost-thread-dev即可。以下:

apt-get install libboost-thread-dev
apt-get install libboost-program-options-dev
apt-get install libboost-filesystem-dev
apt-get install libboost-system-dev
apt-get install libboost-test-dev

  再接着运行cmake -C ../BuildSetup.cmake ..命令,终于成功。

make命令

  运行make命令,又报错了。

/usr/include/boost/thread/xtime.hpp:23:5: error: expected identifier before numeric constant
TIME_UTC=1

  这个是boost1.5版本以下的一个固有bug,变量么命名重复了。修改起来很简单,打开/usr/include/boost/thread/xtime.hpp,将23行和71行的TIME_UTC都修改为TIME_UTC_即可,也就是说保证没有重命名。

  再次运行make命令,再次提示错误。

/root/PoD-3.16-Source/app/MiscCommon/proof_status_file/ProofStatusFile.h:88:13: error: 'uint16_t' does not name a type
uint16_t xpdPort() const

  看起来是编译时不认识uint16_t这个别名,修改很简单,头文件包含即可。在/root/PoD-3.16-Source/app/MiscCommon/proof_status_file/ProofStatusFile.h中的第19行加入#include <stdint.h>。具体插入的位置可能因PoD代码版本不同而有些差别,但有C或者C++基础的人应该很容易能找到合适的位置。

  再次运行make命令,终于完美通过。

make install命令

  该命令运行无任何报错。如果无指定配置,PoD会被安装在用户目录的Pod目录下,如我以root用户安装,则安装在/root/PoD目录下。

PoD安装最后一步

  相关配置写入初始化文件,这里可以继续加入/etc/profile.d/root.sh的末尾:

source /root/PoD/3.16/PoD_env.sh

  source /etc/profile.d/root.sh让配置生效。运行pod-server start,如果是第一次运行,会下载相关组件wn_bins目录到/root/PoD/3.16/bin/。如果服务器没有访问外网的权限,可以使用虚拟机搭建以上所有步骤,下载wn_bins目录。无论什么OS,下载的wn_bins目录都是一样的,可以直接拷贝。

组成ROOT集群

  运行pod-server start,待其下载wn_bins目录后,如果没有出现错误,会出现如下结果:

# pod-server start
Starting PoD server...
updating xproofd configuration file...
starting xproofd...
starting PoD agent...
preparing PoD worker package...
selecting pre-compiled bins to be added to worker package...
PoD worker package: /root/.PoD/wrk/PoDWorker.sh
------------------------
XPROOFD [1809] port: 21001
PoD agent [1848] port: 22002
PROOF connection string: root@mac00000102030a.hostname.com:21001

  使用上述所有方法,搭建两个服务器环境,从而搭建一套拥有一个server和一个client的小集群。ROOT服务器之间又多种通讯方式,这里,我们使用最简单直接的ssh方式。首先,两台服务器需要建立ssh登录互信,从而实现ssh登录免密码。搭建方法可见:http://chenlb.iteye.com/blog/211809。

  之后,选择其中服务器A作为server,服务器B作为client(worker)。在server上,编辑/root/pod_ssh.cfg文件,内容如下:

@bash_begin@
. /etc/profile.d/root.sh
@bash_end@ r1, root@109.105.115.249,,/tmp/test, 2

  前三行是ssh到client之后,需要执行的脚本文件,这里就是在各client上执行下ROOT系统的参数配置,设置环境变量等。第五行则是访问client的配置,每个client都对应一行,因为我们这里只有一个client,所以就只有一行。这一行的格式是:

1 2 3 4 5
client唯一识别符,不可重复 用户名@ip或者hostname ssh参数,可以为空 client端工作目录 期望的client端worker个数,可以为空

  然后,在server端执行pod-ssh -c /root/pod_ssh.cfg submit --debug来建立集群。显示如下,则说明server端成功:

# pod-ssh -c /root/pod_ssh.cfg submit --debug
** [Mon, 29 Aug 2016 10:40:18 +0800] preparing PoD worker package...
** [Mon, 29 Aug 2016 10:40:18 +0800] selecting pre-compiled bins to be added to worker package...
** [Mon, 29 Aug 2016 10:40:18 +0800] PoD worker package: /root/.PoD/wrk/PoDWorker.sh
** [Mon, 29 Aug 2016 10:40:18 +0800] pod-ssh config contains an inline shell script. It will be injected it into wrk. package
** [Mon, 29 Aug 2016 10:40:18 +0800] preparing PoD worker package...
** [Mon, 29 Aug 2016 10:40:18 +0800] inline shell script is found and will be added to the package...
** [Mon, 29 Aug 2016 10:40:18 +0800] selecting pre-compiled bins to be added to worker package...
** [Mon, 29 Aug 2016 10:40:18 +0800] PoD worker package: /root/.PoD/wrk/PoDWorker.sh
** [Mon, 29 Aug 2016 10:40:18 +0800] There are 5 threads in the tread-pool.
** [Mon, 29 Aug 2016 10:40:18 +0800] Number of PoD workers: 1
** [Mon, 29 Aug 2016 10:40:18 +0800] Number of PROOF workers: 2
** [Mon, 29 Aug 2016 10:40:18 +0800] Workers list:
** [Mon, 29 Aug 2016 10:40:18 +0800] [r1] with 2 workers at root@109.105.115.249:/tmp/test/r1
r1 [Mon, 29 Aug 2016 10:40:18 +0800] pod-ssh-submit-worker is started for root@109.105.115.249 (dir: /tmp/test/r1, nworkers: 2, sshopt: )
** [Mon, 29 Aug 2016 10:40:19 +0800]
*******************
Successfully processed tasks: 1
Failed tasks: 0
*******************

  我们再登录client端,进入/root/pod_ssh.cfg中设置的client端工作目录工作目录。

# ls
libboost_filesystem-mt.so.5 libpod_protocol.so PoD.cfg PoDWorker.sh proof.conf user_worker_env.sh xpd.log
libboost_program_options-mt.so.5 libproof_status_file.so pod-user-defaults pod-wrk-bin-3.16-Darwin-universal.tar.gz server_info.cfg version
libboost_system-mt.so.5 libSSHTunnel.so PoDWorker.lock pod-wrk-bin-3.16-Linux-amd64.tar.gz ssh-tunnel xpd.cf
libboost_thread-mt.so.5 pod-agent PoDWorker.pid pod-wrk-bin-3.16-Linux-x86.tar.gz ssh_worker.log xpd.cf.bup

  可见,都是一些库、配置文件和日志等。我们暂时主要关注日志文件ssh_worker.log,日志末尾显示如下,则表示完全成功:

***     [Mon, 29 Aug 2016 10:44:48 +0800]       Attempt to start pod-agent (1 out of 3)
*** [Mon, 29 Aug 2016 10:44:48 +0800] Attempt to start and detect xproofd (1 out of 10)
*** [Mon, 29 Aug 2016 10:44:48 +0800] trying to use XPROOF port: 21002
*** [Mon, 29 Aug 2016 10:44:48 +0800] starting xproofd...
*** [Mon, 29 Aug 2016 10:44:48 +0800] xproofd is running. pid=[2794] port=[21002]
*** [Mon, 29 Aug 2016 10:44:48 +0800] starting pod-agent...

Ubuntu14.04安装ROOT集群的更多相关文章

  1. Ubuntu14.04安装intel集显驱动

    Ubuntu14.04安装intel集显驱动 标签(空格分隔): ubuntu linux 驱动安装 1.查看本机显卡型号 使用lspci命令来获取PCI接口硬件信息 o@o-pc:~$ lspci ...

  2. 搭建ubuntu14.04的hadoop集群【docker容器充当服务器】

    首先弄出来装有hadoop.java.ssh.vim的镜像起名badboyf/hadoop.做镜像有两种方法,一种是用Dockerfile来生成一个镜像,一种是基于ubuntu14.04的基础镜像生成 ...

  3. ubuntu 16.04安装ceph集群(双节点)

    Ceph是一个分布式存储,可以提供对象存储.块存储和文件存储,其中对象存储和块存储可以很好地和各大云平台集成.一个Ceph集群中有Monitor节点.MDS节点(可选,用于文件存储).至少两个OSD守 ...

  4. 【云计算】Ubuntu14.04 搭建GlusterFS集群

    1.修改 /etc/hosts 所有服务节点执行(如果集群中没有DNS,可忽略此步骤): 10.5.25.37 glusterfs-1-5-25-3710.5.25.38 glusterfs-2-5- ...

  5. 安装ClouderaManager以及使用ClouderaManager安装分布式集群的若干细节

    目录 前言 整体介绍 分步安装介绍 总结 一.前言        周末干了近四十个小时中间只休息了五个小时终于成功安装了ClouderaManager以及分布式集群,其中各种辛酸无以言表,唯有泪两行. ...

  6. Ubuntu14.04安装完全分布式Hadoop1.2.1

    一直想装hadoop集群,但总是没有时间,最近抽了三天时间下定决定装了一下,在我的wmware上虚拟了一台Ubuntu14.04,然后再复制了两台虚拟机,准备开始!!!! 基本参考 http://ww ...

  7. Ubuntu14.04安装配置web/ftp/tftp/dns服务器

    目录: 1.安装ftp服务器vsftpd --基于tcp,需要帐号密码 2.安装tftp服务器tftpd-hpa,tftp-hpa --udp 3.web服务器--使用Apache2+Mysql+PH ...

  8. centos7.0 安装redis集群

    生产环境下redis基本上都是用的集群,毕竟单机版随时都可能挂掉,风险太大.这里我就来搭建一个基本的redis集群,功能够用但是还需要完善,当然如果有钱可以去阿里云买云数据库Redis版的,那个还是很 ...

  9. 安装hadoop集群服务器(hadoop1.2.1)

    摘要:hadoop,一个分布式系统基础架构,可以充分利用集群的威力进行高速运算和存储.本文主要介绍hadoop的安装与集群服务器的配置. 准备文件: ▪ VMware11.0.0      ▪ Cen ...

随机推荐

  1. ExtJs 可查询的下拉框

    最近项目中有个需求,就是有四个模块需要加载一个主表的内容,比如说这个表叫项目表(比如项目表里有两个字段一个是项目ID--projCd,还有一个是项目名称--projNm).主表的内容的要放在一个下拉框 ...

  2. duilib 的IE浏览器控件去边框和去滚动条的代码

    近些天在duilib群里经常有朋友问起,怎么让duilib的IE控件可以去边框,去滚动条的问题,或者是如何去控件IE控件的行为.为了避免重复的回答,我就写一篇博文,把处理方法说明一下. duilib中 ...

  3. 物料分类账 [COML] PART 2 - 总体流程

    核心流程概要: [1]. 分类账在物料主数据的影响 首先描述下SAP中物料价格的 物料主数据相关的几个点: q价格控制(Price Control): 决定物料计价方式. S 标准价格(Standar ...

  4. Android Studio开发JNI工程

    转:http://www.2cto.com/kf/201412/361768.html 使用Android Sutdio创建一个新的工程后,接下来记录创建NDK工程的基本步骤. 本文将达到: 1. 创 ...

  5. WIN8 下Cisco VPN连接 出现vpn 422 failed to enable virtual adapter错误

    今天在家用VPN软件连接,出现了“vpn 422 failed to enable virtual adapter”的错误,系统安装的是Win8专业版32位,百度了半天又很多方法解决不了,后来发现了一 ...

  6. mysql同主机数据库复制

    我们有时候需要在测试环境和生产环境下做交换.以下可以快速的复制数据库,支持大容量(1G以上) 1.将database_DEV数据库导成database_DEV.contents.gz压缩文件 mysq ...

  7. 最近买了个kindle,为了方便阅读,写了个程序抓取网页内容发送到Kindle

    主要觉得往kindle里加书籍太麻烦了,要下载下来,还要通过邮件发送,特别一些网页文字版的书籍没办法放到kindle里,所以想着还不如自己动手丰衣足食,写一个程序直接抓取网页内容,制作成书籍,然后自动 ...

  8. win8磁盘占用100%的12种解决办法

    解决方法1:硬盘4K对齐,能减少磁盘占用100%情况.(大部分用户能解决) 解决方法2:检查硬盘AHCI驱动是否安装 解决方法3:通过 HD Tune Pro 5 专业的硬盘测试工具 检测硬盘健康度, ...

  9. 让我们一起Go(十二)

    前言: 上篇中,我们讲到了在Go语言中如何定义方法,今天,我们将进一步深入Go语言的面向对象编程. 一.Go语言中的接口 首先来看一个最基本的接口: 和定义一个结构体类似,只不过将struct换成了i ...

  10. 【Thinking in Java-CHAPTER 3】操作符

    优先级 赋值 对象在使用c=d,那么c和d都指向原本只有d指向的那个对象. 方法调用中的别名问题:当一个对象作为参数传递到一个函数中,函数改变了这个参数,则改变了传递进来的对象: 自增和自减 浮点型的 ...