LINUX Java 環境及 Tomcat 安裝

今天實作的機器為 Dell-1950 安裝的 OS 為 RHEL ES4 Update5,首先我們要先實作安裝 JAVA JDK, 因此我們先從 Java SE Downloads 下載 JDK 6 Update 7:

進入剛剛的頁面後,選擇 JDK 6 Update 7 的 Download 按鈕 (這個版本內還包含了 Java Runtime Environment (JRE) 囉),接下來看到 "Select Platform and Language for your download:" 時選擇你的 OS 跟語言,這裡我選擇 Linux 的 Platfrom 以及 Multi-Language 為 Language 選擇同意後按 "Continus" 下載 "jdk-6u7-linux-i586-rpm.bin"。

或者從 Sun Microsystems 下載 Linux 專用的 Java 軟體:

進到剛剛的連結頁面後,按下 Linux RPM (自我解壓縮檔) 便可下載 JDK 6 Update 7。
--- 建議下載 RPM 自解壓縮格式的(RPM in self-extracting file,jdk-6u7-linux-i586-rpm.bin)

再來是將檔案上傳到這次實作的機器上,這裡就先 ftp 到 /opt 吧:
[root@KHXPROVS1 ~]# cd /opt
[root@KHXPROVS1 opt]# ls -alrt
total 181532
drwx------ 2 root root 16384 Jun 25 22:22 lost+found
-rw-r--r-- 1 root root 248493 Jul 1 14:35 iperf-2.0.4.tar.gz
drwxrwxrwx 8 501 501 4096 Jul 1 14:36 iperf-2.0.4
drwxr-xr-x 25 root root 4096 Aug 27 15:56 ..
drwxr-xr-x 4 root root 4096 Sep 4 09:32 .
-rw-r--r-- 1 root root 74397909 Sep 4 09:37 jdk-6u7-linux-i586-rpm.bin
將檔案權限改為可執行檔:
[root@KHXPROVS1 opt]# chmod +x jdk-6u6-linux-i586-rpm.bin
[root@KHXPROVS1 opt]# ls -alrt
total 181532
drwx------ 2 root root 16384 Jun 25 22:22 lost+found
-rw-r--r-- 1 root root 248493 Jul 1 14:35 iperf-2.0.4.tar.gz
drwxrwxrwx 8 501 501 4096 Jul 1 14:36 iperf-2.0.4
drwxr-xr-x 25 root root 4096 Aug 27 15:56 ..
drwxr-xr-x 4 root root 4096 Sep 4 09:32 .
-rwxr-xr-x 1 root root 74397909 Sep 4 09:37 jdk-6u7-linux-i586-rpm.bin
要開始安裝 JDK囉, 安裝時會有一段 Sun 的協議,敲幾個空白鍵,當詢問是否同意時,敲 yes 就好。
[root@KHXPROVS1 opt]# ./jdk-6u7-linux-i586-rpm.bin
Sun Microsystems, Inc. Binary Code License Agreement

for the JAVA SE DEVELOPMENT KIT (JDK), VERSION 6

SUN MICROSYSTEMS, INC. ("SUN") IS WILLING TO LICENSE THE
SOFTWARE IDENTIFIED BELOW TO YOU ONLY UPON THE CONDITION
THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS BINARY
CODE LICENSE AGREEMENT AND SUPPLEMENTAL LICENSE TERMS
(COLLECTIVELY "AGREEMENT"). PLEASE READ THE AGREEMENT
CAREFULLY. BY DOWNLOADING OR INSTALLING THIS SOFTWARE, YOU
ACCEPT THE TERMS OF THE AGREEMENT. INDICATE ACCEPTANCE BY
SELECTING THE "ACCEPT" BUTTON AT THE BOTTOM OF THE
AGREEMENT. IF YOU ARE NOT WILLING TO BE BOUND BY ALL THE
TERMS, SELECT THE "DECLINE" BUTTON AT THE BOTTOM OF THE
AGREEMENT AND THE DOWNLOAD OR INSTALL PROCESS WILL NOT
CONTINUE.

1. DEFINITIONS. "Software" means the identified above in
binary form, any other machine readable materials
(including, but not limited to, libraries, source files,
header files, and data files), any updates or error
corrections provided by Sun, and any user manuals,
programming guides and other documentation provided to you
by Sun under this Agreement. "General Purpose Desktop
Computers and Servers" means computers, including desktop,
laptop and tablet computers, or servers, used for general
computing functions under end user control (such as but not
specifically limited to email, general purpose Internet
browsing, and office suite productivity tools).
The use of Software in systems and solutions that provide
dedicated functionality (other than as mentioned above) or
designed for use in embedded or function-specific software
applications, for example but not limited to: Software
embedded in or bundled with industrial control systems,
wireless mobile telephones, wireless handheld devices,
kiosks, TV/STB, Blu-ray Disc devices, telematics and
network control switching equipment, printers and storage
management systems, and other related systems are excluded
from this definition and not licensed under this
Agreement. "Programs" means Java technology applets and
applications intended to run on the Java Platform Standard
Edition (Java SE) platform on Java-enabled General Purpose
Desktop Computers and Servers.

2. LICENSE TO USE. Subject to the terms and conditions of
this Agreement, including, but not limited to the Java
Technology Restrictions of the Supplemental License Terms,
Sun grants you a non-exclusive, non-transferable, limited
license without license fees to reproduce and use
internally Software complete and unmodified for the sole
purpose of running Programs. Additional licenses for
developers and/or publishers are granted in the
Supplemental License Terms.

3. RESTRICTIONS. Software is confidential and copyrighted.
Title to Software and all associated intellectual property
rights is retained by Sun and/or its licensors. Unless
enforcement is prohibited by applicable law, you may not
modify, decompile, or reverse engineer Software. You
acknowledge that Licensed Software is not designed or
intended for use in the design, construction, operation or
maintenance of any nuclear facility. Sun Microsystems, Inc.
disclaims any express or implied warranty of fitness for
such uses. No right, title or interest in or to any
trademark, service mark, logo or trade name of Sun or its
licensors is granted under this Agreement. Additional
restrictions for developers and/or publishers licenses are
set forth in the Supplemental License Terms.

4. LIMITED WARRANTY. Sun warrants to you that for a period
of ninety (90) days from the date of purchase, as evidenced
by a copy of the receipt, the media on which Software is
furnished (if any) will be free of defects in materials and
workmanship under normal use. Except for the foregoing,
Software is provided "AS IS". Your exclusive remedy and
Sun's entire liability under this limited warranty will be
at Sun's option to replace Software media or refund the fee
paid for Software. Any implied warranties on the Software
are limited to 90 days. Some states do not allow
limitations on duration of an implied warranty, so the
above may not apply to you. This limited warranty gives you
specific legal rights. You may have others, which vary from
state to state.

5. DISCLAIMER OF WARRANTY. UNLESS SPECIFIED IN THIS
AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS,
REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED
WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE OR NON-INFRINGEMENT ARE DISCLAIMED, EXCEPT TO THE
EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY
INVALID.

6. LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY
LAW, IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
ANY LOST REVENUE, PROFIT OR DATA, OR FOR SPECIAL, INDIRECT,
CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT
OF OR RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE,
EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES. In no event will Sun's liability to you, whether
in contract, tort (including negligence), or otherwise,
exceed the amount paid by you for Software under this
Agreement. The foregoing limitations will apply even if the
above stated warranty fails of its essential purpose. Some
states do not allow the exclusion of incidental or
consequential damages, so some of the terms above may not
be applicable to you.

7. TERMINATION. This Agreement is effective until
terminated. You may terminate this Agreement at any time by
destroying all copies of Software. This Agreement will
terminate immediately without notice from Sun if you fail
to comply with any provision of this Agreement. Either
party may terminate this Agreement immediately should any
Software become, or in either party's opinion be likely to
become, the subject of a claim of infringement of any
intellectual property right. Upon Termination, you must
destroy all copies of Software.

8. EXPORT REGULATIONS. All Software and technical data
delivered under this Agreement are subject to US export
control laws and may be subject to export or import
regulations in other countries. You agree to comply
strictly with all such laws and regulations and acknowledge
that you have the responsibility to obtain such licenses to
export, re-export, or import as may be required after
delivery to you.

9. TRADEMARKS AND LOGOS. You acknowledge and agree as
between you and Sun that Sun owns the SUN, SOLARIS, JAVA,
JINI, FORTE, and iPLANET trademarks and all SUN, SOLARIS,
JAVA, JINI, FORTE, and iPLANET-related trademarks, service
marks, logos and other brand designations ("Sun Marks"),
and you agree to comply with the Sun Trademark and Logo
Usage Requirements currently located at
http://www.sun.com/policies/trademarks. Any use you make of
the Sun Marks inures to Sun's benefit.

10. U.S. GOVERNMENT RESTRICTED RIGHTS. If Software is being
acquired by or on behalf of the U.S. Government or by a
U.S. Government prime contractor or subcontractor (at any
tier), then the Government's rights in Software and
accompanying documentation will be only as set forth in
this Agreement; this is in accordance with 48 CFR 227.7201
through 227.7202-4 (for Department of Defense (DOD)
acquisitions) and with 48 CFR 2.101 and 12.212 (for non-DOD
acquisitions).

11. GOVERNING LAW. Any action related to this Agreement
will be governed by California law and controlling U.S.
federal law. No choice of law rules of any jurisdiction
will apply.

12. SEVERABILITY. If any provision of this Agreement is
held to be unenforceable, this Agreement will remain in
effect with the provision omitted, unless omission would
frustrate the intent of the parties, in which case this
Agreement will immediately terminate.

13. INTEGRATION. This Agreement is the entire agreement
between you and Sun relating to its subject matter. It
supersedes all prior or contemporaneous oral or written
communications, proposals, representations and warranties
and prevails over any conflicting or additional terms of
any quote, order, acknowledgment, or other communication
between the parties relating to its subject matter during
the term of this Agreement. No modification of this
Agreement will be binding, unless in writing and signed by
an authorized representative of each party.

SUPPLEMENTAL LICENSE TERMS

These Supplemental License Terms add to or modify the terms
of the Binary Code License Agreement. Capitalized terms not
defined in these Supplemental Terms shall have the same
meanings ascribed to them in the Binary Code License
Agreement . These Supplemental Terms shall supersede any
inconsistent or conflicting terms in the Binary Code
License Agreement, or in any license contained within the
Software.

A. Software Internal Use and Development License Grant.
Subject to the terms and conditions of this Agreement and
restrictions and exceptions set forth in the Software
"README" file incorporated herein by reference, including,
but not limited to the Java Technology Restrictions of
these Supplemental Terms, Sun grants you a non-exclusive,
non-transferable, limited license without fees to reproduce
internally and use internally the Software complete and
unmodified for the purpose of designing, developing, and
testing your Programs.

