顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


文章 - k1951223

頁: [1] 2
1
Network 討論版 / 如何指定從特定IP對外連線
« 於: 2007-06-13 17:41 »
感謝學長的回答
   在連到不同的網段時,應該可以使用學長的方法,

若是在相同網段的IP 呢,例如要連到 192.168.1.150
預會會由 192.168.1.50 連到 192.168.1.150
要如何設定由 192.168.1.100 連外

若是只要連到特定IP時使用 192.168.1.100 連外
一般情況下還是使用192.168.1.50 連外,是否可以作到

註:  ip route replace default via x.x.x.x dev eth1
    這行指令好像是重設預設的GW 吧

2
Network 討論版 / 如何指定從特定IP對外連線
« 於: 2007-06-13 13:56 »
各位學長
   有個問題想請教一下,就是在同一台機器上
有二個同網段的IP (在一張網路卡或二張網路卡上)
在對外連線時,是否可以指定使用那個 IP 對外連線

eth0: 192.168.1.50
eth1: 192.168.1.100

對外連線時都從192.168.1.50 出去,
若是要指定那改 192.168.1.100 出去,是否可以作到
要如何設定

3
參考 對岸的網站 http://www.fanx.org.cn/node/42
可以把 98 的開機片也作進USB 開機,

4
酷!學園 精華區 / 使用 PHP 發送 MSN 訊息
« 於: 2007-05-21 16:53 »
感謝 abelyang 學長的回覆

非常感謝 pank 學長的分享

5
酷!學園 精華區 / 匯整安裝資訊及問題
« 於: 2007-05-17 13:46 »
感謝各位學長的開發及分享和測試
下列是我整理之前的文章,所寫的安裝程序,以方便初學者使用

感謝 twu2 學長的開發和公佈給大家使用

  在 Google Code 開一個 project: phpmsnclass, 以後程式碼會丟到上頭去, 檔案請直拉去那邊下載就可以了.
http://code.google.com/p/phpmsnclass/



感謝 paulso 學長發表環境安裝所需的套件資料

實在是太棒了, 我使用 sample.php 來試
要使用 MSNP15 就要先裝 mhash, mcrypt, 我是用 CentOS 4.4 的

引言回覆:


Site:
http://phprpms.sourceforge.net/mhash
http://phprpms.sourceforge.net/mcrypt
http://rpmfind.net/linux/rpm2html/search.php?query=libmcrypt.so.4

wget http://jaist.dl.sourceforge.net/sourceforge/phprpms/mhash-0.9.2-1.i386.rpm
wget http://jaist.dl.sourceforge.net/sourceforge/phprpms/php-mhash-4.3.9-3.2.1.i386.rpm

rpm -ivh *.rpm

wget ftp://rpmfind.net/linux/PLD/dists/ac/ready/i386/libmcrypt-2.5.7-6.i386.rpm
wget http://nchc.dl.sourceforge.net/sourceforge/phprpms/php-mcrypt-4.3.9-3.2.1.i386.rpm

rpm -ivh libmcrypt-2.5.7-6.i386.rpm
rpm -ivh php-mcrypt-4.3.9-3.2.1.i386.rpm


也可以利用 yum -y install mhash php-mhash
及 yum -y install libmcrypt php-mcrypt 來安裝所需要的套件



問:如何在 linux 下安裝 7-zip
答: 請在 http://www.7-zip.org/download.html 下載 7-Zip 的 linux 版本

問: 如何 在linux下使用 7-Zip 壓縮(含分割)解壓縮
答:
Linux:
語法
         7z [adeltux] [-] [SWITCH] <ARCHIVE_NAME> <ARGUMENTS>...

範例1
         #7z a file dir
範例1解說
         將dir這個目錄壓縮成file.7z,a代表壓縮的意思
範例2
         #7z a -v25m file dir
範例2解說
         將dir這個目錄壓縮成file.7z.001 file.7z.002.....,每個檔案為25M
                             
[FAQ]
怎麼解壓縮7z.001 7z.002...的檔案?
只要解壓縮7z.001就可以了,不用每個檔案都解開來

在Linux平台底下我該怎麼解壓縮7z的檔案?
先安裝一份p7zip,然後執行7z x file.7z解壓縮你要的檔案

在Windows平台底下我該怎麼解壓縮7z的檔案?
安裝7-Zip,或者其它任何支持7z的壓縮軟件,比如:WinRAR

參考來源:
http://www.7-zip.org/zh-cn/7z.html
http://zh.wikipedia.org/wiki/7z



感謝 twu2 學長寫的安裝說明

安裝說明:

* 建立下面的目錄:
代碼:
mkdir /var/spool/msnbot
mkdir /var/spool/msnbot/log
mkdir /var/spool/msnbot/spool
chmod 777 /var/spool/msnbot/spool
chmod o+t /var/spool/msnbot/spool


* 把 config.php , msnbot.php , msnbot.sh 與 msn.class.php 放到 /var/spool/msnbot 的目錄下頭, 把 msnbot.sh 設成可執行:
代碼:
chmod +x /var/spool/msnbot/msnbot.sh


* 修改 msnbot.php 的內容, 如果有必要, 可以修改 processMsg() 的內容, 改成你自訂的處理方式.
* 使用 msnbot.sh 做成啟動的 script, 讓 msnbot.php 程式在開機之後就執行.
* 如果有需要傳送訊息, 直接在 /var/spool/msnbot/spool 目錄下, 產生一個副檔名為 .msn 的文字檔, 第一行的內容是:
代碼:
TO: email1,email2


表示要接受訊息的使用者列表. 第二行之後是所要送出的訊息. 然後把檔案的屬性改成 0666. 可以參考 msnsendmsg.php 的做法.

詳細的內容... 請自行參考程式碼吧.

本文同步發表於: http://blog.teatime.com.tw/1/post/218


問: 如何設定發送msn的帳號
答:
設定發送程式使用的 MSN 帳號及密碼,請編輯 confg.php 設定帳號/密碼/顯示名稱等資訊,
再配合 WEB2MSN 及 WGET 指令,就可以只要一台電腦安裝,所有的機器都可以發MSN的訊息通知
利用 /var/spool/msnbot/msnbot.sh start 指令啟動 msbbot 程式監控 /var/spool/msnbot/spool 目錄



感謝 pank 學長發佈的 Web2Msn 配合使用更方便
用這個程式做了一個 WEB2MSN http://pank.org/msn/
Source http://pank.org/msn/web2msn.tgz
建議再加一個功能, 當 user 新加入 MSN bot 為連絡人時,
MSN bot 應該會收到一個確認的訊息, 若能自動回應, 就很讚了



感謝 twu2 解決在 php4 下使用的問題 , 在 php4 執行須要作下列修改
剛剛試了一下, 請把 msnbot.php 中, 後頭那些 function, 全部都搬到前面去放.
在 PHP4 中, 把 function 寫在使用之後, 會無法呼叫. 不過在 PHP5 中並不會. (真是奇怪, 我記得順序是沒有差別的啊!)



當完成上列的安裝程序後,就可以利用 網頁 或者 wget 指令 在任何一台機器,
發送訊息通知,到指定的 MSN 帳號了



另外請問 pank 學長你的網頁 http://pank.org/msn/ 上有可以查詢英文和中文的翻譯,
可否提供一下要如何安裝及設定



還有請問一下 abelyang 學長,你秀的操作結果,可以提供部份的指令使用,
是否方便提供要如何安裝及設定

6
酷!學園 精華區 / Linux 實作 VLAN ( 802.1q )
« 於: 2006-11-24 22:09 »
配合 Linux 實作 VLAN ( 802.1q )
http://phorum.study-area.org/viewtopic.php?t=43041
可以增加不少功能和彈性

資料來源 http://windtear.net/archives/2005/07/18/000720.html


vconfig - Linux 下的 802.1q 實現配置工具
http://windtear.net/archives/2005/07/18/000720.html

研究過 /sbin/ifup 的話 會發現 ifup 腳本有 vconfig 和 VLAN 支持的判斷
(當時搞 ifup 的 bridge 支持也patch過這個腳本
 2005-04-08 19:01 hBridge - Linux Ethernet bridging)

# Ethernet 802.1Q VLAN support
if [ -x /sbin/vconfig -a "${VLAN}" = "yes" ]; then
    if echo ${DEVICE} | LANG=C egrep -v '(:)' | LANG=C egrep -q 'eth[0-9][0-9]*\.[0-9][0-9]?[0-9]?[0-9]?' ; then
        if [ ! -d /proc/net/vlan ]; then
            if modprobe 8021q >/dev/null 2>&1 ; then
                /sbin/vconfig set_name_type DEV_PLUS_VID_NO_PAD >/dev/null 2>&1 || {
                    echo $"Could not set 802.1Q VLAN parameters."
                }
            else
                echo $"No 802.1Q VLAN support available in kernel for device ${DEVICE}"
                exit 1
            fi
        fi
        VID="`echo ${DEVICE} | \
            LANG=C egrep 'eth[0-9]+\.[0-9][0-9]?[0-9]?[0-9]?$' | \
            LANG=C sed 's/^[a-z0-9]*\.//g;s/^0*//'`"
        PHYSDEV="`echo ${DEVICE} | \
            LANG=C egrep 'eth[0-9]+\.[0-9][0-9]?[0-9]?[0-9]?$' | \
            LANG=C sed 's/\.[a-z0-9]*$//g'`"

        is_available ${PHYSDEV} || {
            if [ "$?" = "1" ] ; then
                echo $"$alias device ${DEVICE} does not seem to be present, delaying initialization."
                exit 1
            else
                exit 0
            fi
        }

        # Link on Physical device needs to be up but no ip required
        check_device_down ${PHYSDEV} && {
            ip -o link set dev ${PHYSDEV} up
        }

        if [ ! -f /proc/net/vlan/${DEVICE} ]; then
            /sbin/vconfig add ${PHYSDEV} ${VID} || {
                (logger -p daemon.info -t ifup \
                    $"ERROR: could not add vlan ${VID} as ${DEVICE} on dev ${PHYSDEV}" &)&
                echo $"ERROR: could not add vlan ${VID} as ${DEVICE} on dev ${PHYSDEV}"
                exit 1
            }
        fi

        if [ -f /proc/net/vlan/${DEVICE} ]; then
            case "$REORDER_HDR" in
                yes|1)
                    /sbin/vconfig set_flag ${DEVICE} 1 1 || {
                        (logger -p daemon.info -t ifup \
                            "WARNING: vconfig not able to enable REORDER_HDR on ${DEVICE}" &)&
                    }
                    ;;
                no|0)
                    /sbin/vconfig set_flag ${DEVICE} 1 0 || {
                        (logger -p daemon.info -t ifup \
                            $"WARNING: vconfig not able to disable REORDER_HDR on ${DEVICE}" &)&
                    }
                    ;;
            esac
        fi
    fi
fi


