41 lines
1.2 KiB
Bash
41 lines
1.2 KiB
Bash
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
# 定义 sysroot 目录
|
|
SYSROOT_DIR="/opt/sysroot"
|
|
|
|
# 如果 /opt/sysroot 已经有内容(通过 -v 挂载了 squashfs-root),则跳过解压
|
|
if [ -d "$SYSROOT_DIR/bin" ] || [ -d "$SYSROOT_DIR/lib" ]; then
|
|
echo "Using existing sysroot at $SYSROOT_DIR"
|
|
else
|
|
mkdir -p "$SYSROOT_DIR"
|
|
# 优先使用环境变量指定的 squashfs 文件,否则使用默认的 root.squashfs
|
|
ROOTFS_FILE="${SYSROOT_FILE:-root.squashfs}"
|
|
|
|
if [ -f "$ROOTFS_FILE" ]; then
|
|
echo -e "\n🔥 Unsquashing $ROOTFS_FILE to $SYSROOT_DIR...\n"
|
|
unsquashfs -d "$SYSROOT_DIR" -f "$ROOTFS_FILE"
|
|
echo -e "\n✅ Unsquashed rootfs\n"
|
|
else
|
|
echo "Error: Sysroot file $ROOTFS_FILE not found and $SYSROOT_DIR is empty."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# 检查第一个参数。如果在 sysroot 下存在该文件,则自动补全路径
|
|
# 比如 `run /bin/sh` 会被转换为 `run /opt/sysroot/bin/sh`
|
|
if [ -n "$1" ] && [ -f "$SYSROOT_DIR$1" ]; then
|
|
CMD="$SYSROOT_DIR$1"
|
|
shift
|
|
set -- "$CMD" "$@"
|
|
fi
|
|
|
|
|
|
if [ $# -eq 0 ]; then
|
|
# 如果没有提供参数,则默认在 sysroot 中启动 shell
|
|
exec runtime
|
|
else
|
|
exec qemu-arm-static -L "$SYSROOT_DIR" "$@"
|
|
fi
|