顯示文章

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


主題 - k1951223

頁: [1]
1
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 出去,是否可以作到
要如何設定

2
資料來源 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 的封包之後,連線則自行恢復。

實驗步驟完畢!!

3
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

4
資料來源
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

5
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

6
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 介面的功能的話,
拿來作開發,測試和教學環境應該是不錯的選擇
不知各位學長有沒有用過

7
酷!學園 精華區 / 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

8
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"

9
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

10
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 系統上的帳號及密碼 )

11
程式討論版 / 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 的設定

12
我是參考下列資料

架設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]#

13
程式討論版 / 好用的選單程式
« 於: 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 - 退出:

14
各位學長
       有沒有學長用過 ORCA 這套主機的效能監控程式,
好像可以作出類似 MRTG 的圖型,而且偵測的項目還不少,
感覺好像不錯用,是否有裝過的學長可以分享一下經驗,
或是大家一起來研究看看
首頁 http://www.orcaware.com/orca

15
各位學長
   我在sun solaris 上使用sh 寫有關陣列變數的使用
目前是使用bash 可以使用陣列,但是因為要提高通用
性想改成用sh 來執行,在陣列的變數使用上有問題,
要麻煩各位學長

1. 參數設定檔 test.ini
a=a b c d e f g
aa=11 22 33 44 55 66 77

2. 另一個檔案到test.ini 讀入設定的變數
a1=a b c d e f g
a2=11 22 33 44 55 66 77

想利用迴圈功能讀出陣列變數

之前有利用for 迴圈去做,但是只能讀出一組變數
有沒有辦法可以一次讀多組變數,在bash 上己經可以
執行了,但是改用sh 執行就有問題

希望結果,在執行 echo "$a1 $a2"時會出現
a 11
b 22
c 33
d 44
e 55
f 66
g 77

最好可以使用多組變數

16
各位學長
   我在windows 的討論區有發表了在windows 下使用iSCSI的文章
http://phorum.study-area.org/viewtopic.php?t=26096

在linux 上是否有學長實作 iSCSI Initiator 及 iSCSI Target
連線成功的,是否可以分享實作的經驗

17
微軟對iSCSI的支援資訊

Microsoft iSCSI Software Initiator v1.05a下載位址:

http://www.microsoft.com/downloads/details.aspx?FamilyID=12cb3c1a-15d6-4585-b385-befd1319f825&DisplayLang=en

Win iSCSI Target
iSCSI協議是當前最HOT的網絡存儲協議,可以解決SCSI協議在連接的設備數目和連接
距離方面的限制。用戶可以像使用本地的硬盤一樣訪問網絡上任何位置的存儲資源,
也可以將原有的舊的分散的存儲資源整合成一個大的存儲池。
    目前微軟已經提供了iSCSI啟動器(Client)的支持,而目前iSCSI目標器(Server)
    主要由硬件實現。本軟件移植了UNH的linux下的iSCSI目標器代碼,加上微軟的
    啟動器(可以免費下載)就可以方便地搭建自己的iSCSI試驗平台,也就是當前流行
    的存儲區域網SAN環境。界面簡潔使用,而且有FILE_IO和MEMORY_IO兩種工作
    模式。其中MEMORY_IO使用內存實現RAM DISK,主要用於性能測試;FILE_IO則
    可用於實際的存儲操作。0.5版添加了二次開發接口,可以和自己的後端存儲
    結合起來構成一個完整的存儲系統。

資料來源及下載位置,最近的簡體版為0.6 (簡體)
http://down.vv66.com/soft/35265.htm

Win iSCSI Target 英文網頁

http://www.sofotex.com/Win-iSCSI-Target-download_L21454.html

18
Linux 討論版 / [問題]Fedora FC2 磁帶機的問題
« 於: 2004-08-23 23:43 »
各位學長
   我有一台主機,裝了Fedora Fc2 的版本,
核心升級為 kernel-2.6.8-1.526
裝了AEC6712UW SCSI 卡
連接了 IBM ULT3580-TD1 的磁帶機
在使用  mt -f /dev/nst0 status指令時
會出現下列訊息 /dev/nst0: No such device or address
而無法使用磁帶機,請問各位學長是因為什麼原因

