Thanks for sharing Stephan. I haven't been maintaining 4.17/4.18 arm64 systemvmtemplates, your guide and branch could help others in the user community who want to experiment with arm64. If your build doesn't break x86_64, you may even decide to raise a pull request to the upstream Github project.
Regards. ________________________________ From: Nux <[email protected]> Sent: Saturday, January 7, 2023 17:04 To: [email protected] <[email protected]> Cc: Stephan Bienek <[email protected]> Subject: Re: Cloudstack on arm64 and packer build systemvmtemplate success Stephan, That's amazing, thanks for sharing! --- Nux www.nux.ro On 2023-01-06 20:23, Stephan Bienek wrote: > Hello Cloudstack Users, > > following the blog of Rohit about how to install and run Cloudstack on > an Raspberry 4 using Ubuntu on arm64/aarch64 > ( https://www.shapeblue.com/apache-cloudstack-on-raspberrypi4-with-kvm/ > ) > and Rohits commits to cloudstack to support arm64 (thx Rohit!) i tried > it myself. > > For my setup i decided to use the latest release of Cloudstack without > any modifications, as Rohits commits were already merged. > Instead of using a Raspberry Pi4 i am using an Odroid M1, which shares > the arm64 architecture with the rpi4. > > The installation following the ACS documentation and/or Rohits blog > (without the special modifications required at that time) went quite > smooth. > > Missing automatic systemvmtemplate build > ---------------------------------------- > > One thing i felt still missing was how to build the required > systemvmtemplate (Consoleproxy, SSVM and VRs) for arm64. > Building the same automatic way on both - a x86_64 host, being able to > build the amd64 systemvmtemplate and the arm64 systemvmtemplate, > and/or directly building on the arm64 host would be great. > > After quite some work i figured the required changes and thought i'd > share them here to see if it helps someone else and if it's useful, > maybe the changes could contribute to cloudstack. > > All the existing logic using packer was kept, which is available for > amd64 and arm64. > > I created a fork and applied the changes in a branch at > https://github.com/StepBee/cloudstack/tree/add_systemvmtemplate_arm64_support > > The changes in code > ------------------- > > - changing debian preseed files > tools/appliance/systemvmtemplate/http/preseed.cfg to create an EFI > partition and instruct debian to copy /EFI/debian/grubaa64.efi to > /EFI/BOOT/BOOTAA64.efi > > Detailed changes can be found at > https://github.com/apache/cloudstack/commit/8f406e7fd1bcf9b71202fe526f0adaff40402884 > > - changing tools/appliance/systemvmtemplate/template.json packer > builder template(s) to provide the right qemuargs and adjust the > boot_commands, as these are quite different from amd64 builds, > increasing ssh_timeout and boot_wait > > Detailed changes can be found at > https://github.com/apache/cloudstack/commit/a7077a8453dc944048a236bb44e19beeffaec7f9 > > - changing tools/appliance/build.sh to support providing the target > architecture as first parameter and skip all non-kvm builds when > building for arm64 - building arm64 systemvmtemplate on x86_64 and > arm64 hosts is supported > - changing > tools/appliance/systemvmtemplate/scripts/install_systemvm_packages.sh > to handle repository additions etc for arm64 > > Detailed changes can be found at > https://github.com/apache/cloudstack/commit/fbacf5b2caed958e90ed4c134948aa4eb8dafed1 > > Required packages are based on the amd64 requirements plus, of course, > the arm/aarch64 qemu packages > - packer ( > https://developer.hashicorp.com/packer/tutorials/docker-get-started/get-started-install-cli > ) > - qemu-utils > - qemu-system-arm > - qemu-efi-aarch64 > > To build the arm64 systemvmtemplate: > - Cloning the branch from my fork > - cd tools/appliance/ > - ./build.sh aarch64 systemvmtemplate > > > Running Cloudstack > ------------------ > On arm64 i noticed the log was complaining about a missing > /etc/cloudstack/agent/uefi.properties > > Which could look like this one: > > guest.nvram.template.secure=/usr/share/AAVMF/AAVMF_VARS.snakeoil.fd > guest.nvram.template.legacy=/usr/share/AAVMF/AAVMF_VARS.fd > guest.loader.secure=/usr/share/AAVMF/AAVMF_CODE.snakeoil.fd > guest.nvram.path=/var/lib/libvirt/qemu/nvram/ > guest.loader.legacy=/usr/share/AAVMF/AAVMF_CODE.fd > > An additional hint for using cloud images: > Where most of the cloud images for amd64 work with cloudstack userdata > out of the box, i noticed most of the arm64/aarch64 cloud images are > missing the cloudstack datasource within the built-in cloud-init > config. > > Modification of the cloud images by placing the file > /etc/cloud/cloud.cfg.d/cloudstack.cfg with content: > datasource_list: ['CloudStack'] > datasource: > CloudStack: > max_wait: 120 > timeout: 50 > > in the qcow2 or raw images solves the issue. > > I hope it's helping the cloudstack community. > > Best regards, > Stephan
