ctags * 或 ctags -R
usage:
vim -t [ function-name | variable-name ]
或在 vim 中用
:ta identifier
a -> 表示 autowrite
在identifier 上按下 ctrl – ] ,可以跳過去
[Tip]2004/02/12
postsuper -d msg-id 刪除卡在 queue 中的信 (postfix)
tree -dif | du 查看各目錄用量
discover nfs
搞了兩天,因為某部機器無法 mount 我的開發環境來進行測試,決心找出原因.
就卯起來看 nfs.
首先看了 /etc/init.d/nfs
發現可以在 /etc/sysconfig/network 中指定
MOUNTD_PORT=port_num
MOUNTD_NFS_V3=[auto/yes/no]
MOUNTD_NFS_V2=[auto/yes/no]
來決定 mountd 的 port 以及 nfs 支援版本
也可以 tune 效能之類的,這些只要參考 /etc/init.d/nfs 就可得知
接著發現 /var/log/message 有這樣的錯誤訊息
DNS forward lookup doesn’t match with reverse, 表示反查的時候失敗.
就更頭痛了,想說怎麼會跟 dns 又扯上關係…
利用 Google 搜尋,有看到一些資訊,可是覺得不是我想要的,例如改 /etc/hosts 或在 /etc/exports 裡面加選項…等等的.
後來,上廁所的時候靈機一動,想到,在 /etc/hosts 裡面加上 ip 以及主機名稱,強迫一定對應正確不就結了嗎??
果然一試成功…
^_^
Red Hat 開機的fsck時採自動修復
應該只有 Red Hat 或 Mandrake 才適用吧~
在 /etc/sysconfig/ 下新增一個 autofsck 的檔案
裡面填
AUTOFSCK_OPT=”-a”
AUTOFSCK_DEF_CHECK=yes
其實本來在預設 timeout 之後,就會幫你在 AUTOFSCK_OPT 填入 “-f”, 表示強制執行檢查
加上 -a 是表示說,自動幫你修復,而不問你任何問題.
詳細情況可以參考 /etc/rc.sysinit
在32 bit架構下Linux 檔案系統的限制
Linux 2.4 fs limitation on 32-bit arch
from : http://kt.zork.net/kernel-traffic/kt20031124_242.html#3
LVM之痛
前一陣子,在公司做過 LVM 實驗之後
發覺 LVM 真是一個不錯的東西,
可以把多個硬碟串成一個大的 volume group.
你可以把他想像成一個容量超大的 heap,而你可以任意向他索取空間(logical volume),也可以任意再 attach physical volume 上去增加 volume group 的容量.
也因此才把 LVM 應用到自己家裡的 server 上~
在應用之後,一切都非常順利
除了 logwatch 每天回報說 hdb 有問題之外.
這裡稍稍為我的 hdb 作一下介紹.
hdb 是我的 Quantum Bigfoot 2G 硬碟,這顆算是古董了吧
從 1997 年服役至今,陪伴我將近 7 年,沒有任何怨言.
以下為了方便稱呼,我把它命名為”小Q一號”.
就在前天,星期六~~
小Q一號突然出現了奇怪的聲音,當時我還不以為意的繼續使用電腦~
到了晚上要關機的時候,發覺小Q一號居然無法 sync,kernel 持續回報說無法驅動它.
此時,我才發現大事不妙,這種懊悔的感覺充斥在我的腦海裡.
我真的很後悔,為什麼以前都忽略了它對我的警告呢??
但是太遲了~~
我已經無法將小Q一號由我所串起的 volume group 中移除~~
由於隔天要很早起床去旅遊,只好先作罷,含淚睡去.
翌日的翌日,也就是今天.
我試圖換上我內人以前所用過的,同樣也是 Quantum Bigfoot 2G 的硬碟,小Q二號.
想說,讓它也披上 physical volume 的外衣,看是否可以騙過我的 server,但是不行,仍然無法啟動.
由於下午要出門到使徒家裡去,只好再次作罷,含淚出門.
剛剛,也就是吃完晚飯後,我上網找到一篇文章(這篇應該是由英文的HOWTO翻譯過來的).
提到了volume group損毀的處置方法:
1.如果physical volume(硬碟)還能動的話,就是先利用 pvmove 先確定該physical volume不再有資料.然後再使用 vgreduce 將該 physical volume 從 volume group 中移掉.
2.如果不幸,硬碟不能動的話,那就只能先替換上同型號的硬碟或更大的硬碟,並使用 vgcfgrestore 強制把設定資料寫到新的 physical volume 上,以回復正常,當然,這麼做是會掉資料的.
我,因為小Q一號已經無法動彈了,也就是說我只能用第二種方法了.
# vgcfgrestore -f /etc/lvmconf/vgtest.conf -i -d -v -n vg0 /dev/hdd1
-f 是指定 volume group 的設定檔檔名
-i 是忽略大小
-d 是 debug
-v 是 verbose
-n 是指明 volume group 的名稱
/dev/hdd1 則是表明新的 physical volume 名稱
就這樣,我終於救回了我的資料.
只是還不知道有哪些資料因此損失了~~
🙁
註:
physical volume: 通常指的是一個 partition, partition type 指定為 0x8e, 以 pvcreate 建立之.
volume group: 以一個或多個 physical volume 所組成的 group.
logical volume: 向 volume group 索取而取得的空間,你可以對此空間作格式化動作.若空間不足或過大,你也可以作動態增減.
讓你的 Apache 支援 SSL
Linux 版本 Red Hat 7.3
安裝:
確定有安裝 openssl 與 mod_ssl 相關套件.
步驟:
請切換到 /etc/httpd/conf 下
輸入 make server.crt
依照指示輸入答案後,目錄下應會產生 server.crt 與 server.key 兩個檔案
將 server.key 放到 ssl.key/ 下
將 server.crt 放到 ssl.crt/ 下
編輯 httpd.conf
作如下修改:
SSLCertificateFile /etc/httpd.conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/httpd.conf/ssl.key/server.key
重新啟動 httpd ,應該就可以了~
這樣子產生的認證在使用上,瀏覽器會提出警告,告知這個憑證並非放在一個具公信力的地方,容易造成使用者困擾.
因此仍要向具公信力的機構申請才是.
目前產生的認證,期限是一年,你可以編輯 Makefile ,找尋 -days 365
將其改為你所需要的天數即可.
若不使用 mod_ssl 提供的 Makefile
你也可以手動使用 openssl 指令來產生
步驟如下:
– 產生 .key (public)
openssl genrsa -des3 -out ca.key 1024
– 驗證 .key
openssl rsa -noout -text -in ca.key
– 產生 .crt (public)
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
– 驗證 .crt
openssl x509 -noout -in ca.crt
– 產生 .key (private)
openssl genrsa -des3 -out server.key 1024
– 驗證 .key
openssl rsa -noout -text -in server.key
– 產生 .csr
openssl req -new -key server.key -out server.csr
– 查看 .csr
openssl req -noout -text -in server.csr
– 產生 .crt
一種是使用 sign.sh, 它會依據 server.csr 來產生 server.crt , 但我怎麼找都找不到 sign.sh
以下是看 Makefile 而得來的
openssl req -new -key server.key -x509 -days 3650 -out server.crt
資料參考: 永遠的UNIX論壇 (http://www.fanqiang.com/)
lvm – simple usage
須將 partition type 設為 0x8e
pvcreate /dev/hdxn 初始化 lvm partition
vgcreate 建立 volume group
lvcreate 向 volume group 索取 logical volume
之後就可以去 format, 或 mount 或做些你要做的事情啦
lvremove 則是移除 logical volume
vgremove 則是移除 volume group
變更大小或屬性時,則使用 XXextend, XXchange….
Firebird on Linux
版本與環境
==========
Firebird: 1.0
OS: Red Hat Linux 9.0
安裝
====
請先連結到 http://sourceforge.net/project/showfiles.php?group_id=9028 這個網址
準備下載 RPM(For Red Hat, SuSE, Mandrake) 或 tarball(For any distribuation) 包.
這裡你會看到有兩個檔案
一個是 FirebirdCS-x.y.z.nnnn-xx.ixxx.rpm
一個則是 FirebirdSS-x.y.z.nnnn-xx.ixxx.rpm
這兩個有什麼差別呢??
所謂的 CS 就是 Classic, 較傳統的,之前,Firebird 都是掛在 inetd, xinetd 下,做為網路服務的
也就是 inetd / xinetd 負責傾聽網路是否有需求,有需求,再把 Firebird 叫起來,將需求轉交給 Firebird.
SS 則是 SuperServer, 啟動時就是獨立起來傾聽網路需求,如果有需求,自己就出來服務這個需求.
在官方網站裡面有對此作詳細的比較與說明.http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_ss_vs_classic
依據此文件,它是說 SuperServer 效率較好.
在這裡我選擇了 CS 版本的 RPM 來安裝.原因我會在”安全性議題”一節再說明.
接下來就是安裝啦.
RPM 版本就用 rpm -ivh FirebirdCS-x.y.z.nnnn-xx.ixxx.rpm
tarball 版本就先用 tar xzf Firebird-x.y.z.nnnn.src.tar.gz 解開,進入該目錄後,再執行 ./install.sh 即可
如果你是用 RPM 安裝的話,安裝以後的檔案都會放在 /opt/interbase 下.
管理
====
管理上,你可以從遠端用 GUI 的管理介面來管理.
也可以使用 Firebird 內附的 isql, gsec 來管理.
gsec 主要用來變更啟動密碼以及增加使用者等等的,除此之外,
Firebird 有提供一個不錯的 script 來幫助你變更啟動密碼.
指令名稱是: /opt/interbase/bin/changeDBAPassword.sh
只要依照指示即可,但有時會失敗,需要手動修改,這時候就要用到 gsec,步驟:
1. /opt/interbase/bin/gsec
2. > modify SYSDBA -pw your_password
3. > quit
4. 如果是用 SS 安裝的話,那麼你得要修改 /etc/init.d/firebird, 找到 ISC_PASSWORD, 修正之;用 CS 的話,請跳到下個步驟
5. 修改 SYSDBA.password, 基本上只要修改第二行即可.
6. 大功告成~
isql 則是 console 模式的管理工具,你可以使用 select / insert / delete / create database ….等等的SQL敘述來作管理.
也可以輸入 help 來看看你可以使用什麼指令.
安全性議題
==========
雖然是一套發展了很久的 Database,但是在我看來,他的安全性有待加強~
首先是 /etc/init.d/firebird 與 /opt/interbase/SYSDBA.password, 密碼以明碼形式存放在檔案中, 如果權限沒設為 root only 的話,密碼很容易被竊取,長度也不能超過8碼(真懷疑預設的密碼masterkey怎麼設進去的).
再來就是設定中,缺少網路控制的設定,也就是無法指定此 server 僅限哪個網段的人使用,也不支援 SSL 之類的設定,如此一來我就不太敢用 SS 來安裝了.
因為這些因素,所以我安裝 CS.我自己的設定大致如下:
1.增加一個名為 firebird 的 user (useradd firebird),此動作同時會增加一個 firebird 的群組.
2.將 /opt/interbase 的所有檔案的 owner 改為 firebird (chown -R firebird:firebird /opt/interbase)
3.修改 /etc/xinetd.d/firebird,在大括號裡面加上
user=firebird
only_from=192.168.0.0 127.0.0.1
以避免使用 root 權限,並允許 192.168.0.0 這個網段以及本機可以使用這個服務.本來打算要使用 tcpwrapper 來作控制的,如此一來就可以使用 /etc/hosts.allow 和 /etc/hosts.deny 來作控制.但是我加上去之後卻會無法連結,只好作罷.
找到 xinetd 的 pid,並強迫 xinetd 重新載入組態即可.
#ps -ef|grep xinetd
#kill -HUP xinetd_pid
4.將 /etc/xinetd.d/firebird, /opt/interbase/SYSDBA.password 的權限改為 0400, owner read-only (chmod 0400 /etc/xinet.d/firebird /opt/interbase/SYSDBA.password)
5.變更資料庫存放路徑的 owner 與權限,假設資料庫放在/var/database 下,那麼就
#chown -R firebird:firebird /var/database
#chmod -R 0770 /var/database
6.再將必要用到 Firebird 的使用者加入 firebird 群組中.
7.變更管理者密碼.
其他相關的安全性議題可以參考:
http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=art_fb_security
測試連接
========
執行 /opt/interbase/bin/isql 以後
在 console 輸入
>connect ‘localhost:/opt/interbase/examples/employee.gdb’;
如果不能連接,會出現錯誤訊息.
Firebird 1.5 RC5
================
在這一個版本裡面,安全性議題改進了不少,configuration file 更名為 firebird.conf
裡面也提供了 RemoteBindAddress 這個選項可以指定.
預設安裝路徑也變更為 /usr/local/firebird.
所以 1.5 版應該是一個安全性較高的版本,請耐心等候正式版的推出.
.Net Data Provider
==================
除了 ODBC 之外,官方網站也提供了.Net Data Provider,顧名思義就是專門給 ADO.Net 用的.
若你是使用 .Net framework 1.1 的話,需要先行安裝 msvcr70.dll,請先用本機搜尋確定一下是否有此檔案.
如果沒有,用 google 找一下,可以找到下載點 (Microsoft 未提供)
然後再安裝,一切就會很順利.
基本上,裡面的類別都是直接由 ADO.Net 的 Connection, DataSet…等等類別繼承出來,所以熟悉 ADO.Net 的話,在使用上並沒有什麼困難.
另外裡面也提供了 HtmlHelp 的說明檔以及範例程式,各位可以自行參考之.
Custom your Knoppix
預備工作 – 安裝 cloop
=====================
下載點: http://packages.qa.debian.org/c/cloop.html
裡面提供了 create_compressed_fs, extract_compressed_fs 這兩個工具,
以及 cloop.o 這個 driver(或叫作module)
在 RedHat 下編譯時,請先把 compressed_loop.c 裡面對 REDHAT_KERNEL 的註解拿掉.
編譯以後,再建立 mknod /dev/cloop b 240 0
參考資料
========
基本上我的步驟都是參考這些文章:
http://debian.linux.org.tw/pub/3Anoppix/howto.txt
http://penguin.im.cyut.edu.tw/~s9054494/document/mkcd/mkcd_001.php
http://www.cyut.edu.tw/%7eckhung/b/sa/knoppix.shtml
ftp://cle.linux.org.tw/pub/KNOPPIX/bv1al/knoppixDIY-2002-12-15.html
http://www.xfocus.net/releases/200306/a544.html
http://www.knoppix.net/docs/index.php/KnoppixCustomKernelHowto
我的步驟
========
1.確定有 7G 以上的空間
2.下載 cloop 並編譯,請參考上面.
3.把下載回來的 Knoppix ISO 檔案掛載起來 (或是我做的 iso)
mount -t iso9660 -o loop your_knoppix.iso /mnt/cdrom
3.解開 KNOPPIX 這個檔案為 .iso
extract_compressed_fs /mnt/cdrom/KNOPPIX/KNOPPIX > /space/knoppix.iso
4.把 3 解開的檔案掛載起來
mkdir /mnt/knoppix.sys
mount -t iso9660 -o loop /space/knoppix.iso /mnt/knoppix.sys
5.建立所需目錄並把剛剛掛載起來的 iso 內容複製過來
mkdir -p /space/knoppix/{source,master}/KNOPPIX
cp -Rp /mnt/knoppix.sys/* /space/knoppix/source/KNOPPIX
cp -Rp /mnt/cdrom/KNOPPIX/* /space/knoppix/master/KNOPPIX
cp /mnt/cdrom/KNOPPIX/{autorun.inf,autorun.bat,cdrom.ico,index.html} /space/knoppix/master # 這些檔案可以自己改!!
6.umount 兩個 iso 檔
umount /mnt/cdrom
umount /mnt/knoppix.sys
7.進行修改
chroot /space/knoppix/source/KNOPPIX
mount -t proc /proc /proc
export LC_ALL=”en_US”
export LANG=”en_US”
如果需要上網的話,修正一下 /etc/resolv.conf
加上 nameserver 172.16.0.12 ( 或 168.95.1.1 都可以)
接著就可以利用 debian package 系統進行修改了
dpkg -l –> 列出所有套件
apt-get install your_package_name –> 安裝某套件
apt-get remove your_package_name –> 移除某套件
dpkg –purge your_package_name –> 清除該套件的設定…等等
8.修改完成
apt-get clean
updatedb
umount /proc
exit
9.修改開機設定
cd /space/knoppix/master/KNOPPIX
mount -o loop boot.img /mnt/floppy
cd /mnt/floppy
修改 syslinux.cfg, f2, boot.msg 這幾個檔案即可
10.燒錄
mkisofs -R -l -V “KNOPPIX” -hide-rr-moved -v /space/knoppix/source/KNOPPIX | create_compressed_fs – 65536 > /space/knoppix/master/KNOPPIX/KNOPPIX
cd /space/knoppix/master
mkisofs -l -r -J -V “KNOPPIX” -hide-rr-moved -v -b KNOPPIX/boot.img -c KNOPPIX.cat -o /space/knoppix/my_iso.iso /space/knoppix/master/
小秘訣:如果已經在硬碟裡面作過一次了,那麼只要不把檔案殺掉,就可以直接從 7 那個步驟開始.
更換 Kernel
===========
1.請參考上面步驟,一直進行到 7 這個步驟完 (若之前有做過一次,就直接跳到 7,把 7 作完即可)
2.將新 Kernel 的tarball複製到 /usr/src 下,並解開
3.進入新 kernel 目錄,將 /usr/src/linux/.config (原kernel路徑)複製過來
4.make oldconfig
5.patch -p1 < ../knoppix-kernel.patch
6.make dep bzImage modules modules_install
7.刪除原 kernel(問號部分表示舊kernel版本)
rm -rf /usr/src/linux-??????
rm -rf /lib/modules/linux-??????
rm -rf /boot/*
rm -f /vmlinuz
8.複製新 kernel (問號部分表示新kernel版本)
cp System.map /boot/System.map-??????
cp arch/i386/boot/bzImage /boot/vmlinuz-??????
cd /boot
ln -s System.map-?????? System.map
ln -s vmlinuz-?????? vmlinuz
cd /
ln -s boot/vmlinuz-?????? vmlinuz
9.重新編譯 cloop.o 這個模組
同樣參考上面的位址下載,並編譯,安裝
10.修改 boot.img
先利用另外一個 console 將 /space/knoppix/master/KNOPPIX/boot.img 複製到 /space/knoppix/source/KNOPPIX/var/tmp
再切回原來已經 chroot 的 console,開始動手
cd /var/tmp
mkdir boot mroot
mount -t vfat -o loop boot.img boot
cp boot/miniroot.gz .
gzip -d miniroot.gz
mount -t ext2 -o loop miniroot mroot
將剛剛編譯好的 cloop.o 複製到 mroot/modules/ 下 (選擇覆蓋),然後再包回去
umount mroot
gzip -9 miniroot
接著把 miniroot.gz 以及新 kernel 複製到 boot 目錄
cp miniroot.gz boot
cp /boot/vmlinuz-?????? boot/vmlinuz
umount boot
再利用另外一個 console, 把剛剛製作好的 boot.img 複製回去
cp /space/knoppix/source/KNOPPIX/var/tmp/boot.img /space/knoppix/master/KNOPPIX/boot.img
把這些殘骸清除掉
rm -rf boot mroot miniroot.gz boot.img
11.跳回上面的 8 繼續做(非修改kernel, 而是"我的步驟 – 8" )
12.大功告成
加上開機 script
===============
跟一般 linux 可以說是非常類似
不過這裡有個更好的機制
只要把 script 放在 /etc/rc.boot 中,開機時就會執行 /etc/rc.boot 目錄內所有的 script