Re: RELENG tarballs

From: Mars G. Miro <spry_at_anarchy.in.the.ph>
Date: Thu, 13 Aug 2026 04:41:58 UTC
Hi All

	The reason I asked the question is because it is something related to 
the SECURITY / RELENG branches where the security fixes for a RELEASE 
are committed.

	I could not grab them from cgit.freebsd.org as a source tarball. I now 
recall that previously you need csup/cvsup/svn to get RELENG_X_X.

	Grabbing them from github and gitlab via https also has some changes in 
contrib/libfido2, if you diff it from a RELEASE from the official ISOs 
-- I think these are CI/CD stuff from these outfits.

	That being said I had another machine that has git and just grabbed it 
from git.freebsd.org instead.

	Thanks.


On 8/13/26 01:42, Ralph Becker-Szendy wrote:
> Gentlemen: The place for such elementary questions about how to use FreeBSD is not the security mailing list. There is a perfectly fine forum at forums.freebsd.org, which is more structured, and suitable for user-level questions. If the signal-to-noise on the security mailing list suffers, a few undesirable things might happen: People might unsubscribe, and not be informed about real security issues. The list may have to be moderated, delaying urgent and valid concerns, and using more volunteer effort.
> 
> Sorry for being such a spoil sport; I left the list itself out of this e-mail to keep it quieter.
> 
> Ralph
> 
>> On Aug 12, 2026, at 10:33 AM, Dimitar Dimitrov <targolini@gmail.com> wrote:
>>
>> Or, you can use something like this:
>> This is how I make custom tar.gz archives to update my machines.
>>
>> arca:~ # cat ./build-release.sh
>> #!/bin/sh
>> set -eu
>>
>> if [ "$(id -u)" -ne 0 ]; then
>>      printf '%s\n' "Error: this script must be run as root." >&2
>>
>>      exit 1
>> fi
>>
>> usage() {
>>      printf "Usage: %s <KERNCONF> <FREEBSD-VERSION>\n" "$0"
>>
>>      exit 1
>> }
>>
>> case $# in
>>      2)
>> KERNEL="$1"
>> VERSION="$2"
>> ;;
>>      *)
>> usage
>> ;;
>> esac
>>
>> sysctl hw.acpi.cpu.cx_lowest=C1
>>
>> SRC="/usr/src"
>>
>> {
>>      cd "$SRC" || exit 1
>>      if ! git checkout "releng/$VERSION"; then
>>          printf "Branch releng/%s didn't exist. Exiting..." "$VERSION"
>>
>>          exit 1
>>      fi
>>
>>      eval "$(sh $SRC/sys/conf/newvers.sh -V REVISION)"
>>      eval "$(sh $SRC/sys/conf/newvers.sh -V BRANCH)"
>>
>>      printf "Branch is releng/%s with kernel: %s\n" "$VERSION" "$KERNEL"
>>
>>      git pull
>> }
>>
>> if [ "$VERSION" != "$REVISION" ]; then
>>      printf "The branch releng/%s of %s is different from releng/%s\n" "$REVISION" "$SRC" "$VERSION"
>>      printf "Action: git checkout releng/%s and try again\n" "$VERSION"
>>
>>      exit 1
>> fi
>>
>> for ds in "stage/builder/$REVISION/archives" "stage/builder/$REVISION/world"; do
>>      if ! zfs list "$ds" > /dev/null 2>&1; then
>>          printf "Error: ZFS dataset %s does not exist\n" "$ds" >&2
>>
>>          exit 1
>>      fi
>> done
>>
>> KERNDIR="/root/kernels"
>> WORLD_DIR="/stage/builder/${REVISION}/world"
>> CLEANUP_LIST="$WORLD_DIR/REMOVE_LIST-$REVISION-$BRANCH.txt"
>> ARCHIVE="/stage/builder/${REVISION}/archives/FreeBSD-$REVISION-$BRANCH-$KERNEL-$(date +%Y%m%d)-world.tar.gz"
>> ETC_ARCHIVE="/stage/builder/${REVISION}/archives/FreeBSD-$REVISION-$BRANCH-$KERNEL-$(date +%Y%m%d)-etc.tar.gz"
>> CONF_DIR="/root/src-configs"
>> SRCCONF_FILE="$CONF_DIR/src-$KERNEL.conf"
>>
>> if [ ! -f "$SRCCONF_FILE" ]; then
>>      printf "Error: SRCCONF file '%s' not found.\n" "$SRCCONF_FILE" >&2
>>
>>      exit 1
>> fi
>>
>> status=""
>> [ -d "$KERNDIR" ] && status="D"
>> [ -f "$KERNDIR/$KERNEL" ] && status="${status}F"
>>
>> case "$status" in
>>      DF)
>>          ;;
>>      D)
>>          printf "Error: Kernel config '%s' not found in '%s'\n" "$KERNEL" "$KERNDIR" >&2
>>
>>          exit 1
>>          ;;
>>      *)
>>          printf "Error: Kernel directory '%s' does not exist or is inaccessible\n" "$KERNDIR" >&2
>>
>>          exit 1
>>          ;;
>> esac
>>
>>
>> if [ ! -d "$WORLD_DIR" ]; then
>> printf "Directory %s didn't exist\n" "$WORLD_DIR"
>>
>> exit 1
>> fi
>>
>> chflags -R noschg "$WORLD_DIR"
>>
>> rm -rf "${WORLD_DIR:?}"/*
>>
>> cd "$SRC" || exit 1
>>
>> NCPU=$(sysctl -n hw.ncpu)
>>
>> make cleanworld cleankernel KERNCONF="$KERNEL" KERNCONFDIR="$KERNDIR"
>>
>> make -j"$NCPU" buildworld buildkernel KERNCONF="$KERNEL" KERNCONFDIR="$KERNDIR" SRCCONF="$SRCCONF_FILE"
>>
>> printf "===> Installing world, kernel and distribution to %s\n" "$WORLD_DIR"
>> make installworld installkernel DESTDIR="$WORLD_DIR" KERNCONF="$KERNEL" KERNCONFDIR="$KERNDIR" SRCCONF="$SRCCONF_FILE"
>>
>> etcupdate build -s /usr/src -M "-j$NCPU SRCCONF=$SRCCONF_FILE KERNCONF=$KERNEL KERNCONFDIR=$KERNDIR" "$ETC_ARCHIVE"
>> make list-old-files list-old-libs list-old-dirs SRCCONF="$SRCCONF_FILE" > "$CLEANUP_LIST"
>>
>> printf "===> Creating archive: %s\n" "$ARCHIVE"
>> tar -cf "${ARCHIVE}" -a -p -C "$WORLD_DIR" .
>>
>> printf "===> Generating SHA256 checksum...\n"
>> sha256 -q "${ARCHIVE}" > "${ARCHIVE}.sha256"
>> sha256 -q "${ETC_ARCHIVE}" > "${ETC_ARCHIVE}.sha256"
>>
>> du -h "${ARCHIVE}"
>> du -h "${ETC_ARCHIVE}"
>>
>> printf "DONE. Copy both %s and .sha256 to your flash drive.\n" "$(basename "${ARCHIVE}")"
>>
>> sysctl hw.acpi.cpu.cx_lowest=C2
>>
>> arca:~ # cat upgrade-from-source.sh
>> #!/bin/sh
>>
>> if [ "$(id -u)" -ne 0 ]; then
>> printf '%s\n' "Error: this script must be run as root." >&2
>> exit 1
>> fi
>>
>> usage() {
>> printf "Usage: %s <BUILDTAR> <BUILDDIST>\n" "$0"
>> exit 1
>> }
>>
>> case $# in
>> 2)
>> TAR="$1"
>> ETC="$2"
>> ;;
>> *)
>> usage
>> ;;
>> esac
>>
>> zfs mount -a
>> zfs set readonly=off zroot
>>
>> if [ -d /boot/kernel ]; then
>> cp -a /boot/kernel /boot/kernel.old
>> fi
>>
>> for f in /usr/bin/* /lib/* /libexec/ld-elf.so.1 /sbin/init /var/empty; do
>>      if [ -f "$f" ]; then
>>          chflags noschg "$f"
>>      elif [ -d "$f" ]; then
>>          chflags -R noschg "$f"
>>      fi
>> done
>>
>> tar -xzpf "$TAR" -C /
>> etcupdate -p -t "$ETC"
>>
>> arca:~ # cat delete-old.sh
>> #!/bin/sh
>>
>> set -eu
>>
>> # must run as root
>> if [ "$(id -u)" -ne 0 ]; then
>>    printf '%s\n' "Error: this script must be run as root." >&2
>>    exit 1
>> fi
>>
>> FILENAME="${1:-}"
>>
>> if [ -z "$FILENAME" ]; then
>>      printf "Usage: %s REMOVE_LIST_filename\n" "$0"
>>      exit 1
>> fi
>>
>> case "$FILENAME" in
>>      REMOVE_LIST*)
>>          ;;
>>      *)
>>          printf "Error: Filename '%s' must start with 'REMOVE_LIST'\n" "$FILENAME"
>>          exit 1
>>          ;;
>> esac
>>
>> if [ ! -f "$FILENAME" ]; then
>>      printf "File '%s' not found.\n" "$FILENAME"
>>      exit 1
>> fi
>>
>> sed -i '' '/^usr\/include/d' "$FILENAME"
>>
>> while IFS= read -r raw_target; do
>>      [ -z "$raw_target" ] && continue
>>
>>      case "$raw_target" in
>>          /*) target="$raw_target" ;;
>>          *)  target="/$raw_target" ;;
>>      esac
>>
>>      if [ -f "$target" ]; then
>>          if ! rm -f "$target" > /dev/null 2>&1; then
>>              chflags noschg "$target"
>>              rm -f "$target"
>>              echo "Deleting file: $target"
>>          else
>>              echo "Deleting file: $target"
>>          fi
>>      elif [ -d "$target" ]; then
>>          if ! rm -rf "$target" > /dev/null 2>&1; then
>>              chflags -R noschg "$target"
>>              rm -rf "$target"
>>              echo "Deleting directory: $target"
>>          else
>>              echo "Deleting directory: $target"
>>          fi
>>      fi
>> done < "$FILENAME"
>>
>> DISCLAIMER: This may or may not cover your use case. You must validate the logic before starting those scripts!
>>
>> On Wed, Aug 12, 2026 at 5:12 PM Dimitar Dimitrov <targolini@gmail.com <mailto:targolini@gmail.com>> wrote:
>>> Hello,
>>> check `man release`
>>> Cheers,
>>>
>>> Dimitar
>>>
>>> On Wed, Aug 12, 2026 at 5:05 PM Mars G. Miro <spry@anarchy.in.the.ph <mailto:spry@anarchy.in.the.ph>> wrote:
>>>> Hi All
>>>>
>>>>          Is there a tarball of the RELENG branches (e.g. 15.1-RELEASE-p2) aside
>>>> from obtaining it via git/github/gitlab/freebsd-update ?
>>>>
>>>>          Thanks.
>>>> 
-- 
cheers
mars
----
Putt's Law:
	Technology is dominated by two types of people:
		Those who understand what they do not manage.
		Those who manage what they do not understand.