summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2023-11-26 20:12:29 +0100
committerChristian Breunig <christian@breunig.cc>2023-11-27 08:46:58 +0100
commit98d05b1131be6e650b4da931929fa0c08d3a8723 (patch)
treec144b538392779ad527845da55a9f225aea77cd7
parentf9f26b1d0a30cb12bd94a4accd1b5271ef046628 (diff)
downloadvyos-build-98d05b1131be6e650b4da931929fa0c08d3a8723.tar.gz
vyos-build-98d05b1131be6e650b4da931929fa0c08d3a8723.zip
Makefile: T2640: add helper to convert ISO to OCI image to start a container
Use either "make oci" or call the script manually: $ scripts/iso-to-oci build/live-image-amd64.hybrid.iso I: mount ISO build/live-image-amd64.hybrid.iso I: extracting squashfs content I: generate OCI container image vyos-1.5-strongswan-202311241125.tar I: to import the previously generated OCI image to your local images run: docker import vyos-1.5-strongswan-202311241125.tar vyos:1.5-strongswan-202311241125 --change 'CMD [/sbin/init]' (cherry picked from commit 499e8e1cbb90e24acf80d383a69e138cd745807c)
-rw-r--r--.gitignore1
-rw-r--r--Makefile5
-rwxr-xr-xscripts/iso-to-oci63
3 files changed, 69 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 36643800..23101b27 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@ packages/*
!packages/*/
testinstall*.img
*.qcow2
+*.tar
diff --git a/Makefile b/Makefile
index 74b17c7c..f4c3b61d 100644
--- a/Makefile
+++ b/Makefile
@@ -54,6 +54,11 @@ testc: checkiso
testraid: checkiso
scripts/check-qemu-install --debug --configd --raid --configtest build/live-image-amd64.hybrid.iso
+.PHONE: oci
+.ONESHELL:
+oci: checkiso
+ scripts/iso-to-oci build/live-image-amd64.hybrid.iso
+
.PHONY: clean
.ONESHELL:
clean:
diff --git a/scripts/iso-to-oci b/scripts/iso-to-oci
new file mode 100755
index 00000000..c9396290
--- /dev/null
+++ b/scripts/iso-to-oci
@@ -0,0 +1,63 @@
+#!/bin/bash
+
+function cleanup() {
+ if [[ -d $ROOTFS ]]; then
+ rm -rf $ROOTFS
+ fi
+ if [[ -d $UNSQUASHFS ]]; then
+ rm -rf $UNSQUASHFS
+ fi
+}
+
+if [[ $(/usr/bin/id -u) -ne 0 ]]; then
+ echo "Not running as root"
+ exit
+fi
+
+if [ "$#" -ne 1 ]; then
+ echo "Illegal number of parameters"
+fi
+
+ISO=$1
+ROOTFS=rootfs
+UNSQUASHFS=unsquashfs
+
+# ensure clean working directory
+cleanup
+
+mkdir $ROOTFS $UNSQUASHFS
+echo "I: mount ISO $ISO"
+mount -t iso9660 -o loop $ISO $ROOTFS/ >/dev/null 2>&1
+
+# create directory, unpack squashfs filesystem, get ISO version
+# and unmount ISO
+echo "I: extracting squashfs content"
+unsquashfs -follow -dest $UNSQUASHFS/ $ROOTFS/live/filesystem.squashfs >/dev/null 2>&1
+VERSION=$(jq --raw-output .version $ROOTFS/version.json)
+umount $ROOTFS/
+
+# fix locales for correct system configuration loading
+sed -i 's/^LANG=.*$/LANG=C.UTF-8/' $UNSQUASHFS/etc/default/locale
+
+# optional step: Decrease docker image size by deleting not necessary files for container
+rm -rf $UNSQUASHFS/boot/*.img
+rm -rf $UNSQUASHFS/boot/*vyos*
+rm -rf $UNSQUASHFS/boot/vmlinuz
+rm -rf $UNSQUASHFS/lib/firmware/
+rm -rf $UNSQUASHFS/usr/lib/x86_64-linux-gnu/libwireshark.so*
+rm -rf $UNSQUASHFS/lib/modules/*amd64-vyos
+rm -rf $UNSQUASHFS/root/.gnupg
+
+# create a symbolic link to the configuration
+ln -s /opt/vyatta/etc/config $UNSQUASHFS/config
+
+# create docker image
+echo "I: generate OCI container image vyos-$VERSION.tar"
+tar -C unsquashfs -c . -f vyos-$VERSION.tar
+
+echo "I: to import the previously generated OCI image to your local images run:"
+echo ""
+echo " docker import vyos-$VERSION.tar vyos:$VERSION --change 'CMD ["/sbin/init"]'"
+echo ""
+
+cleanup