[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

Spacewalk

Spacewalk 是上游的一個社區計劃,而 Red Hat Network Satellite 產品是從它衍生出來。這個計劃為分佈於已登記的伺服器及桌面電腦內的軟件提供一個管理介面。

1. 參考

這份教學文檔以收藏於 Spacewalk 官方網站上的文件作為基礎,為 CentOS 用戶建立一份簡單的攻略。

Spacewalk 官方網站
官方文件
截圖及 Spacewalk 計劃概覽

2. 伺服器規格

ArtWork/WikiDesign/icon-admonition-idea.png

提示:本作者建議採用 CentOS 5 i386,因為 x86_64 架構所提供的大部份優點都被 Oracle XE 資料庫伺服器的限制所抵消。

3. SELinux

Spacewalk 伺服器所須用的 Oracle 資料庫伺服器已被整合,而且可以與 SELinux 「融洽相處」。請編輯 /etc/sysconfig/selinux 並將 SELinux 設為執行模式:

SELINUX=enforcing 

應用這個改動的最快捷方法就是重新啟動伺服器。

4. 防火牆

以下對內的 TCP 埠在 Spacewalk 伺服器上應該被開啟:

5. Oracle 資料庫

在這份指南內,Spacewalk 將會與一台 Oracle 10g 資料庫伺服器一同安裝;支援 PostgreSQL 作為後端的工作正在進行中,待它變為可行方案時,我們便會更新這頁。Oracle Expression Edition 伺服器運作上沒有問題,雖然它有某些限制:

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 

ArtWork/WikiDesign/icon-admonition-alert.png

在 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 Instant Client:i386 客戶端x86_64。請下載以下二個 RPM:

ArtWork/WikiDesign/icon-admonition-attention.png

注意:現時已知 Spacewalk 1.0 版能配合 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。

ArtWork/WikiDesign/icon-admonition-attention.png

注意:要修改設定值,請解除安裝並重裝 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 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 將會信賴任何以上述金鑰所簽署的內容。尤其是 EPELdag 這兩個軟件庫,由於它們不會協調互相抵觸的套件,互賴性的問題也許會出現。因為這些軟件庫並非由 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 

ArtWork/WikiDesign/icon-admonition-alert.png

在 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? webmaster@example.com
* 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 [webmaster@example.com]?
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。

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:

# 嘗試建立鎖定檔案並檢查結果
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

ArtWork/WikiDesign/icon-admonition-idea.png

提示: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

ArtWork/WikiDesign/icon-admonition-idea.png

提示: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 腳本升級。

ArtWork/WikiDesign/icon-admonition-idea.png

提示:在執行 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 伺服器上註冊這個客戶端:

ArtWork/WikiDesign/icon-admonition-attention.png

注意: 請記得總是為你的 Spacewalk 伺服器使用 FQDN。

rhnreg_ks --serverUrl=http://spacewalk.example.com/XMLRPC --activationkey=<default-activation-key>

ArtWork/WikiDesign/icon-admonition-idea.png

提示:請進到你的 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-images /var/distro-trees

下載發行版本的首個 ISO 映像檔為 /var/iso-images/CentOS-5-i386-bin-1.iso。這個映像內藏有所需的檔案。

mount -o loop /var/iso-images/CentOS-5-i386-bin-1.iso /var/distro-trees/CentOS-5-i386

我們亦會編輯 /etc/fstab 於開機時自動掛載這個 ISO 映像:

/var/iso-images/CentOS-5-i386-bin-1.iso  /var/distro-trees/CentOS-5-i386 iso9660  rw,loop=/dev/loop0 0 0

ArtWork/WikiDesign/icon-admonition-idea.png

提示要保持你的發行目錄樹在最新狀態,請定時下載最新版本 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 選項的畫面。選取它來開始自動化地安裝客戶端伺服器。

ArtWork/WikiDesign/icon-admonition-attention.png

注意:這台客戶端伺服器的硬碟將會被重新格式化,而 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 會嘗試加進裝備的權限並在系統上安裝所需的套件。

ArtWork/WikiDesign/icon-admonition-alert.png

註: 假若你看見 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

ArtWork/WikiDesign/icon-admonition-attention.png

注意: 切記時常使用你的 Spacewalk 伺服器的全域名。

要啟用 osad 你很可能須要安裝 python-hashlib:

yum install python-hashlib

現在你只須啟用 osad 這個常駐程式:

service osad start

ArtWork/WikiDesign/icon-admonition-idea.png

提示: 你可以強迫 Spacewalk 承認某台客戶端的 OSA 現況。要這樣做,請在網頁介面上進到該客戶端的主機概覽頁。在該頁的右邊,你會看見一處用來顯示客戶端的 OSA 現況。傳送一個 ping 到該客戶端將會更新它的現況為 online。

由現在起,你的更新將會接近即時地被執行。

12. 把軟件庫同步的腳本

Davidson Paulo <davidsonpaulo AT gmail.com> 炮製了一個更好的腳本來管理軟件庫及將它們同步(謝謝你的傑作 :) )。它會尋找一個設定檔並將內裡所列出的一切鏡像進行同步。

要應用這個腳本,你需要:

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. 腳本

而這裡是為你代勞的腳本(我很快會用它取代舊的版本):

#
# 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 內。

ArtWork/WikiDesign/icon-admonition-attention.png

注意:這個腳本可以正確運作,而且較本指引先前所描述的方法更易管理。我計劃以該腳本取代將本指引的某些部份。不過我首先需要一些回饋。所以假若你遇到問題,請告訴我。

Translation of revision 86


2023-09-11 07:23