使用lsmod 查詢的結果如下
]# lsmod
Module                  Size  Used by
md5                     3649  1
ipv6                  211845  12
autofs4                20293  0
tulip                  40673  0
floppy                 53873  0
sg                     28257  0
st                     30685  0
scsi_mod              103953  2 sg,st
microcode               5473  0
uhci_hcd               28249  0
ext3                   95401  3
jbd                    65625  1 ext3
dm_mod                 46677  2

使用lspci 查詢的結果如下
# lspci
00:00.0 Host bridge: VIA Technologies, Inc. VT8605 [ProSavage PM133] (rev 01)
00:01.0 PCI bridge: VIA Technologies, Inc. VT8605 [PM133 AGP]
00:04.0 ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South] (rev 22)
00:04.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 10)
00:04.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 10)
00:04.4 Bridge: VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] (rev 30)
00:04.5 Multimedia audio controller: VIA Technologies, Inc. VT82C686 AC97 Audio Controller (rev 20)
00:05.0 Ethernet controller: Digital Equipment Corporation DECchip 21140 [FasterNet] (rev 22)
00:07.0 SCSI storage controller: Artop Electronic Corp AEC6712UW SCSI (rev 01)
01:00.0 VGA compatible controller: S3 Inc. ProSavage PM133 (rev 02)


使用dmesg 查詢的結果如下
SCSI subsystem initialized
PCI: Found IRQ 11 for device 0000:00:07.0
   ACARD AEC-671X PCI Ultra/W SCSI-3 Host Adapter: 0 IO:ec00, IRQ:11.
         ID:  1  IBM     ULT3580-TD1     25D4
         ID:  7  Host Adapter
scsi0 : ACARD AEC-6710/6712/67160 PCI Ultra/W/LVD SCSI-3 Adapter Driver V2.6+ac
  Vendor: IBM       Model: ULT3580-TD1       Rev: 25D4
  Type:   Sequential-Access                  ANSI SCSI revision: 03
st: Version 20040403, fixed bufsize 32768, s/g segs 256
Attached scsi tape st0 at scsi0, channel 0, id 1, lun 0
st0: try direct i/o: yes (alignment 512 B), max page reachable by HBA 1048575
st0: Block limits 1 - 16777215 bytes.
Attached scsi generic sg0 at scsi0, channel 0, id 1, lun 0,  type 1

19
各位學長
  小弟有一台主機本來是安裝Fedora FC1 的版本,
連接SCSI 的 LTO 磁帶機作資料的備份,在FC1 時
是可以正常使用的,前幾天將作業系統重新安裝為
Fecora FC2 的版本,安裝時選擇完整安裝,但是發
生了問題,就是在X-Window 的硬體瀏覽可以看到
SCSI 卡片,但是/dev/st0 的磁帶機就是無法使用
,下mt -f /dev/st0 status 指令時會出現下列的
錯訊訊息/dev/st0: No such device or address
麻煩各位提供意見,硬體規格如下
一般的組裝PC
SCSI 卡是 AEC6712UW SCSI
IBM 100/200GB 的LTO

20
各位學長
   RedHat 好像自8.0 起就有內建支援WebDAV,
但是國內對於WebDAV 的設定,使用等的討論文件
好像並不多,我並沒有找到,由於在使用Samba 來
利用 Linux 作 File Server 時,常發生Windows 的用戶
端在登入時,電腦會像當機一樣等很久,但是又只有一部
份人員會有上列的情況,而且有時會發生,有時又正常,
所以想改用 WebDAV 來作檔案的分享,請問各位學長
是否有使用過,要如何設定,在google 上找到一個日文
的網站有介紹,但是看不懂,要請各位學長幫忙一下
http://www.atmarkit.co.jp/flinux/special/webdav/webdav01a.html

21
各位學長
    有關我提出來的問題如何在Shell Script 內設定[變數名稱2=變數名稱1+特定文字],
是因為在寫 iptables 的執行 Script 時有下列應用,
但是如果有多個網路介面
則須要將同樣的東西寫很多次,
不知是否可以使用雙迴圈的方式來執行

