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

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

VFP on Linux – 與 Wine 共舞的樂章

寫在前面
========
老實說,這篇文章充其量,祇能說是整理而已.
純粹去網路找文章,實作,遇到與文章不符的地方,就自己動手找資料,實驗,找答案,就這樣而已.
我想,大概有百分之五十是參考資料,百分之四十是翻譯;剩下百分之十,才是我的心得與實作過程.
Wine 的歷史
===========
請直接參考 2003/08/15 的 Wine Traffic
http://kt.zork.net/wine/wn20030815_183.html#5
安裝,from tarball
=================
以 tar xzf 解開之後,進行 patch, patch 檔網址在此:
http://www.paulmcnett.com/vfp/wine/vfpwinepatchwinsize
這個 patch 檔主要是修正 WAIT WINDOW 和 TooltipText window 無法正確顯示的問題.
Patch 方法:
cat vfpwinepatchwinsize | patch -p1
也可以手動編輯 wine/dlls/x11drv/winpos.c
在約 887 行的地方,找到
BOOL
X11DRV_SetWindowPos( WINDOWPOS *winpos )
這個 function,並在裡面的
TRACE(
“hwnd %p ……
之前加上
/* This is needed to flush pending X ConfigureNotify events on this window */
MsgWaitForMultipleObjectsEx( 0, NULL, 0, 0, 0 );
存檔以後即可.
執行 ./tools/wineinstall
它會出現訊息,建議不要以 root 身分來安裝
如果你堅持要以 root 身分來安裝, 請修改此 script,讓他忽略此訊息
(178~184 行,前面加上’#’ )
再執行此 script.
當然如果要用別的身分來安裝,請用 su 指令切換到其他 user 帳號
或重新以其他 user 帳號登入即可.
此 script會執行 ./configure,設置必要的設定檔以及路徑.
然後再執行
make depend && make && make install
進行編譯及安裝工作.
若以其他user進行安裝的話,就依照 script指示即可
wine 最後會以 SUID 形式存在.
RPM 安裝
========
請到官方網站下載符合你 Linux distribution 的 RPM 版本
然後執行 rpm -ivh wine-2003xxxx.ix86.rpm
即可~
但要注意的是,不保證可以用,建議還是以 tarball 安裝較佳.這樣也可加上 patch.
Usage
=====
winhelp, notepad, regsvr32, regedit 這幾個不用說明,就跟Windows 上的一樣~
progman 的話就跟 Windows 3.1 上的 Progman 一樣,執行以後,
有用過 Windows 3.1 的人,大概會很懷念~
winefile 則是檔案總管
wcmd 是”命令提示字元”
uninstaller 則是”新增/移除程式”
winecfg 則是調校 wine 設定的程式
執行軟體時,以 wine 執行之,假設你複製了小算盤(calc.exe)進去
那麼就輸入 wine calc.exe 即可~
安裝軟體,也一樣,執行 setup 即可: wine setup.exe
Configuration
=============
“Version”Section 的 Windows key 值改為 win2k
“DllOverrides” Section 中所有 key 值改為 “native, builtin”
此外把你自己 Winnt\system32 或 Windows\system 下的
OLEAUT32.DLL
COMMDLG.DLL
COMDLG32.DLL
SHELL.DLL
SHELL32.DLL
SHFOLDER.DLL
SHLWAPI.DLL
SHDOCVW.DLL
ADVAPI32.DLL
MSVCRT*.DLL
VFP6*.DLL
ODBC32.DLL
ODBC32GT.DLL
ODBC16GT.DLL
ODBCINT.DLL
ODBCCONF.DLL
都複製到 ~/c/windows/system 下
此外,OLE32.DLL, ADVAPI32.DLL, NTDLL.DLL 是不需要複製的,因為會造成無法執行.
REGEDIT.EXE 也請複製到 ~/c/windows 下,因為我們要把 ODBC 的 Registry import 進去.
你也許會問 wine 不是提供了 regedit.exe 嗎?可是根據我自己的試驗,它並無法匯入.
請在 Windows 下執行 regedit.exe 將
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers
以及
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Microsoft Visual FoxPro Driver
這兩個機碼都匯出.分別存為 ODBCDrivers.reg 及 VFPDriver.reg
然後編輯 ODBCDrivers.reg ,將其他 Driver 都刪掉,只留下 Microsoft Visual FoxPro Driver 即可
接著就拿到 Linux 上,執行 regedit.exe 匯入囉.
開始使用 VFP
============
我自己是建議不要用 setup 安裝,網路上的一些狐友也這樣說
就是用 copy 的方式把 Program Files 目錄下的 VFP 目錄直接複製到 ~/c/Program Files 下
再參考上面的 Configuration 一節作修正.
接著就可以執行 wine VFP6.EXE 啦~~
進入以後,你會發現 command window 無法顯示游標,請用 Alt+TAB 切到別的視窗, 再按一次 Alt+TAB 切回 VFP,即可.
Issue
=====
Declare DLL ok
大部分函數都已經實作出來了~
可能會發生的問題,多半是路徑問題,此問題可以藉著修改 ~/.wine/config 來解決.
Record locking
20030318 版之前是有問題的,但之後的版本就都可以了
ActiveX
有些 ActiveX 會無法使用,那是因為有些 function 還沒實作出來的原因.
中文
對我們來說,這是最大的問題了
Linux 中雖然已經支援中文,可是 wine 看來是還未支援,也因此,文字無法輸入到 VFP 視窗中.
此外,字型名稱也是一大問題,由於小弟對中文字型設定這部分還不是很熟
再加上目前 X 組織又提出一個新的技術 Xft 要解決字型名稱問題,所以請期待吧~
其他
沒有 HTML Help.
在 Class Designer/Form Designer 裡面無法 copy/paste 物件.
Undocked windows 需要被設定為 undockable (在Title band 按下滑鼠右鍵) 或他們無法取得 focus.
EULA(End User Licence Aggreement) – Microsoft 的阻撓
====================================================
以下大致從 http://www.linuxtransfer.com/h/misc_vfplinuxjackofhearts.htm 譯出.
僅將大意譯出,如果譯的不好,還請見諒.
事情是這樣開始的,就在今年的四月左右,Ken Levy,Whil Hentzen在展示一個關於 VFP on Linux 的 Demo 之後,他接到一通來自微軟的電話,告知他說,這樣的一個 Demo 將可能會與 VFP EULA 衝突.後來這件事情就慢慢的擴散….
什麼是 EULA ?? EULA 就是 End User Licence Aggreement 的縮寫.
以下就是與 VFP on Linux 有關的 VFP8 EULA條款:
3.1 General Distribution Requirements.
(a) If you choose to redistribute Sample Code, or Redistributable Code (collectively, the “Redistributables”) as described in Section 2, you agree:
(i) except as otherwise noted in Section 2.1 (Sample Code), to distribute the Redistributables only in object code form and in conjunction with and as a part of a software application product developed by you that adds significant and primary functionality to the Redistributables (“Licensee Software”);
(ii) that the Redistributables only operate in conjunction with Microsoft Windows platforms;
在 VFP 社群要求微軟作進一步說明的一星期後,這是微軟的說明(澄清):
Visual FoxPro was designed and tested for use in creating applications that run on the Microsoft Windows platform; the same applies to the components that are provided to developers for redistribution with Visual FoxPro-based applications. If a developer wishes to distribute the Visual FoxPro runtime with an application, the runtime may only operate in conjunction with a Microsoft Windows platform. As with any contract, you should seek your own legal counsel’s advice when interpreting your rights and obligations under the Visual FoxPro End User License Agreement.
大意是,VFP本身是在 Windows 平台上發展及測試的,和VFP一起提供給開發者散佈的元件也是.如果開發者想要將VFP runtime和應用程式一起發佈,runtime 應該只能(may only)在Microsoft Windows 平台上運行.如同任何的合約,你應該尋求你的法律顧問的建議.
在這篇文章中,http://www.linuxtransfer.com/h/misc_vfplinuxjackofhearts.htm
提出了三點疑問,
1.Running the VFP Development Environment on Linux
VFP 開發者想要在一台 Linux 機器上將 VFP 當作一個開發環境.
這個企圖正是 McNett’s FoxTalk 文章的主旨,而且是Levy舉辦該活動的主題,卻又宣告他是與VFP7 和 VFP8 的 EULA 衝突,不允許公開展示.
2.Deploying custom VFP applications on Linux workstations
VFP 如同大家所知的,AP都是要與 runtime 一同包裝,並安裝到客戶那兒.以前很簡單,都只要幾個DLL檔案就行了,現在,最後一版的VFP,都是以MSM 形式給Installer tool使用.只有這些 MSM 檔案列在 REDIST.TXT 中,卻沒有明確的指定是哪些VFP DLL 檔案.
所以只要用這個方法是不是就可以避免了呢?
第一個問題是,如果發布自訂的VFP DLLs 在 EULA 裡是不被允許的,那麼
(1)如果不用 Windows Installer 技術的話,那麼市場上還有許多不使用 Windows Installer 技術的安裝工具,這些工具是不是就與 VFP EULA 衝突了呢??
(2)為什麼從6.0 到7.0,這樣的一個改變,卻沒有任何公告??就正常來說,一個產品的改變應該會被公告於 “Read Me” 或 “What’s New” 檔案中.可是這卻被放到 EULA 中,而缺乏任何說明.
ok,假設VFP EULA 禁止散佈 VFP DLLs,只能使用 Windows Installer 技術.
總之,看起來,Microsoft 就是想把它們的應用程式綁在他們的 OS 上.
3.The Business Issues
Microsoft 之所以需要 VFP, FoxBase 和 FoxPro, 主要就是為了要打擊Desktop database市場上其他的對手.那個時候,幾乎所有產品都不需要 runtime license,就這樣,一直延續到現在.Microsoft長期忽略 VFP,大概與Business Model有關,他們寧可開發者用VB 和 SQL Server,這樣就可從 SQL Server 那兒收到 licenses 費用.
VFP 可以在 Linux 上執行是非常吸引人的,想想一套便宜(或免費)的作業系統加上一個不貴又有威力的開發工具,和一個便宜(或免費)的後端資料庫,是多麼的不錯.很簡單的可以看出來為什麼 Microsoft 要試著去對抗他,並強加了和以往不一樣的的授權限制.
參考網址: (謝謝Ruey提供部份資料)
===============================
安裝:
http://www.pinpub.com/FT/FTmag.nsf/0/843B563D8FB169F485256D6700710C3A
http://www.paulmcnett.com/vfp/vfp7wine.html (安裝)
http://www.paulmcnett.com/vfp/wine/foxtalk1.html
相關資料收集:
http://fox.wikis.com/wc.dll?Wiki~VFPandLinux~VFP
http://www.associateddata.co.uk/VFPLinux.htm
微軟的恫嚇與EULA的相關討論:
http://www.linuxworld.com/story/32665.htm
http://mail.linux.ie/pipermail/ilug/2003-April/002197.html
http://www.linuxtransfer.com/h/misc_vfplinuxjackofhearts.htm
http://www.linuxjournal.com/article.php?sid=6869&mode=thread&order=0
Wine 官方網站 Guide:
http://www.winehq.com/Docs/wine-user/
Wine 應用程式相容性:
http://appdb.winehq.com/
http://frankscorner.org/
Wine 所收錄的 VFP Profile:
http://appdb.winehq.com/appview.php?appId=296;PHPSESSID=9e9d479fa55fb6c759ad092fd5aa3184

CD Writing HOWTO 讀後心得

原文:http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/CD-Writing-HOWTO.html
可以用 cdrecord -scanbus 來檢閱可用的裝置
Linux kernel 版本需高於 2.0.36 或 2.2.11
需要檢查 /dev/ 下是否有 sg device
若沒有,可以用 mknod sg0 c 21 0 來建立
若有多個,則 mknod sg1 c 21 1, mknod sg2 c 21 2 ….
需要以下 modules
scsi_mod
sg
sr_mod
loop
iso9660
ide-scsi
需要調整 cd-writer 所掛入的 driver(module)
– 若是 built-in, 在 lilo, kernel 啟動參數的地方加上 hdx=ide-scsi
– 若是 module, 則在 /etc/modules.conf 中加上
options ide-cd ignore=hdx
alias scd0 sr_mod
pre-install sg modprobe ide-scsi
pre-install sr_mod modprobe ide-scsi
pre-install ide-scsi modprobe ide-cd
假設 /dev/scd0 為 cd-writer
也可為 /dev/scd0 建立 symbolic link 到 /dev/cdrom 下
ln -s /dev/scd0 /dev/cdrom
工具軟體:
1.mkisofs
2.cdrecord
3.cdrdao
4.VCD
(進度顯示則可參考一些 GUI 的工具: xcdroast, BurnIT, cdtux )
一般來說 620MB on disk 約等同於 650MB on CDROM
製作 image 的方法:
mkisofs -r -o cd_image 目錄/
燒錄的方法:
cd-r 的指令是,
cdrecord -v speed=n dev=scsi_bus,scsi_id,scsi_lun -data cd_image
cd-rw 則再多加上 blank=… 以清除原先內容.
一般都是先 mkisofs, 再呼叫 cdrecord.
以下指令則是先確認來源的大小之後,再行燒錄:
#IMG_SIZE=`mkisofs -R -q -print-size 目錄/ 2>&1 | sed -e “s/.*=//”`
#echo $IMG_SIZE
[ “0$IMG_SIZE” -ne 0 ] && mkisofs -r 目錄/ | cdrecord speed=n dev=0,6,0 tsize=${IMG_SIZE}s -data –
音樂:
可先用 sox 把 wav 轉為 cdr,亦可直接燒錄:
cdrecord -v speed=n dev=0,6,0 -audio 1.cdr 2.cdr …
cdrecord -v speed=n dev=0,6,0 -audio 1.wav 2.wav …
cdrecord -v speed=n dev=0,6,0 -audio 1.au 2.au …
燒 mp3, 建議用 speed=1,避免燒太快,而使得 mpg321 來不及轉換資料.另外一個原因則是 mpg321 佔用CPU資源太多.
for I in *.mp3
do
mpg321 -cdr – “$I” | cdrecord -audio -pad -nofix –
done
cdrecord -fix
對燒:
cdrecord -v dev=0,6,0 speed=2 -isosize /dev/scd0
先放為 image 的話
dd if=/dev/scd0 of=cd_image
cdrecord -v dev=0,6,0 speed=2 -isosize cd_image
UDF 不知是否好用??
燒錄 cd-rw 時,可以用 blank=fast, 等同於快速抹除 CDRW.
續燒的方法(multi-session)
NEXT_TRACK=`cdrecord -msinfo dev=0,6,0`
echo $NEXT_TRACK
mkisofs -R -o cd_image2 -C $NEXT_TRACK -M /dev/scd0 目錄/