- 1. Status
- 2. Downloading Packer
- 3. Dependencies
- 4. Building the rv64gc Disk Image
- 5. Building the arm64 Disk Image
- 6. Building the arm64sve Disk Image
- 7. Building the x86_64 Disk Image
- A. Troubleshooting
| rv64gc | arm64 | arm64sve | x86_64 | |
|---|---|---|---|---|
| stream | ✔ | ✔ | ✔ | ✔ |
| gups | ✔ | ✔ | ✔ | ✔ |
| spatter | ✔ | ✔ | ✔ | ✔ |
| npb | ✔ * | ✔* | ✔* | ✔* |
| MemoryLatencyTest | ✔ | ✔ | ✔ | ✔ |
| permutating-scatter | ✔ | ✔ | ✔ | ✔ |
| permutating-gather | ✔ | ✔ | ✔ | ✔ |
| gapbs | ? | ? | ?** | ? |
*Compiling is.D.x resulted in compilation error. ** The SVE compilation flags have not been added to the Makefile's of GAPBS.
See https://developer.hashicorp.com/packer/downloads.
apt-get install cloud-image-utils qemu-efi-aarch64 qemu-system qemu-utilsWe choose to work with this disk image because this disk image is known to work with QEMU.
See https://ubuntu.com/download/risc-v.
wget https://cdimage.ubuntu.com/releases/22.04.4/release/ubuntu-22.04.4-preinstalled-server-riscv64+unmatched.img.xz
xz -dk ubuntu-22.04.4-preinstalled-server-riscv64+unmatched.img.xz
mv ubuntu-22.04.4-preinstalled-server-riscv64+unmatched.img rv64gc-hpc-2204.img
qemu-img resize rv64gc-hpc-2204.img +60Gqemu-system-riscv64 -machine virt -nographic \
-m 16384 -smp 8 \
-bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.elf \
-kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf \
-device virtio-net-device,netdev=eth0 \
-netdev user,id=eth0,hostfwd=tcp::5555-:22 \
-drive file=rv64gc-hpc-2204.img,format=raw,if=virtioUpon the first boot, when you try to login to the ubuntu account, the OS will ask you to change the password.
The default password is ubuntu.
The new password should be automato, which is specified in rv64gc-hpc.json.
Note: Before continuing the following step, please note that you should wait until the "OpenBSD Secure Shell server" (i.e., the SSH server) to be brought up before logging in to the guest machine. The SSH server bringing up might be slow, and it might be done after the login prompt appears on the guest system. If you tried to ssh to the guest before the SSH server is brought up, it will result in authentication error.
To login to the guest machine,
ssh -p 5555 ubuntu@localhostWhile the QEMU instance is running,
./packer build rv64gc-hpc.jsonSee https://cloud-images.ubuntu.com/.
wget https://cloud-images.ubuntu.com/releases/22.04/release-20230616/ubuntu-22.04-server-cloudimg-arm64.img
qemu-img convert ubuntu-22.04-server-cloudimg-arm64.img -O raw ./arm64-hpc-2204.img
qemu-img resize -f raw arm64-hpc-2204.img +60GThe default key path is ~/.ssh/id_rsa might overwrite a current key.
You can change the key path, and make a corresponding change in
arm64-hpc.json.
ssh-keygen -C "ubuntu@localhost"
ssh-add ~/.ssh/id_rsaTypically a cloud image will use cloud-init to initialize a cloud instance.
In this case, we will use cloud-init to set up an SSH key so that we can login
to the guest QEMU instance.
This is necessary as the downloaded cloud image does not contain any user.
Setting up a cloud init config allows us to create a user on the first boot.
We will create a file called cloud.txt to store the cloud init configuration.
Typically the configuration looks like,
#cloud-config
users:
- name: ubuntu
lock_passwd: false
groups: sudo
sudo: ['ALL=(ALL) NOPASSWD:ALL']
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa AAAAJLKFJEWOIJRNJF... <- insert the public key here (e.g., the content of ~/.ssh/id_rsa.pub)
Then, we create a cloud init image that we can input to qemu later,
cloud-localds --disk-format qcow2 cloud.img cloud.txtNote that this image is of the qcow2 format.
Without KVM,
dd if=/dev/zero of=flash0.img bs=1M count=64
dd if=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd of=flash0.img conv=notrunc
dd if=/dev/zero of=flash1.img bs=1M count=64
qemu-system-aarch64 -m 16384 -smp 8 -cpu cortex-a57 -M virt \
-nographic -pflash flash0.img -pflash flash1.img \
-drive if=none,file=arm64-hpc-2204.img,id=hd0 -device virtio-blk-device,drive=hd0 \
-drive if=none,id=cloud,file=cloud.img -device virtio-blk-device,drive=cloud \
-netdev user,id=user0 -device virtio-net-device,netdev=eth0 \
-netdev user,id=eth0,hostfwd=tcp::5555-:22With KVM,
dd if=/dev/zero of=flash0.img bs=1M count=64
dd if=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd of=flash0.img conv=notrunc
dd if=/dev/zero of=flash1.img bs=1M count=64
qemu-system-aarch64 -m 16384 -smp 8 -cpu host -M virt -M gic-version=3 --enable-kvm \
-nographic -pflash flash0.img -pflash flash1.img \
-drive if=none,file=arm64-hpc-2204.img,id=hd0 -device virtio-blk-device,drive=hd0 \
-drive if=none,id=cloud,file=cloud.img -device virtio-blk-device,drive=cloud \
-netdev user,id=user0 -device virtio-net-device,netdev=eth0 \
-netdev user,id=eth0,hostfwd=tcp::5555-:22While the QEMU instance is running,
./packer build arm64-hpc.jsonAfter packer finished the installation, the following commands will login to the QEMU instance and properly shutdown the machine. This is necessasry to make sure that the disk image is not corrupted.
ssh-add ~/.ssh/id_rsa
ssh -p 5555 ubuntu@localhost
[in guest] sudo poweroffThis is similar to building the arm disk image, except for the packer json file
is now arm64sve-hpc.json.
See https://cloud-images.ubuntu.com/.
wget https://cloud-images.ubuntu.com/releases/22.04/release-20230616/ubuntu-22.04-server-cloudimg-amd64.img
qemu-img convert ubuntu-22.04-server-cloudimg-amd64.img -O raw ./x86_64-hpc-2204.img
qemu-img resize -f raw ./x86_64-hpc-2204.img +60GThe default key path is ~/.ssh/id_rsa might overwrite a current key.
You can change the key path, and make a corresponding change in
x86_64-hpc.json.
ssh-keygen -C "ubuntu@localhost"
ssh-add ~/.ssh/id_rsaTypically a cloud image will use cloud-init to initialize a cloud instance.
In this case, we will use cloud-init to set up an SSH key so that we can login
to the guest QEMU instance.
This is necessary as the downloaded cloud image does not contain any user.
Setting up a cloud init config allows us to create a user on the first boot.
We will create a file called cloud.txt to store the cloud init configuration.
Typically the configuration looks like,
#cloud-config
users:
- name: ubuntu
lock_passwd: false
groups: sudo
sudo: ['ALL=(ALL) NOPASSWD:ALL']
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa AAAAJLKFJEWOIJRNJF... <- insert the public key here (e.g., the content of ~/.ssh/id_rsa.pub)
Then, we create a cloud init image that we can input to qemu later,
cloud-localds --disk-format qcow2 cloud.img cloud.txtNote that this image is of the qcow2 format.
qemu-system-x86_64 \
-nographic -m 16384 -smp 8 \
-device virtio-net-pci,netdev=eth0 -netdev user,id=eth0,hostfwd=tcp::5555-:22 \
-drive file=x86_64-hpc-2204.img,format=raw \
-drive if=none,id=cloud,file=cloud.img -device virtio-blk-pci,drive=cloudWhile the QEMU instance is running,
./packer build x86_64-hpc.jsonAfter packer finished the installation, the following commands will login to the QEMU instance and properly shutdown the machine. This is necessasry to make sure that the disk image is not corrupted.
ssh-add ~/.ssh/id_rsa
ssh -p 5555 ubuntu@localhost
[in guest] sudo poweroffWe recommend the following steps,
- Trying to ssh to the QEMU instance before calling
packer.
ssh -p 5555 ubuntu@localhostIn case of errors, the following commands might be useful,
ssh-keygen -f "$HOME/.ssh/known_hosts" -R "[localhost]:5555" # remove old fingerprints of localhost:5555
eval `ssh-agent -s` # this is useful when PACKER complains about getting SSH config: "packer-builder-null plugin: [DEBUG] Error getting SSH config: SSH_AUTH_SOCK is not set"
ssh-add ~/.ssh/id_rsa # need to add the identity file again after setting up the SSH agent- Trying to use
PACKER_LOGenvironment variable to see what is happening to the SSH connection, e.g.,
PACKER_LOG=1 ./packer build rv64gc-hpc.json