2011年7月13日星期三

CentOS(RHEL) 6 重投 scim 輸入法引擎懷抱 及 mock build 別權環境編譯

CentOS 6 已經官方釋出了, 當然已經實測體驗過 RHEL 6(及 6.1)的企鵝人應該不會陌生(upstart 的爽快起動, ext4 文件系統格式, 全 i686 編譯及 gnome 介面優化等等), 不過激進的 Redhat 已經將 ibus 輸入法引擎取代了 scim, 並且把 scim 源碼套件排除掉, 習慣了使用 scim 及其輸入法 tables 的話會是一個急煞停的刺痛, 當然企鵝人怎會甘願被紮捆, 可以借用 Fedora 15 的 scim 源碼套件移植到 CentOS6(RHEL 6)內使用。

CentOS 6(RHEL 6)的 mock 已經放置在 epel-6 的套件庫, 只是 mock config 內容針對及指向了 beta 套件庫, 手動修改後即可以執行 mock build 別權環境編譯, 另外 RHEL6(及 CentOS 6)光碟其實已經包含了 mock build 時需要的 buildsys-build group, 利用光碟位置還可以加快 mock yum 程序。


CentOS 6 官方釋出公告
http://lists.centos.org/pipermail/centos-announce/2011-July/017645.html

CentOS 6 版本文件資料
http://wiki.centos.org/Manuals/ReleaseNotes/CentOS6.0

CentOS 6 DVD 光碟下載 torrent
i386 DVD
http://mirror.centos.org/centos/6/isos/i386/CentOS-6.0-i386-bin-DVD.torrent
x86_64 DVD
http://mirror.centos.org/centos/6/isos/x86_64/CentOS-6.0-x86_64-bin-DVD.torrent

CentOS 6 安裝 mock build 別權環境編譯
  1. 安裝 mock 軟體套件
    登入 root 管理員帳號權限
    安裝 epel-6 yum 套件庫下載 epel-release-6-5.noarch.rpm
    • x86_64 系統的話, 執行
      # rpm -ivh http://download.fedora.redhat.com/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm

      如果是 i386 系統的話, 執行
      # rpm -ivh http://download.fedora.redhat.com/pub/epel/6/i386/epel-release-6-5.noarch.rpm
    • 在線安裝 epel-6 的 mock 軟體套件
      # yum install mock
  1. 帳號設定
    新增帳戶加入 mock 用戶群(例如 tester 用戶帳號)
    # useradd -g users -G users,mock tester

    舊帳戶加入 mock 用戶群的話(例如 tester 用戶帳號)
    # usermod -a -G mock tester
  1. 配置 mock config 設定文件
    編輯修改 /etc/mock/epel-6-x86_64.cfg(及 /etc/mock/epel-6-i386.cfg) 內容
    將 [beta] 區段修改為(無效 comment)
    #[beta]
    #name=beta
    #mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=rhel-5.90Server-beta&arch=x86_64
    將 [beta-optional] 區段修改為(無效 comment)
    #[beta-optional]
    #name=optional
    #mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=rhel-optional-5.90Server-beta&arch=x86_64
    將 [base] 內的 enabled=0 修改為
    enabled=1
    將 [updates] 內的 enabled=0 修改為
    enabled=1

    • (如果使用 DVD 光碟為套件庫加快 mock yum 速度的話)
      可以將 [base] 區段修改為
      [base]
      name=BaseOS
      enabled=1
      baseurl=file:///media/cdrom/
  1. 建立本機 repostory
    如果需要使用自行建立的本機 repostory 編譯其他軟體的話(例如 /opt/localrepo.x86_64/opt/localrepo.i386)
    編輯修改 /etc/mock/epel-6-x86_64.cfg
    將 [local] 區段修改為
    [local]
    name=local
    baseurl=file:///opt/localrepo.x86_64/
    cost=500
    enabled=1
    編輯修改 /etc/mock/epel-6-i386.cfg
    將 [local] 區段修改為
    [local]
    name=local
    baseurl=file:///opt/localrepo.i386/
    cost=500
    enabled=1
    建立本機 repository
    執行
    # mkdir /opt/localrepo.x86_64
    # mkdir /opt/localrepo.i386
    建立(更新)本機 repository 資料
    # createrepo -o /opt/localrepo.x86_64 /opt/localrepo.x86_64
    # createrepo -o /opt/localrepo.i386 /opt/localrepo.i386
    配置完成

mock 別權環境編譯測試
登入 mock 群組帳戶(例如 tester 帳戶), 執行
x86_64 系統的話
$ mock -r epel-6-x86_64 --resultdir=$HOME --init
x86_64 系統執行 i386 mock 的話
$ setarch i386 mock -r epel-6-i386 --resultdir=$HOME --init
i386 系統的話
$ mock -r epel-6-i386 --resultdir=$HOME --init
mock 完成後可以查看 mock 程序生成三個 log 日誌文件結果
build.log 是 compile 編譯源碼日誌
root.log 是 mock 環境架設執行日誌
state.log 是 mock 的狀態日誌

