電腦不乖 – HTTP 與印表機問題

前陣子某一天, 我的網站突然不能用了. 按照先前的印象, 首先檢查寬頻連線、防火牆、HTTP port. 果然 HTTP port (80) 不知被誰佔用了?

網路上有很多這類文章, 隨便 Google 都可以查得到, 所以我前一次把問題解決後也沒去記用法. 不過問題再度發生的時候就糗了, 又要重頭 Google. 網路上的 SOP 是執行

netstat -ano

看 0.0.0.0:80 是哪個 PID 占用? 高手 [1] 會用

netstat -nao | find “0.0.0.0:80″

這樣就會自動撈出來 PID. 有了 PID, 還要找是哪個程式在用, 同樣參考 [1], 應該打

tasklist /fi “pid eq 1234"   (1234 是舉例)

如果這程式不是 Apache, 而是像是慣犯 Skype…等等在用, 就可以把它先 kill 掉. 比較麻煩的是看到 pid =4 , 這是系統自己占用的, 網路上的解法 [2] 是把 http service 停掉, 並且把開機時的 http service 設為 disabled.

運氣好的話, 執行

net stop http

這時用到 http 的程式就會一隻一隻停掉. 但我的運氣不太好, 停到 http service 的時候, 就會跟我說 http 正在開啟或關閉中, 無法停止服務. 我猜是因為 apache 還在用它的關係. 此時死馬當作活馬醫, 繼續打

Sc config http start= disabled

然後重新開機, 基本上就修復了. 雖然中間反覆了幾次修些小問題, 但這招是靈光的. But….

用了這招之後, printer 就爛掉了. 我的 printer 是 MFP, 所以它還可以掃描, 但是不能印東西了! 這實在讓我很不方便. 一開始也沒聯想到是關閉了 http 的關係. 根據正常的直覺, 當然是先檢查 spooler 啊! (看我大學系統程式學得多精實, 哈!)

當我去服務裡面啟動 spooler, 它彈給我一個 error 1068! 1068 的錯誤代碼是相依於 spooler 的服務無法啟動. 到處看了幾篇文章, 原來 spooler 的相依性在這裡.

print-spooler

把 RPC, DCOM Server Process Launcher, 甚至是網路上 [3] 有人建議的 WINHTTP Web Proxy Auto-Discovery Service 都檢查了. 它們都是正常的! 所以…元凶還是我自己啊! 赫然想起我前一陣子把 http 設為 disabled 了.

因此, 重來一次, 這次把它設為… 

net stop http

Sc config http start= boot

哇! 不行, 設 auto..也不行! 設 delayed-auto …耶! 可以了!

Sc config http start= delayed-auto

重新開機, 此時 spooler 可以運作了. 由於 bug 發生的症狀是: 想要印東西時, word 找不到印表機. 因此我趕快新增印表機!

搜尋新增裝置…找不到! 再試一次…還是找不到! 莫非….

原來不用新增, 根本系統就自動找到印表機了. 雖然我看了某篇文章去刪除了 printer 的機碼. 但看來不影響, 它又自動裝上了, 難怪新增不了, 唉! 我真是自作聰明.

為了避免這問題再發生第三次, 乾脆就把前因後果全部火速打成一篇. 希望也能幫助別人解決類似的問題.

[ref]

1. 如何查詢哪個程式佔用了指定Port

2. [Windows] Port 80被佔用導致Apache無法啟動

3.  Printer spooler windows 8 Error 1068: The dependency service or group failed to start.

Samba 再舞

原本以為 Samba 的設定對我已經不是問題了, 不過這天拿到一台全新的 server 測試時, 真讓我傷了不少腦筋.

首先不就是去安裝一套 samba 嗎?然後改改 smb.conf, /etc/init.d/smb restart, 從 PC 連過去不就結了?我原本就是這樣想的, 不過 PC 始終連不上這台新 server. 由於別台 server 的 samba 我都能連得上, 所以 PC 的防火牆顯然沒有問題. 還是來關心 smb.conf 吧!

把 passdb backend =tdbsam ? 改到 tdbsam 時,也看到註解上直接說 smbpasswd 那套都過時了, 現在不是 tdbsam 就是 ldapsam. SAM 大概就是指 Samba 了? LDAP 是 Light Directory Access Protocol,設定 ldapsam 帳號密碼會去問 LDAP server,適用於大量的使用者.而 tdbsam (Trivial DataBase)可以直接支援這台 server 上的用戶, 適用於 250 個以下的使用者 [ref 1]. 不過連 security=share 都不靈, 顯然和帳號密碼都無關.

接著很自然就會想到, Google 一下 “Samba 連不上" 這個關鍵字. 呵呵, Google 果然給我們很多建議, 首先就是目錄的權限要設對. 這個容易, 把它們的 mode 都設成 777 就結了, 但這個也不是原因. 其他人遇到和我類似的狀況時, 往往都是孤兒文 – 有人問沒人答.

沒辦法, 我只好去看 log 了 – Windows 的 “診斷". 其實 Windows 的 “疑難排解" 很難用, 這次真的是不得已才去研究它.

原來是 port 445 沒回應. 那麼怎麼把 server 的 port 445 打開呢?首先要去改 iptables [ref 2].

vi ./etc/sysconfig/iptables

加入兩行規則, 把 port 445 的 TCP 和 UDP 都改為接受.

-A INPUT -m state — state NEW -m tcp -p tcp -s 172.26.0.0/16 –dport 445 -J ACCEPT

-A INPUT -m state — state NEW -m udp -p udp -s 172.26.0.0/16 –dport 445 -J ACCEPT

