2014年10月26日 星期日

用VirtualBox建立Linux開發環境(三) Samba server設定

我們在用VirtualBox建立Linux開發環境(二)已經完成SSH連線的設定,現在可以用PuTTY來操作Linux了。接下來要設定的是Samba server。Samba是允許Linux上的檔案系統能夠透過Windows的NetBIOS protocol(就是「網路上的芳鄰」)來共享。在設定上蠻簡單的,只要修改/etc/samba/smb.conf這個檔案就可以了。

先簡單介紹一下smb.conf的格式,它大概是長這樣子的:
[section1]
  parameter1
  parameter2
[section2]
  parameter3
  parameter4
...

方括號裡的是section,每個section分別代表一份共享資料,底下的parameter則是要套用至該section的規則與設定,包括了路徑、使用者及讀寫權限等,每個parameter只會作用在該section,不同的section間是各自獨立的。舉例來說:
[Project]
  path = /project
  valid users = Bob
  read only = no
這樣子的設定就表示只有使用Bob這個帳號才能透過Samba server去讀寫/project資料夾。

除了一般通用的section之外,有三個特殊的section是有額外的功能的,它們分別是[global]、[homes]和[printers],其中[printers]顧名思議和印表機共享有關,在這裡暫時用不到所以我們略過它只介紹另外兩個。

前面有提到每個parameter的設定只會作用在所屬的section之中,但有些很常用的設定是每個section都會需要,如果要在每個section中一一重複這些設定是很令人厭煩的,為此Samba提供了[global]這個特殊section,我們只要把那些共同設定放在[global]底下,它們就會自動套用至所有的section了。

[homes]允許我們可以根據不同的登入帳號自動連結到Linux的/home/下的對應使用者資料夾。如果沒有[homes]這個特殊功能,我們想幫Bob、Alice和Michael建立各自的共享資料夾可能得分別設置多個section:
[Bob]
  path = /home/Bob
  valid users = Bob
[Alice]
  path = /home/Alice
  valid users = Alice
[Michael]
  path = /home/Michael
  valid users = Michael
... 

可以想像的當使用者一多就會造成管理上很大的不方便,[homes]主要目的就是幫我們解決這個麻煩,我們只要在[homes]裡加上一行
  valid users = %S
那當Bob登入時就會自動連到/home/Bob,Alice登入時就會自動連到/home/Alice了。

另外值得一提的是smb.conf是使用「#」「;」當註解符號,也就是在這兩個符號後面的一整行都會被視為註解而被忽略(如果你使用vi/vim應該可以發現註解的那幾行顏色是不一樣的),smb.conf已經有幫我們先寫好了許多設定並在這些設定前面加上「;」讓它暫時失效,當我們需要這些設定時只要拿掉最前面的註解符號即可,在使用上可說是相當方便的。

我們的virtual machine只會有我們自己的Windows去連它,理論上最簡單的方式應該是直接建立自己專屬的section就行了。但在這裡我們還是嘗試著遵循Samba的通用設定方式來修改[global]和[homes]。

修改smb.conf

要修改/etc/samba/smb.conf同樣必需具備root權限,如果上次設定網路後有登出或重開機,請先
$ sudo su
開啟/etc/samba/smb.conf後先找到[global],底下有一行
  #   security = user
請把前面的#拿掉,設定security = user後我們從Windows要連線到Samba server時就必須先通過user/passwd的認證才行。

另外由於Windows與Linux字元編碼不同,在[global]底下還得新增以下三行來指定對應的字元編碼方式
  unix charset = utf8
  display charset = utf8
  dos charset = cp950

接下來找到[homes],把「;」拿掉並調整成底下的設定:
[homes]
  comment = Home Directories
  browseable = no
  read only = no
  create mask = 0755
  directory mask = 0644
  valid users = %S
各個設定的簡單說明如下:
comment = Home Directories
    這是我們從Windows上看到的註解:

browseable = no
    這個設定會決定Windows能否看得到共享資料夾,單就字面來看設為no就表示看不到。但它在[homes]這個特殊的section裡卻會有不同的解讀方式,設為no我們無法看到"homes"但卻能看到真正的user帳號。

read only = no
    允許我們擁有「寫入」的權限,這樣我們才能在Windows修改Linux的檔案及資料夾。

