diff options
author | Sven Gothel <[email protected]> | 2021-09-26 21:55:31 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2021-09-26 21:55:31 +0200 |
commit | c2c3a74d101ce1e8235315213f72a10300574422 (patch) | |
tree | d440a0dcd9484b0fbc56b1fbc991538e13229f37 /scripts | |
parent | 3431597a04b8854654dd1b476de5307ae650673c (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-x | scripts/build-cross.sh | 31 | ||||
-rwxr-xr-x | scripts/on_chroot.sh | 64 |
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 "$@" |