tag:blogger.com,1999:blog-52876746136222065362024-02-07T11:29:52.672+08:00洋蔥爸的工作雜記只是紀錄一些工作上遇到的亂七八糟心得以及測試結果罷了...洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.comBlogger77125tag:blogger.com,1999:blog-5287674613622206536.post-78004634082047533822010-04-08T14:10:00.004+08:002010-04-08T14:18:56.872+08:00How to dump DNS cache file of BIND9?之前我們在"<a href="http://tosian.blogspot.com/2009/08/linux-server-turn-on-dns-bind-query.html">如何在 Linux server 上 turn on DNS (BIND) 的 Query logging</a>"的文章中提過 <span style="font-weight: bold;">rndc</span> 這個好用的指令,這次也要用到這個小工具來 dump DNS 的 RR cache 資料。<br /><br />基本上用法很簡單,依據 rndc 的使用說明可以看到如下:<blockquote><span style="font-weight: bold;">dumpdb [-all|-cache|-zones] [view ...]</span><br /> Dump cache(s) to the dump file (named_dump.db).</blockquote><span class="fullpost">所以我們直接敲入 "<span style="color: rgb(0, 0, 153);">rndc dumpdb -cache</span>" 就行了,不過產生的 Cache db 檔並不像說明所列的 named_dump.db 而是 cache_dump.db,下面就是範例:<blockquote>[root@ns1 named]# <span style="color: rgb(0, 0, 153);">ls -alrt /var/named/chroot/var/named/data/ </span><br />total 24<br />drwxr-x--- 4 named named 12288 Mar 31 12:23 ..<br />drwxrwx--- 2 named named 4096 Apr 8 13:24 .<br />[root@ns1 named]#<br />[root@ns1 named]# <span style="color: rgb(0, 0, 153);">rndc dumpdb -cache</span><br />[root@ns1 named]# <span style="color: rgb(0, 0, 153);">ls -alrt /var/named/chroot/var/named/data/</span><br />total 1376<br />drwxr-x--- 4 named named 12288 Mar 31 12:23 ..<br />-rw-r--r-- 1 named named 1379904 Apr 8 13:25 cache_dump.db<br />drwxrwx--- 2 named named 4096 Apr 8 13:25 .<br />[root@ns1 named]#</blockquote>以下是 /var/named/chroot/var/named/data/cache_dump.db 檔案開頭的一小部分,僅供參考:<blockquote>[root@ns1 named]# <span style="color: rgb(0, 0, 153);">less /var/named/chroot/var/named/data/cache_dump.db</span><br />;<br />; Start view _default<br />;<br />;<br />; Cache dump of view '_default'<br />;<br />$DATE 20100408052518<br />; glue<br />ac. 19164 IN NS A.NIC.ac.<br /> 19164 IN NS A.NS13.NET.<br /> 19164 IN NS B.NIC.ac.<br /> 19164 IN NS B.NIC.IO.<br /> 19164 IN NS B.NS13.NET.<br /> 19164 IN NS NS1.COMMUNITYDNS.NET.<br /> 19164 IN NS NS3.ICB.CO.UK.<br />; glue<br />A.nic.ac. 19164 A 64.251.31.177<br />; glue<br />b.nic.ac. 15120 A 78.104.145.37<br />; glue<br />ae. 42322 NS NS1.AEDNS.ae.<br /> 42322 NS NS2.AEDNS.ae.<br /> 42322 NS SEC3.APNIC.NET.<br /> 42322 NS NS-AE.RIPE.NET.<br /> 42322 NS SNS-PB.ISC.ORG.<br /> 42322 NS NSEXT-PCH.AEDNS.ae.<br />; glue<br />NS1.AEDNS.ae. 42322 A 79.98.120.73<br />; glue<br />NS2.AEDNS.ae. 42322 A 79.98.121.73<br />; glue<br />NSEXT-PCH.AEDNS.ae. 42322 A 199.4.137.1<br />; glue<br /> 42322 AAAA 2001:500:7d::1<br />; answer<br />www.google.ae. 25355 CNAME www.google.com.<br />; authauthority<br />bittorrent.am. 32399 NS ns1.everydns.net.<br /> 32399 NS ns2.everydns.net.<br /> 32399 NS ns3.everydns.net.<br /> 32399 NS ns4.everydns.net.<br />; additional<br />y.am. 28607 NS ns1.mdnsservice.com.<br /> 28607 NS ns2.mdnsservice.com.<br /> 28607 NS ns3.mdnsservice.com.<br />; answer<br />curinfo.an. 40356 MX 0 wabi.curinfo.an.<br />; glue<br />AQ. 120558 NS NS1.DNS.AQ.<br /> 120558 NS FLAG.EP.NET.</blockquote>報告完畢。</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com4tag:blogger.com,1999:blog-5287674613622206536.post-90231436832512067282010-03-30T23:23:00.003+08:002010-03-31T15:29:24.837+08:00DNS Query Performance Testing Tool -- "queryperf"這兩天為了測試 DNS server 的 System capacity, 才發現原來還有 "queryperf" 這個小工具,這是 Bind9 內帶的工具,不過我找了一下,雖然我在一開始裝機時就將 Bind9 的相關 package 都安裝了,不過似乎還是沒找到 "queryperf" 的 command...不過沒關係,找不到就直接裝吧...<br /><br />首先看一下今天的測試環境,這裡有兩台 DNS server,中間都是 2G channel bonding 的網路:<br />Master DNS server : RHEL 5.2 (bind-9.3.4-6.P1)<br />Slave DNS server : RHEL 5.1 (bind-9.3.3-7)<span class="fullpost"><br /><br />首先我們先到 <a href="http://www.isc.org/">ISC -- Internet Systems Consortium</a> 的 ftp 站 <a href="http://ftp.isc.org/isc/bind9/">http://ftp.isc.org/isc/bind9/</a> 去抓 Bind9 Tarbal file : (找自己需要的版本就好)<blockquote> [root@ns1 opt]# <span style="color: rgb(0, 0, 153);">wget http://ftp.isc.org/isc/bind9/9.3.4-P1/bind-9.3.4-P1.tar.gz</span><br />--16:58:53-- http://ftp.isc.org/isc/bind9/9.3.4-P1/bind-9.3.4-P1.tar.gz<br />Resolving ftp.isc.org... 204.152.184.110, 2001:4f8:0:2::18<br />Connecting to ftp.isc.org|204.152.184.110|:80...<br /><br />[root@ns2 opt]# <span style="color: rgb(0, 0, 153);">wget http://ftp.isc.org/isc/bind9/9.3.3/bind-9.3.3.tar.gz</span><br />--16:56:54-- http://ftp.isc.org/isc/bind9/9.3.3/bind-9.3.3.tar.gz<br />Resolving ftp.isc.org... 204.152.184.110, 2001:4f8:0:2::18<br />Connecting to ftp.isc.org|204.152.184.110|:80...</blockquote>抓回來之後,這裡我們擺在 /opt 底下,然後解壓縮 :<blockquote>[root@ns1 opt]# <span style="color: rgb(0, 0, 153);">tar -zxvf bind-9.3.4-P1.tar.gz</span><br />[root@ns2 opt]# <span style="color: rgb(0, 0, 153);">tar -zxvf bind-9.3.3.tar.gz</span></blockquote>接著我們到 /opt/bind-9.3.4-P1/contrib/queryperf/ 目錄下,這裡就是放 queryperf 的位置。<blockquote>[root@ns1 opt]# <span style="color: rgb(0, 0, 153);">cd bind-9.3.4-P1/contrib/queryperf/</span></blockquote>再來是 "<span style="color: rgb(0, 0, 153);">sh configure</span>" 以及 "<span style="color: rgb(0, 0, 153);">make</span>" 來編譯我們要的 queryperf 指令:<blockquote>[root@ns1 queryperf]# <span style="color: rgb(0, 0, 153);">sh configure</span><br />checking for gcc... gcc<br />checking for C compiler default output... a.out<br />checking whether the C compiler works... yes<br />checking whether we are cross compiling... no<br />checking for suffix of executables...<br />checking for suffix of object files... o<br />checking whether we are using the GNU C compiler... yes<br />checking whether gcc accepts -g... yes<br />checking for library containing res_mkquery... -lresolv<br />checking for socket in -lsocket... no<br />checking for inet_ntoa in -lnsl... yes<br />checking for gethostbyname2... yes<br />checking for getaddrinfo... yes<br />checking for getnameinfo... yes<br />checking for socklen_t... yes<br />checking for sa_len... no<br />configure: creating ./config.status<br />config.status: creating Makefile</blockquote><blockquote>[root@ns1 queryperf]# <span style="color: rgb(0, 0, 153);">make</span><br />gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DHAVE_LIBNSL=1 -DHAVE_GETHOSTBYNAME2=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -c queryperf.c<br />gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DHAVE_LIBNSL=1 -DHAVE_GETHOSTBYNAME2=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 queryperf.o -lnsl -lresolv -lm -o queryperf<br />[root@ns1 queryperf]#</blockquote>接著就可以看到產生了一個新的檔案 "<span style="color: rgb(0, 0, 153);">queryperf</span>",這就是我們等一下要用到的指令了。<blockquote>[root@ns1 queryperf]# <span style="color: rgb(0, 0, 153);">ls -alrt</span><br />total 292<br />-rw-rw-r-- 1 10132 wheel 2981 Jul 12 2001 README<br />-rw-rw-r-- 1 10132 wheel 1831 May 13 2004 configure.in<br />-rwxrwxr-x 1 10132 wheel 97865 May 13 2004 configure<br />-rw-rw-r-- 1 10132 wheel 603 Jul 20 2004 Makefile.in<br />-rw-rw-r-- 1 10132 wheel 50279 Jan 5 2006 queryperf.c<br />drwxrwxr-x 2 10132 wheel 4096 Jun 28 2007 utils<br />drwxrwxr-x 2 10132 wheel 4096 Mar 30 17:29 missing<br />drwxrwxr-x 2 10132 wheel 4096 Mar 30 17:29 input<br />drwxrwxr-x 11 10132 wheel 4096 Mar 30 17:29 ..<br />-rw-r--r-- 1 root root 791 Mar 30 17:30 Makefile<br />-rwxr-xr-x 1 root root 19302 Mar 30 17:30 config.status<br />-rw-r--r-- 1 root root 8188 Mar 30 17:30 config.log<br />-rw-r--r-- 1 root root 34692 Mar 30 17:30 queryperf.o<br />-rwxr-xr-x 1 root root 34059 Mar 30 17:30 <span style="font-weight: bold; color: rgb(0, 0, 153);">queryperf</span><br />drwxrwxr-x 5 10132 wheel 4096 Mar 30 17:30 .</blockquote>README 檔案裡面有簡介如何使用,當然也可以用 -h 來秀一下 useage:<blockquote>[root@ns1 queryperf]# <span style="color: rgb(0, 0, 153);">/opt/bind-9.3.4-P1/contrib/queryperf/queryperf -h</span><br /><br />DNS Query Performance Testing Tool<br />Version: $Id: queryperf.c,v 1.1.1.2.2.5.4.4 2006/01/05 02:06:09 marka Exp $<br /><br /><br />Usage: queryperf [-d datafile] [-s server_addr] [-p port] [-q num_queries]<br /> [-b bufsize] [-t timeout] [-n] [-l limit] [-f family] [-1]<br /> [-i interval] [-r arraysize] [-u unit] [-H histfile]<br /> [-T qps] [-e] [-D] [-c] [-v] [-h]<br />-d specifies the input data file (default: stdin)<br />-s sets the server to query (default: 127.0.0.1)<br />-p sets the port on which to query the server (default: 53)<br />-q specifies the maximum number of queries outstanding (default: 20)<br />-t specifies the timeout for query completion in seconds (default: 5)<br />-n causes configuration changes to be ignored<br />-l specifies how a limit for how long to run tests in seconds (no default)<br />-1 run through input only once (default: multiple iff limit given)<br />-b set input/output buffer size in kilobytes (default: 32 k)<br />-i specifies interval of intermediate outputs in seconds (default: 0=none)<br />-f specify address family of DNS transport, inet or inet6 (default: any)<br />-r set RTT statistics array size (default: 50000)<br />-u set RTT statistics time unit in usec (default: 100)<br />-H specifies RTT histogram data file (default: none)<br />-T specify the target qps (default: 0=unspecified)<br />-e enable EDNS 0<br />-D set the DNSSEC OK bit (implies EDNS)<br />-c print the number of packets with each rcode<br />-v verbose: report the RCODE of each response on stdout<br />-h print this usage</blockquote>使用上主要有兩個步驟,第一就是先建立一個 RR 測試檔案,裡面的格式也很簡單,就是:<blockquote>aaa.com NS<br />bbb.com MX<br />ccc.com A</blockquote>這裡我先建兩個含我內部所有 RR record 的測試檔案:<br />/opt/querytest_list.txt >> 裡面有 <span style="font-weight: bold;">1032</span> 筆 record<br />/opt/querytest_list2.txt >> 裡面有 <span style="font-weight: bold;">519120</span> 筆 record<br /><br />至於指令的用法也很簡單,就是 "<span style="color: rgb(0, 0, 153);">./queryperf -s hostname -d test_file</span>",其中 hostname 是被測試的 DNS server IP address 或 hostname,至於 test_file 就是剛剛編輯的 RR file 囉。<br /><br />建議是直接裝在 Slave 的機器上,去測試 Master 的機器比較不影響效能,雖然我試完發現差異不太大。這裡我直接示範在 Master server 上跑 queryperf 的結果:<br /><br />先測試 query 1000 筆 record 的結果:<blockquote>[root@ns1 named]# <span style="color: rgb(0, 0, 153);">/opt/bind-9.3.4-P1/contrib/queryperf/queryperf -s localhost -d /opt/querytest_list.txt</span><br /><br />DNS Query Performance Testing Tool<br />Version: $Id: queryperf.c,v 1.1.1.2.2.5.4.4 2006/01/05 02:06:09 marka Exp $<br /><br />[Status] Processing input data<br />[Status] Sending queries (beginning with 127.0.0.1)<br />[Status] Testing complete<br /><br />Statistics:<br /><br />Parse input file: once<br />Ended due to: reaching end of file<br /><br />Queries sent: 1030 queries<br />Queries completed: 1030 queries<br />Queries lost: 0 queries<br />Queries delayed(?): 0 queries<br /><br />RTT max: 0.001296 sec<br />RTT min: 0.000073 sec<br />RTT average: 0.000344 sec<br />RTT std deviation: 0.000116 sec<br />RTT out of range: 0 queries<br /><br />Percentage completed: 100.00%<br />Percentage lost: 0.00%<br /><br />Started at: Wed Mar 30 20:35:04 2010<br />Finished at: Wed Mar 30 20:35:04 2010<br />Ran for: 0.020277 seconds<br /><br />Queries per second: 50796.468906 qps<br /><br />[root@ns1 named]#</blockquote>再先測試 query 519120 筆 record 的結果:<blockquote>[root@ns1 named]# <span style="color: rgb(0, 0, 153);">/opt/bind-9.3.4-P1/contrib/queryperf/queryperf -s localhost -d /opt/querytest_list2.txt</span><br /><br />DNS Query Performance Testing Tool<br />Version: $Id: queryperf.c,v 1.1.1.2.2.5.4.4 2006/01/05 02:06:09 marka Exp $<br /><br />[Status] Processing input data<br />[Status] Sending queries (beginning with 127.0.0.1)<br />[Status] Testing complete<br /><br />Statistics:<br /><br />Parse input file: once<br />Ended due to: reaching end of file<br /><br />Queries sent: 519120 queries<br />Queries completed: 519120 queries<br />Queries lost: 0 queries<br />Queries delayed(?): 0 queries<br /><br />RTT max: 0.002820 sec<br />RTT min: 0.000042 sec<br />RTT average: 0.000382 sec<br />RTT std deviation: 0.000085 sec<br />RTT out of range: 0 queries<br /><br />Percentage completed: 100.00%<br />Percentage lost: 0.00%<br /><br />Started at: Wed Mar 30 20:36:31 2010<br />Finished at: Wed Mar 30 20:36:41 2010<br />Ran for: 10.158483 seconds<br /><br />Queries per second: 51102.118299 qps<br /><br />[root@ns1 named]#</blockquote>最後是在 Slave server 上跑 queryperf 去測試 Master server,先測試 query 1000 筆 record 的結果:<blockquote>[root@ns2 slaves]# <span style="color: rgb(0, 0, 153);">/opt/bind-9.3.3/contrib/queryperf/queryperf -s ns1 -d /opt/querytest_list.txt</span><br /><br />DNS Query Performance Testing Tool<br />Version: $Id: queryperf.c,v 1.1.1.2.2.5.4.4 2006/01/05 02:06:09 marka Exp $<br /><br />[Status] Processing input data<br />[Status] Sending queries (beginning with xx.xx.xx.1)<br />[Status] Testing complete<br /><br />Statistics:<br /><br />Parse input file: once<br />Ended due to: reaching end of file<br /><br />Queries sent: 1030 queries<br />Queries completed: 1030 queries<br />Queries lost: 0 queries<br />Queries delayed(?): 0 queries<br /><br />RTT max: 0.000572 sec<br />RTT min: 0.000128 sec<br />RTT average: 0.000339 sec<br />RTT std deviation: 0.000049 sec<br />RTT out of range: 0 queries<br /><br />Percentage completed: 100.00%<br />Percentage lost: 0.00%<br /><br />Started at: Wed Mar 30 20:42:17 2010<br />Finished at: Wed Mar 3 20:42:17 2010<br />Ran for: 0.018820 seconds<br /><br />Queries per second: 54729.011690 qps<br /><br />[root@ns2 slaves]#</blockquote>再先測試 query 519120 筆 record 的結果:<blockquote>[root@ns2 slaves]# <span style="color: rgb(0, 0, 153);">/opt/bind-9.3.3/contrib/queryperf/queryperf -s ns1 -d /opt/querytest_list2.txt</span><br /><br />DNS Query Performance Testing Tool<br />Version: $Id: queryperf.c,v 1.1.1.2.2.5.4.4 2006/01/05 02:06:09 marka Exp $<br /><br />[Status] Processing input data<br />[Status] Sending queries (beginning with xx.xx.xx.1)<br />[Status] Testing complete<br /><br />Statistics:<br /><br />Parse input file: once<br />Ended due to: reaching end of file<br /><br /><span style="font-weight: bold; color: rgb(255, 0, 0);">Queries sent: 519120 queries</span><br />Queries completed: 519120 queries<br />Queries lost: 0 queries<br />Queries delayed(?): 0 queries<br /><br />RTT max: 0.000818 sec<br />RTT min: 0.000059 sec<br />RTT average: 0.000330 sec<br />RTT std deviation: 0.000044 sec<br />RTT out of range: 0 queries<br /><br />Percentage completed: 100.00%<br />Percentage lost: 0.00%<br /><br />Started at: Wed Mar 30 20:42:51 2010<br />Finished at: Wed Mar 30 20:43:00 2010<br />Ran for: 9.113103 seconds<br /><br /><span style="color: rgb(255, 0, 0); font-weight: bold;">Queries per second: 56964.131756 qps</span><br /><br />[root@ns2 slaves]#</blockquote>這裡我將 Master DNS server 的 IP 馬賽克起來了...由上面的結果可以看的出來,在這一台機器上的每秒最大查詢數量大約在 5萬6千筆左右,以上,報告完畢。<br /><br />------------------------------------------------------------------------------------<br />2010/03/31 補充資料:<br /><br />再查了一下資料發現其實 Bind9 內建的小工具應該是 dnsperf/resperf 才對,用法跟 queryperf 幾乎一樣,有興趣可以參考一下下面的網頁:<br /><br /><a href="http://www.linuxcertif.com/man/1/dnsperf/">Linux Certif - Man dnsperf(1)</a><br /><a href="http://www.linuxcertif.com/man/1/resperf/">Linux Certif - Man resperf(1)</a><br /><br />這裡附上一個測試結果以供比較:<blockquote>[root@ns2 slaves]# <span style="color: rgb(0, 0, 153);">/usr/local/nom/bin/dnsperf -s ns1 -d /opt/querytest_list2.txt</span><br /><br />DNS Performance Testing Tool<br /><br />Nominum Version 1.0.1.0<br /><br />[Status] Processing input data<br />[Status] Sending queries (to 113.21.80.1)<br />[Status] Testing complete<br /><br />Statistics:<br /><br />Parse input file: once<br />Ended due to: reaching end of file<br /><br />Queries sent: 519120 queries<br />Queries completed: 519120 queries<br />Queries lost: 0 queries<br /><br />Avg request size: 52 bytes<br />Avg response size: 136 bytes<br /><br />Percentage completed: 100.00%<br />Percentage lost: 0.00%<br /><br />Started at: Wed Mar 31 14:59:03 2010<br />Finished at: Wed Mar 31 14:59:13 2010<br />Ran for: 9.362073 seconds<br /><br />Queries per second: 55449.257873 qps<br /><br />[root@ns2 slaves]#</blockquote>補充完畢~</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-6614277895905880642009-10-08T22:24:00.001+08:002009-10-11T20:27:50.254+08:00首次在 Solaris 10 上 Mount RHEL5 NFS mount point fail之前有在 <a href="http://tosian.blogspot.com/2008/07/linux-autofs.html">LINUX AutoFS 實作</a> 中提到關於在 RHEL 上以 AutoFS 的方式來 Mount NFS partitions from RHEL5 NFS server,今天要試一下在另一台 Solaris 10 的機器上,一樣用 AutoMount 的方式來從 RHEL5 NFS server 上 Mount NFS partitions,不過似乎遇到怪怪的問題了,在改完 /etc/auto_master 與 /etc/auto_nfs ,(這裡要特別注意一下喔,在 RHEL 上這兩個檔案為 /etc/auto.master and /etc/auto.nfs 而在 Solaris 上則改成底線符號喔),並將 svc:/system/filesystem/autofs:default 給重啟後,發現仍無法將遠端 RHEL5 share 的目錄給 mount 上來啊,出現了如下的錯誤訊息:<blockquote>root@KHCFEMS01 # <span style="color: rgb(0, 0, 153);">ls -al /NFSBKP/configuration</span><br />/NFSBKP/configuration: <span style="color: rgb(255, 0, 0);">Permission denied</span><br />total 1</blockquote><span class="fullpost">一開始還以為真的是沒在 RHEL5 NFS server 上的 /etc/exports 裡加上這部 Solaris 的權限,再次檢查之後才發現不對啊,權限都有,查看一下 Solaris 機器上的 Log 檔發現如下的錯誤:<blockquote>root@KHCFEMS01 # <span style="color: rgb(0, 0, 153);">tail -3 /var/adm/messages</span><br />Oct 8 18:18:44 KHCFEMS01 automountd[26815]: [ID 834250 daemon.error] Mount of KHCBKPS01:/NBU/KHCFEMS01 on /NFSBKP/configuration: Not owner<br />Oct 8 18:23:39 KHCFEMS01 <span style="color: rgb(255, 0, 0);">nfs: [ID 435675 kern.warning] WARNING: NFS server initial call to KHCBKPS01 failed: Not owner</span><br />Oct 8 18:23:39 KHCFEMS01 <span style="color: rgb(255, 0, 0);">automountd[26851]: [ID 834250 daemon.error] Mount of KHCBKPS01:/NBU/KHCFEMS-ALL on /NFSBKP/configuration: Not owner</span></blockquote>原來問題是出在 Solaris 機器上 mount client 的設定檔裡關於版本的問題,在這裡,我們直接編輯 Solaris 上的 /etc/default/nfs 檔,搜尋一下 <blockquote>#NFS_CLIENT_VERSMAX=4</blockquote>將之改為:<blockquote>NFS_CLIENT_VERSMAX=3</blockquote>然後將 svc:/network/nfs/client:default 給 refresh 一下:<blockquote style="color: rgb(0, 0, 153);">svcadm refresh svc:/network/nfs/client:default</blockquote>這時我們再看一次,果然已經可以使用 AutoMount 來看到遠端的 Mount point 囉,報告完畢~<blockquote>root@KHCFEMS01 # <span style="color: rgb(0, 0, 153);">ls -al /NFSBKP/configuration</span><br />total 33<br />drwxr-xr-x 5 root root 4096 Oct 8 17:21 .<br />dr-xr-xr-x 2 root root 2 Oct 8 18:22 ..<br />drwxr-xr-x 2 root root 4096 Oct 8 16:34 KHCFEMS01<br />drwxr-xr-x 2 root root 4096 Oct 8 16:34 KHCFEMS02<br />drwxr-xr-x 2 root root 4096 Oct 8 16:36 common_log</blockquote></span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-57794819178236023382009-09-22T21:25:00.009+08:002009-09-22T22:46:28.716+08:00用 X-manager 連進 Linux server 時出現 GConf Error 怎麼辦?最近用 X-manager 連進 Linux server 的 X-Window 時,卻一直出現如下圖所示的幾個錯誤訊息,這讓我在登入時很困擾:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnAIcekZNiy_6DvoKtnJi0uE0m1wK9_0653kJGb6JocXmxgfu9e9qWpWqBXx9mnAnElt8euhZgyKrhVEnJt9W65d5i0lEPE56bq9rxMLLJH02bQ8V-p8H_MfHEh8pgZuAt3JlkkFsavaTu/s1600-h/gnome-error-01.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 110px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnAIcekZNiy_6DvoKtnJi0uE0m1wK9_0653kJGb6JocXmxgfu9e9qWpWqBXx9mnAnElt8euhZgyKrhVEnJt9W65d5i0lEPE56bq9rxMLLJH02bQ8V-p8H_MfHEh8pgZuAt3JlkkFsavaTu/s200/gnome-error-01.jpg" alt="" id="BLOGGER_PHOTO_ID_5384289817102351090" border="0" /></a><span class="fullpost">其中有四個錯誤訊息分別是:<br />1. GConf error: Adding client to server's list failed, CORBA error: IDL:omg.org/CORBA/COMM_FAILURE:1.0<blockquote>All further errors shown only on terminal.</blockquote>2. An error occurred while loading or saving configuration information for gnome-session. Some of your configuration settings may not work properly.<br /><blockquote>Detail : Adding client to server's list failed, CORBA error: IDL:omg.org/CORBA/COMM_FAILURE:1.0</blockquote>3. An error occurred while loading or saving configuration information for Nautilus. Some of your configuration settings may not work properly.<blockquote>Detail : Adding client to server's list failed, CORBA error: IDL:omg.org/CORBA/COMM_FAILURE:1.0</blockquote>4. An error occurred while loading or saving configuration information for Print Notifier. Some of your configuration settings may not work properly.<blockquote>Detail : Adding client to server's list failed, CORBA error: IDL:omg.org/CORBA/COMM_FAILURE:1.0</blockquote>遇到這種情形,一則是乾脆重新開機,如果是像我這邊的機器屬於重要服務不能中斷的話,那麼還有一個方法,照著下面的步驟吧:<br />首先:假設是用 root 登入的話,那麼先把 /tmp/ 底下跟 root 相關的檔案都砍掉:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisO9jXliZ2AZmaB2qx3rLm4kXrIztkbRotATy26F_E5bMO3mQeU8Lvy1u8RWfT24tDNTKn1BAbgyL5stOPrkpHtn_dI34w-EApZ9blep_quNsqAzrVXMLKbSraYURZI-RMdZCnVhlKMl4S/s1600-h/gnome-error-02.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 117px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisO9jXliZ2AZmaB2qx3rLm4kXrIztkbRotATy26F_E5bMO3mQeU8Lvy1u8RWfT24tDNTKn1BAbgyL5stOPrkpHtn_dI34w-EApZ9blep_quNsqAzrVXMLKbSraYURZI-RMdZCnVhlKMl4S/s200/gnome-error-02.jpg" alt="" id="BLOGGER_PHOTO_ID_5384297030896467970" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBPRXTN3Ry7Jkc1VUbQUib1v9RZ_s4k9lz6lrXUMFpTu94UdMLfmIA-YFDRCA42-aprMYbj85gYjBo-Sg28xJmCc4pNnYdCxXJFJowtdZsvsaTbinEdXshvgZ0wN2gMK3Cego7eW77Ds4z/s1600-h/gnome-error-03.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 102px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBPRXTN3Ry7Jkc1VUbQUib1v9RZ_s4k9lz6lrXUMFpTu94UdMLfmIA-YFDRCA42-aprMYbj85gYjBo-Sg28xJmCc4pNnYdCxXJFJowtdZsvsaTbinEdXshvgZ0wN2gMK3Cego7eW77Ds4z/s200/gnome-error-03.jpg" alt="" id="BLOGGER_PHOTO_ID_5384297195308622082" border="0" /></a>接著,到 root 的目錄下,找到 .gnome 開頭的 3 個目錄 (<span style="font-weight: bold;">.gnome</span>, <span style="font-weight: bold;">.gnome2</span>, <span style="font-weight: bold;">.gnome2_private</span>),一樣,全砍了:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO_zIooiprS3gwOmLGkjC54WyH_qyYgDYn2EUwETQYuq5xm0ys014sojdh6ozcKVPpr7IjQnPkQ0C7XFvRKzrfqPK0AhXLu5mzBBarNnBhwk3apwJZkuoRhyphenhyphenWpyHPGEhvgojgbg4BLef7d/s1600-h/gnome-error-04.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 108px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO_zIooiprS3gwOmLGkjC54WyH_qyYgDYn2EUwETQYuq5xm0ys014sojdh6ozcKVPpr7IjQnPkQ0C7XFvRKzrfqPK0AhXLu5mzBBarNnBhwk3apwJZkuoRhyphenhyphenWpyHPGEhvgojgbg4BLef7d/s200/gnome-error-04.jpg" alt="" id="BLOGGER_PHOTO_ID_5384298271797801266" border="0" /></a><blockquote># rm -rf .gnome*</blockquote>最後,再把 X 重啟一次吧,啥?不知道步驟喔,參考一下上一篇文章"<a href="http://tosian.blogspot.com/2009/08/restart-x-window.html">如何在不重開機的情況下 Restart RHEL 的 X window?</a>"吧,簡單的用下面的指令也可以:<blockquote># kill -HUP `cat /var/run/gdm.pid`</blockquote>,重啟完後再用 X-manager 測試一下,果然登入時就不會再有那些亂七八糟的錯誤訊息蹦出來囉,報告完畢~</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com3tag:blogger.com,1999:blog-5287674613622206536.post-85862510735845015332009-08-18T22:32:00.007+08:002009-09-22T22:39:25.514+08:00如何在不重開機的情況下 Restart RHEL 的 X window?最近有一部 RedHat 4 的機器在使用 X manager 登入時一直出現多個 GNOME 的錯誤視窗,雖然不影響登入,但還是覺得很不舒服,想要重啟機器,但因有重要的服務在 in service,只能想辦法直接在不 reboot 機器的情況下重啟 X11了,找了一下,原來在 /usr/sbin 底下就有相關的 script 可用啊:<br /><span class="fullpost"><br />首先一樣我們列一下這一次的測試環境:RHEL4.5 + X11:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgayskDvUZUGR4r63-owfmdfahKk1IRQetDUW56eCNnnMcT9XSXR5G7aHJjw2hFgi2bTmawElMk2Jzlg3E8z1kap0utKGTnYhzMzt-eRgMYH6ddgYpMEWeYjHcsAZicwTaqb35xM7KfIZAe/s1600-h/RHEL4-X11-restart-001-version.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 27px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgayskDvUZUGR4r63-owfmdfahKk1IRQetDUW56eCNnnMcT9XSXR5G7aHJjw2hFgi2bTmawElMk2Jzlg3E8z1kap0utKGTnYhzMzt-eRgMYH6ddgYpMEWeYjHcsAZicwTaqb35xM7KfIZAe/s200/RHEL4-X11-restart-001-version.jpg" alt="" id="BLOGGER_PHOTO_ID_5371315857540638642" border="0" /></a>接著我們來秀一下這個實用 script 的內容 (<span style="color: rgb(0, 0, 153);">/usr/sbin/gdm-restart</span>):<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSGWzLT4f3cEGwpQXHyHjViTzNKZ9bpX4uaNBOd07q84MGzKuwqp0yLmfbfSyUu4sHJV2rxzPBsEZMnbZJYHfx0xu6P_OF00-BiPjXKbhkdXNIQsvmBlY1_WI_q2Pb35cTI_DhwDZJMj5D/s1600-h/RHEL4-X11-restart-002-gdm-restart-sh-2.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 54px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSGWzLT4f3cEGwpQXHyHjViTzNKZ9bpX4uaNBOd07q84MGzKuwqp0yLmfbfSyUu4sHJV2rxzPBsEZMnbZJYHfx0xu6P_OF00-BiPjXKbhkdXNIQsvmBlY1_WI_q2Pb35cTI_DhwDZJMj5D/s200/RHEL4-X11-restart-002-gdm-restart-sh-2.jpg" alt="" id="BLOGGER_PHOTO_ID_5371315861528702466" border="0" /></a>看到最後那一行了沒?其實我們只要拿那一行來用就夠了,不過這裡我們在重啟服務之前先看一下 X11 的 status 吧:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimHfJ2sGNnQaWPh2NlI-AA-TmfEDpiIuVyuREXwowNcFZmuPG3cy4Cuk42W2kxytXOJXqJbU2MbQnaKPe4n3-UgSHiZFegZIclIDDrsWF7sdowhX0zxbUXEDn9ufmIfC38qmu10DDi67zY/s1600-h/RHEL4-X11-restart-003-before-gdm-restart.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 27px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimHfJ2sGNnQaWPh2NlI-AA-TmfEDpiIuVyuREXwowNcFZmuPG3cy4Cuk42W2kxytXOJXqJbU2MbQnaKPe4n3-UgSHiZFegZIclIDDrsWF7sdowhX0zxbUXEDn9ufmIfC38qmu10DDi67zY/s200/RHEL4-X11-restart-003-before-gdm-restart.jpg" alt="" id="BLOGGER_PHOTO_ID_5371315869833987714" border="0" /></a>注意到了嗎?目前的主要 GDM 的 PID 是 <span style="font-weight: bold;">4427</span>,接著我們直接用下面的指令來重啟 X11 吧:<blockquote># <span style="color: rgb(0, 0, 153);">kill -HUP `cat /var/run/gdm.pid`</span></blockquote>下面就是重啟後的結果:其中第二部分多了一筆 process:<blockquote>root 16547 0.0 0.0 12548 2480 ? S 14:39 0:00 \_ /usr/bin/gdm-binary -nodaemon</blockquote>這是因為我用 X-manager 連進去 server 測試的結果。<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxHoYV1arOdj-1t4TedB1ROpkGZ6Kku0ti6fnR6CoyR2Fx5qg2EglWlByyT_tewE6f2xpE_vTj-8JVB_yFDQ6PhLxtE_FNJcM0dnOHdbbWlwlLdfe9K1TUi6cUhZENmMUJPyWMWqHCbhn2/s1600-h/RHEL4-X11-restart-004-after-gdm-restart.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 46px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxHoYV1arOdj-1t4TedB1ROpkGZ6Kku0ti6fnR6CoyR2Fx5qg2EglWlByyT_tewE6f2xpE_vTj-8JVB_yFDQ6PhLxtE_FNJcM0dnOHdbbWlwlLdfe9K1TUi6cUhZENmMUJPyWMWqHCbhn2/s200/RHEL4-X11-restart-004-after-gdm-restart.jpg" alt="" id="BLOGGER_PHOTO_ID_5371315876976788754" border="0" /></a>重啟完只有最初的 X11 process 的 PID 不變,其餘的 process 都已經重啟了,報告完畢~<br /><br />2009/08/19 補充:在 RHEL5 上面也是一樣的作法喔~<br /></span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-41805708785933865362009-08-18T21:43:00.010+08:002009-08-18T22:28:44.290+08:00如何在 Linux server 上 turn on DNS (BIND) 的 Query logging?在 Linux server 上開 BIND DNS service 後,發現似乎在系統的 LOG 檔案 /var/log/messages 裡面只看的到 named service 的啟動/停止訊息,卻看不到一些 Client 端 Query 的 Log,這對初期的 named 設定上來說實在是有些困擾,幸好 BIND 的 utility 中包含一個好用的工具,那就是 rndc,他有很多好用的功能可以用來細部控制 BIND,不過這裡我們只測試一下它 Turn on query logging 的功能:<br /><span class="fullpost"><br />首先,這裡我們的環境是 RHEL5.2 + BIND 9.3.4:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgglGSUp7We-5c5UYBjzGsrc0RArZdxc9YL-rwDpDyNrY-uuEZxkWGVuil4uS8HRVUdGuJCIKLokRQzXVdLMlU_WIoik5HbuFClk5utkxTSRnO2ZnUfdoicHtAgbH5GmOpQEIjI5UJsXqAC/s1600-h/bind-rndc-rpm-version.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 62px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgglGSUp7We-5c5UYBjzGsrc0RArZdxc9YL-rwDpDyNrY-uuEZxkWGVuil4uS8HRVUdGuJCIKLokRQzXVdLMlU_WIoik5HbuFClk5utkxTSRnO2ZnUfdoicHtAgbH5GmOpQEIjI5UJsXqAC/s200/bind-rndc-rpm-version.jpg" alt="" id="BLOGGER_PHOTO_ID_5371305287572831186" border="0" /></a>接著,我們看一下 rndc 有哪些 option 可用:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXdDf2SkT55OrMz5i5jLMjaoiAXgsoE2b2-ktr76Og99-87RyP-nKUY1c6cW44kIsY92_eS1u-GjMiUVoviQwEQBMPkNRCcAY-LQUyWx6Q7TrWbItJFrQhxmOyiuWaRenaqjvoG-nmBdDJ/s1600-h/rndc-short-summary.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 194px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXdDf2SkT55OrMz5i5jLMjaoiAXgsoE2b2-ktr76Og99-87RyP-nKUY1c6cW44kIsY92_eS1u-GjMiUVoviQwEQBMPkNRCcAY-LQUyWx6Q7TrWbItJFrQhxmOyiuWaRenaqjvoG-nmBdDJ/s200/rndc-short-summary.jpg" alt="" id="BLOGGER_PHOTO_ID_5371305842682797026" border="0" /></a>接下來就簡單了,想要 Turn on query logging 的功能,就使用下面的指令吧:<blockquote>[root@ns1 named]# <span style="color: rgb(0, 0, 153);">rndc querylog</span></blockquote>我們來看一下系統的紀錄檔吧:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5TPdtst4hX5VA8Qdpb_MTqJHOtcS2Bf3GvarSLKPUdV9h7dzVctrFyWoLy0g2g24w-3q3RXHAST7NxJ4KdVk703G_q41e502yhHJRzdJh1cDAbcKJUG9SNMbziG-xKSbB_UeiJVK0H02B/s1600-h/rndc-DNS-LOG-enable-001.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 74px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5TPdtst4hX5VA8Qdpb_MTqJHOtcS2Bf3GvarSLKPUdV9h7dzVctrFyWoLy0g2g24w-3q3RXHAST7NxJ4KdVk703G_q41e502yhHJRzdJh1cDAbcKJUG9SNMbziG-xKSbB_UeiJVK0H02B/s200/rndc-DNS-LOG-enable-001.jpg" alt="" id="BLOGGER_PHOTO_ID_5371308422629090546" border="0" /></a>現在已經開始產生 Client query 的紀錄了。<br /><br />接下來,再下一次剛剛的指令就可以 Turn off query logging 的功能了:<blockquote>[root@ns1 named]# <span style="color: rgb(0, 0, 153);">rndc querylog</span></blockquote>我們再看一次系統的紀錄檔吧:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc_875XCRd5GOzlseBz_np73-ZeByIkfq7i_CbXE2tFH5IxskR4VNvue-dmwY7R3xx0iwLRvqSCnilVZcbe7EcHVpR86UvQZdsZlSwHs2FhaT57iG8oxNBQMezTfEIy-xHyHWYjz3ovqoI/s1600-h/rndc-DNS-LOG-enable-002.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 44px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc_875XCRd5GOzlseBz_np73-ZeByIkfq7i_CbXE2tFH5IxskR4VNvue-dmwY7R3xx0iwLRvqSCnilVZcbe7EcHVpR86UvQZdsZlSwHs2FhaT57iG8oxNBQMezTfEIy-xHyHWYjz3ovqoI/s200/rndc-DNS-LOG-enable-002.jpg" alt="" id="BLOGGER_PHOTO_ID_5371308426204499474" border="0" /></a>果然已經停止記錄了~</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-29645717582399955282009-07-24T22:20:00.014+08:002009-07-26T15:40:35.202+08:00在 Solaris 10 以 IPMP 簡易配置網卡的 Virtual IP這次的實作要把本來只有一個實體 IP 的 Solaris 10 的機器改成兩個實體 IP 加上共用一個對外的虛擬 IP,實際的配置將如下:在這個實作中,我們大致上要改動到以下幾個檔案:/etc/hosts, /etc/hostname.bge0, /etc/hostname.bge1, /etc/defaultrouter,其中 bge0 與 bge1 是因為本次的實作機器為 Netra 210,所以網卡的部分請自行依據機型而變。<span class="fullpost"><blockquote>原配置:<br /><span style="font-weight: bold;">bge0: 10.15.25.43</span><br /><br />新配置:<br />bge0:10.15.25.31<br />bge1:10.15.25.32<br /><span style="font-weight: bold;">Virtual IP: 10.15.25.43</span></blockquote><blockquote>root@KHCFEMS01 # uname -a<br />SunOS KHCFEMS01 5.10 Generic_137137-09 sun4u sparc SUNW,Netra-210<br />root@KHCFEMS01 # cat /etc/release<br />Solaris 10 10/08 s10s_u6wos_07b SPARC<br />Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.<br />Use is subject to license terms.<br /> Assembled 27 October 2008</blockquote>當然這裡的設定也有幾個限制,首先是兩塊網卡要能提供同樣的工作模式,再來是所有設定的 IP 要在同一個網段之內,而且在這網段內要有其他的機器或設備存在,通常是 GW 啦,可以設置在 defaultrouter 內;當設定完之後,系統會不斷發出 ICMP 的 echo request 封包給同網路的 GW,應該會得到 ICMP Echo reply,另外還會同時監控網卡上有沒有 RUNNING 的存在 (就是用 ifconfig -a 時會在 <> 看到的),這兩項測試都 OK 的話,就判定網卡是 OK 的;任一項失敗,就判定網卡是 nOK 的。(這個最後我們再用snoop來測試一下就知道)<br /><br />接下來就是開始設定了,首先編輯一下 /etc/hosts:<blockquote>root@KHCFEMS01 # vi /etc/hosts<br />#<br /># Internet host table<br />#<br />127.0.0.1 localhost<br />10.15.25.43 KHCFEMS01 khcfems01 loghost<br />10.15.25.44 KHCFEMS02 khcfems02<br />10.15.25.31 KHCFEMS01_bge0 khcfems01_bge0<br />10.15.25.32 KHCFEMS01_bge1 khcfems01_bge1<br />10.15.25.33 KHCFEMS02_bge0 khcfems02_bge0<br />10.15.25.34 KHCFEMS02_bge1 khcfems02_bge1</blockquote>接著我們啟動 bge1 的網卡:<br />1. 未啟動之前的現狀:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCOy1mFVRDwVcI1-8Bv2XEa8eounBRmcoiQxH8e3Ltdp3Pz3ZqVnq2wkj7-BKZiK9gWlZZpCHa5pDP0TV_xgXMS8mB32a9XS575-qooI0wP6dXXF4U3ovxqJpG1tKBr550KmGzdmWBbPYx/s1600-h/Solaris10.IPMP-001s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 30px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCOy1mFVRDwVcI1-8Bv2XEa8eounBRmcoiQxH8e3Ltdp3Pz3ZqVnq2wkj7-BKZiK9gWlZZpCHa5pDP0TV_xgXMS8mB32a9XS575-qooI0wP6dXXF4U3ovxqJpG1tKBr550KmGzdmWBbPYx/s200/Solaris10.IPMP-001s.jpg" alt="" id="BLOGGER_PHOTO_ID_5362653483331044450" border="0" /></a>2. 啟動後的狀態:<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHtUmP7Us_l8IlJXvi2oZaMV9SLGx86MOOEh7Lgu2jukQ74ST4HNgs50imK79suAgRdOkCE6b0SYA_QEhoJmI6NFzyBWUAoAcEnJdfaOY-XLpIb-_Hovgj0FRBgklAd_rSwKm1mAhie7JX/s1600-h/Solaris10.IPMP-002s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 47px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHtUmP7Us_l8IlJXvi2oZaMV9SLGx86MOOEh7Lgu2jukQ74ST4HNgs50imK79suAgRdOkCE6b0SYA_QEhoJmI6NFzyBWUAoAcEnJdfaOY-XLpIb-_Hovgj0FRBgklAd_rSwKm1mAhie7JX/s200/Solaris10.IPMP-002s.jpg" alt="" id="BLOGGER_PHOTO_ID_5362619402273709714" border="0" /></a>接著我們要編輯 /etc/hostname.bge0 與 /etc/hostname.bge1:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitlUmJDKAY4Iimx-zJZiMFuKopq0TR9RGjrlML6RZ0qOQyRecTNEXOqbFeBOdM6t5_JIzbvQBV4KMC9dKi9oLvmPEJpG23Mks5Ax8ZMeZKs0wGqo5GC_HsMNuMmOykqYjAkF26zB5Kp6rv/s1600-h/Solaris10.IPMP-003s-00.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 50px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitlUmJDKAY4Iimx-zJZiMFuKopq0TR9RGjrlML6RZ0qOQyRecTNEXOqbFeBOdM6t5_JIzbvQBV4KMC9dKi9oLvmPEJpG23Mks5Ax8ZMeZKs0wGqo5GC_HsMNuMmOykqYjAkF26zB5Kp6rv/s200/Solaris10.IPMP-003s-00.jpg" alt="" id="BLOGGER_PHOTO_ID_5362654047671910338" border="0" /></a>再來是編輯一下 /etc/defaultrouter 和 /etc/netmasks 囉:<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmfvDaLyemWOqFRLfDYewf0rp-L6ummyssfy_IFwDbNxSPqjObF47Np8L3VW0n1NzqqvAUKdwiSTgP15mJj4m7BCzJaE1g_HSeSsMNPf0ZiFBsEZJZsqk1JaUP3DZpW-KWmn__ZIoTVeAp/s1600-h/Solaris10.IPMP-003s-03.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 98px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmfvDaLyemWOqFRLfDYewf0rp-L6ummyssfy_IFwDbNxSPqjObF47Np8L3VW0n1NzqqvAUKdwiSTgP15mJj4m7BCzJaE1g_HSeSsMNPf0ZiFBsEZJZsqk1JaUP3DZpW-KWmn__ZIoTVeAp/s200/Solaris10.IPMP-003s-03.jpg" alt="" id="BLOGGER_PHOTO_ID_5362656042520984674" border="0" /></a>最後,用 init 6 重新開機一下吧~<br /><br />重開完之後用 ifconfig -a 看一下網卡的狀態:<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLRjQwqU1aMtI1RdD_JOJDgppKA8deXQYGkGE33cQv1SDHC6JBLqUBfX3BpydoaNtHNwXVqqGqgU0fX4Uu-lHUPaOVlNlxcWETUsnWv79aYzm4f-XlTQ6hfxRP2GXUb2_5bAflcdVVGwc4/s1600-h/Solaris10.IPMP-004s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 55px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLRjQwqU1aMtI1RdD_JOJDgppKA8deXQYGkGE33cQv1SDHC6JBLqUBfX3BpydoaNtHNwXVqqGqgU0fX4Uu-lHUPaOVlNlxcWETUsnWv79aYzm4f-XlTQ6hfxRP2GXUb2_5bAflcdVVGwc4/s200/Solaris10.IPMP-004s.jpg" alt="" id="BLOGGER_PHOTO_ID_5362661521222873090" border="0" /></a>接著我們用 snoop 來看一下封包吧:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg00CdgpohdqitY7PQ8jk9SiVrw1HTvaC46-D7MPGogw5ySW1NRGkZQv2vcSL3cbV7qYyBGdZ14o8v4giXSoAlNJYpX7MyXtiRonuL4mn7ugbgy9VJD30t6Va1eFic3AR7tn5cYdy3LthZV/s1600-h/Solaris10.IPMP-005s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 95px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg00CdgpohdqitY7PQ8jk9SiVrw1HTvaC46-D7MPGogw5ySW1NRGkZQv2vcSL3cbV7qYyBGdZ14o8v4giXSoAlNJYpX7MyXtiRonuL4mn7ugbgy9VJD30t6Va1eFic3AR7tn5cYdy3LthZV/s200/Solaris10.IPMP-005s.jpg" alt="" id="BLOGGER_PHOTO_ID_5362666651420010418" border="0" /></a>P.S.1. 注意到網卡中被 <> 括起來的部分了嗎: <blockquote>UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER</blockquote>有 RUNNING 而且 ping 的到 GW 才有機會帶起 Virtual 的 Interface 喔!另外,NOFAILOVER 就是現在 IPMP group 的狀態啦。<br /><br />P.S.2. 可以看到已經有一個新的 bge0:1 被帶起來了,而其對外的 Virtual IP 也是我們設定的 10.15.25.43 囉~<br /><br />以上,報告完畢!</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com2tag:blogger.com,1999:blog-5287674613622206536.post-71687099995470856472009-07-22T21:48:00.004+08:002009-07-22T22:14:48.839+08:00就是這道光...我也看到日偏蝕了<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXwdUWT7S4Bt-_oEcRmV79o6pcJUFFAmcYnv6rE37PnSWkqn7vqrGz9Q3PmgR5fQgOAv13z6UYRomnaMwf24vfJ_pKNL8iH58jjwbGucoyTvxOREd8-NrRi_9ngBgcgDZD4mlD9nkgOjKX/s1600-h/20090722_%E6%97%A5%E5%81%8F%E8%9D%95_KH.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXwdUWT7S4Bt-_oEcRmV79o6pcJUFFAmcYnv6rE37PnSWkqn7vqrGz9Q3PmgR5fQgOAv13z6UYRomnaMwf24vfJ_pKNL8iH58jjwbGucoyTvxOREd8-NrRi_9ngBgcgDZD4mlD9nkgOjKX/s200/20090722_%E6%97%A5%E5%81%8F%E8%9D%95_KH.jpg" alt="" id="BLOGGER_PHOTO_ID_5361281617041199602" border="0" /></a><br />昨晚聽廣播說今天早上會有日全蝕的天文景象,而且還是本世紀觀看日偏食的最佳時刻,當然在台灣並沒辦法看到完整的日全蝕,而是只能看到日偏蝕,聽新聞說有百分之87左右;今天一到了機房,大家已經圍在門口的警衛室觀看大陸的杭州與武漢日全蝕的 Live 轉播了,警衛還特別借給大家一副濾光鏡,果然到外面戴上一看,已經開始有"<span style="font-weight: bold;">初虧</span>"現象出現了,是從左上方開始缺角的...<br /><br />等到接近9點半,拿出相機來拍,卻是相當失敗,幸好還有其他人有成功拍下來的,就借他一張來貼囉,這一張是在 9:36 分左右在高雄岡山的機房前拍攝的,已經很接近"<span style="font-weight: bold;">食甚</span>"了過了幾分鐘,被遮住的太陽開始恢復...只是讓我不解的是,為什麼不是往右下角方向恢復,卻是往左下角方向恢復呢?洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-17238729937544395252009-06-15T22:36:00.002+08:002009-06-17T22:47:34.038+08:00Linux 機器上 SFTP 時出現 "Received message too long xxxxxxxx" 的錯誤訊息以往每次登入機器時都會用 SecureCRT 去連接機器,順便在 SecureCRT 上設定登入時執行的指令去附帶檢查把機器當下服務執行的狀況給秀出來,但因為登入的機器太多台,不希望每次有變動時就要去每一台有跑 SecureCRT 的電腦上把登入指令更改,因此想偷懶透過修改 /root/.bashrc 內容來讓這些檢查的過程自動化,也就是說讓 client 透過 SSH client 去連接機器時,只要用 root 登入,或切換使用者到 root 就會自動執行 /root/.bashrc 裡面所定義的 script 把機器狀態給秀出來~<br /><span class="fullpost"><br />當時的 /root/.bashrc 內容如下面範例所示:<blockquote>[root@KHCFTPS01 ~]# cat ~/.bashrc<br /># .bashrc<br /># User specific aliases and functions<br /><br />alias rm='rm -i'<br />alias cp='cp -i'<br />alias mv='mv -i'<br />alias vi='vim'<br />alias ls='ls --color'<br /><br />TERM=xterm-color; export TERM;<br />alias grep='grep --color'<br /><br /># Source global definitions<br />if [ -f /etc/bashrc ]; then<br /> . /etc/bashrc<br />fi<br /><br /><span style="color: rgb(255, 0, 0);"># Pre-health checking #</span><br /><span style="color: rgb(255, 0, 0);">/etc/init.d/sys_chk.sh;</span><br />[root@KHCFTPS01 ~]#</blockquote>其中的 /etc/init.d/sys_chk.sh; 那一段就是用來登入後檢查系統的那個小 shell script,測試從其他機器登入或本機變更使用者為 root 後都可正常秀出機器狀態檢查的結果。本來事情到這邊就結束了,但前幾天寫好這一部份後,也用的好好的,而昨天突然發現,要 SFTP 進這些機器都沒回應了,初步以為是防火牆的問題,但查了之後,繞開防火牆直接用兩台機器對測 SFTP 看到出現下面的錯誤訊息:<blockquote>[root@ns1 ~]# sftp KHCFTPS01<br />Connecting to KHCFTPS01...<br />root@KHCFTPS01's password:<br /><span style="color: rgb(255, 0, 0); font-weight: bold;">Received message too long 1044266528</span><br />[root@ns1 ~]# </blockquote>可是用 SSH 測試卻又能正常登入,這時才想起來前幾天曾在這幾台機器上加上自動狀態檢查的 script,會不會是那個咚咚在搞鬼ㄌㄟ??於是回到機器上去修改 /root/.bashrc 把自動檢查的那一段先 mark 起來,再到 ns1 測試一次 SFTP 到我們的 FTP 機器,這次就可以成功登入了。所以果然是 /etc/init.d/sys_chk.sh 執行的東西太多,吐出太多東西到螢幕上...呵呵,既然知道問題出在哪兒了,山不轉路轉,路不轉嘛那我只好自己轉囉...回到剛才的 /root/.bashrc 中,還記得之前我們曾在 <a href="http://tosian.blogspot.com/2008/05/linux-linux.html">如何讓你的 Linux 色彩更豐富</a> 中提到利用 alias 的作法來節省平常的時間,可以把一些很長的執行字串,改成好敲的短字串,這裡我們就用這種方式把 /etc/init.d/sys_chk.sh 指定給 sck 這個短字串 (sck 只是我覺得順眼的縮寫,請依個人喜好更改),改完的 /root/.bashrc 內容如下面範例所示:<blockquote>[root@KHCFTPS01 ~]# cat ~/.bashrc<br /># .bashrc<br /># User specific aliases and functions<br /><br />alias rm='rm -i'<br />alias cp='cp -i'<br />alias mv='mv -i'<br />alias vi='vim'<br />alias ls='ls --color'<br /><span style="color: rgb(255, 0, 0);">alias sck='/etc/init.d/sys_chk.sh'</span><br /><br />TERM=xterm-color; export TERM;<br />alias grep='grep --color'<br /><br /># Source global definitions<br />if [ -f /etc/bashrc ]; then<br /> . /etc/bashrc<br />fi<br /><br /><span style="color: rgb(255, 0, 0);"># Pre-health checking #</span><br /><span style="color: rgb(255, 0, 0);">sck;</span><br />[root@KHCFTPS01 ~]# </blockquote>這時候再試一次 SFTP 果然就不再出現 "Received message too long 1044266528" 的問題囉~而且平時沒事也可以隨時直接敲入 sck (前面提到過,sck 只是我覺得順眼的縮寫,請依個人喜好更改)這個指令來做個機器狀態檢查,人生又擱係彩色ㄟ囉~</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-35026758730518683532009-06-04T20:48:00.009+08:002009-07-17T13:17:58.664+08:00用 Tftpd32 接收 LINUX 送來的 SYSLOG為了驗證機器可以送 System log 訊息到指定的 EMS server,只好先在自己的電腦上跑個 Syslog server 來收,這裡稟持本人愛用綠色軟體的習慣,推薦大家可以使用上一篇所介紹的 Tftpd32 來作為 Syslog server,有興趣可以去參觀一下(<a href="http://tftpd32.jounin.net/">首頁在此</a>)。而今天要驗證的 Agent 機器 OS 是 RHEL ES5.2,裡面就有 syslog Daemon 的 (service 的名稱就是 syslog 不是 syslogd 喔,待會兒要重啟服務時會用到) 所以不用另外安裝 Agent 程式。<br /><span class="fullpost"><br />待會兒要編輯 /etc/syslog.conf 這個主要的檔案,所以我們先列一下裡面的主要格式:<br />在 /etc/syslog.conf 裡的每一行都有兩個部分組成,一個是 "SELECTOR",另一個是 "ACTION"。整行組合起來就是指:當符合 "SELECTOR" 事件發生時,就採取 "ACTION" 所指定的方式來記錄這個事件。<br /><br />而 "SELECTOR" 是由 facility.priority 組合而成的,其中 priority 是指事件的優先等級,分成八個不同的等級,依優先順序由低至高分別為:<blockquote>debug --> info --> notice --> warn (=warning) --> err (=error) --> crit --> alert --> emerg --> panic (=emerg)。</blockquote>至於 Facility 則是 syslog.conf 中用來描素事件產生子系統的關鍵字。這些在 syslog.conf 的 說明中都有提到,可以用 "man syslog.conf" 去看看詳細的說明。UNIX 系統中內定的 facility 基本上包括 auth、authpriv、cron、daemon、kern、lpr、mail、mark、news、 security(same as auth)、syslog、user、uucp、local0 ~ local7 等。這些 facility 所代表的程式,隨著 UNIX 系統種類的不同,會有些差異,但大同小異啦。下面是 facility 的意義:<blockquote> * auth, authpriv:與認證有關的系統,例如 login, su 等需驗證的服務<br />* uucp: UUCP系統<br />* daemon:與各個 daemon 有關的系統<br />* kern :核心(kernel)系統<br />* lpr:列印相關的系統<br />* mail:與郵件有關的系統<br />* news:與新聞群組有關的系統<br />* syslog:與 syslogd本身相關的系統<br />* user:一般使用者的系統<br />* local0 ~ local7:保留, 做為特別設定使用的</blockquote>所以我們接著編輯 /etc/syslog.conf 檔案,在這裡我們只新增一行新的如下來做個測試:<blockquote>[root@KHCDNSS01 named]# <span style="color: rgb(0, 0, 153);">vi /etc/syslog.conf </span><br />kern.*;daemon.warn;auth,authpriv.notice;cron.err @10.19.0.194</blockquote>這裡我準備將系統 kernel 的所有訊息以及各個 Daemon 在 Warning 等級以上,認證部分的訊息在 Notice 以上還有 Cron job 在 Error 等級以上的訊息都送出來,其中 @10.19.0.194 代表將前面所定義的訊息傳送到遠端的 syslog server (IP address: 10.19.0.194),也就是跑著 Tftpd32 的電腦囉~<br /><br />P.S. 另外的應用啦:如果選端收 syslog 的機器安裝的 OS 也是 LINUX server 的話,那遠端機器上要多加一個動作:<br />編輯 vi /etc/sysconfig/syslog 檔案,將 <span style="font-weight: bold;">SYSLOGD_OPTIONS="-m 0"</span> 變更為 <span style="font-weight: bold; color: rgb(255, 0, 0);">SYSLOGD_OPTIONS="-m 0 -r"</span> (增加 -r remote) 參數 ,存檔,重啟 syslog service.<blockquote>[root@KHCDNSS01 named]# <span style="color: rgb(0, 0, 153);">vi /etc/syslog.conf</span><br />kern.*;daemon.warn;auth,authpriv.notice;cron.err @10.19.0.194</blockquote><blockquote>[root@KHCDNSS01 named]# <span style="color: rgb(0, 0, 153);">service syslog restart</span><br />Shutting down kernel logger: [ <span style="color: rgb(0, 153, 0);">OK</span> ]<br />Shutting down system logger: [ <span style="color: rgb(0, 153, 0);">OK</span> ]<br />Starting system logger: [ <span style="color: rgb(0, 153, 0);">OK</span> ]<br />Starting kernel logger: [ <span style="color: rgb(0, 153, 0);">OK</span> ]</blockquote><blockquote>[root@KHCDNSS01 named]# <span style="color: rgb(0, 0, 153);">service syslog status</span><br />syslogd (pid 15144) is running...<br />klogd (pid 15147) is running...</blockquote>所以我們可以在 Syslog server (跑 Tftpd32 的那台機器啦) 上收到來自剛剛測試機器上 restart syslog daemon 的 kernel syslog 送過來如下圖所示:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNYoFZt5QjlwW-CQNN5PYywTMeM5NOHeul2MCMBUZ_nxUV2xvdEX-nk6OLamEydNBY0EP7AFnatKmGhSsL3MnmeaH994iAFMQPQBhyphenhyphenayKQoSDFc33Qh4bwuvaQx_J14dbD1AWVo1ohxZf6/s1600-h/syslogd-001s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 88px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNYoFZt5QjlwW-CQNN5PYywTMeM5NOHeul2MCMBUZ_nxUV2xvdEX-nk6OLamEydNBY0EP7AFnatKmGhSsL3MnmeaH994iAFMQPQBhyphenhyphenayKQoSDFc33Qh4bwuvaQx_J14dbD1AWVo1ohxZf6/s200/syslogd-001s.jpg" alt="" id="BLOGGER_PHOTO_ID_5345710264307563058" border="0" /></a>讓我們再試一次關於 kernel 的 syslog,這次我們拿兩張網卡中的其中一張,將它重起看看會發生什麼事?(P.S. 這裡兩張網卡有做 channel bonding 所以我可以隨便把其中一張網卡 down 下來,如果你的環境不是這樣,就不要隨便拿網卡來玩喔,免得連不進去囉)<blockquote>[root@KHCDNSS01 named]# <span style="color: rgb(0, 0, 153);">ifconfig eth1 down; ifconfig eth1 up;</span></blockquote>一樣到 Syslog server 上收到來自剛剛測試機器上 eth1 down 以及 up 後 kernel infomation 的 syslog 送過來如下圖所示:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjApwukfI6ka6IN6iufn_T49bpTBeeW-LRJE1G4a8TlvicEaJf_GwJUKE_jFftDaRgYPMkVPpElfLAVoA9LZpZoBER-djx99v3Zv6O9EI3F3YTYkY4FmneOkeQD93XUHgMc9cA41dgahNzO/s1600-h/syslogd-003s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 88px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjApwukfI6ka6IN6iufn_T49bpTBeeW-LRJE1G4a8TlvicEaJf_GwJUKE_jFftDaRgYPMkVPpElfLAVoA9LZpZoBER-djx99v3Zv6O9EI3F3YTYkY4FmneOkeQD93XUHgMc9cA41dgahNzO/s200/syslogd-003s.jpg" alt="" id="BLOGGER_PHOTO_ID_5345710923279608866" border="0" /></a>接著,我們再做個小測試,在測試機器上面搞個 daemon 的 warning syslog 來玩玩,這裡我們拿 snmpd 來做範例:<blockquote>[root@KHCDNSS01 named]# <span style="color: rgb(0, 0, 153);">service dhcpd restart</span><br />Stopping dhcpd: [ <span style="color: rgb(0, 153, 0);">OK</span> ]<br />Starting dhcpd: [ <span style="color: rgb(0, 153, 0);">OK</span> ]</blockquote>再回到 Syslog server 上收到來自剛剛測試機器上 restart dhcpd daemon 後在帶起 dhcpd daemon warning 的 syslog 送過來如下圖所示:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUPmFgWCJBHxOhLH328qZM79XlkAPTZ9mHb1Z56hf8WmC_bIKJfuH0bTjQvTCE4dg9npr4TsjPAf7hVEgoad7iExdwwI3Reco_JSpmSrt9A2usL15ZP7OtzlmLFy-2knYw7bcfIXK2UGNQ/s1600-h/syslogd-002s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 88px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUPmFgWCJBHxOhLH328qZM79XlkAPTZ9mHb1Z56hf8WmC_bIKJfuH0bTjQvTCE4dg9npr4TsjPAf7hVEgoad7iExdwwI3Reco_JSpmSrt9A2usL15ZP7OtzlmLFy-2knYw7bcfIXK2UGNQ/s200/syslogd-002s.jpg" alt="" id="BLOGGER_PHOTO_ID_5345712545796273458" border="0" /></a>接著我們測試一下關於系統登入認證的 syslog,首先我們先測試 auth,authpriv.notice; 的這種設定方式,接著我們到另一台嘗試登入測試機器,並故意第一次敲錯密碼然後第二次敲正確的密碼登入再以 exit 登出測試機器,接著我們可以在 Syslog server 上發現只收到來自剛剛測試機器上 auth,authpri notice 關於有某個 user 從某一台機器嘗試登入失敗的 syslog 送過來,至於正確敲入密碼登入及登出的部分就沒有 syslog 送出了,如下圖所示:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP2_Zy-GVmvFwgpVNq2nSMez8hV2MNc_FnngZjWF_HmTTsuhBAp05VlLdfYe6JIMLVVY7esvwMXPgDTtDoVmkUHW4xzVkBrDLRnGZoDIMVqfW02Oducdq5xlfAoRaN1coFhdKGTIh_CRc3/s1600-h/syslogd-004s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 88px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP2_Zy-GVmvFwgpVNq2nSMez8hV2MNc_FnngZjWF_HmTTsuhBAp05VlLdfYe6JIMLVVY7esvwMXPgDTtDoVmkUHW4xzVkBrDLRnGZoDIMVqfW02Oducdq5xlfAoRaN1coFhdKGTIh_CRc3/s200/syslogd-004s.jpg" alt="" id="BLOGGER_PHOTO_ID_5345712996414552770" border="0" /></a><blockquote>[root@KHCBKPS01 ~]# <span style="color: rgb(0, 0, 153);">ssh 10.15.25.13</span><br />root@10.15.25.13's password:<br />Permission denied, please try again.<br />root@10.15.25.13's password:<br />Last login: Thu Jun 4 18:54:37 2009 from 10.15.25.51<br />[root@KHCDNSS01 named]# <span style="color: rgb(0, 0, 153);">exit</span><br />logout<br /><br />Connection to 10.15.25.13 closed.<br />[root@KHCBKPS01 ~]#</blockquote>再來我們再測試一下 auth,authpriv.info; 的這種設定方式,接著我們到另一台嘗試登入測試機器,重複剛才的測試步驟,接著我們就可以在 Syslog server 上收到來自剛剛測試機器上 auth,authpri information 關於有某個 user 從某一台機器嘗試登入失敗,然後正確登入以及登出的 syslog 送過來如下圖所示:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwJ3gvwoq0MWj5RyzDoscbwJRjPpq7DeZQrs5MEmgkOChyphenhyphennKjWLzok6UTVRiOGZCMYUXPFZOwre0GtC8SwC7myJANyCq-oJOWlAs85RZOq1lv53b8cZRceCeNWFpf1GYT-lFz563azQ1aU/s1600-h/syslogd-005s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 88px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwJ3gvwoq0MWj5RyzDoscbwJRjPpq7DeZQrs5MEmgkOChyphenhyphennKjWLzok6UTVRiOGZCMYUXPFZOwre0GtC8SwC7myJANyCq-oJOWlAs85RZOq1lv53b8cZRceCeNWFpf1GYT-lFz563azQ1aU/s200/syslogd-005s.jpg" alt="" id="BLOGGER_PHOTO_ID_5345713305367754050" border="0" /></a><blockquote>[root@KHCBKPS01 ~]# <span style="color: rgb(0, 0, 153);">ssh 10.15.25.13</span><br />root@10.15.25.13's password:<br />Permission denied, please try again.<br />root@10.15.25.13's password:<br />Last login: Thu Jun 4 18:56:44 2009 from 10.15.25.51<br />[root@KHCDNSS01 named]# <span style="color: rgb(0, 0, 153);">exit</span><br />logout<br /><br />Connection to 10.15.25.13 closed.<br />[root@KHCBKPS01 ~]# </blockquote>以上只是一些簡單的使用範例,至於實際組合,就看個人的需求自行變更囉~</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-41542919981818756542009-05-26T19:48:00.003+08:002009-06-04T00:22:26.019+08:00用 Tftpd32 更新 D-Link DES-3828 的 Firmware為了幫手邊的 D-Link DES-3828DC switch 加上跨 VLAN 的 DHCP relay 功能,所以得將機器上的 Firmware 從 4.50.B12 更新到 4.50.B16,至於更新的方式就是將新的 firmware image 檔放在 tftp server 上,然後更新到 D-Link 上~這裡稟持本人愛用綠色軟體的習慣,推薦大家可以使用 Tftpd32 來作為 tftp server,有興趣可以去參觀一下(<a href="http://tftpd32.jounin.net/">首頁在此</a>),或者直接下載 <a href="http://tftpd32.jounin.net/download/tftpd32.333.zip">Tftpd32 v3.3 英文綠色版</a>。<br /><span class="fullpost"><br />首先要將電腦接上網路線連到要更新 Firmware 的 D-Link 上然後直接執行 Tftpd32 讓他跑起來就好,然後把新的 Firmware Image 檔放到 Tftp server,也就是剛剛的電腦上的任意一個目錄下(這裡就先用 C:\ 當範本囉),然後把 tftp 欄位上的 Current Directory 點 Browse 去選取剛剛的目錄,也就是 C:\ 就好了,接著 telnet 或者要直接連 console 進去 D-Link 都可以,登入之後 (D-Link DES-3828DC 初始是沒有帳號密碼的,直接 enter 就可登入了,記得設個新帳號和密碼喔) 可以看到目前的 Firmware 版本為 Build 4.50.B12。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmjyyaIFjAPC8Jki2S-JvElCOoULOylB4LPXoj3_2YasQtlwkY0ZXYjv9YyTTO7hHRjdKN_jUFBj_dAkajam0-DAEgV_bXrKOJDSSYMtsyS8eOWJH5FvT0feQB3L0ZLBM5XyONQErI3nda/s1600-h/DES-3828DC-FW-upgrade-002.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 34px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmjyyaIFjAPC8Jki2S-JvElCOoULOylB4LPXoj3_2YasQtlwkY0ZXYjv9YyTTO7hHRjdKN_jUFBj_dAkajam0-DAEgV_bXrKOJDSSYMtsyS8eOWJH5FvT0feQB3L0ZLBM5XyONQErI3nda/s200/DES-3828DC-FW-upgrade-002.jpg" alt="" id="BLOGGER_PHOTO_ID_5343134095198296834" border="0" /></a>接著敲入下面的指令:<blockquote>download firmware_fromTFTP 10.255.251.252 des3828r4_4.50.b16.had</blockquote>其中 10.255.251.252 是我電腦也就是跑 Tftpd server 的 IP address,然後 des3828r4_4.50.b16.had 便是新的 Firmware 檔囉~<br /><br />這時應該可以看到電腦上的 Tftpd32 有進度出現:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6YZEudaffDyzUcM4khfXfGdAyDX63DEH_wPxNV8Z7K0TKcn6hyphenhyphenin3uwDbjBIRWb1edS9u-yD7Jl-jO-q6pr_mwx0PnQnSYgGbw1L2ymNZu7hHOSOXfGXk4BxuLe0gE6LHYICe2vuBqSvb/s1600-h/DES-3828DC-FW-upgrade-001.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 106px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6YZEudaffDyzUcM4khfXfGdAyDX63DEH_wPxNV8Z7K0TKcn6hyphenhyphenin3uwDbjBIRWb1edS9u-yD7Jl-jO-q6pr_mwx0PnQnSYgGbw1L2ymNZu7hHOSOXfGXk4BxuLe0gE6LHYICe2vuBqSvb/s200/DES-3828DC-FW-upgrade-001.jpg" alt="" id="BLOGGER_PHOTO_ID_5343132043491173970" border="0" /></a>等到跑完時,D-Link 上的結果如下:(做完之後,就下指令 reboot 一下 D-Link switch 吧~)<blockquote>DES-3800:admin# <span style="color: rgb(0, 0, 153);">download firmware_fromTFTP 10.255.251.252 des3828r4_4.50.b16.had</span><br />Command: download firmware_fromTFTP 10.255.251.252 des3828r4_4.50.b16.had<br /><br />Connecting to server................... Done.<br />Download firmware...................... Done. Do not power off!<br />Please wait, programming flash......... Done.<br /><br />DES-3800:admin#reboot<br />Command: reboot<br /><br />Are you sure to proceed with the system reboot?(y/n)<br />Please wait, the switch is rebooting...</blockquote>等到重新開機完畢應該就可以看到如下面的結果:(已經成功更新為 Build 4.50.B16 囉)<blockquote> DES-3828DC Fast Ethernet Switch Command Line Interface<br /><br /> Firmware: Build 4.50.B16<br /> Copyright(c) 2008 D-Link Corporation. All rights reserved.<br />UserName:Admin<br />PassWord:********<br /><br />DES-3800:admin#<span style="color: rgb(0, 0, 153);">show switch</span><br />Command: show switch<br /><br />Device Type : DES-3828DC Fast-Ethernet Switch<br />Combo Port Type : 1000Base-T + 1000Base-T<br />MAC Address : 00-22-B0-3A-3F-00<br />IP Address : 10.255.251.253 (Manual)<br />VLAN Name : default<br />Subnet Mask : 255.255.255.248<br />Default Gateway : 10.255.251.254<br />Boot PROM Version : Build 0.00.010<br />Firmware Version : <span style="font-weight: bold; color: rgb(255, 0, 0);">Build 4.50.B16</span><br />Hardware Version : A2<br />Serial Number : P19B18B000076<br />System Name :<br />System Location :<br />System Contact :<br />Spanning Tree : Disabled<br />GVRP : Disabled<br />IGMP Snooping : Disabled<br />MLD Snooping : Disabled<br />TELNET : Enabled (TCP 23)<br />SSH : Disabled<br />WEB : Enabled (TCP 80)<br />RMON : Disabled<br />RIP : Disabled <br />DVMRP : Disabled<br />PIM : Disabled<br />OSPF : Disabled<br />SNMP : Disabled<br /><br />DES-3800:admin#</blockquote></span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-12225231180470357652009-05-07T21:56:00.002+08:002009-05-10T22:41:05.548+08:00Linux Channel Bonding -- 實作合併網卡一直想把這一篇寫完,但卻找不出時間,剛好手邊有機器要做 Channel Bonding,就順便實作順便貼上來分享一下囉,簡單講,在 Linux 上,允許把多個網路介面用一個叫 "bonding" 的 kernel module 以及 Channel bonding interface 來綁成一個 single channel,當然你可以將兩個網卡或更多的網卡綁成一個來用,簡單講就是增加頻寬,達到備援機制~<br /><br />其實 Channel Bonding 的作法很簡單,只要編輯幾個檔案,再將網路重啟便可,這裡我們的環境是在一台 RHEL5 ES 的機器上要將 eth0 與 eth1 做成 bond0,那麼我們就需要編輯如下的檔案:<span class="fullpost"><blockquote>[root@KHCDNSS01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-bond0<br /><span style="font-weight: bold;">DEVICE=bond0</span><br />BOOTPROTO=none<br />ONBOOT=yes<br />NETWORK=10.15.25.0<br />NETMASK=255.255.255.0<br />IPADDR=10.15.25.13<br />USERCTL=no</blockquote>P.S. 其中 bond0 的 0 視你的需求而定,這裡可以是 1, 2, 3....隨你高興。<br /><br />接著編輯要被綁訂的網卡介面,這裡要綁訂的是 eth0 跟 eth1 所以就編輯這兩個檔囉:<blockquote>[root@KHCDNSS01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0<br /># Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet<br />DEVICE=eth0<br />BOOTPROTO=none<br />HWADDR=00:22:19:50:BC:7E<br />ONBOOT=yes<br /><span style="font-weight: bold;">MASTER=bond0<br />SLAVE=yes</span><br />USERCTL=no</blockquote><blockquote>[root@KHCDNSS01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1<br /># Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet<br />DEVICE=eth1<br />BOOTPROTO=none<br />HWADDR=00:22:19:50:BC:80<br />ONBOOT=yes<br /><span style="font-weight: bold;">MASTER=bond0<br />SLAVE=yes</span><br />USERCTL=no</blockquote><blockquote>[root@KHCDNSS01 ~]# cat /etc/sysconfig/network<br />NETWORKING=yes<br />NETWORKING_IPV6=no<br />HOSTNAME=KHCDNSS01<br />GATEWAY=10.15.25.254</blockquote>再來是編輯 /etc/modprobe.conf 檔案:(這個檔案在 RHEL3 是在:/etc/modules.conf 而在 RHEL4 以後的版本則在:/etc/modprobe.conf)<blockquote>[root@KHCDNSS01 ~]# vi /etc/modprobe.conf<br />alias eth0 bnx2<br />alias eth1 bnx2<br />alias scsi_hostadapter megaraid_sas<br />alias scsi_hostadapter1 ata_piix<br /><span style="font-weight: bold;">alias bond0 bonding<br />options bond0 miimon=100</span></blockquote>P.S. 這裡要注意一下喔,假如你想綁兩個以上的話,那 option 這一行的後面要再多加一個選項喔:max_bonds=3,這代表我要將三個網卡綁成一個 Channel...像下面這樣:<blockquote>options bond0 miimon=100 <span style="font-weight: bold;">max_bonds=3</span></blockquote>接著只要重啟一下網路就行了,在這之前我們先看一下目前的網路狀況:<blockquote>[root@KHCDNSS01 ~]# ifconfig -a<br />eth0 Link encap:Ethernet HWaddr 00:22:19:50:BC:7E<br /> inet addr:10.15.25.13 Bcast:10.15.25.255 Mask:255.255.255.0<br /> inet6 addr: fe80::222:19ff:fe50:bc7e/64 Scope:Link<br /> UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br /> RX packets:48374222 errors:0 dropped:0 overruns:0 frame:0<br /> TX packets:4928117 errors:0 dropped:0 overruns:0 carrier:0<br /> collisions:0 txqueuelen:1000<br /> RX bytes:3254586862 (3.0 GiB) TX bytes:561588414 (535.5 MiB)<br /> Interrupt:169 Memory:f8000000-f8012100<br /><br />eth1 Link encap:Ethernet HWaddr 00:22:19:50:BC:80<br /> inet6 addr: fe80::222:19ff:fe50:bc80/64 Scope:Link<br /> UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br /> RX packets:2 errors:0 dropped:0 overruns:0 frame:0<br /> TX packets:12 errors:0 dropped:0 overruns:0 carrier:0<br /> collisions:0 txqueuelen:1000<br /> RX bytes:128 (128.0 b) TX bytes:3354 (3.2 KiB)<br /> Interrupt:169 Memory:f4000000-f4012100<br /><br />lo Link encap:Local Loopback<br /> inet addr:127.0.0.1 Mask:255.0.0.0<br /> inet6 addr: ::1/128 Scope:Host<br /> UP LOOPBACK RUNNING MTU:16436 Metric:1<br /> RX packets:27284 errors:0 dropped:0 overruns:0 frame:0<br /> TX packets:27284 errors:0 dropped:0 overruns:0 carrier:0<br /> collisions:0 txqueuelen:0<br /> RX bytes:19766775 (18.8 MiB) TX bytes:19766775 (18.8 MiB)<br /><br />sit0 Link encap:IPv6-in-IPv4<br /> NOARP MTU:1480 Metric:1<br /> RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br /> TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br /> collisions:0 txqueuelen:0<br /> RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)</blockquote>接著我們就重啟一下網路吧:<blockquote>[root@KHCDNSS01 ~]# service network restart<br />Shutting down interface eth0: /etc/sysconfig/network-scripts/ifdown-eth: line 101: /sys/class/net/bond0/bonding/slaves: No such file or directory<br />[ OK ]<br />Shutting down interface eth1: /etc/sysconfig/network-scripts/ifdown-eth: line 101: /sys/class/net/bond0/bonding/slaves: No such file or directory<br />[ OK ]<br />Shutting down loopback interface: [ OK ]<br />Bringing up loopback interface: [ OK ]<br />Bringing up interface bond0: [ OK ]<br />[root@KHCDNSS01 ~]# </blockquote>剛設定完 Channel Bonding 後的第一次重啟看到的這些錯誤訊息是正常的,下次再重啟就不會在看到這些訊息了...我們先看一下 Bonding 的狀態吧:<blockquote>[root@KHCDNSS01 ~]# cat /proc/net/bonding/bond0<br />Ethernet Channel Bonding Driver: v3.2.4 (January 28, 2008)<br /><br />Bonding Mode: load balancing (round-robin)<br />MII Status: up<br /><span style="font-weight: bold;">MII Polling Interval (ms): 100</span><br />Up Delay (ms): 0<br />Down Delay (ms): 0<br /><br />Slave Interface: eth0<br />MII Status: up<br />Link Failure Count: 0<br />Permanent HW addr: 00:22:19:50:bc:7e<br /><br />Slave Interface: eth1<br />MII Status: up<br />Link Failure Count: 0<br />Permanent HW addr: 00:22:19:50:bc:80</blockquote>我們順便看一下網路卡的狀況吧:<blockquote>[root@KHCDNSS01 ~]# mii-tool -v<br />eth0: negotiated 100baseTx-FD, link ok<br />product info: vendor 00:08:18, model 54 rev 6<br />basic mode: autonegotiation enabled<br />basic status: autonegotiation complete, link ok<br />capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD<br />advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control<br />link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD<br />eth1: negotiated 100baseTx-FD, link ok<br />product info: vendor 00:08:18, model 54 rev 6<br />basic mode: autonegotiation enabled<br />basic status: autonegotiation complete, link ok<br />capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD<br />advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control<br />link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD<blockquote>[root@KHCDNSS01 ~]# ethtool eth0<br />Settings for eth0:<br /> Supported ports: [ TP ]<br /> Supported link modes: 10baseT/Half 10baseT/Full<br /> 100baseT/Half 100baseT/Full<br /> 1000baseT/Full<br /> Supports auto-negotiation: Yes<br /> Advertised link modes: 10baseT/Half 10baseT/Full<br /> 100baseT/Half 100baseT/Full<br /> 1000baseT/Full<br /> Advertised auto-negotiation: Yes<br /> Speed: 1000Mb/s<br /> Duplex: Full<br /> Port: Twisted Pair<br /> PHYAD: 1<br /> Transceiver: internal<br /> Auto-negotiation: on<br /> Supports Wake-on: g<br /> Wake-on: d<br /> Link detected: yes</blockquote><blockquote>[root@KHCDNSS01 ~]# ethtool eth1<br />Settings for eth1:<br /> Supported ports: [ TP ]<br /> Supported link modes: 10baseT/Half 10baseT/Full<br /> 100baseT/Half 100baseT/Full<br /> 1000baseT/Full<br /> Supports auto-negotiation: Yes<br /> Advertised link modes: 10baseT/Half 10baseT/Full<br /> 100baseT/Half 100baseT/Full<br /> 1000baseT/Full<br /> Advertised auto-negotiation: Yes<br /> Speed: 1000Mb/s<br /> Duplex: Full<br /> Port: Twisted Pair<br /> PHYAD: 1<br /> Transceiver: internal<br /> Auto-negotiation: on<br /> Supports Wake-on: g<br /> Wake-on: d<br /> Link detected: yes<br />[root@KHCDNSS01 ~]# </blockquote>再來我們看一下目前網卡的 IP 為何:是不是多了一個 bond0 的介面了啊?<blockquote>[root@KHCDNSS01 ~]# ifconfig -a<br /><span style="font-weight: bold;">bond0</span> Link encap:Ethernet HWaddr 00:22:19:50:BC:7E<br /> inet addr:10.15.25.13 Bcast:10.15.25.255 Mask:255.255.255.0<br /> inet6 addr: fe80::222:19ff:fe50:bc7e/64 Scope:Link<br /> <span style="font-weight: bold;">UP BROADCAST RUNNING MASTER MULTICAST</span> MTU:1500 Metric:1<br /> RX packets:42 errors:0 dropped:0 overruns:0 frame:0<br /> TX packets:76 errors:0 dropped:0 overruns:0 carrier:0<br /> collisions:0 txqueuelen:0<br /> RX bytes:8088 (7.8 KiB) TX bytes:20800 (20.3 KiB)<br /><br />eth0 Link encap:Ethernet HWaddr 00:22:19:50:BC:7E<br /> inet6 addr: fe80::222:19ff:fe50:bc7e/64 Scope:Link<br /> <span style="font-weight: bold;">UP BROADCAST RUNNING SLAVE MULTICAST</span> MTU:1500 Metric:1<br /> RX packets:23 errors:0 dropped:0 overruns:0 frame:0<br /> TX packets:40 errors:0 dropped:0 overruns:0 carrier:0<br /> collisions:0 txqueuelen:1000<br /> RX bytes:4548 (4.4 KiB) TX bytes:10601 (10.3 KiB)<br /> Interrupt:169 Memory:f8000000-f8012100<br /><br />eth1 Link encap:Ethernet HWaddr 00:22:19:50:BC:7E<br /> inet6 addr: fe80::222:19ff:fe50:bc7e/64 Scope:Link<br /> <span style="font-weight: bold;">UP BROADCAST RUNNING SLAVE MULTICAST</span> MTU:1500 Metric:1<br /> RX packets:19 errors:0 dropped:0 overruns:0 frame:0<br /> TX packets:36 errors:0 dropped:0 overruns:0 carrier:0<br /> collisions:0 txqueuelen:1000<br /> RX bytes:3540 (3.4 KiB) TX bytes:10199 (9.9 KiB)<br /> Interrupt:169 Memory:f4000000-f4012100<br /><br />lo Link encap:Local Loopback<br /> inet addr:127.0.0.1 Mask:255.0.0.0<br /> inet6 addr: ::1/128 Scope:Host<br /> UP LOOPBACK RUNNING MTU:16436 Metric:1<br /> RX packets:27284 errors:0 dropped:0 overruns:0 frame:0<br /> TX packets:27284 errors:0 dropped:0 overruns:0 carrier:0<br /> collisions:0 txqueuelen:0<br /> RX bytes:19766775 (18.8 MiB) TX bytes:19766775 (18.8 MiB)<br /><br />sit0 Link encap:IPv6-in-IPv4<br /> NOARP MTU:1480 Metric:1<br /> RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br /> TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br /> collisions:0 txqueuelen:0<br /> RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)<br />[root@KHCDNSS01 ~]#</blockquote>接著我們做個小試驗,把 eth0 跟 eth1 的網路線拔插個幾次看看,我發現每次的拔插大概掉一個封包,所以兩條網路線各五次的拔插共掉了 10 個封包,不過 session 倒是不會斷:<blockquote>[root@KHCDNSS01 ~]# cat /proc/net/bonding/bond0<br />Ethernet Channel Bonding Driver: v3.2.4 (January 28, 2008)<br /><br />Bonding Mode: load balancing (round-robin)<br />MII Status: up<br />MII Polling Interval (ms): 100<br />Up Delay (ms): 0<br />Down Delay (ms): 0<br /><br />Slave Interface: eth0<br />MII Status: up<br /><span style="font-weight: bold;">Link Failure Count: 5</span><br />Permanent HW addr: 00:22:19:50:bc:7e<br /><br />Slave Interface: eth1<br />MII Status: up<br /><span style="font-weight: bold;">Link Failure Count: 5</span><br />Permanent HW addr: 00:22:19:50:bc:80<br />[root@KHCDNSS01 ~]# </blockquote>以上,報告完畢~</blockquote></span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com13tag:blogger.com,1999:blog-5287674613622206536.post-24030897586139765322009-04-28T22:56:00.004+08:002009-04-29T23:27:04.616+08:00ZURICH Z-1000 GPS NTP server 終於來了...等了好一陣子的 GPS NTP server 終於到料了,在裝配及拉好線之後,當然要連進去看看,首先第一次的連線就是直接用電腦接上去,打開瀏覽器,在網址列敲入 http://192.168.0.100 就可以連上 Z-1000 內建的 Web server 了...<br /><br />首先這就是 Z-1000 的登入畫面:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjODfUz_gOj_wIpG4NbZYA5GzuBv08qpNuy5vBTMnzs041niIQI35mIJU2KBX7spSCaya9ajECpqGp2nKDV-uYwGAxxMYzvErkEzaTdTqUUgNjViE25VkXCRMICJdlPo4wclxawj-iuRR2u/s1600-h/Z1000-login.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 173px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjODfUz_gOj_wIpG4NbZYA5GzuBv08qpNuy5vBTMnzs041niIQI35mIJU2KBX7spSCaya9ajECpqGp2nKDV-uYwGAxxMYzvErkEzaTdTqUUgNjViE25VkXCRMICJdlPo4wclxawj-iuRR2u/s200/Z1000-login.jpg" alt="" id="BLOGGER_PHOTO_ID_5330128972476302674" border="0" /></a><span class="fullpost">敲入帳號密碼之後即可登入 Z-1000 進入 Status 的畫面:(右下角看的到同步的衛星數量)<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH5W-Nq7ftHCe9XIZlhcPLu_cL2t1P_X0NwvG0qvu5kkSl4JFFFbN8M36tEDkJtxVfJMiWFz69nUPMIOBCbelFQ_IaK8ClM7CW9C1kZkmV3h5OwIqSdM49qAGnAyQZslundjNiK1cRi1TC/s1600-h/Z1000-status-001.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 173px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH5W-Nq7ftHCe9XIZlhcPLu_cL2t1P_X0NwvG0qvu5kkSl4JFFFbN8M36tEDkJtxVfJMiWFz69nUPMIOBCbelFQ_IaK8ClM7CW9C1kZkmV3h5OwIqSdM49qAGnAyQZslundjNiK1cRi1TC/s200/Z1000-status-001.jpg" alt="" id="BLOGGER_PHOTO_ID_5330128977549544898" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinVbecNDnAawQsgD_qF1QvYaIIvh4BPNh2zIaY8o_7A50Kiu4aqwFLf9puOpj5a5QVciBtJU2qTQ-foKcV-P2q7FWXYvedwhfHSekVw9xg_G-843E8CgqsVmtvMz04DRHLw8s7Je4uvAM2/s1600-h/Z1000-status-002.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 173px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinVbecNDnAawQsgD_qF1QvYaIIvh4BPNh2zIaY8o_7A50Kiu4aqwFLf9puOpj5a5QVciBtJU2qTQ-foKcV-P2q7FWXYvedwhfHSekVw9xg_G-843E8CgqsVmtvMz04DRHLw8s7Je4uvAM2/s200/Z1000-status-002.jpg" alt="" id="BLOGGER_PHOTO_ID_5330128981236900690" border="0" /></a>下面這是 Config 的部分:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZNu5aQUs1dKWEp9Voby960ufFdTB126VFK40yb2uU-PJosy1LmhaUeqaNQimoA0BAIR0JGOUECMpOmym8wSyTtABMJ_HoUwYUqxf4yQxSa7Yj3cPjcNSh-DxjOdlcZobXAeRzHDrv7Z-_/s1600-h/Z1000-Config-001.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 173px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZNu5aQUs1dKWEp9Voby960ufFdTB126VFK40yb2uU-PJosy1LmhaUeqaNQimoA0BAIR0JGOUECMpOmym8wSyTtABMJ_HoUwYUqxf4yQxSa7Yj3cPjcNSh-DxjOdlcZobXAeRzHDrv7Z-_/s200/Z1000-Config-001.jpg" alt="" id="BLOGGER_PHOTO_ID_5330128982922467906" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoIx7dfQ1x6zRk6L-EGqsrmE8nVh531YHf5RkvVXRLOJBoWBHzqW8EgGOSNqkA-OfsArfl_uzd07jFScgeM6a2Yeohsq9H6aa6kvMeqLz_yxrW1D9xmGKoEX2AKUbQhU84cjZIyDcbYaVo/s1600-h/Z1000-Config-002.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 173px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoIx7dfQ1x6zRk6L-EGqsrmE8nVh531YHf5RkvVXRLOJBoWBHzqW8EgGOSNqkA-OfsArfl_uzd07jFScgeM6a2Yeohsq9H6aa6kvMeqLz_yxrW1D9xmGKoEX2AKUbQhU84cjZIyDcbYaVo/s200/Z1000-Config-002.jpg" alt="" id="BLOGGER_PHOTO_ID_5330128982391866114" border="0" /></a>接著是 Admin 的畫面:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcy75ON0SWESrOohzO22J27JVa5Bc4v4B7q2aSm4anm3Zhn8LKhF353NEuh0MSXTnvformpGTRLjH_moXAtBUP9BEbVPL0Czu4oYBMPoMRl8xa28uT8m8TOguUQd-N73hd2hIILJ6n6XQj/s1600-h/Z1000-admin-001.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 173px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcy75ON0SWESrOohzO22J27JVa5Bc4v4B7q2aSm4anm3Zhn8LKhF353NEuh0MSXTnvformpGTRLjH_moXAtBUP9BEbVPL0Czu4oYBMPoMRl8xa28uT8m8TOguUQd-N73hd2hIILJ6n6XQj/s200/Z1000-admin-001.jpg" alt="" id="BLOGGER_PHOTO_ID_5330129644991372386" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6j7nXIffnu6VBf6vfufq89ZiSznq86ju6HpSAu-9cwN9ZVPD00BcY60JWDhra1ZWhro49jZdGSzDsCO-QarHoPnJSu81OhyphenhyphenFkJnryDElcam5b3kJIefBo9WPKVSpmg9ho5DQtO8tMD9VC/s1600-h/Z1000-admin-002.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 173px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6j7nXIffnu6VBf6vfufq89ZiSznq86ju6HpSAu-9cwN9ZVPD00BcY60JWDhra1ZWhro49jZdGSzDsCO-QarHoPnJSu81OhyphenhyphenFkJnryDElcam5b3kJIefBo9WPKVSpmg9ho5DQtO8tMD9VC/s200/Z1000-admin-002.jpg" alt="" id="BLOGGER_PHOTO_ID_5330129646980530978" border="0" /></a>最後是 Log 的畫面囉:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVljGfpUzZNKFFycqqt6pYtx0MiK4Ipr1xg-7bJ-F1bT8Xk9FNfPc96bXtoVOlXHaBhFQoICalRAusg39TO5bStB20sZulrxPi6msjVubBadjlnmQ_4LGFA_trdvTLomPjXNgdZZVxZRn-/s1600-h/Z1000-Log-001.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 173px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVljGfpUzZNKFFycqqt6pYtx0MiK4Ipr1xg-7bJ-F1bT8Xk9FNfPc96bXtoVOlXHaBhFQoICalRAusg39TO5bStB20sZulrxPi6msjVubBadjlnmQ_4LGFA_trdvTLomPjXNgdZZVxZRn-/s200/Z1000-Log-001.jpg" alt="" id="BLOGGER_PHOTO_ID_5330129652336384258" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVaZM4e6iGxVQ2T1scXx9nmZcTyE1KalZQQhuxspzjRTBzecuG7PyfbGDtUw-aj72exWx-2UIRJZMB2ndmz3VGPxwQ33EFHdFNzEbp4AGVjlSlJyaFCJg_j9jZQopgP2br-bz_N0jR-sVR/s1600-h/Z1000-Log-002.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 173px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVaZM4e6iGxVQ2T1scXx9nmZcTyE1KalZQQhuxspzjRTBzecuG7PyfbGDtUw-aj72exWx-2UIRJZMB2ndmz3VGPxwQ33EFHdFNzEbp4AGVjlSlJyaFCJg_j9jZQopgP2br-bz_N0jR-sVR/s200/Z1000-Log-002.jpg" alt="" id="BLOGGER_PHOTO_ID_5330129651423678786" border="0" /></a><br />就先這樣吧~</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-2489328053986103172009-04-24T22:00:00.004+08:002009-04-30T18:29:00.390+08:00要如何在 Linux 和 Solaris 上 capture the network packets?之前寫到過在 linux 機器上面跑 Ethereal 來抓封包,不過這 Ethereal 都已經進版到 Wireshark 了,所以乾脆再把這方便的指令記錄一下當作備檔,順便也列一下幾個好用的抓封包的指令來做為參考:<br /><br />首先是 Wireshark,在這裡因為機器多半跑在 run level 3 ,所以我還是用指令來秀就好,先看一下 tshark 有什麼用法:<span class="fullpost"><blockquote><span style="font-weight: bold;">Usage: tshark [options] ...</span><br /><br />Capture interface:<br />-i (interface) <span style="font-weight: bold;"> </span>name or idx of interface (def: first non-loopback)<br />-f (capture) packet filter in libpcap filter syntax<br />-s (snaplen) packet snapshot length (def: 65535)<br />-p don't capture in promiscuous mode<br />-y (link) link layer type (def: first appropriate)<br />-D print list of interfaces and exit<br />-L print list of link-layer types of iface and exit<br /><br />Capture stop conditions:<br />-c (packet) stop after n packets (def: infinite)<br />-a (autostop) ... duration:NUM - stop after NUM seconds<br /> filesize:NUM - stop this file after NUM KB<br /> files:NUM - stop after NUM files<br />Capture output:<br />-b (ringbuffer) ... duration:NUM - switch to next file after NUM secs<br /> filesize:NUM - switch to next file after NUM KB<br /> files:NUM - ringbuffer: replace after NUM files<br />Input file:<br />-r (infile) set the filename to read from (no pipes or stdin!)<br /><br />Processing:<br />-R (read) packet filter in Wireshark display filter syntax<br />-n disable all name resolutions (def: all enabled)<br />-N (name) enable specific name resolution(s): "mntC"<br />-d (layer_type)==(selector),(decode_as_protocol) ...<br /> "Decode As", see the man page for details<br /> Example: tcp.port==8888,http<br />Output:<br />-w (outfile|-) set the output filename (or '-' for stdout)<br />-F (output) set the output file type, default is libpcap<br /> an empty "-F" option will list the file types<br />-V add output of packet tree (Packet Details)<br />-S display packets even when writing to a file<br />-x add output of hex and ASCII dump (Packet Bytes)<br />-T pdml|ps|psml|text|fields<br /> format of text output (def: text)<br />-e (field) field to print if -Tfields selected (e.g. tcp.port);<br /> this option can be repeated to print multiple fields<br />-E(fieldsoption)=(value) set options for output when -Tfields selected:<br />header=y|n switch headers on and off<br />separator=/t|/s|(char) select tab, space, printable character as separator<br />quote=d|s|n select double, single, no quotes for values<br />-t ad|a|r|d|dd|e output format of time stamps (def: r: rel. to first)<br />-l flush standard output after each packet<br />-q be more quiet on stdout (e.g. when using statistics)<br />-X (key):(value) eXtension options, see the man page for details<br />-z (statistics) various statistics, see the man page for details<br /><br />Miscellaneous:<br />-h display this help and exit<br />-v display version info and exit<br />-o (name):(value) ... override preference setting</blockquote>這裡秀了不少相關的參數,不過一般我們用不了這麼多,我就用最簡單的例子來示範一下就好:<br /><br />下面這個範例示範最常用到就是抓 eth0 的封包並寫到 /tmp/test.cap 去:<blockquote>[root@KHCDNSS01 ~]# <span style="font-weight: bold; color: rgb(51, 51, 153);">tshark -i eth0 -w /tmp/test.cap</span><br />Running as user "root" and group "root". This could be dangerous.<br />Capturing on eth0<br />145<br />[root@KHCDNSS01 ~]#</blockquote>如果要讀出這個 .cap 檔,可以用 -r 的參數,或者直接把檔案抓下來在自己的電腦上用 Wireshark 去開啟,不過有時就是急著要在機器上直接檢視所抓取的封包的結果,那就用 -S 吧,讓存檔的時候還順便把結果秀在螢幕上來檢視:<blockquote>[root@KHCDNSS01 ~]# <span style="font-weight: bold; color: rgb(0, 0, 153);">tshark -i eth0 -w /tmp/test.log -S</span><br />Running as user "root" and group "root". This could be dangerous.<br />Capturing on eth0<br />0.000000 IntelCor_11:57:ec -> UscInfor_00:00:00 LLC U, func=UI; SNAP, OUI 0x020000 (Unknown), PID 0x0001<br />0.013780 IntelCor_0c:9c:e3 -> UscInfor_00:00:00 LLC U, func=UI; SNAP, OUI 0x020000 (Unknown), PID 0x0001<br />0.019267 IntelCor_0c:5e:84 -> UscInfor_00:00:00 LLC U, func=UI; SNAP, OUI 0x020000 (Unknown), PID 0x0001<br />0.026100 IntelCor_0c:a2:40 -> UscInfor_00:00:00 LLC U, func=UI; SNAP, OUI 0x020000 (Unknown), PID 0x0001<br />0.106711 IntelCor_11:57:ec -> UscInfor_00:00:00 LLC U, func=UI; SNAP, OUI 0x020000 (Unknown), PID 0x0001<br />0.125997 IntelCor_0c:5e:84 -> UscInfor_00:00:00 LLC U, func=UI; SNAP, OUI 0x020000 (Unknown), PID 0x0001<br />0.149380 10.255.131.253 -> 10.15.25.13 NTP NTP client<br />0.149424 10.15.25.13 -> 10.255.131.253 NTP NTP server<br />0.213424 IntelCor_11:57:ec -> UscInfor_00:00:00 LLC U, func=UI; SNAP, OUI 0x020000 (Unknown), PID 0x0001<br />0.232625 IntelCor_0c:5e:84 -> UscInfor_00:00:00 LLC U, func=UI; SNAP, OUI 0x020000 (Unknown), PID 0x0001<br />0.321434 IntelCor_11:57:ec -> UscInfor_00:00:00 LLC U, func=UI; SNAP, OUI 0x020000 (Unknown), PID 0x0001<br />0.340753 IntelCor_0c:5e:84 -> UscInfor_00:00:00 LLC U, func=UI; SNAP, OUI 0x020000 (Unknown), PID 0x0001<br />0.428148 IntelCor_11:57:ec -> UscInfor_00:00:00 LLC U, func=UI; SNAP, OUI 0x020000 (Unknown), PID 0x0001<br />0.447482 IntelCor_0c:5e:84 -> UscInfor_00:00:00 LLC U, func=UI; SNAP, OUI 0x020000 (Unknown), PID 0x0001<br />14 packets captured<br />[root@KHCDNSS01 ~]#</blockquote>不過這樣的封包訊息很難對時間對吧?那我們變換一下隊形,加上時間戳記在每個封包前面好了,這樣也比較方便檢視:<blockquote>[root@KHCDNSS01 ~]# <span style="color: rgb(0, 0, 153); font-weight: bold;">tshark -i eth1 -ta -w /tmp/test.log -S</span><br />Running as user "root" and group "root". This could be dangerous.<br />Capturing on eth1<br />22:52:38.637125 SunMicro_9b:ab:99 -> Broadcast ARP Who has 172.24.132.9? Tell 172.24.132.5<br />22:52:38.637154 SunMicro_9b:ab:99 -> Broadcast ARP Who has 172.24.132.7? Tell 172.24.132.5<br />22:52:38.642615 SunMicro_d0:3e:07 -> Broadcast ARP Who has 172.24.4.8? Tell 172.24.4.9<br />22:52:38.645906 SunMicro_1a:4e:3b -> Broadcast ARP Who has 172.24.4.87? Tell 172.24.4.84<br />22:52:38.646316 SunMicro_1a:b6:37 -> Broadcast ARP Who has 172.24.4.87? Tell 172.24.4.86<br />22:52:38.650723 172.24.128.202 -> 172.24.4.44 UDP Source port: 3020 Destination port: 34734<br />22:52:38.657893 172.24.4.7 -> 172.24.4.44 TCP 706 > login [ACK] Seq=0 Ack=0 Win=24820 Len=0<br />22:52:38.657904 172.24.4.44 -> 172.24.4.7 Rlogin Data: Capturing on eth0\r\n22:52:38.637125 SunMicro_9b:ab:99 -> Broadcast ARP Who has 172.24.132.9? Tell 172.24.132.5\r\n22:52:38.6371<br />22:52:38.672427 172.24.128.202 -> 172.24.4.44 UDP Source port: 3020 Destination port: 34732</blockquote>再列出另一種我比較喜歡的時間格式:<blockquote>[root@KHCDNSS01 ~]# <span style="color: rgb(0, 0, 153); font-weight: bold;">tshark -i eth1 -tad -w /tmp/test.log -S</span><br />Running as user "root" and group "root". This could be dangerous.<br />Capturing on eth1<br />2009-04-26 22:57:47.071895 172.24.128.202 -> 172.24.4.44 UDP Source port: 3020 Destination port: 34732<br />2009-04-26 22:57:47.073645 172.24.128.202 -> 172.24.4.44 UDP Source port: 3020 Destination port: 34734<br />2009-04-26 22:57:47.089852 172.24.4.7 -> 172.24.4.44 TCP 706 > login [ACK] Seq=0 Ack=0 Win=24820 Len=0<br />2009-04-26 22:57:47.089863 172.24.4.44 -> 172.24.4.7 Rlogin Data: Capturing on eth0\r\n2009-04-26 22:57:47.071895 172.24.128.202 -> 172.24.4.44 UDP Source port: 3020 Destination port: 34732\r\n200<br />2009-04-26 22:57:47.098563 SunMicro_9b:ad:c9 -> Broadcast ARP Who has 172.24.132.9? Tell 172.24.132.2<br />2009-04-26 22:57:47.098599 SunMicro_9b:ad:c9 -> Broadcast ARP Who has 172.24.132.7? Tell 172.24.132.2<br />2009-04-26 22:57:47.116810 172.24.128.202 -> 172.24.4.44 UDP Source port: 3020 Destination port: 34732<br />2009-04-26 22:57:47.137607 172.24.4.14 -> 172.24.4.44 UDP Source port: 3020 Destination port: 34730<br />2009-04-26 22:57:47.138241 172.24.4.28 -> 172.24.4.44 UDP Source port: 3030 Destination port: 34726</blockquote>不過這樣的封包訊息又太精簡了,看不習慣對吧,那我們再變換一下隊形,這樣應該會更方便檢視:(加上 -V 把封包的 detail 訊息秀出來,加上 -x 後把 output 用 hex 和 ASCII 給 dump 出來,現在是不是清楚多了?)<blockquote>[root@KHCDNSS01 ~]# <span style="color: rgb(0, 0, 153); font-weight: bold;">tshark -i eth0 -Vta -x</span><br />Running as user "root" and group "root". This could be dangerous.<br />Capturing on eth0<br />Frame 1 (104 bytes on wire, 104 bytes captured)<br />Arrival Time: Apr 26, 2009 18:56:34.406686000<br />[Time delta from previous captured frame: 0.000000000 seconds]<br />[Time delta from previous displayed frame: 0.000000000 seconds]<br />[Time since reference or first frame: 0.000000000 seconds]<br />Frame Number: 1<br />Frame Length: 104 bytes<br />Capture Length: 104 bytes<br />[Frame is marked: False]<br />[Protocols in frame: eth:llc:data]<br />IEEE 802.3 Ethernet<br />Destination: UscInfor_00:00:00 (01:00:5e:00:00:00)<br />Address: UscInfor_00:00:00 (01:00:5e:00:00:00)<br />.... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)<br />.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)<br />Source: IntelCor_11:57:ec (00:1c:c0:11:57:ec)<br />Address: IntelCor_11:57:ec (00:1c:c0:11:57:ec)<br />.... ...0 .... .... .... .... = IG bit: Individual address (unicast)<br />.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)<br />Length: 90<br />Logical-Link Control<br />DSAP: SNAP (0xaa)<br />IG Bit: Individual<br />SSAP: SNAP (0xaa)<br />CR Bit: Command<br />Control field: U, func=UI (0x03)<br />000. 00.. = Command: Unnumbered Information (0x00)<br />.... ..11 = Frame type: Unnumbered frame (0x03)<br />Organization Code: Unknown (0x020000)<br />Protocol ID: 0x0001<br />Data (82 bytes)<br />Data: 01011201020000635FFE001CC01157EC01800319112A0000...<br /><br />0000 01 00 5e 00 00 00 00 1c c0 11 57 ec 00 5a aa aa ..^.......W..Z..<br />0010 03 02 00 00 00 01 01 01 12 01 02 00 00 63 5f fe .............c_.<br />0020 00 1c c0 11 57 ec 01 80 03 19 11 2a 00 00 00 00 ....W......*....<br />0030 00 00 00 00 00 05 0f 49 6e 74 65 72 4e 45 54 2d .......InterNET-<br />0040 50 72 69 2d 42 6b 00 00 00 1c c0 0c a2 40 00 00 Pri-Bk.......@..<br />0050 00 00 00 00 00 0c 11 86 f9 ba 00 07 29 5e 4f 88 ............)^O.<br />0060 4c c8 04 85 e2 ff c3 f9 L.......<br /><br />Frame 2 (104 bytes on wire, 104 bytes captured)<br />Arrival Time: Apr 26, 2009 18:56:34.427783000<br />[Time delta from previous captured frame: 0.021097000 seconds]<br />[Time delta from previous displayed frame: 0.021097000 seconds]<br />[Time since reference or first frame: 0.021097000 seconds]<br />Frame Number: 2<br />Frame Length: 104 bytes<br />Capture Length: 104 bytes<br />[Frame is marked: False]<br />[Protocols in frame: eth:llc:data]<br />IEEE 802.3 Ethernet<br />Destination: UscInfor_00:00:00 (01:00:5e:00:00:00)<br />Address: UscInfor_00:00:00 (01:00:5e:00:00:00)<br />.... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)<br />.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)<br />Source: IntelCor_0c:5e:84 (00:1c:c0:0c:5e:84)<br />Address: IntelCor_0c:5e:84 (00:1c:c0:0c:5e:84)<br />.... ...0 .... .... .... .... = IG bit: Individual address (unicast)<br />.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)<br />Length: 90<br />Logical-Link Control<br />DSAP: SNAP (0xaa)<br />IG Bit: Individual<br />SSAP: SNAP (0xaa)<br />CR Bit: Command<br />Control field: U, func=UI (0x03)<br />000. 00.. = Command: Unnumbered Information (0x00)<br />.... ..11 = Frame type: Unnumbered frame (0x03)<br />Organization Code: Unknown (0x020000)<br />Protocol ID: 0x0001<br />Data (82 bytes)<br />Data: 01011001020000DC8C04001CC00C5E84017F0318112A0000...<br /><br />0000 01 00 5e 00 00 00 00 1c c0 0c 5e 84 00 5a aa aa ..^.......^..Z..<br />0010 03 02 00 00 00 01 01 01 10 01 02 00 00 dc 8c 04 ................<br />0020 00 1c c0 0c 5e 84 01 7f 03 18 11 2a 00 00 00 01 ....^......*....<br />0030 00 01 00 00 00 07 0d 41 53 4e 2d 53 65 63 2d 42 .......ASN-Sec-B<br />0040 72 69 63 6b 00 00 00 00 00 1c c0 0c 9c e3 00 00 rick............<br />0050 00 00 00 00 00 0c 11 86 f9 bb 00 05 e3 0c 4e a3 ..............N.<br />0060 fd 42 49 17 bb 9e bd 64 .BI....d<br /><br />Frame 3 (90 bytes on wire, 90 bytes captured)<br />Arrival Time: Apr 26, 2009 18:56:34.444956000<br />[Time delta from previous captured frame: 0.017173000 seconds]<br />[Time delta from previous displayed frame: 0.017173000 seconds]<br />[Time since reference or first frame: 0.038270000 seconds]<br />Frame Number: 3<br />Frame Length: 90 bytes<br />Capture Length: 90 bytes<br />[Frame is marked: False]<br />[Protocols in frame: eth:ip:udp:ntp]<br />Ethernet II, Src: 02:00:00:dc:8c:04 (02:00:00:dc:8c:04), Dst: 00:22:19:50:bc:7e (00:22:19:50:bc:7e)<br />Destination: 00:22:19:50:bc:7e (00:22:19:50:bc:7e)<br />Address: 00:22:19:50:bc:7e (00:22:19:50:bc:7e)<br />.... ...0 .... .... .... .... = IG bit: Individual address (unicast)<br />.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)<br />Source: 02:00:00:dc:8c:04 (02:00:00:dc:8c:04)<br />Address: 02:00:00:dc:8c:04 (02:00:00:dc:8c:04)<br />.... ...0 .... .... .... .... = IG bit: Individual address (unicast)<br />.... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)<br />Type: IP (0x0800)<br />Internet Protocol, Src: 10.255.131.253 (10.255.131.253), Dst: 10.15.25.13 (10.15.25.13)<br />Version: 4<br />Header length: 20 bytes<br />Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)<br />0000 00.. = Differentiated Services Codepoint: Default (0x00)<br />.... ..0. = ECN-Capable Transport (ECT): 0<br />.... ...0 = ECN-CE: 0<br />Total Length: 76<br />Identification: 0x284a (10314)<br />Flags: 0x00<br />0... = Reserved bit: Not set<br />.0.. = Don't fragment: Not set<br />..0. = More fragments: Not set<br />Fragment offset: 0<br />Time to live: 27<br />Protocol: UDP (0x11)<br />Header checksum: 0xc53f [correct]<br />[Good: True]<br />[Bad : False]<br />Source: 10.255.131.253 (10.255.131.253)<br />Destination: 10.15.25.13 (10.15.25.13)<br />User Datagram Protocol, Src Port: ntp (123), Dst Port: ntp (123)<br />Source port: ntp (123)<br />Destination port: ntp (123)<br />Length: 56<br />Checksum: 0x4170 [correct]<br />[Good Checksum: True]<br />[Bad Checksum: False]<br />Network Time Protocol<br />Flags: 0x0b<br />00.. .... = Leap Indicator: no warning (0)<br />..00 1... = Version number: reserved (1)<br />.... .011 = Mode: client (3)<br />Peer Clock Stratum: unspecified or unavailable (0)<br />Peer Polling Interval: invalid (0)<br />Peer Clock Precision: 1.000000 sec<br />Root Delay: 0.0000 sec<br />Root Dispersion: 0.0000 sec<br />Reference Clock ID: NULL<br />Reference Clock Update Time: NULL<br />Originate Time Stamp: NULL<br />Receive Time Stamp: NULL<br />Transmit Time Stamp: NULL<br /><br />0000 00 22 19 50 bc 7e 02 00 00 dc 8c 04 08 00 45 00 .".P.~........E.<br />0010 00 4c 28 4a 00 00 1b 11 c5 3f 0a ff 83 fd 0a 0f .L(J.....?......<br />0020 19 0d 00 7b 00 7b 00 38 41 70 0b 00 00 00 00 00 ...{.{.8Ap......<br />0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................<br />0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................<br />0050 00 00 00 00 00 00 00 00 00 00 ..........</blockquote>對了,補充一下,當在抓封包時在 /var/log/messages 裡面常會出現一堆如下所列的訊息:<blockquote>kernel: device eth0 entered promiscuous mode<br />kernel: device eth0 left promiscuous mode</blockquote>這代表你的網卡處於"混雜模式時",在同一個 broadcast segment 下的封包,都會被監聽,如果你的 LAN 是用 HUB 來接,那整個 LAN 的封包都會被監聽,若你的 LAN 是用 switch 接,一般來說就只能看到自己和 broadcast 的封包。<br /><br />假如你不想在 /var/log/messages 裡面再看到這些訊息的話,可以再加上一個 -p 的參數,就好了...<br /><br />當然如果還要加上一些 filter 的話就只需依想要過濾的條件去設定就行了,舉例來說,我想過濾只抓關於 RTSP 的封包就好:<blockquote>[root@KHCDNSS01 ~]# <span style="font-weight: bold; color: rgb(0, 0, 153);">tshark -i eth1 -Vtad -x -p port rtsp</span><br />Running as user "root" and group "root". This could be dangerous.<br />Capturing on eth1<br />Frame 1 (74 bytes on wire, 74 bytes captured)<br />Arrival Time: Apr 26, 2009 23:39:12.773857000<br />Time delta from previous packet: 0.000000000 seconds<br />Time since reference or first frame: 0.000000000 seconds<br />Frame Number: 1<br />Packet Length: 74 bytes<br />Capture Length: 74 bytes<br />Protocols in frame: eth:ip:tcp<br />Ethernet II, Src: 00:15:60:a3:f4:67, Dst: 00:15:60:a3:f8:e5<br />Destination: 00:15:60:a3:f8:e5 (00:15:60:a3:f8:e5)<br />Source: 00:15:60:a3:f4:67 (00:15:60:a3:f4:67)<br />Type: IP (0x0800)<br />Internet Protocol, Src Addr: 172.24.4.44 (172.24.4.44), Dst Addr: 172.24.4.14 (172.24.4.14)<br />Version: 4<br />Header length: 20 bytes<br />Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)<br />0000 00.. = Differentiated Services Codepoint: Default (0x00)<br />.... ..0. = ECN-Capable Transport (ECT): 0<br />.... ...0 = ECN-CE: 0<br />Total Length: 60<br />Identification: 0x03e6 (998)<br />Flags: 0x04 (Don't Fragment)<br />0... = Reserved bit: Not set<br />.1.. = Don't fragment: Set<br />..0. = More fragments: Not set<br />Fragment offset: 0<br />Time to live: 64<br />Protocol: TCP (0x06)<br />Header checksum: 0xd66b (correct)<br />Source: 172.24.4.44 (172.24.4.44)<br />Destination: 172.24.4.14 (172.24.4.14)<br />Transmission Control Protocol, Src Port: 57606 (57606), Dst Port: rtsp (554), Seq: 0, Ack: 0, Len: 0<br />Source port: 57606 (57606)<br />Destination port: rtsp (554)<br />Sequence number: 0 (relative sequence number)<br />Header length: 40 bytes<br />Flags: 0x0002 (SYN)<br />0... .... = Congestion Window Reduced (CWR): Not set<br />.0.. .... = ECN-Echo: Not set<br />..0. .... = Urgent: Not set<br />...0 .... = Acknowledgment: Not set<br />.... 0... = Push: Not set<br />.... .0.. = Reset: Not set<br />.... ..1. = Syn: Set<br />.... ...0 = Fin: Not set<br />Window size: 5792<br />Checksum: 0x57d2 (correct)<br />Options: (20 bytes)<br />Maximum segment size: 1460 bytes<br />SACK permitted<br />Time stamp: tsval 2080473562, tsecr 2080479415<br />NOP<br />Window scale: 0 (multiply by 1)<br /><br />0000 00 15 60 a3 f8 e5 00 15 60 a3 f4 67 08 00 45 00 ..`.....`..g..E.<br />0010 00 3c 03 e6 40 00 40 06 d6 6b ac 18 04 2c ac 18 .(..@.@..k...,..<br />0020 04 0e e1 06 02 2a 01 28 82 3c 00 00 00 00 a0 02 .....*.(.(......<br />0030 16 a0 57 d2 00 00 02 04 05 b4 04 02 08 0a 7c 01 ..W...........|.<br />0040 81 da 7c 01 98 b7 01 03 03 00 ..|.......</blockquote>綜合以上所說的,其實我一般最常用的便是類似下面組合起來的 command 囉:<blockquote>[root@KHCDNSS01 ~]# <span style="font-weight: bold; color: rgb(0, 0, 153);">tshark -i eth0 -Vtad -x icmp -p -w /tmp/test.log -S</span><br />Running as user "root" and group "root". This could be dangerous.<br />Capturing on eth0<br />Frame 1 (98 bytes on wire, 98 bytes captured)<br />Arrival Time: Apr 27, 2009 10:53:50.326876000<br />[Time delta from previous captured frame: 0.000000000 seconds]<br />[Time delta from previous displayed frame: 0.000000000 seconds]<br />[Time since reference or first frame: 0.000000000 seconds]<br />Frame Number: 1<br />Frame Length: 98 bytes<br />Capture Length: 98 bytes<br />[Frame is marked: False]<br />[Protocols in frame: eth:ip:icmp:data]<br />Ethernet II, Src: 00:22:19:50:bc:7e (00:22:19:50:bc:7e), Dst: All-HSRP-routers_04 (00:00:0c:07:ac:04)<br />Destination: All-HSRP-routers_04 (00:00:0c:07:ac:04)<br />Address: All-HSRP-routers_04 (00:00:0c:07:ac:04)<br />.... ...0 .... .... .... .... = IG bit: Individual address (unicast)<br />.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)<br />Source: 00:22:19:50:bc:7e (00:22:19:50:bc:7e)<br />Address: 00:22:19:50:bc:7e (00:22:19:50:bc:7e)<br />.... ...0 .... .... .... .... = IG bit: Individual address (unicast)<br />.... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)<br />Type: IP (0x0800)<br />Internet Protocol, Src: 10.15.25.13 (10.15.25.13), Dst: 192.168.161.5 (192.168.161.5)<br />Version: 4<br />Header length: 20 bytes<br />Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)<br />0000 00.. = Differentiated Services Codepoint: Default (0x00)<br />.... ..0. = ECN-Capable Transport (ECT): 0<br />.... ...0 = ECN-CE: 0<br />Total Length: 84<br />Identification: 0x0000 (0)<br />Flags: 0x04 (Don't Fragment)<br />0... = Reserved bit: Not set<br />.1.. = Don't fragment: Set<br />..0. = More fragments: Not set<br />Fragment offset: 0<br />Time to live: 64<br />Protocol: ICMP (0x01)<br />Header checksum: 0xb5df [correct]<br />[Good: True]<br />[Bad : False]<br />Source: 10.15.25.13 (10.15.25.13)<br />Destination: 192.168.161.5 (192.168.161.5)<br />Internet Control Message Protocol<br />Type: 8 (Echo (ping) request)<br />Code: 0 ()<br />Checksum: 0x866f [correct]<br />Identifier: 0x7a27<br />Sequence number: 1 (0x0001)<br />Data (56 bytes)<br />Data: 3E1EF549D4FC040008090A0B0C0D0E0F1011121314151617...<br /><br />0000 00 00 0c 07 ac 04 00 22 19 50 bc 7e 08 00 45 00 .......".P.~..E.<br />0010 00 54 00 00 40 00 40 01 b5 df 0a 0f 19 0d c0 a8 .T..@.@.........<br />0020 a1 05 08 00 86 6f 7a 27 00 01 3e 1e f5 49 d4 fc .....oz'..)..I..<br />0030 04 00 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 ................<br />0040 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 .......... !"#$%<br />0050 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 &'()*+,-./012345<br />0060 36 37 67<br /><br />1 packets captured<br />[root@KHCDNSS01 ~]#</blockquote>既然說到在 Linux 上使用 Wireshark, 那在 Solaris 上面呢?簡單來說你可以使用 snoop 跟 tcpdump,不過個人是偏好 snoop 啦,下面先簡單列一下可用的選項:<blockquote><span style="font-weight: bold;">Usage: snoop</span><br />[ -a ] # Listen to packets on audio<br />[ -d device ] # Listen on interface named device<br />[ -s snaplen ] # Truncate packets<br />[ -c count ] # Quit after count packets<br />[ -P ] # Turn OFF promiscuous mode<br />[ -D ] # Report dropped packets<br />[ -S ] # Report packet size<br />[ -i file ] # Read previously captured packets<br />[ -o file ] # Capture packets in file<br />[ -n file ] # Load addr-to-name table from file<br />[ -N ] # Create addr-to-name table<br />[ -t r|a|d ] # Time: Relative, Absolute or Delta<br />[ -v ] # Verbose packet display<br />[ -V ] # Show all summary lines<br />[ -p first[,last] ] # Select packet(s) to display<br />[ -x offset[,length] ] # Hex dump from offset for length<br />[ -C ] # Print packet filter code<br />[ -q ] # Suppress printing packet count<br />[ -r ] # Do not resolve address to name<br /><br />[ filter expression ]</blockquote>其實簡單說起來,用法跟 Wireshark 大同小異啦,比方說,下面是我常用的一個指令,用來檢查 NTP client 有沒有過來做 NTP 的同步,當然也可以把 filter 的部分改成其他的用法,比方說用 "bootp" 來取代掉 "port ntp" 的部分,就可以檢查 DHCP Client 有沒有來 request IP...其他的選項部分跟 Wireshark 其實差異不大,-d 是用來指定抓封包的 interface,-P 一樣可以避免網卡處於"混雜模式",-r 是不要解析 IP address,-v 是秀出詳細的 packet,而 -ta 則是秀出時間戳記.....<blockquote>47ksh# <span style="color: rgb(0, 0, 153); font-weight: bold;">snoop -vVta -r -d bge0 -P -x5 port ntp</span><br />Using device /dev/bge0 (non promiscuous)<br />ETHER: ----- Ether Header -----<br />ETHER:<br />ETHER: Packet 11 arrived at 18:21:4.42140<br />ETHER: Packet size = 90 bytes<br />ETHER: Destination = 0:14:4f:a9:83:50,<br />ETHER: Source = 0:1a:f0:bc:b6:6d,<br />ETHER: Ethertype = 0800 (IP)<br />ETHER:<br />IP: ----- IP Header -----<br />IP:<br />IP: Version = 4<br />IP: Header length = 20 bytes<br />IP: Type of service = 0xc0<br />IP: xxx. .... = 6 (precedence)<br />IP: ...0 .... = normal delay<br />IP: .... 0... = normal throughput<br />IP: .... .0.. = normal reliability<br />IP: .... ..0. = not ECN capable transport<br />IP: .... ...0 = no ECN congestion experienced<br />IP: Total length = 76 bytes<br />IP: Identification = 0<br />IP: Flags = 0x0<br />IP: .0.. .... = may fragment<br />IP: ..0. .... = last fragment<br />IP: Fragment offset = 0 bytes<br />IP: Time to live = 254 seconds/hops<br />IP: Protocol = 17 (UDP)<br />IP: Header checksum = 757e<br />IP: Source address = 10.16.25.34, 10.16.25.34<br />IP: Destination address = 10.17.25.32, 10.17.25.32<br />IP: No options<br />IP:<br />UDP: ----- UDP Header -----<br />UDP:<br />UDP: Source port = 123<br />UDP: Destination port = 123 (NTP)<br />UDP: Length = 56<br />UDP: Checksum = F8E2<br />UDP:<br />NTP: ----- Network Time Protocol -----<br />NTP:<br />NTP: Leap = 0x0 (OK)<br />NTP: Version = 3<br />NTP: Mode = 3 (client)<br />NTP: Stratum = 3 (secondary reference)<br />NTP: Poll = 6<br />NTP: Precision = 238 seconds<br />NTP: Synchronizing distance = 0x0000.0064 (0.001526)<br />NTP: Synchronizing dispersion = 0x0000.040d (0.015823)<br />NTP: Reference clock = 10.17.25.32 (10.17.25.32)<br />NTP: Reference time = 0xcda00550.6bbe484f (2009-04-27 18:20:00.42087)<br />NTP: Originate time = 0xcda00550.6b9f8000 (2009-04-27 18:20:00.42040)<br />NTP: Receive time = 0xcda00550.6bbe484f (2009-04-27 18:20:00.42087)<br />NTP: Transmit time = 0xcda00590.6bc46a2c (2009-04-27 18:21:04.42097)<br /><br /><br />0: 8350 001a f0bc b66d 0800 45c0 004c 0000 .P.....m..E..L..<br />16: 0000 fe11 757e 0a10 1922 0a11 1920 007b ....u~..."... .{<br />32: 007b 0038 f8e2 1b03 06ee 0000 0064 0000 .{.8.........d..<br />48: 040d 0a11 1920 cda0 0550 6bbe 484f cda0 ..... .?.Pk.HO.?<br />64: 0550 6b9f 8000 cda0 0550 6bbe 484f cda0 .Pk?...?.Pk.HO.?<br />80: 0590 6bc4 6a2c ..k.j,<br /><br />^C<br />root@KHXDNSS1:/etc/domain</blockquote>好囉,就先寫到這兒吧~<br /><br />---------- 補充於 2009/04/30 -------------<br />追加補充個我常用的 filer,因為常需要分析 AAA server 間的 Radius protocol,所以常會這麼下指令:(這些是在 Linux OS 上的指令)<blockquote>[root@TEST01 ~]# <span style="font-weight: bold; color: rgb(0, 0, 153);">tshark -Vtad -p -i bond1 -x -z "radius,rtd,ip.addr==xx.xx.xx.xx" -w /tmp/AAA-radius.cap -S</span></blockquote>或者是:<blockquote>[root@TEST01 ~]# <span style="font-weight: bold; color: rgb(0, 0, 153);">tshark -Vtad -p -i bond1 -x -z radius,rtd. -w /tmp/AAA-radius.cap -S</span></blockquote>又或者是乾脆就這麼用:<blockquote>[root@TEST01 ~]# <span style="font-weight: bold; color: rgb(0, 0, 153);">tshark -Vtad -p -i bond1 -x port radius -w /tmp/AAA-radius.cap -S</span></blockquote>對了,加上這個 -z 的參數,在抓完封包時,會多出如下的處理訊息:<blockquote>RADIUS Response Time Delay (RTD) Statistics:<br />Filter for statistics:<br />Duplicate requests: 3<br />Duplicate responses: 0<br />Open requests: 3<br />Discarded responses: 0<br />Type | Messages | Min RTD | Max RTD | Avg RTD | Min in Frame | Max in Frame |<br />Overall | 1 | 1.53 msec | 1.53 msec | 1.53 msec | 11 | 11 |<br />Access | 1 | 1.53 msec | 1.53 msec | 1.53 msec | 11 | 11 |</blockquote>OK,補充完畢...</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-34009776608071748322009-04-07T22:28:00.001+08:002009-04-22T23:02:38.309+08:00CISCO VPN Client 安裝完後 Wi-Fi, LAN 全都不能用了?為了撥接到客戶那邊去處理點問題,趕緊翻出之前的舊版 CISCO-vpnclient-win-msi-4.7.00.0533-k9 出來裝,裝好之後,重開機,啊ㄌㄟ,救人喔....怎麼無線網路就起不來了,再也掃不到任何無線 AP 了,剛剛還在用的啊,天哪,就連有線的區域網路也掛了,完全沒有任何 IP,就算用 ipconfig /renew 也直接回報網路裝置有問題,居然還無法移除...幸好我有安裝新程式之前設定還原點的習慣,趕緊還原到剛剛還沒裝之前的狀態,但,怎麼都不死心,於是上網去抓了新一點的版本 CISCO vpn-client 5.0.03.0560 試試,沒想到,結果一樣,二話不說,還原再試一次,再去找更新的版本,花了一個多小時試到 CISCO-vpnclient-win-msi-5.0.05.0280-k9 的版本還是不行,再次上網去查詢了一下,才發現原來是 DNE 造成的問題啊,只要先 fix 完 DNE 的問題再安裝 CISCO VPN Client 就沒問題了,趕緊到 <a href="http://www.citrix.com/lang/English/lp/lp_1680845.asp">Citrix DNE Support</a> 的頁面去,下面是他網頁說明的步驟:<span class="fullpost"><br /><br />1. 下載並安裝 <a href="ftp://files.citrix.com/winfix.exe">ftp://files.citrix.com/winfix.exe</a><br /><br />2. 接著,下載並安裝最新版的 DNE 更新:<br /><a href="ftp://files.citrix.com/dneupdate.msi">ftp://files.citrix.com/dneupdate.msi</a> for 32-bit<br /><a href="ftp://files.citrix.com/dneupdate64.msi">ftp://files.citrix.com/dneupdate64.msi</a> for 64-bit<br /><br />3. 重新安裝用到 DNE 的程式(例如:VPN Client...)<br /><br />照著做完之後,果然這次安裝 CISCO-vpnclient-win-msi-5.0.05.0280-k9 後網路就沒問題了~<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpvIZLHSJVX6PSGTlaPUW9SNXkQKsmjVuqXVW_YzMUvjwfXabSr5VktWVTUc8aSbX-3Eva-5OU7Tp1XMd7oxMiKiycoUQvPY6H8sDZfJLCBmDaCCD5_MRDNh5S1TGuFzaBC-3g-KUQdrF7/s1600-h/CISCO-VPN-Client-01.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 91px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpvIZLHSJVX6PSGTlaPUW9SNXkQKsmjVuqXVW_YzMUvjwfXabSr5VktWVTUc8aSbX-3Eva-5OU7Tp1XMd7oxMiKiycoUQvPY6H8sDZfJLCBmDaCCD5_MRDNh5S1TGuFzaBC-3g-KUQdrF7/s200/CISCO-VPN-Client-01.jpg" alt="" id="BLOGGER_PHOTO_ID_5327530433925317090" border="0" /></a></span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com4tag:blogger.com,1999:blog-5287674613622206536.post-27503416322685313052009-04-01T23:45:00.002+08:002009-04-02T00:10:28.988+08:00Solaris 10 上安裝 isc-dhcp 並設為 SMF 管理的 service 實作今天臨時要裝一台 SUN 的機器,用來當新的 DHCP server,手邊只有公司精簡版的 Solaris 10 的安裝光碟,裝完後才發現,歐賣尬的,挖勒,怎麼沒看到 isc-dhcp 啊?啊是躲到哪去了?用 svcs -a 去看居然只有 default 的那支 dhcp-server:<blockquote>8ksh# svcs -a|grep dhcp<br />disabled 16:39:47 svc:/network/dhcp-server:default</blockquote>問題來了,由於這一台機器是要把另一台正在 in service 機器上的 DHCP service 給取代掉的,而且之前的 DHCP 是用 isc-dhcp v3.0.4,我看了一下那個 default dhcp-server 的設定,跟 isc-dhcp 的差異實在頗大,沒時間重新設定成 dhcp-server 用的,目前也沒時間線上驗證,怕會影響目前客戶的 serice,所以只得趕快去找 isc-dhcp for Solaris10 的 package。<br /><span class="fullpost"><br />先到 <a href="https://www.isc.org/">ISC</a> 的<a href="https://www.isc.org/downloadables/12">下載網頁</a>去看一下,目前最新的版本是<span style="text-decoration: underline;"></span> <a href="http://ftp.isc.org/isc/dhcp/dhcp-4.1.0.tar.gz">DHCP v4.1.0</a>,抓下來試試看,結果要 ./configure 時居然發現這個精簡版的 OS超級精簡的,連 gcc 都沒有...<blockquote>17ksh# ./configure<br />checking for a BSD-compatible install... ./install-sh -c<br />checking whether build environment is sane... yes<br />checking for gawk... no<br />checking for mawk... no<br />checking for nawk... nawk<br />checking whether make sets $(MAKE)... yes<br />checking for gcc... gcc<br />checking for C compiler default output file name...<br />configure: error: C compiler cannot create executables<br />See `config.log' for more details.<br /><br />root@KHXDNSS1:/opt/SW_Package/dhcp-4.1.0</blockquote>再一查看才發現缺的東西真是多啊,算了,時間不多,換一個好了,直接抓安裝版的好了....到 <a href="http://www.sunfreeware.com/programlistsparc10.html">SunFreeware</a> 去找了一下,嗯,看到了 <a href="ftp://ftp.sunfreeware.com/pub/freeware/sparc/10/dhcp-4.0.0-sol10-sparc-local.gz">dhcp-4.0.0-sol10-sparc-local.gz</a>,當下二話不說,先抓回來看看~<br /><br />解壓再 pkgadd 裝來看看:<blockquote>25ksh# pkgadd -d dhcp-4.0.0-sol10-sparc-local<br /><br />The following packages are available:<br />1 SMCdhcp dhcp<br /> (sparc) 4.0.0<br /><br />Select package(s) you wish to process (or 'all' to process<br />all packages). (default: all) [?,??,q]: all<br /><br />Processing package instance <smcdhcp> from </smcdhcp><br /><br />dhcp(sparc) 4.0.0<br />ISC<br />Using as the package base directory.<br />## Processing package information.<br />## Processing system information.<br />4 package pathnames are already properly installed.<br />## Verifying disk space requirements.<br />## Checking for conflicts with packages already installed.<br />## Checking for setuid/setgid programs.<br /><br />Installing dhcp as <smcdhcp><br /><br />## Installing part 1 of 1.<br />/usr/local/bin/omshell<br />/usr/local/doc/dhcp/LICENSE<br />/usr/local/doc/dhcp/README<br />/usr/local/doc/dhcp/RELNOTES<br />/usr/local/doc/dhcp/contrib/3.0b1-lease-convert<br />/usr/local/doc/dhcp/contrib/dhclient-tz-exithook.sh<br />/usr/local/doc/dhcp/contrib/dhcp.spec<br />/usr/local/doc/dhcp/contrib/ms2isc/Registry.pm<br />/usr/local/doc/dhcp/contrib/ms2isc/ms2isc.pl<br />/usr/local/doc/dhcp/contrib/ms2isc/readme.txt<br />/usr/local/doc/dhcp/contrib/sethostname.sh<br />/usr/local/doc/dhcp/contrib/solaris.init<br />/usr/local/doc/dhcp/doc/IANA-arp-parameters<br />/usr/local/doc/dhcp/doc/Makefile<br />/usr/local/doc/dhcp/doc/References.html<br />/usr/local/doc/dhcp/doc/References.txt<br />/usr/local/doc/dhcp/doc/References.xml<br />/usr/local/doc/dhcp/doc/api+protocol<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhclient-script.8<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhclient.8<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhclient.conf.5<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhclient.leases.5<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhcp-eval.5<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhcp-options.5<br />/usr/local/etc/dhclient.conf<br />/usr/local/etc/dhcpd.conf<br />/usr/local/include/dhcpctl/dhcpctl.h<br />/usr/local/include/isc-dhcp/boolean.h<br />/usr/local/include/isc-dhcp/commandline.h<br />/usr/local/include/isc-dhcp/dst.h<br />/usr/local/include/isc-dhcp/formatcheck.h<br />/usr/local/include/isc-dhcp/int.h<br />/usr/local/include/isc-dhcp/lang.h<br />/usr/local/include/isc-dhcp/list.h<br />/usr/local/include/isc-dhcp/mem.h<br />/usr/local/include/isc-dhcp/print.h<br />/usr/local/include/isc-dhcp/result.h<br />/usr/local/include/isc-dhcp/string.h<br />/usr/local/include/isc-dhcp/types.h<br />/usr/local/include/omapip/alloc.h<br />/usr/local/include/omapip/buffer.h<br />/usr/local/include/omapip/convert.h<br />/usr/local/include/omapip/hash.h<br />/usr/local/include/omapip/omapip.h<br />/usr/local/include/omapip/omapip_p.h<br />/usr/local/include/omapip/trace.h<br />/usr/local/lib/libdhcpctl.a<br />/usr/local/lib/libdst.a<br />/usr/local/lib/libomapi.a<br />/usr/local/sbin/dhclient<br />/usr/local/sbin/dhcpd<br />/usr/local/sbin/dhcrelay<br />/usr/local/share/man/man1/omshell.1<br />/usr/local/share/man/man3/dhcpctl.3<br />/usr/local/share/man/man3/omapi.3<br />/usr/local/share/man/man5/dhclient.conf.5<br />/usr/local/share/man/man5/dhclient.leases.5<br />/usr/local/share/man/man5/dhcp-eval.5<br />/usr/local/share/man/man5/dhcp-options.5<br />/usr/local/share/man/man5/dhcpd.conf.5<br />/usr/local/share/man/man5/dhcpd.leases.5<br />/usr/local/share/man/man8/dhclient-script.8<br />/usr/local/share/man/man8/dhclient.8<br />/usr/local/share/man/man8/dhcpd.8<br />/usr/local/share/man/man8/dhcrelay.8<br />[ verifying class <none> ]<br /><br />Installation of <smcdhcp> was successful.<br /><br />root@KHXDNSS1:/opt/SW_Package</smcdhcp></none></smcdhcp></blockquote><blockquote>27ksh# pkginfo SMCdhcp<br />application SMCdhcp dhcp<br /><br />root@KHXDNSS1:/opt/SW_Package</blockquote>裝完直接跑跑看吧:<blockquote>6ksh# /usr/local/sbin/dhcpd<br />ld.so.1: dhcpd: fatal: libcrypto.so.0.9.8: open failed: No such file or directory<br />Killed<br /><br />root@KHXDNSS1:/root</blockquote>不是吧?這個 OS 也實在是太過精簡了吧,要什麼沒什麼~算了,二話不說,直接移掉:<blockquote>7ksh# pkgrm SMCdhcp<br /><br />The following package is currently installed:<br />SMCdhcp dhcp<br /> (sparc) 4.0.0<br /><br />Do you want to remove this package? [y,n,?,q] y<br /><br />## Removing installed package instance <smcdhcp><br />## Verifying package <smcdhcp> dependencies in global zone<br />## Processing package information.<br />## Removing pathnames in class <none><br />/usr/local/share/man/man8/dhcrelay.8<br />/usr/local/share/man/man8/dhcpd.8<br />/usr/local/share/man/man8/dhclient.8<br />/usr/local/share/man/man8/dhclient-script.8<br />/usr/local/share/man/man8<br />/usr/local/share/man/man5/dhcpd.leases.5<br />/usr/local/share/man/man5/dhcpd.conf.5<br />/usr/local/share/man/man5/dhcp-options.5<br />/usr/local/share/man/man5/dhcp-eval.5<br />/usr/local/share/man/man5/dhclient.leases.5<br />/usr/local/share/man/man5/dhclient.conf.5<br />/usr/local/share/man/man5<br />/usr/local/share/man/man3/omapi.3<br />/usr/local/share/man/man3/dhcpctl.3<br />/usr/local/share/man/man3<br />/usr/local/share/man/man1/omshell.1<br />/usr/local/share/man/man1<br />/usr/local/share/man<br />/usr/local/share <shared><br />/usr/local/sbin/dhcrelay<br />/usr/local/sbin/dhcpd<br />/usr/local/sbin/dhclient<br />/usr/local/sbin<br />/usr/local/lib/libomapi.a<br />/usr/local/lib/libdst.a<br />/usr/local/lib/libdhcpctl.a<br />/usr/local/lib <shared><br />/usr/local/include/omapip/trace.h<br />/usr/local/include/omapip/omapip_p.h<br />/usr/local/include/omapip/omapip.h<br />/usr/local/include/omapip/hash.h<br />/usr/local/include/omapip/convert.h<br />/usr/local/include/omapip/buffer.h<br />/usr/local/include/omapip/alloc.h<br />/usr/local/include/omapip<br />/usr/local/include/isc-dhcp/types.h<br />/usr/local/include/isc-dhcp/string.h<br />/usr/local/include/isc-dhcp/result.h<br />/usr/local/include/isc-dhcp/print.h<br />/usr/local/include/isc-dhcp/mem.h<br />/usr/local/include/isc-dhcp/list.h<br />/usr/local/include/isc-dhcp/lang.h<br />/usr/local/include/isc-dhcp/int.h<br />/usr/local/include/isc-dhcp/formatcheck.h<br />/usr/local/include/isc-dhcp/dst.h<br />/usr/local/include/isc-dhcp/commandline.h<br />/usr/local/include/isc-dhcp/boolean.h<br />/usr/local/include/isc-dhcp<br />/usr/local/include/dhcpctl/dhcpctl.h<br />/usr/local/include/dhcpctl<br />/usr/local/include <shared><br />/usr/local/etc/dhcpd.conf<br />/usr/local/etc/dhclient.conf<br />/usr/local/etc<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhcp-options.5<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhcp-eval.5<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhclient.leases.5<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhclient.conf.5<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhclient.8<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhclient-script.8<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP<br />/usr/local/doc/dhcp/doc/api+protocol<br />/usr/local/doc/dhcp/doc/References.xml<br />/usr/local/doc/dhcp/doc/References.txt<br />/usr/local/doc/dhcp/doc/References.html<br />/usr/local/doc/dhcp/doc/Makefile<br />/usr/local/doc/dhcp/doc/IANA-arp-parameters<br />/usr/local/doc/dhcp/doc<br />/usr/local/doc/dhcp/contrib/solaris.init<br />/usr/local/doc/dhcp/contrib/sethostname.sh<br />/usr/local/doc/dhcp/contrib/ms2isc/readme.txt<br />/usr/local/doc/dhcp/contrib/ms2isc/ms2isc.pl<br />/usr/local/doc/dhcp/contrib/ms2isc/Registry.pm<br />/usr/local/doc/dhcp/contrib/ms2isc<br />/usr/local/doc/dhcp/contrib/dhcp.spec<br />/usr/local/doc/dhcp/contrib/dhclient-tz-exithook.sh<br />/usr/local/doc/dhcp/contrib/3.0b1-lease-convert<br />/usr/local/doc/dhcp/contrib<br />/usr/local/doc/dhcp/RELNOTES<br />/usr/local/doc/dhcp/README<br />/usr/local/doc/dhcp/LICENSE<br />/usr/local/doc/dhcp<br />/usr/local/doc <shared><br />/usr/local/bin/omshell<br />/usr/local/bin <shared><br />## Updating system information.<br /><br />Removal of <smcdhcp> was successful.<br /><br />root@KHXDNSS1:/root</smcdhcp></shared></shared></shared></shared></shared></none></smcdhcp></smcdhcp></blockquote>算了,回頭看一下原來的機器,用的是 v3.0.4 版的,好吧,再去找了一下,v3.0.4 版的是找不到,不過還好在 <a href="http://ftp.riken.jp/Sun/sunfreeware/sparc/5.10/?C=S;O=A">SunFreeware</a> 還有給 Solaris10 用的 <a href="http://ftp.riken.jp/Sun/sunfreeware/sparc/5.10/dhcp-3.0.5-sol10-sparc-local.gz"></a>DHCP v3.0.5 (<a href="http://ftp.riken.jp/Sun/sunfreeware/sparc/5.10/dhcp-3.0.5-sol10-sparc-local.gz">dhcp-3.0.5-sol10-sparc-local.gz</a>) 的版本,一樣,先抓來解壓縮:<blockquote>gunzip dhcp-3.0.5-sol10-sparc-local.gz</blockquote>接著裝上去吧:<blockquote>17ksh# pkgadd -d dhcp-3.0.5-sol10-sparc-local<br /><br />The following packages are available:<br />1 SMCdhcp dhcp<br /> (sparc) 3.0.5<br /><br />Select package(s) you wish to process (or 'all' to process<br />all packages). (default: all) [?,??,q]: all<br /><br />Processing package instance <smcdhcp> from </smcdhcp><br /><br />dhcp(sparc) 3.0.5<br />ISC<br />Using as the package base directory.<br />## Processing package information.<br />## Processing system information.<br />7 package pathnames are already properly installed.<br />## Verifying disk space requirements.<br />## Checking for conflicts with packages already installed.<br />## Checking for setuid/setgid programs.<br /><br />Installing dhcp as <smcdhcp><br /><br />## Installing part 1 of 1.<br />/usr/local/bin/omshell<br />/usr/local/doc/dhcp/LICENSE<br />/usr/local/doc/dhcp/README<br />/usr/local/doc/dhcp/RELNOTES<br />/usr/local/doc/dhcp/contrib/3.0b1-lease-convert<br />/usr/local/doc/dhcp/contrib/dhcp.spec<br />/usr/local/doc/dhcp/contrib/ms2isc/Registry.pm<br />/usr/local/doc/dhcp/contrib/ms2isc/ms2isc.pl<br />/usr/local/doc/dhcp/contrib/ms2isc/readme.txt<br />/usr/local/doc/dhcp/contrib/sethostname.sh<br />/usr/local/doc/dhcp/contrib/solaris.init<br />/usr/local/doc/dhcp/doc/IANA-arp-parameters<br />/usr/local/doc/dhcp/doc/api+protocol<br />/usr/local/doc/dhcp/doc/draft-ietf-dhc-authentication-14.txt<br />/usr/local/doc/dhcp/doc/draft-ietf-dhc-dhcp-dns-12.txt<br />/usr/local/doc/dhcp/doc/draft-ietf-dhc-failover-07.txt<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhclient-script.8<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhclient.8<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhclient.conf.5<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhclient.leases.5<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhcp-eval.5<br />/usr/local/doc/dhcp/doc/ja_JP.eucJP/dhcp-options.5<br />/usr/local/doc/dhcp/doc/rfc1542.txt<br />/usr/local/doc/dhcp/doc/rfc2131.txt<br />/usr/local/doc/dhcp/doc/rfc2132.txt<br />/usr/local/doc/dhcp/doc/rfc2485.txt<br />/usr/local/doc/dhcp/doc/rfc2489.txt<br />/usr/local/doc/dhcp/doc/rfc951.txt<br />/usr/local/doc/dhcp/site.conf<br />/usr/local/include/dhcpctl.h<br />/usr/local/include/isc-dhcp/boolean.h<br />/usr/local/include/isc-dhcp/dst.h<br />/usr/local/include/isc-dhcp/int.h<br />/usr/local/include/isc-dhcp/lang.h<br />/usr/local/include/isc-dhcp/list.h<br />/usr/local/include/isc-dhcp/result.h<br />/usr/local/include/isc-dhcp/types.h<br />/usr/local/include/omapip/alloc.h<br />/usr/local/include/omapip/buffer.h<br />/usr/local/include/omapip/omapip.h<br />/usr/local/lib/libdhcpctl.a<br />/usr/local/lib/libomapi.a<br />/usr/local/man/man1/omshell.1<br />/usr/local/man/man1m/dhclient-script.1m<br />/usr/local/man/man1m/dhclient.1m<br />/usr/local/man/man1m/dhcpd.1m<br />/usr/local/man/man1m/dhcrelay.1m<br />/usr/local/man/man3/dhcpctl.3<br />/usr/local/man/man3/omapi.3<br />/usr/local/man/man3/omshell.3<br />/usr/local/man/man4/dhclient.conf.4<br />/usr/local/man/man4/dhclient.leases.4<br />/usr/local/man/man4/dhcp-eval.4<br />/usr/local/man/man4/dhcp-options.4<br />/usr/local/man/man4/dhcpd.conf.4<br />/usr/local/man/man4/dhcpd.leases.4<br />/usr/local/sbin/dhclient<br />/usr/local/sbin/dhclient-script<br />/usr/local/sbin/dhcpd<br />/usr/local/sbin/dhcrelay<br />[ verifying class <none> ]<br /><br />Installation of <smcdhcp> was successful.<br /><br />root@KHXDNSS1:/opt/SW_Package</smcdhcp></none></smcdhcp></blockquote><blockquote>18ksh# pkginfo |grep dhcp<br />application SMCdhcp dhcp<br /><br />root@KHXDNSS1:/opt/SW_Package</blockquote>裝完,先直接跑跑看囉,這裡我先把舊的設定檔放到 /etc/dhcpd.conf,另外我指定把ip租借表寫到 /var/dhcpd/dhcpd.leases 去:<blockquote>26ksh# /usr/local/sbin/dhcpd -d -cf /etc/dhcpd.conf -lf /var/dhcpd/dhcpd.leases &<br />[1] 3566<br /><br />root@KHXDNSS1:/opt/SW_Package</blockquote>開始執行之後自然有 log 出現:<blockquote>27ksh# Internet Systems Consortium DHCP Server V3.0.5<br />Copyright 2004-2006 Internet Systems Consortium.<br />All rights reserved.<br />For info, please visit http://www.isc.org/sw/dhcp/<br />WARNING: Host declarations are global. They are not limited to the scope you declared them in.<br />Wrote 0 deleted host decls to leases file.<br />Wrote 0 new dynamic host decls to leases file.<br />Wrote 0 leases to leases file.<br />Listening on DLPI/bge0/00:14:4f:a9:83:50/cluster<br />Sending on DLPI/bge0/00:14:4f:a9:83:50/cluster<br />Sending on Socket/fallback/fallback-net<br />27ksh# ps -aef |grep dhcp <br />root 3566 3497 0 15:18:11 pts/3 0:00 /usr/local/sbin/dhcpd -d -cf /etc/dhcpd.conf -lf /var/dhcpd/dhcpd.leases<br /><br />root@KHXDNSS1:/root</blockquote>嗯,看來這次跑起ok了~<br /><br />不過,在 Solaris 10 上已經用 SMF服務命令行管理工具來進行系統服務管理了,但,現在這新開張的 isc-dhcp 倒是還沒納入管理,雖說也可寫個 /etc/rc2.d/S97dhcpd 之類的給他自己跑,不過對管理上總是不合規矩,還是讓他也統一吧。<br /><br />簡單的說就是先寫一個 isc-dhcp 專用的 xml 檔,這裡我們就 vi 一個 isc-dhcp.xml 如下:<blockquote>28ksh# vi /var/svc/manifest/network/isc-dhcp.xml</blockquote><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTEbpGolg3-TQvekoLzNZJGUZA979QnmXtPJoQvJH8LNVWTjMQ87znIKGi6i25KNC3-jkr5nv9w3L4lxe-OYugwR4mpYJM8o2DnQQdwoGzVRk7TTzj6DeIXAtwf9OCVifbsLtVZehVsXMa/s1600-h/isc-dhcp-xml-01.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 180px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTEbpGolg3-TQvekoLzNZJGUZA979QnmXtPJoQvJH8LNVWTjMQ87znIKGi6i25KNC3-jkr5nv9w3L4lxe-OYugwR4mpYJM8o2DnQQdwoGzVRk7TTzj6DeIXAtwf9OCVifbsLtVZehVsXMa/s200/isc-dhcp-xml-01.jpg" alt="" id="BLOGGER_PHOTO_ID_5319752838832969538" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDInhgWXvNbr1kWlFsr2-1DMeQdMtMPantzcTgKUaC7T3nwXR7TAMZXeav_BRAal3hUEMLXWqp_F1JyfDp5gP0bQTA-UJHNKP_fH5wBd9zPNUbwEPnz_WV1qLzMVBxRMcYO7MpyK_YhbOV/s1600-h/isc-dhcp-xml-02.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 180px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDInhgWXvNbr1kWlFsr2-1DMeQdMtMPantzcTgKUaC7T3nwXR7TAMZXeav_BRAal3hUEMLXWqp_F1JyfDp5gP0bQTA-UJHNKP_fH5wBd9zPNUbwEPnz_WV1qLzMVBxRMcYO7MpyK_YhbOV/s200/isc-dhcp-xml-02.jpg" alt="" id="BLOGGER_PHOTO_ID_5319752841988087122" border="0" /></a>接著我們 vi 一個 service 執行用的簡單 shell script 叫做 /usr/sbin/startdhcp.sh,這個在剛剛的 xml 裡面有定義到:<blockquote>30ksh# cat /usr/sbin/startdhcp.sh<br />#!/sbin/sh -x<br /><br />if [ ! -f /usr/local/sbin/dhcpd ]<br />then<br /> echo "/usr/local/sbin/dhcpd does not exist"<br /> exit 1<br />fi<br /><br />/usr/local/sbin/dhcpd -d -cf /etc/dhcpd.conf -lf /var/dhcpd/dhcpd.leases&</blockquote>這裡做完之後記得最後一個步驟就是:<blockquote>32ksh# svccfg import /var/svc/manifest/network/isc-dhcp.xml</blockquote>這樣就可以用 svcs -a 去查詢服務的狀態,用 svcadm 去啟動或是停止 isc-dhcp 的服務了:<blockquote>33ksh# svcs -a|grep dhcp<br />disabled 16:34:28 svc:/network/dhcp-server:default<br />disabled 18:07:07 svc:/network/isc-dhcp:default</blockquote><blockquote>23ksh# svcadm enable isc-dhcp<br /><br />root@KHXDNSS1:/root<br />24ksh# svcs -a|grep dhcp<br />disabled 16:34:28 svc:/network/dhcp-server:default<br />offline 18:10:23 svc:/network/isc-dhcp:default<br /><br />root@KHXDNSS1:/root</blockquote>看起來仍有些問題,那就用 -x 或 -v 的選項來看看問題出在哪吧:<blockquote>37ksh# svcs -x isc-dhcp<br />svc:/network/isc-dhcp:default (DHCP server)<br />State: offline since Wed Apr 01 18:10:23 2009<br />Reason: Service svc:/milestone/multi-user:default<br /> is not running because a method failed.<br />See: http://sun.com/msg/SMF-8000-GE<br />See: in.dhcpd(1M)<br />Impact: 2 dependent services are not running. (Use -v for list.)<br /><br />root@KHXDNSS1:/root</blockquote><blockquote>38ksh# svcs -xv isc-dhcp<br />svc:/network/isc-dhcp:default (DHCP server)<br />State: offline since Wed Apr 01 18:10:23 2009<br />Reason: Service svc:/milestone/multi-user:default<br /> is not running because a method failed.<br />See: http://sun.com/msg/SMF-8000-GE<br />Path: svc:/network/isc-dhcp:default<br /> svc:/milestone/multi-user:default<br />See: man -M /usr/share/man -s 1M in.dhcpd<br />Impact: 2 dependent services are not running:<br /> svc:/milestone/multi-user-server:default<br /> svc:/system/zones:default<br /><br />root@KHXDNSS1:/root</blockquote>看的出來是 svc:/milestone/multi-user:default 的影響,這裡用另一個選項 -d 來看看有沒有 dependent services:<blockquote>39ksh# svcs -v isc-dhcp<br />STATE NSTATE STIME CTID FMRI<br />offline - 18:10:23 - svc:/network/isc-dhcp:default<br /><br />root@KHXDNSS1:/root<br />40ksh# svcs -d isc-dhcp<br />STATE STIME FMRI<br />maintenance 17:04:47 svc:/milestone/multi-user:default<br /><br />root@KHXDNSS1:/root</blockquote>原來 svc:/milestone/multi-user:default 在 maintenance mode 啊,那就先把他給重啟好了:<blockquote>41ksh# svcadm disable svc:/milestone/multi-user:default<br /><br />root@KHXDNSS1:/root<br />42ksh# svcs -d isc-dhcp <br />STATE STIME FMRI<br />disabled 18:19:43 svc:/milestone/multi-user:default<br /><br />root@KHXDNSS1:/root<br />43ksh# svcadm enable svc:/milestone/multi-user:default<br /><br />root@KHXDNSS1:/root<br />44ksh# svcs -d isc-dhcp <br />STATE STIME FMRI<br />online 18:19:55 svc:/milestone/multi-user:default</blockquote>好了,svc:/milestone/multi-user:default 已經正常跑起來了,再查看一下 isc-dhcp 看看:<blockquote>45ksh# svcs -x isc-dhcp <br />svc:/network/isc-dhcp:default (DHCP server)<br />State: maintenance since Wed Apr 01 18:19:57 2009<br />Reason: Restarting too quickly.<br />See: http://sun.com/msg/SMF-8000-L5<br />See: in.dhcpd(1M)<br />See: /var/svc/log/network-isc-dhcp:default.log<br />Impact: This service is not running.<br /><br />root@KHXDNSS1:/root</blockquote>現在沒別的因素在影響了,也重啟一下isc-dhcp 吧:<blockquote>46ksh# ps -aef |grep dhcp<br /><br />root@KHXDNSS1:/root<br />47ksh# svcs -a|grep isc-dhcp<br />maintenance 18:19:57 svc:/network/isc-dhcp:default<br /><br />root@KHXDNSS1:/root<br />48ksh# svcadm disable isc-dhcp<br /><br />root@KHXDNSS1:/root<br />49ksh# svcs -a|grep isc-dhcp<br />disabled 18:21:11 svc:/network/isc-dhcp:default<br /><br />root@KHXDNSS1:/root<br />50ksh# svcadm enable isc-dhcp<br /><br />root@KHXDNSS1:/root<br />51ksh# svcs -a|grep isc-dhcp<br />online 18:21:18 svc:/network/isc-dhcp:default<br /><br />root@KHXDNSS1:/root<br />52ksh# ps -aef |grep dhcp<br />root 1101 1 0 18:21:19 ? 0:00 /usr/local/sbin/dhcpd -d -cf /etc/dhcpd.conf -lf /var/dhcpd/dhcpd.leases<br /><br />root@KHXDNSS1:/root<br />53ksh# svcs -x isc-dhcp<br />svc:/network/isc-dhcp:default (DHCP server)<br />State: online since Wed Apr 01 18:21:18 2009<br />See: in.dhcpd(1M)<br />See: /var/svc/log/network-isc-dhcp:default.log<br />Impact: None.<br /><br />root@KHXDNSS1:/root<br />54ksh# svcs -v isc-dhcp<br />STATE NSTATE STIME CTID FMRI<br />online - 18:21:18 106 svc:/network/isc-dhcp:default<br /><br />root@KHXDNSS1:/root<br />55ksh# svcs -xv isc-dhcp<br />svc:/network/isc-dhcp:default (DHCP server)<br />State: online since Wed Apr 01 18:21:18 2009<br />See: man -M /usr/share/man -s 1M in.dhcpd<br />See: /var/svc/log/network-isc-dhcp:default.log<br />Impact: None.<br /><br />root@KHXDNSS1:/root<br />56ksh# svcs -d isc-dhcp<br />STATE STIME FMRI<br />online 18:19:55 svc:/milestone/multi-user:default<br /><br />root@KHXDNSS1:/root</blockquote>現在一切都正常了,做個測試看看能不能正常派發 IP 吧:<blockquote>57ksh# tail -f /var/svc/log/network-isc-dhcp:default.log<br />All rights reserved.<br />For info, please visit http://www.isc.org/sw/dhcp/<br />WARNING: Host declarations are global. They are not limited to the scope you declared them in.<br />Wrote 0 deleted host decls to leases file.<br />Wrote 0 new dynamic host decls to leases file.<br />Wrote 0 leases to leases file.<br />[ Apr 1 18:21:18 Method "start" exited with status 0 ]<br />Listening on DLPI/bge0/00:14:4f:a9:83:50/cluster<br />Sending on DLPI/bge0/00:14:4f:a9:83:50/cluster<br />Sending on Socket/fallback/fallback-net<br /><br />DHCPDISCOVER from 00:11:3f:c1:5a:ac via 10.71.252.254<br />DHCPOFFER on 10.71.252.13 to 00:11:3f:c1:5a:ac via 10.71.252.254<br />DHCPREQUEST for 10.71.252.13 (10.17.25.22) from 00:11:3f:c1:5a:ac via 10.71.252.254<br />DHCPACK on 10.71.252.13 to 00:11:3f:c1:5a:ac via 10.71.252.254<br /><br />DHCPDISCOVER from 00:11:3f:c1:5a:ae via 10.71.252.254<br />DHCPOFFER on 10.71.252.14 to 00:11:3f:c1:5a:ae via 10.71.252.254<br />DHCPREQUEST for 10.71.252.14 (10.17.25.22) from 00:11:3f:c1:5a:ae via 10.71.252.254<br />DHCPACK on 10.71.252.14 to 00:11:3f:c1:5a:ae via 10.71.252.254<br />^C<br />root@KHXDNSS1:/root</blockquote>OK,看來都沒問題了,搞定收工~</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-53558719459347778152009-03-18T22:27:00.004+08:002009-03-19T14:11:01.734+08:00Many ntpd "Invalid argument" messages in /var/log/messages今天檢查機器時發現 /var/log/messages 裡面有一大堆 ntpd 的 "Invalid argument" 訊息,才想到前兩天把這兩台機器的 IP address 變更網段後,只有重啟 network 的 service,忘了把 ntpd 也重啟,幾天沒連線倒是在 log 檔多了一大票的錯誤訊息,以前這種訊息多半是在 ADSL 撥接 Dynamic IP 的 interface 上發生,因為有時撥接斷線後重新撥接,然後這個 interface 上的 IP address 通常就變動了,然後這個錯誤訊息就會發生囉,最簡單的解決方法就是把 ntpd 重啟一下吧~<br /><span class="fullpost"><br />首先看一下,這就是一直重複出現的訊息:<blockquote>[root@KHCBKPS01 ~]# tail -3 /var/log/messages<br /><span style="color: rgb(0, 0, 0);">Mar 18 10:18:47 KHCBKPS01 ntpd[5137]: sendto(10.15.25.13) (fd=21): Invalid argument</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 10:35:53 KHCBKPS01 ntpd[5137]: sendto(10.15.25.13) (fd=21): Invalid argument</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 10:52:58 KHCBKPS01 ntpd[5137]: sendto(10.15.25.13) (fd=21): Invalid argument</span></blockquote>OK,現在將 ntpd 重啟吧:<blockquote>[root@KHCBKPS01 ~]# service ntpd restart<br />Shutting down ntpd: [ <span style="color: rgb(0, 153, 0);">OK</span> ]<br />ntpd: Synchronizing with time server: [ <span style="color: rgb(0, 153, 0);">OK</span> ]<br />Starting ntpd: [ <span style="color: rgb(0, 153, 0);">OK</span> ]</blockquote>在 restart ntpd 時順便看一下 log 檔:<blockquote>[root@KHCBKPS01 ~]# tail -f /var/log/messages<br /><span style="color: rgb(0, 0, 0);">Mar 18 11:02:35 KHCBKPS01 ntpd[5137]: ntpd exiting on signal 15</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:02:35 KHCBKPS01 ntpdate[9708]: step time server 10.15.25.13 offset 0.039707 sec</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:02:35 KHCBKPS01 ntpd[9710]: ntpd 4.2.2p1@1.1570-o Thu Jan 17 18:14:09 UTC 2008 (1)</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:02:35 KHCBKPS01 ntpd[9711]: precision = 1.000 usec</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:02:35 KHCBKPS01 ntpd[9711]: Listening on interface wildcard, 0.0.0.0#123 Disabled</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:02:35 KHCBKPS01 ntpd[9711]: Listening on interface wildcard, ::#123 Disabled</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:02:35 KHCBKPS01 ntpd[9711]: Listening on interface lo, ::1#123 Enabled</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:02:35 KHCBKPS01 ntpd[9711]: Listening on interface eth1, xxxx::xxx:xxxx:xxxx:xxxx#123 Enabled</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:02:35 KHCBKPS01 ntpd[9711]: Listening on interface lo, 127.0.0.1#123 Enabled</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:02:35 KHCBKPS01 ntpd[9711]: Listening on interface eth1, aaa.bb.ccc.dd#123 Enabled</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:02:35 KHCBKPS01 ntpd[9711]: kernel time sync status 0040</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:02:35 KHCBKPS01 ntpd[9711]: frequency initialized 52.117 PPM from /var/lib/ntp/drift</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:05:48 KHCBKPS01 ntpd[9711]: synchronized to 10.15.25.13, stratum 5</span><br /><span style="color: rgb(0, 0, 0);">Mar 18 11:05:48 KHCBKPS01 ntpd[9711]: kernel time sync disabled 0001</span></blockquote>觀察一段時間,已經和 NTP server 同步了,發現 /var/log/messages 檔也不再出現 "Invalid argument" 訊息囉,既然講到 NTP,那就順便把跟 NTP 相關幾個有用的指令也列一下好了:<br /><blockquote>[root@KHCBKPS01 ~]# ntpq -p<br /><span style="color: rgb(0, 0, 0);">remote refid st t when poll reach delay offset jitter</span><br /><span style="color: rgb(0, 0, 0);">=========================================</span><br /><span style="color: rgb(0, 0, 0);"><span style="font-weight: bold;">*KHCDNSS01</span> LOCAL(0) 5 u 25 64 17 0.212 -0.532 0.347</span></blockquote><blockquote>[root@KHCBKPS01 ~]# ntpq<br />ntpq> association<br /><br /><span style="color: rgb(0, 0, 0);">ind assID status conf reach auth condition last_event cnt</span><br /><span style="color: rgb(0, 0, 0);">=========================================</span><br /><span style="color: rgb(0, 0, 0);"> 1 38739 9624 yes yes none sys.peer </span><span style="font-weight: bold; color: rgb(0, 0, 0);">reachable</span><span style="color: rgb(0, 0, 0);"> 2</span><br />ntpq> quit</blockquote><blockquote>[root@KHCBKPS01 ~]# ntpstat<br /><span style="color: rgb(0, 0, 0); font-weight: bold;">synchronised to NTP server (10.15.25.13) at stratum 6</span><br /><span style="color: rgb(0, 0, 0);">time correct to within 951 ms</span><br /><span style="color: rgb(0, 0, 0);">polling server every 64 s</span></blockquote><blockquote>[root@KHCBKPS01 ~]# ntpdc -c kerninfo<br /><span style="color: rgb(0, 0, 0);">pll offset: -0.00049 s</span><br /><span style="color: rgb(0, 0, 0);">pll frequency: 52.583 ppm</span><br /><span style="color: rgb(0, 0, 0);">maximum error: 0.013646 s</span><br /><span style="color: rgb(0, 0, 0);">estimated error: 0.000188 s</span><br /><span style="color: rgb(0, 0, 0);">status: 0001 pll</span><br /><span style="color: rgb(0, 0, 0);">pll time constant: 2</span><br /><span style="color: rgb(0, 0, 0);">precision: 1e-06 s</span><br /><span style="color: rgb(0, 0, 0);">frequency tolerance: 512 ppm</span></blockquote><blockquote>[root@KHCBKPS01 ~]# ntpdc -c sysinfo<br /><span style="color: rgb(0, 0, 0);">system peer: KHCDNSS01</span><br /><span style="color: rgb(0, 0, 0);">system peer mode: client</span><br /><span style="color: rgb(0, 0, 0);">leap indicator: 00</span><br /><span style="color: rgb(0, 0, 0);">stratum: 6</span><br /><span style="color: rgb(0, 0, 0);">precision: -20</span><br /><span style="color: rgb(0, 0, 0);">root distance: 0.00017 s</span><br /><span style="color: rgb(0, 0, 0);">root dispersion: 0.20419 s</span><br /><span style="color: rgb(0, 0, 0);">reference ID: [10.15.25.13]</span><br /><span style="color: rgb(0, 0, 0);">reference time: cd6b4bfa.65ce0142 Wed, Mar 18 2009 18:31:22.397</span><br /><span style="color: rgb(0, 0, 0);">system flags: auth monitor ntp kernel stats</span><br /><span style="color: rgb(0, 0, 0);">jitter: 0.000214 s</span><br /><span style="color: rgb(0, 0, 0);">stability: 0.000 ppm</span><br /><span style="color: rgb(0, 0, 0);">broadcastdelay: 0.003998 s</span><br /><span style="color: rgb(0, 0, 0);">authdelay: 0.000000 s</span></blockquote></span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-7938348251353703982009-03-10T23:44:00.005+08:002009-09-22T22:40:02.751+08:00RHEL 5 上要如何用 XDMCP 方式 Remote Login?在之前的文章中我們用 X-Manager 示範過怎麼去連上 Linux 機器的 XDMCP session (請參考:<a href="http://tosian.blogspot.com/2008/06/x-manager-linux.html">以 X-Manager 來連 Linux 的圖形介面</a>) ,不過當時的 OS 為 RHEL 4 ES,這次的幾台機器改成 RHEL 5 之後,可不能直接照著同樣的步驟改了,因為那樣是不 work 的啦....<br /><br />其實在 RHEL 5 上只要修改一個檔案就可以達到這個目的,修改 /etc/gdm/custom.conf 文件,在<span id="siteindexid_10"> [xdmcp] 這行下加入了 Enable=1 或者 </span><span id="siteindexid_10">Enable=true</span><span id="siteindexid_10">,如果在這時存檔離開,並重新開機的話,其實已經可以用 </span>X-Manager 來連線了,但卻只能用 SSH 的方式,而用 XDMCP session 則會出現不允許 remote system administrator login 的訊息,這不是我們要的結果,所以在剛剛的 /etc/gdm/custom.conf 文件中,我們這次修改三個段落:<span class="fullpost"><br /><blockquote>[daemon]<br /><span style="color: rgb(255, 0, 0);">RemoteGreeter=/usr/libexec/gdmgreeter</span><br />[security]<br /><span style="color: rgb(255, 0, 0);">AllowRemoteRoot=true</span><br />[xdmcp]<br /><span style="color: rgb(255, 0, 0);">Enable=true</span><br />[gui]<br />[greeter]<br />[chooser]<br />[debug]</blockquote>一樣,修改完後存檔離開並重新開機,然後我們再試一次看看,前面如何建立一個 XDMCP session 的步驟請先參考上一篇 <a href="http://tosian.blogspot.com/2008/06/x-manager-linux.html">以 X-Manager 來連 Linux 的圖形介面</a>,這次有正常看到如本機般的登入畫面了吧:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8AwlRraRw_DQhkgBveghixh6bKfDRSchnOwOOwlu_fQlMGSBV0IKfeM4XRSoXnkUWKdWjhXvJtADUgMI-CC-9iDUjuEV0xjVfyipWrwbgEhpCQVEqu9tNnY2cMwg_tFb5NgSnzgtotbv0/s1600-h/RHEL5-XDMCP-OK-02s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8AwlRraRw_DQhkgBveghixh6bKfDRSchnOwOOwlu_fQlMGSBV0IKfeM4XRSoXnkUWKdWjhXvJtADUgMI-CC-9iDUjuEV0xjVfyipWrwbgEhpCQVEqu9tNnY2cMwg_tFb5NgSnzgtotbv0/s200/RHEL5-XDMCP-OK-02s.jpg" alt="" id="BLOGGER_PHOTO_ID_5314554817298760850" border="0" /></a><br />其實,剛剛修改 /etc/gdm/custom.conf 的選項中的第一行 [daemon] 部分也可以透過修改下面圖片所示的地方來達成:<br />1. 首先到 System > Administration > Login Screen:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaFObwHgBE1i6NKsm3pq4sL02e3pnvbbdQb9ggMHsrE8wCeQtJ7f7saOvItsk7pjVJe5hIG9nIqKEwF9sQk-4wtloTkoeliIVEqy9zjg1RGseOTI_d1ChLBDTJBEq3MOjbBm3EulgvNEz/s1600-h/RHEL5-XDMCP-OK-03s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnaFObwHgBE1i6NKsm3pq4sL02e3pnvbbdQb9ggMHsrE8wCeQtJ7f7saOvItsk7pjVJe5hIG9nIqKEwF9sQk-4wtloTkoeliIVEqy9zjg1RGseOTI_d1ChLBDTJBEq3MOjbBm3EulgvNEz/s200/RHEL5-XDMCP-OK-03s.jpg" alt="" id="BLOGGER_PHOTO_ID_5314554818144209858" border="0" /></a>2. 接著到 Remote tab 的 Style 中下拉式選單選擇 "Same as Local":<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjJo4MGjIsx2oqRqD1Cpd6BZ7qnqfJ2P5L5p29OGRjy2oMuHM5vguBxpoxCye5BroMWo8FUbef2Zrh0uBAQ5GFx248gtFTonXK5rFMOZf5N3wvz5d7MNnUZ30ZycAyjSYJl1MNhiOA19sH/s1600-h/RHEL5-XDMCP-OK-04s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 238px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjJo4MGjIsx2oqRqD1Cpd6BZ7qnqfJ2P5L5p29OGRjy2oMuHM5vguBxpoxCye5BroMWo8FUbef2Zrh0uBAQ5GFx248gtFTonXK5rFMOZf5N3wvz5d7MNnUZ30ZycAyjSYJl1MNhiOA19sH/s200/RHEL5-XDMCP-OK-04s.jpg" alt="" id="BLOGGER_PHOTO_ID_5314554819654732194" border="0" /></a>3. 接著移到 Security tab 的 Security 選項將 "Allow remote system administrator login" 勾選起來吧(這裡便是剛剛修改 /etc/gdm/custom.conf 的 [security] 部分):<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjdGLIsmbMJCeq4yConnNTGcw8l7OZPj8hEYHFRlJyxFt4jDzb_BS-6bD-QpfJg0jygiY2xFS2_P99vxj5IhUAVwrD2aT88tVgpbe8WwUZlGJToA8Tp1H52-8KD0sA6siJQ9T7JX1CoWFo/s1600-h/RHEL5-XDMCP-OK-05s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 150px; height: 200px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjdGLIsmbMJCeq4yConnNTGcw8l7OZPj8hEYHFRlJyxFt4jDzb_BS-6bD-QpfJg0jygiY2xFS2_P99vxj5IhUAVwrD2aT88tVgpbe8WwUZlGJToA8Tp1H52-8KD0sA6siJQ9T7JX1CoWFo/s200/RHEL5-XDMCP-OK-05s.jpg" alt="" id="BLOGGER_PHOTO_ID_5314556026221851682" border="0" /></a>4. 然後就是重新開機之後便可用 X-Manager 以 XDMCP session 連進去囉...搞定,收工~</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com2tag:blogger.com,1999:blog-5287674613622206536.post-81002704027836833362009-03-05T22:27:00.003+08:002009-03-19T23:42:15.185+08:00要怎麼在 RHEL 5 上面架 DNS server 啊?最近裝的幾台機器都是 RHEL5 的,而 RHEL5 跟之前用的 RHEL4 在架設 DNS Server 的時候,差異還真是不小啊,預設的 Zone files 和 Configuration file 呢?阿怎麼都找不到啊?該不是還要我自己一個檔一個檔的產生吧?當然不會啦,原來是一般安裝沒有裝到 system-config-bind, bind 及 bind-chroot 套件罷了,好吧,那就一步一步來吧~<br /><br />步驟1. 先安裝一下相關的套件囉:<br />1-1. 安裝 system-config-bind 套件來產生 named.conf 範例檔:<blockquote>[root@KHCDNSS02 ~]# yum install system-config-bind</blockquote>1-2. 安裝 bind 及 bind-chroot 套件<blockquote>[root@KHCDNSS02 ~]# yum groupinstall "DNS Name Server"</blockquote><span class="fullpost"><br />步驟2. 再來就是複製相關的檔案到 Bind Chroot 目錄 /var/named/chroot/ 下:<br />2-1. 先複製 named.conf 範例檔:<blockquote>[root@KHCDNSS02 ~]# cp -p /usr/share/system-config-bind/profiles/default/named.conf /var/named/chroot/etc/</blockquote>2-2. 複製相關 zone files 範例檔至 bind chroot 目錄下:<blockquote>[root@KHCDNSS02 ~]# cp -p /usr/share/system-config-bind/profiles/default/named/* /var/named/chroot/var/named/</blockquote>2-3. 複製 bind root 檔至 bind chroot 目錄下:<blockquote>[root@KHCDNSS02 ~]# cp -p /usr/share/doc/bind-9.3.3/sample/var/named/named.root /var/named/chroot/var/named/</blockquote>2-4. 把 owner 更改為 named:<blockquote>[root@KHCDNSS02 ~]# chown -R named /var/named/chroot</blockquote>2-5. 最後再把 named.conf 建立連結到 /etc 下:<blockquote>[root@KHCDNSS02 ~]# ln -s /var/named/chroot/etc/named.conf /etc/named.conf</blockquote>步驟3. 再來就是開始編輯 named.conf 檔的內容了:<blockquote>[root@KHCDNSS02 ~]#vi /var/named/chroot/etc/named.conf</blockquote>步驟4. 最後是新增需要用的網域正反解的 zone files 囉~<br /><br />當然,如果也可以用圖形化的介面來配置 DNS 啦,點擊面版上的 System > Administration > Server Settings > Domain Name System 如下圖所示:<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLe3grNF_M298S0xbtruuXFjXnP7iIqMTjiWiyKCciw82Fs5CKnV94rfy1rNJwETaD9iCh108ldTCmbdPElh_Gd_ItBq8PFpS9b0oT17CIH2PQR_T2QGUoyZlai6xgDXkDnNO1kOSk9U_A/s1600-h/RHEL5-DNS-001s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLe3grNF_M298S0xbtruuXFjXnP7iIqMTjiWiyKCciw82Fs5CKnV94rfy1rNJwETaD9iCh108ldTCmbdPElh_Gd_ItBq8PFpS9b0oT17CIH2PQR_T2QGUoyZlai6xgDXkDnNO1kOSk9U_A/s200/RHEL5-DNS-001s.jpg" alt="" id="BLOGGER_PHOTO_ID_5314915099814862658" border="0" /></a>進去之後便可以看到圖形化的配置畫面囉,剩下的就是慢慢設定了:<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLPqiW95bQQFjsBaUPDlIkt1QE5WuifFjiMXS8zTDGbJhZV2MK4hFDy0msVtPk7R9agGHhZWvghiP_wir9poT3NclICtxUYcyUJq2sVdlPEoiQiOhGmLjJ36AsHgUjGprBdSRSvm4Ybh_O/s1600-h/RHEL5-DNS-002s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLPqiW95bQQFjsBaUPDlIkt1QE5WuifFjiMXS8zTDGbJhZV2MK4hFDy0msVtPk7R9agGHhZWvghiP_wir9poT3NclICtxUYcyUJq2sVdlPEoiQiOhGmLjJ36AsHgUjGprBdSRSvm4Ybh_O/s200/RHEL5-DNS-002s.jpg" alt="" id="BLOGGER_PHOTO_ID_5314915097024891394" border="0" /></a><br />註解一下:為了不要每次切換到 zone files 所在的區域時都要敲一大串字,所以決定偷懶設定個 alias 如下:1. 編輯一下 ~/.bashrc 檔:<blockquote>[root@KHCDNSS02 chroot]# vi ~/.bashrc</blockquote>2. 加入下面這一行:<blockquote>alias cdn='cd /var/named/chroot/var/named/; echo -n "Current PATH : ";pwd'</blockquote>3. 登出再登入一次,測試一下 cdn 這個指令:<blockquote>[root@KHCDNSS02 chroot]# cdn<br />Current PATH : /var/named/chroot/var/named<br />[root@KHCDNSS02 named]# ls -al<br /><span style="color: rgb(0, 0, 0);">total 64</span><br /><span style="color: rgb(0, 0, 0);">drwxr-x--- 4 named named 4096 Mar 4 22:20 .</span><br /><span style="color: rgb(0, 0, 0);">drwxr-x--- 6 named named 4096 Feb 19 05:20 ..</span><br /><span style="color: rgb(0, 0, 0);">drwxrwx--- 2 named named 4096 Aug 26 2004 data</span><br /><span style="color: rgb(0, 0, 0);">-rw-r--r-- 1 named root 208 Mar 4 22:20 localdomain.zone</span><br /><span style="color: rgb(0, 0, 0);">-rw-r--r-- 1 named root 195 Mar 4 22:20 localhost.zone</span><br /><span style="color: rgb(0, 0, 0);">-rw-r--r-- 1 named root 427 Mar 4 22:20 named.broadcast</span><br /><span style="color: rgb(0, 0, 0);">-rw-r--r-- 1 named root 1266 Mar 4 22:20 named.conf</span><br /><span style="color: rgb(0, 0, 0);">-rw-r--r-- 1 named root 424 Mar 4 22:20 named.ip6.local</span><br /><span style="color: rgb(0, 0, 0);">-rw-r--r-- 1 named root 426 Mar 4 22:20 named.local</span><br /><span style="color: rgb(0, 0, 0);">-rw-r--r-- 1 named root 1892 Mar 4 22:13 named.root</span><br /><span style="color: rgb(0, 0, 0);">-rw-r--r-- 1 named root 427 Mar 4 22:20 named.zero</span><br /><span style="color: rgb(0, 0, 0);">drwxrwx--- 2 named named 4096 Jul 27 2004 slaves</span><br />[root@KHCDNSS02 named]#</blockquote>這樣很方便吧~</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-49986269334783206972009-02-10T22:56:00.006+08:002009-02-10T23:26:39.868+08:00忘記 Linux Server 上 root 用戶的密碼怎麼辦?今天在機房接到同事來電問說某台機器 root 的 password 是什麼?啥?沒人記得喔?啊ㄌㄟ,真是糟糕,猜一下常用的密碼,發現依然登入不了,這可怎麼辦ㄌㄟ?<br /><br />其實當忘記了 Linux Server 上的 root 密碼時,可以用以下面的方法來修復:<br />基本上這個方法適用於 GRUB,而 LILO 很久沒用過了,如果有人記得可以幫忙留個意見吧...<br /><span class="fullpost"><br />1. 首先就是重啟你那已經忘記密碼的機器,等到開機後,先停留在 GRUB 開機選單的畫面,移動到 linux 開機的選項上,按 e 編輯,我裝 RH EL5,所以選單像下面這樣:<blockquote><span style="color: rgb(0, 0, 0);">GNU GRUB version 0.97C</span><br />Red Hat Enterprise Linux Server (2.6.18-92.el5) << 移到這裡按 e <br /><span style="color: rgb(0, 0, 0);">Other</span></blockquote>2. 等出下一頁選單,移動到 kernel 選項上,再按一次 e 編輯,像下面這樣:<blockquote><span style="color: rgb(0, 0, 0);">root (hd0,2)</span><br />kernel /vmlinuz-2... ro root=/dev/VolGroup00/LogVol00 rhgb quiet << 按 e<br /><span style="color: rgb(0, 0, 0);">initrd /initrd-2.6.18-92.el5.img</span></blockquote>3. 等跳出下面一頁選單時,在 quiet 的後面先空一格,再加上 single,然後按 enter:<blockquote><span style="color: rgb(0, 0, 0);">LogVol00 rhgb quiet</span> single</blockquote>4. 此時會回到上一頁的 GRUB 開機選單,按 b 即可 boot 到 single user mode 囉。<br /><br />5. 進入單人模式後,用 <span style="color: rgb(0, 0, 153);">passwd</span> 的指令,即可更改 root 的密碼,然後重新開機就好囉,報告完畢~</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-28140016401013475192008-12-24T23:16:00.002+08:002008-12-25T00:27:07.108+08:00Linux Server /var/spool/clientmqueue 目錄下產生大量文件的解決方法今天在檢查兩台 AAA server 時才發現居然 / 已經到了 94% 了,SNMP server 上滿滿都是從這兩台機器上送來的 Alarm Traps;這可真是糟糕,趕快查一下到底是啥東西佔了這麼多硬碟空間...<blockquote>[root@KHXAAAS2 ~]# df -h;<br /><span style="color: rgb(102, 102, 102);">Filesystem Size Used Avail Use% Mounted on</span><br />/dev/sda2 4.0G 3.6G 237M <span style="font-weight: bold;"> 94% /</span><br /><span style="color: rgb(102, 102, 102);">/dev/sda1 1012M 40M 921M 5% /boot<br />none 4.0G 0 4.0G 0% /dev/shm<br />/dev/sda3 4.0G 41M 3.7G 2% /inactive_root<br />/dev/sda6 21G 78M 19G 1% /others<br />/NFSDB/radacct 537G 384M 509G 1% /opt/AAA-6.1.8-20081202/run/radacct<br />KHXDB:/DB/accounting 537G 384M 509G 1% /NFSDB/radacct</span></blockquote><span class="fullpost">首先到 / 下面用 du -sh * 來查詢一下目前的 / 的使用狀態:<blockquote>[root@KHXAAAS2 ~]# cd /<br />[root@KHXAAAS2 /]# du -sh *<br /><span style="color: rgb(102, 102, 102);">5.6M bin<br />6.4M boot<br />216K dev<br />44M etc<br />32K home<br />20K inactive_root<br />8.0K initrd<br />97M lib<br />16K lost+found<br />16K media<br />8.0K misc<br />8.0K mnt<br />247M NFSDB</span><br /><span style="font-weight: bold;">1.3G opt</span><br /><span style="color: rgb(102, 102, 102);">2.0M others<br />du: cannot read directory `proc/857/task': No such file or directory<br />du: cannot read directory `proc/857/fd': No such file or directory<br />916M proc<br />2.0M root<br />176K rpm<br />18M sbin<br />0 selinux<br />8.0K srv<br />0 sys<br />336K tmp<br />2.0G usr</span><br /><span style="font-weight: bold;">1.5G var</span></blockquote>很明顯的,/opt 跟 /var 佔了很大的空間,/opt 我安裝了幾個大的 AAA service 在裡面,先慢點處理,這個 /var 佔據了 1.5G 實在有點奇怪了,繼續往下查...<blockquote>[root@KHXAAAS2 /]# cd /var<br />[root@KHXAAAS2 var]# du -sh *<br /><span style="color: rgb(102, 102, 102);">12K account<br />2.2M cache<br />16K crash<br />28K db<br />32K empty<br />16K ftp<br />300K gdm<br />41M lib<br />8.0K local<br />132K lock<br />42M log<br />4.0K mail<br />24K net-snmp<br />8.0K nis<br />8.0K opt<br />8.0K preserve<br />276K run</span><br />1.5G spool<br /><span style="color: rgb(102, 102, 102);">8.0K tmp<br />8.0K tux<br />2.1M www<br />24K yp</span></blockquote>看來 spool 的目錄下有問題,繼續...<blockquote>[root@KHXAAAS2 var]# cd spool/<br />[root@KHXAAAS2 spool]# ls -al<br /><span style="color: rgb(102, 102, 102);">total 6404<br />drwxr-xr-x 13 root root 4096 Jun 12 2008 .<br />drwxr-xr-x 23 root root 4096 Jun 12 2008 ..<br />drwxr-xr-x 2 root root 4096 Jun 12 2008 anacron<br />drwx------ 3 daemon daemon 4096 Jun 12 2008 at</span><br />drwxrwx--- 2 smmsp smmsp 6443008 Dec 24 12:53 clientmqueue<br /><span style="color: rgb(102, 102, 102);">drwx------ 2 root root 4096 Dec 24 11:49 cron<br />drwx--x--- 3 root sys 4096 Jun 12 2008 cups<br />drwxr-xr-x 2 root root 4096 Aug 13 2004 lpd<br />drwxrwxr-x 2 root mail 4096 Aug 13 2004 mail<br />drwx------ 2 root mail 4096 Jan 23 2007 mqueue<br />drwxr-xr-x 2 rpm rpm 4096 Aug 2 2007 repackage<br />drwxr-xr-x 2 root root 4096 Sep 5 2007 up2date<br />drwxrwxrwt 2 root root 4096 Oct 5 2004 vbox</span><br />[root@KHXAAAS2 spool]# du -sh *<br /><span style="color: rgb(102, 102, 102);">32K anacron<br />20K at</span><br />1.5G clientmqueue<br /><span style="color: rgb(102, 102, 102);">16K cron<br />16K cups<br />8.0K lpd<br />8.0K mail<br />8.0K mqueue<br />8.0K repackage<br />8.0K up2date<br />8.0K vbox</span></blockquote><blockquote>[root@KHXAAAS2 spool]# cd clientmqueue/<br />[root@KHXAAAS2 clientmqueue]# du -sh *<br /><span style="color: rgb(255, 0, 0);">-bash: /usr/bin/du: Argument list too long</span></blockquote>看起來,這個 /var/spool/clientmqueue 的目錄下的東西太多了,連 du 的指令都下不了,我們用 ls 來看一下好了...<blockquote>[root@KHXAAAS2 clientmqueue]# ls<br /><span style="color: rgb(102, 102, 102);">dfm5C422X2007728 dfmA8CE2sU014445 dfmAQIX3He008540 dfmBF1O3tM024344 qfm9U9325M025071 qfmAHFp3o7008591 qfmB5MG2ik015455 dfm5D421x8008729 dfmA8CF2ex014725 dfmAQIY3JM008766 dfmBF1P2CK024575 qfm9U942p8025326 qfmAHFq22Z008848 qfmB5MH2dU015683 dfm5D4222i021334 dfmA8Cf2Oe022040 dfmAQIZ2lS008993 dfmBF1p2T6030541 qfm9U953gs025583 qfmAHFQ2RH002131 qfmB5Mh2Zw021688 dfm5DK23Jv003790 dfmA8CG2TR015000 dfmAQJ02LM014708 dfmBF1q22Z030769 qfm9U962PF025835 qfmAHFR22P002445 qfmB5Mi3jw021934 dfm5EK22jL009067 dfmA8Cg3uP022313 dfmAQJ13b6014942 dfmBF1Q2Tk024802 qfm9U972GP026084 qfmAHFr2PM009102 qfmB5MI3sc015914 dfm5OK314c006681 dfmA8Ch291022592 dfmAQJ23VT015171 dfmBF1r3jO030995 qfm9U983lb026334 qfmAHFs2XF009366 qfmB5MJ2hf016139 dfm5PK323O007690 dfmA8CH2so015312 dfmAQJ32Tu015402 dfmBF1R3xM025033 qfm9U992mX026621 qfmAHFS3sD002719 qfmB5Mj3Ia022161 dfm5QK32Ur008747 dfmA8Ci25T022861 dfmAQJ420C015631 dfmBF1s2LO031226 qfm9U9A20p026912 qfmAHFT2AP002970 qfmB5MK2P7016366 dfm5RK335g022157 dfmA8CI2UK015587 dfmAQJ52GN015858 dfmBF1S3st025260 qfm9U9a31w001040 qfmAHFt2ha009618 qfmB5Mk2SN022392 dfm5SK32xd023117 dfmA8Cj23T023137 dfmAQJ62Dm016089 dfmBF1T2Qt025491 qfm9U9B2aF027174 qfmAHFU2RT003229 qfmB5Ml2Ab022619 dfm5UK31gY007333 dfmA8CJ34Q015865 dfmAQJ72B4016316 dfmBF1t2RL031453 qfm9U9b2dR001296 qfmAHFu3dG009875 qfmB5ML2kM016594 dfm61K328o008143 dfmA8Ck20E023413 dfmAQJ82fO016547 dfmBF1U250025718 qfm9U9c22o001541 qfmAHFv30Z010126 qfmB5Mm2Gk022851 dfm62K32BT010023 dfmA8CK3r4016134 dfmAQJ93WG016775 dfmBF1u39e031684 qfm9U9C29A027419 qfmAHFV3pd003482 qfmB5MM2ZI016827 dfm63K32ia011151 dfmA8CL2dQ016417 dfmAQJa2On023080 dfmBF1v2Gh031911 qfm9U9d2Wa001793 qfmAHFW2J4003739 qfmB5Mn2fg023079 dfm64K32E5011955 dfmA8Cl3SM023691 dfmAQJA3DY017002 dfmBF1V2s6025962 qfm9U9D3p9027670 qfmAHFw2XB010386 qfmB5MN3Wi017052 dfm65K31uZ012771 dfmA8CM27o016689 dfmAQJB2YJ017245 dfmBF1w2pd032138 qfm9U9E2uC027923 qfmAHFX2Ep003993 qfmB5Mo3oH023305 dfm67K31mg029851 dfmA8Cm39g023966 dfmAQJb3pV023307 dfmBF1W2tF026190 qfm9U9e2Xh002049 qfmAHFx2kM010637 qfmB5MO3oS017280 dfm68K310Y030656 dfmA8CN2BY016971 dfmAQJC2qs017472 dfmBF1X3iF026417 qfm9U9F2kZ028177 qfmAHFY2Zm004250 qfmB5MP2jh017506</span> ^C</blockquote>看起來真的是太多了,只好先用 Ctrl+C 中斷一下,不過幸好這些檔案產生的原因都是由於有某個用戶 (通常是 root 啦)新增了某個 cron job,而 cron job 裡面程序有輸出內容,這些內容會以 mail 的方式發給剛剛建立 cron job 的用戶,假如這時 sendmail 沒有啟動便會產生這些 queue 檔,基本上並不是什麼重要的檔案,一句話,殺無赦就對了~<br /><br />不過由於這個目錄下的檔案太多,用 rm 的指令通常會得到像剛剛 du 所看到的錯誤訊息:<blockquote>-bash: /bin/rm: Argument list too long</blockquote>看來直接用 rm 是殺不掉了,沒關係,那就用下面的指令吧:<blockquote>[root@KHXAAAS2 clientmqueue]# pwd<br />/var/spool/clientmqueue<br />[root@KHXAAAS2 clientmqueue]# ls | xargs rm -f<br />[root@KHXAAAS2 clientmqueue]# ls -al<br /><span style="color: rgb(102, 102, 102);">total 6316<br />drwxrwx--- 2 smmsp smmsp 6443008 Dec 24 13:18 .<br />drwxr-xr-x 13 root root 4096 Jun 12 2008 ..</span></blockquote>看吧,用了 ls | xargs rm -f 果然輕鬆的就殺掉這一堆的檔案囉,在檢查一下硬碟的使用狀況:<blockquote>[root@KHXAAAS2 clientmqueue]# df -h<br /><span style="color: rgb(102, 102, 102);">Filesystem Size Used Avail Use% Mounted on</span><br />/dev/sda2 4.0G 2.9G 956M <span style="font-weight: bold;">76% /</span><br /><span style="color: rgb(102, 102, 102);">/dev/sda1 1012M 40M 921M 5% /boot<br />none 4.0G 0 4.0G 0% /dev/shm<br />/dev/sda3 4.0G 41M 3.7G 2% /inactive_root<br />/dev/sda6 21G 78M 19G 1% /others<br />/NFSDB/radacct 537G 384M 509G 1% /opt/AAA-6.1.8-20081202/run/radacct<br />KHXDB:/DB/accounting 537G 384M 509G 1% /NFSDB/radacct</span><br />[root@KHXAAAS2 clientmqueue]#</blockquote>看吧,果然清空之後,使用空間多了很多...不過這只是治標,不是治本,重點是要記得去把那個兇手,也就是那個 cron job 的最後加上一段 > /dev/null 2>&1,例如:<blockquote>[root@KHXAAAS2 ~]# crontab -l<br />* * * * * /etc/init.d/snmp_cron.sh <span style="font-weight: bold;">> /dev/null 2>&1</span></blockquote>這樣就可以避免問題再次重複發生囉...OK,報告完畢~</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-28404480351099243212008-12-01T20:58:00.001+08:002008-12-13T21:28:21.070+08:00夜空中的笑臉<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFe4CuFp1MaXoRXYU1_s9-ZoqqPKVXDRIUMbfUVKODXjzCLVrVQPzKeQ9obkKCyEqCL-DRdftw15UzPTOuDK1w8HFgWjWNvx_XydoMKG7mCom59IJi__SD1esBwaG5F3MRgoQtJWCnKM67/s1600-h/971201.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFe4CuFp1MaXoRXYU1_s9-ZoqqPKVXDRIUMbfUVKODXjzCLVrVQPzKeQ9obkKCyEqCL-DRdftw15UzPTOuDK1w8HFgWjWNvx_XydoMKG7mCom59IJi__SD1esBwaG5F3MRgoQtJWCnKM67/s200/971201.jpg" alt="" id="BLOGGER_PHOTO_ID_5279261663157261378" border="0" /></a><br />今天在客戶這邊上完課要回飯店時,一抬頭突然發現夜空中的月亮似乎有些不一樣,怎麼好像一張笑臉似的,感覺月亮上方的兩顆星星超亮的說,趕緊叫住 Jason 與小廖,拿出手機來拍,不過拍出的效果實在@#$%....<br /><br />於是乾脆到車上拿車相機來拍,回到飯店將照片寄給洋蔥媽咪看,才發現原來大家都看到了啊,上網查詢了一下,原來今天是初四的眉月,月亮如上揚的嘴角,加上月亮上方的那兩顆星星是金星與木星呢,難怪我覺得怎麼今天的星星這麼亮...據說,這種天文景象,下次要到 2036 年才會再出現呢,雖然和洋蔥媽咪及小洋蔥分處在高雄與台北,但我們仍能一起看到同樣的星空,我想,應該也是一種幸福吧~洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com1tag:blogger.com,1999:blog-5287674613622206536.post-28624583856908663942008-10-22T18:09:00.001+08:002008-10-22T22:28:48.319+08:00如何在 WindowsXP 上叫出 NetMeeting ㄌㄟ?同事突然問說 WindowsXP 上怎麼沒有 NetMeeting ㄌㄟ?要怎麼把他叫出來啊?<br />呵呵,其實,WindowsXP 上面還是有附 NetMeeting 的,只是沒有捷徑罷了,他的路徑就在 C:\Program Files\NetMeeting\conf.exe 啦,直接執行或拉個捷徑出來就行了,當然也可以用下面的方式叫出來:<br />1. 由左下角的[開始]功能表,選 [執行]:<span class="fullpost"><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxd7rayWz4JsyuyqgiftKkZyvtm-dmORECGKyKYEltaji-5W9BomcTo-s3jeQG00-01EFGC0mdYRDSMPfGIScZxTusPlInQkk1iyUIIiUcqVhspWpdKO_kHa1eOgJmQ8qkdi-yCrv1fLjw/s1600-h/Start_NetMeeting-001s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxd7rayWz4JsyuyqgiftKkZyvtm-dmORECGKyKYEltaji-5W9BomcTo-s3jeQG00-01EFGC0mdYRDSMPfGIScZxTusPlInQkk1iyUIIiUcqVhspWpdKO_kHa1eOgJmQ8qkdi-yCrv1fLjw/s320/Start_NetMeeting-001s.jpg" alt="" id="BLOGGER_PHOTO_ID_5259891401678964898" border="0" /></a>2. 敲入conf,按下碓定執行:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv_tdVopXuVw8DWFzaqQVNv0pKaZPNLjJKvZAP8FgQYOGS9UvNUQGUQhlRl2p3CtmJCHghAq3ifghdyjEYQQVysk1ca8-bVFH6ZCwvKJRRankLYCupU1yDag4IPRy13zlms1-jjGimOpi6/s1600-h/Start_NetMeeting-002s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv_tdVopXuVw8DWFzaqQVNv0pKaZPNLjJKvZAP8FgQYOGS9UvNUQGUQhlRl2p3CtmJCHghAq3ifghdyjEYQQVysk1ca8-bVFH6ZCwvKJRRankLYCupU1yDag4IPRy13zlms1-jjGimOpi6/s320/Start_NetMeeting-002s.jpg" alt="" id="BLOGGER_PHOTO_ID_5259891400154750258" border="0" /></a>3. NetMeeting 打開囉...<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3XIf_lbZ7Qi15xqeWa6sS1tBpd3ilmlb7EWo3oWFmhQz4as6Blmk5betI3yrVeejn07T-1WTN64vWvOCoVRqUym2jQmlJjsDiW-dDO3PTQNyBWnfrZUKa4ku99CkcjFfpZZztkIZFEq6z/s1600-h/Start_NetMeeting-003s.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3XIf_lbZ7Qi15xqeWa6sS1tBpd3ilmlb7EWo3oWFmhQz4as6Blmk5betI3yrVeejn07T-1WTN64vWvOCoVRqUym2jQmlJjsDiW-dDO3PTQNyBWnfrZUKa4ku99CkcjFfpZZztkIZFEq6z/s320/Start_NetMeeting-003s.jpg" alt="" id="BLOGGER_PHOTO_ID_5259891404552747106" border="0" /></a><br />不過我順便在另一台 Windows Vista 上試了一下,發現原來 Vista 上已經將 NetMeeting 拿掉,改成 Windows 會議室了;以下是 Microsoft 官方網站上的說明:<blockquote>Microsoft Windows XP 是 Windows 的最後一個用戶端版本,其中包含 NetMeeting。 NetMeeting 並未隨附 Windows Vista。<br /><br />為了在這種情況下支援目前的共同作業工作階段,Hotfix 是可用可讓您在 Windows Vista 架構的電腦上安裝 NetMeeting。此 NetMeeting 版本被作為轉換工具,可以協助支援共同作業工作階段當您在您的環境中使用 Windows XP 電腦搭配 Windows Vista 架構的電腦。</blockquote><br />參考資料:<br /><a href="http://support.microsoft.com/kb/KB927853">Microsoft 技術支援服務:Hotfix 是可以在執行 Windows Vista 的電腦上安裝 NetMeeting 3.02</a></span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-51530943755086295502008-10-20T20:17:00.006+08:002008-10-22T15:58:12.151+08:00SNMP on LINUX server 之 exec 自訂訊息實作之前我們講到用 snmpd 裡面的 proc + 服務名稱來監視特定的服務狀態,但這只對部分的服務有效,例如 ntpd, snmpd, nfsd, httpd...等等,我不太確定他的抓取方式,但似乎,用 ps 去看如果 process name 沒出現在最前面的,似乎 snmpd 就 monitor 不到,這種狀況像 Tomcat 就會出現。舉例來說,我有個服務是用到 java 去帶起來的,如下面所示:<blockquote>[root@KHXAAAS1 ~]# ps -aef|grep AAA|grep -v AAA<br />root 19475 1 0 09:13 ? 00:00:11 <span style="color: rgb(102, 102, 102);">java -Xmx512m -Daaa.base=/opt/AAA -Daaa.run=/opt/AAA/run -Daaa.bin=/opt/AAA/bin -Daaa.lib=/opt/AAA/lib -Daaa.jni=/opt/AAA/jni com.lucent.aaa.gui.ServerManagementTool -debug info</span><br />root 21631 1 0 Sep12 ? 00:01:39 <span style="color: rgb(102, 102, 102);">java -Daaa.base=/opt/AAA -Daaa.run=/opt/AAA/run -Daaa.bin=/opt/AAA/bin -Daaa.lib=/opt/AAA/lib -Daaa.jni=/opt/AAA/jni com.lucent.aaa.ConfigServer</span><br />root 26302 1 0 09:41 pts/0 00:00:08 <span style="color: rgb(102, 102, 102);">java -Xmx512m -server -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Dsun.rmi.dgc.server.gcInterval=0x7FFFFFFFFFFFFFFE -Dsun.rmi.dgc.client.gcInterval=0x7FFFFFFFFFFFFFFE -Daaa.base=/opt/AAA -Daaa.run=/opt/AAA/run -Daaa.bin=/opt/AAA/bin -Daaa.lib=/opt/AAA/lib -Daaa.jni=/opt/AAA/jni com.lucent.aaa.PolicyServer -debug debug</span></blockquote><span class="fullpost">但用 snmpd 去監控 proc AAA 的話,一定看不到東西,(雖然可以用 proc Java 的方式來 monitor,但畢竟用 Java 帶起來的服務越來越多,這樣並不容易區分,容易造成誤判。)這個時候就可以用一個變通的方式來 monitor 我們要的服務狀態,那就是 exec 這個 snmpd.conf 裡的 option,他的用法是:<blockquote><span style="color: rgb(0, 0, 0); font-weight: bold;">Usage:</span><br />exec MIBOID EXEC-COMMAND</blockquote>我們直接實作一下好了。<br /><br />首先假設我們有一個如前面說的服務用 proc AAA 方式加到 /etc/snmp/snmpd.conf 裡面卻無法正常 monitor 到服務的狀態時,而且假設,我們有一個簡單的判斷服務正常啟動的方法時(通常是像我們這裡示範的這種,灌了一個某某廠商的軟體時,想改變他的啟動方式或參數又無從改起時),如下所示,今天的實作目標有兩台 AAA server,上面有兩個主要的 process 要檢查狀態,<br />其中一個是 Policy server 另一個是 Configuration server,為了待會兒的測試,我先將其中第一台 KHXAAAS1 的 Policy server 先停掉,第二台 KHXAAAS2 的服務全部都讓他正常帶起來:<blockquote>[root@KHXAAAS1 ~]# /opt/AAA/bin/aaa list all<br /><span style="color: rgb(255, 0, 0);">The server could not be reached: Connection refused</span><br /><span style="color: rgb(255, 0, 0);">8950 AAA Policy Server: not responding</span><br />101 Server active<br />8950 AAA Configuration Server: responding<br />[root@KHXAAAS2 ~]# /opt/AAA/bin/aaa list all<br />101 Server active<br />8950 AAA Policy Server: responding<br />101 Server active<br />8950 AAA Configuration Server: responding</blockquote>說簡單點,/etc/snmpd/snmpd.conf 裡的 exec 這個 option 其實就是宣告一個 OID,然後當 SNMP server query 到這個 OID 時,就去執行指定的 shell scrpit 然後將直塞回剛剛指定的 OID.101.x 裡面去。接下來我們直接做一個簡單示範:<br /><br />首先我們先 vi /etc/snmp/snmpd.conf(或用下面的 echo 指令也行)在裡面新加上一行如下的格式:<blockquote>[root@KHXAAAS1 ~]# echo "exec .1.3.6.1.4.1.2021.51 ApplicationStatusQury /bin/sh /bin/ASQ.sh" >> /etc/snmp/snmpd.conf</blockquote>檢查一下確實寫進去了:<blockquote>[root@KHXAAAS1 ~]# grep ApplicationStatusQury /etc/snmp/snmpd.conf<br />exec .1.3.6.1.4.1.2021.51 ApplicationStatusQury /bin/sh /bin/ASQ.sh</blockquote>接著我們編輯一個簡單的 shell script 叫 /bin/ASQ-AAA.sh 用來檢查 Policy server 和 Configuration server 的狀態,寫到 /opt/.ASQ-AAA-Policy.prState 與 /opt/.ASQ-AAA-Config.prState 裡面(這裡我先定義一下,如果這個file裡面的值是 responding 代表 服務正常,如果是 not responding 的話,代表服務掛點了,當然也可以用 wc -l 去讓這個 fiie 帶的值為 0 或 1 ):<blockquote>[root@KHXAAAS1 ~]# cat /bin/ASQ-AAA.sh<br /><span style="color: rgb(102, 102, 102);">#!/bin/sh</span><br />/opt/AAA/bin/aaa list policy > /opt/.ASQ-AAA-Policy.prState1<br />cat /opt/.ASQ-AAA-Policy.prState1|cut -d ":" -f2 > /opt/.ASQ-AAA-Policy.prState2<br /><span style="color: rgb(102, 102, 102);">#grep 'not responding' /opt/.ASQ-AAA-Policy.prState1|wc -l > /opt/.ASQ-AAA-Policy.prState2</span><br /><br />/opt/AAA/bin/aaa list config > /opt/.ASQ-AAA-Config.prState1<br />cat /opt/.ASQ-AAA-Config.prState1|cut -d ":" -f2 > /opt/.ASQ-AAA-Config.prState2<br /><span style="color: rgb(102, 102, 102);">#grep 'not responding' /opt/.ASQ-AAA-Config.prState1|wc -l > /opt/.ASQ-AAA-Config.prState2</span><br />exit<br /></blockquote>然後我們再寫個 /bin/ASQ-AAA.sh 用來檢查 /opt/.ASQ-AAA-Policy.prState2 與 /opt/.ASQ-AAA-Config.prState2 裡面的值,分別寫進 1.3.6.1.4.1.2021.51.101.1 與 1.3.6.1.4.1.2021.51.101.2 這兩個 OID 去,如果你在剛剛的 schipt 裡面有 3 個 output,那就會還有 1.3.6.1.4.1.2021.51.101.3 這個 OID,依此類推...<blockquote>[root@KHXAAAS1 ~]# cat /bin/ASQ.sh<br /><span style="color: rgb(102, 102, 102);">#!/bin/sh</span><br />echo `cat /opt/.ASQ-AAA-Policy.prState2`<br />echo `cat /opt/.ASQ-AAA-Config.prState2`<br />exit<br /></blockquote>接著用 crontab -e 把他加進 cron job 去吧,這裡我們讓他每兩分鐘執行一次 Application Status Qury 的 script,可自行更改。<blockquote>[root@KHXAAAS1 ~]# crontab -l<br />*/2 * * * * /bin/PSQ-AAA.sh</blockquote>剛剛改完 /etc/snmp/snmpd.conf 之後我們還沒重起 snmpd 的服務,所以現在去查詢 .1.3.6.1.4.1.2021.51 這個 OID 應該會得倒下面的回應:<blockquote>[root@KHXAAAS1 ~]# snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.51<br /><span style="color: rgb(0, 0, 0);">UCD-SNMP-MIB::ucdavis.51 = No Such Object available on this agent at this OID</span></blockquote>再來要開始驗證了,先確定一下兩台 AAA server 上的服務是把第一台的 Policy server 停下來的狀態,第二台則是保持 service 正常:<blockquote>[root@KHXAAAS1 ~]# /opt/AAA/bin/aaa list all<br /><span style="color: rgb(255, 0, 0);">The server could not be reached: Connection refused</span><br /><span style="color: rgb(255, 0, 0);">8950 AAA Policy Server: not responding</span><br />101 Server active<br />8950 AAA Configuration Server: responding<br />[root@KHXAAAS2 ~]# /opt/AAA/bin/aaa list all<br />101 Server active<br />8950 AAA Policy Server: responding<br />101 Server active<br />8950 AAA Configuration Server: responding</blockquote>接下來先重啟一下 snmpd service 來讓剛剛我們改的部分生效:<blockquote>[root@KHXAAAS1 ~]# service snmpd restart <br />Stopping snmpd: [ <span style="color: rgb(0, 153, 0);">OK</span> ]<br />Starting snmpd: [ <span style="color: rgb(0, 153, 0);">OK</span> ]</blockquote>好啦,現在可以查詢看看囉,先在本機上查詢一下(當然你也可以從你的 SNMP server 端來查詢) 我們剛剛新定義的 OID:<blockquote>[root@KHXAAAS1 ~]# snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.51<br /><span style="color: rgb(0, 0, 0);">UCD-SNMP-MIB::ucdavis.51.1.1 = INTEGER: 1</span><br /><span style="color: rgb(0, 0, 0);">UCD-SNMP-MIB::ucdavis.51.2.1 = STRING: "ApplicationStatusQury"</span><br /><span style="color: rgb(0, 0, 0);">UCD-SNMP-MIB::ucdavis.51.3.1 = STRING: "/bin/sh /bin/ASQ.sh"</span><br /><span style="color: rgb(0, 0, 0);">UCD-SNMP-MIB::ucdavis.51.100.1 = INTEGER: 0</span><br />UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: "<span style="color: rgb(255, 0, 0);">not responding</span>"<br />UCD-SNMP-MIB::ucdavis.51.101.2 = STRING: "responding"<br /><span style="color: rgb(0, 0, 0);">UCD-SNMP-MIB::ucdavis.51.102.1 = INTEGER: 0</span><br /><span style="color: rgb(0, 0, 0);">UCD-SNMP-MIB::ucdavis.51.103.1 = ""</span></blockquote>如果是用 wc -l 去 count 的話那應該會像下面這樣:<blockquote>UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: "1"<br />UCD-SNMP-MIB::ucdavis.51.101.2 = STRING: "0"</blockquote>當然在這裡我們需要的是 .1.3.6.1.4.1.2021.51.101.1 and .1.3.6.1.4.1.2021.51.101.2 這兩個 OID,對應到 Policy server 和 Configuration server 的服務狀態。所以由 SNMP server 端就可以直接設定一個 Passive Monitor 來 Polling 這兩個 OID 的值。<blockquote>[root@KHXEMSS1 ~]# snmpwalk -v 2c -c public khxaaas1 .1.3.6.1.4.1.2021.51.101.1<br />UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: "<span style="color: rgb(255, 0, 0);">not responding</span>"<br />[root@KHXEMSS1 ~]# snmpwalk -v 2c -c public khxaaas1 .1.3.6.1.4.1.2021.51.101.2<br /><span style="color: rgb(0, 0, 0);">UCD-SNMP-MIB::ucdavis.51.101.2 = STRING: "responding"</span></blockquote><blockquote>[root@KHXEMSS1 ~]# snmpwalk -v 2c -c public khxaaas2 .1.3.6.1.4.1.2021.51.101.1<br /><span style="color: rgb(0, 0, 0);">UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: "responding"</span><br />[root@KHXEMSS1 ~]# snmpwalk -v 2c -c public khxaaas2 .1.3.6.1.4.1.2021.51.101.2<br /><span style="color: rgb(0, 0, 0);">UCD-SNMP-MIB::ucdavis.51.101.2 = STRING: "responding"</span></blockquote>所以上面就代表第一台 KHXAAAS1 的 Policy server 有問題。OK...報告完畢。</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0tag:blogger.com,1999:blog-5287674613622206536.post-22923102458822653102008-10-15T20:08:00.004+08:002008-10-16T16:25:59.199+08:00用 mysqldump 來 Backup/Restore MySQL 的 DB data今天收到客戶的要求要把 DB server 上的 MySQL data 做個定期備份,所以就順便實作一下~<br />首先,這裡的環境是:<br /><br />兩台 DB server 上都有 MySQL Enterprise v2.0.56,<br />OS 都是 RedHat EL ES4U5,另外這兩台 DB server 上還有 Veritas 做 HA。<br />我們就不說廢話了,直接開始吧:<br /><span class="fullpost"><br />MySQL 備份資料庫主要有兩種方法,一種是用 Hard copy 的方法,也就是直接把 ~/mysql/data/[資料庫名稱]/* 通通備份下來,如果要到回去資料庫,資料庫版本要一樣喔,免得發生非預期的結果。不過這種方法備份還原時最好先把 mysqld 停下來。<br />要看 MySQL 是否執行中可用下面的指令 "mysqladmin status":<blockquote>[root@KHXDBS1 ~]# /opt/mysql/enterprise/monitor/mysql/bin/mysqladmin status<br />/opt/mysql/enterprise/monitor/mysql/bin/mysqladmin: connect to server at 'localhost' failed<br />error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'<br /><span style="color: rgb(255, 0, 0);">Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists!</span></blockquote>而要檢查剛剛所說的資料庫所在的位置,可以去查看一下 /etc/init.d/mysql 個檔案的內容,由於這裡的環境是兩台 DB server 後面接著一座 Storage,所以我把 datadir (資料庫路徑) 改到 /DB (由後端 Storage mount 過來)底下:<blockquote>[root@KHXDBS1 ~]# grep "datadir=/" /etc/init.d/mysql <br /># datadir=/var/lib/mysql<br />datadir=/DB/var/lib/mysql</blockquote><blockquote>[root@KHXDBS1 ~]# cp -pR /DB/var/lib/mysql/AAA /DB/mysql/backup/.</blockquote>其中 AAA 是這次要備份的的 schema 啦。<br /><br />還有一種作法是用 mysqldump 將資料倒出來 *.sql,指令格式為:<blockquote>mysqldump -h [Host] -u[DbUserName] -p[DbPassword] [DbName] > [filename].sql</blockquote>簡單的例子:<blockquote>mysqldump -h 127.0.0.1 -uroot -pOOXX AAA > /DB/mysql/backup/dbMysqlArchive_XXXX.sql</blockquote>要做 Restore 時可以用下面的指令範例來倒:<blockquote>mysql -h 127.0.0.1 -uroot -pOOXX AAA < /DB/mysql/backup/dbMysqlArchive_XXXX.sql</blockquote>對了,Restore 之前要先確定 AAA 的 Schema 還存在喔~<br />下面是附上簡單寫的一個小 script 去每天晚上作個備份...給大家參考一下:<blockquote>[root@KHXDBS1 ~]# crontab -l 10 2 * * * /bin/DB_archive.sh > /dev/null 2>&1</blockquote><blockquote>[root@KHXDBS1 ~]# cat /bin/DB_archive.sh<br />#!/bin/sh -vx<br />#<br /># DB server : Backup DB data<br /># Version: @01<br />#<br />INITIAL_DIR=/opt/logs<br />HOSTNAME=`hostname |cut -c -7`<br />LOG_APPENDIX=`date +"%Y-%m%d"`<br />LOCK_FILE=$INITIAL_DIR/.dbMysqlArchive_lock<br />LOG_FILE=$INITIAL_DIR/$HOSTNAME-dbMysqlArchive_$LOG_APPENDIX.log<br />ERR_COUNTER=0<br />FIX_COUNTER=0<br />MAIN_SEPERATOR="==============="<br />SEC_SEPERATOR="#---------------------------------------------------------------------------------------#"<br />NOW=`date +%Y-%m-%d-%H:%M:%S`<br />ARC_EXT=`date +%Y%m%d%H`<br />ARC_DIR=/DB/mysql/backup<br />ARC_FILE=$ARC_DIR/dbMysqlArchive_$ARC_EXT.sql<br /><br />if [ ! -f "$LOCK_FILE" ]; then<br />touch $LOCK_FILE<br />else<br />echo $MAIN_SEPERATOR >> $LOG_FILE<br />echo $NOW >> $LOG_FILE<br />echo "$LOCK_FILE exist" >> $LOG_FILE<br />echo $MAIN_SEPERATOR >> $LOG_FILE<br />exit<br />fi<br /><br />if [ `rsh khxdb hostname|cut -c -7|grep $HOSTNAME|wc -l` = 1 ]; then<br />/usr/bin/find $INITIAL_DIR -name "$HOSTNAME-dbMysqlArchive*.log" -mtime +8 -exec rm {} \;<br />/usr/bin/find $ARC_DIR -name "dbMysqlArchive_*.sql" -mtime +8 -exec rm {} \;<br /><br />echo $SEC_SEPERATOR >> $LOG_FILE<br />echo "# DB server mysql data archive script starting #" >> $LOG_FILE<br />echo $SEC_SEPERATOR >> $LOG_FILE<br />#------------------------ Archive MySQL data ----------------------------------------------#<br />echo "Start to excute mysqldump command at $NOW ..." >> $LOG_FILE<br />echo "" >> $LOG_FILE<br />/opt/mysql/enterprise/monitor/mysql/bin/mysqldump -h 127.0.0.1 -uroot -pOOXX AAA > $ARC_FILE<br />if [ `ls -l $ARC_FILE| wc -l` = 1 ]; then<br />echo "$ARC_FILE created..." >> $LOG_FILE<br />else<br />echo "$ARC_FILE create fail, Please check it now..." >> $LOG_FILE<br />fi<br />rm -rf $LOCK_FILE<br />echo $SEC_SEPERATOR >> $LOG_FILE<br />echo "# DB server MySQL data archive script finished #" >> $LOG_FILE<br />echo $SEC_SEPERATOR >> $LOG_FILE<br />#------------------------------------------------------------------------------------------#<br />else<br />echo $NOW >> $LOG_FILE<br />echo "This server is NOT the active one !!!" >> $LOG_FILE<br />echo "Check script is stopping !!!" >> $LOG_FILE<br />echo $SEC_SEPERATOR >> $LOG_FILE<br />rm -rf $LOCK_FILE<br />fi<br />[root@KHXDBS1 ~]#</blockquote>備份完會像下面所示的例子喔:<blockquote>[root@KHXDBS1 ~]# ls -alrt /DB/mysql/backup/<br />total 168<br />drwxr-xr-x 3 root root 4096 Oct 14 15:25 ..<br />-rw-r--r-- 1 root root 77092 Oct 15 02:10 dbMysqlArchive_2008101502.sql<br />drwxr-xr-x 2 root root 4096 Oct 14 15:55 .</blockquote><br />搞定!收工。</span>洋蔥爸比 Tosian Yanghttp://www.blogger.com/profile/13199586092224812844noreply@blogger.com0