Strap in, this is gonna get a little rough…
[jkalchik@katello ~]$ wget -qO - 'http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock'
http://mirror.pit.teraswitch.com/centos/7.9.2009/os/x86_64/
http://mirrors.tummy.com/mirrors/CentOS/7.9.2009/os/x86_64/
http://distro.ibiblio.org/centos/7.9.2009/os/x86_64/
http://repos.lax.quadranet.com/centos/7.9.2009/os/x86_64/
http://mirror.atlanticmetro.net/centos/7.9.2009/os/x86_64/
http://ewr.edge.kernel.org/centos/7.9.2009/os/x86_64/
http://mirror.phx1.us.spryservers.net/centos/7.9.2009/os/x86_64/
http://mirror.chpc.utah.edu/pub/centos/7.9.2009/os/x86_64/
http://mirror.centos.lax1.serverforge.org/7.9.2009/os/x86_64/
http://atl.mirrors.clouvider.net/CentOS/7.9.2009/os/x86_64/
[jkalchik@katello ~]$ wget -qO - 'http://distro.ibiblio.org/centos/7.9.2009/os/x86_64/'
<!DOCTYPE html>
<html>
<head>
<title>Index of /centos/7.9.2009/os/x86_64/</title>
<style type="text/css">
a, a:active {text-decoration: none; color: blue;}
a:visited {color: #48468F;}
a:hover, a:focus {text-decoration: underline; color: red;}
body {background-color: #F5F5F5;}
h2 {margin-bottom: 12px;}
table {margin-left: 12px;}
th, td { font: 90% monospace; text-align: left;}
th { font-weight: bold; padding-right: 14px; padding-bottom: 3px;}
td {padding-right: 14px;}
td.s, th.s {text-align: right;}
div.list { background-color: white; border-top: 1px solid #646464; border-bottom: 1px solid #646464; padding-top: 10px; padding-bottom: 14px;}
div.foot { font: 90% monospace; color: #787878; padding-top: 4px;}
</style>
</head>
<body>
<h2>Index of /centos/7.9.2009/os/x86_64/</h2>
<div class="list">
<table summary="Directory Listing" cellpadding="0" cellspacing="0">
<thead><tr><th class="n">Name</th><th class="m">Last Modified</th><th class="s">Size</th><th class="t">Type</th></tr></thead>
<tbody>
<tr class="d"><td class="n"><a href="../">..</a>/</td><td class="m"> </td><td class="s">- </td><td class="t">Directory</td></tr>
<tr class="d"><td class="n"><a href="EFI/">EFI</a>/</td><td class="m">2020-Oct-26 12:25:28</td><td class="s">- </td><td class="t">Directory</td></tr>
<tr class="d"><td class="n"><a href="LiveOS/">LiveOS</a>/</td><td class="m">2020-Oct-26 12:25:27</td><td class="s">- </td><td class="t">Directory</td></tr>
<tr class="d"><td class="n"><a href="Packages/">Packages</a>/</td><td class="m">2020-Nov-05 05:37:01</td><td class="s">- </td><td class="t">Directory</td></tr>
<tr class="d"><td class="n"><a href="images/">images</a>/</td><td class="m">2020-Oct-26 12:26:06</td><td class="s">- </td><td class="t">Directory</td></tr>
<tr class="d"><td class="n"><a href="isolinux/">isolinux</a>/</td><td class="m">2020-Nov-05 05:23:16</td><td class="s">- </td><td class="t">Directory</td></tr>
<tr class="d"><td class="n"><a href="repodata/">repodata</a>/</td><td class="m">2020-Nov-12 11:20:15</td><td class="s">- </td><td class="t">Directory</td></tr>
<tr><td class="n"><a href="CentOS_BuildTag">CentOS_BuildTag</a></td><td class="m">2020-Oct-29 17:14:44</td><td class="s">0.1K</td><td class="t">application/octet-stream</td></tr>
<tr><td class="n"><a href="EULA">EULA</a></td><td class="m">2017-Aug-30 10:33:06</td><td class="s">0.2K</td><td class="t">application/octet-stream</td></tr>
<tr><td class="n"><a href="GPL">GPL</a></td><td class="m">2015-Dec-09 17:35:46</td><td class="s">17.6K</td><td class="t">application/octet-stream</td></tr>
<tr><td class="n"><a href="RPM-GPG-KEY-CentOS-7">RPM-GPG-KEY-CentOS-7</a></td><td class="m">2015-Dec-09 17:35:46</td><td class="s">1.6K</td><td class="t">application/octet-stream</td></tr>
<tr><td class="n"><a href="RPM-GPG-KEY-CentOS-Testing-7">RPM-GPG-KEY-CentOS-Testing-7</a></td><td class="m">2015-Dec-09 17:35:46</td><td class="s">1.6K</td><td class="t">application/octet-stream</td></tr>
</tbody>
</table>
</div>
<div class="foot">lighttpd/1.4.53</div>
<script type="text/javascript">
// <!--
var click_column;
var name_column = 0;
var date_column = 1;
var size_column = 2;
var type_column = 3;
var prev_span = null;
if (typeof(String.prototype.localeCompare) === 'undefined') {
String.prototype.localeCompare = function(str, locale, options) {
return ((this == str) ? 0 : ((this > str) ? 1 : -1));
};
}
if (typeof(String.prototype.toLocaleUpperCase) === 'undefined') {
String.prototype.toLocaleUpperCase = function() {
return this.toUpperCase();
};
}
function get_inner_text(el) {
if((typeof el == 'string')||(typeof el == 'undefined'))
return el;
if(el.innerText)
return el.innerText;
else {
var str = "";
var cs = el.childNodes;
var l = cs.length;
for (i=0;i<l;i++) {
if (cs[i].nodeType==1) str += get_inner_text(cs[i]);
else if (cs[i].nodeType==3) str += cs[i].nodeValue;
}
}
return str;
}
function isdigit(c) {
return (c >= '0' && c <= '9');
}
function unit_multiplier(unit) {
return (unit=='K') ? 1000
: (unit=='M') ? 1000000
: (unit=='G') ? 1000000000
: (unit=='T') ? 1000000000000
: (unit=='P') ? 1000000000000000
: (unit=='E') ? 1000000000000000000 : 1;
}
var li_date_regex=/(\d{4})-(\w{3})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
var li_mon = ['Jan','Feb','Mar','Apr','May','Jun',
'Jul','Aug','Sep','Oct','Nov','Dec'];
function li_mon_num(mon) {
var i; for (i = 0; i < 12 && mon != li_mon[i]; ++i); return i;
}
function li_date_cmp(s1, s2) {
var dp1 = li_date_regex.exec(s1)
var dp2 = li_date_regex.exec(s2)
for (var i = 1; i < 7; ++i) {
var cmp = (2 != i)
? parseInt(dp1[i]) - parseInt(dp2[i])
: li_mon_num(dp1[2]) - li_mon_num(dp2[2]);
if (0 != cmp) return cmp;
}
return 0;
}
function sortfn_then_by_name(a,b,sort_column) {
if (sort_column == name_column || sort_column == type_column) {
var ad = (a.cells[type_column].innerHTML === 'Directory');
var bd = (b.cells[type_column].innerHTML === 'Directory');
if (ad != bd) return (ad ? -1 : 1);
}
var at = get_inner_text(a.cells[sort_column]);
var bt = get_inner_text(b.cells[sort_column]);
var cmp;
if (sort_column == name_column) {
if (at == '..') return -1;
if (bt == '..') return 1;
}
if (a.cells[sort_column].className == 'int') {
cmp = parseInt(at)-parseInt(bt);
} else if (sort_column == date_column) {
var ad = isdigit(at.substr(0,1));
var bd = isdigit(bt.substr(0,1));
if (ad != bd) return (!ad ? -1 : 1);
cmp = li_date_cmp(at,bt);
} else if (sort_column == size_column) {
var ai = parseInt(at, 10) * unit_multiplier(at.substr(-1,1));
var bi = parseInt(bt, 10) * unit_multiplier(bt.substr(-1,1));
if (at.substr(0,1) == '-') ai = -1;
if (bt.substr(0,1) == '-') bi = -1;
cmp = ai - bi;
} else {
cmp = at.toLocaleUpperCase().localeCompare(bt.toLocaleUpperCase());
if (0 != cmp) return cmp;
cmp = at.localeCompare(bt);
}
if (0 != cmp || sort_column == name_column) return cmp;
return sortfn_then_by_name(a,b,name_column);
}
function sortfn(a,b) {
return sortfn_then_by_name(a,b,click_column);
}
function resort(lnk) {
var span = lnk.childNodes[1];
var table = lnk.parentNode.parentNode.parentNode.parentNode;
var rows = new Array();
for (j=1;j<table.rows.length;j++)
rows[j-1] = table.rows[j];
click_column = lnk.parentNode.cellIndex;
rows.sort(sortfn);
if (prev_span != null) prev_span.innerHTML = '';
if (span.getAttribute('sortdir')=='down') {
span.innerHTML = '↑';
span.setAttribute('sortdir','up');
rows.reverse();
} else {
span.innerHTML = '↓';
span.setAttribute('sortdir','down');
}
for (i=0;i<rows.length;i++)
table.tBodies[0].appendChild(rows[i]);
prev_span = span;
}
function init_sort(init_sort_column, ascending) {
var tables = document.getElementsByTagName("table");
for (var i = 0; i < tables.length; i++) {
var table = tables[i];
//var c = table.getAttribute("class")
//if (-1 != c.split(" ").indexOf("sort")) {
var row = table.rows[0].cells;
for (var j = 0; j < row.length; j++) {
var n = row[j];
if (n.childNodes.length == 1 && n.childNodes[0].nodeType == 3) {
var link = document.createElement("a");
var title = n.childNodes[0].nodeValue.replace(/:$/, "");
link.appendChild(document.createTextNode(title));
link.setAttribute("href", "#");
link.setAttribute("class", "sortheader");
link.setAttribute("onclick", "resort(this);return false;");
var arrow = document.createElement("span");
arrow.setAttribute("class", "sortarrow");
arrow.appendChild(document.createTextNode(":"));
link.appendChild(arrow)
n.replaceChild(link, n.firstChild);
}
}
var lnk = row[init_sort_column].firstChild;
if (ascending) {
var span = lnk.childNodes[1];
span.setAttribute('sortdir','down');
}
resort(lnk);
//}
}
}
init_sort(0, 0);
// -->
</script>
</body>
</html>
[jkalchik@katello ~]$ hammer repository synchronize --id 8
[...........................................................................................................................] [100%]
Total steps: 3117/10185
--------------------------------
Associating Content: 0/0
Downloading Artifacts: 0/0
Downloading Metadata Files: 4/4
Parsed Comps: 109/109
Parsed Packages: 3004/10072
Error: 403, message='Forbidden', url=URL('http://distro.ibiblio.org/centos/7.9.2009/os/x86_64/LiveOS/squashfs.img/?release=7&arch=x86_64&repo=os&infra=stock')
Yah… I’m gonna be the first to admit that I definitely have some source URL issues.
I pulled the CentOS 7 base url right out of a ‘yum repolist -v’ and updated the Katello/Pulp3 repository configuration. A wget against that URL succeeds.
So… with a better mirror list URL configured in the repository w/ id=8, I ran the repository sync, and you can see the result. The distro.ibiblio.org element of the mirror list does succeed, and if I look at it either via wget or in a browser, I can see a LiveOS link. If I burn through that link, I see a single object for a squashfs.img file.
The URL that the repository sync now dumps out is correct through the squashfs.img part, but why is the ‘/?release=7&arch=x86_64&repo=os&infra=stock’ getting appended to a page analysis?