2020-05-06 15:40:06 +00:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
2020-06-17 16:20:28 +00:00
|
|
|
wheel_gid=1
|
2020-05-06 15:40:06 +00:00
|
|
|
phys_gid=3
|
2020-09-06 14:10:27 +00:00
|
|
|
utmp_gid=5
|
2020-05-06 15:40:06 +00:00
|
|
|
window_uid=13
|
|
|
|
window_gid=13
|
|
|
|
|
2020-09-20 19:34:14 +00:00
|
|
|
CP="cp"
|
|
|
|
|
2020-10-17 20:25:13 +00:00
|
|
|
# cp on macOS and BSD systems do not support the -d option.
|
2020-09-20 19:34:14 +00:00
|
|
|
# gcp comes with coreutils, which is already a dependency.
|
2020-10-17 20:25:13 +00:00
|
|
|
OS="$(uname -s)"
|
|
|
|
if [ "$OS" = "Darwin" ] || echo "$OS" | grep -qe 'BSD$'; then
|
|
|
|
CP="gcp"
|
2020-09-20 19:34:14 +00:00
|
|
|
fi
|
|
|
|
|
2020-05-06 15:40:06 +00:00
|
|
|
die() {
|
|
|
|
echo "die: $*"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2021-04-20 00:51:04 +00:00
|
|
|
[ -z "$SERENITY_SOURCE_DIR" ] && die "SERENITY_SOURCE_DIR is not set"
|
|
|
|
[ -d "$SERENITY_SOURCE_DIR/Base" ] || die "$SERENITY_SOURCE_DIR/Base doesn't exist"
|
2020-05-06 15:40:06 +00:00
|
|
|
|
|
|
|
umask 0022
|
|
|
|
|
2020-06-04 22:38:42 +00:00
|
|
|
printf "installing base system... "
|
2021-07-30 16:22:40 +00:00
|
|
|
if ! command -v rsync >/dev/null; then
|
|
|
|
die "Please install rsync."
|
|
|
|
fi
|
|
|
|
|
|
|
|
if rsync --chown 2>&1 | grep "missing argument" >/dev/null; then
|
|
|
|
rsync -aH --chown=0:0 --inplace "$SERENITY_SOURCE_DIR"/Base/ mnt/
|
|
|
|
rsync -aH --chown=0:0 --inplace Root/ mnt/
|
2021-04-23 18:55:42 +00:00
|
|
|
else
|
2021-07-30 16:22:40 +00:00
|
|
|
rsync -aH --inplace "$SERENITY_SOURCE_DIR"/Base/ mnt/
|
|
|
|
rsync -aH --inplace Root/ mnt/
|
2021-07-13 05:48:21 +00:00
|
|
|
chown -R 0:0 mnt/
|
2021-04-23 18:55:42 +00:00
|
|
|
fi
|
2021-07-13 14:43:45 +00:00
|
|
|
|
2021-06-28 19:25:18 +00:00
|
|
|
SERENITY_ARCH="${SERENITY_ARCH:-i686}"
|
Toolchain+Meta: Update LLVM version to 13.0.0
This commit updates the Clang toolchain's version to 13.0.0, which comes
with better C++20 support and improved handling of new features by
clang-format. Due to the newly enabled `-Bsymbolic-functions` flag, our
Clang binaries will only be 2-4% slower than if we dynamically linked
them, but we save hundreds of megabytes of disk space.
The `BuildClang.sh` script has been reworked to build the entire
toolchain in just three steps: one for the compiler, one for GNU
binutils, and one for the runtime libraries. This reduces the complexity
of the build script, and will allow us to modify the CI configuration to
only rebuild the libraries when our libc headers change.
Most of the compile flags have been moved out to a separate CMake cache
file, similarly to how the Android and Fuchsia toolchains are
implemented within the LLVM repo. This provides a nicer interface than
the heaps of command-line arguments.
We no longer build separate toolchains for each architecture, as the
same Clang binary can compile code for multiple targets.
The horrible mess that `SERENITY_CLANG_ARCH` was, has been removed in
this commit. Clang happily accepts an `i686-pc-serenity` target triple,
which matches what our GCC toolchain accepts.
2021-08-13 10:11:12 +00:00
|
|
|
LLVM_VERSION="${LLVM_VERSION:-13.0.0}"
|
2021-07-31 13:54:48 +00:00
|
|
|
|
2021-09-07 08:21:36 +00:00
|
|
|
if [ "$SERENITY_TOOLCHAIN" = "Clang" ]; then
|
Toolchain+Meta: Update LLVM version to 13.0.0
This commit updates the Clang toolchain's version to 13.0.0, which comes
with better C++20 support and improved handling of new features by
clang-format. Due to the newly enabled `-Bsymbolic-functions` flag, our
Clang binaries will only be 2-4% slower than if we dynamically linked
them, but we save hundreds of megabytes of disk space.
The `BuildClang.sh` script has been reworked to build the entire
toolchain in just three steps: one for the compiler, one for GNU
binutils, and one for the runtime libraries. This reduces the complexity
of the build script, and will allow us to modify the CI configuration to
only rebuild the libraries when our libc headers change.
Most of the compile flags have been moved out to a separate CMake cache
file, similarly to how the Android and Fuchsia toolchains are
implemented within the LLVM repo. This provides a nicer interface than
the heaps of command-line arguments.
We no longer build separate toolchains for each architecture, as the
same Clang binary can compile code for multiple targets.
The horrible mess that `SERENITY_CLANG_ARCH` was, has been removed in
this commit. Clang happily accepts an `i686-pc-serenity` target triple,
which matches what our GCC toolchain accepts.
2021-08-13 10:11:12 +00:00
|
|
|
TOOLCHAIN_DIR="$SERENITY_SOURCE_DIR"/Toolchain/Local/clang/
|
|
|
|
$CP "$TOOLCHAIN_DIR"/lib/"$SERENITY_ARCH"-pc-serenity/* mnt/usr/lib
|
2021-11-13 12:25:00 +00:00
|
|
|
mkdir -p mnt/usr/include/"$SERENITY_ARCH"-pc-serenity
|
|
|
|
$CP -r "$TOOLCHAIN_DIR"/include/c++ mnt/usr/include
|
|
|
|
$CP -r "$TOOLCHAIN_DIR"/include/"$SERENITY_ARCH"-pc-serenity/c++ mnt/usr/include/"$SERENITY_ARCH"-pc-serenity
|
2021-08-28 17:00:11 +00:00
|
|
|
elif [ "$SERENITY_ARCH" != "aarch64" ]; then
|
2021-07-31 13:54:48 +00:00
|
|
|
$CP "$SERENITY_SOURCE_DIR"/Toolchain/Local/"$SERENITY_ARCH"/"$SERENITY_ARCH"-pc-serenity/lib/libgcc_s.so mnt/usr/lib
|
2021-11-21 06:53:14 +00:00
|
|
|
$CP "$SERENITY_SOURCE_DIR"/Toolchain/Local/"$SERENITY_ARCH"/"$SERENITY_ARCH"-pc-serenity/lib/libstdc++.a mnt/usr/lib
|
|
|
|
$CP -r "$SERENITY_SOURCE_DIR"/Toolchain/Local/"$SERENITY_ARCH"/"$SERENITY_ARCH"-pc-serenity/include/c++ mnt/usr/include
|
2021-07-31 13:54:48 +00:00
|
|
|
fi
|
|
|
|
|
2020-06-04 22:39:53 +00:00
|
|
|
# If umask was 027 or similar when the repo was cloned,
|
|
|
|
# file permissions in Base/ are too restrictive. Restore
|
|
|
|
# the permissions needed in the image.
|
2021-04-20 00:51:04 +00:00
|
|
|
chmod -R g+rX,o+rX "$SERENITY_SOURCE_DIR"/Base/* mnt/
|
2020-06-04 22:38:42 +00:00
|
|
|
|
2021-04-29 19:40:59 +00:00
|
|
|
chmod 660 mnt/etc/WindowServer.ini
|
|
|
|
chown $window_uid:$window_gid mnt/etc/WindowServer.ini
|
2020-06-04 22:38:42 +00:00
|
|
|
echo "/bin/sh" > mnt/etc/shells
|
|
|
|
|
2021-06-15 13:12:50 +00:00
|
|
|
if [ -f mnt/bin/su ]; then
|
|
|
|
chown 0:$wheel_gid mnt/bin/su
|
|
|
|
chmod 4750 mnt/bin/su
|
|
|
|
fi
|
|
|
|
if [ -f mnt/bin/passwd ]; then
|
|
|
|
chown 0:$wheel_gid mnt/bin/passwd
|
|
|
|
chmod 4755 mnt/bin/passwd
|
|
|
|
fi
|
|
|
|
if [ -f mnt/bin/ping ]; then
|
|
|
|
chown 0:$wheel_gid mnt/bin/ping
|
|
|
|
chmod 4755 mnt/bin/ping
|
|
|
|
fi
|
|
|
|
if [ -f mnt/bin/traceroute ]; then
|
|
|
|
chown 0:$wheel_gid mnt/bin/traceroute
|
|
|
|
chmod 4755 mnt/bin/traceroute
|
|
|
|
fi
|
|
|
|
if [ -f mnt/bin/keymap ]; then
|
|
|
|
chown 0:$phys_gid mnt/bin/keymap
|
|
|
|
chmod 4750 mnt/bin/keymap
|
|
|
|
fi
|
|
|
|
if [ -f mnt/bin/shutdown ]; then
|
|
|
|
chown 0:$phys_gid mnt/bin/shutdown
|
|
|
|
chmod 4750 mnt/bin/shutdown
|
|
|
|
fi
|
|
|
|
if [ -f mnt/bin/reboot ]; then
|
|
|
|
chown 0:$phys_gid mnt/bin/reboot
|
|
|
|
chmod 4750 mnt/bin/reboot
|
|
|
|
fi
|
|
|
|
if [ -f mnt/bin/pls ]; then
|
|
|
|
chown 0:$wheel_gid mnt/bin/pls
|
|
|
|
chmod 4750 mnt/bin/pls
|
|
|
|
fi
|
|
|
|
if [ -f mnt/bin/utmpupdate ]; then
|
|
|
|
chown 0:$utmp_gid mnt/bin/utmpupdate
|
|
|
|
chmod 2755 mnt/bin/utmpupdate
|
|
|
|
fi
|
2022-01-20 13:15:19 +00:00
|
|
|
if [ -f mnt/bin/timezone ]; then
|
|
|
|
chown 0:$phys_gid mnt/bin/timezone
|
|
|
|
chmod 4750 mnt/bin/timezone
|
|
|
|
fi
|
2021-10-22 09:02:11 +00:00
|
|
|
if [ -f mnt/usr/Tests/Kernel/TestMemoryDeviceMmap ]; then
|
|
|
|
chown 0:0 mnt/usr/Tests/Kernel/TestMemoryDeviceMmap
|
|
|
|
chmod 4755 mnt/usr/Tests/Kernel/TestMemoryDeviceMmap
|
|
|
|
fi
|
2021-10-27 22:44:35 +00:00
|
|
|
if [ -f mnt/usr/Tests/Kernel/TestProcFSWrite ]; then
|
|
|
|
chown 0:0 mnt/usr/Tests/Kernel/TestProcFSWrite
|
|
|
|
chmod 4755 mnt/usr/Tests/Kernel/TestProcFSWrite
|
|
|
|
fi
|
2021-06-15 13:12:50 +00:00
|
|
|
|
2020-06-04 22:38:42 +00:00
|
|
|
chmod 0400 mnt/res/kernel.map
|
|
|
|
chmod 0400 mnt/boot/Kernel
|
2021-07-17 07:43:15 +00:00
|
|
|
chmod 0400 mnt/boot/Kernel.debug
|
2021-01-09 16:44:44 +00:00
|
|
|
chmod 600 mnt/etc/shadow
|
2021-02-13 10:22:48 +00:00
|
|
|
chmod 755 mnt/res/devel/templates/*.postcreate
|
2020-06-04 22:38:42 +00:00
|
|
|
echo "done"
|
|
|
|
|
2020-05-06 15:40:06 +00:00
|
|
|
printf "creating initial filesystem structure... "
|
2022-02-25 19:45:29 +00:00
|
|
|
for dir in bin etc proc mnt tmp boot mod var/run usr/local; do
|
2020-05-06 15:40:06 +00:00
|
|
|
mkdir -p mnt/$dir
|
|
|
|
done
|
|
|
|
chmod 700 mnt/boot
|
|
|
|
chmod 700 mnt/mod
|
|
|
|
chmod 1777 mnt/tmp
|
|
|
|
echo "done"
|
|
|
|
|
2020-09-06 14:10:27 +00:00
|
|
|
printf "creating utmp file... "
|
|
|
|
touch mnt/var/run/utmp
|
|
|
|
chown 0:$utmp_gid mnt/var/run/utmp
|
|
|
|
chmod 664 mnt/var/run/utmp
|
|
|
|
echo "done"
|
|
|
|
|
2020-12-25 17:26:38 +00:00
|
|
|
printf "setting up device nodes folder... "
|
2020-05-06 15:40:06 +00:00
|
|
|
mkdir -p mnt/dev
|
2021-01-16 17:37:03 +00:00
|
|
|
echo "done"
|
2020-05-06 15:40:06 +00:00
|
|
|
|
2021-03-13 10:02:34 +00:00
|
|
|
printf "setting up sysfs folder... "
|
|
|
|
mkdir -p mnt/sys
|
|
|
|
echo "done"
|
|
|
|
|
2020-05-24 14:26:33 +00:00
|
|
|
printf "writing version file... "
|
2020-12-28 23:36:15 +00:00
|
|
|
GIT_HASH=$( (git log --pretty=format:'%h' -n 1 | cut -c1-7) || true )
|
2020-05-24 14:26:33 +00:00
|
|
|
printf "[Version]\nMajor=1\nMinor=0\nGit=%s\n" "$GIT_HASH" > mnt/res/version.ini
|
|
|
|
echo "done"
|
|
|
|
|
2020-05-06 15:40:06 +00:00
|
|
|
printf "installing users... "
|
|
|
|
mkdir -p mnt/root
|
|
|
|
mkdir -p mnt/home/anon
|
|
|
|
mkdir -p mnt/home/anon/Desktop
|
|
|
|
mkdir -p mnt/home/anon/Downloads
|
|
|
|
mkdir -p mnt/home/nona
|
2022-03-20 18:41:37 +00:00
|
|
|
rm -fr mnt/home/anon/Tests/js-tests mnt/home/anon/Tests/web-tests mnt/home/anon/Tests/cpp-tests mnt/home/anon/Tests/wasm-tests
|
2022-03-20 18:38:55 +00:00
|
|
|
mkdir -p mnt/home/anon/Tests/cpp-tests/
|
2021-04-20 00:51:04 +00:00
|
|
|
cp "$SERENITY_SOURCE_DIR"/README.md mnt/home/anon/
|
2022-03-20 18:41:37 +00:00
|
|
|
cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibJS/Tests mnt/home/anon/Tests/js-tests
|
|
|
|
cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibWeb/Tests mnt/home/anon/Tests/web-tests
|
2022-03-20 18:38:55 +00:00
|
|
|
cp -r "$SERENITY_SOURCE_DIR"/Userland/DevTools/HackStudio/LanguageServers/Cpp/Tests mnt/home/anon/Tests/cpp-tests/comprehension
|
|
|
|
cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibCpp/Tests/parser mnt/home/anon/Tests/cpp-tests/parser
|
|
|
|
cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibCpp/Tests/preprocessor mnt/home/anon/Tests/cpp-tests/preprocessor
|
2022-03-20 18:41:37 +00:00
|
|
|
cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibWasm/Tests mnt/home/anon/Tests/wasm-tests
|
|
|
|
cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibJS/Tests/test-common.js mnt/home/anon/Tests/wasm-tests
|
|
|
|
cp -r "$SERENITY_SOURCE_DIR"/Userland/Applications/Spreadsheet/Tests mnt/home/anon/Tests/spreadsheet-tests
|
2021-08-22 07:11:17 +00:00
|
|
|
|
|
|
|
if [ -n "$SERENITY_COPY_SOURCE" ] ; then
|
|
|
|
printf "\ncopying Serenity's source... "
|
|
|
|
rm -fr mnt/home/anon/Source/serenity
|
|
|
|
mkdir -p mnt/home/anon/Source/serenity
|
|
|
|
git clone --depth=1 file://"$SERENITY_SOURCE_DIR" mnt/home/anon/Source/serenity
|
|
|
|
rm -fr mnt/home/anon/Source/serenity/.git
|
|
|
|
fi
|
|
|
|
|
2020-05-06 15:40:06 +00:00
|
|
|
chmod 700 mnt/root
|
|
|
|
chmod 700 mnt/home/anon
|
|
|
|
chmod 700 mnt/home/nona
|
|
|
|
chown -R 100:100 mnt/home/anon
|
|
|
|
chown -R 200:200 mnt/home/nona
|
|
|
|
echo "done"
|
|
|
|
|
2021-05-27 06:52:46 +00:00
|
|
|
printf "adding some desktop icons... "
|
2021-04-23 18:55:42 +00:00
|
|
|
ln -sf /bin/Browser mnt/home/anon/Desktop/
|
2021-05-06 11:43:00 +00:00
|
|
|
ln -sf /bin/TextEditor mnt/home/anon/Desktop/Text\ Editor
|
2021-04-23 18:55:42 +00:00
|
|
|
ln -sf /bin/Help mnt/home/anon/Desktop/
|
|
|
|
ln -sf /home/anon mnt/home/anon/Desktop/Home
|
2021-05-27 06:52:46 +00:00
|
|
|
chown -R 100:100 mnt/home/anon/Desktop
|
2021-01-21 21:56:28 +00:00
|
|
|
echo "done"
|
2020-12-27 13:51:08 +00:00
|
|
|
|
2020-05-06 15:40:06 +00:00
|
|
|
printf "installing shortcuts... "
|
2021-04-23 18:55:42 +00:00
|
|
|
ln -sf Shell mnt/bin/sh
|
|
|
|
ln -sf test mnt/bin/[
|
2020-05-06 15:40:06 +00:00
|
|
|
echo "done"
|
|
|
|
|
2020-09-12 18:37:12 +00:00
|
|
|
printf "installing 'checksum' variants... "
|
2021-04-23 18:55:42 +00:00
|
|
|
ln -sf checksum mnt/bin/md5sum
|
|
|
|
ln -sf checksum mnt/bin/sha1sum
|
|
|
|
ln -sf checksum mnt/bin/sha256sum
|
|
|
|
ln -sf checksum mnt/bin/sha512sum
|
2020-09-12 18:37:12 +00:00
|
|
|
echo "done"
|
|
|
|
|
2020-05-06 15:40:06 +00:00
|
|
|
# Run local sync script, if it exists
|
2021-04-20 00:51:04 +00:00
|
|
|
if [ -f "${SERENITY_SOURCE_DIR}/sync-local.sh" ]; then
|
|
|
|
sh "${SERENITY_SOURCE_DIR}/sync-local.sh"
|
2020-05-06 15:40:06 +00:00
|
|
|
fi
|