LinuxQuestions.org
Download your favorite Linux distribution at LQ ISO.
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Distributions > Slackware
User Name
Password
Slackware This Forum is for the discussion of Slackware Linux.

Notices


Reply
  Search this Thread
Old 06-06-2021, 04:39 PM   #1
astrogeek
Moderator
 
Registered: Oct 2008
Distribution: Slackware [64]-X.{0|1|2|37|-current} ::12<=X<=15, FreeBSD_12{.0|.1}
Posts: 6,264
Blog Entries: 24

Rep: Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195
Problems booting installer to UEFI system via PXE


I have been happily using a PXE server for all my installs and a few other things (ex. Gparted live) for several years. All my hardware had BIOS firmware so I had only to boot using pxelinux.0 and a single default menu.

I now have my first EFI hardware and have been banging my head the last 24 hours trying to set up a PXE boot for EFI of the Slackware64-14.2 installer (using HTTP or NFS for the media transfer - but I haven't gotten that far).

I have read many online resources about UEFI PXE, but have not found a single clear example. Most others seem to be as mystified as I am.

I have worked through several permutations of tftp file structure and dhcpd.conf configuration, without much success (some detail below). The EFI client is totally unhelpful and instantly overwrites whatever messages briefly flash past by dumping to a grub prompt.

Secure boot is disabled.

Using tcpdump on the server I can see that the client makes the dhcp request with the PXEClient arguments, the dhcp server replies with IP and filename to download. The client then makes the request for the filename using the assigned IP and the server sends the first packet of the file... the client then responds with a packet indicating "User has terminated the transfer".

I am using bootx64.efi from /EFI/boot/ as the boot loader with suitable grub.cfg (also named efidefault) and have tried isolinux/efiboot.img and the default initrd.img as initrd, but those are never actually requested so I suspect there is something about the bootx64.efi that it does not like.

My next step will be to download one of Eric's live ISO's (over 250k DSL) and see how he handles it in his PXE boots, but I still feel like I am missing something that everyone else knows!

Does anyone here PXE boot the Slackware EFI installer? If so, would you care to share your basic configuration?

Does anyone here know of a concise and complete and reproducible example of EFI boot of anything via PXE?

Thanks!

Last edited by astrogeek; 06-06-2021 at 04:46 PM.
 
Old 06-06-2021, 06:02 PM   #2
Didier Spaier
LQ Addict
 
Registered: Nov 2008
Location: Paris, France
Distribution: Slint64-15.0
Posts: 11,058

Rep: Reputation: Disabled
Just to be sure: did you try to just type pxesetup instead of setup from the Slackware installer?
 
Old 06-06-2021, 07:24 PM   #3
astrogeek
Moderator
 
Registered: Oct 2008
Distribution: Slackware [64]-X.{0|1|2|37|-current} ::12<=X<=15, FreeBSD_12{.0|.1}
Posts: 6,264

Original Poster
Blog Entries: 24

Rep: Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195
Quote:
Originally Posted by Didier Spaier View Post
Just to be sure: did you try to just type pxesetup instead of setup from the Slackware installer?
I think I must not have been clear enough, sorry. I never see the Slackware installer or have opportunity to type anything.

To try to clarify, I have a running Slackware64-14.2 machine which is my PXE boot server, among other things. It is a BIOS machine and provides the tftp, http, nfs and dhcp servers used during PXE boots. It was originally based on Eric's README_PXE.txt, but has been extended to serve other things including GParted Live, FreeBSD and even an Slint version (Thanks!).

That server has until now served only BIOS clients.

I now want to add support for EFI clients. Serving EFI clients works very similar to the way BIOS requests are served conceptually, as far as I can tell, except that it must provide a different bootloader, bootx64.efi (or syslinux.efi according to syslinux docs). BIOS clients are served from options present in a menu file, pxelinux.cfg/default in Eric's doc linked above, which is very simialr to Lilo config syntax, whereas EFI client choices must be served by a grub.conf file as it has grub in its dna. Otherwise, the tftp file paths and dhcp response are very similar and should load the kernel and initrd from which the installer may then be run. Some others such as GParted also load a squashfs filesystem over HTTP, the URL being passed as a kernel append parameter, but the Slackware installer does not need that.

I have reduced my tftp and dhcpd configs to only what is necessary for the EFI client, so pre-existing BIOS options are out of the picture until I get this one working.

As I indicated above, the dhcp transaction appears to be working correctly, the client requests the correctly indicated file (bootx64.efi) from/to the correct IP addresses and path, and the server begins serving the file... then the client bails and drops to a totally obscure grub prompt, ending the boot process.

I am not 100% certain that the bootx64.efi file is the right loader to send, there are various names used in different docs, but I read in more than one place that the bootx64.efi file (which is the name I see in the Slackware tree) is the same file for ISO media boots and PXE boots, but may require different paths in the grub.conf config, which it does (have even tried with duplicated paths).

I read from somewhere on the internet earlier, "BIOS PXE just works! UEFI PXE just doesn't!" and "The UEFI PXE spec is a mess...", and so far I agree with both. Still, I feel like am missing something...

Hope that helps, and I haope that I actually understood your question as well - tell me if I did not!

Thanks for the reply.
 
Old 06-06-2021, 07:56 PM   #4
babydr
Member
 
Registered: Aug 2015
Location: Fairbanks , Alaska
Distribution: Slackware-14.2 & 15.0
Posts: 226

Rep: Reputation: 45
I may not be a good form of help here , But ...

If you are getting a GRUB prompt then you are at least loading Grub from the server which (imo) would be the first step .
That the remote grub conf (may not) be being read or correctly configured is a possibility .
Would you post the grub.conf file and its path relative to the (I am going to assume) /tftpboot/ directory ?

This will probably be a next step for the Guru's to ask of you anyway ;-) .

Hth , JimL
 
1 members found this post helpful.
Old 06-06-2021, 11:21 PM   #5
astrogeek
Moderator
 
Registered: Oct 2008
Distribution: Slackware [64]-X.{0|1|2|37|-current} ::12<=X<=15, FreeBSD_12{.0|.1}
Posts: 6,264

Original Poster
Blog Entries: 24

Rep: Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195
Quote:
Originally Posted by babydr View Post
I may not be a good form of help here , But ...

If you are getting a GRUB prompt then you are at least loading Grub from the server which (imo) would be the first step .
That the remote grub conf (may not) be being read or correctly configured is a possibility .
Would you post the grub.conf file and its path relative to the (I am going to assume) /tftpboot/ directory ?

This will probably be a next step for the Guru's to ask of you anyway ;-) .

Hth , JimL
I had not posted "the" grub.cfg file previously because there have been so many tried that I did not want introduce a herring of any color! But granted, it would be helpful to show at least one iteration of the configs.

Here is the current version, barebones with a few commented alternates:

Code:
timeout=5

menuentry 'Slackware64-14.2' {
        linuxefi /bzimage
        initrdefi /efiboot.img

        #kernel /bzimage
        #append initrd=/efiboot.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 SLACK_KERNEL=huge.s

        #initrd /initrd.img
}
The tftp tree looks more or less like this at the moment. Everything at same level which was indicated as prefered or required by some online refs. I also duplicated the EFI/boot/ path in case that is where it may want to find the grub config (have also tried full paths to kernel and initrd)

Code:
TFTP_ROOT_PATH/efi/  \
|-- EFI
|   `-- boot
|       |-- efidefault
|       |-- grub.cfg
|       `-- grubx64.cfg
|-- System.map.gz
|-- bootx64.efi
|-- bzImage
|-- captured
|-- config
|-- efiboot.img
|-- efidefault
|-- grub.cfg
|-- grubx64.cfg
|-- initrd.img
And the filename from /etc/dhcpd.conf is:

Code:
 filename "/efi/bootx64.efi";
As the dhcp response appears to be working I will omit the rest of that one unless someone wants to see it.

It does seem to be correctly loading the bootx64.efi, which is the bootloader, but nothing I have tried results in any indication that the grub config is being loaded or acknowledged.

FWIW, in addition to no previous EFI exposure, I have managed to survive on Lilo alone, so I am learning/guessing about grub and have no useful ideas what to do with that grub> prompt either...

One important unanswered question I have:

* Where does the Slackware EFI bootloader actually look for the grub.cfg file, paths and filenames - mine are best guesses.

Thanks for the reply!

Last edited by astrogeek; 06-06-2021 at 11:32 PM.
 
Old 06-07-2021, 04:00 AM   #6
Didier Spaier
LQ Addict
 
Registered: Nov 2008
Location: Paris, France
Distribution: Slint64-15.0
Posts: 11,058

Rep: Reputation: Disabled
I think that you'd better use only grub commands.

Basically, by default when running grub-install the OS boot loader named grubx64.efi will be installed in the ESP and will look for its config file grub.cfg in /etc/boot/grub/, but this can be changed using options, check "man grub-install". See also https://www.gnu.org/software/grub/ma...e/Network.html
 
1 members found this post helpful.
Old 06-07-2021, 07:28 PM   #7
astrogeek
Moderator
 
Registered: Oct 2008
Distribution: Slackware [64]-X.{0|1|2|37|-current} ::12<=X<=15, FreeBSD_12{.0|.1}
Posts: 6,264

Original Poster
Blog Entries: 24

Rep: Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195
Thanks babydr and Didier_Spaier, you pointed me in the right direction!

I see that my naive attempts to create a simple grub.cfg were pretty pointless! Indeed, my limited perception of how grub fit into the whole picture was simply wrong, and obstructing my progress...

I now have a simple example working, and know how to make some use of the rescue prompt, but I won't make up for 20 years of avoiding grub in a single day! But knowing I am now on the right path, I know I'll get to the destination!

Thanks again, and I'll post a useful example of my final solution when I get there!
 
Old 06-07-2021, 07:36 PM   #8
jefro
Moderator
 
Registered: Mar 2008
Posts: 21,985

Rep: Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626
Thoughts.

Bios pxe had been in some cases pretty poorly implemented and it carries on today with uefi.


https://documentation.suse.com/sbp/a...#sec-setup-pxe
That has some good info I got from here. https://github.com/tianocore/tianoco...rvers-for-UEFI
 
1 members found this post helpful.
Old 06-08-2021, 01:36 PM   #9
astrogeek
Moderator
 
Registered: Oct 2008
Distribution: Slackware [64]-X.{0|1|2|37|-current} ::12<=X<=15, FreeBSD_12{.0|.1}
Posts: 6,264

Original Poster
Blog Entries: 24

Rep: Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195
After another 24 hours of frustration, and education, I now have a functional (and extensible) Slackware installer boot via UEFI PXE!

To cut this post very short with details to follow as time permits, getting Grub 2.0.0 to work, after a fashion, required numerous magical incantations and secret potions, mostly related to building then rebuilding the grub core image, then wrangling with client interface problems and fragile config files... what a mess!

Reading through endless bug reports and patches I came to the conclusion that Grub 2.0.0 which is still the Slackware 14.2 version just has too many problems to deal with, so I built Grub 2.0.4 using the scripts and patches from -current - and most of those problems disappeared and I was able to rebuild it all quickly without the need for magic spells...

So for anyone still following and using 14.2 - don't waste time with Grub 2.0.0 - build 2.0.4 and get a life!

I do not know if this rebuild may affect any other uses of Grub under 14.2 as my PXE server boots with Lilo, so you are on your own there...

I know we are late in the game for 14.2 patches, but if there are not any additional complications, it may be worthwhile to update to grub-2.0.4 in the 14.2 repos as time permits.
 
1 members found this post helpful.
Old 06-09-2021, 05:06 PM   #10
astrogeek
Moderator
 
Registered: Oct 2008
Distribution: Slackware [64]-X.{0|1|2|37|-current} ::12<=X<=15, FreeBSD_12{.0|.1}
Posts: 6,264

Original Poster
Blog Entries: 24

Rep: Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195
To provide a more useful description of the problems encountered with grub-2.0.0, and resolved by grub-2.0.4, I set up an actual test case which should be reproducible if anyone is sufficiently interested.

As it happens, Grub-2.0.6 was released today, and the updated manual available online differs somewhat from what I have been working with to this point. Notably, the manual pages for network booting have changed somewhat, hopefully to reflect further improvements. But as I am working with PXE boot from Slackware64-14.2 and my intent is not to follow grub updates closely, I will press ahead...

Network boot via grub from a tftp server is enabled by generating the necessary bootloader with the grub-mknetdir command:
Code:
grub-mknetdir --net-directory=/tftpboot/ --subdir=/boot/grub -d /usr/lib64/grub/x86_64-efi/
This creates the necessary grub image (core.efi) and modules configured for use... almost. But I found that the prefix and root variables seemed not correctly set, and found a useful workaround here. The work around is to regenerate the core.efi image using grub-mkimage which accepts the prefix as an optional argument and also allows us preload a few necessary modules:

Code:
grub-mkimage -O x86_64-efi -o /tftpboot/boot/grub/x86_64-efi/core.efi --prefix='(tftp,192.168.0.47)/boot/grub' efinet tftp
The page linked above also includes a suggestion to set those vars and any others you need in a separately linked, early loaded file they name setvars.cfg which comes in handy shortly.

I generated the following grub.cfg menu file initially using grub-mkconfig, then removed the unnecessary bits and replaced the menu items with those necessary to boot the Slackware installer and a GParted instance, the result (video options necessary for my EFI machine, not refined as yet):

Code:
default=0
timeout=5

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}


