Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ci
Path: blob/main/scripts/build/build-test_image-13.sh
1130 views
1
#!/bin/sh
2
3
SSL_CA_CERT_FILE=/usr/local/share/certs/ca-root-nss.crt
4
5
set -ex
6
7
if [ -z "${GIT_COMMIT}" ]; then
8
echo "No git commit id specified"
9
exit 1
10
fi
11
12
cleanup () {
13
# check mount point inside jail
14
P=${WORKSPACE}/work/ufs/dev
15
if [ `mount | grep ${P} | wc -l` -gt 0 ]; then
16
sudo umount ${P}
17
fi
18
}
19
20
trap cleanup EXIT
21
22
KERNCONF=${KERNCONF:-GENERIC}
23
ARTIFACT_SERVER=${ARTIFACT_SERVER:-artifact.ci.freebsd.org}
24
ARTIFACT_SUBDIR=snapshot/${FBSD_BRANCH}/${GIT_COMMIT}/${TARGET}/${TARGET_ARCH}
25
CONFIG_BASE=`dirname $0 | xargs realpath`/config-13
26
if [ "${KERNCONF}" = "GENERIC" ]; then
27
KERNEL=kernel
28
KERNEL_DBG=kernel-dbg
29
OUTPUT_IMG_NAME=disk-test.img
30
else
31
KERNEL=kernel-${KERNCONF}
32
KERNEL_DBG=kernel-dbg-${KERNCONF}
33
OUTPUT_IMG_NAME=disk-test-${KERNCONF}.img
34
fi
35
36
sudo rm -fr work
37
mkdir -p work
38
cd work
39
40
DIST_PACKAGES="base ${KERNEL}"
41
if [ "${WITH_DOC}" = 1 ]; then
42
DIST_PACKAGES="${DIST_PACKAGES} doc"
43
fi
44
if [ "${WITH_TESTS}" = 1 ]; then
45
DIST_PACKAGES="${DIST_PACKAGES} tests"
46
fi
47
if [ "${WITH_DEBUG}" = 1 ]; then
48
DIST_PACKAGES="${DIST_PACKAGES} base-dbg ${KERNEL_DBG}"
49
fi
50
if [ "${WITH_LIB32}" = 1 ]; then
51
DIST_PACKAGES="${DIST_PACKAGES} lib32"
52
if [ "${WITH_DEBUG}" = 1 ]; then
53
DIST_PACKAGES="${DIST_PACKAGES} lib32-dbg"
54
fi
55
fi
56
mkdir -p ufs
57
for f in ${DIST_PACKAGES}
58
do
59
fetch https://${ARTIFACT_SERVER}/${ARTIFACT_SUBDIR}/${f}.txz
60
sudo tar Jxf ${f}.txz -C ufs
61
done
62
63
# Install packages in the target image. We can only do it
64
# if we can execute target architecture binaries.
65
if [ "${TARGET}" = "amd64" -o "${TARGET}" = "i386" ]; then
66
sudo cp /etc/resolv.conf ufs/etc/
67
sudo mount -t devfs devfs ufs/dev
68
sudo chroot ufs env ASSUME_ALWAYS_YES=yes pkg update
69
# Install packages needed by tests:
70
# coreutils: bin/date
71
# gdb: local/kyua/utils/stacktrace_test
72
# jq: sys/net/if_bridge_test
73
# kyua: everything
74
# ksh93: tests/sys/cddl/zfs/...
75
# nist-kat: sys/opencrypto/runtests
76
# nmap: sys/netinet/fibs_test:arpresolve_checks_interface_fib
77
# perl5: lots of stuff
78
# pkgconf: local/lutok/examples_test, local/atf/atf-c, local/atf/atf-c++
79
# porch: sys/kern/tty
80
# py-dpkt: sys/opencrypto/runtests
81
# python3: sys/opencrypto/runtests
82
# sg3_utils: sys/cam/ctl
83
# sudo: tests/sys/cddl/zfs/tests/delegate/...
84
# tcptestsuite: network stack test suite
85
sudo chroot ufs pkg install -y \
86
coreutils \
87
gdb \
88
jq \
89
ksh93 \
90
nist-kat \
91
nmap \
92
perl5 \
93
porch \
94
net/py-dpkt \
95
net/scapy \
96
python \
97
python3 \
98
sg3_utils \
99
sudo \
100
tcptestsuite
101
102
if [ "${TARGET}" = "amd64" ]; then
103
sudo chroot ufs pkg install -Iy \
104
linux-c7-ltp || true
105
fi
106
107
sudo umount ufs/dev
108
sudo rm -f ufs/etc/resolv.conf
109
fi
110
111
# copy default configs, existing files will be override
112
sudo cp -Rf ${CONFIG_BASE}/testvm/override/ ufs/
113
114
FROM=${CONFIG_BASE}/testvm/append/
115
TO=ufs
116
for i in `find ${FROM} -type f`
117
do
118
f=${i#${FROM}}
119
sudo mkdir -p ${TO}/`dirname $f`
120
cat ${FROM}$f | sudo tee -a ${TO}/$f > /dev/null
121
done
122
123
if [ "${TARGET}" = "powerpc" ]; then
124
# XXX: Looks like powerpc64 cannot boot with GPT,
125
# and the default fstab specifies /dev/gpt/rootfs.
126
cat <<EOF | sudo tee ufs/etc/fstab
127
# Device Mountpoint FStype Options Dump Pass#
128
/dev/vtbd0s3 none swap sw 0 0
129
/dev/vtbd0s2 / ufs rw 1 1
130
fdesc /dev/fd fdescfs rw 0 0
131
EOF
132
fi
133
134
case "${TARGET_ARCH}" in
135
mips|mips64|powerpc|powerpcspe|powerpc64)
136
B_FLAG="big"
137
;;
138
*)
139
B_FLAG="little"
140
;;
141
esac
142
143
sudo dd if=/dev/random of=ufs/boot/entropy bs=4k count=1
144
sudo makefs -B ${B_FLAG} -d 6144 -t ffs -f 200000 -s 8g -o version=2,bsize=32768,fsize=4096 -Z ufs.img ufs
145
case "${TARGET}" in
146
arm64)
147
mkdir -p efi/EFI/BOOT
148
cp -f ufs/boot/loader_lua.efi efi/EFI/BOOT/bootaa64.efi
149
sudo makefs -d 6144 -t msdos -s 50m -Z efi.img efi
150
mkimg -s gpt -f raw \
151
-p efi:=efi.img \
152
-p freebsd-swap/swapfs::1G \
153
-p freebsd-ufs/rootfs:=ufs.img \
154
-o ${OUTPUT_IMG_NAME}
155
;;
156
arm)
157
mkdir -p efi/EFI/BOOT
158
cp -f ufs/boot/loader_lua.efi efi/EFI/BOOT/bootarm.efi
159
sudo makefs -d 6144 -t msdos -s 50m -Z efi.img efi
160
mkimg -s gpt -f raw \
161
-p efi:=efi.img \
162
-p freebsd-swap/swapfs::1G \
163
-p freebsd-ufs/rootfs:=ufs.img \
164
-o ${OUTPUT_IMG_NAME}
165
;;
166
mips)
167
mv ufs.img ${OUTPUT_IMG_NAME}
168
;;
169
powerpc)
170
# Note: BSD slices container is not working when cross created from amd64.
171
# As workaround, add UFS image directly on MBR partition #2
172
mkimg -a 1 -s mbr -f raw \
173
-p prepboot:=ufs/boot/boot1.elf \
174
-p freebsd:=ufs.img \
175
-p freebsd::1G \
176
-o ${OUTPUT_IMG_NAME}
177
;;
178
riscv)
179
mkdir -p efi/EFI/BOOT
180
cp -f ufs/boot/loader_lua.efi efi/EFI/BOOT/bootriscv64.efi
181
sudo makefs -d 6144 -t msdos -s 50m -Z efi.img efi
182
mkimg -s gpt -f raw \
183
-p efi:=efi.img \
184
-p freebsd-swap/swapfs::1G \
185
-p freebsd-ufs/rootfs:=ufs.img \
186
-o ${OUTPUT_IMG_NAME}
187
;;
188
*)
189
mkimg -s gpt -f raw \
190
-b ufs/boot/pmbr \
191
-p freebsd-boot/bootfs:=ufs/boot/gptboot \
192
-p freebsd-swap/swapfs::1G \
193
-p freebsd-ufs/rootfs:=ufs.img \
194
-o ${OUTPUT_IMG_NAME}
195
;;
196
esac
197
198
zstd --rm ${OUTPUT_IMG_NAME}
199
200
cd ${WORKSPACE}
201
rm -fr artifact
202
mkdir -p artifact/${ARTIFACT_SUBDIR}
203
mv work/${OUTPUT_IMG_NAME}.zst artifact/${ARTIFACT_SUBDIR}
204
205
echo "USE_GIT_COMMIT=${GIT_COMMIT}" > ${WORKSPACE}/trigger.property
206
207