Chinaunix首页 | 论坛 | 博客
  • 博客访问: 22254
  • 博文数量: 4
  • 博客积分: 110
  • 博客等级: 入伍新兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-08 21:43
文章分类

全部博文(4)

文章存档

2011年(4)

我的朋友

分类: LINUX

2011-11-18 03:19:34

[jiabao]原创,转贴请注明出处。有误的地方,一定要指出:

邮箱: 

微博:

 

接上一篇:linux-x86_64-multilib 完全编译定制,呕心呖血,更个性,更纯净!

    http://blog.chinaunix.net/space.php?uid=26421196&do=blog&id=3019578

 


--------  定制自已需要的Linux [多库]基本系统组件 ------

  1. 制作多库系统,多数是参考CLFS,但本文不像CLFS文档那样,没有使用依赖宿主的交叉编译工具,完全是用最基础脱离宿主的tool,所有的东西都是在目标系统上自给自足生产的,思路很明确。

  2. 有了核心的多库编译器,剩下的你可以参考 Cross-Compiled Linux From Scratch [CLFS] 的文档来完成了,不过[CLFS]她选用的软件依然很旧,我们选用的是目前为止网上公布的最新版本,编译方式和最新的PATCH也有差异,也添加了新的元素。但是CLFS也会经常更新的,你可以关注CLFS的最新文档,在线阅读地址:

   稳定版:http://blog.chinaunix.net/space.php?uid=26421196&do=blog&id=3019578

   开发版:   

     3. 当然,我有自已的一套方法,尽量避免patch而适应软件们默认的状态,而且封装打包了每一个软件。但是有些软件是不好封装的,一旦把64位库安装到了32位库目录,后果有点小麻烦。对于多数软件 您也可以在make install之前,使用make DESTDIR=$PKGDIR install 来提前分析。最好的方法还是查看configure脚本和调查生成的Makefile.

  4. 包不是必须的,作用是制作发行版,或是为系统排错做分析依据,或是系统的完美备份,但是应该同时把.configure配置文件保留。

  5. 下面的都是系统最依赖的组件,bin目录应该安装在/bin,lib应该在/lib64,其它的附属组件应该安装在/usr/{subdir},以便在系统启动时未挂载/usr目录时,系统应该仍然完好可启动,所以做了一些必要的配置。

 

 

---man-page-3.35---

  1. make install
  2. make DESTDIR=/pkg/man-page-3.35-x86_64 install

-- sed-4.2.1 --

  1. ./configure --prefix=/usr --bindir=/bin \
  2.     --htmldir=/usr/share/doc/sed-4.2.1

安装,封包:

  1. make && make html
  2. make DESTDIR=/pkg/sed-4.2.1-x86_64 install
  3. make install
  4. make DESTDIR=/pkg/sed-4.2.1-x86_64 -C doc install-html
  5. make -C doc install-html

--bzip2-1.0.6--

  1. PKGDIR=/pkg/bzip2-1.0.6

32位库:

  1. make -f Makefile-libbz2_so CC="gcc -m32" CXX="g++ -m32"
  2. make clean
  3. make CC="gcc -m32" CXX="g++ -m32" libbz2.a

  4. mkdir -pv $PKGDIR-i686/{lib,usr/lib}
  5. cp -v libbz2.a $PKGDIR-i686/usr/lib
  6. cp -av libbz2.so* $PKGDIR-i686/lib
  7. ln -sv ../../lib/libbz2.so.1.0 $PKGDIR-i686/usr/lib/libbz2.so

64位:
先修正他创建的符号链接:

  1. sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile

他的文档不按常规目录安装,修改Makefile:

  1. sed -i 's@(PREFIX)/man@(PREFIX)/share/man@g' Makefile

修改目标库目录为(PREFIX)/lib64

  1. sed -i 's@(PREFIX)/lib@(PREFIX)/lib64@g' Makefile

不要用默认的Makefile,告诉使其编译libbz2.so:

  1. make -f Makefile-libbz2_so
  2. make clean
  3. make
  4. make PREFIX=$PKGDIR-x86_64/usr install

添加文档:

  1. mkdir -pv $PKGDIR-x86_64/{bin,lib64}
  2. mkdir -pv $PKGDIR-x86_64/usr/{lib64,share/doc/bzip2-1.0.6}
  3. cp -v README LICENSE README.* CHANGES $PKGDIR-x86_64/usr/share/doc/bzip2-1.0.6/

配置:

  1. rm -v $PKGDIR-x86_64/usr/bin/{bunzip2,bzcat,bzip2}
  2. cp -v bzip2-shared $PKGDIR-x86_64/bin/bzip2
  3. cp -av libbz2.so* $PKGDIR-x86_64/lib64
  4. ln -sv ../../lib64/libbz2.so.1.0 $PKGDIR-x86_64/usr/lib64/libbz2.so
  5. ln -sv bzip2 $PKGDIR-x86_64/bin/bunzip2
  6. ln -sv bzip2 $PKGDIR-x86_64/bin/bzcat

