--- /dev/null
+# Build Scripts
+
+This directory contains scripts for building FreeSWITCH.
+
+## build-debs-native.sh
+Builds Debian packages for FreeSWITCH from git tree on supported Debian distributions.
+
+### TLDR: Example running from FreeSWITCH git root
+```bash
+scripts/packaging/fsget.sh pat_hFooBar
+scripts/packaging/build/build-debs-native.sh -b 999 -o /tmp/fsdebs/
+```
+
+### Prerequisites
+- Root access is recommended
+- Supported Debian system and architecture
+- FreeSWITCH git repository in the working directory
+- FreeSWITCH Debian repository configured (use `fsget.sh`)
+
+### Features
+- Automated dependency installation
+- FreeSWITCH Debian (source) package creation
+
+### Usage
+```bash
+./build-debs-native.sh -b BUILD_NUMBER -o OUTPUT_DIR [-w WORKING_DIR]
+```
+
+Required:
+- `-b`: Build number (part of package version)
+- `-o`: Output directory for packages
+
+Optional:
+- `-w`: Working directory (defaults to git root, needs to be git tree)
+
+### Output
+Generates `.deb`, `.dsc`, `.changes`, and `.tar.*` files in the output directory.
--- /dev/null
+#!/bin/bash
+
+# lint: shfmt -w -s -bn -ci -sr -fn scripts/packaging/build/build-debs-native.sh
+
+set -e # Exit immediately if a command exits with a non-zero status
+set -u # Treat unset variables as an error
+set -o pipefail # Return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status
+
+print_usage()
+{
+ echo "Usage: $0 -b BUILD_NUMBER -o OUTPUT_DIR [-w WORKING_DIR]"
+ exit 1
+}
+
+WORKING_DIR=$(git rev-parse --show-toplevel 2> /dev/null || pwd -P)
+
+while getopts ":b:o:w:" opt; do
+ case ${opt} in
+ b) BUILD_NUMBER=$OPTARG ;;
+ o) OUTPUT_DIR=$OPTARG ;;
+ w) WORKING_DIR=$OPTARG ;;
+ \?) print_usage ;;
+ esac
+done
+
+if [ -z "${BUILD_NUMBER:-}" ] || [ -z "${OUTPUT_DIR:-}" ]; then
+ print_usage
+fi
+
+if [ "$(id -u)" != "0" ]; then
+ echo "Non-root user detected. Execution may fail."
+fi
+
+cd "${WORKING_DIR}" || exit 1
+
+install_deps()
+{
+ apt-get update || echo "WARNING: apt-get update failed"
+ apt-get install -y \
+ apt-transport-https \
+ debhelper \
+ gnupg2 \
+ build-essential \
+ ca-certificates \
+ curl \
+ devscripts \
+ dh-autoreconf \
+ dos2unix \
+ doxygen \
+ lsb-release \
+ pkg-config \
+ wget || echo "WARNING: package installation failed"
+}
+
+export_vars()
+{
+ export CODENAME=$(lsb_release -sc)
+ if ! VERSION=$(cat ./build/next-release.txt | tr -d '\n'); then
+ echo "Failed to read version file" >&2
+ exit 1
+ fi
+ export GIT_SHA=$(git rev-parse --short HEAD)
+}
+
+setup_git_local()
+{
+ if [ -z "$(git config user.email)" ]; then
+ git config user.email "$(id -un)@localhost"
+ fi
+ if [ -z "$(git config user.name)" ]; then
+ git config user.name "$(id -un)"
+ fi
+ git config --add safe.directory '*'
+}
+
+bootstrap_freeswitch()
+{
+ ./debian/util.sh prep-create-orig -n -V${VERSION}-${BUILD_NUMBER}-${GIT_SHA} -x
+ ./debian/util.sh prep-create-dsc ${CODENAME}
+}
+
+install_freeswitch_deps()
+{
+ apt-get update || echo "WARNING: apt-get update failed"
+ mk-build-deps --install --remove debian/control \
+ --tool "apt-get --yes --no-install-recommends" || echo "WARNING: mk-build-deps failed"
+ apt-get --yes --fix-broken install || echo "WARNING: apt-get fix-broken failed"
+}
+
+build_source_package()
+{
+ dch -b -M -v "${VERSION}-${BUILD_NUMBER}-${GIT_SHA}~${CODENAME}" \
+ --force-distribution -D "${CODENAME}" "Nightly build, ${GIT_SHA}"
+
+ ./debian/util.sh create-orig -n -V${VERSION}-${BUILD_NUMBER}-${GIT_SHA} -x
+}
+
+build_and_move()
+{
+ dpkg-source --diff-ignore=.* --compression=xz --compression-level=9 --build . \
+ && debuild -b -us -uc \
+ && mkdir -p "${OUTPUT_DIR}" \
+ && mv -v ../*.{deb,dsc,changes,tar.*} "${OUTPUT_DIR}"/
+}
+
+main()
+{
+ install_deps
+ export_vars
+ setup_git_local
+ bootstrap_freeswitch
+ install_freeswitch_deps
+ build_source_package
+ build_and_move
+}
+
+main "$@"