#! /bin/bash
#-
#- *** truecrypt installer for debian etch (kernel 2.6.18) ***
#-
#- *** Version 0.0.2 ***
#-
#- Copyright (c) 2007, Juergen Heine - sysdef@debiancenter.org
#-
# --------------------------------------------------------------------------
# History:
# version - date - name - description
# 0.0.1 - 2007-07-30 - sysdef - initial, tests and routines
# 0.0.2 - 2007-08-03 - sysdef - check for root rights, OS and
# add -y to aptitute
# --------------------------------------------------------------------------
#
#- All rights reserved.
#-
#- Released under BSD License
#-
#- Redistribution and use in source and binary forms, with or without
#- modification, are permitted provided that the following conditions
#- are met:
#-
#- * Redistributions of source code must retain the above copyright notice,
#- this list of conditions and the following disclaimer.
#- * Redistributions in binary form must reproduce the above copyright notice,
#- thislist of conditions and the following disclaimer in the documentation
#- and/or other materials provided with the distribution.
#- * Neither the name of Debian Center Org. nor the names of its contributors
#- may be used to endorse or promote products derived from this software
#- without specific prior written permission.
#-
#- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
#- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
#- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
#- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
#- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
#- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
#- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
#- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
#- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
#- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#-
[ "$1" == "--license" ] && { grep \^#- $0 | sed s/^#-//; exit; }
# functions
log() { tee -a $LOG; }
plog() { echo -n ' # '|log; echo -e $@ |log; }
ok() { echo "done." |log; }
fail() { echo "failed." |log; }
# logging
LOG=$(pwd)/truecrypt.log
echo " ### START INSTALLATION at $(date) ###" |log
echo " ### $(uname -a) ###" |log
# running debian?
[ -f /etc/debian_version ] || {
echo " # OS is not Debian -> exit" |log
echo
echo " This script is written for Debian only!"
sleep 2
echo " Don't ask the maintainer for help if you're not using Debian!"
sleep 3
echo " ... and NO! Ubuntu or Knoppix is NOT Debian! Don't discuss!"
rm -v $0
exit 0
}
# are we root?
[ $UID == 0 ] || {
echo " # User ${USERNAME} try to start installer" |log
plog "Failed to get setuid 0 (root rights). Start script as root!"
exit 0
}
echo -e "\n *** TrueCrypt Installer for Debian GNU/Linux 4.0 (etch) ***"
echo " *** with kernel 2.6.18 ***"
echo -e " *** (c) 2007 by Juergen Heine - sysdef@debiancenter.org ***\n"
echo -e " *** Released under BSD License, type truecrypt.sh --license ***\n"
sleep 5
# get the system kernel version
KERNEL=$( uname -r )
plog "RUNNING KERNEL == $KERNEL"
# get the packages
plog -n "Install dependencies ... "
aptitude -y install build-essential dmsetup linux-source-$( uname -r | sed s/-.*// ) >>$LOG
ok
# expand linux kernel sources
[ -d /usr/src/linux-source-$( uname -r | sed s/-.*// ) ] || {
plog -n "Expand linux sources ... "
cd /usr/src
tar -xvjf linux-source-$( uname -r|sed s/-.*// ).tar.bz2 >>$LOG 2>&1 && ok || fail
cd - >/dev/null
}
# get linux version
LINUX_SOURCE=$( basename $( find /usr/src/ -maxdepth 1 -name "linux-source-2.6*" -type d | tail -1 ) )
plog "LINUX_SOURCE == $LINUX_SOURCE"
# set linux link
plog -n
ln -svf /usr/src/linux /usr/src/$LINUX_SOURCE |log
# get kernel GCC version
K_GCC_L=$( cat /proc/version | grep -o "gcc version [^ ]*" | cut -d \ -f 3 )
plog "KERNEL GCC LONG VERSION == $K_GCC_L"
K_GCC_S=$( cat /proc/version | grep -o "gcc version [^ ]*" | cut -d \ -f 3 | cut -d . -f 1,2 )
plog "KERNEL GCC SHORT VERSION == $K_GCC_S"
# if kernel GCC version NOT installed, install it
[ $(dpkg -l | grep gcc | grep -c $K_GCC_S) ] && {
plog "KERNEL GCC VERSION is installed"
} || {
plog "KERNEL GCC VERSION is NOT installed"
aptitude install gcc-${K_GCC_S} gcc-${K_GCC_S}-base >>$LOG
}
# save old gcc link
[ -h gcc.sik ] || {
plog -n
cp -Rvp /usr/bin/gcc gcc.sik |log
} && {
plog "WARNING: gcc link already saved (interrupted installation?)"
}
# set link to kernel gcc
plog -n
ln -sfv /usr/bin/gcc-${K_GCC_S} /usr/bin/gcc |log
# get VER(sion) from truecrypt site
VER_T=$( wget -qO- http://www.truecrypt.org/downloads.php | grep "Latest Stable Version - " | sed 's/ //g;s/.*-//;s/<.*//' )
plog "VERSION FROM Truecrypt.org == $VER_T"
# get VER(sion) from wikipedia
VER_W=$( wget -qO- http://de.wikipedia.org/wiki/TrueCrypt?action=raw| grep "|AktuelleVersion=.*" | sed 's/ //g;s/.*=//' )
plog "VERSION FROM Wikipedia.org == $VER_W"
[ -f truecrypt-*-source-code.tar.gz ] && {
VER=$( ls truecrypt-*-source-code.tar.gz | cut -d - -f 2 )
plog "Version ${VER} is already downloaded"
} || {
[ "$VER_T" == "$VER_W" ] && {
plog "Version informations are equal"
plog -n "Downloading truecrypt-${VER_T}-source-code ... "
wget -O truecrypt-${VER_T}-source-code.tar.gz http://www.truecrypt.org/downloads/truecrypt-${VER_T}-source-code.tar.gz >>$LOG 2>&1 && ok
VER=$VER_T
} || {
plog "WARNING: Version informations are NOT equal"
plog -n "Try to download truecrypt-${VER_T}-source-code ... "
wget -O truecrypt-${VER_T}-source-code.tar.gz http://www.truecrypt.org/downloads/truecrypt-${VER_T}-source-code.tar.gz >>$LOG 2>&1 && {
VER=$VER_T
ok
} || {
fail
}
plog -n "Try to download truecrypt-${VER_W}-source-code ... "
wget -O truecrypt-${VER_W}-source-code.tar.gz http://www.truecrypt.org/downloads/truecrypt-${VER_W}-source-code.tar.gz >>$LOG 2>&1 && {
VER=$VER_W
ok
} || {
fail
}
[ "$VER" == "$VER_T" ] && plog "The TrueCrypt Site information (Version ${VER_T}) was right"
[ "$VER" == "$VER_W" ] && plog "The Wikipedia Site information (Version ${VER_W}) was right"
}
}
# extract archive
[ -d truecrypt-${VER}-source-code ] && {
plog "Archive is allready extracted"
} || {
plog -n "extract archive ... "
tar xvzf truecrypt-${VER}-source-code.tar.gz >>$LOG 2>&1 && ok
# kernel >= 2.6.18
plog -n "Patch sources ... "
wget -O Linux_gt_eq_2.6.18.diff http://privat.heinzelzwerg.de/howtos/debian/truecrypt/Linux_gt_eq_2.6.18.diff >>$LOG 2>&1
patch truecrypt-${VER}-source-code/Linux/Kernel/Dm-target.c Linux_gt_eq_2.6.18.diff >>$LOG 2>&1 && {
ok
} || {
fail
exit
}
}
cd truecrypt-${VER}-source-code/Linux/
./Cli/truecrypt --help >/dev/null 2>&1 && {
plog "truecrypt is already build"
} || {
echo "Y" | ./build.sh |log && {
ok
} || {
fail
exit
}
}
truecrypt --help >/dev/null && {
plog "WARNING: truecrypt is already installed"
} || {
echo -e "\n\n\nY" | ./install.sh >/dev/null 2>&1 && {
ok
} || {
fail
exit
}
}
# restore old gcc link
[ -h gcc.sik ] && {
plog -n
cp -Rvp gcc.sik /usr/bin/gcc |log
plog -n
rm -v gcc.sik |log
} || {
plog "WARNING: can't find saved gcc link"
}
# status
truecrypt --help >/dev/null && {
plog "Version Informations: ...\n\n"
truecrypt --version |log
echo -e " ### END SUCCESSFULL INSTALLATION at $(date) ###\n" >>$LOG
exit 1;
} || {
plog "ERROR: truecrypt is NOT installed. See logfile for details"
echo " ### END FAILED INSTALLATION at $(date) ###\n" >>$LOG
exit 0;
}
# EOF