BuildSystem: using sysroot doesn't need root privileges anymore!

Sysroot is now created with fakeroot. This allows root access to be
only needed for disk image creation, since it uses loopback devices.
This commit is contained in:
2023-11-04 17:50:43 +02:00
parent ca34ece8ef
commit f6c312a6b3
38 changed files with 83 additions and 113 deletions

View File

@@ -4,6 +4,12 @@ set -e
export BANAN_SCRIPT_DIR=$(dirname $(realpath $0))
source $BANAN_SCRIPT_DIR/config.sh
FAKEROOT_FILE="$BANAN_BUILD_DIR/fakeroot-context"
run_fakeroot() {
fakeroot -i $FAKEROOT_FILE -s $FAKEROOT_FILE -- /bin/bash -c '$@' bash $@
}
make_build_dir () {
mkdir -p $BANAN_BUILD_DIR
cd $BANAN_BUILD_DIR
@@ -19,7 +25,7 @@ build_target () {
exit 1
fi
cd $BANAN_BUILD_DIR
ninja $1
run_fakeroot ninja $1
}
build_toolchain () {
@@ -39,11 +45,7 @@ build_toolchain () {
create_image () {
build_target install-sysroot
if [[ "$1" == "full" ]]; then
$BANAN_SCRIPT_DIR/image-full.sh
else
$BANAN_SCRIPT_DIR/image.sh
fi
$BANAN_SCRIPT_DIR/image.sh "$1"
}
run_qemu () {
@@ -56,7 +58,7 @@ run_bochs () {
$BANAN_SCRIPT_DIR/bochs.sh $@
}
if [[ "$(uname)" == "Linux" ]]; then
if [[ -c /dev/kvm ]]; then
QEMU_ACCEL="-accel kvm"
fi

View File

@@ -18,6 +18,7 @@ export BANAN_TOOLCHAIN_TRIPLE_PREFIX=$BANAN_ARCH-banan_os
export BANAN_BUILD_DIR=$BANAN_ROOT_DIR/build
export BANAN_SYSROOT=$BANAN_BUILD_DIR/sysroot
export BANAN_SYSROOT_TAR=$BANAN_SYSROOT.tar
export BANAN_DISK_IMAGE_PATH=$BANAN_BUILD_DIR/banan-os.img

View File

@@ -72,7 +72,7 @@ sudo partprobe $LOOP_DEV
PARTITION1=${LOOP_DEV}p1
PARTITION2=${LOOP_DEV}p2
sudo mkfs.ext2 -d $BANAN_SYSROOT -b 1024 -q $PARTITION2
sudo mkfs.ext2 -b 1024 -q $PARTITION2
if [[ "$BANAN_UEFI_BOOT" == "1" ]]; then
sudo mkfs.fat $PARTITION1 > /dev/null

View File

@@ -1,44 +1,38 @@
#!/bin/bash
if [[ -z $BANAN_ROOT_DIR ]]; then
echo "You must set the BANAN_ROOT_DIR environment variable" >&2
exit 1
fi
if [[ -z $BANAN_DISK_IMAGE_PATH ]]; then
echo "You must set the BANAN_DISK_IMAGE_PATH environment variable" >&2
exit 1
fi
if [[ -z $BANAN_SYSROOT ]]; then
echo "You must set the BANAN_SYSROOT environment variable" >&2
if [[ -z $BANAN_SYSROOT_TAR ]]; then
echo "You must set the BANAN_SYSROOT_TAR environment variable" >&2
exit 1
fi
if [[ ! -f $BANAN_DISK_IMAGE_PATH ]]; then
$BANAN_SCRIPT_DIR/image-full.sh
exit 0
if [[ "$1" == "full" ]] || [[ ! -f $BANAN_DISK_IMAGE_PATH ]]; then
$BANAN_SCRIPT_DIR/image-create.sh
else
fdisk -l $BANAN_DISK_IMAGE_PATH | grep -q 'EFI System'; IMAGE_IS_UEFI=$?
[[ $BANAN_UEFI_BOOT == 1 ]]; CREATE_IS_UEFI=$?
if [[ $IMAGE_IS_UEFI -ne $CREATE_IS_UEFI ]]; then
echo Converting disk image to/from UEFI
$BANAN_SCRIPT_DIR/image-create.sh
fi
fi
fdisk -l $BANAN_DISK_IMAGE_PATH | grep -q 'EFI System'; IMAGE_IS_UEFI=$?
[[ $BANAN_UEFI_BOOT == 1 ]]; CREATE_IS_UEFI=$?
if [[ $IMAGE_IS_UEFI -ne $CREATE_IS_UEFI ]]; then
echo Converting disk image to/from UEFI
$BANAN_SCRIPT_DIR/image-full.sh
exit 0
fi
MOUNT_DIR=/mnt
LOOP_DEV=$(sudo losetup -f --show $BANAN_DISK_IMAGE_PATH)
LOOP_DEV=$(sudo losetup --show -f "$BANAN_DISK_IMAGE_PATH")
sudo partprobe $LOOP_DEV
ROOT_PARTITON=${LOOP_DEV}p2
ROOT_PARTITION=${LOOP_DEV}p2
MOUNT_DIR=/mnt
sudo mount $ROOT_PARTITON $MOUNT_DIR
sudo mount $ROOT_PARTITION $MOUNT_DIR
sudo rsync -a ${BANAN_SYSROOT}/* ${MOUNT_DIR}/
cd $MOUNT_DIR
sudo tar xf $BANAN_SYSROOT_TAR
cd
sudo umount $MOUNT_DIR