安装:

  1. cp -av $PKGDIR-i686/* /
  2. cp -av $PKGDIR-x86_64/* /


--- pcre-8.12 ---

  1. PKGDIR=/pkg/pcre-8.12

32-lib:

  1. CC="gcc -m32" CXX="g++ -m32" \
  2.  ./configure --prefix=/usr \
  3.  --docdir=/usr/share/doc/pcre-8.12 \
  4.  --enable-utf8 --enable-unicode-properties \
  5.  --enable-pcregrep-libz --enable-pcregrep-libbz2
  6. make
  7. make DESTDIR=$PKGDIR-i686 install
  8. mkdir -v $PKGDIR-i686/lib
  9. mv -v $PKGDIR-i686/usr/lib/libpcre.so.* $PKGDIR-i686/lib/
  10. ln -v -sf ../../lib/libpcre.so.0 $PKGDIR-i686/usr/lib/libpcre.so

64-bit:

  1. ./configure --prefix=/usr --libdir=/usr/lib64 \
  2.  --docdir=/usr/share/doc/pcre-8.12 \
  3.  --enable-utf8 \
  4.  --enable-unicode-properties \
  5.  --enable-pcregrep-libz \
  6.  --enable-pcregrep-libbz2

配置及制作包:

  1. make DESTDIR=$PKGDIR-x86_64 install
  2. mkdir -v $PKGDIR-x86_64/lib64
  3. mv -v $PKGDIR-x86_64/usr/lib64/libpcre.so.* $PKGDIR-x86_64/lib64/
  4. ln -v -sf ../../lib64/libpcre.so.0 $PKGDIR-x86_64/usr/lib64/libpcre.so

配置multiarch_wrapper:

  1. mv -v $PKGDIR-i686/usr/bin/pcre-config{,-32}
  2. mv -v $PKGDIR-x86_64/usr/bin/pcre-config{,-64}
  3. ln -vs multiarch_wrapper $PKGDIR-x86_64/usr/bin/pcre-config

安装:

  1. cp -av $PKGDIR-i686/* /
  2. cp -av $PKGDIR-x86_64/* /


--- glib-2.28.8 ---

  1. [32-bit:]
  2. PCRE_LIBS="-L/usr/lib -lpcre" PCRE_CFLAGS="-I/usr/include" \
  3.   CC="gcc -m32" CXX="g++ -m32" \
  4.     ./configure --prefix=/usr --sysconfdir=/etc --with-pcre=system
  5. make
  6. make DESTDIR=/pkg/glib-2.28.8-i686 install
  7. make install

  8. [64-bit:]
  9. PCRE_LIBS="-L/usr/lib64 -lpcre" PCRE_CFLAGS="-I/usr/include" \
  10.  ./configure --prefix=/usr --sysconfdir=/etc \
  11.  --with-pcre=system --libdir=/usr/lib64
  12. make
  13. make DESTDIR=/pkg/glib-2.28.8-x86_64 install
  14. make install


------pkg-config-0.26:-------

  1. GLIB_LIBS="-L/usr/lib64 -lglib-2.0" \
  2.   GLIB_CFLAGS="-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include" \
  3.     ./configure --prefix=/usr

  4. make
  5. make DESTDIR=/pkg/pkg-config-0.26-x86_64 install
  6. make install


----------ncurses-5.9:-------------

  1. PKGDIR=/pkg/ncurses-5.9

32-bit:

  1. CC="gcc -m32" CXX="g++ -m32" \
  2. ./configure --prefix=/usr \
  3.  --mandir=/usr/share/man \
  4.  --with-shared --without-debug --enable-widec
  5. make && make install DESTDIR=$PKGDIR-i686

下面的配置非常重要,使此版本同时兼容4种版本的curses:

  1. mkdir -v $PKGDIR-i686/lib
  2. mv -v $PKGDIR-i686/usr/lib/libncursesw.so.5* $PKGDIR-i686/lib
  3. ln -sfv ../../lib/libncursesw.so.5 $PKGDIR-i686/usr/lib/libncursesw.so


  4. for lib in ncurses form panel menu ; do \
  5.     rm -vf $PKGDIR-i686/usr/lib/lib${lib}.so ; \
  6.     echo "INPUT(-l${lib}w)" > $PKGDIR-i686/usr/lib/lib${lib}.so ; \
  7.     ln -sfv lib${lib}w.a $PKGDIR-i686/usr/lib/lib${lib}.a ; \
  8. done
  9. ln -sfv libncurses++w.a $PKGDIR-i686/usr/lib/libncurses++.a

上述意思是:
  创建/usr/lib/lib{ncurses,form,panel,menu}.so ,使其指向各自的lib*w.so版本
  创建/usr/lib/lib{...}.a,使其指向lib*w.a 版本:

  1. rm -vf $PKGDIR-i686/usr/lib/libcursesw.so
  2. echo "INPUT(-lncursesw)" > $PKGDIR-i686/usr/lib/libcursesw.so
  3. ln -sfv libncurses.so $PKGDIR-i686/usr/lib/libcurses.so
  4. ln -sfv libncursesw.a $PKGDIR-i686/usr/lib/libcursesw.a
  5. ln -sfv libncurses.a $PKGDIR-i686/usr/lib/libcurses.a

上述意思是:
  创建不带n的curses,cursesw,curses.a 指向带n的版本.

上述方法是用宽字符库代替非宽字符库,而且使用中文的话,必须设置兼容,他的重要性在后面有个插曲.但是如果你有一些不是你编译的程序,必须要链接到非no-widec版本的库时,就需要创建no-widec的库:

  1. make distclean
  2. CC="gcc -m32" CXX="g++ -m32" \
  3.     ./configure --prefix=/usr --with-shared --without-debug

  4. make sources libs
  5. cp -av lib/lib*.so.5* $PKGDIR-i686/usr/lib/


64位:与32位一样,只是库目录改为/lib64而已

  1. ./configure --prefix=/usr \
  2.  --libdir=/usr/lib64 --mandir=/usr/share/man \
  3.  --with-shared --without-debug --enable-widec
  4. make && make install DESTDIR=$PKGDIR-x86_64

  5. mkdir -v $PKGDIR-x86_64/lib64
  6. mv -v $PKGDIR-x86_64/usr/lib64/libncursesw.so.5* $PKGDIR-x86_64/lib64
  7. ln -sfv ../../lib64/libncursesw.so.5 $PKGDIR-x86_64/usr/lib64/libncursesw.so

  8. for lib in ncurses form panel menu ; do \
  9.     rm -vf $PKGDIR-x86_64/usr/lib64/lib${lib}.so ; \
  10.     echo "INPUT(-l${lib}w)" > $PKGDIR-x86_64/usr/lib64/lib${lib}.so ; \
  11.     ln -sfv lib${lib}w.a $PKGDIR-x86_64/usr/lib64/lib${lib}.a ; \
  12. done
  13. ln -sfv libncurses++w.a $PKGDIR-x86_64/usr/lib64/libncurses++.a

  14. rm -vf $PKGDIR-x86_64/usr/lib64/libcursesw.so
  15. echo "INPUT(-lncursesw)" > $PKGDIR-x86_64/usr/lib64/libcursesw.so
  16. ln -sfv libncurses.so $PKGDIR-x86_64/usr/lib64/libcurses.so
  17. ln -sfv libncursesw.a $PKGDIR-x86_64/usr/lib64/libcursesw.a
  18. ln -sfv libncurses.a $PKGDIR-x86_64/usr/lib64/libcurses.a

配置文档:

  1. mkdir -pv $PKGDIR-x86_64/usr/share/doc/ncurses-5.9
  2. cp -v -R doc/* $PKGDIR-x86_64/usr/share/doc/ncurses-5.9

创建no-widec库:

  1. make distclean
  2. ./configure --prefix=/usr --with-shared --without-debug
  3. make sources libs
  4. cp -av lib/lib*.so.5* $PKGDIR-x86_64/usr/lib64/

制作multiarch_wrapper选择器:

  1. mv -v $PKGDIR-i686/usr/bin/ncursesw5-config{,-32}
  2. mv -v $PKGDIR-x86_64/usr/bin/ncursesw5-config{,-64}
  3. ln -sv multiarch_wrapper $PKGDIR-x86_64/usr/bin/ncurses5-config

最终安装:

  1. cp -av $PKGDIR-i686/* /
  2. cp --remove-destination -av $PKGDIR-x86_64/* /


-- util-linux-2.20.1: ---

  1. [i686]:
  2. CC="gcc -m32" CXX="g++ -m32" \
  3.   ./configure --enable-arch --enable-partx --enable-write

  4. make && make DESTDIR=/pkg/util-linux-2.20.1-i686 install
  5. make install

  6. [x86_64]:
  7. ./configure --enable-arch --enable-partx \
  8.   --enable-write --libdir=/lib64
  9. make && make DESTDIR=/pkg/util-linux-2.20.1-x86_64 install
  10. make install


-------------E2fsprogs-1.41.14------------------

  1. PKGDIR=/pkg/e2fsprogs-1.41.14

32位库:[在源码内新建子目录进行编译]

  1. mkdir build32 && cd build32
  2. CC="gcc -m32" CXX="g++ -m32" \
  3. ../configure --prefix=/usr --with-root-prefix="" \
  4.  --enable-elf-shlibs \
  5.  --disable-libblkid --disable-libuuid \
  6.  --disable-uuidd --disable-fsck
  7. make libs
  8. make install-libs DESTDIR=$PKGDIR-i686

修正链接:

  1. ln -sv -f ../../lib/libcom_err.so.2 $PKGDIR-i686/usr/lib/libcom_err.so
  2. ln -sv -f ../../lib/libe2p.so.2 $PKGDIR-i686/usr/lib/libe2p.so
  3. ln -sv -f ../../lib/libext2fs.so.2 $PKGDIR-i686/usr/lib/libext2fs.so
  4. ln -sv -f ../../lib/libss.so.2 $PKGDIR-i686/usr/lib/libss.so

64位程序:

  1. mkdir ../build64 && cd ../build64
  2. CC="gcc -m64" CXX="g++ -m64" \
  3.  ../configure --prefix=/usr --libdir=/usr/lib64 \
  4.  --with-root-prefix="" --enable-elf-shlibs \
  5.  --disable-libblkid --disable-libuuid \
  6.  --disable-uuidd --disable-fsck
  7. make
  8. make DESTDIR=$PKGDIR-x86_64 install
  9. make DESTDIR=$PKGDIR-x86_64 install-libs

配置库[使其可写以便清理调试信息]:

  1. chmod -v u+w $PKGDIR-i686/usr/lib/{libcom_err,libe2p,libext2fs,libss}.a
  2. chmod -v u+w $PKGDIR-x86_64/usr/lib64/{libcom_err,libe2p,libext2fs,libss}.a

关键库移到根目录下:

  1. mkdir $PKGDIR-x86_64/lib64
  2. mv -v $PKGDIR-x86_64/usr/lib64/libcom_err.so.* $PKGDIR-x86_64/lib64
  3. mv -v $PKGDIR-x86_64/usr/lib64/libe2p.so.2* $PKGDIR-x86_64/lib64
  4. mv -v $PKGDIR-x86_64/usr/lib64/libext2fs.so.* $PKGDIR-x86_64/lib64
  5. mv -v $PKGDIR-x86_64/usr/lib64/libss.so.* $PKGDIR-x86_64/lib64

修正链接:

  1. ln -sv -f ../../lib64/libcom_err.so.2 $PKGDIR-x86_64/usr/lib64/libcom_err.so
  2. ln -sv -f ../../lib64/libe2p.so.2 $PKGDIR-x86_64/usr/lib64/libe2p.so
  3. ln -sv -f ../../lib64/libext2fs.so.2 $PKGDIR-x86_64/usr/lib64/libext2fs.so
  4. ln -sv -f ../../lib64/libss.so.2 $PKGDIR-x86_64/usr/lib64/libss.so

[安装文档时需要Tex的支持,会有个错误信息,被忽略掉,这里手动安装一下. ]

  1. gunzip -v $PKGDIR-x86_64/usr/share/info/libext2fs.info.gz
  2. install-info --dir-file=$PKGDIR-x86_64/usr/share/info/dir \
  3.              $PKGDIR-x86_64/usr/share/info/libext2fs.info

  4. makeinfo -o doc/com_err.info ../lib/et/com_err.texinfo
  5. install -v -m644 doc/com_err.info $PKGDIR-x86_64/usr/share/info
  6. install-info --dir-file=$PKGDIR-x86_64/usr/share/info/dir \
  7.  $PKGDIR-x86_64/usr/share/info/com_err.info

安装:

  1. cp -av $PKGDIR-i686/* /
  2. cp --remove-destination -av $PKGDIR-x86_64/* /

 

----- attr-2.4.44 -----

下载地址找的头皮发麻:
   

  1. PKGDIR=/pkg/attr-2.4.44

使安装的手册目录带上版本号:

  1. sed -i 's|/@pkg_name@|&-@pkg_version@|' include/builddefs.in

32-bit:

  1. CC="gcc -m32" CXX="g++ -m32" \
  2.   ./configure --prefix=/usr --libexecdir=/usr/lib
  3. make && make install install-dev install-lib

头疼的封包方法:

  1. make install install-dev install-lib DIST_ROOT=$PKGDIR-i686

64位:

  1. sed -i 's|/@pkg_name@|&-@pkg_version@|' include/builddefs.in

这个安装脚本有点弱智:
   如果设置/usr/lib64后,结果为/usr/lib6464
   如果不设置libexecdir,结果为/usr/libexec64
所以:

  1. ./configure --prefix=/usr --libexecdir=/usr/lib --enable-lib64
  2. make
  3. make install install-dev install-lib
  4. make install install-dev install-lib DIST_ROOT=$PKGDIR-x86_64

-----acl-2.2.51----------
下载地址找的头皮发麻:
   
acl和attr不是一个机构维护的,编译方式都是一个模子刻出来的:

  1. PKGDIR=/pkg/acl-2.2.51

32位:

  1. sed -i 's|/@pkg_name@|&-@pkg_version@|' include/builddefs.in
  2. CC="gcc -m32" CXX="g++ -m32" \
  3.   ./configure --prefix=/usr --libexecdir=/usr/lib
  4. make
  5. make install install-dev install-lib DIST_ROOT=$PKGDIR-i686
  6. make install install-dev install-lib

64位:

  1. sed -i 's|/@pkg_name@|&-@pkg_version@|' include/builddefs.in
  2. ./configure --prefix=/usr --libexecdir=/usr/lib --enable-lib64
  3. make
  4. make install install-dev install-lib DIST_ROOT=$PKGDIR-x86_64
  5. make install install-dev install-lib

### 关于acl和attr:###
安装后,在/etc/fstab就可以指定这两项了:

  1. # file      system      mount-point      type     options     dump     fsck
  2. /dev/sda1     /          ext3          defaults,acl,user_xattr  0       2

 

##### NTFS格式分区支持 ntfs-progs_ntfs-3g #####


  主页:
  稳定版:
  最新版:

  1. PKGDIR=/pkg/ntfs-progs-2011.10.9-rc
  2. 32bit:
  3. CC="gcc -m32" CXX="g++ -m32" \
  4.   ./configure --prefix=/usr \
  5.     --sbindir=/sbin --enable-extras \
  6.     --enable-posix-acls --enable-xattr-mappings

  7. make && make DESTDIR=$PKGDIR-i686 install
  8. make install

  9. 64bit:
  10. ./configure --prefix=/usr --libdir=/usr/lib64 \
  11.     --sbindir=/sbin --enable-extras \
  12.     --enable-posix-acls --enable-xattr-mappings
  13. make && make DESTDIR=$PKGDIR-x86_64 install
  14. make install


#####  安装最新格式的分区支持 [btrfs-progs-0.19] #####

需要打五个补丁,来修复已知的BUG:

  1. patch -Np1 -i ../patches/btrfs-progs-fix-labels.patch
  2. patch -Np1 -i ../patches/btrfs-progs-build-everything.patch
  3. patch -Np1 -i ../patches/btrfs-progs-valgrind.patch
  4. patch -Np1 -i ../patches/btrfs-progs-upstream.patch
  5. patch -Np1 -i ../patches/btrfs-progs-compile-fix.patch

这个不能configure,只能按默认的方式进行make,封包的方法也不一样:

  1. make CFLAGS="-g -Os"
  2. make DESTDIR=/pkg/btrfs-progs-0.19-x86_64 bindir=/sbin mandir=/usr/share/man install
  3. make bindir=/sbin mandir=/usr/share/man install


---coreutils-8.14---------

  1. PKGDIR=/pkg/coreutils-8.14-x86_64
  2. ./configure --prefix=/usr --libexecdir=/usr/lib64
  3. make && make install DESTDIR=$PKGDIR

将这些程序放在根分区上更适合:

  1. mkdir -v $PKGDIR/bin
  2. mkdir -pv $PKGDIR/usr/share/man/man8
  3. mv -v $PKGDIR/usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} $PKGDIR/bin
  4. mv -v $PKGDIR/usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} $PKGDIR/bin
  5. mv -v $PKGDIR/usr/bin/{rmdir,stty,sync,true,uname} $PKGDIR/bin
  6. mv -v $PKGDIR/usr/bin/chroot /usr/sbin
  7. mv -v $PKGDIR/usr/share/man/man1/chroot.1 $PKGDIR/usr/share/man/man8/chroot.8
  8. sed -i s/\

一些启动脚本可能依赖于 head, sleep 和 nice。由于 /usr 目录有 可能在系统启动过程的早期不可用,所以这些二进制程序需要放置在根分区上:

  1. mv -v $PKGDIR/usr/bin/{head,sleep,nice} $PKGDIR/bin

安装:

  1. cp --remove-destination -av $PKGDIR/* /


----Iana-Etc-2.30----

  1. make
  2. make DESTDIR=/pkg/iana-etc-2.30 install
  3. make install


----m4-1.4.16----

  1. ./configure --prefix=/usr
  2. make && make DESTDIR=/pkg/m4-1.4.16-x86_64 install
  3. make install

---bison-2.5 ---
32-lib:

  1. CC="gcc -m32" ./configure --prefix=/usr

如果 bison 程序不在 $PATH 中的话, 编译时将会出现缺乏国际化支持的错误信息,修改一下:

  1. echo '#define YYENABLE_NLS 1' >> lib/config.h
  2. make && make DESTDIR=/pkg/bison-2.5-i686 install
  3. make install

64-prog:

  1. ./configure --prefix=/usr --libdir=/usr/lib64
  2. echo '#define YYENABLE_NLS 1' >> lib/config.h
  3. make && make DESTDIR=/pkg/bison-2.5-x86_64 install
  4. make install

--- Procps-3.2.8 ---
32-lib:
使用高版本的make得做一件事,不然编译报错:

  1. sed -i -e 's@\*/module.mk@proc/module.mk ps/module.mk@' Makefile
  2. make CC="gcc -m32" m64="" ABI=32
  3. make install lib64=lib DESTDIR=/pkg/procps-3.2.8-i686
  4. make install lib64=lib

