<< Back to man.ChinaUnix.net


[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一页 ]

Debian 参考手册
第 6 章 - Debian软件包管理


使用ATP下载软件包时,请确保使用了squid设置本地HTTP代理,如果有可能,请设置http_proxy环境变量或在/etc/apt/apt.confhttp值,这样可极大的改善网络升级的性能,特别是在局域网中多台Debian机器同时升级时。

尽管apt_preferences(5)的pin功能十分强大,但它并不能解决所有关联问题,因为关联需求总倾向于更新其它基础程序包。

chroot, 第 8.6.33 节中所描述的使用方法非常适于 将系统的稳定性和可使用大量新版软件两个优点结合在一起。

本章基于Woody系统撰写的,但大部分信息均适用于Potato系统(除了apt_preferences(5)/etc/apt/preferences的相关主题)。


6.1 概述

如果你没精力阅读所有的开发文档,那么先看看本章的内容,开始体验Debian testing/unstable的威力吧 :-)


6.1.1 主要工具

     dselect   — 使用菜单界面的软件包管理工具(最上层的包管理工具)
     dpkg      — 安装软件包(管理软件包中的文件)
     apt-get   — 安装软件包(管理软件包,CLI APT)
     tasksel   — 安装任务套件(管理面向某方面任务的一套软件包)
     aptitude  — 安装软件包(管理软件包和任务套件,ncurses APT)
     deity     — 另一种ncurses APT
     synaptic, gsynaptic — 另一种GUI APT

它们不是同级的工具。dselect运行于APT(命令行命令是apt-get)和dpkg之上。

