特殊事件處理篇

CentOS 8 自行編譯 NCO 的問題

一直找不到某些軟體,但是舊版是有的!原來是 yum module 的問題!

最近更新時間: 2020/04/23

問題發生的狀況說明

鳥哥因為執行計劃案的關係,常常需要動用到 NetCDF 的科學檔案資料格式,這種格式可以快速存取!只是, 如果要進行合併或者是某些特殊的運算,就比較麻煩!除了寫 NetCDF 原生的 code 之外,其實還有很多既有的工具可以處理, 鳥哥用到最重要的兩個其實是:

尤其是 NCO,該工具提供很多有趣的功能~可以讓我們在不同的檔案間進行許多的運算,檔案的拆解與結合等等,很有趣。 這兩個軟體一般來說都是自行編譯,當然,你也可以透過 EPEL 安裝好 NCO。只是,因為鳥哥的檔案都特別大,為了加速, 只好自行編譯!否則效能恐怕會有點狀況這樣。

I/O API tools 的編譯倒是相對簡單,直接處理好 Makefile 後,下去 make 就好了!NCO 則得要從 ./configure 慢慢做起, 然後 make 再 make install 這樣。只是,在 ./configure 時,一直發現有找不到 antlr 這個函式庫的問題~ 鳥哥使用了底下的指令,一直回報找不到:

[root@localhost ~]# yum whatprovides "*libantlr*"

相當奇怪!照理說,在 CentOS 7 以前有這個東西,而且 NCO 也算是個相當熱門的軟體,沒道理 CentOS 8 會捨棄支援才對! 非常不死心,跑去將 EPEL 的 CentOS 8 的支援當中找到了 nco 的 SRPM 檔案,下載並安裝之後,找到 spec file,查看一下裡面的內容, 內容有點像這樣:

[root@localhost ~]# vim ~/rpmbuild/SPECS/nco.spec
......
Name:           nco
Version:        4.8.1
Release:        1%{?dist}
Summary:        Suite of programs for manipulating NetCDF/HDF4 files
License:        GPLv3
URL:            http://nco.sourceforge.net/

Source0:        https://github.com/nco/nco/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz
Patch0:         nco-install_C_headers.patch

BuildRequires:  gcc-c++
BuildRequires:  bison, flex, gawk
BuildRequires:  netcdf-devel
%if 0%{?fedora} || 0%{?rhel} >= 7
BuildRequires:  antlr-C++
%else
BuildRequires:  antlr
%endif
BuildRequires:  chrpath
BuildRequires:  gsl-devel
BuildRequires:  texinfo
BuildRequires:  udunits2-devel
......

看起來明明就有支援 antlr-C++. antlr 等軟體啊!不過,在 EPEL 裡面,確實是找不到 antlr 相關的軟體的!後來查了查, 大家說, antlr 確實有在名為 PowerTools 的 repo 裡面,好開心啊!趕緊來查一下:

[root@localhost ~]# yum --enablerepo=PowerTools search antlr

見鬼了!竟然跟我說,沒有這個軟體的存在!這怎麼可能啊!不要唬我啊~明明大家都說有!後來查了查,發現到其實 antlr 是 javascript 相關的一個『模組功能』, 所以,如果想要安裝該軟體,就得要讓你的 yum 或 dnf 加入到 javapackages-tools 這個模組才可以!使用的方式為:

[root@localhost ~]# yum --enablerepo=PowerTools module enable javapackages-tools
[root@localhost ~]# yum --enablerepo=PowerTools search antlr
Last metadata expiration check: 1:57:46 ago on Thu 23 Apr 2020 01:26:01 PM CST.
================================= Name & Summary Matched: antlr =================================
antlr-manual.noarch : Manual for antlr
antlr-javadoc.noarch : Javadoc for antlr
ant-antlr.noarch : Optional antlr tasks for ant
antlr-C++.x86_64 : C++ bindings for antlr2 generated parsers
====================================== Name Matched: antlr ======================================
antlr-tool.noarch : ANother Tool for Language Recognition

太棒了!終於找到這個玩意兒~可以來安裝看看了:

[root@localhost ~]# yum --enablerepo=PowerTools install ant-antlr.noarch antlr-C++ antlr-tool

做了上面這件事情之後,系統就擁有 antlr 的函式庫,終於可以將 NCO 裡面的 ncap2 這個小指令編譯出來了!好難得!好感動啊!

伺服器篇文件
各版本彙整說明
CentOS 6.x