diff --git a/docs/guides/applications/voip/installing-freepbx-distro/freepbx-activate.png b/docs/guides/applications/voip/installing-freepbx-distro/freepbx-activate.png new file mode 100644 index 00000000000..9b358a3d6e4 Binary files /dev/null and b/docs/guides/applications/voip/installing-freepbx-distro/freepbx-activate.png differ diff --git a/docs/guides/applications/voip/installing-freepbx-distro/freepbx-admin-form.png b/docs/guides/applications/voip/installing-freepbx-distro/freepbx-admin-form.png new file mode 100644 index 00000000000..6dd1e53c1b0 Binary files /dev/null and b/docs/guides/applications/voip/installing-freepbx-distro/freepbx-admin-form.png differ diff --git a/docs/guides/applications/voip/installing-freepbx-distro/freepbx-dashboard.png b/docs/guides/applications/voip/installing-freepbx-distro/freepbx-dashboard.png new file mode 100644 index 00000000000..c4a2f745fb9 Binary files /dev/null and b/docs/guides/applications/voip/installing-freepbx-distro/freepbx-dashboard.png differ diff --git a/docs/guides/applications/voip/installing-freepbx-distro/freepbx-dashboard_small.png b/docs/guides/applications/voip/installing-freepbx-distro/freepbx-dashboard_small.png new file mode 100644 index 00000000000..738d84d6eee Binary files /dev/null and b/docs/guides/applications/voip/installing-freepbx-distro/freepbx-dashboard_small.png differ diff --git a/docs/guides/applications/voip/installing-freepbx-distro/freepbx-menu.png b/docs/guides/applications/voip/installing-freepbx-distro/freepbx-menu.png new file mode 100644 index 00000000000..c135f3ff315 Binary files /dev/null and b/docs/guides/applications/voip/installing-freepbx-distro/freepbx-menu.png differ diff --git a/docs/guides/applications/voip/installing-freepbx-distro/glish-freepbx.png b/docs/guides/applications/voip/installing-freepbx-distro/glish-freepbx.png new file mode 100644 index 00000000000..1f540028a06 Binary files /dev/null and b/docs/guides/applications/voip/installing-freepbx-distro/glish-freepbx.png differ diff --git a/docs/guides/applications/voip/installing-freepbx-distro/index.md b/docs/guides/applications/voip/installing-freepbx-distro/index.md new file mode 100644 index 00000000000..417ad4a58b6 --- /dev/null +++ b/docs/guides/applications/voip/installing-freepbx-distro/index.md @@ -0,0 +1,165 @@ +--- +slug: installing-freepbx-distro +title: "How to Install FreePBX Distro on Akamai Cloud" +description: "FreePBX is a Linux distribution hosting an open-source phone system and boasting a robust and extensive community. Learn in this tutorial how to deploy an Akamai Cloud instance with the FreePBX distribution." +authors: ['Nathaniel Stickman'] +contributors: ['Nathaniel Stickman'] +published: 2023-07-14 +keywords: ['freepbx hosting','what is pbx','pbx open source'] +license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' +external_resources: +- '[FreePBX: Getting Started](https://www.freepbx.org/get-started/)' +- '[FreePBX Wiki](https://wiki.freepbx.org/)' +--- + +FreePBX provides an open-source solution for managing calls and phone networking within your organization. Built on the powerful Asterisk VoIP server, FreePBX uses a convenient web-based graphical interface to manage virtually everything your phone system needs. + +The main deployment path for FreePBX uses a ready-made Linux distribution. That saves you the hassle of manually setting up and coordinating the necessary web and VoIP servers. + +In this tutorial, find out more about FreePBX and see how you can deploy your own FreePBX distribution to Akamai Cloud. + +## What Is FreePBX? + +The [FreePBX](https://www.freepbx.org/) Linux distribution bundles together a full phone system solution, with VoIP server and a graphical interface to manage it conveniently. Once you have prepared the image, you can deploy it right to Akamai Cloud, where you can begin managing your full phone system. + +But you may be wondering: What is a PBX, and what sets FreePBX apart from other PBX systems? Find out here, with a breakdown of what PBX systems offer and why FreePBX stands out among its peers. + +### What Is a PBX? + +A Private Branch Exchange, or PBX, provides a private telephone network. Usually such a network provides internal phone communications within an organization. They are especially useful for dispersed teams or organizations spread over multiple locations. + +PBX systems like FreePBX operate on an Internet rather than an analog network. Typically, such PBX systems use a VoIP (voice-over-Internet-protocol) server for phone communications. The VoIP server connects the internal phone network and manages outgoing and incoming calls beyond the private network. + +With a VoIP PBX (also known as an IP PBX), a private telephone network can be made much more adaptable. Adding, removing, and modifying internal lines can be done without difficult and costly hardware changes, and often without any additional fees. + +### Introducing FreePBX + +FreePBX is a custom Linux distribution running an IP PBX and a web interface. The FreePBX system offers the robustness of the open-source Asterisk VoIP server, an accessible interface, and an engaged and supportive open-source community. + +As such, FreePBX actually offers more than just an IP PBX solution. To break it down, a FreePBX system includes: + +- A custom Linux distribution (based on CentOS) + +- An Asterisk VoIP server + +- The FreePBX web interface + +[Asterisk](https://www.asterisk.org/) is itself an open-source IP PBX server, notable for its community support and additional call features. You can learn more about Asterisk in our guide [How to Install Asterisk on CentOS 7](/docs/guides/install-asterisk-on-centos-7/). + +The FreePBX distribution runs an Asterisk server out of the box. And alongside the Asterisk server, FreePBX runs a web server hosting its own custom PBX interface. That web-based interface makes it easier to access and manage your PBX setup. + +With FreePBX, everything from managing lines and advanced features like callbacks to system networking and firewalls can be handled within the web-based interface. + +Having the web and VoIP servers bundled together in a custom Linux distribution eliminates the need to fiddle with much of the set up. You can more quickly get focused on what is important — implementing the best phone system for your organization's needs. + +## How to Install FreePBX on a Compute Instance + +Running FreePBX on Akamai Cloud provides a convenient setup. Doing so gives your organization the benefits of a full VoIP phone network alongside the benefits of cloud hosting. The server remains entirely in your control while the underlying infrastructure can be managed by Akamai. + +Many Linux distributions can be deployed directly to Akamai Cloud using the image upload feature, but that is not the case with the FreePBX distribution. Instead, FreePBX requires deployment of a custom image using a local virtual machine. + +The process for doing that is fully detailed in our guide [Deploying a Custom Image to Akamai Cloud](/docs/guides/deploying-custom-images/). While that guide does not specifically address FreePBX, the same steps apply, so you should be able to follow along without trouble. + +To make the process of getting started easier and to help you see how FreePBX fits in, you can follow the overview below. The steps here correspond to steps given in detail in the guide linked above, so refer back to that for precise implementation. + +1. Download the FreePBX image from the [official website](https://www.freepbx.org/downloads/), and set up FreePBX as a virtual machine on your local system. + + You need to run through the full operating system installation process using the virtual machine. Once you start up the virtual machine, follow along with the prompts to create a root user and basic configuration for your FreePBX instance. + + [![Installing the FreePBX distribution in a VM](vm-freepbx-install_small.png)](vm-freepbx-install.png) + +1. Create a Compute Instance, replace the default main disk with an empty disk, and use the custom configuration profile detailed in the custom image deployment guide linked above. + +1. Boot the Compute Instance into rescue mode. There, create a temporary password and temporarily start up the SSH service. + +1. Download the Finnix distribution locally, mount its image to the virtual machine, and boot the virtual machine into a live Finnix system. + +1. In the local virtual machine's Finnix shell, run the command provided in the custom image deployment guide to begin transferring the FreePBX virtual machine to the Compute Instance's empty disk. + +After following the details of those steps as given in the guide linked above, your Compute Instance should be running the FreePBX distribution. + +To verify that, open the Cloud Manager, navigate to the page for the Compute Instance, and select **Launch LISH Console**. Select the **Glish** tab, and you should see output for the FreePBX system. + +![A GLish console connected to the FreePBX distribution](glish-freepbx.png) + +But this is not how you access FreePBX normally. Everything can, instead, be handled from FreePBX's own web interface. Follow along in the next section for everything you need to know to access and use that interface. + +## Getting Started with FreePBX + +With a FreePBX distribution up and running, you are ready to start setting up your PBX and VoIP server. FreePBX comes with a wide range of configuration options and modules for your PBX system. All of these allow you to fine-tune the phone network to your particular needs. + +The upcoming sections show you how to complete your FreePBX instance's initial set up and start navigating the FreePBX interface. From there, you can follow suggestions for getting started building your phone system. + +### Accessing FreePBX + +To access your FreePBX instance's web interface, you just navigate to the instance's public IP address in your web browser. So, for instance, if your instance's IP address is `192.0.2.0`, you would navigate to `https://192.0.2.0`. + +You may receive a warning about self-signed certificates. Bypass that, and you are in. Further below, in the [Navigating FreePBX](/docs/guides/installing-freepbx-distro/#adding-a-lets-encrypt-certificate), you can see where to go to adjust your instance's certificates. + +### Initial Setup for FreePBX + +FreePBX needs a few more settings in place to get running properly. So, when you first access the FreePBX interface, you are taken through a setup wizard to make some necessary and helpful configurations. + +These steps walk you through the interface to get these settings entered and start using FreePBX's administrator tools. + +1. When first visiting the instance, a main menu appears, giving you options for administration, user control, and an operator panel. Select **FreePBX Administration**. + + ![The FreePBX navigation menu](freepbx-menu.png) + +1. A form has you create an administrator user for the FreePBX interface. Complete the form, and keep track of the credentials you give this user. This user is your primary way of interacting with the FreePBX administrator options. + + ![A form in FreePBX to create the initial administrator user](freepbx-admin-form.png) + +1. A prompt gives you the option of activating your instance. While optional, completing activation is recommended. Several features within the FreePBX interface are disabled until you activate the instance. + + ![The FreePBX prompt to activate the instance](freepbx-activate.png) + +1. A series of prompts suggest additional features for your FreePBX instance. The features range from firewall configurations to modules like SIP. Complete these as meets your needs. + + {{< note >}} + The automatic firewall set up may interfere with your ability to connect to the FreePBX interface. If so, try restarting the Compute Instance or accessing the Glish console and executing the command below to turn off the firewall temporarily. + + ```command + fwconsole firewall stop + ``` + + Continuing the set-up steps in the interface should turn the firewall back on automatically. Otherwise, you can use another command like above, but `start` instead of `stop`. + {{< /note >}} + +### Navigating FreePBX + +Completing the initial setup above takes you to the administrator dashboard. From here you can manage your FreePBX instance's configuration and modules. That includes everything from firewall and server networking features to SSL certificate management to modules like caller ID. + +[![The FreePBX dashboard](freepbx-dashboard_small.png)](freepbx-dashboard.png) + +This is where you start building the phone network that meets your particular needs. + +The features available within FreePBX are too numerous to cover completely here. For a more comprehensive coverage, look to the FreePBX Wiki linked at the end of this tutorial. + +In addition to that, you should also refer to FreePBX's guide on [Configuring Your PBX](https://wiki.freepbx.org/display/FPG/Configuring+Your+PBX). Their guide covers a wide range of settings and features useful for starting out with your PBX solution. + +To supplement that resource, here are a few key places to get started when looking around the FreePBX interface. Being familiar with these can make it easier to follow FreePBX's recommendations for configuring your instance. + +- **Asterisk SIP Settings**. Found in the **Settings** menu, this option gives you control over configurations used for SIP calls, the primary method for VoIP calls. As such, you should start here to get your calls operating as desired. + +- **System Admin**. This module, located in the **Admin** menu, controls a range of features. Go here to set up everything from an email to your instance's time zone to IP address and DNS settings. + +- **Applications**. A menu rather than an option in itself, but, once everything else is ready, this is where you can find an array of call-related features. Setting up extensions, callbacks, call parking, and much more are all handled here. + +#### Adding a Let's Encrypt Certificate + +If using a full domain name for your FreePBX instance, you can use the FreePBX interface to add SSL certificates signed by Let's Encrypt. To do that, follow these steps within the FreePBX interface. + +1. From the **Admin** menu, select the **Certificate Management** option. + +1. Select **New Certificate**, and beneath that select the **Generate Let's Encrypt Certificate** option. + +1. Complete the form. For the **Certificate Host Name**, give the domain for your instance — `pbx.example.com` for instance. Let's Encrypt uses the email address you provide to update you reminders for certificate renewals. + +1. After a successful provisioning on the certificate, you can return to the **Certificate Management** page to set the new certificate as default and remove the self-signed certificate. + +## Conclusion + +This covers deploying, configuring, and starting to run your FreePBX system. FreePBX offers the balance of an incredible range of features with an accessible, manageable interface. From here you should be able to put together everything you need for your organization's phone system. + +To help with that, take a look at the FreePBX links below. All of the "getting started" groundwork has been covered in this tutorial. For all your particular needs beyond that, the thorough and community-engaged Wiki documentation provides a wealth of information and guidance. diff --git a/docs/guides/applications/voip/installing-freepbx-distro/vm-freepbx-install.png b/docs/guides/applications/voip/installing-freepbx-distro/vm-freepbx-install.png new file mode 100644 index 00000000000..ebc713932c8 Binary files /dev/null and b/docs/guides/applications/voip/installing-freepbx-distro/vm-freepbx-install.png differ diff --git a/docs/guides/applications/voip/installing-freepbx-distro/vm-freepbx-install_small.png b/docs/guides/applications/voip/installing-freepbx-distro/vm-freepbx-install_small.png new file mode 100644 index 00000000000..fe5b3ca2775 Binary files /dev/null and b/docs/guides/applications/voip/installing-freepbx-distro/vm-freepbx-install_small.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-create-disk.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-create-disk.png new file mode 100644 index 00000000000..7bf0c71d4d4 Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-create-disk.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-main.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-main.png new file mode 100644 index 00000000000..b013c8236e5 Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-main.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-menu.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-menu.png new file mode 100644 index 00000000000..d8eae4e7ae5 Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-menu.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-rescue-mode-prompt.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-rescue-mode-prompt.png new file mode 100644 index 00000000000..f8f49444ddc Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-rescue-mode-prompt.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-storage-menu.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-storage-menu.png new file mode 100644 index 00000000000..64e37563e44 Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-storage-menu.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-storage-menu_small.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-storage-menu_small.png new file mode 100644 index 00000000000..c7287548b1b Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/cloud-manager-instance-storage-menu_small.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/index.md b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/index.md new file mode 100644 index 00000000000..6d6b62d8c74 --- /dev/null +++ b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/index.md @@ -0,0 +1,277 @@ +--- +slug: deploying-custom-images +title: "Deploying a Custom Image to Akamai Cloud" +description: "Many images can be uploaded and run directly from the Akamai Cloud Manager, but others need additional steps to get up and running. Whether you want to run a custom Linux distribution or Windows, you can use this tutorial to deploy your virtual machine image to a fresh Compute Instance." +authors: ['Nathaniel Stickman'] +contributors: ['Nathaniel Stickman'] +published: 2023-07-14 +keywords: ['custom iso to cloud','linode windows 10 install','virtual machine cloud'] +license: '[CC BY-ND 4.0](https://creativecommons.org/licenses/by-nd/4.0)' +--- + +When you need to run a custom image on Akamai Cloud Computing, most of the time the [image upload](/docs/products/tools/images/guides/upload-an-image/) feature provides a smooth solution. Upload an operating system's disk image, and in many cases Akamai Cloud can handle the deployment from there. + +But in some cases the system image you need to deploy needs some additional help. Whether the system has a complex installation or you need custom software before deployment, these images require more manual intervention. + +For such images, you can deploy to Akamai Cloud from a local virtual machine. Get the advantage of fine-tuning the set up and configuration while still being able to run your desired system in the cloud. + +This tutorial explains more about deploying from virtual machines and shows you everything you need to know to do it yourself. Whatever system you are looking to run — from Windows 10 to a custom Linux distribution — this tutorial's instructions can help you do it. + +## Why Deploy from a Virtual Machine? + +The process of deploying a virtual machine image involves a few, more complicated steps than deploying a disk image (`.iso` or `.img`) directly. And already Akamai Cloud can deploy many Linux distributions through its [image upload feature](/docs/products/tools/images/guides/upload-an-image/). + +But not all operating system images readily fit that process. Further, some operating system use cases benefit from running a local instance first. Among other things, that can give you a graphic interface for making initial configurations. + +Windows 10 makes a clear example. Windows's disk image starts with a graphical installation process, making it difficult to automatically deploy to a cloud server. Likely, too, before deploying Windows to the cloud you want to conduct some initial configuration, such as enabling remote desktop. + +Similar cases apply with Linux distributions that either use graphical installation wizards or otherwise do not map well directly to cloud deployments + +In such cases, installing the image in a local virtual machine first can sidestep image deployment limitations and gives you much more control. The process provides an essential solution for getting many operating systems to Akamai Cloud and useful possibilities for others. + +## How to Deploy a Virtual Machine Image to Akamai Cloud + +The process of deploying a custom image to a Compute Instance involves some coordinated steps between your local machine and your Cloud Manager. You need to set up the virtual machine locally and prepare a blank compute instance that can accept the image. + +This tutorial gives the necessary steps in a generalized way, making them adaptable for a wide range of operating system images. Additionally, the steps are organized to help make the coordination between local and cloud setups relatively easy to discern and navigate. + +### Preparing the Virtual Machine + +Locally, the most significant step involves creating and configuring the virtual machine. This virtual machine runs a local instance of the image you want to deploy to Akamai Cloud. Local steps on the virtual machine ensure that the operating system's installation steps have been completed and any necessary settings are in place. + +The local virtual machine is also where you can install software like remote desktop and VNC servers to remotely access the system's desktop later. + +Within the steps that follow, the tutorial shows you how to use [VirtualBox](https://www.virtualbox.org/) to run a local virtual machine of your chosen image. From there, the steps show how to prepare that virtual machine for deployment. + +#### Install VirtualBox + +The steps for installing VirtualBox vary depending on your operating system. For that reason this tutorial only covers the broad strokes, with links to the VirtualBox documentation for detailed steps. That said, the process tends to be straightforward regardless of operating system. + +1. Navigate to the [VirtualBox downloads](https://www.virtualbox.org/wiki/Downloads) page, and download the binary package for your operating system. + +1. Review the [VirtualBox installation instructions](https://www.virtualbox.org/manual/ch02.html) for your operating system, and follow the steps given there. For Windows and macOS, the main step is double-clicking on the downloaded executable (`.exe` or `.dmg`, respectively). + +1. Verify that you can run VirtualBox. You should see some version of the VirtualBox VM manager when VirtualBox starts up. + +#### Download a Virtual Machine Image + +If you have not done so already, you need to download the image for the operating system you intend to run on your Compute Instance. The options are expansive, from Windows to the gamut of Linux distributions. + +To follow along with this tutorial, you can choose a Windows 10 image. The underlying steps for other operating systems should be similar, and Windows provides a great example of the versatility of the process. + +Here are two sources for Windows 10 images (ISO) that you can use to follow along. + +- The [official Windows 10 disk image](https://www.microsoft.com/en-us/software-download/windows10ISO) provides the full Windows 10 installation. Follow the prompts on that page, and select to download the 64-bit edition of Windows 10 Home. + +- The [Tiny10 image](https://archive.org/details/tiny-10_202301) packages a minimalist installation of Windows 10. The core is Windows 10, just as with the official installation. But with Tiny10 bundled software has been stripped down to give you a smaller and lighter operating system. Use the **ISO Image Files** menu to select a version for you, like the `tiny 10 23h1 x64.iso` file, for instance. + +The tutorial assumes you have downloaded one of these, and the examples that follow use the Tiny10 image for its convenience. + +#### Setting Up the Virtual Machine + +At this point, you need to run through the full set up for the operating system on a virtual machine. Typically, this means booting up the system image in a virtual machine, following the installation prompts, and verifying that the system runs as expected. + +As with all of the virtual machine steps, the details vary based on your chosen operating system. However, the differences between operating systems should only appear in the actual installation steps, and the outline here covers everything else in detail. + +1. Open VirtualBox, and from the **Machine** menu at the top select **New**. + +1. In the prompt, enter a name for the virtual machine, and use the **ISO Image** drop down to select *Other...* and locate your downloaded disk image. Verify that **Type** and **Version** roughly match your downloaded image, then select to **Skip Unattended Installation**. + + [![Selecting an image for a new VirtualBox VM](virtualbox-setup-image_small.png)](virtualbox-setup-image.png) + +1. Keep the default options for the **Hardware** prompt. + + [![Setting hardware parameters for the new VirtualBox VM](virtualbox-setup-hardware_small.png)](virtualbox-setup-hardware.png) + +1. For the **Virtual Hard Disk** prompt, select **Create a Virtual Hard Disk Now** and set the **Disk Size** to at least 20 GB. Do not pre-allocate, however. + + [![Allocated a virtual hard disk for the new VirtualBox VM](virtualbox-setup-disk_small.png)](virtualbox-setup-disk.png) + +1. Review the settings, and complete the virtual machine configuration. + +1. With the new virtual machine highlighted, select the **Start** option from the VirtualBox VM manager. The virtual machine should begin running. + +1. Typically, you can expect an operating-system installation wizard to appear once the system has started up. You need to complete the installation process. + + The installation steps vary based on the operating system, so follow the prompts and the operating system's installation documentation for details. + + [![Installing Windows 10 on the VM](vm-windows-setup_small.png)](vm-windows-setup.png) + +1. Once the installation has finished, you should be taken into the operating system. Consider now how you intend to access the system from the Compute Instance. The Cloud Manager provides a Glish console, where you can access the system's desktop environment. But if you want remote access otherwise, you should install a VNC server or enable remote desktop on the system. + + - For Windows, you can enable remote desktop by following the [official documentation](https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-allow-access). + + - For Linux, you can install a VNC server, such as [TigerVNC](https://tigervnc.org/). You can refer to our guide [Install VNC on Ubuntu](/docs/guides/install-vnc-on-ubuntu-20-04/) for helpful steps on setting up TigerVNC, including steps for running the VNC server on system start up. These may not apply directly to your distribution, but they can be helpful in getting started. + +1. Verify that things run as you expect, and then shut down the system. On Windows, you can shut down from the **Start** menu. + + ![Powering down the Windows VM](vm-windows-power.png) + +1. In the VirtualBox VM manager, with the virtual machine highlighted, select the **Settings** option. Navigate to the **Storage** tab, and locate the mounted disk image. Right-click the disk image, and select **Remove Attachment**. + + ![List of mounted devices on the VirtualBox VM](virtualbox-storage.png) + +Your operating system's image is now ready. Leave the virtual machine powered off for the time being. Later, a special boot process allows you to migrate the operating system to your Compute Instance. + +### Preparing a Compute Instance + +The parallel steps on the cloud side of the process require you to create an empty Compute Instance. By default, Compute Instances come with a Linux distribution and a loaded disk. Thus, much of the work in the steps that follow involves removing those defaults and implementing a custom configuration that can support an incoming image. + +1. If you have not already done so, sign up for a Linode account. See our [Getting Started with Linode](/docs/guides/getting-started/) guide. + +1. Create a new Compute Instance. The distribution image does not matter, but you should select a minimum of a **Linode 8GB** instance. This tutorial used the *Debian 11* image and a **Linode 8GB** instance, named `custom-image-linode`. + + ![Landing page for the Compute Instance in the Cloud Manager](cloud-manager-instance-main.png) + +1. Once the instance has a *Running* status, power it down using the **Power Off** option within the Cloud Manager. + + ![Menu options for the Compute Instance in the Cloud Manager](cloud-manager-instance-menu.png) + +1. Navigate to the page for the instance, and select the **Storage** tab. Under **Disks**, locate the primary disk, usually with the *ext4* type, and select **Delete** from the disk's menu. + + [![Options for an instance disk in the Cloud Manager](cloud-manager-instance-storage-menu_small.png)](cloud-manager-instance-storage-menu.png) + +1. Afterward, the **Add A Disk** option becomes available. Select that button, and complete the prompt as follows to create a new disk for the instance. + + - Choose **Create Empty Disk** + + - Provide a label to describe the disk + + - Ensure that the **Filesystem** is *ext4* and the **Size** is the maximum allowed, both of which should be default + + ![Creating a new disk on an instance in the Cloud Manager](cloud-manager-instance-create-disk.png) + +1. Navigate to the instance's **Configurations** tab, and select **Add Configuration**. In the form, use the options described here. + + - Give the configuration a descriptive **Label** + + - For **VM Mode**, choose *Full Virtualization* + + - Under **Boot Settings**: + + - **Select a Kernel** needs to be *Direct Disk* + + - **Run Level** needs to be *Run Default Level* + + - **Memory Limit** needs to be *Do not set any limits on memory usage* + + - Under **Block Device Assignment**: + + - Select for **/dev/sda** the empty disk you created + + - Ensure **/dev/sdb** is set to the *Swap Image* disk + + - Set **initrd** to *None* + + - Do not **Use Custom Root**, and ensure the **Root Device** is */dev/sda* + + - Have **eth0** set to *Public Internet*, and leave the other **Network Interfaces** at *None* + + - Leave all **Filesystem/Boot Helpers** on except for **Auto-configure Networking**, which you need to disable + +1. Locate the default configuration profile, and select the **Delete** option from its menu. You can leave the default configuration profile, but it makes things easier to remove it now. + +All of that leaves you with an empty Compute Instance, ready to be loaded with a custom image. + +### Deploying the Image + +Both sides of the setup have been prepared — the local virtual machine and the cloud instance. What remains requires you to coordinate both of these to transfer the virtual machine disk to the empty disk on the Compute Instance. + +This is where the [Finnix](https://www.finnix.org/) distribution comes in. Finnix works well as a boot manager and for boot utilities, and it is used for that purpose in the Compute Instances' rescue mode. + +Booting both the virtual machine and the cloud instance into live-booted Finnix systems allows you to sync the disks between the two locations. Afterward, your cloud instance can run the image you had prepared in the virtual machine. + +#### Get the Finnix Distribution + +As mentioned above, Finnix is already part of the Compute Instance. When, in the next section, the instance gets booted into rescue mode, it runs a live-booted Finnix system. + +What remains is to have a local copy of the Finnix system for live-booting with your virtual machine. For that, download the [Finnix distribution](https://www.finnix.org/Download) disk image. A later step shows you how to mount this image onto the virtual machine for live booting. + +#### Placing the Instance in Rescue Mode + +To receive the virtual machine image from your local virtual machine, the Compute Instance needs to be running in rescue mode. Rescue mode runs a live Finnix system on the instance. The steps below then use this live system to allow temporary access to the empty disk you set up earlier. + +1. Navigate back to the page for the empty Compute Instance in the Cloud Manager. Choose the **Rescue** option from the instance menu. This gives you a prompt to boot the instance into rescue mode. + + ![The Cloud Manager prompt for booting an instance into rescue mode](cloud-manager-instance-rescue-mode-prompt.png) + +1. Ensure that **/dev/sda** is the empty disk you created and that **/dev/sdb** is the *Swap Image* disk. The **/dev/sdc** option should be *None*. Then select to **Reboot into Rescue Mode**. + +1. From the instance page again, use the **Launch LISH Console** option. You are taken to a console within the Finnix boot manager on the Compute Instance. + + ```output + Finnix 121 (ttyS0) + + finnix login: root (automatic login) + + Linux finnix 5.7.0-2-amd64 #1 SMP Debian 5.7.10-1 (2020-07-26) x86_64 + root@finnix:~# + ``` + +1. Enter the command `passwd` and follow the prompts to create a temporary root password for the Finnix system. + +1. Run the command below to start up the SSH service to temporarily allow SSH connections into the Finnix system. + + ```command + service ssh start + ``` + +Leave the Compute Instance running in this way until the transfer of the new operating system is finished. Later, the steps pick back up with the instance and help you boot into the new system. + +#### Transferring the Virtual Machine Image + +With the Compute Instance in rescue mode and allowing access to the empty disk, you can start a disk transfer from your local virtual machine. To do so, you need to similarly boot the virtual machine into a live Finnix system. From there, a set of commands over SSH begin the transfer. + +1. Open the VirtualBox VM manager, highlight the virtual machine, and select the **Settings** option. + +1. Navigate to the **Storage** tab, right-click on the **Controller**, and select **Optical Drive**. + +1. In the prompt, select **Add** and locate the downloaded Finnix disk image file. With the Finnix image selected, complete the prompt to mount Finnix to the virtual machine. + + ![Selecting a disk image to mount in VirtualBox](virtualbox-mount.png) + + [![A disk image mounted to a VirtualBox VM](virtualbox-mounted_small.png)](virtualbox-mounted.png) + +1. With the virtual machine highlighted, select the **Start** option within the VM manager. + +1. You should see the Finnix boot manager. Select the **Live system** option to start into the Finnix system. + +1. Once the Finnix system boots up, enter the following command to begin transferring the virtual machine image onto the Compute Instance disk. Replace `192.0.2.0` in this example command with your Compute Instance's public IP address. + + ```command + dd if=/dev/sda | pv | gzip -9 | ssh root@192.0.2.0 "gzip -d | dd of=/dev/sda" + ``` + + You are prompted to enter a password for the SSH connection. Use the temporary root password you set on the Compute Instance's Finnix boot manager. + +1. Wait for the transfer to finish, which may take several minutes depending on your connection speed. At the end of the transfer, verify that the local Finnix instance indicates that 20 GB has been transferred. + +1. Power down the virtual machine. + +At this point, you should be done with the local virtual machine. Still, it is a good idea to leave everything intact until you verify deployment to the cloud instance in the next step. Afterward, you can safely do what you would like with the local machine and its related files. + +### Accessing the Deployed System + +Your custom image has now been deployed, and should be running on your Compute Instance. If you set up a remote desktop or VNC server, you should be able to access the cloud instance's desktop environment using that. + +But probably the quickest way to verify that the instance has deployed as expected is through the Cloud Manager. There, you can access the Glish console, which lets you access an instance's graphical output from within your browser. No need to manually set up a remote desktop or VNC. + +The steps that follow show you how to access the instance's desktop environment, verifying the deployment, using the Glish console. + +1. Navigate back to the Cloud Manager page for the Compute Instance, exiting the LISH console if it is still open. + +1. Select the **Power Off** option from the instance menu. + +1. Once the shut down has finished, select the **Power On** option to start the instance back up again. This time, the instance should be starting from the disk, containing the newly-transferred image. + + {{< note >}} + If you retained the instance's original configuration profile, you should ensure that you are booting using the custom configuration. One way to do so is by locate the custom configuration profile and using the **Boot** option on that when starting the instance back up. + {{< /note >}} + +1. Give the instance a short while to fully start up. Then navigate to the **Launch LISH Console** option, and select the **Glish** tab to connect to the instance's graphical display. + +From there, you should be able to interact with the instance just as you had interacted with the operating system as a local virtual machine. Use the same startup and login processes you had used locally to get started. + +## Conclusion + +And with that you have the full process for deploying custom images to Akamai Cloud. The examples have referenced Windows 10, but the same process can be used for a wide range of operating systems. Whether you have a system image that is incompatible with automatic installation or you want to install custom software before deployment. Keep this tutorial ready to get any system onto the cloud, whatever the installation steps or customization you need. diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-mount.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-mount.png new file mode 100644 index 00000000000..a4fcaf987a7 Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-mount.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-mounted.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-mounted.png new file mode 100644 index 00000000000..15b5974b38f Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-mounted.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-mounted_small.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-mounted_small.png new file mode 100644 index 00000000000..c91dddd2e0e Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-mounted_small.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-disk.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-disk.png new file mode 100644 index 00000000000..f7177ff254c Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-disk.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-disk_small.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-disk_small.png new file mode 100644 index 00000000000..027d3736c0d Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-disk_small.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-hardware.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-hardware.png new file mode 100644 index 00000000000..a4be4c0e711 Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-hardware.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-hardware_small.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-hardware_small.png new file mode 100644 index 00000000000..85174011d40 Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-hardware_small.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-image.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-image.png new file mode 100644 index 00000000000..10e6c170497 Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-image.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-image_small.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-image_small.png new file mode 100644 index 00000000000..703f49a3b9c Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-setup-image_small.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-storage.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-storage.png new file mode 100644 index 00000000000..90200fa06c5 Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/virtualbox-storage.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/vm-windows-power.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/vm-windows-power.png new file mode 100644 index 00000000000..72af89a1db3 Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/vm-windows-power.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/vm-windows-setup.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/vm-windows-setup.png new file mode 100644 index 00000000000..6f54785b917 Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/vm-windows-setup.png differ diff --git a/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/vm-windows-setup_small.png b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/vm-windows-setup_small.png new file mode 100644 index 00000000000..9c516734ee6 Binary files /dev/null and b/docs/guides/tools-reference/custom-kernels-distros/deploying-custom-images/vm-windows-setup_small.png differ