关闭

Debian生存工具

1294人阅读 评论(0) 收藏 举报

Debian生存工具

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


3.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

3.3.2 APT升级错误及解决方法

unstable/testing进行升级时可能出现升级Debian系统, 第 2.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


3.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目录。

然后开始安装:

     # 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

3.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

3.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

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


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

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

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

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

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

     boot: rescue root=/dev/hda12 3

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


3.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。


3.4 Debian必杀技

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


3.4.1 文件信息

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

     $ dpkg {-S|--search} pattern # search for pattern in installed packages
     $ zgrep -e pattern /local/copy/of/debian/woody/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

3.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*

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

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

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

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

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


3.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菜单系统
     ...

3.4.5 删除软件包

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

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

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

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

3.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___FCKpd___28quot;

3.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软件包升级到最新版本

3.4.8 删除缓存包文件

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

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

3.4.9 记录/拷贝系统配置

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

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

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

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

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

3.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

3.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方式远程访问存放在其中的包文件了。


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

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


3.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).


3.5 其它Debian特性


3.5.1 dpkg-divert命令

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

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

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


3.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.

3.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

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


3.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登记过。


3.5.5 停止daemon服务

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

如果拿不定把握(有关Exim、DHCP...),可执行ps aux或检查/etc/init.d/*/etc/inetd.conf下的内容,还可以检查/etc/hosts.denypidof命令也很有用(参阅pidof(8)

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

| / grep -v '^debian
 

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

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

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

___FCKpd___12

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


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

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

___FCKpd___13

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

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

___FCKpd___14

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


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

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

___FCKpd___15

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


3.4 Debian必杀技

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


3.4.1 文件信息

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

___FCKpd___16

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

___FCKpd___17

3.4.2 软件包信息

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

___FCKpd___18

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

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

___FCKpd___19

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

___FCKpd___20

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

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

___FCKpd___21

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

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


3.4.4 重新配置已安装软件包

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

___FCKpd___22

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

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

___FCKpd___23

3.4.5 删除软件包

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

___FCKpd___24

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

___FCKpd___25

3.4.6 阻止旧软件包升级

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

___FCKpd___26

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

___FCKpd___27

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

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

___FCKpd___28

3.4.7 stable/testing/unstable混合系统

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

___FCKpd___29

3.4.8 删除缓存包文件

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

___FCKpd___30

3.4.9 记录/拷贝系统配置

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

___FCKpd___31

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

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

___FCKpd___32

3.4.10 向stable系统引入软件包

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

___FCKpd___33

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

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

___FCKpd___34

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

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

___FCKpd___35

3.4.11 本地软件包文件

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

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

___FCKpd___36

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

___FCKpd___37

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


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

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


3.4.13 校验已安装软件包

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

___FCKpd___38

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


3.5 其它Debian特性


3.5.1 dpkg-divert命令

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

___FCKpd___39

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


3.5.2 equivs软件包

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

___FCKpd___40

3.5.3 自选命令

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

___FCKpd___41

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

想设置你喜爱的X window环境,执行update-alternatives来指定/usr/bin/x-session-manager/usr/bin/x-window-manager

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


3.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中停止它们:

___FCKpd___42

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

___FCKpd___43

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

___FCKpd___44

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


3.5.5 停止daemon服务

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

如果拿不定把握(有关Exim、DHCP...),可执行ps aux或检查/etc/init.d/*/etc/inetd.conf下的内容,还可以检查/etc/hosts.denypidof命令也很有用(参阅pidof(8)

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

| / awk '{print $1 " install"}' | / dpkg --set-selections # dselect --expert # reinstall system, de-select as needed
 

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

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

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

___FCKpd___12

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


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

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

___FCKpd___13

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

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

___FCKpd___14

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


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

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

___FCKpd___15

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


3.4 Debian必杀技

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


3.4.1 文件信息

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

___FCKpd___16

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

___FCKpd___17

3.4.2 软件包信息

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

___FCKpd___18

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

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

___FCKpd___19

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

___FCKpd___20

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

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

___FCKpd___21

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

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


3.4.4 重新配置已安装软件包

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

___FCKpd___22

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

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

___FCKpd___23

3.4.5 删除软件包

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

___FCKpd___24

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

___FCKpd___25

3.4.6 阻止旧软件包升级

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

___FCKpd___26

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

___FCKpd___27

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

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

___FCKpd___28

3.4.7 stable/testing/unstable混合系统

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

___FCKpd___29

3.4.8 删除缓存包文件

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

___FCKpd___30

3.4.9 记录/拷贝系统配置

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

___FCKpd___31

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

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

___FCKpd___32

3.4.10 向stable系统引入软件包

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

___FCKpd___33

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

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

___FCKpd___34

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

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

___FCKpd___35

3.4.11 本地软件包文件

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

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

___FCKpd___36

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

___FCKpd___37

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


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

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


3.4.13 校验已安装软件包

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

___FCKpd___38

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


3.5 其它Debian特性


3.5.1 dpkg-divert命令

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

___FCKpd___39

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


3.5.2 equivs软件包

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

___FCKpd___40

3.5.3 自选命令

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

___FCKpd___41

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

想设置你喜爱的X window环境,执行update-alternatives来指定/usr/bin/x-session-manager/usr/bin/x-window-manager

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


3.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中停止它们:

___FCKpd___42

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

___FCKpd___43

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

___FCKpd___44

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


3.5.5 停止daemon服务

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

如果拿不定把握(有关Exim、DHCP...),可执行ps aux或检查/etc/init.d/*/etc/inetd.conf下的内容,还可以检查/etc/hosts.denypidof命令也很有用(参阅pidof(8)

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4131次
    • 积分:65
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章存档