mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 16:52:43 +00:00 
			
		
		
		
	Build: Use fakeroot if non-root build is possible
If genext2fs and fakeroot are installed, the build will no longer require superuser privileges.
This commit is contained in:
		
							parent
							
								
									0399b38f77
								
							
						
					
					
						commit
						3d342f72a7
					
				
					 3 changed files with 47 additions and 40 deletions
				
			
		|  | @ -8,7 +8,7 @@ die() { | |||
| } | ||||
| 
 | ||||
| if [ "$(id -u)" != 0 ]; then | ||||
|     die "this script needs to run as root" | ||||
|     die "this script needs to run as root (or with fakeroot)" | ||||
| fi | ||||
| if [ "$(uname -s)" = "Darwin" ]; then | ||||
|     export PATH="/usr/local/opt/e2fsprogs/bin:$PATH" | ||||
|  | @ -19,43 +19,40 @@ qemu-img create _disk_image "${DISK_SIZE:-600}"m || die "could not create disk i | |||
| chown "$SUDO_UID":"$SUDO_GID" _disk_image || die "could not adjust permissions on disk image" | ||||
| echo "done" | ||||
| 
 | ||||
| printf "creating new filesystem... " | ||||
| if [ "$(uname -s)" = "OpenBSD" ]; then | ||||
|     VND=$(vnconfig _disk_image) | ||||
|     (echo "e 0"; echo 83; echo n; echo 0; echo "*"; echo "quit") | fdisk -e "$VND" | ||||
|     mkfs.ext2 -I 128 -F "/dev/${VND}i" || die "could not create filesystem" | ||||
| elif [ "$(uname -s)" = "FreeBSD" ]; then | ||||
|     MD=$(mdconfig _disk_image) | ||||
|     mke2fs -q -I 128 _disk_image || die "could not create filesystem" | ||||
| else | ||||
|     if [ -x /sbin/mke2fs ]; then | ||||
|         /sbin/mke2fs -q -I 128 _disk_image || die "could not create filesystem" | ||||
|     else | ||||
|         mke2fs -q -I 128 _disk_image || die "could not create filesystem" | ||||
|     fi | ||||
| fi | ||||
| echo "done" | ||||
| 
 | ||||
| printf "mounting filesystem... " | ||||
| mkdir -p mnt | ||||
| use_genext2fs=0 | ||||
| if [ "$(uname -s)" = "Darwin" ]; then | ||||
|     fuse-ext2 _disk_image mnt -o rw+,allow_other,uid=501,gid=20 || die "could not mount filesystem" | ||||
| elif [ "$(uname -s)" = "OpenBSD" ]; then | ||||
|     mount -t ext2fs "/dev/${VND}i" mnt/ || die "could not mount filesystem" | ||||
| elif [ "$(uname -s)" = "FreeBSD" ]; then | ||||
|     fuse-ext2 -o rw+ "/dev/${MD}" mnt/ || die "could not mount filesystem" | ||||
| if command -v genext2fs 1>/dev/null ; then | ||||
|     use_genext2fs=1 | ||||
| else | ||||
|     if ! mount _disk_image mnt/ ; then | ||||
|         if command -v genext2fs 1>/dev/null ; then | ||||
|             echo "mount failed but genext2fs exists, use it instead" | ||||
|             use_genext2fs=1 | ||||
|     printf "creating new filesystem... " | ||||
|     if [ "$(uname -s)" = "OpenBSD" ]; then | ||||
|         VND=$(vnconfig _disk_image) | ||||
|         (echo "e 0"; echo 83; echo n; echo 0; echo "*"; echo "quit") | fdisk -e "$VND" | ||||
|         mkfs.ext2 -I 128 -F "/dev/${VND}i" || die "could not create filesystem" | ||||
|     elif [ "$(uname -s)" = "FreeBSD" ]; then | ||||
|         MD=$(mdconfig _disk_image) | ||||
|         mke2fs -q -I 128 _disk_image || die "could not create filesystem" | ||||
|     else | ||||
|         if [ -x /sbin/mke2fs ]; then | ||||
|             /sbin/mke2fs -q -I 128 _disk_image || die "could not create filesystem" | ||||
|         else | ||||
|             die "could not mount filesystem and genext2fs is missing" | ||||
|             mke2fs -q -I 128 _disk_image || die "could not create filesystem" | ||||
|         fi | ||||
|     fi | ||||
|     echo "done" | ||||
| 
 | ||||