64-prog:

  1. sed -i -e 's@\*/module.mk@proc/module.mk ps/module.mk@' Makefile
  2. make ABI=64
  3. make install lib64=lib64 DESTDIR=/pkg/procps-3.2.8-x86_64
  4. make install lib64=lib64

--- grep-2.9 ---

  1. ./configure --prefix=/usr --bindir=/bin
  2. make && make DESTDIR=/pkg/grep-2.9-x86_64 install
  3. make install


--- readline-6.2 ----

 

配置:[patch可以不打]

  1. PKGDIR=/pkg/readline-6.2


  2. sed -i '/MV.*old/d' Makefile.in
  3. sed -i '/{OLDSUFF}/c:' support/shlib-install
  4. patch -Np1 -i ../patches/readline-6.2-fixes-1.patch

32位:

  1. CC="gcc -m32" CXX="g++ -m32" \
  2.  ./configure --prefix=/usr --libdir=/lib

使用ncurses库,默认是curses,事实上结果是ncursesw:
[注:可选lncursesw,或 make SHLIB_XLDFLAGS=-lncurses{w}]

  1. make SHLIB_LIBS=-lncurses
  2. make install DESTDIR=$PKGDIR-i686

配置:

  1. mkdir -v $PKGDIR-i686/usr/lib
  2. mv -v $PKGDIR-i686/lib/lib{readline,history}.a $PKGDIR-i686/usr/lib
  3. rm -v $PKGDIR-i686/lib/lib{readline,history}.so
  4. ln -sfv ../../lib/libreadline.so.6 $PKGDIR-i686/usr/lib/libreadline.so
  5. ln -sfv ../../lib/libhistory.so.6 $PKGDIR-i686/usr/lib/libhistory.so

64:

  1. sed -i '/MV.*old/d' Makefile.in
  2. sed -i '/{OLDSUFF}/c:' support/shlib-install
  3. patch -Np1 -i ../patches/readline-6.2-fixes-1.patch

  4. ./configure --prefix=/usr --libdir=/lib64
  5. make SHLIB_LIBS=-lncurses
  6. make install DESTDIR=$PKGDIR-x86_64

  7. mkdir -v $PKGDIR-x86_64/usr/lib64
  8. mv -v $PKGDIR-x86_64/lib64/lib{readline,history}.a $PKGDIR-x86_64/usr/lib64
  9. rm -v $PKGDIR-x86_64/lib64/lib{readline,history}.so
  10. ln -sfv ../../lib64/libreadline.so.6 $PKGDIR-x86_64/usr/lib64/libreadline.so
  11. ln -sfv ../../lib64/libhistory.so.6 $PKGDIR-x86_64/usr/lib64/libhistory.so

