blob: 54c4a69fffa744400710d37cf029b48c4fe65dea (
plain) (
tree)
|
|
#!/bin/bash
ROOT_DIR=$(dirname $(readlink -f $0))
SELF=$(readlink -f $0)
print_usage() {
echo "create tools for minilinux"
echo "Usage: $(basename $SELF) TOOL"
}
if [ "x$1" = "x" ]; then
print_usage
exit 0
elif [ "x$(whoami)" != "xroot" ]; then
echo "ERROR: You need to have root rights to install packages."
exit 1
fi
#Create tools directory if not exists
TOOL_DIR=$ROOT_DIR/tools
INIT_DIR=$ROOT_DIR/stage3.2
setup_git ()
{
if [ ! -z "$GIT" ]; then
GIT_BIN=$(which git)
[ -z "$GIT_BIN" ] && echo "Installing git..." && apt-get install git
fi
}
read_config ()
{
TOOL_CONFIG=$TOOL_DIR/$TOOL/$TOOL.conf
if [ ! -e $TOOL_CONFIG ]; then
echo "ERROR: Config for specified tool not found."
exit 1
fi
. $TOOL_CONFIG
}
read_build ()
{
BUILD_SCRIPT=$TOOL_DIR/$TOOL/$TOOL.build
if [ ! -e $BUILD_SCRIPT ]; then
echo "ERROR: Build script for specified tool not found."
exit 1
fi
. $BUILD_SCRIPT
}
copyfileswithdependencies ()
{
[ ! -d build ] && echo "No build directory for $TOOL found." && return
cd build
COPYFILES_LIST="list_wanted_stage3.2"
[ -e $COPYFILES_LIST ] && rm $COPYFILES_LIST
for FILENAME in $REQUIRED_BINARIES
do
for f in $(find . -name $FILENAME -type f -executable)
do
[ $(file $f |grep -c ELF) -eq 1 ] && FILE=$f
done
echo "Found $FILENAME at $FILE. Searching libraries..."
echo $FILE >> $COPYFILES_LIST
# fetch dependencies
# quick fix to exclude libc*, else it copies unneeded libs...
for i in $(ldd $FILE |awk '{print $1 $2 $3}'|grep -v ld-linux|grep -v libc.so*|grep -v linux-gate)
do
arrIN=(${i//=>/ })
echo "--------------------------------------------------------"
echo "Searching ${arrIN[0]} under $(pwd)..."
LOCAL_MATCHES=$(find . -name $(echo ${arrIN[0]}|awk -F "." '{print $1}').*)
if [ "x$LOCAL_MATCHES" != "x" ];
then
for llib in $LOCAL_MATCHES;
do
echo "Copying $llib"
echo $llib >> $COPYFILES_LIST
#[ -L $llib ] && echo $(readlink -f $llib) >> $COPYFILES_LIST
done
else
echo "Did not found ${arrIN[0]} in $(pwd)"
if [ -e ${arrIN[1]} ];
then
echo -n "Trying ${arrIN[1]} ..."
echo " found! Copying."
echo ${arrIN[1]} >> $COPYFILES_LIST
[ -L ${arrIN[1]} ] && echo $(readlink -f ${arrIN[1]}) >> $COPYFILES_LIST
fi
fi
done
echo "Copied $FILENAME."
echo "-----------------------------------------------------------------"
done
for LIB in $REQUIRED_LIBRARIES
do
for LOCATION in $(find . -name $LIB*)
do
echo $LOCATION >> $COPYFILES_LIST
done
done
echo "Copying required directories and files from config file..."
for ENTRY in $REQUIRED_DIRECTORIES $REQUIRED_FILES
do
echo ".$ENTRY" >> $COPYFILES_LIST
done
#copy to initramfsdir
tar -cpv $(cat $COPYFILES_LIST|sort -u) | tar -xpv -C $INIT_DIR &>/dev/null
unset REQUIRED_BINARIES
unset REQUIRED_LIBRARIES
unset REQUIRED_DIRECTORIES
unset REQUIRED_FILES
}
get_basic_libs () {
[ ! -d $INIT_DIR ] && mkdir $INIT_DIR
# copy libc and ld-linux separatly
echo "Looking for libc and ld-linux used for $SHELL..."
BASICLIBS=""
for i in $(ldd $SHELL)
do
if [ $(echo $i | grep '^/' | grep -c ld) -eq 1 -o $(echo $i | grep '^/' | grep -c libc.so) -eq 1 ];
then
echo "Found basic lib at: $i"
BASICLIBS="$BASICLIBS $i $(readlink -f "$i")"
fi
done
tar -cpv $BASICLIBS | tar -xpv -C $INIT_DIR &>/dev/null
echo "Basic libs copied."
}
main () {
get_basic_libs
cd $TOOL_DIR
while (( "$#" )); do
TOOL=$1
if [ -d $TOOL ];
then
cd $TOOL
read_config
read_build
setup_git
install_dependencies
fetch_source
build
copyfileswithdependencies
post_copy
cd $TOOL_DIR
else
echo "Tool directory not found."
fi
shift
done
}
main $@
|