private void CreateGrubMenu()
{
var customMenuEntries = BLL.BootEntry.SearchBootEntrys().Where(x => x.Type == "grub" && x.Active == 1).OrderBy(x => x.Order).ThenBy(x => x.Name);
var defaultCustomEntry = customMenuEntries.FirstOrDefault(x => x.Default == 1);
var grubMenu = new StringBuilder();
grubMenu.Append("insmod password_pbkdf2" + NewLineChar);
grubMenu.Append("insmod regexp" + NewLineChar);
grubMenu.Append("set default=0" + NewLineChar);
grubMenu.Append("set timeout=10" + NewLineChar);
grubMenu.Append("set pager=1" + NewLineChar);
if (!string.IsNullOrEmpty(GrubUserName) && !string.IsNullOrEmpty(GrubPassword))
{
grubMenu.Append("set superusers=\"" + GrubUserName + "\"" + NewLineChar);
string sha = null;
try
{
sha =
new WebClient().DownloadString(
"http://docs.clonedeploy.org/grub-pass-gen/encrypt.php?password=" + GrubPassword);
sha = sha.Replace("\n \n\n\n", "");
}
catch
{
Logger.Log("Could not generate sha for grub password. Could not contact http://clonedeploy.org");
}
grubMenu.Append("password_pbkdf2 " + GrubUserName + " " + sha + "" + NewLineChar);
grubMenu.Append("export superusers" + NewLineChar);
grubMenu.Append("" + NewLineChar);
}
grubMenu.Append(@"regexp -s 1:b1 '(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3})' $net_default_mac" +
NewLineChar);
grubMenu.Append(@"regexp -s 2:b2 '(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3})' $net_default_mac" +
NewLineChar);
grubMenu.Append(@"regexp -s 3:b3 '(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3})' $net_default_mac" +
NewLineChar);
grubMenu.Append(@"regexp -s 4:b4 '(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3})' $net_default_mac" +
NewLineChar);
grubMenu.Append(@"regexp -s 5:b5 '(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3})' $net_default_mac" +
NewLineChar);
grubMenu.Append(@"regexp -s 6:b6 '(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3}):(.{1,3})' $net_default_mac" +
NewLineChar);
grubMenu.Append(@"mac=01-$b1-$b2-$b3-$b4-$b5-$b6" + NewLineChar);
grubMenu.Append("" + NewLineChar);
if (Type == "standard")
{
grubMenu.Append("if [ -s /pxelinux.cfg/$mac.cfg ]; then" + NewLineChar);
grubMenu.Append("configfile /pxelinux.cfg/$mac.cfg" + NewLineChar);
grubMenu.Append("fi" + NewLineChar);
}
else
{
grubMenu.Append("if [ -s /proxy/efi64/pxelinux.cfg/$mac.cfg ]; then" + NewLineChar);
grubMenu.Append("configfile /proxy/efi64/pxelinux.cfg/$mac.cfg" + NewLineChar);
grubMenu.Append("fi" + NewLineChar);
}
if (defaultCustomEntry != null)
{
grubMenu.Append("" + NewLineChar);
grubMenu.Append("menuentry \"" + _alphaNumericSpace.Replace(defaultCustomEntry.Name,"") + "\" --unrestricted {" + NewLineChar);
grubMenu.Append(defaultCustomEntry.Content + NewLineChar);
grubMenu.Append("}" + NewLineChar);
}
grubMenu.Append("" + NewLineChar);
grubMenu.Append("menuentry \"Boot To Local Machine\" --unrestricted {" + NewLineChar);
grubMenu.Append("exit" + NewLineChar);
grubMenu.Append("}" + NewLineChar);
grubMenu.Append("" + NewLineChar);
grubMenu.Append("menuentry \"Client Console\" --user {" + NewLineChar);
grubMenu.Append("echo Please Wait While The Boot Image Is Transferred. This May Take A Few Minutes." +
NewLineChar);
grubMenu.Append("linux /kernels/" + Kernel + " root=/dev/ram0 rw ramdisk_size=156000 " + " web=" +
_webPath +
" USER_TOKEN=" + _userToken + " task=debug consoleblank=0 " + _globalComputerArgs + "" + NewLineChar);
grubMenu.Append("initrd /images/" + BootImage + "" + NewLineChar);
grubMenu.Append("}" + NewLineChar);
grubMenu.Append("" + NewLineChar);
grubMenu.Append("menuentry \"On Demand Imaging\" --user {" + NewLineChar);
grubMenu.Append("echo Please Wait While The Boot Image Is Transferred. This May Take A Few Minutes." +
NewLineChar);
grubMenu.Append("linux /kernels/" + Kernel + " root=/dev/ram0 rw ramdisk_size=156000 " + " web=" +
_webPath +
" USER_TOKEN=" + _userToken + " task=ond consoleblank=0 " + _globalComputerArgs + "" + NewLineChar);
grubMenu.Append("initrd /images/" + BootImage + "" + NewLineChar);
grubMenu.Append("}" + NewLineChar);
grubMenu.Append("" + NewLineChar);
grubMenu.Append("menuentry \"Add Computer\" --user {" + NewLineChar);
grubMenu.Append("echo Please Wait While The Boot Image Is Transferred. This May Take A Few Minutes." +
NewLineChar);
grubMenu.Append("linux /kernels/" + Kernel + " root=/dev/ram0 rw ramdisk_size=156000 " + " web=" +
_webPath +
" USER_TOKEN=" + _userToken + " task=register consoleblank=0 " + _globalComputerArgs + "" +
NewLineChar);
grubMenu.Append("initrd /images/" + BootImage + "" + NewLineChar);
grubMenu.Append("}" + NewLineChar);
grubMenu.Append("" + NewLineChar);
grubMenu.Append("menuentry \"Diagnostics\" --user {" + NewLineChar);
grubMenu.Append("echo Please Wait While The Boot Image Is Transferred. This May Take A Few Minutes." +
NewLineChar);
grubMenu.Append("linux /kernels/" + Kernel + " root=/dev/ram0 rw ramdisk_size=156000 " + " web=" +
_webPath +
" USER_TOKEN=" + _userToken + " task=diag consoleblank=0 " + _globalComputerArgs + "" + NewLineChar);
grubMenu.Append("initrd /images/" + BootImage + "" + NewLineChar);
grubMenu.Append("}" + NewLineChar);
foreach (var customEntry in customMenuEntries)
{
if (defaultCustomEntry != null && customEntry.Id == defaultCustomEntry.Id)
continue;
grubMenu.Append("" + NewLineChar);
grubMenu.Append("menuentry \"" + _alphaNumericSpace.Replace(customEntry.Name, "") +
"\" --user {" + NewLineChar);
grubMenu.Append(customEntry.Content + NewLineChar);
grubMenu.Append("}" + NewLineChar);
grubMenu.Append("" + NewLineChar);
}
var path = Settings.TftpPath + "grub" + Path.DirectorySeparatorChar + "grub.cfg";
new FileOps().WritePath(path, grubMenu.ToString());
}