vconfig 就是 Linux 下 802.1Q VLAN 實現配置工具
Name        : vconfig                      Relocations: (not relocatable)
Version     : 1.6                               Vendor: Red Hat, Inc.
Release     : 2                             Build Date: Sat 01 Feb 2003 06:20:05 AM CST
Install Date: Tue 01 Jun 2004 04:55:57 PM CST      Build Host: porky.devel.redhat.com
Group       : System Environment/Base       Source RPM: vconfig-1.6-2.src.rpm
Size        : 170822                           License: LGPL
Signature   : DSA/SHA1, Mon 24 Feb 2003 02:05:29 PM CST, Key ID 219180cddb42a60e
Packager    : Red Hat, Inc.
URL         : http://www.candelatech.com/~greear/vlan.html
Summary     : Linux 802.1q VLAN configuration utility.
Description :
The vconfig program configures and adjusts 802.1q VLAN parameters.
/sbin/vconfig
/usr/share/doc/vconfig-1.6
/usr/share/doc/vconfig-1.6/CHANGELOG
/usr/share/doc/vconfig-1.6/README
/usr/share/doc/vconfig-1.6/contrib
/usr/share/doc/vconfig-1.6/contrib/CVS
/usr/share/doc/vconfig-1.6/contrib/CVS/Entries
/usr/share/doc/vconfig-1.6/contrib/CVS/Repository
/usr/share/doc/vconfig-1.6/contrib/CVS/Root
/usr/share/doc/vconfig-1.6/contrib/README
/usr/share/doc/vconfig-1.6/contrib/vlan_2.2-full.patch
/usr/share/doc/vconfig-1.6/contrib/vlan_2.2-module.patch
/usr/share/doc/vconfig-1.6/vlan.html
/usr/share/doc/vconfig-1.6/vlan_test.pl
/usr/share/man/man8/vconfig.8.gz

% vconfig
Expecting argc to be 3-5, inclusive.  Was: 1

Usage: add             [interface-name] [vlan_id]
       rem             [vlan-name]
       set_flag        [interface-name] [flag-num]       [0 | 1]
       set_egress_map  [vlan-name]      [skb_priority]   [vlan_qos]
       set_ingress_map [vlan-name]      [skb_priority]   [vlan_qos]
       set_name_type   [name-type]

* The [interface-name] is the name of the ethernet card that hosts
  the VLAN you are talking about.
* The vlan_id is the identifier (0-4095) of the VLAN you are operating on.
* skb_priority is the priority in the socket buffer (sk_buff).
* vlan_qos is the 3 bit priority in the VLAN header
* name-type:  VLAN_PLUS_VID (vlan0005), VLAN_PLUS_VID_NO_PAD (vlan5),
              DEV_PLUS_VID (eth0.0005), DEV_PLUS_VID_NO_PAD (eth0.5)
* bind-type:  PER_DEVICE  # Allows vlan 5 on eth0 and eth1 to be unique.
              PER_KERNEL  # Forces vlan 5 to be unique across all devices.
* FLAGS:  1 REORDER_HDR  When this is set, the VLAN device will move the
            ethernet header around to make it look exactly like a real
            ethernet device.  This may help programs such as DHCPd which
            read the raw ethernet packet and make assumptions about the
            location of bytes.  If you don't need it, don't turn it on, because
            there will be at least a small performance degradation.  Default
            is OFF.

----->   在eth0接口配置兩個vlan  如果沒有加載模塊會自動加載8021q模塊
vconfig add eth0 11
vconfig add eth0 21

----->   設置參數 REORDER_HDR (默認就是)
vconfig set_flag eth0.11 1 1
vconfig set_flag eth0.21 1 1

----->   查看一下
cat /proc/net/vlan/eth0.11
cat /proc/net/vlan/eth0.21

----->   改接口啟動配置文件
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0.11
perl -pi -e 's/DEVICE=eth0/DEVICE=eth0.11/g' ifcfg-eth0.11
cp ifcfg-eth0 ifcfg-eth0.21
perl -pi -e 's/DEVICE=eth0/DEVICE=eth0.21/g' ifcfg-eth0.21

perl -pi -e 's/IPADDR=/#IPADDR=/g' ifcfg-eth0
perl -pi -e 's/NETMASK=/#NETMASK=/g' ifcfg-eth0
......

----->   手工切換 這時需要更改交換機配置
ifdown eth0;ifup eth0;ifup eth0.11;ifup eth0.21

----->   設置下次啟動自動加載 8021q 模塊
echo VLAN=yes >> /etc/sysconfig/network

7
資料來源 http://www.geego.com.tw/tech/tech_word/20060821/index.htm#

Google 搜尋 linux 網路 Link Aggregation

(一) 前言

Linux 核心能支援的功能真的是不勝沒舉, Ben 哥跟大家說一個最近發生的故事,間接體會 Linux 無遠弗屆的威力。日前 Ben 哥在奇科電腦教授 LPI Level 2 的課程當中,有位在業界從事網路系統管理的學員問了 Ben 哥一個問題 --- 「如果在同一個區域網路,要架設一台比周圍電腦擁有更多網路頻寬的主機,我要花多少錢、買什麼樣的網路設備」。 Ben 哥回答他,你只要花不到 1 千塊的新台幣,買幾塊「螃蟹牌」的網路卡,就可以立即倍增一台 Linux 主機的網路頻寬!

其實「如何在 Linux 系統下結合多張網路卡來增加網路頻寬」,這個議題 Ben 哥以前便常拿來作教學的實作練習!此次藉由本期的技術專欄,跟各位讀者細述說明「在 Linux 下如何結合多張網卡,並配合相對應的頻寬來增加網路的傳輸速率」 ! 同時間還可以讓該台機器提供「連線備援」的機制 !! top!
本期技術文件所需
實驗設備
   

1. Linux 機器乙台, 兩張以上的乙太網路卡
2. Cisco 3550 交換機乙台
所需軟體
及Linux
核心
   

1. Linux 機器:核心 2.4.32 版, bonding 所需的指令:「 ifenslave 」
2. Cisco 3550 交換機的韌體 :「 c3500xl-c3h2s-mz.120-5.WC15.bin 」
基本知識
   

1. Linux 802.1Q 的設定 ( 詳見 Linux Guide 第十一期 ) 。
2. Cisco 3550 交換機上 Etherchannel 以及 802.1Q 的設定。

(二) Linux 中 Bonding 的意義

Bonding 的中文意義為「結合」,那到底要結合什麼東西呢?其實就是利用軟體的方式 (Linux Bonding 的技術 ) 來結合網路傳輸的頻寬!舉個例子來說,每張網卡傳輸速率為 100Mb ,假使我們 Bonding( 結合 ) 四張網卡,就可以把這四張網卡視同為一張,而這張網卡的傳輸速率則為 400Mb/s 。

(三) 如何讓 Linux 支援 Bonding

要使 Linux 能支援 Bonding 的功能,以及讓使用者能操作 Bonding 的指令,有幾個必備條件:

1.  Linux 核心必須支援 bonding 的功能。

    在核心的選項中,各位可以在主選單下的「 Network Device Support 」裡,選取「 Bonding driver support 」;在這裡要特別提醒各位的是,請選用與 Ben 哥相同的核心版本「 2.4.32 」。因為早期 Linux 核心版本的 bonding 支援能力,並不支援待會我們所需要用到的「 802.3a d 」通訊協定。另外要特別注意的一點是,在 Linux 中的 bonding 設定,其對於「 802.3a d 」的命名為「 PAgP 」,但在 Cisco 所屬的設定名詞中,「 PAgP 」並非指的是「 802.3a d 」,而是「 LACP 」;兩者是完全不相同的。因此,讀者們在使用 Cisco 交換機設備時,務必弄清楚不要搞錯了,不要選到「 PAgP 」。

2. 必須要有 ifenslave 指令。

    ifenslave 為設定 bonding 功能的唯一指令,與核心所使用的版本有相當高的倚賴性,如果各位使用的核心是 2.4.32 版本的話,可以在核心原始碼根目錄中「 Documentation/networking 」的目錄位置下,找到「 ifenslave 」的原始碼—「 ifenslave.c 」,同時間也可在上述同樣的目錄下找到「 bonding.txt 」的檔案,其中簡單的陳述了在此 Linux 版本中,支援了哪些功能。

    因此,我們可以進行編譯適合核心版本 2.4.32 的「 ifenslave 」指令。

    致此為止,我們已確定也必須確定系統的核心支援「 bonding 」功能,再者其核心版本為 2.4.32 ,且有相對應的「 ifenslave 」操作指令存在。

 

(四) Cisco 支援的連接埠整合控制協定介紹

Cisco 對於交換機連接埠的整合有幾種方式,其一是先前描述過的 LACP ( Link Aggregation Control Protocol) LACP 是 IEEE 標準規格「 802.3ad 」協定中的一部份, 802.3ad 協定規範了:交換機上許多不同的實體連接埠,可以邏輯性的共同結合在一起,進而視為一條實體線;除了 LACP 以外, Cisco 本身也有其他相類似的功能,例如: Etherchannel 以及 PAgP ( Port Aggregation Protocol) 。

(五) 實驗目標

在此次的實驗中, Ben 哥需要讀者們把 Linux 的機器設定成為一個支援 802.3a d 的伺服器,以 802.3a d 的通訊協定方式與 Cisco Catalyst 3550 的交換機連結,最終達成連接埠整合的目的。

以上的網路拓墣為此次實驗的主要連接方式,我們以第二層 (Layer 2) 的連接為本次實驗的主軸,以下為實驗的步驟:



Step1:設定Linux伺服器
1.
首先, Ben 哥已經有一台 Linux 機器,其核心版本為 2.4.32 ,而且也已經有預先編譯好的 ifenslave 指令,該指令存於目錄「 /root 」中, Ben 哥使用一片有四個連接埠的網路卡 ( 附圖一 ) ,每個連接埠都有其獨立的 MAC 定址,因此可以將之視同為四張網卡,其設備代號各為: eth2 、 eth3 、 eth4 、 eth5 。

2.
確定了網路卡可以使用之後,接下來就必須建立一個虛擬的整合連接介面 (bond0) ,以便將 eth2 、 eth3 、 eth4 、 eth5 整合在一起。首先,我們必須安插支援 bonding 的核心模組,在安插模組的時候,同時通知核心待會在 bonding 時所要支援的模式,在這個版本 ( 2.4.32 ) 中,總共支援了 7 種模式,第四種模式就是「 802.3a d 」,因此在安插 bonding 模組的同時,需在其後加上『 mode= 802.3a d 』或是『 mode=4 』的命令參數 ( 兩者擇一使用皆可 ) ;另外,再加上一個用來「監控各個連接埠連接狀況」的參數,這個參數為『 miimon= 數字』 ( 數字表示多少 ms 之意 ) ,讀者們可以從下圖看到 Ben 哥如何確認核心是否支援 bonding 的功能,進而配合相關參數,安插 bonding 模組的整個過程。