menuentry "Slackware 64-14.2 Installer" {
        load_video
        echo "Loading kernel..."
        linux /efi/bzImage vga=788 rw printk.time=0 nomodeset SLACK_KERNEL=huge.s
        echo "Loading initrd..."
        initrd /efi/initrd.img
}

menuentry "GParted Live 1.2" {
        load_video
        echo "Loading kernel..."
        linux /gp12efi/vmlinuz boot=live union=overlay username=user config components quiet noswap nosplash fetch=http://192.168.0.47/pxe/gp64-1.2.0.squashfs
        echo "Loading initrd..."
        initrd /gp12efi/initrd.img
}
The GParted kernel arguments were adapted from the syslinux.cfg from that version and the fetch line added as a guess (it worked in earlier versions for BIOS, and works here).

The relevant /tftpboot/... tree looks like this:

Code:
efi
|-- System.map.gz
|-- bzImage
`-- initrd.img

gp12efi
|-- initrd.img
`-- vmlinuz

boot
`-- grub
    |-- fonts
    |-- grub.cfg
    `-- x86_64-efi
        ...
        |-- core.efi
        |-- normal.mod
        ...
Boot via EFI PXE...

Code:
>>Start PXE over IPv4, Press [ESC] to EXIT...
   Station IP address is 192.168.0.246

   Server IP address is 192.168.0.47
   NBP filename is /boot/grub/x86_64-efi/core.efi
   NBP filesize is 219136 Bytes
