Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ci
Path: blob/main/scripts/jail/setup.sh
1130 views
1
#!/bin/sh
2
3
set -x
4
5
. freebsd-ci/scripts/jail/jail.conf
6
7
eval BUILDER_JAIL_IP6="\$BUILDER_${EXECUTOR_NUMBER}_IP6"
8
eval BUILDER_JAIL_IP4="\$BUILDER_${EXECUTOR_NUMBER}_IP4"
9
10
if [ -f "${JAIL_CONF}" ]; then
11
. ${JAIL_CONF}
12
else
13
echo "Warning: jail configuration file not found, use default settings."
14
fi
15
16
echo "setup jail ${JNAME} using following parameters:"
17
echo "TARGET=${TARGET}"
18
echo "TARGET_ARCH=${TARGET_ARCH}"
19
echo "WITH_32BIT=${WITH_32BIT}"
20
echo "OSRELEASE=${OSRELEASE}"
21
echo "BUILDER_JAIL_IP6=${BUILDER_JAIL_IP6}"
22
echo "BUILDER_JAIL_IP4=${BUILDER_JAIL_IP4}"
23
24
RELEASE_TYPE=`echo ${OSRELEASE} | cut -f 2 -d '-' | tr -d [:digit:]`
25
case ${RELEASE_TYPE} in
26
"RELEASE"|"BETA"|"RC")
27
SUBDIR=releases
28
BASE_URL=https://download.FreeBSD.org/${SUBDIR}/${TARGET}/${TARGET_ARCH}/${OSRELEASE}
29
;;
30
*)
31
SUBDIR=snapshot
32
JAIL_FBSD_BRANCH=`echo ${OSRELEASE} | cut -f 1 -d '-'`
33
JAIL_GIT_COMMIT=`echo ${OSRELEASE} | cut -f 2 -d '-'`
34
if [ ${JAIL_FBSD_BRANCH} != "main" ]; then
35
JAIL_FBSD_BRANCH="${JAIL_FBSD_BRANCH}-${JAIL_GIT_COMMIT}"
36
JAIL_GIT_COMMIT=`echo ${OSRELEASE} | cut -f 3 -d '-'`
37
fi
38
BASE_URL=https://artifact.ci.FreeBSD.org/${SUBDIR}/${JAIL_FBSD_BRANCH}/${JAIL_GIT_COMMIT}/${TARGET}/${TARGET_ARCH}
39
;;
40
esac
41
42
fetch -m ${BASE_URL}/base.txz
43
if [ "${WITH_32BIT}" -eq 1 ]; then
44
fetch -m ${BASE_URL}/lib32.txz
45
fi
46
47
sudo zfs create ${ZFS_PARENT}/${JNAME}
48
49
sudo tar Jxf base.txz -C ${JPATH}
50
if [ "${WITH_32BIT}" -eq 1 ]; then
51
sudo tar Jxf lib32.txz -C ${JPATH}
52
fi
53
54
if [ -x "${JPATH}/bin/freebsd-version" ]; then
55
OSRELEASE=`${JPATH}/bin/freebsd-version -u`
56
fi
57
58
sudo mount -t devfs devfs ${JPATH}/dev
59
sudo devfs -m ${JPATH}/dev rule -s 4 applyset
60
61
sudo mkdir -p ${JPATH}/${WORKSPACE_IN_JAIL}
62
sudo mount -t nullfs ${WORKSPACE} ${JPATH}/${WORKSPACE_IN_JAIL}
63
64
if [ -n "${MOUNT_REPO}" ]; then
65
sudo mkdir -p ${JPATH}/usr/${MOUNT_REPO}
66
sudo mount -t nullfs ${WORKSPACE}/${MOUNT_REPO} ${JPATH}/usr/${MOUNT_REPO}
67
fi
68
69
printf "${BUILDER_RESOLV_CONF}" | sudo tee ${JPATH}/etc/resolv.conf
70
71
if [ "${BUILDER_NETIF}" -a "${BUILDER_JAIL_IP6}" ]; then
72
sudo ifconfig ${BUILDER_NETIF} inet6 ${BUILDER_JAIL_IP6} alias
73
JAIL_ARG_IP6="ip6.addr=${BUILDER_JAIL_IP6}"
74
else
75
JAIL_ARG_IP6="ip6=disable"
76
fi
77
if [ "${BUILDER_NETIF}" -a "${BUILDER_JAIL_IP4}" ]; then
78
sudo ifconfig ${BUILDER_NETIF} inet ${BUILDER_JAIL_IP4} alias
79
JAIL_ARG_IP4="ip4.addr=${BUILDER_JAIL_IP4}"
80
else
81
JAIL_ARG_IP4="ip4=disable"
82
fi
83
84
sudo jail -c persist \
85
name="${JNAME}" \
86
path="${JPATH}" \
87
osrelease="${OSRELEASE}" \
88
host.hostname="${JNAME}.jail.ci.FreeBSD.org" \
89
${JAIL_ARG_IP6} \
90
${JAIL_ARG_IP4} \
91
allow.chflags \
92
allow.mount \
93
allow.mount.devfs \
94
enforce_statfs=1 \
95
devfs_ruleset=4
96
97
echo "setup build environment"
98
99
sudo jexec ${JNAME} sh -c "sed -i.bak -e 's,pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly,pkg+http://pkg.FreeBSD.org/\${ABI}/latest,' /etc/pkg/FreeBSD.conf"
100
sudo jexec ${JNAME} sh -c "env ASSUME_ALWAYS_YES=yes pkg update"
101
sudo jexec ${JNAME} sh -c "env pkg install -y `cat freebsd-ci/scripts/jail/default-pkg-list | paste -d ' ' -s -`"
102
if [ -s "freebsd-ci/jobs/${JOB_NAME}/pkg-list" ]; then
103
sudo jexec ${JNAME} sh -c "pkg install -y `cat freebsd-ci/jobs/${JOB_NAME}/pkg-list | paste -d ' ' -s -`"
104
fi
105
106
# remove network for quarantine env
107
if [ "$QUARANTINE" ]; then
108
if [ ${BUILDER_NETIF} -a ${BUILDER_JAIL_IP6} ]; then
109
sudo ifconfig ${BUILDER_NETIF} inet6 ${BUILDER_JAIL_IP6} -alias
110
sudo jail -m name=${JNAME} ip6=disable ip6.addr=
111
fi
112
if [ ${BUILDER_NETIF} -a ${BUILDER_JAIL_IP4} ]; then
113
sudo ifconfig ${BUILDER_NETIF} inet ${BUILDER_JAIL_IP4} -alias
114
sudo jail -m name=${JNAME} ip4=disable ip4.addr=
115
fi
116
fi
117
118
# Inherit Jenkins uid and gid from host.
119
JAIL_UID=$(id -u jenkins)
120
JAIL_GID=$(id -g jenkins)
121
122
sudo jexec ${JNAME} sh -c "/usr/sbin/pw groupadd jenkins -g ${JAIL_GID}"
123
sudo jexec ${JNAME} sh -c "/usr/sbin/pw useradd jenkins -u ${JAIL_UID} -g ${JAIL_GID} -c \"Jenkins CI\" -d ${WORKSPACE_IN_JAIL} -s /bin/sh"
124
sudo jexec ${JNAME} sh -c "umask 7337; echo 'jenkins ALL=(ALL) NOPASSWD: ALL' > /usr/local/etc/sudoers.d/jenkins"
125
126
echo "build environment:"
127
128
echo "uname:"
129
sudo jexec ${JNAME} sh -c "uname -a"
130
echo "packages:"
131
sudo jexec ${JNAME} sh -c "pkg info -q"
132
echo "environment variables:"
133
sudo jexec -U jenkins ${JNAME} sh -c "env WORKSPACE=${WORKSPACE_IN_JAIL} env"
134
135