CentOS下部署Spacewalk

Spacewalk
Spacewalk 是上游的一個社區計劃,而 Red Hat Network Satellite 產品是從它衍生出來。這個計劃爲分佈於已登記的服務器及桌面計算機內的軟件提供一個管理界面。
目錄
Spacewalk
1. 參考
2. 服務器規範
3. SELinux
4. 防火牆
5. Oracle 數據庫
5.1. 安裝
5.2. 客戶端設置
5.3. 創建 spacewalk 數據庫用戶
5.4. 額外設置
6. Yum
6.1. EPEL
6.2. Spacewalk
6.3. 額外 yum 軟件庫
6.4. 局部性 yum 軟件庫
6.5. GPG 金鑰
7. Spacewalk 服務器
7.1. 安裝
7.2. 設置
7.3. 升級
8. Spacewalk 客戶端(基本設置)
9. 利用 Cobbler 來管理 Spacewalk 客戶端
9.1. 填滿發行目錄樹
9.2. 創建一個新的發行版本
9.3. 創建一個新的 kickstart 配置文件
9.4. TFTP 服務器
9.5. 網絡設置
9.6. 客戶端服務器
10. 利用 Spacewalk 來管理配置文件
10.1. 創建一個新的設置頻道
10.2. 允許 Spacewalk 管理系統上的文件
11. 設置 OSAD(即時執行更新)
11.1. 設置客戶端
12. 把軟件庫同步的腳本
12.1. 配置文件
12.2. 腳本
1. 參考
這份教學文檔以收藏於 Spacewalk 官方網站上的文件作爲基礎,爲 CentOS 用戶創建一份簡單的攻略。
Spacewalk 官方網站
官方文件
截圖及 Spacewalk 計劃概覽
2. 服務器規範
• CentOS 5(i386 或 x86_64)
• 1024 MB 調換空間
• 最少 20 GB 存儲空間,推薦 80 GB
• 一個完整域名(FQDN)—— 在這個樣例裏,我們採用 IANA 預留的 example.com 域名:spacewalk.example.com
提示:本作者推薦採用 CentOS 5 i386,因爲 x86_64 結構所提供的大部份優點都被 Oracle XE 數據庫服務器的限制所抵消。
3. SELinux
Spacewalk 服務器所須用的 Oracle 數據庫服務器現在已經可以與 SELinux 「融洽相處」。請編輯 /etc/sysconfig/selinux 並將 SELinux 設爲執行模式:
SELINUX=enforcing
重新啓動服務器來應用這個改動。
4. 防火牆
以下對內的 TCP 端口在 Spacewalk 服務器上應該被打開:
• 69:TFTP(支持 PXE 的需要)
• 80:Spacewalk 網頁界面
• 443:Spacewalk 網頁界面(SSL)
• 4545:Spacewalk 監控
• 5222:假若你計劃將行動推進客端系統
• 5269:假若你計劃將行動推進一臺 Spacewalk 代理服務器
• 9055:Oracle XE 網頁訪問
5. Oracle 數據庫
在這份指南內,Spacewalk 將會與一臺 Oracle 10g 數據庫服務器一同安裝;支持 PostgreSQL 作爲後端的工作正在進行中,待它變爲可行方案時,我們便會更新這頁。Oracle Expression Edition 服務器運作上沒有問題,雖然它有某些限制:
• 1 GB 內存(最多)—— 具備更多亦沒有分別
• 4 GB 磁盤空間(最多)
• 1 個數據庫(最多)
• 1 個處理器(最多)—— 就算具備多個處理器,耗用量頂多只會等同一個處理器的資源
5.1. 安裝
要在 SELinux 引導情況下運行,oracle 用戶的 uid 必須少於 500。以下兩個指令將會在安裝 oracle-xe-unix 組件前爲 oracle 這位用戶創建羣組及帳戶:
/usr/sbin/groupadd -r dba
/usr/sbin/useradd -r -M -g dba -d /usr/lib/oracle/xe -s /bin/bash oracle
在 x86_64 系統上:請留意你將會需要很多與 i386 兼容的組件,因此你並不需要:

exclude = *.i386