Downloading NBP file...

   Succeed to download NBP file.
Welcome to GRUB!

error: destination unreachable.
Entering rescue mode...
grub rescue> ls
(hd0) (hd1)
grub rescue> set
net_default_server=
net_efinet0_dhcp_boot_file=
net_efinet0_dhcp_ip=192.168.0.246
...
net_efinet1_dhcp_boot_file=
net_efinet1_dhcp_ip=192.168.0.246
...
net_efinet2_dhcp_boot_file=
net_efinet2_dhcp_ip=192.168.0.246
...
prefix=(tftp,192.168.0.47)/boot/grub
pxe_default_server=
root=tftp,192.168.0.47
grub rescue> insmod normal
error: timeout reading `/boot/grub/x86_64-efi/normal.mod'.
grub rescue> set net_default_server=192.168.0.47
grub rescue> set pxe_default_server=192.168.0.47
grub rescue> set
...
net_default_server=192.168.0.47
pxe_default_server=192.168.0.47
grub rescue> insmod normal
error: timeout reading `/boot/grub/x86_64-efi/normal.mod'.
As you can see the network interface does not survive the transition from firmware to grub kernel. This could be partly worked around by crafting a setvars.cfg as described earlier, but you end up with an increasingly complex, fragile and nonportable arrangement which only partially works.