|     printf "mounting filesystem... " | ||||
|     mkdir -p mnt | ||||
|     if [ "$(uname -s)" = "Darwin" ]; then | ||||
|         fuse-ext2 _disk_image mnt -o rw+,allow_other,uid=501,gid=20 || die "could not mount filesystem" | ||||
|     elif [ "$(uname -s)" = "OpenBSD" ]; then | ||||
|         mount -t ext2fs "/dev/${VND}i" mnt/ || die "could not mount filesystem" | ||||
|     elif [ "$(uname -s)" = "FreeBSD" ]; then | ||||
|         fuse-ext2 -o rw+ "/dev/${MD}" mnt/ || die "could not mount filesystem" | ||||
|     else | ||||
|         mount _disk_image mnt/ || die "could not mount filesystem" | ||||
|     fi | ||||
|     echo "done" | ||||
| fi | ||||
| echo "done" | ||||
| 
 | ||||
| cleanup() { | ||||
|     if [ -d mnt ]; then | ||||
|  | @ -64,10 +61,12 @@ cleanup() { | |||
|             umount mnt || ( sleep 1 && sync && umount mnt ) | ||||
|         fi | ||||
|         rm -rf mnt | ||||
|         if [ "$(uname -s)" = "OpenBSD" ]; then | ||||
|             vnconfig -u "$VND" | ||||
|         elif [ "$(uname -s)" = "FreeBSD" ]; then | ||||
|             mdconfig -d -u "$MD" | ||||
|         if [ $use_genext2fs = 0 ] ; then | ||||
|             if [ "$(uname -s)" = "OpenBSD" ]; then | ||||
|                 vnconfig -u "$VND" | ||||
|             elif [ "$(uname -s)" = "FreeBSD" ]; then | ||||
|                 mdconfig -d -u "$MD" | ||||
|             fi | ||||
|         fi | ||||
|         echo "done" | ||||
|     fi | ||||
|  | @ -81,7 +80,9 @@ if [ $use_genext2fs = 1 ]; then | |||
|     # genext2fs is very slow in generating big images, so I use a smaller image here. size can be updated | ||||
|     # if it's not enough. | ||||
|     # not using "-i 128" since it hangs. Serenity handles whatever default this uses instead. | ||||
|     printf "generating filesystem... " | ||||
|     genext2fs -b 250000 -d mnt _disk_image || die "try increasing image size (genext2fs -b)" | ||||
|     echo "done" | ||||
|     # if using docker with shared mount, file is created as root, so make it writable for users | ||||
|     chmod 0666 _disk_image | ||||
| fi | ||||
|  |  | |||
|  | @ -16,7 +16,9 @@ while [ "$1" != "" ]; do | |||
|     shift | ||||
| done | ||||
| 
 | ||||
| sudo id | ||||
| if ! (command -v genext2fs 1>/dev/null && command -v fakeroot 1>/dev/null); then | ||||
| 	sudo id | ||||
| fi | ||||
| 
 | ||||
| MAKE="make" | ||||
| 
 | ||||
|  | @ -27,11 +29,11 @@ fi | |||
| if [ "$fast_mode" = "1" ]; then | ||||
|     $MAKE -C ../ && \ | ||||
|         $MAKE -C ../ install && | ||||
|         sudo -E PATH="$PATH" ./build-image-qemu.sh | ||||
|         ./sync.sh | ||||
| else | ||||
|     $MAKE -C ../ clean && \ | ||||
|         $MAKE -C ../ && \ | ||||
|         $MAKE -C ../ test && \ | ||||
|         $MAKE -C ../ install && | ||||
|         sudo -E PATH="$PATH" ./build-image-qemu.sh | ||||
|         ./sync.sh | ||||
| fi | ||||
|  |  | |||
|  | @ -4,4 +4,8 @@ set -e | |||
| script_path=$(cd -P -- "$(dirname -- "$0")" && pwd -P) | ||||
| cd "$script_path" | ||||
| 
 | ||||
| sudo -E PATH="$PATH" ./build-image-qemu.sh | ||||
| if command -v genext2fs 1>/dev/null && command -v fakeroot 1>/dev/null; then | ||||
|     fakeroot ./build-image-qemu.sh | ||||
| else | ||||
|     sudo -E PATH="$PATH" ./build-image-qemu.sh | ||||
| fi | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Nikolay Kochulin
						Nikolay Kochulin