Mar 02

在 1 月底,我開始使用 FreeBSD Port Tools 來製作/修改 FreeBSD ports。
因為太好用了,使得我在一個月左右時間內,整整送了 10 個 FreeBSD PR(我知道這種量不值一提,但對我來說,這是目前為止的尖峰值)。

對 FreeBSD ports 有興趣的人,請先詳讀一下這個討論串
針對 FreeBSD Port Tools 的使用,大概要注意的是:

  • 要送出前,請先用 port test 測試過,並記得用 -- 參數來測試所有的 make 參數與選項。
  • 修改 ports,但只是 patch,不是版本更新時,請用 port submit -m change,並記得修改 Synopsis。
  • 對 ports 進行版本更新時,請用 port submit -m update
  • 製作新的 ports 時,請用 port submit -m new

至於 FreeBSD ports 的部份,大概要注意這些:

  • 如果是 PHP Web systems/projects,要先下載後解開,花點時間檢查該系統需要哪些 PHP extensions。可以參考 PHP 的 Function Reference,例如:mbstring 可以用 grep -r "mb_*" [PHP_PROJECT_ROOT_DIR]
  • 如果要在安裝後顯示的 pkg-message,或是 pkg-plist 帶入變數,建議在 [PORT_DIRECTORY]/files 放 pkg-message.in 或 pkg-plist.in 這種檔案。
  • 儘量在 Makefile 使用變數,主要(常用)的變數可以參考 /usr/ports/Mk/bsd.port.mk,其他的請參考 /usr/ports/Mk/ 底下的其他檔案。

由於我還算是新手小嫩咖,目前只能提供以上的心得(順便留個筆記)... orz

Technorati Tags: , ,

Tags: , ,
(Visited 448 times)
Jan 08

昨天,FreeBSD 官方發布了三個 Security Advisories:

根據 Advisories 內容,我原本打算透過以下的步驟作 patch:

  1. cd /usr/src && make update
  2. cd /usr/src/lib/bind && make obj && make depend && make && make install
  3. cd /usr/src/usr.sbin/named && make obj && make depend && make && make install
  4. cd /usr/src/usr.sbin/ntp/ntpd && make obj && make depend && make && make install
  5. cd /usr/src && make kernel
  6. [REBOOT]

但是,進行到第 4 個步驟(FreeBSD-SA-10:02.ntpd 的編譯階段),就出現了如下的 message:

make: don't know how to make /usr/obj/usr/src/usr.sbin/ntp/ntpd/../libparse/libparse.a. Stop