添加文档:

  1. mkdir -pv $PKGDIR-x86_64/usr/share/doc/readline-6.2
  2. install -v -m644 doc/*.{ps,pdf,html,dvi} \
  3.                  $PKGDIR-x86_64/usr/share/doc/readline-6.2

安装:

  1. cp -av $PKGDIR-i686/* /
  2. cp --remove-destination -av $PKGDIR-x86_64/* /

 

------------ 插曲 -----------------------------
编译软件时,如果有相关资料或文档,并不是见了sed就要运行,见了Patch就要打,要弄清他的意义再做决定...
如果不做上面两个sed修改的话,在后面你会哭的.
[参考LFS说明]:
    重新安装 Readline 会将老的库重命名为.old。这通常并不是问题。 但是, 在某些情况下它会引发ldconfig的一个链接bug。

开始我并没有sed,果然在后面编译其它软件时,让我遇到问题了:
telnet.o: In function `init_term':
/sources/inetutils-1.8/telnet/telnet.c:734: undefined reference to `tgetent'
 undefined reference to `tgetent'
collect2: ld returned 1 exit status
make: *** [all] Error 2
不知你遇到问题时,是啥样的心情,不过没事,啥问题都有解决方法,你应该学着去找毛病,而不是找百度,Google或是发贴问人.
翻开出错的源码:[出错代码有提示,文件名是: /sources/inetutils-1.8/telnet/telnet.c:734:
打开文件: 源码目录/telnet/telnet.c 第734行:
733: #ifdef HAVE_LIBREADLINE
734:  err = tgetent (termbuf, tname);
435: #endif
上面有个宏定义:HAVE_LIBREADLINE 很明确嘛,libreadline,问题就可能出在readline上面,于是我翻开这个软件的编译记录,就有了这个插曲.
不过更正了新的readline后,在后面,问题又依旧了,再仔细查看源文件:
#ifdef HAVE_LIBREADLINE
#include
#endif
好,再找/usr/include/term.h,不是"undefined reference to `tgetent'"吗?查找函数tgettent()的定义:
#if !defined(NCURSES_TERMCAP_H_incl)
...
extern NCURSES_EXPORT(int) tgetent (char *, const char *);
...
#endif
毫无疑问,是ncurses的问题了,因为安装的是宽字符版本的库,而上面 "make SHLIB_LIBS=-lncurses"是链接到非宽字符库,正确的应该是-lncursesw 才对. 但是,curses有四种版本,curses,cursesw ncurses,ncursesw,带w的是新版本,很多程序不认识新版本,依旧会在你不知情的情况下链接到老版本,导致程序编译出错,安装ncurses时,没有做兼容处理,而产生了一些不知情的错误.外国人的东西,要支持中文,很吭爹!
----------------------------

 

--- Bash-4.2 ---

打个补丁[可选]:

  1. patch -Np1 -i ../bash-4.2-fixes-3.patch

编译:

  1. ./configure --prefix=/usr --bindir=/bin \
  2.     --htmldir=/usr/share/doc/bash-4.2 --without-bash-malloc \
  3.     --with-installed-readline
  4. make && make install DESTDIR=/pkg/bash-4.2-x86_64
  5. make install

----新的bash产生了,现在用新的Bash登陆---

  1. exec /bin/bash --login +h

注:如果本次未完成所有的编译,下次进入chroot时,要指定/bin/bash而不是tools/bin/bash
---------------------------------------

--- libtool-2.4.2 ---

  1. PKGDIR=/pkg/libtool-2.4.2
  2. [32bit]:
  3. CC="gcc -m32" ./configure --prefix=/usr
  4. make
  5. make install DESTDIR=$PKGDIR-i686

  6. [64bit]:
  7. ./configure --prefix=/usr --libdir=/usr/lib64
  8. make && make install DESTDIR=$PKGDIR-x86_64

  9. mv -v $PKGDIR-i686/usr/bin/libtool{,-32}
  10. mv -v $PKGDIR-x86_64/usr/bin/libtool{,-64}
  11. ln -vs multiarch_wrapper $PKGDIR-x86_64/usr/bin/libtool

  12. cp -av $PKGDIR-i686/* /
  13. cp --remove-destination -av $PKGDIR-x86_64/* /

--- GDBM-1.9.1 ---

  1. 32-lib:
  2. CC="gcc -m32" CXX="g++ -m32" ./configure --prefix=/usr --enable-libgdbm-compat
  3. make && make install DESTDIR=/pkg/gdbm-1.9.1-i686
  4. make install
  5. 64-prog:
  6. ./configure --prefix=/usr --libdir=/usr/lib64 --enable-libgdbm-compat
  7. make && make install DESTDIR=/pkg/gdbm-1.9.1-x86_64
  8. make install


------------ inetutil-1.8-x86_64 ----------------

  1. PKGDIR=/pkg/inetutil-1.8-x86_64

  2. ./configure --prefix=/usr --libexecdir=/usr/sbin \
  3.  --localstatedir=/var --sysconfdir=/etc
  4. make && make install DESTDIR=$PKGDIR
  5. make -C doc html
  6. make -C doc install-html docdir=/usr/share/doc/inetutils-1.8 DESTDIR=$PKGDIR

这几个程序移到根分区:

  1. mkdir -v $PKGDIR/{bin,sbin}
  2. mv -v $PKGDIR/usr/bin/{hostname,ping,ping6} $PKGDIR/bin
  3. mv -v $PKGDIR/usr/bin/traceroute $PKGDIR/sbin

  4. cp --remove-destination -av $PKGDIR/* /

----------- perl-5.14.2 ------------
必要的设置:

  1. echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
  2. PKGDIR=/pkg/perl-5.14.2

32位库的安装:
设置:让perl链接到已安装的共享库zlib,不要让他自已编译一个内部的zlib.

  1. sed -i -e "s|BUILD_ZLIB\s*= True|BUILD_ZLIB = False|" \
  2.        -e "s|INCLUDE\s*= ./zlib-src|INCLUDE = /usr/include|" \
  3.        -e "s|LIB\s*= ./zlib-src|LIB = /usr/lib|" \
  4.     cpan/Compress-Raw-Zlib/config.in


采用perl的自动配置和最基础的必要的设置:

  1. sh Configure -des -Dprefix=/usr \
  2.                   -Dvendorprefix=/usr \
  3.                   -Dman1dir=/usr/share/man/man1 \
  4.                   -Dman3dir=/usr/share/man/man3 \
  5.                   -Dpager="/usr/bin/less -isR" \
  6.                   -Duseshrplib \
  7.                   -Dcc="gcc -m32" \
  8.                   -Dmyhostname=localhost \
  9.                   -Dperladmin=root@localhost \
  10.                   -Darchname=i686-linux-thread-multi \
  11.                   -Dcf_by=Jiabao, Workroom.

解释:
-Dvendorprefix=/usr
该参数确保 perl 知道怎样告诉其他软件包它们的perl模块安装在哪。
-Dpager="/usr/bin/less -isR"
纠正 perldoc 代码调用 less 程序时的一个错误。
-Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3
因为高尔夫(Groff) 还没有安装, Configure 会认为我们不想安装 Perl 的 man 手册。 应用这个参数来改变这种情况。

  1. make
  2. make install DESTDIR=$PKGDIR-i686

64位程序:
设置perl链接到zlib的共享库:

  1. sed -i -e "s|BUILD_ZLIB\s*= True|BUILD_ZLIB = False|" \
  2.        -e "s|INCLUDE\s*= ./zlib-src|INCLUDE = /usr/include|" \
  3.        -e "s|LIB\s*= ./zlib-src|LIB = /usr/lib64|" \
  4.     cpan/Compress-Raw-Zlib/config.in

修改libc的库的位置:

  1. sed -i "/libc/s@/lib@/lib64@" hints/linux.sh

修改安装的库目录[配合-Dinstallstyle="lib64/perl5"才有效]:

  1. sed -i '/*lib\/perl5*/s@lib/@lib64/@g' Configure

编译:

  1. sh Configure -des -Dprefix=/usr \
  2.                   -Dvendorprefix=/usr \
  3.                   -Dman1dir=/usr/share/man/man1 \
  4.                   -Dman3dir=/usr/share/man/man3 \
  5.                   -Dpager="/usr/bin/less -isR" \
  6.                   -Duseshrplib \
  7.                   -Dcc="gcc -m64" \
  8.                   -Dlibpth="/usr/local/lib64 /lib64 /usr/lib64" \
  9.                   -Dinstallstyle="lib64/perl5" \
  10.                   -Dmyhostname=localhost \
  11.                   -Dperladmin=root@localhost \
  12.                   -Darchname=x86_64-linux-thread-multi \
  13.                   -Dcf_by=Jiabao, Workroom.
  14. make && make install DESTDIR=$PKGDIR-x86_64

创建arch选择器:

  1. mv -v $PKGDIR-i686/usr/bin/perl{,-32}
  2. mv -v $PKGDIR-i686/usr/bin/perl5.14.2{,-32}

  3. mv -v $PKGDIR-x86_64/usr/bin/perl{,-64}
  4. mv -v $PKGDIR-x86_64/usr/bin/perl5.14.2{,-64}

  5. ln -sv multiarch_wrapper $PKGDIR-x86_64/usr/bin/perl
  6. ln -sv multiarch_wrapper $PKGDIR-x86_64/usr/bin/perl5.14.2

