mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-19 01:06:27 +00:00
Merge pull request #1896 from justincormack/mkimage
Add a mkimage package
This commit is contained in:
commit
905ded081e
23
pkg/mkimage/Dockerfile
Normal file
23
pkg/mkimage/Dockerfile
Normal file
@ -0,0 +1,23 @@
|
||||
FROM linuxkit/alpine:6336329f15b4166514782eaa555cf0ffd35c519c@sha256:f6c2ce92910b1d6e4e5557850a554f4a3ae9f66c1e89ad86a24d6c6e550f165e AS mirror
|
||||
|
||||
RUN mkdir -p /out/etc/apk && cp -r /etc/apk/* /out/etc/apk/
|
||||
RUN apk add --no-cache --initdb -p /out \
|
||||
alpine-baselayout \
|
||||
busybox \
|
||||
e2fsprogs \
|
||||
e2fsprogs-extra \
|
||||
musl \
|
||||
sfdisk \
|
||||
syslinux \
|
||||
xfsprogs \
|
||||
&& true
|
||||
RUN rm -rf /out/etc/apk /out/lib/apk /out/var/cache
|
||||
|
||||
FROM scratch
|
||||
ENTRYPOINT []
|
||||
CMD []
|
||||
WORKDIR /
|
||||
COPY --from=mirror /out/ /
|
||||
COPY mkimage.sh /usr/bin/
|
||||
CMD ["mkimage.sh"]
|
||||
LABEL org.mobyproject.config='{"readonly": true, "capabilities": ["CAP_SYS_ADMIN", "CAP_MKNOD"], "binds": ["/dev:/dev", "/data:/data"]}'
|
15
pkg/mkimage/Makefile
Normal file
15
pkg/mkimage/Makefile
Normal file
@ -0,0 +1,15 @@
|
||||
.PHONY: tag push
|
||||
default: push
|
||||
|
||||
ORG?=linuxkit
|
||||
IMAGE=mkimage
|
||||
DEPS=Dockerfile mkimage.sh
|
||||
|
||||
HASH?=$(shell git ls-tree HEAD -- ../$(notdir $(CURDIR)) | awk '{print $$3}')
|
||||
|
||||
tag: $(DEPS)
|
||||
docker build --no-cache --network=none -t $(ORG)/$(IMAGE):$(HASH) .
|
||||
|
||||
push: tag
|
||||
docker pull $(ORG)/$(IMAGE):$(HASH) || \
|
||||
docker push $(ORG)/$(IMAGE):$(HASH)
|
68
pkg/mkimage/mkimage.sh
Executable file
68
pkg/mkimage/mkimage.sh
Executable file
@ -0,0 +1,68 @@
|
||||
#!/bin/sh
|
||||
|
||||
# currently only supports ext4 disks; will extend for other filesystems, ISO, ...
|
||||
|
||||
do_mkfs()
|
||||
{
|
||||
diskdev="$1"
|
||||
|
||||
# new disks does not have an DOS signature in sector 0
|
||||
# this makes sfdisk complain. We can workaround this by letting
|
||||
# fdisk create that DOS signature, by just do a "w", a write.
|
||||
# http://bugs.alpinelinux.org/issues/145
|
||||
echo "w" | fdisk $diskdev >/dev/null
|
||||
|
||||
# format one large partition
|
||||
echo ";" | sfdisk --quiet $diskdev
|
||||
|
||||
# update status
|
||||
blockdev --rereadpt $diskdev 2> /dev/null
|
||||
|
||||
# wait for device
|
||||
for i in $(seq 1 50); do test -b "$DATA" && break || sleep .1; mdev -s; done
|
||||
|
||||
FSOPTS="-O resize_inode,has_journal,extent,huge_file,flex_bg,uninit_bg,64bit,dir_nlink,extra_isize"
|
||||
|
||||
mkfs.ext4 -q -F $FSOPTS ${diskdev}1
|
||||
}
|
||||
|
||||
DEV="$(find /dev -maxdepth 1 -type b ! -name 'loop*' | grep -v '[0-9]$' | sed 's@.*/dev/@@' | sort | head -1 )"
|
||||
|
||||
[ -z "${DEV}" ] && exit 1
|
||||
|
||||
DRIVE="/dev/${DEV}"
|
||||
|
||||
# format
|
||||
do_mkfs "$DRIVE"
|
||||
|
||||
PARTITION="${DRIVE}1"
|
||||
|
||||
# mount
|
||||
mount "$PARTITION" /mnt
|
||||
|
||||
# copy kernel, initrd
|
||||
cp -a /data/kernel /data/initrd.img /mnt/
|
||||
|
||||
# create syslinux.cfg
|
||||
CMDLINE="$(cat /data/cmdline)"
|
||||
|
||||
CFG="DEFAULT linux
|
||||
LABEL linux
|
||||
KERNEL /kernel
|
||||
INITRD /initrd.img
|
||||
APPEND ${CMDLINE}
|
||||
"
|
||||
|
||||
printf "$CFG" > /mnt/syslinux.cfg
|
||||
|
||||
# install syslinux
|
||||
extlinux --install /mnt
|
||||
|
||||
# unmount
|
||||
umount /mnt
|
||||
|
||||
# install mbr
|
||||
dd if=usr/share/syslinux/mbr.bin of="$DRIVE" bs=440 count=1
|
||||
|
||||
# make bootable
|
||||
sfdisk -A "$DRIVE" 1
|
26
test/cases/040_packages/001_mkimage/mkimage.yml
Normal file
26
test/cases/040_packages/001_mkimage/mkimage.yml
Normal file
@ -0,0 +1,26 @@
|
||||
kernel:
|
||||
image: "linuxkit/kernel:4.9.x"
|
||||
cmdline: "console=ttyS0"
|
||||
init:
|
||||
- linuxkit/init:cbd7ae748f0a082516501a3e914fa0c924ee941e
|
||||
- linuxkit/runc:24dfe632ed3ff53a026ee3fac046fd544434e2d6
|
||||
- linuxkit/containerd:f1130450206d4f64f0ddc13d15bb68435aa1ff61
|
||||
onboot:
|
||||
- name: mkimage
|
||||
image: "linuxkit/mkimage:8bb18fe306afaca9ba50fe3148ec12570586c2a6"
|
||||
- name: poweroff
|
||||
image: "linuxkit/poweroff:a8f1e4ad8d459f1fdaad9e4b007512cb3b504ae8"
|
||||
files:
|
||||
- path: data/kernel
|
||||
source: run-kernel
|
||||
- path: data/initrd.img
|
||||
source: run-initrd.img
|
||||
- path: data/cmdline
|
||||
source: run-cmdline
|
||||
trust:
|
||||
image:
|
||||
- linuxkit/kernel
|
||||
- linuxkit/binfmt
|
||||
- linuxkit/rngd
|
||||
outputs:
|
||||
- format: kernel+initrd
|
18
test/cases/040_packages/001_mkimage/run.yml
Normal file
18
test/cases/040_packages/001_mkimage/run.yml
Normal file
@ -0,0 +1,18 @@
|
||||
kernel:
|
||||
image: "linuxkit/kernel:4.9.x"
|
||||
cmdline: "console=ttyS0"
|
||||
init:
|
||||
- linuxkit/init:cbd7ae748f0a082516501a3e914fa0c924ee941e
|
||||
- linuxkit/runc:24dfe632ed3ff53a026ee3fac046fd544434e2d6
|
||||
- linuxkit/containerd:1c71f95fa36040ea7e987deb98a7a2a363853f01
|
||||
- linuxkit/ca-certificates:4e9a83e890e6477dcd25029fc4f1ced61d0642f4
|
||||
onboot:
|
||||
- name: poweroff
|
||||
image: "linuxkit/poweroff:a8f1e4ad8d459f1fdaad9e4b007512cb3b504ae8"
|
||||
trust:
|
||||
image:
|
||||
- linuxkit/kernel
|
||||
- linuxkit/binfmt
|
||||
- linuxkit/rngd
|
||||
outputs:
|
||||
- format: kernel+initrd
|
25
test/cases/040_packages/001_mkimage/test.sh
Normal file
25
test/cases/040_packages/001_mkimage/test.sh
Normal file
@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
# SUMMARY: Test the mkimage container by using it to build a bootable qcow2
|
||||
# LABELS:
|
||||
# REPEAT:
|
||||
|
||||
set -e
|
||||
|
||||
# Source libraries. Uncomment if needed/defined
|
||||
#. "${RT_LIB}"
|
||||
. "${RT_PROJECT_ROOT}/_lib/lib.sh"
|
||||
|
||||
clean_up() {
|
||||
find . -iname "run*" -not -iname "*.yml" -exec rm -rf {} \;
|
||||
find . -iname "mkimage*" -not -iname "*.yml" -exec rm -rf {} \;
|
||||
rm -f disk.qcow2
|
||||
}
|
||||
trap clean_up EXIT
|
||||
|
||||
# Test code goes here
|
||||
moby build run.yml
|
||||
moby build mkimage.yml
|
||||
linuxkit run qemu -disk-size 200 -disk-format qcow2 -disk disk.qcow2 -kernel mkimage
|
||||
linuxkit run qemu disk.qcow2
|
||||
|
||||
exit 0
|
Loading…
Reference in New Issue
Block a user