mock build 編譯軟體 scim
  1. 下載 Fedora 15 的 scim 源碼套件
    http://download.fedora.redhat.com/pub/fedora/linux/releases/15/Everything/source/SRPMS/
    包括:
    scim-1.4.9-8.fc15.src.rpm
    scim-bridge-0.4.16-6.fc15.src.rpm
    scim-tables-0.5.9-3.fc15.src.rpm
    scim-pinyin-0.5.91-28.fc15.src.rpm

    執行下載:
    $ wget http://download.fedora.redhat.com/pub/fedora/linux/releases/15/Everything/source/SRPMS/scim-1.4.9-8.fc15.src.rpm
    $ wget http://download.fedora.redhat.com/pub/fedora/linux/releases/15/Everything/source/SRPMS/scim-bridge-0.4.16-6.fc15.src.rpm
    $ wget http://download.fedora.redhat.com/pub/fedora/linux/releases/15/Everything/source/SRPMS/scim-tables-0.5.9-3.fc15.src.rpm
    $ wget http://download.fedora.redhat.com/pub/fedora/linux/releases/15/Everything/source/SRPMS/scim-pinyin-0.5.91-28.fc15.src.rpm
    其他的輸入法 tables 語言可個別下載
  1. 開始 mock build 編譯 scim (x86_64)
    首先編譯 x86_64 的 scim-1.4.9-8.fc15.src.rpm
    登入 mock 群組帳戶(例如 tester 帳戶), 執行
    $ mock -r epel-6-x86_64 --arch=x86_64 --resultdir=$HOME --rebuild scim-1.4.9-8.fc15.src.rpm
    完成 mock build 編譯(檢查 3 個 log 日誌確認)後把 scim-lib scim-devel 的 x86_64 rpm 套件放置到本機 repository 位置
    # cp -v /home/tester/scim-lib*x86_64.rpm /opt/localrepo.x86_64
    # cp -v /home/tester/scim-devel*x86_64.rpm /opt/localrepo.x86_64
    更新本機 repository 資料
    # createrepo -o /opt/localrepo.x86_64 /opt/localrepo.x86_64
    準備 scim-lib scim-devel 後 mock build 編譯 x86_64 的 scim 其他依靠源碼套件
    包括:
    scim-bridge-0.4.16-6.fc15.src.rpm
    scim-tables-0.5.9-3.fc15.src.rpm
    scim-pinyin-0.5.91-28.fc15.src.rpm
    登入 mock 群組帳戶(例如 tester 帳戶), 執行
    $ mock -r epel-6-x86_64 --arch=x86_64 --resultdir=$HOME --rebuild scim-bridge-0.4.16-6.fc15.src.rpm
    $ mock -r epel-6-x86_64 --arch=x86_64 --resultdir=$HOME --rebuild scim-tables-0.5.9-3.fc15.src.rpm
    $ mock -r epel-6-x86_64 --arch=x86_64 --resultdir=$HOME --rebuild scim-pinyin-0.5.91-28.fc15.src.rpm


完成後就可以將編譯結果生成的 scim rpm 安裝實機使用
包括:
scim-1.4.9-8.el6.x86_64.rpm
scim-libs-1.4.9-8.el6.x86_64.rpm
scim-gtk-1.4.9-8.el6.x86_64.rpm
scim-bridge-0.4.16-6.el6.x86_64.rpm
scim-bridge-gtk-0.4.16-6.el6.x86_64.rpm
scim-tables-0.5.9-3.el6.x86_64.rpm
scim-tables-chinese-0.5.9-3.el6.x86_64.rpm
scim-pinyin-0.5.91-28.el6.x86_64.rpm

安裝 scim 執行
# rpm -ivh rpm_file_name

設定使用 scim 輸入法引擎
登入 xorg 桌面
執行 im-chooser
選擇 scim
完成

備註:
  • mock-1.1.11-1.el6 在 CentOS 6(RHEL 6) 下執行時有一個小臭蟲, 在編譯前安裝要求套件時, 如果要求的套件在 [base] 及其他 repository 中有相同名稱相同版本的話, 會預設安裝 [base] 內的套件, 就算加入 cost=xxx 優先次序(或順序排列)亦無效, 唯一辦法是在 [base] 內加入 exclude= 項目來排除誤裝相同名稱套件(已實測)。
  • 如果執行 mock 時使用了錯誤 [base] repository(例如 i386 使用了 x86_64)的話, 因為已經 cache 緩存而失敗無法再 yum 成功, 解決辦法是刪除清空 mock cache 緩存目錄 /var/cache/mock/ 。
  • RHEL 5(CentOS 5)系統內無法使用 mock build 編譯 CentOS 6(RHEL 6)的源碼套件, 主要原因是 RHEL5 的 rpm-lib 軟體版本不向上兼容 RHEL6 的 rpm 軟體套件包(已實測), 反之 RHEL6 系統內卻可以 mock build 編譯 RHEL5 的源碼套件。