From: Dobrica Pavlinusic Date: Fri, 31 Jul 2009 21:30:25 +0000 (+0000) Subject: cleanup old scripts X-Git-Url: http://git.rot13.org/?p=pxelator;a=commitdiff_plain;h=3aba591b3c83d8d77c1e76c5aa01da797f878015 cleanup old scripts --- diff --git a/bin/dhcpd.pl b/bin/dhcpd.pl deleted file mode 100755 index bba1085..0000000 --- a/bin/dhcpd.pl +++ /dev/null @@ -1,181 +0,0 @@ -#!/usr/bin/perl - -# based on http://www.perlmonks.org/index.pl?node_id=325248 - -use strict; -use warnings; - -use autodie; - -use IO::Socket::INET; -use File::Slurp; -use Data::Dump qw/dump/; -use Net::Ping; - -use lib 'lib'; -use Net::DHCP::Packet; -use Net::DHCP::Constants 0.67; -die "need to run $0 as root like this\nsudo $0\n" unless $< == 0; - -my $debug = shift @ARGV; - -our ( $file, $gpxe_file ); -our ( $ip_from, $ip_to ) = ( 10, 100 ); - -our $server_ip = readlink 'conf/server.ip' if -l 'conf/server.ip'; - -if ( ! $server_ip ) { - $server_ip = `/sbin/ifconfig`; - $server_ip =~ s/^.+?addr:([\d\.]+).*$/$1/gs; - warn "auto-configure server ip to $server_ip\n"; -} else { - warn "server ip $server_ip\n"; -} - -my $sock = IO::Socket::INET->new( - LocalPort => 67, -# LocalAddr => 'localhost', -# LocalAddr => '10.0.0.100', - LocalAddr => '0.0.0.0', - Proto => 'udp', - ReuseAddr => 1, -# PeerPort => getservbyname('bootpc', 'udp'), - Broadcast => 1, - Type => SOCK_DGRAM, -) or die "Failed to bind to socket: $@"; - - -my $addr = $ip_from; - -sub client_ip { - my ( $mac ) = @_; - - my $conf = "conf/$server_ip"; - mkdir $conf unless -e $conf; - - if ( -e "$conf/mac/$mac" ) { - my $ip = read_file "$conf/mac/$mac"; - print "$mac old $ip\n"; - return $ip; - } - - mkdir $_ foreach grep { ! -e $_ } map { "$conf/$_" } ( 'ip', 'mac' ); - - my $p = Net::Ping->new; - - my $prefix = $server_ip; - $prefix =~ s{\.\d+$}{.}; - my $ip = $prefix . $addr; - while ( -e "conf/ip/$ip" || $p->ping( $ip ) ) { - $ip = $prefix . $addr++; - die "all addresses allocated!" if $addr == $ip_to; - } - - write_file "$conf/mac/$mac", $ip; - if ( -l "$conf/ip/$ip" && readlink "$conf/ip/$ip" ne "$conf/mac/$mac") { - unlink "$conf/ip/$ip"; - symlink "$conf/mac/$mac", "$conf/ip/$ip"; - warn "$mac IP changed to $ip"; - } - - print "$mac NEW $ip\n"; - - return $ip; -} - -my $transaction = 0; # FIXME predictible transaction numbers - -while (1) { - - require "config.pl"; # refresh config - - print "waiting for DHCP requests on ",$sock->sockhost,":",$sock->sockport,"\n"; - - my $buf; - $sock->recv($buf, 1024); - print "<< ",$sock->peerhost,":",$sock->peerport,"\n"; - - if (defined $buf) { - - my $dhcp = Net::DHCP::Packet->new($buf); - $dhcp->comment( $transaction++ ); - - warn "recv: ", $dhcp->toString, "\n\n"; - - my $mac = substr($dhcp->chaddr(),0,$dhcp->hlen()*2); - my $ip = client_ip($mac); - my $user_class = $dhcp->getOptionValue(DHO_USER_CLASS()); - - if ( $user_class eq 'gPXE' ) { - $file = $gpxe_file; - } elsif ( ! $file ) { - $file = 'undionly.kpxe'; - } - - my $packet = { - Op => BOOTREPLY(), - Hops => $dhcp->hops(), - Xid => $dhcp->xid(), - Flags => $dhcp->flags(), - Ciaddr => $dhcp->ciaddr(), - Yiaddr => $ip, - Siaddr => $server_ip, - Giaddr => $dhcp->giaddr(), - Chaddr => $dhcp->chaddr(), - File => $file, - }; - - my $messagetype = $dhcp->getOptionValue(DHO_DHCP_MESSAGE_TYPE()); - - if ($messagetype eq DHCPDISCOVER()) { - warn "DHCP DISCOVER"; - $packet->{Comment} = $dhcp->comment(); - $packet->{DHO_DHCP_MESSAGE_TYPE()} = DHCPOFFER(); - } elsif ($messagetype eq DHCPREQUEST()) { - my $requested_ip = $dhcp->getOptionValue(DHO_DHCP_REQUESTED_ADDRESS()); - warn "DHCP REQUEST $requested_ip"; - if ( $ip eq $requested_ip ) { - $packet->{DHO_DHCP_MESSAGE_TYPE()} = DHCPACK(); - $packet->{DHO_DHCP_LEASE_TIME()} = 5 * 60; # 5 min -# $packet->{DHO_DHCP_SERVER_IDENTIFIER()} = $server_ip; # FIXME - $packet->{DHO_SUBNET_MASK()} = '255.255.255.0'; - $packet->{DHO_ROUTERS()} = $server_ip; -# $packet->{DHO_DOMAIN_NAME()} = 'pxelator.lan'; -# $packet->{DHO_NAME_SERVERS()} = $server_ip; -# $packet->{DHO_ROOT_PATH()} = '/exports/foobar'; - } else { - $packet->{DHO_DHCP_MESSAGE_TYPE()} = DHCPNAK(); - $packet->{DHO_DHCP_MESSAGE()} = "Bad request, expected $ip"; - } - } elsif ($messagetype eq DHCPINFORM()) { - warn "DHCP INFORM ignored"; - } else { - warn "$messagetype igored (bootp?)"; - } - - - warn ">> $mac == $ip server: $server_ip", $file ? " file: $file\n" : "\n"; - - $packet = new Net::DHCP::Packet( %$packet ); - warn "## ",$packet->toString(),"\n" if $debug; - - my $reply = IO::Socket::INET->new( - LocalAddr => $server_ip, - LocalPort => 67, - Proto => "udp", - Broadcast => 1, - PeerAddr => '255.255.255.255', - PeerPort => 68, - Reuse => 1, - ) or die "socket: $@"; - - my $buff = $packet->serialize(); - $reply->send( $buff, 0 ) or die "Error sending: $!\n"; - -# system("arp -s $ip $mac"), - - } else { - print "No bootp request.\n"; - } - -} diff --git a/bin/kvm-vde.sh b/bin/kvm-vde.sh deleted file mode 100755 index c686a97..0000000 --- a/bin/kvm-vde.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -x - -if ! grep tap0 /etc/network/interfaces ; then - -sudo apt-get install vde2 - -sudo sh -c "cat >> /etc/network/interfaces" << __add_tap0__ - -iface tap0 inet static - address 172.16.10.1 - netmask 255.255.255.0 - vde2-switch - - -__add_tap0__ - -fi - -sudo ifup tap0 -rm conf/server.ip ; ln -sf 172.16.10.1 conf/server.ip - -./bin/start-split.sh & - -#sudo tshark -i tap0 & - -vdeq kvm -m 512 -net nic,vlan=1,macaddr=52:54:00:12:01:00 \ - -net vde,vlan=1,sock=/var/run/vde2/tap0.ctl \ - -boot n - diff --git a/bin/kvm.sh b/bin/kvm.sh deleted file mode 100755 index f58c3f3..0000000 --- a/bin/kvm.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -x - -pxe=/undionly.kpxe -pxe=/pxelinux.0 - -kvm -boot n -net nic,model=e1000 -net user -tftp ./tftp -bootp $pxe - diff --git a/bin/start-split.sh b/bin/start-split.sh deleted file mode 100755 index 9b686c2..0000000 --- a/bin/start-split.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -source conf/.install.sh - -depends screen - -cat > /tmp/screenrc << ____ - -autodetach off -altscreen off -defscrollback 10000 -startup_message off - -sessionname PXElator - -split -screen -t dhcpd sudo perl -Ilib/PXElator -Ilib -Mdhcpd -e dhcpd::start -logfile /tmp/pxelator.dhcpd.log -log on -focus down -screen -t tftpd sudo perl -Ilib/PXElator -Ilib -Mtftpd -e tftpd::start -logfile /tmp/pxelator.tftp.log -log on - -____ - -screen="screen -R PXElator -c /tmp/screenrc" - -test ! -z "$DISPLAY" && xterm -e $screen diff --git a/bin/tftpd.pl b/bin/tftpd.pl deleted file mode 100755 index ced31e7..0000000 --- a/bin/tftpd.pl +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/perl -use strict; -use lib 'lib'; -use Net::TFTPd 0.03 qw(%OPCODES); - -die "need to run $0 as root like this\nsudo $0\n" unless $< == 0; - -our $tftp_dir; -sub tftp_dir { - require 'config.pl'; - warn "# config: ", readlink 'config.pl', " tftp_dir: $tftp_dir\n"; - return $tftp_dir; -} - -tftp_dir; - -die "no $tftp_dir\n" unless -e $tftp_dir; - -# callback sub used to print transfer status -sub callback -{ - my $req = shift; - if($req->{'_REQUEST_'}{'OPCODE'} eq $OPCODES{'RRQ'}) - { - # RRQ - printf "block: %u\/%u\n", $req->{'_REQUEST_'}{'LASTACK'}, $req->{'_REQUEST_'}{'LASTBLK'}; - } - elsif($req->{'_REQUEST_'}{'OPCODE'} eq $OPCODES{'WRQ'}) - { - # WRQ - printf "block: %u\/%u\n", $req->{'_REQUEST_'}{'LASTBLK'}, $req->{'_REQUEST_'}{'LASTACK'}; - } else { - warn "IGNORED: ", dump( $req ); - } -} - -# create the listener -my $listener = Net::TFTPd->new( - 'RootDir' => $tftp_dir, - 'Writable' => 0, - 'Timeout' => 3600, - 'CallBack' => \&callback, -# LocalAddr => '10.0.0.100', -# BlkSize => 8192, -# BlkSize => 512, - BlkSize => 1456, # IBM GE seems to be picky - Debug => 99, -) or die Net::TFTPd->error; -printf "TFTP on %s:%d timeout: %d dir: $tftp_dir\n", $listener->{'LocalAddr'} ? $listener->{'LocalAddr'} : "'any address'", $listener->{'LocalPort'}, $listener->{'Timeout'}; - -while(1) { - - # wait for any request (RRQ or WRQ) - if(my $request = $listener->waitRQ()) { - - $tftp_dir = tftp_dir; - - if ( $request->{RootDir} ne $tftp_dir ) { - $request->{RootDir} = $tftp_dir; - warn "new root: $tftp_dir\n"; - } - - # received request - printf "Received a %s for file '%s'\n", $OPCODES{$request->{'_REQUEST_'}{'OPCODE'}}, $request->{'_REQUEST_'}{'FileName'}; - - # process the request - if($request->processRQ()) { - print "OK, transfer completed successfully\n"; - } else { - warn Net::TFTPd->error; - $request->processRQ(); - } - } else { - # request not received (timed out waiting for request etc.) - warn Net::TFTPd->error; - } - -}