Among the many online threads I read of similar timeout and destination unreachable problems such as this one, I noted the dates relative to grub-2.0.0 release and the often repeated advice to use the latest build, and other indications that this was an active area of development. (The net_bootp command suggested in this thread only led to yet another configuration of dead network interface for me).

At some point I decided to just grab the latest grub and built grub-2.0.4 using the patches and scripts straight from -current.

After upgrading to the new package I moved the /tftpboot/boot/... to /tftboot/boot-2.0.0/ and ran grub-mknetdir and grub-mkimage as above, and copied the grub.cfg file into place - all else same as it had been.

Boot EFI PXE... Success!

Code:
>>Start PXE over IPv4, Press [ESC] to EXIT...
   Station IP address is 192.168.0.246

   Server IP address is 192.168.0.47
   NBP filename is /boot/grub/x86_64-efi/core.efi
   NBP filesize is 219136 Bytes
Downloading NBP file...

   Succeed to download NBP file.

*** At this point it immediately downloads grub.cfg and switches to menu...

*Slackware 64-14.2 Installer
GParted Live 1.2

...Both of which boot successfully...

If I drop to a grub shell I can see this (locale and feature lines removed):

grub> ls
(hd0) (hd1)
grub> set
net_default_server=192.168.0.47
pxe_default_server=192.168.0.47
net_default_interface=efinet0
net_efinet0_dhcp_boot_file=/boot/grub/x86_64-efi/core.efi
net_efinet0_dhcp_server_name=192.168.0.47
net_efinet0_dhcp_ip=192.168.0.246
net_efinet0_next_server=192.168.0.47
...
prefix=(tftp,192.168.0.47)/boot/grub
pxe_default_server=
root=tftp,192.168.0.47
...
grub>
So obviously network interface handling has been much improved... I wonder what grub-2.0.6 may bring?

