From eec8379e154667a5e968e978fbcaad0fff61b0b5 Mon Sep 17 00:00:00 2001 From: Maddy Underwood <167196745+madeline-underwood@users.noreply.github.com> Date: Tue, 5 Aug 2025 11:11:52 +0000 Subject: [PATCH 1/7] Polished Learning Path metadata: split objectives, improved readability, aligned tags and titles --- .../azure-vm/_index.md | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/_index.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/_index.md index 357a8bdcd5..58aa33065f 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/_index.md @@ -1,23 +1,22 @@ --- title: Create an Azure Linux 3.0 virtual machine with Cobalt 100 processors -draft: true -cascade: - draft: true - minutes_to_complete: 120 -who_is_this_for: This Learning Path explains how to create a virtual machine on Azure running Azure Linux 3.0 on Cobalt 100 processors. +who_is_this_for: This is an advanced topic for developers who want to run Azure Linux 3.0 on Arm-based Cobalt 100 processors in a custom virtual machine. learning_objectives: - - Use QEMU to create a raw disk image, boot a VM using an Aarch64 ISO, install the OS, and convert the raw disk image to VHD format. - - Upload the VHD file to Azure and use the Azure Shared Image Gallery (SIG) to create a custom image. - - Use the Azure CLI to create an Azure Linux 3.0 VM for Arm, using the custom image from the Azure SIG. + - Use QEMU to create a raw disk image + - Boot a virtual machine using an AArch64 ISO and install Azure Linux 3.0 + - Convert the raw disk image to VHD format + - Upload the VHD file to Azure + - Use Azure Shared Image Gallery (SIG) to create a custom image + - Create an Azure Linux 3.0 virtual machine on Arm using the Azure CLI and the custom image prerequisites: - - A [Microsoft Azure](https://azure.microsoft.com/) account with permission to create resources, including instances using Cobalt 100 processors. - - A Linux machine with [QEMU](https://www.qemu.org/download/) and the [Azure CLI](/install-guides/azure-cli/) installed and authenticated. + - A [Microsoft Azure](https://azure.microsoft.com/) account with permission to create resources, including instances using Cobalt 100 processors + - A Linux machine with [QEMU](https://www.qemu.org/download/) and the [Azure CLI](/install-guides/azure-cli/) installed and authenticated author: Jason Andrews @@ -38,19 +37,19 @@ operatingsystems: further_reading: - resource: - title: Azure Virtual Machines documentation + title: Virtual machines in Azure link: https://learn.microsoft.com/en-us/azure/virtual-machines/ type: documentation - resource: - title: Azure Shared Image Gallery documentation + title: Store and share images in an Azure Compute Gallery link: https://learn.microsoft.com/en-us/azure/virtual-machines/shared-image-galleries type: documentation - resource: - title: QEMU User Documentation + title: QEMU Documentation link: https://wiki.qemu.org/Documentation type: documentation - resource: - title: Upload a VHD to Azure and create an image + title: Upload a VHD to Azure or copy a managed disk to another region - Azure CLI link: https://learn.microsoft.com/en-us/azure/virtual-machines/linux/upload-vhd type: documentation From da1529da59c442a54a769a9f3e276f1312fcf883 Mon Sep 17 00:00:00 2001 From: Maddy Underwood <167196745+madeline-underwood@users.noreply.github.com> Date: Tue, 5 Aug 2025 11:24:34 +0000 Subject: [PATCH 2/7] Edited intro section for tone, structure, and SEO alignment around Arm VM support. --- .../azure-vm/background.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/background.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/background.md index fa9b4854f7..7ddf7de034 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/background.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/background.md @@ -6,24 +6,34 @@ weight: 2 layout: "learningpathall" --- -## What is Azure Linux 3.0? +## What is Azure Linux 3.0 and how can I use it? -Azure Linux 3.0 is a Linux distribution developed and maintained by Microsoft, specifically designed for use on the Azure cloud platform. It is optimized for running cloud-native workloads, such as containers, microservices, and Kubernetes clusters, and emphasizes performance, security, and reliability. Azure Linux 3.0 provides native support for the Arm (AArch64) architecture, enabling efficient, scalable, and cost-effective deployments on Arm-based infrastructure within Azure. +Azure Linux 3.0 is a Microsoft-developed Linux distribution designed specifically for cloud-native workloads on the Azure platform. It is optimized for running cloud-native workloads, such as containers, microservices, and Kubernetes clusters, and emphasizes performance, security, and reliability. + +Azure Linux 3.0 includes native support for the Arm (AArch64) architecture, enabling efficient, scalable, and cost-effective deployments on Arm-based Azure infrastructure. + +## Can I run Azure Linux 3.0 on Arm-based Azure virtual machines? Currently, Azure Linux 3.0 is not available as a ready-made virtual machine image for Arm-based VMs in the Azure Marketplace. Only x86_64 images, published by Ntegral Inc., are offered. This means you cannot directly create an Azure Linux 3.0 VM for Arm from the Azure portal or CLI. +## How can I create a custom Azure Linux image for Arm? + However, you can still run Azure Linux 3.0 on Arm-based Azure VMs by creating your own disk image. Using QEMU, an open-source machine emulator and virtualizer, you can build a custom Azure Linux 3.0 Arm image locally. After building the image, you can upload it to your Azure account as a managed disk or custom image. This process allows you to deploy and manage Azure Linux 3.0 VMs on Arm infrastructure, even before official images are available. This Learning Path guides you through the steps to build an Azure Linux 3.0 disk image with QEMU, upload it to Azure, and prepare it for use in creating virtual machines. Following this process, you'll be able to create and run Azure Linux 3.0 VMs on Arm-based Azure infrastructure. +## What tools do I need to build an Azure Linux image locally? + To get started install the dependencies on your local Linux machine. The instructions work for both Arm or x86 running Ubuntu. ```bash sudo apt update && sudo apt install qemu-system-arm qemu-system-aarch64 qemu-efi-aarch64 qemu-utils ovmf -y ``` +## What tools do I need to build an Azure Linux image locally? + You also need to install the Azure CLI. Refer to [How to install the Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest). You can also use the [Azure CLI install guide](/install-guides/azure-cli/) for Arm Linux systems. Make sure the CLI is working by running the version command and confirm the version is printed. @@ -43,4 +53,6 @@ You should see an output similar to: } ``` +## What’s the next step after setting up my environment? + Continue to learn how to prepare the Azure Linux disk image. \ No newline at end of file From decb0f25ec029f42b3e08e8c38ef6fd083a07f5b Mon Sep 17 00:00:00 2001 From: Maddy Underwood <167196745+madeline-underwood@users.noreply.github.com> Date: Tue, 5 Aug 2025 14:49:24 +0000 Subject: [PATCH 3/7] Cleaned up Learning Path introduction: fixed formatting, clarified QEMU flow, and aligned with Learning Paths style. --- .../azure-vm/background.md | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/background.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/background.md index 7ddf7de034..1170c0f9d4 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/background.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/background.md @@ -1,5 +1,5 @@ --- -title: "About Azure Linux" +title: "Build and run Azure Linux 3.0 on Arm-based virtual machines" weight: 2 @@ -8,41 +8,49 @@ layout: "learningpathall" ## What is Azure Linux 3.0 and how can I use it? -Azure Linux 3.0 is a Microsoft-developed Linux distribution designed specifically for cloud-native workloads on the Azure platform. It is optimized for running cloud-native workloads, such as containers, microservices, and Kubernetes clusters, and emphasizes performance, security, and reliability. +Azure Linux 3.0 is a Microsoft-developed Linux distribution designed for cloud-native workloads on the Azure platform. It is optimized for running containers, microservices, and Kubernetes clusters, with a focus on performance, security, and reliability. Azure Linux 3.0 includes native support for the Arm (AArch64) architecture, enabling efficient, scalable, and cost-effective deployments on Arm-based Azure infrastructure. ## Can I run Azure Linux 3.0 on Arm-based Azure virtual machines? -Currently, Azure Linux 3.0 is not available as a ready-made virtual machine image for Arm-based VMs in the Azure Marketplace. Only x86_64 images, published by Ntegral Inc., are offered. This means you cannot directly create an Azure Linux 3.0 VM for Arm from the Azure portal or CLI. +Currently, Azure Linux 3.0 isn't available as a ready-made virtual machine image for Arm-based VMs in the Azure Marketplace. Only x86_64 images, published by Ntegral Inc., are available. This means you can't directly create an Azure Linux 3.0 VM for Arm from the Azure portal or CLI. ## How can I create a custom Azure Linux image for Arm? -However, you can still run Azure Linux 3.0 on Arm-based Azure VMs by creating your own disk image. Using QEMU, an open-source machine emulator and virtualizer, you can build a custom Azure Linux 3.0 Arm image locally. After building the image, you can upload it to your Azure account as a managed disk or custom image. This process allows you to deploy and manage Azure Linux 3.0 VMs on Arm infrastructure, even before official images are available. +You can still run Azure Linux 3.0 on Arm-based Azure VMs by creating your own disk image. Using [QEMU](https://www.qemu.org/), an open-source machine emulator and virtualizer, you can build a custom Azure Linux 3.0 Arm image locally. After building the image, upload it to your Azure account as a managed disk or custom image. This process allows you to deploy and manage Azure Linux 3.0 VMs on Arm infrastructure, even before official images are available. -This Learning Path guides you through the steps to build an Azure Linux 3.0 disk image with QEMU, upload it to Azure, and prepare it for use in creating virtual machines. +This Learning Path guides you through the steps to: -Following this process, you'll be able to create and run Azure Linux 3.0 VMs on Arm-based Azure infrastructure. +- Build an Azure Linux 3.0 disk image with QEMU +- Upload the image to Azure +- Create a virtual machine from the custom image + +By the end of this process, you'll be able to run Azure Linux 3.0 VMs on Arm-based Azure infrastructure. ## What tools do I need to build an Azure Linux image locally? -To get started install the dependencies on your local Linux machine. The instructions work for both Arm or x86 running Ubuntu. +To get started, install the dependencies on your local Linux machine. The instructions work for both Arm and x86 machines running Ubuntu. + +Install QEMU and related tools: ```bash sudo apt update && sudo apt install qemu-system-arm qemu-system-aarch64 qemu-efi-aarch64 qemu-utils ovmf -y ``` -## What tools do I need to build an Azure Linux image locally? +You'll also need the Azure CLI. To install it, follow the [Azure CLI install guide](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest). + +If you're using an Arm-based system, you can also see the [Azure CLI install guide](/install-guides/azure-cli/) for Arm Linux systems. -You also need to install the Azure CLI. Refer to [How to install the Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest). You can also use the [Azure CLI install guide](/install-guides/azure-cli/) for Arm Linux systems. +## How do I verify the Azure CLI installation? -Make sure the CLI is working by running the version command and confirm the version is printed. +After installing the CLI, verify it's working by running the following command: ```bash az version ``` -You should see an output similar to: +You should see an output similar to the following: ```output { @@ -55,4 +63,4 @@ You should see an output similar to: ## What’s the next step after setting up my environment? -Continue to learn how to prepare the Azure Linux disk image. \ No newline at end of file +Next, you'll learn how to build the Azure Linux 3.0 disk image using QEMU. \ No newline at end of file From 08b01aaa6daf213973eb9ab6c435ec8d99690056 Mon Sep 17 00:00:00 2001 From: Maddy Underwood <167196745+madeline-underwood@users.noreply.github.com> Date: Tue, 5 Aug 2025 15:31:16 +0000 Subject: [PATCH 4/7] Updates --- .../azure-vm/azure-vm.md | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md index 0159ccae7d..a448e47b2a 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md @@ -6,29 +6,30 @@ weight: 3 layout: learningpathall --- -You can view the Azure Linux 3.0 project on [GitHub](https://github.com/microsoft/azurelinux). There are links to the ISO downloads in the project README. +You can view the Azure Linux 3.0 project on [GitHub](https://github.com/microsoft/azurelinux). There project README includes links to ISO downloads. -Using QEMU, you can create a raw disk image and boot a virtual machine with the ISO to install the OS on the disk. - -Once the installation is complete, you can convert the raw disk to a fixed-size VHD, upload it to Azure Blob Storage, and then use the Azure CLI to create a custom Arm image. +Using [QEMU](https://www.qemu.org/), you can create a raw disk image, boot a virtual machine with the ISO, and install the operating system. After installation is complete, you'll convert the image to a fixed-size VHD, upload it to Azure Blob Storage, and use the Azure CLI to create a custom Arm image. ## Download and create a virtual disk file -Use `wget` to download the Azure Linux ISO image file. +Use `wget` to download the Azure Linux ISO image file: ```bash wget https://aka.ms/azurelinux-3.0-aarch64.iso ``` -Use `qemu-img` to create a 32 GB empty raw disk image to install the OS. - -You can increase the disk size by modifying the value passed to `qemu-img`. +Create a 32 GB empty raw disk image to install the OS: ```bash qemu-img create -f raw azurelinux-arm64.raw 34359738368 ``` -## Boot and install the OS +{{% notice Note %}} +You can change the disk size by adjusting the value passed to `qemu-img`. +{{% /notice %}} + + +## Boot the VM and install Azure Linux Use QEMU to boot the operating system in an emulated Arm VM. @@ -46,14 +47,11 @@ qemu-system-aarch64 \ -device virtio-net-device,netdev=net0 ``` -Navigate through the installer by entering the hostname, username, and password for the custom image. -You should use the username of `azureuser` if you want match the instructions on the following pages. - -Be patient, it takes some time to complete the full installation. +Navigate through the installer by entering the hostname, username, and password for the custom image. Use `azureuser` as the username to match the configuration used in later steps. -At the end of installation you are prompted for confirmation to reboot the system. +{{% notice Note %}}The installation process takes several minutes.{{% /notice %}} -Once the newly installed OS boots successfully, install the Azure Linux Agent for VM provisioning, and power off the VM. +At the end of installation, confirm the reboot prompt. After rebooting into the newly-installed OS, install and enable the Azure Linux Agent: ```bash sudo dnf install WALinuxAgent -y @@ -62,7 +60,7 @@ sudo systemctl start waagent sudo poweroff ``` -Be patient, it takes some time to install the packages and power off. +{{% notice Note %}} It can take a few minutes to install the agent and power off the VM.{{% /notice %}} ## Convert the raw disk to VHD Format @@ -73,7 +71,7 @@ qemu-img convert -f raw -o subformat=fixed,force_size -O vpc azurelinux-arm64.ra ``` {{% notice Note %}} -VHD files have 512 bytes of footer attached at the end. The `force_size` flag ensures that the exact virtual size specified is used for the final VHD file. Without this, QEMU may round the size or adjust for footer overhead (especially when converting from raw to VHD). The `force_size` flag forces the final image to match the original size. This flag makes the final VHD size a whole number in MB or GB, which is required for Azure. +VHD files include a 512-byte footer at the end. The `force_size` flag ensures the final image size exactly matches the requested virtual size. Without this, QEMU may round the size or adjust for footer overhead (especially when converting from raw to VHD). The `force_size` flag forces the final image to match the original size. This is required for Azure compatibility, as it avoids rounding errors and ensures the VHD ends at a whole MB or GB boundary. {{% /notice %}} -Next, you can save the image in your Azure account. +Next, you'll upload the image to your Azure account. From 78f96f2205a8feac66e35a8752ea2bf0466f27cd Mon Sep 17 00:00:00 2001 From: Maddy Underwood <167196745+madeline-underwood@users.noreply.github.com> Date: Tue, 5 Aug 2025 15:46:14 +0000 Subject: [PATCH 5/7] Updates --- .../servers-and-cloud-computing/azure-vm/azure-vm.md | 2 +- .../servers-and-cloud-computing/azure-vm/save-image.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md index a448e47b2a..24da6ccc36 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md @@ -6,7 +6,7 @@ weight: 3 layout: learningpathall --- -You can view the Azure Linux 3.0 project on [GitHub](https://github.com/microsoft/azurelinux). There project README includes links to ISO downloads. +You can view the Azure Linux 3.0 project on [GitHub](https://github.com/microsoft/azurelinux). The project README includes links to ISO downloads. Using [QEMU](https://www.qemu.org/), you can create a raw disk image, boot a virtual machine with the ISO, and install the operating system. After installation is complete, you'll convert the image to a fixed-size VHD, upload it to Azure Blob Storage, and use the Azure CLI to create a custom Arm image. diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/save-image.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/save-image.md index ab66336077..32b00772f4 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/save-image.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/save-image.md @@ -10,7 +10,7 @@ You can now use the Azure CLI to create a disk image in Azure and copy the local ## Prepare Azure resources for the image -Before uploading the VHD file to Azure storage, set the environment variables for the Azure CLI. +Before uploading the VHD file to Azure storage, set the environment variables for the Azure CLI: ```bash RESOURCE_GROUP="MyCustomARM64Group" @@ -37,7 +37,7 @@ VM_SIZE="Standard_D4ps_v6" You can modify the environment variables such as RESOURCE_GROUP, VM_NAME, and LOCATION based on your naming preferences, region, and resource requirements. {{% /notice %}} -Make sure to login to Azure using the CLI. +Logi n to Azure using the CLI: ```bash az login From 5364f1bdfde5980892b80de8d2980033933423cd Mon Sep 17 00:00:00 2001 From: Maddy Underwood <167196745+madeline-underwood@users.noreply.github.com> Date: Wed, 6 Aug 2025 13:54:44 +0000 Subject: [PATCH 6/7] Tightened language, removed trailing whitespace. --- .../azure-vm/_index.md | 2 +- .../azure-vm/azure-vm.md | 38 +++--- .../azure-vm/background.md | 20 ++- .../azure-vm/save-image.md | 125 ++++++++++-------- .../azure-vm/start-vm.md | 32 ++--- 5 files changed, 118 insertions(+), 99 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/_index.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/_index.md index 58aa33065f..3ee259c09d 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/_index.md @@ -1,7 +1,7 @@ --- title: Create an Azure Linux 3.0 virtual machine with Cobalt 100 processors -minutes_to_complete: 120 +minutes_to_complete: 120 who_is_this_for: This is an advanced topic for developers who want to run Azure Linux 3.0 on Arm-based Cobalt 100 processors in a custom virtual machine. diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md index 24da6ccc36..c9745ebf32 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md @@ -25,7 +25,7 @@ qemu-img create -f raw azurelinux-arm64.raw 34359738368 ``` {{% notice Note %}} -You can change the disk size by adjusting the value passed to `qemu-img`. +You can change the disk size by adjusting the value passed to `qemu-img`. Ensure it meets the minimum disk size requirements for Azure (typically at least 30 GB). {{% /notice %}} @@ -34,44 +34,44 @@ You can change the disk size by adjusting the value passed to `qemu-img`. Use QEMU to boot the operating system in an emulated Arm VM. ```bash -qemu-system-aarch64 \ - -machine virt \ - -cpu cortex-a72 \ - -m 4096 \ - -nographic \ - -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \ - -drive if=none,file=azurelinux-arm64.raw,format=raw,id=hd0 \ - -device virtio-blk-device,drive=hd0 \ - -cdrom azurelinux-3.0-aarch64.iso \ - -netdev user,id=net0 \ +qemu-system-aarch64 \ + -machine virt \ + -cpu cortex-a72 \ + -m 4096 \ + -nographic \ + -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \ + -drive if=none,file=azurelinux-arm64.raw,format=raw,id=hd0 \ + -device virtio-blk-device,drive=hd0 \ + -cdrom azurelinux-3.0-aarch64.iso \ + -netdev user,id=net0 \ -device virtio-net-device,netdev=net0 ``` -Navigate through the installer by entering the hostname, username, and password for the custom image. Use `azureuser` as the username to match the configuration used in later steps. +Follow the installer prompts to enter the hostname, username, and password. Use `azureuser` as the username to ensure compatibility with later steps. {{% notice Note %}}The installation process takes several minutes.{{% /notice %}} At the end of installation, confirm the reboot prompt. After rebooting into the newly-installed OS, install and enable the Azure Linux Agent: ```bash -sudo dnf install WALinuxAgent -y -sudo systemctl enable waagent -sudo systemctl start waagent +sudo dnf install WALinuxAgent -y +sudo systemctl enable waagent +sudo systemctl start waagent sudo poweroff ``` {{% notice Note %}} It can take a few minutes to install the agent and power off the VM.{{% /notice %}} -## Convert the raw disk to VHD Format +## Convert the raw disk to VHD format -Now that the raw disk image is ready to be used, convert the image to fixed-size VHD, making it compatible with Azure. +Now that the raw disk image is ready for you to use, convert it to fixed-size VHD, which makes it compatible with Azure. ```bash qemu-img convert -f raw -o subformat=fixed,force_size -O vpc azurelinux-arm64.raw azurelinux-arm64.vhd ``` {{% notice Note %}} -VHD files include a 512-byte footer at the end. The `force_size` flag ensures the final image size exactly matches the requested virtual size. Without this, QEMU may round the size or adjust for footer overhead (especially when converting from raw to VHD). The `force_size` flag forces the final image to match the original size. This is required for Azure compatibility, as it avoids rounding errors and ensures the VHD ends at a whole MB or GB boundary. +VHD files include a 512-byte footer at the end. The `force_size` flag ensures the final image size matches the requested virtual size. Without this, QEMU might round the size or adjust for footer overhead (especially when converting from raw to VHD). The `force_size` flag forces the final image to match the original size. This is required for Azure compatibility, as it avoids rounding errors and ensures the VHD ends at a whole MB or GB boundary. {{% /notice %}} -Next, you'll upload the image to your Azure account. +In the next step, you'll upload the VHD image to Azure and register it as a custom image for use with Arm-based virtual machines. diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/background.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/background.md index 1170c0f9d4..65b0b4c00e 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/background.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/background.md @@ -1,5 +1,5 @@ --- -title: "Build and run Azure Linux 3.0 on Arm-based virtual machines" +title: "Build and run Azure Linux 3.0 on an Arm-based Azure virtual machine" weight: 2 @@ -10,15 +10,15 @@ layout: "learningpathall" Azure Linux 3.0 is a Microsoft-developed Linux distribution designed for cloud-native workloads on the Azure platform. It is optimized for running containers, microservices, and Kubernetes clusters, with a focus on performance, security, and reliability. -Azure Linux 3.0 includes native support for the Arm (AArch64) architecture, enabling efficient, scalable, and cost-effective deployments on Arm-based Azure infrastructure. +Azure Linux 3.0 includes native support for the Arm architecture (AArch64), enabling efficient, scalable, and cost-effective deployments on Arm-based Azure infrastructure. ## Can I run Azure Linux 3.0 on Arm-based Azure virtual machines? -Currently, Azure Linux 3.0 isn't available as a ready-made virtual machine image for Arm-based VMs in the Azure Marketplace. Only x86_64 images, published by Ntegral Inc., are available. This means you can't directly create an Azure Linux 3.0 VM for Arm from the Azure portal or CLI. +At the time of writing, Azure Linux 3.0 isn't available as a prebuilt virtual machine image for Arm-based VMs in the Azure Marketplace. Only x86_64 images (published by Ntegral Inc.) are available. This means you can't directly create an Azure Linux 3.0 VM for Arm from the Azure portal or CLI. -## How can I create a custom Azure Linux image for Arm? +## How can I create and use a custom Azure Linux image for Arm? -You can still run Azure Linux 3.0 on Arm-based Azure VMs by creating your own disk image. Using [QEMU](https://www.qemu.org/), an open-source machine emulator and virtualizer, you can build a custom Azure Linux 3.0 Arm image locally. After building the image, upload it to your Azure account as a managed disk or custom image. This process allows you to deploy and manage Azure Linux 3.0 VMs on Arm infrastructure, even before official images are available. +To run Azure Linux 3.0 on an Arm-based VM, you'll need to build a custom image manually. Using [QEMU](https://www.qemu.org/), an open-source machine emulator and virtualizer, you can build the image locally. After the build completes, upload the resulting image to your Azure account as either a managed disk or a custom image resource. This process lets you deploy and manage Azure Linux 3.0 VMs on Arm-based Azure infrastructure, even before official images are published in the Marketplace. This gives you full control over image configuration and early access to Arm-native workloads. This Learning Path guides you through the steps to: @@ -28,9 +28,9 @@ This Learning Path guides you through the steps to: By the end of this process, you'll be able to run Azure Linux 3.0 VMs on Arm-based Azure infrastructure. -## What tools do I need to build an Azure Linux image locally? +## What tools do I need to build the Azure Linux image locally? -To get started, install the dependencies on your local Linux machine. The instructions work for both Arm and x86 machines running Ubuntu. +You can build the image on either an Arm or x86 Ubuntu system. First, install the required tools: Install QEMU and related tools: @@ -40,7 +40,7 @@ sudo apt update && sudo apt install qemu-system-arm qemu-system-aarch64 qemu-efi You'll also need the Azure CLI. To install it, follow the [Azure CLI install guide](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest). -If you're using an Arm-based system, you can also see the [Azure CLI install guide](/install-guides/azure-cli/) for Arm Linux systems. +If you're using an Arm Linux machine, see the [Azure CLI install guide](/install-guides/azure-cli/). ## How do I verify the Azure CLI installation? @@ -61,6 +61,4 @@ You should see an output similar to the following: } ``` -## What’s the next step after setting up my environment? - -Next, you'll learn how to build the Azure Linux 3.0 disk image using QEMU. \ No newline at end of file +In the next section, you'll learn how to build the Azure Linux 3.0 disk image using QEMU. \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/save-image.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/save-image.md index 32b00772f4..71a3e34010 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/save-image.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/save-image.md @@ -6,94 +6,109 @@ weight: 4 layout: learningpathall --- -You can now use the Azure CLI to create a disk image in Azure and copy the local image to Azure. +## Section overview -## Prepare Azure resources for the image +You're now ready to use the Azure CLI to create and upload a custom disk image to Azure. In this section, you'll configure environment variables, provision the necessary Azure resources, and upload a `.vhd` file. Then, you'll use the Shared Image Gallery to register the image for use with custom virtual machines. -Before uploading the VHD file to Azure storage, set the environment variables for the Azure CLI: +## How do I set up environment variables for the Azure CLI? + +Before uploading your VHD file, set the environment variables for the Azure CLI: ```bash -RESOURCE_GROUP="MyCustomARM64Group" -LOCATION="centralindia" -STORAGE_ACCOUNT="mycustomarm64storage" -CONTAINER_NAME="mycustomarm64container" -VHD_NAME="azurelinux-arm64.vhd" -GALLERY_NAME="MyCustomARM64Gallery" -IMAGE_DEF_NAME="MyAzureLinuxARM64Def" -IMAGE_VERSION="1.0.0" -PUBLISHER="custom" -OFFER="custom-offer" -SKU="custom-sku" -OS_TYPE="Linux" -ARCHITECTURE="Arm64" -HYPERV_GEN="V2" -STORAGE_ACCOUNT_TYPE="Standard_LRS" -VM_NAME="MyAzureLinuxARMVM" -ADMIN_USER="azureuser" +RESOURCE_GROUP="MyCustomARM64Group" +LOCATION="centralindia" +STORAGE_ACCOUNT="mycustomarm64storage" +CONTAINER_NAME="mycustomarm64container" +VHD_NAME="azurelinux-arm64.vhd" +GALLERY_NAME="MyCustomARM64Gallery" +IMAGE_DEF_NAME="MyAzureLinuxARM64Def" +IMAGE_VERSION="1.0.0" +PUBLISHER="custom" +OFFER="custom-offer" +SKU="custom-sku" +OS_TYPE="Linux" +ARCHITECTURE="Arm64" +HYPERV_GEN="V2" +STORAGE_ACCOUNT_TYPE="Standard_LRS" +VM_NAME="MyAzureLinuxARMVM" +ADMIN_USER="azureuser" VM_SIZE="Standard_D4ps_v6" ``` {{% notice Note %}} -You can modify the environment variables such as RESOURCE_GROUP, VM_NAME, and LOCATION based on your naming preferences, region, and resource requirements. +Modify the environment variables such as RESOURCE_GROUP, VM_NAME, and LOCATION to suit your naming preferences, region, and resource requirements. {{% /notice %}} -Logi n to Azure using the CLI: +## How do I log in and create Azure resources? + +First, log in to Azure using the CLI: ```bash az login ``` -If a link is printed, open it in a browser and enter the provided code to authenticate. +If prompted, open the browser link and enter the verification code to authenticate. -Create a new resource group. If you are using an existing resource group for the RESOURCE_GROUP environment variable you can skip this step. +Then, create a new resource group. If you are using an existing resource group for the RESOURCE_GROUP environment variable, you can skip this step: ```bash az group create --name "$RESOURCE_GROUP" --location "$LOCATION" ``` -Create Azure blob storage. +Create a new storage account to store your image: ```bash -az storage account create \ - --name "$STORAGE_ACCOUNT" \ - --resource-group "$RESOURCE_GROUP" \ - --location "$LOCATION" \ - --sku Standard_LRS \ +az storage account create \ + --name "$STORAGE_ACCOUNT" \ + --resource-group "$RESOURCE_GROUP" \ + --location "$LOCATION" \ + --sku Standard_LRS \ --kind StorageV2 ``` -Create a blob container in the blob storage account. +Next, create a blob container in the storage account: ```bash -az storage container create \ - --name "$CONTAINER_NAME" \ +az storage container create \ + --name "$CONTAINER_NAME" \ --account-name "$STORAGE_ACCOUNT" ``` -## Upload and save the image in Azure +## How do I upload a VHD image to Azure Blob Storage? + +First, retrieve the storage account key: + +```bash +STORAGE_KEY=$(az storage account keys list \ + --resource-group "$RESOURCE_GROUP" \ + --account-name "$STORAGE_ACCOUNT" \ + --query '[0].value' --output tsv) +``` -Upload the VHD file to Azure. +Then upload your VHD file to Azure Blob Storage: ```bash -az storage blob upload \ - --account-name "$STORAGE_ACCOUNT" \ - --container-name "$CONTAINER_NAME" \ - --name "$VHD_NAME" \ +az storage blob upload \ + --account-name "$STORAGE_ACCOUNT" \ + --container-name "$CONTAINER_NAME" \ + --name "$VHD_NAME" \ --file ./azurelinux-arm64.vhd ``` -You can now use the Azure console to see the image in your Azure account. +You can now use the Azure console to view the image in your Azure account. -Next, create a custom VM image from this VHD, using Azure Shared Image Gallery (SIG). +## How do I register a custom image in the Azure Shared Image Gallery? + +Create a custom VM image from the VHD, using the Azure Shared Image Gallery (SIG): ```bash -az sig create \ - --resource-group "$RESOURCE_GROUP" \ - --gallery-name "$GALLERY_NAME" \ +az sig create \ + --resource-group "$RESOURCE_GROUP" \ + --gallery-name "$GALLERY_NAME" \ --location "$LOCATION" ``` -Create the image definition. +Create the image definition: ```bash az sig image-definition create \ @@ -108,7 +123,7 @@ az sig image-definition create \ --hyper-v-generation "$HYPERV_GEN" ``` -Create the image version to register the VHD as a version of the custom image. +Create the image version from the uploaded VHD: ```bash az sig image-version create \ @@ -119,18 +134,22 @@ az sig image-version create \ --location "$LOCATION" \ --os-vhd-uri "https://${STORAGE_ACCOUNT}.blob.core.windows.net/${CONTAINER_NAME}/${VHD_NAME}" \ --os-vhd-storage-account "$STORAGE_ACCOUNT" \ - --storage-account-type "$STORAGE_ACCOUNT_TYPE" + --storage-account-type "$STORAGE_ACCOUNT_TYPE" ``` -Once the image has been versioned, you can retrieve the unique image ID for use in VM creation. +## How do I retrieve the image ID for VM creation? + +Once the image has been versioned, you can retrieve the unique image ID for use in VM creation: ```bash -IMAGE_ID=$(az sig image-version show \ - --resource-group "$RESOURCE_GROUP" \ - --gallery-name "$GALLERY_NAME" \ - --gallery-image-definition "$IMAGE_DEF_NAME" \ +IMAGE_ID=$(az sig image-version show \ + --resource-group "$RESOURCE_GROUP" \ + --gallery-name "$GALLERY_NAME" \ + --gallery-image-definition "$IMAGE_DEF_NAME" \ --gallery-image-version "$IMAGE_VERSION" \ --query "id" -o tsv) ``` -Next, you can create a virtual machine with the new image using the image ID. \ No newline at end of file +You'll use this ID to deploy a new virtual machine based on your custom image. + +You've successfully uploaded and registered a custom Arm64 VM image in Azure. In the next section, you'll learn how to create a virtual machine using this image. \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/start-vm.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/start-vm.md index c8592c1f96..930dda7d01 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/start-vm.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/start-vm.md @@ -6,29 +6,31 @@ weight: 5 layout: learningpathall --- -## Create a virtual machine using the new image +Now that your image is registered, you can launch a new VM using the Azure CLI and the custom image ID. This example creates a Linux VM on Cobalt 100 Arm-based processors using the custom image you created earlier. -You can now use the newly created Azure Linux image to create a virtual machine in Azure with Cobalt 100 processors. Confirm the VM is created by looking in your Azure account in the “Virtual Machines” section. +## How do I create a virtual machine in Azure using a custom image? + +Use the following command to create a virtual machine using your custom image: ```bash -az vm create \ - --resource-group "$RESOURCE_GROUP" \ - --name "$VM_NAME" \ - --image "$IMAGE_ID" \ - --size "$VM_SIZE" \ - --admin-username "$ADMIN_USER" \ - --generate-ssh-keys \ +az vm create \ + --resource-group "$RESOURCE_GROUP" \ + --name "$VM_NAME" \ + --image "$IMAGE_ID" \ + --size "$VM_SIZE" \ + --admin-username "$ADMIN_USER" \ + --generate-ssh-keys \ --public-ip-sku Standard ``` After the VM is successfully created, retrieve the public IP address. ```bash -az vm show \ - --resource-group "$RESOURCE_GROUP" \ - --name "$VM_NAME" \ - --show-details \ - --query "publicIps" \ +az vm show \ + --resource-group "$RESOURCE_GROUP" \ + --name "$VM_NAME" \ + --show-details \ + --query "publicIps" \ -o tsv ``` @@ -38,7 +40,7 @@ Use the public IP address to SSH to the VM. Replace `` with t ssh azureuser@ ``` -After you login, print the machine information. +After connecting, print the machine information: ```bash uname -a From 1d615a77956a2cbd4b8fa487c77f6a5113e43ca0 Mon Sep 17 00:00:00 2001 From: Maddy Underwood <167196745+madeline-underwood@users.noreply.github.com> Date: Wed, 6 Aug 2025 14:08:17 +0000 Subject: [PATCH 7/7] Added question-framing to section headers for SEO. --- .../servers-and-cloud-computing/azure-vm/azure-vm.md | 8 +++++--- .../servers-and-cloud-computing/azure-vm/save-image.md | 2 +- .../servers-and-cloud-computing/azure-vm/start-vm.md | 2 ++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md index c9745ebf32..58b6f28d74 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/azure-vm.md @@ -6,11 +6,13 @@ weight: 3 layout: learningpathall --- +## How do I create an Azure Linux image for Arm? + You can view the Azure Linux 3.0 project on [GitHub](https://github.com/microsoft/azurelinux). The project README includes links to ISO downloads. Using [QEMU](https://www.qemu.org/), you can create a raw disk image, boot a virtual machine with the ISO, and install the operating system. After installation is complete, you'll convert the image to a fixed-size VHD, upload it to Azure Blob Storage, and use the Azure CLI to create a custom Arm image. -## Download and create a virtual disk file +## How do I download the Azure Linux ISO and create a raw disk image? Use `wget` to download the Azure Linux ISO image file: @@ -29,7 +31,7 @@ You can change the disk size by adjusting the value passed to `qemu-img`. Ensure {{% /notice %}} -## Boot the VM and install Azure Linux +## How do I install Azure Linux on a raw disk image using QEMU? Use QEMU to boot the operating system in an emulated Arm VM. @@ -62,7 +64,7 @@ sudo poweroff {{% notice Note %}} It can take a few minutes to install the agent and power off the VM.{{% /notice %}} -## Convert the raw disk to VHD format +## How do I convert a raw disk image to a fixed-size VHD for Azure? Now that the raw disk image is ready for you to use, convert it to fixed-size VHD, which makes it compatible with Azure. diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/save-image.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/save-image.md index 71a3e34010..8bae3a4507 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/save-image.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/save-image.md @@ -6,7 +6,7 @@ weight: 4 layout: learningpathall --- -## Section overview +## How do I upload and register a VHD image in Azure? You're now ready to use the Azure CLI to create and upload a custom disk image to Azure. In this section, you'll configure environment variables, provision the necessary Azure resources, and upload a `.vhd` file. Then, you'll use the Shared Image Gallery to register the image for use with custom virtual machines. diff --git a/content/learning-paths/servers-and-cloud-computing/azure-vm/start-vm.md b/content/learning-paths/servers-and-cloud-computing/azure-vm/start-vm.md index 930dda7d01..67d19f2655 100644 --- a/content/learning-paths/servers-and-cloud-computing/azure-vm/start-vm.md +++ b/content/learning-paths/servers-and-cloud-computing/azure-vm/start-vm.md @@ -6,6 +6,8 @@ weight: 5 layout: learningpathall --- +## How do I launch a virtual machine using my custom Azure image? + Now that your image is registered, you can launch a new VM using the Azure CLI and the custom image ID. This example creates a Linux VM on Cobalt 100 Arm-based processors using the custom image you created earlier. ## How do I create a virtual machine in Azure using a custom image?