在 /etc/yum.conf 內;假若你保留這行,Oracle XE 的安裝將會不明不白地失敗
以下是 Oracle 數據庫所需的組件。這樣會安裝 bc,以及在 x84_64 系統上依然需要的 32 位的 glibc 和 libaio:
yum install bc glibc.i686 libaio.i386
從 Oracle 的網站下載 Oracle XE。你將會需要登記才能下載那些 RPM。請選擇 Oracle Database 10g Express Edition (Universal):
• oracle-xe-univ-10.2.0.1-1.0.i386.rpm
你亦會需要一個客戶端來訪問數據庫。請根據你的服務器的結構來下載 Oracle Instant Client:i386 客戶端或x86_64。請下載以下二個 RPM:
• oracle-instantclient11.2-basic-11.2.0.2.0.ARCH.rpm
• oracle-instantclient11.2-11.2.0.2.0.ARCH.rpm
注意:現時已知 Spacewalk 1.4 版能配合 Oracle Instant Client 11.2.0.2.0 版正常運作。
在 Spacewalk 服務器上安裝已下載的 RPM:
rpm -Uvh oracle-xe-univ-10.2.0.1-1.0.i386.rpm
rpm -Uvh oracle-instantclient11.2-basic-11.2.0.2.0.*.rpm
rpm -Uvh oracle-instantclient11.2-sqlplus-11.2.0.2.0.*.rpm
在設置 Oracle 數據庫前,我們需要從 Spacewalk 的軟件庫取得一些組件。因此我們需要安裝 repo 文件:
rpm -Uhv http://spacewalk.redhat.com/yum/1.4/RHEL/5/x86_64/spacewalk-client-repo-1.4-1.el5.noarch.rpm
rpm -Uhv http://spacewalk.redhat.com/yum/1.4/RHEL/5/x86_64/spacewalk-repo-1.4-1.el5.noarch.rpm
從 Spacewalk 軟件庫安裝下列組件:
yum install oracle-lib-compat
yum install oracle-xe-selinux oracle-instantclient-selinux oracle-instantclient-sqlplus-selinux
/etc/init.d/oracle-xe configure
除了 HTTP 端口,其它缺省值都沒有問題。請改用 9055 而不是 8080。
注意:要修改設置值,請卸裝並重裝 RPM。
5.2. 客戶端設置
我們須要設置數據庫的 tns 名稱。請編輯 /etc/tnsnames.ora:
XE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = xe)
)
)
恢復文件的 SELinux 安全性脈絡:
/sbin/restorecon -v /etc/tnsnames.ora
測試與 Oracle 數據庫服務器的連接:
sqlplus system@xe
當被問到時,請輸入 system 用戶的密碼。你應該看見以下信息:
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Dec 17 09:41:18 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
SQL>
輸入 quit 來離開客戶端界面。
5.3. 創建 spacewalk 數據庫用戶
利用 sqlplus 命令行界面創建 spacewalk 數據庫用戶:
sqlplus 'sys@xe as sysdba'
SQL> create user spacewalk identified by spacewalk default tablespace users;
User created.
SQL> grant dba to spacewalk;
Grant succeeded.
SQL> PASSWORD spacewalk;
Changing password for spacewalk
New password:
Retype new password:
Password changed
SQL> quit
5.4. 額外設置
Spacewalk 所需的數據庫並存連接數量比缺省的(40)還要多。Spacewalk 開發者所推薦的設置值是 400。此外,Oracle XE 內的一個錯誤並可能導致 Spacewalk 出現 Internal Server Error(500)。針對這些問題,可以對設置作出以下改動:
sqlplus spacewalk/spacewalk@xe
SQL> alter system set processes = 400 scope=spfile;
System altered.
SQL> alter system set "_optimizer_filter_pred_pullup"=false scope=spfile;
System altered.
SQL> alter system set "_optimizer_cost_based_transformation"=off scope=spfile;
System altered.
SQL> quit
重新啓動 Oracle 數據庫:
/etc/init.d/oracle-xe restart
6. Yum
6.1. EPEL
Spacewalk 需要應用來自 EPEL 軟件庫的組件。請編輯 /etc/yum.repos.d/epel.repo:
[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
#baseurl=http://download.fedora.redhat.com/pub/epel/5/$basearch
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
gpgkey=http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL
gpgcheck=1
enabled=1
includepkgs=bea-stax* cobbler editarea gc gc-devel git* jabberd jabberpy* jakarta-commons-cli jcommon \
jfreechart libapreq2 libgsasl* libntlm* libyaml perl-Algorithm-Diff perl-Apache-DBI \
perl-BerkeleyDB perl-Cache-Cache perl-Class-MethodMaker perl-Class-Singleton \
perl-Convert-BinHex perl-Config-IniFiles perl-Crypt-DES perl-Crypt-GeneratePassword \
perl-DateTime perl-DateTime-Format-Mail perl-DateTime-Format-W3CDTF perl-Error \
perl-FreezeThaw perl-Frontier-RPC perl-GD perl-Git perl-Math-FFT perl-HTML-TableExtract \
perl-IO-Capture perl-IO-stringy perl-IPC-ShareLite perl-libapreq2 perl-MIME-Lite \
perl-MIME-tools perl-Net-IPv4Addr perl-Net-SNMP perl-Params-Validate perl-Proc-Daemon \
perl-SOAP-Lite perl-TermReadKey perl-Text-Diff perl-Unix-Syslog perl-XML-RSS perl-version \
perlAlgorithm-Diff python-cheetah python-dmidecode python-hashlib python-netaddr PyYAML \
python-simplejson rhino tzdata-java udns*
6.2. Spacewalk
下列 yum 軟件庫收藏了 Spacewalk 1.4 版的核心組件。Spacewalk 依賴於 rhn-client-tools 以及 rhnlib,但它們已隨着 CentOS 對更新器的改動而被刪除[用來防止上游的舊版更新器不設置 CentOS 機器,導致上游供應商因爲硬編碼的軟件庫名稱而受荷]。要解決這個問題,也需要安裝 Spacewalk 客戶端 repo。
rpm -Uhv http://spacewalk.redhat.com/yum/1.4/RHEL/5/x86_64/spacewalk-client-repo-1.4-1.el5.noarch.rpm
rpm -Uhv http://spacewalk.redhat.com/yum/1.4/RHEL/5/x86_64/spacewalk-repo-1.4-1.el5.noarch.rpm
6.3. 額外 yum 軟件庫
如果你想利用你的 Spacewalk 服務器來管現額外的 yum 軟件庫,我們推薦你創建一個名爲 /etc/reposync.conf 的文件。以下樣例檔是用來管理 RPMforge 這個軟件庫的。我們強烈地推薦你利用 includepkgs 這個指令來保護髮行版本的基本組件,及侷限所佔用的磁盤空間:
6.4. 局部性 yum 軟件庫
如果你想利用你的 Spacewalk 服務器來管現局部性 yum 軟件庫,我們推薦你創建一個名爲 /etc/reposync.conf 的文件。以下是一個同時用來管理 EPEL 及 RPMforge i386 軟件庫的樣例檔。我們強烈地推薦你利用 includepkgs 這個指令來保護髮行版本的基本組件,及侷限所佔用的磁盤空間:
[epel32]
name=Extra Packages for Enterprise Linux 5 - i386
baseurl=http://download.fedora.redhat.com/pub/epel/5/i386
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=i386
failovermethod=priority
gpgkey=http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL
gpgcheck=1
enabled=1
includepkgs=bea-stax* cobbler editarea gc gc-devel git* jabberd jabberpy* jakarta-commons-cli jcommon \
jfreechart libapreq2 libgsasl* libntlm* libyaml perl-Algorithm-Diff perl-Apache-DBI \
perl-BerkeleyDB perl-Cache-Cache perl-Class-MethodMaker perl-Class-Singleton \
perl-Convert-BinHex perl-Config-IniFiles perl-Crypt-DES perl-Crypt-GeneratePassword \
perl-DateTime perl-DateTime-Format-Mail perl-DateTime-Format-W3CDTF perl-Error \
perl-FreezeThaw perl-Frontier-RPC perl-GD perl-Git perl-Math-FFT perl-HTML-TableExtract \
perl-IO-Capture perl-IO-stringy perl-IPC-ShareLite perl-libapreq2 perl-MIME-Lite \
perl-MIME-tools perl-Net-IPv4Addr perl-Net-SNMP perl-Params-Validate perl-Proc-Daemon \
perl-SOAP-Lite perl-TermReadKey perl-Text-Diff perl-Unix-Syslog perl-XML-RSS perl-version \
perlAlgorithm-Diff python-cheetah python-dmidecode python-hashlib python-netaddr PyYAML \
python-simplejson rhino tzdata-java udns*

[rpmforge32]
name = RPMforge for Enterprise Linux 5 - i386
baseurl = http://apt.sw.be/redhat/el5/en/i386/dag
gpgkey = http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
gpgcheck=1
includepkgs=amavisd-new arc cabextract clamav* clamd freeze lha lzop nomarch perl-Archive-Zip perl-Convert-TNEF \
perl-Convert-UUlib perl-MailTools perl-Net-Server ripole unarj zoo
6.5. GPG 金鑰
根據缺省值,Spacewalk 會拒絕發放未簽署或以不認識的金鑰所簽署的 RPM。我們要確定已安裝所有相關的 GPG 金鑰:
wget http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL
mv RPM-GPG-KEY-EPEL /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
wget http://www.redhat.com/security/db42a60e.txt
mv db42a60e.txt /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-former
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-former
wget http://www.redhat.com/security/37017186.txt
mv 37017186.txt /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
wget http://spacewalk.redhat.com/yum/RPM-GPG-KEY-spacewalk
mv RPM-GPG-KEY-spacewalk /etc/pki/rpm-gpg/RPM-GPG-KEY-spacewalk
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-spacewalk
wget http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
mv RPM-GPG-KEY.dag.txt /etc/pki/rpm-gpg/RPM-GPG-KEY-dag
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-dag
當然這亦代表你把每位供應者加進一個獲信賴的關係中,因爲 yum 及 rpm 將會信賴任何以上述金鑰所簽署的內容。尤其是 EPEL 及 dag 這兩個軟件庫,由於它們不會協調互相抵觸的組件,互賴性的問題也許會出現。因爲這些軟件庫並非由 CentOS 管理或控制,任何支持上的要求請在相關軟件庫的支持渠道里提出。
7. Spacewalk 服務器
7.1. 安裝
假若 specspo 這個組件已存在,請刪除它,因爲它與 Spacewalk 互相抵觸。
rpm -e specspo
安裝下列 Spacewalk 所需、但不在它的依賴清單上的組件:
yum install perl-XML-LibXML-Common
我們用 yum 來取得 Spacewalk 軟件所依賴的、頗長的組件清單:
yum install spacewalk-oracle
yum update
在 x86_64 系統上:你須要新增 /etc/ld.so.conf.d/spacewalk.conf 這個文件,包含着以下內容:

/usr/lib/oracle/10.2.0.4/client64/lib/
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/

請利用以下指令在你的系統上啓用這個改動:
ldconfig -v
7.2. 設置
設置 Spacewalk 這個應用程序:
LANG=C; spacewalk-setup --disconnected
Available database backends:
oracle
postgresql
Database? oracle
* Setting up Oracle environment.
* Setting up database.
** Database: Setting up database connection.
DB User? spacewalk
DB Password?
DB SID? xe
DB hostname? localhost
DB port [1521]?
DB protocol [TCP]?
** Database: Testing database connection.
** Database: Populating database.
*** Progress: #############################################
* Setting up users and groups.
** GPG: Initializing GPG and importing key.
You must enter an email address.
Admin Email Address? [email protected]
* Performing initial configuration.
* Activating Spacewalk.
** Loading Spacewalk Certificate.
** Verifying certificate locally.
** Activating Spacewalk.
* Enabling Monitoring.
* Configuring apache SSL virtual host.
Should setup configure apache's default ssl server for you (saves original ssl.conf) [Y]?
* Configuring jabberd.
* Creating SSL certificates.
CA certificate password?
Re-enter CA certificate password?
Organization? example.com
Organization Unit [spacewalk.example.com]?
Email Address [[email protected]]?
City? Montreal
State? Quebec
Country code (Examples: "US", "JP", "IN", or type "?" to see a list)? CA
** SSL: Generating CA certificate.
** SSL: Deploying CA certificate.
** SSL: Generating server certificate.
** SSL: Storing SSL certificates.
* Deploying configuration files.
* Update configuration in database.
* Setting up Cobbler..
Cobbler requires tftp and xinetd services be turned on for PXE provisioning functionality. Enable these services [Y/n]?
* Restarting services.
Installation complete.
Use a web browser to view https://spacewalk.example.com to create the Spacewalk administrator account.
請利用以下指令引導監控:
/usr/share/spacewalk/setup/upgrade/rhn-enable-monitoring.pl
將你的瀏覽器指向 https://spacewalk.example.com 來創建衛星管理員的帳戶(當中 example.com是一個由你在本地管理的本地 DNS 本地)
7.2.1. 引導金鑰
利用 Spacewalk 的網頁界面,創建一個缺省的引導金鑰來登記你的系統。請進到 Systems -> Activation keys 並點擊 create new key。
• Description: default key
• Universal default: 選用
7.2.2. 頻道設置
若要用 Spacewalk 來管理 CentOS 服務器及桌面,我們首先必須設置及安裝軟件頻道。由 Spacewalk 1.0 起,你已經可以通過 spacewalk-repo-sync 這個工具來直接訪問 yum 軟件庫的內容。根據預先設置,組件將會被推往 /var/satellite 這個目錄。如果你想更改這個參數,請進到 Admin -> Spacewalk Configuration -> General。
現在是時候在 Spacewalk 的網頁界面內置立一個頻道。請進到 Channels -> Manage Software Channels 並點擊 create new channel。
7.2.2.1. 供 i386 使用的 CentOS 5 Base
以下是 CentOS 5 Base i386 頻道的設置樣例:
Basic Channel Details
* Channel Name: CentOS 5 Base - i386
* Channel Label: centos5-base-i386
* Parent Channel: None
* Parent Channel Architecture: IA-32
* Yum Repository Checksum Type: sha1
* Channel Summary: CentOS 5 Base for i386 architecture
Associated yum repository
* Repository URL: http://mirror.centos.org/centos/5/os/i386/
* Label: centos5-base-i386
* Sync Repo: enabled
Security: GPG
* GPG key URL: http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
* GPG key ID: E8562897
* GPG key Fingerprint: 473D 66D5 2122 71FD 51CC 17B1 A8A4 47DC E856 2897
編輯 /etc/cron.daily/spacewalk_sync.cron:
#!/bin/sh
# 嘗試創建鎖定文件並檢查結果
LOCKFILE=/var/run/spacewalk_sync.lock
lockfile -r 0 ${LOCKFILE} 1>/dev/null 2>&1
status=$?
if [ ${status} -ne 0 ] ;then
echo "Another instance already running. Aborting."
exit 1
fi
trap "rm ${LOCKFILE}" EXIT
/usr/bin/spacewalk-repo-sync --channel centos5-base-i386 \
--url http://mirror.centos.org/centos/5/os/i386/ \
--type yum --label centos5-base-i386 > /dev/null
chmod 700 /etc/cron.daily/spacewalk_sync.cron
chown root:root /etc/cron.daily/spacewalk_sync.cron
提示:spacewalk-repo-sync 這個指令是用來替把頻道的內容與相關的 yum 軟件庫進行同步。至當前爲止,只有 yum 這個方法是被支持的。任何 yum 支持的軟件庫 URL 都可行(http://、 file://、 等)。整個 yum 軟件庫的內容將會被轉移到 spacewalk 服務器上。

7.2.2.2. 供 i386 使用的 CentOS 5 Updates
以下是 CentOS 5 Updates i386 頻道的設置樣例:
Basic Channel Details
* Channel Name: CentOS 5 Updates - i386
* Channel Label: centos5-updates-i386
* Parent Channel: CentOS 5 Base - i386
* Parent Channel Architecture: IA-32
* Yum Repository Checksum Type: sha1
* Channel Summary: CentOS 5 Updates for i386 architecture
Associated yum repository
* Repository URL: http://mirror.centos.org/centos/5/updates/i386/
* Label: centos5-updates-i386
* Sync Repo: enabled
Security: GPG
* GPG key URL: http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
* GPG key ID: E8562897
* GPG key Fingerprint: 473D 66D5 2122 71FD 51CC 17B1 A8A4 47DC E856 2897
編輯 /etc/cron.daily/spacewalk_sync.cron 並加入以下內容:
/usr/bin/spacewalk-repo-sync --channel centos5-updates-i386 \
--url http://mirror.centos.org/centos/5/updates/i386/ \
--type yum --label centos5-updates-i386 > /dev/null
7.2.2.3. 供 i386 使用的 Spacewalk Client
以下是 Spacewalk Client i386 頻道的設置樣例:
Basic Channel Details
* Channel Name: Spacewalk Client - i386
* Channel Label: spacewalk-client-i386
* Parent Channel: CentOS 5 Base - i386
* Parent Channel Architecture: IA-32
* Yum Repository Checksum Type: sha1
* Channel Summary: Spacewalk Client for i386 architecture
Associated yum repository
* Repository URL: http://spacewalk.redhat.com/yum/1.0-client/RHEL/5/i386/
* Label: spacewalk-client-i386
* Sync Repo: enabled
Security: GPG
* GPG key URL: http://spacewalk.redhat.com/yum/RPM-GPG-KEY-spacewalk
* GPG key ID: 430A1C35
* GPG key Fingerprint:
編輯 /etc/cron.daily/spacewalk_sync.cron 並加入以下內容:
/usr/bin/spacewalk-repo-sync --channel spacewalk-client-i386 \
--url http://spacewalk.redhat.com/yum/1.0-client/RHEL/5/i386/ \
--type yum --label spacewalk-client-i386 > /dev/nul
7.2.2.4. 供 i386 使用的 Extra Packages Enterprise Linux 5
以下是 Extra Packages Enterprise Linux 5 i386 頻道的設置樣例:
Basic Channel Details
* Channel Name: EPEL5 - i386
* Channel Label: epel5-i386
* Parent Channel: CentOS 5 Base - i386
* Parent Channel Architecture: IA-32
* Yum Repository Checksum Type: sha1
* Channel Summary: Extra Packages Enterprise Linux 5 for i386 architecture
Associated yum repository
* Repository URL: http://download.fedora.redhat.com/pub/epel/5/i386/
* Label: epel5-i386
* Sync Repo: disabled
Security: GPG
* GPG key URL: http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL
* GPG key ID: 217521F6
* GPG key Fingerprint:
就這個頻道而言,我們不想訪問整個 yum 軟件庫。我們反而只想訪問它在 yum 配置文件內,於 includepkg 指令下所列出的組件。若是這樣,我們必須採用 reposync 這個工具。通過 reposync 這個指令,我們會下載 EPEL 的組件並創建一個本地旳 yum 軟件庫。接着,spacewalk-repo-sync 這個指令便會從這個本地的 yum 軟件庫中取得組件。
yum install yum-utils createrepo
爲本地的 yum 軟件庫預留一個地方:
mkdir -p /var/www/html/pub/CentOS5-i386
編輯 /etc/cron.daily/spacewalk_sync.cron 並加入以下內容:
reposync --repoid=epel32 -c /etc/reposync.conf -p /var/www/html/pub/CentOS5-i386 -d -l -g -n -q > /dev/null
cd /var/www/html/pub/CentOS5-i386/epel32
createrepo /var/www/html/pub/CentOS5-i386/epel32 > /dev/null
/usr/bin/spacewalk-repo-sync --channel epel5-i386 \
--url file:///var/www/html/pub/CentOS5-i386/epel32/ \
--type yum --label epel5-i386 > /dev/null
提示:reposync 這個指令將會從 /etc/reposync.conf 配置文件內所指定的軟件庫來訪問 EPEL 的 i386 RPM。組件將會被下載到 /var/www/html/pub/CentOS5-i386/epel32/ 這個目錄。我們沒有采用 reposync 的 --arch 選項,因爲在某些情況下它未必正確。要對這個指令進行偵錯,請刪除 -q 這個選項。
7.2.2.5. 供 i386 使用的 RPMforge Enterprise Linux 5
以下是 RPMforge Enterprise Linux 5 i386 頻道的設置樣例:
Basic Channel Details
* Channel Name: RPMforge EL5 - i386
* Channel Label: rpmforge-el5-i386
* Parent Channel: CentOS 5 Base - i386
* Parent Channel Architecture: IA-32
* Yum Repository Checksum Type: sha1
* Channel Summary: RPMforge Enterprise Linux 5 for i386 architecture
Associated yum repository
* Repository URL: http://apt.sw.be/redhat/el5/en/i386/dag/
* Label: rpmforge-el5-i386
* Sync Repo: disabled
Security: GPG
* GPG key URL: http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
* GPG key ID: 6B8D79E6
* GPG key Fingerprint:
就這個頻道而言,我們不想訪問整個 yum 軟件庫。我們反而只想訪問它在 yum 配置文件(/etc/reposync.conf)內,於 includepkg 指令下所列出的組件。
編輯 /etc/cron.daily/spacewalk_sync.cron 並加入以下內容:
reposync --repoid=rpmforge32 -c /etc/reposync.conf -p /var/www/html/pub/CentOS5-i386 -d -l -g -n -q > /dev/null
cd /var/www/html/pub/CentOS5-i386/rpmforge32
createrepo /var/www/html/pub/CentOS5-i386/rpmforge32 > /dev/null
/usr/bin/spacewalk-repo-sync --channel rpmforge-el5-i386 \
--url file:///var/www/html/pub/CentOS5-i386/rpmforge32/ \
--type yum --label rpmforge-el5-i386 > /dev/null
7.2.2.6. GPG 金鑰
爲了方便 Spacewalk 客戶端,我們將所有受管理組件的公共 GPG 鑰放在網頁服務器上。這些金鑰會收錄在 http://spacewalk.example.com/pub 。
cp /etc/pki/rpm-gpg/RPM-GPG-KEY-* /var/www/html/pub/
7.3. 升級
若要升級舊版本的 Spacewalk ,你必須先將 /etc/yum.repos.d/spacewalk.repo 這個 yum 配置文件及 /etc/cron.daily/spacewalk_sync.cron 這個 cron 腳本升級。
提示:在執行 yum update 這個指令之先,請遵從 https://fedorahosted.org/spacewalk/wiki/HowToUpgrade 內的指引。

8. Spacewalk 客戶端(基本設置)
每個客戶端都必須被設置以 Spacewalk 服務器作爲它們的 RPM 組件來源。我們會臨時地在客戶端機器上設置 EPEL 軟件庫來訪問所需的組件。請編輯 /etc/yum.repos.d/epel.repo:
[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
#baseurl=http://download.fedora.redhat.com/pub/epel/5/$basearch
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
gpgkey=http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL
gpgcheck=1
enabled=1
includepkgs=bea-stax* cobbler editarea gc gc-devel git* jabberd jabberpy* jakarta-commons-cli jcommon \
jfreechart libapreq2 libgsasl* libntlm* libyaml perl-Algorithm-Diff perl-Apache-DBI \
perl-BerkeleyDB perl-Cache-Cache perl-Class-MethodMaker perl-Class-Singleton \
perl-Convert-BinHex perl-Config-IniFiles perl-Crypt-DES perl-Crypt-GeneratePassword \
perl-DateTime perl-DateTime-Format-Mail perl-DateTime-Format-W3CDTF perl-Error \
perl-FreezeThaw perl-Frontier-RPC perl-GD perl-Git perl-Math-FFT perl-HTML-TableExtract \
perl-IO-Capture perl-IO-stringy perl-IPC-ShareLite perl-libapreq2 perl-MIME-Lite \
perl-MIME-tools perl-Net-IPv4Addr perl-Net-SNMP perl-Params-Validate perl-Proc-Daemon \
perl-SOAP-Lite perl-TermReadKey perl-Text-Diff perl-Unix-Syslog perl-XML-RSS perl-version \
perlAlgorithm-Diff python-cheetah python-dmidecode python-hashlib python-netaddr PyYAML \
python-simplejson rhino tzdata-java udns*
安裝 Spacewalk repo:
rpm -Uhv http://spacewalk.redhat.com/yum/1.4/RHEL/5/x86_64/spacewalk-client-repo-1.4-1.el5.noarch.rpm

現在我們已經準備好下載所需的組件:
yum install rhn-setup yum-rhn-plugin python-dmidecode
此刻我們在 Spacewalk 服務器上註冊這個客戶端:
注意: 請記得總是爲你的 Spacewalk 服務器使用 FQDN。
rhnreg_ks --serverUrl=http://spacewalk.example.com/XMLRPC --activationkey=<default-activation-key>
提示:請進到你的 Spacewalk 服務器網頁界面裏的 Systems -> Activation Keys,以便取得你的缺省引導金鑰。
在 Spacewalk 的網頁界面裏,進到 Systems -> Overview。你的客戶端系統現在應該在榜上有名。選擇它並點擊 System Info 下的 Alter Channel Subscriptions 連結。在 Base Software Channel 部份,請選擇 CentOS 5 Base - i386 這個頻道並點擊 Confirm 按鈕。當你返回 Software Channel 管理頁面時,你便可以爲你的系統訂閱子頻道。
當你設置好一個 Spacewalk 頻道,你便可以安全地停用該計算機上相應的 yum 軟件庫。請編輯 /etc/yum.repos.d 內的 repo 檔並確定相關的部份內含有這個符串:
enabled=0
9. 利用 Cobbler 來管理 Spacewalk 客戶端
自 0.4 版起,Cobbler 已隨 Spacewalk 一供附上。Cobbler 是一個安裝服務,用來簡化裝備服務器的過程。我們會示範你可以如何通過 Spacewalk 內的 Cobbler,在你現有的網絡裏增設一臺新的服務器。
在以上步驟,我們概述瞭如何創建一個 CentOS 5 - i386 的發行版本。現在我們會解釋如何用 Cobbler 在一臺新的服務器上裝備 CentOS 5 - i386。
9.1. 填滿發行目錄樹
Spacewalk 服務器必須藏有發行版本的整個 kickstart 目錄樹。這棵樹包含內核、initrd 及軟件庫數據。這個目錄應該容讓 apache 及 tomcat 用戶讀入。
mkdir -p /var/iso-p_w_picpaths /var/distro-trees
下載發行版本的首個 ISO 映像檔爲 /var/iso-p_w_picpaths/CentOS-5-i386-bin-1.iso。這個映像內藏有所需的文件。
mount -o loop /var/iso-p_w_picpaths/CentOS-5-i386-bin-1.iso /var/distro-trees/CentOS-5-i386
我們亦會編輯 /etc/fstab 於開機時自動掛載這個 ISO 映像:
/var/iso-p_w_picpaths/CentOS-5-i386-bin-1.iso /var/distro-trees/CentOS-5-i386 iso9660 rw,loop=/dev/loop0 0 0
提示要保持你的發行目錄樹在最新狀態,請定時下載最新版本 CentOS 5 的 ISO 映像。每當一個新的 CentOS 5 ISO 映像被髮行時,你亦須要卸除及重新掛載它。
9.2. 創建一個新的發行版本
進到 Spacewalk 的界面並選擇 Systems -> Kickstart -> Distributions。點擊 create a new distribution 這個連結。
Distribution Label: CentOS-5-i386
Tree Path: /var/distro-trees/CentOS-5-i386
Base Channel: CentOS 5 Base - i386
Installer Generation: Red Hat Enterprise Linux 5
點擊 Create Kickstart Distribution 這個按鈕。
9.3. 創建一個新的 kickstart 配置文件
若然要成功地安裝我們的發行版本,我們需要一個 kickstart 檔。它是一個簡單的文本,內裏含有項目清單,每個項目均以關鍵字來辨認,爲來自 anaconda 安裝器的問題提供答案。
進到 Spacewalk 的界面並選擇 Systems -> Kickstart。點擊 create a new kickstart profile 這個連結。
Label: CentOS-5-i386
Channel Base: CentOS 5 Base - i386
Kickstartable Tree: CentOS-5-i386
Virtualization Type: None
點擊 Next 這個按鈕。
在下一個劃面,跳過缺省的下載位置併爲 root 用戶挑選一個密碼。
進到 Spacewalk 的界面並選擇 Systems -> Kickstart -> Profiles。選擇 CentOS-5-i386 這個配置文件。在 Operating System 這個頁籤,啓用 centos-updates-i386 及 spacewalk-client-i386 這兩個頻道。其它子頻道亦可以被引導。
9.4. TFTP 服務器
這個 kickstart 配置文件是通過 TFTP 公佈在網絡上。請編輯 TFTP 服務的配置文件(/etc/xinetd.d/tftp)並將 disabled 的值改爲 no。接着,請確定 xinetd 服務已在運行中。
/etc/init.d/xinetd status
你的 Spacewalk 服務器上的 TFTP 端口(69)必須接受來自網絡端的連接。
9.5. 網絡設置
你需要一臺正確地設置 filename 及 next-server 變量的 DHCP 服務器。如果你採用 dhcp 這個守護程序,請編輯 /etc/dhcpd.conf 並在你的配置文件內加入這些選項:
filename "pxelinux.0";
next-server <spacewalk server IP address>;
你須要重新引導 DHCP 服務來實施這些改動。
你要裝備的服務器必須能夠解析你的 Spacewalk 服務器名稱。請確定在相關的 DNS 服務器中備有一個項目是針對你的 Spacewalk 服務器名稱的。
9.6. 客戶端服務器
雖然一臺沒有操作系統的服務器會嘗試每一個可行的開機方法,才至它進入 PXE 開機模式,已安裝了操作系統的服務器卻未必能進入 PXE 開機模式。請在它的 BIOS 內將 PXE 放置在開機模式清單的最高位置,好讓這臺服務器有機會被 PXE 被控制。
當客戶端服務器關機時,它會展示一個包含 CentOS-5-i386 選項的劃面。選擇它來開始自動化地安裝客戶端服務器。
注意:這臺客戶端服務器的硬盤將會被重新格式化,而 CentOS 5 - i386 將會被重新安裝在客戶端服務器上。
當客戶端端服務器的安裝完成後,請用你先前設置的 root 密碼登錄。藉着編輯 /etc/yum.repos.d 內的 repo 檔,停用本地設置的 yum 軟件庫。請確定相關的部份包含以下符串:
enabled=0
接着,請進到 Spacewalk 的界面並選擇 Systems。請選擇新安裝的客戶端服務器。在 Details -> Overview 這個劃面,點擊 Alter Channel Subscriptions 這個連結。請爲你新管理的服務器設置合適的頻道。
10. 利用 Spacewalk 來管理配置文件
你可以利用 Spacewalk 來管理配置文件。你只需一個設置頻道,當中包含一個或以上的文件/目錄。
10.1. 創建一個新的設置頻道
你必須先創建一個設置頻道。進到 Spacewalk 的界面並選擇 Configuration -> Configuration Channels。點擊 create new config channel 這個連結。
這裏有一個樣例:
Name*: SSH Keys
Label*: ssh-keys
Description*: Channel to manage ~/.ssh/authorized_keys
頻道被創建後,你可以在其中加入一個或以上的文件/目錄。進到 Configuration -> Configuration Channels 並選擇你剛創建的頻道。現在點擊 Create new configuration file or directory 並適當地編輯各字段。
10.2. 允許 Spacewalk 管理系統上的文件
你已經創建了設置頻道並加入了文件。現在你需要允許 Spacewalk 管理系統上的文件。進到 Configuration -> Systems -> Target Systems 後你便會看見所有登記在 Spacewalk 上的系統。
請選擇你想啓用設置管理的系統並點擊 Enable Spacewalk Configuration Management。Spacewalk 會嘗試加進裝備的權限並在系統上安裝所需的組件。
注: 假若你看見 Could not subscribe to the Spacewalk Tools channel 這個錯誤信息,你便需要以人手安裝所需的組件。

登錄客端系統並執行以下指令:

yum install rhncfg rhncfg-actions rhncfg-client

現在於系統上執行以下指令,容許安裝來自中央數據庫的配置文件:

rhn-actions-control --enable-deploy

你的系統現在已經準就緒當。你再返回 Spacewalk 的界面時,便會看見它出現在 Configuration -> Systems -> Managed Systems 之內
11. 設置 OSAD(即時執行更新)
通過 OSAD,在 Spacewalk 界面上所個的更新會近乎即時在客戶端執行。它亦爲 Spacewalk 的其它功能提供這服務。因此,你便不用等候 Spacewalk 編排時間。
11.1. 設置客戶端
安裝 osad 這個組件:
yum install osad
打開 /etc/sysconfig/rhn/osad.conf 並將以 osa_ssl_cert 起首的那一行改爲:
osa_ssl_cert = /usr/share/rhn/RHN-ORG-TRUSTED-SSL-CERT
下載被信任的憑證:
cd /usr/share/rhn/
wget http://spacewalk.example.com/pub/RHN-ORG-TRUSTED-SSL-CERT
注意: 切記時常使用你的 Spacewalk 服務器的全局名。
要啓用 osad 你很可能須要安裝 python-hashlib:
yum install python-hashlib
現在你只須啓用 osad 這個守護程序:
service osad start
提示: 你可以強迫 Spacewalk 承認某臺客戶端的 OSA 現況。要這樣做,請在網頁界面上進到該客戶端的主機概覽頁。在該頁的右邊,你會看見一處用來顯示客戶端的 OSA 現況。傳送一個 ping 到該客戶端將會更新它的現況爲 online。
由現在起,你的更新將會接近即時地被執行。
12. 把軟件庫同步的腳本
Davidson Paulo <davidsonpaulo AT gmail.com> 炮製了一個更好的腳本來管理軟件庫及將它們同步(謝謝你的傑作 )。它會尋找一個配置文件並將內裏所列出的一切鏡像進行同步。
要應用這個腳本,你需要:
• 一個配置文件(例如:/etc/sysconfig/spacewalk-repo-sync)
• 該腳本
12.1. 配置文件
配置文件(/etc/sysconfig/spacewalk-repo-sync)採用以下語法:
[頻道名稱] [軟件庫 URL] [方法]
以下是一個實例:
centos-5-updates-i386 http://mirror.centos.org/centos/5/updates/i386/ yum
centos-5-extras-i386 http://mirror.centos.org/centos/5/extras/i386/ yum
centos-5-base-i386 http://mirror.centos.org/centos/5/os/i386/ yum
epel-5-i386 http://download.fedora.redhat.com/pub/epel/5/i386/ yum
12.2. 腳本
而這裏是爲你代勞的腳本(我很快會用它取代舊的版本):
#!/bin/bash
#
# spacewalk-repo-sync
# Repository synchronization utility for Spacewalk
#
# Authors: Davidson Paulo <davidsonpaulo AT gmail.com>
#
# This is free software. You are free to use it and distribute it under
# the terms of the GNU General Public License v3+

## Variables
config=/etc/sysconfig/spacewalk-repo-sync
log=/var/log/spacewalk-repo-sync
lockfile=/var/run/spacewalk-repo-sync.lock

## Functions
syncrepo() {
echo "/usr/bin/spacewalk-repo-sync --channel $1 --url $2 --type $3"
/usr/bin/spacewalk-repo-sync --channel $1 --url $2 --type $3
}

## Main routine
# try to create the lock and check the outcome
lockfile -r 0 ${lockfile} 1>/dev/null 2>&1
status=$?

if [ ${status} -ne 0 ] ; then
echo "Another instance already running. Aborting."
exit 1
fi

# Remove $lockfile when Ctrl+C is pressed
trap "rm ${lockfile}" EXIT

# Read $config and execute /usr/bin/spacewalk-repo-sync for each repository
if [ -f $config ] ; then
while read line ; do
syncrepo $line
done < <(egrep -v '^([[:space:]#]+|$)' $config)
else
echo "Config file $config does not exist."
exit 1
fi | tee -a $log

exit 0
請存儲它,譬如成爲 /usr/bin/spacewalk-repo-sync,然後執行:
$ chmod +x /usr/bin/spacewalk-repo-sync
現在,每次你需要把的軟件庫同步,你只需執行這個腳本。你亦可以將它加進 cron 內。
注意:這個腳本可以正確運作,而且較本指引先前所描述的方法更易管理。我計劃以該腳本取代將本指引的某些部份。不過我首先需要一些反饋。所以假若你遇到問題,請告訴我。

源鏈接:http://wiki.centos.org/zh/HowTos/PackageManagement/Spacewalk

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章