顯示具有 FreeBSD 標籤的文章。 顯示所有文章
顯示具有 FreeBSD 標籤的文章。 顯示所有文章

2008-07-26

遠端升級 FreeBSD 6.3 to 7.0 之驚險萬分

其實我們家老大已經有提供很完整的升級流程,且試過幾台照著做都正常,就公司內部的文件管理系統出了點小問題...

  1. MySQL daemon 沒先停掉會有危險性,因為要幹掉所有的 ports 重裝,但是因為沒先停 daemon 造成 script 一下去後,不明原因 MySQL stop 爛掉
  2. 因為要幹掉所有的 ports 之前會先跑一段 script 把 /var/db/pkg 裡所有的 ports 備份起來,然後再升級完 Base system 後去完整重裝成 7,結果賽手把備份出來的檔案弄掉了,最後還好這台機器有每天備份,才從 dump file 裡挖出 /var/db/pkg 的資訊重做一份 ports 備份檔
  3. 這台機器是有另外獨立線路(不是走公司 gateway),所以前面好不容易救回 ports 備份檔確連不出外網,本來以為是哪個東西搞爛,後來想起是線路問題設定它先走公司 gateway,終於現在恢復正常繼續安裝 ports
  4. 如果必須要裝 MySQL 4.0 會有雷,因為 MySQL 4.0.27 有重大弱點通報,所以如果沒下"export DISABLE_VULNERABILITIES=true"是安裝不了的;所以到了 php5-mysql client 安裝的部份就造成 php5 找不到 mysql 所以就"順手"裝了 mysql5(推論是這個原因),這真是個超級大雷阿~ 囧
原本想說是不是用前一天的 dump (24號) 把系統 restore,後來想到這樣今天(25號) 新增的所有文件就全滅了,那我星期一就準備被砍了,還好那時沒衝動;後來又想說那 restore 到原本的備份 HDD 再救資料,想的非常的複雜,後來還好看到這篇才知道可以只挖特定目錄(resrote -if),所以很快的10幾分鍾內把 /var/db/pkg/ 先挖出來,才弄回 ports 備份檔

總之一整個晚上是驚險萬分加提心吊膽阿,目前看起來正常的在安裝 ports 中了;應該可以順利趕在星期一上班前升級完成。

這個故事告訴我們:
  • 出包不要急,想好對策再出手;
  • 就算有文件可以參考,也要仔細瞭解每一步驟再幹嘛(就是重覆做了備份 ports 那步造成 ports 備份檔遺失)
  • 深夜問題多,早點睡最好!!
晚安!!

2008-07-24

FreeBSD 安裝 diablo-jdk from PORTS

再更早些時候,要在 FreeBSD 上裝 JDK 根本上是個痛苦的事,因為 Sun 要求檔案必須要到他們網站下載,而且要下載還得要註冊,非常的不便。

救世主 FreeBSD Foundation 提供了編好的 binary 檔,只要上去抓下來直接 pkg_install 就搞定,不過這種安裝對於之後要做系統升級還是有點不方便就是。

當然現在我們可以透過 PORTS 直接安裝 diablo-jdk,不過還是有點小地方要注意一下

  • 若不想系統被硬上一堆 X 套件,
    cd /usr/ports/java/diablo-jdk15/
    vim Makefile
    USE_XORG+= xi xp xt xtst #Mark 掉這行
  • 如果在 diablo-jdk 的 option 有選擇 tzupdate,要自行到 Sun 網站下載最新版,這個網站要註測(暗!!)
  • 要連上 FreeBSD Foundation 抓相對應的 diablo-jdk-caffee
以上的檔案要放在 /usr/ports/distifiles/ 這樣 make 才找的到,升級時也是要更新相對應的版本放到同一目錄,然後就跟通常升級套件的方式一樣:portupgrade diablo-jdk*

另外 Foundation 已經推出 FreeBSD 7 的 jdk1.6 版,不過目前為止 PORTS 裡最新的 diablo-jdk 只有 1.5,另外如果是舊 32bit 的使用者就抓 x86 版,新的 64bit 版就抓 amd64 那版

2008-06-18

Alteon 2424 將 Syslog 送到 FreeBSD Syslogd Server HowTo

Alteon 本身有支援 syslog 輸出到外部 syslogd server 的方式(UDP:514),其 syslog 一些設定(訊息等級之類都雷同 Unix-like OS)

整個設定裡最麻煩的在於要讓 syslogd server 把 Alteon 跟 loacl 的訊息區分出來不要混淆,所以會造成一些麻煩事

