Merge "Use Dracut for building ramdisks"
This commit is contained in:
commit
de21c5c7fd
176
specs/juno/tripleo-juno-dracut-ramdisks.rst
Normal file
176
specs/juno/tripleo-juno-dracut-ramdisks.rst
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
======================
|
||||||
|
Dracut Deploy Ramdisks
|
||||||
|
======================
|
||||||
|
|
||||||
|
Include the URL of your launchpad blueprint:
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/tripleo/+spec/tripleo-juno-dracut-ramdisks
|
||||||
|
|
||||||
|
Our current deploy ramdisks include functionality that is duplicated from
|
||||||
|
existing tools such as Dracut, and do not include some features that those
|
||||||
|
tools do. Reimplementing our deploy ramdisks to use Dracut would shrink
|
||||||
|
our maintenance burden for that code and allow us to take advantage of those
|
||||||
|
additional features.
|
||||||
|
|
||||||
|
Problem Description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Currently our deploy ramdisks are implemented as a bash script that runs
|
||||||
|
as init during the deploy process. This means that we are responsible for
|
||||||
|
correctly configuring things such as udev and networking which would normally
|
||||||
|
be handled by distribution tools. While this isn't an immediate problem
|
||||||
|
because the implementation has already been done, it is an unnecessary
|
||||||
|
duplication and additional maintenance debt for the future as we need to add
|
||||||
|
or change such low-level functionality.
|
||||||
|
|
||||||
|
In addition, because our ramdisk is a one-off, users will not be able to make
|
||||||
|
use of any ramdisk troubleshooting methods that they might currently know.
|
||||||
|
This is an unnecessary burden when there are tools to build ramdisks that are
|
||||||
|
standardized and well-understood by the people using our software.
|
||||||
|
|
||||||
|
Proposed Change
|
||||||
|
===============
|
||||||
|
|
||||||
|
The issues discussed above can be dealt with by using a standard tool such as
|
||||||
|
Dracut to build our deploy ramdisks. This will actually result in a reduction
|
||||||
|
in code that we have to maintain and should be compatible with all of our
|
||||||
|
current ramdisks because we can continue to use the same method of building
|
||||||
|
the init script - it will just run as a user script instead of process 0,
|
||||||
|
allowing Dracut to do low-level configuration for us.
|
||||||
|
|
||||||
|
Initially this will be implemented alongside the existing ramdisk element to
|
||||||
|
provide a fallback option if there are any use cases not covered by the
|
||||||
|
initial version of the Dracut ramdisk.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
For consistency with the rest of Red Hat/Fedora's ramdisks I would prefer to
|
||||||
|
implement this using Dracut, but if there is a desire to also make use of
|
||||||
|
another method of building ramdisks, that could probably be implemented
|
||||||
|
alongside Dracut. The current purely script-based implementation could even
|
||||||
|
be kept in parallel with a Dracut version. However, I believe Dracut is
|
||||||
|
available on all of our supported platforms so I don't see an immediate need
|
||||||
|
for alternatives.
|
||||||
|
|
||||||
|
Additionally, there is the option to replace our dynamically built init
|
||||||
|
script with Dracut modules for each deploy element. This is probably
|
||||||
|
unnecessary as it is perfectly fine to use the current method with Dracut,
|
||||||
|
and using modules would tightly couple our deploy ramdisks to Dracut, making
|
||||||
|
it difficult to use any alternatives in the future.
|
||||||
|
|
||||||
|
Security Impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The same security considerations that apply to the current deploy ramdisk
|
||||||
|
would continue to apply to Dracut-built ones.
|
||||||
|
|
||||||
|
Other End User Impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
This change would enable end users to make use of any Dracut knowledge they
|
||||||
|
might already have, including the ability to dynamically enable tracing
|
||||||
|
of the commands used to do the deployment (essentially set -x in bash).
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Because Dracut supports more hardware and software configurations, it is
|
||||||
|
possible there will be some additional overhead during the boot process.
|
||||||
|
However, I would expect this to be negligible in comparison to the time it
|
||||||
|
takes to copy the image to the target system, so I see it as a reasonable
|
||||||
|
tradeoff.
|
||||||
|
|
||||||
|
Other Deployer Impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
As noted before, Dracut supports a wide range of hardware configurations,
|
||||||
|
so deployment methods that currently wouldn't work with our script-based
|
||||||
|
ramdisk would become available. For example, Dracut supports using network
|
||||||
|
disks as the root partition, so running a diskless node with separate
|
||||||
|
storage should be possible.
|
||||||
|
|
||||||
|
Developer Impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
There would be some small changes to how developers would add a new dependency
|
||||||
|
to the ramdisk images. Instead of executables and their required libraries
|
||||||
|
being copied to the ramdisk manually, the executable can simply be added to
|
||||||
|
the list of things Dracut will include in the ramdisk.
|
||||||
|
|
||||||
|
Developers would also gain the dynamic tracing ability mentioned above in
|
||||||
|
the end user impact.
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
bnemec
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Convert the ramdisk element to use Dracut (see WIP change in References).
|
||||||
|
|
||||||
|
* Verify that DHCP booting of ramdisks still works.
|
||||||
|
|
||||||
|
* Verify that nova-baremetal ramdisks can be built successfully with Dracut.
|
||||||
|
|
||||||
|
* Verify that Ironic ramdisks can be built successfully with Dracut.
|
||||||
|
|
||||||
|
* Verify that Dracut can build Ironic-IPA ramdisks.
|
||||||
|
|
||||||
|
* Verify the Dracut debug shell provides equivalent functionality to the
|
||||||
|
existing one.
|
||||||
|
|
||||||
|
* Provide ability for other elements to install additional files to the
|
||||||
|
ramdisk.
|
||||||
|
|
||||||
|
* Provide ability for other elements to include additional drivers.
|
||||||
|
|
||||||
|
* Find a way to address potential 32-bit binaries being downloaded and run in
|
||||||
|
the ramdisk for firmware deployments.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
This would add a dependency on Dracut for building ramdisks.
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
Since building deploy ramdisks is already part of CI, this should be covered
|
||||||
|
automatically. If it is implemented in parallel with another method, then
|
||||||
|
the CI jobs would need to be configured to exercise the different methods
|
||||||
|
available.
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
We would want to document the additional features available in Dracut.
|
||||||
|
Otherwise this should function in essentially the same way as the current
|
||||||
|
ramdisks, so any existing documentation will still be valid.
|
||||||
|
|
||||||
|
Some minor developer documentation changes may be needed to address the
|
||||||
|
different ways Dracut handles adding extra kernel modules and files.
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
* Dracut: https://dracut.wiki.kernel.org/index.php/Main_Page
|
||||||
|
|
||||||
|
* PoC of building ramdisks with Dracut:
|
||||||
|
https://review.openstack.org/#/c/105275/
|
||||||
|
|
||||||
|
* openstack-dev discussion:
|
||||||
|
http://lists.openstack.org/pipermail/openstack-dev/2014-July/039356.html
|
Loading…
Reference in New Issue
Block a user