diff options
Diffstat (limited to 'check.php')
-rwxr-xr-x | check.php | 152 |
1 files changed, 107 insertions, 45 deletions
@@ -1,5 +1,9 @@ #!/usr/bin/env php <?php + +define('ERR_OFFLINE', -1); +define('ERR_CONTENT', -2); + $cli = (php_sapi_name()=="cli"); if ($cli) { chdir(__DIR__); @@ -10,7 +14,7 @@ if ($cli) { <head> <meta content="text/html; charset=utf-8" http-equiv="content-type" /> <title>Les RPM de Remi - Mirror check</title> - <link href="fedora/17/remi/i386/repoview/layout/repostyle.css" type="text/css" rel="stylesheet" /> + <link href="enterprise/8/remi/x86_64/repoview/layout/repostyle.css" type="text/css" rel="stylesheet" /> <meta content="index,follow" name="robots" /> <link rel="shortcut icon" href="/favicon.ico" /> </head> @@ -30,74 +34,99 @@ if ($cli) { <h2>Mirror repository metadata check</h2> <?php } -$repos = array( +$repos = [ + 'enterprise/8' => 'Enterprise Linux 8', 'enterprise/7' => 'Enterprise Linux 7', 'enterprise/6' => 'Enterprise Linux 6', - 'enterprise/5' => 'Enterprise Linux 5', - 'fedora/22' => 'Fedora 22', - 'fedora/21' => 'Fedora 21', - 'fedora/20' => 'Fedora 20', -); -$subs = array( + 'fedora/31' => 'Fedora 31', + 'fedora/30' => 'Fedora 30', + 'fedora/29' => 'Fedora 29', +]; +$subs = [ 'remi', 'test', 'php56', -); -$archs = array( +]; +$archs = [ 'i386', 'x86_64', -); +]; -$mirrors = array( - 'http://remi.mirrors.arminco.com/', +$mirrors = [ 'http://remi.conetix.com.au/', 'http://mirrors.neterra.net/remi/', - 'http://remi.xpg.com.br/', 'http://remi.schlundtech.de/', 'http://mirror.cedia.org.ec/remi/', - 'http://mirror.uta.edu.ec/remi/', 'http://ftp.arnes.si/mirrors/remi/', 'http://mirrors.thzhost.com/remi/', - 'http://mirrors.mediatemple.net/remi/', 'http://fr2.rpmfind.net/linux/remi/', - 'http://mirror.awanti.com/remi/', 'http://mirrors.netix.net/remi/', 'http://remi.mirrors.cu.be/', - 'http://mirror.innosol.asia/remi/', 'http://mirror.neolabs.kz/remi/', - 'http://mirror.veriteknik.net.tr/remi/', 'https://remi.mirror.ate.info/', 'https://mirrors.tuna.tsinghua.edu.cn/remi/', - 'http://mirror.23media.de/remi/', - 'http://repo1.dal.innoscale.net/remi/', - 'http://repo1.sea.innoscale.net/remi/', - 'http://repo1.ash.innoscale.net/remi/', - 'http://mirror.bebout.net/remi/', + 'https://mirror.23m.com/remi/', 'https://mirror.oxilion.nl/remi/', 'https://remi.mirror.wearetriple.com/', - 'http://mirror.upb.edu.co/remi/', 'https://mirrors.uni-ruse.bg/remi/', 'https://remi.mirror.karneval.cz/', 'https://mirror.netsite.dk/remi/', - 'http://mirror.nsw.coloau.com.au/remi/', 'http://mirror.team-cymru.com/remi/', - 'http://mirror.reconn.ru/remi/', 'http://mirrors.ukfast.co.uk/sites/remi/', 'https://mirror.netweaver.uk/remi/', - 'http://mirror.xeonbd.com/remi/', - 'http://mirrors.mivocloud.com/remi/', 'http://ftp.riken.jp/Linux/remi/', 'https://mir01.syntis.net/remirepo/', 'http://mirrors.bytes.ua/remi/', - 'https://mirror.hoster.kz/remi/', - 'http://ap.stykers.moe/remi/', + 'http://mirror.hoster.kz/remi/', 'http://remirepo.reloumirrors.net/', 'https://mirror.pit.teraswitch.com/remi/', + 'http://remi.mirror.liteserver.nl/', + 'https://mirror.marwan.ma/remi/', + 'https://remi.mirror.digitalpacific.com.au/', + 'http://merlin.fit.vutbr.cz/mirrors/remi/', + 'https://mirrors.ptisp.pt/remi/', + 'https://mirrors.chroot.ro/remi/', + 'https://mirrors.upr.edu/remi/', + 'http://mirror.digitalnova.at/remi/', + 'https://mirror.dk.team.blue/remi/', + 'https://mirror.dogado.de/remi/', + 'https://mirror.docker.ru/remi/', + 'https://repo.extreme-ix.org/remi/', + 'https://mirror.mangohost.net/remi/', + 'https://bd.mirror.vanehost.com/Remi/', + 'https://repo1.vetta.net.nz/remi/', + 'https://cdn.centos.no/remi/', + 'https://mirror.centos.no/remi/', + 'https://muug.ca/mirror/remi/', + 'https://mirror.netzwerge.de/remi/', +]; +$disabled = [ + 'https://remi.mivzakim.net/', // 2024-04-03 + 'https://mirror.usi.edu/pub/remi/', // 2024-04-03 + 'http://mirror.awanti.com/remi/', // 2024-03-20 + 'http://mirror.xeonbd.com/remi/', + 'https://mirror.telkomuniversity.ac.id/remi/', + 'http://mirror.uta.edu.ec/remi/', + 'http://repo1.dal.innoscale.net/remi/', + 'http://repo1.sea.innoscale.net/remi/', + 'http://repo1.ash.innoscale.net/remi/', + 'http://mirror.yer.az/remi/', +]; +$deprecated = [ + 'https://remi.srv.magticom.ge/', 'https://mirror.sjc02.svwh.net/remi/', + 'http://mirror.upb.edu.co/remi/', + 'http://mirror.veriteknik.net.tr/remi/', + 'http://remi.mirrors.arminco.com/', + 'http://mirror.reconn.ru/remi/', 'https://mirror.serverion.com/remi/', - 'http://remi.mirror.liteserver.nl/', -); -$deprecated = array( + 'http://mirror.innosol.asia/remi/', + 'http://mirror.nsw.coloau.com.au/remi/', + 'http://mirror.bebout.net/remi/', + 'http://mirrors.mediatemple.net/remi/', + 'http://remi.xpg.com.br/', + 'http://ap.stykers.moe/remi/', + 'http://mirrors.mivocloud.com/remi/', 'http://nl.mirror.babylon.network/remi/', 'http://fr.mirror.babylon.network/remi/', 'http://ca.mirror.babylon.network/remi/', @@ -117,18 +146,28 @@ $deprecated = array( 'http://mirror.1000mbps.com/remi/', 'http://mirrors.hustunique.com/remi/', 'http://mirror.pw/remi/', -); +]; + function getRepoTime($uri) { - $xml = @simplexml_load_file($uri.'/repodata/repomd.xml'); - if ($xml && $xml->revision) { + $ctx = stream_context_create([ + 'http' => [ + 'timeout' => 4, + ] + ]); + $txt = @file_get_contents($uri . '/repodata/repomd.xml', false, $ctx); + if (!$txt) { + return ERR_OFFLINE; + } + $xml = @simplexml_load_string($txt); + if ($xml && $xml->revision>100000) { return intval($xml->revision); } - return 0; + return ERR_CONTENT; } if (isset($_GET['mirror']) && isset($repos[$_GET['mirror']])) { $path = $_GET['mirror']; } else { - $path = 'enterprise/7'; + $path = 'enterprise/8'; } if (isset($_GET['repo']) && in_array($_GET['repo'], $subs)) { $repo = $_GET['repo']; @@ -157,9 +196,22 @@ if (!$cli) { $pids = array(); $ref = getRepoTime($full); if ($ref) { - printf(($cli ? "Check %d mirrors of %s (%s)\n" : "<h3>%s - %s</h3>\n"), count($mirrors), $name, date('r', $ref)); if (!$cli) echo "<ul class='pkglist'>\n"; - foreach ($mirrors as $mirror) { + if (isset($_SERVER['argv'][1])) { + $tocheck = []; + foreach ($mirrors as $mirror) { + if (preg_match('|'.$_SERVER['argv'][1].'|', $mirror)) { + $tocheck[] = $mirror; + } + } + } else { + $tocheck = $mirrors; + } + printf(($cli ? "Check %d mirror(s) of %s (%s)\n" : "<h3>%s - %s</h3>\n"), count($tocheck), $name, date('r', $ref)); + foreach ($tocheck as $mirror) { + if ($_SERVER['argc']>1 && !strpos($mirror, $_SERVER['argv'][1])) { + continue; + } if ($cli) { $pid = pcntl_fork(); if ($pid<0) { @@ -169,7 +221,11 @@ if ($ref) { } else { // Child $pids = array(); $loc = getRepoTime($mirror.$full); - if ($ref == $loc) { + if ($loc == ERR_OFFLINE) { + printf("%50.50s : ** Unreachable **\n", $mirror); + } else if ($loc == ERR_CONTENT) { + printf("%50.50s : ** Corrupted **\n", $mirror); + } else if ($ref == $loc) { printf("%50.50s : Ok\n", $mirror); } else if ($loc) { printf("%50.50s : %s\n", $mirror, date('r', $loc)); @@ -182,9 +238,13 @@ if ($ref) { } flush(); $host = parse_url($mirror, PHP_URL_HOST); - printf("<li><a href='%s'>%s</a> ", $mirror, $host); + //printf("<li><a href='%s'>%s</a> ", $mirror, $host); $loc = getRepoTime($mirror.$full); - if ($ref == $loc) { + if ($loc == ERR_OFFLINE) { + printf("<li><a href='%s'>%s</a> <b>Unreachable</b></li>\n", $mirror, $mirror); + } else if ($loc == ERR_CONTENT) { + printf("<li><a href='%s'>%s</a> <b>Corrupted</b></li>\n", $mirror, $mirror); + } else if ($ref == $loc) { printf("<li><a href='%s'>%s</a> Ok</li>\n", $mirror, $mirror); } else if ($loc) { printf("<li><a href='%s'>%s</a> %s</li>\n", $mirror, $mirror, date('r', $loc)); @@ -195,7 +255,9 @@ if ($ref) { if ($cli) { $nb=count($pids); while (count($pids)) { - printf("Wait %d\r", count($pids)); + if (posix_isatty(STDOUT)) { + printf("Wait %d\r", count($pids)); + } $pid = pcntl_wait($status); if ($pid<0) { die("Cound not wait\n"); |