GCC-4 for Oracle Solaris 11 Express Edition

2010/12/15 Update
都換到最新版本了, 也確認過能work, 請盡量都抓最新版以免有匹配問題

2010/12/13 Update
把幾個做好的Package放上來, 請注意, 以下的Package都是給Solaris 11 Sparc, prefix是/usr/local, 在sun4u架構底下build的. 請依照順序裝, 其中libiconv跟gettext可裝可不裝, 不過我還是建議裝一裝, 免得以後有其他東西會關聯到

  1. GPM 5.0.1 *Required
    [Site] [Source] [Package]
    GPM 4.3.2 *Required
    [Site] [Source] [Package]
  2. MPC 0.8.1 *Required
    [Site] [Source] [Package]
  3. MPFR 3.0.0 *Required
    [Site] [Source] [Package]
    MPFR 2.4.0 *Required
    [Site] [Source] [Package]
  4. LibIconv 1.9.2 *Requierd
    [Site] [Source] [Package]
    LibIconv 1.10 *Optional
    [Site] [Source] [Package]
  5. GetText 0.18 *Optional
    [Site] [Source] [Package]
    GetText 0.18 *Optional
    [Site] [Source] [Package]
  6. GCC 4.5.1
    [Site] [Source] [Package]

以下是製作的程序:

  1. Solaris 11 Express光碟片安裝好基本的系統
  2. 抓好Oracle Solaris 11 Express 2010.11 Repository Image放在/export2/ (共兩個檔案 sol-11-exp-201011-repo-full-iso-a.zip & sol-11-exp-201011-repo-full-iso-b.zip)
  3. 把兩個檔組合成iso
    # cd /export2/
    # unzip sol-11-exp-201011-repo-full-iso-a.zip
    # unzip sol-11-exp-201011-repo-full-iso-b.zip
    # cat sol-11-exp-201011-repo-full.iso-a sol-11-exp-201011-repo-full.iso-b > sol-repo-full.iso
  4. Mount image

    # mount -F hsfs `lofiadm -a /export2/sol-repo-full.iso` /mnt
  5. 把iso裡頭整個repo複製到local disk

    # mkdir /export2/repo
    # cd /mnt/repo
    # tar -cpf – * | (cd /export2/repo; tar -xpvf -)
  6. 設定Local Repository Publisher

    # pkg set-publisher -m file:///export2/repo/ -P solaris
    # pkg set-publisher -M file:///export2/repo/ solaris
    # pkg set-publisher -G file://pkg.oracle.com/solaris/release -g file:///export2/repo/ -P solaris
    # pkg info -s /export2/repo

    最後一個指令如果有看到底下這個, 就表示沒問題哩.

    PUBLISHER PACKAGES STATUS UPDATED
    solaris 3941 online 2010-11-11T00:04:39.171739Z
  7. 重建repo index(非常久, 可以去泡茶洗衣服或是來一場LoL)

    # pkgrepo -s /export2/repo refresh
  8. 從repo安裝gcc 3.4.3

    # pkg search gcc
    INDEX ACTION VALUE PACKAGE
    description set GCC Runtime libraries pkg:/system/library/gcc-3-runtime@3.4.3-0.151.0.1
    pkg.description set GCC Runtime – Shared libraries used by gcc and other gnu components pkg:/system/library/gcc-3-runtime@3.4.3-0.151.0.1
    pkg.summary set GCC Runtime libraries pkg:/system/library/gcc-3-runtime@3.4.3-0.151.0.1
    basename dir usr/sfw/lib/gcc pkg:/developer/gcc-3@3.4.3-0.151.0.1
    basename dir usr/sfw/libexec/gcc pkg:/developer/gcc-3@3.4.3-0.151.0.1
    basename hardlink usr/sfw/bin/gcc pkg:/developer/gcc-3@3.4.3-0.151.0.1
    basename link usr/bin/gcc pkg:/developer/gcc-3@3.4.3-0.151.0.1
    description set gcc – The GNU C compiler pkg:/developer/gcc-3@3.4.3-0.151.0.1
    pkg.description set GCC Runtime – Shared libraries used by gcc and other gnu components pkg:/system/library/gcc-3-runtime@3.4.3-0.151.0.1
    pkg.summary set gcc – The GNU C compiler pkg:/developer/gcc-3@3.4.3-0.151.0.1
    # pkg install pkg:/developer/gcc-3
  9. 從repo安裝SUNWlibm (解決math.h missing問題)

    # pkg search SUNWlibm
    INDEX ACTION VALUE PACKAGE
    incorporate depend SUNWlibm@0.5.11-0.133 pkg:/consolidation/sunpro/sunpro-incorporation@0.5.11-0.151.0.1
    legacy_pkg legacy SUNWlibm pkg:/system/library/math/header-math@0.5.11-0.151.0.1
    pkg.fmri set solaris/SUNWlibm pkg:/SUNWlibm@0.5.11-0.133
    # pkg install pkg:/SUNWlibm
  10. 接下來就是按照Sunfreeware網站提供的教學製作 Package 啦

