summaryrefslogtreecommitdiff
path: root/scripts/create_root.sh
blob: 4fb401af74c62eca0208ddb5482c5319dfb6b939 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/bin/oksh

abort( )
{
	echo >&2 '
***************
*** ABORTED ***
***************
'
	echo "An error occurred. Exiting..." >&2
	exit 1
}

trap 'abort' 0

set -e

SCRIPT=$(readlink -f "$0")
BASE=$(dirname ${SCRIPT})/..

ROOT="${BASE}"/root
LOCAL="${BASE}"/local

mountpoint -q "${ROOT}" && sudo umount "${ROOT}"
test -f /dev/loop0 && losetup -d /dev/loop0
test -d "${ROOT}" && rmdir "${ROOT}"
test -f root.img && rm -f root.img

dd if=/dev/zero of=root.img bs=512 count=257040
chmod 666 root.img
losetup /dev/loop0 root.img
mke2fs /dev/loop0
mkdir "${BASE}/root"
sudo mount /dev/loop0 "${BASE}/root"
sudo chmod 777 "${BASE}/root"
sudo rmdir "${BASE}/root/lost+found"

cp -R "${BASE}/build/stage1"/* "${BASE}/root"

# remove cross-compilers
# TODO: they should not be built in the first place
rm -f "${ROOT}"/bin/x86_64*tcc
rm -f "${ROOT}"/bin/tcc
rm -f "${ROOT}"/bin/arm*tcc
rm -f "${ROOT}"/bin/c67*tcc
rm -f "${ROOT}"/bin/riscv64*tcc
rm -f "${ROOT}"/bin/*win32*tcc
rm -rf "${ROOT}"/lib/tcc/x86_64*
rm -rf "${ROOT}"/lib/tcc/arm*
rm -rf "${ROOT}"/lib/tcc/riscv64*
rm -rf "${ROOT}"/lib/tcc/win32
rm -rf "${ROOT}"/lib/tcc/libtcc1.a
rm -rf "${ROOT}"/lib/tcc/bt-*.o
rm -rf "${ROOT}"/lib/tcc/bcheck.o

# remove some unneeded development stuff
rm -rf "${ROOT}"/lib/pkgconfig

# no HTML or info documentation
rm -rf "${ROOT}"/share/info
rm -rf "${ROOT}"/share/doc

# make sure mount points exist
test -d "${ROOT}"/dev || mkdir "${ROOT}"/dev
test -d "${ROOT}"/dev/pts || mkdir "${ROOT}"/dev/pts
test -d "${ROOT}"/proc || mkdir "${ROOT}"/proc
test -d "${ROOT}"/sys || mkdir "${ROOT}"/sys
test -d "${ROOT}"/tmp || mkdir "${ROOT}"/tmp
test -d "${ROOT}"/var || mkdir "${ROOT}"/var
test -d "${ROOT}"/var/run || mkdir "${ROOT}"/var/run
test -d "${ROOT}"/mnt || mkdir "${ROOT}"/mnt

# copy locally adapted scripts, configuration
test -d "${ROOT}/root" || mkdir "${ROOT}/root"
cp "${LOCAL}"/root/.profile "${ROOT}/root"
cp "${LOCAL}"/root/.xserverrc "${ROOT}/root"
cp "${LOCAL}"/root/.xinitrc "${ROOT}/root"
test -d "${ROOT}/bin" || mkdir "${ROOT}/bin"
cp -dR "${LOCAL}"/bin/* "${ROOT}/bin"
test -d "${ROOT}/etc" || mkdir "${ROOT}/etc"
cp -dR "${LOCAL}"/etc/* "${ROOT}/etc"
test -d "${ROOT}/share" || mkdir "${ROOT}/share"

# copy ramdisk, boot loader and kernel to /boot
cp ramdisk.img "${ROOT}/boot"
cp "${BASE}/build/stage1/boot/bzImage" "${ROOT}/boot"
cp "${BASE}/build/stage1/boot/boot.img" "${ROOT}/boot"

# default passwd is SHA-256 or SHA-512 which can take a minute to verify
# on old machines! We are using unsafe MD5 crypt1, beware of hacks!
HASH=$(openssl passwd -1 -salt '5RPVAd' 'xx')
echo "root:${HASH}:17718::::::" >"${ROOT}/etc/shadow"

du -hs "${BASE}/root"
ls -h root.img

sudo umount "${BASE}/root"
losetup -d /dev/loop0

trap - 0

exit 0