Enterprise

An EFI Linux Loader for UEFI PCs and Macs

Get Enterprise

Current Version: 0.4.0

Enterprise can be obtained from the official repository on GitHub. Click on the links below to be directed to the appropriate pages:

Stable:

There are currently no stable releases.

Unstable:

Version 0.4.0 (23 December 2016)

Version 0.3.2 (28 November 2015)

Version 0.3.1 (24 August 2015)

Version 0.3.0 (30 June 2015)

Version 0.2.1 (14 November 2014)

See All Releases on GitHub

Current Source on GitHub

Please note that obtaining Enterprise in this fashion means doing lots of setup work. If you simply want to create a bootable USB, please consider using Mac Linux USB Loader, which sets up Enterprise for you.

Enterprise logo banner

What Is Enterprise?

Travis Build Status

Enterprise (named after the Starship Enterprise from Star Trek) is an EFI program that is designed to assist in booting Linux distributions from USB sticks on UEFI-based PCs and Macs, something that is continously regarded as being near to impossible due to quirks in vendors' EFI implementations and really quite poor support from Linux distributions. Using Enterprise, you can create bootable USB drives that boot on a UEFI-based computer without needing rEFIt or rEFInd to be installed.

The program is quite unique. It is written in C, and can be compiled to run on both 32-bit and 64-bit EFI firmware types. Right now, all official downloads are for 64-bit EFI firmware architectures only. Be aware that certain 64-bit Macs have 32-bit EFI firmwares, and the supplied Enterprise binaries won't work on these platforms.

Enterprise was originally designed to compliment Mac Linux USB Loader, though it can also be used separately on any UEFI-based computer. The purpose of Enterprise is as the first stage in a two-stage booting process for Mac Linux USB Loader-created USB drives.

Please note that this page is oriented for technical users, such as hardware and/or software enthuasists, programmers, and people who like to hack their firmware. It is not intended for casual users - beware!

The Basics

Once upon a time, everything was happy in computer-land. Our PCs were booting, our memory sufficed, and the children were happy. But then Mr. Turing had to curse us with the <sarcasm> evil of technological progress <⁄sarcasm>, and eventually our nice, peaceful solutions didn't work anymore. All of a sudden, our multi-terabyte drives couldn't be booted from, and our old 16-bit BIOSes couldn't boot our cool, newfangled 64-bit multicore operating systems. Woe was us!

But our computer engineers, clever as they are, dug up an old, largely forgotten future-proof boot specification, UEFI. And from there, the rest is history.

Installation and Use

Enterprise is not really intended to be installed in the same manner as one would install a traditional bootloader like GRUB. Owing to its origins and nature, Enterprise is fairly easy to configure and doesn't require writing anything to the Master Boot Record of a hard drive, and it only consists of a few files which can be trivially copied in any sane operating system.

If you want to get the best performance from Enterprise and take advantage of any super cool stuff I add to it, you should download the source code, as the official repository includes a number of tools to assist in setup.

However, for beginners and casual users, you should begin by downloading the Enterprise binaries. You can do that at the pane to the left. Then you need to set up a configuration file on your USB drive named enterprise.cfg which tells Enterprise details about the distribution that you want to boot from your USB drive. Here's a sample file:

In order to function properly, Enterprise needs to know the location of the Linux kernel and the initial RAM disc inside of the ISO file. The configuration file gives this information to Enterprise, which then passes this information along to the boot loader when it is time to load the operating system.

The configuration file consists of a number of entrys, each of which defines a particular distribution or option which you want to have. At the very minimum, each entry should contain at least the family parameter. This tells Enterprise which distribution you are trying to boot and loads default options based on this. All of these default options can be overwritten. Currently, the options accepted by the family parameter are:

Distribution Family Default Values
Ubuntu kernel: /casper/vmlinuz
initrd: /casper/initrd.lz
Debian kernel: /live/vmlinuz
initrd: /live/initrd.img

Naturally, the kernel and initrd parameters can be altered by adding the respective line to the enterprise.cfg file. This is demonstrated above with the kernel parameter. You can pass a variety of additional options, including:

Parameter Name Effect
entry Used to mark the start of a new boot option. All future options will apply to the newly-created entry. There must be at least one entry in a file for it to be valid.
family Specifies the distribution family (e.g Ubuntu, Debian, etc) and sets the other options accordingly. This parameter is required if you do not want to specify any other options.
initrd Specifies, relative to the root of the ISO, the absolute path to the Linux initial RAM disc.
iso The path to the ISO that you wish to associate with this particular entry relative to the location of the Enterprise binary. If not specified, it defaults to boot.iso.
Warning: The behavior of this parameter may change in the future.
kernel Specifies, relative to the root of the ISO, the absolute path to the Linux kernel.
Note: It is possible to pass custom options to this kernel by specifying them after the path. See above for an example.
root Specifies the location of the kernel and initrd. Passed to the Linux kernel as boot=XXX, where XXX is the value of this parameter.

Have questions or comments? Feel free to contact me with any requests, etc.

Contributions

For those of you in the know, I code using a style called 1TBS - or, the one true brace style. I quite like it. So much so, in fact, that it's the required syntax style (just so things don't get messy). For those of you who are not familiar with it, it is best demonstrated with an example:

if (true) {
		bob();
} else {
		sam();
}

That should suffice for an explanation. Looking forward to seeing how everyone uses this!

Proudly made in America! The USA flag