xref: /freebsd-src/sys/contrib/openzfs/.github/workflows/scripts/qemu-4-build.sh (revision 5c65a0a9163cc00389d8527ee12c4e69df07ea42)
17a7741afSMartin Matuska#!/usr/bin/env bash
27a7741afSMartin Matuska
37a7741afSMartin Matuska######################################################################
47a7741afSMartin Matuska# 4) configure and build openzfs modules
57a7741afSMartin Matuska######################################################################
67a7741afSMartin Matuska
77a7741afSMartin Matuskaset -eu
87a7741afSMartin Matuska
97a7741afSMartin Matuskafunction run() {
107a7741afSMartin Matuska  LOG="/var/tmp/build-stderr.txt"
117a7741afSMartin Matuska  echo "****************************************************"
127a7741afSMartin Matuska  echo "$(date) ($*)"
137a7741afSMartin Matuska  echo "****************************************************"
147a7741afSMartin Matuska  ($@ || echo $? > /tmp/rv) 3>&1 1>&2 2>&3 | stdbuf -eL -oL tee -a $LOG
157a7741afSMartin Matuska  if [ -f /tmp/rv ]; then
167a7741afSMartin Matuska    RV=$(cat /tmp/rv)
177a7741afSMartin Matuska    echo "****************************************************"
187a7741afSMartin Matuska    echo "exit with value=$RV ($*)"
197a7741afSMartin Matuska    echo "****************************************************"
207a7741afSMartin Matuska    echo 1 > /var/tmp/build-exitcode.txt
217a7741afSMartin Matuska    exit $RV
227a7741afSMartin Matuska  fi
237a7741afSMartin Matuska}
247a7741afSMartin Matuska
257a7741afSMartin Matuskafunction freebsd() {
267a7741afSMartin Matuska  export MAKE="gmake"
277a7741afSMartin Matuska  echo "##[group]Autogen.sh"
287a7741afSMartin Matuska  run ./autogen.sh
297a7741afSMartin Matuska  echo "##[endgroup]"
307a7741afSMartin Matuska
317a7741afSMartin Matuska  echo "##[group]Configure"
327a7741afSMartin Matuska  run ./configure \
337a7741afSMartin Matuska    --prefix=/usr/local \
347a7741afSMartin Matuska    --with-libintl-prefix=/usr/local \
357a7741afSMartin Matuska    --enable-pyzfs \
367a7741afSMartin Matuska    --enable-debug \
377a7741afSMartin Matuska    --enable-debuginfo
387a7741afSMartin Matuska  echo "##[endgroup]"
397a7741afSMartin Matuska
407a7741afSMartin Matuska  echo "##[group]Build"
417a7741afSMartin Matuska  run gmake -j$(sysctl -n hw.ncpu)
427a7741afSMartin Matuska  echo "##[endgroup]"
437a7741afSMartin Matuska
447a7741afSMartin Matuska  echo "##[group]Install"
457a7741afSMartin Matuska  run sudo gmake install
467a7741afSMartin Matuska  echo "##[endgroup]"
477a7741afSMartin Matuska}
487a7741afSMartin Matuska
497a7741afSMartin Matuskafunction linux() {
507a7741afSMartin Matuska  echo "##[group]Autogen.sh"
517a7741afSMartin Matuska  run ./autogen.sh
527a7741afSMartin Matuska  echo "##[endgroup]"
537a7741afSMartin Matuska
547a7741afSMartin Matuska  echo "##[group]Configure"
557a7741afSMartin Matuska  run ./configure \
567a7741afSMartin Matuska    --prefix=/usr \
577a7741afSMartin Matuska    --enable-pyzfs \
587a7741afSMartin Matuska    --enable-debug \
597a7741afSMartin Matuska    --enable-debuginfo
607a7741afSMartin Matuska  echo "##[endgroup]"
617a7741afSMartin Matuska
627a7741afSMartin Matuska  echo "##[group]Build"
637a7741afSMartin Matuska  run make -j$(nproc)
647a7741afSMartin Matuska  echo "##[endgroup]"
657a7741afSMartin Matuska
667a7741afSMartin Matuska  echo "##[group]Install"
677a7741afSMartin Matuska  run sudo make install
687a7741afSMartin Matuska  echo "##[endgroup]"
697a7741afSMartin Matuska}
707a7741afSMartin Matuska
717a7741afSMartin Matuskafunction rpm_build_and_install() {
727a7741afSMartin Matuska  EXTRA_CONFIG="${1:-}"
737a7741afSMartin Matuska  echo "##[group]Autogen.sh"
747a7741afSMartin Matuska  run ./autogen.sh
757a7741afSMartin Matuska  echo "##[endgroup]"
767a7741afSMartin Matuska
777a7741afSMartin Matuska  echo "##[group]Configure"
787a7741afSMartin Matuska  run ./configure --enable-debug --enable-debuginfo $EXTRA_CONFIG
797a7741afSMartin Matuska  echo "##[endgroup]"
807a7741afSMartin Matuska
817a7741afSMartin Matuska  echo "##[group]Build"
827a7741afSMartin Matuska  run make pkg-kmod pkg-utils
837a7741afSMartin Matuska  echo "##[endgroup]"
847a7741afSMartin Matuska
857a7741afSMartin Matuska  echo "##[group]Install"
86*5c65a0a9SMartin Matuska  run sudo dnf -y --nobest install $(ls *.rpm | grep -v src.rpm)
877a7741afSMartin Matuska  echo "##[endgroup]"
887a7741afSMartin Matuska
897a7741afSMartin Matuska}
907a7741afSMartin Matuska
917a7741afSMartin Matuskafunction deb_build_and_install() {
927a7741afSMartin Matuskaecho "##[group]Autogen.sh"
937a7741afSMartin Matuska  run ./autogen.sh
947a7741afSMartin Matuska  echo "##[endgroup]"
957a7741afSMartin Matuska
967a7741afSMartin Matuska  echo "##[group]Configure"
977a7741afSMartin Matuska  run ./configure \
987a7741afSMartin Matuska    --prefix=/usr \
997a7741afSMartin Matuska    --enable-pyzfs \
1007a7741afSMartin Matuska    --enable-debug \
1017a7741afSMartin Matuska    --enable-debuginfo
1027a7741afSMartin Matuska  echo "##[endgroup]"
1037a7741afSMartin Matuska
1047a7741afSMartin Matuska  echo "##[group]Build"
1057a7741afSMartin Matuska  run make native-deb-kmod native-deb-utils
1067a7741afSMartin Matuska  echo "##[endgroup]"
1077a7741afSMartin Matuska
1087a7741afSMartin Matuska  echo "##[group]Install"
1097a7741afSMartin Matuska  # Do kmod install.  Note that when you build the native debs, the
1107a7741afSMartin Matuska  # packages themselves are placed in parent directory '../' rather than
1117a7741afSMartin Matuska  # in the source directory like the rpms are.
1127a7741afSMartin Matuska  run sudo apt-get -y install $(find ../ | grep -E '\.deb$' \
1137a7741afSMartin Matuska    | grep -Ev 'dkms|dracut')
1147a7741afSMartin Matuska  echo "##[endgroup]"
1157a7741afSMartin Matuska}
1167a7741afSMartin Matuska
1177a7741afSMartin Matuska# Debug: show kernel cmdline
1187a7741afSMartin Matuskaif [ -f /proc/cmdline ] ; then
1197a7741afSMartin Matuska  cat /proc/cmdline || true
1207a7741afSMartin Matuskafi
1217a7741afSMartin Matuska
1227a7741afSMartin Matuska# save some sysinfo
1237a7741afSMartin Matuskauname -a > /var/tmp/uname.txt
1247a7741afSMartin Matuska
1257a7741afSMartin Matuskacd $HOME/zfs
1267a7741afSMartin Matuskaexport PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin"
1277a7741afSMartin Matuska
1287a7741afSMartin Matuska# build
1297a7741afSMartin Matuskacase "$1" in
1307a7741afSMartin Matuska  freebsd*)
1317a7741afSMartin Matuska    freebsd
1327a7741afSMartin Matuska    ;;
1337a7741afSMartin Matuska  alma*|centos*)
1347a7741afSMartin Matuska    rpm_build_and_install "--with-spec=redhat"
1357a7741afSMartin Matuska    ;;
1367a7741afSMartin Matuska  fedora*)
1377a7741afSMartin Matuska    rpm_build_and_install
1387a7741afSMartin Matuska    ;;
1397a7741afSMartin Matuska  debian*|ubuntu*)
1407a7741afSMartin Matuska    deb_build_and_install
1417a7741afSMartin Matuska    ;;
1427a7741afSMartin Matuska  *)
1437a7741afSMartin Matuska    linux
1447a7741afSMartin Matuska    ;;
1457a7741afSMartin Matuskaesac
1467a7741afSMartin Matuska
1477a7741afSMartin Matuska# building the zfs module was ok
1487a7741afSMartin Matuskaecho 0 > /var/tmp/build-exitcode.txt
1497a7741afSMartin Matuska
1507a7741afSMartin Matuska# reset cloud-init configuration and poweroff
1517a7741afSMartin Matuskasudo cloud-init clean --logs
1527a7741afSMartin Matuskasync && sleep 2 && sudo poweroff &
1537a7741afSMartin Matuskaexit 0
154