# why is upgrading so much slower than updating



## daudo (Apr 8, 2016)

I am still quite new to FreeBSD, and so I stumble from question to question 

Today I upgraded some of our servers from 10.2 to 10.3 and this really drove me nuts.

The "ordinary" patch level updates using ...

`% freebsd-update fetch update`

... so far have been quite simple and fast. 

But comparing this to the upgrade from 10.2 to 10.3 using ...

`% freebsd-update -r 10.3-RELEASE --upgrade`
and then
`% freebsd-update install`

... has left me clueless. The upgrade downloads and later applies almost 11K of patches, which takes very long:


```
Fetching metadata signature for 10.3-RELEASE from update6.freebsd.org... done.
[...]
Fetching files from 10.2-RELEASE for merging... done.
Preparing to download files... done.
Fetching 11061 patches.....10....20....30....
```
Now my very naive question is: why is this so much slower than an ordinary update? I mean, technically, patching an installation from 10.2 to 10.3 can't be so much different from patching it from say .p9 to .p10.

... or am I missing something here?

And if this is the way it is intended to be, how do you deal with a bigger amount of servers? The upgrade from 10.2 to 10.3 today took me hours for our mere 7 servers and I cannot imagine how this scales once we migrate more servers


----------



## kpa (Apr 8, 2016)

It's simple math really. Number of changes between major versions is huge compared to changes between minor versions. The changes are calculated as binary diffs between files and even a single byte of change causes a file to be completely different from the other one.


----------



## SirDice (Apr 9, 2016)

daudo said:


> And if this is the way it is intended to be, how do you deal with a bigger amount of servers? The upgrade from 10.2 to 10.3 today took me hours for our mere 7 servers and I cannot imagine how this scales once we migrate more servers


You can proxy freebsd-update(8) through a caching proxy. That way only the first one has to download the files from the internet, the other servers will get it from the proxy cache.

Added bonus, only the proxy server needs access to the internet to allow all your servers to update.


----------



## daudo (Apr 9, 2016)

Yes, we're already doing transparent proxying, but this is far from perfect, because there are multiple update sites to fetch the patches from (which of course, in general, is excellent ). 

Of course I can "circumvent" the pool of update servers by setting a fixed ServerName in each server's /etc/freebsd-update.conf, but that would break easily if the mentioned server was not reachable for whatever reason.

Another "viable" solution I can think of would be some dirty DNS tricks overriding the update servers' A records, but that's not ideal either.

Or, is it possible to locally mirror the patches as well? Mirroring the whole FreeBSD site would probably be an overkill, but the patches would be fine, I guess.


----------



## gkontos (Apr 9, 2016)

I have never tried it, but there is a procedure for creating a local update server.


----------