create mask = 0755
directory mask = 0644
    這個是我們從Windows端建立檔案或資料夾在Linux系統的使用權限,基於安全考量Samba預設值都是700,但我習慣改為一般的Linux檔案權限。(不然由Windows建立的檔案在ls -al時會看到-rwx------,和其他的-rwxr-xr-x放一起總是覺得很突兀)。

valid users = %S
    這個是前面所說的,根據不同的登入帳號對應到Linux /home底下的使用者帳號。

設定完成後存檔退出,並在shell輸入以下指令來重新啟動Samba server:
# service nmbd restart
# service smbd restart


從Windows建立連線

從Windows連上Samba server有幾種方法:

1. 開啟「我的電腦」,按下「連線網路磁碟機」,選擇一個磁碟機代號,並在資料夾裡輸入
    \\[ip位址]\[Linux帳號]
然後按下完成,會彈出視窗詢問帳號密碼,輸入後就能連上Samba server。

我們在Linux下的home directory已經成功出現在Windows上了

2. 透過網路上的芳鄰。這個方法可以直接看到主機名稱,點進去後也是輸入帳號密碼就能看到Linux上的家目錄。

如果找不到的話就直接在Windows檔案總管下輸入\\[ip位址]

測試

首先我們點進共享資料夾,可以看到Linux家目錄底下的檔案已經能在Windows系統上瀏覽,還能用記事本去開啟編輯它。

接下來我們透過Windows建立一個新的資料夾dirFromWin

然後再從PuTTY使用ls -l查看內容。
從Windows新建的dirFromWin也能順利被Linux系統看到了,而且它的owner user/owner group及檔案存取權限與直接在Linux上使用mkdir建立的完全沒有兩樣。

如此一來我們就可以在Windows上使用熟悉的文字編輯器(如記事本、 UltraEdit)來修改檔案了,要把檔案從Windows搬到Linux也只要用滑鼠直接拉過去即可,真是超方便的啦!



P.S. 1 前面[homes]的browseable如果設為yes,那當我們連到Samba時除了使用者目錄外,還會多看到一個"homes",但點進去看其實內容是完全相同的。


P.S. 2 若想更深入了解samba的設定可以參考 smb.conf(5)或samba(7)這兩份on-line manual,或是到Samba官網查看HowTo文件 http://www.samba.org/

2014年10月11日 星期六

用VirtualBox建立Linux開發環境(二) 網路設定與SSH連線

上次已經安裝完ubuntu 10.04 server,這裡我們要先設定網路及SSH連線。完成這些步驟後就可以使用PuTTY這類的terminal simulator軟體來操作linux了。

網路設定

首先按下綠色的按鈕來啟動linux,並輸入使用者帳號及密碼。

輸入完後就能看到歡迎訊息,同時進入shell介面等待我們輸入指令。

我們要先設定eth1那張Host-Only的網卡,這樣子才能進行ssh及samba連線。
不同的linux distribution設定網路的方式不見得完全一樣,而ubuntu 10.04網路的設定是透過 /etc/network/interfaces這個檔案。我們可以觀察一下目前的設定,在shell下輸入
    cat /etc/network/interfaces
可以看到第一張NAT網卡eth0在安裝過程中已經自動設定好了。
也就是此時去ping Google等網站應該可以ping的到的,我們要做的只剩設定eth1。
要修改/etc/network/interfaces這個檔案必須具有root權限,所以得先執行「su」這個指令。
$ sudo su
系統會要求輸入密碼,輸入成功後user就變成了root了。

接下來我們透過vi/vim等文字編輯器在/etc/network/interfaces最下方補上eth1的設定
  auto eth1
  iface eth1 inet static
  address 192.168.56.99
  netmask 255.255.255.0
  network 192.168.56.0
其中的address設定的192.168.56.99就是我們等一下PuTTY要連的ip address。

如果不會用vi/vim也沒開係,直接在shell下一行一行敲入:
# cat >> /etc/network/interfaces << EOF
> auto eth1
> iface eth1 inet static
> address 192.168.56.99
> netmask 255.255.255.0
> network 192.168.56.0
> EOF

輸入完後再 cat /etc/network/interfaces來確認一下是否有修改成功

這時候如果使用ifconfig來查詢網路狀態會發現eth1的設定還沒有生效。

