Configure tsocks with a simple heuristic.
Consider the proxy has to be in a 'local' network. It means it is directly
reachable by the local machine, even if the local machine has to hop through
one or more gates to reach the proxy (often the case in enterprise networks
where class A 10.0.0.0/8 is in fact sub-divided into smaller networks, each
one of them in a different location, eg. 10.1.0.0/16 in a place, while
10.2.0.0/16 would be on the other side of the world). Not being in the same
subnet does not mean the proxy is not available.
So we will build a mask with at most high bits set, which defines a network
that has both the local machine and the proxy. Because a machine may have
more than one interface, build a mask for each of them, removing 127.0.0.1
which is added automagically by tsocks, and removing duplicate masks.
If all of this does not work, then it means the local machine can NOT in fact
reach the proxy, which in turn means the user mis-configured something (most
probably a typo...).
/trunk/scripts/crosstool.sh | 61 52 9 0 +++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 52 insertions(+), 9 deletions(-)
1 --- uClibc-0.9.28/extra/scripts/fix_includes.sh.orig 2006-12-13 05:44:21.000000000 -0700
2 +++ uClibc-0.9.28/extra/scripts/fix_includes.sh 2006-12-13 05:44:35.000000000 -0700
5 -# Copyright (C) 2003 Erik Andersen <andersen@uclibc.org>
7 -# This program is free software; you can redistribute it and/or
8 -# modify it under the terms of the GNU Library General Public
9 -# License as published by the Free Software Foundation; either
10 -# version 2 of the License, or (at your option) any later
13 -# This program is distributed in the hope that it will be useful,
14 -# but WITHOUT ANY WARRANTY; without even the implied warranty of
15 -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 -# GNU Library General Public License for more details.
18 -# You should have received a copy of the GNU Library General
19 -# Public License along with this program; if not, write to the
20 -# Free Software Foundation, Inc., 59 Temple Place, Suite 330,
21 -# Boston, MA 02111-1307 USA
25 - echo "usage: "`basename $0`" -k KERNEL_SOURCE_DIRECTORY -t TARGET_ARCH"
27 - echo "This utility scans the KERNEL_SOURCE_DIRECTORY directory and"
28 - echo "checks that it contains well formed kernel headers suitable"
29 - echo "for inclusion as the include/linux/ directory provided by"
32 - echo "If the specified kernel headers are present and already"
33 - echo "configured for the architecture specified by TARGET_ARCH,"
34 - echo "they will be used as-is."
36 - echo "If the specified kernel headers are missing entirely, this"
37 - echo "script will return an error."
39 - echo "If the specified kernel headers are present, but are either"
40 - echo "not yet configured or are configured for an architecture"
41 - echo "different than that specified by TARGET_ARCH, this script"
42 - echo "will attempt to 'fix' the kernel headers and make them"
43 - echo "suitable for use by uClibc. This fixing process may fail."
44 - echo "It is therefore best to always provide kernel headers that"
45 - echo "are already configured for the selected architecture."
47 - echo "Most Linux distributions provide 'kernel-headers' packages"
48 - echo "that are suitable for use by uClibc."
52 +# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
54 +# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
59 + echo "usage: "`basename $0`" -k KERNEL_SOURCE_DIRECTORY -t TARGET_ARCH"
61 + echo "This utility scans the KERNEL_SOURCE_DIRECTORY directory and"
62 + echo "checks that it contains well formed kernel headers suitable"
63 + echo "for inclusion as the include/linux/ directory provided by"
66 + echo "If the specified kernel headers are present and already"
67 + echo "configured for the architecture specified by TARGET_ARCH,"
68 + echo "they will be used as-is."
70 + echo "If the specified kernel headers are missing entirely, this"
71 + echo "script will return an error."
73 + echo "If the specified kernel headers are present, but are either"
74 + echo "not yet configured or are configured for an architecture"
75 + echo "different than that specified by TARGET_ARCH, this script"
76 + echo "will attempt to 'fix' the kernel headers and make them"
77 + echo "suitable for use by uClibc. This fixing process may fail."
78 + echo "It is therefore best to always provide kernel headers that"
79 + echo "are already configured for the selected architecture."
81 + echo "Most Linux distributions provide 'kernel-headers' packages"
82 + echo "that are suitable for use by uClibc."
91 +# Parse our arguments
96 - -k ) shift; if [ -n "$1" ]; then KERNEL_SOURCE=$1; shift; else usage; fi; ;;
97 - -t ) shift; if [ -n "$1" ]; then TARGET_ARCH=$1; shift; else usage; fi; ;;
98 - -n ) shift; HAS_MMU="n"; ;;
104 + -k ) shift; if [ -n "$1" ]; then KERNEL_SOURCE=$1; shift; else usage; fi; ;;
105 + -t ) shift; if [ -n "$1" ]; then TARGET_ARCH=$1; shift; else usage; fi; ;;
106 + -n ) shift; HAS_MMU="n"; ;;
112 -if [ ! -f "$KERNEL_SOURCE/Makefile" -a ! -f "$KERNEL_SOURCE/include/linux/version.h" ]; then
115 - echo "The file $KERNEL_SOURCE/Makefile or $KERNEL_SOURCE/include/linux/version.h is missing!";
116 - echo "Perhaps your kernel source is broken?"
122 -if [ ! -d "$KERNEL_SOURCE" ]; then
125 - echo "$KERNEL_SOURCE is not a directory";
131 -if [ -f "$KERNEL_SOURCE/Makefile" ] ; then
132 -# set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION
133 -eval `sed -n -e 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' -e 's/^\([A-Z]*\) = \(-[-a-z0-9]*\)$/\1=\2/p' $KERNEL_SOURCE/Makefile`
135 -ver=`grep UTS_RELEASE $KERNEL_SOURCE/include/linux/version.h | cut -d '"' -f 2`
136 -VERSION=`echo "$ver" | cut -d '.' -f 1`
137 -PATCHLEVEL=`echo "$ver" | cut -d '.' -f 2`
138 -if echo "$ver" | grep -q '-' ; then
139 -SUBLEVEL=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.//" | cut -d '-' -f 1`
140 -EXTRAVERSION=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.${SUBLEVEL}-//"`
142 -SUBLEVEL=`echo "$ver" | cut -d '.' -f 3`
146 +# Perform some sanity checks on our kernel sources
148 +if [ ! -f "$KERNEL_SOURCE/Makefile" -a ! -f "$KERNEL_SOURCE/include/linux/version.h" ]; then
151 + echo "The file $KERNEL_SOURCE/Makefile or $KERNEL_SOURCE/include/linux/version.h is missing!"
152 + echo "Perhaps your kernel source is broken?"
157 -if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ]
159 - echo "Unable to determine version for kernel headers"
160 - echo -e "\tprovided in directory $KERNEL_SOURCE"
162 +if [ ! -d "$KERNEL_SOURCE" ]; then
165 + echo "$KERNEL_SOURCE is not a directory"
171 -if [ "$MAKE_IS_SILENT" != "y" ]; then
172 -echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION}"
174 -echo "Using kernel headers from $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} for architecture '$TARGET_ARCH'"
175 -echo -e "\tprovided in directory $KERNEL_SOURCE"
180 # Create a symlink to include/asm
184 if [ ! -d "$KERNEL_SOURCE/include/asm" ]; then
187 - echo "The symlink $KERNEL_SOURCE/include/asm is missing\!";
188 - echo "Perhaps you forgot to configure your kernel source?";
189 - echo "You really should configure your kernel source tree so I";
190 - echo "do not have to try and guess about this sort of thing.";
192 - echo "Attempting to guess a usable value....";
197 - if [ "$TARGET_ARCH" = "powerpc" ];then
199 - ln -fs $KERNEL_SOURCE/include/asm-ppc include/asm;
201 - elif [ "$TARGET_ARCH" = "mips" ];then
203 - ln -fs $KERNEL_SOURCE/include/asm-mips include/asm;
205 - elif [ "$TARGET_ARCH" = "arm" ];then
207 - ln -fs $KERNEL_SOURCE/include/asm-arm include/asm;
209 - if [ ! -L $KERNEL_SOURCE/include/asm-arm/proc ] ; then
210 - if [ ! -L proc ] ; then
212 - ln -fs proc-armv proc;
213 - ln -fs arch-ebsa285 arch);
217 + echo "The symlink $KERNEL_SOURCE/include/asm is missing\!"
218 + echo "Perhaps you forgot to configure your kernel source?"
219 + echo "You really should configure your kernel source tree so I"
220 + echo "do not have to try and guess about this sort of thing."
222 + echo "Attempting to guess a usable value...."
227 + if [ "$TARGET_ARCH" = "powerpc" ]; then
229 + ln -fs $KERNEL_SOURCE/include/asm-ppc include/asm
231 + elif [ "$TARGET_ARCH" = "mips" ]; then
233 + ln -fs $KERNEL_SOURCE/include/asm-mips include/asm
235 + elif [ "$TARGET_ARCH" = "arm" ]; then
237 + ln -fs $KERNEL_SOURCE/include/asm-arm include/asm
239 + if [ ! -L $KERNEL_SOURCE/include/asm-arm/proc ]; then
240 + if [ ! -L proc ]; then
243 + ln -fs proc-armv proc
244 + ln -fs arch-ebsa285 arch
248 + elif [ "$TARGET_ARCH" = "cris" ]; then
250 + ln -fs $KERNEL_SOURCE/include/asm-cris include/asm
252 + elif [ "$HAS_MMU" != "y" ]; then
253 + if [ -d $KERNEL_SOURCE/include/asm-${TARGET_ARCH}nommu ]; then
255 + ln -fs $KERNEL_SOURCE/include/asm-${TARGET_ARCH}nommu include/asm
259 + ln -fs $KERNEL_SOURCE/include/asm-$TARGET_ARCH include/asm
264 + ln -fs $KERNEL_SOURCE/include/asm-$TARGET_ARCH include/asm
267 - elif [ "$TARGET_ARCH" = "cris" ]; then
269 - ln -fs $KERNEL_SOURCE/include/asm-cris include/asm;
271 - elif [ "$HAS_MMU" != "y" ]; then
272 - if [ -d $KERNEL_SOURCE/include/asm-${TARGET_ARCH}nommu ] ; then
274 - ln -fs $KERNEL_SOURCE/include/asm-${TARGET_ARCH}nommu include/asm;
278 - ln -fs $KERNEL_SOURCE/include/asm-$TARGET_ARCH include/asm;
283 - ln -fs $KERNEL_SOURCE/include/asm-$TARGET_ARCH include/asm;
287 -# No guessing required.....
288 -ln -fs $KERNEL_SOURCE/include/asm include/asm
289 -if [ -e $KERNEL_SOURCE/include/asm-$TARGET_ARCH ] ; then
290 -ln -fs $KERNEL_SOURCE/include/asm-$TARGET_ARCH include/asm-$TARGET_ARCH
291 + # No guessing required.....
292 + for x in $KERNEL_SOURCE/include/asm* ; do
293 + ln -fs ${x} include/
300 # Annoyingly, 2.6.x kernel headers also need an include/asm-generic/ directory
301 -if [ $VERSION -eq 2 ] && [ $PATCHLEVEL -ge 6 ] ; then
302 - ln -fs $KERNEL_SOURCE/include/asm-generic include/asm-generic
305 +if [ -e $KERNEL_SOURCE/include/asm-generic ]; then
306 + rm -f include/asm-generic
307 + ln -fs $KERNEL_SOURCE/include/asm-generic include/asm-generic
312 # Create the include/linux symlink.
315 ln -fs $KERNEL_SOURCE/include/linux include/linux