安装:

  1. cp -av $PKGDIR-i686/* /
  2. cp --remove-destination -av $PKGDIR-x86_64/* /

附:
--这里有个更全面设置,供你参考-----------

  1. -des
  2.  -Doptimize=-O2 -g -pipe -Wall -Wp,
  3.  -D_FORTIFY_SOURCE=2
  4.  -fexceptions -fstack-protector --param=ssp-buffer-size=4
  5.  -m64 -mtune=generic -Dccdlflags=-Wl,--enable-new-dtags
  6.  -DDEBUGGING=-g
  7.  -Dversion=5.12.4
  8.  -Dmyhostname=localhost
  9.  -Dperladmin=root@localhost -Dcc=gcc
  10.  -Dprefix=/usr
  11.  -Dvendorprefix=/usr
  12.  -Dsiteprefix=/usr/local
  13.  -Dsitelib=/usr/local/share/perl5
  14.  -Dsitearch=/usr/local/lib64/perl5
  15.  -Dprivlib=/usr/share/perl5
  16.  -Dvendorlib=/usr/share/perl5/vendor_perl
  17.  -Darchlib=/usr/lib64/perl5
  18.  -Dvendorarch=/usr/lib64/perl5/vendor_perl
  19.  -Darchname=x86_64-linux-thread-multi
  20.  -Dlibpth=/usr/local/lib64 /lib64 /usr/lib64
  21.  -Duseshrplib -Dusethreads -Duseithreads
  22.  -Dusedtrace=/usr/bin/dtrace -Duselargefiles
  23.  -Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm
  24.  -Duseperlio -Dinstallusrbinperl=n -Ubincompat5005 -Uversiononly
  25.  -Dpager=/usr/bin/less -isr
  26.  -Dd_gethostent_r_proto -Ud_endhostent_r_proto
  27.  -Ud_sethostent_r_proto -Ud_endprotoent_r_proto
  28.  -Ud_setprotoent_r_proto -Ud_endservent_r_proto
  29.  -Ud_setservent_r_proto -Dscriptdir=/usr/bin

 

---autoconf-2.68---

  1. ./configure --prefix=/usr
  2. make && make install DESTDIR=/pkg/autoconf-2.68-x86_64
  3. make install

---automake-1.11.1---

  1. ./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.11.1
  2. make && make install DESTDIR=/pkg/automake-1.11.1-x86_64
  3. make install

---diffutils-3.2---

  1. ./configure --prefix=/usr
  2. make && make install DESTDIR=/pkg/diffutils-3.2-x86_64
  3. make install

 

---gawk-4.0.0---

  1. PKGDIR=/pkg/gawk-4.0.0-x86_64

  2. ./configure --prefix=/usr --libexecdir=/usr/lib64
  3. make && make install DESTDIR=$PKGDIR

  4. mkdir -pv $PKGDIR/usr/share/doc/gawk-4.0.0
  5. cp -v doc/{awkforai.txt,*.{eps,pdf,jpg}} \
  6.          $PKGDIR/usr/share/doc/gawk-4.0.0
  7. cp --remove-destination -av $PKGDIR/* /

---findutils-4.4.2---

  1. PKGDIR=/pkg/findutils-4.4.2-x86_64

  2. ./configure --prefix=/usr --libexecdir=/usr/lib64/findutils
  3. make && make install DESTDIR=$PKGDIR

  4. mkdir -v $PKGDIR/bin
  5. mv -v $PKGDIR/usr/bin/find $PKGDIR/bin
  6. sed -i 's/find:=${BINDIR}/find:=\/bin/' $PKGDIR/usr/bin/updatedb

  7. cp -av $PKGDIR/* /

---flex-2.5.35---

  1. PKGDIR=/pkg/flex-2.5.35

  2. patch -Np1 -i ../patches/flex-2.5.35-gcc44-1.patch

这个补丁就是把源文件目录里的这个文件: ./flex-2.5.35/skel.c 添加一个头文件: 

  1. #include <cstdio>

以避免使用gcc-4.4.3以上版本时c++编译错误.
32位库:

  1. CC="gcc -m32" ./configure \
  2.     --prefix=/usr \
  3.     --infodir=/usr/share/info \
  4.     --mandir=/usr/share/man

  5. make libfl.a
  6. make install-libLIBRARIES DESTDIR=$PKGDIR-i686

跟{n,}curses一样,让libfl来替代旧的libl库:

  1. ln -sv libfl.a $PKGDIR-i686/usr/lib/libl.a

64位:

  1. patch -Np1 -i ../patches/flex-2.5.35-gcc44-1.patch
  2. ./configure --prefix=/usr \
  3.     --libdir=/usr/lib64 \
  4.     --infodir=/usr/share/info \
  5.     --mandir=/usr/share/man
  6. make && make install DESTDIR=$PKGDIR-x86_64

替代旧版本库:

  1. ln -sv libfl.a $PKGDIR-x86_64/usr/lib64/libl.a

替代旧版本lex程序:

  1. cat > $PKGDIR-x86_64/usr/bin/lex << "EOF"
  2. #!/bin/sh
  3. # Begin /usr/bin/lex

  4. exec /usr/bin/flex -l "$@"

  5. # End /usr/bin/lex
  6. EOF
  7. chmod -v 755 $PKGDIR-x86_64/usr/bin/lex


添加文档:

  1. mkdir -pv $PKGDIR-x86_64/usr/share/doc/flex-2.5.35
  2. cp -v doc/flex.pdf \
  3.          $PKGDIR-x86_64/usr/share/doc/flex-2.5.35

安装:

  1. cp -av $PKGDIR-i686/* /
  2. cp --remove-destination -av $PKGDIR-x86_64/* /

--- gettext-0.18.1.1 ---

  1. 32-bit:
  2. CC="gcc -m32" CXX="g++ -m32" \
  3.     ./configure --prefix=/usr \
  4.     --docdir=/usr/share/doc/gettext-0.18.1.1
  5. make && make install DESTDIR=/pkg/gettext-0.18.11-i686
  6. make install

  7. 64-bit:
  8. ./configure --prefix=/usr --libdir=/usr/lib64 \
  9.     --docdir=/usr/share/doc/gettext-0.18.1.1
  10. make && make install DESTDIR=/pkg/gettext-0.18.11-x86_64
  11. make install

--- groff-1.21 ---

  1. PKGDIR=/pkg/groff-1.21-x86_64
  2. PAGE=A4 ./configure --prefix=/usr --libdir=/usr/lib64

注:
    你以后可以通过将“A3” 或 “letter”写入到/etc/papersize文件来更改默认值

  1. make && make install DESTDIR=$PKGDIR

  2. ln -sv soelim $PKGDIR/usr/bin/zsoelim
  3. ln -sv eqn $PKGDIR/usr/bin/geqn
  4. ln -sv tbl $PKGDIR/usr/bin/gtbl
  5. cp -av $PKGDIR/* /


--- grub-1.99 [GRUB2]----

  1. ./configure --prefix=/usr \
  2.     --build=$OSBUILD \
  3.     --sysconfdir=/etc \
  4.     --libdir=/usr/lib64 \
  5.     --disable-werror \
  6.     --disable-efiemu \
  7.     --disable-grub-emu-usb
  8. make && make install DESTDIR=/pkg/grub-1.99-x86_64
  9. make install

注:

##--disable-grub-emu-usb取消枚举usb,看情况自已定

需要安装扩展的请看:
*******************************************************
GRUB2 will be compiled with following components:
Platform: i386-pc
With devmapper support: No (need libdevmapper header)
With memory debugging: No
efiemu runtime: No (explicitly disabled)
grub-mkfont: No (need freetype2 library)
*******************************************************


--- Gzip-1.4 ---

  1. PKGDIR=/pkg/gzip-1.4-x86_64
  2. ./configure --prefix=/usr --bindir=/bin
  3. make && make install DESTDIR=$PKGDIR

移动一些不必位于root文件系统的程序:

  1. mkdir -v $PKGDIR/usr/bin
  2. mv -v $PKGDIR/bin/{gzexe,uncompress,zcmp,zdiff,zegrep} $PKGDIR/usr/bin
  3. mv -v $PKGDIR/bin/{zfgrep,zforce,zgrep,zless,zmore,znew} $PKGDIR/usr/bin

安装:

  1. cp -av $PKGDIR/* /

--- iproute2-2.6.39 ----

  1. PKGDIR=/pkg/iproute2-2.6.39-x86_64

  2. sed -i '/^TARGETS/s@arpd@@g' misc/Makefile

注:
    设置目标不安装arpd程序,他依赖于berkeleyDB库,berkeleyDB有free的,也有商业版的,是一般linux用户少用的程序,
况且为了生成一个/usr/bin/arpd,不得不安装berkeleyDB,还要安装更多的依赖,暂不安装.在文末有介绍安装方法.

制作包的方法:

  1. make DESTDIR=$PKGDIR LIBDIR=/usr/lib64 \
  2.     VARLIB=/var/lib64 SBINDIR=/sbin \
  3.     ARPDDIR=/var/lib64/arpd
  4. make install DESTDIR=$PKGDIR LIBDIR=/usr/lib64 \
    VARLIB=/var/lib64 SBINDIR=/sbin \
    ARPDDIR=/var/lib64/arpd \
    MANDIR=/usr/share/man \
    DOCDIR=/usr/share/doc/iproute2-2.6.39

安装:

  1. cp -av $PKGDIR/* /

 

--- kbd-1.15.2 ---

  1. PKGDIR=/pkg/kbd-1.15.2-x86_64

  2. ./configure --prefix=/usr --datadir=/lib64/kbd

  3. make && make install DESTDIR=$PKGDIR

将重要的程序放在根分区下:

  1. mkdir -v $PKGDIR/bin
  2. mv -v $PKGDIR/usr/bin/{kbd_mode,loadkeys,openvt,setfont} $PKGDIR/bin

添加文档、安装:

  1. mkdir -pv $PKGDIR/usr/share/doc/kbd-1.15.2
  2. cp -R -v doc/* \
  3.          $PKGDIR/usr/share/doc/kbd-1.15.2

  4. cp -av $PKGDIR/* /

注:
Backspace键和Delete键在不同的kbd包中有些争议,下面的patch修正了i386的键盘映射的一个问题:
patch -Np1 -i ../kbd-1.15.2-backspace-1.patch
打完 patch 之后,Backspace 键会产生字符编码 127,Delete 键会产生一个著名的逃脱序列。

 

----- Less-444 ----------

  1. ./configure --prefix=/usr --sysconfdir=/etc
  2. make && make install DESTDIR=/pkg/less-444-x86_64
  3. make install

--- libpipeline-1.2.0 ----

  1. PKGDIR=/pkg/libpipeline-1.2.0

  2. 32-libs:
  3. CC="gcc -m32" ./configure --prefix=/usr
  4. make && make install DESTDIR=$PKGDIR-i686
  5. make install

  6. 64-bit:
  7. ./configure --prefix=/usr --libdir=/usr/lib64
  8. make && make install DESTDIR=$PKGDIR-x86_64
  9. make install


--- make-3.82 ---

  1. ./configure --prefix=/usr --build=$OSBUILD
  2. make && make install DESTDIR=/pkg/make-3.82-x86_64
  3. make install

--- xz-5.0.3 ---

  1. 32-libs:
  2. CC="gcc -m32" ./configure --prefix=/usr \
  3.     --docdir=/usr/share/doc/xz-5.0.3
  4. make && make install DESTDIR=/pkg/xz-5.0.3-i686
  5. make install
  6.   
  7. 64-bit:
  8. ./configure --prefix=/usr --libdir=/usr/lib64 \
  9.     --docdir=/usr/share/doc/xz-5.0.3
  10. make && make install DESTDIR=/pkg/xz-5.0.3-x86_64
  11. make install

--- man-db-2.6.0.2 ---

  1. ./configure --prefix=/usr --libexecdir=/usr/lib64 \
  2.     --libdir=/usr/lib64 --sysconfdir=/etc \
  3.     --docdir=/usr/share/doc/man-db-2.6.0.2 \
  4.     --disable-setuid --with-browser=/usr/bin/lynx \
  5.     --with-vgrind=/usr/bin/vgrind --with-grap=/usr/bin/grap
  6. make && make install DESTDIR=/pkg/man-db-2.6.0.2-x86_64
  7. make install


------- module-init-tools-3.15 ---------
目前为止,官方放出的最新版本是3.15版。

很多人在安装这个时,遇到很多麻烦,主要是为了安装他的手册(man)出错.
安装手册文件:[参见底下的注解]

  1. tar -xvf ../module-init-tools-3.15-man-jiabao.tar.bz2
  2. mv -v module-init-tools-3.15-man-jiabao build

下面的设置可以不安装手册:

  1. cp -v Makefile.in{,.orig}
  2. sed -e "/MAN5 =/,/bin.5/d" -e "/MAN8 = /i\MAN5 =" -e "/MAN8 =/c\MAN8 =" \
  3.     Makefile.in.orig > Makefile.in

修正一个脚本和配置文件的路径为/lib64:

  1. sed -i '/\/lib\/modules/s|/lib/modules|/lib64/modules|g' stress_modules.sh
  2. sed -i '/\/lib\/modules/s|/lib/modules|/lib64/modules|g' generate-modprobe.conf

测试一下:

  1. DOCBOOKTOMAN=/bin/true ./configure
  2. make check
  3. sed -i -e 's@../../configure@DOCBOOKTOMAN=/bin/true &@' tests/runtests
  4. ./tests/runtests
  5. make clean

编译,安装: [--with-moddir=/lib64/modules是必须的]

  1. ./configure --prefix=/ \
  2.     --enable-zlib-dynamic \
  3.     --mandir=/usr/share/man \
  4.     --with-moddir=/lib64/modules \
  5.     --build=$OSBUILD
  6. make
  7. make INSTALL=install DESTDIR=/pkg/module-init-tools-3.15-x86_64 install

安装:

  1. make INSTALL=install install

### 关于man-jiabao ###
安装man文件,需要docbook2man的支持,需要更多的软件依赖包并安装:
SGML Common-0.6.3
DocBook SGML DTD-3.1
DocBook SGML DTD-4.5
OpenSP-1.5.2
OpenJade-1.3.2
DocBook DSSSL Stylesheets-1.79
DocBook-utils-0.6.14
sgmltools-lite-3.0.3
gcc-3.3.6
这些信赖包有些不能在gcc-4.x下正确编译,因此需要安装gcc-3.3.6
对于他们的具体安装方式,可以再来一篇文章了,因此我把编译过的man文件做了个包。
### ### ###

--- patch-2.6.1 ---

  1. ./configure --prefix=/usr
  2. make && make install DESTDIR=/pkg/patch-2.6.1-x86_64
  3. make install

--- psmisc-22.14 ---

  1. ./configure --prefix=/usr
  2. make && make install DESTDIR=/pkg/psmisc-22.14-x86_64
  3. make install


---- shadow-4.1.4.3-x86_64 ----

  1. PKGDIR=/pkg/shadow-4.1.4.3-x86_64

下面的命令禁止安装 groups 程序和它的手册页,因为之前的 Coreutils 提供了一个更好的版本。coreutils是gnu官方维护的。shadow是Debian官方维护的,似乎已成为各种发行版本必备品!

  1. sed -i 's/groups$(EXEEXT) //' src/Makefile.in
  2. find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \;

**************
如果是低于本文的版本,要禁止安装中文和韩文手册页,因为Man-DB 不能很好的格式化它们,编译安装会终止.

  1. sed -i -e 's/ ko//' -e 's/ zh_CN zh_TW//' man/Makefile.in

**************

修正一个安装俄文手册的错误:

  1. sed -i 's/man_MANS = $(man_nopam) /man_MANS = /' man/ru/Makefile.in

修改使用md5加密方法:[默认是crypt]

  1. sed -i 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD MD5@' etc/login.defs

如果想启用 Cracklib 支持[需要提前安装cracklib]:

  1. sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' \
  2.     etc/login.defs

编译:

  1. ./configure --sysconfdir=/etc --libdir=/lib64
  2. make && make install DESTDIR=$PKGDIR

有个程序放错位置了:

  1. mv -v $PKGDIR/usr/bin/passwd $PKGDIR/bin

安装:

  1. cp --remove-destination -av $PKGDIR/* /

---安装后的可选配置:---
使用影子密码,运行以下指令:

  1. pwconv

使用组影子密码,运行:

  1. grpconv

如果你不想useradd 为新添加的用户建立mailbox 文件,请执行下面的命令:

  1. sed -i 's/yes/no/' /etc/default/useradd

设置root的密码:

  1. passwd root

 

---sysklogd-1.5-x86_64---

  1. PKGDIR=/pkg/sysklogd-1.5-x86_64

  2. mkdir -pv $PKGDIR/{sbin,etc,usr/share/man/man{5,8}}
  3. make && make prefix=$PKGDIR BINDIR=$PKGDIR/sbin install
  4. make BINDIR=/sbin install

配置:

  1. cat > $PKGDIR/etc/syslog.conf << "EOF"
  2. # Begin /etc/syslog.conf

  3. auth,authpriv.* -/var/log/auth.log
  4. *.*;auth,authpriv.none -/var/log/sys.log
  5. daemon.* -/var/log/daemon.log
  6. kern.* -/var/log/kern.log
  7. mail.* -/var/log/mail.log
  8. user.* -/var/log/user.log
  9. *.emerg *

  10. # End /etc/syslog.conf
  11. EOF

安装:

  1. cp -av $PKGDIR/etc/* /etc


------sysvinit-2.88dsf----------------------

关闭系统时,终端上会提示一个信息:
Sending processes the TERM signal
把他改为下面的英文更为直观[当然你非常理解英文是啥意思]:
Sending processes configured via /etc/inittab the TERM signal
命令如下:

  1. sed -i 's@Sending processes@& configured via /etc/inittab@g' \
  2.     src/init.c

安装后,这个程序:/usr/bin/wall,会覆盖之前util-linux提供的更好的版本,下面的命令可以禁掉:

  1. sed -i -e 's/utmpdump wall/utmpdump/' \
  2.        -e 's/mountpoint.1 wall.1/mountpoint.1/' src/Makefile

编译安装:

  1. make -C src
  2. make -C src install

打包的方法:

  1. make -C src install ROOT=/pkg/sysvinit-2.88dsf-x86_64

--- tar-1.26 ---

  1. PKGDIR=/pkg/tar-1.26-x86_64

  2. FORCE_UNSAFE_CONFIGURE=1 ./configure --prefix=/usr \
  3.    --bindir=/bin --libexecdir=/usr/sbin

说明:
FORCE_UNSAFE_CONFIGURE=1
使运行时,不测试mknod,因为他需要root权限,意味着:在安装后普通用户不能执行tar命令.

  1. make && make install DESTDIR=$PKGDIR
  2. make install
  3. make -C doc install-html docdir=$PKGDIR/usr/share/doc/tar-1.26
  4. make -C doc install-html docdir=/usr/share/doc/tar-1.26


--- texinfo-4.13 ---

  1. PKGDIR=/pkg/texinfo-4.13-x86_64
  2. ./configure --prefix=/usr
  3. make && make install DESTDIR=$PKGDIR
  4. make TEXMF=/usr/share/texmf install-tex DESTDIR=$PKGDIR

  5. cd $PKGDIR/usr/share/info
  6. rm -v dir
  7. for f in *
  8. do install-info $f dir 2>/dev/null
  9. done

  10. cd /sources
  11. cp -av $PKGDIR/* /

------ udev-173 -----

  1. PKGDIR=/pkg/udev-173

32位:
解压用于测试的文件:

  1. tar -xvf ../udev-173-testfiles.tar.bz2 --strip-components=1

创建必要的空目录和结点:

  1. install -dv $PKGDIR-i686/lib/udev/devices/pts
  2. mknod -m0666 $PKGDIR-i686/lib/udev/devices/null c 1 3

安装32位全部程序,打包:

  1. GLIB_LIBS="-L/usr/lib -lglib-2.0" \
  2.   GLIB_CFLAGS="-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include" \
  3.   CC="gcc -m32" \
  4. ./configure --prefix=/usr \
  5.     --sysconfdir=/etc --sbindir=/sbin \
  6.     --libexecdir=/lib/udev \
  7.     --with-rootlibdir=/lib \
  8.     --disable-introspection \
  9.    --disable-keymap --disable-hwdb

可选:--with-selinux

  1. make
  2. make check
  3. make install DESTDIR=$PKGDIR-i686

64位程序:

  1. tar -xvf ../udev-173-testfiles.tar.bz2 --strip-components=1

  2. install -dv $PKGDIR-x86_64/lib64/udev/devices/pts
  3. mknod -m0666 $PKGDIR-x86_64/lib64/udev/devices/null c 1 3

修正modules的查找目录在/lib64目录下:

  1. sed -i "s@/lib/modules@/lib64/modules@g" udev/udevd.c

在启动的时候会显示udev的版本,它占用2秒的时间,追求极速的朋友,下面的命令可以禁止:

  1. sed -i -e '/deprecated/d' udev/udevadm-trigger.c

编译安装:

  1. GLIB_LIBS="-L/usr/lib64 -lglib-2.0" \
  2.   GLIB_CFLAGS="-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include" \
  3.  ./configure --prefix=/usr \
  4.     --sysconfdir=/etc --sbindir=/sbin \
  5.     --libexecdir=/lib64/udev --libdir=/usr/lib64 \
  6.     --with-rootlibdir=/lib64 \
  7.     --with-firmware-path=/lib64/firmware/updates:/lib64/firmware \
  8.     --disable-introspection \
  9.     --disable-keymap --disable-hwdb \
  10.     --build=$OSBUILD
  11. make
  12. make check
  13. make install DESTDIR=$PKGDIR-x86_64

  14. cp --remove-destination -av $PKGDIR-i686/* /
  15. cp --remove-destination -av $PKGDIR-x86_64/* /

安装 udev-config,其实就是一个rulers文件:
保持当前目录不变:

  1. PKGDIR=/pkg/udev-lfs-cfg-x86_64
  2. tar -xvf ../udev-config-20100128.tar.bz2
  3. cd udev-config-20100128
  4. make install PREFIX=$PKGDIR/usr RULES_DIR=$PKGDIR/etc/udev/rules.d
  5. make install-doc PREFIX=$PKGDIR/usr
  6. make install
  7. make install-doc


--------vim73 ----------------

  1. PKGDIR=/pkg/vim73-x86_64

设置vimrc的目录:

  1. echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h

编译安装:

  1. ./configure --prefix=/usr --enable-multibyte
  2. make && make install DESTDIR=$PKGDIR

创建一个兼容的vi:

  1. ln -sv vim $PKGDIR/usr/bin/vi

手册:

  1. for L in $PKGDIR/usr/share/man/{,*/}man1/vim.1; do
  2.     ln -sv vim.1 $(dirname $L)/vi.1
  3. done

  4. mkdir -pv $PKGDIR/usr/share/doc
  5. ln -sv ../vim/vim73/doc $PKGDIR/usr/share/doc/vim-7.3

