LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 894|回复: 2

[共享]一个编译临时工具的脚本。基本上能自动话,不用输入那么多的命令

[复制链接]
发表于 2006-6-20 14:43:31 | 显示全部楼层 |阅读模式
下载与更新地址:
http://abc.sounos.org:81/Tools/shell/tools_conf.sh.txt

fdisk 和 mount 因为实际情况不一样,所以这里就没有加这一部分。

自己修要修改脚本前的几个参数,如果您不太了解bash,建议不要使用

建议使用非root用户来执行。

#!/bin/sh
LFS=/mnt/SounOS
lfs_prefix=/tools
lfs_src=$LFS/sources
setup_type=$1
#clean old data
if [ "$setup_type" == "init" ] ;then
        if [ "$lfs_prefix" == "/" ]; then
           echo "Sorry , Are you sure remove root directary / !!";
           exit;
        fi
        rm -rf $lfs_prefix/*
fi

package_setup(){
p_name=$1;
p_ver=$2;
p_src=$3;
p_operation=$4;
p_provide=$5;
p_local_src=`basename $p_src`;
p_local_dir="$p_name-$p_ver";

if [ ! -e "$p_provide" ]; then
  pushd $lfs_src/$p_name \
   && [ -f $p_local_src ] || wget $p_src \
   && [ -f $p_local_src ] && rm -rf $p_local_dir \
   && tar -zxvf $p_local_src || tar -jxvf $p_local_src \
   && cd $p_local_dir \
   && eval "echo '$p_operation'" \
   && eval "$p_operation" \
   && cd - \
   && rm -rf $p_local_dir \
   && popd
fi
[ "$?" != 0 ] && eval "echo 'setup package $p_name $p_ver failed';" && exit
}

#compile binutils first time
if [ ! -f "$lfs_prefix/bin/ld-c1" ]; then
p_name=binutils
p_ver=2.16.1
p_src="http://ftp.gnu.org/gnu/binutils/$p_name-$p_ver.tar.bz2"
p_local_src=`basename $p_src`
p_local_dir="$p_name-$p_ver"
p_build_dir="$p_name-build"
pushd "$lfs_src/$p_name" \
  && [ -f $p_local_src ] || wget $p_src \
  && [ -f $p_local_src ] && rm -rf $p_local_dir && tar -jxvf $p_local_src \
  && mkdir -pv $p_build_dir \
  && cd $p_build_dir && rm -rf * \
  && ../$p_local_dir/configure --prefix=$lfs_prefix --disable-nls \
  && make \
  && make install \
  && make -C ld clean \
  && make -C ld LIB_PATH=$lfs_prefix/lib \
  && cp -v ld/ld-new $lfs_prefix/bin  \
  && ln -svf $lfs_prefix/bin/{ld,ld-c1} \
  && popd
fi
[ "$?" != 0 ] && exit


#compile gcc first time
if [ ! -e "$lfs_prefix/bin/gcc-c1" ] ; then
p_name=gcc
p_ver=4.1.0
p_src="http://ftp.gnu.org/gnu/gcc/gcc-$p_ver/gcc-$p_ver.tar.bz2"
p_local_src=`basename $p_src`
p_local_dir="$p_name-$p_ver"
p_build_dir="$p_name-build"
p_patch0_src="http://www.linuxfromscratch.org/patches/lfs/development/gcc-4.0.3-specs-1.patch"
p_patch0_name=`basename $p_patch0_src`
pushd $lfs_src/$p_name  \
  && [ -f "$p_local_src" ] || wget $p_src \
  && [ -f "$p_local_src" ] && rm -rf $p_local_dir && tar -jxvf $p_local_src \
  && mkdir -pv $p_build_dir \
  && cd $p_build_dir && rm -rf * \
  && ../$p_local_dir/configure --prefix=$lfs_prefix --with-local-prefix=$lfs_prefix \
     --disable-nls --enable-shared --enable-languages=c  \
  && make bootstrap  \
  && make install  \
  && ln -svf gcc $lfs_prefix/bin/cc \
  && ln -svf gcc $lfs_prefix/bin/gcc-c1 \
  && popd
fi
[ "$?" != 0 ] && exit

#install linux-libc-headers
if [ ! -e  "$lfs_prefix/include/asm" ]; then
p_name=linux-libc-headers
p_ver=2.6.12.0
p_src="http://ep09.pld-linux.org/~mmazur/linux-libc-headers/linux-libc-headers-$p_ver.tar.bz2"
p_local_src=`basename $p_src`
p_local_dir="$p_name-$p_ver"
pushd "$lfs_src/$p_name" \
  && [ -f $p_local_src ] || wget $p_src \
  && [ -f $p_local_src ] && rm -rf $p_local_dir && tar -jxvf $p_local_src \
  && [ -d "$lfs_prefix/include" ] || mkdir -pv $lfs_prefix/include  \
  && cp -Rv $p_local_dir/include/asm-`uname -i` $lfs_prefix/include/asm \
  && cp -Rv $p_local_dir/include/linux $lfs_prefix/include/ \
  && popd
fi
[ "$?" != 0 ] && exit

#install glibc
if [ ! -e "$lfs_prefix/lib/ld-linux.so.2" ]; then
p_name=glibc
p_ver=2.4
p_src="http://ftp.gnu.org/gnu/glibc/glibc-$p_ver.tar.bz2"
p_local_src=`basename $p_src`
p_local_dir="$p_name-$p_ver"
p_build_dir="$p_name-build"
pushd $lfs_src/$p_name \
  && [ -f $p_local_src ] || wget $p_src \
  && [ -f $p_local_src ] && rm -rf $p_local_dir && tar -jxvf $p_local_src \
  && rm -rf $p_build_dir && mkdir $p_build_dir && cd $p_build_dir \
  && ../$p_local_dir/configure --prefix=$lfs_prefix --disable-profile --enable-add-ons \
       --enable-kernel=2.6.0 --with-binutils=$lfs_prefix/bin --without-gd \
       --with-headers=$lfs_prefix/include --without-selinux \
  && make \
  && mkdir -pv $lfs_prefix/etc \
  && touch $lfs_prefix/etc/ld.so.conf \
  && make install  \
  && popd
fi
[ "$?" != 0 ] && exit

#fix tools chain
if [ ! -e "$lfs_prefix/bin/ld-tools-fixed" ]; then
     mv -v $lfs_prefix/bin/{ld,ld-old} \
  && mv -v $lfs_prefix/$(gcc -dumpmachine)/bin/{ld,ld-old} \
  && mv -v $lfs_prefix/bin/{ld-new,ld} \
  && ln -sv $lfs_prefix/bin/ld $lfs_prefix/$(gcc -dumpmachine)/bin/ld \
  && SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs \
  && gcc -dumpspecs > $SPECFILE \
  && sed "s@^/lib/ld-linux.so.2@$lfs_prefix&@g" $SPECFILE > tempspecfile \
  && mv -vf tempspecfile $SPECFILE \
  && unset SPECFILE \
  && GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include \
  && find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; \
  && rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` \
  && unset GCC_INCLUDEDIR \
  && ln -sf $lfs_prefix/bin/{ld-old,ld-tools-fixed}
fi
[ "$?" != 0 ] && exit

#install Tcl
p_name=tcl
p_ver=8.5a4
p_v=8.5
p_src="http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl$p_ver-src.tar.gz"
p_local_src=`basename $p_src`;
p_local_dir="$p_name$p_ver";
p_operation="cd unix \
&& ./configure --prefix=$lfs_prefix \
&& make \
&& make install \
&& make install-private-headers \
&& cd ../../ \
&& rm -rf $p_local_src \
&& ln -s tclsh$p_v  $lfs_prefix/bin/tclsh ";
if [ ! -e "$lfs_prefix/bin/tclsh" ]; then
   pushd $lfs_src/$p_name \
   && [ -e $p_local_src ] || wget $p_src \
   && [ -e $p_local_src ] && rm -rf $p_local_dir \
   && tar -zxvf $p_local_src || tar -jxvf $p_local_src \
   && cd $p_local_dir \
   && eval "echo '$p_operation'" \
   && eval "$p_operation" \
   && popd
   [ "$?" != 0 ] && eval "echo 'setup package $p_name $p_ver failed'" && exit
fi

#install expect
p_name=expect
p_ver=5.43
p_src=http://expect.nist.gov/src/expect.tar.gz
p_operation="./configure --prefix=$lfs_prefix  --with-tcl=$lfs_prefix/lib \
             --with-tclinclude=$lfs_prefix/include --with-x=no \
&& make \
&& make SCRIPT=\"\" install ";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/expect"

#install dejagnu/dejagnu-1.4.4
p_name=dejagnu
p_ver=1.4.4
p_src=http://ftp.gnu.org/gnu/dejagnu/dejagnu-$p_ver.tar.gz
p_operation="./configure --prefix=$lfs_prefix && make && make install ";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/share/dejagnu"

#install guile
# p_name=guile
# p_ver=1.8.0
# p_src=http://ftp.gnu.org/gnu/guile/guile-$p_ver.tar.gz
# p_operation="./configure --prefix=$lfs_prefix --without-libintl-prefix && make && make install ";
# package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/guile"

#install autogen
# p_name=autogen
# p_ver=5.5.7
# p_src=http://ftp.gnu.org/gnu/autogen/autogen-$p_ver.tar.bz2
# p_operation="./configure --prefix=$lfs_prefix && make && make install ";
# package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/autogen"

#compile gcc again
p_name=gcc
p_ver=4.1.0
p_src="http://ftp.gnu.org/gnu/gcc/gcc-$p_ver/gcc-$p_ver.tar.bz2"
p_local_src=`basename "$p_src"`;
p_build_dir="$p_name-build";
p_local_dir="$p_name-$p_ver";
if [ ! -e "$lfs_prefix/bin/gcc_c2" ];then
  pushd "$lfs_src/$p_name" \
  && [ -f $p_local_src ] || wget $p_src \
  && [ -f $p_local_src ] && rm -rf $p_local_dir && tar -jxvf $p_local_src || tar -zxvf $p_local_src \
  && mkdir -pv $p_build_dir \
  && cd $p_build_dir && rm -rf * \
  && ../$p_local_dir/configure --prefix=$lfs_prefix --with-local-prefix=$lfs_prefix \
       --enable-clocale=gnu --enable-threads=posix \
       --enable-shared --enable-__cxa_atexit --enable-languages=c,c++ --disable-libstdcxx-pch \
  && make  \
  && make  -k check \
  && make install  \
  && cd ../ \
  && rm -rf $p_local_dir \
  && ln -s gcc  $lfs_prefix/bin/gcc_c2 \
  && popd
  [ "$?" != 0 ] && eval "echo 'setup package $p_name $p_ver failed'" && exit
#  && make  check \
fi

#compile binutils again
p_name=binutils
p_ver=2.16.1
p_src="http://ftp.gnu.org/gnu/binutils/$p_name-$p_ver.tar.bz2"
p_local_src=`basename $p_src`
p_local_dir="$p_name-$p_ver"
p_build_dir="$p_name-build"
if [ ! -e "$lfs_prefix/bin/ld_c2" ]; then
  pushd "$lfs_src/$p_name" \
  && [ -f $p_local_src ] || wget $p_src \
  && [ -f $p_local_src ] && rm -rf $p_local_dir && tar -jxvf $p_local_src || tar -zxvf $p_local_src \
  && mkdir -pv $p_build_dir \
  && cd $p_build_dir && rm -rf * \
  && ../$p_local_dir/configure --prefix=$lfs_prefix --disable-nls --enable-shared \
  && make \
  && make -k check \
  && make install \
  && make -C ld clean \
  && make -C ld LIB_PATH=/usr/lib:/lib \
  && cp -v ld/ld-new $lfs_prefix/bin \
  && ln -s ld $lfs_prefix/bin/ld_c2 \
  && cd ../ \
  && rm -rf $p_local_dir \
  && popd
  [ "$?" != 0 ] && eval "echo 'setup package $p_name $p_ver failed'" && exit
#  && make check \
fi

#install ncurses/ncurses-5.5
p_name=ncurses
p_ver=5.5
p_src=ftp://invisible-island.net/ncurses/ncurses-$p_ver.tar.gz
p_operation="./configure --prefix=$lfs_prefix --with-shared --without-debug \
             --without-ada --enable-overwrite \
    && make \
    && make install ";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/lib/libcurses.so"

#install bash/bash-3.1
p_name=bash
p_ver=3.1
p_src=http://ftp.gnu.org/gnu/bash/bash-$p_ver.tar.gz
p_operation="./configure --prefix=$lfs_prefix --without-bash-malloc \
    && make \
    && make install \
    && ln -s bash $lfs_prefix/bin/sh ";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/bash"

#install Bzip2
p_name=bzip2
p_ver=1.0.3
p_src=http://www.bzip.org/$p_ver/bzip2-$p_ver.tar.gz
p_operation="make && make PREFIX=$lfs_prefix install ";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/bzip2"

#install coreutils  
p_name=coreutils
p_ver=5.96
p_src=http://ftp.gnu.org/gnu/coreutils/coreutils-$p_ver.tar.bz2
p_operation="./configure --prefix=$lfs_prefix DEFAULT_POSIX2_VERSION=200112 alternative=199209 \
&& make \
&& make install ";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/dir"

#install  diffutils/diffutils-2.8
p_name=diffutils
p_ver=2.8
p_src=http://ftp.gnu.org/gnu/diffutils/diffutils-$p_ver.tar.gz
p_operation="./configure --prefix=$lfs_prefix && make && make install";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/diff"

#install findutils/findutils-4.2.27
p_name=findutils
p_ver=4.2.27
p_src=http://ftp.gnu.org/gnu/findutils/findutils-$p_ver.tar.gz
p_operation="./configure --prefix=$lfs_prefix && make && make install";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/find"

#install gawk
p_name=gawk
p_ver=3.1.5
p_src="http://ftp.gnu.org/gnu/gawk/gawk-$p_ver.tar.bz2"
p_operation="./configure --prefix=$lfs_prefix && make && make install";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/gawk"

#install gettext/gettext-0.14
p_name=gettext
p_ver=0.14
p_src=http://ftp.gnu.org/gnu/gettext/gettext-$p_ver.tar.gz
p_operation="./configure --prefix=$lfs_prefix --disable-shared \
        && make -C lib \
        && make -C src msgfmt \
        && cp -v src/msgfmt /tools/bin ";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/gettext"

#install grep/grep-2.5
p_name=grep
p_ver=2.5
p_src=http://ftp.gnu.org/gnu/grep/grep-$p_ver.tar.bz2
p_operation="./configure --prefix=$lfs_prefix --disable-perl-regexp && make && make install";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/grep"

#install gzip/gzip-1.3.5
p_name=gzip
p_ver=1.3.5
p_src=ftp://alpha.gnu.org/gnu/gzip/gzip-$p_ver.tar.gz
p_operation="./configure --prefix=$lfs_prefix && make && make install";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/gzip"

#install m4/m4-1.4.4  
p_name=m4
p_ver=1.4.4
p_src=http://ftp.gnu.org/gnu/m4/m4-$p_ver.tar.gz
p_operation="./configure --prefix=$lfs_prefix && make && make install"
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/m4"

#install make/make-3.81
p_name=make
p_ver=3.81
p_src=http://ftp.gnu.org/gnu/make/make-$p_ver.tar.bz2
p_operation="./configure --prefix=$lfs_prefix && make && make install";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/make"

#install patch/patch-2.5.4
p_name=patch
p_ver=2.5.4
p_src=http://ftp.gnu.org/gnu/patch/patch-$p_ver.tar.gz
p_operation="./configure --prefix=$lfs_prefix CPPFLAGS=-D_GNU_SOURCE  && make && make install";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/patch"

#install perl/perl-5.8.8
p_name=perl
p_ver=5.8.8
p_src="http://ftp.funet.fi/pub/CPAN/src/perl-$p_ver.tar.bz2"
p_local_src=`basename $p_src`;
p_local_dir="$p_name-$p_ver";
p_patch_src="http://www.linuxfromscratch.org/patches/lfs/development/perl-5.8.8-libc-2.patch";
p_local_pch=`basename $p_patch_src`;
if [ ! -e "$lfs_prefix/bin/perl" ]; then
  p_operation="./configure.gnu --prefix=$lfs_prefix -Dstatic_ext='Data/Dumper Fcntl IO POSIX' \
   && make perl utilities \
   && cp -v perl pod/pod2man $lfs_prefix/bin \
   && mkdir -vp $lfs_prefix/lib/perl5/$p_ver \
   && cp -rf lib/* $lfs_prefix/lib/perl5/$p_ver ";
  pushd $lfs_src/$p_name \
   && [ -e $p_local_src ] || wget $p_src \
   && [ -e $p_local_pch ] || wget $p_patch_src  \
   && [ -e $p_local_src ] && rm $p_local_dir && tar -zxvf $p_local_src || tar -jxvf $p_local_src \
   && cd $p_local_dir \
   && [ -e ../$p_local_pch ] && patch -p1 < ../$p_local_pch \
   && eval "$p_operation" \
   && cd ../ \
   && rm -rf $p_local_dir \
   && popd
fi

#install  sed/sed-4.1.5
p_name=sed
p_ver=4.1.5
p_src=http://ftp.gnu.org/gnu/sed/sed-$p_ver.tar.gz
p_operation="./configure --prefix=$lfs_prefix && make && make install";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/sed"

#install tar/tar-1.15
p_name=tar
p_ver=1.15
p_src=http://ftp.gnu.org/gnu/tar/tar-$p_ver.tar.bz2
p_operation="./configure --prefix=$lfs_prefix && make && make install"
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/tar"

#install texinfo/texinfo-4.8
p_name=texinfo
p_ver=4.8
p_src=http://ftp.gnu.org/gnu/texinfo/texinfo-$p_ver.tar.bz2
p_operation="./configure --prefix=$lfs_prefix && make && make install";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/makeinfo"

#install bison/bison-2.3
p_name=bison
p_ver=2.3
p_src=http://ftp.gnu.org/gnu/bison/bison-$p_ver.tar.bz2
p_operation="./configure --prefix=$lfs_prefix && make && make install";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/bison"

#install flex/flex-2.5.4a
p_name=flex
p_ver=2.5.4
p_src=http://nchc.dl.sourceforge.net/sourceforge/flex/flex-$p_ver.tar.bz2
p_operation="./configure --prefix=$lfs_prefix && make && make install";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/flex"

#install util-linux/util-linux-2.12r
p_name=util-linux
p_ver=2.12r
p_src=http://www.kernel.org/pub/linux/utils/util-linux/util-linux-$p_ver.tar.bz2
p_operation="sed -i \"s@/usr/include@$lfs_prefix/include@g\" configure \
  && ./configure \
  && make -C lib \
  && make -C mount mount umount \
  && make -C text-utils more \
  && cp -v mount/{,u}mount text-utils/more $lfs_prefix/bin ";
package_setup "$p_name" "$p_ver" "$p_src" "$p_operation" "$lfs_prefix/bin/mount"

#Stripping
strip --debug $lfs_prefix/lib/*
strip --unneeded $lfs_prefix/{,s}bin/*
发表于 2006-6-20 17:53:54 | 显示全部楼层
一句老话,还是喜欢自己输入命令,,LFS阶段,不推荐使用自动化脚本。

不过谢谢楼主共享!
回复 支持 反对

使用道具 举报

发表于 2006-6-20 19:58:03 | 显示全部楼层
自动脚本嘛。。。,为何又 re-invent the wheel?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表