2010/08/13

安裝 Globus 與 MPICH

*此篇安裝記錄的各項設定主要是針對彰化師大資管 TKG ( TK group ) 研究室的作業環境。
*如果您熟悉 Linux 系統,您可以自行修改安裝路徑、使用者帳號等參數以符合您的需求。

主題:在 Ubuntu 9.10 環境 ( x86_32 或 x86_64 ) 安裝 Globus Toolkit 4 ( 4.0.* 或 4.2.* )。

關於 Globus Toolkit 網格 ( Grid ) 環境:
在網格環境中,使用者通常會有一個網格身份,使用者透過該網格身份來使用網格的資源。
某個有限範圍的網格,通常會稱為一個 Virtual Organization ( VO ),網格身份就是指使用者在 VO 中的身份。
# 關於 VO 可以參考 [Reference 01]。
VO 可以用 domain name 來命名,例如彰師資管可以使用 im.ncue.edu.tw。
而「hostname.im.ncue.edu.tw」可以用來識別 im.ncue.edu.tw 這個 VO 內的某台主機,hostname 即主機名稱。
主機作業系統中的使用者身份和 VO 中的網格身份是不同的。
主機作業系統中的使用者身份和 VO 中的網格身份是一個對映 ( mapping ) 關係。

例如:
PC-A 作業系統中有一個使用者帳號 userA。
PC-B 作業系統中有一個使用者帳號 userB。
PC-A 和 PC-B 屬於同一個網格 ( 同一個 VO )。
網格 ( VO ) 中的一個網格身份 grid_user 對映到 PC-A 的 userA 與 PC-B 的 userB,
只要有 grid_user 這個網格身份的使用權,就可以使用 grid_user 身份對映到 userA 及 userB,
並透過 userA 和 userB 這兩個身份分別使用 PC-A 與 PC-B 的資源。

更詳細的 Globus Toolkit 說明,可以參考:......

***************************

零、說明

TKG 網格的主機,作業系統的預設使用者帳號是:user008
user008 的密碼為 TKG 的專用密碼,請詢問老師或學長姐。

安裝軟體時的身份皆是「作業系統的 root」,執行某些動作時,如需切換身份,會特別說明。
安裝完成的 Globus Toolkit 網格管理者是「作業系統的 root」。
安裝完成的 Globus Toolkit 對映到的作業系統帳號是「作業系統的 user008」。
安裝完成的 Globus Toolkit 網格使用者是「VO 的 user008」。

# 「網格使用者的帳號」跟「對映到的作業系統帳號」是否使用相同的名稱,是見仁見智的。

***************************

一、網路設定

TKG 網格使用的是 192.168.100.0/24 這個 Private Network,請先將您的機器加入這個 LAN。

# 請先熟悉一下 vim 的模式切換、編輯指令、存檔指令(例如:Esc,i,:w,:q)。
# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

例如,您將使用的 IP 是:192.168.100.256
# be careful with this IP :-)

在 Ubuntu 底下,請執行:
vim /etc/network/interface

將 eth0 的內容改為如下:
auto eth0
iface eth0 inet static
address 192.168.100.256
netmask 255.255.255.0
network 192.168.100.0
broadcast 192.168.100.255
gateway 192.168.100.1
dns-nameservers ( 請依據情況設定,通常是一個 Public IP )

然後執行:
/etc/init.d/networking restart

# 如果您是使用 SSH 遠端連線,連線會中斷。
# 請將你的 SSH Client 也加入 192.168.100.0/24 這個 LAN,再重新連線到剛剛設定的電腦。

接下來,需要修改主機的名稱,使用 im*.im.ncue.edu.tw 這個格式。
例如,您使用的 IP 是 192.168.100.256,主機名稱會是:im256.im.ncue.edu.tw

請執行:
vim /etc/hostname

將內容修改為:
im256.im.ncue.edu.tw

存檔離開後,請執行:
reboot

重開機之後,使用以下指令檢查一下主機名稱:
/bin/hostname

使用以下指令檢查一下網路設定:
ifconfig

然後執行:
ping 192.168.100.1
ping ( 您的 DNS IP )

兩個 ping 測試都成功,請繼續下一步驟。

***************************

二、下載相關檔案

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

執行:
cd /opt

執行:
scp -r user008@192.168.100.1:/opt/globus_ubuntu /opt

執行:
cd /opt/globus_ubuntu

執行:
ls -lh