简单的配置一下vimrc:

  1. mkdir -pv $PKGDIR/etc

  2. cat > /etc/vimrc << "EOF"
  3. " Begin /etc/vimrc

  4. set nocompatible
  5. set backspace=2
  6. syntax on
  7. if (&term == "iterm") || (&term == "putty")
  8.   set background=dark
  9. endif

  10. " End /etc/vimrc
  11. EOF

安装:

  1. cp -av $PKGDIR/* /

-----------------------------------分界线----------------------------------------
清理系统[去除不必要的调试信息,可节省200M左右的空间]:
退出chroot环境:

  1. logout

如果中途关过机,看看OSROOT变量还在不在:

  1. echo $OSROOT

重新换根,更改一些参数,不然无法清理正在使用中的文件。

  1. chroot $OSROOT /tools/bin/env -i \
  2.     HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
  3.     PATH=/bin:/usr/bin:/sbin:/usr/sbin \
  4.     /tools/bin/bash --login

使用tools下的工具对目标系统进行清理:

  1. /tools/bin/find /{,usr/}{bin,lib,sbin} -type f \
  2.   -exec /tools/bin/strip --strip-debug '{}' ';'

将所有PKG包压缩,压缩比很变态:

  1. cd /pkg
  2. for file in \
  3. $(find -type d -name "*-x86_64" -o -name "*-i686")
  4. do
  5. tar -cJvf $(echo $file | sed -n "s@./@@p"){.tar.xz,}
  6. rm -rf $file
  7. done


再次退出chroot环境:

  1. logout

-------完成基础系统---------

    “人类已经无法阻止我们修改源代码了……"
从现在开始,基础系统已完成,/tools下的工具已经不再需要,你可以删除或者打包备份到其它地方;

以后进入chroot环境应该使用下面的脚本:

  1. cat > ~/chroot-jiabao.sh << "EOF"
  2. export OSROOT=/media/jiabao-linux
  3. chroot "$OSROOT" /usr/bin/env -i \
  4.     HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
  5.     PATH=/bin:/usr/bin:/sbin:/usr/sbin \
  6.     OSBUILD=x86_64-jiabao-linux-gnu \
  7.     /bin/bash --login
  8. EOF


修改枯燥的环境,为以后的编译添点颜色:
1.设置终端的显示颜色:

  1. LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:*.pdf=00;33:*.ps=00;33:*.ps.gz=00;33:*.txt=00;33:*.patch=00;33:*.diff=00;33:*.log=00;33:*.tex=00;33:*.xls=00;33:*.xlsx=00;33:*.ppt=00;33:*.pptx=00;33:*.rtf=00;33:*.doc=00;33:*.docx=00;33:*.odt=00;33:*.ods=00;33:*.odp=00;33:*.xml=00;33:*.epub=00;33:*.abw=00;33:*.html=00;33:*.wpd=00;33:"
  2. echo "export LS_COLORS=\"$LS_COLORS\"" >> /etc/profile
  3. sed -i "/alias ls=/d" /etc/profile
  4. echo "alias ls='ls --color=auto'" >> /etc/profile

2.设置为中文终端环境,在编译的时候还可以显示中文:

  1. echo "export LANG=zh_CN.UTF-8" >> /etc/profile


在没有安装dhcpd[自动获取IP地址]之前,先手动设置一下IP地址和DNS,以便可以使用网络

IP地址:

  1. cd /etc/sysconfig/
  2. cat > ifconfig.eth0 << "EOF"
  3. ONBOOT=yes
  4. IFACE=eth0
  5. SERVICE=ipv4-static
  6. ##如果使用路由器上网,默认为:#
  7. IP=192.168.1.100
  8. GATEWAY=192.168.1.1
  9. BROADCAST=255.255.255.0
  10. PREFIX=24
  11. #######
  12. EOF

DNS服务器:

  1. cat > /etc/resolv.conf << "EOF"
  2. domain domain
  3. search domain
  4. #这个是河南某市的DNS,不要效仿#
  5. nameserver 202.102.227.68
  6. nameserver 202.102.224.68
  7. EOF

设置host解析:

  1. cat > /etc/hosts << "EOF"
  2. 127.0.0.1 localhost.localdomain localhost
  3. ::1 localhost6.localdomain6 localhost6
  4. EOF

配置网络[主机名只针对服务器有效]:

  1. cat > /etc/sysconfig/network << "EOF"
  2. # Begin /etc/sysconfig/network

  3. NETWORKING=yes
  4. HOSTNAME=jiabao-pc

  5. # End /etc/sysconfig/network
  6. EOF


设置通用键盘:

  1. cat > /etc/sysconfig/keyboard << "EOF"
  2. KEYTABLE="us"
  3. MODEL="pc105+inet"
  4. LAYOUT="us"
  5. EOF

设置时钟:

  1. cat > /etc/sysconfig/clock << "EOF"
  2. # 纯终端环境下,区域设置定义在这个文件 /etc/localtime.
  3. # 如果安装了GNU界面,使用 system-config-date 可以自动配置本文件。
  4. ZONE="Asia/Shanghai"
  5. # 如果想设置UTC时间的话:
  6. # UTC=1
  7. EOF

设置终端[暂不需要]:

  1. cat > /etc/sysconfig/console << "EOF"
  2. # 如果想使用中文的话:
  3. # UNICODE="1"
  4. # FONT="字体名[必须点阵字体]"
  5. EOF


通用启动脚本[可选],采用LFS 2011年10月17号更新的:
lfs-bootscripts-20111017

注意用下面的命令,使scripts里的/lib改为/lib64,因为咱们用的是64位程序,而lfs用/lib做为默认值:

  1. find -type f -exec sed -i "s@/lib@/lib64@g" {} \;
  2. mv -v lfs/lib{,64}

安装,封包:

  1. make install
  2. make install DESTDIR=/pkg/boot-scripts-20111017-x86_64


配置内核的初始化启动级别脚本[inittab]

  1. cat > /etc/inittab << "EOF"
  2. # Begin /etc/inittab

  3. id:3:initdefault:

  4. si::sysinit:/etc/rc.d/init.d/rc S

  5. l0:0:wait:/etc/rc.d/init.d/rc 0
  6. l1:S1:wait:/etc/rc.d/init.d/rc 1
  7. l2:2:wait:/etc/rc.d/init.d/rc 2
  8. l3:3:wait:/etc/rc.d/init.d/rc 3
  9. l4:4:wait:/etc/rc.d/init.d/rc 4
  10. l5:5:wait:/etc/rc.d/init.d/rc 5
  11. l6:6:wait:/etc/rc.d/init.d/rc 6

  12. ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

  13. su:S016:once:/sbin/sulogin

  14. 1:2345:respawn:/sbin/agetty --noclear tty1 9600
  15. 2:2345:respawn:/sbin/agetty tty2 9600
  16. 3:2345:respawn:/sbin/agetty tty3 9600
  17. 4:2345:respawn:/sbin/agetty tty4 9600
  18. 5:2345:respawn:/sbin/agetty tty5 9600
  19. 6:2345:respawn:/sbin/agetty tty6 9600

  20. # End /etc/inittab
  21. EOF

注:这个脚本已经过时好几年了,通常是用他来配置启动级别的,现在多数发行版使用systemd来配置,在后面的章节我们再介绍systemd。

参见systemd的说明:
# inittab is no longer used when using systemd.
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# Ctrl-Alt-Delete is handled by /etc/systemd/system/ctrl-alt-del.target
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
# To set a default target, run:
# ln -s /lib/systemd/system/.target /etc/systemd/system/default.target
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.

 

配置键盘映射:[可有可无]

  1. cat > /etc/inputrc << EOF
  2. # do not bell on tab-completion
  3. #set bell-style none

  4. set meta-flag on
  5. set input-meta on
  6. set convert-meta off
  7. set output-meta on

  8. # Completed names which are symbolic links to
  9. # directories have a slash appended.
  10. set mark-symlinked-directories on
  11. EOF


配置启动时必要的挂载[fstab]:

  1. cat > /etc/fstab << EOF
  2. #UUID=48b6f294-ada1-4553-8468-9af4619d319d /boot ext4 defaults 1 1
  3. UUID=1c6baf90-0865-483a-96a9-b76aadcbbfda / btrfs defaults 1 1
  4. tmpfs /dev/shm tmpfs defaults 0 0
  5. devpts /dev/pts devpts gid=5,mode=620 0 0
  6. sysfs /sys sysfs defaults 0 0
  7. proc /proc proc defaults 0 0
  8. EOF

我的系统内存是8G,因此没有挂载swap分区,想要添加的话添加:

  1. /dev/sda15 swap swap defaults 0 0

##### 关于UUID:#########
    使用UUID来代替/dev/sda{N},好处是我为了折腾,经常要调整其它分区,来回的增减分区,分区号经常会变,使用了UUID后,只要这个LINUX分区不改变的情况,分区ID就不会变。查看UUID的方法如下:

查看分区号和卷标的命令:

  1. ls -al /dev/disk/by-label

 WIN7 -> ../../sda1
 WIN2K3 -> ../../sda5
 WIN_SOFT -> ../../sda6
 _Fedora-16-x86_6 -> ../../sda9
 Mac OS X -> ../../sda10
 jiabao-linux -> ../../sda12
查看分区号和UUID的命令:

  1. ls -al /dev/disk/by-uuid

 1c6baf90-0865-483a-96a9-b76aadcbbfda -> ../../sda12
 1b8b068b-bcb1-4185-9885-70dfaa67c9c2 -> ../../sda8

###关于/boot######

如果你做了多系统,以及btrfs为根的linux,不希望把grub2安装在mbr上,必须把grub2的state文件安装在非btrfs分区上,因为只有grub2才能正确识别btrfs分区。很方便的做法就是,新分出一个ext4分区做为/boot,然后可以通过grub4dos来引导grub2。当然,最省事的做法就是把grub2安装在MBR上。有时间可以为新手们做一个专题。
--------------------------------------------------------------------------------


##### 编译linux-3.2-rc1 #####

设置安装的变量:

  1. VER=3.2.0-rc1-jiabao-x86_64
  2. PKGDIR=/pkg/kernel-$VER
  3. DEVDIR=/usr/src/kernels/$VER
  4. unset LANG
  5. mkdir -pv $DEVDIR

关于$DEVDIR:

  因为在以后我们的glibc头文件/usr/include以后就不可以修改了,以后在升级kernel时,有些程序在编译时必须依赖现实使用的新kernel头文件,因此需要这个文件夹,以便程序使用最新内核的特性!。

因为我们需要绝对干净的32位库/lib,里面不充许放置任何64位文件,做以下修改:
  1. 使库目录和modules安装在/lib64下面:

  1. sed -i 's@)/lib/@)/lib64/@g' Makefile

  2. 修改一些辅助的脚本改/lib为/lib64:

  1. find {tools/,scripts/} -type f -name "*" \
  2.   -exec sed -i '/[^g]\/lib\/modules/s|/lib/modules|/lib64/modules|g' {} \;

保持源码目录干净性:

  1. make mrproper

复制发行版的配置文件:

  1. cp ../config-3.1.0-7.fc16.x86_64 $DEVDIR/.config

主分区是btrfs,必须添加内核级的btrfs支持,用make oldconfig无法修改,
用一个Sed命令来完成:

  1. sed -i -e "/BTRFS_FS[^_]/c\CONFIG_BTRFS_FS=y" \
  2.     -e "/BTRFS_FS_POSIX_ACL/c\CONFIG_BTRFS_FS_POSIX_ACL=y" \
  3.     $DEVDIR/.config

保留旧功能,提示新功能的方法来配置:
  [如果不确定的话,全部回车使用kernel官方推荐的,在后面还可以重新“增量编译”,快速的添加或删除某个功能,基本不消耗时间]

  1. make O=$DEVDIR oldconfig

########## 注意: ###############
    如果你用的是USB的鼠标,在纯终端下会永无休止的显示鼠标的信息,解决方法:
修改三个文件:

  1. cp -v drivers/usb/core/hub.c{,.orgi}
  2. sed -e '/#include "usb.h"/a\\n#undef DEBUG\n#undef CONFIG_USB_ANNOUNCE_NEW_DEVICES\n' \
  3.     -e "/USB disconnect, device number/,/;/s|^.*$|/*jiabao-marked:&\t*/|" \
  4.     -e "/if (udev->speed != USB_SPEED_SUPER)/,/;/s|^.*$|/*jiabao-marked:&\t*/|" \
  5.   drivers/usb/core/hub.c.orgi > drivers/usb/core/hub.c

  6. cp -v drivers/input/input.c{,.orgi}
  7. sed '/pr_info("%s as %s/,/;/s|^.*$|/*jiabao-marked:&\t*/|' \
  8.   drivers/input/input.c.orgi > drivers/input/input.c

  9. cp -v drivers/hid/hid-core.c{,.orgi}
  10. sed '/hid_info(hdev, "%s: %s HID/,/;/s|^.*$|/*jiabao-marked:&\t*/|' \
  11.   drivers/hid/hid-core.c.orgi > drivers/hid/hid-core.c

