1. 程式人生 > >Linux下利用NFS和Samba在source insight上快速開發應用程式

Linux下利用NFS和Samba在source insight上快速開發應用程式

首先,在搭建這個環境之前,我們需要了解一下NFS-samba-tftp之間的區別,這個很多做嵌入式移植的朋友應該是再熟悉不過了。不過很少有人深究他們到底有什麼區別?這裡我也不講深入的本質,簡單的區別一下他們。這裡我就引用一下網上一些文章吧。

NFS是SUN Microsystem公司開發的網路檔案系統,它是一種基於遠端過程呼叫(RPC)的分散式檔案系統架構。與Samba相比較,NFS的資料吞吐能力更強。

1、     用命令 # rpm –qa | grep nfs檢查軟體包NFS是否安裝 ,如果輸出沒有輸出,表明沒有被安裝,請自行安裝之。
2、     配置NFS伺服器。用任何文字編輯器配置檔案/etc/exports,來確定需要給客戶共享的目錄。它的基本格式為 Directory   Host(options) # comments ,這3個欄位/列要在一行,directory與host(options)之間要有間隙,# comments 可有可無。主機選項主要是給與掛接使用者什麼樣的許可權。目錄directory表示要共享出去的目錄,值得注意的是,在啟用NFS服務以前,系統管理員應該仔細一些,比如不小心共享了根目錄/,並且給與使用者讀寫許可權,這是十分糟糕的問題。因此,儘可能少的共享目錄和賦予較小的訪問許可權。主機名host是一個很靈活的專案,可以是單個的主機名稱(由/etc/hosts得到),主機ip地址,由域名伺服器解析的主機名稱,IP網路—網路號和子網掩碼中間用 “/”連線,NIC等。下面列舉一個例子。
/home/sery     sery(r,w) #把目錄/home/sery共享給主機sery,並且主機對目錄#/home/sery有讀寫許可權
/tmp       192.168.100.18(ro) #主機192.168.100.18對目錄/tmp具備只讀共#享許可權
/media/cdrom   192.168.100.0/255.255.255.0(r,o) #整個網路有讀取掛接在NFS 
#伺服器上的光碟機光碟的讀取許可權
3、     啟用NFS服務。分兩步:首先啟用portmap,然後啟用NFS服務。# service portmap start;
# service nfs start。其中portmap的功能是啟用遠端過程呼叫,有時啟用NFS不能成功,不妨檢查一下portmap服務是否啟動(# ps aux | grep portmap)。
4、     在客戶端掛接NFS共享出來的目錄。先在客戶端建立一個掛接點,如 # mkdir /mnt/nfs ,而後使用命令把nfs伺服器共享出來的目錄掛接上,以第2步那個共享為例,我們掛接目錄 /tmp , # mount –t nfs 192.168.100.100:/tmp /mnt/nfs //假定nfs伺服器的ip地址是192.168.100.100。
5、     訪問NFS共享資源。接上步,改變檔案目錄 # cd /mnt/nfs就方便地實現了對nfs伺服器目錄/tmp的遠端訪問。
6、     解除安裝NFS檔案系統。在客戶端執行命令 # umount /mnt/nfs 就卸下了第4步掛接的NFS檔案系統。
7、     其他事項。前面我們描述了在客戶段用手工掛接NFS檔案系統的操作,有的場合可能需要自動實現對NFS的掛接操作;修改檔案/etc/fstab,把掛接項插入進去就可以了。對一個有較多連線的NFS伺服器而言,有這樣一個問題—使用者在使用完掛接的檔案系統後,並不會總記得解除安裝掉NFS掛接,這必然會增大NFS伺服器的維護工作量以及白白佔用有限的系統和網路資源;解決這個問題的辦法是使用自動掛接器(automounter)。關於自動掛接器屬於效能調優的範疇,在此不做描述。

samba服務配置
1、首先,下載安裝samba伺服器
      # apt-get install samba

