在Ubuntu 20.04下安装 ROOT cern

  • Step1 安装必要库
  • Step2 安装ROOT本身
  • 方法1:下载预编译软件包安装(Bianary Distributions)
  • 方法2:CMAKE编译安装
  • Step3 设置启动终端时自动注入ROOT路径
  • 懒人快速安装教程
  • 安装必备包
  • 下载预编译包(Binary Distribution)并解压
  • 设置自动添加路径


在ROOT的安装过程中挣扎了很久,主要是根据README下的INSTALL安装时,总是出一些莫名其妙的问题,在爬过那么多坑后,决定总结出来,并提供一套成功概率较大的安装方法给安装新手(老手轻喷)

本方法使用Ubuntu 20.04, ROOT的版本为6.22.02

Step1 安装必要库

首先准备一个有相对纯净的环境的Ubuntu,然后安装required dependencies

ubuntu 22安装 Ceres ubuntu20安装 cern root_ubuntu


注意,不同版本的Ubuntu对应的库的名字有细微区别,例如Ubuntu20中,如果直接复制下面的代码运行:

sudo apt-get install dpkg-dev cmake g++ gcc binutils libx11-dev libxpm-dev libxft-dev libxext-dev python openssl-dev

会报错:

E: 无法定位软件包 openssl-dev

只需要把命令的最后一个包的名字openssl-dev替换成openssl即可:

sudo apt-get install dpkg-dev cmake g++ gcc binutils libx11-dev libxpm-dev libxft-dev libxext-dev python openssl

这里就有一个坑:在Ubuntu16, 18, 20中,包的名字有略微的差别,目前我找到的规律就是:
后缀是-dev的包如果找不到,那就把-dev去掉试试
此外,国内的apt镜像源可能存在问题,这可能会影响update upgrade指令而导致安装失败
PS:图里的png和jpeg包是不用安装的

除了图里所列的库,还需要安装git、python对应版本的-dev和-numpy(ubuntu20以外的版本不确定是否需要),缺失git会导致cmake无法进行,缺失python的-dev和-numpy会导致pyroot无法安装,但是不会报错,也就是后面的步骤都能进行,但就是没有pyroot!

sudo apt-get install git python2-dev python3-dev python2-numpy python3-numpy
# 引用 [https://root-forum.cern.ch/t/thank-you-for-fixing-pyroot-compatibility/40220](https://root-forum.cern.ch/t/thank-you-for-fixing-pyroot-compatibility/40220)

Step2 安装ROOT本身

ROOT本身只是一堆文件,不存在类似于Windows下某些软件安装时非要望C盘里塞点什么东西的情况。也就是说,只要两台电脑拥有一模一样的系统和环境,那么ROOT可以直接Copy过去使用(当然Windows下的一些软件也是可以这样的,给Windows留点面子)。
目前我实操过的方法有以下两种:

  • 下载预编译软件包安装:这种方式方便快捷,但适用性有限(不过也涵盖了一般的个人用户了,力荐)
  • 自行CMAKE编译安装:这种方式针对第一种方式没有涵盖到的系统进行安装,比较费时间,而且可能会出错

方法1:下载预编译软件包安装(Bianary Distributions)

一般而言,如果是新安装的纯净系统,其附带的环境是相同的。举个栗子,Ubuntu20.04系统自带Python的版本为3.8.5,gcc版本为9.3。于是,只要自己没有主动更改相关软件的版本或其他设置,那么我们只需要从官网上下载在同一环境下编译好的软件直接使用即可。

说人话版:新系统,安装完依赖环境之后啥也别干,从官网上下对应版本的预编译软件包,解压使用即可。

ubuntu 22安装 Ceres ubuntu20安装 cern root_python_02


找个文件夹将下载好的软件包解压即可

方法2:CMAKE编译安装

如果预编译软件包中没有自己需要的版本,那么可以从官网把源码下下来,解压,然后新建一个 “rootbuild” 的文件夹,(根据README文件夹中的INSTALL的说明,建立一个与源码文件夹 “root_v6.22.02” 同级的文件夹较为方便,可以直接按照说明进行安装。

ubuntu 22安装 Ceres ubuntu20安装 cern root_ubuntu 22安装 Ceres_03

但是!前文也说了,它总是出一些奇奇怪怪的问题,在经历反复试错后,我发现大多数问题都可以通过在命令前面加 sudo 来解决,也就是(因为前面已经建立好了文件夹,因此只需要确保终端路径是rootbuild,即可直接进入第二步的3、4命令:

sudo cmake ../root_v6.22.02  #图中的root实际上是源码文件夹

不出意外的话,末尾会显示

-- Configuring done
-- Generating done
-- Build files have been written to: [rootbuild的路径]

如果出了意外,那就看看是不是缺了什么包,装上再重新cmake(例如前文所说的python包,可以在这一步的输出内容中找到 “cannot found python2” 的相关内容)

编译完之后,运行:

sudo make -j4  #-j8的意思是使用4个处理器同时make,可以自行更改,但是别超出处理器数量了

Step3 设置启动终端时自动注入ROOT路径

前图的第三步

ubuntu 22安装 Ceres ubuntu20安装 cern root_ubuntu 22安装 Ceres_03


根据我的试错,实际上需要运行

source [rootbuild的路径]/bin/thisroot.sh  #并非.csh

来注入路径。此外,每次打开终端时,还都得输入一遍这个指令,比较繁琐。因此,可以把这个指令加到 ~/.bashrc 文件中,以达到每次打开终端时都自动注入路径的效果:

sudo gedit ~/.bashrc  #用文本编辑器打开~/.bashrc

在文本最后单独添加一行:

source [rootbuild的路径]/bin/thisroot.sh

保存退出即可。

重启终端后,可以在终端直接输入

root

来检验安装。同时也可以进入python,导入ROOT来检验pyroot的安装。

PS:经过我的测试,Ubuntu下的vscode在添加上述代码后可以直接运行root,而pycharm则需要在启动脚本的合适位置添加source [rootbuild的路径]/bin/thisroot.sh,而且每次pycharm更新后都得重新添加。(不过因为对pycharm了解有限,不知道有没有别的方法了)个人猜测跟软件调用终端的方式有关。

(部分方法可能与网上已有方法类似,侵删)


懒人快速安装教程

只针对ubuntu20.04,其他版本可以作参考

安装必备包

sudo apt-get install dpkg-dev cmake g++ gcc binutils libx11-dev libxpm-dev \
 libxft-dev libxext-dev python openssl
sudo apt-get install git

根据需要安装python所需包(用于pyroot的安装)

sudo apt-get install python2 python2-dev python2-numpy
sudo apt-get install python3 python3-dev python3-numpy
# 安装哪个版本,哪个版本的pyroot就会被编译,两个版本可以并存

注意:国内的apt镜像源可能存在问题,例如我发现的一个有问题的源是阿里的,这可能会影响update upgrade指令而导致安装失败

下载预编译包(Binary Distribution)并解压

将下载好软件包解压至<你的路径>/root-6.22.02(名字任意,这个文件夹名是因为我解压出来默认是这个名字)

设置自动添加路径

root自带添加路径脚本,只要在终端启动时自动运行一遍即可:

sudo gedit ~/.bashrc    # 使用文本编辑器编辑.bashrc,也可以将gedit改成vi等

在文本末尾新建一行,写入

source <你的路径>/root-6.22.02/bin/thisroot.sh    # 替换成对应的安装路径

保存,退出,完成。