fixes to last commit
[distro-setup] / filesystem / etc / apt / detect-http-proxy
1 #!/bin/bash
2 # I, Ian Kelling, follow the GNU license recommendations at
3 # https://www.gnu.org/licenses/license-recommendations.en.html. They
4 # recommend that small programs, < 300 lines, be licensed under the
5 # Apache License 2.0. This file contains or is part of one or more small
6 # programs. If a small program grows beyond 300 lines, I plan to switch
7 # its license to GPL.
8
9 # Copyright 2024 Ian Kelling
10
11 # Licensed under the Apache License, Version 2.0 (the "License");
12 # you may not use this file except in compliance with the License.
13 # You may obtain a copy of the License at
14
15 # http://www.apache.org/licenses/LICENSE-2.0
16
17 # Unless required by applicable law or agreed to in writing, software
18 # distributed under the License is distributed on an "AS IS" BASIS,
19 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 # See the License for the specific language governing permissions and
21 # limitations under the License.
22
23 # based on
24 # http://askubuntu.com/questions/53443/how-do-i-ignore-a-proxy-if-not-available
25 # altered because testing a down proxy takes like 2 seconds,
26 # and we would do it like 100 times in a row. so cache a failed result
27 # locally for 10 minutes. Also, using newer option based on man apt.conf.
28 #
29 # Once when I was testing, it seemed I needed to have it output
30 # DIRECT after outputing the proxy url
31
32 # note, the url we are trying to fetch is $1
33
34 # note, if there is a problem, some ways to debug:
35 # first,
36 # edit /etc/apt/apt.conf.d/02proxy
37 # add, remove the autodetec
38 # Acquire::http::proxy "http://CacheServerIp:3142";
39 # see the /var/log/apt-cacher-ng logs
40 # read
41 # file:///usr/share/doc/apt-cacher-ng/html/index.html
42
43 proxy_host=faiserver
44 proxy_port=3142
45 proxy_url=http://$proxy_host:$proxy_port/
46 f=/tmp/apt_proxy_fail
47 if [[ ! -w /tmp ]]; then
48 echo DIRECT
49 exit 0
50 fi
51 modtime=$(stat -c %Y $f 2>/dev/null ) ||:
52 if [[ $modtime ]] && (( $(( EPOCHSECONDS - modtime )) < 60*10 )); then
53 echo DIRECT
54 exit 0
55 else
56 rm -f $f
57 fi
58 if getent hosts $proxy_host &>/dev/null && timeout 1 nc -z $proxy_host $proxy_port &>/dev/null; then
59 echo $proxy_url
60 else
61 if [[ ! -e $f || -w $f ]]; then
62 touch $f
63 fi
64 fi