diff --git a/pillar/webserver/sites.sls b/pillar/webserver/sites.sls --- a/pillar/webserver/sites.sls +++ b/pillar/webserver/sites.sls @@ -58,6 +58,12 @@ # Username must be unique and use max 31 characters. # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +php_custom_builds: + php56: + mode: release + version: 5.6.38 + hash: d65b231bbdd63be4439ef5ced965cfd63e62983429dbd4dfcfb49981593ebc03 + php_fpm_instances: # PHP 7.2, generally installed as package/port prod: diff --git a/roles/webserver-legacy/php-builder/init.sls b/roles/webserver-legacy/php-builder/init.sls new file mode 100644 --- /dev/null +++ b/roles/webserver-legacy/php-builder/init.sls @@ -0,0 +1,10 @@ +# ------------------------------------------------------------- +# Salt — Compile custom PHP builds +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Project: Nasqueron +# Created: 2018-10-16 +# License: Trivial work, not eligible to copyright +# ------------------------------------------------------------- + +include: + - .source diff --git a/roles/webserver-legacy/php-builder/source.sls b/roles/webserver-legacy/php-builder/source.sls new file mode 100644 --- /dev/null +++ b/roles/webserver-legacy/php-builder/source.sls @@ -0,0 +1,80 @@ +#!py + +# ------------------------------------------------------------- +# Salt — Compile custom PHP builds +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Project: Nasqueron +# Created: 2018-10-16 +# License: Trivial work, not eligible to copyright +# ------------------------------------------------------------- + +# ------------------------------------------------------------- +# Builds and versions helper methods +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +def get_release_builds(): + return {name: build + for (name, build) in __pillar__["php_custom_builds"].items() + if build["mode"] == "release"} + + +def get_release_versions(): + versions = [(build['version'], build['hash']) + for build in get_release_builds().values()] + + return set(versions) + + +def get_archive_path(version): + return "/opt/php/archives/php-" + version + ".tar.bz2" + + +def get_build_directories(): + return ["/opt/php/" + build for build in __pillar__["php_custom_builds"]] + + +def get_extract_archive_command(archive, directory): + return "tar xjf " + archive + " --strip-components=1 -C " + directory + + +# ------------------------------------------------------------- +# Configuration provider +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +def run(): + config = {} + + builder_user = 'builder' + directories_to_create = ['/opt/php', '/opt/php/archives'] + + # Task: create directories + directories_to_create.extend(get_build_directories()) + for directory in directories_to_create: + config[directory] = {'file.directory': [{'user': builder_user}]} + + # Task: fetch archives + for version, archive_hash in get_release_versions(): + archive = get_archive_path(version) + url = "http://fr2.php.net/get/php-" + version + ".tar.bz2/from/this/mirror" + + config[archive] = {'file.managed': [ + {'source': url}, + {'source_hash': archive_hash}, + {'user': builder_user}, + ]} + + # Task: extract archives to build directories + for build_name, build in get_release_builds().items(): + archive = get_archive_path(build['version']) + directory = "/opt/php/" + build_name + command = get_extract_archive_command(archive, directory) + + config["php_build_" + build_name] = {'cmd.run' : [ + {'name': command}, + {'user': builder_user}, + {'creates': directory + "/configure.in"}, + ]} + + return config