逝者如斯夫

          靜而思之
          數(shù)據(jù)加載中……

          Building CouchDB 1.0.2 from source (CentOS/RHEL 5)

          Dependencies

          CouchDB

          Runtime

          Build

          Spidermonkey

          Erlang

          ICU

          cURL

          Automake

          Autoconf

          0.9.x

          ==1.7

          >=5.6.0

          >=?3.0

          >=?7.15.5

          >=?1.6.3

          >=?2.59

          0.10.x

          >=1.7?&&?<=1.8.0

          >=5.6.5

          >=?3.0

          >=?7.18.0

          >=?1.6.3

          >=?2.59

          0.11.x

          >=1.7

          >=5.6.5

          >=?3.0

          >=?7.18.0

          >=?1.6.3

          >=?2.59

          1.0.2

          >=1.7

          >=5.6.5

          >=?3.0

          >=?7.18.0

          >=?1.6.3

          >=?2.59



          wget http://mirror.centos.org/centos/5/os/x86_64/CentOS/libicu-3.6-5.16.x86_64.rpm
          wget http://mirror.centos.org/centos/5/os/x86_64/CentOS/libicu-devel-3.6-5.16.x86_64.rpm
          wget http://download.fedora.redhat.com/pub/epel/5/x86_64/js-1.70-8.el5.x86_64.rpm
          wget http://download.fedora.redhat.com/pub/epel/5/SRPMS/js-1.70-8.el5.src.rpm
          wget http://download.fedora.redhat.com/pub/epel/5/x86_64/js-devel-1.70-8.el5.x86_64.rpm

          wget http://curl.haxx.se/download/curl-7.21.6.tar.gz
          wget http://labs.renren.com/apache-mirror/couchdb/1.0.2/apache-couchdb-1.0.2.tar.gz

          tar -xzf curl-7.21.6.tar.gz
          cd curl-7.21.6
          ./configure --prefix=/usr/local
          make
          make install
          cd ..

          rpm -ivh *.rpm

          tar -xzf apache-couchdb-1.0.2.tar.gz
          cd apache-couchdb-1.0.2
          ./configure --prefix=/usr/local/couchdb --with-erlang=/usr/lib64/erlang/usr/include
          make
          make install
          cd ..


          rm -rf apache-couchdb-1.0.2 curl-7.21.6

          /usr/sbin/useradd -r --home /usr/local/couchdb/var/lib/couchdb -M --shell /bin/bash --comment "CouchDB Administrator" couchdb

          mkdir -p /var/www/apps/couchdb/data
          mkdir -p /var/www/apps/couchdb/view
          mkdir -p /usr/local/var/lib/couchdb
          mkdir -p /usr/local/var/log

          chown -R couchdb: /usr/local/couchdb/var/lib/couchdb /usr/local/couchdb/var/log/couchdb /var/www/apps/couchdb


          # [httpd]
          # port = 5984
          # bind_address = 127.0.0.1 (your binding ip address here)
          vi /usr/local/couchdb/etc/couchdb/default.ini

          # -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5984 -j ACCEPT
          vi /etc/sysconfig/iptables
          /sbin/service iptables restart

          ln -s /usr/local/couchdb/etc/rc.d/couchdb /etc/init.d/couchdb

          /sbin/chkconfig --add couchdb
          /sbin/service couchdb start

          curl http://localhost{IP}:5984{PORT}/ ?
          {"couchdb":"Welcome","version":"1.0.2"}


          posted @ 2011-05-10 14:05 ideame 閱讀(456) | 評論 (0)編輯 收藏

          yum install mercurial (CentOS-5.4_x64)

          wget ftp://ftp.univie.ac.at/systems/linux/dag/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
          rpm -Uvh
          rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

          yum install mercurial

          posted @ 2010-04-04 14:01 ideame 閱讀(708) | 評論 (0)編輯 收藏

          軟件開發(fā)者面試百問


          軟件開發(fā)者面試百問

          作者 Jurgen Appelo譯者 李劍 發(fā)布于 2009年1月20日 上午2時2分


          1月13日,著名博客作者Jurgen Appelo寫了一篇博文:“軟件開發(fā)者面試百問”。該文甚受讀者歡迎,15日便登上了delicious,Popurls.com,Reddit的首頁。InfoQ中文站在得到作者許可之后,將其全文翻譯為中文,希望可以對國內(nèi)讀者有所助益。

          以下為文章全文:

          想雇到搞軟件開發(fā)的聰明人可不容易。萬一一不小心,就會搞到一堆低能大狒狒。我去年就碰到這種事了。你肯定不想這樣吧。聽我的,沒錯。在樹上開站立會議門都沒有。

          問點有難度的問題能幫你把聰明人跟狒狒們分開。我決定把我自己整理出來的軟件開發(fā)者面試百問發(fā)出來,希望能幫到你們的忙。

          這個列表涵蓋了軟件開發(fā)知識體系中定義的大多數(shù)知識域。當然,如果你只想找出類拔萃的程序員,便只需涉及結(jié)構(gòu)、算法、數(shù)據(jù)結(jié)構(gòu)、測試這幾個話題。如果想雇架構(gòu)師,也可以只考慮需求、功能設(shè)計、技術(shù)設(shè)計這些地方。

          不過不管你怎么做,都要牢記一點:

          這里大多數(shù)問題的答案都沒有對錯之分!

          你可以把我的這些問題作為引子,展開討論。例如下面有個問題是使用靜態(tài)方法或是單例的緣由。如果那個面試的就此展開長篇大論,那他很有可能是個聰明能干的家伙!如果他一臉茫然的看著你,發(fā)出這種聲音,很明顯這就是只狒狒了。同樣,想知道一個數(shù)是不是2的乘方也有很多方法,不過要是面試的人想用mod運算符,嗯……你知道我的意思吧。(你不知道也沒關(guān)系,來根香蕉?)

          需求

          1. 你能給出一些非功能性(或者質(zhì)量)需求的例子么?
          2. 如果客戶需要高性能、使用極其方便而又高度安全,你會給他什么建議?
          3. 你能給出一些用來描述需求的不同技術(shù)么?它們各自適用于什么場景?
          4. 需求跟蹤是什么意思?什么是向前追溯,什么是向后追溯?
          5. 你喜歡用什么工具跟蹤需求?
          6. 你怎么看待需求變化?它是好是壞?給出你的理由。
          7. 你怎樣研究需求,發(fā)現(xiàn)需求?有哪些資源可以用到?
          8. 你怎么給需求制定優(yōu)先級?有哪些技術(shù)?
          9. 在需求過程中,用戶、客戶、開發(fā)人員各自的職責是什么?
          10. 你怎么對待不完整或是令人費解的需求?

          功能設(shè)計


          1. 在功能設(shè)計中有哪些隱喻?給出幾個成功的例子。
          2. 如果有些功能的執(zhí)行時間很長,怎么能讓用戶感覺不到太長的等待?
          3. 如果用戶必須要在一個很小的區(qū)域內(nèi),從一個常常的列表中選擇多個條目,你會用什么控件?
          4. 有哪些方法可以保證數(shù)據(jù)項的完整?
          5. 建立系統(tǒng)原型有哪些技術(shù)?
          6. 應(yīng)用程序怎樣建立對用戶行為的預(yù)期?給出一些例子。
          7. 如何入手設(shè)計一組數(shù)量龐大而又復(fù)雜的特性,你能舉出一些設(shè)計思路嗎?
          8. 有一個列表,其中有10個元素,每個元素都有20個字段可以編輯,你怎樣設(shè)計這種情況?如果是1000個元素,每個元素有3個字段呢?
          9. 用不同的顏色對一段文本中的文字標記高亮,這種做法有什么問題?
          10. Web環(huán)境和Windows環(huán)境各有些什么限制?

          技術(shù)設(shè)計

          1. 什么是低耦合和高聚合?封裝原則又是什么意思?
          2. 在Web應(yīng)用中,你怎樣避免幾個人編輯同一段數(shù)據(jù)所造成的沖突?
          3. 你知道設(shè)計模式嗎?你用過哪些設(shè)計模式?在什么場合下用的?
          4. 是否了解什么是無狀態(tài)的業(yè)務(wù)層?長事務(wù)如何與之相適應(yīng)?
          5. 在搭建一個架構(gòu),或是技術(shù)設(shè)計時,你用過幾種圖?
          6. 在N層架構(gòu)中都有哪些層?它們各自的職責是什么?
          7. 有哪些方法可以確保架構(gòu)中數(shù)據(jù)的正確和健壯?
          8. 面向?qū)ο笤O(shè)計和面向組件設(shè)計有哪些不同之處?
          9. 怎樣在數(shù)據(jù)庫中對用戶授權(quán)、用戶配置、權(quán)限管理這幾項功能建模?
          10. 怎樣按照等級制度給動物王國(包括各種物種和各自的行為)建模?

          結(jié)構(gòu)

          1. 你怎樣保證你的代碼可以處理各種錯誤事件?
          2. 解釋一下什么是測試驅(qū)動開發(fā),舉出極限編程中的一些原則。
          3. 看別人代碼的時候,你最關(guān)心什么地方?
          4. 什么時候使用抽象類,什么時候使用接口?
          5. 除了IDE以外,你還喜歡哪些必不可少的工具?
          6. 你怎么保證代碼執(zhí)行速度快,而又不出問題?
          7. 什么時候用多態(tài),什么時候用委派?
          8. 什么時候使用帶有靜態(tài)成員的類,什么時候使用單例?
          9. 你在代碼里面怎么提前處理需求的變化?給一些例子。
          10. 描述一下實現(xiàn)一段代碼的過程,從需求到最終交付。

          算法

          1. 怎樣知道一個數(shù)字是不是2的乘方?怎樣判斷一個數(shù)是不是奇數(shù)?
          2. 怎樣找出鏈表中間的元素?
          3. 怎樣改變10,000個靜態(tài)HTML頁面中所有電話號碼的格式?
          4. 舉出一個你所用過的遞歸的例子。
          5. 在哈希表和排序后的列表中找一個元素,哪個查找速度最快?
          6. 不管是書、雜志還是網(wǎng)絡(luò),你從中所學到的最后一點算法知識是什么?
          7. 怎樣把字符串反轉(zhuǎn)?你能不用臨時的字符串么?
          8. 你愿意用什么類型的語言來編寫復(fù)雜的算法?
          9. 有一個數(shù)組,里面是從1到1,000,000的整數(shù),其中有一個數(shù)字出現(xiàn)了兩次,你怎么找出那個重復(fù)的數(shù)字?
          10. 你知道“旅行商問題(Traveling Salesman Problem)”么?

          數(shù)據(jù)結(jié)構(gòu)


          1. 怎樣在內(nèi)存中實現(xiàn)倫敦地鐵的結(jié)構(gòu)?
          2. 怎樣以最有效的方式在數(shù)據(jù)庫中存儲顏色值?
          3. 隊列和堆棧區(qū)別是什么?
          4. 用堆或者堆棧存儲數(shù)據(jù)的區(qū)別是什么?
          5. 怎樣在數(shù)據(jù)庫中存儲N維向量?
          6. 你傾向于用哪種類型的語言編寫復(fù)雜的數(shù)據(jù)結(jié)構(gòu)?
          7. 21的二進制值是什么?十六制值呢?
          8. 不管是書、雜志還是網(wǎng)絡(luò),你從中所學到的最后一點數(shù)據(jù)結(jié)構(gòu)的知識是什么?
          9. 怎樣在XML文檔中存儲足球比賽結(jié)果(包括隊伍和比分)?
          10. 有哪些文本格式可以保存Unicode字符?

          測試

          1. 什么是回歸測試?怎樣知道新引入的變化沒有給現(xiàn)有的功能造成破壞?
          2. 如果業(yè)務(wù)層和數(shù)據(jù)層之間有依賴關(guān)系,你該怎么寫單元測試?
          3. 你用哪些工具測試代碼質(zhì)量?
          4. 在產(chǎn)品部署之后,你最常碰到的是什么類型的問題?
          5. 什么是代碼覆蓋率?有多少種代碼覆蓋率?
          6. 功能測試和探索性測試的區(qū)別是什么?你怎么對網(wǎng)站進行測試?
          7. 測試棧、測試用例、測試計劃,這三者之間的區(qū)別是什么?你怎么組織測試?
          8. 要對電子商務(wù)網(wǎng)站做冒煙測試,你會做哪些類型的測試?
          9. 客戶在驗收測試中會發(fā)現(xiàn)不滿意的東西,怎樣減少這種情況的發(fā)生?
          10. 你去年在測試和質(zhì)量保證方面學到了哪些東西?

          維護

          1. 你用哪些工具在維護階段對產(chǎn)品進行監(jiān)控?
          2. 要想對一個正在產(chǎn)品環(huán)境中被使用的產(chǎn)品進行升級,該注意哪些重要事項?
          3. 如果在一個龐大的文件中有錯誤,而代碼又無法逐步跟蹤,你怎么找出錯誤?
          4. 你怎樣保證代碼中的變化不會影響產(chǎn)品的其他部分?
          5. 你怎樣為產(chǎn)品編寫技術(shù)文檔?
          6. 你用過哪些方式保證軟件產(chǎn)品容易維護?
          7. 怎樣在產(chǎn)品運行的環(huán)境中進行系統(tǒng)調(diào)試?
          8. 什么是負載均衡?負載均衡的方式有哪些種?
          9. 為什么在應(yīng)用程序的生命周期中,軟件維護費用所占的份額最高?
          10. re-engineering和reverse engineering的區(qū)別是什么?

          配置管理

          1. 你知道配置管理中基線的含義么?怎樣把項目中某個重要的時刻凍結(jié)?
          2. 你一般會把哪些東西納入版本控制?
          3. 怎樣可以保證團隊中每個人都知道誰改變了哪些東西?
          4. Tag和Branch的區(qū)別是什么?在什么情況下該使用tag,什么時候用branch?
          5. 怎樣管理技術(shù)文檔——如產(chǎn)品架構(gòu)文檔——的變化?
          6. 你用什么侗劇管理項目中所有數(shù)字信息的狀態(tài)?你最喜歡哪種工具?
          7. 如果客戶想要對一款已經(jīng)發(fā)布的產(chǎn)品做出變動,你怎么處理?
          8. 版本管理和發(fā)布管理有什么差異?
          9. 對文本文件的變化和二進制文件的變化進行管理,這二者有什么不同?
          10. 同時處理多個變更請求,或是同時進行增量開發(fā)和維護,這種事情你怎么看待?

          項目管理

          1. 范圍、時間、成本,這三項中哪些是可以由客戶控制的?
          2. 誰該對項目中所要付出的一切做出估算?誰有權(quán)設(shè)置最后期限?
          3. 減少交付的次數(shù),或是減少每個每個交付中的工作量,你喜歡哪種做法?
          4. 你喜歡用哪種圖來跟蹤項目進度?
          5. 迭代和增量的區(qū)別在哪里?
          6. 試著解釋一下風險管理中用到的實踐。風險該如何管理?
          7. 你喜歡任務(wù)分解還是滾動式計劃?
          8. 你需要哪些東西幫助你判斷項目是否符合時間要求,在預(yù)算范圍內(nèi)運作?
          9. DSDM、Prince2、Scrum,這三者之間有哪些區(qū)別?
          10. 如果客戶想要的東西太多,你在范圍和時間上怎樣跟他達成一致呢?

          Powered by ScribeFire.

          posted @ 2010-03-19 10:07 ideame 閱讀(421) | 評論 (0)編輯 收藏

          No more 'unable to find valid certification path to requested target'

          From: http://blogs.sun.com/andreas/entry/no_more_unable_to_find

          Some of you may be familiar with the (not very user friendly) exception message
          javax.net.ssl.SSLHandshakeException:
          sun.security.validator.ValidatorException:
          PKIX path building failed:
          sun.security.provider.certpath.SunCertPathBuilderException:
          unable to find valid certification path to requested target

          when trying to open an SSL connection to a host using JSSE. What this usually means is that the server is using a test certificate (possibly generated using keytool) rather than a certificate from a well known commercial Certification Authority such as Verisign or GoDaddy. Web browsers display warning dialogs in this case, but since JSSE cannot assume an interactive user is present it just throws an exception by default.

          Certificate validation is a very important part of SSL security, but I am not writing this entry to explain the details. If you are interested, you can start by reading the Wikipedia blurb. I am writing this entry to show a simple way to talk to that host with the test certificate, if you really want to.

          Basically, you want to add the server's certificate to the KeyStore with your trusted certificates. There are any number of ways to achieve that, but a simple solution is to compile and run the attached program as java InstallCert hostname, for example

          %?java?InstallCert?ecc.fedora.redhat.com
          Loading?KeyStore?/usr/jdk/instances/jdk1
          .5.0 /jre/lib/security/cacerts
          Opening?connection?to?ecc.fedora.redhat.com:
          443
          Starting?SSL?handshake

          javax.net.ssl.SSLHandshakeException:?sun.security.validator.ValidatorException:?PKIX?path?building?failed:
          sun.security.provider.certpath.SunCertPathBuilderException:?unable?to?find?valid?certification?path?to?requested?target
          ????at?com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:
          150 )
          ????at?com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:
          1476 )
          ????at?com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:
          174 )
          ????at?com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:
          168 )
          ????at?com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:
          846 )
          ????at?com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:
          106 )
          ????at?com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:
          495 )
          ????at?com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:
          433 )
          ????at?com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:
          815 )
          ????at?com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:
          1025 )
          ????at?com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:
          1038 )
          ????at?InstallCert.main(InstallCert.java:
          63 )
          Caused?by:?sun.security.validator.ValidatorException:?PKIX?path?building?failed:?sun.security.provider.certpath.SunCertPathBuilderException:
          unable?to?find?valid?certification?path?to?requested?target
          ????at?sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:
          221 )
          ????at?sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:
          145 )
          ????at?sun.security.validator.Validator.validate(Validator.java:
          203 )
          ????at?com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:
          172 )
          ????at?InstallCert$SavingTrustManager.checkServerTrusted(InstallCert.java:
          158 )
          ????at?com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(SSLContextImpl.java:
          320 )
          ????at?com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:
          839 )
          ?????
          7 ?more
          Caused?by:?sun.security.provider.certpath.SunCertPathBuilderException:?unable?to?find?valid?certification?path?to?requested?target
          ????at?sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:
          236 )
          ????at?java.security.cert.CertPathBuilder.build(CertPathBuilder.java:
          194 )
          ????at?sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:
          216 )
          ?????
          13 ?more

          Server?sent?
          2 ?certificate(s):

          ?
          1 ?Subject?CN = ecc.fedora.redhat.com , ?O = example.com , ?C = US
          ???Issuer??CN
          = Certificate?Shack , ?O = example.com , ?C = US
          ???sha1????2e?7f?
          76 ?9b? 52 ? 91 ? 09 ?2e?5d?8f?6b? 61 ? 39 ?2d?5e? 06 ?e4?d8?e9?c7?
          ???md5?????dd?d1?a8?
          03 ?d7?6c?4b? 11 ?a7?3d? 74 ? 28 ? 89 ?d0? 67 ? 54 ?

          ?
          2 ?Subject?CN = Certificate?Shack , ?O = example.com , ?C = US
          ???Issuer??CN
          = Certificate?Shack , ?O = example.com , ?C = US
          ???sha1????fb?
          58 ?a7? 03 ?c4?4e?3b?0e?e3?2c? 40 ?2f? 87 ? 64 ? 13 ?4d?df?e1?a1?a6?
          ???md5?????
          72 ?a0? 95 ? 43 ?7e? 41 ? 88 ? 18 ?ae?2f?6d? 98 ? 01 ?2c? 89 ? 68 ?

          Enter?certificate?to?add?to?trusted?keystore?or?'q'?to?quit:?
          [ 1 ]

          What happened was that the program opened a connection to the specified host and started an SSL handshake. It printed the exception stack trace of the error that occured and shows you the certificates used by the server. Now it prompts you for the certificate you want to add to your trusted KeyStore. You should only do this if you are sure that this is the certificate of the trusted host you want to connect to. You may want to check the MD5 and SHA1 certificate fingerprints against a fingerprint generated on the server (e.g. using keytool) to make sure it is the correct certificate.

          If you've changed your mind, enter 'q'. If you really want to add the certificate, enter '1'. (You could also add a CA certificate by entering a different certificate, but you usually don't want to do that'). Once you have made your choice, the program will print the following:

          ...

          Added certificate to keystore 'jssecacerts' using alias 'ecc.fedora.redhat.com-1'

          It displayed the complete certificate and then added it to a Java KeyStore 'jssecacerts' in the current directory. To use it in your program, either configure JSSE to use it as its trust store (as explained in the documentation) or copy it into your $JAVA_HOME/jre/lib/security directory. If you want all Java applications to recognize the certificate as trusted and not just JSSE, you could also overwrite the cacerts file in that directory.

          After all that, JSSE will be able to complete a handshake with the host, which you can verify by running the program again:

          %?java?InstallCert?ecc.fedora.redhat.com?Loading?KeyStore?jssecacerts
          ?Opening?connection?to?ecc.fedora.redhat.com:
          443
          ?Starting?SSL?handshake
          ?No?errors,?certificate?is?already?trusted?Server?sent?
          2?certificate(s):?1?[]

          Enter?certificate?to?add?to?trusted?keystore?or?'q'?to?quit:?[
          1]?q?KeyStore?not?changed?

          posted @ 2010-02-09 14:55 ideame 閱讀(1529) | 評論 (1)編輯 收藏

          關(guān)于 Maven + Proguard

          ??? 以前試過在Ant下使用Proguard,感覺挺簡單的,使用Maven后,明顯復(fù)雜多了,復(fù)雜不在Proguard,而在proguard-maven-plugin。
          ??? 配置如下:

          <plugin>
          ????
          <groupId>com.pyx4me</groupId>
          ????
          <artifactId>proguard-maven-plugin</artifactId>
          ????
          <executions>
          ????????
          <execution>
          ????????????
          <phase>package</phase>
          ????????????
          <goals>
          ????????????????
          <goal>proguard</goal>
          ????????????
          </goals>
          ????????
          </execution>
          ????
          </executions>
          ????
          <configuration>
          ????????
          <obfuscate>true</obfuscate>
          ????????
          <proguardInclude>${basedir}/proguard.pro</proguardInclude>
          ????????
          <libs>
          ????????????
          <lib>${java.home}/lib/rt.jar</lib>
          ????????????
          <lib>${java.home}/lib/jsse.jar</lib>
          ????????????
          <lib>${java.home}/lib/jce.jar</lib>
          ????????
          </libs>
          ????
          </configuration>
          </plugin>

          出現(xiàn)異常:


          [proguard]?Obfuscating
          [proguard]?Printing?mapping?to?[D:\cces\linker\target\proguard_map.txt]
          [proguard]?Preverifying
          [proguard]?Unexpected?error?while?performing?partial?evaluation:
          [proguard]???Class?=?[net/sicross/tms/service/cces/SearchFlightOrderDetailService]
          [proguard]???Method?=?[getRouteDetail(Ljava/util/Map;)Ljava/util/List;]
          [proguard]???Exception?=?[java.lang.IllegalArgumentException]?(Can't?find?common?super?class?of?[java/util/List]?and?[java/lang/StringBuffer])
          [proguard]?Unexpected?error?while?preverifying:
          [proguard]???Class??=?[net/sicross/tms/service/cces/SearchFlightOrderDetailService]?[proguard]???Method?=?[getRouteDetail(Ljava/util/Map;)Ljava/util/List;]
          [proguard]???Exception?=?[java.lang.IllegalArgumentException]?(Can't?find?common?super?class?of?[java/util/List]?and?[java/lang/StringBuffer])
          [proguard]?java.lang.IllegalArgumentException:?Can't?find?common?super?class?of?[java/util/List]?and?[java/lang/StringBuffer]
          [proguard]?????at?proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:330)
          [proguard]?????at?proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:467)
          [proguard]?????at?proguard.evaluation.Variables.generalize(Variables.java:137)
          [proguard]?????at?proguard.evaluation.TracedVariables.generalize(TracedVariables.java:140)
          [proguard]?????at?proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlock(PartialEvaluator.java:637)

          ??? 根據(jù)異常,先是懷疑有什么jre的包沒有導(dǎo)入,增加了另外幾個也不行。在懷疑是jdk編譯版本的問題,因為輸出目標jdk版本是1.6的,在proguard-maven-plugin的configuration中增加下面的配置也沒有。

          <options>
          ????
          <option>-target?1.6</option>
          </options>

          ??? 最后,將maven的target=1.6改為1.5后,異常消失。


          <plugin>
          ????
          <groupId>org.apache.maven.plugins</groupId>
          ????
          <version>2.0.2</version>
          ????
          <artifactId>maven-compiler-plugin</artifactId>
          ????
          <configuration>
          ????????
          <source>1.5</source>
          ????????
          <target>1.6</target>
          ????????
          <encoding>UTF-8</encoding>
          ????
          </configuration>
          </plugin>



          Powered by ScribeFire.

          posted @ 2010-02-01 11:53 ideame 閱讀(6980) | 評論 (1)編輯 收藏

          查看系統(tǒng)信息:Linux版本和內(nèi)核對應(yīng)

          Red Hat 9???????????????????? 2.4.20-8

          Fedora Core 4????????????? 2.6.11-1.1369_FC4
          Fedora Core 5????????????? 2.6.15-1.2054_FC5
          Fedora Core 6????????????? 2.6.18-1.2798.fc6
          Fedora 7????????????????????? 2.6.21-1.3194.fc7
          Fedora 8????????????????????? 2.6.23.1-42.fc8

          Ubuntu 7.10??????????????? 2.6.22-14-generic

          RedHat as4.0?????????????? 2.6.9-11.EL

          CentOS 5.1????????????????? 2.6.18
          CentOS 5.2????????????????? 2.6.18


          系統(tǒng)
          ??? # uname -a # 查看內(nèi)核/操作系統(tǒng)/CPU信息
          ??? # head -n 1 /etc/issue # 查看操作系統(tǒng)版本
          ??? # cat /proc/cpuinfo # 查看CPU信息
          ??? # hostname # 查看計算機名
          ??? # lspci -tv # 列出所有PCI設(shè)備
          ??? # lsusb -tv # 列出所有USB設(shè)備
          ??? # lsmod # 列出加載的內(nèi)核模塊
          ??? # env # 查看環(huán)境變量

          資源
          ??? # free -m # 查看內(nèi)存使用量和交換區(qū)使用量
          ??? # df -h # 查看各分區(qū)使用情況
          ??? # du -sh # 查看指定目錄的大小
          ??? # grep MemTotal /proc/meminfo # 查看內(nèi)存總量
          ??? # grep MemFree /proc/meminfo # 查看空閑內(nèi)存量
          ??? # uptime # 查看系統(tǒng)運行時間、用戶數(shù)、負載
          ??? # cat /proc/loadavg # 查看系統(tǒng)負載

          磁盤和分區(qū)
          ??? # mount | column -t # 查看掛接的分區(qū)狀態(tài)
          ??? # fdisk -l # 查看所有分區(qū)
          ??? # swapon -s # 查看所有交換分區(qū)
          ??? # hdparm -i /dev/hda # 查看磁盤參數(shù)(僅適用于IDE設(shè)備)
          ??? # dmesg | grep IDE # 查看啟動時IDE設(shè)備檢測狀況

          網(wǎng)絡(luò)
          ??? # ifconfig # 查看所有網(wǎng)絡(luò)接口的屬性
          ??? # iptables -L # 查看防火墻設(shè)置
          ??? # route -n # 查看路由表
          ??? # netstat -lntp # 查看所有監(jiān)聽端口
          ??? # netstat -antp # 查看所有已經(jīng)建立的連接
          ??? # netstat -s # 查看網(wǎng)絡(luò)統(tǒng)計信息

          進程
          ??? # ps -ef # 查看所有進程
          ??? # top # 實時顯示進程狀態(tài)

          用戶
          ??? # w # 查看活動用戶
          ??? # id # 查看指定用戶信息
          ??? # last # 查看用戶登錄日志
          ??? # cut -d: -f1 /etc/passwd # 查看系統(tǒng)所有用戶
          ??? # cut -d: -f1 /etc/group # 查看系統(tǒng)所有組
          ??? # crontab -l # 查看當前用戶的計劃任務(wù)

          服務(wù)
          ??? # chkconfig --list # 列出所有系統(tǒng)服務(wù)
          ??? # chkconfig --list | grep on # 列出所有啟動的系統(tǒng)服務(wù)

          程序
          ??? # rpm -qa # 查看所有安裝的軟件包

          posted @ 2009-02-17 16:02 ideame 閱讀(382) | 評論 (0)編輯 收藏

          TCP連接的過程

          編寫:Leaf Zhou
          EMAIL:leaf_zhou_8@hotmail.com

          TCP是英文Transport Control Protocol的縮寫。從字面理解,就是傳輸控制協(xié)議。因此,TCP是一種控制協(xié)議,他本身不能用來傳輸數(shù)據(jù),它需要通過網(wǎng)絡(luò)層的IP協(xié)議來進行實際數(shù)據(jù)的傳輸。這也就是我們常常看到,TCP/IP和TCP/UDP總是同時出現(xiàn)的原因。因此,也可以理解為TCP是很多的不同的協(xié)議組成,實際上是一個協(xié)議組。提供可靠的主機到主機層數(shù)據(jù)傳輸控制協(xié)議。這里要先強調(diào)一下,傳輸控制協(xié)議是OSI網(wǎng)絡(luò)的第四層的叫法,TCP傳輸控制協(xié)議是TCP/IP傳輸?shù)?個基本協(xié)議的一種。TCP是一種可靠的面向連接的傳送服務(wù)。它在

          一、TCP概述
          TCP是英文Transport Control Protocol的縮寫。從字面理解,就是傳輸控制協(xié)議。因此,TCP是一種控制協(xié)議,他本身不能用來傳輸數(shù)據(jù),它需要通過網(wǎng)絡(luò)層的IP協(xié)議來進行實際數(shù)據(jù)的傳輸。這也就是我們常常看到,TCP/IP和TCP/UDP總是同時出現(xiàn)的原因。因此,也可以理解為TCP是很多的不同的協(xié)議組成,實際上是一個協(xié)議組。提供可靠的主機到主機層數(shù)據(jù)傳輸控制協(xié)議。這里要先強調(diào)一下,傳輸控制協(xié)議是OSI網(wǎng)絡(luò)的第四層的叫法,TCP傳輸控制協(xié)議是TCP/IP傳輸?shù)?個基本協(xié)議的一種。TCP是一種可靠的面向連接的傳送服務(wù)。它在傳送數(shù)據(jù)時是分段進行的,主機交換數(shù)據(jù)必須先建立一個會話。它用比特流通信,即數(shù)據(jù)被作為無結(jié)構(gòu)的字節(jié)流進行傳輸,沒有數(shù)據(jù)邊界。通過每個TCP傳輸?shù)淖侄沃付樞蛱枺垣@得可靠性。是在OSI參考模型中的第四層,TCP是使用IP的網(wǎng)間互聯(lián)功能而提供可靠的數(shù)據(jù)傳輸,IP不停的把報文放到網(wǎng)絡(luò)上,而TCP是負責確信報文到達。在協(xié)同IP的操作中TCP負責:握手過程、報文管理、流量控制、錯誤檢測和處理(控制),可以根據(jù)一定的編號順序?qū)Ψ钦m樞虻膱笪慕o予從新排列順序。關(guān)于TCP的RFC文檔有RFC793、RFC791、RFC1700。

          二、TCP連接的建立
          建立一個TCP連接,需要下面的步驟:
          (1)服務(wù)器端通過listen來準備接受外來的連接,稱為被動打開(passive open)。
          (2) 客戶端通過connect進行連接服務(wù)器,稱為主動打開(active open)。在這個操作中,客戶端需要發(fā)送一個同步數(shù)據(jù)報(SYN),用來通知服務(wù)器端開始發(fā)送數(shù)據(jù)的初始序列號。通常情況下,同步數(shù)據(jù)報不攜帶數(shù)據(jù),它只包含一個IP頭部、一個TCP頭部和本次通信所使用的TCP的選項。
          (3)服務(wù)器端必須對客戶端發(fā)來的同步數(shù)據(jù)報SYN進行確認,同時自己也要發(fā)送一個同步數(shù)據(jù)報(SYN),它包含客戶端發(fā)送數(shù)據(jù)的初始序列號。服務(wù)器端對在同一連接中發(fā)送的數(shù)據(jù)初始序號和對客戶端發(fā)送的確認信息(ACK),都放在一個數(shù)據(jù)報中,一起發(fā)送給客戶端。
          (4)客戶端也必須發(fā)送確認服務(wù)器端的同步數(shù)據(jù)報(SYN)。
          由上面的步驟來看,建立一個TCP連接,至少需要服務(wù)器端和客戶端進行三個分組數(shù)據(jù)的交換,因此,稱之為TCP的三路握手(three-way handshake)。

          ????????????客戶端???????????????????????????服務(wù)器端
          ????????????connect()????????????????????????accept()
          ????????????????????? --->?SYN?S?----->???
          ??????????????????????<---?SYN?C
          , ACK?S+ 1 ?<---??????
          ??????????????????????--->?ACK?C+
          1 ?----->

          第一次進行分組數(shù)據(jù)交換的過程中,分組數(shù)據(jù)中可能包含著本次通信中可能的TCP選項。這些選項有:
          (1) 最大分組(MSS)選項。TCP發(fā)送的SYN中帶有這個選項,用來告訴對方它的最大分組數(shù)據(jù)的大小MSS(Maximum Segment Size),即它能接收的每個TCP分組數(shù)據(jù)中的最大數(shù)據(jù)量。這個選項可以通過TCP_MAXSEG套接口選項獲取與設(shè)置這個TCP選項。
          (2) 窗口大小選項。這是TCP能提供流量控制的主要手段。TCP連接的每一方都有固定大小的緩沖空間,TCP的接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數(shù)據(jù)。這將防止較快主機致使較慢主機的緩沖區(qū)溢出。TCP雙方能夠通知對方的最大窗口大小是64K(65535 bytes),因為TCP頭部相應(yīng)的標識字段值只用了16位來表示。每個套接口都有一個發(fā)送緩沖區(qū)和一個接收緩沖區(qū),接收緩沖區(qū)被TCP和UDP用來將接收到的數(shù)據(jù)一直保存到由應(yīng)用進程來讀取。對于TCP,TCP通告另一端的窗口大小。 TCP套接口接收緩沖區(qū)不可能溢出,因為對方不允許發(fā)出超過所通告窗口大小的數(shù)據(jù)。這就是TCP的流量控制,如果對方無視窗口大小而發(fā)出了超過窗口大小的數(shù)據(jù),則接收方TCP將丟棄它;而對于UDP,當套接口接收緩沖區(qū)放不下接收到的數(shù)據(jù)報時,此數(shù)據(jù)報就被丟棄。UDP是沒有流量控制的,快的發(fā)送者可以很容易地就淹沒慢的接收者,導(dǎo)致接收方的UDP丟棄數(shù)據(jù)報,使數(shù)據(jù)發(fā)生丟失。
          (3)時間戳選項。時間戳選項使發(fā)送方在每個報文段中放置一個時間戳值。接收方在確認中返回這個數(shù)值,從而允許發(fā)送方為每一個收到的ACK計算RTT。

          三、TCP連接的終止
          終止TCP連接
          TCP用三個分組數(shù)據(jù)建立一個連接,但要終止一個連接則通常需要需要四個分組數(shù)據(jù)。過程如下:
          (1)先調(diào)用close的進程,稱為主動關(guān)閉(active close)。這一端的TCP先發(fā)送一個FIN分組數(shù)據(jù),告訴對方,數(shù)據(jù)發(fā)送完畢。
          (2)接收到FIN分組數(shù)據(jù)的一端執(zhí)行被動關(guān)閉(passive close),同時,發(fā)送對這個FIN的確認ACK分組數(shù)據(jù)給對方。確認序號為收到的序號加1。FIN分組數(shù)據(jù)的接收意味著在當前的連接上,再也不會收到額外的數(shù)據(jù)。
          (3)接收到FIN分組數(shù)據(jù)的一端的應(yīng)用進程,將調(diào)用close關(guān)閉自己的套接口,同時TCP 會發(fā)送一個FIN分組數(shù)據(jù)給另一端。
          (4)收到這個FIN的分組數(shù)據(jù),即執(zhí)行主動關(guān)閉的一端對這個FIN分組數(shù)據(jù)進行確認。發(fā)回確認ACK分組數(shù)據(jù),并將確認序號設(shè)置為收到序號加1

          在這個過程中,執(zhí)行被動關(guān)閉的一方可以把確認對方FIN分組數(shù)據(jù)的ACK分組數(shù)據(jù)和自己要發(fā)送的FIN分組數(shù)據(jù)可以放到一個分組數(shù)據(jù)中。TCP的連接終止的過程如下:

          ????????????客戶端???????????????????????????服務(wù)器端
          ????????????close()??????????????????????????close()
          ??????????????????????--->?FIN?S?----->???
          ??????????????????????<---?ACK?S+
          1 ?<---??????
          ??????????????????????<---?FIN?C???<---
          ??????????????????????--->?FIN?C+
          1 ?--->

          四、TCP連的狀態(tài)?????????????????
          TCP的連接的建立和終止,基本上已經(jīng)清楚了,那么在這個過程中,是如何知道這個連接正處在什么狀態(tài)呢?方法當然是有的,我們先運行如下命令,看看返回的結(jié)果:

          [root@linux81?leaf]#?netstat?-an
          Active?Internet?connections?(servers?and?established)
          Proto?Recv-Q?Send-Q?Local?Address???????????Foreign?Address?????????State????
          tcp????????
          0??????0?0.0.0.0:3306????????????0.0.0.0:*???????????????LISTEN????
          tcp????????
          0??????0?0.0.0.0:139?????????????0.0.0.0:*???????????????LISTEN????
          tcp????????
          0??????0?0.0.0.0:21??????????????0.0.0.0:*???????????????LISTEN????
          tcp????????
          0??????0?0.0.0.0:22??????????????0.0.0.0:*???????????????LISTEN????
          tcp????????
          0??????0?0.0.0.0:23??????????????0.0.0.0:*???????????????LISTEN????
          tcp????????
          0??????0?192.168.253.81:139??????192.168.253.35:1201?????ESTABLISHED
          tcp????????
          0????272?192.168.253.81:22???????192.168.253.59:1776?????ESTABLISHED
          udp????????
          0??????0?192.168.253.81:137??????0.0.0.0:*?????????????????????????
          udp????????
          0??????0?0.0.0.0:137?????????????0.0.0.0:*?????????????????????????
          udp????????
          0??????0?192.168.253.81:138??????0.0.0.0:*?????????????????????????
          udp????????
          0??????0?0.0.0.0:138?????????????0.0.0.0:*?????????????????????????
          udp????????
          0??????0?127.0.0.1:36260?????????0.0.0.0:*??????????

          在上面的返回結(jié)果中,State一列,就是說明連接的當前狀態(tài)。
          TCP的連接狀態(tài)有:
          (01)CLOSED??
          (02)LISTEN??? 被動打開
          (03)SYN_RCVD??
          (04)SYN_SEND
          (05)ESTABLISHED?? 數(shù)據(jù)傳送狀態(tài)
          (06)CLOSE_WAIT
          (07)LAST_ACK?? 被動關(guān)閉
          (08)FIN_WAIT_1
          (09)FIN_WAIT_2
          (10)CLOSING
          (11)TIME_WAIT

          TCP連接狀態(tài)轉(zhuǎn)換示意圖如下所示:

          ??????????????????????????????+---------+?---------\??????active?OPEN
          ??????????????????????????????|??CLOSED?|????????????\????-----------
          ??????????????????????????????+---------+<---------\???\???create?TCB
          ????????????????????????????????|?????^??????????????\???\??snd?SYN??
          ???????????????????passive?OPEN?|?????|???CLOSE????????\???\?????????
          ???????????????????------------?|?????|?----------???????\???\???????
          ????????????????????create?TCB??|?????|?delete?TCB?????????\???\?????
          ????????????????????????????????V?????|??????????????????????\???\???
          ??????????????????????????????+---------+????????????CLOSE????|????\?
          ??????????????????????????????|??LISTEN?|??????????----------?|?????|
          ??????????????????????????????+---------+??????????delete?TCB?|?????|
          ???????????????????rcv?SYN??????|?????|?????SEND??????????????|?????|
          ??????????????????-----------???|?????|????-------????????????|?????V
          +---------+??????snd?SYN
          ,ACK??/???????\???snd?SYN??????????+---------+
          |?????????|<-----------------???????????------------------>|?????????|
          |???SYN???|????????????????????rcv?SYN?????????????????????|???SYN???|
          |???RCVD??|<-----------------------------------------------|???SENT??|
          |?????????|????????????????????snd?ACK?????????????????????|?????????|
          |?????????|------------------???????????-------------------|?????????|
          +---------+???rcv?ACK?of?SYN??\???????/??rcv?SYN
          ,ACK???????+---------+
          ???|???????????--------------???|?????|???-----------????????????????
          ???|??????????????????x?????????|?????|?????snd?ACK??????????????????
          ???|????????????????????????????V?????V??????????????????????????????
          ???|??CLOSE???????????????????+---------+????????????????????????????
          ???|?-------??????????????????|??ESTAB??|????????????????????????????
          ???|?snd?FIN??????????????????+---------+????????????????????????????
          ???|???????????????????CLOSE????|?????|????rcv?FIN???????????????????
          ???V??????????????????-------???|?????|????-------???????????????????
          +---------+??????????snd?FIN??/???????\???snd?ACK??????????+---------+
          |??FIN????|<-----------------???????????------------------>|??CLOSE??|
          |?WAIT-
          1??|------------------??????????????????????????????|???WAIT??|
          +---------+??????????rcv?FIN??\????????????????????????????+---------+
          ???|?rcv?ACK?of?FIN???-------???|????????????????????????????CLOSE??|
          ???|?--------------???snd?ACK???|???????????????????????????-------?|
          ???V????????x???????????????????V???????????????????????????snd?FIN?V
          +---------+??????????????????+---------+???????????????????+---------+
          |FINWAIT-
          2|??????????????????|?CLOSING?|???????????????????|?LAST-ACK|
          +---------+??????????????????+---------+???????????????????+---------+
          ???|????????????????rcv?ACK?of?FIN?|?????????????????rcv?ACK?of?FIN?|
          ???|??rcv?FIN???????--------------?|????Timeout
          =2MSL?--------------?|
          ???|??-------??????????????x???????V????------------????????x???????V
          ????\?snd?ACK?????????????????+---------+delete?TCB?????????+---------+
          ?????------------------------>|TIME?WAIT|------------------>|?CLOSED??|
          ??????????????????????????????+---------+???????????????????+---------+

          ????????????????????? TCP Connection State Diagram

          從上面的圖表中,可以做出如下總結(jié):
          服務(wù)器端的正常狀態(tài)轉(zhuǎn)換過程如下:
          ? CLOSED --> LISTEN --> SYN_RCVD --> ESTABLISHED --> CLOSE_WAIT --> LAST_ACK --> CLOSED
          客戶端的正常狀態(tài)轉(zhuǎn)換過程如下:
          CLOSED --> SYN_SENT --> ESTABLISHED --> FIN_WAIT_1 --> FIN_WAIT_2 --> TIME_WAIT --> CLOSED
          從上面的連接狀態(tài)轉(zhuǎn)換中可以看出,從ESTABLISHED狀態(tài)的轉(zhuǎn)換有兩種,對于客戶端和服務(wù)器端來說,是一樣的,即當收到FIN數(shù)據(jù)報之前,主動關(guān)閉,則轉(zhuǎn)換成FIN_WAIT_1;如果因為收到FIN數(shù)據(jù)報,而引起的被動關(guān)閉,則轉(zhuǎn)換成CLOSE_WAIT狀態(tài)。

          posted @ 2009-02-09 18:11 ideame 閱讀(2462) | 評論 (1)編輯 收藏

          group install gnome

          Install:

          yum grouplist

          sudo yum groupinstall "X Window System" "GNOME Desktop Environment"

          or

          sudo mount /dev/cdrom /media/cdrom

          sudo yum --disablerepo=\* --enablerepo=c5-media groupinstall "X Window System" "GNOME Desktop Environment"


          Error:

          Missing Dependency: libgaim.so.0 is needed by package nautilus-sendto 

          more detail: https://bugzilla.redhat.com/show_bug.cgi?id=250403

          Resolved:

          wget http://mirror.centos.org/centos/5/os/i386/CentOS/nautilus-sendto-0.7-5.fc6.i386.rpm ~

          sudo rpm -Uvh --nodeps ~/nautilus-sendto-0.7-5.fc6.i386.rpm

           

          repeat install.

           

          posted @ 2009-02-09 15:38 ideame 閱讀(330) | 評論 (0)編輯 收藏

          Creating A Local Yum Repository (CentOS)


          Creating A Local Yum Repository (CentOS)
          摘自: www.howtoforge.com


          Author & Content of this howto, Tim Haselaars (http://www.trinix.be)

          Sometimes it can be handy to set up your own repository to prevent from downloading the remote repository over and over again. This tutorial shows how to create a CentOS mirror for your local network. If you have to install multiple systems in your local network then all needed packages can be downloaded over the fast LAN connection, thus saving your internet bandwidth.

          Create the Directories:

          mkdir -pv /var/www/html/centos/{base,updates}


          The Base Repository

          Copy the RPMs from the CDs/DVD to /var/www/html/centos/base.

          Create the base repository headers:

          createrepo /var/www/html/centos/base


          The Updates Repository

          Select an rsync mirror for updates: check out this list of aviable mirrors: Centos OS Mirror list and these are identified with rsync.

          For example: rsync://ftp.belnet.be/packages/centos/

          The mirrors share a common structure for updates. Simply append /updates//.

          Rsync to create the updates-released repository:

          rsync -avrt rsync://ftp.belnet.be/packages/centos/5.0/updates/i386 \ --exclude=debug/ /var/www/html/centos/updates

          This will create a complete update repository at /var/www/html/centos/updates/i386. The repodata directory will be created with all of the headers.

          Next I would advise to setup a cron job to run the rsync (above). In this manner your repository is kept updated and only new updates and headers will be downloaded to your repository.


          Yum Configuration

          Edit yum.conf:

          vi /etc/yum.repos.d/CentOS-Base.repo

          [base]
          name=CentOS-$releasever - Base
          baseurl=http://192.168.*.*/centos/$releasever/os/$basearch/
          #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
          #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
          gpgcheck=1
          gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

          #released updates
          [update]
          name=CentOS-$releasever - Updates
          baseurl=http://192.168.*.*/centos/$releasever/updates/$basearch/
          #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
          #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
          gpgcheck=1
          gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

          That's it.

          Powered by ScribeFire.

          posted @ 2009-01-14 15:59 ideame 閱讀(609) | 評論 (0)編輯 收藏

          Linux設(shè)置DNS和主機名

          Linux設(shè)置DNS和主機名

          操作過程

          配置文件位于:

          /etc/sysconfig/network-scripts/ifcfg-eth0

          DEVICE=eth0
          ONBOOT=yes
          BOOTPROTO=static
          IPADDR=192.168.0.3
          NETMASK=255.255.255.0
          GATEWAY=192.168.0.1

          使IP地址生效:

          /sbin/ifdown eth0 /sbin/ifup eth0 

          配置dns解析

          echo "nameserver 211.98.1.28">> /etc/resolv.conf 

          通知網(wǎng)關(guān)更新信息:

          /etc/init.d/network restart 

          DNS 簡介

            DNS就是Domain Name System,它能夠把形如www.21php.com這樣的域名轉(zhuǎn)換為211.152.50.35這樣的IP地址;沒有DNS,瀏覽21php.com 這個網(wǎng)站時,就必須用211.152.50.35這么難記的數(shù)字來訪問。提供DNS服務(wù)的就是DNS服務(wù)器。DNS服務(wù)器可以分為三種,高速緩存服務(wù)器 (Cache-only server)、主服務(wù)器(Primary Name server)、輔助服務(wù)器(Second Name Server)。  DNS的詳細原理、工作流程、術(shù)語、概念,限于篇幅,這里就不說了。可以閱讀專門的文章,如DNS-HOWTO加以了解。

          配置主DNS服務(wù)器

          首先我們做以下假設(shè):

          • A服務(wù)器為21php.com的主域名服務(wù)器,其IP地址為11.0.0.1
          • B服務(wù)器為21php.com的輔助域名服務(wù)器,其IP地址為11.0.0.2;

          下面我們配置服務(wù)器11.0.0.1為 21PHP.COM 的主 DNS 服務(wù)器。Linux下的dns功能是通過bind軟件實現(xiàn)的。bind軟件安裝后,會產(chǎn)生幾個固有文件,分為兩類,一類是配置文件在?/etc?目錄下,一類是dns記錄文件在?/var/named?目錄下。加上其他相關(guān)文件,共同設(shè)置dns服務(wù)器。下面是所有和dns設(shè)置相關(guān)文件的列表與說明。

          位于/etc目錄下的有:

          • hosts
          • host.conf
          • resolv.conf
          • named.boot
          • named.conf

          具體說明:

          1. hosts

            定義了主機名和ip地址的對應(yīng),其中也有將要運行dns這臺電腦的ip地址和主機名。內(nèi)容:

            127.0.0.1 localhost.localdomain localhost 
          2. host.conf “order hosts bind”語句,指定了對主機名的解析順序是先到hosts中查找,然后到dns服務(wù)器的記錄里查找。 “multi on”則是允許一個主機名對應(yīng)多個ip地址。內(nèi)容:

            order hosts, bind 
            multi on
            nospoof on
          3. “resolv.conf”

            “nameserver 10.0.0.211”指定了dns服務(wù)器的地址。注意,這個文件對普通非dns服務(wù)器的電腦(非windows的系統(tǒng);Windows系統(tǒng)是在“網(wǎng)絡(luò)屬性”中設(shè)置這項的)來說,是必不可少的。你如果沒有設(shè)置本機為dns服務(wù)器,你又要能夠解析域名,就必須指定一個dns服務(wù)器的地址。你可以最多寫上三個地址,作為前一個失敗時的候選dns服務(wù)器。“domain zrs.com”指定默認的域。內(nèi)容:

            domain 21php.com
            nameserver 11.0.0.1
          4. named.boot

            文件是早期版本的bind軟件使用的配置文件,現(xiàn)在新版本中已經(jīng)讓位于“named.conf”。named.conf是 dns 服務(wù)器配置的核心文件。

            下面我們一段一段的來解說。

            # named.conf - configuration for bind # 
            # Generated automatically by bindconf, alchemist et al.

            controls {
            inet 127.0.0.1 allow {
            localhost;
            } keys {
            rndckey;
            };
            };
            include "/etc/rndc.key";
            options {
            directory "/var/named/";
            };
            zone "." {
            type hint;
            file "named.ca";
            };
            zone "0.0.127.in-addr.arpa" {
            type master;
            file "0.0.127.in-addr.arpa.zone";
            };
            zone "localhost" {
            type master;
            file "localhost.zone";
            };
            zone "21php.com" {
            type master; notify yes; file "21php.com";
            };

            上文中#為注釋符號, 其他各行含義如下:

            diretory /var/named 

            指定named從 /var/named 目錄下讀取DNS數(shù)據(jù)文件,這個目錄用戶可自行指定并創(chuàng)建,指定后所有的DNS數(shù)據(jù)文件都存放在此目錄下;

            zone "." { type hint; file "named.ca"; }; 

            指定named從 named.ca 文件中獲得Internet的頂層“根”服務(wù)器地址 。

            zone "0.0.127.in-addr.arpa" {
            type master;
            file "0.0.127.in-addr.arpa.zone";
            };

            指定named作為127.0.0網(wǎng)段地址轉(zhuǎn)換主服務(wù)器,named.local文件中包含了127.0.0.*形式的地址到域名的轉(zhuǎn)換數(shù)據(jù)(127.0.0網(wǎng)段地址是局域網(wǎng)接口的內(nèi)部 loopback地址);

            zone "localhost" { type master; file "localhost.zone"; }; 

            指定包含localhost的DNS文件數(shù)據(jù)存放在/var/named/localhost.zone中;

            zone "21php.com" { type master; notify yes; file "21php.com.zone"; }; 

            以上語句表明域21php.com的DNS數(shù)據(jù)存放在/var/named/目錄下的21php.com.zone中;用文本編輯器打開/var/named/21php.com.zone,其內(nèi)容如下:

            $TTL 86400 
            @ IN SOA @ root.localhost ( 2 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 86400 ; ttl )
            @ IN NS localhost
            www IN A 11.0.0.233
            www2 IN A 11.0.0.23
            forum IN A 11.0.0.10
            @ IN MX 5 mail.21php.com.

            該文件的前部分是相應(yīng)的參數(shù)設(shè)置,此部分不需要改動,后面的部分就是具體的DNS數(shù)據(jù);例如:

            www IN A 11.0.0.233 # 將www.21php.com 解析到地址11.0.0.233;
            www2 IN A 11.0.0.23 # 將www2.21php.com 解析到地址11.0.0.23;
            club IN A 11.0.0.10 # 將club.21php.com 解析到地址11.0.0.10;

          配置輔助DNS服務(wù)器

          輔助DNS服務(wù)器,可從主服務(wù)器中轉(zhuǎn)移一整套域信息。區(qū)文件是從主服務(wù)器中轉(zhuǎn)移出來的,并作為本地磁盤文件存儲在輔助服務(wù)器中。在輔助服務(wù)器中有域信息的完整拷貝,所以也可以可以回答對該域的查詢。這部分的配置內(nèi)容如下:

          zone "21php.com" IN {
          type slave;
          file "21php.com.zone";
          masters {
          11.0.0.1;
          };
          };

          可以看到,和主DNS服務(wù)器不同地方就是:“type”改為了“slave”,然后指明了主DNS服務(wù)器的地址masters { 11.0.0.1; };。DNS服務(wù)啟動時,就會自動連接11.0.0.1,讀取21php.com域的信息,然后保存到本機的21php.com.zone文件里。

          測試DNS服務(wù)器

          改動過DNS的相應(yīng)文件,用“ndc restart”命令重新啟動服務(wù),在redhat 7.1以上版本中使用命令:

          /etc/rc.d/init.d/named restart 

          或者

          /etc/rc.d/init.d/named reload 

          使改動生效。

          要測試DNS,可以找一臺客戶機,把它的DNS地址設(shè)成新建立的DNS服務(wù)器地址,然后試試上網(wǎng),收信,下載等。也可以使用nslookup命令:運行nslookup,輸入要查詢的主機名,看是否返回正確的ip地址,在redhat 7.1以上版本中推薦使用dig命令。

          posted @ 2009-01-14 15:59 ideame 閱讀(8735) | 評論 (0)編輯 收藏

          僅列出標題
          共4頁: 上一頁 1 2 3 4 下一頁 
          主站蜘蛛池模板: 海晏县| 淮阳县| 日喀则市| 溧水县| 多伦县| 枣强县| 衡东县| 常宁市| 宁城县| 洪雅县| 明水县| 淄博市| 渝北区| 兰考县| 崇阳县| 韶山市| 清新县| 泰宁县| 徐汇区| 云霄县| 东宁县| 从化市| 瑞安市| 右玉县| 陵水| 文成县| 灯塔市| 富平县| 永寿县| 昂仁县| 黑水县| 敖汉旗| 新邵县| 宜阳县| 马关县| 延庆县| 灌南县| 子长县| 塔城市| 辉南县| 齐齐哈尔市|