3.
在核心支援 bonding 的功能後,在『 ifconfig –a 』指令的標準輸出中,會有一個名為「 bond0 」的介面設備,這個就是用來整合各張網路卡的介面,是以我們先對 bond0 介面設定其 IP 位址並將該介面啟動運作。

4.
啟動完 bond0 後,皆下來當然就是把各個實體網路卡整合到 bond0 中,這時就要使用剛剛 Ben 哥教大家預先編譯好的「 ifenslave 」指令!只要鍵入『 ./ifenslave –v bond0 eth2 eth3 eth4 eth5 』即可。

5.
到現在為止, Linux 伺服器已經設定好了,但是網路線另一端的 3550 交換器還沒有作任何的設定。是以我們先 ping 路由器的 IP 位址「 192.168.10.2 」,看看封包是否能夠到達路由器;結果當然是不行。因為交換器那一端並還沒有將 802.3a d 通訊協定設定進去,所以通訊協定不同,勢必就無法相互傳遞資料。

6.
觀察檔案內容完畢之後,再次鍵入『 ifconfig 』指令來確認是否包含剛剛所設定的各項設備。

7.
到現在為止, Linux 伺服器已經設定好了,但是網路線另一端的 3550 交換器還沒有作任何的設定。是以我們先 ping 路由器的 IP 位址「 192.168.10.2 」,看看封包是否能夠到達路由器;結果當然是不行。因為交換器那一端並還沒有將 802.3a d 通訊協定設定進去,所以通訊協定不同,勢必就無法相互傳遞資料。

觀看第2步驟!!>>


Step2:設定Cisco的交換器

1.
在這個階段的實驗中,我們使用 FastEthernet 連接埠 13 到 16 ,分別對應到 Linux 伺服器上的 eth2 、 eth3 、 eth4 、 eth5 ;在 Cisco 交換機的 IOS 文字使用介面下,可以使用範圍指令 (range) 來同時間對很多連接埠下達相同的指令。如下圖所示,我們利用範圍指令進入連接埠設定模式,設定步驟順序如下:

(1) 下達指定 VLAN 的 ID → ( 2) 設定連接埠的模式 → (3) 加入 802.3ad 的支援,也就是 LACP 。

2
設定完成後,鍵入『 show running 』指令,觀察一下 FastEthernet 連接埠 13 到 16 的設定狀況。 至此, Cisco 的交換器設定完畢。

觀看第3步驟!!>>


Step3:測試連線狀況

1.
在Linux伺服器以及Cisco交換器這兩台機器上,讀者們都已經完成了802.3ad的設定,接下來就是驗收設定成果的時候了。我們可以從Linux伺服器端ping交換器另一端的路由器,其結果是成功的,由此證明先前兩個設備的設定完全無誤。

 

觀看第4步驟!!>>


Step4:測試連線的備援機制(Redundancy)

1.
連接埠整合的另一個好處就是可以提供連線的備援機制,以本實驗為例,我們使用了四個網路連接埠連接到交換器,理應獲得 400M b/s 的總頻寬;順帶的這種網路連線機制也提供了連線備援的可能。簡單來說,四個網路通路中,如有其中 一兩 個連線有問題,這個連線機制 ( 802.3a d) 會偵測到連線的狀況,讓另外兩條正常工作的連線接替其他工作。 為了讓讀者實地觀察到這個狀況, Ben 哥先從 Linux 的伺服器 ping 路由器,然後在第 4 個 icmp 答應時, Ben 哥把 eth2 以及 eth3 的連線拔掉,各位可以從下圖『 mii-tool 』的指令輸出中,看到 eth2 及 eth3 是沒有連線的,當下,經由 eth2 以及 eth3 的封包就到達不了路由器,但是過了一分多鐘之後,在第 77 個 icmp 的封包之後,連線則自行恢復。

實驗步驟完畢!!

8
Network 討論版 / Linux 實作 VLAN ( 802.1q )
« 於: 2006-11-23 11:42 »
資料來源 http://windtear.net/archives/2005/07/18/000720.html


vconfig - Linux 下的 802.1q 實現配置工具
http://windtear.net/archives/2005/07/18/000720.html

研究過 /sbin/ifup 的話 會發現 ifup 腳本有 vconfig 和 VLAN 支持的判斷
(當時搞 ifup 的 bridge 支持也patch過這個腳本
 2005-04-08 19:01 hBridge - Linux Ethernet bridging)

# Ethernet 802.1Q VLAN support
if [ -x /sbin/vconfig -a "${VLAN}" = "yes" ]; then
    if echo ${DEVICE} | LANG=C egrep -v '(:)' | LANG=C egrep -q 'eth[0-9][0-9]*\.[0-9][0-9]?[0-9]?[0-9]?' ; then
        if [ ! -d /proc/net/vlan ]; then
            if modprobe 8021q >/dev/null 2>&1 ; then
                /sbin/vconfig set_name_type DEV_PLUS_VID_NO_PAD >/dev/null 2>&1 || {
                    echo $"Could not set 802.1Q VLAN parameters."
                }
            else
                echo $"No 802.1Q VLAN support available in kernel for device ${DEVICE}"
                exit 1
            fi
        fi
        VID="`echo ${DEVICE} | \
            LANG=C egrep 'eth[0-9]+\.[0-9][0-9]?[0-9]?[0-9]?$' | \
            LANG=C sed 's/^[a-z0-9]*\.//g;s/^0*//'`"
        PHYSDEV="`echo ${DEVICE} | \
            LANG=C egrep 'eth[0-9]+\.[0-9][0-9]?[0-9]?[0-9]?$' | \
            LANG=C sed 's/\.[a-z0-9]*$//g'`"

        is_available ${PHYSDEV} || {
            if [ "$?" = "1" ] ; then
                echo $"$alias device ${DEVICE} does not seem to be present, delaying initialization."
                exit 1
            else
                exit 0
            fi
        }

        # Link on Physical device needs to be up but no ip required
        check_device_down ${PHYSDEV} && {
            ip -o link set dev ${PHYSDEV} up
        }

        if [ ! -f /proc/net/vlan/${DEVICE} ]; then
            /sbin/vconfig add ${PHYSDEV} ${VID} || {
                (logger -p daemon.info -t ifup \
                    $"ERROR: could not add vlan ${VID} as ${DEVICE} on dev ${PHYSDEV}" &)&
                echo $"ERROR: could not add vlan ${VID} as ${DEVICE} on dev ${PHYSDEV}"
                exit 1
            }
        fi

        if [ -f /proc/net/vlan/${DEVICE} ]; then
            case "$REORDER_HDR" in
                yes|1)
                    /sbin/vconfig set_flag ${DEVICE} 1 1 || {
                        (logger -p daemon.info -t ifup \
                            "WARNING: vconfig not able to enable REORDER_HDR on ${DEVICE}" &)&
                    }
                    ;;
                no|0)
                    /sbin/vconfig set_flag ${DEVICE} 1 0 || {
                        (logger -p daemon.info -t ifup \
                            $"WARNING: vconfig not able to disable REORDER_HDR on ${DEVICE}" &)&
                    }
                    ;;
            esac
        fi
    fi
fi


vconfig 就是 Linux 下 802.1Q VLAN 實現配置工具
Name        : vconfig                      Relocations: (not relocatable)
Version     : 1.6                               Vendor: Red Hat, Inc.
Release     : 2                             Build Date: Sat 01 Feb 2003 06:20:05 AM CST
Install Date: Tue 01 Jun 2004 04:55:57 PM CST      Build Host: porky.devel.redhat.com
Group       : System Environment/Base       Source RPM: vconfig-1.6-2.src.rpm
Size        : 170822                           License: LGPL
Signature   : DSA/SHA1, Mon 24 Feb 2003 02:05:29 PM CST, Key ID 219180cddb42a60e
Packager    : Red Hat, Inc.
URL         : http://www.candelatech.com/~greear/vlan.html
Summary     : Linux 802.1q VLAN configuration utility.
Description :
The vconfig program configures and adjusts 802.1q VLAN parameters.
/sbin/vconfig
/usr/share/doc/vconfig-1.6
/usr/share/doc/vconfig-1.6/CHANGELOG
/usr/share/doc/vconfig-1.6/README
/usr/share/doc/vconfig-1.6/contrib
/usr/share/doc/vconfig-1.6/contrib/CVS
/usr/share/doc/vconfig-1.6/contrib/CVS/Entries
/usr/share/doc/vconfig-1.6/contrib/CVS/Repository
/usr/share/doc/vconfig-1.6/contrib/CVS/Root
/usr/share/doc/vconfig-1.6/contrib/README
/usr/share/doc/vconfig-1.6/contrib/vlan_2.2-full.patch
/usr/share/doc/vconfig-1.6/contrib/vlan_2.2-module.patch
/usr/share/doc/vconfig-1.6/vlan.html
/usr/share/doc/vconfig-1.6/vlan_test.pl
/usr/share/man/man8/vconfig.8.gz

% vconfig
Expecting argc to be 3-5, inclusive.  Was: 1

Usage: add             [interface-name] [vlan_id]
       rem             [vlan-name]
       set_flag        [interface-name] [flag-num]       [0 | 1]
       set_egress_map  [vlan-name]      [skb_priority]   [vlan_qos]
       set_ingress_map [vlan-name]      [skb_priority]   [vlan_qos]
       set_name_type   [name-type]

* The [interface-name] is the name of the ethernet card that hosts
  the VLAN you are talking about.
* The vlan_id is the identifier (0-4095) of the VLAN you are operating on.
* skb_priority is the priority in the socket buffer (sk_buff).
* vlan_qos is the 3 bit priority in the VLAN header
* name-type:  VLAN_PLUS_VID (vlan0005), VLAN_PLUS_VID_NO_PAD (vlan5),
              DEV_PLUS_VID (eth0.0005), DEV_PLUS_VID_NO_PAD (eth0.5)
* bind-type:  PER_DEVICE  # Allows vlan 5 on eth0 and eth1 to be unique.
              PER_KERNEL  # Forces vlan 5 to be unique across all devices.
* FLAGS:  1 REORDER_HDR  When this is set, the VLAN device will move the
            ethernet header around to make it look exactly like a real
            ethernet device.  This may help programs such as DHCPd which
            read the raw ethernet packet and make assumptions about the
            location of bytes.  If you don't need it, don't turn it on, because
            there will be at least a small performance degradation.  Default
            is OFF.

----->   在eth0接口配置兩個vlan  如果沒有加載模塊會自動加載8021q模塊
vconfig add eth0 11
vconfig add eth0 21

----->   設置參數 REORDER_HDR (默認就是)
vconfig set_flag eth0.11 1 1
vconfig set_flag eth0.21 1 1

----->   查看一下
cat /proc/net/vlan/eth0.11
cat /proc/net/vlan/eth0.21