B. License to Distribute Software. Subject to the terms and
conditions of this Agreement and restrictions and
exceptions set forth in the Software README file,
including, but not limited to the Java Technology
Restrictions of these Supplemental Terms, Sun grants you a
non-exclusive, non-transferable, limited license without
fees to reproduce and distribute the Software, provided
that (i) you distribute the Software complete and
unmodified and only bundled as part of, and for the sole
purpose of running, your Programs, (ii) the Programs add
significant and primary functionality to the Software,
(iii) you do not distribute additional software intended to
replace any component(s) of the Software, (iv) you do not
remove or alter any proprietary legends or notices
contained in the Software, (v) you only distribute the
Software subject to a license agreement that protects Sun's
interests consistent with the terms contained in this
Agreement, and (vi) you agree to defend and indemnify Sun
and its licensors from and against any damages, costs,
liabilities, settlement amounts and/or expenses (including
attorneys' fees) incurred in connection with any claim,
lawsuit or action by any third party that arises or results
from the use or distribution of any and all Programs and/or
Software.

C. License to Distribute Redistributables. Subject to the
terms and conditions of this Agreement and restrictions and
exceptions set forth in the Software README file, including
but not limited to the Java Technology Restrictions of
these Supplemental Terms, Sun grants you a non-exclusive,
non-transferable, limited license without fees to reproduce
and distribute those files specifically identified as
redistributable in the Software "README" file
("Redistributables") provided that: (i) you distribute the
Redistributables complete and unmodified, and only bundled
as part of Programs, (ii) the Programs add significant and
primary functionality to the Redistributables, (iii) you do
not distribute additional software intended to supersede
any component(s) of the Redistributables (unless otherwise
specified in the applicable README file), (iv) you do not
remove or alter any proprietary legends or notices
contained in or on the Redistributables, (v) you only
distribute the Redistributables pursuant to a license
agreement that protects Sun's interests consistent with the
terms contained in the Agreement, (vi) you agree to defend
and indemnify Sun and its licensors from and against any
damages, costs, liabilities, settlement amounts and/or
expenses (including attorneys' fees) incurred in connection
with any claim, lawsuit or action by any third party that
arises or results from the use or distribution of any and
all Programs and/or Software.

D. Java Technology Restrictions. You may not create,
modify, or change the behavior of, or authorize your
licensees to create, modify, or change the behavior of,
classes, interfaces, or subpackages that are in any way
identified as "java", "javax", "sun" or similar convention
as specified by Sun in any naming convention designation.

E. Distribution by Publishers. This section pertains to
your distribution of the Software with your printed book or
magazine (as those terms are commonly used in the industry)
relating to Java technology ("Publication"). Subject to and
conditioned upon your compliance with the restrictions and
obligations contained in the Agreement, in addition to the
license granted in Paragraph 1 above, Sun hereby grants to
you a non-exclusive, nontransferable limited right to
reproduce complete and unmodified copies of the Software on
electronic media (the "Media") for the sole purpose of
inclusion and distribution with your Publication(s),
subject to the following terms: (i) You may not distribute
the Software on a stand-alone basis; it must be distributed
with your Publication(s); (ii) You are responsible for
downloading the Software from the applicable Sun web site;
(iii) You must refer to the Software as JavaTM SE
Development Kit 6; (iv) The Software must be reproduced in
its entirety and without any modification whatsoever
(including, without limitation, the Binary Code License and
Supplemental License Terms accompanying the Software and
proprietary rights notices contained in the Software);
(v) The Media label shall include the following
information: Copyright 2006, Sun Microsystems, Inc. All
rights reserved. Use is subject to license terms. Sun, Sun
Microsystems, the Sun logo, Solaris, Java, the Java Coffee
Cup logo, J2SE, and all trademarks and logos based on Java
are trademarks or registered trademarks of Sun
Microsystems, Inc. in the U.S. and other countries. This
information must be placed on the Media label in such a
manner as to only apply to the Sun Software; (vi) You must
clearly identify the Software as Sun's product on the Media
holder or Media label, and you may not state or imply that
Sun is responsible for any third-party software contained
on the Media; (vii) You may not include any third party
software on the Media which is intended to be a replacement
or substitute for the Software; (viii) You shall indemnify
Sun for all damages arising from your failure to comply
with the requirements of this Agreement. In addition, you
shall defend, at your expense, any and all claims brought
against Sun by third parties, and shall pay all damages
awarded by a court of competent jurisdiction, or such
settlement amount negotiated by you, arising out of or in
connection with your use, reproduction or distribution of
the Software and/or the Publication. Your obligation to
provide indemnification under this section shall arise
provided that Sun: (a) provides you prompt notice of the
claim; (b) gives you sole control of the defense and
settlement of the claim; (c) provides you, at your expense,
with all available information, assistance and authority to
defend; and (d) has not compromised or settled such claim
without your prior written consent; and (ix) You shall
provide Sun with a written notice for each Publication;
such notice shall include the following information: (1)
title of Publication, (2) author(s), (3) date of
Publication, and (4) ISBN or ISSN numbers. Such notice
shall be sent to Sun Microsystems, Inc., 4150 Network
Circle, M/S USCA12-110, Santa Clara, California 95054,
U.S.A , Attention: Contracts Administration.

F. Source Code. Software may contain source code that,
unless expressly licensed for other purposes, is provided
solely for reference purposes pursuant to the terms of this
Agreement. Source code may not be redistributed unless
expressly provided for in this Agreement.

G. Third Party Code. Additional copyright notices and
license terms applicable to portions of the Software are
set forth in the THIRDPARTYLICENSEREADME.txt file. In
addition to any terms and conditions of any third party
opensource/freeware license identified in the
THIRDPARTYLICENSEREADME.txt file, the disclaimer of
warranty and limitation of liability provisions in
paragraphs 5 and 6 of the Binary Code License Agreement
shall apply to all Software in this distribution.

H. Termination for Infringement. Either party may terminate
this Agreement immediately should any Software become, or
in either party's opinion be likely to become, the subject
of a claim of infringement of any intellectual property
right.

I. Installation and Auto-Update. The Software's
installation and auto-update processes transmit a limited
amount of data to Sun (or its service provider) about those
specific processes to help Sun understand and optimize
them. Sun does not associate the data with personally
identifiable information. You can find more information
about the data Sun collects at http://java.com/data/.

For inquiries please contact: Sun Microsystems, Inc., 4150
Network Circle, Santa Clara, California 95054, U.S.A.

Do you agree to the above license terms? [yes or no]
yes
Unpacking...
Checksumming...
Extracting...
UnZipSFX 5.50 of 17 February 2002, by Info-ZIP (Zip-Bugs@lists.wku.edu).
inflating: jdk-6u7-linux-i586.rpm
inflating: sun-javadb-common-10.3.1-4.1.i386.rpm
inflating: sun-javadb-core-10.3.1-4.1.i386.rpm
inflating: sun-javadb-client-10.3.1-4.1.i386.rpm
inflating: sun-javadb-demo-10.3.1-4.1.i386.rpm
inflating: sun-javadb-docs-10.3.1-4.1.i386.rpm
inflating: sun-javadb-javadoc-10.3.1-4.1.i386.rpm
Preparing... ########################################### [100%]
1:jdk ########################################### [100%]
Unpacking JAR files...
rt.jar...
jsse.jar...
charsets.jar...
tools.jar...
localedata.jar...
plugin.jar...
javaws.jar...
deploy.jar...
Installing JavaDB
Preparing... ########################################### [100%]
1:sun-javadb-common ########################################### [ 17%]
2:sun-javadb-core ########################################### [ 33%]
3:sun-javadb-client ########################################### [ 50%]
4:sun-javadb-demo ########################################### [ 67%]
5:sun-javadb-docs ########################################### [ 83%]
6:sun-javadb-javadoc ########################################### [100%]

Java(TM) SE Development Kit 6 successfully installed.

Product Registration is FREE and includes many benefits:
* Notification of new versions, patches, and updates
* Special offers on Sun products, services and training
* Access to early releases and documentation

Product and system data will be collected. If your configuration
supports a browser, the Sun Product Registration form for
the JDK will be presented. If you do not register, none of
this information will be saved. You may also register your
JDK later by opening the register.html file (located in
the JDK installation directory) in a browser.

For more information on what data Registration collects and
how it is managed and used, see:
http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html

Press Enter to continue.....

Done.
檢查一下目前安裝的 JAVA 吧:
[root@KHXPROVS1 opt]# rpm -qa|grep java
sun-javadb-demo-10.3.1-4.1
sun-javadb-common-10.3.1-4.1
java-1.4.2-gcj-compat-1.4.2.0-27jpp
sun-javadb-core-10.3.1-4.1
sun-javadb-javadoc-10.3.1-4.1
db4-java-4.2.52-7.1
gcc4-java-4.1.1-53.EL4
java-1.4.2-gcj-compat-devel-1.4.2.0-27jpp
sun-javadb-client-10.3.1-4.1
gcc-java-3.4.6-8
sun-javadb-docs-10.3.1-4.1
而 JDK 會被安裝到 /usr/java/jdk1.6.0_07 底下:其中 /usr/java/jdk1.6.0_07/jre 便是 Java Runtime Environment 的安裝路徑喔。
[root@KHXPROVS1 opt]# ls -alrt /usr/java/
total 16
drwxr-xr-x 15 root root 4096 Sep 4 09:39 ..
lrwxrwxrwx 1 root root 21 Sep 4 09:40 latest -> /usr/java/jdk1.6.0_07
drwxr-xr-x 9 root root 4096 Sep 4 09:40 jdk1.6.0_07
lrwxrwxrwx 1 root root 16 Sep 4 09:40 default -> /usr/java/latest
drwxr-xr-x 3 root root 4096 Sep 4 09:40 .
[root@KHXPROVS1 ~]# ls -al /usr/java/jdk1.6.0_07
total 18660
drwxr-xr-x 9 root root 4096 Sep 4 09:40 .
drwxr-xr-x 3 root root 4096 Sep 11 13:26 ..
drwxr-xr-x 2 root root 4096 Sep 4 09:39 bin
-rw-r--r-- 1 root root 4137 Jun 10 16:54 COPYRIGHT
drwxr-xr-x 10 root root 4096 Sep 4 09:39 demo
drwxr-xr-x 3 root root 4096 Sep 4 09:39 include
drwxr-xr-x 6 root root 4096 Sep 4 09:39 jre
drwxr-xr-x 3 root root 4096 Sep 4 11:15 lib
-rw-r--r-- 1 root root 17058 Jun 10 16:54 LICENSE
drwxr-xr-x 4 root root 4096 Sep 4 09:39 man
-rw-r--r-- 1 root root 28599 Jun 10 16:54 README.html
-rw-r--r-- 1 root root 24132 Jun 10 16:54 README_ja.html
-rw-r--r-- 1 root root 18329 Jun 10 16:54 README_zh_CN.html
-r--r--r-- 1 root root 5134 Sep 4 09:40 register.html
-r--r--r-- 1 root root 5566 Sep 4 09:40 register_ja.html
-r--r--r-- 1 root root 4744 Sep 4 09:40 register_zh_CN.html
drwxr-xr-x 9 root root 4096 Sep 4 09:39 sample
-rw-r--r-- 1 root root 18719895 Jun 10 16:54 src.zip
-rw-r--r-- 1 root root 190102 Jun 10 16:54 THIRDPARTYLICENSEREADME.txt
[root@KHXPROVS1 ~]#

如果你和我一樣沒有 Sun JDK 的 JPackage Java compatibility package,那麼就到 RepoView: Scientific Linux Fermi Testing 5rolling x86_64 或者到 FileWatcher 去下載 java-1.6.0-sun-compat-1.6.0.07-1jpp.i586.rpm (60.32 KB) 吧。一樣的,下載完後將檔案 ftp 到實作機的 /opt 去,然後安裝:
[root@KHXPROVS1 opt]# ls -al
total 292796
drwxr-xr-x 5 root root 4096 Sep 4 11:09 .
drwxr-xr-x 25 root root 4096 Sep 4 10:43 ..
drwxrwxrwx 8 501 501 4096 Jul 1 14:36 iperf-2.0.4
-rw-r--r-- 1 root root 248493 Jul 1 14:35 iperf-2.0.4.tar.gz
-rw-r--r-- 1 root root 61764 Sep 4 11:09 java-1.6.0-sun-compat-1.6.0.07-1jpp.i586.rpm
-rw-r--r-- 1 root root 65414959 Jun 10 18:38 jdk-6u7-linux-i586.rpm
-rwxr-xr-x 1 root root 74397909 Sep 4 09:37 jdk-6u7-linux-i586-rpm.bin
-rw-r--r-- 1 root root 19463427 Jun 10 18:36 jre-6u7-linux-i586.rpm
-rwxr-xr-x 1 root root 19216086 Sep 4 10:31 jre-6u7-linux-i586-rpm.bin
drwx------ 2 root root 16384 Jun 25 22:22 lost+found
drwxr-xr-x 3 root root 4096 Sep 4 09:40 sun
-rw-r--r-- 1 root root 463678 Aug 20 2007 sun-javadb-client-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 62801 Aug 20 2007 sun-javadb-common-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 3655834 Aug 20 2007 sun-javadb-core-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 996942 Aug 20 2007 sun-javadb-demo-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 4290799 Aug 20 2007 sun-javadb-docs-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 123721 Aug 20 2007 sun-javadb-javadoc-10.3.1-4.1.i386.rpm
[root@KHXPROVS1 opt]# rpm -Uvh java-1.6.0-sun-compat-1.6.0.07-1jpp.i586.rpm
warning: java-1.6.0-sun-compat-1.6.0.07-1jpp.i586.rpm: V3 DSA signature: NOKEY, key ID 82fd17b2
Preparing... ########################################### [100%]
1:java-1.6.0-sun-compat ########################################### [100%]
檢查一下 java-1.6.0-sun-compat-1.6.0.07-1jpp 有出現在 rpm installation list 裡面:
[root@KHXPROVS1 opt]# rpm -qa |grep java
sun-javadb-demo-10.3.1-4.1
sun-javadb-common-10.3.1-4.1
java-1.4.2-gcj-compat-1.4.2.0-27jpp
sun-javadb-core-10.3.1-4.1
sun-javadb-javadoc-10.3.1-4.1
db4-java-4.2.52-7.1
gcc4-java-4.1.1-53.EL4
java-1.4.2-gcj-compat-devel-1.4.2.0-27jpp
sun-javadb-client-10.3.1-4.1
java-1.6.0-sun-compat-1.6.0.07-1jpp
gcc-java-3.4.6-8
sun-javadb-docs-10.3.1-4.1
接下來檢查一下目前系統使用的 JAVA 版本:
[root@KHXPROVS1 opt]# java -version
java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Java HotSpot(TM) Server VM (build 10.0-b23, mixed mode)
確認一下目前的系統是設定最後版本為 default JAVA, run 下面的 command: (應該會看到目前系統有兩個可用的 Java 程式, 如下所示)
[root@KHXPROVS1 opt]# alternatives --config java

There are 2 programs which provide 'java'.

Selection Command
-----------------------------------------------
1 /usr/lib/jvm/jre-1.4.2-gcj/bin/java
*+ 2 /usr/lib/jvm/jre-1.6.0-sun/bin/java

Enter to keep the current selection[+], or type selection number:
[root@KHXPROVS1 opt]#
如果在 number 2 之前有看到 *+, 那就ok,直接按 Enter 就好。不過如果你的運氣不好,是 1 被選到,那麼 type 2 並按 Enter 改為使用最後版本。

JDK 安裝到這裡算是 ok 了,接下來是設定環境變數,可以用 export 命令直接在 shell 下設置,但只針對當前的 shell 有效,因此我們直接去修改 .bashrc 文件吧:
[root@KHXPROVS1 opt]# vi ~/.bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vi='vim'

TERM=xterm-color; export TERM;

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

export JAVA_HOME=/usr/java/jdk1.6.0_07
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
~
存檔然後離開這個 shell 再進來一次:
[root@KHXPROVS1 opt]# exit
logout
測試一下剛剛的環境變數:
[root@KHXPROVS1 ~]# echo $JAVA_HOME
/usr/java/jdk1.6.0_07
[root@KHXPROVS1 ~]# echo $CLASSPATH
.:/usr/java/jdk1.6.0_07/lib/dt.jar:/usr/java/jdk1.6.0_07/lib/tools.jar
[root@KHXPROVS1 ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/java/jdk1.6.0_07/bin:/root/bin
[root@KHXPROVS1 ~]#
接著是 Apache Tomcat 的安裝部分了,首先我們到 Apache Tomcat 的官方網站去,點選左邊 download 的一個版本,這裡選擇的是 tomcat6.x:
進去後選 Binary Distributions 下的 tar.gz (pgp, md5) 來下載 Apache Tomcat v6.0.18。

下載完後將 apache-tomcat-6.0.18.tar.gz 上傳到測試機器的 /opt 下:
[root@KHXPROVS1 opt]# cd /opt
[root@KHXPROVS1 opt]# ls -al
total 292796
drwxr-xr-x 5 root root 4096 Sep 4 11:09 .
drwxr-xr-x 25 root root 4096 Sep 4 10:43 ..
-rw-r--r-- 1 root root 6142197 Sep 3 19:04 apache-tomcat-6.0.18.tar.gz
drwxrwxrwx 8 501 501 4096 Jul 1 14:36 iperf-2.0.4
-rw-r--r-- 1 root root 248493 Jul 1 14:35 iperf-2.0.4.tar.gz
-rw-r--r-- 1 root root 61764 Sep 4 11:09 java-1.6.0-sun-compat-1.6.0.07-1jpp.i586.rpm
-rw-r--r-- 1 root root 65414959 Jun 10 18:38 jdk-6u7-linux-i586.rpm
-rwxr-xr-x 1 root root 74397909 Sep 4 09:37 jdk-6u7-linux-i586-rpm.bin
-rw-r--r-- 1 root root 19463427 Jun 10 18:36 jre-6u7-linux-i586.rpm
-rwxr-xr-x 1 root root 19216086 Sep 4 10:31 jre-6u7-linux-i586-rpm.bin
drwx------ 2 root root 16384 Jun 25 22:22 lost+found
drwxr-xr-x 3 root root 4096 Sep 4 09:40 sun
-rw-r--r-- 1 root root 463678 Aug 20 2007 sun-javadb-client-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 62801 Aug 20 2007 sun-javadb-common-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 3655834 Aug 20 2007 sun-javadb-core-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 996942 Aug 20 2007 sun-javadb-demo-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 4290799 Aug 20 2007 sun-javadb-docs-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 123721 Aug 20 2007 sun-javadb-javadoc-10.3.1-4.1.i386.rpm
接下來安裝的話直接解壓縮就可以了:(目前預計要安裝的路徑為 /opt/ 喔)
[root@KHXPROVS1 opt]# tar zxvf apache-tomcat-6.0.18.tar.gz
apache-tomcat-6.0.18/bin/catalina.sh
apache-tomcat-6.0.18/bin/digest.sh
apache-tomcat-6.0.18/bin/setclasspath.sh
apache-tomcat-6.0.18/bin/shutdown.sh
apache-tomcat-6.0.18/bin/startup.sh
apache-tomcat-6.0.18/bin/tool-wrapper.sh
apache-tomcat-6.0.18/bin/version.sh
apache-tomcat-6.0.18/conf/
apache-tomcat-6.0.18/conf/catalina.policy
apache-tomcat-6.0.18/conf/catalina.properties
apache-tomcat-6.0.18/conf/context.xml
apache-tomcat-6.0.18/conf/logging.properties
apache-tomcat-6.0.18/conf/server.xml
apache-tomcat-6.0.18/conf/tomcat-users.xml
apache-tomcat-6.0.18/conf/web.xml
apache-tomcat-6.0.18/bin/
apache-tomcat-6.0.18/lib/
apache-tomcat-6.0.18/logs/
apache-tomcat-6.0.18/temp/
apache-tomcat-6.0.18/webapps/
apache-tomcat-6.0.18/webapps/ROOT/
apache-tomcat-6.0.18/webapps/ROOT/WEB-INF/
apache-tomcat-6.0.18/webapps/docs/
apache-tomcat-6.0.18/webapps/docs/WEB-INF/
apache-tomcat-6.0.18/webapps/docs/api/
apache-tomcat-6.0.18/webapps/docs/appdev/
apache-tomcat-6.0.18/webapps/docs/appdev/printer/
apache-tomcat-6.0.18/webapps/docs/appdev/printer/docs/
apache-tomcat-6.0.18/webapps/docs/appdev/printer/docs/appdev/
apache-tomcat-6.0.18/webapps/docs/appdev/sample/
apache-tomcat-6.0.18/webapps/docs/appdev/sample/docs/
apache-tomcat-6.0.18/webapps/docs/appdev/sample/src/
apache-tomcat-6.0.18/webapps/docs/appdev/sample/src/mypackage/
apache-tomcat-6.0.18/webapps/docs/appdev/sample/web/
apache-tomcat-6.0.18/webapps/docs/appdev/sample/web/WEB-INF/
apache-tomcat-6.0.18/webapps/docs/appdev/sample/web/images/
apache-tomcat-6.0.18/webapps/docs/architecture/
apache-tomcat-6.0.18/webapps/docs/architecture/printer/
apache-tomcat-6.0.18/webapps/docs/architecture/requestProcess/
apache-tomcat-6.0.18/webapps/docs/architecture/startup/
apache-tomcat-6.0.18/webapps/docs/config/
apache-tomcat-6.0.18/webapps/docs/config/printer/
apache-tomcat-6.0.18/webapps/docs/funcspecs/
apache-tomcat-6.0.18/webapps/docs/funcspecs/printer/
apache-tomcat-6.0.18/webapps/docs/images/
apache-tomcat-6.0.18/webapps/docs/printer/
apache-tomcat-6.0.18/webapps/docs/tribes/
apache-tomcat-6.0.18/webapps/examples/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/cal/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/chat/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/checkbox/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/colors/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/compressionFilters/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/dates/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/error/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/examples/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/filters/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/el/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/listeners/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/num/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/sessions/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/util/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/validators/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/jsp/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/jsp/applet/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/jsp2/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/lib/
apache-tomcat-6.0.18/webapps/examples/WEB-INF/tags/
apache-tomcat-6.0.18/webapps/examples/jsp/
apache-tomcat-6.0.18/webapps/examples/jsp/cal/
apache-tomcat-6.0.18/webapps/examples/jsp/chat/
apache-tomcat-6.0.18/webapps/examples/jsp/checkbox/
apache-tomcat-6.0.18/webapps/examples/jsp/colors/
apache-tomcat-6.0.18/webapps/examples/jsp/dates/
apache-tomcat-6.0.18/webapps/examples/jsp/error/
apache-tomcat-6.0.18/webapps/examples/jsp/forward/
apache-tomcat-6.0.18/webapps/examples/jsp/images/
apache-tomcat-6.0.18/webapps/examples/jsp/include/
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspattribute/
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspx/
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/misc/
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/
apache-tomcat-6.0.18/webapps/examples/jsp/jsptoserv/
apache-tomcat-6.0.18/webapps/examples/jsp/num/
apache-tomcat-6.0.18/webapps/examples/jsp/plugin/
apache-tomcat-6.0.18/webapps/examples/jsp/plugin/applet/
apache-tomcat-6.0.18/webapps/examples/jsp/security/
apache-tomcat-6.0.18/webapps/examples/jsp/security/protected/
apache-tomcat-6.0.18/webapps/examples/jsp/sessions/
apache-tomcat-6.0.18/webapps/examples/jsp/simpletag/
apache-tomcat-6.0.18/webapps/examples/jsp/snp/
apache-tomcat-6.0.18/webapps/examples/jsp/tagplugin/
apache-tomcat-6.0.18/webapps/examples/jsp/xml/
apache-tomcat-6.0.18/webapps/examples/servlets/
apache-tomcat-6.0.18/webapps/examples/servlets/images/
apache-tomcat-6.0.18/webapps/host-manager/
apache-tomcat-6.0.18/webapps/host-manager/META-INF/
apache-tomcat-6.0.18/webapps/host-manager/WEB-INF/
apache-tomcat-6.0.18/webapps/host-manager/images/
apache-tomcat-6.0.18/webapps/manager/
apache-tomcat-6.0.18/webapps/manager/META-INF/
apache-tomcat-6.0.18/webapps/manager/WEB-INF/
apache-tomcat-6.0.18/webapps/manager/images/
apache-tomcat-6.0.18/work/
apache-tomcat-6.0.18/LICENSE
apache-tomcat-6.0.18/NOTICE
apache-tomcat-6.0.18/RELEASE-NOTES
apache-tomcat-6.0.18/RUNNING.txt
apache-tomcat-6.0.18/bin/bootstrap.jar
apache-tomcat-6.0.18/bin/catalina-tasks.xml
apache-tomcat-6.0.18/bin/catalina.bat
apache-tomcat-6.0.18/bin/commons-daemon.jar
apache-tomcat-6.0.18/bin/cpappend.bat
apache-tomcat-6.0.18/bin/digest.bat
apache-tomcat-6.0.18/bin/jsvc.tar.gz
apache-tomcat-6.0.18/bin/service.bat
apache-tomcat-6.0.18/bin/setclasspath.bat
apache-tomcat-6.0.18/bin/shutdown.bat
apache-tomcat-6.0.18/bin/startup.bat
apache-tomcat-6.0.18/bin/tomcat-juli.jar
apache-tomcat-6.0.18/bin/tomcat-native.tar.gz
apache-tomcat-6.0.18/bin/tomcat6.exe
apache-tomcat-6.0.18/bin/tomcat6w.exe
apache-tomcat-6.0.18/bin/tool-wrapper.bat
apache-tomcat-6.0.18/bin/version.bat
apache-tomcat-6.0.18/lib/annotations-api.jar
apache-tomcat-6.0.18/lib/catalina-ant.jar
apache-tomcat-6.0.18/lib/catalina-ha.jar
apache-tomcat-6.0.18/lib/catalina-tribes.jar
apache-tomcat-6.0.18/lib/catalina.jar
apache-tomcat-6.0.18/lib/el-api.jar
apache-tomcat-6.0.18/lib/jasper-el.jar
apache-tomcat-6.0.18/lib/jasper-jdt.jar
apache-tomcat-6.0.18/lib/jasper.jar
apache-tomcat-6.0.18/lib/jsp-api.jar
apache-tomcat-6.0.18/lib/servlet-api.jar
apache-tomcat-6.0.18/lib/tomcat-coyote.jar
apache-tomcat-6.0.18/lib/tomcat-dbcp.jar
apache-tomcat-6.0.18/lib/tomcat-i18n-es.jar
apache-tomcat-6.0.18/lib/tomcat-i18n-fr.jar
apache-tomcat-6.0.18/lib/tomcat-i18n-ja.jar
apache-tomcat-6.0.18/temp/safeToDelete.tmp
apache-tomcat-6.0.18/webapps/ROOT/RELEASE-NOTES.txt
apache-tomcat-6.0.18/webapps/ROOT/WEB-INF/web.xml
apache-tomcat-6.0.18/webapps/ROOT/asf-logo-wide.gif
apache-tomcat-6.0.18/webapps/ROOT/build.xml
apache-tomcat-6.0.18/webapps/ROOT/favicon.ico
apache-tomcat-6.0.18/webapps/ROOT/index.html
apache-tomcat-6.0.18/webapps/ROOT/index.jsp
apache-tomcat-6.0.18/webapps/ROOT/tomcat-power.gif
apache-tomcat-6.0.18/webapps/ROOT/tomcat.gif
apache-tomcat-6.0.18/webapps/ROOT/tomcat.svg
apache-tomcat-6.0.18/webapps/docs/BUILDING.txt
apache-tomcat-6.0.18/webapps/docs/NOTICE
apache-tomcat-6.0.18/webapps/docs/RELEASE-NOTES.txt
apache-tomcat-6.0.18/webapps/docs/RUNNING.txt
apache-tomcat-6.0.18/webapps/docs/WEB-INF/web.xml
apache-tomcat-6.0.18/webapps/docs/aio.html
apache-tomcat-6.0.18/webapps/docs/api/index.html
apache-tomcat-6.0.18/webapps/docs/appdev/build.xml.txt
apache-tomcat-6.0.18/webapps/docs/appdev/deployment.html
apache-tomcat-6.0.18/webapps/docs/appdev/index.html
apache-tomcat-6.0.18/webapps/docs/appdev/installation.html
apache-tomcat-6.0.18/webapps/docs/appdev/introduction.html
apache-tomcat-6.0.18/webapps/docs/appdev/printer/deployment.html
apache-tomcat-6.0.18/webapps/docs/appdev/printer/docs/appdev/build.xml.txt
apache-tomcat-6.0.18/webapps/docs/appdev/printer/docs/appdev/web.xml.txt
apache-tomcat-6.0.18/webapps/docs/appdev/printer/index.html
apache-tomcat-6.0.18/webapps/docs/appdev/printer/installation.html
apache-tomcat-6.0.18/webapps/docs/appdev/printer/introduction.html
apache-tomcat-6.0.18/webapps/docs/appdev/printer/processes.html
apache-tomcat-6.0.18/webapps/docs/appdev/printer/source.html
apache-tomcat-6.0.18/webapps/docs/appdev/processes.html
apache-tomcat-6.0.18/webapps/docs/appdev/sample/build.xml
apache-tomcat-6.0.18/webapps/docs/appdev/sample/docs/README.txt
apache-tomcat-6.0.18/webapps/docs/appdev/sample/index.html
apache-tomcat-6.0.18/webapps/docs/appdev/sample/sample.war
apache-tomcat-6.0.18/webapps/docs/appdev/sample/src/mypackage/Hello.java
apache-tomcat-6.0.18/webapps/docs/appdev/sample/web/WEB-INF/web.xml
apache-tomcat-6.0.18/webapps/docs/appdev/sample/web/hello.jsp
apache-tomcat-6.0.18/webapps/docs/appdev/sample/web/images/tomcat.gif
apache-tomcat-6.0.18/webapps/docs/appdev/sample/web/index.html
apache-tomcat-6.0.18/webapps/docs/appdev/source.html
apache-tomcat-6.0.18/webapps/docs/appdev/web.xml.txt
apache-tomcat-6.0.18/webapps/docs/apr.html
apache-tomcat-6.0.18/webapps/docs/architecture/index.html
apache-tomcat-6.0.18/webapps/docs/architecture/overview.html
apache-tomcat-6.0.18/webapps/docs/architecture/printer/index.html
apache-tomcat-6.0.18/webapps/docs/architecture/printer/overview.html
apache-tomcat-6.0.18/webapps/docs/architecture/printer/requestProcess.html
apache-tomcat-6.0.18/webapps/docs/architecture/printer/startup.html
apache-tomcat-6.0.18/webapps/docs/architecture/requestProcess.html
apache-tomcat-6.0.18/webapps/docs/architecture/requestProcess/requestProcess.pdf
apache-tomcat-6.0.18/webapps/docs/architecture/requestProcess/roseModel.mdl
apache-tomcat-6.0.18/webapps/docs/architecture/startup.html
apache-tomcat-6.0.18/webapps/docs/architecture/startup/serverStartup.pdf
apache-tomcat-6.0.18/webapps/docs/architecture/startup/serverStartup.txt
apache-tomcat-6.0.18/webapps/docs/balancer-howto.html
apache-tomcat-6.0.18/webapps/docs/building.html
apache-tomcat-6.0.18/webapps/docs/cgi-howto.html
apache-tomcat-6.0.18/webapps/docs/changelog.html
apache-tomcat-6.0.18/webapps/docs/class-loader-howto.html
apache-tomcat-6.0.18/webapps/docs/cluster-howto.html
apache-tomcat-6.0.18/webapps/docs/config/ajp.html
apache-tomcat-6.0.18/webapps/docs/config/cluster-channel.html
apache-tomcat-6.0.18/webapps/docs/config/cluster-deployer.html
apache-tomcat-6.0.18/webapps/docs/config/cluster-interceptor.html
apache-tomcat-6.0.18/webapps/docs/config/cluster-listener.html
apache-tomcat-6.0.18/webapps/docs/config/cluster-manager.html
apache-tomcat-6.0.18/webapps/docs/config/cluster-membership.html
apache-tomcat-6.0.18/webapps/docs/config/cluster-receiver.html
apache-tomcat-6.0.18/webapps/docs/config/cluster-sender.html
apache-tomcat-6.0.18/webapps/docs/config/cluster-valve.html
apache-tomcat-6.0.18/webapps/docs/config/cluster.html
apache-tomcat-6.0.18/webapps/docs/config/context.html
apache-tomcat-6.0.18/webapps/docs/config/engine.html
apache-tomcat-6.0.18/webapps/docs/config/executor.html
apache-tomcat-6.0.18/webapps/docs/config/globalresources.html
apache-tomcat-6.0.18/webapps/docs/config/host.html
apache-tomcat-6.0.18/webapps/docs/config/http.html
apache-tomcat-6.0.18/webapps/docs/config/index.html
apache-tomcat-6.0.18/webapps/docs/config/loader.html
apache-tomcat-6.0.18/webapps/docs/config/manager.html
apache-tomcat-6.0.18/webapps/docs/config/printer/ajp.html
apache-tomcat-6.0.18/webapps/docs/config/printer/cluster-channel.html
apache-tomcat-6.0.18/webapps/docs/config/printer/cluster-deployer.html
apache-tomcat-6.0.18/webapps/docs/config/printer/cluster-interceptor.html
apache-tomcat-6.0.18/webapps/docs/config/printer/cluster-listener.html
apache-tomcat-6.0.18/webapps/docs/config/printer/cluster-manager.html
apache-tomcat-6.0.18/webapps/docs/config/printer/cluster-membership.html
apache-tomcat-6.0.18/webapps/docs/config/printer/cluster-receiver.html
apache-tomcat-6.0.18/webapps/docs/config/printer/cluster-sender.html
apache-tomcat-6.0.18/webapps/docs/config/printer/cluster-valve.html
apache-tomcat-6.0.18/webapps/docs/config/printer/cluster.html
apache-tomcat-6.0.18/webapps/docs/config/printer/context.html
apache-tomcat-6.0.18/webapps/docs/config/printer/engine.html
apache-tomcat-6.0.18/webapps/docs/config/printer/executor.html
apache-tomcat-6.0.18/webapps/docs/config/printer/globalresources.html
apache-tomcat-6.0.18/webapps/docs/config/printer/host.html
apache-tomcat-6.0.18/webapps/docs/config/printer/http.html
apache-tomcat-6.0.18/webapps/docs/config/printer/index.html
apache-tomcat-6.0.18/webapps/docs/config/printer/loader.html
apache-tomcat-6.0.18/webapps/docs/config/printer/manager.html
apache-tomcat-6.0.18/webapps/docs/config/printer/realm.html
apache-tomcat-6.0.18/webapps/docs/config/printer/resources.html
apache-tomcat-6.0.18/webapps/docs/config/printer/server.html
apache-tomcat-6.0.18/webapps/docs/config/printer/service.html
apache-tomcat-6.0.18/webapps/docs/config/printer/systemprops.html
apache-tomcat-6.0.18/webapps/docs/config/printer/valve.html
apache-tomcat-6.0.18/webapps/docs/config/realm.html
apache-tomcat-6.0.18/webapps/docs/config/resources.html
apache-tomcat-6.0.18/webapps/docs/config/server.html
apache-tomcat-6.0.18/webapps/docs/config/service.html
apache-tomcat-6.0.18/webapps/docs/config/systemprops.html
apache-tomcat-6.0.18/webapps/docs/config/valve.html
apache-tomcat-6.0.18/webapps/docs/connectors.html
apache-tomcat-6.0.18/webapps/docs/default-servlet.html
apache-tomcat-6.0.18/webapps/docs/deployer-howto.html
apache-tomcat-6.0.18/webapps/docs/developers.html
apache-tomcat-6.0.18/webapps/docs/extras.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/fs-admin-apps.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/fs-admin-objects.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/fs-admin-opers.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/fs-default.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/fs-invoker.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/fs-jdbc-realm.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/fs-jndi-realm.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/fs-memory-realm.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/index.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/mbean-names.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/printer/fs-admin-apps.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/printer/fs-admin-objects.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/printer/fs-admin-opers.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/printer/fs-default.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/printer/fs-invoker.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/printer/fs-jdbc-realm.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/printer/fs-jndi-realm.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/printer/fs-memory-realm.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/printer/index.html
apache-tomcat-6.0.18/webapps/docs/funcspecs/printer/mbean-names.html
apache-tomcat-6.0.18/webapps/docs/html-manager-howto.html
apache-tomcat-6.0.18/webapps/docs/images/add.gif
apache-tomcat-6.0.18/webapps/docs/images/asf-logo.gif
apache-tomcat-6.0.18/webapps/docs/images/code.gif
apache-tomcat-6.0.18/webapps/docs/images/design.gif
apache-tomcat-6.0.18/webapps/docs/images/docs.gif
apache-tomcat-6.0.18/webapps/docs/images/fix.gif
apache-tomcat-6.0.18/webapps/docs/images/printer.gif
apache-tomcat-6.0.18/webapps/docs/images/tomcat.gif
apache-tomcat-6.0.18/webapps/docs/images/tomcat.svg
apache-tomcat-6.0.18/webapps/docs/images/update.gif
apache-tomcat-6.0.18/webapps/docs/images/void.gif
apache-tomcat-6.0.18/webapps/docs/index.html
apache-tomcat-6.0.18/webapps/docs/introduction.html
apache-tomcat-6.0.18/webapps/docs/jasper-howto.html
apache-tomcat-6.0.18/webapps/docs/jndi-datasource-examples-howto.html
apache-tomcat-6.0.18/webapps/docs/jndi-resources-howto.html
apache-tomcat-6.0.18/webapps/docs/logging.html
apache-tomcat-6.0.18/webapps/docs/manager-howto.html
apache-tomcat-6.0.18/webapps/docs/maven-jars.html
apache-tomcat-6.0.18/webapps/docs/mbeans-descriptor-howto.html
apache-tomcat-6.0.18/webapps/docs/monitoring.html
apache-tomcat-6.0.18/webapps/docs/printer/BUILDING.txt
apache-tomcat-6.0.18/webapps/docs/printer/NOTICE
apache-tomcat-6.0.18/webapps/docs/printer/RUNNING.txt
apache-tomcat-6.0.18/webapps/docs/printer/aio.html
apache-tomcat-6.0.18/webapps/docs/printer/apr.html
apache-tomcat-6.0.18/webapps/docs/printer/balancer-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/building.html
apache-tomcat-6.0.18/webapps/docs/printer/cgi-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/changelog.html
apache-tomcat-6.0.18/webapps/docs/printer/class-loader-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/cluster-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/connectors.html
apache-tomcat-6.0.18/webapps/docs/printer/default-servlet.html
apache-tomcat-6.0.18/webapps/docs/printer/deployer-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/developers.html
apache-tomcat-6.0.18/webapps/docs/printer/extras.html
apache-tomcat-6.0.18/webapps/docs/printer/html-manager-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/index.html
apache-tomcat-6.0.18/webapps/docs/printer/introduction.html
apache-tomcat-6.0.18/webapps/docs/printer/jasper-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/jndi-datasource-examples-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/jndi-resources-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/logging.html
apache-tomcat-6.0.18/webapps/docs/printer/manager-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/maven-jars.html
apache-tomcat-6.0.18/webapps/docs/printer/mbeans-descriptor-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/monitoring.html
apache-tomcat-6.0.18/webapps/docs/printer/proxy-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/realm-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/security-manager-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/setup.html
apache-tomcat-6.0.18/webapps/docs/printer/ssi-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/ssl-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/virtual-hosting-howto.html
apache-tomcat-6.0.18/webapps/docs/printer/windows-service-howto.html
apache-tomcat-6.0.18/webapps/docs/proxy-howto.html
apache-tomcat-6.0.18/webapps/docs/realm-howto.html
apache-tomcat-6.0.18/webapps/docs/security-manager-howto.html
apache-tomcat-6.0.18/webapps/docs/setup.html
apache-tomcat-6.0.18/webapps/docs/ssi-howto.html
apache-tomcat-6.0.18/webapps/docs/ssl-howto.html
apache-tomcat-6.0.18/webapps/docs/tribes/faq.html
apache-tomcat-6.0.18/webapps/docs/tribes/introduction.html
apache-tomcat-6.0.18/webapps/docs/tribes/setup.html
apache-tomcat-6.0.18/webapps/docs/virtual-hosting-howto.html
apache-tomcat-6.0.18/webapps/docs/windows-service-howto.html
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/CookieExample.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/CookieExample.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/HelloWorldExample.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/HelloWorldExample.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/LocalStrings.properties
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/LocalStrings_en.properties
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/LocalStrings_es.properties
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/LocalStrings_fr.properties
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/LocalStrings_pt.properties
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/RequestHeaderExample.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/RequestHeaderExample.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/RequestInfoExample.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/RequestInfoExample.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/RequestParamExample.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/RequestParamExample.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/SessionExample.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/SessionExample.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/cal/Entries.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/cal/Entries.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/cal/Entry.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/cal/Entry.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/cal/JspCalendar.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/cal/JspCalendar.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/cal/TableBean.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/cal/TableBean.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/chat/ChatServlet$MessageSender.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/chat/ChatServlet.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/chat/ChatServlet.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/checkbox/CheckTest.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/checkbox/CheckTest.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/colors/ColorGameBean.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/colors/ColorGameBean.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilter.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilter.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilterTestServlet.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/compressionFilters/CompressionFilterTestServlet.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/compressionFilters/CompressionResponseStream.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/compressionFilters/CompressionServletResponseWrapper.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/dates/JspCalendar.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/dates/JspCalendar.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/error/Smart.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/error/Smart.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/examples/ExampleTagBase.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/examples/ExampleTagBase.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/examples/FooTag.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/examples/FooTag.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/examples/FooTagExtraInfo.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/examples/FooTagExtraInfo.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/examples/LogTag.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/examples/LogTag.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/examples/ShowSource.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/examples/ShowSource.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/filters/ExampleFilter.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/filters/ExampleFilter.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/filters/RequestDumperFilter.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/filters/RequestDumperFilter.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/filters/SetCharacterEncodingFilter.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/BookBean.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/BookBean.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/FooBean.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/FooBean.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/el/Functions.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/el/Functions.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/EchoAttributesTag.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/EchoAttributesTag.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/FindBookSimpleTag.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/FindBookSimpleTag.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/HelloWorldSimpleTag.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/HelloWorldSimpleTag.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/RepeatSimpleTag.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/RepeatSimpleTag.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/ShuffleSimpleTag.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/ShuffleSimpleTag.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/TileSimpleTag.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/jsp2/examples/simpletag/TileSimpleTag.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/listeners/ContextListener.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/listeners/ContextListener.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/listeners/SessionListener.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/listeners/SessionListener.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/num/NumberGuessBean.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/num/NumberGuessBean.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/servletToJsp.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/servletToJsp.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/sessions/DummyCart.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/sessions/DummyCart.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/util/HTMLFilter.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/util/HTMLFilter.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/validators/DebugValidator.class
apache-tomcat-6.0.18/webapps/examples/WEB-INF/classes/validators/DebugValidator.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/jsp/applet/Clock2.java
apache-tomcat-6.0.18/webapps/examples/WEB-INF/jsp/debug-taglib.tld
apache-tomcat-6.0.18/webapps/examples/WEB-INF/jsp/example-taglib.tld
apache-tomcat-6.0.18/webapps/examples/WEB-INF/jsp2/jsp2-example-taglib.tld
apache-tomcat-6.0.18/webapps/examples/WEB-INF/lib/jstl.jar
apache-tomcat-6.0.18/webapps/examples/WEB-INF/lib/standard.jar
apache-tomcat-6.0.18/webapps/examples/WEB-INF/tags/displayProducts.tag
apache-tomcat-6.0.18/webapps/examples/WEB-INF/tags/helloWorld.tag
apache-tomcat-6.0.18/webapps/examples/WEB-INF/tags/panel.tag
apache-tomcat-6.0.18/webapps/examples/WEB-INF/tags/xhtmlbasic.tag
apache-tomcat-6.0.18/webapps/examples/WEB-INF/web.xml
apache-tomcat-6.0.18/webapps/examples/index.html
apache-tomcat-6.0.18/webapps/examples/jsp/cal/Entries.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/cal/Entry.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/cal/JspCalendar.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/cal/TableBean.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/cal/cal1.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/cal/cal1.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/cal/cal2.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/cal/cal2.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/cal/calendar.html
apache-tomcat-6.0.18/webapps/examples/jsp/cal/login.html
apache-tomcat-6.0.18/webapps/examples/jsp/chat/chat.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/chat/chat.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/chat/login.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/chat/login.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/chat/post.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/chat/post.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/checkbox/CheckTest.html
apache-tomcat-6.0.18/webapps/examples/jsp/checkbox/check.html
apache-tomcat-6.0.18/webapps/examples/jsp/checkbox/checkresult.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/checkbox/checkresult.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/checkbox/cresult.html
apache-tomcat-6.0.18/webapps/examples/jsp/colors/ColorGameBean.html
apache-tomcat-6.0.18/webapps/examples/jsp/colors/clr.html
apache-tomcat-6.0.18/webapps/examples/jsp/colors/colors.html
apache-tomcat-6.0.18/webapps/examples/jsp/colors/colrs.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/colors/colrs.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/dates/date.html
apache-tomcat-6.0.18/webapps/examples/jsp/dates/date.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/dates/date.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/error/er.html
apache-tomcat-6.0.18/webapps/examples/jsp/error/err.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/error/err.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/error/error.html
apache-tomcat-6.0.18/webapps/examples/jsp/error/errorpge.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/error/errorpge.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/forward/forward.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/forward/forward.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/forward/fwd.html
apache-tomcat-6.0.18/webapps/examples/jsp/forward/one.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/forward/one.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/forward/two.html
apache-tomcat-6.0.18/webapps/examples/jsp/images/code.gif
apache-tomcat-6.0.18/webapps/examples/jsp/images/execute.gif
apache-tomcat-6.0.18/webapps/examples/jsp/images/read.gif
apache-tomcat-6.0.18/webapps/examples/jsp/images/return.gif
apache-tomcat-6.0.18/webapps/examples/jsp/include/foo.html
apache-tomcat-6.0.18/webapps/examples/jsp/include/foo.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/include/foo.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/include/inc.html
apache-tomcat-6.0.18/webapps/examples/jsp/include/include.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/include/include.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/index.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/Functions.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/basic-arithmetic.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/basic-arithmetic.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/basic-arithmetic.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/basic-comparisons.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/basic-comparisons.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/basic-comparisons.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/functions.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/functions.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/functions.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/implicit-objects.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/implicit-objects.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/el/implicit-objects.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspattribute/FooBean.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspattribute/HelloWorldSimpleTag.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspattribute/ShuffleSimpleTag.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspattribute/TileSimpleTag.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspattribute/jspattribute.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspattribute/jspattribute.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspattribute/jspattribute.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspattribute/shuffle.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspattribute/shuffle.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspattribute/shuffle.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspx/basic.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspx/basic.jspx
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspx/basic.jspx.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspx/svgexample.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspx/textRotate.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspx/textRotate.jpg
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspx/textRotate.jspx
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/jspx/textRotate.jspx.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/misc/EchoAttributesTag.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/misc/coda.jspf
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/misc/coda.jspf.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/misc/config.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/misc/config.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/misc/config.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/misc/dynamicattrs.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/misc/dynamicattrs.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/misc/dynamicattrs.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/misc/prelude.jspf
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/misc/prelude.jspf.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/BookBean.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/FindBookSimpleTag.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/Functions.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/HelloWorldSimpleTag.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/RepeatSimpleTag.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/book.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/book.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/book.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/hello.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/hello.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/hello.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/repeat.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/repeat.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/simpletag/repeat.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/displayProducts.tag.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/hello.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/hello.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/hello.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/helloWorld.tag.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/panel.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/panel.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/panel.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/panel.tag.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/products.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/products.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/products.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsp2/tagfiles/xhtmlbasic.tag.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsptoserv/hello.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsptoserv/hello.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsptoserv/jsptoservlet.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/jsptoserv/jsptoservlet.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsptoserv/jts.html
apache-tomcat-6.0.18/webapps/examples/jsp/jsptoserv/servletToJsp.java.html
apache-tomcat-6.0.18/webapps/examples/jsp/num/numguess.html
apache-tomcat-6.0.18/webapps/examples/jsp/num/numguess.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/num/numguess.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/plugin/applet/Clock2.class
apache-tomcat-6.0.18/webapps/examples/jsp/plugin/applet/Clock2.java
apache-tomcat-6.0.18/webapps/examples/jsp/plugin/plugin.html
apache-tomcat-6.0.18/webapps/examples/jsp/plugin/plugin.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/plugin/plugin.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/security/protected/error.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/security/protected/error.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/security/protected/index.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/security/protected/index.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/security/protected/login.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/security/protected/login.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/sessions/DummyCart.html
apache-tomcat-6.0.18/webapps/examples/jsp/sessions/carts.html
apache-tomcat-6.0.18/webapps/examples/jsp/sessions/carts.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/sessions/carts.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/sessions/crt.html
apache-tomcat-6.0.18/webapps/examples/jsp/simpletag/foo.html
apache-tomcat-6.0.18/webapps/examples/jsp/simpletag/foo.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/simpletag/foo.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/snp/snoop.html
apache-tomcat-6.0.18/webapps/examples/jsp/snp/snoop.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/snp/snoop.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/source.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/source.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/tagplugin/choose.html
apache-tomcat-6.0.18/webapps/examples/jsp/tagplugin/choose.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/tagplugin/choose.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/tagplugin/foreach.html
apache-tomcat-6.0.18/webapps/examples/jsp/tagplugin/foreach.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/tagplugin/foreach.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/tagplugin/howto.html
apache-tomcat-6.0.18/webapps/examples/jsp/tagplugin/if.html
apache-tomcat-6.0.18/webapps/examples/jsp/tagplugin/if.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/tagplugin/if.jsp.html
apache-tomcat-6.0.18/webapps/examples/jsp/tagplugin/notes.html
apache-tomcat-6.0.18/webapps/examples/jsp/xml/xml.html
apache-tomcat-6.0.18/webapps/examples/jsp/xml/xml.jsp
apache-tomcat-6.0.18/webapps/examples/jsp/xml/xml.jsp.html
apache-tomcat-6.0.18/webapps/examples/servlets/cookies.html
apache-tomcat-6.0.18/webapps/examples/servlets/helloworld.html
apache-tomcat-6.0.18/webapps/examples/servlets/images/code.gif
apache-tomcat-6.0.18/webapps/examples/servlets/images/execute.gif
apache-tomcat-6.0.18/webapps/examples/servlets/images/return.gif
apache-tomcat-6.0.18/webapps/examples/servlets/index.html
apache-tomcat-6.0.18/webapps/examples/servlets/reqheaders.html
apache-tomcat-6.0.18/webapps/examples/servlets/reqinfo.html
apache-tomcat-6.0.18/webapps/examples/servlets/reqparams.html
apache-tomcat-6.0.18/webapps/examples/servlets/sessions.html
apache-tomcat-6.0.18/webapps/host-manager/META-INF/context.xml
apache-tomcat-6.0.18/webapps/host-manager/WEB-INF/web.xml
apache-tomcat-6.0.18/webapps/host-manager/images/add.gif
apache-tomcat-6.0.18/webapps/host-manager/images/asf-logo.gif
apache-tomcat-6.0.18/webapps/host-manager/images/code.gif
apache-tomcat-6.0.18/webapps/host-manager/images/design.gif
apache-tomcat-6.0.18/webapps/host-manager/images/docs.gif
apache-tomcat-6.0.18/webapps/host-manager/images/fix.gif
apache-tomcat-6.0.18/webapps/host-manager/images/tomcat.gif
apache-tomcat-6.0.18/webapps/host-manager/images/update.gif
apache-tomcat-6.0.18/webapps/host-manager/images/void.gif
apache-tomcat-6.0.18/webapps/host-manager/manager.xml
apache-tomcat-6.0.18/webapps/manager/401.jsp
apache-tomcat-6.0.18/webapps/manager/META-INF/context.xml
apache-tomcat-6.0.18/webapps/manager/WEB-INF/web.xml
apache-tomcat-6.0.18/webapps/manager/images/add.gif
apache-tomcat-6.0.18/webapps/manager/images/asf-logo.gif
apache-tomcat-6.0.18/webapps/manager/images/code.gif
apache-tomcat-6.0.18/webapps/manager/images/design.gif
apache-tomcat-6.0.18/webapps/manager/images/docs.gif
apache-tomcat-6.0.18/webapps/manager/images/fix.gif
apache-tomcat-6.0.18/webapps/manager/images/tomcat.gif
apache-tomcat-6.0.18/webapps/manager/images/update.gif
apache-tomcat-6.0.18/webapps/manager/images/void.gif
apache-tomcat-6.0.18/webapps/manager/sessionDetail.jsp
apache-tomcat-6.0.18/webapps/manager/sessionsList.jsp
apache-tomcat-6.0.18/webapps/manager/status.xsd
apache-tomcat-6.0.18/webapps/manager/xform.xsl
所以安裝完後的路徑為 /opt/pache-tomcat-6.0.18,緊接著我們將 Tomcat 的目錄搬到 /opt/tomcat 去:
[root@KHXPROVS1 opt]# mv /opt/apache-tomcat-6.0.18 /opt/tomcat
[root@KHXPROVS1 opt]# ls -al
total 292800
drwxr-xr-x 6 root root 4096 Sep 8 16:14 .
drwxr-xr-x 25 root root 4096 Sep 4 10:43 ..
-rw-r--r-- 1 root root 6142197 Sep 3 19:04 apache-tomcat-6.0.18.tar.gz
drwxrwxrwx 8 501 501 4096 Jul 1 14:36 iperf-2.0.4
-rw-r--r-- 1 root root 248493 Jul 1 14:35 iperf-2.0.4.tar.gz
-rw-r--r-- 1 root root 61764 Sep 4 11:09 java-1.6.0-sun-compat-1.6.0.07-1jpp.i586.rpm
-rw-r--r-- 1 root root 65414959 Jun 10 18:38 jdk-6u7-linux-i586.rpm
-rwxr-xr-x 1 root root 74397909 Sep 4 09:37 jdk-6u7-linux-i586-rpm.bin
-rw-r--r-- 1 root root 19463427 Jun 10 18:36 jre-6u7-linux-i586.rpm
-rwxr-xr-x 1 root root 19216086 Sep 4 10:31 jre-6u7-linux-i586-rpm.bin
drwx------ 2 root root 16384 Jun 25 22:22 lost+found
drwxr-xr-x 3 root root 4096 Sep 4 09:40 sun
-rw-r--r-- 1 root root 463678 Aug 20 2007 sun-javadb-client-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 62801 Aug 20 2007 sun-javadb-common-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 3655834 Aug 20 2007 sun-javadb-core-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 996942 Aug 20 2007 sun-javadb-demo-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 4290799 Aug 20 2007 sun-javadb-docs-10.3.1-4.1.i386.rpm
-rw-r--r-- 1 root root 123721 Aug 20 2007 sun-javadb-javadoc-10.3.1-4.1.i386.rpm
drwxr-xr-x 9 root root 4096 Sep 4 11:24 tomcat
好了,安裝很簡單吧,接著要更改一下 Tomcat 的環境設定,主要是將下列兩行加進去:export JAVA_HOME=/usr/java/jdk1.6.0_07
export TOMCAT_HOME=/opt/tomcat
[root@KHXPROVS1 opt]# vi /etc/profile
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

pathmunge () {
if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
fi
}

# Path manipulation
if [ `id -u` = 0 ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi

pathmunge /usr/X11R6/bin after


# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"

HOSTNAME=`/bin/hostname`
HISTSIZE=1000

if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
INPUTRC=/etc/inputrc
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
. $i
fi
done

unset i
unset pathmunge

########## for TOMCAT env. setup ######################
export JAVA_HOME=/usr/java/jdk1.6.0_07
export TOMCAT_HOME=/opt/tomcat
export CATALINA_BASE=/opt/tomcat
export CATALINA_HOME=/opt/tomcat
export CLASSPATH=./:${JAVA_HOME}/lib:${JAVA_HOME}/jre/lib/ext:${CATALINA_HOME}/common/lib
export PATH=${JAVA_HOME}/bin:${CATALINA_HOME}/bin:${PATH}
"/etc/profile" 53L, 983C written
直接讓目前的設定值生效:
[root@KHXPROVS1 opt]# source /etc/profile
設定環境變數,一樣的直接去修改 .bashrc 文件吧:
[root@KHXPROVS1 opt]# vi ~/.bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vi='vim'

TERM=xterm-color; export TERM;

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

export JAVA_HOME=/usr/java/jdk1.6.0_07
export CATALINA_BASE=/opt/tomcat
export CATALINA_HOME=/opt/tomcat
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/opt/tomcat
"~/.bashrc" 22L, 459C
存檔然後離開這個 shell 再進來一次:
[root@KHXPROVS1 opt]# exit
logout
設定到這裡已經差不多囉,接著我們就來測試一下吧:
首先來啟動 Tomcat 服務試試看:
[root@KHXPROVS1 opt]# /opt/tomcat/bin/startup.sh
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.6.0_07
[root@KHXPROVS1 ~]# ps -aef|grep tomcat
root 14377 1 23 16:49 pts/4 00:00:02 /usr/java/jdk1.6.0_07/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.endorsed.dirs=/opt/tomcat/endorsed -classpath :/opt/tomcat/bin/bootstrap.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 14403 14302 0 16:49 pts/4 00:00:00 grep tomcat
[root@KHXPROVS1 ~]#
最後在瀏覽器中輸入 http://localhost:8080/ 便可看到 Tomcat 的 log 了, 到此安裝告一段落。

另外再測試一下關掉 Tomcat 吧:
[root@KHXPROVS1 opt]# /opt/tomcat/bin/shutdown.sh
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.6.0_07
[root@KHXPROVS1 opt]#
(詳全文...)

MSN 錯誤代碼 8100030d 的解決方法

今天上班習慣性的想打開 MSN,突然發現 MSN 一直登入失敗,向 Google 大神拜請之後才發現解決之道。以下是解決的方法,記錄下來以供日後參考:

首先是錯誤訊息的出現:
用記事本打開 C:\WINDOWS\system32\drivers\etc\hosts 檔案,在最下方加入下列2行:
65.54.239.80 messenger.hotmail.com
65.54.239.80 dp.msnmessenger.akadns.net
存檔後退出記事本。
這時候機器安裝有防毒軟體的話,可能會彈出警告提示框,記得選擇允許修改。(因為剛才我們修改的是 Windows 路由信息設置檔,是防毒軟體保護的系統文件檔。)

現在再重新連一次 MSN,可以成功登入囉...
(詳全文...)

LINUX DHCP 實作 (二)

在將之前設定好的 DHCP server 設定好之後,這裡要實作將所要派發的 IP range 從 10.69.0.0/16 改成 172.16.16.0/20 (172.16.16.0 ~ 172.16.31.255),另外還要將 172.16.31.0/24 另外做成給一些測試機器作為派發固定 IP 使用。

首先,先作改 IP range 的部分,由於我需要將每個 Class-C 的最後 4 個 IP 保留做後用,另外 network 以及 broadcast 的兩個 IP 也要避開不作派發,另外,在第一個 Class-C 的前 30 個 IP 也要保留作以後測試使用,所以,目前的例子我需要將 IP Pool 改成:
172.16.16.31 ~ 172.16.16.250 + 172.16.17.1 ~ 172.16.17.250 + 172.16.18.1 ~ 172.16.18.250 + 172.16.19.1 ~ 172.16.19.250 + 172.16.20.1 ~ 172.16.20.250 + 172.16.21.1 ~ 172.16.21.250 + 172.16.22.1 ~ 172.16.22.250 + 172.16.23.1 ~ 172.16.23.250 + 172.16.24.1 ~ 172.16.24.250 + 172.16.25.1 ~ 172.16.25.250 + 172.16.26.1 ~ 172.16.26.250 + 172.16.27.1 ~ 172.16.27.250 + 172.16.28.1 ~ 172.16.28.250 + 172.16.29.1 ~ 172.16.29.250 + 172.16.30.1 ~ 172.16.30.250 (另外將 172.16.31.1 ~ 172.16.31.250 先 mark 起來當註解), 由於中間有保留的 IP,所以在設定檔裡自然不能直接用 range 172.16.16.31 172.16.30.250 的寫法,下面便是我的設定檔,其中每個 range 中間用 ; 隔開來,我先列出 DHCP1 MASTER server 的設定:
[root@KHXDHCPS1 ~]# cat /etc/dhcpd.conf
ddns-update-style none;
ignore client-updates;
#ignore unknown-clients;

authoritative;
failover peer "dhcp-failover" {
primary; # declare this to be the primary server
address 10.16.25.30;
port 690;
peer address 10.16.25.31;
peer port 691;
max-response-delay 30;
max-unacked-updates 10;
load balance max seconds 3;
mclt 1800;
split 128;
}

subnet 0.0.0.0 netmask 0.0.0.0 {
option routers 172.16.31.254;
option subnet-mask 255.255.240.0;
option mobile-ip-home-agent 10.16.25.35;
#option mobile-ip-home-agent 172.16.31.254;
option domain-name-servers 168.95.1.1;
default-lease-time 21600;
max-lease-time 43200;
pool {
failover peer "dhcp-failover";

range 172.16.16.31 172.16.16.250;
range 172.16.17.1 172.16.17.250;
range 172.16.18.1 172.16.18.250;
range 172.16.19.1 172.16.19.250;
range 172.16.20.1 172.16.20.250;
range 172.16.21.1 172.16.21.250;
range 172.16.22.1 172.16.22.250;
range 172.16.23.1 172.16.23.250;
range 172.16.24.1 172.16.24.250;
range 172.16.25.1 172.16.25.250;
range 172.16.26.1 172.16.26.250;
range 172.16.27.1 172.16.27.250;
range 172.16.28.1 172.16.28.250;
range 172.16.29.1 172.16.29.250;
range 172.16.30.1 172.16.30.250;
# range 172.16.31.1 172.16.31.250;
deny dynamic bootp clients;
}
}
[root@KHXDHCPS1 ~]#
接下來把兩台 DHCP server 的設定都更改一下,再把 dhcpd 的 service 重起一下:
[root@KHXDHCPS1 ~]# service dhcpd restart
Shutting down dhcpd: [ OK ]
Starting dhcpd: [ OK ]
記得看一下 log 檔,確認一下 dhcpd 的狀態喔:
[root@KHXDHCPS1 ~]# tail -f /var/log/messages
Aug 10 10:07:41 KHXDHCPS1 dhcpd: dhcpd startup succeeded
Aug 10 10:07:41 KHXDHCPS1 dhcpd: dhcpd startup succeeded
Aug 10 10:07:41 KHXDHCPS1 dhcpd: failover peer dhcp-failover: I move from startup to normal
Aug 10 10:07:41 KHXDHCPS1 dhcpd: failover peer dhcp-failover: peer moves from communications-interrupted to normal
Aug 10 10:07:41 KHXDHCPS1 dhcpd: pool 992c3a8 0/0 total 3720 free 2070 backup 1647 lts -211
Aug 10 10:07:48 KHXDHCPS1 dhcpd: peer dhcp-failover: disconnected
Aug 10 10:07:48 KHXDHCPS1 dhcpd: failover peer dhcp-failover: I move from normal to communications-interrupted
Aug 10 10:07:48 KHXDHCPS1 dhcpd: failover peer dhcp-failover: peer moves from normal to normal
Aug 10 10:07:48 KHXDHCPS1 dhcpd: failover peer dhcp-failover: I move from communications-interrupted to normal
Aug 10 10:07:48 KHXDHCPS1 dhcpd: pool 992c3a8 0/0 total 3720 free 2070 backup 1647 lts -211
接下找幾個機器去測試一下,的確可以派發到我所訂的 IP range 裡的 IP。

第二步就是將固定 IP 的部分加進設定檔,不過由於 怕有人在加新的固定 IP 的資料不小心誤改了 /etc/dhcpd.conf 的內容,所以,在這裡我們把固定 IP 的派發設定用另一檔來寫,然後包進 /etc/dhcpd.conf 來,首先我們將剛剛的設定檔在最後的 } 之前加上下面這一行:
include "/etc/dhcpd.static";
然後編輯一個新的檔案叫做 /etc/dhcpd.static 如下:
[root@KHXDHCPS1 ~]# cat /etc/dhcpd.static
host CPE1-static-for-test {
option host-name "CPE1staticTest.test.tw";
hardware ethernet 00:17:C4:12:77:7E;
fixed-address 172.16.30.200;
}
host CPE2-static-for-test {
hardware ethernet 00:17:C4:12:77:65;
fixed-address 172.16.30.150;
}
基本上只要給 MAC-address 跟你想派發的固定 IP 就可以了,以後要加新的機器就直接編輯這個檔就行了...

接下來把兩台 DHCP server 的設定都更改一下,再把 dhcpd 的 service 重起一下,一樣的記得看一下 log 檔,確認一下 dhcpd 的狀態喔。

再用自己的電腦測試一下,果然可以拿到 172.16.30.200 的 IP address。

附上 DHCP MASTER server 最後的 /etc/dhcpd.conf 的內容如下:
[root@KHXDHCPS1 ~]# cat /etc/dhcpd.conf
ddns-update-style none;
ignore client-updates;
#ignore unknown-clients;

authoritative;
failover peer "dhcp-failover" {
primary; # declare this to be the primary server
address 10.16.25.30;
port 690;
peer address 10.16.25.31;
peer port 691;
max-response-delay 30;
max-unacked-updates 10;
load balance max seconds 3;
mclt 1800;
split 128;
}

subnet 0.0.0.0 netmask 0.0.0.0 {
option routers 172.16.31.254;
option subnet-mask 255.255.240.0;
option mobile-ip-home-agent 10.16.25.35;
#option mobile-ip-home-agent 172.16.31.254;
option domain-name-servers 168.95.1.1;
default-lease-time 21600;
max-lease-time 43200;
pool {
failover peer "dhcp-failover";

range 172.16.16.31 172.16.16.250;
range 172.16.17.1 172.16.17.250;
range 172.16.18.1 172.16.18.250;
range 172.16.19.1 172.16.19.250;
range 172.16.20.1 172.16.20.250;
range 172.16.21.1 172.16.21.250;
range 172.16.22.1 172.16.22.250;
range 172.16.23.1 172.16.23.250;
range 172.16.24.1 172.16.24.250;
range 172.16.25.1 172.16.25.250;
range 172.16.26.1 172.16.26.250;
range 172.16.27.1 172.16.27.250;
range 172.16.28.1 172.16.28.250;
range 172.16.29.1 172.16.29.250;
range 172.16.30.1 172.16.30.250;
# range 172.16.31.1 172.16.31.250;

deny dynamic bootp clients;
}

include "/etc/dhcpd.static";

}


其他相關的設定部分可以參考:LINUX DHCP (Dynamic Host Configuration Protocol) Failover 實作
(詳全文...)

沒放到颱風假的颱風天啊

昨天卡玫基颱風侵台,南台灣到處都是大風大雨,雖然我們是窩在客戶的機房裡,依然可以感受到機房鐵皮蓋外面那股恐怖的風力和磅礡的雨勢,從吃完午餐開始下,到一點多時,整個機房外面已經都被積水給包圍了,連客戶的長官來巡察機房都得捲起褲管,渡過水深過膝的積水區,才能進到機房來。

首先這是由機房上方鐵皮沿著排水管所接下來的積水,看得出雨勢很大,排水量也很大:
前面一點的地方地勢稍高,倒是沒有像機房前面積水這麼深:
倒是靠機房前方的積水已經到了膝蓋以上,每個人都得捲起褲管才能進出說:
下班要離開時,才發現車子居然發動不了,原來今天早上太匆忙了,居然沒關大燈!!!幸好 Fred 還沒離開太遠,兩人七手八腳在大風大雨中過電,終於讓小ㄅㄨㄅㄨ發動起來,不過,身上也已經從裡到外全濕透了,趕忙開向高雄市區的飯店,準備回去洗個暖呼呼的熱水澡,沒想到....
往高速公路岡山交流道的路居然都淹水了,沿路看到一堆機車騎士推著機車逆向推著車走回來,而且汽車完全動不了,沿路以時速還不到5公里慢慢的推進,而且,到了一段距離後來被指揮交通的人員說"前方路段淹水已經封閉",要我們改道行駛,在我換了四條路線之後,才發現往高雄市區的路幾乎都不通了,只好改北邊往路竹方向前進,再由路竹交流倒轉回高雄九如....在歷經將近5個小時的車程之後,終於在10點多回到了飯店,唉,5個小時,都可以三峽跟台南老家間往返一次了說,沒想到沒放到颱風假,還被困高雄淹水區,真是讓人嘔氣啊....

今天的雨勢已經稍小了,但岡山的機房依舊是積水:
還好今天大家都長記性學聰明了,大多穿著短褲拖鞋來上班,一副來觀光的痞子樣說....呵呵....
要來送貨的小貨車一樣得涉水開進來,幸好積水已經沒那麼深了:
(詳全文...)

把 SELinux 關閉的方法

網路上看到的,先當筆記吧...
vi /etc/sysconfig/selinux
找到 SELINUX=enforcing 並改成 SELINUX=disabled
重啟動測試:
setsebool -P httpd_disable_trans=1
(詳全文...)

LINUX DHCP (Dynamic Host Configuration Protocol) Failover 實作

在完成單台 DHCP server 的設定後,便是開始兩台 DHCP server redundancy 的實作囉,在 DHCP failover 中,有分成 Primary server 和 Secondry server,這裡要做的例子是:
第一台 Primary DHCP server (Host name: KHXDHCPS1, IP: 10.69.10.30)
第二台 Secondary DHCP server (Host name: KHXDHCPS2, IP: 10.69.10.31)
這兩台都是 RedHat EL ES4 Update6,dhcpd 的版本是 dhcp-3.0.1-59.EL4。

接下來的部分我將要讓 DHCP client 連上來時取得一個 10.69.100.1~10.69.100.240 之間
的 IP address (Netmask:255.255.255.0),Default gateway 為:10.69.100.254。

這裡我的 dhcpd 是跑在 eth0, 如果有需要跑在另一張網卡的話,可以自行去修改/etc/sysconfig/dhcpd 的內容:
例如要跑在eth1的話:
[root@KHXDHCPS1 ~]# cat /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=eth1
當然也可以直接去修改 start 那一段:
start() {
# Start daemons.
echo -n $"Starting $prog: "

daemon /usr/sbin/dhcpd ${DHCPDARGS} 2>/dev/null

上面的第三行便是定義 dhcpd daemon 啟動時的 option,其中 ${DHCPDARGS} 就是剛剛 /etc/sysconfig/dhcpd 裡面給的值,
其他還有一些可用的 option 如下:
-f — 把 daemon 跑在 fg。這在測試時最常用。
-d — 把 DCHP daemon 記錄到標準錯誤描述器中。也是在測試時最常用。如果沒指定將被寫入 /var/log/messages。
-cf filename — 指定設定檔的位置。Default 是 /etc/dhcpd.conf。
-lf filename — 指定IP 租用記錄的位置。如果檔案已存在,在 DHCP service 每次啟動時使用同一個文件是很重要的。
強烈建議你只在無關緊要的機器上為調試目的才使用該選項。Default 的位置是 /var/lib/dhcp/dhcpd.leases.
-q — 在啟動該 daemon 時,不顯示整篇版權信息。

像上一篇提到的 /usr/sbin/dhcpd -d -f eth0 -lf /var/lib/dhcp/dhcpd.leases 就是我用來測試的。

以下便是實作開始:
首先就先編輯 Primary DHCP server 的設定檔:
這是第一台 DHCP server 的 dhcpd.conf 的內容:
[root@KHXDHCPS1 ~]# cat /etc/dhcpd.conf
ddns-update-style none;
ignore client-updates;
#ignore unknown-clients;

authoritative;
failover peer "dhcp-failover" {
primary;
address 10.69.10.30;
port 690;
peer address 10.69.10.31;
peer port 691;
max-response-delay 30;
max-unacked-updates 10;
load balance max seconds 3;
mclt 1800;
split 128;
}

subnet 10.69.0.0 netmask 255.255.0.0 {
option routers 10.69.100.254;
option subnet-mask 255.255.255.0;
option mobile-ip-home-agent 10.69.10.35;
option domain-name-servers 10.69.10.22;
default-lease-time 21600;
max-lease-time 43200;
pool {
failover peer "dhcp-failover";
range 10.69.100.1 10.69.100.240;
deny dynamic bootp clients;
}
}
這是第二台 DHCP server 的 dhcpd.conf 的內容:
[root@KHXDHCPS2 ~]# cat /etc/dhcpd.conf
ddns-update-style none;
ignore client-updates;
#ignore unknown-clients;

authoritative;
failover peer "dhcp-failover" {
secondary;
address 10.69.10.31;
port 691;
peer address 10.69.10.30;
peer port 690;
max-response-delay 30;
max-unacked-updates 10;
load balance max seconds 3;
}

subnet 10.69.0.0 netmask 255.255.0.0 {
option routers 10.69.100.254;
option subnet-mask 255.255.255.0;
option mobile-ip-home-agent 10.69.10.35;
option domain-name-servers 10.69.10.22;
default-lease-time 21600;
max-lease-time 43200;
pool {
failover peer "dhcp-failover";
range 10.69.100.1 10.69.100.240;
deny dynamic bootp clients;
}
}
這裡有幾個重點要注意一下:
1. 這一行一定要有,ddns-update-style 動態更新 DNS 資料,設定方式有三種:
ddns-update-style ad-hoc
ddns-update-style interim
ddns-update-style none
2. 關於 "deny dynamic bootp clients;" 這一行,因為 failover 不支援 bootp 用戶端,必須拒絕才行,
所以如果你想搞個 Boot Server 帶 DHCP failover 的話,恐怕要失望了...
3. failover peer "dhcp-failover" 這是定義一下 failover 的名字
4. primary; 是指定這台 DHCP server 為 Master server。
5. secondary; 是指定這台 DHCP server 為 Slave server。
6. address 10.69.10.30 監聽 failover 訊息的 IP address。
7. port 690; 與 peer port 691; 監聽 failover 訊息的 TCP port。
8. peer address 10.69.10.31; 指定 Slave server 的 IP address。
9. max-response-delay 30; 同步信息最大延遲時間。
10. max-unacked-updates 10; 在收到對端 BNDACK 訊息之前最大可發送 BNDUPD 訊息的數量。
11. mclt 1800; 節點在互相通知之前更新一個租約的時間。
12. split 128; 固定值,必須是 128;這個值和 mclt 都只需設定在 primary 的設定檔上就好。
13. option mobile-ip-home-agent 10.69.10.35; 這是我測試環境裡給 WiMAX 用的 Home Agent 的 IP address。

接下來是驗證的課程囉:
把 dhcpd service 先打開然後到兩台 DHCP server 上去看一下 /var/log/messages 的內容吧:
[root@KHXDHCPS1 ~]# service dhcpd restart
Shutting down dhcpd: [ OK ]
Starting dhcpd: [ OK ]
這是第一台 DHCP server 的 dhcpd 啟動訊息:
[root@KHXDHCPS1 ~]# tail -f /var/log/messages
Jul 10 10:38:14 KHXDHCPS1 dhcpd: dhcpd shutdown succeeded
Jul 10 10:38:14 KHXDHCPS1 dhcpd: dhcpd shutdown succeeded
Jul 10 10:59:54 KHXDHCPS1 sshd(pam_unix)[29885]: session opened for user root by (uid=0)


Jul 10 11:02:29 KHXDHCPS1 dhcpd: Internet Systems Consortium DHCP Server V3.0.1
Jul 10 11:02:29 KHXDHCPS1 dhcpd: Copyright 2004 Internet Systems Consortium.
Jul 10 11:02:29 KHXDHCPS1 dhcpd: All rights reserved.
Jul 10 11:02:29 KHXDHCPS1 dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Jul 10 11:02:29 KHXDHCPS1 dhcpd: Internet Systems Consortium DHCP Server V3.0.1
Jul 10 11:02:29 KHXDHCPS1 dhcpd: Copyright 2004 Internet Systems Consortium.
Jul 10 11:02:29 KHXDHCPS1 dhcpd: All rights reserved.
Jul 10 11:02:29 KHXDHCPS1 dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Jul 10 11:02:29 KHXDHCPS1 dhcpd: Wrote 0 leases to leases file.
Jul 10 11:02:29 KHXDHCPS1 dhcpd: Wrote 0 leases to leases file.
Jul 10 11:02:29 KHXDHCPS1 dhcpd: Listening on LPF/eth0/00:1e:c9:ad:55:bf/10.69/16
Jul 10 11:02:29 KHXDHCPS1 dhcpd: Sending on LPF/eth0/00:1e:c9:ad:55:bf/10.69/16
Jul 10 11:02:29 KHXDHCPS1 dhcpd: Sending on Socket/fallback/fallback-net
Jul 10 11:02:29 KHXDHCPS1 dhcpd: Listening on LPF/eth0/00:1e:c9:ad:55:bf/10.69/16
Jul 10 11:02:29 KHXDHCPS1 dhcpd: Sending on LPF/eth0/00:1e:c9:ad:55:bf/10.69/16
Jul 10 11:02:29 KHXDHCPS1 dhcpd: Sending on Socket/fallback/fallback-net
Jul 10 11:02:29 KHXDHCPS1 dhcpd: failover peer dhcp-failover: I move from recover to startup
Jul 10 11:02:29 KHXDHCPS1 dhcpd: failover peer dhcp-failover: I move from recover to startup
Jul 10 11:02:29 KHXDHCPS1 dhcpd: dhcpd startup succeeded
Jul 10 11:02:29 KHXDHCPS1 dhcpd: dhcpd startup succeeded
Jul 10 11:02:31 KHXDHCPS1 dhcpd: failover peer dhcp-failover: peer moves from unknown-state to recover
Jul 10 11:02:31 KHXDHCPS1 dhcpd: failover peer dhcp-failover: requesting full update from peer
Jul 10 11:02:31 KHXDHCPS1 dhcpd: failover peer dhcp-failover: I move from startup to recover
Jul 10 11:02:31 KHXDHCPS1 dhcpd: Sent update request all message to dhcp-failover
Jul 10 11:02:31 KHXDHCPS1 dhcpd: failover peer dhcp-failover: peer moves from recover to recover
Jul 10 11:02:31 KHXDHCPS1 dhcpd: failover peer dhcp-failover: requesting full update from peer
Jul 10 11:02:31 KHXDHCPS1 dhcpd: Sent update request all message to dhcp-failover
Jul 10 11:02:31 KHXDHCPS1 dhcpd: Sent update done message to dhcp-failover
Jul 10 11:02:31 KHXDHCPS1 dhcpd: Update request all from dhcp-failover: nothing pending
Jul 10 11:02:31 KHXDHCPS1 dhcpd: Sent update done message to dhcp-failover
Jul 10 11:02:31 KHXDHCPS1 dhcpd: Update request all from dhcp-failover: nothing pending
Jul 10 11:02:31 KHXDHCPS1 dhcpd: failover peer dhcp-failover: peer update completed.
Jul 10 11:02:31 KHXDHCPS1 dhcpd: failover peer dhcp-failover: I move from recover to recover-done
Jul 10 11:02:31 KHXDHCPS1 dhcpd: failover peer dhcp-failover: peer update completed.
Jul 10 11:02:31 KHXDHCPS1 dhcpd: failover peer dhcp-failover: peer moves from recover to recover-done
Jul 10 11:02:31 KHXDHCPS1 dhcpd: failover peer dhcp-failover: I move from recover-done to normal
Jul 10 11:02:31 KHXDHCPS1 dhcpd: failover peer dhcp-failover: peer moves from recover-done to normal
Jul 10 11:02:31 KHXDHCPS1 dhcpd: pool 9d0e008 10.69/16 total 240 free 240 backup 0 lts -120
Jul 10 11:02:31 KHXDHCPS1 dhcpd: pool 9d0e008 10.69/16 total 240 free 240 backup 0 lts 120
這是第二台 DHCP server 的 dhcpd 啟動訊息:
[root@KHXDHCPS2 ~]# tail -f /var/log/messages
Jul 10 10:38:08 KHXDHCPS2 dhcpd: dhcpd shutdown succeeded
Jul 10 10:38:08 KHXDHCPS2 dhcpd: dhcpd shutdown succeeded
Jul 10 10:59:57 KHXDHCPS2 sshd(pam_unix)[31706]: session opened for user root by (uid=0)


Jul 10 11:02:30 KHXDHCPS2 dhcpd: Internet Systems Consortium DHCP Server V3.0.1
Jul 10 11:02:30 KHXDHCPS2 dhcpd: Copyright 2004 Internet Systems Consortium.
Jul 10 11:02:30 KHXDHCPS2 dhcpd: All rights reserved.
Jul 10 11:02:30 KHXDHCPS2 dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Jul 10 11:02:30 KHXDHCPS2 dhcpd: Internet Systems Consortium DHCP Server V3.0.1
Jul 10 11:02:30 KHXDHCPS2 dhcpd: Copyright 2004 Internet Systems Consortium.
Jul 10 11:02:30 KHXDHCPS2 dhcpd: All rights reserved.
Jul 10 11:02:30 KHXDHCPS2 dhcpd: For info, please visit http://www.isc.org/sw/dhcp/
Jul 10 11:02:30 KHXDHCPS2 dhcpd: Wrote 0 leases to leases file.
Jul 10 11:02:30 KHXDHCPS2 dhcpd: Wrote 0 leases to leases file.
Jul 10 11:02:31 KHXDHCPS2 dhcpd: Listening on LPF/eth0/00:1e:c9:ad:55:a6/10.69/16
Jul 10 11:02:31 KHXDHCPS2 dhcpd: Sending on LPF/eth0/00:1e:c9:ad:55:a6/10.69/16
Jul 10 11:02:31 KHXDHCPS2 dhcpd: Sending on Socket/fallback/fallback-net
Jul 10 11:02:31 KHXDHCPS2 dhcpd: Listening on LPF/eth0/00:1e:c9:ad:55:a6/10.69/16
Jul 10 11:02:31 KHXDHCPS2 dhcpd: Sending on LPF/eth0/00:1e:c9:ad:55:a6/10.69/16
Jul 10 11:02:31 KHXDHCPS2 dhcpd: Sending on Socket/fallback/fallback-net
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: I move from recover to startup
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: I move from recover to startup
Jul 10 11:02:31 KHXDHCPS2 dhcpd: dhcpd startup succeeded
Jul 10 11:02:31 KHXDHCPS2 dhcpd: dhcpd startup succeeded
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: peer moves from unknown-state to recover
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: requesting full update from peer
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: I move from startup to recover
Jul 10 11:02:31 KHXDHCPS2 dhcpd: Sent update request all message to dhcp-failover
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: peer moves from recover to recover
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: requesting full update from peer
Jul 10 11:02:31 KHXDHCPS2 dhcpd: Sent update request all message to dhcp-failover
Jul 10 11:02:31 KHXDHCPS2 dhcpd: Sent update done message to dhcp-failover
Jul 10 11:02:31 KHXDHCPS2 dhcpd: Update request all from dhcp-failover: nothing pending
Jul 10 11:02:31 KHXDHCPS2 dhcpd: Sent update done message to dhcp-failover
Jul 10 11:02:31 KHXDHCPS2 dhcpd: Update request all from dhcp-failover: nothing pending
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: peer update completed.
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: I move from recover to recover-done
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: peer update completed.
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: peer moves from recover to recover-done
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: I move from recover-done to normal
Jul 10 11:02:31 KHXDHCPS2 dhcpd: failover peer dhcp-failover: peer moves from recover-done to normal
Jul 10 11:02:31 KHXDHCPS2 dhcpd: pool 9399ed0 10.69/16 total 240 free 240 backup 0 lts 120
明顯的 KHXDHCPS1 目前的確是 primary server,而 KHXDHCPS2 則是 secondary server。

接著把 Quanta Beceem BCS200 的 WiMAX 卡插上電腦開始嘗試著去取得 IP 吧,DHCP Client 向 DHCP Server 要求 IP 時主要的四個動作 ( DHCPDISCOVER , DHCPOFFER , DHCPREQUEST , DHCPACK ),如果能看到這四個動作,這就代表 Client 已經成功獲得 IP .而 /var/lib/dhcp/dhcp.lease 就會將此 IP 租用紀錄下來,所以這時會看到 KHXDHCPS1 (Master server) 上的 log 出現:
Jul 10 11:03:37 KHXDHCPS1 dhcpd: pool 9d0e008 10.69/16 total 240 free 120 backup 120 lts 0
Jul 10 11:03:37 KHXDHCPS1 dhcpd: DHCPDISCOVER from 00:17:c4:12:77:97 via 10.69.10.11
Jul 10 11:03:38 KHXDHCPS1 dhcpd: DHCPOFFER on 10.69.100.120 to 00:17:c4:12:77:97 (WiMAX-demoXX) via 10.69.10.11
Jul 10 11:03:38 KHXDHCPS1 dhcpd: DHCPREQUEST for 10.69.100.120 (10.69.10.30) from 00:17:c4:12:77:97 (WiMAX-demoXX) via 10.69.10.11
Jul 10 11:03:38 KHXDHCPS1 dhcpd: DHCPACK on 10.69.100.120 to 00:17:c4:12:77:97 (WiMAX-demoXX) via 10.69.10.11
而這時 KHXDHCPS2 (Slave server) 上的 log 則只出現:
Jul 10 11:03:37 KHXDHCPS2 dhcpd: pool 9399ed0 10.69/16 total 240 free 120 backup 120 lts 0
到 Client 上去看,果然有拿到正確的 IP address 了:
C:\Documents and Settings\Demo>ipconfig /all

Windows IP Configuration

Host Name . . . . . . . . . . . . : WiMAX-demoXX
Primary Dns Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Hybrid
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No

Ethernet adapter Wireless Network Connection:

Media State . . . . . . . . . . . : Media disconnected
Description . . . . . . . . . . . : Intel(R) PRO/Wireless 3945ABG Network Connection
Physical Address. . . . . . . . . : 00-18-DE-19-B5-92

Ethernet adapter Local Area Connection:

Media State . . . . . . . . . . . : Media disconnected
Description . . . . . . . . . . . : Intel(R) PRO/1000 PL Network Connection
Physical Address. . . . . . . . . : 00-15-58-30-80-C5

Ethernet adapter Local Area Connection 4:


Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Beceem Communications Inc. BCS200
Physical Address. . . . . . . . . : 00-17-C4-12-77-97
Dhcp Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IP Address. . . . . . . . . . . . : 10.69.100.120
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 10.69.100.254
DHCP Server . . . . . . . . . . . : 10.69.10.30
DNS Servers . . . . . . . . . . . : 10.69.10.22
Lease Obtained. . . . . . . . . . : Thursday, July 10, 2008 11:07:15 PM
Lease Expires . . . . . . . . . . : Thursday, July 10, 2008 12:37:15 PM
這時我們看一下 /var/lib/dhcp/dhcpd.leases 的內容多了剛剛 IP 的租用訊息:
lease 10.69.100.120 {
starts 4 2008/07/10 03:03:38;
ends 4 2008/07/10 03:33:38;
cltt 4 2008/07/10 03:03:38;
binding state active;
next binding state expired;
hardware ethernet 00:17:c4:12:77:97;
uid "\001\000\027\304\022w\227";
client-hostname "WiMAX-demoXX";
}
當然在 Slave 的機器上也會有一筆相同的紀錄在。

接著測試一下 IP Rlease 跟 IP Renew 都可以得到相同的 IP address:

這是 Master DHCP server 的訊息:
Jul 10 11:05:31 KHXDHCPS1 dhcpd: DHCPRELEASE of 10.69.100.120 from 00:17:c4:12:77:97 (WiMAX-demoXX) via 10.69.10.11 (found)
Jul 10 11:05:35 KHXDHCPS1 dhcpd: DHCPDISCOVER from 00:17:c4:12:77:97 via 10.69.10.11
Jul 10 11:05:36 KHXDHCPS1 dhcpd: DHCPOFFER on 10.69.100.120 to 00:17:c4:12:77:97 (WiMAX-demoXX) via 10.69.10.11
Jul 10 11:05:36 KHXDHCPS1 dhcpd: DHCPREQUEST for 10.69.100.120 (10.69.10.30) from 00:17:c4:12:77:97 (WiMAX-demoXX) via 10.69.10.11
Jul 10 11:05:36 KHXDHCPS1 dhcpd: DHCPACK on 10.69.100.120 to 00:17:c4:12:77:97 (WiMAX-demoXX) via 10.69.10.11
這是 Slave DHCP server 的訊息:
Jul 10 11:05:31 KHXDHCPS2 dhcpd: DHCPRELEASE of 10.69.100.120 from 00:17:c4:12:77:97 via 10.69.10.11 (found)
Jul 10 11:05:35 KHXDHCPS2 dhcpd: pool 9399ed0 10.69/16 total 240 free 120 backup 120 lts 0
這是 /var/lib/dhcp/dhcpd.leases 的部分:
lease 10.69.100.120 {
starts 4 2008/07/10 03:03:38;
ends 4 2008/07/10 03:05:31;
cltt 4 2008/07/10 03:03:38;
binding state released;
next binding state free;
hardware ethernet 00:17:c4:12:77:97;
uid "\001\000\027\304\022w\227";
client-hostname "WiMAX-demoXX";
}
lease 10.69.100.120 {
starts 4 2008/07/10 03:03:38;
ends 4 2008/07/10 03:05:31;
tstp 4 2008/07/10 03:05:31;
cltt 4 2008/07/10 03:03:38;
binding state free;
hardware ethernet 00:17:c4:12:77:97;
uid "\001\000\027\304\022w\227";
}
lease 10.69.100.120 {
starts 4 2008/07/10 03:05:36;
ends 4 2008/07/10 03:35:36;
cltt 4 2008/07/10 03:05:36;
binding state active;
next binding state expired;
hardware ethernet 00:17:c4:12:77:97;
uid "\001\000\027\304\022w\227";
client-hostname "WiMAX-demoXX";
好了,以上便是今天的實作報告~

相關的參考資料:
DHCP Failover/load balancing
Failover with ISC DHCP
(詳全文...)

LINUX AutoFS 實作

昨天做到在 DHCP server 上把將遠端 KHXDB server (也就是 Veritas cluster 的 VIP) 上的 /DB mount 到 DHCP server 上的 /DB 來,然後再將 /var/lib/dhcp/DB/dhcp mount 到 /var/lib/dhcp 來,不過由於是將 Mount 的動作寫在 /etc/fstab 裡面,所以今天一早來就先把他改成 Automount,需要讀寫IP 租用紀錄檔時才自動去掛載遠端 KHXDB server 的 mount point。

Autofs 與 Mount/Umount 的不同之處在于,它是一種看守程序。如果它檢測到有任何使用者的動作試圖存取一個尚未掛載的檔案或目錄,它就會自動檢測該目錄或檔案,如果存在,那麼 Autofs會自動將其掛載。另外,如果它檢測到某個已掛接的目錄在一段時間內沒有被使用,那麼 Autofs會自動將其卸載。因此一旦執行了 Autofs後,使用者就不用再手動做系統的 Mount/Umount。

接下來就是實作的部分了,首先,在這次的範例中,要掛載遠端機器 KHXDB server 上的 /DB/dhcp 目錄到 DHCP server 的 /NFSDB/dhcp 掛載點,所以我們先編輯一下 /etc/auto.master
將下列這一行加入到 auto.master 檔案中:
/NFSDB /etc/auto.nfs --timeout 60
接著增加下列這一行至 /etc/auto.nfs 檔案中:
dhcp -rw,bg,soft,rsize=8192,wsize=8192 KHXDB:/DB/dhcp
其中 /etc/auto.nfs 檔案的第一個欄位 dhcp 是 /DBNFS 之下子目錄的名稱,這個目錄是由 automount 動態建立的,
它不應該實質上存在於近端機器上也就是 DHCP server 啦,第二個欄位包含掛載選項,如 rw 代表允許讀取與寫入的存取,第三個欄位就是 NFS 所匯出的位置,包括遠端主機名稱與目錄。

千萬要注意喔:
/NFSDB 目錄必須存在於本機的檔案系統中,而且 /NFSDB 目錄下不可以含有任何的子目錄喔。
Autofs 是一項服務,如要啟動這個服務,請在 shell 提示符號下輸入下列指令:
/sbin/service autofs restart
如果要檢視現行的掛載點,可以在 shell 提示符號下輸入下列指令:
[root@KHXDHCPS1 ~]# service autofs status
Configured Mount Points:
------------------------
/usr/sbin/automount --timeout=60 /NFSDB file /etc/auto.nfs

Active Mount Points:
--------------------
/usr/sbin/automount --timeout=60 /NFSDB file /etc/auto.nfs
假如在 autofs 執行中的情況下修改了 /etc/auto.master 設定檔案,那就必須在 shell 提示符號下輸入以下指令來讓 automount 系統程式重新載入:
[root@KHXDHCPS1 ~]# service autofs reload
Checking for changes to /etc/auto.master ....
Reload map /usr/sbin/automount --timeout=60 /NFSDB file /etc/auto.nfs
最後,可以有幾個方式確認一下遠端 mount 過來的狀況,第一個當然是直接去 ls 一下最後的 mount point,像是在這個例子中:
[root@KHXDHCPS1 ~]# ls -alrt /var/lib/dhcp
total 72
drwxr-xr-x 17 root root 4096 Jul 7 19:36 ..
-rw-r--r-- 1 root root 0 Jul 9 11:52 dbserver-id.donot-delete-me
-rw-r--r-- 1 root root 34779 Jul 9 19:47 dhcpd.leases~
drwxr-xr-x 2 root root 4096 Jul 9 19:47 .
-rw-r--r-- 1 root root 18033 Jul 9 19:47 dhcpd.leases
其中 dbserver-id.donot-delete-me 便是我擺在遠端 KHXDB server 上當作辨識用的檔案囉。

另一種方式便是直接去看 mount status:
[root@KHXDHCPS1 ~]# mount
/dev/sda2 on / type ext3 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
usbfs on /proc/bus/usb type usbfs (rw)
/dev/sda1 on /boot type ext3 (rw)
none on /dev/shm type tmpfs (rw)
/dev/sda3 on /inactive_root type ext3 (rw)
/dev/sda6 on /others type ext3 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

automount(pid18972) on /NFSDB type autofs (rw,fd=5,pgrp=18972,minproto=2,maxproto=4)
/NFSDB/dhcp on /var/lib/dhcp type none (rw,bind)
KHXDB:/DB/dhcp1 on /NFSDB/dhcp type nfs (rw,bg,soft,rsize=8192,wsize=8192,addr=10.69.10.41)
(詳全文...)

DHCP server 上發生 Can't open lease database /var/lib/dhcp/dhcpd.leases: Permission denied -- 的錯誤訊息

這兩天為了將 DHCP server 的 IP 租用紀錄檔變更到另外兩台有裝 Veritas cluster 的機器所 mount 的 Dell-MD3000 storage 上,首先,我所想到的方法有兩個,第一個是直接更改 /etc/rc.d/init.d/dhcpd 檔案中關於 daemons start 的那一部份,加上 -lf /path-of-leases-file (例如:/NFSDB/dhcp/dhcpd.leases) 的 option,另一種方法是直接把遠端的 /DB/dhcp mount 到 DHCP server 的 /var/lib/dhcp 來,沒想到不管哪一種都發生了 DHCP server 上的 dhcpd 起不來的問題。

以下的範例是將遠端 KHXDB server (也就是 Veritas cluster 的 VIP) 上的 /DB mount 到 DHCP server 上的 /NFSDB 來,然後再將 /NFSDB/dhcp mount 到 /var/lib/dhcp 來:
[root@KHXDHCPS1 ~]# mount -o bind /NFSDB/dhcp /var/lib/dhcp
[root@KHXDHCPS1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 4.0G 1.8G 2.1G 46% /
/dev/sda1 1012M 40M 921M 5% /boot
none 4.0G 0 4.0G 0% /dev/shm
/dev/sda3 4.0G 41M 3.7G 2% /inactive_root
/dev/sda6 21G 77M 19G 1% /others

KHXDB:/DB 537G 105M 510G 1% /NFSDB
/NFSDB/dhcp 537G 105M 510G 1% /var/lib/dhcp
原來的 /var/lib/dhcp/dhcpd.leases 在這時已經被指到 KHXDB:/DB/dhcp/dhcpd.leases 去了:
然後將 dhcpd servive 重啟,就出現了 Can't open lease database /var/lib/dhcp/dhcpd.leases: Permission denied -- 的錯誤訊息,
[root@KHXDHCPS1 ~]# service dhcpd start
Starting dhcpd: Internet Systems Consortium DHCP Server V3.0.1
Copyright 2004 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

Can't open lease database /var/lib/dhcp/dhcpd.leases: Permission denied --
check for failed database rewrite attempt!
Please read the dhcpd.leases manual page if you
don't know what to do about this.

If you did not get this software from ftp.isc.org, please
get the latest from ftp.isc.org and install that before
requesting help.

If you did get this software from ftp.isc.org and have not
yet read the README, please read it before requesting help.
If you intend to request help from the dhcp-server@isc.org
mailing list, please read the section on the README about
submitting bug reports and requests for help.

Please do not under any circumstances send requests for
help directly to the authors of this software - please
send them to the appropriate mailing list as described in
the README file.

exiting.
[FAILED]
偏偏,在開啟除錯模式,並把 dhcpd 放到“幕前” (foreground)來執行後發現一切正常:
[root@KHXDHCPS1 ~]# /usr/sbin/dhcpd -d -f eth0 -lf /var/lib/dhcp/dhcpd.leases
Internet Systems Consortium DHCP Server V3.0.1
Copyright 2004 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
Wrote 0 leases to leases file.
Listening on LPF/eth0/00:1e:c9:ad:55:bf/0/0
Sending on LPF/eth0/00:1e:c9:ad:55:bf/0/0
Sending on Socket/fallback/fallback-net
在幾次測試之後,終於發現只要改到 IP 租用紀錄檔的指定路徑 (例如:/NFSDB/dhcp/dhcpd.leases),或是這個路徑是經過 mount 過的路徑,都會造成 service dhcpd start 失敗。幾經波折,才發現原來這一台 DHCP server 是使用公司精裝的 OS 版本 (RHEL ES4 U6一片 CD 裝),而且重點是,居然把 SELinux 給 enable 了......真是給他一個無語,以前自己裝的 RHEL OS 都習慣性的把 SELinux 給 disable 掉,所以這次才完全沒想到這個方向去,所以接下來便是進去改設定囉:

這裡就直接進 X GUI 畫面,到安全配制項目內,於 SELinux 項目內把 dhcp 部分設定為不監控處理即可。首先:
接著,點開 Modify SELinux Policy 底下 SELinux Service Protection,然後把第一項 Disable SELinux protection for dhcpd daemon 打勾,再按 OK 就行了~
當然要關閉整個 SELinux 也是可行方式,不過這裡就以第一種方式來處理囉。
改完之後,已經可以直接用 service dhcpd start 的方式成功的帶起 dhcpd service 囉:
root@KHXDHCPS1 ~]# service dhcpd restart
Shutting down dhcpd: [ OK ]
Starting dhcpd: [ OK ]
[root@KHXDHCPS1 ~]#
[root@KHXDHCPS1 ~]# ps -aef |grep dhcp
root 21218 1 0 21:08 ? 00:00:00 /usr/sbin/dhcpd eth0
root 21223 20605 0 21:08 pts/0 00:00:00 grep dhcp

檢查一下新的 IP 租用紀錄檔果然已經有新的租用訊息寫進來囉:
[root@KHXDHCPS1 ~]# cat /var/lib/dhcp/dhcpd.leases
# All times in this file are in UTC (GMT), not your local timezone. This is
# not a bug, so please don't ask about it. There is no portable way to
# store leases in the local timezone, so please don't request this as a
# feature. If this is inconvenient or confusing to you, we sincerely
# apologize. Seriously, though - don't ask.
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-V3.0.1


lease 10.69.100.244 {
starts 2 2008/07/08 13:02:25;
ends 2 2008/07/08 19:02:25;
binding state active;
next binding state free;
hardware ethernet 00:17:c4:12:77:65;
uid "\001\000\027\304\022we";
client-hostname "WiMAX-demoXX";
}
這裡加註一下:可以用 ls -Z 去觀察一下 /var/lib/dhcp 的目錄屬性,可以秀出關於 SELinux 的權限部分喔:
下面第一部份是修改 SELinux 之前:
[root@KHXDHCPS1 ~]# ls -alZ /var/lib/
drwxr-xr-x root root system_u:object_r:var_lib_t .
drwxr-xr-x root root system_u:object_r:var_t ..
drwxr-xr-x root root system_u:object_r:rpm_var_lib_t alternatives
drwxr-xr-x root root system_u:object_r:var_lib_t cs
drwx------ apache apache system_u:object_r:var_lib_t dav
drwxr-xr-x root root system_u:object_r:dhcp_state_t dhcp
drwxr-x--- root root system_u:object_r:var_lib_t dhcpv6
drwxr-xr-x root root system_u:object_r:var_lib_t games
-rw-r--r-- root root system_u:object_r:var_lib_t logrotate.status
drwxr-xr-x root root system_u:object_r:var_lib_t misc
drwxr-xr-x root root system_u:object_r:var_lib_nfs_t nfs
drwxr-xr-x ntp ntp system_u:object_r:ntp_drift_t ntp
drwxr-xr-x root root system_u:object_r:var_lib_t pcmcia
-rw------- root root user_u:object_r:var_lib_t random-seed
drwxr-xr-x rpm rpm system_u:object_r:rpm_var_lib_t rpm
drwxr-xr-x root root user_u:object_r:var_lib_t scrollkeeper
drwxr-x--- root slocate system_u:object_r:var_lib_t slocate
-rw-r--r-- root root system_u:object_r:var_lib_t supportinfo
drwxr-xr-x root root system_u:object_r:var_lib_t up2date
drwxr-xr-x root root system_u:object_r:var_lib_t xkb
下面這一部份是修改 SELinux 之後,並掛載遠端機器的目錄,會發現 /var/lib/dhcp 的目錄權限部分會被變更,所以在修改 SELinux 之前才會 dhcpd 一直啟動失敗:
[root@KHXDHCPS1 ~]# ls -alZ /var/lib/
drwxr-xr-x root root system_u:object_r:var_lib_t .
drwxr-xr-x root root system_u:object_r:var_t ..
drwxr-xr-x root root system_u:object_r:rpm_var_lib_t alternatives
drwxr-xr-x root root system_u:object_r:var_lib_t cs
drwx------ apache apache system_u:object_r:var_lib_t dav
drwxr-xr-x root root dhcp
drwxr-x--- root root system_u:object_r:var_lib_t dhcpv6
drwxr-xr-x root root system_u:object_r:var_lib_t games
-rw-r--r-- root root system_u:object_r:var_lib_t logrotate.status
drwxr-xr-x root root system_u:object_r:var_lib_t misc
drwxr-xr-x root root system_u:object_r:var_lib_nfs_t nfs
drwxr-xr-x ntp ntp system_u:object_r:ntp_drift_t ntp
drwxr-xr-x root root system_u:object_r:var_lib_t pcmcia
-rw------- root root user_u:object_r:var_lib_t random-seed
drwxr-xr-x rpm rpm system_u:object_r:rpm_var_lib_t rpm
drwxr-xr-x root root user_u:object_r:var_lib_t scrollkeeper
drwxr-x--- root slocate system_u:object_r:var_lib_t slocate
-rw-r--r-- root root system_u:object_r:var_lib_t supportinfo
drwxr-xr-x root root system_u:object_r:var_lib_t up2date
drwxr-xr-x root root system_u:object_r:var_lib_t xkb
接下來的部分是把遠端的載點 Umount 掉之後的狀態:
[root@KHXDHCPS1 ~]# umount /var/lib/dhcp
[root@KHXDHCPS1 ~]# ls -alZ /var/lib/
drwxr-xr-x root root system_u:object_r:var_lib_t .
drwxr-xr-x root root system_u:object_r:var_t ..
drwxr-xr-x root root system_u:object_r:rpm_var_lib_t alternatives
drwxr-xr-x root root system_u:object_r:var_lib_t cs
drwx------ apache apache system_u:object_r:var_lib_t dav
drwxr-xr-x root root root:object_r:var_lib_t dhcp
drwxr-x--- root root system_u:object_r:var_lib_t dhcpv6
drwxr-xr-x root root system_u:object_r:var_lib_t games
-rw-r--r-- root root system_u:object_r:var_lib_t logrotate.status
drwxr-xr-x root root system_u:object_r:var_lib_t misc
drwxr-xr-x root root system_u:object_r:var_lib_nfs_t nfs
drwxr-xr-x ntp ntp system_u:object_r:ntp_drift_t ntp
drwxr-xr-x root root system_u:object_r:var_lib_t pcmcia
-rw------- root root user_u:object_r:var_lib_t random-seed
drwxr-xr-x rpm rpm system_u:object_r:rpm_var_lib_t rpm
drwxr-xr-x root root user_u:object_r:var_lib_t scrollkeeper
drwxr-x--- root slocate system_u:object_r:var_lib_t slocate
-rw-r--r-- root root system_u:object_r:var_lib_t supportinfo
drwxr-xr-x root root system_u:object_r:var_lib_t up2date
drwxr-xr-x root root system_u:object_r:var_lib_t xkb
對了,附註一點,/var/lib/dhcp/dhcpd.leases 檔案中的時間是採用 GMT 所以跟系統實際有所差異,這是正常的。
(詳全文...)