Go to file
Ian Wienand 5284564071 Unmount internal mounts on finalise errors
This is only one line, but it takes a lot to untangle ...  basically
the current "correct" path is:

---
 mk_build_dir()
  -> sets trap trap_cleanup EXIT

 ... stuff ..

 mount_proc_dev_sys
  -> mounts $TMP_MOUNT_PATH/<proc,dev.sysfs>

 pre-finalise.d
 finalise.d

 unmount_image $TMP_BUILD_DIR/mnt # nb == $TMP_MOUNT_PATH
  -> unmount_dir()
   -> recursive unmount everything inside TMP_MOUNT_PATH

 TMP_IMAGE_PATH=$(dib-block-device getval image-path)
 export TMP_IMAGE_PATH

 dib-block-device umount
 dib-block-device cleanup

 ... actually cleanup directories ...
---

Our current failure exit trap does:

---
 dib-block-device umount
 unmount_image
 ...
---

Note this is the *opposite* of what is done in the correct exit path.
In the failure case, if a script fails in the finalise stages it leads
to /proc, /sys, /dev etc. still being mounted inside the image; the
"dib-block-device umount" call doesn't know anything about these
mounts and tries to unmount the parent directory, and we get a hard
failure with a busy mount, and all the mounts are subsequently leaked.

Note that "unmount_dir", which is ultimately called by
"unmount_image", already knows to skip those mounts that
"dib-block-device umount" manages (this is the DIB_MOUNTPOINTS list).
This is further evidence it should be called *before* the
dib-block-device umount.

Change-Id: Ibef3ce9d1167b9c4ff3d5717b113cd3ed374f5e3
2019-03-13 16:38:49 +11:00
.zuul.d Use template for lower-constraints 2018-12-20 21:56:05 +01:00
bin Check source-repository-* files for trailing newline 2017-12-08 14:24:57 +11:00
contrib Native zuulv3 tests 2018-10-29 12:46:15 +11:00
diskimage_builder Unmount internal mounts on finalise errors 2019-03-13 16:38:49 +11:00
doc Update to Fedora 29 2018-11-16 09:05:08 +00:00
playbooks/dib-functests Remove legacy playbooks 2018-10-29 12:46:25 +11:00
releasenotes Merge "simple-init: allow for NetworkManager support" 2019-01-09 03:38:25 +00:00
roles Update to Fedora 29 2018-11-16 09:05:08 +00:00
tests Capture ramdisk test run logs 2018-11-28 11:04:50 +11:00
.gitignore Import legacy playbooks 2017-10-17 10:41:30 +11:00
.gitreview Update stackforge references to openstack 2013-08-17 22:58:26 -04:00
.testr.conf package-installs: provide for skip from env var 2018-11-30 10:02:47 +11:00
babel.cfg Make it possible for openstack-CI to run tests 2013-02-04 22:26:17 -08:00
bindep.txt Add python3-setuptools to bindep.txt for Fedora 2019-01-22 13:00:06 +01:00
LICENSE Fix copyrights for HP work. 2012-11-15 16:20:32 +13:00
lower-constraints.txt add lower-constraints job 2018-04-06 01:23:10 -04:00
pylint.cfg Refactor: use lazy logging 2017-05-30 14:39:58 +10:00
README.rst Update the documentation link for doc migration 2017-07-17 16:12:12 +10:00
requirements.txt Update pylint to 1.7.6, uncap networkx 2018-07-18 09:27:01 +10:00
setup.cfg [Core] Change openstack-dev to openstack-discuss. 2019-01-09 11:40:30 +01:00
setup.py Updated from global requirements 2017-03-13 19:30:19 +00:00
test-requirements.txt Only cap pylint for python2 2018-11-26 16:36:53 +11:00
tox.ini [Configuration] Add missing py37 and corrected default envlist. 2019-01-09 11:41:22 +01:00

Image building tools for OpenStack
==================================

``diskimage-builder`` is a flexible suite of components for building a
wide-range of disk images, filesystem images and ramdisk images for
use with OpenStack.

This repository has the core functionality for building such images,
both virtual and bare metal.  Images are composed using `elements`;
while fundamental elements are provided here, individual projects have
the flexibility to customise the image build with their own elements.

For example::

  $ DIB_RELEASE=trusty disk-image-create -o ubuntu-trusty.qcow2 vm ubuntu

will create a bootable Ubuntu Trusty based ``qcow2`` image.

``diskimage-builder`` is useful to anyone looking to produce
customised images for deployment into clouds.  These tools are the
components of `TripleO <https://wiki.openstack.org/wiki/TripleO>`__
that are responsible for building disk images.  They are also used
extensively to build images for testing OpenStack itself, particularly
with `nodepool
<https://docs.openstack.org/infra/system-config/nodepool.html>`__.
Platforms supported include Ubuntu, CentOS, RHEL and Fedora.

Full documentation, the source of which is in ``doc/source/``, is
published at:

* https://docs.openstack.org/diskimage-builder/latest/

Copyright
=========

Copyright 2012 Hewlett-Packard Development Company, L.P.
Copyright (c) 2012 NTT DOCOMO, INC.

All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.