----->   改接口啟動配置文件
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0.11
perl -pi -e 's/DEVICE=eth0/DEVICE=eth0.11/g' ifcfg-eth0.11
cp ifcfg-eth0 ifcfg-eth0.21
perl -pi -e 's/DEVICE=eth0/DEVICE=eth0.21/g' ifcfg-eth0.21

perl -pi -e 's/IPADDR=/#IPADDR=/g' ifcfg-eth0
perl -pi -e 's/NETMASK=/#NETMASK=/g' ifcfg-eth0
......

----->   手工切換 這時需要更改交換機配置
ifdown eth0;ifup eth0;ifup eth0.11;ifup eth0.21

----->   設置下次啟動自動加載 8021q 模塊
echo VLAN=yes >> /etc/sysconfig/network

9
資料來源
http://bbs.net130.com/archive/index.php?t-39540.html

範例
static tcp golbol ip 2000 local ip 2000

conduti tcp golobl ip eq 2000 any

10
chen123
  那個 db_mysql.sql 檔案,是安裝時套件
內含的資料庫格式檔,可能是由於版本不同
而放置位置不同,可以用 locate mysql.sql
查一下主機內含有 mysql.sql 檔名的檔案
放置在那個位置

11
LDAP 討論區 / openldap 使用 Mysql 作資料庫
« 於: 2006-06-10 02:52 »
各位學長
   今天在搜尋有關openldap 和 radius 的資料時,
看到有可以利用 Mysql 作為 LDAP 的資料庫
不是各位學長有沒有研究,用mysql 作資料庫
openldap 的效能會不會比較好

資料及來源如下

[精華] 用mysql作openldap的後台數據庫
http://www.chinaunix.net/jh/49/635094.html

E文水平有限翻譯不是很到位。請原諒。
Setting up OpenLDAP with MySQL backend
用mysql作後台數據庫安裝openldap

author: TBONIUS
OpenLDAP is an X.500 Lightweight Directory Access Server used for
centralized authentication and directory lookups. This article covers configuring this service to utilize SQL services in order to store its data object. Having these objects stored in a SQL database allow for third party applications access to manage these objects.
openldap是一個基於x.500協議用來集中認證和目錄搜索的級目錄訪問服務器。這篇文章包含的內容是:利用sql服務來配置這個服務器 ,用來保存對象和數據。允許第三方應用訪問、管理這些保存在SQL數據庫裡的對象。
Ports that are needed:
需要的ports有:
MySQL 4.x server : /usr/ports/databases/mysql41-server
MySQL 4.x client : /usr/ports/databases/mysql41-client
LibIODBC 3.x : /usr/ports/databases/libiodbc
MyODBC 3.x : /usr/ports/databases/myodbc
OpenLDAP 2.x : /usr/ports/databases/openldap21-server WITH_ODBC="YES"
Configuring the MySQL server
配置mysql服務器
OpenLDAP has the option to use many different kinds of databases, in this case we will use MySQL. The first step in setting this up is to create a MySQL database for which OpenLDAP will use.
openldap可選很多不同種類的數據庫。在這種情況下,我將使用mysql。要完成這個任務的第一步是建立一個openldap將要使用的mysql數據庫
root@host # mysqladmin create ldap
Next we will create a MySQL account that OpenLDAP will use for our newly created ldap database
下面我將建立一個openldap會用的mysql帳號,對應我們新建立的ldap數據庫。

root@host # mysql

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.0.18

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>;grant all privileges on ldap.* to 'ldap'@'localhost'
->;identified by 'password' with grant option;

Query OK, 0 rows affected (0.13 sec)

We of course want to substitute 'password' with the actual password we wish to use for this particular user account
對特定的用戶帳號,我們當然想用我們真正想用的密碼替換'password'。
Configuring LibIODBC to use the MyODBC driver
配置LibODBC使用MyODBC驅動。
Quite simply we need to edit two file here to get LibODBC to use the MyODBC driver in accessing the MySQL server.
事實上我們只需要簡單得修改這裡的兩個文件就可讓LibODBC使用MyODBC驅動來訪問MySQL服務器。
Take a look at the /usr/local/etc/libiodbc/odbcinst.ini file and make the following changes
看看這個文件/usr/local/etc/libiodbc/odbcinst.ini並修改內容:

[ODBC Drivers]
MySQL = Installed

[MySQL]
Description=ODBC for MySQL
Driver=/usr/local/lib/libmyodbc3.so

Take a look at the /usr/local/etc/libiodbc/odbc.ini and make the following changes
看看這個文件/usr/local/etc/libiodbc/odbc.ini並作如下修改:

[ODBC Data Sources]
ldap = MySQL LDAP DSN

[ldap]
Driver = /usr/local/lib/libmyodbc3.so
Description = OpenLDAP Database
Host = localhost
ServerType = MySQL
Port = 3306
FetchBufferSize = 99
User = ldap
Password = password
Database = ldap
ReadOnly = no
Socket = /tmp/mysql.sock

[ODBC]
InstallDir=/usr/local/lib

Again, substitute password for the actual password we created for the ldap user of the MySQL database.
再次,為我們在mysql數據庫建立的ldap用戶的密碼。

We can test our current configuration before installing and configuring OpenLDAP. LibIODBC provides a test utility to check DSN configurations.
在安裝配置openldap以前,我們可以測試我們當前的配置。LibIODBC提供了檢測DSN配置的測試工具。

Note from darxpryte: Upon following this tutorial I've found that iodbctest was not built automatically. This may be fixed later but if you find this to be the case you'll need to do the following:
darxpryte提示:在這篇指南的下面,我發現iodbctest沒有自動建立,以後或許會修正這個問題,不過如果你需要如此的話,按照修面的操作:

cd /usr/ports/databases/libiodbc/
make extract
cd work/libiodbc-3.52.2/samples
make install

This will install iodbctest into /usr/local/bin/
這將把iodbctest安裝到/usr/local/bin/

Once you install iodbctest, you can do the following to test your connection:
一旦你安裝了iodbctest,你就可以安裝下面的方法來測試你的連接:

root@host # iodbctest
iODBC Demonstration program
This program shows an interactive SQL processor
Driver Manager: 03.51.0001.0908

Enter ODBC connect string (? shows list): ?

DSN | Description
---------------------------------------------------------------
ldap | MySQL LDAP DSN

Enter ODBC connect string (? shows list):DSN=ldap
Driver: 03.51.06

SQL>;show tables;

Tables_in_ldap
---------------------
authors_docs
documents
institutes
ldap_attr_mappings
ldap_entries
ldap_entry_objclasses
ldap_oc_mappings
ldap_referrals
persons
phones

result set 1 returned 10 rows.

This shows us that the DSN is configured correctly for LibIODBC to use the MyODBC driver in order to connect to our ldap database we set up on our MySQL Server
這表示,DSN已經為LibIODBC配置好使用MyODBC驅動,好用來連接到我們在mysql服務器上安裝的ldap數據庫。

If you have problems displaying the DSN names defined in the odbc.ini file via the test program, try exporting the following shell environmental variable:
如果你通過測試程序時有問題(顯示定義在odbc.ini裡面的DSN名字),嘗試輸入下面的shell環境變量:

For csh or tcsh:
對於csh或者tcsh:

setenv ODBCINI /usr/local/etc/libiodbc/odbc.ini

For sh or bash:
對於sh或者bash:

export ODBCINI=/usr/local/etc/libiodbc/odbc.ini

Configuring OpenLDAP to use MySQL
配置openldap使用mysql

During the build of OpenLDAP, we need to pass the WITH_ODBC="YES" option so that the server build the appropriate SQL configurations
在編譯openldap的時候,我們需要跳過 WITH_ODBC="YES"選項,這樣,服務器編譯專用的sql配置。
After the make install process, we will copy over the slapd.conf file that is configured to use a SQL backend. This file is buried under the OpenLDAP ports directory in the following path:
在安裝過程完畢後,我們將複製使用SQL作後台的slapd.conf文件,這個文件在openldap的ports目錄的下面的路徑中生成:

work/openldap-2.1.30/servers/slapd/back-sql/rdbms_depend/mysql
Change to this directory, from the ports directory of OpenLDAP, and copy the configuration file over

>; cp slapd.conf /usr/local/etc/openldap
Then we can import the back SQL file from this directory into our running MySQL server database

root@host # mysql < backsql_create.sql ldap
root@host # mysql < testdb_create.sql ldap

Optionally we can import the testdb_data and testdb_metadata files into the database so that we can have example data with which to work

Next we need to edit the /usr/local/etc/openldap/slapd.conf file and make the protper adjustments. We need to setup the slapd service to use a SQL backend under the "SQL database definitions" section

database sql
suffix "o=sql,c=RU"
rootdn "cn=root,o=sql,c=RU"
rootpw secret
dbname ldap
dbuser ldap
dbpasswd password
subtree_cond "ldap_entries.dn LIKE CONCAT('%',?)"
insentry_query "INSERT INTO ldap_entries (dn,oc_map_id,parent,keyval) VALUES (?,?,?,?)"

