<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Sun, Sep 4, 2016 at 9:28 AM Lars Wirzenius <<a href="mailto:liw@liw.fi">liw@liw.fi</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi, all.<br>
<br>
I am the original author vmdebootstrap. It started as a quick hack to<br>
let me create disk images for virtual machines without doing a manual<br>
install with debian-installer. I didn't want to do it manually,<br>
because I needed six images that only varied with Debian release and<br>
CPU architecture: I was setting up a CI system test Obnam on Debian<br>
oldstable, stable, and unstable, on i386 and amd64 targets.<br>
<br>
Much to my surprise, a few other people seemed to like vmdebootstrap.<br>
This led to some feature requests and other maintenance burden I<br>
wasn't ready for, and as a result I turned over the project to Neil<br>
Williams. Neil took good care of it for a couple of years, adding things<br>
like grub support, and foreign architecture support, and other things I<br>
haven't yet found. Many thanks to Neil.<br>
<br>
Neil has now asked me to take vmdebootstrap back, and I have agreed to<br>
do so, partly because I need it at work and at home.<br>
<br>
I would like to see vmdebootstrap grow into a tool that adequately<br>
handles all of Debian's image creation needs. I am currently thinking<br>
particularly of the following use cases:<br>
<br>
* Create VM images for libvirt + kvm (which is what I use at home).<br>
<br>
* Create VM images for all the cloud services: OpenStack, AWS, etc. I<br>
  don't know what they all are (I've only used OpenStack and AWS), and<br>
  I'm not on expert on any of them (but we use OpenStack at work). As<br>
  such, I'll certainly need help with them.<br>
<br>
* Create disk images for actual hardware. I have installed two of my<br>
  servers at home like this: I generate a disk image with<br>
  vmdebootstrap, write that to a USB stick with dd, and then boot off<br>
  the stick. The initial image is very barebones, and I use Ansible to<br>
  do any additional configuration (and specifically I don't use the<br>
  vmdebootstrap customization script).<br>
<br>
  I imagine this would also be useful to many who want to hack on ARM<br>
  devboards, and such, but again, that isn't something I'm an expert<br>
  on.<br>