設定我們就分 Alteon & syslogd server 兩部份來說

  1. Alteon: (參考 Alteon_OS_22.0.2_Command_Reference Page.233)
    • /cfg/sys/syslog
      host 10.0.1.62 #我們走 LAN 送 DATA 就好
      sever 6
      facil 6
      log all ena
      apply
  2. Syslogd Server: (我們以 一台 Lan Server 來當收 log 的 server)
    1. /etc/hosts #這個部份是為了讓我們的 syslog.conf 可以區分用
      10.0.1.1 alteon1.mydomain.com.tw alteon1
      10.0.1.2 alteon2.mydomain.com.tw alteon2
    2. /etc/rc.conf[.local] #rc.conf 設定 syslogd 的啟動參數,若需多個就以空白隔開,語法: ip[/netmask]:port
      syslogd_flags="-a 10.0.1.0/24:514" (註一)
    3. /etc/pf.conf[.local] #pf.conf 加一個 UDP: 514 的 port allow
      udp_private = "{ snmp 514 }" (註二)
    4. syslog.conf #在所有設定的最上面加上以下幾行
      +alteon1 (註三)
      *.* /var/log/alteon1.log
      +alteon2
      *.* /var/log/alteon2.log
      +@
  3. 以上都設定好要重跑 syslogd & pf
    1. /etc/rc.d/syslogd restart
    2. /etc/rc.d/pf restart
解說:
  • 註一:FreeBSD 上 syslogd 預設開機就會啟動,然而預設開機是有加 -s (會讓這台 Server 不能當做 Syslogd server),所以我們要加個 syslogd_flags 讓 syslogd 啟動時換掉啟動參數;若是要 allow 多網段或 IP,在網段或 IP 之間用空白隔開即可,至於 "IP/netmask" 的表示法就不多說;成功啟動後用 ps 去看會看到 syslogd 長的像這個樣子 "/usr/sbin/syslogd -a 10.0.1.0/24:514"
  • 註二:我們在 pf 部份只 allow 了 snmp,而 syslog 是走 UDP 514,所以要開放,有些人沒用 pf 是用 ipfw,也是相對應做一下設定開放 UDP 514
  • syslog.conf 的精華在這,
    • 我們在 /etc/hosts 指定好 server alias 就是為了這部份要用,最一開始有說到 Alteon 丟出來的訊息等級都跟 unix-like OS 雷同,所以不分類的話一定會混雜在一起,要分類的話就得有個明顯的"標的"可以被 syslog.conf 使用
    • 在 man page 裡有提到,
      • +[hostname] 指的是由這個 host 過來的訊息利用以下 block 的方式記錄
      • +@ 指的是 localhost 的訊息利用以下 block 的方式記錄
      • -[hostname] 跟 +[hostname] 反向,也就是除了 [hostname] 以外的都用以下 block 的方式記錄
    • 剩下的可以參考 man syslog.conf
syslog.conf 設定參考:
  • 以下列出收 Log 的 Server 的 syslog.conf 給大家參考
  • # $FreeBSD: src/etc/syslog.conf,v 1.28 2005/03/12 12:31:16 glebius Exp $
    #
    # Spaces ARE valid field separators in this file. However,
    # other *nix-like systems still insist on using tabs as field
    # separators. If you are sharing this file between systems, you
    # may want to use only tabs as field separators here.
    # Consult the syslog.conf(5) manpage.
    +alteon1
    *.* /var/log/alteon1.log
    +alteon2
    *.* /var/log/alteon2.log
    +@ #這裡要讓以下原本的設定都是跟之前一樣,所以指定為以下 block 都是記 localhost

    *.err;kern.warning;auth.notice;mail.crit /dev/console
    *.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
    security.* /var/log/security
    auth.info;authpriv.info /var/log/auth.log
    mail.info /var/log/maillog
    lpr.info /var/log/lpd-errs
    ftp.info /var/log/xferlog
    cron.* /var/log/cron
    *.=debug /var/log/debug.log
    *.emerg *
    # uncomment this to log all writes to /dev/console to /var/log/console.log
    console.info /var/log/console.log
    # uncomment this to enable logging of all log messages to /var/log/all.log
    # touch /var/log/all.log and chmod it to mode 600 before it will work
    #*.* /var/log/all.log
    # uncomment this to enable logging to a remote loghost named loghost
    #*.* @loghost
    # uncomment these if you're running inn
    # news.crit /var/log/news/news.crit
    # news.err /var/log/news/news.err
    # news.notice /var/log/news/news.notice
    !startslip
    *.* /var/log/slip.log
    !ppp
    *.* /var/log/ppp.log
參考資料:
  1. 【FreeBSD】用 FreeBSD 建置集中式 Syslog Server
  2. Unix 系統管理手冊-第十一章 Syslog 和記錄檔
  3. Alteon_OS_22.0.2_Command_Reference P.233

