|
为了简明,每一个包的编译都单独使用一个函数来执行
执行方法:把所有的package和patch下载回来,和脚本放在同一目录,执行脚本即可
#################################################
#!/bin/bash
set +h
umask 022
export LC_ALL=POSIX
export CLFS_HOST="$(echo $MACHTYPE | sed "s/$(echo $MACHTYPE | cut -d- -f2)/cross/")"
export CLFS_TARGET="arm-unknown-linux-gnu"
export CLFS=$(pwd)/build_clfs
export PATH=${CLFS}/cross-tools/bin:/bin:/usr/bin
export CLFS_HOSTNAME=CLFS
unset CFLAGS
unset CXXFLAGS
create_dirs_files()
{
mkdir -pv ${CLFS}/{bin,boot,dev,{etc/,}opt,home,lib,mnt}
mkdir -pv ${CLFS}/{proc,media/{floppy,cdrom},sbin,srv,sys}
mkdir -pv ${CLFS}/var/{lock,log,mail,run,spool}
mkdir -pv ${CLFS}/var/{opt,cache,lib/{misc,locate},local}
install -dv -m 0750 ${CLFS}/root
install -dv -m 1777 ${CLFS}{/var,}/tmp
mkdir -pv ${CLFS}/usr/{,local/}{bin,include,lib,sbin,src}
mkdir -pv ${CLFS}/usr/{,local/}share/{doc,info,locale,man}
mkdir -pv ${CLFS}/usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -pv ${CLFS}/usr/{,local/}share/man/man{1,2,3,4,5,6,7,8}
for dir in ${CLFS}/usr{,/local}; do
ln -sfnv share/{man,doc,info} ${dir}
done
cat > ${CLFS}/etc/passwd << "EOF"
root::0:0:root:/root:/bin/bash
EOF
cat > ${CLFS}/etc/group << "EOF"
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
tape:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
EOF
touch ${CLFS}/var/run/utmp ${CLFS}/var/log/{btmp,lastlog,wtmp}
chmod -v 664 ${CLFS}/var/run/utmp ${CLFS}/var/log/lastlog
}
linux_headers()
{
tar xf linux-2.6.22.tar.bz2 &&
cd linux-2.6.22 &&
make include/linux/version.h &&
install -dv ${CLFS}/usr/include &&
cp -av include/{asm-generic,linux,mtd,scsi,sound} ${CLFS}/usr/include &&
cp -av include/asm-arm ${CLFS}/usr/include/asm &&
sed -i 's/asm/&-generic/g' ${CLFS}/usr/include/linux/errno.h &&
cd .. &&
rm -rf linux-2.6.22
}
cross_binutils()
{
tar xf binutils-2.18.tar.bz2 &&
cd binutils-2.18 &&
patch -Np1 -i ../binutils-2.18-posix-1.patch &&
mkdir ../binutils-build &&
cd ../binutils-build &&
AR=ar AS=as ../binutils-2.18/configure --prefix=${CLFS}/cross-tools \
--host=${CLFS_HOST} --target=${CLFS_TARGET} --with-sysroot=${CLFS} \
--disable-nls --enable-shared --disable-multilib &&
make configure-host &&
make &&
make install &&
cp -v ../binutils-2.18/include/libiberty.h ${CLFS}/usr/include &&
cd .. &&
rm -rf binutils-2.18 binutils-build
}
cross_glibc_headers()
{
tar xf glibc-2.6.1.tar.bz2 &&
cd glibc-2.6.1 &&
cp configure{,.orig} &&
sed -e 's/3.4/3.[0-9]/g' configure.orig > configure &&
tar xf ../glibc-ports-2.6.1.tar.bz2 &&
mv -v glibc-ports-2.6.1 ports &&
mkdir -v ../glibc-build &&
cd ../glibc-build &&
echo "libc_cv_forced_unwind=yes" > config.cache &&
echo "libc_cv_c_cleanup=yes" >> config.cache &&
echo "libc_cv_arm_tls=yes" >> config.cache &&
echo "install_root=${CLFS}" > configparms &&
CC=gcc ../glibc-2.6.1/configure --prefix=/usr \
--host=${CLFS_TARGET} --build=${CLFS_HOST} \
--with-headers=${CLFS}/usr/include --cache-file=config.cache &&
make install-headers &&
cp -v bits/stdio_lim.h ${CLFS}/usr/include/bits &&
touch ${CLFS}/usr/include/gnu/stubs.h &&
cp -v ../glibc-2.6.1/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h ${CLFS}/usr/include/bits &&
cd .. &&
rm -rf glibc-2.6.1 glibc-build
}
cross_gcc_static()
{
tar xf gcc-4.2.1.tar.bz2 &&
cd gcc-4.2.1 &&
patch -Np1 -i ../gcc-4.2.1-posix-1.patch &&
patch -Np1 -i ../gcc-4.2.1-cross_search_paths-1.patch &&
mkdir -v ../gcc-build &&
cd ../gcc-build &&
../gcc-4.2.1/configure --prefix=${CLFS}/cross-tools \
--host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib \
--with-sysroot=${CLFS} --disable-nls --disable-shared \
--enable-languages=c &&
make all-gcc &&
make install-gcc &&
cd .. &&
rm -rf gcc-4.2.1 gcc-build
}
cross_glibc()
{
tar xf glibc-2.6.1.tar.bz2 &&
cd glibc-2.6.1 &&
tar xf ../glibc-ports-2.6.1.tar.bz2 &&
mv -v glibc-ports-2.6.1 ports &&
patch -Np1 -i ../glibc-2.6.1-libgcc_eh-1.patch &&
patch -Np1 -i ../glibc-2.6.1-localedef_segfault-1.patch &&
patch -Np1 -i ../glibc-2.6.1-cross_hacks-1.patch &&
patch -Np1 -i ../glibc-2.6.1-RTLD_SINGLE_THREAD_P-1.patch &&
mkdir -v ../glibc-build &&
cd ../glibc-build &&
echo "libc_cv_forced_unwind=yes" > config.cache &&
echo "libc_cv_c_cleanup=yes" >> config.cache &&
echo "install_root=${CLFS}" > configparms &&
BUILD_CC="gcc" CC="${CLFS_TARGET}-gcc" \
AR="${CLFS_TARGET}-ar" RANLIB="${CLFS_TARGET}-ranlib" \
../glibc-2.6.1/configure --prefix=/usr \
--libexecdir=/usr/lib/glibc --host=${CLFS_TARGET} --build=${CLFS_HOST} \
--disable-profile --enable-add-ons --with-tls --enable-kernel=2.6.0 \
--with-__thread --with-binutils=${CLFS}/cross-tools/bin \
--with-headers=${CLFS}/usr/include --cache-file=config.cache &&
make &&
make install &&
make localedata/install-locales &&
cat > ${CLFS}/etc/nsswitch.conf << "EOF" &&
# Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files
hosts: files dns
networks: files
protocols: files
services: files
ethers: files
rpc: files
# End /etc/nsswitch.conf
EOF
cp -v --remove-destination ${CLFS}/usr/share/zoneinfo/Asia/Shanghai \
${CLFS}/etc/localtime &&
cat > ${CLFS}/etc/ld.so.conf << "EOF" &&
# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib
# End /etc/ld.so.conf
EOF
cd .. &&
rm -rf glibc-2.6.1 glibc-build
}
cross_gcc_final()
{
tar xf gcc-4.2.1.tar.bz2 &&
cd gcc-4.2.1 &&
patch -Np1 -i ../gcc-4.2.1-posix-1.patch &&
patch -Np1 -i ../gcc-4.2.1-cross_search_paths-1.patch &&
mkdir -v ../gcc-build &&
cd ../gcc-build &&
../gcc-4.2.1/configure --prefix=${CLFS}/cross-tools \
--host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib \
--with-sysroot=${CLFS} --disable-nls --enable-shared \
--enable-languages=c,c++ --enable-__cxa_atexit \
--enable-c99 --enable-long-long --enable-threads=posix &&
make &&
make install &&
cd .. &&
rm -rf gcc-4.2.1 gcc-build
}
cross_file()
{
tar xf file-4.21.tar.gz &&
cd file-4.21
./configure --prefix=${CLFS}/cross-tools &&
make &&
make install &&
cd .. &&
rm -rf file-4.21
}
cross_groff()
{
tar xf groff-1.19.2.tar.gz &&
cd groff-1.19.2 &&
PAGE=letter ./configure --prefix=${CLFS}/cross-tools --without-x &&
make &&
make install &&
cd .. &&
rm -rf groff-1.19.2
}
cross_shadow()
{
tar xf shadow-4.0.18.1.tar.bz2 &&
cd shadow-4.0.18.1 &&
patch -Np1 -i ../shadow-4.0.18.1-fixes-1.patch &&
patch -Np1 -i ../shadow-4.0.18.1-sysroot_hacks-1.patch &&
echo "shadow_cv_passwd_dir=${CLFS}/bin" > config.cache &&
echo "ac_cv_func_lckpwdf=no" >> config.cache &&
./configure --prefix=${CLFS}/cross-tools --sbindir=${CLFS}/cross-tools/bin \
--sysconfdir=$CLFS/etc --disable-shared --without-libpam \
--without-audit --without-selinux --program-prefix=${CLFS_TARGET}- \
--cache-file=config.cache &&
cp config.h{,.orig} &&
sed "/PASSWD_PROGRAM/s/passwd/${CLFS_TARGET}-&/" config.h.orig > config.h &&
make &&
make install &&
cd .. &&
rm -rf shadow-4.0.18.1
}
cross_tool()
{
linux_headers &&
cross_binutils &&
cross_glibc_headers &&
cross_gcc_static &&
cross_glibc &&
cross_gcc_final &&
cross_file &&
cross_groff &&
cross_shadow
}
target_man_pages()
{
tar xf man-pages-2.64.tar.bz2 &&
cd man-pages-2.64 &&
make prefix=${CLFS}/usr install &&
cd .. &&
rm -rf man-pages-2.64
}
target_binutils()
{
tar xf binutils-2.18.tar.bz2 &&
cd binutils-2.18 &&
patch -Np1 -i ../binutils-2.18-posix-1.patch &&
mkdir -v ../binutils-build &&
cd ../binutils-build &&
AR=ar AS=as ../binutils-2.18/configure --prefix=/usr \
--build=${CLFS_HOST} --host=${CLFS_TARGET} \
--target=${CLFS_TARGET} --enable-shared &&
make configure-host &&
make tooldir=/usr &&
make DESTDIR=${CLFS} tooldir=/usr install &&
cd .. &&
rm -rf binutils-2.18 binutils-build
}
target_gcc()
{
tar xf gcc-4.2.1.tar.bz2 &&
cd gcc-4.2.1 &&
patch -Np1 -i ../gcc-4.2.1-posix-1.patch &&
cp libiberty/Makefile.in{,.orig} &&
sed 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in.orig > libiberty/Makefile.in &&
cp gcc/gccbug.in{,.orig} &&
sed 's/@have_mktemp_command@/yes/' gcc/gccbug.in.orig > gcc/gccbug.in &&
cp gcc/Makefile.in{,.orig} &&
sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in &&
mkdir -v ../gcc-build &&
cd ../gcc-build &&
../gcc-4.2.1/configure --prefix=/usr --libexecdir=/usr/lib \
--build=${CLFS_HOST} --host=${CLFS_TARGET} --target=${CLFS_TARGET} \
--enable-shared --enable-threads=posix --enable-__cxa_atexit \
--enable-c99 --enable-long-long --enable-clocale=gnu \
--enable-languages=c,c++ --disable-libstdcxx-pch &&
make &&
make DESTDIR=${CLFS} install &&
ln -sfv ../usr/bin/cpp ${CLFS}/lib &&
ln -sfv gcc ${CLFS}/usr/bin/cc &&
cd .. &&
rm -rf gcc-4.2.1 gcc-build
}
target_sed()
{
tar xf sed-4.1.5.tar.gz &&
cd sed-4.1.5 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--prefix=/usr --bindir=/bin --enable-html &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf sed-4.1.5
}
target_e2fsprogs()
{
tar xf e2fsprogs-1.40.2.tar.gz &&
cd e2fsprogs-1.40.2 &&
mkdir -v build &&
cd build &&
../configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--prefix=/usr --with-root-prefix="" \
--enable-elf-shlibs --disable-evms &&
make &&
make DESTDIR=${CLFS} install &&
make DESTDIR=${CLFS} install-libs &&
cd ../.. &&
rm -rf e2fsprogs-1.40.2
}
target_coreutils()
{
tar xf coreutils-6.9.tar.bz2 &&
cd coreutils-6.9 &&
patch -Np1 -i ../coreutils-6.9-suppress_uptime_kill_su-1.patch &&
patch -Np1 -i ../coreutils-6.9-uname-1.patch &&
sed -i "s/futimens/gl_&/" $(grep -lr futimens *) &&
touch man/uname.1 man/touch.1 &&
echo "fu_cv_sys_stat_statfs2_bsize=yes" > config.cache &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--prefix=/usr --cache-file=config.cache &&
make &&
make DESTDIR=${CLFS} install &&
mv -v ${CLFS}/usr/bin/{cat,chgrp,chmod,chown,cp,date} ${CLFS}/bin &&
mv -v ${CLFS}/usr/bin/{dd,df,echo,false,hostname,ln,ls,mkdir} ${CLFS}/bin &&
mv -v ${CLFS}/usr/bin/{mknod,mv,pwd,rm,rmdir,stty,true,uname} ${CLFS}/bin &&
mv -v ${CLFS}/usr/bin/chroot ${CLFS}/usr/sbin &&
mv -v ${CLFS}/usr/bin/{[,basename,head,install,nice} ${CLFS}/bin &&
mv -v ${CLFS}/usr/bin/{readlink,sleep,sync,test,touch} ${CLFS}/bin &&
ln -sfv ../../bin/install ${CLFS}/usr/bin &&
cd .. &&
rm -rf coreutils-6.9
}
target_iana_etc()
{
tar xf iana-etc-2.20.tar.bz2 &&
cd iana-etc-2.20 &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf iana-etc-2.20
}
target_m4()
{
tar xf m4-1.4.10.tar.bz2 &&
cd m4-1.4.10 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf m4-1.4.10
}
target_bison()
{
tar xf bison-2.3.tar.bz2 &&
cd bison-2.3 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr &&
echo '#define YYENABLE_NLS 1' >> config.h &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf bison-2.3
}
target_ncurses()
{
tar xf ncurses-5.6.tar.gz &&
cd ncurses-5.6 &&
patch -Np1 -i ../ncurses-5.6-bash_fix-1.patch &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--prefix=/usr --libdir=/lib --with-shared \
--without-debug --without-ada --with-build-cc=gcc &&
make &&
make DESTDIR=${CLFS} install &&
mv -v ${CLFS}/lib/lib{panel,menu,form,ncurses,ncurses++,curses}.a ${CLFS}/usr/lib &&
rm -v ${CLFS}/lib/lib{ncurses,menu,panel,form,curses}.so &&
ln -sfv ../../lib/libncurses.so.5 ${CLFS}/usr/lib/libcurses.so &&
ln -sfv ../../lib/libncurses.so.5 ${CLFS}/usr/lib/libncurses.so &&
ln -sfv ../../lib/libmenu.so.5 ${CLFS}/usr/lib/libmenu.so &&
ln -sfv ../../lib/libpanel.so.5 ${CLFS}/usr/lib/libpanel.so &&
ln -sfv ../../lib/libform.so.5 ${CLFS}/usr/lib/libform.so &&
chmod -v 755 ${CLFS}/lib/lib{panel,menu,form,ncurses}.so.5.6 &&
cd .. &&
rm -rf ncurses-5.6
}
target_procps()
{
tar xf procps-3.2.7.tar.gz &&
cd procps-3.2.7 &&
make CPPFLAGS= &&
make DESTDIR=${CLFS} lib64=lib ldconfig= install="install -D" install &&
cd .. &&
rm -rf procps-3.2.7
}
target_libtool()
{
tar xf libtool-1.5.24.tar.gz &&
cd libtool-1.5.24 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf libtool-1.5.24
}
target_perl()
{
tar xf perl-5.8.8.tar.bz2 &&
cd perl-5.8.8 &&
patch -Np1 -i ../perl-5.8.8-gcc42_fix-1.patch &&
patch -Np1 -i ../perl-5.8.8-cross_compile-5.patch &&
sed -i -e "s@pldlflags=''@pldlflags=\"\$cccdlflags\"@g" \
-e "s@static_target='static'@static_target='static_pic'@g" Makefile.SH &&
cd Cross &&
make ARCH=arm CROSS_COMPILE=${CLFS_TARGET}- &&
make DESTDIR=${CLFS} install &&
cd ../.. &&
rm -rf perl-5.8.8
}
target_readline()
{
tar xf readline-5.2.tar.gz &&
cd readline-5.2 &&
patch -Np1 -i ../readline-5.2-fixes-3.patch &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr --libdir=/lib &&
make SHLIB_XLDFLAGS=-lncurses &&
make DESTDIR=${CLFS} install &&
chmod -v 755 ${CLFS}/lib/lib{readline,history}.so* &&
mv -v ${CLFS}/lib/lib{readline,history}.a ${CLFS}/usr/lib &&
rm -v ${CLFS}/lib/lib{readline,history}.so &&
ln -sfv ../../lib/libreadline.so.5 ${CLFS}/usr/lib/libreadline.so &&
ln -sfv ../../lib/libhistory.so.5 ${CLFS}/usr/lib/libhistory.so &&
cd .. &&
rm -rf readline-5.2
}
target_zlib()
{
tar xf zlib-1.2.3.tar.bz2 &&
cd zlib-1.2.3 &&
patch -Np1 -i ../zlib-1.2.3-fPIC-1.patch &&
./configure --prefix=/usr --shared &&
make AR="${AR} rc" &&
make prefix=${CLFS}/usr install &&
mv -v ${CLFS}/usr/lib/libz.so.* ${CLFS}/lib &&
ln -sfv ../../lib/libz.so.1 ${CLFS}/usr/lib/libz.so &&
chmod -v 644 ${CLFS}/usr/lib/libz.a &&
cd .. &&
rm -rf zlib-1.2.3
}
target_autoconf()
{
tar xf autoconf-2.61.tar.bz2 &&
cd autoconf-2.61 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf autoconf-2.61
}
target_automake()
{
tar xf automake-1.10.tar.bz2 &&
cd automake-1.10 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf automake-1.10
}
target_bash()
{
tar xf bash-3.2.tar.gz &&
cd bash-3.2 &&
tar xf ../bash-doc-3.2.tar.gz &&
patch -Np1 -i ../bash-3.2-fixes-7.patch &&
echo "bash_cv_sys_named_pipes=yes" > config.cache &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--prefix=/usr --bindir=/bin --cache-file=config.cache \
--without-bash-malloc --with-installed-readline &&
make &&
make DESTDIR=${CLFS} htmldir=/usr/share/doc/bash-3.2 install &&
ln -sfv bash ${CLFS}/bin/sh &&
cd .. &&
rm -rf bash-3.2
}
target_bzip2()
{
tar xf bzip2-1.0.4.tar.gz &&
cd bzip2-1.0.4 &&
cp Makefile{,.orig} &&
sed -e "/^all:/s/ test//" Makefile.orig > Makefile &&
make -f Makefile-libbz2_so CC="${CC}" AR="${AR}" RANLIB="${RANLIB}" &&
make clean &&
make CC="${CC}" AR="${AR}" RANLIB="${RANLIB}" &&
make PREFIX=${CLFS}/usr install &&
cp -v bzip2-shared ${CLFS}/bin/bzip2 &&
cp -av libbz2.so* ${CLFS}/lib &&
ln -sfv ../../lib/libbz2.so.1.0 ${CLFS}/usr/lib/libbz2.so &&
rm -v ${CLFS}/usr/bin/{bunzip2,bzcat,bzip2} &&
ln -sfv bzip2 ${CLFS}/bin/bunzip2 &&
ln -sfv bzip2 ${CLFS}/bin/bzcat &&
cd .. &&
rm -rf bzip2-1.0.4
}
target_diffutils()
{
tar xf diffutils-2.8.7.tar.gz &&
cd diffutils-2.8.7 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf diffutils-2.8.7
}
target_file()
{
tar xf file-4.21.tar.gz
cd file-4.21
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf file-4.21
}
target_findutils()
{
tar xf findutils-4.2.31.tar.gz &&
cd findutils-4.2.31 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--prefix=/usr --libexecdir=/usr/lib/locate \
--localstatedir=/var/lib/locate &&
make &&
make DESTDIR=${CLFS} install &&
mv -v ${CLFS}/usr/bin/find ${CLFS}/bin &&
cp ${CLFS}/usr/bin/updatedb{,.orig} &&
sed 's@find:=${BINDIR}@find:=/bin@' ${CLFS}/usr/bin/updatedb.orig > ${CLFS}/usr/bin/updatedb &&
rm ${CLFS}/usr/bin/updatedb.orig &&
cd .. &&
rm -rf findutils-4.2.31
}
target_flex()
{
tar xf flex-2.5.33.tar.bz2 &&
cd flex-2.5.33 &&
cp -v Makefile.in{,.orig} &&
sed "s/-I@includedir@//g" Makefile.in.orig > Makefile.in &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr &&
make CC="${CC} -fPIC" libfl.a &&
make &&
make DESTDIR=${CLFS} install &&
ln -sfv libfl.a ${CLFS}/usr/lib/libl.a &&
cat > ${CLFS}/usr/bin/lex << "EOF" &&
#!/bin/sh
# Begin /usr/bin/lex
exec /usr/bin/flex -l "$@"
# End /usr/bin/lex
EOF
chmod -v 755 ${CLFS}/usr/bin/lex &&
cd .. &&
rm -rf flex-2.5.33
}
target_gawk()
{
tar xf gawk-3.1.5.tar.bz2 &&
cd gawk-3.1.5 &&
patch -Np1 -i ../gawk-3.1.5-segfault_fix-1.patch &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr --libexecdir=/usr/lib &&
cat >> config.h << "EOF" &&
#define HAVE_LANGINFO_CODESET 1
#define HAVE_LC_MESSAGES 1
EOF
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf gawk-3.1.5
}
target_gettext()
{
tar xf gettext-0.16.1.tar.gz &&
cd gettext-0.16.1 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf gettext-0.16.1
}
target_grep()
{
tar xf grep-2.5.3.tar.bz2 &&
cd grep-2.5.3 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--prefix=/usr --bindir=/bin --disable-perl-regexp &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf grep-2.5.3
}
target_groff()
{
tar xf groff-1.19.2.tar.gz &&
cd groff-1.19.2 &&
PAGE=letter ./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr &&
make TROFFBIN=troff GROFFBIN=groff GROFF_BIN_PATH= &&
make prefix=${CLFS}/usr install &&
ln -sfv soelim ${CLFS}/usr/bin/zsoelim &&
ln -sfv eqn ${CLFS}/usr/bin/geqn &&
ln -sfv tbl ${CLFS}/usr/bin/gtbl &&
cd .. &&
rm -rf groff-1.19.2
}
target_gzip()
{
tar xf gzip-1.3.12.tar.gz &&
cd gzip-1.3.12 &&
sed -i "s/futimens/gl_&/" $(grep -lr futimens *) &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr --bindir=/bin &&
make &&
make DESTDIR=${CLFS} install &&
mv ${CLFS}/bin/z{egrep,cmp,diff,fgrep,force,grep,less,more,new} ${CLFS}/usr/bin &&
cd .. &&
rm -rf gzip-1.3.12
}
target_inetutils()
{
tar xf inetutils-1.5.tar.gz &&
cd inetutils-1.5 &&
patch -Np1 -i ../inetutils-1.5-no_server_man_pages-2.patch &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--prefix=/usr --libexecdir=/usr/sbin --sysconfdir=/etc \
--localstatedir=/var --disable-logger --disable-syslogd \
--with-ncurses-include-dir="${CLFS}/usr/include" \
--disable-whois --disable-servers &&
make &&
make DESTDIR=${CLFS} SUIDMODE="-m 4775" install &&
mv -v ${CLFS}/usr/bin/ping{,6} ${CLFS}/bin &&
cd .. &&
rm -rf inetutils-1.5
}
target_iproute2()
{
tar xf iproute2-2.6.19-061214.tar.gz &&
cd iproute2-2.6.19-061214 &&
for dir in ip misc tc; do
cp ${dir}/Makefile{,.orig}
sed 's/0755 -s/0755/' ${dir}/Makefile.orig > ${dir}/Makefile
done &&
cp misc/Makefile{,.orig} &&
sed '/^TARGETS/s@arpd@@g' misc/Makefile.orig > misc/Makefile &&
make CC="${CC}" SBINDIR=/sbin &&
make DESTDIR=${CLFS} SBINDIR=/sbin install &&
cd .. &&
rm -rf iproute2-2.6.19-061214
}
target_kbd()
{
tar xf kbd-1.13.tar.bz2 &&
cd kbd-1.13 &&
cp configure{,.orig} &&
sed -e "s@&& ./conftest@@" configure.orig > configure &&
cp src/Makefile.in{,.orig} &&
sed -e "s/install -s/install/" src/Makefile.in.orig > src/Makefile.in &&
./configure --datadir=/lib/kbd &&
cp make_include{,.orig} &&
sed "/^ARCH/s/=.*/=arm/" make_include.orig > make_include &&
make CC="${CC}" &&
make DESTDIR=${CLFS} install &&
mv -v ${CLFS}/usr/bin/{kbd_mode,openvt,setfont} ${CLFS}/bin &&
cd .. &&
rm -rf kbd-1.13
}
target_less()
{
tar xf less-406.tar.gz &&
cd less-406 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr --sysconfdir=/etc &&
make &&
make prefix=${CLFS}/usr install &&
mv -v ${CLFS}/usr/bin/less ${CLFS}/bin &&
cd .. &&
rm -rf less-406
}
target_make()
{
tar xf make-3.81.tar.bz2 &&
cd make-3.81 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf make-3.81
}
target_man()
{
tar xf man-1.6e.tar.gz &&
cd man-1.6e &&
cp configure{,.orig} &&
sed -e "/PREPATH=/s@=.*@=\"$(eval echo ${CLFS}/{,usr/}{sbin,bin})\"@g" \
-e 's@-is@&R@g' configure.orig > configure &&
cp src/man.conf.in{,.orig} &&
sed -e 's@MANPATH./usr/man@#&@g' \
-e 's@MANPATH./usr/local/man@#&@g' \
src/man.conf.in.orig > src/man.conf.in &&
./configure -confdir=/etc &&
cp conf_script{,.orig} &&
sed "s@${CLFS}@@" conf_script.orig > conf_script &&
gcc src/makemsg.c -o src/makemsg &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf man-1.6e
}
target_mktemp()
{
tar xf mktemp-1.5.tar.gz &&
cd mktemp-1.5 &&
patch -Np1 -i ../mktemp-1.5-add_tempfile-3.patch &&
cp Makefile.in{,.orig} &&
sed -e 's/-s $(PROG)/$(PROG)/' Makefile.in.orig > Makefile.in &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr --with-libc &&
make &&
make prefix=${CLFS}/usr install &&
make prefix=${CLFS}/usr install-tempfile &&
cd .. &&
rm -rf mktemp-1.5
}
target_module_init_tools()
{
tar xf module-init-tools-3.2.2.tar.bz2 &&
cd module-init-tools-3.2.2 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/ --enable-zlib &&
make &&
make DESTDIR=${CLFS} INSTALL=install install &&
cd .. &&
rm -rf module-init-tools-3.2.2
}
target_patch()
{
tar xf patch-2.5.9.tar.gz &&
cd patch-2.5.9 &&
echo "ac_cv_path_ed_PROGRAM=ed" > config.cache &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr --cache-file=config.cache &&
make &&
make prefix=${CLFS}/usr install &&
cd .. &&
rm -rf patch-2.5.9
}
target_psmisc()
{
tar xf psmisc-22.5.tar.gz &&
cd psmisc-22.5 &&
echo "ac_cv_func_malloc_0_nonnull=yes" > config.cache &&
echo "ac_cv_func_realloc_0_nonnull=yes" >> config.cache &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--prefix=/usr --exec-prefix="" \
--cache-file=config.cache &&
make &&
make DESTDIR=${CLFS} install &&
mv -v ${CLFS}/bin/pstree* ${CLFS}/usr/bin &&
ln -sfv killall ${CLFS}/bin/pidof &&
cd .. &&
rm -rf psmisc-22.5
}
target_shadow()
{
tar xf shadow-4.0.18.1.tar.bz2 &&
cd shadow-4.0.18.1 &&
patch -Np1 -i ../shadow-4.0.18.1-fixes-1.patch &&
echo "ac_cv_func_setpgrp_void=yes" > config.cache &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--libdir=/lib --sysconfdir=/etc --enable-shared \
--without-libpam --without-audit --without-selinux \
--cache-file=config.cache &&
cp src/Makefile{,.orig} &&
sed 's/groups$(EXEEXT) //' src/Makefile.orig > src/Makefile &&
cp man/Makefile{,.orig} &&
sed -e '/groups1.xml/d' \
-e 's/groups.1//' man/Makefile.orig > man/Makefile &&
make &&
make DESTDIR=${CLFS} install &&
cp ${CLFS}/etc/login.defs login.defs.orig &&
sed -e's@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAB yes@' \
-e 's@/var/spool/mail@/var/mail@' \
login.defs.orig > ${CLFS}/etc/login.defs &&
mv -v ${CLFS}/usr/bin/passwd ${CLFS}/bin &&
mv -v ${CLFS}/lib/libshadow.*a ${CLFS}/usr/lib &&
rm -v ${CLFS}/lib/libshadow.so &&
ln -sfv ../../lib/libshadow.so.0 ${CLFS}/usr/lib/libshadow.so &&
${CLFS_TARGET}-pwconv &&
${CLFS_TARGET}-grpconv &&
${CLFS_TARGET}-passwd root &&
cd .. &&
rm -rf shadow-4.0.18.1
}
target_sysklogd()
{
tar xf sysklogd-1.5.tar.gz &&
cd sysklogd-1.5 &&
cp Makefile{,.orig} &&
sed -e 's/-o ${MAN_USER} -g ${MAN_GROUP}//' \
-e 's/500 -s/500/' Makefile.orig > Makefile &&
make CC="${CC}" &&
make prefix=${CLFS} install &&
cat > ${CLFS}/etc/syslog.conf << "EOF" &&
# Begin /etc/syslog.conf
auth,authpriv.* -/var/log/auth.log
*.*;auth,authpriv.none -/var/log/sys.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
*.info;mail.none;authpriv.none;cron.none -/var/log/messages
*.emerg *
# log the bootscript output:
local2.* -/var/log/boot.log
# End /etc/syslog.conf
EOF
cd .. &&
rm -rf sysklogd-1.5
}
target_sysvinit()
{
tar xf sysvinit-2.86.tar.gz &&
cd sysvinit-2.86 &&
cp src/init.c{,.orig} &&
sed 's@Sending processes@& started by init@g' \
src/init.c.orig > src/init.c &&
cp -v src/Makefile src/Makefile.orig &&
sed -e 's@/dev/initctl@$(ROOT)&@g' \
-e 's@\(mknod \)-m \([0-9]* \)\(.* \)p@\1\3p; chmod \2\3@g' \
-e '/^ifeq/s/$(ROOT)//' \
-e 's@/usr/lib@$(ROOT)&@' \
src/Makefile.orig > src/Makefile &&
make -C src clobber &&
make -C src ROOT=${CLFS} CC="${CC}" &&
make -C src ROOT=${CLFS} INSTALL="install" install &&
cat > ${CLFS}/etc/inittab << "EOF" &&
# Begin /etc/inittab
id:3:initdefault:
si::sysinit:/etc/rc.d/init.d/rc sysinit
l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
su:S016nce:/sbin/sulogin
1:2345:respawn:/sbin/agetty -I '\033(K' tty1 9600
2:2345:respawn:/sbin/agetty -I '\033(K' tty2 9600
3:2345:respawn:/sbin/agetty -I '\033(K' tty3 9600
4:2345:respawn:/sbin/agetty -I '\033(K' tty4 9600
5:2345:respawn:/sbin/agetty -I '\033(K' tty5 9600
6:2345:respawn:/sbin/agetty -I '\033(K' tty6 9600
# End /etc/inittab
EOF
cd .. &&
rm -rf sysvinit-2.86
}
target_tar()
{
tar xf tar-1.18.tar.bz2 &&
cd tar-1.18 &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--prefix=/usr --bindir=/bin --libexecdir=/usr/sbin &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf tar-1.18
}
target_texinfo()
{
tar xf texinfo-4.9.tar.bz2 &&
cd texinfo-4.9 &&
patch -Np1 -i ../texinfo-4.9-tempfile_fix-1.patch &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} --prefix=/usr &&
make &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf texinfo-4.9
}
target_udev()
{
tar xf udev-115.tar.bz2 &&
cd udev-115 &&
make CROSS_COMPILE="${CLFS_TARGET}-" CC="${CC}" LD="${CC}" \
EXTRAS="extras/ata_id extras/cdrom_id extras/collect \
extras/edd_id extras/firmware extras/floppy extras/path_id extras/rule_generator \
extras/scsi_id extras/usb_id extras/volume_id" udevdir=/dev &&
make DESTDIR="${CLFS}" \
EXTRAS="extras/ata_id extras/cdrom_id extras/collect \
extras/edd_id extras/firmware extras/floppy extras/path_id extras/rule_generator \
extras/scsi_id extras/usb_id extras/volume_id" udevdir=/dev install &&
install -v -m644 -D docs/writing_udev_rules/index.html ${CLFS}/usr/share/doc/udev-115/index.html &&
install -dv ${CLFS}/lib/firmware &&
cd .. &&
rm -rf udev-115
}
target_util_linux()
{
tar xf util-linux-ng-2.13.tar.bz2 &&
cd util-linux-ng-2.13 &&
cp hwclock/hwclock.c{,.orig} &&
sed -e 's@etc/adjtime@var/lib/hwclock/adjtime@g' \
hwclock/hwclock.c.orig > hwclock/hwclock.c &&
mkdir -pv ${CLFS}/var/lib/hwclock &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--enable-partx --disable-wall --enable-write \
--disable-makeinstall-chown &&
make &&
make DESTDIR=${CLFS} install &&
mv -v ${CLFS}/usr/bin/logger ${CLFS}/bin &&
cd .. &&
rm -rf util-linux-ng-2.13
}
target_vim()
{
tar xf vim-7.1.tar.bz2 &&
cd vim71 &&
patch -Np1 -i ../vim-7.1-cross_compile-1.patch &&
patch -Np1 -i ../vim-7.1-fixes-3.patch &&
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h &&
./configure --build=${CLFS_HOST} --host=${CLFS_TARGET} \
--prefix=/usr --enable-multibyte --enable-gui=no \
--disable-gtktest --disable-xim --with-features=normal \
--disable-gpm --without-x --disable-netbeans \
--with-tlib=ncurses &&
make &&
make DESTDIR=${CLFS} install &&
ln -sfv vim ${CLFS}/usr/bin/vi &&
ln -sfnv ../vim/vim71/doc ${CLFS}/usr/share/doc/vim-7.1 &&
cat > ${CLFS}/etc/vimrc << "EOF" &&
" Begin /etc/vimrc
set nocompatible
set backspace=2
syntax on
if (&term == "iterm") || (&term == "putty")
set background=dark
endif
" End /etc/vimrc
EOF
cd .. &&
rm -rf vim71
}
target_strip()
{
find ${CLFS}/{,usr/}{bin,lib,sbin} -type f -exec ${CLFS_TARGET}-strip --strip-debug '{}' ';'
}
make_target()
{
export CC="${CLFS_TARGET}-gcc"
export CXX="${CLFS_TARGET}-g++"
export AR="${CLFS_TARGET}-ar"
export AS="${CLFS_TARGET}-as"
export RANLIB="${CLFS_TARGET}-ranlib"
export LD="${CLFS_TARGET}-ld"
export STRIP="${CLFS_TARGET}-strip"
target_man_pages &&
target_binutils &&
target_gcc &&
target_sed &&
target_e2fsprogs &&
target_coreutils &&
target_iana_etc &&
target_m4 &&
target_bison &&
target_ncurses &&
target_procps &&
target_libtool &&
target_perl &&
target_readline &&
target_zlib &&
target_autoconf &&
target_automake &&
target_bash &&
target_bzip2 &&
target_diffutils &&
target_file &&
target_findutils &&
target_flex &&
target_gawk &&
target_gettext &&
target_grep &&
target_groff &&
target_gzip &&
target_inetutils &&
target_iproute2 &&
target_kbd &&
target_less &&
target_make &&
target_man &&
target_mktemp &&
target_module_init_tools &&
target_patch &&
target_psmisc &&
target_shadow &&
target_sysklogd &&
target_sysvinit &&
target_tar &&
target_texinfo &&
target_udev &&
target_util_linux &&
target_vim &&
target_strip
}
bootscripts_clfs_bootscripts()
{
tar xf bootscripts-cross-lfs-1.1-pre4.tar.bz2 &&
cd bootscripts-cross-lfs &&
make DESTDIR=${CLFS} install &&
cd .. &&
rm -rf bootscripts-cross-lfs
}
bootscripts_set_clock()
{
cat > ${CLFS}/etc/sysconfig/clock << "EOF"
# Begin /etc/sysconfig/clock
UTC=0
# End /etc/sysconfig/clock
EOF
}
bootscripts_linux_console()
{
cat >${CLFS}/etc/sysconfig/console <<"EOF"
KEYMAP="us"
FONT="lat1-16"
EOF
}
bootscripts_inputrc()
{
cat > ${CLFS}/etc/inputrc << "EOF"
# Begin /etc/inputrc
# Modified by Chris Lynn <roryo@roryo.dynup.net>
# Allow the command prompt to wrap to the next line
set horizontal-scroll-mode Off
# Enable 8bit input
set meta-flag On
set input-meta On
# Turns off 8th bit stripping
set convert-meta Off
# Keep the 8th bit for display
set output-meta On
# none, visible or audible
set bell-style none
# All of the following map the escape sequence of the
# value contained inside the 1st argument to the
# readline specific functions
"\eOd": backward-word
"\eOc": forward-word
# for linux console
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
# for xterm
"\eOH": beginning-of-line
"\eOF": end-of-line
# for Konsole
"\e[H": beginning-of-line
"\e[F": end-of-line
# End /etc/inputrc
EOF
}
bootscripts_bash_startup()
{
cat > ${CLFS}/etc/profile << "EOF"
# Begin /etc/profile
export LANG=en_US.UTF8
export INPUTRC=/etc/inputrc
# End /etc/profile
EOF
}
bootscripts_localnet()
{
echo "HOSTNAME=CLFS" > ${CLFS}/etc/sysconfig/network
}
bootscripts_hosts()
{
cat > ${CLFS}/etc/hosts << "EOF"
# Begin /etc/hosts
127.0.0.1 localhost
# End /etc/hosts
EOF
}
bootscripts_network()
{
mkdir -v ${CLFS}/etc/sysconfig/network-devices/ifconfig.eth0 &&
cat > ${CLFS}/etc/sysconfig/network-devices/ifconfig.eth0/ipv4 << "EOF" &&
ONBOOT=yes
SERVICE=ipv4-static
IP=[Your IP]
GATEWAY=[Your gateway]
PREFIX=[Your prefix]
BROADCAST=[Your broadcast address]
EOF
cat > ${CLFS}/etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf
#domain [Your Domain Name]
#nameserver [IP address of your primary nameserver]
#nameserver [IP address of your secondary nameserver]
# End /etc/resolv.conf
EOF
}
setup_bootscripts()
{
bootscripts_clfs_bootscripts &&
bootscripts_set_clock &&
bootscripts_linux_console &&
bootscripts_inputrc &&
bootscripts_bash_startup &&
bootscripts_localnet &&
bootscripts_hosts &&
bootscripts_network
}
bootable_fstab()
{
cat > ${CLFS}/etc/fstab << "EOF"
# Begin /etc/fstab
# file system mount-point type options dump fsck
# order
/dev/ROOT / ROOT_TYPE defaults 1 1
/dev/SWAP swap swap pri=1 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
shm /dev/shm tmpfs defaults 0 0
# End /etc/fstab
EOF
}
linux_kernel()
{
tar xf linux-2.6.22.tar.bz2 &&
cd linux-2.6.22 &&
make mrproper &&
cp arch/arm/configs/s3c2410_defconfig .config &&
make ARCH=arm CROSS_COMPILE=${CLFS_TARGET}- menuconfig &&
make ARCH=arm CROSS_COMPILE=${CLFS_TARGET}- &&
make ARCH=arm CROSS_COMPILE=${CLFS_TARGET}- INSTALL_MOD_PATH=${CLFS} modules_install &&
cp vmlinux ${CLFS}/boot/clfskernel-2.6.22 &&
cp System.map ${CLFS}/boot/System.map-2.6.22 &&
cp .config ${CLFS}/boot/config-2.6.22
}
change_ownership()
{
echo 'Give root password to change ownership.'
su -c " chown -Rv 0:0 ${CLFS} &&
chgrp -v 13 ${CLFS}/var/run/utmp ${CLFS}/var/log/lastlog &&
chgrp -v 4 ${CLFS}/usr/bin/write &&
chmod g+s ${CLFS}/usr/bin/write &&
mknod -m 0666 ${CLFS}/dev/null c 1 3 &&
mknod -m 0600 ${CLFS}/dev/console c 5 1"
}
make_bootable()
{
bootable_fstab &&
linux_kernel &&
change_ownership
}
clfs()
{
create_dirs_files &&
cross_tool &&
make_target &&
setup_bootscripts &&
make_bootable
}
clfs
################################################# |
|