|
|
下载与更新地址:
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/* |
|