ubuntu10.10安裝配置tftp服務—— tftp-hpa 安裝

來源:互聯網
上載者:User

參考10.04的方式安裝失敗,按如下方式安裝pass了。


【已成功】Ubuntu 10.10下安裝TFTP的步驟 tftp
-hpa版本



【背景】



由於想要在tq2440板子上用tftp下載kernel,所以要在自己的PC機的Ubuntu 10.10上安裝tftp服務。
所以就去網上找了些教程,但是很悲劇,按照那些教程去操作,結果還都是無法正常運行tftp服務,最後還是從一個外國人的文章中,最後解決了此問題的。現在記錄一下所瞭解到內容。

截至目前2011-04-04,我用的Ubuntu 10.10,Ubuntu下面關於TFTP的程式,有三種:
1.tftp和tftpd



這個是最早的,最常用的。,其中tftp是client用戶端,tftpd是server
伺服器
端,d應該指的是daemon。
如果你要從別人的tftp伺服器端上傳/下載東西,就要用到tftp;如果你為別人提供tftp服務,供別人上傳/下載東西,那就要安裝tftpd服務程式。
如果安裝tftp和tftpd,那麼根據附錄2說的:“因為tftp是要inetd來控制的,而debian類的系統
,預設是沒有安裝inetd的,安裝一下。” 所以,此處也要安裝inetd,但是我這裡發現Ubuntu 10.10裡面,沒有他們說的那個netkit-inetd:

  1. crifan@crifan-ubuntu10:~/develop$ sudo apt-get install netkit-inetd
  2. 正在讀取軟體
    包列表... 完成
  3. 正在分析軟體包的相依樹狀結構
  4. 正在讀取狀態資訊... 完成
  5. 軟體包 netkit-inetd 是一個由下面的軟體包提供的虛擬軟體包:
  6. inetutils-inetd 2:1.6-3
  7. openbsd-inetd 0.2008
    0125-4ubuntu2
  8. 請您明確地選擇一個來進行安裝。
  9. E: 軟體包 netkit-inetd 沒有可供安裝的候選者

複製代碼

而只有inetutils-inetd和openbsd-inetd,此處,我自己折騰tftp和tftpd的時候,裝的是inetutils-
inetd,但是卻也一直沒弄好,所以此處忽略不說。而openbsd-inetd,是我裝的,可以正常使用的。具體方法下面會詳細介紹。

2.加強版的tftp: atftp和atftpd



atftp即advanced tftp,加強了一些功能。這裡我沒用過,不多評價。

3. hpa版本的tftp:tftp-hpa和tftpd-hpa



我最後就是用的這個hpa版本的。
中間折騰過程翻來覆去弄了很多次,最後參考這裡:
http://ubuntuforums.org/showthread.php
?t=1483618

確定這樣是可以安裝成功的:

【Ubuntu 10.10下安裝TFTP的步驟


tftp-hpa版本






1. 用新立得先去卸載tftp和tftpd(如果你安裝的話),tftp-hpa和tftpd-pha(如果你安裝的話)


系統 -> 系統管理 -> 新立得軟體包管理器,即synaptic,
搜尋 tftp,會找到和tftp相關的軟體列表。
如果你已經裝了tftp和tftpd,那麼先用新立得去徹底刪除他們。
如果也已經安裝了tftp-pha和tftpd-hpa,那麼也同樣用新立得去徹底刪除他們。
(注意,我之前就是用的命令列去裝的tftp-hpa和tftpd-hpa,而安裝他們的同時會自動卸載掉原先裝過的tftp和tftpd,所以,我在新立得裡面看到的是已經安裝的tftp-hpa和tftpd-hpa,所以要先右鍵點擊,選擇徹底刪除,然後選擇應用
,就可以去徹底刪除了。)
2. 用新立得去安裝tftp-hpa和tftpd-pha


同上,進入新立得,右鍵選中tftp-hpa和tftpd-pha,然後安裝。
3. 安裝openbsd-inetd


(此處搞不清是不是必須要裝這個了,不過是反正是裝了,現在的tftp是可以工作的,如果你也不確定要不要安裝,那就也安裝吧。。。)
我是用的命令列去安裝的:

  1. crifan@crifan-ubuntu10:~/develop$ sudo apt-get install openbsd-inetd