################################################################

编译:

  1. make O=$DEVDIR

安装:

  1. make O=$DEVDIR INSTALL_MOD_STRIP=1 modules_install
  2. cp -v $DEVDIR/arch/x86/boot/bzImage /boot/vmlinuz-$VER
  3. cp -v $DEVDIR/System.map /boot/System.map-$VER
  4. cp -v $DEVDIR/.config /boot/config-$VER
  5. install -d /usr/share/doc/linux-$VER
  6. cp -r Documentation/* /usr/share/doc/linux-$VER

制作包:
打包modules:[可选]

  1. make O=$DEVDIR INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$PKGDIR modules_install

文档,以及内核文件:

  1. mkdir -pv $PKGDIR/{boot,usr/share/doc/linux-$VER}

  2. cp -v $DEVDIR/arch/x86/boot/bzImage $PKGDIR/boot/vmlinuz-$VER
  3. cp -v $DEVDIR/System.map $PKGDIR/boot/System.map-$VER
  4. cp -v $DEVDIR/.config $PKGDIR/boot/config-$VER
  5. install -d $PKGDIR/usr/share/doc/linux-$VER
  6. cp -r Documentation/* $PKGDIR/usr/share/doc/linux-$VER

配置Linux模块装载顺序:
创建/etc/modprobe.d/usb.conf文件,使ehci_hcd 必须在ohci_hcd和uhci_hcd之前装载:

  1. install -v -m755 -d /etc/modprobe.d
  2. cat > /etc/modprobe.d/usb.conf << "EOF"
  3. # Begin /etc/modprobe.d/usb.conf

  4. install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
  5. install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true

  6. # End /etc/modprobe.d/usb.conf
  7. EOF

安装GRUB2:

/dev/sda12便是安装GRUB所在的分区

  1. ln -vs /dev/sda12 /dev/root
  2. grub-install /dev/sda12
  3. grub-mkconfig -o /boot/grub2/grub/grub.cfg

---独立的/boot分区---

如果你想为目标linux使用单独的/boot分区,必须把boot文件复制到那个分区上,你应该用现有的可用的方法,分割出一个新分区,假设是/dev/sda18:

格式化:

  1. mkfs.ext4 -L "boot-jiabao" /dev/sda18

挂载,复制文件:

  1. $ROOTDIR=/mnt/root
  2. mkdir $ROOTDIR
  3. mount -t ext4 /dev/sda18 $ROOTDIR
  4. cp -av /boot $ROOTDIR/
  5. mv -v /boot{,-bak}

在/etc/fstab里面必须指定这一行:

  1. /dev/sda18 /boot ext4 defaults 1 1

安装grub2到这个分区:

  1. ln -svf /dev/sda18 /dev/root
  2. grub-install /dev/sda18

从grub4dos引导这个新分区的grub2:

假设你已安装了grub4dos,只添加一项:

  1. title jiabao-linux
  2. find --set-root /grub/core.img
  3. kernel /grub/core.img

 

基础系统已完成,但他只是一个完整的纯终端环境。所有以后我们需要安装的软件,都基于此环境。下一步我们可以正式的选择我们需要的软件了,包括xorg,GUI桌面,声卡显示,多媒体库等等……

---未完待续---

阅读(2833) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~