summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2021-09-26 21:55:31 +0200
committerSven Gothel <[email protected]>2021-09-26 21:55:31 +0200
commitc2c3a74d101ce1e8235315213f72a10300574422 (patch)
treed440a0dcd9484b0fbc56b1fbc991538e13229f37 /scripts
parent3431597a04b8854654dd1b476de5307ae650673c (diff)
Add build-cross.sh using chroot to target system (from my pi-gen work, using images also build by our pi-gen branch)
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/build-cross.sh31
-rwxr-xr-xscripts/on_chroot.sh64
2 files changed, 95 insertions, 0 deletions
diff --git a/scripts/build-cross.sh b/scripts/build-cross.sh
new file mode 100755
index 00000000..4632f4fd
--- /dev/null
+++ b/scripts/build-cross.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+#
+# sudo mkdir -p /mnt/arm64
+# sudo mount /data/diskimages/RaspiArm64LightDev-1.2-rw-deb11-arm64-litexdev.root-ext4.img /mnt/arm64
+# scripts/build-cross.sh /mnt/arm64
+#
+# sudo mkdir -p /mnt/arm32
+# sudo mount /data/diskimages/RaspiArm32LightDev-1.2-rw-deb10-armhf-litexdev.root-ext4.img /mnt/arm32
+# scripts/build-cross.sh /mnt/arm32
+#
+
+sdir=`dirname $(readlink -f $0)`
+rootdir=`dirname $sdir`
+parentdir=`dirname $rootdir`
+
+echo sdir ${sdir}
+echo rootdir ${rootdir}
+echo parentdir ${parentdir}
+
+export ROOTFS_DIR=$1
+shift 1
+
+if [ -z "${ROOTFS_DIR}" ]; then
+ echo Usage "$0 <rootfs-dir>"
+ exit 1
+fi
+
+${sdir}/on_chroot.sh ${ROOTFS_DIR} << EOF
+ sh ${sdir}/build.sh
+EOF
diff --git a/scripts/on_chroot.sh b/scripts/on_chroot.sh
new file mode 100755
index 00000000..ba662f71
--- /dev/null
+++ b/scripts/on_chroot.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+# Example:
+#
+# 1) sudo mount /data/diskimages/rootfs-arm64.img /mnt/tst
+#
+# 2a) example invocation 1, multiline shell script
+# on_chroot /mnt << EOF
+# whoami
+# EOF
+#
+# 2b) example invocation 2, one line command
+# on_chroot /mnt -c "whoami"
+#
+# 2b) example invocation 3, interactive bash
+# on_chroot /mnt -c "bash"
+#
+# 3) sudo ./imagetool.sh -u /mnt/tst
+#
+
+sdir=`dirname $(readlink -f $0)`
+rootdir=`dirname $sdir`
+parentdir=`dirname $rootdir`
+
+echo sdir ${sdir}
+echo rootdir ${rootdir}
+echo parentdir ${parentdir}
+
+username=${USER}
+
+export ROOTFS_DIR=$1
+shift 1
+
+if [ -z "${ROOTFS_DIR}" ]; then
+ echo Usage "$0 <rootfs-dir> commands..."
+ exit 1
+fi
+
+rootfs_parentdir="${ROOTFS_DIR}${parentdir}"
+echo rootfs_parentdir ${rootfs_parentdir}
+
+if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/proc)"; then
+ sudo mount -t proc proc "${ROOTFS_DIR}/proc"
+fi
+
+if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/dev)"; then
+ sudo mount --bind /dev "${ROOTFS_DIR}/dev"
+fi
+
+if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/dev/pts)"; then
+ sudo mount --bind /dev/pts "${ROOTFS_DIR}/dev/pts"
+fi
+
+if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/sys)"; then
+ sudo mount --bind /sys "${ROOTFS_DIR}/sys"
+fi
+
+if ! mount | grep -q "${rootfs_parentdir}"; then
+ sudo mkdir -p "${rootfs_parentdir}"
+ sudo mount --bind ${parentdir} "${rootfs_parentdir}"
+fi
+
+# sudo chroot ${ROOTFS_DIR}/ /bin/bash "$@"
+sudo /sbin/capsh --user=$username --drop=cap_setfcap "--chroot=${ROOTFS_DIR}/" -- -e "$@"