Feasability of implementing Dual Boot Support for MAAS (Capstone Project)

Hello MAAS team and community,

Context

I’m a computer engineering student currently enrolled in my Capstone Project class.

During my internship in my university’s IT department, I had hands-on experience installing, configuring, and managing MAAS to automate the lifecycle of servers. It was a great introduction to bare-metal provisioning, but one use case became a limiting factor for MAAS fully replacing the legacy system: the lack of dual boot support . This is a must-have requirement for the institution, which needs to offer users a choice of operating system at boot time on shared hardware.

Proposal

I would like to contribute to the MAAS project by providing the implementation and documentation for a Dual Boot Support feature. My goal would be to enable operators to configure nodes where end users can select between multiple operating systems during the boot process.

Request

To scope this work realistically, I would be very grateful for any pointers or answers the community or maintainers could provide on the following questions:

  • Is such a project viable in a 3-month window for a single developer? (I have roughly 3 months dedicated to this)
  • What software modules would likely be impacted? (e.g., node model, curtin integration, PXE/iPXE configuration, boot resources, region/rack communication)
  • Is there interest in this feature? If I were to submit a well-structured pull request, would there be a path to getting it merged?
1 Like

Hi there, I appreciate the interest! Do you aim to deploy Ubuntu onto existing servers running windows? Do you want to resize the windows partition and deploy Ubuntu beside windows?

Hi @r00ta, sorry for the delay getting back to you.

The proposed PR would ideally consider two scenarios: the commissioned node already has Ubuntu or Windows installed, or it has no OS installed.

For a first pass at the feature, I believe your approach of resizing the Windows partition is simple enough. This would allow a proof of concept to be developed and more easily iterated upon.

Does this sound reasonable as a starting point?

Implementing this feature is not that simple, and it does not fit the MAAS values at the first glimpse. In order to support this feature, you’ll need to add a state to the disks of the machine to keep track of the OS and its size. Then you would have to model the storage layout in MAAS taking care of this and then you would have to instruct curtin to resize the partitions accordingly. If I may suggest, I’d not start with the idea to have this feature supported upstream. I’d suggest to make a PoC and achieve what you need, and if you are successful you can propose a more concrete plan to get it implemented in upstream. wdyt?

The suggestion is fine. I have experience with MAAS as an operator, but not as a contributor, so the PoC is a great opportunity to get acquainted with the MAAS codebase.

Your technical pointers (disk state tracking, storage layout, curtin integration) are incredibly helpful, they provide an answer to the second question in the first post and also to gauge the complexity of the work which indirectly answer the first question.

I’ll start the work on the PoC.