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

參考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 是不是配置好

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章