Cannot get DHCP to work to see if PXE will work on FOG v1.54/Ubuntu Server 18.04 LTS



  • I have successfully installed FOG v1.54 on Ubuntu Server 18.04 LTS, and have manually assigned a static IP for my primary NIC (eno1) with an IP address of: 192.168.2.1/24. I will not be using DNS at all, but what else needs to be done in fog, or one of the core fog files to allow DHCP to run, I chose “Y” for that option. I am also using a dummy switch that has no access to the outside network and can do 1-3 machines at a time. There are no firewalls hindering deployment. I need DHCP & PXE to work properly, but it’s leaning DHCP. But it’s been so long since I’ve seen or done a fog server, which file/files need to be modified?
    Thanks.



  • @dbrilliant -It’s all good. Working fantastic!



  • I rebuilt 18.04 from scratch, and got way farther. updated both 32 bit & 64 bit kernels in FOG. The fog install I allowed it to dictate DHCP, and I can register hosts. I have a Dell 790 Windows 7 64 bit image I’m testing now. Seems to be hung up on the image upload for the 790, where it says “Saving original disk/parts” for about 5-7 minutes, and finally progressed. I will test Windows 10 afterwards.

    Thanks for your help.


  • Developer

    @dbrilliant For Ubuntu 18.04 you ought to use FOG working branch as I have fixed a couple of things there - either use git or if you don’t know how to handle that you can find a ZIP for download.

    It still won’t start, and the “journal” command doesn’t tell me exactly what the problem lies, but states that it errors with 0 and gives no leases.

    You might need to scroll down in that view (arrow/page down) to see the very latest messages. Do a systemctl restart isc-dhcp-server before so you have the latest error messages in the output.

    DHCP status gives configuration error,

    Please post the full output or a picture of it here and we might be able to help.



  • It still won’t start, and the “journal” command doesn’t tell me exactly what the problem lies, but states that it errors with 0 and gives no leases. DHCP status gives configuration error,
    topic 1- was from the copy & paste and are no part of the dump.
    topic 2: I commented the host fogserver and fixed-address out just in case as well as the bracket on the line below.
    topic3: subnet 10.0.29.0… all these are commented out, as I just quintuple checked.

    Since none of these are working, I’m leaning a complete format of Ubuntu 18.04 LTS with all universal repositories, NO DHCP download, and statically assign 192.168.2.1/24 as my eno1 (ethernet) adapter IP, and install updates ubuntu-desktop, and any basic updates, then install FOG. In FOG yes for DHCP on eno1 w/ no DNS, and let it do the rest and see if I can get lucky. The first runs w/ FOG on 16.04 & 18.04 failed miserably. Hopefully, I won’t need to edit files.


  • Developer

    @dbrilliant First off, you can use the buttons above the input text box to format configs as code blocks (symbol </>). This way the # are and other texts are shown as is.

    I have not tested the config myself but there are three things that jump at me.

    • In the first third of the config there is a line not commented but that might be just a copy & paste thing from the nano editor you use. Possibly this is not in your text file but please check to make sure:
    ...
    #  default-lease-time 600;
    #  max-lease-time 7200;
      GNU nano 2.9.3                               dhcpd.conf                                Modified  
    
    #   option routers 192.168.2.1;
    #}
    ...
    
    • Second you have an uncommented block for your FOG server host. This is ok in general although I myself prefer to configure servers with a static address in the server’s network config. This way you don’t have to use the fixed address section here. Quick note: I am not exactly sure if you can have a host declaration outside of any class or group defintion. From reading the man page quickly I think it is possible but I am not exactly sure and have not tested it yet.
    host fogserver {
      hardware ethernet 78:2b:cb:55:ee:0c;
      fixed-address 192.168.2.1;
    }
    
    • Third there seems to be another uncommented piece about half way down the config file. Although option routers ... should be possible to use in a global scope I am not exactly sure. Possibly this is causing the error:
    #  }
    #  subnet 10.0.29.0 netmask 255.255.255.0 {
        option routers rtr-29.example.org;
    #  }
    #  pool {
    

    If you still can’t start dhcp server run systemctl status isc-dhcp-server and journalctl -l -u isc-dhcp-server to figure out what is wrong in the config file.



  • this reply is missing a lot of"#" symbols, where I commented lines out.



  • @Sebastian-Roth

    # dhcpd.conf
    #
    # Sample configuration file for ISC dhcpd
    #
    # Attention: If /etc/ltsp/dhcpd.conf exists, that will be used as
    # configuration file instead of this file.
    #
    
    # option definitions common to all supported networks...
    #option domain-name "example.org";
    #option domain-name-servers ns1.example.org, ns2.example.org;
    
    #default-lease-time 600;
    #max-lease-time 7200;
    
    # The ddns-updates-style parameter controls whether or not the server will
    # attempt to do a DNS update when a lease is confirmed. We default to the
    # behavior of the version 2 packages ('none', since DHCP v2 didn't
    # have support for DDNS.)
    #ddns-update-style none;
    
    # If this DHCP server is the official DHCP server for the local
    # network, the authoritative directive should be uncommented.
    authoritative;
    
    # Use this to send dhcp log messages to a different log file (you also
    # have to hack syslog.conf to complete the redirection).
    #log-facility local7;
    
    # No service will be given on this subnet, but declaring it helps the 
    # DHCP server to understand the network topology.
    
    #subnet 10.152.187.0 netmask 255.255.255.0 {
    #}
    
    # This is a very basic subnet declaration.
    
    #subnet 192.168.2.0 netmask 255.255.255.0 {
    #   range 192.168.2.5 192.168.2.15;
    #   option routers 192.168.2.1;
     #}
    
    # This declaration allows BOOTP clients to get dynamic addresses,
    # which we don't really recommend.
    
    #subnet 10.254.239.32 netmask 255.255.255.224 {
    #  range dynamic-bootp 10.254.239.40 10.254.239.60;
    #  option broadcast-address 10.254.239.31;
    #  option routers rtr-239-32-1.example.org;
    #}
    
    # A slightly different configuration for an internal subnet.
    #subnet 192.168.2.1 netmask 255.255.255.0 {
    #  range 192.168.2.5 192.168.2.15;
    #  option domain-name-servers ns1.internal.example.org;
    #  option domain-name "internal.example.org";
    #  option subnet-mask 255.255.255.0;
    #  option broadcast-address 192.168.2.255;
    #  default-lease-time 600;
    #  max-lease-time 7200;
      GNU nano 2.9.3                               dhcpd.conf                                Modified  
    
    #   option routers 192.168.2.1;
    #}
    
    # This declaration allows BOOTP clients to get dynamic addresses,
    # which we don't really recommend.
    
    #subnet 10.254.239.32 netmask 255.255.255.224 {
    #  range dynamic-bootp 10.254.239.40 10.254.239.60;
    #  option broadcast-address 10.254.239.31;
    #  option routers rtr-239-32-1.example.org;
    #}
    
    # A slightly different configuration for an internal subnet.
    #subnet 192.168.2.1 netmask 255.255.255.0 {
    #  range 192.168.2.5 192.168.2.15;
    #  option domain-name-servers ns1.internal.example.org;
    #  option domain-name "internal.example.org";
    #  option subnet-mask 255.255.255.0;
    #  option broadcast-address 192.168.2.255;
    #  default-lease-time 600;
    #  max-lease-time 7200;
    #}
    
    # Hosts which require special configuration options can be listed in
    # host statements.   If no address is specified, the address will be
    # allocated dynamically (if possible), but the host-specific information
    # will still come from the host declaration.
    
    #host fogserver {
    #  hardware ethernet 78:2b:cb:55:ee:0c;
    #  filename "vmunix.passacaglia";
    #  server-name "toccata.example.com";
    #}
    
    # Fixed IP addresses can also be specified for hosts.   These addresses
    # should not also be listed as being available for dynamic assignment.
    # Hosts for which fixed IP addresses have been specified can boot using
    # BOOTP or DHCP.   Hosts for which no fixed address is specified can only
    # be booted with DHCP, unless there is an address range on the subnet
    # to which a BOOTP client is connected which has the dynamic-bootp flag
    # to which a BOOTP client is connected which has the dynamic-bootp flag
    # set.
    host fogserver {
      hardware ethernet 78:2b:cb:55:ee:0c;
      fixed-address 192.168.2.1;
    }
    
    # You can declare a class of clients and then do address allocation
    # based on that.   The example below shows a case where all clients
    # in a certain class get addresses on the 10.17.224/24 subnet, and all
    # other clients get addresses on the 10.0.29/24 subnet.
    
    #class "foo" {
    #  match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
    #}
    
    #shared-network 224-29 {
    #  subnet 10.17.224.0 netmask 255.255.255.0 {
    #    option routers rtr-224.example.org;
    #  }
    #  subnet 10.0.29.0 netmask 255.255.255.0 {
        option routers rtr-29.example.org;
    #  }
    #  pool {
    #    allow members of "foo";
    #    range 10.17.224.10 10.17.224.250;
    #  }
    #  pool {
    #    deny members of "foo";
    #    range 10.0.29.10 10.0.29.230;
    #  }
    #}
    # DHCP Server Configuration file\n#see /usr/share/doc/dhcp*/dhcpd.conf.sample
    # This file was created by FOG
    #Definition of PXE-specific options
    # Code 1: Multicast IP Address of bootfile
    # Code 2: UDP Port that client should monitor for MTFTP Responses
    # Code 3: UDP Port that MTFTP servers are using to listen for MTFTP requests
    # Code 4: Number of seconds a client must listen for activity before trying
    #         to start a new MTFTP transfer
    # Code 5: Number of seconds a client must listen before trying to restart
    #         a MTFTP transfer
    option space PXE;
    option PXE.mtftp-ip code 1 = ip-address;
    option PXE.mtftp-cport code 2 = unsigned integer 16;
    option PXE.mtftp-sport code 3 = unsigned integer 16;
    option PXE.mtftp-tmout code 4 = unsigned integer 8;
    option PXE.mtftp-delay code 5 = unsigned integer 8;
    option arch code 93 = unsigned integer 16;
    use-host-decl-names on;
    ddns-update-style interim;
    ignore client-updates;
    # Specify subnet of ether device you do NOT want service.
    # For systems with two or more ethernet devices.
    # subnet 136.165.0.0 netmask 255.255.0.0 {}
    subnet 192.168.2.0 netmask 255.255.255.0{
        option subnet-mask 255.255.255.0;
        range dynamic-bootp 192.168.2.10 192.168.2.254;
        default-lease-time 21600;
        max-lease-time 43200;
        option routers 192.168.2.1;
       option domain-name-servers 192.168.1.1;
        next-server 192.168.2.1;
        class "Legacy" {
            match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00000";
            filename "undionly.kkpxe";
        }
        class "UEFI-32-2" {
            match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00002";
            filename "i386-efi/ipxe.efi";
        }
        class "UEFI-32-1" {
            match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00006";
            filename "i386-efi/ipxe.efi";
        }
        class "UEFI-64-1" {
            match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00007";
            filename "ipxe.efi";
        }
        class "UEFI-64-2" {
            match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00008";
            filename "ipxe.efi";
        }
        class "UEFI-64-3" {
            match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00009";
            filename "ipxe.efi";
        }
        class "SURFACE-PRO-4" {
            match if substring(option vendor-class-identifier, 0, 32) = "PXEClient:Arch:00007:UNDI:003$
            filename "ipxe.efi";
        }
        class "Apple-Intel-Netboot" {
            match if substring(option vendor-class-identifier, 0, 14) = "AAPLBSDPC/i386";
            option dhcp-parameter-request-list 1,3,17,43,60;
            if (option dhcp-message-type = 8) {
                option vendor-class-identifier "AAPLBSDPC";
                if (substring(option vendor-encapsulated-options, 0, 3) = 01:01:01) {
                    # BSDP List
                    option vendor-encapsulated-options 01:01:01:04:02:80:00:07:04:81:00:05:2a:09:0D:81$
                    filename "ipxe.efi";
                }
            }
        }
    }
    

  • Developer

    @dbrilliant Please post the full config you have at the moment. Otherwise we can’t tell you what’s wrong.



  • @Sebastian-Roth I tried copying your code to the bottom of the /etc/dhcp/dhcpd.conf file, and commented out all but what you had and left “authoritative;” enabled/uncommented and also changed the “next-server” to the FOG Server 192.168.2.1. DHCP no longer work, it’s failed at handing out IP addresses, and PXE doesn’t work. Any ideas?



  • @Sebastian-Roth Also, one more question, since I told FOG no to DHCP, do I see your sample doesn’t have “authoritative;” not added to it, do I leave that part out, or uncommented?



  • @Sebastian-Roth -I chose No for DHCP & DNS during the FOG install. Just doing the default install of FOG on both Ubuntu Server 18.04 & 16.04 w/o changing anything will not work at all.


  • Developer

    @dbrilliant Your current dhcp config does not provide any PXE boot information so the client simply cannot boot from network. I am wondering why the installer did not generate a proper config for you?! Did you say no when the installer asked if it should handle DHCP for you (be aware the default is no here…).

    Just for reference, this is a config create on one of my test systems by the FOG installers:

    # DHCP Server Configuration file\n#see /usr/share/doc/dhcp*/dhcpd.conf.sample
    # This file was created by FOG
    #Definition of PXE-specific options
    # Code 1: Multicast IP Address of bootfile
    # Code 2: UDP Port that client should monitor for MTFTP Responses
    # Code 3: UDP Port that MTFTP servers are using to listen for MTFTP requests
    # Code 4: Number of seconds a client must listen for activity before trying
    #         to start a new MTFTP transfer
    # Code 5: Number of seconds a client must listen before trying to restart
    #         a MTFTP transfer
    option space PXE;
    option PXE.mtftp-ip code 1 = ip-address;
    option PXE.mtftp-cport code 2 = unsigned integer 16;
    option PXE.mtftp-sport code 3 = unsigned integer 16;
    option PXE.mtftp-tmout code 4 = unsigned integer 8;
    option PXE.mtftp-delay code 5 = unsigned integer 8;
    option arch code 93 = unsigned integer 16;
    use-host-decl-names on;
    ddns-update-style interim;
    ignore client-updates;
    # Specify subnet of ether device you do NOT want service.
    # For systems with two or more ethernet devices.
    # subnet 136.165.0.0 netmask 255.255.0.0 {}
    subnet 192.168.2.0 netmask 255.255.255.0{
        option subnet-mask 255.255.255.0;
        range dynamic-bootp 192.168.2.10 192.168.2.254;
        default-lease-time 21600;
        max-lease-time 43200;
        option routers 192.168.2.1;
        option domain-name-servers 192.168.1.1;
        next-server 192.168.2.7;
        class "Legacy" {
            match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00000";
            filename "undionly.kkpxe";
        }
        class "UEFI-32-2" {
            match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00002";
            filename "i386-efi/ipxe.efi";
        }
        class "UEFI-32-1" {
            match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00006";
            filename "i386-efi/ipxe.efi";
        }
        class "UEFI-64-1" {
            match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00007";
            filename "ipxe.efi";
        }
        class "UEFI-64-2" {
            match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00008";
            filename "ipxe.efi";
        }
        class "UEFI-64-3" {
            match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00009";
            filename "ipxe.efi";
        }
        class "SURFACE-PRO-4" {
            match if substring(option vendor-class-identifier, 0, 32) = "PXEClient:Arch:00007:UNDI:003016";
            filename "ipxe.efi";
        }
        class "Apple-Intel-Netboot" {
            match if substring(option vendor-class-identifier, 0, 14) = "AAPLBSDPC/i386";
            option dhcp-parameter-request-list 1,3,17,43,60;
            if (option dhcp-message-type = 8) {
                option vendor-class-identifier "AAPLBSDPC";
                if (substring(option vendor-encapsulated-options, 0, 3) = 01:01:01) {
                    # BSDP List
                    option vendor-encapsulated-options 01:01:01:04:02:80:00:07:04:81:00:05:2a:09:0D:81:00:05:2a:08:69:50:58:45:2d:46:4f:47;
                    filename "ipxe.efi";
                }
            }
        }
    }
    

    Make sure you use the correct IP address information according to your network when using this config.

    The option next-server x.x.x.x; has to point to your FOG server IP.



  • @dbrilliant:
    There are many “#” symbols missing from the output.
    Only line is ;authorized
    and
    This is a very basic subnet declaration.
    subnet 192.168.2.0 netmask 255.255.255.0 {
    range 192.168.2.5 192.168.2.15;
    option routers 192.168.2.1;
    }
    These are not commented out.





  • @dbrilliant
    Adding 2-3 pictures of the client trying to connect to DHCP, and the client on Windows is getting 192.168.2.6/24 address w/ 192.168.2.1 def. gw.
    ![2_1540926945776_IMG_20181030_151208.jpg](Uploading 99%) !



  • @Sebastian-Roth
    Out put from dhcpd.conf file:
    GNU nano 2.9.3 dhcpd.conf

    # dhcpd.conf
    #
    # Sample configuration file for ISC dhcpd
    #
    # Attention: If /etc/ltsp/dhcpd.conf exists, that will be used as
    # configuration file instead of this file.
    #
    
    # option definitions common to all supported networks...
    #option domain-name "example.org";
    #option domain-name-servers ns1.example.org, ns2.example.org;
    
    default-lease-time 600;
    max-lease-time 7200;
    
    # The ddns-updates-style parameter controls whether or not the server will
    # attempt to do a DNS update when a lease is confirmed. We default to the
    # behavior of the version 2 packages ('none', since DHCP v2 didn't
    # have support for DDNS.)
    #ddns-update-style none;
    
    # If this DHCP server is the official DHCP server for the local
    # network, the authoritative directive should be uncommented.
    authoritative;
    
    # Use this to send dhcp log messages to a different log file (you also
    # have to hack syslog.conf to complete the redirection).
    #log-facility local7;
    
    # No service will be given on this subnet, but declaring it helps the 
    # DHCP server to understand the network topology.
    
    #subnet 10.152.187.0 netmask 255.255.255.0 {
    #}
    
    # This is a very basic subnet declaration.
    
    subnet 192.168.2.0 netmask 255.255.255.0 {
       range 192.168.2.5 192.168.2.15;
       option routers 192.168.2.1;
    }
    # This declaration allows BOOTP clients to get dynamic addresses,
    # which we don't really recommend.
    
    #subnet 10.254.239.32 netmask 255.255.255.224 {
    #  range dynamic-bootp 10.254.239.40 10.254.239.60;
    #  option broadcast-address 10.254.239.31;
    #  option routers rtr-239-32-1.example.org;
    #}
    
    # A slightly different configuration for an internal subnet.
    #subnet 192.168.2.1 netmask 255.255.255.0 {
    #  range 192.168.2.5 192.168.2.15;
    #  option domain-name-servers ns1.internal.example.org;
    #  option domain-name "internal.example.org";
    #  option subnet-mask 255.255.255.0;
    #  option broadcast-address 192.168.2.255;
    #  default-lease-time 600;
    #  max-lease-time 7200;
    #}
    
    # Hosts which require special configuration options can be listed in
    # Hosts which require special configuration options can be listed in
    # host statements.   If no address is specified, the address will be
    # allocated dynamically (if possible), but the host-specific information
    # will still come from the host declaration.
    
    #host fogserver {
    #  hardware ethernet 78:2b:cb:55:ee:0c;
    #  filename "vmunix.passacaglia";
    #  server-name "toccata.example.com";
    #}
    
    # Fixed IP addresses can also be specified for hosts.   These addresses
    # should not also be listed as being available for dynamic assignment.
    # Hosts for which fixed IP addresses have been specified can boot using
    # BOOTP or DHCP.   Hosts for which no fixed address is specified can only
    # be booted with DHCP, unless there is an address range on the subnet
    # to which a BOOTP client is connected which has the dynamic-bootp flag
    # set.
    host fogserver {
      hardware ethernet 78:2b:cb:55:ee:0c;
      fixed-address 192.168.2.1;
    }
    
    # You can declare a class of clients and then do address allocation
    # based on that.   The example below shows a case where all clients
    # in a certain class get addresses on the 10.17.224/24 subnet, and all
    # other clients get addresses on the 10.0.29/24 subnet.
    
    #class "foo" {
    #  match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
    #}
    
    #shared-network 224-29 {
    #  subnet 10.17.224.0 netmask 255.255.255.0 {
    #    option routers rtr-224.example.org;
    #  }
    #  subnet 10.0.29.0 netmask 255.255.255.0 {
    #    option routers rtr-29.example.org;
    #  }
    #  pool {
    #    allow members of "foo";
    #    range 10.17.224.10 10.17.224.250;
    #  }
    #  pool {
    #    deny members of "foo";
    #    range 10.0.29.10 10.0.29.230;
    #  }
    #}
    #  }
    #  pool {
    #    allow members of "foo";
    

  • Developer

    @dbrilliant said in Cannot get DHCP to work to see if PXE will work on FOG v1.54/Ubuntu Server 18.04 LTS:

    I have also tried the basic install without making any changes, and fog definitely doesn’t work.

    That’s not fair to say and definitely not true!

    There is no need for pre-installing isc-dhcp-server and manual configuration. But if you are keen to that route you might want to post dhcpd.conf file here so we can have a look. As well you might take a picture of the client’s timing out. This can happen at different stages and we need to know which one exactly to be able to help.



  • @dbrilliant
    I have also tried the basic install without making any changes, and fog definitely doesn’t work. But this fresh install is the farthest I’ve got. i can get to the Fog site, but do any changes need to be made on it? I have all defaults, except the Fog menu timeout for 10 seconds.



  • Thanks Sebastian, I started completely from scratch, and installed the isc-dhcp-server applet for Ubuntu 18.04 LTS. Once I setup the parameters and in the netplan & dhcpd.conf files for my primary interface (eno1), and I can now grab an DHCP IP address w/ Default gateway, but when PXE booting to a PC to see if the FOG menu appears, it will not pick up anything. Just times out. Is there something I missed. I also told fog to use eno1 (192.168.2.1) as the primary interface, and didn’t select DHCP during the install. Any ideas?


 

519
Online

5.4k
Users

12.6k
Topics

118.7k
Posts