應該有這些檔案,總共大約 427 MB:
apache-ant-1.7.1-bin.tar.gz
globus_simple_ca_502cf2ea_setup-0.19.tar.gz
grid-mapfile
gt4.0.8-all-source-installer.tar.gz
gt4.2.1-all-source-installer.tar.gz
jdk-6u17-linux-i586.bin
jdk-6u17-linux-x64.bin
junit-4.3.1.jar
ld.so.conf
mpich.tar.gz
pre-requisites.sh
profile
xinetd.d_gsiftp
xinetd.d_gsigatekeeper

請繼續下一步驟。

***************************

三、安裝必備軟體 ( prerequisite softwares )

# 注意:這是個人測試 Ubuntu Server 環境下的必備軟體清單。
# 注意:如果您的環境不一樣,請檢查 Globus Toolkit 官方 prerequisite softwares 清單,補足缺少的軟體。
# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

執行:
cd /opt/globus_ubuntu

執行:
./pre-requisites.sh

pre-requisites.sh 的內容是:
#!/bin/bash
sudo apt-get upgrade
sudo apt-get update
sudo apt-get install \
openssh-server \
libssl-dev \
zlib-bin \
zlib1g \
zlib1g-dev \
gcc \
g++ \
xinetd \

echo "*** DO NOT FORGET JAVA SDK & APACHE-ANT :-) ***"

系統進行安裝確認時,請輸入:Y

請繼續下一步驟。

***************************

四、獨立安裝必備軟體:Java 與 Apache Ant

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

首先,進行 Java 的安裝。

執行:
cd /opt/globus_ubuntu

如果是 x86_32 環境請執行:
./jdk-6u17-linux-i586.bin

如果是 x86_64 環境請執行:
./jdk-6u17-linux-x64.bin

會出現 Java 的 license terms,請壓一下 q,然後輸入 yes,按 enter。
Java 自解壓縮安裝,完成後請壓幾下 enter 結束安裝。

執行:
mv jdk1.6.0_17 ../java

接下來,進行 Apache Ant 的安裝。

執行:
cd /opt/globus_ubuntu

執行:
tar zxvf apache-ant-1.7.1-bin.tar.gz

執行:
mv apache-ant-1.7.1 ../ant

執行:
cp junit-4.3.1.jar ../ant/lib/

接下來匯入環境變數,以測試安裝。

執行:
cd /opt/globus_ubuntu

執行:
more profile >> /etc/profile

globus_ubuntu/profile 的內容是:
export ANT_HOME=/opt/ant
export JAVA_HOME=/opt/java
export MPICH_HOME=/opt/mpich
export GLOBUS_LOCATION=/opt/globus
export PATH=$GLOBUS_LOCATION/bin:$GLOBUS_LOCATION/sbin:$MPICH_HOME/bin:$ANT_HOME/bin:$JAVA_HOME/bin:$PATH
source $GLOBUS_LOCATION/etc/globus-user-env.sh

執行:
source /etc/profile

# 暫時忽略 -su: /opt/globus/etc/globus-user-env.sh: No such file or directory 這行錯誤。

測試 Java,執行:
java -version

測試 Apache Ant,執行:
ant -version

測試成功,請繼續下一步驟。

***************************

五、安裝 Globus Toolkit

研究室舊有的網格使用的是 Globus Toolkit 4.0.* 版本的。
Globus Toolkit 4.0.* 與 Globus Toolkit 4.2.* 是不相通的。
如果您打算搭建一個全新的網格環境,不考慮與舊環境的銜接問題,請使用 Globus Toolkit 4.2.* 版本。
因研究室需求,在此以安裝舊版 Globus Toolkit 4.0.* 為例。

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

執行:
cd /opt/globus_ubuntu

執行:
tar zxvf gt4.0.8-all-source-installer.tar.gz

執行:
mkdir /opt/globus

執行:
cd /opt/globus_ubuntu/gt4.0.8-all-source-installer

執行:
./configure --prefix=/opt/globus

執行:
make | tee gt_make.log

編譯時間根據機器的性能不一,這時可以起來走跳一下,看看窗外綠葉。
編譯如果出現問題,請追蹤一下 gt_make.log 檔案,尋找錯誤訊息。

編譯如果順利完成,請執行:
make install

如果順利安裝完成,執行:
cd /opt/globus_ubuntu

執行:
more ld.so.conf >> /etc/ld.so.conf

執行:
ldconfig

***************************

六、設置 Grid Security Infrastructure ( with/without SimpleCA Server )

