> For the complete documentation index, see [llms.txt](https://dozza.gitbook.io/pulsechain_node_guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dozza.gitbook.io/pulsechain_node_guide/part-2-create-the-virtual-machine.md).

# Part 2 — Create the virtual machine

## 2.1 Download Ubuntu Server

Download **Ubuntu Server 24.04 LTS** (not Desktop) from [ubuntu.com/download/server](https://ubuntu.com/download/server). Save the ISO to your C: drive.

## 2.2 Create an External virtual switch

This gives the VM its own IP on your LAN (bridged networking), needed for RPC access and P2P port forwarding.

1. Hyper-V Manager → `Virtual Switch Manager` → New virtual network switch → **External** → Create.
2. Name it (e.g. `LAN`), select your **wired Ethernet adapter**, keep `Allow management operating system to share this network adapter` ticked, OK.

## 2.3 Take the NVMe offline (for passthrough)

The physical disk must be Offline in Windows before Hyper-V can pass it through to the VM. In an **Administrator PowerShell**:

```powershell
# List disks and identify the large one by size and FriendlyName
Get-Disk

# Take it offline (substitute the correct disk Number)
Set-Disk -Number 2 -IsOffline $True
```

{% hint style="danger" %}
**Identify by size, every time.** Both the OS disk and the node disk may show as "Msft Virtual Disk" once inside the VM. Always confirm by **size** before running any destructive command. This is the one step where a wrong disk number is irreversible.
{% endhint %}

## 2.4 Create the VM

Hyper-V Manager → New → Virtual Machine:

* **Name:** `pulsechain-node`
* **Generation 2**
* **Startup memory:** `24576` MB, **untick Dynamic Memory**
* **Networking:** the `LAN` switch
* **Virtual hard disk:** create a 100 GB VHDX on C: (this is only Ubuntu's OS disk)
* **Installation:** install from the Ubuntu ISO

## 2.5 Configure VM settings before first boot

Right-click the VM → Settings:

* **Security → Secure Boot →** change template to `Microsoft UEFI Certificate Authority` (Ubuntu won't boot otherwise)
* **Processor →** `8` virtual processors
* **SCSI Controller → Hard Drive → Add → Physical hard disk →** select the large NVMe (only appears if it's Offline)
* **Checkpoints →** untick `Enable checkpoints` (incompatible with passthrough disks)
* **Automatic Start Action →** `Always start automatically`, \~30s delay
* **Automatic Stop Action →** `Shut down the guest operating system` (protects the chain database on host reboots)

## 2.6 Install Ubuntu

Connect → Start. During the installer:

* Choose **Ubuntu Server** (not minimized)
* Let networking pick up a DHCP address — **note the IP**
* **Storage:** install only to the 100 GB virtual disk. **Leave the large disk completely untouched** — no partitions, no mount points
* Tick **Install OpenSSH server**
* Skip Ubuntu Pro; select no featured snaps (Docker is installed later by the node script)
* When prompted, remove the installation medium (Media → DVD Drive → Eject) and reboot


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://dozza.gitbook.io/pulsechain_node_guide/part-2-create-the-virtual-machine.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