2008-06-11

在 FreeBSD 掛載 WINDOWS 網路磁碟機

最近剛好工作上有這個需求,所以稍微的研究一下

在 FreeBSD 上掛載 Windows 的網路磁碟機跟一般 NFS 最大的差異在於需加上"網芳名稱(NetBIOS Name)",也就是所謂的"電腦名稱",指令用法參考如下:

  1. 不需帳號、密碼:
    • #mount_smbfs -I [ip_address] -N '//[sharehost]/[source_dir]' /[mount_point] #-I 為指定 Host IP,-N 為指定不需密碼驗證
  2. 需帳號、密碼:
    • #mount_smbfs -I [ip_address] '//username][@[sharehost]/[source_dir]' /[mount_point] #執行後會請您輸入密碼
  3. 修改掛載後目錄的權限:
    • #mount_smbfs -f 664 -d 755 '//[username]@[sharehost]/[source_dir]' /[mount_point] #-f 為指定檔案權限,-d 為指定目錄權限
執行成功後用 df 觀察會看到如下的掛載資訊:
  • //ROOT@REG/my_raid 6347602544 5476972928 870629616 86% /raid3/share
其中ROOT應該是預設的username,REG則是那台XP的電腦名稱

目前根據查到的參考資料對中文命名的資料夾會有問題,另外我遇到的另一個問是"電腦名稱"太長(像是剛灌好 WindowsXP 後預設給的那串落落長的)也會有問題,所以相對的用中文做電腦名稱應該也是會出問題的。

以上參考資料來源請點這裡

2008-05-27

PHP 在 32bit & 64bit 平台的差異

這個問題是在做一個系統轉換機器時發現的(從 i386 -> amd64)

主要是 Integer 在 32bit & 64bit 環境下位數表現的問題,我是在 dechex() 這個 function 踩到地雷 跟,不過其實應該只會在超過 65536 的整數才會出事(32bit unsigned),以下是 PHP 官方站相關參考

http://tw2.php.net/manual/en/function.dechex.php

To force the correct usage of 32-bit unsigned integer in some functions, just add '+0' just before processing them.

for example
echo(dechex("2724838310"));
will print '7FFFFFFF'
but it should print 'A269BBA6'

When adding '+0' php will handle the 32bit unsigned integer
correctly
echo(dechex("2724838310"+0));
will print 'A269BBA6'

2008-05-14

FreeBSD 修改使用者資訊

通常是不會去幹這種事,當然有時候還是會有需要就是,在 FreeBSD 上就使用 pw 指令來處理囉
Syntax:

  • sudo pw usermod [account to modify] -g wheel
這行就是說以 pw 加上 usermod 的參數將某個帳號加入 wheel 群組,在這裡的帳號或群組都可以用它的"name"或"uid"

另外也有 userdel useradd groupmod groupdel lock unlock 等等

2006-02-07

如何在 Freebsd 掛載新硬碟

1.用 sysinstall 進入 UI 選單操作,以 fdisk 做分割

2.回到 CLI,以 disklabel 配置分割區,只做過 fdisk 的磁碟機的 disklabel 看起來會類似這樣
#disklabel /dev/da1s1 (第 2 顆 scsi hdd)
root@tmp4# disklabel /dev/da2s1
# /dev/da2s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 286744106 16 unused 0 0
c: 286744122 0 unused 0 0 # "raw" part, don't edit

進入編輯模式(操作同 vi),
#disklabel -e /dev/da1s1
將 a: 這行刪掉,複雜一行 c:,然後將前面改成 d:,fstype 改成 4.2BSD,儲存離開
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
c: 286744122 0 unused 0 0 # "raw" part, don't edit
d: 286744122 0 4.2BSD 0 0 # "raw" part, don't edit

3.以 newfs 新增,加上 soft-update (-U)
#newfs -U /dev/da1s1d
newfs 做完就可以 mount 起來使用


4.編輯 /etc/fstab,讓開機時自動掛載,基本上就抄原本 Mountpoint / 的設定,
把 Device 改成 /dev/da1s1d,Mountpoint 改成要 mount 的位置,Eg:/content1
# Device Mountpoint FStype Options Dump Pass#
/dev/da1s1d /content1 ufs rw 1 1

完成基本新 HDD 掛載的動作,其他就以此類推。

P.S.disklabel 裡的 a: 代表是 / 磁區,b: 代表是 swap 磁區,c: 代表是扣除前面兩者所剩下來的所有磁碟空間
之後開始就是屬於 fs 的部份

參考 URL:
FreeBSD連載(20):建立檔案系統
FreeBSD 使用手冊 2.5 磁碟空間配置