73

I have an embedded VxWorks target that needs to boot its kernel from my Ubuntu computer. How do I install and run a TFTP server?

dedunu
  • 8,986
  • 4
  • 22
  • 28
user1689961
  • 2,083
  • 4
  • 16
  • 15

3 Answers3

112

TFTP Server Install and Setup

  1. Install following packages.

    sudo apt-get install xinetd tftpd tftp
    
  2. Create /etc/xinetd.d/tftp and put this entry

    service tftp
    {
    protocol        = udp
    port            = 69
    socket_type     = dgram
    wait            = yes
    user            = nobody
    server          = /usr/sbin/in.tftpd
    server_args     = /tftpboot
    disable         = no
    }
    
  3. Create a folder /tftpboot this should match whatever you gave in server_args. mostly it will be tftpboot

    sudo mkdir /tftpboot
    sudo chmod -R 777 /tftpboot
    sudo chown -R nobody /tftpboot
    
  4. Restart the xinetd service.

    newer systems:

    sudo service xinetd restart
    

    older systems:

    sudo /etc/init.d/xinetd restart
    

Now our tftp server is up and running.

Testing our tftp server

  1. Create a file named test with some content in /tftpboot path of the tftp server

    Obtain the ip address of the tftp server using ifconfig command

  2. Now in some other system follow the following steps.

    tftp 192.168.1.2
    tftp> get test
    Sent 159 bytes in 0.0 seconds
    
    tftp> quit
    
    cat test
    

Source: http://mohammadthalif.wordpress.com/2010/03/05/installing-and-testing-tftpd-in-ubuntudebian/

austinmarton
  • 3,285
  • 1
  • 14
  • 8
user1689961
  • 2,083
  • 4
  • 16
  • 15
  • this doesnt work for 13.04. I just tried – BЈовић Sep 03 '13 at 09:07
  • 1
    only step 4 needs to be changed, since xinetd is spawned by upstart. you need to restart it with 'service xinetd restart' – BЈовић Sep 04 '13 at 12:14
  • 3
    I followed this instruction and faced permission denied! Destination filename [c2950-i6q4l2-mz.121-22.EA1b.bin]? TFTP: error code 2 received - Access violation %Error opening tftp://10.1.11.14/c2950-i6q4l2-mz.121-22.EA1b.bin (Permission denied) #copy flash:c2950-i6q4l2-mz.121-22.EA1b.bin tftp: Address or name of remote host []? 10.1.11.14 Destination filename [c2950-i6q4l2-mz.121-22.EA1b.bin]? TFTP: error code 2 received - Access violation – Mohammad Rafiee Apr 08 '14 at 06:30
  • 1
    @Mohammad Rafiee: the blog post linked to here added some info: run `sudo chmod -R 777 /tftpboot` between step 1 and 2 of "Testing our tftp server". Not that it helped me, but it looks like it helped others. – Gauthier Aug 28 '14 at 11:43
  • 2
    On 14.04, this did not work for me. The info about `/tftpboot` in `/etc/xinetd.d/tftp` did not seem to matter. Instead, the client looks in the directory `/srv/tftp` as specified in `/etc/inetd.conf`. I don't if the way things are setup changed since the article, or if I screwed up somehow. If the answer above does not work for you, try putting your test file in `/srv/tftp` instead. – Gauthier Aug 28 '14 at 12:28
  • The only way I found that actually worked was to `touch` a file with the filename I was about to put. Check this page as well: https://ubuntuforums.org/showthread.php?t=841766 – Kyr Aug 23 '16 at 14:30
  • I followed the steps as is but it didn't work for me until i edited `/etc/inetd.conf` and commented out `tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-$` using a # – lithiumhead Sep 04 '17 at 11:09
  • How is possible for user nobody to use privileged port 69? – elbarna Oct 17 '17 at 20:26
  • @elbarna user:nobody can have access to this service. xinetd - which runs the service - has elevated access. BTW it was working exactly as it was written Ubuntu 17.10 – V-Mark Jan 08 '18 at 19:21
  • 2
    Please note that with Ubuntu 16.04, you will experience `error code 2 (access violation)` . To fix it put `tftpboot -s` in `server_args` (no leading slash, `-s` at the end. Source: https://icesquare.com/wordpress/solvedtftp-error-code-2-access-violation/ – CharlesB Aug 31 '18 at 13:13
  • @CharlesB tftpboot -s in server_args This also fixed for me on Ubuntu 18 Thanks! – Kyle Coots Sep 10 '19 at 23:26
  • This answer needs to be updated with "tftpboot -s" and a command to set permissions to 0755 (or similar) on any file placed in /tftpboot (e.g. $ sudo chmod 0755 /tftpboot/my-file). – jrennie Oct 02 '20 at 21:41
9

You can install tftpd-hpa and change the configurations . Steps for installing tftpd-hpa is explained in this blog post.

irfan_np
  • 159
  • 2
  • 2
  • 2
    Whilst this may theoretically answer the question, [it would be preferable](http://meta.stackexchange.com/q/8259) to include the essential parts of the answer here, and provide the link for reference. – guntbert Sep 06 '13 at 07:02
  • 1
    upvoted you only because tftpd-hpa is a stupid simple tftp server to use and doesn't actually require any of the config needed in that post just drop your files in /var/lib/tftpboot and you are set (on ubuntu 16.04 not sure about other OS). – michael.schuett Jan 03 '17 at 04:25
8

You can install atftpd and it will create a directory called /tftpboot in which you may place your files. Put especially the pxelinux.0 file there. Any future configuration will be addressed if it is necessary.

When you install the package with

sudo apt-get install atftpd

it will use Debconf to prompt you for some choices. You can set many choices(server timeout may be useful), especially the basepath. You can also adjust the multicast range.

nanofarad
  • 20,597
  • 12
  • 65
  • 91