你可以重新開機,不過有更簡單的方法,只要在shell下輸入
# /etc/init.d/networking restart
這樣網路就會重新啟動了,再用ifconfig檢查一次,可以發現eth1也成功拿到ip了。

當初在安裝ubuntu的最後一個步驟有勾選安裝openSSH server,此時我們也設定好Host-Only的網路卡,接下來就可以使用terminal simulator來連線了。

SSH連線

ssh連線很簡單,先去下載terminal simulator,常見的免費工具有
PuTTY、tera term、Poderosa ...
每個都抓下來試試看順不順手,這裡只簡單介紹PuTTY及Poderosa最基本的連線功能。這些工具都還能做一些較進階的設定,有興趣的就自己上網查詢一下囉。

為什麼我們不直接在VirtualBox的那個小窗裡操作linux就好,還要這麼大費周章的搞個SSH連線呢?

使用這類terminal simulator大概有幾個好處,首先我們可以很輕易的設定顯示的字型外觀,另外也可以讓我們任意調整視窗大小(就算你把VirtualBox的linux視窗最大化,中間有效顯示區塊還是小小的),最後也是最重要的,我們可以使用Copy & Past功能了,這樣可以避免太長太複雜的指令敲錯,這也是為什麼我要把SSH連線的設定擺最前面的原因,之後介紹的samba及共享資料夾的設定都只要直接Copy & Past就好了,不必再逐字敲入。


PuTTY:
PuTTY使用上很簡單,先在Host Name (or IP address)裡輸入eth1的address (即192.168.56.99),然後確認勾選了SSH,再按下Open就可以了。

連上linux後會要求輸入user/passwd,輸入後就可以進入歡迎畫面及shell了。


Poderosa:
個人推薦Poderosa,在需要同時開啟多個連線的情形下,它能把不同的連線Tab在同一個視窗裡,讓底下那條windows工具列看起來清爽很多。它的使用方法和PuTTY差不多,從File --> New Telnet/SSH Connection去開啟新連線。

在Host輸入eth1的位址,Protocol選SSH2,接著在Account及Passphrase敲入帳號密碼就可以連上去了。

這字型是不是很漂亮呢?


2014年10月4日 星期六

用VirtualBox建立Linux開發環境(一)

過去要同時在電腦裡安裝winodws及linux必須透過bootloader設定多重開機系統,這衍生出系統間相容性問題,例如windows提供的bootloader就無法偵測到linux,因此得先安裝windows再安裝linux。但如果哪天你想在不動到現有linux的情況下重灌window就變得很麻煩。這些bootloader層級的設定對入門者實在是相當大的負擔,只要一不小心設定錯誤系統就無法開機了。另外作業系統因為是彼此獨立的,如果想切換到另一個系統就必須重新開機,這也是相當另人討厭的。

好在CPU速度愈跑愈快。現在上面那些麻煩事已經有解決方法。透過virtual machine讓我們能直接在windows上跑linux了,virtual machine對原本的作業系統而言就只是一隻程式而已*,只是這隻程式能模擬出硬體環境,我們就在這「虛擬」的硬體上安裝及執行另一套linux。

這裡要介紹的VirtualBox就是一套免費的virtual machine軟體,目前由Oracle公司維謢。這套軟體相當好用,特別是在網路設定上非常簡單,可以很輕鬆的讓virtual machine與主機原生作業系統連線溝通,甚至要一次建很多virtual machine來模擬LAN也不是難事 (我就曾經建立過ubuntu, openSuse及freeBSD來測試網路連線程式),跟付費的vmware比起來可以說表現的有過之而無不及,個人強力推薦啊!

接下來會採step by stey的方式詳細記錄在VirtualBox上架linux的方法。選擇的linux是Ubuntu10.04.4(LTS) Server版,會選擇Server版而不是desktop版當然是因為只是要做開發測試程式用的,不需要X-Window,這樣可以省比較多的資源且執行起來也有較佳的效能。

*嚴格說來virtual machine跟一般應用程式還是有些許差別,為了效能考量現在的CPU都有針對virtual machine提供更先進的硬體支援


軟體清單