前面的步驟執行完,Globus Toolkit 其實已經安裝完,
但仍需進行 GSI ( Grid Security Infrastructure ) 的設置才可以使用。

GSI 的設置需要搭配一套 CA 認證系統,可以使用 Globus Toolkit 附帶 SimpleCA 模組。
安裝 SimpleCA Server 模組的時候,會產生一個 globus_simple_ca_HASH_setup.tar.gz 檔案。
Globus Toolkit 會使用該檔案來進行 gpt-build,完成 GSI 設置。
# HASH 是一串 16 進位亂數。
# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

---------

with SimpleCA Server already:

由於 TKG 已有架設好的 SimpleCA Server ( 192.168.100.1 ),
可以直接使用 TKG 的 globus_simple_ca_502cf2ea_setup-0.19.tar.gz 檔案。

執行:
cp /opt/globus_ubuntu/globus_simple_ca_502cf2ea_setup-0.19.tar.gz /opt/globus/

執行:
cd /opt/globus

如果是 x86_32 環境請執行:
gpt-build globus_simple_ca_502cf2ea_setup-0.19.tar.gz gcc32dbg

如果是 x86_64 環境請執行:
gpt-build globus_simple_ca_502cf2ea_setup-0.19.tar.gz gcc64dbg

gpt-build 順利執行完成後,請執行:
gpt-postinstall

以上指令會在 /opt/globus/setup 資料夾底下產生 globus_simple_ca_502cf2ea_setup 資料夾,
執行 globus_simple_ca_502cf2ea_setup 資料夾底下的 setup-gsi 檔案,進行 GSI 設置。

執行:
/opt/globus/setup/globus_simple_ca_502cf2ea_setup/setup-gsi -default

以上指令會在 /etc 底下產生一個 grid-security 資料夾,涉及後續的主機認證和網格使用者對映。

---------

without SimpleCA Server:

如果是全新安裝的網格,尚無 CA Server,可以使用 Globus Toolkit 附帶的 SimpleCA 模組建立一個。

執行:
$GLOBUS_LOCATION/setup/globus/setup-simple-ca

以上指令執行時,會進行新建網格的設定,需要自訂組織名稱,網格管理密碼等等。
# SimpleCA 安裝說明請先暫時參考 [Reference 04]。

執行完成會在 $GLOBUS_LOCATION/setup/ 底下產生一個 globus_simple_ca_HASH_setup 資料夾。
# HASH 是一串 16 進位亂數。

執行:
$GLOBUS_LOCATION/setup/globus_simple_ca_HASH_setup/setup-gsi -default
# HASH 是一串 16 進位亂數。

以上指令會在 root 的家目錄產生一個 .globus 資料夾,裡面有一個名為 simpleCA 的資料夾。
simpleCA 資料夾即為新安裝 SimpleCA Server 的內容。
simpleCA 資料夾內會有一個 globus_simple_ca_HASH_setup.tar.gz 檔案,取用該檔案進行 gpt-build 即可。

執行:
cp /root/.globus/simpleCA/globus_simple_ca_HASH_setup.tar.gz /opt/globus/
# HASH 是一串 16 進位亂數。

執行:
cd /opt/globus

如果是 x86_32 環境請執行:
gpt-build globus_simple_ca_HASH_setup.tar.gz gcc32dbg
# HASH 是一串 16 進位亂數。

如果是 x86_64 環境請執行:
gpt-build globus_simple_ca_HASH_setup.tar.gz gcc64dbg
# HASH 是一串 16 進位亂數。

gpt-build 順利執行完成後,請執行:
gpt-postinstall

以上指令會在 /opt/globus/setup 資料夾底下產生 globus_simple_ca_HASH_setup 資料夾,
執行 globus_simple_ca_HASH_setup 資料夾底下的 setup-gsi 檔案,進行 GSI 設置。
# HASH 是一串 16 進位亂數。

執行:
/opt/globus/setup/globus_simple_ca_HASH_setup/setup-gsi -default

以上指令會在 /etc 底下產生一個 grid-security 資料夾,涉及後續的主機認證和網格使用者對映。

***************************

七、設置 gsiftp 與 gsigatekeeper

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

執行:
cd /opt/globus_ubuntu

執行:
cp xinetd.d_gsiftp /etc/xinetd.d/gsiftp

執行:
cp xinetd.d_gsigatekeeper /etc/xinetd.d/gsigatekeeper

執行:
/etc/init.d/xinetd restart

