diff --git a/script/build.sh b/script/build.sh index 86f1a336..fc2ed403 100755 --- a/script/build.sh +++ b/script/build.sh @@ -4,13 +4,11 @@ set -e export BANAN_SCRIPT_DIR=$(dirname $(realpath $0)) source $BANAN_SCRIPT_DIR/config.sh -FAKEROOT_FILE="$BANAN_BUILD_DIR/fakeroot-context" - run_fakeroot() { - if [ ! -f $FAKEROOT_FILE ]; then - touch $FAKEROOT_FILE + if [ ! -f $BANAN_FAKEROOT ]; then + touch $BANAN_FAKEROOT fi - fakeroot -i $FAKEROOT_FILE -s $FAKEROOT_FILE -- /bin/bash -c '$@' bash $@ + fakeroot -i $BANAN_FAKEROOT -s $BANAN_FAKEROOT -- /bin/bash -c '$@' bash $@ } make_build_dir () { @@ -47,11 +45,6 @@ build_toolchain () { create_image () { build_target all build_target install - - pushd $BANAN_SYSROOT >/dev/null - run_fakeroot tar cf ${BANAN_SYSROOT_TAR} * - popd >/dev/null - $BANAN_SCRIPT_DIR/image.sh "$1" } diff --git a/script/config.sh b/script/config.sh index 66d15e04..fb8dda33 100644 --- a/script/config.sh +++ b/script/config.sh @@ -20,7 +20,8 @@ export BANAN_BUILD_DIR="$BANAN_ROOT_DIR/build" export BANAN_PORT_DIR="$BANAN_ROOT_DIR/ports" export BANAN_SYSROOT="$BANAN_BUILD_DIR/sysroot" -export BANAN_SYSROOT_TAR="$BANAN_SYSROOT.tar" + +export BANAN_FAKEROOT="$BANAN_BUILD_DIR/fakeroot-context" export BANAN_DISK_IMAGE_PATH="$BANAN_BUILD_DIR/banan-os.img" diff --git a/script/image.sh b/script/image.sh index c25388f8..a8f9f232 100755 --- a/script/image.sh +++ b/script/image.sh @@ -5,8 +5,13 @@ if [ -z $BANAN_DISK_IMAGE_PATH ]; then exit 1 fi -if [ -z $BANAN_SYSROOT_TAR ]; then - echo "You must set the BANAN_SYSROOT_TAR environment variable" >&2 +if [ -z $BANAN_SYSROOT ]; then + echo "You must set the BANAN_SYSROOT environment variable" >&2 + exit 1 +fi + +if [ -z $BANAN_FAKEROOT ]; then + echo "You must set the BANAN_FAKEROOT environment variable" >&2 exit 1 fi @@ -34,13 +39,33 @@ fi if sudo mount $ROOT_PARTITION $MOUNT_DIR; then if (($BANAN_INITRD)); then + fakeroot -i $BANAN_FAKEROOT tar -C $BANAN_SYSROOT -cf $BANAN_SYSROOT.initrd . + sudo mkdir -p $MOUNT_DIR/boot sudo cp $BANAN_BUILD_DIR/kernel/banan-os.kernel $MOUNT_DIR/boot/banan-os.kernel - sudo cp $BANAN_SYSROOT_TAR $MOUNT_DIR/boot/banan-os.initrd + sudo mv $BANAN_SYSROOT.initrd $MOUNT_DIR/boot/banan-os.initrd else - cd $MOUNT_DIR - sudo tar xf $BANAN_SYSROOT_TAR - cd + sudo rsync -rulHpt $BANAN_SYSROOT/ $MOUNT_DIR + + fakeroot -i $BANAN_FAKEROOT find $BANAN_SYSROOT -printf './%P|%U|%G\n' >$BANAN_BUILD_DIR/sysroot-perms.txt + sudo bash -c " + if enable stat &>/dev/null; then + while IFS='|' read -r path uid gid; do + full=\"$MOUNT_DIR/\$path\" + stat \"\$full\" + if [[ \${STAT[uid]} != \$uid ]] || [[ \${STAT[gid]} != \$gid ]]; then + chown -h \"\$uid:\$gid\" \"\$full\" + fi + done <$BANAN_BUILD_DIR/sysroot-perms.txt + else + while IFS='|' read -r path uid gid; do + full=\"$MOUNT_DIR/\$path\" + if [[ \$(stat -c '%u %g' \"\$full\") != \"\$uid \$gid\" ]]; then + chown -h \"\$uid:\$gid\" \"\$full\" + fi + done <$BANAN_BUILD_DIR/sysroot-perms.txt + fi + " fi sudo umount $MOUNT_DIR