VirtualBox 4.3.10
在Virtualbox的官網可以下載 ( https://www.virtualbox.org/ )

Ubuntu10.04.4 Server
在Ubuntu官網下載  ( http://releases.ubuntu.com/lucid/ )

VirtualBox可以抓最新版,反正大同小異,只要可以裝起來就好了
但ubuntu不同版本間可能有不小差異,10.04 server版我已用了幾年習慣了,反正裡面的任何軟體如果覺得太舊都可以隨時自己抓最新source code下來重build。

建立virtual machine

先安裝好VirtualBox並啟動它。
按下畫面左上方的「新增」按鈕來建立一個virtual machine。

輸入virtual machine的名稱及選擇要安裝的作業系統,VirtualBox會根據我們選擇的作業系統自動幫我們配置不同設定值,如記憶體或硬碟空間等。

設定記憶體大小,因為要安裝的是ubuntu server版,不會跑 X-Window,所以並不需要開太大,給個1024MB就綽綽有餘了 (當然如果要跑大型專案記憶體就得開大些了)。

接下來選擇「立即建立虛擬硬碟」。

VirtualBox使用的虛擬硬碟格式,這裡選VirtualBox 內建的VDI,會產生一個副檔名為.vdi的虛擬硬碟檔。

選擇硬體配置方式,這裡選動態配置,動態配置的好處是虛擬硬碟檔的大小一開始是很小的,它會動態隨著安裝愈多的軟體而逐漸變大。如果選擇的是固定大小,那接下來設定30GB的硬碟空間後就會發現新建的VDI硬碟檔馬上吃走了30GB,即使目前還沒有安裝任何東西在裡面。

接下來指定虛擬硬碟的空間上限及存放位置,由於剛才選的是動態配置,用多少就佔多少,開大一點並不會造成額外的浪費,給個30GB應該很夠用了。

按下建立就跑出virtual machine的摘要圖了。

接下來我們要做一些額外的設定:

首先是網路,預設已經有一張NAT網卡,virtual machine可以透過它連到internet。除了這張網卡外我們還要新增一張Host-Only (僅限主機)的介面卡,這張網路卡顧名思義就是讓你的原生作業系統(Windows)與linux之間連線用的,之後的ssh連線及samba server都得透過這張Host-Only網路卡。

另外我們要新增一個共用資料夾,共用資料夾可以讓你將windows裡的一個現有資料夾mount成為linux一個partition,方便兩個作業系統間的溝通。(因為我們也會安裝samba,這個步驟其實可以跳過,但是共享資料夾在使用上仍有個好處,你可以將linux的設定檔及一堆軟體的source code放在共享資料夾裡,mount上去後可以直接使用cp來複製,這樣可以避免頻繁的使用滑鼠切換不同視窗)。

選擇資料夾路徑、給它一個名子並勾選自動掛載。

接著掛載ubuntu server的光碟映像檔,這個映像檔就是一開始下載回來的ubuntu10.04 server的iso檔。

按下確定後就可以將virtual machine開機正式安裝ubuntu了。

安裝Ubuntu server

一開始是語言選項,用預設的Engilish。


國家選other --> Asia --> Taiwan。

鍵盤也是用預設值就好。



網路設定選eth0那張,ubuntu會自動幫我我偵測及設定網路。

設定hostname,幫這台電腦取個名字。

設定timezone,預設應該已經選好了Asia/Taipei,直接按下Yes。

分割硬碟,預設會使用LVM,這是可以讓我們動態調整partition size的技術,但由於我們的linux已經建構在virtual machine之上,也選擇了動態配置,已經具有相當大的彈性了,因此這裡選第一項「Guided - use entire disk」就好。

我們只有設定一顆虛擬硬碟也沒得選,就是它了。

系統會自動幫我們分割ext4及swap partition,並詢問是否儲存設定,這裡要記得選Yes。

接下來會開始安裝作業系統。
過一會兒會要求輸入user帳號及密碼。


詢問是否幫/home加密。因為這是拿來自己開發用的linux,不會有其他使用者,沒有加密的必要,選No就好了。

設定proxy server,直接按Enter跳過。

詢問是否自動更新,選預設的「No automatic updates」。

接下來問我們想要安裝何種軟體,利用「空白鍵」選擇OpenSSH server及Samba file server,選好後按Enter。

最後詢問是否安裝GRUB bootloader,也是選Yes。

接著花點時間等它安裝完成,按下Enter重開機後就可以使用剛剛建立的user帳號登入了!!