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: | # 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 | # $TMP_HOOKS_PATH/bin/extract-image $BASE_IMAGE_FILE $BASE_IMAGE_TAR $IMAGE_LOCATION $CACHED_IMAGE | ||||||
|  |  | ||||||
|  |  | ||||||
| set -eu | set -eu | ||||||
| set -o pipefail | set -o pipefail | ||||||
|  |  | ||||||
| @@ -61,6 +60,10 @@ function extract_image() { | |||||||
|             #      the device used for the image. |             #      the device used for the image. | ||||||
|             ROOT_LOOPDEV=$(sudo kpartx -av $WORKING/$RAW_FILE | \ |             ROOT_LOOPDEV=$(sudo kpartx -av $WORKING/$RAW_FILE | \ | ||||||
|                 awk "/loop[0-9]+$ROOT_PARTITON/ {print \$3}") |                 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 |             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" |                 echo "Error: Could not find /dev/mapper/$ROOT_LOOPDEV" | ||||||
|                 exit 1 |                 exit 1 | ||||||
|   | |||||||
| @@ -35,6 +35,10 @@ else | |||||||
|         # NOTE: On RHEL, partprobe of /dev/loop0 does not create /dev/loop0p2, |         # NOTE: On RHEL, partprobe of /dev/loop0 does not create /dev/loop0p2, | ||||||
|         # while kpartx at least creates /dev/mapper/loop0p2. |         # while kpartx at least creates /dev/mapper/loop0p2. | ||||||
|         LOOPDEV=$(sudo kpartx -av $WORKING/$RAW_FILE | awk "/loop[0-9]+$MAGIC_BIT/ {print \$3}") |         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 |         export LOOPDEV=$LOOPDEV | ||||||
|         echo "Loop device is set to: $LOOPDEV" |         echo "Loop device is set to: $LOOPDEV" | ||||||
|         if ! timeout 5 sh -c "while ! [ -e /dev/mapper/$LOOPDEV ]; do sleep 1; done"; then |         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 | # If the partition isn't under /dev/loop*p1, create it with kpartx | ||||||
| DM= | DM= | ||||||
| if [ ! -e "${IMAGE_BLOCK_DEVICE}p1" ]; then | if [ ! -e "${IMAGE_BLOCK_DEVICE}p1" ]; then | ||||||
|     sudo kpartx -asv $TMP_IMAGE_PATH |  | ||||||
|     DM=${IMAGE_BLOCK_DEVICE/#\/dev/\/dev\/mapper} |     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 | fi | ||||||
|  |  | ||||||
| if [ -n "$DM" ]; then | if [ -n "$DM" ]; then | ||||||
|   | |||||||
| @@ -195,7 +195,7 @@ function detach_loopback() { | |||||||
|     loopdev_name=$(echo $loopdev | sed 's/\/dev\///g') |     loopdev_name=$(echo $loopdev | sed 's/\/dev\///g') | ||||||
|     mapper_name=$(sudo dmsetup ls | grep $loopdev_name | awk '{ print $1 }') |     mapper_name=$(sudo dmsetup ls | grep $loopdev_name | awk '{ print $1 }') | ||||||
|     if [ "$mapper_name" ]; then |     if [ "$mapper_name" ]; then | ||||||
|         sudo dmsetup remove $mapper_name |         sudo dmsetup --noudevsync remove $mapper_name | ||||||
|     fi |     fi | ||||||
|  |  | ||||||
|     # loopback dev may be tied up a bit by udev events triggered by partition events |     # loopback dev may be tied up a bit by udev events triggered by partition events | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jenkins
					Jenkins