2、配置samba伺服器的配置檔案/etc/samba/smb.conf,預設可以按照下面的設定來

# "security = user" is always a good idea. This will require a Unix account   
# in this server for every user accessing the server. See   
# /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html   
# in the samba-doc package for details.   
   security = share  
----早期的linux版本的配置檔案smb.conf的安全選項“security=share”,這個預設值是個安全隱患,不過現在流行的linux版本的安全選項的預設值是“security=user”
[gzpl]		----這裡的gzpl是共享的地址別名,可以自己修改
        comment = Shared Folder with username and password
        path = /home/gzpl	----代表上面gzpl的具體目錄
        guest ok = yes
        readonly = no
        locking = no
        public = yes
        writeable = yes
        valid users = root	----指你登入的使用者,可以不用root登入,這裡是為了方便
        available = yes
        browseable = yes
說明:valid users = myname 這個myname是自己起的,後面在新增使用者名稱時就是新增的這個;
另外這個[share]名字也是可以隨便起的,這個是你在windows下訪問時顯示的名字。
在windows下 \\162.168.160.11\gzpl就可以訪問linux下/home/gzpl/ code目錄下的內容了; 

其中162.168.160.11是你linux的IP地址,用ifconfig就可以檢視到。

4、     建立Samba使用者密碼檔案。雖然samba的使用者是系統使用者,但出於安全考慮,samba使用者的密碼並非建立系統使用者時設定的使用者密碼。為了生成smb所需的密碼,應該進行下面的操作:
sudo useradd myname 

上面只是增加了 myname這個系統使用者,卻沒有給使用者賦予本機登入密碼。所以這個使用者將只能從遠端訪問,不能從本機登入。而且samba的登入密碼可以和本機登入密碼不一樣。這個你可以在重啟機器時看到這個你新增的使用者,但是你卻用它登陸不了系統,因為沒有賦予本機登入密碼。 

sudo touch /etc/samba/smbpasswd  
sudo smbpasswd -a myname 
(如果你直接用系統中的賬號,這裡myname就是你係統中的賬戶即可)然後會要求你輸入samba帳戶的密碼,這個密碼不是開機登入時候用的,是你要訪問WIN共享檔案或者WIN共享檔案訪問你的時候要填的密碼,現在要新增網路使用者的帳號:
sudo gedit /etc/samba/smbusers 
在新建立的檔案內加入下面這一行並儲存 程式碼:
myname= “networkusername” 
[如果沒有第四步,當你登入時會提示session setup failed: NT_STATUS_LOGON_FAILURE]刪除網路使用者的帳號的命令把上面的 -a 改成 -x 即:
sudo smbpasswd -x myname 

這樣生成的使用者,你需要修改到上面valid users上,作為samba的登入使用者。

5. 重啟samba伺服器 :

sudo testparm 驗證一下配置引數有沒有問題,如果有問題在回去修改 
sudo /etc/init.d/samba restart 
6. 測試:
smbclient -L //localhost/share 或者  
smbclient -L \\127.0.0.1 -U myname //這時輸入的密碼就是你剛才設定的samba密碼 
7. 使用 :
可以到windows下輸入ip使用了,在資料夾處輸入 "\\" + "Ubuntu機器的ip或主機名" + "\\" + "share";
我的即為:\\162.168.160.11\share(share就是剛才smb.conf中的[share])第一次進入時要輸入使用者名稱和密碼,這個就是你在第四步中設定的使用者名稱和密碼。

點選win7下的對映網路驅動器,把Linux下的/home/gzpl資料夾對映到win下。

    在linux 環境下,在Linux和windows機器之間交換檔案可以通過ftp。有三個主要的FTP伺服器:vsftpd、proftpd和wu-ftpd。因為安全方面的原因,vsftpd目前已經牢牢的佔據了主導地位。從字面上我們就可以理解vsftpd所具備的主要特徵—very secure(非常安全之ftp)。資料表明:1、使用ASCII方式下載檔案,在1G乙太網上的下載速度可以達到86M/s。2、vsftpd可以支援 15000個併發使用者的訪問。

