├── ncat ├── binary │ ├── nc │ ├── ncat-6.47SVN │ └── README.md ├── support │ ├── x-tools-symlink │ └── config └── README.md ├── README.md └── backup ├── backup └── README.md /ncat/binary/nc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ksylvan/MyPassportWirelessHacks/HEAD/ncat/binary/nc -------------------------------------------------------------------------------- /ncat/binary/ncat-6.47SVN: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ksylvan/MyPassportWirelessHacks/HEAD/ncat/binary/ncat-6.47SVN -------------------------------------------------------------------------------- /ncat/binary/README.md: -------------------------------------------------------------------------------- 1 | # Files included here 2 | 3 | * ncat-6.47SVN - ncat source compiled from https://svn.nmap.org/nmap 4 | 5 | * nc - renamed busybox binary using only the netcat applet from the git repo at git://busybox.net/busybox.git 6 | -------------------------------------------------------------------------------- /ncat/support/x-tools-symlink: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Author: Kayvan Sylvan 4 | # 5 | 6 | if [ $# -ne 1 ]; then echo "Usage: $0 dirname"; exit 1; fi 7 | if [ ! -d $HOME/x-tools ]; then echo "Build crosstool-ng first!"; exit 2; fi 8 | 9 | cd $HOME/x-tools 10 | 11 | x="$1" 12 | 13 | if [ ! -d $x ]; then echo "No directory $x in ~/x-tools!"; exit 3; fi 14 | 15 | list=$(ls $x/bin) 16 | 17 | echo Setting up bin directory. 18 | rm -rf bin; mkdir bin 19 | cd bin 20 | for i in $list 21 | do 22 | new=$(echo $i | sed "s/$x-//") 23 | echo ln -s ../$x/bin/$i $new 24 | ln -s ../$x/bin/$i $new 25 | done 26 | echo Done. 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | MyPassportWirelessHacks 2 | ======================= 3 | 4 | Hacks for the Western Digital My Passport Wireless network attached 5 | storage device. 6 | 7 | **Disclaimer: These hacks require you to turn on the ssh access into the 8 | device and will void your warranty.** 9 | 10 | In order to turn on SSH access, go into the web user interface for the device, 11 | click on "Admin" and turn on SSH in the "Access" section. You will then 12 | use your device's IP address to login using your favorite ssh or scp client. 13 | 14 | What's Here: 15 | ------------ 16 | 17 | * [backup/](https://github.com/ksylvan/MyPassportWirelessHacks/tree/master/backup) Instructions and scripts for using your MyPW for automated backups. 18 | 19 | * [ncat/](https://github.com/ksylvan/MyPassportWirelessHacks/tree/master/ncat) How to install ncat on your device to route traffic. 20 | 21 | Contact Me 22 | ---------- 23 | 24 | If you have problems, feel free to contact me, but remember, you do 25 | all this at your own risk and I am only sharing with you what works 26 | for me! 27 | 28 | Best regards, 29 | 30 | Kayvan Sylvan 31 | -------------------------------------------------------------------------------- /backup/backup: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Author: Kayvan Sylvan 4 | # 5 | # Automated rsync+ssh backup from WD My Passport Wireless device 6 | # 7 | cd $(dirname $0) 8 | my_script=$(pwd)/$(basename $0) 9 | 10 | usage() { echo "Usage: $0 [setup | doit]"; exit 0; } 11 | 12 | proc_exists() 13 | { 14 | kill -0 $1 2>/dev/null 15 | } 16 | 17 | if [ $# -ne 1 ] 18 | then 19 | usage 20 | exit 0 21 | fi 22 | 23 | # Change these for your setup 24 | # 25 | SRC=192.168.1.101:/DataVolume/ 26 | DESTDIR=/DataVolume/Backup/mwp_backup 27 | LOG=/DataVolume/Backup/rsync.log 28 | WHEN="0,30 * * * *" # cron specification (2AM every day) 29 | CRON_INIT=$(ls /etc/init.d/*cron*) 30 | MY_CRON_FILENAME="backup_my_data" 31 | RSYNC_OPTS="-avz -h --progress" 32 | 33 | run_command() 34 | { 35 | proc=$1 36 | cmdline="$@" 37 | pidfile=/var/run/"$proc".pid 38 | if [ -r $pidfile ] 39 | then 40 | if proc_exists $(cat $pidfile) 41 | then 42 | echo "$proc still running... Not doing anything." >> $LOG 43 | return 0 44 | fi 45 | fi 46 | 47 | $cmdline >> $LOG 2>&1 & 48 | echo "$!" > $pidfile 49 | wait $! 50 | } 51 | 52 | if [ ! -d $DESTDIR ]; then mkdir $DESTDIR; fi 53 | 54 | case "$1" in 55 | setup) 56 | echo "$WHEN root $my_script doit" > /etc/cron.d/$MY_CRON_FILENAME 57 | $CRON_INIT restart 58 | ;; 59 | doit) 60 | START=$(date) 61 | echo "About to rsync $SRC to $DESTDIR" >> $LOG 62 | run_command rsync $RSYNC_OPTS root@$SRC $DESTDIR 63 | echo "STARTED at $START - ENDED at $(date)" >> $LOG 64 | ;; 65 | *) 66 | usage;; 67 | esac 68 | -------------------------------------------------------------------------------- /backup/README.md: -------------------------------------------------------------------------------- 1 | # Backup up a server using your My Passport Wireless device. 2 | 3 | These instructions are based on my [original post](http://community.wd.com/t5/My-Passport-Wireless/Backing-up-between-two-My-Passport-Wireless-devices/td-p/811481) about using one MyPW device to backup another, on the WD Community pages. 4 | 5 | ## Setting up non-interactive ssh 6 | 7 | When you ssh into the MyPW device, you notice that there's a pretty 8 | full featured Debian/Linux system in there (*THANK YOU Western Digital 9 | --- so awesome!*) but a few things need to be adjusted. 10 | 11 | First thing: ssh requires strict permissions on the home directory for 12 | key based (non-interactive) logins to work. 13 | 14 | So, make sure the machine that you are trying to backup has the right 15 | permissions on the home directory and the .ssh directory. The My 16 | Passport Wireless device, for example, does not have the right 17 | permissions for its root user. Fix it by doing this: 18 | 19 | # chmod 755 /home/root 20 | 21 | Next, generate the keys and set up the authorized_keys file on the 22 | receiving side (the My Passport Wireless device that will initiate the 23 | rsync backups): 24 | 25 | cd /home/root 26 | ssh-keygen 27 | ssh-keygen -t dsa 28 | ssh-keygen -t ecdsa 29 | cat .ssh/id_rsa.pub | ssh 192.168.1.101 'mkdir .ssh; cat >> .ssh/authorized_keys' 30 | 31 | Replace 192.168.1.101 above with the IP address on the server that you 32 | are going to back up. 33 | 34 | Once you have done this, you should be able to ssh to the other box 35 | from your My Passport Wirless shell prompt: 36 | 37 | # ssh 192.168.1.101 38 | 39 | # ifconfig | grep inet 40 | inet addr:127.0.0.1 Mask:255.0.0.0 41 | inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0 42 | 43 | Now you are ready to set up cron to run your rsync script. 44 | 45 | ## Cron and rsync backups 46 | 47 | Copy ./backup script from this repository to your My Passport Wireless 48 | device's DataVolume partition. 49 | 50 | On your device: 51 | 52 | # mkdir /DataVolume/Backup 53 | 54 | and put the [backup script](https://github.com/ksylvan/MyPassportWirelessHacks/raw/master/backup/backup) as /DataVolume/Backup/backup 55 | 56 | $ scp ./backup root@{ip-address-of-your-MyWP}:/DataVolume/Backup/ 57 | 58 | Now edit the top of the script with the right IP addresses and 59 | locations and run it like this: 60 | 61 | # chmod +x ./Backup/backup 62 | # ./Backup/backup setup 63 | Shutting down crond services: done 64 | Starting crond services: done 65 | 66 | After this, your backups should happen at the specified times. 67 | 68 | Putting the backup script on the DataVolume is important, because it 69 | won't be lost when you do firmware upgrades. 70 | 71 | Test it by running the script by hand once (after which the rsync will 72 | happen much faster). 73 | -------------------------------------------------------------------------------- /ncat/README.md: -------------------------------------------------------------------------------- 1 | # Download the binary 2 | 3 | If you just want to grab a binary, you will find them in the [binary/](https://github.com/ksylvan/MyPassportWirelessHacks/tree/master/ncat/binary) subdirectory. 4 | Do so at your own risk. It works for me, but I make no 5 | guarantees that it won't harm your device. 6 | 7 | The rest of this guide walks you through creating your own 8 | cross-compiling toolchain and compiling netcat from source for your My 9 | Passport Wireless device. 10 | 11 | # Cross-compilng ncat for the My Passport Wireless 12 | 13 | These are the exact steps I used to cross-compile netcat from 14 | http://nmap.org/ncat/ for the My Passport Wireless network attached 15 | storage device. My host system was a Fedora 20 Linux, but similar 16 | steps will work for other distributions. 17 | 18 | ## Setup crosstool-ng: 19 | 20 | git clone git://crosstool-ng.org/crosstool-ng 21 | ./bootstrap 22 | ./configure --enable-local 23 | 24 | The configure step fails if you are missing pre-requisites. So at this point, 25 | install whatever is missing. For my Fedora 20 system, I had to do: 26 | 27 | sudo yum install gperf 28 | sudo yum install flex 29 | 30 | Then go back to the rest of the steps: 31 | 32 | ./configure --enable-local 33 | make 34 | ./ct-ng menuconfig 35 | 36 | At this point, you have to match the crosstool-ng toolchain with your 37 | My Passport Wireless device. I had gathered some information from my system: 38 | 39 | # cat /etc/os-release 40 | NAME=Buildroot 41 | VERSION=2013.05-svn157-dirty 42 | ID=buildroot 43 | VERSION_ID=2013.05 44 | PRETTY_NAME="Buildroot 2013.05" 45 | 46 | # cat /proc/version 47 | Linux version 3.2.0 (primax@primax-vm) (gcc version 4.7.3 20130226 (prerelease) (crosstool-NG linaro-1.13.1-4.7-2013.03-20130313 - Linaro GCC 2013.03) ) #1 Thu Oct 2 16:08:39 CST 2014 48 | 49 | # uname -a 50 | Linux Home2 3.2.0 #1 Thu Oct 2 16:08:39 CST 2014 armv7l GNU/Linux 51 | 52 | # file /bin/busybox 53 | /bin/busybox: setuid ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31, BuildID[sha1]=7508def24d66e7eaffa9853bd9e099fe0aa93d00, stripped 54 | 55 | Based on that information, I set up my toolchain in the menuconfig as follows: 56 | 57 | * Target options ---> Target Architecture ---> select arm 58 | * Operating System ---> Target OS ---> select linux 59 | * Linux kernel version ---> select 2.6.31.14 60 | * C-library ---> C library ---> select eglibc 61 | * C-library ---> eglibc version ---> select 2_15 62 | * C-Compiler ---> select Show linaro versions and then 63 | * C-Compiler ---> gcc version ---> select linaro-4.7-2014.01 64 | 65 | After you do all the above, you can exit all the way out of menuconfig, 66 | which will write your .config file. 67 | 68 | I have included my .config file (as support/config) in this repository, 69 | in case you have problems, but I make no guarantees that it will work 70 | for you. 71 | 72 | Then, continuing with the build: 73 | 74 | ./ct-ng build 75 | 76 | if you get a message about LD_LIBRARY_PATH, then 77 | 78 | unset LD_LIBRARY_PATH 79 | ./ct-ng build 80 | 81 | This step will take a while. When it's finished, you will have a 82 | directory ~/x-tools that contains your cross-compiling toolchain. 83 | 84 | $ ls ~/x-tools/ 85 | arm-unknown-linux-gnueabi 86 | 87 | $ ls ~/x-tools/arm-unknown-linux-gnueabi 88 | 89 | $ ls ~/x-tools/arm-unknown-linux-gnueabi 90 | arm-unknown-linux-gnueabi bin build.log.bz2 include lib libexec share 91 | 92 | $ ls ~/x-tools/arm-unknown-linux-gnueabi/bin/ 93 | arm-unknown-linux-gnueabi-addr2line arm-unknown-linux-gnueabi-gprof 94 | arm-unknown-linux-gnueabi-ar arm-unknown-linux-gnueabi-ld 95 | arm-unknown-linux-gnueabi-as arm-unknown-linux-gnueabi-ld.bfd 96 | arm-unknown-linux-gnueabi-cc arm-unknown-linux-gnueabi-ldd 97 | arm-unknown-linux-gnueabi-c++filt arm-unknown-linux-gnueabi-nm 98 | arm-unknown-linux-gnueabi-cpp arm-unknown-linux-gnueabi-objcopy 99 | arm-unknown-linux-gnueabi-ct-ng.config arm-unknown-linux-gnueabi-objdump 100 | arm-unknown-linux-gnueabi-elfedit arm-unknown-linux-gnueabi-populate 101 | arm-unknown-linux-gnueabi-gcc arm-unknown-linux-gnueabi-ranlib 102 | arm-unknown-linux-gnueabi-gcc-4.7.3 arm-unknown-linux-gnueabi-readelf 103 | arm-unknown-linux-gnueabi-gcc-ar arm-unknown-linux-gnueabi-size 104 | arm-unknown-linux-gnueabi-gcc-nm arm-unknown-linux-gnueabi-strings 105 | arm-unknown-linux-gnueabi-gcc-ranlib arm-unknown-linux-gnueabi-strip 106 | arm-unknown-linux-gnueabi-gcov 107 | 108 | As you can see, crosstool-ng creates some unwieldy file names. So, I 109 | wrote a shell script (included as support/x-tools-symlink). This 110 | script creates a bin directory in ~/x-tools populated by symlinks that 111 | point to the cross-compiling toolchain binaries: 112 | 113 | $ ./support/x-tools-symlink arm-unknown-linux-gnueabi 114 | Setting up bin directory. 115 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-addr2line addr2line 116 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-ar ar 117 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-as as 118 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-cc cc 119 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-c++filt c++filt 120 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-cpp cpp 121 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-ct-ng.config ct-ng.config 122 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-elfedit elfedit 123 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc gcc 124 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc-4.7.3 gcc-4.7.3 125 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc-ar gcc-ar 126 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc-nm gcc-nm 127 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcc-ranlib gcc-ranlib 128 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gcov gcov 129 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-gprof gprof 130 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-ld ld 131 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-ld.bfd ld.bfd 132 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-ldd ldd 133 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-nm nm 134 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-objcopy objcopy 135 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-objdump objdump 136 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-populate populate 137 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-ranlib ranlib 138 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-readelf readelf 139 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-size size 140 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-strings strings 141 | ln -s ../arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-strip strip 142 | Done. 143 | 144 | Now you can simply set your PATH to point to ~/x-tools/bin first, 145 | which will use your cross-compiling toolchain binaries with the usual 146 | names (like "gcc" and "ld"), obviating the need to modify configure scripts and Makefiles. 147 | This comes in handy for configure scripts that don't have easy ways to support 148 | cross-compilation toolchains. 149 | 150 | ## Alternative 1: Compiling ncat official sources 151 | 152 | With our toolchain ready to use, we are now ready to compile ncat. 153 | 154 | Grab the nmap sources: 155 | 156 | svn co https://svn.nmap.org/nmap 157 | cd nmap 158 | PATH=~/x-tools/arm-unknown-linux-gnueabi/bin:$PATH 159 | ./configure --host=arm-unknown-linux-gnueabi --with-pcap=null 160 | cd libpcap 161 | make 162 | cd ../ncat/ 163 | make 164 | 165 | Now you have a binary that will run on your My Passport Wireless! 166 | 167 | $ file ncat 168 | ncat: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31, not stripped 169 | $ ls -l ncat 170 | -rwxrwxr-x. 1 ksylvan ksylvan 1191443 Oct 21 15:15 ncat 171 | 172 | Let's make it smaller: 173 | 174 | $ arm-unknown-linux-gnueabi-strip ncat 175 | $ file ncat 176 | ncat: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.31, stripped 177 | $ ls -l ncat 178 | -rwxrwxr-x. 1 ksylvan ksylvan 288332 Oct 21 15:20 ncat 179 | 180 | Now you can copy this binary to your device and run it: 181 | 182 | # uname -a 183 | Linux Home2 3.2.0 #1 Thu Oct 2 16:08:39 CST 2014 armv7l GNU/Linux 184 | # ./ncat --version 185 | Ncat: Version 6.47SVN ( http://nmap.org/ncat ) 186 | 187 | ## Alternative 2: Use the busybox applet 188 | 189 | The busybox binary that comes with the My Passport Wireless device is missing the "netcat" functionality. 190 | Theoretically, you could build a full busybox and replace that one, but that seems overly risky to me. 191 | Instead, we will build a very tiny executable that just incorporates the "netcat" command. 192 | 193 | $ git clone git://busybox.net/busybox.git 194 | $ cd busybox 195 | $ PATH=~/x-tools/arm-unknown-linux-gnueabi/bin:$PATH 196 | $ make allnoconfig 197 | 198 | The "make allnoconfig" line makes an empty configuration (includes *no* commands). Next, we select just the 199 | netcat module. 200 | 201 | $ make menuconfig 202 | 203 | Now, select Networking Utilities ---> nc, then tab over to the Exit and get out of the menu config program. 204 | 205 | $ make CROSS_COMPILE=arm-unknown-linux-gnueabi- 206 | 207 | This will make busybox, and the size of the executable is *much* smaller than what we saw above: 208 | 209 | $ ls -l busybox 210 | -rwxrwxr-x. 1 ksylvan ksylvan 12132 Oct 20 19:24 busybox 211 | 212 | Now, copy the file to your My Passport Wireless device and rename it to "nc". This version works like the 213 | official nmap version of ncat for most simple operations and is about 20 times smaller! 214 | 215 | # Tricks with ncat 216 | 217 | I have a UVerse gateway at my home for internet connectivity. The 218 | administrative interface is pretty limited, but it allows me to 219 | port-forward specific ports to other devices in the network via its 220 | Firewall->"NAT/Gaming" tab. Using this, I forwarded port 22 (ssh) to 221 | my My Passport Wireless device. 222 | 223 | Armed with the external WAN address of my uVerse gateway, represented 224 | as AA.BB.CC.DD below, I can now do this sort of thing: 225 | 226 | From my laptop: 227 | 228 | $ ncat --sh-exec "ssh root@AA.BB.CC.DD ./ncat 192.168.1.254 80" --keep-open -l 8080 229 | 230 | This uses the ncat I copied over ("./ncat") to connect to 231 | 192.168.1.254:80 which is the local area network address of the web 232 | interface for the uVerse gateway and makes it available on my laptop at localhost:8080. 233 | The same command would work just fine if you replaced "./ncat" with "./nc" (using the smaller 234 | busybox alternative). 235 | 236 | Then I use a browser and connect to localhost:8080 and I can 237 | administer the uVerse gateway. 238 | 239 | In fact, using similar commands, I can access all sorts of internal resources: 240 | 241 | Suppose I have a Linux box in my internal network at 192.168.2.2. 242 | 243 | From my laptop, from an external address, I can do this: 244 | 245 | $ ncat --sh-exec "ssh root@AA.BB.CC.DD ./nc 192.168.2.2 22" --keep-open -l 1122 246 | 247 | And then, I can use the -p option of ssh to login to that machine: 248 | 249 | $ ssh -o StrictHostKeyChecking=false -p 1122 root@localhost 250 | Warning: Permanently added '[localhost]:1122' (ECDSA) to the list of known hosts. 251 | # 252 | -------------------------------------------------------------------------------- /ncat/support/config: -------------------------------------------------------------------------------- 1 | # 2 | # Automatically generated make config: don't edit 3 | # crosstool-NG 1.20.0 Configuration 4 | # Tue Oct 21 11:10:38 2014 5 | # 6 | CT_CONFIGURE_has_xz=y 7 | CT_CONFIGURE_has_cvs=y 8 | CT_CONFIGURE_has_svn=y 9 | CT_MODULES=y 10 | 11 | # 12 | # Paths and misc options 13 | # 14 | 15 | # 16 | # crosstool-NG behavior 17 | # 18 | # CT_OBSOLETE is not set 19 | # CT_EXPERIMENTAL is not set 20 | # CT_DEBUG_CT is not set 21 | 22 | # 23 | # Paths 24 | # 25 | CT_LOCAL_TARBALLS_DIR="" 26 | CT_WORK_DIR="${CT_TOP_DIR}/.build" 27 | CT_PREFIX_DIR="${HOME}/x-tools/${CT_TARGET}" 28 | CT_INSTALL_DIR="${CT_PREFIX_DIR}" 29 | CT_RM_RF_PREFIX_DIR=y 30 | CT_REMOVE_DOCS=y 31 | CT_INSTALL_DIR_RO=y 32 | CT_STRIP_ALL_TOOLCHAIN_EXECUTABLES=y 33 | 34 | # 35 | # Downloading 36 | # 37 | # CT_FORBID_DOWNLOAD is not set 38 | # CT_FORCE_DOWNLOAD is not set 39 | CT_CONNECT_TIMEOUT=10 40 | # CT_ONLY_DOWNLOAD is not set 41 | CT_USE_MIRROR=y 42 | # CT_FORCE_MIRROR is not set 43 | CT_MIRROR_BASE_URL="http://crosstool-ng.org/mirrors/" 44 | 45 | # 46 | # Extracting 47 | # 48 | # CT_FORCE_EXTRACT is not set 49 | CT_OVERIDE_CONFIG_GUESS_SUB=y 50 | # CT_ONLY_EXTRACT is not set 51 | CT_PATCH_BUNDLED=y 52 | # CT_PATCH_LOCAL is not set 53 | # CT_PATCH_BUNDLED_LOCAL is not set 54 | # CT_PATCH_LOCAL_BUNDLED is not set 55 | # CT_PATCH_BUNDLED_FALLBACK_LOCAL is not set 56 | # CT_PATCH_LOCAL_FALLBACK_BUNDLED is not set 57 | # CT_PATCH_NONE is not set 58 | CT_PATCH_ORDER="bundled" 59 | 60 | # 61 | # Build behavior 62 | # 63 | CT_PARALLEL_JOBS=0 64 | CT_LOAD="" 65 | CT_USE_PIPES=y 66 | CT_EXTRA_CFLAGS_FOR_BUILD="" 67 | CT_EXTRA_LDFLAGS_FOR_BUILD="" 68 | CT_EXTRA_CFLAGS_FOR_HOST="" 69 | CT_EXTRA_LDFLAGS_FOR_HOST="" 70 | # CT_CONFIG_SHELL_SH is not set 71 | # CT_CONFIG_SHELL_ASH is not set 72 | CT_CONFIG_SHELL_BASH=y 73 | # CT_CONFIG_SHELL_CUSTOM is not set 74 | CT_CONFIG_SHELL="${bash}" 75 | 76 | # 77 | # Logging 78 | # 79 | # CT_LOG_ERROR is not set 80 | # CT_LOG_WARN is not set 81 | CT_LOG_INFO=y 82 | # CT_LOG_EXTRA is not set 83 | # CT_LOG_ALL is not set 84 | # CT_LOG_DEBUG is not set 85 | CT_LOG_LEVEL_MAX="INFO" 86 | # CT_LOG_SEE_TOOLS_WARN is not set 87 | CT_LOG_PROGRESS_BAR=y 88 | CT_LOG_TO_FILE=y 89 | CT_LOG_FILE_COMPRESS=y 90 | 91 | # 92 | # Target options 93 | # 94 | CT_ARCH="arm" 95 | CT_ARCH_SUPPORTS_BOTH_MMU=y 96 | CT_ARCH_SUPPORTS_BOTH_ENDIAN=y 97 | CT_ARCH_SUPPORTS_32=y 98 | CT_ARCH_SUPPORTS_64=y 99 | CT_ARCH_SUPPORTS_WITH_ARCH=y 100 | CT_ARCH_SUPPORTS_WITH_CPU=y 101 | CT_ARCH_SUPPORTS_WITH_TUNE=y 102 | CT_ARCH_SUPPORTS_WITH_FLOAT=y 103 | CT_ARCH_SUPPORTS_WITH_FPU=y 104 | CT_ARCH_SUPPORTS_SOFTFP=y 105 | CT_ARCH_DEFAULT_HAS_MMU=y 106 | CT_ARCH_DEFAULT_LE=y 107 | CT_ARCH_DEFAULT_32=y 108 | CT_ARCH_ARCH="" 109 | CT_ARCH_CPU="" 110 | CT_ARCH_TUNE="" 111 | CT_ARCH_FPU="" 112 | # CT_ARCH_BE is not set 113 | CT_ARCH_LE=y 114 | CT_ARCH_32=y 115 | # CT_ARCH_64 is not set 116 | CT_ARCH_BITNESS=32 117 | # CT_ARCH_FLOAT_HW is not set 118 | # CT_ARCH_FLOAT_SW is not set 119 | CT_TARGET_CFLAGS="" 120 | CT_TARGET_LDFLAGS="" 121 | # CT_ARCH_alpha is not set 122 | CT_ARCH_arm=y 123 | # CT_ARCH_avr32 is not set 124 | # CT_ARCH_blackfin is not set 125 | # CT_ARCH_m68k is not set 126 | # CT_ARCH_mips is not set 127 | # CT_ARCH_powerpc is not set 128 | # CT_ARCH_s390 is not set 129 | # CT_ARCH_sh is not set 130 | # CT_ARCH_sparc is not set 131 | # CT_ARCH_x86 is not set 132 | CT_ARCH_alpha_AVAILABLE=y 133 | CT_ARCH_arm_AVAILABLE=y 134 | CT_ARCH_avr32_AVAILABLE=y 135 | CT_ARCH_blackfin_AVAILABLE=y 136 | CT_ARCH_m68k_AVAILABLE=y 137 | CT_ARCH_microblaze_AVAILABLE=y 138 | CT_ARCH_mips_AVAILABLE=y 139 | CT_ARCH_powerpc_AVAILABLE=y 140 | CT_ARCH_s390_AVAILABLE=y 141 | CT_ARCH_sh_AVAILABLE=y 142 | CT_ARCH_sparc_AVAILABLE=y 143 | CT_ARCH_x86_AVAILABLE=y 144 | CT_ARCH_SUFFIX="" 145 | 146 | # 147 | # Generic target options 148 | # 149 | # CT_MULTILIB is not set 150 | CT_ARCH_USE_MMU=y 151 | CT_ARCH_ENDIAN="little" 152 | 153 | # 154 | # Target optimisations 155 | # 156 | CT_ARCH_FLOAT_AUTO=y 157 | # CT_ARCH_FLOAT_SOFTFP is not set 158 | CT_ARCH_FLOAT="auto" 159 | # CT_ARCH_ALPHA_EV4 is not set 160 | # CT_ARCH_ALPHA_EV45 is not set 161 | # CT_ARCH_ALPHA_EV5 is not set 162 | # CT_ARCH_ALPHA_EV56 is not set 163 | # CT_ARCH_ALPHA_EV6 is not set 164 | # CT_ARCH_ALPHA_EV67 is not set 165 | 166 | # 167 | # arm other options 168 | # 169 | CT_ARCH_ARM_MODE="arm" 170 | CT_ARCH_ARM_MODE_ARM=y 171 | # CT_ARCH_ARM_MODE_THUMB is not set 172 | # CT_ARCH_ARM_INTERWORKING is not set 173 | CT_ARCH_ARM_EABI_FORCE=y 174 | CT_ARCH_ARM_EABI=y 175 | 176 | # 177 | # Toolchain options 178 | # 179 | 180 | # 181 | # General toolchain options 182 | # 183 | CT_FORCE_SYSROOT=y 184 | CT_USE_SYSROOT=y 185 | CT_SYSROOT_NAME="sysroot" 186 | CT_SYSROOT_DIR_PREFIX="" 187 | CT_WANTS_STATIC_LINK=y 188 | # CT_STATIC_TOOLCHAIN is not set 189 | CT_TOOLCHAIN_PKGVERSION="" 190 | CT_TOOLCHAIN_BUGURL="" 191 | 192 | # 193 | # Tuple completion and aliasing 194 | # 195 | CT_TARGET_VENDOR="unknown" 196 | CT_TARGET_ALIAS_SED_EXPR="" 197 | CT_TARGET_ALIAS="" 198 | 199 | # 200 | # Toolchain type 201 | # 202 | CT_CROSS=y 203 | # CT_CANADIAN is not set 204 | CT_TOOLCHAIN_TYPE="cross" 205 | 206 | # 207 | # Build system 208 | # 209 | CT_BUILD="" 210 | CT_BUILD_PREFIX="" 211 | CT_BUILD_SUFFIX="" 212 | 213 | # 214 | # Misc options 215 | # 216 | # CT_TOOLCHAIN_ENABLE_NLS is not set 217 | 218 | # 219 | # Operating System 220 | # 221 | CT_KERNEL_SUPPORTS_SHARED_LIBS=y 222 | CT_KERNEL="linux" 223 | CT_KERNEL_VERSION="2.6.31.14" 224 | # CT_KERNEL_bare_metal is not set 225 | CT_KERNEL_linux=y 226 | CT_KERNEL_bare_metal_AVAILABLE=y 227 | CT_KERNEL_linux_AVAILABLE=y 228 | # CT_KERNEL_V_3_15 is not set 229 | # CT_KERNEL_V_3_14 is not set 230 | # CT_KERNEL_V_3_13 is not set 231 | # CT_KERNEL_V_3_12 is not set 232 | # CT_KERNEL_V_3_11 is not set 233 | # CT_KERNEL_V_3_10 is not set 234 | # CT_KERNEL_V_3_9 is not set 235 | # CT_KERNEL_V_3_8 is not set 236 | # CT_KERNEL_V_3_7 is not set 237 | # CT_KERNEL_V_3_6 is not set 238 | # CT_KERNEL_V_3_5 is not set 239 | # CT_KERNEL_V_3_4 is not set 240 | # CT_KERNEL_V_3_3 is not set 241 | # CT_KERNEL_V_3_2 is not set 242 | # CT_KERNEL_V_3_1 is not set 243 | # CT_KERNEL_V_3_0 is not set 244 | # CT_KERNEL_V_2_6_39 is not set 245 | # CT_KERNEL_V_2_6_38 is not set 246 | # CT_KERNEL_V_2_6_37 is not set 247 | # CT_KERNEL_V_2_6_36 is not set 248 | # CT_KERNEL_V_2_6_33 is not set 249 | # CT_KERNEL_V_2_6_32 is not set 250 | CT_KERNEL_V_2_6_31=y 251 | # CT_KERNEL_V_2_6_27 is not set 252 | # CT_KERNEL_LINUX_CUSTOM is not set 253 | CT_KERNEL_windows_AVAILABLE=y 254 | 255 | # 256 | # Common kernel options 257 | # 258 | CT_SHARED_LIBS=y 259 | 260 | # 261 | # linux other options 262 | # 263 | CT_KERNEL_LINUX_VERBOSITY_0=y 264 | # CT_KERNEL_LINUX_VERBOSITY_1 is not set 265 | # CT_KERNEL_LINUX_VERBOSITY_2 is not set 266 | CT_KERNEL_LINUX_VERBOSE_LEVEL=0 267 | CT_KERNEL_LINUX_INSTALL_CHECK=y 268 | 269 | # 270 | # Binary utilities 271 | # 272 | CT_ARCH_BINFMT_ELF=y 273 | CT_BINUTILS="binutils" 274 | CT_BINUTILS_binutils=y 275 | 276 | # 277 | # GNU binutils 278 | # 279 | CT_BINUTILS_V_2_22=y 280 | # CT_BINUTILS_V_2_21_53 is not set 281 | # CT_BINUTILS_V_2_21_1a is not set 282 | # CT_BINUTILS_V_2_20_1a is not set 283 | # CT_BINUTILS_V_2_19_1a is not set 284 | # CT_BINUTILS_V_2_18a is not set 285 | CT_BINUTILS_VERSION="2.22" 286 | CT_BINUTILS_2_22_or_later=y 287 | CT_BINUTILS_2_21_or_later=y 288 | CT_BINUTILS_2_20_or_later=y 289 | CT_BINUTILS_2_19_or_later=y 290 | CT_BINUTILS_2_18_or_later=y 291 | CT_BINUTILS_HAS_HASH_STYLE=y 292 | CT_BINUTILS_HAS_GOLD=y 293 | CT_BINUTILS_GOLD_SUPPORTS_ARCH=y 294 | CT_BINUTILS_HAS_PLUGINS=y 295 | CT_BINUTILS_HAS_PKGVERSION_BUGURL=y 296 | CT_BINUTILS_FORCE_LD_BFD=y 297 | CT_BINUTILS_LINKER_LD=y 298 | # CT_BINUTILS_LINKER_LD_GOLD is not set 299 | # CT_BINUTILS_LINKER_GOLD_LD is not set 300 | CT_BINUTILS_LINKERS_LIST="ld" 301 | CT_BINUTILS_LINKER_DEFAULT="bfd" 302 | # CT_BINUTILS_PLUGINS is not set 303 | CT_BINUTILS_EXTRA_CONFIG_ARRAY="" 304 | # CT_BINUTILS_FOR_TARGET is not set 305 | 306 | # 307 | # binutils other options 308 | # 309 | 310 | # 311 | # C-library 312 | # 313 | CT_LIBC="eglibc" 314 | CT_LIBC_VERSION="2_15" 315 | CT_LIBC_eglibc=y 316 | # CT_LIBC_glibc is not set 317 | # CT_LIBC_musl is not set 318 | # CT_LIBC_uClibc is not set 319 | CT_LIBC_eglibc_AVAILABLE=y 320 | CT_THREADS="nptl" 321 | # CT_LIBC_EGLIBC_V_2_18 is not set 322 | # CT_LIBC_EGLIBC_V_2_17 is not set 323 | # CT_LIBC_EGLIBC_V_2_16 is not set 324 | CT_LIBC_EGLIBC_V_2_15=y 325 | # CT_LIBC_EGLIBC_V_2_14 is not set 326 | # CT_LIBC_EGLIBC_V_2_13 is not set 327 | # CT_LIBC_EGLIBC_V_2_12 is not set 328 | # CT_LIBC_EGLIBC_V_2_11 is not set 329 | # CT_LIBC_EGLIBC_V_2_10 is not set 330 | # CT_LIBC_EGLIBC_V_2_9 is not set 331 | # CT_LIBC_EGLIBC_V_TRUNK is not set 332 | CT_EGLIBC_REVISION="HEAD" 333 | # CT_EGLIBC_HTTP is not set 334 | # CT_EGLIBC_CHECKOUT is not set 335 | # CT_EGLIBC_OPT_SIZE is not set 336 | # CT_EGLIBC_CUSTOM_CONFIG is not set 337 | CT_LIBC_glibc_AVAILABLE=y 338 | CT_LIBC_mingw_AVAILABLE=y 339 | CT_LIBC_musl_AVAILABLE=y 340 | CT_LIBC_newlib_AVAILABLE=y 341 | CT_LIBC_none_AVAILABLE=y 342 | CT_LIBC_uClibc_AVAILABLE=y 343 | CT_LIBC_SUPPORT_THREADS_ANY=y 344 | CT_LIBC_SUPPORT_THREADS_NATIVE=y 345 | 346 | # 347 | # Common C library options 348 | # 349 | CT_THREADS_NATIVE=y 350 | CT_LIBC_XLDD=y 351 | 352 | # 353 | # eglibc other options 354 | # 355 | CT_LIBC_GLIBC_PORTS_EXTERNAL=y 356 | CT_LIBC_GLIBC_MAY_FORCE_PORTS=y 357 | CT_LIBC_glibc_familly=y 358 | CT_LIBC_GLIBC_EXTRA_CONFIG_ARRAY="" 359 | CT_LIBC_GLIBC_CONFIGPARMS="" 360 | CT_LIBC_GLIBC_EXTRA_CFLAGS="" 361 | CT_LIBC_EXTRA_CC_ARGS="" 362 | # CT_LIBC_DISABLE_VERSIONING is not set 363 | CT_LIBC_OLDEST_ABI="" 364 | CT_LIBC_GLIBC_FORCE_UNWIND=y 365 | CT_LIBC_GLIBC_USE_PORTS=y 366 | CT_LIBC_ADDONS_LIST="" 367 | 368 | # 369 | # WARNING !!! 370 | # 371 | 372 | # 373 | # For glibc >= 2.8, it can happen that the tarballs 374 | # 375 | 376 | # 377 | # for the addons are not available for download. 378 | # 379 | 380 | # 381 | # If that happens, bad luck... Try a previous version 382 | # 383 | 384 | # 385 | # or try again later... :-( 386 | # 387 | # CT_LIBC_LOCALES is not set 388 | # CT_LIBC_GLIBC_KERNEL_VERSION_NONE is not set 389 | CT_LIBC_GLIBC_KERNEL_VERSION_AS_HEADERS=y 390 | # CT_LIBC_GLIBC_KERNEL_VERSION_CHOSEN is not set 391 | CT_LIBC_GLIBC_MIN_KERNEL="2.6.31.14" 392 | 393 | # 394 | # C compiler 395 | # 396 | CT_CC="gcc" 397 | CT_CC_VERSION="linaro-4.7-2014.01" 398 | CT_CC_CORE_PASSES_NEEDED=y 399 | CT_CC_CORE_PASS_1_NEEDED=y 400 | CT_CC_CORE_PASS_2_NEEDED=y 401 | CT_CC_gcc=y 402 | CT_CC_GCC_SHOW_LINARO=y 403 | # CT_CC_V_4_9_1 is not set 404 | # CT_CC_V_4_9_0 is not set 405 | # CT_CC_V_linaro_4_8 is not set 406 | # CT_CC_V_4_8_3 is not set 407 | # CT_CC_V_4_8_2 is not set 408 | # CT_CC_V_4_8_1 is not set 409 | # CT_CC_V_4_8_0 is not set 410 | CT_CC_V_linaro_4_7=y 411 | # CT_CC_V_4_7_4 is not set 412 | # CT_CC_V_4_7_3 is not set 413 | # CT_CC_V_4_7_2 is not set 414 | # CT_CC_V_4_7_1 is not set 415 | # CT_CC_V_4_7_0 is not set 416 | # CT_CC_V_linaro_4_6 is not set 417 | # CT_CC_V_4_6_4 is not set 418 | # CT_CC_V_4_6_3 is not set 419 | # CT_CC_V_4_6_2 is not set 420 | # CT_CC_V_4_6_1 is not set 421 | # CT_CC_V_4_6_0 is not set 422 | # CT_CC_V_linaro_4_5 is not set 423 | # CT_CC_V_4_5_3 is not set 424 | # CT_CC_V_4_5_2 is not set 425 | # CT_CC_V_4_5_1 is not set 426 | # CT_CC_V_4_5_0 is not set 427 | # CT_CC_V_linaro_4_4 is not set 428 | # CT_CC_V_4_4_7 is not set 429 | # CT_CC_V_4_4_6 is not set 430 | # CT_CC_V_4_4_5 is not set 431 | # CT_CC_V_4_4_4 is not set 432 | # CT_CC_V_4_4_3 is not set 433 | # CT_CC_V_4_4_2 is not set 434 | # CT_CC_V_4_4_1 is not set 435 | # CT_CC_V_4_4_0 is not set 436 | # CT_CC_V_4_3_6 is not set 437 | # CT_CC_V_4_3_5 is not set 438 | # CT_CC_V_4_3_4 is not set 439 | # CT_CC_V_4_3_3 is not set 440 | # CT_CC_V_4_3_2 is not set 441 | # CT_CC_V_4_3_1 is not set 442 | # CT_CC_V_4_2_4 is not set 443 | # CT_CC_V_4_2_2 is not set 444 | CT_CC_GCC_4_2_or_later=y 445 | CT_CC_GCC_4_3_or_later=y 446 | CT_CC_GCC_4_4_or_later=y 447 | CT_CC_GCC_4_5_or_later=y 448 | CT_CC_GCC_4_6_or_later=y 449 | CT_CC_GCC_4_7=y 450 | CT_CC_GCC_4_7_or_later=y 451 | CT_CC_GCC_HAS_GRAPHITE=y 452 | CT_CC_GCC_USE_GRAPHITE=y 453 | CT_CC_GCC_HAS_LTO=y 454 | CT_CC_GCC_USE_LTO=y 455 | CT_CC_GCC_HAS_PKGVERSION_BUGURL=y 456 | CT_CC_GCC_HAS_BUILD_ID=y 457 | CT_CC_GCC_HAS_LNK_HASH_STYLE=y 458 | CT_CC_GCC_USE_GMP_MPFR=y 459 | CT_CC_GCC_USE_MPC=y 460 | CT_CC_GCC_HAS_LIBQUADMATH=y 461 | # CT_CC_LANG_FORTRAN is not set 462 | CT_CC_SUPPORT_CXX=y 463 | CT_CC_SUPPORT_FORTRAN=y 464 | CT_CC_SUPPORT_JAVA=y 465 | CT_CC_SUPPORT_ADA=y 466 | CT_CC_SUPPORT_OBJC=y 467 | CT_CC_SUPPORT_OBJCXX=y 468 | 469 | # 470 | # Additional supported languages: 471 | # 472 | # CT_CC_LANG_CXX is not set 473 | # CT_CC_LANG_JAVA is not set 474 | 475 | # 476 | # gcc other options 477 | # 478 | CT_CC_ENABLE_CXX_FLAGS="" 479 | CT_CC_CORE_EXTRA_CONFIG_ARRAY="" 480 | CT_CC_EXTRA_CONFIG_ARRAY="" 481 | CT_CC_STATIC_LIBSTDCXX=y 482 | # CT_CC_GCC_SYSTEM_ZLIB is not set 483 | 484 | # 485 | # Optimisation features 486 | # 487 | 488 | # 489 | # Settings for libraries running on target 490 | # 491 | CT_CC_GCC_ENABLE_TARGET_OPTSPACE=y 492 | # CT_CC_GCC_LIBMUDFLAP is not set 493 | # CT_CC_GCC_LIBGOMP is not set 494 | # CT_CC_GCC_LIBSSP is not set 495 | # CT_CC_GCC_LIBQUADMATH is not set 496 | 497 | # 498 | # Misc. obscure options. 499 | # 500 | CT_CC_CXA_ATEXIT=y 501 | # CT_CC_GCC_DISABLE_PCH is not set 502 | CT_CC_GCC_SJLJ_EXCEPTIONS=m 503 | CT_CC_GCC_LDBL_128=m 504 | # CT_CC_GCC_BUILD_ID is not set 505 | CT_CC_GCC_LNK_HASH_STYLE_DEFAULT=y 506 | # CT_CC_GCC_LNK_HASH_STYLE_SYSV is not set 507 | # CT_CC_GCC_LNK_HASH_STYLE_GNU is not set 508 | # CT_CC_GCC_LNK_HASH_STYLE_BOTH is not set 509 | CT_CC_GCC_LNK_HASH_STYLE="" 510 | CT_CC_GCC_DEC_FLOAT_AUTO=y 511 | # CT_CC_GCC_DEC_FLOAT_BID is not set 512 | # CT_CC_GCC_DEC_FLOAT_DPD is not set 513 | # CT_CC_GCC_DEC_FLOATS_NO is not set 514 | 515 | # 516 | # Debug facilities 517 | # 518 | # CT_DEBUG_dmalloc is not set 519 | # CT_DEBUG_duma is not set 520 | # CT_DEBUG_gdb is not set 521 | # CT_DEBUG_ltrace is not set 522 | # CT_DEBUG_strace is not set 523 | 524 | # 525 | # Companion libraries 526 | # 527 | CT_COMPLIBS_NEEDED=y 528 | CT_GMP_NEEDED=y 529 | CT_MPFR_NEEDED=y 530 | CT_PPL_NEEDED=y 531 | CT_CLOOG_NEEDED=y 532 | CT_MPC_NEEDED=y 533 | CT_COMPLIBS=y 534 | CT_GMP=y 535 | CT_MPFR=y 536 | CT_PPL=y 537 | CT_CLOOG=y 538 | CT_MPC=y 539 | CT_GMP_V_5_1_3=y 540 | # CT_GMP_V_5_1_1 is not set 541 | # CT_GMP_V_5_0_2 is not set 542 | # CT_GMP_V_5_0_1 is not set 543 | # CT_GMP_V_4_3_2 is not set 544 | # CT_GMP_V_4_3_1 is not set 545 | # CT_GMP_V_4_3_0 is not set 546 | CT_GMP_VERSION="5.1.3" 547 | CT_MPFR_V_3_1_2=y 548 | # CT_MPFR_V_3_1_0 is not set 549 | # CT_MPFR_V_3_0_1 is not set 550 | # CT_MPFR_V_3_0_0 is not set 551 | # CT_MPFR_V_2_4_2 is not set 552 | # CT_MPFR_V_2_4_1 is not set 553 | # CT_MPFR_V_2_4_0 is not set 554 | CT_MPFR_VERSION="3.1.2" 555 | CT_PPL_V_0_11_2=y 556 | # CT_PPL_V_0_11_1 is not set 557 | # CT_PPL_V_0_11 is not set 558 | # CT_PPL_V_0_10_2 is not set 559 | CT_PPL_VERSION="0.11.2" 560 | CT_PPL_0_11=y 561 | CT_PPL_NEEDS_LIBPWL=y 562 | CT_CLOOG_V_0_15_11=y 563 | CT_CLOOG_VERSION="0.15.11" 564 | CT_CLOOG_NEEDS_AUTORECONF=y 565 | CT_MPC_V_1_0_2=y 566 | # CT_MPC_V_1_0_1 is not set 567 | # CT_MPC_V_1_0 is not set 568 | # CT_MPC_V_0_9 is not set 569 | # CT_MPC_V_0_8_2 is not set 570 | # CT_MPC_V_0_8_1 is not set 571 | # CT_MPC_V_0_7 is not set 572 | CT_MPC_VERSION="1.0.2" 573 | 574 | # 575 | # Companion libraries common options 576 | # 577 | # CT_COMPLIBS_CHECK is not set 578 | 579 | # 580 | # Companion tools 581 | # 582 | 583 | # 584 | # READ HELP before you say 'Y' below !!! 585 | # 586 | # CT_COMP_TOOLS is not set 587 | --------------------------------------------------------------------------------