其中, 192.168.0.0/16 的 代表 mask  255:255:0:0, 所以公司裡面不同網段的 IP 都可以連得上. 關於 32~0 各自代表 mask 值多少, 請參照 [ref 3].數字愈小代表接受 IP 的範圍愈大. 
然後重啟防火牆, 
service iptables restart

果然, 現在新增一個網路連線磁碟機的時候, 所有 smb.conf 裡面設定的目錄都自動跑出來讓我選了.

[ref]

1. Howto setup Samba Server (File Server) With tdbsam Backend 

2. 邁向 RHCE 之路 (Day29) – Samba 檔案分享伺服器

3. Classless Inter-Domain Routing

Linux Server 小筆記

從來都沒有想過, 會這麼密集地重灌 Linux!

因為某廠商的測試軟體, 它經常會疑心其他人佔用了它的 port 80, 然後就再也不做事了. 我只好研究一下怎麼看誰用了 port 80?

netstat -tup

然後, 果然是有看到 Status 是 CLOSE_WAIT 或是 FINISH_WAIT 的連結. 這些都是原來連不上的時候, 所開的一些 browser. 由於在 Linux 端已經看不到 PID, 所以我就從 PC 端去關掉這些視窗, 接著再一次

netstat -tup

那些 WAIT 的 link 都不見了, 但是廠商的軟體還在疑心著…

killall httpd

還是沒用咧…

只好再重灌了! 那台 Asus RS120-E5/PA4 1U server 開機起來時吵得像是重型機車一樣, 我真是不想坐在它前面啊! 過幾天, 還是請 ITD 把它收到機房去好了. 老實說這台 4 核心的主機, 我一點都不覺得它快, 傷腦筋~~

如果 RedHat 重灌的時候, 選擇英文的介面, 那麼進到 FireFox 之後, 中文都會變成醜醜的亂碼. 但是選中文介面的話, 那個寶貝軟體就會 install 不了. 解決之道就是用中文去灌, 灌好了再把介面改成英文, 這樣就一舉兩得了!

因為不想離 server 太近, 所以想到先打通 telnet 再說. 不過咧! Telnet 真的退流行了, 設定起來比較麻煩. 首先要看 telnet 倒底存不存在?

server telnet (ssh 下不能用, 剛才試過了)

回應是一片空白.

server telnet start

它就會說不認識 telnet 這個 service. 如果不存在的話, 就要檢查安裝包在不在?

rpm -qa telnet (telnet 出去)

rpm -qa telnet-server (telnet 進來)

(用 -q 也可以)

如果沒找到安裝包, 就要去網路上找一個回來.

接著用 rpm 安裝.

rpm -i telnet-xxx.rpm

rpm -i telnet-server-xxx.rpm

裝好了之後, 要先把 disable 的狀態改變.

在 /etc/xinetd.d 底下可能有好幾個 telnet 相關的檔案, 但是都是顧名思義, 例如 krb-telnet.

總之, 只要用 vi 打開這個檔案, 把 disable = yes 改成 disable = no 就好了,

最後重啟服務,

service xinetd restart

這樣就大功告成了.

不過, 既然 ssh 比較紅, 不如直接開啟 ssh 就好, 反正用法差不多. 請參考鳥哥的網頁.

http://linux.vbird.org/linux_security/old/08telnet-ssh.php

有了中文、telnet (ssh), 接下來的 svn 就很麻煩,  網路上幾乎沒有任何一包是一裝就好的, 幸好公司內部網站上就有. PDF 也是必備, 可以從 adobe 的網站上自動找到正確的版本. 當我們 download 下來, 會跑到哪裡去呢? 原來 default 是在桌面. Linux 的桌面不像 Windows 那麼直覺, 但是可以在

cd ~/Desktop 下找到.

再來就要安裝客戶軟體了. 首先外接硬碟盒會出現在 dev/sdc1 之類的地方, 用 mount 去看, 可以觀察到那是一個不能執行的磁碟. 把它重 mount 成可執行就 OK 了.

mount -o remount,ro,exec /dev/sdc1.

嗯! 因為最近重灌 3 次 Linux, 這些暫時都變熟了…

WLAN 架站小心得

分享一下很小的技巧, 就是如何用內網的 IP 透過 wireless LAN 架站.

最基本的架站方式, 當然就是有一個固定 IP.

其次, 就是用一個浮動 IP, 但是每次上網就到免費的動態 DNS 網站註冊, 這樣別人還是可以用 URL 找到你架的站的 IP. 當然, 我們要選免費的服務才不會吃虧.

如果 server 放在自己的內網, 透過 AP/Gateway 的 NAT 轉過 IP 之後, 我們要怎麼讓外面的人透過 URL 來 access 我們的網站呢?  我試了一下我那不好用的 gateway, 就是要在安裝 HTTPD 的時候, 把內網的 “固定 IP", 例如 192.168.1.1 指定給 HTTPD.

假設我們只安裝 HTTPD, 那麼就在 gateway 裡面把 port 80 forward 到內網的 192.168.1.1. 這樣一來, 外面的人只要看到 URL, 就會自動透過外面的 DNS, 找到我們用來上網的固定 IP,  接著 port 80 的 packet 也會自動送到我們內網 192.168.1.1 的那台 HTTPD 主機去.

那麼, NAT 後面的內網怎麼辦呢? 192.168.1.2 平平在內網, 但port forwarding 就用不到了. 這時候, 把 DMZ 裡面設定成剛才的 192.168.1.1, 這樣內網就可以直接看到我們自己做的網站. 若不設定 DMZ 非軍事區, 那麼只會看見 gateway 的首頁, 那還蠻悶的….

花了我一兩個小時的研究, 我終於搞定了. 但是要架什麼站, 我都還沒想好. 這一切都是我貪小便宜去註冊了 cash.idv.tw 網域所帶來的後遺症, 哈哈!