1、 檢查是否安裝vsftp包。# rpm –qa | grep vsftpd。如果沒有則安裝它。
2、 修改配置檔案。Vsftpd的配置檔案為/etc/vsftpd/vsftpd.conf,如果不打算提供匿名訪問的話,需要修改配置檔案 /etc/vsftpd/vsftpd.conf的項“anonymous_enable=Yes”為“anonymous_enable=No”。
3、 啟用vsftpd服務。#service vsftpd start。
4、 客戶端連線訪問。可以是專用的ftp客戶端工具,也可以使用瀏覽器。用工具訪問vsftpd伺服器的速度要比用瀏覽器快很多。
5、 vsftpd伺服器的使用者。Vsftpd伺服器支援三種類型的擁護:本地使用者(擁有系統賬號)、虛擬使用者(guest)、匿名賬號;系統管理員應該根據安全需求來確定vsftpd伺服器的使用者訪問策略。

TFTP伺服器
Tftp伺服器主要用於遠端系統引導或遠端備份象CISCO這樣的網路裝置的配置檔案,例如tftp伺服器與DHCP、FTP伺服器相配合,就可以成為一組linux安裝伺服器,以利於進行大規模的網路安裝linux作業系統。
與上文提及的幾種伺服器不同,tftp伺服器是由超級守護程序xinetd執行的。這使的tftp伺服器的配置操作比獨立執行守護程序的伺服器(如 vsftpd)簡單很多。一般情況下,只要修改檔案/etc/xinetd.d/tftp,把“disable =yes” 改成 “disable =no”,而後儲存重新啟動超級守護程序xinetd , # service xinetd restart 。
通過上面的實踐,儘管我們已經能夠順利的完成各種檔案伺服器的搭建和執行,也基本上可以滿足基本的使用者服務需求,也許在實際的工作中,可能有更多的效能或安全要求。一個明顯的例子就是,如果一個使用者的伺服器使用的磁碟空間沒有做任何限制,那麼他完全有可能把他從internet下載的連續劇上傳到他自己的檔案伺服器目錄,從而把有限空間的硬碟塞滿。另外一個就是目錄和檔案的許可權問題,特別是以本地賬號(系統賬號)訪問檔案伺服器的情況,如果授權不當,將給系統管理帶來極大的麻煩。
Linux所倡導的自由精神也同樣在這些伺服器的配置操作中得以體現。可以通過修改這些伺服器的配置檔案來滿足特定的需求,而且這些修改是非常靈活的。比如vsftpd伺服器的配置檔案/etc/vsftpd/vsftpd.conf就有很多專案可以修改。
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

上面講了這麼多,大部分是網上轉載的。下面我再來看看,嵌入式開發中應用samba還有NFS的一個例子。這也是這個文章最終要講的東西。

我想很多新手在開發Linux應用程式的時候,希望應用程式是可以在板子上跑的,但是,每次要下載進去跑很麻煩,而且過程很繁瑣。那麼有什麼辦法可以實現主機檔案和開發版的資料夾共享呢?那就是samba+nfs。

1.首先在按照上面所說的方法配置好Linux host端的samba並保證可用。並且samba 主機Linux上的開發資料夾到win7



2.NFS掛在host Linux的開發資料夾到開發板。這個確定開發版和主機的作業系統是支援並開啟了NFS服務的,具體方法參見上面描述的。

sudo mount 192.168.100.ubuntuIP:/home/gzpl /mnt -t nfs -o nolock
這條命令可以放在開發版啟動腳本里面,不過必須要在啟動網絡卡之後,否則將會失敗。 這樣一來便實現了,開發板---〉Linux host〈---win7這樣的檔案共享模式,這樣你就可以在win7上輕鬆的使用source insight進行程式碼編輯了,他們的程式碼是實時同步的。 OVER~~~~