summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/iso-to-oci52
1 files changed, 31 insertions, 21 deletions
diff --git a/scripts/iso-to-oci b/scripts/iso-to-oci
index f79c02a0..86dd8687 100755
--- a/scripts/iso-to-oci
+++ b/scripts/iso-to-oci
@@ -20,23 +20,22 @@ fi
# ensure clean working directory
cleanup
-if ! command -v xorriso >/dev/null 2>&1; then
- echo "E: missing dependency: xorriso"
- echo " Install xorriso (recommended) or run inside the vyos-build container."
- exit 2
-fi
-
-if ! command -v unsquashfs >/dev/null 2>&1; then
- echo "E: missing dependency: unsquashfs"
- echo " Install squashfs-tools or run inside the vyos-build container."
- exit 2
-fi
-
-if ! command -v jq >/dev/null 2>&1; then
- echo "E: missing dependency: jq"
- echo " Install jq or run inside the vyos-build container."
- exit 2
-fi
+# required commands and the Debian package providing them
+declare -A REQUIRED_COMMANDS=(
+ [xorriso]="xorriso"
+ [unsquashfs]="squashfs-tools"
+ [jq]="jq"
+ [tar]="tar"
+ [xz]="xz-utils"
+)
+
+for cmd in "${!REQUIRED_COMMANDS[@]}"; do
+ if ! command -v "${cmd}" >/dev/null 2>&1; then
+ echo "E: missing dependency: ${cmd}"
+ echo " Install ${REQUIRED_COMMANDS[$cmd]} or run inside the vyos-build container."
+ exit 2
+ fi
+done
WORKDIR="$(mktemp -d -t iso-to-oci.XXXXXXXXXX)"
trap cleanup EXIT
@@ -57,11 +56,19 @@ unsquashfs -follow -dest "${UNSQUASHFS}/" "${ROOTFS}/live/filesystem.squashfs" >
VERSION="$(jq --raw-output .version "${ROOTFS}/version.json")"
# older ISOs predate ARM64 support and carry no architecture in version.json
ARCH="$(jq --raw-output '.architecture // "amd64"' "${ROOTFS}/version.json")"
-OCI_IMAGE="vyos-${VERSION}-oci-${ARCH}.tar"
+OCI_IMAGE="vyos-${VERSION}-oci-${ARCH}.tar.xz"
# fix locales for correct system configuration loading
sed -i 's/^LANG=.*$/LANG=C.UTF-8/' "${UNSQUASHFS}/etc/default/locale"
+# seed the VyOS pre-login banner - /etc/issue is owned by the base-files
+# package and only replaced once system_login_banner.py runs on the first
+# commit, but getty(8) is up long before that and would greet the user with
+# "Debian GNU/Linux 12". Keep in sync with default_config_data in
+# system_login_banner.py
+printf 'Welcome to VyOS - \\n \\l\n\n' > "${UNSQUASHFS}/etc/issue"
+: > "${UNSQUASHFS}/etc/issue.net"
+
# optional step: Decrease docker image size by deleting not necessary files for container
rm -rf "${UNSQUASHFS}/boot"
rm -rf "${UNSQUASHFS}/lib/firmware/"
@@ -79,16 +86,19 @@ rm -rf "${UNSQUASHFS}/opt/vyatta/share/vyatta-cfg/templates/system/option/root-p
rm -rf "${UNSQUASHFS}/opt/vyatta/share/vyatta-cfg/templates/system/option/reboot-on-panic"
rm -rf "${UNSQUASHFS}/opt/vyatta/share/vyatta-cfg/templates/system/option/performance"
-# create a symbolic link to the configuration
+# create a symbolic link to the configuration - /config already exists as an
+# empty directory in the squashfs, so it must go first. A plain "ln -s" would
+# happily create /config/config instead and leave /config a dead directory.
+rmdir "${UNSQUASHFS}/config" || { echo "E: /config is not an empty directory"; exit 1; }
ln -s /opt/vyatta/etc/config "${UNSQUASHFS}/config"
# create docker image
echo "I: generate OCI container image ${OCI_IMAGE}"
-tar -C "${UNSQUASHFS}" -c . -f "${OCI_IMAGE}"
+XZ_OPT="-T0" tar --directory "${UNSQUASHFS}" --create . --xz --file "${OCI_IMAGE}"
echo "I: to import the previously generated OCI image to your local images run:"
echo ""
-echo " docker import --platform=linux/$ARCH $OCI_IMAGE vyos:$VERSION --change 'CMD ["/sbin/init"]'"
+echo " docker import --platform=linux/$ARCH $OCI_IMAGE vyos/vyos:$VERSION --change 'CMD [\"/sbin/init\"]'"
echo ""
cleanup