#!/usr/bin/php - Alternative php @VERSION@ module. The remi-@VERSION@ stream provides more recent versions and more packages than default @VERSION@ stream. license: module: - GPLv2+ content: - BSD - BSD and LGPLv3+ - PHP - PHP and BSD - PHP and LGPLv2 and OpenLDAP - PHP and LGPLv2+ - PHP and Zend and BSD and MIT and ASL 1.0 dependencies: - buildrequires: platform: [@DIST@] requires: @DEPS@ references: documentation: http://php.net/ tracker: https://bugs.php.net/ profiles: common: rpms: - php-cli - php-common - php-fpm - php-json - php-mbstring - php-xml devel: rpms: - libzip - php-cli - php-common - php-devel - php-fpm - php-json - php-mbstring - php-pear - php-pecl-zip - php-process - php-xml minimal: rpms: - php-cli - php-common api: rpms: - php-fpm artifacts: rpms: EOT; $template_redis = <<< EOT --- document: modulemd version: 2 data: name: redis stream: remi-@VERSION@ version: @DATE@ context: 00000000 arch: @ARCH@ summary: Redis persistent key-value database description: >- Alternative redis @VERSION@ module. The remi-@VERSION@ stream provides more recent versions and than default @VERSION@ stream. license: module: - GPLv2+ content: - BSD and MIT - CC-BY-SA dependencies: - buildrequires: platform: [@DIST@] requires: @DEPS@ references: documentation: https://redis.io/documentation tracker: https://github.com/antirez/redis/issues profiles: common: rpms: - redis api: rpms: - redis artifacts: rpms: EOT; $template_glpi = <<< EOT --- document: modulemd version: 2 data: name: glpi stream: @VERSION@ version: @DATE@ context: 00000000 arch: @ARCH@ summary: Free IT asset management software description: >- glpi @VERSION@ module license: module: - GPLv2+ content: - GPLv2+ and GPLv3+ and MIT dependencies: - buildrequires: platform: [@DIST@] requires: @DEPS@ references: documentation: https://glpi-project.org/ tracker: https://github.com/glpi-project/glpi/issues profiles: common: rpms: - glpi api: rpms: - glpi artifacts: rpms: EOT; $defaults = <<< EOT --- document: modulemd-defaults version: 1 data: module: php profiles: remi-7.2: [common] remi-7.3: [common] ... --- document: modulemd-defaults version: 1 data: module: glpi profiles: 9.2: [common] 9.3: [common] 9.4: [common] ... --- document: modulemd-defaults version: 1 data: module: redis profiles: remi-5.0: [common] ... EOT; function findPackages($from, $dest, $pat) { global $oldrpms; $fil = '.'; $rpms = []; foreach (glob("$from/$pat") as $file) { $info = rpminfo($file); $name = basename($file); if (!file_exists("$dest/$name")) { if (link($file, "$dest/$name")) { if (in_array(basename($file), $oldrpms)) { echo $fil; if (count($rpms)%64==63) { echo "\r"; $fil = ($fil == '.' ? '-' : '.'); } } else { printf("\r+ %-70s\n", basename($file)); } } } $rpms[] = $info['Name'] . '-' . ($info['Epoch'] ?? '0') . ':' . $info['Version'] . '-' . $info['Release'] . '.' . $info['Arch']; } echo "\r " . count($rpms) . " rpms" . str_repeat(" ", 64) . "\n"; return $rpms; } function genModule($srce, $dest, $pat, $ver, $arch, $deps, $template) { $rpms = findPackages($srce, $dest, $pat); $deptxt = ''; foreach($deps as $n => $v) { $deptxt .= ($deptxt ? "\n" : '') . " $n: [$v]"; } $mod = str_replace( ['@VERSION@', '@ARCH@', "@DATE@", "@DIST@", "@DEPS@"], [$ver, $arch, date("YmdHis"), $deps['platform'], $deptxt], $template ); foreach($rpms as $rpm) { $mod .= " - $rpm\n"; } $mod .= "...\n"; return $mod; } function cleanup($dest) { global $oldrpms; $oldrpms = array(); foreach (glob("$dest/*rpm") as $file) { unlink($file); $oldrpms[] = basename($file); } } function createRepo($dest, $mod) { chdir($dest); exec("mkrepo nocheck noclean"); $data = '/tmp/modules.yaml'; file_put_contents($data, $mod); $hash = hash('sha256', $mod); exec("modifyrepo_c --mdtype=modules $data repodata"); $arch = basename($dest); rename($data, "$data.$arch"); echo " in $data.$arch\n"; chdir(__DIR__); } if (count($_SERVER['argv'])<2 || in_array('f29', $_SERVER['argv'])) { $dest = 'fedora/29/modular/x86_64'; echo "Populate $dest\n"; cleanup($dest); $deps = ['platform' => 'f29']; $mod = genModule('fedora/29/remi/x86_64', $dest, 'php-*7.2*.rpm', '7.2', 'x86_64', $deps, $template_php); $mod .= genModule('fedora/29/php73/x86_64', $dest, '*.rpm', '7.3', 'x86_64', $deps, $template_php); $mod .= genModule('fedora/29/glpi92/x86_64', $dest, '*.rpm', '9.2', 'x86_64', $deps, $template_glpi); $mod .= genModule('fedora/29/glpi93/x86_64', $dest, '*.rpm', '9.3', 'x86_64', $deps, $template_glpi); $mod .= genModule('fedora/29/glpi94/x86_64', $dest, '*.rpm', '9.4', 'x86_64', $deps, $template_glpi); $mod .= $defaults; createRepo($dest, $mod); $dest = 'fedora/29/modular-test/x86_64'; echo "Populate $dest\n"; cleanup($dest); $deps = ['platform' => 'f29']; $mod = genModule('fedora/29/test/x86_64', $dest, 'php-*7.2*.rpm', '7.2', 'x86_64', $deps, $template_php); $mod .= genModule('fedora/29/test73/x86_64', $dest, '*.rpm', '7.3', 'x86_64', $deps, $template_php); $mod .= $defaults; createRepo($dest, $mod); $dest = 'fedora/29/modular/i386'; echo "Populate $dest\n"; cleanup($dest); $deps = ['platform' => 'f29']; $mod = genModule('fedora/29/remi/i386', $dest, 'php-*7.2*.rpm', '7.2', 'i386', $deps, $template_php); $mod .= genModule('fedora/29/php73/i386', $dest, '*.rpm', '7.3', 'i386', $deps, $template_php); $mod .= genModule('fedora/29/glpi92/i386', $dest, '*.rpm', '9.2', 'i386', $deps, $template_glpi); $mod .= genModule('fedora/29/glpi93/i386', $dest, '*.rpm', '9.3', 'i386', $deps, $template_glpi); $mod .= genModule('fedora/29/glpi94/i386', $dest, '*.rpm', '9.4', 'i386', $deps, $template_glpi); $mod .= $defaults; createRepo($dest, $mod); $dest = 'fedora/29/modular-test/i386'; echo "Populate $dest\n"; cleanup($dest); $deps = ['platform' => 'f29']; $mod = genModule('fedora/29/test/i386', $dest, 'php-*7.2*.rpm', '7.2', 'i386', $deps, $template_php); $mod .= genModule('fedora/29/test73/i386', $dest, '*.rpm', '7.3', 'i386', $deps, $template_php); $mod .= $defaults; createRepo($dest, $mod); } if (count($_SERVER['argv'])<2 || in_array('el8', $_SERVER['argv'])) { $dest = 'enterprise/8/modular-test/x86_64'; echo "Populate $dest\n"; cleanup($dest); $deps = ['platform' => 'el8', 'nginx' => '1.14', 'httpd' => '2.4']; $mod = genModule('enterprise/8/test72/x86_64', $dest, '*.rpm', '7.2', 'x86_64', $deps, $template_php); $mod .= genModule('enterprise/8/test73/x86_64', $dest, '*.rpm', '7.3', 'x86_64', $deps, $template_php); $mod .= $defaults; createRepo($dest, $mod); $dest = 'enterprise/8/modular/x86_64'; echo "Populate $dest\n"; cleanup($dest); $deps = ['platform' => 'el8', 'nginx' => '1.14', 'httpd' => '2.4']; $mod = genModule('enterprise/8/php72/x86_64', $dest, '*.rpm', '7.2', 'x86_64', $deps, $template_php); $mod .= genModule('enterprise/8/php73/x86_64', $dest, '*.rpm', '7.3', 'x86_64', $deps, $template_php); $mod .= genModule('enterprise/8/remi/x86_64', $dest, 'redis*.rpm', '5.0', 'x86_64', $deps, $template_redis); $deps = ['platform' => 'el8', 'php' => '']; $mod .= genModule('enterprise/8/glpi93/x86_64', $dest, '*.rpm', '9.3', 'x86_64', $deps, $template_glpi); $mod .= genModule('enterprise/8/glpi94/x86_64', $dest, '*.rpm', '9.4', 'x86_64', $deps, $template_glpi); $mod .= $defaults; createRepo($dest, $mod); }