定制debian


  http://www.linuxsir.org/bbs/archive/index.php/t-263370.html
  
  1,Debian 的ISO镜像
  从Debian官方网站或其镜像站点的FTP服务器上取得Debian的安装程序盘(businesscard.iso,大约几十M)和网络安装盘(也就是基本系统安装盘netinst.iso,一百多M)的ISO镜像,分别将其解压到(好像是用tar命令,具体记不清了)不同目录中(如 /home/installer和/home/base)
  2,配置网络
  在一部机器上安装Debian基本系统--用netinst.iso,配置好网络。配置方法因联网方式不同而不同,这里我们给出最常用的ADSL配置方法:安装系统时拔掉网线,安装程序提示自动配置网络失败,确定后选暂不配置网络,也可以连着网安装时自动配置网络成功后选返回再选暂不配置。安装配置好并进入系统后以root用户身份运行pppoeconf命令,按提示操作,结束后用pon dsl-provider 命令加载驱动程序模块并拨号上网,poff命令可断开与网络的连接。
  3,获得deb包。
  联网并配置基本系统的源(Debian独特的软件包管理机制,提供软件包池的服务器叫做源,其实是一个../pool目录)并下载需要的包。联网后运行 apt-setup命令并按提示操作设置源,apt-get install 命令从源下载并安装软件包,加-d参数是只下载不安装,这里我们列举一些必要的apt和dpkg命令
  apt是对dpkg前端的封装,能自动满足依赖关系。Debian的apt先进的包管理机制也是我们选它的凭据之一。但Debian非常追求稳定致使软件版本不是最新,我们也不追求新花样,况且新的软件要经过一段时间beta才能投入生产。注意在这里往往是试验很多次的地方,需要重装好多次基本系统,因此建议用一张可引导软盘或光盘运行tar命令来备份整个系统。因为要试验很多次才能确定我们真正需要的包,建议用CVS(或RCS)管理我们每次下载的包(CVS不仅能管理文本文件,如源代码,还能管理二进制文件)为了达到所见即所得的效果还可以直接安装下载的包而不加-d参数。这里暂没有给出CVS命令及参数,请具体查询CVS使用手册。但我们都知道对源码文件管理的命令通过添加参数-KB便可实现对二进制文件的管理。
  cvs 命令格式如下:
  cvs [ global_options ] command [ command_options ] [ command_args ]
  我们筛选的deb包现列如下:
  桌面环境 gnome-desktop-envioroment;
  控制台下的中文环境 zhcon;
  编译器 automake,autorun,m4,binutils,buildessential,debhelper,cvs,rcs,make、gcc、g++,subversion;
  xserver和字体 xwindown-system-core、xfonts-100dpi、xfonts-75dpi、xlibs;
  中文环境 zh-autoconvert、xfonts-intl-chinese,常用字体以下有介绍;
  图片相关 gimp;
  邮件 evolution;
  文档处理 gedit;
  APT前端 synaptic;
  浏览器 mozilla-psm、mozilla-firefox、mozilla-firefox-gnome- support、mozilla-firefox- locale-zh-cn;
  多媒体 tome;
  选Gnome桌面环境是因为它结构更好,更稳定,稳重朴实,效率更高,各大厂商都支持它。我们选择各软件的原因是经过多方的比较,可以说他们是各方面的佼佼者。通过使用很容易发现他们均功能强大,各方面支持良好。
  4,中文化。
  Debian支持中文不是很好,因此我们要自己支持,除了安装ttf-arphic-bkai00mp、ttf-arphic-bsmi00lp、 ttf-arphic-gkai00mp、ttf-arphic-gbsn00lp几个字体包以外还要安装并设置通用输入法平台SCIM,安装SCIM需要至少安装scim、scim-chinese等几个包,配置它要在/etc/X11/下写一配置文件。如果你想加入非官方的字体,比如你从方正买的字体,我建议打成deb包安装,当然bin也行,只是安装程序多写一些罢了。以上我们的deb包准备全了,别忘了给他们备个份。在本次安装盘的定制过程中,我们采用了较简单的方法完成了中文环境的设置--均通过对base-config的修改来一次实现(就是base-config那个包的源码里有予配制文件,改一下,编译了替换tar出来的网络安装盘里那个)。
  5,修改基本系统。
  把我们第一步解压到/home/base下的基本系统进行删减(Debian的基本系统仍然是可修改的。注意:别动udeb包,那是安装程序组件!)将精选后的deb包放到某一目录下,如/home/basesys。这要凭经验进行,弄错了会造成系统不稳定,因此这一步是可选的。完成这一步后我们所需的 deb包已准备齐了。
  6,建立软件池。
  从/var/cache/apt/archives/和/home/basesys (基本系统的)下拷出我们的包放在同一目录下,如/home/debs-src。并把我们自己的包(包括自己编译,下载非官方的....)一并放入。使用 apt-move命令将/home/debs-src/下的deb包move到另一目录如/home/debs-dst/下。接着运行脚本1(参看附录 1),将/home/debs-dst/下的deb包全部移到/home/base/pool/下。
  7,获得重载文件。
  下载/debian/indices/overrides..*.gz到/home/base/pool目录的同级目录下的indices(/home/deb/indices),解压缩overrides文件,并保有原压缩文件。
  8,生成Packages.gz 和 Release :
  建脚本apt.conf、customcd-di.conf、customcd.conf且均存放在custom中
  在含有pool 和 dists文件的目录下运行以下命令:
  apt-ftparchive -c custom/apt.conf generate custom/customcd-di.conf
  apt-ftparchive -c custom/apt.conf release dists/sarge >dists/sarge/Release
  apt-ftparchive -c custom/apt.conf generate custom/customcd.conf
  脚本apt.conf、customcd-di.conf、customcd.conf请参看附录1。
  9,md5校验:
  cd /home/deb/
  mv md5sum.txt md5sum.old
  grep -v -e " f1.txt$" md5sum.old >md5sum.txt
  md5sum isolinux/f1.txt >> md5sum.txt
  10,生成iso:
  cd /home/base/
  mkisofs -T -J -R -no-emul-boot -boot-info-table -b isolinux/isolinux.bin -c boot.cat -o debian.iso /home/base/
  11,自己修改的其他的deb包过程:tasksel,base-config:
  Deb包的制作方法,请参看附录3。
  Tasksel:
  download tasksel_**.tar.gz( 注意版本),解压!我们要求在系统安装过程中只需我们选择“中文桌面”安装程序就可自动安装所有包。进入tasks,修改文件:desktop(修改后的 desktop文件参看附录4)。由于我们只希望桌面环境是GNOME,所以还要修改文件chinese-s、chinese-s-desktop,去掉其中的KDE部分。
  打包:
  dpkg-buildpackage -rfakeroot;
  base-config:
  download base-config_**.tar.gz( 注意版本),解压后我们可看一下其中的目录:主要目录有debian、lib,我们可任选其中的文件完成我们的工作如:postinst、finish等。
  这里我们只是为满足需求,所以并没有按照官方的做法依次进行。比如修改debian什么的,我们只选择了base-config最后运行部分:finish文件,并在其中加入了以下代码:
  #apt-get install fonts
  apt-get install ttf-arphic-bkai00mp
  apt-get install ttf-arphic-bsmi00lp
  #90im-scim
  echo -e "export LANG=zh_CN" "\nexport XMODIFIERS=@im=SCIM" "\nexport GTK_IM_MODULE=scim" "\nscim -d" >/etc/X11/Xsession.d/90im-scim
  通过以上修改中文环境就可在系统运行时配制好了。
  打包:
  dpkg-buildpackage -rfakeroot;
  不要忘了替换!
  12,尾声。
  我们想开发出的是嵌入式操作系统,而现在我们只完成了编译环境的设置。路还很长,我们做的还远远不够,许多工作在等我们,我们将不懈地努力。Linux世界是自由的世界,任何想圆梦的人都可在这里找到圆梦之路。谨以此文献给那些想圆梦的人,希望她能给你们带来一些帮助。
  
  附录0:
  参考资料:
  Debian APT HOWTO
  Debian GNU/Linux FAQ
  DebianInstallerBuild
  cdd
  Hacking the debian-installer ISO image
  《Red Hat Linux 安全与优化》
  Debian 的官方网站资料
  中国Linux社区 资料
  附录1
  脚本1
  
  #!/bin/bash
  
  function print_usage {
  echo
  echo "copy-new-debs-to-pool [--move] [--keep-old] dir-to-copy add-to-dir"
  echo
  echo "paths must be absolute"
  echo "and must point to the directory in which the pool subdirectory resides"
  echo "The pool directory must have main contrib and non-free subdirectories"
  echo
  }
  
  if [ "$1" = "--move" ] ; then
  MOVE=1
  if [ "$2" = "--keep-old" ] ; then
  KEEP=1
  else
  KEEP=0
  fi
  else
  MOVE=0
  if [ "$1" = "--keep-old" ] ; then
  KEEP=1
  else
  KEEP=0
  fi
  fi
  
  if [ -z "$1" ]; then
  print_usage
  exit
  fi
  
  if [ -z "$2" ]; then
  print_usage
  exit
  fi
  
  if [ $MOVE -eq 1 -a -z "$3" ]; then
  print_usage
  exit
  else
  if [ $KEEP -eq 1 -a -z "$3" ]; then
  print_usage
  exit
  fi
  fi
  
  if [ $MOVE -eq 1 -a $KEEP -eq 1 -a -z "$4" ]; then
  print_usage
  exit
  fi
  
  if [ $MOVE -eq 0 -a $KEEP -eq 0 ]; then
  RC1DIR=$1
  RC2DIR=$2
  else
  if [ $MOVE -eq 1 -a $KEEP -eq 1 ]; then
  RC1DIR=$3
  RC2DIR=$4
  else
  RC1DIR=$2
  RC2DIR=$3
  fi
  fi
  
  echo "Copying from $RC1DIR to $RC2DIR"
  
  TMPFILE=`tempfile`
  
  cd $RC1DIR
  find pool -type f | sort >$TMPFILE
  rc1base=$RC1DIR
  rc2base=$RC2DIR
  cd -
  for rc1file in `cat $TMPFILE`; do
  pkgfullname=`basename $rc1file`
  pkgname=`echo $pkgfullname | cut -f1 -d_`
  rc1ver=`echo $pkgfullname | cut -f2 -d_`
  pooldir=`dirname $rc1file`
  pkgend=`echo $pkgfullname | cut -f3 -d_`
  rc2file=`ls $rc2base/$pooldir/$pkgname\_*\_$pkgend 2>/dev/null`
  if [ "$rc2file" ]; then
  rc2maxver="!!!!!!!!!!!!!!!!!"
  rc2maxfile="!!!!!!!!!!!!!!!!"
  for rc2match in $rc2file; do
  rc2pkgfullname=`basename $rc2match`
  rc2ver=`echo $rc2pkgfullname | cut -f2 -d_`
  if [ "$rc2ver" ">" "$rc2maxver" ];
  then rc2maxver=$rc2ver
  rc2maxfile=$rc2match
  fi
  done
  rc2file=$rc2maxfile
  if [ $rc1ver '>' $rc2maxver ] ; then
  echo "Copying $rc1file newer than $rc2file"
  if [ $MOVE -eq 1 ] ; then
  mv -f $rc1base/$rc1file `dirname $rc2base/$rc1file`
  if [ $KEEP -eq 1 ]; then
  echo "Not removing obsolete $rc2file"
  else
  echo "Removing obsolete $rc2file"
  rm -f $rc2base/$rc2file
  fi
  else
  cp $rc1base/$rc1file `dirname $rc2base/$rc1file`
  if [ $KEEP -eq 1 ]; then
  echo "Not removing obsolete $rc2file"
  else
  rm -f $rc2base/$rc2file
  fi
  fi
  continue
  fi
  else
  echo "Copying $pkgname not in $RC2DIR"
  install -d $RC2DIR/`dirname $rc1file`
  if [ $MOVE -eq 1 ]; then
  mv -f $RC1DIR/$rc1file `dirname $RC2DIR/$rc1file`
  else
  cp $RC1DIR/$rc1file `dirname $RC2DIR/$rc1file`
  fi
  fi
  done
  
  rm -f $TMPFILE
  
  popd
  apt.conf:
  
  APT {
  FTPArchive {
  Release {
  Origin "debian-cd";
  Label "yoursarge";
  Suite "testing";
  Version "0.1";
  Codename "sarge";
  Architectures "i386";
  Components "main contrib";
  Description "Your Sarge CD Set";
  };
  };
  };
  customcd-di.conf:
  
  Dir {
  ArchiveDir "/home/cdrom";
  OverrideDir "indices";
  CacheDir "/tmp";
  };
  
  TreeDefault {
  Directory "pool/";
  };
  
  BinDirectory "pool/main" {
  Packages "dists/sarge/main/debian-installer/binary-i386/Packages";
  BinOverride "override.sarge.main";
  ExtraOverride "override.sarge.extra.main";
  };
  
  Default {
  Packages {
  Extensions ".udeb";
  Compress ". gzip";
  };
  
  Contents {
  Compress "gzip";
  };
  };
  
  customcd.conf:
  
  Dir {
  ArchiveDir "/home/cdrom";
  OverrideDir "indices";
  CacheDir "/tmp";
  };
  
  TreeDefault {
  Directory "pool/";
  };
  
  BinDirectory "pool/main" {
  Packages "dists/sarge/main/binary-i386/Packages";
  BinOverride "override.sarge.main";
  ExtraOverride "override.sarge.extra.main";
  };
  
  BinDirectory "pool/contrib" {
  Packages "dists/sarge/contrib/binary-i386/Packages";
  BinOverride "override.sarge.contrib";
  ExtraOverride "override.sarge.extra.contrib";
  };
  
  BinDirectory "pool/non-free" {
  Packages "dists/sarge/non-free/binary-i386/Packages";
  BinOverride "override.sarge.non-free";
  ExtraOverride "override.sarge.extra.non-free";
  };
  
  Default {
  Packages {
  Extensions ".deb";
  Compress ". gzip";
  };
  
  Contents {
  Compress "gzip";
  };
  };
  
  
  脚本apt.conf:
  APT {
  FTPArchive {
  Release {
  Origin "debian-cd";
  Label "yoursarge";
  Suite "testing";
  Version "0.1";
  Codename "sarge";
  Architectures "i386";
  Components "main contrib";
  Description "Your Sarge CD Set";
  };
  };
  };
  
  脚本customcd-di.conf:
  Dir {
  ArchiveDir "/debian";
  OverrideDir "indices";
  CacheDir "/tmp";
  };
  
  TreeDefault {
  Directory "pool/";
  };
  
  BinDirectory "pool/main" {
  Packages "dists/sarge/main/debian-installer/binary-i386/Packages";
  BinOverride "override.sarge.main";
  ExtraOverride "override.sarge.extra.main";
  };
  
  Default {
  Packages {
  Extensions ".udeb";
  Compress ". gzip";
  };
  
  Contents {
  Compress "gzip";
  };
  };
  
  脚本customcd.conf :
  Dir {
  ArchiveDir "/debian";
  OverrideDir "indices";
  CacheDir "/tmp";
  };
  
  TreeDefault {
  Directory "pool/";
  };
  
  BinDirectory "pool/main" {
  Packages "dists/sarge/main/binary-i386/Packages";
  BinOverride "override.sarge.main";
  ExtraOverride "override.sarge.extra.main";
  };
  
  BinDirectory "pool/contrib" {
  Packages "dists/sarge/contrib/binary-i386/Packages";
  BinOverride "override.sarge.contrib";
  ExtraOverride "override.sarge.extra.contrib";
  };
  
  BinDirectory "pool/non-free" {
  Packages "dists/sarge/non-free/binary-i386/Packages";
  BinOverride "override.sarge.non-free";
  ExtraOverride "override.sarge.extra.non-free";
  };
  
  Default {
  Packages {
  Extensions ".deb";
  Compress ". gzip";
  };
  
  Contents {
  Compress "gzip";
  };
  };
  
  
  
  附录2
  deb包的制作:
  首先请准备好以下工具:
  dpkg、dpkg-deb、 dpkg-dev、dh-make、debhelper、devscripts、fakeroot、lintian
  建立方法1(重编译Debian包好的source包);
  apt-get source package;
  cd package-version;
  cd debian;
  编辑 rules;
  然后退回原目录dpkg-buildpackage -rfakeroot;
  建立方法2(编译非Debian包好的source包);
  获取源码后(tar.gz)untar;
  改目录为package-version;
  cd package-version;
  dh-make;
  cd debian;
  编辑 rules;
  然后退回原目录dpkg-buildpackage -rfakeroot;
  
  附录3
  desktop文件:
  
  Task: desktop
  Relevance: 8
  Section: user
  Description: Desktop environment
  This task provides basic "desktop" software, including a variety
  of session managers, file managers and web browsers. It incorporates
  both the GNOME and KDE desktops, and provides a display manager
  which lets the user choose between the two.
  Key:
  x-window-system-core
  # The basics of gnome, not the whole thing.
  gnome-desktop-environment
  # This could probably be reduced more.
  Packages:
  gdm
  gnome
  planner
  totem
  rhythmbox
  # gnome whines if there's no xscreensaver
  xscreensaver
  # a screen saver does silly things without this
  fortune-mod
  menu
  mozilla-firefox
  mozilla-psm
  mozilla-firefox-gnome- support
  mozilla-firefox- locale-zh-cn
  gftp
  gaim
  evolution
  # mozilla printing
  gimp
  # openoffice is the best word processor / office suite at the moment
  #openoffice.org-bin
  # openoffice.org-l10n-zh-cn
  # commented out for reason explained in changelog 2.11
  # openoffice.org
  # openoffice.org-help-en
  # openoffice.org-help-zh-cn
  myspell-en-us
  myspell-en-gb
  totem
  jfbterm
  zhcon
  language-env
  zh-autoconvert
  debian-zh-faq-s
  manpages-zh
  doc-linux-zh-s
  fortune-zh
  rxvt-ml
  mlterm
  rxvt-unicode-ml
  cpanel
  scim-chinese
  scim-tables-zh
  chinput
  stardic
  x-ttcidfont-conf
  xfonts-intl-chinese
  xfonts-intl-chinese-big
  ttf-arphic-gbsn00lp
  ttf-arphic-gkai00mp
  unifont
  bg5ps
  vim
  less
  subversion
  gcc
  debhelper
  build-essential
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值