xinetd.d_gsiftp 內容:
service gsiftp
{
disable = no
instances = 100
socket_type = stream
wait = no
user = root
env += GLOBUS_LOCATION=/opt/globus
env += LD_LIBRARY_PATH=/opt/globus/lib
server = /opt/globus/sbin/globus-gridftp-server
server_args = -i
log_on_success += DURATION
nice = 10
}

xinetd.d_gsigatekeeper 內容:
service gsigatekeeper
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
env = LD_LIBRARY_PATH=/opt/globus/lib
server = /opt/globus/sbin/globus-gatekeeper
server_args = -conf /opt/globus/etc/globus-gatekeeper.conf
}

***************************

八、主機認證與使用者認證

主機認證:

主機認證很好理解,目的就是確認網格中的主機是合法的,不是外面阿貓阿狗假冒的。
首先必須先確認網格中的 SimpleCA Server 是哪一台機器,接下來的認證動作需要跟它溝通。

以 TKG 網格為例,SimpleCA Server 為 192.168.100.1,主機名稱是 im1.im.ncue.edu.tw。
SimpleCA Server 的管理者為 im1.im.ncue.edu.tw 中作業系統的 root 帳號,密碼為 TKG 專用密碼。

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

先與環境中主機的 hosts 檔進行同步,執行:
scp user008@192.168.100.1:/etc/hosts /etc/hosts
# user008@192.168.100.1 的密碼是 TKG 的專用密碼。

[注意!] 請將本機 IP 與 hostname 對映也編輯進入 /etc/hosts 檔案中。
[注意!] 執行:vim /etc/hosts 將本機的 IP 與 hostname 寫入並存檔。

試著 ping 一下:
ping im1

若 ping 成功,請繼續後續步驟。

執行:
cd /etc/grid-security/

再次確認一下主機名稱符合格式,執行:
hostname
# 以 TKG 網格為例,名稱應該是 im*.im.ncue.edu.tw 這樣的格式,* 代表數字。
# 若主機名稱有出入,請修改 /etc/hostname 並重新開機。

接下來要產生主機認證檔,執行:
grid-cert-request -host `hostname`

以上指令會在 /etc/grid-security 底下產生:
hostcert.pem
hostcert_request.pem
hostkey.pem

其中 hostcert.pem 目前暫時為空,大小是 0K。
要傳送 hostcert_request.pem 到 SimpleCA Server 進行認證,才會產生一個可用的 hostcert.pem。

接下來將 hostcert_request.pem 傳送到 im1 (192.168.100.1),執行:
scp hostcert_request.pem user008@im1:~/temp/

接著要對 hostcert_request.pem 檔進行認證,需要登入到 SimpleCA Server 進行操作。
請另外開啟一個 SSH 連線,以 user008 這個帳號登入 im1 (192.168.100.1)。

執行:
ssh user008@im1

@im1 執行:
sudo su -

@im1 執行:
cd /home/user008/temp

@im1 執行:
grid-ca-sign -in hostcert_request.pem -out hostcert.pem

以上指令會要求 SimpleCA Server 的管理密碼,密碼為 TKG 專用密碼。
完成後就可以結束對 im1 的連線了。

回到認證中的網格主機,切換到 root 身份,然後執行:
cd /etc/grid-security/

從 SimpleCA Server 將認證產生的 hostcert.pem 取回,執行:
scp user008@im1:~/temp/hostcert.pem /etc/grid-security/hostcert.pem

執行:
ls -lh

檢查 hostcert.pem 大小是否仍為 0K。

---------

TKG 網格使用者認證:

TKG 網格中只有一個 VO 使用者 user008,因此直接取用認證過 user008 身份的驗證檔案即可。
# 上一行中的 user008 指的是「網格使用者 user008」,不是「作業系統使用者 user008」。

[注意!] 首先,切換身份成「作業系統使用者 user008」:
su - user008

執行:
cd /home/user008

直接取用認證好的網格使用者檔案,執行:
scp -r user008@im1:~/.globus /home/user008/

執行:
grid-proxy-init

顯示:
Your identity: /O=ncue/OU=tkgroup/OU=im.ncue.edu.tw/OU=im.ncue.edu.tw/CN=user008
Enter GRID pass phrase for this identity: # 輸入 TKG 專用密碼

grid-proxy-init 順利初始化,代表認證成功。

---------

新網格使用者認證:

若要用「作業系統使用者 user008」認證建立一個名稱非 user008 的新網格使用者,
[注意!]請先切換身份成「作業系統使用者 user008」:
su - user008

執行:
cd ~

執行:
grid-cert-request

顯示:
Enter your name, e.g., John Smith: # 請輸入新網格使用者名稱
Enter PEM pass phrase: # 請輸入新網格使用者的密碼
Verifying - Enter PEM pass phrase: # 請輸入新網格使用者的密碼

以上執行完畢會在 user008 家目錄底下產生一個 .globus 資料夾,裡面有:
usercert.pem
usercert_request.pem
userkey.pem

其中 usercert.pem 目前暫時為空,大小是 0K。
要傳送 usercert_request.pem 到 SimpleCA Server 進行認證,才會產生一個可用的 usercert.pem。

接下來將 usercert_request.pem 傳送到 im1 (192.168.100.1),執行:
scp ~/.globus/usercert_request.pem user008@im1:~/temp/

接著要對 usercert_request.pem 檔進行認證,需要登入到 SimpleCA Server 進行操作。
請另外開啟一個 SSH 連線,以 user008 這個帳號登入 im1 (192.168.100.1)。

執行:
ssh user008@im1

@im1 執行:
sudo su -

@im1 執行:
cd /home/user008/temp

@im1 執行:
grid-ca-sign -in usercert_request.pem -out usercert.pem

以上指令會要求 SimpleCA Server 的管理密碼,密碼為 TKG 專用密碼。
完成後就可以結束對 im1 的連線了。

回到進行身份認證的主機,切換到正在認證網格身份的「作業系統使用者帳號」:
su - user008

執行:
cd ~

從 SimpleCA Server 將認證產生的 usercert.pem 取回,執行:
scp user008@im1:~/temp/usertcert.pem ~/.globus/usercert.pem

執行:
ls -lh .globus

檢查 usercert.pem 大小是否仍為 0K。

執行:
grid-proxy-init

grid-proxy-init 順利初始化,代表認證成功。

***************************

九、關於 grid-mapfile

grid-mapfile 是記錄「網格使用者」和「作業系統使用者」的映對檔。

以 TKG 網格為例,grid-mapfile 的內容類似於:
"/O=ncue/OU=tkgroup/OU=im.ncue.edu.tw/OU=im.ncue.edu.tw/CN=user008" user008

「/O=ncue/OU=tkgroup/OU=im.ncue.edu.tw/OU=im.ncue.edu.tw」代表 im.ncue.edu.tw 這個虛擬組織(VO)。
「/CN=user008」代表虛擬組織(VO)內的 user008 這位使用者。
「"虛擬組織(VO)/CN=使用者"」後,空一格,接著的是作業系統中 user008 這個使用者帳號。

整行的意思是:
虛擬組織(VO)內的 user008 這位使用者,可以透過作業系統中的 user008 帳號運用系統資源。

如此就很好理解了,相當於網格中的某個使用者要來運用這台主機資源時,該用哪個相對的帳號來登入。

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

為了讓網格中其他的機器也可以來運用本機資源,執行:
cp /opt/globus_ubuntu/grid-mapfile /etc/grid-security/

***************************

十、安裝 MPICH

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

執行:
cd /opt/globus_ubuntu/

執行:
tar zxvf mpich.tar.gz

執行:
mkdir /opt/mpich

執行:
cd mpich-1.2.7p1/

x86_32 環境執行:
./configure --prefix=/opt/mpich/ --with-device=globus2:-flavor=gcc32dbg

x86_64 環境執行:
./configure --prefix=/opt/mpich/ --with-device=globus2:-flavor=gcc64dbg

執行:
make | tee mpich_make.log

執行:
make install

接下來測試一下 MPICH 是否可以運作,先切換到有認證進網格的作業系統使用者 user008。

執行:
su - user008

執行:
cp /opt/mpich/examples/cpi.c .

執行:
mpicc cpi.c -o cpi

在同一個目錄底下,執行:
vim machines

編寫 machines 檔,內容是:
"本機的 hostname" 1

編輯完成後,執行:
grid-proxy-init

Grid Proxy 起始化後,執行:
mpirun -np 1 cpi

順利的話,螢幕會印出 Pi 的值與執行的主機名稱。

***************************

Reference :
01. http://en.wikipedia.org/wiki/Virtual_Organization
02. http://www.globus.org/security/overview.html
03. http://www.globus.org/security/
04. http://blog.tmu.edu.tw/tedyeng/000071.html