On 28/5/21 10:18 pm, Christian Hesse wrote:
Allan McRae <allan@archlinux.org> on Fri, 2021/05/28 20:43:
Ok, let's see a more detailed example:
* pacman sends a request to pacredir, the header contains a timestamp from synced database file in /var/lib/pacman/sync/: If-Modified-Since: Fri, 28 May 2021 04:38:25 GMT * pacredir sends HEAD requests to pacserve on hosts in local network * pacserve answers with 200, but the header contains a timestamp: Last-Modified: Fri, 28 May 2021 04:38:25 GMT * pacredir sends a 307 with redirect to the host with most recent db file - or 404 if all requested db files are older or of same age as local file
OK... so pacredir never checks for the latest database availability on a mirror if there is a newer database on one of the hosts.
Please note that pacredir does not known about mirrors at all! It tries to redirect in local network - and returns 404 if it can not. It's pacman that skips to the mirrors.
I was using "mirror" to distinguish external servers from hosts on the local network.
That's why pacman should not consider a 404 a permanent error: The next request can result in a successful redirect.
Does this mean the "new" database on the hosts network could be long out of date, but as long as it is newer than the local machine being updated, that is what will be used?
Well, out-of-date is a term that does barely match here... pacman does known about the date of its current database files only. So yes, more recent database files are used as long as they are newer than the local ones - even if out-of-date compared with a mirror.
That's why the pacredir documentation tells you to run `pacman -Sy` twice to be sure: First run fetches the newest database from local network, second run (where pacredir returns 404) fetches from mirror if a newer version is available.
This does very little to convince me that the CacheServer proposal should be used for databases. A