Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ci
Path: blob/main/scripts/build/build-test_image-head.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-head
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
# fusefs-ext2: sys/fs/fusefs/ctl
72
# gdb: local/kyua/utils/stacktrace_test
73
# gtar: sys/fs/tarfs
74
# jq: sys/net/if_bridge_test
75
# kyua: everything
76
# ksh93: tests/sys/cddl/zfs/...
77
# nist-kat: sys/opencrypto/runtests
78
# nmap: sys/netinet/fibs_test:arpresolve_checks_interface_fib
79
# perl5: lots of stuff
80
# pkgconf: local/lutok/examples_test, local/atf/atf-c, local/atf/atf-c++
81
# porch: sys/kern/tty
82
# py-dpkt: sys/opencrypto/runtests
83
# python3: sys/opencrypto/runtests
84
# devel/py-pytest: sys/net/routing, tests in python in general
85
# sg3_utils: sys/cam/ctl
86
# sudo: tests/sys/cddl/zfs/tests/delegate/...
87
# tcptestsuite: network stack test suite
88
sudo chroot ufs pkg install -y \
89
coreutils \
90
fusefs-ext2 \
91
gdb \
92
gtar \
93
jq \
94
ksh93 \
95
nist-kat \
96
nmap \
97
perl5 \
98
porch \
99
net/py-dpkt \
100
net/scapy \
101
python \
102
python3 \
103
devel/py-pytest \
104
devel/py-twisted \
105
security/openvpn \
106
sg3_utils \
107
sudo \
108
tcptestsuite
109
110
if [ "${TARGET}" = "amd64" ]; then
111
sudo chroot ufs pkg install -Iy \
112
linux-c7-ltp || true
113
fi
114
115
sudo umount ufs/dev
116
sudo rm -f ufs/etc/resolv.conf
117
fi
118
119
# copy default configs, existing files will be override
120
sudo cp -Rf ${CONFIG_BASE}/testvm/override/ ufs/
121
122
FROM=${CONFIG_BASE}/testvm/append/
123
TO=ufs
124
for i in `find ${FROM} -type f`
125
do
126
f=${i#${FROM}}
127
sudo mkdir -p ${TO}/`dirname $f`
128
cat ${FROM}$f | sudo tee -a ${TO}/$f > /dev/null
129
done
130
131
if [ "${TARGET}" = "powerpc" ]; then
132
# XXX: Looks like powerpc64 cannot boot with GPT,
133
# and the default fstab specifies /dev/gpt/rootfs.
134
cat <<EOF | sudo tee ufs/etc/fstab
135
# Device Mountpoint FStype Options Dump Pass#
136
/dev/vtbd0s3 none swap sw 0 0
137
/dev/vtbd0s2 / ufs rw 1 1
138
fdesc /dev/fd fdescfs rw 0 0
139
EOF
140
fi
141
142
case "${TARGET_ARCH}" in
143
mips|mips64|powerpc|powerpcspe|powerpc64)
144
B_FLAG="big"
145
;;
146
*)
147
B_FLAG="little"
148
;;
149
esac
150
151
sudo dd if=/dev/random of=ufs/boot/entropy bs=4k count=1
152
sudo makefs -B ${B_FLAG} -d 6144 -t ffs -f 200000 -s 8g -o version=2,bsize=32768,fsize=4096 -Z ufs.img ufs
153
case "${TARGET}" in
154
arm64)
155
mkdir -p efi/EFI/BOOT
156
cp -f ufs/boot/loader_lua.efi efi/EFI/BOOT/bootaa64.efi
157
sudo makefs -d 6144 -t msdos -s 50m -Z efi.img efi
158
mkimg -s gpt -f raw \
159
-p efi:=efi.img \
160
-p freebsd-swap/swapfs::1G \
161
-p freebsd-ufs/rootfs:=ufs.img \
162
-o ${OUTPUT_IMG_NAME}
163
;;
164
arm)
165
mkdir -p efi/EFI/BOOT
166
cp -f ufs/boot/loader_lua.efi efi/EFI/BOOT/bootarm.efi
167
sudo makefs -d 6144 -t msdos -s 50m -Z efi.img efi
168
mkimg -s gpt -f raw \
169
-p efi:=efi.img \
170
-p freebsd-swap/swapfs::1G \
171
-p freebsd-ufs/rootfs:=ufs.img \
172
-o ${OUTPUT_IMG_NAME}
173
;;
174
mips)
175
mv ufs.img ${OUTPUT_IMG_NAME}
176
;;
177
powerpc)
178
# Note: BSD slices container is not working when cross created from amd64.
179
# As workaround, add UFS image directly on MBR partition #2
180
mkimg -a 1 -s mbr -f raw \
181
-p prepboot:=ufs/boot/boot1.elf \
182
-p freebsd:=ufs.img \
183
-p freebsd::1G \
184
-o ${OUTPUT_IMG_NAME}
185
;;
186
riscv)
187
mkdir -p efi/EFI/BOOT
188
cp -f ufs/boot/loader_lua.efi efi/EFI/BOOT/bootriscv64.efi
189
sudo makefs -d 6144 -t msdos -s 50m -Z efi.img efi
190
mkimg -s gpt -f raw \
191
-p efi:=efi.img \
192
-p freebsd-swap/swapfs::1G \
193
-p freebsd-ufs/rootfs:=ufs.img \
194
-o ${OUTPUT_IMG_NAME}
195
;;
196
*)
197
mkimg -s gpt -f raw \
198
-b ufs/boot/pmbr \
199
-p freebsd-boot/bootfs:=ufs/boot/gptboot \
200
-p freebsd-swap/swapfs::1G \
201
-p freebsd-ufs/rootfs:=ufs.img \
202
-o ${OUTPUT_IMG_NAME}
203
;;
204
esac
205
206
zstd --rm ${OUTPUT_IMG_NAME}
207
208
cd ${WORKSPACE}
209
rm -fr artifact
210
mkdir -p artifact/${ARTIFACT_SUBDIR}
211
mv work/${OUTPUT_IMG_NAME}.zst artifact/${ARTIFACT_SUBDIR}
212
213
echo "USE_GIT_COMMIT=${GIT_COMMIT}" > ${WORKSPACE}/trigger.property
214
215