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
|
|
|
|
}
|
|
|
|
|
|
|
|
if [ "$(id -u)" != 0 ]; then
|
|
|
|
die "this script needs to run as root"
|
|
|
|
fi
|
|
|
|
|
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-04-23 18:55:42 +00:00
|
|
|
if command -v rsync >/dev/null; then
|
|
|
|
rsync -aH --inplace "$SERENITY_SOURCE_DIR"/Base/ mnt/
|
|
|
|
rsync -aH --inplace Root/ mnt/
|
|
|
|
else
|
|
|
|
echo "Please install rsync to speed up image creation times, falling back to cp for now"
|
|
|
|
$CP -PdR "$SERENITY_SOURCE_DIR"/Base/* mnt/
|
|
|
|
$CP -PdR Root/* mnt/
|
|
|
|
fi
|
2021-04-20 00:51:04 +00:00
|
|
|
$CP "$SERENITY_SOURCE_DIR"/Toolchain/Local/i686/i686-pc-serenity/lib/libgcc_s.so mnt/usr/lib/
|
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
|
|
|
|
|
|
|
chmod 660 mnt/etc/WindowServer/WindowServer.ini
|
|
|
|
chown $window_uid:$window_gid mnt/etc/WindowServer/WindowServer.ini
|
|
|
|
echo "/bin/sh" > mnt/etc/shells
|
|
|
|
|
2020-06-17 16:20:28 +00:00
|
|
|
chown 0:$wheel_gid mnt/bin/su
|
2020-07-25 22:08:55 +00:00
|
|
|
chown 0:$wheel_gid mnt/bin/passwd
|
2021-04-26 18:30:18 +00:00
|
|
|
chown 0:$wheel_gid mnt/bin/ping
|
|
|
|
chown 0:$wheel_gid mnt/bin/traceroute
|
2020-06-18 20:19:57 +00:00
|
|
|
chown 0:$phys_gid mnt/bin/keymap
|
2020-06-04 22:38:42 +00:00
|
|
|
chown 0:$phys_gid mnt/bin/shutdown
|
|
|
|
chown 0:$phys_gid mnt/bin/reboot
|
|
|
|
chown 0:0 mnt/boot/Kernel
|
|
|
|
chown 0:0 mnt/res/kernel.map
|
|
|
|
chmod 0400 mnt/res/kernel.map
|
|
|
|
chmod 0400 mnt/boot/Kernel
|
|
|
|
chmod 4750 mnt/bin/su
|
2020-07-25 22:08:55 +00:00
|
|
|
chmod 4755 mnt/bin/passwd
|
2020-06-04 22:38:42 +00:00
|
|
|
chmod 4755 mnt/bin/ping
|
2021-03-30 18:19:59 +00:00
|
|
|
chmod 4755 mnt/bin/traceroute
|
2020-06-04 22:38:42 +00:00
|
|
|
chmod 4750 mnt/bin/reboot
|
|
|
|
chmod 4750 mnt/bin/shutdown
|
2020-06-18 20:19:57 +00:00
|
|
|
chmod 4750 mnt/bin/keymap
|
2020-09-06 14:10:27 +00:00
|
|
|
chown 0:$utmp_gid mnt/bin/utmpupdate
|
|
|
|
chmod 2755 mnt/bin/utmpupdate
|
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... "
|
2020-09-06 14:10:27 +00:00
|
|
|
for dir in bin etc proc mnt tmp boot mod var/run; 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
|
|
|
|
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
|
2021-04-20 00:51:04 +00:00
|
|
|
cp "$SERENITY_SOURCE_DIR"/README.md mnt/home/anon/
|
|
|
|
cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibJS/Tests mnt/home/anon/js-tests
|
|
|
|
cp -r "$SERENITY_SOURCE_DIR"/Userland/Libraries/LibWeb/Tests mnt/home/anon/web-tests
|
2020-05-06 15:40:06 +00:00
|
|
|
chmod 700 mnt/root
|
|
|
|
chmod 700 mnt/home/anon
|
|
|
|
chmod 700 mnt/home/nona
|
|
|
|
chown -R 0:0 mnt/root
|
|
|
|
chown -R 100:100 mnt/home/anon
|
|
|
|
chown -R 200:200 mnt/home/nona
|
|
|
|
echo "done"
|
|
|
|
|
2020-12-27 13:51:08 +00:00
|
|
|
printf "adding some desktop icons..."
|
2021-04-23 18:55:42 +00:00
|
|
|
ln -sf /bin/Browser mnt/home/anon/Desktop/
|
|
|
|
ln -sf /bin/TextEditor mnt/home/anon/Desktop/
|
|
|
|
ln -sf /bin/Help mnt/home/anon/Desktop/
|
|
|
|
ln -sf /home/anon mnt/home/anon/Desktop/Home
|
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
|