> Am 29.01.2017 um 14:23 schrieb Jiri B <ji...@devio.us>: > >>> Isn't better to use rewrite/file remapping instead of hacking pxeboot? >>> If an i386 machine would request /etc/boot.conf via tftp you could rewrite >>> it to (based on fact you know that that machine is i386 - during provisioning) >>> /etc/i386/boot.conf. For the client I suppose it would still think it gets >>> /etc/boot.conf. > > A POC... > > j. > > ~~~ > #!/usr/bin/perl -w > > use IO::Socket::UNIX; > > my $socket_path = '/tmp/tftpd_rewrite.sock'; > unlink $socket_path if -e $socket_path; > my $socket = IO::Socket::UNIX->new( > Local => $socket_path, > Type => SOCK_STREAM, > Listen => SOMAXCONN, > ); > die "Can't create socket: $!" unless $socket; > > while (1) { > next unless my $connection = $socket->accept; > $connection->autoflush(1); > while (my $line = <$connection>) { > chomp($line); > # XXX > # conditionals here > if ($line =~ /^127.0.0.1 read \/etc\/boot.conf$/) { > print $connection "/etc/boot.conf.i386\n"; > } elsif ($line =~ /^\S+ read \/etc\/boot.conf$/) { > print $connection "/etc/boot.conf\n"; > } > } > } > ~~~ > > $ ./tftpd_rewrite > $ doas chgrp _tftpd /tmp/tftpd_rewrite.sock ; doas chmod g+w /tmp/tftpd_rewrite.sock > $ doas tftpd -v -r /tmp/tftpd_rewrite.sock /home/vm > > $ tftp 127.0.0.1 > tftp> get /etc/boot.conf > Received 38 bytes in 0.0 seconds > > $ syslogc daemon | tail -n1 > Jan 29 01:51:49 t440s tftpd[626]: 127.0.0.1: read request for '/etc/boot.conf' > $ cat boot.conf > set tty com0 > boot tftp:/bsd.rd.i386
nice proof of concept :-) thx! works well with OpenBSD's tftpd. Same logic does not apply to in.tftpd or atftpd. I had copied the OpenBSD "pxeboot" (amd64 and i386, they differ a bit) to my Linux box. As you can see in the second line, the requested filename "boot.conf" has no additional IP address or MAC to filter on: in.tftpd[2131]: RRQ from 192.168.88.253 filename /i386/bsd60_i386_pxeboot > in.tftpd[2132]: remap: input: /etc/boot.conf in.tftpd[2132]: remap: done in.tftpd[2132]: RRQ from 192.168.88.253 filename /etc/boot.conf in.tftpd[2133]: remap: input: /etc/random.seed in.tftpd[2133]: remap: done in.tftpd[2133]: RRQ from 192.168.88.253 filename /etc/random.seed in.tftpd[2133]: sending NAK (1, File not found) to 192.168.88.253 in.tftpd[2134]: remap: input: /bsd in.tftpd[2134]: remap: done in.tftpd[2134]: RRQ from 192.168.88.253 filename /bsd in.tftpd[2134]: sending NAK (1, File not found) to 192.168.88.253 This way, when creating a remapping based on the raw filename, it would apply to i386 and amd64. Anyhow, I will update my doc with the solution for OpenBSD. Already a good step forwards. At the same time I will also update with Anton's remark for a dual server. thx, rgds, Volker