<br>
These are the overall classes, but each specific use may have its<br>
unique requirements. For example, there's been some recent discussion<br>
of how customizable partitioning should vmdebootstrap support. My<br>
opinion is that it should support anything users need, even if the<br>
tool becomes more complex. As an example, I have a personal need to be<br>
able to create a bootable image that has /boot in cleartext and<br>
everything else encrypted, with LVM.<br>
<br>
There may be other use cases that I haven't thought of yet. Please<br>
tell me. There may be features vmdebootstrap currently lacks that you<br>
really, really want. Tell me.<br>
<br>
I wish to maintain vmdebootstrap so that it serves its users and that<br>
requires it to be quite flexible. The challenge for me is to come up<br>
with a way to be flexible while keeping complexity at a manageable<br>
level.<br>
<br>
I also want vmdebootstrap to be pleasant to use. What hinders you from<br>
enjoying vmdebootstrap? Tell me.<br>
<br>
The other challenge is that I think the code quality is not great. It<br>
started as a quick hack, without automated tests, and that's how it<br>
was when I gave the project to Neil. Some tests have since been added,<br>
but not enough, I feel. This is not Neil's fault in any way: the mess<br>
he inherited was something I feel ashamed of. I intend to improve the<br>
code quality massively. I want a thorough unit test suite, and I want<br>
to extend the integration tests so that the images they create also<br>
get tested.<br>
<br>
This is all a lot of work. I would like help from others. A lot of<br>
things are mysterious to me. Would you like to help? What are concrete<br>
things you yourself could do or would like to do? Tell me.<br>
<br>
I am aware that there are other tools than vmdebootstrap. The most<br>
common other choice seems to be bootstrap-vz. I haven't used it; it's<br>
possible that it could be enhanced to replace vmdebootstrap and that<br>
my project should thus be dropped. From a cursory skim of the<br>
documentation, it seems to not target bare hardware at all, and that's<br>
one of the things I need myself. If you have opinions on this, tell<br>
me.<br>
<br>
My own next actions with regards to vmdebootstrap is to review the<br>
currently open bugs, the code base, and find enough small changes to<br>
make to warrant an upload to change Maintainer/Uploaders.<br>
<br>
--<br>
I want to build worthwhile things that might last. --joeyh<br></blockquote><div><br></div><div>Hello Lars and all</div><div><br></div><div>I am the original author of bootstrap-vz.</div><div>Just this morning (around half an hour before you wrote your mail)</div><div>I decided <span style="line-height:1.5">that I would no longer be able to maintain the project,</span></div><div>since I simply don't have enough free time to allot to it</div><div>(or rather, I have other projects I'd rather spend my time on).</div><div>Additionally we are switching to a dockerized setup <span style="line-height:1.5">at work, </span><span style="line-height:1.5">which means</span></div><div><span style="line-height:1.5">the amount of real-world problems I encounter,</span></div><div><span style="line-height:1.5">whose solutions could improve bootstrap-vz, is reduced.</span></div><div><br></div><div>The co-maintainer of bootstrap-vz is Tiago Ileve, whom I wrote</div><div>this morning to offer the project.</div><div>Regretfully he declined, because of no free time in general.</div><div><br></div><div>Would you be interested in taking over bootstrap-vz instead?</div><div>I was planning on making an open offer to the mailing list,</div><div>but I think you'd be the perfect fit.</div><div><br></div><div>I'd like to think that the code quality, maintainability and</div><div>documentation of bootstrap-vz <span style="line-height:1.5">is top notch, </span><span style="line-height:1.5">which would ease the transition.</span></div><div><span style="line-height:1.5">You mentioned hardware support - </span><span style="line-height:1.5">bootstrap-vz was originally</span></div><div><span style="line-height:1.5">intended for virtualized environments, </span><span style="line-height:1.5">but I have myself been</span></div><div><span style="line-height:1.5">close to implementing support </span><span style="line-height:1.5">for e.g. RaspberryPi </span><span style="line-height:1.5">mostly because</span></div><div><span style="line-height:1.5">I believed it would be pretty easy (though I didn't get around to doing it).</span></div><div>I think general hardware support would be fairly trivial as well, there already is support</div><div>for both <span style="line-height:1.5">grub and extlinux bootloaders. Disks can be partitioned with</span></div><div><span style="line-height:1.5">msdos, gpt or not at all.</span></div><div><span style="line-height:1.5"><br></span></div><div>> As an example, I have a personal need to be <span style="line-height:1.5">able to create a bootable</span></div><div><span style="line-height:1.5">> image that has /boot in cleartext and </span><span style="line-height:1.5">everything else encrypted, with LVM.</span></div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">I never got around to implementing LVM support, but I am fairly certain that the</span></div><div><span style="line-height:1.5"><a href="https://github.com/andsens/bootstrap-vz/tree/b9d63b701df3e7757a6f3c3336ce2cc71af6b4b2/bootstrapvz/base/fs">partition abstraction code</a> could be extended without too much trouble.</span></div><div><br></div><div><div><span style="line-height:1.5">> </span>Create VM images for libvirt + kvm (which is what I use at home).</div><div><br></div><div><a href="https://github.com/andsens/bootstrap-vz/tree/b9d63b701df3e7757a6f3c3336ce2cc71af6b4b2/bootstrapvz/providers/kvm">bootstrap-vz has kvm support</a>.</div></div><div><br></div><div><div>> The initial image is very barebones, and I use Ansible to<span style="line-height:1.5"> do any additional configuration</span></div></div><div><span style="line-height:1.5"><br></span></div><div>bootstrap-vz has <a href="https://github.com/andsens/bootstrap-vz/tree/b9d63b701df3e7757a6f3c3336ce2cc71af6b4b2/bootstrapvz/plugins/ansible">an ansible plugin</a> for running playbooks (and for <a href="https://github.com/andsens/bootstrap-vz/tree/b9d63b701df3e7757a6f3c3336ce2cc71af6b4b2/bootstrapvz/plugins/puppet">puppet</a>)<span style="line-height:1.5"><br></span></div><div><br></div><div>Regarding maintainability: bootstrap-vz is around 7k lines of code,</div><div>most of that code is part of the common architecture and the common tasks.</div><div>Provider specific code averages at about 200 lines, so there is loads of reuse going on.</div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">> </span>I want a thorough unit test suite</div><div><br></div><div><a href="https://github.com/andsens/bootstrap-vz/tree/b9d63b701df3e7757a6f3c3336ce2cc71af6b4b2/tests">Here you go</a><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">> </span><span style="line-height:1.5">and I want </span><span style="line-height:1.5">to extend the integration </span><span style="line-height:1.5">tests so that the images they create also </span><span style="line-height:1.5">get tested.</span></div><div><br></div><div><a href="https://github.com/andsens/bootstrap-vz/tree/b9d63b701df3e7757a6f3c3336ce2cc71af6b4b2/tests/system">Done</a>... well, the testing harness is done and you can bootstrap machines</div><div><span style="line-height:1.5">from </span>scratch and start them automatically.</div><div>I never got around to SSHing into the machines, <span style="line-height:1.5">and running test commands,</span></div><div><span style="line-height:1.5">which is like... running a marathon and then sitting down and</span></div><div><span style="line-height:1.5">drinking a beer right in front of the </span><span style="line-height:1.5">finish line.</span></div><div><span style="line-height:1.5">I have distilled the bootstrapping, image copying, booting and teardown into to this line:</span></div><div>    <i>with boot_manifest(manifest_data, boot_vars) as instance:</i><br></div><div>For EC2 this includes a temporary VPC and subnet creation,</div><div>for virtualbox it means creation of a virtual machine through VBoxManage and on docker</div><div>the image is automatically imported to the repo.</div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">I hope I am not trying to sell bootstrap-vz too hard, I just believe that the</span><br></div><div><div><span style="line-height:1.5">reproducability and ease of configuration of images offers something</span></div><div><span style="line-height:1.5">that other bootstrappers do not.</span></div></div><div><div><br></div><div>Also: Please know that I will not just abruptly stop my involvment in bootstrap-vz,</div><div>I will most certainly be available <span style="line-height:1.5">for questions and would love to help the transition</span></div><div><span style="line-height:1.5">process as much as possible.</span></div></div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">So, what do you think? :-)</span></div></div></div><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature"><div dir="ltr"><div>Anders Ingemann<br></div></div></div>