分类: LINUX
2008-06-24 16:58:43
NEW_OS=x86_64-linux-gnu #自定义,用于工作目录、用户名 NEW_OS_ARCH=x86_64 #处理器架构,x86系统请修改为i386 NEW_OS_TARGET=x86_64-unknown-linux-gnu #目标系统类型,x86系统请根据自己需要修改,如i686-pc-linux-gnu NEW_OS_HOST=$(echo ${MACHTYPE} | sed -e "s@$(echo ${MACHTYPE} | cut -d- -f2)@cross@") NEW_OS_MARCH=$(echo ${NEW_OS_TARGET} | cut -d- -f1) NEW_OS_DIR=/${NEW_OS} SOURCE=${NEW_OS_DIR}/source TOOLS=${NEW_OS_DIR}/tools PACKAGE=${NEW_OS_DIR}/package MARK=${NEW_OS_DIR}/mark ROOTFS=${NEW_OS_DIR}/rootfs FAKEROOT=${NEW_OS_DIR}/fakeroot NEW_OS_NO_LIB64_DIR=yes NEW_OS_USER=${NEW_OS} NEW_OS_ID=1000
mkdir -pv ${NEW_OS_DIR}/bin \ ${SOURCE} \ ${TOOLS} \ ${PACKAGE} \ ${MARK} \ ${ROOTFS} \ ${FAKEROOT} touch ${NEW_OS_DIR}/${NEW_OS_TARGET} cp -a ${NEW_OS_SCRIPT_DIR} ${NEW_OS_DIR}/bin groupadd -o -g ${NEW_OS_ID} ${NEW_OS_USER} useradd -o -d ${NEW_OS_DIR} -u ${NEW_OS_ID} -g ${NEW_OS_ID} -s /bin/bash ${NEW_OS_USER} passwd ${NEW_OS_USER} cat > ${NEW_OS_DIR}/.bash_profile << eof exec env -i HOME=\${HOME} TERM=\${TERM} PS1='\u@\h:\w\\$ ' /bin/bash eof cat > ${NEW_OS_DIR}/.bashrc << eof set +h umask 022 export LC_ALL=POSIX export PATH=${TOOLS}/bin:/usr/bin:/bin eof echo "export NEW_OS=${NEW_OS}" >> ${NEW_OS_DIR}/.bashrc echo "export NEW_OS_ARCH=${NEW_OS_ARCH}" >> ${NEW_OS_DIR}/.bashrc echo "export NEW_OS_TARGET=${NEW_OS_TARGET}" >> ${NEW_OS_DIR}/.bashrc echo "export NEW_OS_HOST=${NEW_OS_HOST}" >> ${NEW_OS_DIR}/.bashrc echo "export NEW_OS_MARCH=${NEW_OS_MARCH}" >> ${NEW_OS_DIR}/.bashrc echo "export NEW_OS_DIR=${NEW_OS_DIR}" >> ${NEW_OS_DIR}/.bashrc echo "export SOURCE=${SOURCE}" >> ${NEW_OS_DIR}/.bashrc echo "export TOOLS=${TOOLS}" >> ${NEW_OS_DIR}/.bashrc echo "export PACKAGE=${PACKAGE}" >> ${NEW_OS_DIR}/.bashrc echo "export MARK=${MARK}" >> ${NEW_OS_DIR}/.bashrc echo "export ROOTFS=${ROOTFS}" >> ${NEW_OS_DIR}/.bashrc echo "export FAKEROOT=${FAKEROOT}" >> ${NEW_OS_DIR}/.bashrc echo "unset CFLAGS" >> ${NEW_OS_DIR}/.bashrc echo "unset CXXFLAGS" >> ${NEW_OS_DIR}/.bashrc chown -R ${NEW_OS_ID}.${NEW_OS_ID} ${NEW_OS_DIR}
mkdir -pv ${ROOTFS}/{bin,boot,dev,etc/{ramdisk,opt},home,initrd,lib,media,mnt,opt,proc,root,sbin,srv,sys,tmp,usr,var} mkdir -pv ${ROOTFS}/usr{,/local}/{bin,include,lib,sbin,share,src} mkdir -pv ${ROOTFS}/usr{,/local}/share/{doc,info,locale,man,misc,terminfo,zoneinfo} ln -sfv share/{doc,info,man} ${ROOTFS}/usr ln -sfv share/{doc,info,man} ${ROOTFS}/usr/local mkdir -pv ${ROOTFS}/usr{,/local}/share/man/man{1,2,3,4,5,6,7,8} mkdir -pv ${ROOTFS}/var/{cache,lib/{misc,locate},local,lock,log,mail,opt,run,spool,tmp} chmod 0750 ${ROOTFS}/root chmod 1777 ${ROOTFS}/{,var/}tmp
./configure --prefix=/usr \ --enable-cxx \ --enable-mpbsd make make install
./configure --prefix=/usr \ --enable-shared make make install
HOMEPAGE="" SOURCE_URL="pub/linux/kernel/v2.6/linux-2.6.25.7.tar.bz2 pub/linux/kernel/v2.6/linux-2.6.25.7.tar.bz2.sign" SOURCE_MD5="" PACKAGE_NAME=linux-header PACKAGE_VERSION=2.6.25.7 SOURCE_DIR=${SOURCE}/linux-${PACKAGE_VERSION} BUILD_DIR= source_tree() { cd ${SOURCE} tar -xvf linux-${PACKAGE_VERSION}.tar.bz2 cd ${SOURCE_DIR} make mrproper } source_config() { echo "source_config" } source_build() { cd ${SOURCE_DIR} make ARCH=${NEW_OS_ARCH} INSTALL_HDR_PATH=header_dir headers_install mkdir -pv ${ROOTFS}/usr cp -av header_dir/include ${ROOTFS}/usr/ }
HOMEPAGE="" SOURCE_URL=" .sig .sig" SOURCE_MD5="" SOURCE_DIR=${SOURCE}/glibc-${PACKAGE_VERSION} BUILD_DIR=${SOURCE}/glibc-build source_tree() { cd ${SOURCE} tar -xvf glibc-${PACKAGE_VERSION}.tar.bz2 tar -xvf glibc-ports-${PACKAGE_VERSION}.tar.bz2 mv -v glibc-ports-${PACKAGE_VERSION} ${SOURCE_DIR}/ports cd ${SOURCE_DIR} sed -i -e "s@/etc/mtab@/etc/ramdisk/mtab@" sysdeps/unix/sysv/linux/paths.h mkdir -pv ${BUILD_DIR} } source_config() { cd ${BUILD_DIR} echo "libc_cv_forced_unwind=yes" >> config.cache echo "libc_cv_c_cleanup=yes" >> config.cache echo "libc_cv_${NEW_OS_ARCH}_tls=yes" >> config.cache if [ "${NEW_OS_ARCH}" = "i386" ]; then echo "libc_cv_386_tls=yes" >> config.cache echo "CFLAGS+=-march=${NEW_OS_MARCH}" >> configparms fi echo "install_root=${ROOTFS}" >> configparms echo "slibdir=/lib" >> configparms CC=gcc ${SOURCE_DIR}/configure --prefix=/usr \ --host=${NEW_OS_TARGET} \ --build=${NEW_OS_HOST} \ --with-headers=${ROOTFS}/usr/include \ --cache-file=config.cache } source_build() { cd ${BUILD_DIR} make install-headers mkdir -pv ${ROOTFS}/usr/include/bits cp -v bits/stdio_lim.h ${ROOTFS}/usr/include/bits/ mkdir -pv ${ROOTFS}/usr/include/gnu touch ${ROOTFS}/usr/include/gnu/stubs{,-32,-64}.h }
HOMEPAGE="" SOURCE_URL=" .sig" SOURCE_MD5="" SOURCE_DIR=${SOURCE}/${PACKAGE_NAME}-${PACKAGE_VERSION} BUILD_DIR=${SOURCE}/${PACKAGE_NAME}-build source_tree() { cd ${SOURCE} tar -xvf ${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.bz2 cd ${SOURCE_DIR} #posix sed -i -e "s@tail +16c@tail -c +16@g" $(grep -lr "tail +16c" *) sed -i -e "s@tail +140@tail -n +140@g" $(grep -lr "tail +140" *) sed -i -e "s@head -1@head -n 1@g" $(grep -lr "head -1" *) #support texinfo 4.11 sed -i -e "s@4\\\.\[4-9\]@&|4\\\.11@" configure #--disable-multilib /lib64->/lib if [ "${NEW_OS_NO_LIB64_DIR}" = "yes" ]; then sed -i -e "s@/lib64/ld@/lib/ld@g" ld/configure.host fi mkdir -pv ${BUILD_DIR} } source_config() { cd ${BUILD_DIR} if [ "${NEW_OS_ARCH}" = "x86_64" ]; then CONFPARMS=--enable-64-bit-bfd else CONFPARMS= fi AR=ar AS=as ${SOURCE_DIR}/configure --prefix=${TOOLS} \ --build=${NEW_OS_HOST} \ --host=${NEW_OS_HOST} \ --target=${NEW_OS_TARGET} \ --with-sysroot=${ROOTFS} \ --disable-nls \ --enable-shared \ --disable-multilib ${CONFPARMS} } source_build() { cd ${BUILD_DIR} make configure-host make make install mkdir -pv ${ROOTFS}/usr/include cp -v ${SOURCE_DIR}/include/libiberty.h ${ROOTFS}/usr/include/ }
HOMEPAGE="" SOURCE_URL=" .sig" SOURCE_MD5="" SOURCE_DIR=${SOURCE}/gcc-${PACKAGE_VERSION} BUILD_DIR=${SOURCE}/gcc-build source_tree() { cd ${SOURCE} tar -xvf gcc-${PACKAGE_VERSION}.tar.bz2 cd ${SOURCE_DIR} #posix sed -i -e "s@tail -1@tail -n 1@g" $(grep -lr "tail -1" *) sed -i -e "s@tail -3@tail -n 3@g" $(grep -lr "tail -3" *) sed -i -e "s@head -1@head -n 1@g" $(grep -lr "head -1" *) #--disable-multilib /lib64->/lib if [ "${NEW_OS_NO_LIB64_DIR}" = "yes" ]; then sed -i -e "s@/lib64/ld@/lib/ld@g" gcc/config/*/linux64.h sed -i -e "s@../lib32 ../lib ../lib64@../lib32 ../lib ../lib@g" \ -e "s@../lib64 ../lib@../lib ../lib@g" \ -e "s@../lib64@../lib@g" gcc/config/*/t-linux64 fi #cross hacking sed -i -e "s@/usr/libexec/gcc/@@g" -e "s@/usr/lib/gcc/@@g" gcc/gcc.c #cross hacking sed -i 's@$(GCC_FOR_TARGET) -dumpspecs@echo -n@' gcc/Makefile.in mkdir -pv ${BUILD_DIR} } source_config() { cd ${BUILD_DIR} AR=ar \ CC_FOR_TARGET=${NEW_OS_TARGET}-gcc \ ${SOURCE_DIR}/configure --prefix=${TOOLS} \ --build=${NEW_OS_HOST} \ --host=${NEW_OS_HOST} \ --target=${NEW_OS_TARGET} \ --with-sysroot=${ROOTFS} \ --disable-nls \ --disable-shared \ --enable-languages=c \ --disable-multilib } source_build() { cd ${BUILD_DIR} make all-gcc make install-gcc make all-target-libgcc make install-target-libgcc }
HOMEPAGE="" SOURCE_URL=" .sig .sig" SOURCE_MD5="" SOURCE_DIR=${SOURCE}/${PACKAGE_NAME}-${PACKAGE_VERSION} BUILD_DIR=${SOURCE}/${PACKAGE_NAME}-build source_tree() { cd ${SOURCE} tar -xvf ${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.bz2 tar -xvf ${PACKAGE_NAME}-ports-${PACKAGE_VERSION}.tar.bz2 mv -v ${PACKAGE_NAME}-ports-${PACKAGE_VERSION} ${SOURCE_DIR}/ports cd ${SOURCE_DIR} sed -i -e "s@/etc/mtab@/etc/ramdisk/mtab@" sysdeps/unix/sysv/linux/paths.h #libgcc_eh cross hacking sed -i -e "s@-lgcc_eh@@g" Makeconfig #for gcc-4.3.1 sed -i 's@-nostdinc -isystem $ccheaders@& -isystem $ccheaders-fixed@' configure mkdir -pv ${BUILD_DIR} } source_config() { cd ${BUILD_DIR} echo "libc_cv_forced_unwind=yes" >> config.cache echo "libc_cv_c_cleanup=yes" >> config.cache echo "libc_cv_${NEW_OS_ARCH}_tls=yes" >> config.cache if [ "${NEW_OS_ARCH}" = "i386" ]; then echo "libc_cv_386_tls=yes" >> config.cache echo "CFLAGS+=-march=${NEW_OS_MARCH}" >> configparms fi echo "install_root=${ROOTFS}" >> configparms echo "slibdir=/lib" >> configparms BUILD_CC=gcc \ CC=${NEW_OS_TARGET}-gcc \ AR=${NEW_OS_TARGET}-ar \ RANLIB=${NEW_OS_TARGET}-ranlib \ CFLAGS="-mtune=generic -g -O2" \ ${SOURCE_DIR}/configure --prefix=/usr \ --build=${NEW_OS_HOST} \ --host=${NEW_OS_TARGET} \ --target=${NEW_OS_TARGET} \ --with-headers=${ROOTFS}/usr/include \ --libdir=/usr/lib \ --libexecdir=/usr/lib/glibc \ --disable-profile \ --enable-add-ons \ --with-tls \ --enable-kernel=2.6.0 \ --with-__thread \ --with-binutils=${TOOLS}/bin \ --cache-file=config.cache } source_build() { cd ${BUILD_DIR} make #--disable-multilib /lib64->/lib if [ "${NEW_OS_NO_LIB64_DIR}" = "yes" ]; then sed -i -e "s@/lib64/ld@/lib/ld@" elf/ldd fi make install mkdir -pv ${ROOTFS}/etc/ramdisk ln -sfv ramdisk/mtab ${ROOTFS}/etc/mtab ln -sfv ramdisk/resolv.conf ${ROOTFS}/etc/resolv.conf mkdir -pv ${ROOTFS}/lib ln -sfv libcrypt-2.7.so ${ROOTFS}/lib/libcrypt.so cat > ${ROOTFS}/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 cat > ${ROOTFS}/etc/ld.so.conf << eof #begin /etc/ld.so.conf #end /etc/ld.so.conf eof }
HOMEPAGE="" SOURCE_URL=" .sig" SOURCE_MD5="" SOURCE_DIR=${SOURCE}/${PACKAGE_NAME}-${PACKAGE_VERSION} BUILD_DIR=${SOURCE}/${PACKAGE_NAME}-build source_tree() { cd ${SOURCE} tar -xvf ${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.bz2 cd ${SOURCE_DIR} #posix sed -i -e "s@tail -1@tail -n 1@g" $(grep -lr "tail -1" *) sed -i -e "s@tail -3@tail -n 3@g" $(grep -lr "tail -3" *) sed -i -e "s@head -1@head -n 1@g" $(grep -lr "head -1" *) #--disable-multilib /lib64->/lib if [ "${NEW_OS_NO_LIB64_DIR}" = "yes" ]; then sed -i -e "s@/lib64/ld@/lib/ld@g" gcc/config/*/linux64.h sed -i -e "s@../lib32 ../lib ../lib64@../lib32 ../lib ../lib@g" \ -e "s@../lib64 ../lib@../lib ../lib@g" \ -e "s@../lib64@../lib@g" gcc/config/*/t-linux64 fi #cross hacking sed -i -e "s@/usr/libexec/gcc/@@g" -e "s@/usr/lib/gcc/@@g" gcc/gcc.c mkdir -pv ${BUILD_DIR} } source_config() { cd ${BUILD_DIR} AR=ar \ CC_FOR_TARGET=${NEW_OS_TARGET}-gcc \ CXX_FOR_TARGET=${NEW_OS_TARGET}-g++ \ ${SOURCE_DIR}/configure --prefix=${TOOLS} \ --build=${NEW_OS_HOST} \ --host=${NEW_OS_HOST} \ --target=${NEW_OS_TARGET} \ --with-sysroot=${ROOTFS} \ --disable-nls \ --enable-shared \ --enable-languages=c,c++ \ --enable-__cxa_atexit \ --enable-c99 \ --enable-long-long \ --enable-threads=posix \ --disable-multilib } source_build() { cd ${BUILD_DIR} make make install }