HP-UX 延壽計畫

要在舊機器 HP-UX 上開發程式,要怎麼做才能利用新的技術,不用自己從 C/C++ 開始刻工具呢?

最近工作要與 HP-UX 溝通,要來了解一下它的環境。
查了一下網路,是個 unix 系統。It's a Unix system, I know this! https://www.youtube.com/watch?v=dFUlAQZB9Ng
(從 jerv 學來的梗)

## 第一步
等到機器來了,先用鍵盤登入後,發現

只有 sh 與 vi
打錯字還不能 backspace ...

`vi` 簡單指令例如: i 遊標位置開始輸入、a 遊標位置後新增輸入、ESC 離開編輯模式、x 刪除遊標位置字元、dd 刪除遊標位置所在行、:w 存檔、:wq 存檔後離開。

google 如何改網路設定,如下:

設定 ip, mask, gateway
`vi /etc/rc.config.d/netconf`

改變 IP_ADDRESS[0] SUBNET_MASK[0] ROUTE_GATEWAY[0]

設定 ip 與 hostname 對應
`vi /etc/hosts`

設定 dns server
`vi /etc/resolv.conf`

然後,重開機,讓設定生效。(因為我不會手動使之生效)

## 第二步
網路設定生效之後,就可以坐在位子上遠端了。不然機台離我位子很遠。

首先看一下 uname
環境
```
mesf /# uname -a
HP-UX mesf B.10.20 A 9000/785 2010791808 two-user license

```

更改時間 使用 `date` 指令


hp-ux 的軟體管理工具程式有 `swlist` `swinstall` `swremove`

已經內裝好的程式有:

  700QPK1020                            ACE.199912.02  Workstation Quality Pack for HP-UX 10.20 (December 1999)
  B3899BA                               B.10.20.07     HP C/ANSI C Developer's Bundle for HP-UX 10.20 (S700)
  B3907CA                               B.10.20.07     HP FORTRAN/S700 Compiler and its associated products
  B3907DB                               B.10.20.14     HP Fortran 90/S700 Compiler and its associated products
  B3911DB                               A.01.15.01     HP aC++ Compiler S700
  B5402AA_APZ                           B.10.20        MirrorDisk/UX
  B6193EA                               ACE.199912.01  Workstation ACE for HP-UX 10.20 (December 1999)
  B6378DA                               ACE.199912.01  Networking ACE for HP-UX 10.20 (December 1999)
  HPUXEngCR700                          B.10.20        English HP-UX CDE Runtime Environment
  Ignite-UX-10-20                       A.2.3.205      HP-UX Installation Utilities for Installing 10.20 Systems
  J2559C                                D.06.15        Hewlett-Packard JetAdmin for Unix Utility


此外,ftp server 也已經可用,一開始我還用 ftp 指令下載檔案,痛苦。

經過搜尋之後,以下這個網站的程式才可以用。

http://mirrors.develooper.com/hpux/downloads.html

這個網站非常重要,只有它有 hp-ux 10.20 32bit PA-RISC 1.1 的工具程式。

下載 `bash-4.3.30` `gcc-4.2.2 + binutils-2.16.1 + gdb-6.5`

依照網站說明
.sd.bz 用 bzip2 解開(`bzip2 -d foo-x.y.sd.bz`),然後用 `swinstall -s <絕對路徑>/foo-x.y.sd` 安裝

其他想要用的程式,可能都要自己編譯安裝才行。

## 第三步
目標是在這個老傢伙身上安裝軟體,如果不能的話,就自己寫,寫 fortran 當然是有點太遠,寫 c/c++ 來選我一定是選 c。

但是,如果有其他的程式語言可以從這傢伙 build 出來,至少我可以不用傷腦筋字串、記憶體、指標、網路通訊的問題,時間一定會比較省,bug 應該也會比較少。

一開始先找可用 gcc 編譯的程式語言,太新的語言大多相依 linux, 或新版的 gcc,或很新的 lib。最後可選的是 python,go。但是事情沒有這麼簡單,在嘗試過程中才知道,thread 這件事是要看系統與編譯系統,原來的系統與所附的的 cc 與 aCC 不支援 thread。我安裝的這個 gcc-4.2.2 + binutils-2.16.1 + gdb-6.5 也沒有支援。

嘗試編譯 go 的過程非常複雜,最後就是卡到要寫 asm,放著。

嘗試編譯 python 的過程非常複雜,有需要再說,總之現在得到一個堪用的 python,有些 module 沒有編成功。雖然沒有 thread,但是有網路功能。

從 https://www.python.org/downloads/source/ 下載 Python-2.1.3.tgz,解開之後,進到 Python-2.1.3,
執行以下指令

```
./configure --without-threads
make
make test
```

結果是

```
108 tests OK.
3 tests failed: test_builtin test_pickle test_popen
30 tests skipped: test_al test_asynchat test_bsddb test_cd test_cl test_dl test_fcntl test_fork1 test_gdbm test_gl test_gzip test_imgfile test_largefile test_linuxaudiodev test_locale test_minidom test_nis test_openpty test_pty test_pyexpat test_sax test_socketserver test_sunaudiodev test_sundry test_thread test_threadedtempfile test_winreg test_winsound test_zipfile test_zlib
```

builtin 模組不能用有一點點讓人擔心,它的失敗原因是 `test test_builtin crashed -- exceptions.ValueError: int() literal too large: -2147483648` 這代表編譯時候的 int 與 python 認知 int 邊界可能有差異,可能所有的 int 都要小心。

想要支援 thread,系統有安裝 pth,但是用 gcc 編譯有各種問題,之後再寫有哪些問題。
 

 

 

 

分享