找了一些討論後,我在這個討論串裡看到好幾種作法。
幾經嘗試,我最終在 FreeBSD 8.0-RELEASE-p1 amd64 用以下這個作法順利編譯成功:

  1. cd /usr/src/usr.sbin/ntp
  2. rm -rf /usr/obj/*
  3. make obj && make depend && make && make install

有相同問題(狀況)的人可以參考看看。

Technorati Tags: , ,

Tags: , ,
(Visited 1659 times)
Sep 03

除了已知的效能差異(以前用 Ubench 測過的,gaod 長輩也貢獻了一些資訊,都 紀錄在這)、預設支援的記憶體容量之外,這兩天又找出另外一項。

某台機器跑 FreeBSD i386 platform,搭配 PAESMP
根據以往的經驗,這種記憶體容量超過 4G 的機器,我會選 amd64 platform。
(至少經手過的幾台機器到現在都很健康...)

近來這台機器的 MySQL daemon process 時常會掛掉...
追蹤 error log 之後,發現這種錯誤訊息:

Out of memory (Needed 16391 bytes)

我把錯誤訊息丟上 Google 後,才發現 FreeBSD i386 platform 版本,其預設之單 process 記憶體容量限制為 512 MB,而 MySQL daemon process 使用超過 512 MB 後就會噴出上述的錯誤訊息,接著就是嗝屁... (!!)

我沒碰過這種瓶頸,似乎是 amd64 platform 沒有這種限制。
i386 platform 遭遇到這種瓶頸的解法是在 /boot/loader.conf 裡面丟進類似這三行:

kern.maxdsiz="2G"
kern.dfldsiz="2G"
kern.maxssiz="256M"

(拉高單 process 的記憶體容量限制,變為 2G)
然後 reboot,準備驗收成果...

Technorati Tags: , , ,

Tags: , , ,
(Visited 9508 times)
Jun 11

之前我在 這篇文章 說過某台機器還在使用 PHP 4.4.0 的原因.

當天 gaod 大長輩 聽到我的哭訴後, 很好心的找了台機器測 CPG 1.4.6 .
運作是正常的.

可是這台機器上面的 phpBB 規模不算小, 所以我也就先擱著. :oops:

幾天前跟小竹子問過他們的 PHP 版本, 也是停在 4.4.0 . XD
所以也還沒動.

直到今天凌晨, 我把 PHP 升上 4.4.2 ( 本來先想燒香的, 可是我這邊沒有... =_=||| ) .
目前看來運作也都正常.

晚點通知小竹子好了. 8)

Technorati Tags: , ,

Tags: , ,
(Visited 3844 times)
May 23

自從 上次的 PHP 地雷事件 後, 目前手上兩三台有裝 CPGphpBB 的機器一直停在 PHP 4.4.0 .

可是現在要用 ports 升級 phpMyAdmin 卻會失敗, 還噴這串出來 :

This port requires the Apache Module or the CGI version of PHP, but you have already installed a PHP port without them.
*** Error code 1

跑到 /usr/ports/lang/php4 底下用 make config 把 Apache module 加進去, 還是會噴上面這串... T_T

目前 ports 裡面, PHP4 最新的版本是 4.4.2 , PHP5 是 5.1.4 , phpBB 的版本是 2.0.20 , CPG 是 1.4.6 .
麻煩有裝以上這些系統的好心的前輩提燈籠來指個路啊. :oops:

Technorati Tags: , , ,

Tags: , , ,
(Visited 4201 times)
Dec 28

前幾天送了個 pr ( problem report ) 回去給總部, 順便在這邊說一下好了, 反正太久沒寫 Blog . :???:

這個 prApache 2.2 啟動用的 shell script 問題.

我不知道 2.1 有沒有這問題, 因為我用的是 2.2 , 下面也是以 2.2 做說明. :shock:

之前官方並沒有提供 apache22_http_accept_enable 這個參數讓我們丟進 /etc/rc.conf , 所以唯一解法是在 /boot/loader.conf 加進這行 :

accf_http_load="YES"

現在 /usr/local/etc/rc.d/apache22.sh 裡面可以看到這段 :

# apache22_http_accept_enable (bool): Set to "NO" by default.
#                             Set to yes to check for accf_http kernel
#                             module on start up and load if not loaded.

跟這段 :

if checkyesno apache22_http_accept_enable
then
        if ! /sbin/kldstat -q -m accf_http
        then
                /sbin/kldload accf_http
        fi
else
        apache22_flags="-DNOHTTPACCEPT $apache22_flags"
fi

很明顯的, 這邊用到 kldstat 的 -q 跟 -m 這兩個選項.
但是 kldstat 在 FreeBSD 6 裡面才有支援 -q , 而 -m 則是在 5.4 STABLE 才有支援 , 5.4 RELEASE 以下都沒有.

  1. kldstat online manpage - FreeBSD 6.0
  2. kldstat online manpage - FreeBSD 5.4 STABLE
  3. kldstat online manpage - FreeBSD 5.4 RELEASE

所以在 5.4 RELEASE (含) 以下的平台在啟動時會看到這種訊息 :

kldstat: illegal option -- q
usage: kldstat [-v] [-i id] [-n name]

所以我送 pr 去請他們把 -q -m 改成 -n 就好.

目前看來是還沒處理, 不知道會不會回我信, 叫我改用 FreeBSD 6.0 ? XD

Technorati Tags: , ,

Tags: , ,
(Visited 5004 times)
Nov 28

我只能說, 這個版本是顆大地雷.
除非系統是自己開發, 而且程式碼都寫得很漂亮, 不然用 4.4.0 還是比較好.

之前幫某台機器升級, 結果上面的 phpBB 就爛了... orz
Error message 長這個樣子:

PHP Fatal error: Cannot redeclare get_userdata() in xxx.php on line xxx

後來是靠 portdowngrade ( 在 /usr/ports/sysutils/portdowngrade ) 把版本換回 4.4.0 , 指令上大致上是這樣 :

cd /usr/ports/sysutils/portdowngrade
make install clean
rehash
portdowngrade -o -s \\
:pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs lang/php4

然後會出現一些問題給你選, 弄好以後用 portupgrade -f 把已安裝的這兩種開頭的軟體全部洗一遍就好:

  1. php4-*
  2. pecl-*

:roll:

Technorati Tags: , ,

Tags: , ,
(Visited 5044 times)
Nov 27

因為前幾天幫人家弄這個東西, 所以順便記錄一下. :cool:

Windows 2000 / 2003 的 PAE 不難搞定, 可以參考 這裡.
要注意的是, 如果主機板不支援的話, 多丟 /PAE 進去可能會爛掉. :shock:

FreeBSD 的 PAE 則是要參考 /sys/i386/conf/PAE 這個檔案.
我覺得這邊頗難搞, 主要是因為只要我用 PAE kernel , 開機時 twa0 ( 3ware 9500S-4LP ) 就會爛掉 .... orz
又因為我把系統裝在 RAID 5 上面, 所以開不了機, 而且就算是用原本的 kernel 開, 也找不到之前開機失敗的 boot message 了. :???:
在 5.4 上面, 死掉的原因是 driver 與 firmware 版本不符.
在 6.0 上面則是跑出一堆 error , 然後一直 reset controller . :neutral:

因為那台機器用的是 Athlon64 , 所以我覺得..
直接丟 AMD64 版本的 FreeBSD 給機器吃可能會比較好吧? :roll:
再找時間過去玩看看... :roll:

Technorati Tags: , ,

Tags: , ,
(Visited 4275 times)
Jun 30

剛剛看到的, 總部打出 security advisories.

第一跟第三個真的是不作不行.
不過步驟蠻簡單的, update /usr/src 之後重新作 kernel .

第二個則是, update /usr/src 以後用這些指令 :

% cd /usr/src/lib/libbz2
% make obj && make depend && make && make install
% cd /usr/src/usr.bin/bzip2
% make obj && make depend && make && make install

( 啥? make world ? 不用那麼悲苦啦... XD )

Technorati Tags:

Tags:
(Visited 2761 times)
Jun 26

剛剛有學弟跟我說, 他在 FreeBSD 上面的 perl 升級從 5.8.6 升到 5.8.7 之後爛掉一堆東西.
因為這陣子我在忙考試, 所以我的機器也還沒升.

之前我從 5.8.5 升到 5.8.6 時, 必須很悲苦的自己檢查相依的軟體, 然後用 portupgrade 重裝.
剛剛在自己的機器上面測升級, 發現升級 5.8.7 的步驟簡單很多, 只要在升級完之後跑這兩串指令就能幫你修好 :

# perl-after-upgrade
# perl-after-upgrade -f

此舉真是造福了不少 host master 啊!!! :smile:

Technorati Tags: ,

Tags: ,
(Visited 3451 times)