CRI-O runs but not tested yet

This commit is contained in:
2026-03-23 20:18:10 +08:00
parent 5d421b6743
commit ac05d3e5dc
9 changed files with 66 additions and 27 deletions

View File

@@ -11,12 +11,14 @@ mount --bind /run "$ROOTFS/run"
cp /usr/bin/qemu-aarch64-static "$ROOTFS/usr/bin/"
cp /etc/resolv.conf "$ROOTFS/etc/resolv.conf"
cp /build/crio.tar.gz "$ROOTFS/build/"
cp -r /build/rootfs/* "$ROOTFS/"
chroot "$ROOTFS" /bin/sh -c "ln -s /var/cache/apk /etc/apk/cache"
# chroot "$ROOTFS" /bin/sh -c "apk update"
chroot "$ROOTFS" /bin/sh -c "apk add bash curl"
cp "/install-packages.sh" "$ROOTFS/install-packages.sh"
chroot "$ROOTFS" /bin/bash /install-packages.sh || exit 1
rm "$ROOTFS/install-packages.sh"
umount "$ROOTFS/var/cache/apk"
umount "$ROOTFS/dev"
@@ -30,13 +32,12 @@ rm -r "$ROOTFS/build"
echo "=========================== RootFS "$( du -sh "$ROOTFS/" )
IMG=output.img
SIZE=512MB
SIZE=1024MB
dd if=/dev/zero of="$IMG" bs=1 count=0 seek=$SIZE
sgdisk -o "$IMG" \
-n 1:2048:+64M -t 1:0700 \
-n 2:0:-1M -t 2:8300
-n 1:65536:-1M -t 1:8300
losetup -D
LOOP=$(losetup --find --show -P "$IMG")
@@ -44,18 +45,23 @@ LOOP=$(losetup --find --show -P "$IMG")
/sync-loop.sh "$LOOP"
TMP_LOOP="/tmp$LOOP"
mkfs.vfat "${TMP_LOOP}p1"
mkfs.ext4 "${TMP_LOOP}p2"
mkfs.ext4 -F "${TMP_LOOP}p1"
mkdir -p /mnt/img-root /mnt/img-boot
mkdir -p /mnt/img-root
mount ${TMP_LOOP}p1 /mnt/img-boot
mount ${TMP_LOOP}p2 /mnt/img-root
mount "${TMP_LOOP}p1" /mnt/img-root
cp -a "$ROOTFS"/. /mnt/img-root/
cp /build/board.itb /mnt/img-boot
mkdir -p /mnt/img-root/boot
cp /build/Image.gz /mnt/img-root/boot/Image.gz
cp /build/board.itb /mnt/img-root/boot/kernel.itb
cp /build/${DEVICE_TREE_TARGET}.dtb /mnt/img-root/boot/${DEVICE_TREE_TARGET}.dtb
sync
umount /mnt/img-root
umount /mnt/img-boot
losetup -d "$LOOP"
echo "GZipping the image"
gzip "/build/$IMG"

9
alpine/etc/fancontrol Normal file
View File

@@ -0,0 +1,9 @@
INTERVAL=10
DEVPATH=hwmon0=devices/platform/soc/2180000.i2c/i2c-0/i2c-7/7-002e hwmon1=devices/virtual/thermal/thermal_zone0
DEVNAME=hwmon0=emc2305 hwmon1=ddr_thermal
FCTEMPS=hwmon0/pwm2=hwmon1/temp1_input
FCFANS= hwmon0/pwm2=hwmon0/fan1_input
MINTEMP=hwmon0/pwm2=40
MAXTEMP=hwmon0/pwm2=60
MINSTART=hwmon0/pwm2=60
MINSTOP=hwmon0/pwm2=45

View File

@@ -2,7 +2,21 @@
cd /build
### CRI-O
echo "##################################################### Installing basic packages"
apk add alpine-base \
openrc busybox-openrc bash nftables \
lm-sensors lm-sensors-fancontrol lm-sensors-fancontrol-openrc
rc-update add devfs sysinit
rc-update add procfs sysinit
rc-update add sysfs sysinit
rc-update add loopback boot
rc-update add fancontrol default
echo "ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 -n -l /bin/sh" >> "/etc/inittab"
echo '[ -x /bin/bash ] && exec /bin/bash -l' >> "/root/.profile"
echo "export PATH=\"/usr/local/bin:$PATH\"" >> "/etc/profile.d/settings.sh"
echo "##################################################### Installing CRI-O"
tar zxf crio.tar.gz
cd cri-o

View File

@@ -6,13 +6,18 @@ FROM --platform=$BUILDPLATFORM ${DOCKER_IMAGE_ROOT}/build-base:${TAG} AS build-b
ARG ALPINE_ARCH
ARG ALPINE_VER
ARG CRIO_VERSION
ARG DEVICE_TREE_TARGET
RUN mkdir -p "/out/rootfs"
COPY packages/alpine-minirootfs-${ALPINE_VER}-${ALPINE_ARCH}.tar.gz ./alpine.tar.gz
COPY packages/${CRIO_VERSION}.tar.gz ./crio.tar.gz
COPY out/board.itb ./
COPY out/rootfs ./rootfs
COPY out/${DEVICE_TREE_TARGET}.dtb ./
COPY out/Image.gz ./
RUN tar -xf alpine.tar.gz -C "/out/rootfs"
COPY alpine/etc ./rootfs/etc
COPY alpine/*.sh /

View File

@@ -27,7 +27,7 @@ WORKDIR /out/initramfs
COPY initramfs/init init
RUN chmod +x init
RUN mkdir -p bin sbin etc proc sys dev lib usr/bin usr/sbin
RUN mkdir -p bin sbin etc proc sys dev lib mnt usr/bin usr/sbin
# Selective mods
RUN mkdir -p /out/selected-mods /out/kernel

View File

@@ -33,6 +33,7 @@ RUN grep -q "^dtb-\\\$(CONFIG_ARCH_LAYERSCAPE) += ${DEVICE_TREE_TARGET}.dtb$" \
RUN make ARCH="${ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" defconfig lsdk.config \
&& ./scripts/kconfig/merge_config.sh -m .config /tmp/kernel-extra.config \
&& make ARCH="${ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" olddefconfig \
&& grep '^CONFIG_NF_TABLES=' .config \
&& make ARCH="${ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" -j"$(nproc)"
# artifact collection

View File

@@ -4,6 +4,9 @@ mount -t devtmpfs devtmpfs /dev
mount -t proc proc /proc
mount -t sysfs sysfs /sys
# Spin the fan
echo 100 > /sys/class/hwmon/hwmon0/pwm1
# Optional but nice
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts

View File

@@ -96,7 +96,7 @@ CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS_POSIX_ACL=y
# POSIX ACLs on tmpfs. Good compatibility feature for userland.
CONFIG_OVERLAY_FS=m
CONFIG_OVERLAY_FS=y
# Overlay filesystem. This is the big one for container image/layer storage.
# Module is fine; CRI-O can load/use it after boot. No need to bloat FIT image.
@@ -131,34 +131,34 @@ CONFIG_DUMMY=m
# This is where container networking gets messy. Better to enable a sane baseline.
###############################################################################
CONFIG_NETFILTER=m
CONFIG_NETFILTER=y
# Netfilter core framework. Module is okay if your setup loads it before use.
CONFIG_NETFILTER_ADVANCED=y
# Exposes more advanced netfilter options and modules.
CONFIG_NF_CONNTRACK=m
CONFIG_NF_CONNTRACK=y
# Connection tracking. Critical for NAT, Kubernetes service traffic, and many CNIs.
CONFIG_NF_NAT=m
CONFIG_NF_NAT=y
# NAT framework. Required for masquerading and pod egress in many setups.
CONFIG_NF_TABLES=m
CONFIG_NF_TABLES=y
# nftables framework. Modern Linux packet filtering backend.
CONFIG_NFT_CT=m
# nftables conntrack expressions.
CONFIG_NFT_CHAIN_NAT=m
CONFIG_NFT_CHAIN_NAT=y
# nftables NAT chain support.
CONFIG_NFT_MASQ=m
CONFIG_NFT_MASQ=y
# nftables masquerade support. Often needed for pod egress NAT.
CONFIG_NFT_REDIR=m
CONFIG_NFT_REDIR=y
# nftables redirect target.
CONFIG_NFT_NAT=m
CONFIG_NFT_NAT=y
# nftables NAT support.
CONFIG_NF_NAT_IPV4=m
@@ -216,14 +216,14 @@ CONFIG_NETFILTER_XT_TARGET_CT=m
# Bridge / container interface plumbing
###############################################################################
CONFIG_VETH=m
CONFIG_VETH=y
# Virtual Ethernet pairs. This is how container interfaces are commonly connected
# to the host/network namespace.
CONFIG_BRIDGE=m
CONFIG_BRIDGE=y
# Ethernet bridge support. Needed by bridge-based CNIs.
CONFIG_BRIDGE_NETFILTER=m
CONFIG_BRIDGE_NETFILTER=y
# Allows bridged traffic to pass through netfilter/iptables/nftables hooks.
# Important for Kubernetes networking behavior.

View File

@@ -13,7 +13,7 @@ CRIO_TAR := $(PACKAGES_DIR)/$(CRIO_VERSION).tar.gz
BOARD_ITB := $(OUT_DIR)/board.itb
INITRAMFS := $(OUT_DIR)/initramfs.cpio.gz
RELEASE_IMAGE := $(OUT_DIR)/monok8s-$(TAG).img
RELEASE_IMAGE := $(OUT_DIR)/monok8s-$(TAG).img.gz
KERNEL_IMAGE := $(OUT_DIR)/Image.gz
@@ -139,6 +139,7 @@ $(RELEASE_IMAGE): $(RELEASE_DEPS) | $(OUT_DIR)
--build-arg ALPINE_ARCH=$(ALPINE_ARCH) \
--build-arg ALPINE_VER=$(ALPINE_VER) \
--build-arg CRIO_VERSION=$(CRIO_VERSION) \
--build-arg DEVICE_TREE_TARGET=$(DEVICE_TREE_TARGET) \
-t $(DOCKER_IMAGE_ROOT)/buildenv-alpine:$(TAG) .
@cid=$$(docker create \
@@ -146,12 +147,12 @@ $(RELEASE_IMAGE): $(RELEASE_DEPS) | $(OUT_DIR)
-v /cache/apk:/var/cache/apk \
--device=/dev/loop0:/dev/loop0 \
-e ROOTFS=/out/rootfs \
-e ARTIFACT_DIR=/artifacts \
-e RELEASE_IMAGE=$(RELEASE_IMAGE) \
-e DEVICE_TREE_TARGET=$(DEVICE_TREE_TARGET) \
$(DOCKER_IMAGE_ROOT)/buildenv-alpine:$(TAG) \
bash -lc '/build-rootfs.sh'); \
docker start -a $$cid; \
docker cp $$cid:/build/output.img $@; \
docker cp $$cid:/build/output.img.gz $@; \
docker rm $$cid
test -f $@