複製代碼

4.建立TFTP根目錄及設定訪問屬性


去建立一個根目錄,然後設定對應的訪問屬性:

  1. mkdir /home/crifan/develop/tftpboot
  2. cd /home/crifan/develop/
  3. chmod 777 tftpboot/

複製代碼

其中:
(1)/home/crifan/develop/tftpboot是我的TFTP的根目錄,你根據自己情況修改為你自己的根目錄。
(2)chmod是去更改tftpboot這個TFTP根目錄的訪問屬性,因為其他tftp使用者
需要使用put命令上傳檔案
的話,那就需要write許可權的,所以這裡乾脆省事,直接chmod 777,添加所有許可權(讀+寫+執行)。

5. 更改設定檔/etc/default/tftpd-hpa


sudo gedit /etc/default/tftpd-hpa
去修改設定檔,修改好後,內容如下:

  1. # /etc/default/tftpd-hpa
  2. RUN_DAEMON="yes"
  3. OPTIONS="-l -s -c /home/crifan/develop/tftpboot"
  4. TFTP_USERNAME="crifan"
  5. TFTP_DIRECTORY="/home/crifan/develop/tftpboot"
  6. TFTP_ADDRESS="0.0.0.0:69"
  7. TFTP_OPTIONS="--secure"

複製代碼

其中:
(1)
OPTIONS="-l -s -c /home/crifan/develop/tftpboot"
中的參數含義為:
-l Run the server in standalone (listen) mode, rather than run from
inetd. In listen mode, the -t option is ignored, and the -a option can
be used to  specify a specific local address or port to listen to.

-a [address][:port]
Specify a specific address and port to listen to when called with the -l
option. The default is to listen to the tftp port specified in
/etc/services on all local addresses.

-c Allow new files to be created. By default, tftpd will only allow
upload of files that already exist. Files are created with default
permissions allowing anyone to read or write them, unless the -p or -U
options are specified.

-s (決定tftp根目錄)Change root directory on startup. This means the remote
host does not need to pass along the directory as part of the trans-fer,
and may add security. When -s is specified, exactly one directory
should be specified on the command line. The use of this option is
recommended for security as well as compatibility with some boot ROMs
which cannot be easily made to include a directory name in its request.


注意其中的-c, "-c為可建立新檔案,若無此參數,put命令則可能出現錯誤提示,此時只能覆蓋原有檔案不能建立新檔案;"

OPTIONS參數後面跟的是你的TFTP的根目錄。
TFTP_USERNAME是使用者名稱,我這裡的是"crifan",你根據自己情況修改。
TFTP_DIRECTORY後面也是同樣的根目錄 "/home/crifan/develop/tftpboot",你根據自己情況修改。

(2)ubuntu10.04下的tftp-hpa設定檔和之前不一樣,之前的是類似這種:

  1. #Defaults for tftpd-hpa
  2. RUN_DAEMON="yes"
  3. OPTIONS="-l -c -s /tftpboot"

複製代碼

Ubuntu 10.10中安裝之後的是這種:

  1. # /etc/default/tftpd-hpa
  2. TFTP_USERNAME="tftp"
  3. TFTP_DIRECTORY="/tftpboot"
  4. TFTP_ADDRESS="0.0.0.0:69"
  5. TFTP_OPTIONS="-l -c -s /tftpboot"

複製代碼

而此處上面所用的配置,既有新的也有舊的,具體為何是這樣,偶也不太清楚,只是參考上面那人的文章而已。其他人有興趣可以自己測試,刪除舊的配置後是否同樣可以工作。

6.重啟tftp服務

  1. crifan@crifan-ubuntu10:~/develop$ sudo service tftpd-hpa restart
  2. tftpd-hpa start/running, process 3907

複製代碼

其中:
(1)關於重啟 某個服務,之前的Linux(Ubuntu是10.10之前)都是這樣操作的:
sudo /etc/init.d/XXX reload
對於inetd來說,就是:
sudo /etc/init.d/inetd reload
現在新的LUbuntu 10.10中,是統一成調用service來操作了:
sudo service XXX restart
其中,啟動和停止對應的是start和stop。
(2)記得不要少了sudo,否則“stop: Rejected send message”的錯誤。
(3)【確認tftp服務是否已經開啟】
查看tftp相關進程:

  1. crifan@crifan-ubuntu10:~/develop$ ps aux |grep tftp
  2. root 3826 0.0 0.0 2352 120 ? Ss 14:27 0:00 /usr/sbin/in.tftpd
    --listen --user crifan --address 0.0.0.0:69 --secure
    /home/crifan/develop/tftpboot
  3. crifan 3828 0.0 0.0 5628 768 pts/0 S+ 14:27 0:00 grep --color=auto tftp

