Merge "Make diskimage-builder work in Docker."
This commit is contained in:
		| @@ -3,7 +3,6 @@ | ||||
| # Intended to be called from the root.d cloud-image script as follows: | ||||
| # $TMP_HOOKS_PATH/bin/extract-image $BASE_IMAGE_FILE $BASE_IMAGE_TAR $IMAGE_LOCATION $CACHED_IMAGE | ||||
|  | ||||
|  | ||||
| set -eu | ||||
| set -o pipefail | ||||
|  | ||||
| @@ -61,6 +60,10 @@ function extract_image() { | ||||
|             #      the device used for the image. | ||||
|             ROOT_LOOPDEV=$(sudo kpartx -av $WORKING/$RAW_FILE | \ | ||||
|                 awk "/loop[0-9]+$ROOT_PARTITON/ {print \$3}") | ||||
|             # If running inside Docker, make our nodes manually, because udev will not be working. | ||||
|             if [ -f /.dockerenv ]; then | ||||
|                 sudo dmsetup --noudevsync mknodes | ||||
|             fi | ||||
|             if ! timeout 5 sh -c "while ! [ -e /dev/mapper/$ROOT_LOOPDEV ]; do sleep 1; done"; then | ||||
|                 echo "Error: Could not find /dev/mapper/$ROOT_LOOPDEV" | ||||
|                 exit 1 | ||||
|   | ||||
| @@ -35,6 +35,10 @@ else | ||||
|         # NOTE: On RHEL, partprobe of /dev/loop0 does not create /dev/loop0p2, | ||||
|         # while kpartx at least creates /dev/mapper/loop0p2. | ||||
|         LOOPDEV=$(sudo kpartx -av $WORKING/$RAW_FILE | awk "/loop[0-9]+$MAGIC_BIT/ {print \$3}") | ||||
|         # If running inside Docker, make our nodes manually, because udev will not be working. | ||||
|         if [ -f /.dockerenv ]; then | ||||
|             sudo dmsetup --noudevsync mknodes | ||||
|         fi | ||||
|         export LOOPDEV=$LOOPDEV | ||||
|         echo "Loop device is set to: $LOOPDEV" | ||||
|         if ! timeout 5 sh -c "while ! [ -e /dev/mapper/$LOOPDEV ]; do sleep 1; done"; then | ||||
|   | ||||
| @@ -22,8 +22,15 @@ sudo udevadm settle | ||||
| # If the partition isn't under /dev/loop*p1, create it with kpartx | ||||
| DM= | ||||
| if [ ! -e "${IMAGE_BLOCK_DEVICE}p1" ]; then | ||||
|     sudo kpartx -asv $TMP_IMAGE_PATH | ||||
|     DM=${IMAGE_BLOCK_DEVICE/#\/dev/\/dev\/mapper} | ||||
|     # If running inside Docker, make our nodes manually, because udev will not be working. | ||||
|     if [ -f /.dockerenv ]; then | ||||
|         # kpartx cannot run in sync mode in docker. | ||||
|         sudo kpartx -av $TMP_IMAGE_PATH | ||||
|         sudo dmsetup --noudevsync mknodes | ||||
|     else | ||||
|         sudo kpartx -asv $TMP_IMAGE_PATH | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| if [ -n "$DM" ]; then | ||||
|   | ||||
| @@ -195,7 +195,7 @@ function detach_loopback() { | ||||
|     loopdev_name=$(echo $loopdev | sed 's/\/dev\///g') | ||||
|     mapper_name=$(sudo dmsetup ls | grep $loopdev_name | awk '{ print $1 }') | ||||
|     if [ "$mapper_name" ]; then | ||||
|         sudo dmsetup remove $mapper_name | ||||
|         sudo dmsetup --noudevsync remove $mapper_name | ||||
|     fi | ||||
|  | ||||
|     # loopback dev may be tied up a bit by udev events triggered by partition events | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jenkins
					Jenkins