Last edited by astrogeek; 06-11-2021 at 04:47 PM. Reason: tpoys
 
2 members found this post helpful.
Old 06-09-2021, 05:56 PM   #11
jefro
Moderator
 
Registered: Mar 2008
Posts: 21,985

Rep: Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626Reputation: 3626
Thanks for the information.
 
Old 06-18-2021, 06:13 PM   #12
astrogeek
Moderator
 
Registered: Oct 2008
Distribution: Slackware [64]-X.{0|1|2|37|-current} ::12<=X<=15, FreeBSD_12{.0|.1}
Posts: 6,264

Original Poster
Blog Entries: 24

Rep: Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195Reputation: 4195
Here is a quick update of the final solution after which I will mark this thread solved.

As noted in previous posts, my difficulty booting EFI via PXE initially resulted from my own lack of knowledge of how EFI works, which I was actually figuring out, and of how grub works, or doesn't, which I was not properly addressing. Until I asked the question my own limited preconceptions about grub and my long experience with PXE for BIOS combined to block my further enlightenment! The initial repsonses here motivated me to remove that block and led to my now fully working system.

After digesting the grub manual and exploring proper configurations, I still found the problems of implementing this with grub 2.00 (I incorrectly typed 2.0.0 in previous posts) insurmountable. Grub 2.00 in my current experience simply fails to initialize the network interface after the handoff from EFI firmware, meaning it cannot ever read its own configuration file and so the boot is not recoverable. As noted above, grub 2.04 does not have this problem and reliably initializes the interface, reads its configuration and allows choice of boot from available options.

I have since worked with grub 2.06 which was released during my explorations, and have not experienced any similar problems and am now using it on my 14.2 system.

Tha basic grub configuration posted above has proven to be simple and sufficient so I will not repost it unless someone would like clarification. The two step process of generating the grub network boot image is still the best way to go in my opinion. Using grub-mknetdir puts in place all the necessary files and builds a working core.efi image, but requires additional configuration, at least in my uses. But following with grub-mkimage to regenerate the core.efi image in the same directory with a few preloaded modules simplifies the configuration file that must be loaded and allows you to explicitly set the prefix path variable as well.

Finally, not previously mentioned is the dhcpd configuration which must detect and respond differently to BIOS and EFI clients. Different online how-tos all suggested similar methods but with greatly differing option names, namespaces and type specifications, none of which led to a working system (and most of which resulted in dhcpd startup errors in syslog). In the end I RTFM, doh! Man 5 dhcp-options had the definitive last word and this is all it takes on Slackware 14.2 or -current (using dhcpd, relevant part from /etc/dhcpd.conf using my already posted paths and filenames, adjust for your own):

Code:
...
if substring (option vendor-class-identifier, 0, 9) = "PXEClient" {
    next-server 0.0.0.0;   #<- use actual IP here
    if option pxe-system-type = 00:07 { #EFI client
        option tftp-server-name = IP or hostname; #Some EFI clients need this, others do not
        filename "/boot/grub/x86_64-efi/core.efi";
    }
    else{ #BIOS client
        filename "/slackware/pxelinux.0";
    }
} 
...
With that I will mark this thread SOLVED, and thanks again to all who replied and put me on the path to enlightenment!

Last edited by astrogeek; 06-18-2021 at 07:10 PM. Reason: tpoys
 
2 members found this post helpful.
Old 06-18-2021, 06:43 PM   #13
Didier Spaier
LQ Addict
 
Registered: Nov 2008
Location: Paris, France
Distribution: Slint64-15.0
Posts: 11,058

Rep: Reputation: Disabled
Congrats for your enlightenment and thanks for posting the solution you ended up with, which certainly can help others.
 
  


Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
UEFI Class 3 :: To use UEFI, or not to use UEFI? jheengut Slackware 19 12-30-2020 09:24 AM
LXer: PXE booting with UEFI hardware continued LXer Syndicated Linux News 0 03-27-2020 04:52 AM
how to PXE install on a remote system (disk - LUN) in Fedora with UEFI Ankit Darsi Fedora 2 09-24-2014 08:27 PM
issue with uefi pxe boot on rhel 6.5 as pxe server geekmaxwell Linux - Networking 3 04-02-2014 02:27 PM
Problem PXE booting FreeBSD 7.2 installer and installing via NFS btmiller *BSD 1 01-11-2010 05:32 AM

LinuxQuestions.org > Forums > Linux Forums > Linux - Distributions > Slackware

All times are GMT -5. The time now is 08:21 AM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration