mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-10-31 08:50:30 +00:00 
			
		
		
		
	Merge pull request #1955 from davefreitag/25g
Adding Dynamic VHD mkimage package
This commit is contained in:
		
							
								
								
									
										5
									
								
								tools/mkimage-dynamic-vhd/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								tools/mkimage-dynamic-vhd/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| FROM linuxkit/guestfs:2657580764d5791e103647237dac5a0276533e2e@sha256:8f99eba6720df17bce8893052d7ca9a07cdc9cd09b335a5a9c57ebd5a44934be | ||||
|  | ||||
| COPY . . | ||||
|  | ||||
| ENTRYPOINT [ "/make-dynamic-vhd" ] | ||||
							
								
								
									
										27
									
								
								tools/mkimage-dynamic-vhd/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								tools/mkimage-dynamic-vhd/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| .PHONY: tag push | ||||
|  | ||||
| IMAGE=mkimage-dynamic-vhd | ||||
|  | ||||
| default: push | ||||
|  | ||||
| hash: Dockerfile make-dynamic-vhd | ||||
| 	tar cf - $^ | docker build --no-cache -t $(IMAGE):build - | ||||
| 	docker run --entrypoint sh --rm $(IMAGE):build -c "(cat $^; apt list --installed 2>/dev/null) | sha1sum" | sed 's/ .*//' > hash | ||||
|  | ||||
| push: hash | ||||
| 	docker pull linuxkit/$(IMAGE):$(shell cat hash) || \ | ||||
| 		(docker tag $(IMAGE):build linuxkit/$(IMAGE):$(shell cat hash) && \ | ||||
| 		 docker push linuxkit/$(IMAGE):$(shell cat hash)) | ||||
| 	docker rmi $(IMAGE):build | ||||
| 	rm -f hash | ||||
|  | ||||
| tag: hash | ||||
| 	docker pull linuxkit/$(IMAGE):$(shell cat hash) || \ | ||||
| 		docker tag $(IMAGE):build linuxkit/$(IMAGE):$(shell cat hash) | ||||
| 	docker rmi $(IMAGE):build | ||||
| 	rm -f hash | ||||
|  | ||||
| clean: | ||||
| 	rm -f hash | ||||
|  | ||||
| .DELETE_ON_ERROR: | ||||
							
								
								
									
										59
									
								
								tools/mkimage-dynamic-vhd/make-dynamic-vhd
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										59
									
								
								tools/mkimage-dynamic-vhd/make-dynamic-vhd
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| set -e | ||||
|  | ||||
| mkdir -p /tmp/image | ||||
| cd /tmp/image | ||||
|  | ||||
| # input is a tarball of kernel and initrd.img on stdin | ||||
| # output is a vmdk on stdout | ||||
|  | ||||
| mkdir -p files | ||||
|  | ||||
| cd files | ||||
|  | ||||
| # extract. As guestfs base is currently Debian, no compression support | ||||
| # only if stdin is a tty, if so need files volume mounted... | ||||
| [ -t 0 ] || tar xf - | ||||
|  | ||||
| INITRD="$(find . -name '*.img')" | ||||
| KERNEL="$(find . -name kernel -or -name '*bzImage')" | ||||
| CMDLINE="$*" | ||||
|  | ||||
| [ "$KERNEL" = "./kernel" ] || mv "$KERNEL" vmlinuz64 | ||||
| [ "$INITRD" = "./initrd.img" ] || mv "$INITRD" initrd.img | ||||
|  | ||||
| # clean up subdirectories | ||||
| find . -mindepth 1 -maxdepth 1 -type d | xargs rm -rf | ||||
|  | ||||
| CFG="DEFAULT linux | ||||
| LABEL linux | ||||
|     KERNEL /kernel | ||||
|     INITRD /initrd.img | ||||
|     APPEND ${CMDLINE} | ||||
| " | ||||
|  | ||||
| printf "$CFG" > syslinux.cfg | ||||
|  | ||||
| cd .. | ||||
|  | ||||
| tar cf files.tar -C files . | ||||
|  | ||||
| # Disk is created in qcow format. | ||||
| virt-make-fs --size=25G --type=ext4 --partition files.tar --format=qcow2 disk.qcow | ||||
|  | ||||
| guestfish -a disk.qcow -m /dev/sda1 <<EOF | ||||
|   upload /usr/lib/SYSLINUX/mbr.bin /mbr.bin | ||||
|   copy-file-to-device /mbr.bin /dev/sda size:440 | ||||
|   rm /mbr.bin | ||||
|   extlinux / | ||||
|   part-set-bootable /dev/sda 1 true | ||||
| EOF | ||||
|  | ||||
| # Can't convert directly to VHD, as it's not supported by qemu-img. First, compress qcow image to vmdk format. | ||||
| qemu-img convert -f qcow2 -O vmdk -o adapter_type=lsilogic,subformat=streamOptimized,compat6 -c disk.qcow disk.vmdk 1>&2 | ||||
|  | ||||
| # Then create dynamic VHD | ||||
| qemu-img convert -f vmdk -O vpc -o subformat=dynamic disk.vmdk disk.vhd 1>&2 | ||||
|  | ||||
| cat disk.vhd | ||||
		Reference in New Issue
	
	Block a user