echo "-------- 開放內部網路介面各網段互連 --------"
#開放各網段互連的卡片資料
#eth0 是連外的網卡
eth0_if_A=""
#eth1 是連DMZ區的網卡
eth1_if_A="eth0"
#eth2 是連內部網路的網卡
eth2_if_A="eth0 eth1"

#eth0 ACCEPT eth list

for if_eth in $eth0_if_A; do
    iptables -A block -i eth0 -o $if_eth -m state --state NEW,INVALID -j ACCEPT
done

#eth1 ACCEPT eth list

for if_eth in $eth1_if_A; do
    iptables -A block -i eth1 -o $if_eth -m state --state NEW,INVALID -j ACCEPT
done

#eth2 ACCEPT eth list

for if_eth in $eth2_if_A; do
    iptables -A block -i eth2 -o $if_eth -m state --state NEW,INVALID -j ACCEPT
done


列如改為
[變數1]為網卡介面的資料,例  eth="eth0 eth1 eth2 eth3"
[變數2]的格式為[變數1的內容]_acc,例子如下
eth0_acc=""
eth1_acc="eth0"
eth2_acc="eth0 eth1"

iptables -A block -i [變數1] -o [變數2] -m state --state NEW,INVALID -j ACCEPT


如果可以這樣讀取變數資料,就可以將上列的程式碼縮短,而且也較好維護
但是小弟無法設定出 變數2 的格式

22
Virtual Router Redundancy Protocol implementation

文章出處在下列網址
http://cldp.netking.com.tw/Adv-Routing-HOWTO-20.html

這個完完全全是為了冗餘(redundancy)所需。用兩台各自擁有 IP 位址和 MAC 位址的機器﹐共同建立起第三個 IP 位址和 MAC 位址﹐當然﹐它是虛擬的。如此設計本來純粹是為路由器而設計的﹐它需要恆定的 MAC 位址﹐但同時也替伺服器工作。

這個方法的精妙之處是﹐設定起來不費吹灰之力。不需要核心編譯或修補﹐全為使用者空間。

只需在所有參與服務的機器上執行﹕

# vrrpd -i eth0 -v 50 10.0.0.22


您已漸入佳境了﹗10.0.0.22 現在由您其中一台伺服器擔當﹐很可能是首先執行 vrrp daemon 的機器。現在斷掉這台電腦的連線﹐在極短瞬間之內﹐其它一台電腦就會接管這個 10.0.0.22 位址﹐還有它的 MAC 位址。

我曾在這裡嘗試過﹐而且不到一分鐘就設定起來了。然而不知道什麼原因﹐它會將預設網關丟棄掉﹐不過可以用 -n 旗標來避免啦。

這是一個 '活生生' 的 failover 機制﹕


64 bytes from 10.0.0.22: icmp_seq=3 ttl=255 time=0.2 ms
64 bytes from 10.0.0.22: icmp_seq=4 ttl=255 time=0.2 ms
64 bytes from 10.0.0.22: icmp_seq=5 ttl=255 time=16.8 ms
64 bytes from 10.0.0.22: icmp_seq=6 ttl=255 time=1.8 ms
64 bytes from 10.0.0.22: icmp_seq=7 ttl=255 time=1.7 ms


竟然沒有丟失 *任何一個* ping 封包﹗我在第 4 個封包之後將我的 P200 連線切斷﹐緊接著我的 486 就接手了﹐您可以發現延遲的增加。


註:有學長用過這一套軟體吧,看說明感覺好像很好用的樣子
      原文章上的連結有問題,下列網址是我在網路上找到的,但是年代有點久遠了
      不知有學長們用過嗎,或是有較新的資訊可以和大家分享
       VRRPd's homepage
      http://www.off.net/~jme/vrrpd/index.html

23
各位學長
   是否有關於各家ISP的IP範圍資料或是相關網址呢
有了這些資料對於要作分流之類有很大的幫助
我先提供下列資料
TaNet IP 範圍資料
http://www.edu.tw/tanet/bulletin/ip.txt

Proxy Server 分流方法
第二條ADSL的架設及使用方法
http://netlab.kh.edu.tw/document/%E5%B0%8F%E6%B8%AF%E5%9C%8B%E5%B0%8FADSL/adsl2_1.htm

頁: [1]