天天看點

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. crif[email protected]:~/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. crif[email protected]:~/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. c[email protected]:~/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. [email protected]:~/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. [email protected]:~/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 是不是配置好