Skip to content

Make an EFI bootable drive of Ubuntu

Newer computers are phasing out legacy boot options, so creating a bootable Ubuntu drive is now something of a nightmare =.=  It’s been a terrible journey, but I’ve got one working so here’s how I went about it.

  1. on a small USB stick create a Ubuntu installer
  2. Set up virtual box to run the installer USB stick from a VM and give it access to your USB drives
    (this is not necessary but will stop you from accidentally overwriting a hard drive)
  3. Plug in the USB you want to install Ubuntu on along with the Ubuntu installer USB
  4. Make sure to run the virtual machine in EFI mode, in virtual box this is under system>Enable EFI ( special OSes only)
  5. Start the VM, and choose the USB stick as your install location
  6. install normally – during the process you will need to partition the stick to have one partition to install Ubuntu (make that one really big)  and a second partition for the EFI booter, make that small like 500mb-1G
  7. and then you should have a bootable USB yay!!


Now, to try and match it to an existing VM you would

  1. Back it up with Ubuntu backup tool
  2. Transfer the backup files to the USB stick, and restore from there

There will be a lot of messed up stuff that’ll take hours to get back up and running, but this is the only way I’ve found where I can make a virtual box VM portable through EFI =.=  And restoring from a backup will at least save a lot of time vs starting from scratch.


And finally after you’ve gotten everything to where you want it, make a backup USB!

  1. Use disk clone in Mini Tool Partition wizard
  2. And if you get a
    EDAC pnd2: Failed to register device with error -22.
    error when trying to run it then one of your partitions were renamed in the process
  3. use “sudo blkid” to see all your partition UUIDs
  4. then edit “nano /etc/fstab” and fix the UUIDs as necessary


Sorry this article is a mess – I’ve gone back and forth from so many methods to try and make a bootable EFI drive that my notes are all over the place.  So this is more a general outline of how I made my bootable stick, but it should point you in the right direction.

Fix no wifi on linux mint for old HP laptop

My old HP laptop had a very old wifi card that wasn’t supported out of the box by linux mint, but I was able to install the necessary drivers with the following code

sudo apt update
sudo update-pciids
sudo apt install bcmwl-kernel-source 
sudo apt install broadcom-sta-dkms
sudo apt-get install broadcom-sta-dkms
"/cygdrive/p/Programs/VirtualBox/VboxManage.exe" clonehd 'F:/Documents/Virtualbox/2019 Mint/2019 Mint.vdi' 'F:/Documents/Virtualbox/2019_Mint.iso' --format RAW

SSH copy files

the first folder is the from directory, then the next is the

cp -R /share/Multimedia/Videos/ /share/USBDisk2/Backup-3_2019/Multimedia/

Then, fix the permissions:

chmod -R 777 /share/USBDisk2/-Backup-3_2019/

Picking ionic back up

If you’re on a fresh macOS install, you’ll need to first install the necessary components

  1. download NPM installer from their website
  2. sudo npm install -f @ionic/cli
  3. sudo npm i -g cordova
  4. sudo gem install cocoapods

OK, so it’s been a while and you have to pick back up from where you last left off with your ionic app. He’s how to go about that on Mac with Git.

  1. Pull from Git
  2. Run “npm install” to get all the modules
  3. Run “ionic cordova platform add ios”
  4. Run “ionic cordova prepare” to install plugins
  5. Run “sudo npm i –unsafe-perm -g cordova-res” and “ionic cordova resources” to generate splash and icons

If you need to redo your signing, you can follow these steps

  1. Select a development team
  2. If you invalid errors, make sure your system clock has the correct date

Hopefully that did the trick and you’re ready to go, I’ll add any errors and fixes I come across to the end of the article, but here’s how to go about testing.

Emulator testing:

  1. Just run ‘ ionic cordova emulate ios  -l — –buildFlag=”-UseModernBuildSystem=0″ ‘ to start it up in the emulator

Ad hoc Device testing:

  1. Open Xcode
  2. Open the iOS project, probably something like “~/Documents/app/platform/ios/App.xcworkspace”
  3. Login to developer account under Xcode>settings>accounts
  4. Select “Generic iOS Device” as device
  5. Choose Product->Build For->Testing
  6. Product->Archive
  7. Click the “Export…” button and choose Development and choose where to export the IPA
  8. Upload the IPA to, then install on device


To fix “‘xcodebuild’ requires Xcode” errors

  • Run Xcode from applications directory (make sure to drag and drop the application into the directory)
  • xcode-select –install # Install Command Line Tools if you haven’t already.
  • sudo xcode-select –switch /Library/Developer/CommandLineTools # Enable command line tools
  • sudo xcode-select -s /Applications/

Engintron and mirrors

This is pretty much the same thing as what I did in a previous post, but with Engintron vs NGINX CP.  I had to do a lot of server updates to get PHP7 running, and the process broke NGINX CP, so I had to switch to Engintron.  NGINX by itself is much more efficient than Apache, and thus far has been plenty to keep the server running even when traffic spikes.  But for special occasions I do like to have a back-up plan in case the system gets overloaded so I have a mirror set and ready to go.

To first install Engintron you can follow these instructions:

  1. cd /
  2. rm -f
  3. wget –no-check-certificate
  4. bash install

One thing I found out is caching is not on for dynamic pages by default, in order to turn that on go to the Enigtron interface from WHM, then click on “Edit default.conf” find this code:


and set it to:


“bypass_for_dynamic” will essentially turn off caching for dynamic pages, if your dynamic pages aren’t being updated very often it’s best to have caching on.  If you have a specific page that cannot by cached you can turn the bypass back on using something like this:

 if ($SITE_URI ~* "") {

Like previously I’m using  the split clients module to spread out traffic to a mirror.  The logic here is a bit more tricky then in NGINX CP and I only have one mirror, so the $mirror variable is just determining whether or not I’ll be redirecting that user.  The code looks essentially like this:

split_clients "${remote_addr}-{$query_string}" $mirror {
   5% "y";
   * "n";
server {
   if ($SITE_URI ~* "") {
      set $mirror "${mirror}maindomain";
   if ($http_referer = "") {
      set $mirror "n";
   if ($mirror = "ymaindomain") {
      return 302 "";

So here the split_clients will set the $mirror variable to “y” 5% of the time.  Then, if the domain is “” it will set the $mirror variable to either “ymaindomain” or “nmaindomain” and the http_referer is just stopping all direct traffic from being redirected to the mirror.  The reason I’m changing the variable is so I don’t end up mirroring subdomains, and I could use that to have different mirrors for different subdomains or specific pages.