參考10.04的方式安裝失敗,按如下方式安裝pass了。
【已成功】Ubuntu 10.10下安裝TFTP的步驟 tftp -hpa版本
【背景】
由于想要在tq2440板子上用tftp下載kernel,所以要在自己的PC機(jī)的Ubuntu 10.10上安裝tftp服務(wù)。
所以就去網(wǎng)上找了些教程,但是很悲劇,按照那些教程去操作,結(jié)果還都是無法正常運(yùn)行tftp服務(wù),最后還是從一個(gè)外國人的帖子中,最后解決了此問題的?,F(xiàn)在記錄一下所了解到內(nèi)容。
截至目前2011-04-04,我用的Ubuntu 10.10,Ubuntu下面關(guān)于TFTP的程序,有三種:
1.tftp和tftpd
這個(gè)是最早的,最常用的。,其中tftp是client客戶端,tftpd是server 服務(wù)器 端,d應(yīng)該指的是daemon。
如果你要從別人的tftp服務(wù)器端上傳/下載東西,就要用到tftp;如果你為別人提供tftp服務(wù),供別人上傳/下載東西,那就要安裝tftpd服務(wù)程序。
如果安裝tftp和tftpd,那么根據(jù)附錄2說的:“因?yàn)閠ftp是要inetd來控制的,而debian類的系統(tǒng) ,默認(rèn)是沒有安裝inetd的,安裝一下?!?所以,此處也要安裝inetd,但是我這里發(fā)現(xiàn)Ubuntu 10.10里面,沒有他們說的那個(gè)netkit-inetd:
crifan@crifan-ubuntu10:~/develop$ sudo apt-get install netkit-inetd
正在讀取軟件 包列表... 完成
正在分析軟件包的依賴關(guān)系樹
正在讀取狀態(tài)信息... 完成
軟件包 netkit-inetd 是一個(gè)由下面的軟件包提供的虛擬軟件包:
inetutils-inetd 2:1.6-3
openbsd-inetd 0.2008 0125-4ubuntu2
請您明確地選擇一個(gè)來進(jìn)行安裝。
E: 軟件包 netkit-inetd 沒有可供安裝的候選者
復(fù)制代碼
而只有inetutils-inetd和openbsd-inetd,此處,我自己折騰tftp和tftpd的時(shí)候,裝的是inetutils- inetd,但是卻也一直沒弄好,所以此處忽略不說。而openbsd-inetd,是我裝的,可以正常使用的。具體方法下面會詳細(xì)介紹。
2.加強(qiáng)版的tftp: atftp和atftpd
atftp即advanced tftp,加強(qiáng)了一些功能。這里我沒用過,不多評價(jià)。
3. hpa版本的tftp:tftp-hpa和tftpd-hpa
我最后就是用的這個(gè)hpa版本的。
中間折騰過程翻來覆去弄了很多次,最后參考這里:
http://ubuntuforums.org/showthread.php ?t=1483618
確定這樣是可以安裝成功的:
【Ubuntu 10.10下安裝TFTP的步驟 tftp-hpa版本 】
1. 用新立得先去卸載tftp和tftpd(如果你安裝的話),tftp-hpa和tftpd-pha(如果你安裝的話)
系統(tǒng) -> 系統(tǒng)管理 -> 新立得軟件包管理器,即synaptic,
搜索 tftp,會找到和tftp相關(guān)的軟件列表。
如果你已經(jīng)裝了tftp和tftpd,那么先用新立得去徹底刪除他們。
如果也已經(jīng)安裝了tftp-pha和tftpd-hpa,那么也同樣用新立得去徹底刪除他們。
(注意,我之前就是用的命令行去裝的tftp-hpa和tftpd-hpa,而安裝他們的同時(shí)會自動卸載掉原先裝過的tftp和tftpd,所以,我在新立得里面看到的是已經(jīng)安裝的tftp-hpa和tftpd-hpa,所以要先右鍵點(diǎn)擊,選擇徹底刪除,然后選擇應(yīng)用 ,就可以去徹底刪除了。)
2. 用新立得去安裝tftp-hpa和tftpd-pha
同上,進(jìn)入新立得,右鍵選中tftp-hpa和tftpd-pha,然后安裝。
3. 安裝openbsd-inetd
(此處搞不清是不是必須要裝這個(gè)了,不過是反正是裝了,現(xiàn)在的tftp是可以工作的,如果你也不確定要不要安裝,那就也安裝吧。。。)
我是用的命令行去安裝的:
crifan@crifan-ubuntu10:~/develop$ sudo apt-get install openbsd-inetd
復(fù)制代碼
4.建立TFTP根目錄及設(shè)置訪問屬性
去建立一個(gè)根目錄,然后設(shè)置對應(yīng)的訪問屬性:
mkdir /home/crifan/develop/tftpboot
cd /home/crifan/develop/
chmod 777 tftpboot/
復(fù)制代碼
其中:
(1)/home/crifan/develop/tftpboot是我的TFTP的根目錄,你根據(jù)自己情況修改為你自己的根目錄。
(2)chmod是去更改tftpboot這個(gè)TFTP根目錄的訪問屬性,因?yàn)槠渌鹴ftp用戶 需要使用put命令上傳文件 的話,那就需要write權(quán)限的,所以這里干脆省事,直接chmod 777,添加所有權(quán)限(讀+寫+執(zhí)行)。
5. 更改配置文件/etc/default/tftpd-hpa
sudo gedit /etc/default/tftpd-hpa
去修改配置文件,修改好后,內(nèi)容如下:
# /etc/default/tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s -c /home/crifan/develop/tftpboot"
TFTP_USERNAME="crifan"
TFTP_DIRECTORY="/home/crifan/develop/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
復(fù)制代碼
其中:
(1)
OPTIONS="-l -s -c /home/crifan/develop/tftpboot"
中的參數(shù)含義為:
-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為可創(chuàng)建新文件,若無此參數(shù),put命令則可能出現(xiàn)錯(cuò)誤提示,此時(shí)只能覆蓋原有文件不能創(chuàng)建新文件;"
OPTIONS參數(shù)后面跟的是你的TFTP的根目錄。
TFTP_USERNAME是用戶名,我這里的是"crifan",你根據(jù)自己情況修改。
TFTP_DIRECTORY后面也是同樣的根目錄 "/home/crifan/develop/tftpboot",你根據(jù)自己情況修改。
(2)ubuntu10.04下的tftp-hpa配置文件和之前不一樣,之前的是類似這種:
#Defaults for tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -c -s /tftpboot"
復(fù)制代碼
Ubuntu 10.10中安裝之后的是這種:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s /tftpboot"
復(fù)制代碼
而此處上面所用的配置,既有新的也有舊的,具體為何是這樣,偶也不太清楚,只是參考上面那人的帖子而已。其他人有興趣可以自己測試,刪除舊的配置后是否同樣可以工作。
6.重啟tftp服務(wù)
crifan@crifan-ubuntu10:~/develop$ sudo service tftpd-hpa restart
tftpd-hpa start/running, process 3907
復(fù)制代碼
其中:
(1)關(guān)于重啟 某個(gè)服務(wù),之前的Linux(Ubuntu是10.10之前)都是這樣操作的:
sudo /etc/init.d/XXX reload
對于inetd來說,就是:
sudo /etc/init.d/inetd reload
現(xiàn)在新的LUbuntu 10.10中,是統(tǒng)一成調(diào)用service來操作了:
sudo service XXX restart
其中,啟動和停止對應(yīng)的是start和stop。
(2)記得不要少了sudo,否則“stop: Rejected send message”的錯(cuò)誤。
(3)【確認(rèn)tftp服務(wù)是否已經(jīng)開啟】
查看tftp相關(guān)進(jìn)程:
crifan@crifan-ubuntu10:~/develop$ ps aux |grep tftp
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
crifan 3828 0.0 0.0 5628 768 pts/0 S+ 14:27 0:00 grep --color=auto tftp
復(fù)制代碼
如果能看到像上面的 /usr/sbin/in.tftpd已經(jīng)啟動,就說明tftp服務(wù)已經(jīng)開啟了。
此處可以看到:
--listen就是對應(yīng)的配置文件中的參數(shù) -l
--user crifan就是對應(yīng)配置文件中的參數(shù) TFTP_USERNAME="crifan"
/home/crifan/develop/tftpboot就是對應(yīng)的配置文件中的參數(shù) TFTP_DIRECTORY=" /home/crifan/develop/tftpboot"
7.驗(yàn)證tftp是否生效
crifan@crifan-ubuntu10:~/develop$ tftp 192.168.1.101
tftp>get u-boot.bin
tftp>quit
復(fù)制代碼
其中:
(1)192.168.1.101是我的機(jī)子的ip,可以通過ifconfig查得。你此處要改為你自己的機(jī)子的IP。當(dāng)然你也可以直接寫127.0.0.1,這個(gè)地址始終代表了你的本機(jī)IP。
(2)get是tftp的命令,即從tftp服務(wù)器中下載獲得文件。你可以輸入?查看其他命令。常見的命令有g(shù)et下載文件,put上傳文件等等。u-boot.bin是我已經(jīng)存在在tftp根目錄下面的文件。
(3)quit是退出tftp。
【總結(jié)】
看著步驟很復(fù)雜,實(shí)際歸納起來很簡單,那就是用新立得synaptic去安裝tftp-pha和tftpd-hpa,然后改一下配置,重啟一下服務(wù),然后驗(yàn)證一下tftp是否工作即可。
【后續(xù)】
經(jīng)過驗(yàn)證tftp已經(jīng)生效,然后回到開發(fā) 板上就可以用tftp下載文件了:
EmbedSky> tftp 0x30010000 u-boot.bin
dm9000 i/o: 0x20000300, id: 0x90000a46
MAC: 0a:1b:2c:3d:4e:5f
TFTP from server 192.168.1.101; our IP address is 192.168.1.120
Filename 'u-boot.bin'.
Load address: 0x30010000
Loading: T ###############
done
Bytes transferred = 207396 (32a24 hex)
復(fù)制代碼
【另外】
關(guān)于Linux下的圖形界面GUI版本的TFTP,網(wǎng)上找到了這個(gè):
tftpgui
http://code.google .com/p/tftpgui/
暫未試用,有機(jī)會試試。
【引用】
1. TFTP will not start (command returns a "rejected send message")
http://ubuntuforums.org/showthread.php?t=1483618
2.ubuntu中配置tftp服務(wù)
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
下面是網(wǎng)上總結(jié)出來的常見錯(cuò)誤及解決方法:
現(xiàn)象一:
tftp> get file
Transfer timed out.
原因:
tftpd服務(wù)沒有啟動
解決方法:啟動服務(wù)
sudo /etc/init.d/xinetd restart
sudo /etc/init.d/tftpd-hpa restart
現(xiàn)象二:
tftp> get file
Error code 2: Only absolute filenames allowed
原因:
在/etc/xinetd.d/tftpd中設(shè)置的server_args為/etc/default/tftpd-hpa
下面是我的機(jī)器上/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"
現(xiàn)象三:
tftp> put file
Error code 1: File not found
原因:
指定的文件不存在;或tftpd啟動參數(shù)中沒有指定-c選項(xiàng),允許上傳文件~上傳的時(shí)候一定要確保文件先存在于上傳目錄下。
現(xiàn)象四:
tftp> get file
tftp: : Permission denied
原因:權(quán)限不足
請查看chmod 是不是配置好