Bug 235538 - [patch] freebsd-update: Try to avoid failing when network is unavailable
Summary: [patch] freebsd-update: Try to avoid failing when network is unavailable
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: bin (show other bugs)
Version: 12.0-RELEASE
Hardware: Any Any
: --- Affects Some People
Assignee: freebsd-bugs mailing list
URL:
Keywords: patch
Depends on:
Blocks:
 
Reported: 2019-02-05 18:52 UTC by Ricardo Fraile
Modified: 2019-02-06 23:02 UTC (History)
1 user (show)

See Also:


Attachments
Add fetch_check_connection function to freebsd-update (2.22 KB, patch)
2019-02-05 18:52 UTC, Ricardo Fraile
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Ricardo Fraile 2019-02-05 18:52:12 UTC
Created attachment 201777 [details]
Add fetch_check_connection function to freebsd-update

Hello,

Running freebsd-update in a system with limited resources (low power cpu and sd storage as disk for example) takes a long time (+5 hours in a RaspberryPi). If we also have a poor network link dependent to a mobile 3G network, is more difficult to complete it properly.

When freebsd-update execute the lines that calls phttpget, if the network is unavailable, it directly fails, throwing away the time spend previously.

There is a workaround tunning phttpget with the HTTP_TIMEOUT environment variable, but it only works before doing the tcp connection. If it can't resolve the dns, it fails ending the execution.

The solution that I include in the patch adds a call to the server previous the phttpget execution, checking if it was ok or not, looping on it waiting 60 seconds until the next try if it fails. If the executions is made from cron, it only loops once and fails.

If you are looking over the upgrade and see that is stuck on that point, you have a chance to fix it, restart the modem, wait until you receive better connectivity or whatever, but it can continue.

In the new function I use the fetch command because is used already on freebsd-update and its part of the base system. Also netcat or telnet can be used, but the environmental variables that can modify the fetch behaviour, like http_proxy, aren't available on those alternatives.

As well, I use for fetch the file latest.ssl because the other file that I found, pub.ssl, is a bit larger. I didn't find any other way to get a dumb file like a readme.txt or similar in the updateN.freebsd.org servers.

I tested it and works as expected.

Thanks,