rEFInd PXE booting issue
-
@george1421 No. What we usually end up having to do was hit ESC and it went to the boot menu and we had to select boot from file, and navigate down to the .efi boot file.
-
@quinniedid said in rEFInd PXE booting issue:
and navigate down to the .efi boot file
Is this boot file in a specific path?
Also is your current refind.conf as you have posted in your OP?
-
I’m trying to find a way for refind to help us here. I don’t have any hp hardware on my site so I can’t duplicate your setup.
I’ve downloaded the refind iso from here: http://sourceforge.net/projects/refind/files/0.11.2/refind-cd-0.11.2.zip/download
Then formatted a usb flash drive as fat32
Mounted the iso image and then copied the entire contents of the iso image to the usb flash drive.
Then I’ve booted a uefi system from that flash drive.
It would be interesting to see if we take the refind.conf from the fog server and replace the refind.conf (after we save the original) on the flash drive. Does it find what it needs to boot the hard drive?
FOG only transfers refind kernel and refind.conf to the target computer. I’m wondering if there is a needed driver that refind needs to see your boot drive. Right now I’m just trying to understand the refind console.
-
@george1421 0_1528141994949_refind.conf.txt
This is the latest one which because we just updated FOG I do believe is the default. I have just downloaded the refind and will test that and see what the results are. I will also see what directory we have to go to. I just saw where we can specify that in the refind.conf
-
@george1421 Okay. So I downloaded that ISO and it still is doing the exact same thing. For more clarification after talking with the technician, it appears that Windows Boot Manager does not show up in the boot menu of the PC. Instead he has to select boot from file, find the driver and drill down to EFI/boot folder to start Windows. What is interesting is that when remove network boot out of the equation it boots straight to the operating system without any issue. We are currently in the process of installing 1803 on the PC to see if it resolves this issue. But so far I am guessing that it won’t as something else is going on with UEFI for some reason on this box.
-
@george1421 So it appears that installing 1803 has not fixed this issue that we are experiencing. I have tried to add that path to the refind.conf file for it to find something to boot with but it has failed. What else would you recommend us to try at this point?
-
@quinniedid I’ve been thinking about this for the last hour or so as to what does this tell us.
- Its not exiting from the iPXE kernel to refind kernel that is causing the hang.
- Since refind does this same thing by itself, this issue is not related to FOG or any fog version(s). The refind you downloaded is the latest, so if fog is using an outdated version then, again it’s not FOG at fault here (don’t read anything more into what I said, than on the surface).
- It doesn’t appear to be a layout difference between 1709 and 1803 (it would be mildly interesting of 1511 did the same). Moving the 1803 hard drive you just created to a functioning computer (pxe boot, to refind, to OS) would tell us if its the hardware at fault or the disk format. A double swap between working and failed would also be interesting to see if the problem moves.
- The system will boot if you navigate to the location of the efi boot loader(?). That tells me that you have sufficient drivers to find the boot loader if its looking in the right spot.
Understand I’m trying to build a truth table of what we know so far.
If you put the original refind.conf file back in place on the flash drive does the refind gui boot to the OS correctly?
-
I have a few more questions for you after spending some time last night with the refind iso image. (understand I’m hunting and poking here)
-
If you restore the default refind.conf file, then usb boot the refind image on one of these computers that fail to boot after fog ipxe menu. You should get a graphical GUI. There will be a row of icons like efi shell, partition hard drive, shutdown, etc… Just above that row of icons is there one big icon that represents the OS installed on that hard drive? When I tested with linux mint and windows, there was a large icon that represented the OS found on the hard drive.
-
If you go into the efi shell command and issue
bcfg boot dump -v -b
it should list out the nvram boot options. Is the windows boot manager listed?
I’ll save the rest until we understand what you are seeing. But the idea is if the usb boot of refind identifies the target OS then we just need to find the differences between the fog version of refind.conf and the supplied version of refind.conf
-
-
It may have something to do with the HP Prodesk series. We have similar issues with our HP Prodesk 400 G3 mini computers.
I actually install refind into my image to use as the main boot manager, I include the latest ipxe.efi file so that I can select network boot, windows boot, uefi/bios settings, or what have you with a bit more ease.The local version of rEFInd works fine on the prodesk’s but the network version has issues. I’ve tried making the conf files the same and various configurations to no avail. Also tried updating the rEFInd kernel files and such with the ones I used locally.
Having the local rEFInd is kind of my work around, because then the computers only boot to the ipxe menu when they need the ipxe menu and it doesn’t get used as the default option.
The thing is that this only happens on the HP prodesk 400 g3 minis, no any other models that I have found. But that is also my current workstation standard, because this is the only issue I’m having with it, it’s great for everything else. Granted we are getting a different model for this next computer order, an elitedesk 800 g3 mini, but if the prodesk 600’s are having the same issue, I imagine I may still be getting the same problem.
All this rambling leads me to a thought, @quinniedid do you know what network card is used by your prodesk 600’s? Maybe it’s the network card with the issue. If I can I will try testing a known working usb nic on one of these to see if I can prove that. Looks like it’s a Realtek PCI-E Gigabit RTL8168 adapter. Maybe the realtek.efi boot file would yield different results in this case? In my case it just says refind initializing… forever when attempting to exit.
-
@george1421 @JJ-Fullmer Thank you all for the info. To provide the most accurate information from the tech. There never was a menu option from rEFInd. The menu that was being accessed was from the HP BIOS to which there was no Windows Boot Manager to select but instead we had to drill down to the file and select it to boot. Normally without network boot it would boot just fine.
From what JJ was saying it appears that this is a known issue with these boxes and that we would instead have to use a local version of rEFInd. We have tried using a USB for this and has failed as well to find any boot devices and is simply hanging on Initializing. We have taken the HDD out of the ProDesk and into a known working PC and Windows did boot with network boot without any issues. This really points its finger back at the ProDesk.
If there is anything else you would recommend that we try at this point to troubleshoot? I will try to prob the rEFInd community as well to see if they have some solutions.
George we are working on gathering that information and I will post back with that information shortly. From what I have seen we never have any menu or options to select from like you described but we will try to find that or at least try to figure out how to make the menu appear.
-
@quinniedid I actually just figured out a solution that can be implemented on the fog refind.conf file. Well it can be if you only use windows on devices that would boot to hard disk from the fog pxe menu.
open up refind.conf on your fogserver at
/var/www/fog/service/ipxe/refind.conf
in your favorite text editor- Comment out the
scan_driver_dirs
line (found at line # ~201).- This step may or may not be neccesarry, didn’t test it with it after just got it working, but in the comments it mentions it isn’t usually needed
- Change the scanfor line (found at line # ~219) to just
scanfor manual
- Taking away internal, external and such will disable the scanning for boot loaders and will just use the manual ones you define
- Ensure the default selection is set to the first option (1) around line 364 looking like
default_selection 1
- add this stanza at the end of the file to boot for windows
menuentry "windows" { volume SYSTEM loader \EFI\Microsoft\Boot\bootmgfw.efi enabled }
- Comment out any other pre-defined menuentries
- The final refind.conf would look like this
# # refind.conf # Configuration file for the rEFInd boot menu # # Timeout in seconds for the main menu screen. Setting the timeout to 0 # disables automatic booting (i.e., no timeout). Setting it to -1 causes # an immediate boot to the default OS *UNLESS* a keypress is in the buffer # when rEFInd launches, in which case that keypress is interpreted as a # shortcut key. If no matching shortcut is found, rEFInd displays its # menu with no timeout. # timeout 3 # Screen saver timeout; the screen blanks after the specified number of # seconds with no keyboard input. The screen returns after most keypresses # (unfortunately, not including modifier keys such as Shift, Control, Alt, # or Option). Setting a value of "-1" causes rEFInd to start up with its # screen saver active. The default is 0, which disables the screen saver. #screensaver 300 # Hide user interface elements for personal preference or to increase # security: # banner - the rEFInd title banner (built-in or loaded via "banner") # label - boot option text label in the menu # singleuser - remove the submenu options to boot Mac OS X in single-user # or verbose modes; affects ONLY MacOS X # safemode - remove the submenu option to boot Mac OS X in "safe mode" # hwtest - the submenu option to run Apple's hardware test # arrows - scroll arrows on the OS selection tag line # hints - brief command summary in the menu # editor - the options editor (+, F2, or Insert on boot options menu) # badges - device-type badges for boot options # all - all of the above # Default is none of these (all elements active) # #hideui singleuser #hideui all # Set the name of a subdirectory in which icons are stored. Icons must # have the same names they have in the standard directory. The directory # name is specified relative to the main rEFInd binary's directory. If # an icon can't be found in the specified directory, an attempt is made # to load it from the default directory; thus, you can replace just some # icons in your own directory and rely on the default for others. # Default is "icons". # #icons_dir myicons # Use a custom title banner instead of the rEFInd icon and name. The file # path is relative to the directory where refind.efi is located. The color # in the top left corner of the image is used as the background color # for the menu screens. Currently uncompressed BMP images with color # depths of 24, 8, 4 or 1 bits are supported, as well as PNG images. # #banner hostname.bmp #banner mybanner.png # Specify how to handle banners that aren't exactly the same as the screen # size: # noscale - Crop if too big, show with border if too small # fillscreen - Fill the screen # Default is noscale # #banner_scale fillscreen # Icon sizes. All icons are square, so just one value is specified. The # big icons are used for OS selectors in the first row and the small # icons are used for tools on the second row. Drive-type badges are 1/4 # the size of the big icons. Legal values are 32 and above. If the icon # files do not hold icons of the proper size, the icons are scaled to # the specified size. The default values are 48 and 128 for small and # big icons, respectively. # #small_icon_size 96 #big_icon_size 256 # Custom images for the selection background. There is a big one (144 x 144) # for the OS icons, and a small one (64 x 64) for the function icons in the # second row. If only a small image is given, that one is also used for # the big icons by stretching it in the middle. If only a big one is given, # the built-in default will be used for the small icons. # # Like the banner option above, these options take a filename of an # uncompressed BMP image file with a color depth of 24, 8, 4, or 1 bits, # or a PNG image. The PNG format is required if you need transparency # support (to let you "see through" to a full-screen banner). # #selection_big selection-big.bmp #selection_small selection-small.bmp # Set the font to be used for all textual displays in graphics mode. # The font must be a PNG file with alpha channel transparency. It must # contain ASCII characters 32-126 (space through tilde), inclusive, plus # a glyph to be displayed in place of characters outside of this range, # for a total of 96 glyphs. Only monospaced fonts are supported. Fonts # may be of any size, although large fonts can produce display # irregularities. # The default is rEFInd's built-in font, Luxi Mono Regular 12 point. # #font myfont.png # Use text mode only. When enabled, this option forces rEFInd into text mode. # Passing this option a "0" value causes graphics mode to be used. Pasing # it no value or any non-0 value causes text mode to be used. # Default is to use graphics mode. # textonly # Set the EFI text mode to be used for textual displays. This option # takes a single digit that refers to a mode number. Mode 0 is normally # 80x25, 1 is sometimes 80x50, and higher numbers are system-specific # modes. Mode 1024 is a special code that tells rEFInd to not set the # text mode; it uses whatever was in use when the program was launched. # If you specify an invalid mode, rEFInd pauses during boot to inform # you of valid modes. # CAUTION: On VirtualBox, and perhaps on some real computers, specifying # a text mode and uncommenting the "textonly" option while NOT specifying # a resolution can result in an unusable display in the booted OS. # Default is 1024 (no change) # #textmode 2 # Set the screen's video resolution. Pass this option either: # * two values, corresponding to the X and Y resolutions # * one value, corresponding to a GOP (UEFI) video mode # Note that not all resolutions are supported. On UEFI systems, passing # an incorrect value results in a message being shown on the screen to # that effect, along with a list of supported modes. On EFI 1.x systems # (e.g., Macintoshes), setting an incorrect mode silently fails. On both # types of systems, setting an incorrect resolution results in the default # resolution being used. A resolution of 1024x768 usually works, but higher # values often don't. # Default is "0 0" (use the system default resolution, usually 800x600). # #resolution 1024 768 #resolution 1440 900 #resolution 3 # Launch specified OSes in graphics mode. By default, rEFInd switches # to text mode and displays basic pre-launch information when launching # all OSes except OS X. Using graphics mode can produce a more seamless # transition, but displays no information, which can make matters # difficult if you must debug a problem. Also, on at least one known # computer, using graphics mode prevents a crash when using the Linux # kernel's EFI stub loader. You can specify an empty list to boot all # OSes in text mode. # Valid options: # osx - Mac OS X # linux - A Linux kernel with EFI stub loader # elilo - The ELILO boot loader # grub - The GRUB (Legacy or 2) boot loader # windows - Microsoft Windows # Default value: osx # #use_graphics_for osx,linux # Which non-bootloader tools to show on the tools line, and in what # order to display them: # shell - the EFI shell (requires external program; see rEFInd # documentation for details) # memtest - the memtest86 program, in EFI/tools, EFI/memtest86, # EFI/memtest, EFI/tools/memtest86, or EFI/tools/memtest # gptsync - the (dangerous) gptsync.efi utility (requires external # program; see rEFInd documentation for details) # gdisk - the gdisk partitioning program # apple_recovery - boots the Apple Recovery HD partition, if present # windows_recovery - boots an OEM Windows recovery tool, if present # (see also the windows_recovery_files option) # mok_tool - makes available the Machine Owner Key (MOK) maintenance # tool, MokManager.efi, used on Secure Boot systems # about - an "about this program" option # exit - a tag to exit from rEFInd # shutdown - shuts down the computer (a bug causes this to reboot # many UEFI systems) # reboot - a tag to reboot the computer # firmware - a tag to reboot the computer into the firmware's # user interface (ignored on older computers) # netboot - launch the ipxe.efi tool for network (PXE) booting # Default is shell,memtest,gdisk,apple_recovery,windows_recovery,mok_tool,about,shutdown,reboot,firmware # showtools shell, gdisk, memtest, mok_tool, about, reboot, exit, firmware # Boot loaders that can launch a Windows restore or emergency system. # These tend to be OEM-specific. # Default is LRS_ESP:/EFI/Microsoft/Boot/LrsBootmgr.efi # windows_recovery_files LRS_ESP:/EFI/Microsoft/Boot/LrsBootmgr.efi # Directories in which to search for EFI drivers. These drivers can # provide filesystem support, give access to hard disks on plug-in # controllers, etc. In most cases none are needed, but if you add # EFI drivers and you want rEFInd to automatically load them, you # should specify one or more paths here. rEFInd always scans the # "drivers" and "drivers_{arch}" subdirectories of its own installation # directory (where "{arch}" is your architecture code); this option # specifies ADDITIONAL directories to scan. # Default is to scan no additional directories for EFI drivers # # scan_driver_dirs EFI/tools/drivers,drivers # Which types of boot loaders to search, and in what order to display them: # internal - internal EFI disk-based boot loaders # external - external EFI disk-based boot loaders # optical - EFI optical discs (CD, DVD, etc.) # netboot - EFI network (PXE) boot options # hdbios - BIOS disk-based boot loaders # biosexternal - BIOS external boot loaders (USB, eSATA, etc.) # cd - BIOS optical-disc boot loaders # manual - use stanzas later in this configuration file # Note that the legacy BIOS options require firmware support, which is # not present on all computers. # The netboot option is experimental and relies on the ipxe.efi and # ipxe_discover.efi program files. # On UEFI PCs, default is internal,external,optical,manual # On Macs, default is internal,hdbios,external,biosexternal,optical,cd,manual # #scanfor internal,external,optical,netboot,cd,biosexternal,hdbios scanfor manual # scanfor manual # By default, rEFInd relies on the UEFI firmware to detect BIOS-mode boot # devices. This sometimes doesn't detect all the available devices, though. # For these cases, uefi_deep_legacy_scan results in a forced scan and # modification of NVRAM variables on each boot. Adding "0", "off", or # "false" resets to the default value. This token has no effect on Macs or # when no BIOS-mode options are set via scanfor. # Default is unset (or "uefi_deep_legacy_scan false") # # uefi_deep_legacy_scan 1 # Delay for the specified number of seconds before scanning disks. # This can help some users who find that some of their disks # (usually external or optical discs) aren't detected initially, # but are detected after pressing Esc. # The default is 0. # scan_delay 0 # When scanning volumes for EFI boot loaders, rEFInd always looks for # Mac OS X's and Microsoft Windows' boot loaders in their normal locations, # and scans the root directory and every subdirectory of the /EFI directory # for additional boot loaders, but it doesn't recurse into these directories. # The also_scan_dirs token adds more directories to the scan list. # Directories are specified relative to the volume's root directory. This # option applies to ALL the volumes that rEFInd scans UNLESS you include # a volume name and colon before the directory name, as in "myvol:/somedir" # to scan the somedir directory only on the filesystem named myvol. If a # specified directory doesn't exist, it's ignored (no error condition # results). The default is to scan the "boot" directory in addition to # various hard-coded directories. # # also_scan_dirs boot,ESP2:EFI/linux/kernels # Partitions (or whole disks, for legacy-mode boots) to omit from scans. # For EFI-mode scans, you must specify a volume by its label, which you # can obtain in an EFI shell by typing "vol", from Linux by typing # "blkid /dev/{devicename}", or by examining the disk's label in various # OSes' file browsers. # For legacy-mode scans, you can specify any subset of the boot loader # description shown when you highlight the option in rEFInd. # The default is "LRS_ESP". # #dont_scan_volumes "Recovery HD" # Directories that should NOT be scanned for boot loaders. By default, # rEFInd doesn't scan its own directory, the EFI/tools directory, the # EFI/memtest directory, the EFI/memtest86 directory, or the # com.apple.recovery.boot directory. Using the dont_scan_dirs option # enables you to "blacklist" other directories; but be sure to use "+" # as the first element if you want to continue blacklisting existing # directories. You might use this token to keep EFI/boot/bootx64.efi out # of the menu if that's a duplicate of another boot loader or to exclude # a directory that holds drivers or non-bootloader utilities provided by # a hardware manufacturer. If a directory is listed both here and in # also_scan_dirs, dont_scan_dirs takes precedence. Note that this # blacklist applies to ALL the filesystems that rEFInd scans, not just # the ESP, unless you precede the directory name by a filesystem name, # as in "myvol:EFI/somedir" to exclude EFI/somedir from the scan on the # myvol volume but not on other volumes. # #dont_scan_dirs ESP:/EFI/boot,EFI/Dell,EFI/memtest86 # Files that should NOT be included as EFI boot loaders (on the # first line of the display). If you're using a boot loader that # relies on support programs or drivers that are installed alongside # the main binary or if you want to "blacklist" certain loaders by # name rather than location, use this option. Note that this will # NOT prevent certain binaries from showing up in the second-row # set of tools. Most notably, various Secure Boot and recovery # tools are present in this list, but may appear as second-row # items. # The file may be specified as a bare name (e.g., "notme.efi"), as # a complete filename (e.g., "/EFI/somedir/notme.efi"), or as a # complete filename with volume (e.g., "SOMEDISK:/EFI/somedir/notme.efi"). # The default is shim.efi,shim-fedora.efi,shimx64.efi,PreLoader.efi, # TextMode.efi,ebounce.efi,GraphicsConsole.efi,MokManager.efi,HashTool.efi, # HashTool-signed.efi,bootmgr.efi # #dont_scan_files shim.efi,MokManager.efi # Scan for Linux kernels that lack a ".efi" filename extension. This is # useful for better integration with Linux distributions that provide # kernels with EFI stub loaders but that don't give those kernels filenames # that end in ".efi", particularly if the kernels are stored on a # filesystem that the EFI can read. When set to "1", "true", or "on", this # option causes all files in scanned directories with names that begin with # "vmlinuz" or "bzImage" to be included as loaders, even if they lack ".efi" # extensions. Passing this option a "0", "false", or "off" value causes # kernels without ".efi" extensions to NOT be scanned. # Default is "true" -- to scan for kernels without ".efi" extensions. # #scan_all_linux_kernels false # Combine all Linux kernels in a given directory into a single entry. # When so set, the kernel with the most recent time stamp will be launched # by default, and its filename will appear in the entry's description. # To launch other kernels, the user must press F2 or Insert; alternate # kernels then appear as options on the sub-menu. # Default is "true" -- kernels are "folded" into a single menu entry. # #fold_linux_kernels false # Set the maximum number of tags that can be displayed on the screen at # any time. If more loaders are discovered than this value, rEFInd shows # a subset in a scrolling list. If this value is set too high for the # screen to handle, it's reduced to the value that the screen can manage. # If this value is set to 0 (the default), it's adjusted to the number # that the screen can handle. # #max_tags 0 # Set the default menu selection. The available arguments match the # keyboard accelerators available within rEFInd. You may select the # default loader using: # - A digit between 1 and 9, in which case the Nth loader in the menu # will be the default. # - A "+" symbol at the start of the string, which refers to the most # recently booted loader. # - Any substring that corresponds to a portion of the loader's title # (usually the OS's name, boot loader's path, or a volume or # filesystem title). # You may also specify multiple selectors by separating them with commas # and enclosing the list in quotes. (The "+" option is only meaningful in # this context.) # If you follow the selector(s) with two times, in 24-hour format, the # default will apply only between those times. The times are in the # motherboard's time standard, whether that's UTC or local time, so if # you use UTC, you'll need to adjust this from local time manually. # Times may span midnight as in "23:30 00:30", which applies to 11:30 PM # to 12:30 AM. You may specify multiple default_selection lines, in which # case the last one to match takes precedence. Thus, you can set a main # option without a time followed by one or more that include times to # set different defaults for different times of day. # The default behavior is to boot the previously-booted OS. # #default_selection 1 #default_selection Microsoft #default_selection "+,bzImage,vmlinuz" #default_selection Maintenance 23:30 2:00 #default_selection "Maintenance,OS X" 1:00 2:30 #default_selection "Default Boot Entry" default_selection 1 # Enable VMX bit and lock the CPU MSR if unlocked. # On some Intel Apple computers, the firmware does not lock the MSR 0x3A. # The symptom on Windows is Hyper-V not working even if the CPU # meets the minimum requirements (HW assisted virtualization and SLAT) # DO NOT SET THIS EXCEPT ON INTEL CPUs THAT SUPPORT VMX! See # http://www.thomas-krenn.com/en/wiki/Activating_the_Intel_VT_Virtualization_Feature! # for more on this subject. # The default is false: Don't try to enable and lock the MSR. # #enable_and_lock_vmx false # Include a secondary configuration file within this one. This secondary # file is loaded as if its options appeared at the point of the "include" # token itself, so if you want to override a setting in the main file, # the secondary file must be referenced AFTER the setting you want to # override. Note that the secondary file may NOT load a tertiary file. # #include manual.conf # Sample manual configuration stanzas. Each begins with the "menuentry" # keyword followed by a name that's to appear in the menu (use quotes # if you want the name to contain a space) and an open curly brace # ("{"). Each entry ends with a close curly brace ("}"). Common # keywords within each stanza include: # # volume - identifies the filesystem from which subsequent files # are loaded. You can specify the volume by filesystem # label, by partition label, or by partition GUID number # (but NOT yet by filesystem UUID number). # loader - identifies the boot loader file # initrd - Specifies an initial RAM disk file # icon - specifies a custom boot loader icon # ostype - OS type code to determine boot options available by # pressing Insert. Valid values are "MacOS", "Linux", # "Windows", and "XOM". Case-sensitive. # graphics - set to "on" to enable graphics-mode boot (useful # mainly for MacOS) or "off" for text-mode boot. # Default is auto-detected from loader filename. # options - sets options to be passed to the boot loader; use # quotes if more than one option should be passed or # if any options use characters that might be changed # by rEFInd parsing procedures (=, /, #, or tab). # disabled - use alone or set to "yes" to disable this entry. # # Note that you can use either DOS/Windows/EFI-style backslashes (\) # or Unix-style forward slashes (/) as directory separators. Either # way, all file references are on the ESP from which rEFInd was # launched. # Use of quotes around parameters causes them to be interpreted as # one keyword, and for parsing of special characters (spaces, =, /, # and #) to be disabled. This is useful mainly with the "options" # keyword. Use of quotes around parameters that specify filenames is # permissible, but you must then use backslashes instead of slashes, # except when you must pass a forward slash to the loader, as when # passing a root= option to a Linux kernel. # A minimal entry, which loads the default EFI bootloader. #menuentry "Default Boot Entry" { # volume C12A7328-F81F-11D2-BA4B-00A0C93EC93B # loader \EFI\Boot\bootx64.efi # loader ESP:EFI/ubuntu/grubx64.efi #} # menuentry "find refind" { # loader \EFI\tools\shell.efi # options "fs0:\EFI\boot\bootmgfw.efi" # enabled # } menuentry "windows" { volume SYSTEM loader \EFI\Microsoft\Boot\bootmgfw.efi enabled }
Why this works - the volume tells refind which volume to use, which it seems to have trouble with on these hp devices, possibly due to the HP added efi directories or something with secure boot or whatever, I don’t really know. I do know that referencing the refind documentation on manual entries (found here http://www.rodsbooks.com/refind/configfile.html#stanzas) I found that a volume can be specified. Then using the bios boot to file option on the hp boot options I noticed that the default label given to the EFI volume is SYSTEM which should also be true on imaged devices (unless you are customizing the system partition names for some reason). Then also browsing in that boot to file menu (or via an efi shell, or via mounting the system drive on windows via
mountvol /S S:
) you can find that the bootmgfw.efi (I think that stands for boot manager from firmware but I don’t know for sure) is located at SYSTEM\EFI\Microsoft\Boot\bootmgfw.efiI literally just figured this out before coming to write it, so there may be more testing to do to find a more universal solution.
For example, maybe there’s another way to define volume that gets the efi partition more universally such as specifying:0
instead of SYSTEM, but that might be foiled when a usb or disc is in the system as the EFI shell fs numbering isn’t static.
There are also other .EFI bootfiles in the EFI drive.
Things likeEFI\Boot\bootx64.efi
which may be a little more universal as I’ve seen it as the boot path for linux os’s too. If we can figure out a way to define the volume as something that is always the efi partition for all os’s that would be amazeballs.–
Also, a clarifying note, adding the local version of ReFind to my images wasn’t exactly my solution to this, it’s just a cool thing I did that happened to make it so I didn’t need to pxe boot to boot to fog anymore. Just in case you’re curious, here’s the powershell function I use to do that in my imagePrep
function Set-BootMgr { [CmdletBinding()] param ( [string]$refindsrc = 'C:\img\refind-flashdrive-0.11.0\EFI', [string]$description = '"rEFInd boot manager"', [string]$mountLtr = 'S:', [string]$refindDst = "$mountLtr\EFI", [string]$refindBootPth = '\EFI\Boot\refindx64.efi', [string]$winSys = 'C:\Windows\System32', [string]$mountVol = "$winSys\mountvol.exe", [string]$bcdedit = "$winSys\bcdedit.exe", [string]$xcopy = "$winSys\xcopy.exe", [string]$setBoot = '/set "{bootmgr}"', [string[]]$setBootPth = @($setBoot, "path $refindBootPth"), [string[]]$setBootDescr = @($setBoot,"description $description") ) begin { Write-Verbose "Setting up the bootmgr to use rEFInd..."; Write-Verbose 'downloading latest version of ipxe.efi file'; Invoke-WebRequest -Uri "http://fog-server/ipxe.efi" -OutFile "$refindsrc\ipxe-latest.efi"; Write-Verbose "mounting efi partition and copying efi files..."; Start-Process -FilePath $mountVol -Wait -NoNewWindow -ArgumentList @($mountLtr, '/S'); Start-Process -FilePath $xcopy -Wait -NoNewWindow -ArgumentList @('/E','/Y',$refindsrc,$refindDst); } process { Write-Verbose 'Configuring bootmgr with bcdedit...'; Start-Process -FilePath $bcdedit -Wait -NoNewWindow -ArgumentList $setBootPth; Start-Process -FilePath $bcdedit -Wait -NoNewWindow -ArgumentList $setBootDescr; } end { Write-Verbose 'Refind is now the bootmgr'; } }
Note: The source files param is defaulted to where I copy the refind source files.I just download the usb version from http://www.rodsbooks.com/refind/getting.html and extract the .img file with 7zip to get the EFI directory with everything you need to boot refind.
Note: To make the ipxe.efi file downloadable I make a symlink to it in the fog server at the root of the html folder
i.e.ln -s /tftpboot/ipxe.efi /var/www/html/ipxe.efi
also the LOCAL refind.conf file I have currently looks like this
# # refind.conf # Configuration file for the rEFInd boot menu # timeout 3 showtools shell,memtest,gdisk,apple_recovery,csr_rotate,windows_recovery,mok_tool,about,shutdown,reboot,firmware,netboot scanfor internal,external,optical,manual,netboot #default selection based on time of day to allow for automated overnight image tasks default_selection 1 07:01 18:59 default_selection "Fog" 19:00 07:00 csr_values 10,77 menuentry "Fog" { icon \EFI\boot\icons\fog.png loader \EFI\ipxe-latest.efi enabled }
- Comment out the
-
@jj-fullmer TL;DR
edit the fogserver refind.conf file to only use a manually defined boot option. Which is done by making the refind.conf file at/var/www/fog/service/ipxe/refind.conf
look like this# # refind.conf # Configuration file for the rEFInd boot menu # # Timeout in seconds for the main menu screen. Setting the timeout to 0 # disables automatic booting (i.e., no timeout). Setting it to -1 causes # an immediate boot to the default OS *UNLESS* a keypress is in the buffer # when rEFInd launches, in which case that keypress is interpreted as a # shortcut key. If no matching shortcut is found, rEFInd displays its # menu with no timeout. # timeout 3 # Screen saver timeout; the screen blanks after the specified number of # seconds with no keyboard input. The screen returns after most keypresses # (unfortunately, not including modifier keys such as Shift, Control, Alt, # or Option). Setting a value of "-1" causes rEFInd to start up with its # screen saver active. The default is 0, which disables the screen saver. #screensaver 300 # Hide user interface elements for personal preference or to increase # security: # banner - the rEFInd title banner (built-in or loaded via "banner") # label - boot option text label in the menu # singleuser - remove the submenu options to boot Mac OS X in single-user # or verbose modes; affects ONLY MacOS X # safemode - remove the submenu option to boot Mac OS X in "safe mode" # hwtest - the submenu option to run Apple's hardware test # arrows - scroll arrows on the OS selection tag line # hints - brief command summary in the menu # editor - the options editor (+, F2, or Insert on boot options menu) # badges - device-type badges for boot options # all - all of the above # Default is none of these (all elements active) # #hideui singleuser #hideui all # Set the name of a subdirectory in which icons are stored. Icons must # have the same names they have in the standard directory. The directory # name is specified relative to the main rEFInd binary's directory. If # an icon can't be found in the specified directory, an attempt is made # to load it from the default directory; thus, you can replace just some # icons in your own directory and rely on the default for others. # Default is "icons". # #icons_dir myicons # Use a custom title banner instead of the rEFInd icon and name. The file # path is relative to the directory where refind.efi is located. The color # in the top left corner of the image is used as the background color # for the menu screens. Currently uncompressed BMP images with color # depths of 24, 8, 4 or 1 bits are supported, as well as PNG images. # #banner hostname.bmp #banner mybanner.png # Specify how to handle banners that aren't exactly the same as the screen # size: # noscale - Crop if too big, show with border if too small # fillscreen - Fill the screen # Default is noscale # #banner_scale fillscreen # Icon sizes. All icons are square, so just one value is specified. The # big icons are used for OS selectors in the first row and the small # icons are used for tools on the second row. Drive-type badges are 1/4 # the size of the big icons. Legal values are 32 and above. If the icon # files do not hold icons of the proper size, the icons are scaled to # the specified size. The default values are 48 and 128 for small and # big icons, respectively. # #small_icon_size 96 #big_icon_size 256 # Custom images for the selection background. There is a big one (144 x 144) # for the OS icons, and a small one (64 x 64) for the function icons in the # second row. If only a small image is given, that one is also used for # the big icons by stretching it in the middle. If only a big one is given, # the built-in default will be used for the small icons. # # Like the banner option above, these options take a filename of an # uncompressed BMP image file with a color depth of 24, 8, 4, or 1 bits, # or a PNG image. The PNG format is required if you need transparency # support (to let you "see through" to a full-screen banner). # #selection_big selection-big.bmp #selection_small selection-small.bmp # Set the font to be used for all textual displays in graphics mode. # The font must be a PNG file with alpha channel transparency. It must # contain ASCII characters 32-126 (space through tilde), inclusive, plus # a glyph to be displayed in place of characters outside of this range, # for a total of 96 glyphs. Only monospaced fonts are supported. Fonts # may be of any size, although large fonts can produce display # irregularities. # The default is rEFInd's built-in font, Luxi Mono Regular 12 point. # #font myfont.png # Use text mode only. When enabled, this option forces rEFInd into text mode. # Passing this option a "0" value causes graphics mode to be used. Pasing # it no value or any non-0 value causes text mode to be used. # Default is to use graphics mode. # textonly # Set the EFI text mode to be used for textual displays. This option # takes a single digit that refers to a mode number. Mode 0 is normally # 80x25, 1 is sometimes 80x50, and higher numbers are system-specific # modes. Mode 1024 is a special code that tells rEFInd to not set the # text mode; it uses whatever was in use when the program was launched. # If you specify an invalid mode, rEFInd pauses during boot to inform # you of valid modes. # CAUTION: On VirtualBox, and perhaps on some real computers, specifying # a text mode and uncommenting the "textonly" option while NOT specifying # a resolution can result in an unusable display in the booted OS. # Default is 1024 (no change) # #textmode 2 # Set the screen's video resolution. Pass this option either: # * two values, corresponding to the X and Y resolutions # * one value, corresponding to a GOP (UEFI) video mode # Note that not all resolutions are supported. On UEFI systems, passing # an incorrect value results in a message being shown on the screen to # that effect, along with a list of supported modes. On EFI 1.x systems # (e.g., Macintoshes), setting an incorrect mode silently fails. On both # types of systems, setting an incorrect resolution results in the default # resolution being used. A resolution of 1024x768 usually works, but higher # values often don't. # Default is "0 0" (use the system default resolution, usually 800x600). # #resolution 1024 768 #resolution 1440 900 #resolution 3 # Launch specified OSes in graphics mode. By default, rEFInd switches # to text mode and displays basic pre-launch information when launching # all OSes except OS X. Using graphics mode can produce a more seamless # transition, but displays no information, which can make matters # difficult if you must debug a problem. Also, on at least one known # computer, using graphics mode prevents a crash when using the Linux # kernel's EFI stub loader. You can specify an empty list to boot all # OSes in text mode. # Valid options: # osx - Mac OS X # linux - A Linux kernel with EFI stub loader # elilo - The ELILO boot loader # grub - The GRUB (Legacy or 2) boot loader # windows - Microsoft Windows # Default value: osx # #use_graphics_for osx,linux # Which non-bootloader tools to show on the tools line, and in what # order to display them: # shell - the EFI shell (requires external program; see rEFInd # documentation for details) # memtest - the memtest86 program, in EFI/tools, EFI/memtest86, # EFI/memtest, EFI/tools/memtest86, or EFI/tools/memtest # gptsync - the (dangerous) gptsync.efi utility (requires external # program; see rEFInd documentation for details) # gdisk - the gdisk partitioning program # apple_recovery - boots the Apple Recovery HD partition, if present # windows_recovery - boots an OEM Windows recovery tool, if present # (see also the windows_recovery_files option) # mok_tool - makes available the Machine Owner Key (MOK) maintenance # tool, MokManager.efi, used on Secure Boot systems # about - an "about this program" option # exit - a tag to exit from rEFInd # shutdown - shuts down the computer (a bug causes this to reboot # many UEFI systems) # reboot - a tag to reboot the computer # firmware - a tag to reboot the computer into the firmware's # user interface (ignored on older computers) # netboot - launch the ipxe.efi tool for network (PXE) booting # Default is shell,memtest,gdisk,apple_recovery,windows_recovery,mok_tool,about,shutdown,reboot,firmware # showtools shell, gdisk, memtest, mok_tool, about, reboot, exit, firmware # Boot loaders that can launch a Windows restore or emergency system. # These tend to be OEM-specific. # Default is LRS_ESP:/EFI/Microsoft/Boot/LrsBootmgr.efi # windows_recovery_files LRS_ESP:/EFI/Microsoft/Boot/LrsBootmgr.efi # Directories in which to search for EFI drivers. These drivers can # provide filesystem support, give access to hard disks on plug-in # controllers, etc. In most cases none are needed, but if you add # EFI drivers and you want rEFInd to automatically load them, you # should specify one or more paths here. rEFInd always scans the # "drivers" and "drivers_{arch}" subdirectories of its own installation # directory (where "{arch}" is your architecture code); this option # specifies ADDITIONAL directories to scan. # Default is to scan no additional directories for EFI drivers # # scan_driver_dirs EFI/tools/drivers,drivers # Which types of boot loaders to search, and in what order to display them: # internal - internal EFI disk-based boot loaders # external - external EFI disk-based boot loaders # optical - EFI optical discs (CD, DVD, etc.) # netboot - EFI network (PXE) boot options # hdbios - BIOS disk-based boot loaders # biosexternal - BIOS external boot loaders (USB, eSATA, etc.) # cd - BIOS optical-disc boot loaders # manual - use stanzas later in this configuration file # Note that the legacy BIOS options require firmware support, which is # not present on all computers. # The netboot option is experimental and relies on the ipxe.efi and # ipxe_discover.efi program files. # On UEFI PCs, default is internal,external,optical,manual # On Macs, default is internal,hdbios,external,biosexternal,optical,cd,manual # #scanfor internal,external,optical,netboot,cd,biosexternal,hdbios scanfor manual # scanfor manual # By default, rEFInd relies on the UEFI firmware to detect BIOS-mode boot # devices. This sometimes doesn't detect all the available devices, though. # For these cases, uefi_deep_legacy_scan results in a forced scan and # modification of NVRAM variables on each boot. Adding "0", "off", or # "false" resets to the default value. This token has no effect on Macs or # when no BIOS-mode options are set via scanfor. # Default is unset (or "uefi_deep_legacy_scan false") # # uefi_deep_legacy_scan 1 # Delay for the specified number of seconds before scanning disks. # This can help some users who find that some of their disks # (usually external or optical discs) aren't detected initially, # but are detected after pressing Esc. # The default is 0. # scan_delay 0 # When scanning volumes for EFI boot loaders, rEFInd always looks for # Mac OS X's and Microsoft Windows' boot loaders in their normal locations, # and scans the root directory and every subdirectory of the /EFI directory # for additional boot loaders, but it doesn't recurse into these directories. # The also_scan_dirs token adds more directories to the scan list. # Directories are specified relative to the volume's root directory. This # option applies to ALL the volumes that rEFInd scans UNLESS you include # a volume name and colon before the directory name, as in "myvol:/somedir" # to scan the somedir directory only on the filesystem named myvol. If a # specified directory doesn't exist, it's ignored (no error condition # results). The default is to scan the "boot" directory in addition to # various hard-coded directories. # # also_scan_dirs boot,ESP2:EFI/linux/kernels # Partitions (or whole disks, for legacy-mode boots) to omit from scans. # For EFI-mode scans, you must specify a volume by its label, which you # can obtain in an EFI shell by typing "vol", from Linux by typing # "blkid /dev/{devicename}", or by examining the disk's label in various # OSes' file browsers. # For legacy-mode scans, you can specify any subset of the boot loader # description shown when you highlight the option in rEFInd. # The default is "LRS_ESP". # #dont_scan_volumes "Recovery HD" # Directories that should NOT be scanned for boot loaders. By default, # rEFInd doesn't scan its own directory, the EFI/tools directory, the # EFI/memtest directory, the EFI/memtest86 directory, or the # com.apple.recovery.boot directory. Using the dont_scan_dirs option # enables you to "blacklist" other directories; but be sure to use "+" # as the first element if you want to continue blacklisting existing # directories. You might use this token to keep EFI/boot/bootx64.efi out # of the menu if that's a duplicate of another boot loader or to exclude # a directory that holds drivers or non-bootloader utilities provided by # a hardware manufacturer. If a directory is listed both here and in # also_scan_dirs, dont_scan_dirs takes precedence. Note that this # blacklist applies to ALL the filesystems that rEFInd scans, not just # the ESP, unless you precede the directory name by a filesystem name, # as in "myvol:EFI/somedir" to exclude EFI/somedir from the scan on the # myvol volume but not on other volumes. # #dont_scan_dirs ESP:/EFI/boot,EFI/Dell,EFI/memtest86 # Files that should NOT be included as EFI boot loaders (on the # first line of the display). If you're using a boot loader that # relies on support programs or drivers that are installed alongside # the main binary or if you want to "blacklist" certain loaders by # name rather than location, use this option. Note that this will # NOT prevent certain binaries from showing up in the second-row # set of tools. Most notably, various Secure Boot and recovery # tools are present in this list, but may appear as second-row # items. # The file may be specified as a bare name (e.g., "notme.efi"), as # a complete filename (e.g., "/EFI/somedir/notme.efi"), or as a # complete filename with volume (e.g., "SOMEDISK:/EFI/somedir/notme.efi"). # The default is shim.efi,shim-fedora.efi,shimx64.efi,PreLoader.efi, # TextMode.efi,ebounce.efi,GraphicsConsole.efi,MokManager.efi,HashTool.efi, # HashTool-signed.efi,bootmgr.efi # #dont_scan_files shim.efi,MokManager.efi # Scan for Linux kernels that lack a ".efi" filename extension. This is # useful for better integration with Linux distributions that provide # kernels with EFI stub loaders but that don't give those kernels filenames # that end in ".efi", particularly if the kernels are stored on a # filesystem that the EFI can read. When set to "1", "true", or "on", this # option causes all files in scanned directories with names that begin with # "vmlinuz" or "bzImage" to be included as loaders, even if they lack ".efi" # extensions. Passing this option a "0", "false", or "off" value causes # kernels without ".efi" extensions to NOT be scanned. # Default is "true" -- to scan for kernels without ".efi" extensions. # #scan_all_linux_kernels false # Combine all Linux kernels in a given directory into a single entry. # When so set, the kernel with the most recent time stamp will be launched # by default, and its filename will appear in the entry's description. # To launch other kernels, the user must press F2 or Insert; alternate # kernels then appear as options on the sub-menu. # Default is "true" -- kernels are "folded" into a single menu entry. # #fold_linux_kernels false # Set the maximum number of tags that can be displayed on the screen at # any time. If more loaders are discovered than this value, rEFInd shows # a subset in a scrolling list. If this value is set too high for the # screen to handle, it's reduced to the value that the screen can manage. # If this value is set to 0 (the default), it's adjusted to the number # that the screen can handle. # #max_tags 0 # Set the default menu selection. The available arguments match the # keyboard accelerators available within rEFInd. You may select the # default loader using: # - A digit between 1 and 9, in which case the Nth loader in the menu # will be the default. # - A "+" symbol at the start of the string, which refers to the most # recently booted loader. # - Any substring that corresponds to a portion of the loader's title # (usually the OS's name, boot loader's path, or a volume or # filesystem title). # You may also specify multiple selectors by separating them with commas # and enclosing the list in quotes. (The "+" option is only meaningful in # this context.) # If you follow the selector(s) with two times, in 24-hour format, the # default will apply only between those times. The times are in the # motherboard's time standard, whether that's UTC or local time, so if # you use UTC, you'll need to adjust this from local time manually. # Times may span midnight as in "23:30 00:30", which applies to 11:30 PM # to 12:30 AM. You may specify multiple default_selection lines, in which # case the last one to match takes precedence. Thus, you can set a main # option without a time followed by one or more that include times to # set different defaults for different times of day. # The default behavior is to boot the previously-booted OS. # #default_selection 1 #default_selection Microsoft #default_selection "+,bzImage,vmlinuz" #default_selection Maintenance 23:30 2:00 #default_selection "Maintenance,OS X" 1:00 2:30 #default_selection "Default Boot Entry" default_selection 1 # Enable VMX bit and lock the CPU MSR if unlocked. # On some Intel Apple computers, the firmware does not lock the MSR 0x3A. # The symptom on Windows is Hyper-V not working even if the CPU # meets the minimum requirements (HW assisted virtualization and SLAT) # DO NOT SET THIS EXCEPT ON INTEL CPUs THAT SUPPORT VMX! See # http://www.thomas-krenn.com/en/wiki/Activating_the_Intel_VT_Virtualization_Feature! # for more on this subject. # The default is false: Don't try to enable and lock the MSR. # #enable_and_lock_vmx false # Include a secondary configuration file within this one. This secondary # file is loaded as if its options appeared at the point of the "include" # token itself, so if you want to override a setting in the main file, # the secondary file must be referenced AFTER the setting you want to # override. Note that the secondary file may NOT load a tertiary file. # #include manual.conf # Sample manual configuration stanzas. Each begins with the "menuentry" # keyword followed by a name that's to appear in the menu (use quotes # if you want the name to contain a space) and an open curly brace # ("{"). Each entry ends with a close curly brace ("}"). Common # keywords within each stanza include: # # volume - identifies the filesystem from which subsequent files # are loaded. You can specify the volume by filesystem # label, by partition label, or by partition GUID number # (but NOT yet by filesystem UUID number). # loader - identifies the boot loader file # initrd - Specifies an initial RAM disk file # icon - specifies a custom boot loader icon # ostype - OS type code to determine boot options available by # pressing Insert. Valid values are "MacOS", "Linux", # "Windows", and "XOM". Case-sensitive. # graphics - set to "on" to enable graphics-mode boot (useful # mainly for MacOS) or "off" for text-mode boot. # Default is auto-detected from loader filename. # options - sets options to be passed to the boot loader; use # quotes if more than one option should be passed or # if any options use characters that might be changed # by rEFInd parsing procedures (=, /, #, or tab). # disabled - use alone or set to "yes" to disable this entry. # # Note that you can use either DOS/Windows/EFI-style backslashes (\) # or Unix-style forward slashes (/) as directory separators. Either # way, all file references are on the ESP from which rEFInd was # launched. # Use of quotes around parameters causes them to be interpreted as # one keyword, and for parsing of special characters (spaces, =, /, # and #) to be disabled. This is useful mainly with the "options" # keyword. Use of quotes around parameters that specify filenames is # permissible, but you must then use backslashes instead of slashes, # except when you must pass a forward slash to the loader, as when # passing a root= option to a Linux kernel. # A minimal entry, which loads the default EFI bootloader. #menuentry "Default Boot Entry" { # volume C12A7328-F81F-11D2-BA4B-00A0C93EC93B # loader \EFI\Boot\bootx64.efi # loader ESP:EFI/ubuntu/grubx64.efi #} # menuentry "find refind" { # loader \EFI\tools\shell.efi # options "fs0:\EFI\boot\bootmgfw.efi" # enabled # } menuentry "windows" { volume SYSTEM loader \EFI\Microsoft\Boot\bootmgfw.efi enabled }
-
@jj-fullmer We tried to make the recommended changes to the refind.conf file and have tried several paths based on the navigation we used through the BIOS side to the .efi file and all results have come back with it not being able to find anything. Tried both: \EFI\Microsoft\Boot\bootmgfw.efi and \EFI\boot\bootx64.efi
-
@quinniedid I’m actually getting the same thing now too. I promise it was working, it was a thing
-
@quinniedid
I just changed mine tomenuentry "windows" { Volume SYSTEM loader \EFI\Boot\bootx64.efi enabled }
And it was working. However my local refind suddenly stopped working. Which is pretty confusing considering nothing was changed and it worked before. Maybe there was something in a recent windows update that somehow affected this? It’s a bit of a stretch though. I’ll keep testing things.
-
@quinniedid Scratch that, it worked once then it failed the second time. This is really odd. Maybe there is a new feature in HP uefi settings that is conflicting with refind. Gonna toy with it for a bit.
-
@jj-fullmer Reading over the docs, Volume uses the filesystem label.
Isn’t this label typically “System Reserved” (on English Windows installations)?
It also mentions it’s nominally case insensitive, but can be case sensitive on certain UEFI implementations.
It appears you can also you use the filesystem number, so you could do
Volume 0:
presumably, however it seems that this is based on the boot order in UEFI and may be subject to change on subsequent reboots and so isn’t likely to be reliable. -
@quazz Where did you read the numbering labels are based on bios boot orders? If that is indeed the case one can control boot order to some extent and that would work. You would just want to make sure usb and disc options were always lower on the list, maybe even disabled and just utilize refind to boot to them.
-
The funny part is that the point of refind is that it’s supposed to scan all the volumes for you to solve this very problem. So something is very weird here.
-
@jj-fullmer https://www.rodsbooks.com/refind/configfile.html
Sets the volume that's used for subsequent file accesses (by icon and loader, and by implication by initrd if loader follows volume). You pass this token a filesystem's label, a partition's label, a partition's GUID, or a volume number. A filesystem or partition label is typically displayed under the volume's icon in file managers and rEFInd displays it on its menu at the end of the boot prompt string. If this label isn't unique, the first volume with the specified label is used. The matching is nominally case-insensitive, but on some EFIs it's case-sensitive. If a filesystem has no label, you can use a partition GUID number. You can also use a volume number followed by a colon, such as 0: to refer to the first filesystem or 1: to refer to the second. The assignment of numbers is arbitrary and may not be consistent across boots, though. It might change if you insert an optical disc or plug in a USB flash drive, for instance. If this option is not set, the volume defaults to the one from which rEFInd launched.
It’s possible I read too much into it and assumed that the “aribtrary” part had to do with the boot order in BIOS, maybe it has more to do with how refind interprets it instead?