Go ahead and comment out or delete any other example configurations for alternate SQL connectors such as Postgres and/or MsSQL settings. (Unless of course you are using a Postgres or MsSQL server as your backend

Post installation configuration
Next, we need to edit the /etc/rc.conf and configure the OpenLDAP server to star on boot by making the following changes

slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
slapd_sockets="/var/run/openldap/ldapi"

And finally we need to edit the OpenLDAP startup script and setup the ODBC path for the server to use. Edit /etc/rc.d/slapd file and add the following line:

export ODBCINI=/usr/local/etc/libiodbc/odbc.ini
Just as we performed the iodbctest, this variable is essential for OpenLDAP to know where the configuration file to use for ODBC connectivity

Now we are ready to try and bring up our OpenLDAP server. Let us start by running slapd manually in debug mode to see the output of startup:

root@host # /usr/local/libexec/slapd -d 1
We should see the following at the end of the debug output:

<==load_schema_map()
<==backsql_get_db_conn()
==>;backsql_free_db_conn()
backsql_free_db_conn(): closing db connection
==>;backsql_close_db_conn()
<==backsql_close_db_conn()
<==backsql_free_db_conn()
<==backsql_db_open(): test succeeded, schema map loaded
slapd starting

If this is the given output then it looks like our configuration is correct and we are ready to start up OpenLDAP normally for operation.

/etc/rc.d/slapd start
This will startup the OpenLDAP server and we can verify it is running with the following command:

root@host # sockstat |grep slapd
ldap slapd 71838 5 dgram -< /var/run/log
ldap slapd 71838 8 stream /var/run/openldap/ldapi
ldap slapd 71838 9 tcp4 *:389 *:*

From here, use any OpenLDAP Administration tool of your choice to add, edit and remove data from your LDAP server

12
Linux 討論版 / Linux 的 虛擬主機系統 OpenVPS
« 於: 2006-06-06 23:55 »
各位學長
   最近看到主機出租業者有提供虛擬主機的服務
而且可以有root 的帳號,可以自行建立帳號和安
裝軟體等,不知各位學長有沒有用過類似的軟體
,效果如何,下面是我在網路上找到的資料

OpenVPS 網站 http://www.openvps.org

VPS 的介紹

簡體網站  虛擬專用服務器(VPS)產品介紹
http://hspc.usernet.com.cn/vps/product/introduce.html

簡體網站  虛擬專用服務器(VPS)什麼是 VPS ?
http://hspc.usernet.com.cn/vps/product/vps_what.html

簡體網站  虛擬專用服務器(VPS)產品特色
http://hspc.usernet.com.cn/vps/product/trait.html


有關一般IDC用的虛擬主機控制台介紹

簡體網站 開源的主機管理系統/虛擬主機控制面板
http://www.cnopensource.org/bbs/viewthread.php?tid=40

在最後面有提到
還有一個基於Linux-Virutal-Server項目的虛擬服務器,也是多服務器,但跟一般IDC所理解的不一樣,有興趣也可去看看
http://www.linux-vserver.org/
http://www.openhosting.com/
http://www.openvps.org(OpenVPS)

如果OpenVPS 有像最前面的VPS 介面的功能的話,
拿來作開發,測試和教學環境應該是不錯的選擇
不知各位學長有沒有用過

13
酷!學園 精華區 / phpBB 轉換成 utf8
« 於: 2006-05-22 19:36 »
參考資料如下

1.  phpBB 由 BIG5 轉換到 UTF-8
http://blog.teatime.com.tw/post/1/48

2. 下載 AppServ 2.5.5 版
http://www.appservnetwork.com/

3. 下載新版的 phpBB 竹貓星球
http://phpbb-tw.net/phpbb/

4. 解決安裝phpBB 2.0.19 UTF-8 版的亂碼問題
http://service.url.com.tw/web_hosting/program/phpbb_2019_utf8.php

我原本的的環境如下,AppServ 2.4.4a , 內含的mysql 是 4.0.x 版, phpBB是
 2.0.18 (Big5)版,由於預設 AppServ 安裝時 MySql 是使用 latin1 編碼,當使用
mysqldump 匯出資料庫時在某些中文字後會有\ ( 例如:許,功,過等),在要匯入
資料時會發生問題,在網路上找了很多的資料後,發現用下列方式,可以很方便的
將整個phpbb 的環境改為utf8

先利用 [1] 提到的文章內提供的script (最後面轉換資料庫的部份),設定好須要
的資料(主機位置,資料庫名稱,帳號,密碼等),執行 script 會將舊有的資料庫轉出
存成 utf8.sql 檔

利用 \AppServ\php\php.exe \存放路徑\utf8.php 來產生 \存放路徑\utf8.sql 檔

utf8.php
代碼: [選擇]

<?php

set_time_limit
&#40;0&#41;;

$phpname 'phpbb_';
$dbuser 'dbuser';
$dbpass 'dbpass';
$dbhost 'localhost';
$dbname 'dbname';

$encoding_cnt 0;
$encoding[$encoding_cnt++&#93; = 'BIG5';
$encoding[$encoding_cnt++&#93; = 'GB2312';
$encoding[$encoding_cnt++&#93; = 'GBK';
$encoding[$encoding_cnt++&#93; = 'SHIFT_JIS';
$encoding[$encoding_cnt++&#93; = 'GB18030';

$conn mysql_connect&#40;$dbhost, $dbuser, $dbpass&#41;;
if &#40;!$conn&#41; &#123;
    
echo "Can't connect to mysql at $dbhost!";
    exit;
&
#125;

if &#40;!mysql_select_db&#40;$dbname, $conn&#41;&#41; &#123;
    
echo "Can't use database $dbname!";
    
mysql_close&#40;$conn&#41;;
    
exit;
&
#125;

//mysql_query&#40;"SET NAMES 'big5'", $conn&#41;;
if &#40;!&#40;$result = mysql_list_tables&#40;$dbname, $conn&#41;&#41;&#41; &#123;
    
echo "Can't get table for $dbname!";
    
mysql_close&#40;$conn&#41;;
    
exit;
&
#125;
while &#40;$row = mysql_fetch_row&#40;$result&#41;&#41;
    
$tables[&#93; = $row[0&#93;;
mysql_free_result&#40;$result&#41;;

$fp fopen&#40;"utf8.sql", "wt"&#41;;
if &#40;$fp == 0&#41; &#123;
    
echo "Can't open utf8.sql!";
    
mysql_close&#40;$conn&#41;;
    
exit;
&
#125;

fputs&#40;$fp, "SET NAMES 'utf8';\n"&#41;;

$cnt 0;
foreach &
#40;$tables as $tblname&#41; &#123;
    
$cnt++;
    if &
#40;$tblname == $phpname.'search_wordlist' ||
        
$tblname == $phpname.'search_results' ||
        
$tblname == $phpname.'search_wordmatch'&#41; &#123;
        
echo "skip for $tblname<br>\n";
        continue;
    &
#125;
    
fputs&#40;$fp, "delete from `$tblname`;\n"&#41;;
    
echo "Table&#58; $tblname<br>\n";
    echo 
"<blockquote>\n";
    
$sql "select * from `$tblname`";
    
$result mysql_query&#40;$sql, $conn&#41;;
    
if &#40;!$result&#41; &#123;
        
echo "Query failed&#58; $sql\n";
    &
#125;
    
else &#123;
        
$fields = array&#40;&#41;;
        
$num mysql_num_fields&#40;$result&#41;;
        
for &#40;$i = 0; $i < $num; $i++&#41; &#123;
            
$meta mysql_fetch_field&#40;$result&#41;;
            
if &#40;!$meta&#41; &#123;
                
echo "No meta information!\n";
            &
#125;
            
else &#123;
                
$name $meta->name;
                
$type $meta->type;
                echo 
"'$name' => '$type'<br>\n";
                
$fields[$i&#93;['name'&#93; = $name;
                
$fields[$i&#93;['type'&#93; = $type;
            
&#125;
        
&#125;
        
$row_cnt 0;
        
$err 0;
        while &
#40;$row = mysql_fetch_row&#40;$result&#41;&#41; &#123;
            
$row_cnt++;
            
$field_list '';
            
$value_list '';
            
$id $row[0&#93;;
            
for &#40;$i = 0; $i < $num; $i++&#41; &#123;
                
$type $fields[$i&#93;['type'&#93;;
                
$value $row[$i&#93;;
                
if &#40;$value == NULL&#41; continue;
                
if &#40;$field_list == ''&#41; &#123;
                    
$field_list '`'.$fields[$i&#93;['name'&#93;.'`';
                
&#125;
                
else &#123;
                    
$field_list .= ',`'.$fields[$i&#93;['name'&#93;.'`';
                
&#125;
                
if &#40;$type == 'string' || $type == 'blob'&#41; &#123;
                    
$lines explode&#40;"\n", $value&#41;;
                    
$n count&#40;$lines&#41;;
                    
$uvalue '';
                    for &
#40;$ln = 0; $ln < $n; $ln++&#41; &#123;
                        
$xline $lines[$ln&#93;;
                        
$ok 0;
                        for &
#40;$x = 0; $x < $encoding_cnt; $x++&#41; &#123;
                            
$code $encoding[$x&#93;;
                            // I think we should remove //TRANSLIT here, return error to change another encoding
                            //$xvalue = iconv&#40;$code, 'UTF-8//TRANSLIT', $xline&#41;;
                            
$xvalue iconv&#40;$code, 'UTF-8', $xline&#41;;
                            
if &#40;$xvalue === false&#41; &#123;
                                //echo "$id, Can't convert $xline from $code<br>\n";
                            
&#125;
                            
else &#123;
                                //echo "convert '$xline' to '$xvalue' for $code<br>\n";
                                
$ok 1;
                                break;
                            &
#125;
                        
&#125;
                        
if &#40;$ok == 0&#41; &#123;
                            
$xvalue $xline;
                            
//echo "failed for all encoding<br>\n";
                        
&#125;
                        
if &#40;$ln == 0&#41;
                            
$uvalue $xvalue;
                        else
                            
$uvalue .= "\n".$xvalue;
                    &
#125;
                    
if &#40;preg_match&#40;"/&amp;#\d&#123;4,7&#125;;&#123;0,1&#125;/", $uvalue&#41;&#41; &#123;
                        
$x preg_replace_callback&#40;
                            
"|&#40;&amp;#&#41;&#40;\d&#123;4,7&#125;&#41;&#40;;&#123;0,1&#125;&#41;|",
                            
"num2utf",
                            
$uvalue&#41;;
                        //echo "convert '$uvalue' to '$x'<br>\n";
                        
$uvalue $x;
                    &
#125;
                    
$str mysql_escape_string&#40;$uvalue&#41;;
                    
if &#40;$value_list == ''&#41; &#123;
                        
$value_list "'$str'";
                    &
#125;
                    
else &#123;
                        
$value_list .= ",'$str'";
                    &
#125;
                
&#125;
                
else &#123;
                    
if &#40;$value_list == ''&#41; &#123;
                        
$value_list $value;
                    &
#125;
                    
else &#123;
                        
$value_list .= ",$value";
                    &
#125;
                
&#125;
            
&#125;
            
$sql "insert into $tblname &#40;$field_list&#41; values &#40;$value_list&#41;";
            
fputs&#40;$fp, $sql&#41;;
            
fputs&#40;$fp, ";\n"&#41;;
        
&#125;
    
&#125;
    
echo "</blockquote>\n";
&
#125;

fclose&#40;$fp&#41;;
mysql_close&#40;$conn&#41;;

function code2utf&#40;$num&#41;
&#123;
    //Returns the utf string corresponding to the unicode value
    //courtesy - romans@void.lv
    
if &#40;$num<128&#41;
        
return chr&#40;$num&#41;;
    
if &#40;$num<2048&#41;
        
return chr&#40;&#40;$num>>6&#41;+192&#41;.chr&#40;&#40;$num&63&#41;+128&#41;;
    
if  &#40;$num<65536&#41;
        
return chr&#40;&#40;$num>>12&#41;+224&#41;.chr&#40;&#40;&#40;$num>>6&#41;&63&#41;+128&#41;.chr&#40;&#40;$num&63&#41;+128&#41;;
    
if &#40;$num<2097152&#41;
        
return chr&#40;&#40;$num>>18&#41;+240&#41;.chr&#40;&#40;&#40;$num>>12&#41;&63&#41;+128&#41;.chr&#40;&#40;&#40;$num>>6&#41;&63&#41;+128&#41;. chr&#40;&#40;$num&63&#41;+128&#41;;
    
return '';
&
#125;

// the callback function
function num2utf&#40;$matches&#41; &#123;
   // as usual&#58; $matches[0&#93; is the complete match
   // $matches[1&#93; the match for the first subpattern
   // enclosed in '&#40;...&#41;' and so on
   
$code $matches[2&#93;;
   
return code2utf&#40;$code&#41;;
&#125;

?>



再將原來的 AppServ 移除 (請先自行備份),由[2}下載安裝新版的AppServ
(我是安裝2.5.5) 在安裝到MySql 時請注意編碼的選擇,預設為 latin1 , 請自行
輸入 utf8 , 改用utf8 編碼,

到 [3] 下載新版的 phpBB 利用 utf8 編碼的版本,安裝好phpBB後(請自行參考
安裝文件),應該就可以看到預設的 phpBB 網頁, 再利用下列指令匯入舊的資料
 mysql -u root phpbb2 < utf8.sql , 就會匯入舊的資料,但是可能會發現有中文
的地方會變成亂碼,但是討論區的版面是正常的,請不用緊張

參考 [4] 的資料修改 phpBB/db/mysql4.php 在第49行加入,也就是在
if( $this->db_connect_id ) 之前
代碼: [選擇]
@mysql_query("SET NAMES utf8",
$this->db_connect_id);

即會顯示正常的中文,或是在安裝phpBB前就先設定好mysql4.php

14
Shell編程:萬能的計算日期函數
資料來源 http://unix-cd.com/unixcd12/article_view.asp?id=3519

很不錯的日期計算函數,試過可以在 linux 及 solaris 上執行

代碼: [選擇]

#!/bin/sh

####作者:RUIFOX
####功能:取得某日期的任意天前或後的日期

####參數1為?獲得幫助

if [ "$1" = "?" ]
then
echo "功能:取得某日期的任意天前或後的日期
Usage:date_g [-b|-a] [n(days)] [Now(yyyymmdd)]
             -b 表示往前的日期
             -a 表示往後的日期,缺省為-a 1,即往後一天
              n 表示間隔的天數,缺省為1
            Now 表示基點日期,缺省為當前日期
如:date_g -a 365 20050210,結果為20060210"
        exit
fi

####參數2表示間隔天數,缺省為1天
Pre=1
if [ "$2" != "" ]
then
        Pre=$2
fi

####參數3表示基點日期,缺省為當前系統日期
####如果要輸入特定的基點日期,參數2則不能省略
if [ "$3" != "" ]
then
        Len=`expr length "$3"`
        if [ $Len != 8 ]
        then
                echo "非法基點日期[$Len]!!"
                exit
        fi
        year=`echo $3|awk '{print substr($1,1,4)}'`
        month=`echo $3|awk '{print substr($1,5,2)}'`
        day=`echo $3|awk '{print substr($1,7,2)}'`
        DateP=$3
else
        month=`date +%m`
        day=`date +%d`
        year=`date +%Y`
        DateP=`date +'%Y%m%d'`
fi

####參數1表示向前或向後計數
if [ "$1" = "-a" ]
then
        day=`expr $day + $Pre`
        Ss="後"
else
        day=`expr $day - $Pre`
        Ss="前"
fi

####函數mon_max_day獲得每個月的最大天數
####參數一:月數(1-12)
####輸出:顯示最大天數
mon_max_day()
{
day=0
if [ $1 -gt 0 -a $1 -lt 13 ]
then
case $1 in
            1|01|3|03|5|05|7|07|8|08|10|12) day=31;;
            4|04|6|06|9|09|11) day=30;;
            2|02)
                if [ `expr $year % 4` -eq 0 ]; then
                        if [ `expr $year % 400` -eq 0 ]; then
                                day=29
                        elif [ `expr $year % 100` -eq 0 ]; then
                                day=28
                        else
                                day=29
                        fi
                else
                        day=28
                fi;;
esac
fi
printf $day
}

####主程序開始
Max=`mon_max_day $month`

####針對向前的情況
while [ $day -le 0 ]
do
        month=`expr $month - 1`
        if [ $month -eq 0 ]
        then
            month=12
            year=`expr $year - 1`
        fi
        Max=`mon_max_day $month`
        day=`expr $day + $Max`
done

####針對向後的情況
while [ $day -gt $Max ]
do
        day=`expr $day - $Max`
        month=`expr $month + 1`
        if [ $month -eq 13 ]
        then
            month=1
            year=`expr $year + 1`
        fi
        Max=`mon_max_day $month`
done


DateA=`printf "%02d%02d%02d" $year $month $day`
#echo "基點日期為[$DateP],[$Pre]天$Ss的日期為[$DateA]"
echo "$DateA"

15
PHPMyEdit 介紹

下載網址
http://www.phpmyedit.org/

二林網管90.03.04
●●●使用說明:

1.您須有PHP+MySQL的運作環境,98或LINUX都可以。

2.上傳到您的主機。

3.開始規畫資料庫。

4.開好資料庫,建好資料表。

5.打開流覽器,執行本程式的SETUP.PHP(For PHP4)或SETUP.PHP3(For PHP3)
畫面如下

6.將產生的程式碼複製下來,另存成一PHP程式。

7.將目錄下的 phpMyEdit.class.php 和 lang 目錄
和您的程式一起放到同目錄。

8.打開流覽器,輸入
 http://網址/程式名稱

9.您也可以修改程式內的參數。


// Number of records to display on the screen
$inc = 15;<==每頁顯示資料數
// Options you wish to give the users - A(dd) C(hange) D(elete) F(ilter)
$options = 'ACDF';<==
A表示有新增鈕,可以加入資料
C表示可以修改資料
D表示可以刪除
F表示可以查詢過濾
 如果都沒有,就只有流覽資料

$fdd['yid']['name'] = '編號';<==會顯示成欄位名稱,後面的數值可以改成
中文。
$fdd['yid']['sort'] = true;<==可否按欄名產生排序效果
$fdd['yid']['select'] = 'T';<==T文字輸入D下拉式選擇鈕
$fdd['yid']['required'] = true;<==要不要產生 javascript避免效輸入


</html

16
cnetos 4.2 安裝 Mantis 及 Subversion + mod_auth_mysql
(專案內各目錄的權限不同且使用 Mantis 帳號作認證)

1. 利用 CentOS 的 yum 指令安裝所須的套作

   安裝 Apache 2.X
代碼: [選擇]
yum -y install httpd httpd-manual httpd-suexec system-config-httpd

   安裝 Mysql 4.1.x
代碼: [選擇]
yum -y install mysql mysql-server mysql-devel mysqlclient mod_auth_mysql

   安裝 php4
代碼: [選擇]
yum -y install php php-mysql php-mysql

安裝 Subversion
代碼: [選擇]
yum -y install subversion


2. 到 Mantis 的網站下載 Mantis
   網址 http://www.mantisbt.org/

   利用 wget 下載檔案
代碼: [選擇]
mkdir /tmp/mantis_download
cd /tmp/mantis_download
wget http://nchc.dl.sourceforge.net/sourceforge/mantisbt/mantis-1.0.0.tar.gz


   利用 tar 解壓縮檔案
代碼: [選擇]
cd /var/www/html
tar zxvf /tmp/download/mantis-1.0.0.tar.gz
mv mantis-1.0.0.tar.gz mantis


3. 到 Subversion 的網站下載新版的 rpm 檔
   網址 http://subversion.tigris.org/
   RHEL 4 rpm 下載 http://summersoft.fay.ar.us/pub/subversion/latest/rhel-4/bin/

   利用 wget 下載目錄內的所有 rpm 檔,
代碼: [選擇]
mkdir /tmp/svn_download
cd /tmp/svn_download
wget http://summersoft.fay.ar.us/pub/subversion/latest/rhel-4/bin/mod_dav_svn-1.3.0-1.rhel4.i386.rpm
wget http://summersoft.fay.ar.us/pub/subversion/latest/rhel-4/bin/subversion-1.3.0-1.rhel4.i386.rpm
wget http://summersoft.fay.ar.us/pub/subversion/latest/rhel-4/bin/subversion-debuginfo-1.3.0-1.rhel4.i386.rpm
wget http://summersoft.fay.ar.us/pub/subversion/latest/rhel-4/bin/subversion-devel-1.3.0-1.rhel4.i386.rpm
wget http://summersoft.fay.ar.us/pub/subversion/latest/rhel-4/bin/subversion-perl-1.3.0-1.rhel4.i386.rpm
wget http://summersoft.fay.ar.us/pub/subversion/latest/rhel-4/bin/subversion-python-1.3.0-1.rhel4.i386.rpm
wget http://summersoft.fay.ar.us/pub/subversion/latest/rhel-4/bin/subversion-tools-1.3.0-1.rhel4.i386.rpm
wget http://summersoft.fay.ar.us/pub/subversion/latest/rhel-4/bin/swig-1.3.25-1.i386.rpm


   安裝 rpm 檔
代碼: [選擇]
rpm -Uvh /tmp/svn_download/*.rpm

4. 啟動 apache 及 mysql 並設定開機啟動
代碼: [選擇]
/etc/rc.d/init.d/httpd restart 或是 service httpd restart
/etc/rc.d/init.d/mysqld restart 或是 service mysqld restart


利用 ntsysv 選單設定開機啟動 httpd 及 mysqld 或是使用下列指令設定

代碼: [選擇]
chkconfig httpd on
chkconfig mysqld on



5. 利用 mysql 指令建立 Mantis 使用之資料庫 bugtracker 及使用者 mantis
代碼: [選擇]
mysql -uroot
mysql>CREATE DATABASE bugtracker;
mysql>USE bugtracker;
mysql>GRANT ALL PRIVILEGES ON bugtracker.* TO mantis@localhost IDENTIFIED BY 'mantis';



6. 利用瀏覽器連到 http://伺服器IP/mantis/
   會出現安裝畫面
   在 username 及 password 填入 相關資訊 ( 二個 username 及 password 皆是 mantis )
   點選 install

   依照執行後的說明建立設定檔 /var/www/html/mantis/config_inc.php
   參考設定如下
代碼: [選擇]
<?php
        $g_hostname      
"localhost";
        
$g_db_username   "mantis";
        
$g_db_password   "mantis";
        
$g_database_name "bugtracker";
        
$g_db_type       "mysql";
        
$g_default_language             'chinese_traditional_utf8';
?>


   利用 ssh 登入系統刪除或是修改 admin 目錄

代碼: [選擇]
rm -rf /var/www/html/mantis/admin 或是
mv /var/www/html/mantis/admin /var/www/html/mantis/admin_del


   再連到 http://伺服器IP/mantis/
   以 administrator 登入,密碼預設為 root
   登入後修改administrator 帳號的密碼


7. 建立存放 subversion 資料的目錄
代碼: [選擇]
mkdir /var/www/html/svnroot
chown -R apache:apache /var/www/html/svnroot


   建立一個 test 的專案
代碼: [選擇]
svnadmin create /var/www/html/svnroot/test
chown -R apache:apache /var/www/html/svnroot/test


   修改 /etc/httpd/conf.d/subversion.conf 的設定檔
   加入下列設定
代碼: [選擇]
  LoadModule dav_svn_module     modules/mod_dav_svn.so
   LoadModule authz_svn_module   modules/mod_authz_svn.so
   <Location /svnroot>
   DAV svn
   SVNAutoversioning on
   SVNParentPath /var/www/html/svnroot
   AuthzSVNAccessFile /etc/httpd/conf/svnaccessfile
   AuthType Basic
   AuthName "SubVersioN Login"
   AuthMySQLEnable on
   AuthMySQLUser mantis
   AuthMySQLPassword mantis
   AuthMySQLDB bugtracker
   AuthMySQLUserTable mantis_user_table
   AuthMySQLNameField username
   AuthMySQLPasswordField password
   AuthMySQLPwEncryption md5
   require user
   </Location>



8. 重新啟動 apache
 
代碼: [選擇]
 /etc/rc.d/init.d/httpd restart 或是 service httpd restart

9. 設定專案目錄的權限設定檔 /etc/httpd/conf/svnaccessfile
   注意: 使用者帳號必須在 mantis 有帳號才能通過認證
   參考資料 Subversion在linux中安裝步驟
   http://www.subversion.org.cn/bbs/viewtopic.php?p=744&sid=0fe4658a5a294e0835794727dbe80a4f
   格式說明如下

代碼: [選擇]
  #[group]表示組,是把用戶分成不同項目組,有admin、mdtool、mdms、meta、wuaf
   [groups]
   admin=lishuren,wkc
   mdtool=jyz,xuyan,bluejoe,khx,lsr
   mdms=liufeng,xwy,lsr
   mdss=xwy,lsr
   meta=lsr
   wuaf=jyz,xy
   dataset=liufeng,lsr

   #[]表示該目錄下的所有版本庫的數據,admin組的用戶都可以讀寫權限,其餘用戶可以有讀
   #[/]
   #@admin=rw
   #*=r
   #meta項目只有@meta組用戶有讀寫權限
   [meta:/]
   @meta=rw

   [mds:/]
   @admin=rw
   *=r
   #所有mds該項目的用戶都有讀寫權限
   [mds:/doc]
   *=rw
   #mds項目下mdtool/service/只有jyz有讀寫權限
   [mds:/mdtool/service]
   jyz=rw
   #mds項目下mdtool/sharing/只有xy有讀寫權限
   [mds:/mdtool/sharing]
   xy=rw
   #mds項目下mdtool/basic/只有khx有讀寫權限
   [mds:/mdtool/basic]
   khx=rw
   #mds項目下mdtool/structure/只有bluejoe有讀寫權限
   [mds:/mdtool/structure]
   bluejoe=rw
   #mds項目下mdtool/version/只有lsr有讀寫權限
   [mds:/mdtool/version]
   lsr=rw
   #mds項目下mdtool/WEB-INF只有mdtool組有讀寫權限
   [mds:/mdtool/WEB-INF]
   @mdtool=rw


   #mds項目下mdms/只有@mdms組的用戶有讀寫權限
   [mds:/mdms]
   @mdms=rw
   #mds項目下mdss/只有@mdss組的用戶有讀寫權限
   [mds:/mdss]
   @mdss=rw
   #mds項目只有@wuaf組用戶有讀寫權限
   [wuaf:/]
   @wuaf=rw
   #dataset項目只有@dataset組用戶有讀寫權限
   [dataset:/]
   @dataset=rw

   #private項目只有lsr用戶有讀寫權限,私人信息。絕對保密
   [private:/]
   lsr=rw

   #codata項目 敖成龍負責?#125;發
   [codata:/]
   aocl=rw
   hhb=rw

   建立權限管理文章,首先要對使用者進行分組,分組主要按照項目來確定,授權可以按照個人和組來授權。

10. 下載及安裝 Subversion 的 Client 端軟體 TortoiseSVN
    TortoiseSVN 網址 http://tortoisesvn.tigris.org/
    TortoiseSVN下載 http://nchc.dl.sourceforge.net/sourceforge/tortoisesvn/TortoiseSVN-1.3.1.5521-svn-1.3.0.msi
    TortoiseSVN 中文化下載 http://nchc.dl.sourceforge.net/sourceforge/tortoisesvn/LanguagePack_1.3.1_zh_TW.exe

    利用 http://伺服器IP/svnroot/專案名稱 來取出或是送交專案
    會提示輸入帳號及密碼 ( mantis 系統上的帳號及密碼 )

17
程式討論版 / script 的參數修改
« 於: 2005-07-22 00:09 »
各位學長

    我們在寫 shell 時常會有指定變數的初始值的設定,那要修改時要使用 vi 進去修改,萬一有地方沒有改到,則 shell 跑起來就會有問題,是否可以寫一支 shell 來作
這樣的事情呢,

我的想法如下

shell 的環境設定,一般大多是寫在檔案內,或是呼叫同一個環境設定檔,但是會有使用路徑不同的問題,

a.sh

代碼: [選擇]

# 指定環境 conf 檔
list_file=$HOME/a_menu/menu.ini

# 讀取環境路徑
PATH=`sed '/#/d' $list_file | awk -F= '/PATH=/{print $2}'`


menu.ini

代碼: [選擇]

#  conf 環境路徑
PATH=/sbin:/usr/sbin:/bin:/usr/bin:.


PS: 由於輸入"設定"二個字會有問題,所以改為 conf

那是否有辦法寫一支 sh 來作設定

在程式內先設定要修改 PATH 的值,使用者執行程式時
會秀出說明    "設定環境路徑"
會找出PATH 變數的值為 "/sbin:/usr/sbin:/bin:/usr/bin:."
輸入新的值為 "/sbin:/bin:." 若是沒有輸入直接按 Enter 則用
舊的設定值

這樣就可以更改 sh 的環境設定

另外一個問題是所有的 sh 都共用一個 menu.ini , 但是在 a.sh 之類的 sh 內有指定

代碼: [選擇]

list_file=$HOME/a_menu/menu.ini


要更改 /a_menu/ 的目錄為 /sys_menu/ 的話, 要怎麼樣一次更改指定路徑內所有的檔案有關 list_file 的設定

18
Linux 討論版 / RH9 安裝 Freeradius 錯誤!
« 於: 2005-07-20 19:15 »
請參考下列文章

安裝 FreeRADIUS + Files + MySQL 認證

http://phorum.study-area.org/viewtopic.php?t=33002&highlight=radius

19
請參考下列文章

安裝 FreeRADIUS + Files + MySQL 認證

http://phorum.study-area.org/viewtopic.php?t=33002&highlight=radius

20
我是參考下列資料

架設freeradius+mysql 的radius服務器
http://www.yesky.com/20030306/1655467.shtml

想玩無線網路認證值得先看的文件

http://phorum.study-area.org/viewtopic.php?t=31918&highlight=radius

及其他網路上利用 google 查到的資料作的說明

安裝 FreeRADIUS + Files + MySQL 認證

1. 下載 FreeRADIUS
wget ftp://ftp.freeradius.org/pub/radius/freeradius-1.0.4.tar.gz

2. 解壓縮
tar zxvf freeradius-1.0.4.tar.gz

3. 安裝 FreeRADIUS
cd freeradius-1.0.4
./configure --localstatedir=/var --sysconfdir=/etc
make
make install

註: 有時候會報找不到文件rlm_sql_mysql這個時候只要把庫文件加入系統搜索的目錄裡

  比如:

  cp /usr/local/lib/* /usr/lib


4. 建立mysql的數據庫raius的表
MySQL root 登入
mysql -uroot -p密碼

建立 radius 資料庫
create database radius;

建立 radius 使用者



匯入 radius 資料表
cd src/modules/rlm_sql/drivers/rlm_sql_mysql
mysql -uroot -p密碼 radius < db_mysql.sql

建立相關資料

加入群組資料

  mysql -uroot -p密碼 radius
代碼: [選擇]
insert into radgroupreply (groupname,attribute,op,value) values  ('user','Auth-Type',':=','Local');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Service-Type',':=','Framed-User');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Address',':=','255.255.255.254');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Netmask',':=','255.255.255.0');

加入測試賬號
  
代碼: [選擇]
insert into radcheck (username,attribute,op,value) values ('test','User-Password',':=','test');
測試賬號加入群組
  
代碼: [選擇]
insert into usergroup (username,groupname) values ('test','user');
以後新增人員時只要使用下列命令
 
代碼: [選擇]
insert into radcheck (username,attribute,op,value) values ('帳號','User-Password',':=','密碼');
insert into usergroup (username,groupname) values ('帳號','user');



4. 設定 RADIUS
更改freeradius的設置
cd /etc/raddb
備份原始設定檔
代碼: [選擇]
cp /etc/raddb/radiusd.conf   /etc/raddb/radiusd.conf-def
cp /etc/raddb/clients.conf   /etc/raddb/clients.conf-def
cp /etc/raddb/sql.conf       /etc/raddb/sql.conf-def
cp /etc/raddb/eap.conf       /etc/raddb/eap.conf-def
cp /etc/raddb/users          /etc/raddb/users-def

更改 radiusd.conf 部份設定 如下列
代碼: [選擇]
user = root
group = root
hostname_lookups = yes
allow_core_dumps = no
regular_expressions     = yes
extended_expressions    = yes
log_stripped_names = yes
log_auth = yes
log_auth_badpass = yes
log_auth_goodpass = yes
usercollide = no
lower_user = yes
lower_pass = no
nospace_user = no
nospace_pass = no

        files {
                usersfile = ${confdir}/users
                acctusersfile = ${confdir}/acct_users
                preproxy_usersfile = ${confdir}/preproxy_users

                compat = no
        }

        detail {
                detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d

                detailperm = 0600
        }

         detail auth_log {
                 detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d

                 detailperm = 0600
         }

         detail reply_log {
                 detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d

                 detailperm = 0600
         }





        acct_unique {
                key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
        }



        attr_filter {
                attrsfile = ${confdir}/attrs
        }

authorize {
        preprocess

        auth_log

        attr_filter

        chap

        mschap

        suffix

        eap

        files

        sql

}


authenticate {
        Auth-Type PAP {
                pap
        }

        Auth-Type CHAP {
                chap
        }

        Auth-Type MS-CHAP {
                mschap
        }

        eap
}


preacct {
        preprocess

        acct_unique

        suffix

        files
}

accounting {
        detail

        radutmp

        sql

}


session {
        radutmp

        sql
}


post-auth {

        reply_log

        sql


}

在 clients.conf 增加下列設定
代碼: [選擇]
client 192.168.1.1  {
       secret      = testing123
       shortname   = test
}

更改 sql.conf 部份設定如下列
代碼: [選擇]
sql {

        driver = "rlm_sql_mysql"

        server = "localhost"   # MySQL 主機位置
        login = "radius"       # MySQL 帳號
        password = "radius"    # MySQL 密碼

        radius_db = "radius"   # MySQL 資料庫名稱

        acct_table1 = "radacct"
        acct_table2 = "radacct"

        postauth_table = "radpostauth"

        authcheck_table = "radcheck"
        authreply_table = "radreply"

        groupcheck_table = "radgroupcheck"
        groupreply_table = "radgroupreply"

        usergroup_table = "usergroup"

        deletestalesessions = yes

        sqltrace = yes
        sqltracefile = ${logdir}/sqltrace.sql

        num_sql_socks = 5

        connect_failure_retry_delay = 60


        sql_user_name = "%{User-Name}"
更改 eap.conf 部份設定如下列
代碼: [選擇]
eap {
第 22 行 原     default_eap_type = md5
         改為   default_eap_type = peap

                timer_expire     = 60

                ignore_unknown_eap_types = no

                cisco_accounting_username_bug = no


                md5 {
                }

                leap {
                }

                gtc {

                        auth_type = PAP
                }

                # 取消下列幾行的註解
                tls {
                        private_key_password = whatever
                        private_key_file = ${raddbdir}/certs/cert-srv.pem

                        certificate_file = ${raddbdir}/certs/cert-srv.pem

                        CA_file = ${raddbdir}/certs/demoCA/cacert.pem

                        dh_file = ${raddbdir}/certs/dh
                        random_file = ${raddbdir}/certs/random

                }
                peap {
                        default_eap_type = mschapv2
                }

                mschapv2 {
                }
        }

更改 users 如下列
在第96行增加
代碼: [選擇]
"testf" Auth-Type := Local, User-Password == "testf"
                Reply-Message = "Hello, %u"

註解 第 154 ,155 行
#DEFAULT Auth-Type = System
# Fall-Through = 1

測試 flies 認證
radtest testf testf localhost 0 testing123

測試 MySQL 認證
radtest test test localhost 0 testing123

結果如下

[root@UI-linux raddb]# radtest testf testf localhost 0 testing123
Sending Access-Request of id 188 to 127.0.0.1:1812
        User-Name = "testf"
        User-Password = "testf"
        NAS-IP-Address = UI-linux
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=188, length=34
        Reply-Message = "Hello, testf"
[root@UI-linux raddb]# radtest test test localhost 0 testing123
Sending Access-Request of id 192 to 127.0.0.1:1812
        User-Name = "test"
        User-Password = "test"
        NAS-IP-Address = UI-linux
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=192, length=38
        Service-Type = Framed-User
        Framed-IP-Address = 255.255.255.254
        Framed-IP-Netmask = 255.255.255.0
[root@UI-linux raddb]#

21
酷!學園 精華區 / 圖檔即時更新
« 於: 2005-03-17 19:43 »
各位學長
   我現在利用 RRD CGI 作畫圖的動作
己經可以輸入結束時間去查詢過去的流量資料了
但是有幾個問題,使用運作上不是很順利,要請教
各位學長有沒有好一點的作法.

1. 產生圖檔不會更新的問題,有參考 abelyang 的建議
    先將圖檔刪除再去,產生新的圖檔及顥示在網頁上

   但是這樣變成會有重覆性的 io 動作,是否有辦法將圖
   檔產生在記憶體或是變數之類的,就不用將圖存入硬碟
   中了

2. 我是利用在url 加上查詢時間以更改畫圖的時間區段,
    但是在更改了查詢的時間後,輸入 Enter 鍵圖檔並不會
     更新,要按下重新整埋或是 F5 鍵 ,才會顥示新的圖檔,
   我也有在html 的輸出加上 no-cache 的設定,還是會有
    一様的情形.
   
   請問是否有方法解決上列的情形,不過如果能找到問題一的
   解決方法,也許就不會有問題二了


以後,

22
酷!學園 精華區 / rrd cgi 畫圖
« 於: 2005-01-21 18:55 »
各位學長
   發現一個網站 http://donitor.shows.it/
有利用rrdtool 去統計 eDonkey 的伺服器流量
在按下圖檔時會秀出不同時間區間的資料
分為 12h , 2d , 8d , 32d 幾種

示範  http://www.edu.uni-klu.ac.at/~splattne/donitor/monitor_12h.html

下載 http://aleron.dl.sourceforge.net/sourceforge/donitor/donitor_1.3.2.tgz

23
酷!學園 精華區 / rrdtool
« 於: 2005-01-14 11:44 »
abelyang 學長
   我的問題主要是因為,有需求要查看之前的資料
例如,三天前的每五分鐘一筆,一天的流量圖
在利用rrd 畫圖時,必需要等五分鐘後有新的資
料寫入rrd 去執行 rrd GRAPH 時才會更新圖檔
若是沒有新資料寫入,去執行 rrd GRAPH 並不會
更新圖檔,除非把圖檔刪除,建立新的檔案才會立即
更新,是否有什麼參數之類的,可以立即更新圖檔,
或是有什麼寫法,可以立即產生

24
酷!學園 精華區 / rrdcgi
« 於: 2005-01-11 18:06 »
感謝 abelyang 的回覆

我現在使用RRDCGI 作劃圖的動作,
相關及用法介結連結如下

http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/rrdcgi.html

可以在查看網頁時才劃圖更新資料,而且語法很簡單

如 abelyang 的回覆 利用 --start -1d --end now 可以指定要劃圖的時間

但是有一個問題是劃新的圖時會根據設定來制作圖檔,
隔一段時間再執行時也會更新資料
但是若是更改cgi 檔案的內容再劃圖則不會根據新的設定重新制作圖檔
不知是否有學長知道要如何處理,

註: 因為要提供使用者在網頁選擇日期後,劃出當天的資料

25
酷!學園 精華區 / rrdbrowse
« 於: 2005-01-07 17:45 »
各位學長
    在查看有關rrdtool 時發現了 rrdbrowse
請問各位學長有沒有人使用過,可以發表一下
使用感想及安裝方法等
網址 http://www.rrdbrowse.org/index.php

26
酷!學園 精華區 / rrdtool 問題
« 於: 2005-01-07 16:17 »
各位學長
   我最近在學習rrdtool 來作一些系統的效能監測
有下列幾個問題,請各位學長幫忙解答一下

1. 如何在要瀏覽資料時 ,再畫圖

     有不少篇文章提到要查資料時再畫圖,可以減少系統的負擔
     但是大多數的範例都是在更新資料時順便更新圖檔
     在文章中提到的 mrtg + rrdtool 使用 my14all.cgi
    我有實作成功,他會去讀取 mrtg的.cfg 檔案 , 作為畫圖的
     設定資料,但是我用 rrdtool 去更新 rrd 檔案時, 要如何直
     接讀取 rrd 檔作畫圖, 若是要自己寫 cfg 檔, 那要如何寫
    是否有格式及範例

2. 在更新資料及畫出日,週,月,年 的統計資料時,大多使用
     date %s 及 date -d 等功能,因為我的環境須要跨平台
     在 AIX 及 Solaris 上也要使用 , 但是在 某些平台上並
     沒有上列的功能可以使用,不知有什麼好的方法可以取代

3. 若是要查一天以前的詳細資料, 以五分鐘為單位的,
    一定要寫入資料庫嗎,有什麼辦法可以作到,
    另外若是要寫入資料庫的話要如何作

                                             感謝各位學長的協助

27
程式討論版 / 有問題
« 於: 2004-11-02 18:14 »
各位學長
   不知各位有沒有使用這個選單程式,
我把程式移值到 Redhat 9 時會發生
選了項目以後,並不會執行的情況,
請問是否有學長遇到過,要如何解決

28
程式討論版 / 用 C 寫的選單
« 於: 2004-10-29 18:18 »
各位學長
   發現一個用 C 寫成的選單程式
但是執行時有點問題
是否有學長可以協助除錯

用curses寫的通用菜單修改後的正確程序!

http://www.chinaunix.net/jh/23/98661.html

代碼: [選擇]
# cat menu.conf
!0!-1!1!50!20!1!1!

# cat menu.def
!0!1! 1.顯示test !more test!0!
!0!2! 2.顯示test2 !more test2!0!
!0!3! 3.顯示test !more test!0!
!0!4! 4.顯示test2 !more test2!0!
!0!5! 5.執行 VI ! vi !0!

29
程式討論版 / 在UNIX 的環境上有問題
« 於: 2004-10-29 12:57 »
各位學長
   我後來測試發現在linux 上可以正常的使用
但是移到 UNIX 系列時會有問題,
ANSI 的定位有問題,所以無法正確定顯示畫面

30
程式討論版 / 好用的選單程式
« 於: 2004-10-29 10:59 »
各位學長
    發現一個不錯的選單程式,只要修改設定檔案
就可以作出很好使用的選單程式

通用的選單畫面(shell編寫)
個人感覺--> 較簡單,但是資料清礎,原始網頁的資料執行有點問題
                       後面的是修改後可執行的範例

http://bbs.chinaunix.net/forum/24/20040414/304106.html

在Unix系統下用shell製作通用界面  
個人感覺--> 有光棒及下拉的多層式,但是設定檔的檔名及格式不清礎
                       所以完全不知程式執行出來的效果

http://www.ddvip.net/os/scounix/index1/4.htm

資料設定檔 menu.txt
代碼: [選擇]
# cat menu.txt
main|1|11|10|看文件test|tail -f test
main|2|12|10|看文件test|tail -f test
main|3|11|50|看文件test2|tail -f test2
main|4|12|50|看文件test2|tail -f test2
main|5|13|10|二級菜單|menu mmmm 0 aaaaa
mmmm|1|11|10|編輯文件|vi test


主程式檔 menu.sh
# cat menu.sh


代碼: [選擇]
menu()
{
browfile=$HOME/tmp/brow$RANDOM.$SECONDS
rm -f $browfile 1>/dev/null 2>&1
clear
[ $2 = "q" ] && return
awk ' BEGIN { FS = "|"
if ( "'$2'" == "0" )
printf("\033[4;20H%s","'$3'")
}
{
if ( "'$2'" == "0" )
{
if ( $1 == "'$1'" )
printf("\033[%s;%sH%s ---- %s",$3,$4,$2,$5)
}
else
{
if ( $1 == "'$1'" && $2 == "'$2'" )
printf("%s",$6) >"'$browfile'"
}
}
END {
if ( "'$2'" == "0" )
printf( "\033[20;20H輸入q - 退出: " )
} ' "./menu.txt"
[ -f $browfile ] &&
{
a=`cat $browfile`
$a
rm $browfile 1>/dev/null 2>&1
}
[ $2 = "0" ] || return
if [ $2 = "0" ]
then
read xz
[ $xz ] || xz="0"
[ $xz = "q" ] && return
[ $xz = "0" ] ||
{
menu $1 $xz $3
}
fi
menu $1 0 $3
return
}

menu main 0 "通用菜單"



利用 bash menu.sh 的執行結果


代碼: [選擇]
                  通用菜單






         1 ---- 看文件test                       3 ---- 看文件test2
         2 ---- 看文件test                       4 ---- 看文件test2
         5 ---- 二級菜單






                   ???輸入q - 退出:

頁: [1] 2