nixos

NixOS server files. Mirror from https://git.nordgedanken.dev/kubernetes/nixos
git clone git://archive.git.mtrnord.blog/MTRNord/nixos.git
Log | Files | Refs | README

commit 017dbe64243c808e328afd96e5006d2df0cc7aa2
parent a83e23571ebdfd608904e3a7ed3043daa19e8c6c
Author: MTRNord <mtrnord1@gmail.com>
Date:   Fri, 25 Aug 2023 23:29:58 +0200

Setup for custom built asterisk

Diffstat:
Moverlays/default.nix | 13+++++++++++++
Dpkgs/asterisk/default.nix | 226-------------------------------------------------------------------------------
Dpkgs/asterisk/runtime-vardirs.patch | 51---------------------------------------------------
Dpkgs/asterisk/update.py | 42------------------------------------------
Dpkgs/asterisk/versions.json | 19-------------------
Mpkgs/default.nix | 2+-
6 files changed, 14 insertions(+), 339 deletions(-)

diff --git a/overlays/default.nix b/overlays/default.nix @@ -11,6 +11,19 @@ # example = prev.example.overrideAttrs (oldAttrs: rec { # ... # }); + asterisk = prev.asterisk.overrideAttrs (old: { + preBuild = '' + cat third-party/pjproject/source/pjlib-util/src/pjlib-util/scanner.c + make menuselect.makeopts + ${lib.optionalString (externals ? "addons/mp3") '' + substituteInPlace menuselect.makeopts --replace 'format_mp3 ' "" + ''} + ${lib.optionalString withOpus '' + substituteInPlace menuselect.makeopts --replace 'codec_opus_open_source ' "" + substituteInPlace menuselect.makeopts --replace 'format_ogg_opus_open_source ' "" + ''} + ''; + }); }; # When applied, the unstable nixpkgs set (declared in the flake inputs) will diff --git a/pkgs/asterisk/default.nix b/pkgs/asterisk/default.nix @@ -1,226 +0,0 @@ -{ stdenv -, lib -, fetchurl -, fetchsvn -, fetchFromGitHub -, jansson -, libedit -, libxml2 -, libxslt -, ncurses -, openssl -, sqlite -, util-linux -, dmidecode -, libuuid -, newt -, lua -, speex -, libopus -, opusfile -, libogg -, srtp -, wget -, curl -, iksemel -, pkg-config -, autoconf -, libtool -, automake -, fetchpatch -, python39 -, writeScript -, withOpus ? true -, ldapSupport ? false -, openldap -}: - -let - # remove when upgrading to pjsip >2.13 - pjsip_2_13_patches = [ - (fetchpatch { - name = "CVE-2022-23537.patch"; - url = "https://github.com/pjsip/pjproject/commit/d8440f4d711a654b511f50f79c0445b26f9dd1e1.patch"; - sha256 = "sha256-7ueQCHIiJ7MLaWtR4+GmBc/oKaP+jmEajVnEYqiwLRA="; - }) - (fetchpatch { - name = "CVE-2022-23547.patch"; - url = "https://github.com/pjsip/pjproject/commit/bc4812d31a67d5e2f973fbfaf950d6118226cf36.patch"; - sha256 = "sha256-bpc8e8VAQpfyl5PX96G++6fzkFpw3Or1PJKNPKl7N5k="; - }) - (fetchpatch { - name = "CVE-2023-27585.patch"; - url = "https://github.com/pjsip/pjproject/commit/d1c5e4da5bae7f220bc30719888bb389c905c0c5.patch"; - hash = "sha256-+yyKKTKG2FnfyLWnc4S80vYtDzmiu9yRmuqb5eIulPg="; - }) - ]; - - common = { version, sha256, externals, pjsip_patches ? [ ] }: stdenv.mkDerivation { - inherit version; - pname = "asterisk" - + lib.optionalString ldapSupport "-ldap"; - - - buildInputs = [ - jansson - libedit - libxml2 - libxslt - ncurses - openssl - sqlite - dmidecode - libuuid - newt - lua - speex - srtp - wget - curl - iksemel - ] - ++ lib.optionals withOpus [ libopus opusfile libogg ] - ++ lib.optionals ldapSupport [ openldap ]; - nativeBuildInputs = [ util-linux pkg-config autoconf libtool automake ]; - - patches = [ - # We want the Makefile to install the default /var skeleton - # under ${out}/var but we also want to use /var at runtime. - # This patch changes the runtime behavior to look for state - # directories in /var rather than ${out}/var. - ./runtime-vardirs.patch - ] ++ lib.optional withOpus "${asterisk-opus}/asterisk.patch"; - - postPatch = '' - echo "PJPROJECT_CONFIG_OPTS += --prefix=$out" >> third-party/pjproject/Makefile.rules - ''; - - src = fetchurl { - url = "https://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-${version}.tar.gz"; - inherit sha256; - }; - - # The default libdir is $PREFIX/usr/lib, which causes problems when paths - # compiled into Asterisk expect ${out}/usr/lib rather than ${out}/lib. - - # Copy in externals to avoid them being downloaded; - # they have to be copied, because the modification date is checked. - # If you are getting a permission denied error on this dir, - # you're likely missing an automatically downloaded dependency - preConfigure = '' - mkdir externals_cache - - ${lib.concatStringsSep "\n" - (lib.mapAttrsToList (dst: src: "cp -r --no-preserve=mode ${src} ${dst}") externals)} - - ${lib.optionalString (externals ? "addons/mp3") "bash contrib/scripts/get_mp3_source.sh || true"} - - chmod -w externals_cache - ${lib.optionalString withOpus '' - cp ${asterisk-opus}/include/asterisk/* ./include/asterisk - cp ${asterisk-opus}/codecs/* ./codecs - cp ${asterisk-opus}/formats/* ./formats - ''} - ${lib.concatMapStringsSep "\n" (patch: '' - cp ${patch} ./third-party/pjproject/patches/${patch.name} - '') pjsip_patches} - ./bootstrap.sh - ''; - - configureFlags = [ - "--libdir=\${out}/lib" - "--with-lua=${lua}/lib" - "--with-pjproject-bundled" - "--with-externals-cache=$(PWD)/externals_cache" - ]; - - preBuild = '' - cat third-party/pjproject/source/pjlib-util/src/pjlib-util/scanner.c - make menuselect.makeopts - ${lib.optionalString (externals ? "addons/mp3") '' - substituteInPlace menuselect.makeopts --replace 'format_mp3 ' "" - ''} - ${lib.optionalString withOpus '' - substituteInPlace menuselect.makeopts --replace 'codec_opus_open_source ' "" - substituteInPlace menuselect.makeopts --replace 'format_ogg_opus_open_source ' "" - ''} - ''; - - postInstall = '' - # Install sample configuration files for this version of Asterisk - make samples - ${lib.optionalString (lib.versionAtLeast version "17.0.0") "make install-headers"} - ''; - - meta = with lib; { - description = "Software implementation of a telephone private branch exchange (PBX)"; - homepage = "https://www.asterisk.org/"; - license = licenses.gpl2Only; - maintainers = with maintainers; [ auntie DerTim1 yorickvp ]; - }; - }; - - pjproject_2_13 = fetchurl - { - url = "https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.13/pjproject-2.13.tar.bz2"; - hash = "sha256-Zj93PUAct13KVR5taOWEbQdKq76wicaBTNHpHC0rICY="; - } // { - pjsip_patches = pjsip_2_13_patches; - }; - - mp3-202 = fetchsvn { - url = "http://svn.digium.com/svn/thirdparty/mp3/trunk"; - rev = "202"; - sha256 = "1s9idx2miwk178sa731ig9r4fzx4gy1q8xazfqyd7q4lfd70s1cy"; - }; - - asterisk-opus = fetchFromGitHub { - owner = "traud"; - repo = "asterisk-opus"; - # No releases, points to master as of 2022-04-06 - rev = "a959f072d3f364be983dd27e6e250b038aaef747"; - sha256 = "sha256-CASlTvTahOg9D5jccF/IN10LP/U8rRy9BFCSaHGQfCw="; - }; - - # auto-generated by update.py - versions = lib.mapAttrs - (_: { version, sha256 }: - let - pjsip = pjproject_2_13; - in - common { - inherit version sha256; - inherit (pjsip) pjsip_patches; - externals = { - "externals_cache/${pjsip.name}" = pjsip; - "addons/mp3" = mp3-202; - }; - }) - (lib.importJSON ./versions.json); - - updateScript_python = python39.withPackages (p: with p; [ packaging beautifulsoup4 requests ]); - updateScript = writeScript "asterisk-update" '' - #!/usr/bin/env bash - exec ${updateScript_python}/bin/python ${toString ./update.py} - ''; - -in -{ - # Supported releases (as of 2023-04-19). - # v16 and v19 have been dropped because they go EOL before the NixOS 23.11 release. - # Source: https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions - # Exact version can be found at https://www.asterisk.org/downloads/asterisk/all-asterisk-versions/ - # - # Series Type Rel. Date Sec. Fixes EOL - # 16.x LTS 2018-10-09 2022-10-09 2023-10-09 (dropped) - # 18.x LTS 2020-10-20 2024-10-20 2025-10-20 - # 19.x Standard 2021-11-02 2022-11-02 2023-11-02 (dropped) - # 20.x LTS 2022-11-02 2026-10-19 2027-10-19 - # 21.x Standard 2023-10-18 2025-10-18 2026-10-18 (unreleased) - asterisk-lts = versions.asterisk_18; - asterisk-stable = versions.asterisk_20; - asterisk = versions.asterisk_20.overrideAttrs (o: { - passthru = (o.passthru or { }) // { inherit updateScript; }; - }); - -} // versions diff --git a/pkgs/asterisk/runtime-vardirs.patch b/pkgs/asterisk/runtime-vardirs.patch @@ -1,50 +0,0 @@ -diff -rupN asterisk-14.1.2/build_tools/make_defaults_h asterisk-14.1.2-patched/build_tools/make_defaults_h ---- asterisk-14.1.2/build_tools/make_defaults_h 2016-11-10 20:43:02.000000000 +0100 -+++ asterisk-14.1.2-patched/build_tools/make_defaults_h 2016-11-16 10:09:04.189625495 +0100 -@@ -1,4 +1,13 @@ - #!/bin/sh -+ -+ASTLOGDIR=/var/log/asterisk -+ASTVARRUNDIR=/run/asterisk -+ASTVARLIBDIR=/var/lib/asterisk -+ASTDBDIR=${ASTVARLIBDIR} -+ASTDATADIR=${ASTVARLIBDIR} -+AGI_DIR=${ASTDATADIR}/agi-bin -+ASTSPOOLDIR=/var/spool/asterisk -+ - cat << END - /* - * defaults.h -@@ -9,21 +18,21 @@ cat << END - - #define DEFAULT_CONFIG_DIR "${INSTALL_PATH}${ASTETCDIR}" - #define DEFAULT_MODULE_DIR "${INSTALL_PATH}${ASTMODDIR}" --#define DEFAULT_AGI_DIR "${INSTALL_PATH}${AGI_DIR}" --#define DEFAULT_LOG_DIR "${INSTALL_PATH}${ASTLOGDIR}" -+#define DEFAULT_AGI_DIR "${AGI_DIR}" -+#define DEFAULT_LOG_DIR "${ASTLOGDIR}" - --#define DEFAULT_RUN_DIR "${INSTALL_PATH}${ASTVARRUNDIR}" --#define DEFAULT_SOCKET "${INSTALL_PATH}${ASTVARRUNDIR}/asterisk.ctl" --#define DEFAULT_PID "${INSTALL_PATH}${ASTVARRUNDIR}/asterisk.pid" -+#define DEFAULT_RUN_DIR "${ASTVARRUNDIR}" -+#define DEFAULT_SOCKET "${ASTVARRUNDIR}/asterisk.ctl" -+#define DEFAULT_PID "${ASTVARRUNDIR}/asterisk.pid" - --#define DEFAULT_VAR_DIR "${INSTALL_PATH}${ASTVARLIBDIR}" --#define DEFAULT_DB "${INSTALL_PATH}${ASTDBDIR}/astdb" -+#define DEFAULT_VAR_DIR "${ASTVARLIBDIR}" -+#define DEFAULT_DB "${ASTDBDIR}/astdb" - --#define DEFAULT_DATA_DIR "${INSTALL_PATH}${ASTDATADIR}" --#define DEFAULT_KEY_DIR "${INSTALL_PATH}${ASTDATADIR}/keys" -+#define DEFAULT_DATA_DIR "${ASTDATADIR}" -+#define DEFAULT_KEY_DIR "${ASTDATADIR}/keys" - --#define DEFAULT_SPOOL_DIR "${INSTALL_PATH}${ASTSPOOLDIR}" --#define DEFAULT_TMP_DIR "${INSTALL_PATH}${ASTSPOOLDIR}/tmp" -+#define DEFAULT_SPOOL_DIR "${ASTSPOOLDIR}" -+#define DEFAULT_TMP_DIR "${ASTSPOOLDIR}/tmp" - - #define DEFAULT_SBIN_DIR "${INSTALL_PATH}${ASTSBINDIR}" - END -\ No newline at end of file diff --git a/pkgs/asterisk/update.py b/pkgs/asterisk/update.py @@ -1,41 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i python3 -p python39 python39.pkgs.packaging python39.pkgs.beautifulsoup4 python39.pkgs.requests -# mirrored in ./default.nix -from packaging import version -from bs4 import BeautifulSoup -import re, requests, json -import os, sys -from pathlib import Path - -URL = "https://downloads.asterisk.org/pub/telephony/asterisk" - -page = requests.get(URL) -changelog = re.compile("^ChangeLog-\d+\.\d+\.\d+$") -changelogs = [a.get_text() for a in BeautifulSoup(page.text, 'html.parser').find_all('a') if changelog.match(a.get_text())] -major_versions = {} -for changelog in changelogs: - v = version.parse(changelog.removeprefix("ChangeLog-")) - major_versions.setdefault(v.major, []).append(v) - -out = {} -for mv in major_versions.keys(): - v = max(major_versions[mv]) - sha = requests.get(f"{URL}/asterisk-{v}.sha256").text.split()[0] - out["asterisk_" + str(mv)] = { - "version": str(v), - "sha256": sha - } - -versions_path = Path(sys.argv[0]).parent / "versions.json" - -try: - with open(versions_path, "r") as in_file: - in_data = json.loads(in_file.read()) - for v in in_data.keys(): - print(v + ":", in_data[v]["version"], "->", out[v]["version"]) -except: - # nice to have for the PR, not a requirement - pass - -with open(versions_path, "w") as out_file: - out_file.write(json.dumps(out, sort_keys=True, indent=2) + "\n") -\ No newline at end of file diff --git a/pkgs/asterisk/versions.json b/pkgs/asterisk/versions.json @@ -1,18 +0,0 @@ -{ - "asterisk_16": { - "sha256": "f8448e8784df7fac019e459bf7c82529d80afe64ae97d73d40e6aa0e4fb39724", - "version": "16.30.0" - }, - "asterisk_18": { - "sha256": "66f0e55d84f9e5bf4e79a56255d35a034448acce00d219c3bf4930b1ebb0e88e", - "version": "18.17.1" - }, - "asterisk_19": { - "sha256": "f0c56d1f8e39e0427455edfe25d24ff088c756bdc32dd1278c9f7a320815cbaa", - "version": "19.8.0" - }, - "asterisk_20": { - "sha256": "df12e47000fbac42bb780bb06172aa8bb8ac26faf77cc9f95184695b0cec69c3", - "version": "20.2.1" - } -} -\ No newline at end of file diff --git a/pkgs/default.nix b/pkgs/default.nix @@ -2,5 +2,5 @@ # You can build them using 'nix build .#example' or (legacy) 'nix-build -A example' { pkgs ? (import ../nixpkgs.nix) { } }: { - asterisk = pkgs.callPackage ./asterisk { }; + # example = pkgs.callPackage ./example { }; }