FAQ:

  1. 為什麼有些東西的版本不是最新的?
    答:因為最新不一定最好, 挑選的這幾個版本是我使用上問題最少的版本
    答:已經盡量換到最新的Stable version了
  2. 做gmp時會有GMP_RNDZ的錯誤?
    答:~/src/acos.c 裡頭把 GMP_RNDZ 那塊 #ifdef 到 #endif 共三行刪除即可
  3. 做GCC-4.5.1時會碰到libiconv_close的reference error
    答:~/objlib/gcc/Makefile 裡頭找 -lz 後頭加上 -liconv就好
  4. 做GCC-4.5.1時會碰到找不到gmp-impl.h & longlong.h 的問題
    答:從~/gmp/底下把這兩個檔案複製到 ~/objlib/gmp/即可
  5. 自己build的時候會出現ELFCLASS64的錯誤?
    答:請改用 env CC=’gcc -m64′ ./configure ……的方式configure, 這是因為一個CAS在sparcv9跟sparcv8plus之間的錯誤, gcc-3專屬
    答:gmp, mpfr, mpc都換成新版的就沒這問題了
  6. 為什麼這些Package都叫做NKB開頭?
    答:NKB=nekobe, 你來亂的嗎?
  7. 能不能提供其他solaris版本或是x86的Package?
    答:你如果能送我一台可以work的機器, 我會很樂意幫你作Package
  8. 為什麼gcc-4.5.1的Package沒上連結?
    答:因為我還沒build完, Netra T1很慢的

玩Solaris已經是好久以前的事情, 當時P社大多都是Solaris, 所以在Solaris 8/9的時代對這玩意很熟悉, 熟悉到連做環境Compile東西都變成本能, 快睡著狀態都可以做出可以上Production的機器. 一直到開業時, 由於需要做各種OS各種版本的Binary, 所以都還有留一個專門build的VM在, 需要Sparc版本就借朋友的機器做.

一直到Solaris 10, 以及OpenSolaris的誕生, 改用IPS(Image package system)及Packaging Repository後就完全沒碰了. 直到前陣子某大叔很親切的把他們公司淘汰的Netra T1 150跟Netra S1送給我, 我才又開始繼續摸Solaris.

在Oracle網站找到最新的Solaris 11 Express時, 以為跟以前的機制差不多, 沒想到裝完後一整個大挫折, 所有的Packages系統幾乎完全不同, 硬用上Sunfreeware 提供Solaris 10 Sparc的Packages還是時常會有怪現象, 所以只好硬著頭皮啃文件, 弄清楚Packaging Repository怎麼用, 所以做個簡單筆記.

首先要裝之前還是得去抓一下Installation Image, 燒成CD後直接開機從Text安裝, 有個很大的不同是幾乎不用管怎麼分割了, 從11開始都是用zfs pool的概念. 接著要抓Oracle Solaris 11 Express 2010.11 Repository Image. 裝完後把整個iso丟進系統裡頭.

最後參考
How To Copy an Oracle Solaris 11 Express Software Package Repository
這份文件, 建立好Repo的Local copy, 就可以開使用pkg指令裝了.

使用上的心得是, Oracle提供的Repository版本其實很舊, 尤其糟糕的是gcc還停留在3.3.2版, 這個版本在sparcv9的archi下有很多毛病會造成make error, 必須得更新到gcc-4.x 才能幾決這個問題, 所以花了一些時間做gcc-4.x的traditional package, 還沒測試完, 所以還不敢release.

等到做完測試確認沒問題再放上來吧. 很可怕的是我因為configure時沒有先排除一些八百年不會用到的語言, 所以做起來的Package 400MB….


2010/12/15 Update
經歷了一整年的低潮, 自我毀滅及被毀滅, 有很長一段時間弄不清楚自己到底還剩下什麼.

技術的東西是最直接也最不需要任何言語形容的, 所以我選擇了先找回一個技術本位的自己, 從自己最容易獲得自信與成就感的區塊開始, 逐步進行自己人格的重建. 對很多人來說或許這沒什麼, 也只是無聊的重複工作, 但是這對我很重要.

所以如果這些東西對某些人有幫助, 那麼我會很開心, 也謝謝你們用的到我做的東西.

  • Post a comment

    Threaded commenting powered by interconnect/it code.