APT使用/var/lib/apt/lists/*来跟踪可用的软件包,而dpkg使用的是/var/lib/dpkg/available。如果直接用apt-get或同类工具如aptitude等来安装软件包,千万别忘了更新/var/lib/dpkg/available文件,可以使用dselect的[U]pdate选项或在运行dselect updatetaskseldpkg -l前执行shell命令行“dselect update”。

在处理关联软件包的方式上,apt-get会自动搜索下载depends类软件包,但不会理睬recommendssuggests类软件包,而dselect在软件包的选择方面采用菜单方式操作,对dependsrecommendssuggests三类相关软件包均给出提示。aptitude则提供了选项下载安装所有dependsrecommendssuggests类软件包。 参阅软件包关联性, 第 2.2.8 节


6.1.2 方便的工具

     apt-cache         - 在本地缓冲区检查包文件
     dpkg-reconfigure  - 重新配置已安装的软件包(如果它是使用debconf进行配置的)
     dpkg-source       - 管理源码包
     dpkg-buildpackage - 自动生成包文件
     ...

6.2 Debian软件包管理基础

成套地安装软件包称之为task,还可以使用软件包管理工具逐个地安装软件包或升级系统。 亦可参阅Debian系统安装提示, 第 3 章发行版升级, 第 5 章应急的编辑器, 第 11.2 节


6.2.1 使用taskselaptitude进行task安装

taskselDebian的任务安装器,系统安装过程中它为用户提供了一种简易软件包选择方式。

如果你希望完装的某项常规功能包含了许多软件包,最好的办法就是使用它来安装。运行如下命令:

     # dselect update
     # tasksel

aptitude亦可访问task。用它不仅可以选择tasks还可以对task选项菜单中的软件包进行逐个取舍。


6.2.2 设置APT系统

使用testing发布版的用户,有时需要对系统进行有选择性地升级,这时可按将APT升级到Woody版本, 第 5.1 节中描述的方法设置APT系统(>Woody),使用其apt_preferences(5)功能。

首先,在/etc/apt/sources.list中添加stabletestingunstable镜像源,接着编辑/etc/apt/preferences,设置合适的Pin-Priority。 [1]

     Package: *
     Pin: release a=stable
     Pin-Priority: 500
     
     Package: *
     Pin: release a=testing
     Pin-Priority: 600
     
     Package: *
     Pin: release a=unstable
     Pin-Priority: 50

6.2.3 dselect

启动程序,dselect会自动选上所有“Required”、“Important”和“Standard”类软件包,在Potato系统中,某些大型应用程序如TeX和Emacs处于这些分类中,在初次安装系统时最好手工取消对它们的选择(输入“_”)。在Woody中,这些大型应用程序被移入“Optional”类软件包。

dselect的用户界面有点怪。有4个相似命令(注意是大写字母!):

     Key-stroke  Action
     Q           退出。确认当前的选择然后退出。
                 (override dependencies)
     R           恢复!我放弃我做出的选择
     D           不管它!我不管dselect有什么建议,照我说的做!
     U           照系统的建议做

使用DQ可以选择有冲突的选项,你要自负风险,所以使用这些命令要小心。当前dselect是一款成熟的菜单驱动式工具,在对suggestsrecommends类软件包的选择控制方面,它提供相当棒的微操作能力。

/etc/dpkg/dselect.cfg中加上一行包含“expert”选项以减少干扰。对于速度慢的机器,请在其它速度快的机器上运行dselect选好软件包,然后用apt-get install安装它们。

对于没有定义Pin-Priority的软件包,dselect不会访问它们。


6.2.4 aptitude

aptitude是一款新的菜单驱动式软件包安装工具,与dselect很相似。它亦可作为命令行工具apt-get的替代品。参阅aptitude(1)

aptitude可接受单字符命令,通常是小写字母。

     Key-stroke  Action
     F10         菜单
     ?           键盘命令帮助
     u           更新软件包信息
     g           下载并安装选定的软件包
     q           保存修改并退出当前屏幕
     x           放弃修改并退出当前屏幕
     Enter       浏览某软件包的相关信息

aptitude提供了选项可自动选取所有dependsrecommendssuggests类软件包。可在F10 -> Options -> Dependency handling菜单中设置它。

通过aptitude可访问某软件包的所有版本。


6.2.5 apt-cacheapt-get命令

还是以上面使用testing发布版的用户为例,可使用下列命令管理系统:

在上面的例子中使用-u选项的作用是在实际升级之前将所有将要升级的软件包列出,并提示用户确认。下面的操作可将-u设置为默认行为:

     $ cat >> /etc/apt/apt.conf << .
     // Always show packages to be upgraded (-u)
     APT::Get::Show-Upgraded "true";
     .

使用-s可进行模拟升级,并不进行真正的升级行为。


6.2.6 跟踪某Debian发行版

根据个人的喜好,选择要跟踪的Debian发行版,然后修改设置APT系统, 第 6.2.2 节的样例文件/etc/apt/preferences

     track stable:            将testing的Pin-Priority改为50
     track testing:           保持上面的设置不变
     track testing(unstable): 将unstable的Pin-Priority改为500
     track unstable(testing): 将unstable的Pin-Priority改为800

有关如何选定Pin-Priority的说明:在上表中,从上而下代表了某个版本 从上个版本刚刚发布之后到下一版进入冻结期之前这段时间经历的各个阶段。

请注意,跟踪testing发行版的Debian有一个负面影响,安全补丁的更新很慢。

请注意,如果将Debian各版本混合,例如将testing混入stable或将unstable混入stable,这会造成众多关键软件包不自觉地从testing处或unstable处获得,结果引起许多麻烦。

如何对/etc/apt/preferences进行设置,将某些关键包锁定在成熟版本,而让其它非关键包跟踪不太成熟的新版本,可参考样例目录中的preferences.testingpreferences.unstable文件。另一方面,preferences.stable强制所有软件包降级到“stable”。


6.2.7 将所有软件包降级到stable

要将所有软件包降级到stable,可按下面的方法编辑/etc/apt/preferences

     Package: *
     Pin: release a=stable
     Pin-Priority: 1001

然后运行“apt-get upgrade”,由于Pin-priority > 1000而引起强制降级。注意,该操作可能会在关联性方面发生一点问题。


6.2.8 /etc/apt/preferences概述

设置APT系统, 第 6.2.2 节中展示的/etc/apt/preferences样例文件里,首行Package: *表示该段落指令作用于所有软件包。可以通过指定软件包名称来为某个特定的软件包设置指定的Pin-Priority。

接下来的一行是Pin: release a=stable表示apt-get从包含Archive: stable节的Release文件所在的目录获得Packages.gz文件。

最后一行Pin-Priority: 500指定Pin-Priority为500。

如果多个软件包同名,系统通常会安装拥有最高Pin-Priority的软件包。

在此,Pin-Priority表示:

按下面的方法设置/etc/apt/apt.conf可获得与--target-release一样的效果:

     # echo 'APT::Default-Release "testing";' >> /etc/apt/apt.conf

命令行选项--target-release/etc/apt/apt.conf中的设置会顶替/etc/apt/preferences的设置。在玩/etc/apt/preferences的时候小心两者冲突。


6.3 Debian生存工具

掌握了这些知识,就能让你的系统“青春永驻”了:-)


6.3.1 检测程序错误寻求帮助

如你使用某个软件包出现问题,在寻求帮助或发送错误报告之前请确认查看过下列站点(lynxlinksw3m同样好用):

     $ lynx http://bugs.debian.org/
     $ lynx http://bugs.debian.org/package-name  # 如果你知道软件包名称
     $ lynx http://bugs.debian.org/bugnumber     # 如果你知道错误序号

在Google(www.google.com)中使用关键字“site:debian.org”搜索。

如有疑问,可阅读帮助文件。设置CDPATH如下:

     export CDPATH=.:/usr/local:/usr/share/doc

然后输入

     $ cd packagename
     $ pager README.Debian # if this exists
     $ mc

更多技术支持资源列在Debian技术支持, 第 15 章


6.3.2 APT升级错误及解决方法

unstable/testing进行升级时可能出现升级Debian系统, 第 5.3 节中提到的软件包关联问题。多数情况下,是因为升级的软件包所需的新增的关联包没有安装。可使用如下方法解决:

     # apt-get dist-upgrade

如果这招无效,可以重复下面的方法至到问题解决:

     # apt-get upgrade -f         # continue upgrade even after error
     ... 或
     # apt-get dist-upgrade -f    # continue dist-upgrade even after error

一些的确存在问题的升级脚本会引起持续出错。最好的解决方法是检查该软件包的安装脚本/var/lib/dpkg/info/packagename.{post-,pre-}{install,removal}然后运行:

     # dpkg --configure -a    # 配置所有未完成安装的软件包

如果脚本报告缺少配置文件,查看一下/etc中相关的配置文件。如果配置文件有.new扩展名(或其它类似的扩展名),去掉(mv)它的扩展名。

从unstable/testing进行升级时可能出现软件包关联问题。可用这个方法智取:

     # apt-get install -f package # 重载坏关联

还可以用equivs包来解决此类问题。参阅/usr/share/doc/equivs/README.Debian and equivs软件包, 第 6.5.2 节


6.3.3 使用dpkg救助

如果系统的dselect(APT)受损无法完成安装,可使用dpkg来恢复:

     # cd /var/cache/apt/archives
     # dpkg -i libc6* libdb2* perl*
     # dpkg -i apt* dpkg* debconf*
     # dpkg -i *  # 直至不再出错

如果软件包丢失,用下述方法从镜像源下载:

     # mc            # use "FTP link" pointing to Debian FTP server

现在,在HTTP/FTP服务器上,软件包的真正位置不再是传统的/dist目录而是新的/pool目录。(参阅pool目录, 第 2.1.10 节

然后开始安装:

     # dpkg -i /var/cache/apt/archives/packagefile.deb

对于坏关联,可这样解决:

     # dpkg --ignore-depends=package1,... -i packagefile.deb
     # dpkg --force-depends -i packagefile.deb
     # dpkg --force-depends --purge package
     # dpkg --force-confmiss -i packagefile.deb # Install missing conffile

6.3.4 恢复软件包选择状态的数据

如果/var/lib/dpkg/status因为某种原因坏掉了,Debian系统将会完全丢失软件包选择状态的数据。赶快到/var/lib/dpkg/status-old/var/backups/dpkg.status.*下找找旧的/var/lib/dpkg/status文件。

/var/backups/放在其它的分区是个好习惯,因为该目录包含了许多非常重要的系统数据。

如果旧的/var/lib/dpkg/status文件也坏了,仍可以从/usr/share/doc/下的目录进行恢复这些信息。

     # ls /usr/share/doc | \
       grep -v [A-Z] | \
       grep -v '^texmf$' | \
       grep -v '^debian$' | \
       awk '{print $1 " install"}' | \
       dpkg --set-selections
     # dselect --expert # reinstall system, de-select as needed

6.3.5 /var被删除后如何恢复系统

/var目录包含着定时更新的数据如mail,它们很容易遭破坏。将目录放到别的分区可降低风险,如果最坏的事情发生了,可以通过重建/var目录来挽救Debian系统。

从相同或旧版本的最简Debian系统中取得/var目录的内容框架,例如var.tar.gz,然后它放入受损系统的root目录,接着

     # cd /
     # mv var var-old      # 如果剩有有用内容
     # tar xvzf var.tar.gz # 使用Woody框架文件
     # aptitude            # 或用dselect

上述步骤可使系统恢复工作。使用恢复软件包选择状态的数据, 第 6.3.4 节中描述的技术加速软件包选择数据的恢复。 ([FIXME]:该过程需要更多的实践来检验)


6.3.6 为无法启动的系统安装软件包

使用Debian急救软盘/CD或从多启动Linux系统其它分区启动。 See 启动系统, 第 8.1 节. 将无法启动的系统挂载到/target并使用dpkg的chroot安装模式。

     # dpkg --root /target -i packagefile.deb

接下来就可以着手配置并解决问题。

如是只是由于lilo损坏而造系统无法启动,可使用标准Debian急救盘启动。假设你的root分区位于/dev/hda12且想使用runlevel 3,在启动提示符输入:

     boot: rescue root=/dev/hda12 3

这样,你就可以使用软盘中内核启动系统,新系统的功能基本齐全。(可能丢失某些内核特性或模块)


6.3.7 如果dpkg命令出错该怎么办

如果dpkg损坏就不能安装任何.deb文件。下面的操作可帮助你修复这种状况。(在第一行,你可将“links”替换成你喜欢的浏览器。)

     $ links http://http.us.debian.org/debian/pool/main/d/dpkg/
       ... 下载完好的dpkg_version_arch.deb
     $ su
     password: *****
     # ar x dpkg_version_arch.deb
     # mv data.tar.gz /data.tar.gz
     # cd /
     # tar xzfv data.tar.gz

i386,亦可用http://packages.debian.org/dpkg作为URL。


6.4 Debian必杀技

有了这些命令的启迪,你将会从无休止的升级冲突的地狱中解放出来,达到Debian天堂。 :-)


6.4.1 文件信息

查找特定文件所属的软件包:

     $ dpkg {-S|--search} pattern # search for pattern in installed packages
     $ wget http://ftp.us.debian.org/debian/dists/sarge/Contents-i386.gz
     $ zgrep -e pattern Contents-i386.gz
                  # find filename-pattern of files in the debian archive

或使用专门的软件包命令:

     # apt-get install dlocate  
                      # conflicts with slocate (secure version of locate)
     $ dlocate filename         # fast alternative to dpkg -L and dpkg -S
     ...
     # apt-get install auto-apt # on-demand package installation tool
     # auto-apt update          # create db file for auto-apt
     $ auto-apt search pattern  
                     # search for pattern in all packages, installed or not

6.4.2 软件包信息

搜索并显示包文件的信息。编辑/etc/apt/sources.list,让APT指向正确的包文件。如果想了解testing/unstable中的相应软件包与当前系统安装的软件包有何差别,使用apt-cache policy—更好。

     # apt-get   check           # 更新缓冲区并检查损坏的软件包
     $ apt-cache search  pattern # 按文本描述搜索软件包
     $ apt-cache policy  package # 软件包的priority/dists信息
     $ apt-cache show -a package # 显示所有dists中软件包描述信息
     $ apt-cache showsrc package # 显示相应源码包的信息
     $ apt-cache showpkg package # 软件包调试信息
     # dpkg  --audit|-C          # 搜索未完成安装的软件包
     $ dpkg {-s|--status} package ... # 已安装软件包描述
     $ dpkg -l package ...       # 已安装软件包的状态(每个占一行)
     $ dpkg -L package ...       # 列出软件包安装的文件的名称

Woody发布版没有为apt-cache showsrc建档,但该命令可用:)

你也这可这样查看软件包信息(我用mc浏览):

     /var/lib/apt/lists/*
     /var/lib/dpkg/available

比较下面的文件可以确切了解最近的安装过程对系统造成了那些改变。

     /var/lib/dpkg/status
     /var/backups/dpkg.status*

6.4.3 使用APT进行全自动系统安装

进行全自动安装,要在/etc/apt/apt.conf中加上一行:

     Dpkg::Options {"--force-confold";}

另一种等阶的方法是运行apt-get -q -y packagename。这种方法可能产生严重的负作用,所以使用起来要小心。参阅apt.conf(5)dpkg(1)

安装完毕以后,可以用重新配置已安装软件包, 第 6.4.4 节中的方法配置特定的软件包。


6.4.4 重新配置已安装软件包

使用下列方法重新配置已安装软件包。

     # dpkg-reconfigure --priority=medium package [...]
     # dpkg-reconfigure --all   # 重新配置所有的软件包
     # dpkg-reconfigure locales # 生成别的locales
     # dpkg-reconfigure --p=low xserver-xfree86 # 重新配置X服务器

如果你想永久改变debconf对话框模式,可这么做。

某些程序用于生成特殊的配置脚本。

     apt-setup     - 创建/etc/apt/sources.list
     install-mbr   - 安装主引导(Master Boot Record)管理器
     tzconfig      - 设定本地时间
     gpmconfig     - 设置gpm鼠标daemon
     sambaconfig   - 在Potato中配置Samba(Woody使用debconf来配置)
     eximconfig    - 配置Exim (MTA)
     texconfig     - 配置teTeX
     apacheconfig  - 配置Apache (httpd)
     cvsconfig     - 配置CVS
     sndconfig     - 配置声音系统
     ...
     update-alternatives - 设定默认启动命令,例如设定vi启动vim
     update-rc.d         - System-V init脚本管理工具
     update-menus        - Debian菜单系统
     ...

6.4.5 删除软件包

删除软件包但保留其配置文件:

     # apt-get remove package ...
     # dpkg  --remove package ...

删除软件包并删除配置文件:

     # apt-get remove --purge package ...
     # dpkg    --purge        package ...

6.4.6 阻止旧软件包升级

举个例子,要阻止libc6libc6-dev通过dselect或使用apt-get -u upgrade package命令升级,可执行:

     # echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections

这种方法不影响apt-get -u install package命令操作。要阻止apt-get -u upgrade packageapt-get -u dist-upgrade命令对软件包执行的强制自动降级行为,可在/etc/apt/preferences中加上:

     Package: libc6
     Pin: release a=stable
     Pin-Priority: 2000

这里“Package:”后不能使用通配符如“libc6*”,如果要保持所有与glibc源码包相关的二进制包的版本同步,可以明确的列出它们。

该命令可以显示处于“阻止”状态的软件包:

     dpkg --get-selections "*"|grep -e "hold$"

6.4.7 stable/testing/unstable混合系统

apt-show-versions可以列出发行版中可用软件包的版本。

     $ apt-show-versions | fgrep /testing | wc
     ... 你有多少testing软件包
     $ apt-show-versions -u
     ... 列出可升级的软件包
     $ apt-get install `apt-show-versions -u -b | fgrep /unstable`
     ... 将所有unstable软件包升级到最新版本

6.4.8 删除缓存包文件

使用APT安装软件包会在/var/cache/apt/archives目录留下缓存文件,要清除这些文件可使用:

     # apt-get autoclean # removes only useless package files
     # apt-get clean     # removes all cached package files

6.4.9 记录/拷贝系统配置

对软件包选择情况进行本地备份:

     $ dpkg --get-selections "*" >myselections   # or use \*

“*”使myselections包含那些被指定“完全删除(purge)”的文件。

你可将这个文件发送到另一台电脑并在那儿按文件中的选择进行软件包安装。

     # dselect update
     # dpkg --set-selections <myselections
     # apt-get -u dselect-upgrade    # or dselect install

6.4.10 向stable系统引入软件包

对stable系统进行部分升级,在软件运行环境中重新编译源码的确是个诱人的想法,这样可以避免由于关联关系不得不对大量软件包升级。首先,将下列镜像源加入/etc/apt/sources.list

     deb-src http://http.us.debian.org/debian testing \
      main contrib non-free
     deb-src http://non-us.debian.org/debian-non-US testing/non-US \
      main contrib non-free
     deb-src http://http.us.debian.org/debian unstable \
      main contrib non-free
     deb-src http://non-us.debian.org/debian-non-US unstable/non-US \
      main contrib non-free

由于屏幕输出的限制,上述每条deb-src命令均分成了2行,实际上在sources.list中它们均为单行。

然后下载源码并在本地生成软件包:

     $ apt-get source package
     $ dpkg-source -x package.dsc
     $ cd package-version
       ... 查找需要的软件包(编译所需的关联包列在.dsc文件中)并安装它们,
           你还需要“fakerroot”软件包。
     
     $ dpkg-buildpackage -rfakeroot 
     
       ...or (no sig)
     $ dpkg-buildpackage -rfakeroot -us -uc # use "debsign" later if needed
     
       ...Then to install
     $ su -c "dpkg -i packagefile.deb"

通常,需要安装一些带“-dev”后缀的软件包以满足关联关系。debsigndevscripts软件包中。auto-apt可以轻松解决这些关联问题。请使用fakeroot,如是没有必要,就别使用root帐号。

在Woody中,这些关联问题已被简化。例如,编译pine源码包:

     # apt-get build-dep pine
     # apt-get source -b pine

6.4.11 本地软件包文件

为了创建与APT和dselect系统兼容的本地软件包文件,需要创建Packages(Packages),包中文件要放在特定的目录树中。

Debian官方包文件喜欢存放于本地deb仓库,下面就来创建仓库:

     # apt-get install dpkg-dev
     # cd /usr/local
     # install -d pool # 软件包存放的物理地址
     # install -d dists/unstable/main/binary-i386
     # ls -1 pool | sed 's/_.*$/ priority section/' | uniq > override
     # editor override # adjust priority and section
     # dpkg-scanpackages pool override /usr/local/ \
        > dists/unstable/main/binary-i386/Packages
     # cat > dists/unstable/main/Release << EOF
     Archive: unstable
     Version: 3.0
     Component: main
     Origin: Local
     Label: Local
     Architecture: i386
     EOF
     # echo "deb file:/usr/local unstable main" \
        >> /etc/apt/sources.list

还可以这样快速创建一个本地deb仓库:

     # apt-get install dpkg-dev
     # mkdir /usr/local/debian
     # mv /some/where/package.deb /usr/local/debian
     # dpkg-scanpackages /usr/local/debian /dev/null | \
       gzip - > /usr/local/debian/Packages.gz
     #  echo "deb file:/usr/local/debian ./" >> /etc/apt/sources.list

/etc/apt/sources.list中设置相应镜像源入口地址,就可以通过HTTP或FTP方式远程访问存放在其中的包文件了。


6.4.12 转化或安装外来二进制软件包

alien可将其它格式的二进制软件包如Redhat的rpm、Stampede的slp、Slackware的tgz和Solaris的pkg等转化成Debian的deb格式软件包,如果你想在自己的系统上使用别的Linux发行版中的软件包,可使用alien将它转化成系统首选的软件包格式后安装。alien还支持LSB的软件包。


6.4.13 校验已安装软件包

debsums可以校验已安装软件包的MD5编码,对某些软件包没有可用的MD5编码,系统管理员可使用一个临时的解决办法:

     # cat >>/etc/apt/apt.conf.d/90debsums
     DPkg::Post-Install-Pkgs {"xargs /usr/bin/debsums -sg";};
     ^D

per Joerg Wendland <joergland@debian.org> (untested).


6.4.14 优化sources.list

简而言之,我尝试过用各种优化方法来创建sources.list,但任何一种方法对我这个住在美国的人来说都没有明显的改善。最后我还是用apt-setup手工选择近一点的站点。

apt-spy会根据站点回应时间和带宽自动创建sources.listnetselect-apt会创建一个更完整的sources.list文件,但它使用更落后的方法来选择镜像站点(比较ping time)。

     # apt-get install apt-spy
     # cd /etc/apt ; mv sources.list sources.list.org
     # apt-spy -d testing -l sources.apt

6.5 其它Debian特性


6.5.1 dpkg-divert命令

使用文件转移(diversions)的方法可以强令dpkg将文件安装到转移目录而非默认目录。对于某个引起冲突的文件,可以在Debian软件包脚本中使用Diversions将它安装到别的目录。系统管理员还可以使用diversion来重载软件包配置文件,或者用来保留某些旧配置文件(这些文件没有在conffiles中登记)当安装新版软件时这些文件会被覆盖。(参阅保存本地设置, 第 2.2.4 节)。

     # dpkg-divert [--add]  filename # add "diversion"
     # dpkg-divert --remove filename # remove "diversion"

记住,不到万不得已不要使用dpkg-divert


6.5.2 equivs软件包

如果你从源码编译程序,最好将它做成本地Debian化软件包(*.deb)。最新的方法是使用equivs

     Package: equivs
     Priority: extra
     Section: admin
     Description: Circumventing Debian package dependencies
      This is a dummy package which can be used to create Debian
      packages, which only contain dependency information.

6.5.3 自选命令

想用vi命令启动vim,可使用update-alternatives来定义:

     # update-alternatives --display vi
     ...
     # update-alternatives --config vi
       Selection    Command
     -----------------------------------------------
           1        /usr/bin/elvis-tiny
           2        /usr/bin/vim
     *+    3        /usr/bin/nvi
     
     Enter to keep the default[*], or type selection number: 2

Debian自选命令设定系统中的这些项目,都是/etc/alternatives下的链接文件。

想设置你喜爱的X window环境,执行update-alternatives来指定/usr/bin/x-session-manager/usr/bin/x-window-manager。详情参阅自定义X会话, 第 9.4.5.1 节

/bin/sh是指向/bin/bash/bin/dash的链接。想兼容旧的Bash脚本,使用/bin/bash比较保险,但更好还是使用/bin/dash,因为它更符合POSIX标准。升级到2.4版Linux内核,系统一般将它设置为/bin/dash


6.5.4 System-V init文件和运行级别

可在/etc/inittab中设定系统启动的默认运行级别(runlevel)。

不同于其它的发行版,Debian将运行级别的管理职责完全赋予系统管理员。Debian更倾向于使用update-rc.d脚本来管理它那System-V风格的init

下面的命令表示,按优先级数字20(normal)所指定的次序,分别在runlevel 1、2、3中启动/etc/init.d/name,在runlevel 4、5中停止它们:

     # update-rc.d name start 20 1 2 3 . stop 20 4 5 .

要删除init.d脚本中存在的符号链接可执行:

     # update-rc.d -f name remove

要编辑运行级别,我通常在mc中用Alt-Enter拷贝链接名,然后在shell提示符下使用mv命令手工编辑,例如:

     # mv S99xdm K99xdm # 禁用xdm (X display manager)

有时为了进行临时调试,我甚至在init.d脚本的开头加入exit 0来禁用一个daemon,反正它们都在conffiles登记过。


6.5.5 停止daemon服务

Debian发行版非常注重系统安全,并期望系统管理员能担此重任。它将系统的易用性放在了第二位,许多daemon服务都定位在最高安全级别,因而,默认安装状态下系统只启动最少的(甚至没有)可用的服务。

如果拿不定把握(有关Exim、DHCP...),可执行ps aux或检查/etc/init.d/*/etc/inetd.conf下的内容,还可以使用通过PAM和login实现访问权限管理, 第 9.2.1 节中提到的方法检查/etc/hosts.denypidof命令也很有用(参阅pidof(8)

在新版的Debian中,默认状态下X11不允许TCP/IP(远程)连接。参阅X的TCP/IP连接, 第 9.4.6 节,使用SSH进行X传送也是禁用的,参阅X远程联接:ssh, 第 9.4.8 节


[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一页 ]

Debian 参考手册

CVS, 星期一 四月 3 22:58:51 UTC 2005

Osamu Aoki osamu@debian.org
Translator: Hao "Lyoo" Liu iamlyoo@163.net
作者, 第 A.1 节