複製代碼

如果能看到像上面的 /usr/sbin/in.tftpd已經啟動,就說明tftp服務已經開啟了。
此處可以看到:
--listen就是對應的設定檔中的參數 -l
--user crifan就是對應設定檔中的參數 TFTP_USERNAME="crifan"
/home/crifan/develop/tftpboot就是對應的設定檔中的參數 TFTP_DIRECTORY=" /home/crifan/develop/tftpboot"

7.驗證tftp是否生效

  1. crifan@crifan-ubuntu10:~/develop$ tftp 192.168.1.101
  2. tftp>get u-boot.bin
  3. tftp>quit

複製代碼

其中:
(1)192.168.1.101是我的機子的ip,可以通過ifconfig查得。你此處要改為你自己的機子的IP。當然你也可以直接寫127.0.0.1,這個地址始終代表了你的本機IP。
(2)get是tftp的命令,即從tftp伺服器中下載獲得檔案。你可以輸入?查看其他命令。常見的命令有get下載檔案,put上傳檔案等等。u-boot.bin是我已經存在在tftp根目錄下面的檔案。
(3)quit是退出tftp。

【總結】



看著步驟很複雜,實際歸納起來很簡單,那就是用新立得synaptic去安裝tftp-pha和tftpd-hpa,然後改一下配置,重啟一下服務,然後驗證一下tftp是否工作即可。
【後續】



經過驗證tftp已經生效,然後回到開發
板上就可以用tftp下載檔案了:

  1. EmbedSky> tftp 0x30010000 u-boot.bin
  2. dm9000 i/o: 0x20000300, id: 0x90000a46
  3. MAC: 0a:1b:2c:3d:4e:5f
  4. TFTP from server 192.168.1.101; our IP address is 192.168.1.120
  5. Filename 'u-boot.bin'.
  6. Load address: 0x30010000
  7. Loading: T ###############
  8. done
  9. Bytes transferred = 207396 (32a24 hex)

複製代碼

【另外】



關於Linux下的圖形介面GUI版本的TFTP,網上找到了這個:
tftpgui


http://code.google
.com/p/tftpgui/


暫未試用,有機會試試。

【引用】



1. TFTP will not start (command returns a "rejected send message")


http://ubuntuforums.org/showthread.php?t=1483618


2.ubuntu中配置tftp服務
http://hi.baidu.com/wangy0919/blog/item/3808eaa1388bd389471064c2.html


3.Tftpd-hpa
http://wiki.ubuntu.org.cn/Tftpd-hpa


4.ubuntu10.04下的tftp-hpa設定檔不一樣了,如何修改阿?
http://forum.ubuntu.org.cn/viewtopic.php?t=265239

下面是網上總結出來的常見錯誤及解決方案:

現象一:

tftp>
get file

Transfer
timed out.

原因:

tftpd服務沒有啟動

解決方案:啟動服務

sudo /etc/init.d/xinetd restart

sudo /etc/init.d/tftpd-hpa restart

現象二:

tftp>
get file

Error
code 2: Only absolute filenames allowed

原因:

在/etc/xinetd.d/tftpd中設定的server_args為/etc/default/tftpd-hpa

下面是我的機器上/etc/default/tftpd-hpa配置

# /etc/default/tftpd-hpa
RUN_DAEMON="yes"
TFTP_ADDRESS="0.0.0.0:69"
OPTIONS="-s /home/tftpd -c -p -U 077 -u tftpd"

 

現象三:

tftp>
put file

Error
code 1: File not found

原因:

指定的檔案不存在;或tftpd啟動參數中沒有指定-c選項,允許上傳檔案~上傳的時候一定要確保檔案先存在於上傳目錄下。

 

現象四:

tftp> get file

tftp:  : Permission denied

原因:許可權不足

請查看chmod 是不是配置好

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.