DPKG/APT 常用指令 (下)[转]

http://tetralet.luna.com.tw/index.php?op=ViewArticle&articleId=220&blogId=1取得原始�a

�m然 Debain 的套件管理主要是操作 deb �@�已��g好的套件�n,但官方的 Debian Archiver �e的所有套件同�r都��附上原始�a,且�@些原始�a��和 deb �n放在同一��目�之下。�@�N公�_透明的作法是很�人激�p的。

而在 Debian 中要取得套件的原始�a也出乎意料得��巍J紫龋�和 deb �似的,您必�在 /etc/apt/sources.list 中加入 deb-src �目,�碇甘� apt-get 如何取得原始�a。例:

# lenny
deb http://ftp.tw.debian.org/debian stable main contrib non-free
deb-src http://ftp.tw.debian.org/debian stable main contrib non-free
然後,在�M行 apt-get update 後,就可以使用 apt-get 直接取得放在 Debian Archiver 中的原始�a了。以 zsnes �槔�:
apt-get source zsnes
一般下�d回�淼脑�始�a��包含以下�n案:
zsnes_1.510-2.2.dsc → 套件�Y�及��^�a
zsnes_1.510.orig.tar.gz → 原始�a
zsnes_1.510-2.2.diff.gz → ��g套件所需的完整 debian 目�
如果您有安�b dpkg-dev 套件,在下�d完成後 apt-get ���自�犹婺�解�嚎s。您也可以自行手�咏忾_那些 *.tar.gz �n,或是在稍後安�b了 dpkg-dev 套件後,使用以下指令�斫忾_套件:
dpkg-source -x zsnes_1.510-2.2.dsc
但�K不是所有的 deb 套件主�C都��提供原始�a就是了。
��涮准���g�h境:
如果您想手�泳��g��g,建�h您能依照 在 Debian GNU/Linux �e建立 chroot �h境 �e的�f明,使用 chroot �h境�砭��g套件。

在 Debian �e,已有方便的指令�您能�p�得��浜媚��套件的��g�h境。以 LilyTerm �槔�:
apt-get build-dep lilyterm

apt-get ���依�� lilyterm 套件所提供的��g�Y�自�影阉�有相�P的套件全部安�b�M�怼#ù�r就是 Package Maintainer 的功力大考�了)

但如果出�F了以下�e�`�息:

# apt-get build-dep lilyterm
E: �o法�M足套件 lilyterm 的��g相依�P�S。
��著以以下指令找出 LilyTerm 的相依套件:
apt-cache showsrc lilyterm | grep '^Build-Depends'
�K手�影惭b�@些套件,�碚页鲞@些套件�o法安�b的原因。
重新��g deb 套件
若您想自行��g�@些套件,�在取得 deb 套件原始�a�K��浜镁��g�h境後,�M入套件的目��e,�K下�_以下指令:
dpkg-buildpackage -rfakeroot -us -uc

就���_始��g套件�K生成 deb �n了。

不�^,建�h您在��g之前,能修改 debian/changelog �n,�K在原始版�後面加上 .foo,像是由 1:0.17.4-2 → 1:0.17.4-2.im,如此可以避免下次下�_ apt-get upgrade �r,又�⒃�始的 1:0.17.4-2 �o�b了�M�怼�apt-get �A�O遇到相同版��r,��以列在 source.lists �e的套件���先。

而加上了 .foo 另一�����c是,若有新的版本出�F�r,如 1:0.17.4-3,它���安�b更新後的版本。若您在 apt-get upgrade �r�l�F�@����w有推出了新版本,您可能想要�_�J新的版本是不是已符合您的需求,或再重新��g�@��新版本,�K在新版�後面再次加上 .foo,�K待及下次版本更新。如此���是比�^合宜的做法。

自行��g新版的 deb 套件
如果某����w推出了新版本,但�s未能及�r�M入 Debian Archiver 之中,您可能��希望自行��g deb 套件。但如何��g新版的套件��是��不小的挑�穑�以下���人的作法:

首先,先取得 deb 套件原始�a:
apt-get source zsnes
然後,取得新版的 zsnes 的原始�a,(否�t dpkg-buildpackage ��出�F警告�息…但因�橹皇蔷�告�息,所以其��不改也�o所�^。感�x caleb 的指正!):
wget http://zsnes.sf.net/zsnes151bsrc.tar.bz2
tar xvjf zsnes151bsrc.tar.bz2
�K�⒃�本 deb 套件原始�a中的 debian 目��}�u到新版本的目��e:
cp -a zsnes-1.510/debian/ zsnes_1_51b
然後,�M入套件的目�,�K修改 debian/changelog 以反��新版本的�化:
vi debian/changelog

dch -i

在此建�h在 debian/changelog �e使用像是 1.510+b-0~1 之�的版本��a,那�N在�新版(Debian 可能��用 1.510+b-1 �@��版本��a)�M入 Debian �r,就可以利用 apt-get 直接升��� Debian 官方的版本了。

接下�恚�依��新版本的�化修改 debian 目��e的�n案,而�@可不是件容易事。

完成後,下�_以下指令,就���能�a生新的 deb 套件了:

dpkg-buildpackage -rfakeroot -us -uc
��然,�^程肯定不��如此�p���意,您必��θ绾未虬� deb 套件有一定的�J�R才能�以上�^程更容易些。但其��大部份套件在版本�g的�化不��太�^�×遥�以上步�E的成功�C率其���U高的。
自行��g deb 套件�腥朔�
如果您��於如何打包 deb 套件一�o所知,但您又不希望使用 ./configure; make; make install �戆惭b��w,Debian 也提供了一�� deb 套件�腥朔ā�

以 LilyTerm �槔�,您按照其�W站上的�f明,安�b了 libvte-dev、 autoconf、 automake、 gettext、 libxml-parser-perl 及 intltool 等套件,�K�绦� ./autogen.sh �懋a生 configure �n案,�K�M行��g。然後 不要下�_ make install,取而代之的是�绦� checkinstall 指令:
bash . /autogen.sh

./configure --prefix=/usr \
            --mandir=/usr/share/man \
            --infodir=/usr/share/info \
            --sysconfdir=/etc

make

checkinstall
在回答������}後,不一���阂���腥税娴� lilyterm_0.9.7-1_i386.deb 就��出�F了。�@��作法�m然不�M完美,但��在十分的方便,您或�S想要�L�看看。
自行��g Linux Kernel
如果您想要自行��g Linux Kernel,Debain 也提供了�O便利的作法。

首先,就如同一般��g Linux Kernel 的做法,您得先取得 Linux Kernel 的原始�a,然後解�嚎s。��然,您可以去 Linux Kernel 官方站台下�d;但在 Debian �e也提供了��方便的方法:
apt-get install linux-source-2.6.29

它��把 Linux Kernel 放在 /usr/src �e。

接下�恚�依您的需求套用像 L7-filter 或是 reiser4 之�的 patch,在此就不�述了。

然後,�M入 Linux Kernel 的原始�a目��e,下�_:
make menuconfig

�碇付� Kernel 的��g�目。Debian Kernel 的官方 config 可於 /boot 下找到。

在�O定完成後,下�_:

make-kpkg --config oldconfig --rootcmd fakeroot --uc --us --initrd kernel_image modules_image
就���_始��g Kernel 的 deb �n了。依您的��g�x�及�C器等�,有�r得需���小�r才能完成��g工作。
自行��g Kernel Module
Debian ��於如何��g Kernel Module 也提供了很方便的作法:利用 module-assistant。

首先,安�b module-assistant 套件:
apt-get install module-assistant
然後,��浜� module-assistant ��g�h境:
module-assistant prepare
然後,�著找出 module-assistant 所使用的模�M名�Q:
# module-assistant search nvidia
nvidia-kernel-source (source package not installed):
-- Binary package(s) for kernel(s):
   + (2.6.26-1-vserver-686):
接下�恚�指定 module-assistant ��g�套件即可:
# module-assistant auto-build nvidia-kernel-source
Extracting the package tarball, /usr/src/nvidia-kernel.tar.bz2, please wait...
Done with /usr/src/nvidia-kernel-2.6.26-1-vserver-686_173.14.09-5+2.6.26-13_i386.deb .

之後安�b那��由 module-assistant 所生成的 deb 套件就大功告成了。

如果您不是使用 chroot �h境�砭��g模�M的�,您或�S想使用以下指令:

# module-assistant auto-install nvidia-kernel-source

它��自�泳��g deb 套件,�K在��g完成後,自�影惭b� deb 套件,�K一�惆阉�有相依套件都自�友b�M�怼�

不�^以上作法�H可用於 Debian 有提供的 *-source 套件。至於 Debian �]有提供的套件,��⒖忌衔闹械� make-kpkg 及 checkinstall 吧!

系�y�A�O指令

有些指令,像是 visudo 或是 crontab -e,它����呼叫『�A�O文字��器』�砭���O定�n。

在 Debian �e,使用了一套『替代指令』�碜�使用者可以方便的指定�@些系�y的�A�O指令。例如,您想指定要�⒛��指令做�轭A�O文字��器:

update-alternatives --config editor
或是要指定系�y的�A�O Window Manager:
update-alternatives --config x-window-manager
或是要指定系�y的�A�O X Terminal Emulator:
update-alternatives --config x-terminal-emulator
或是重�O系�y的所有�A�O指令:
update-alternatives --all
而哪些套件可��做系�y�A�O指令基本上是由套件的�S�o者指定的,不�^您也可以手�釉O定。��⒖� update-alternatives 的�f明文件以取得更多的�Y�。
�e�`回��
��然,Debian �^非�M善�M美的系�y。如果您�l�F了 Debian 套件�e的任何�e�`,或是希望 Debian 套件提供什�N功能�r,您可以利用 reportbug 向 Debian bug tracking system (BTS) 回�蟆@�如,向 gcin 的 Debian Package Maintainer 回�箦e�`:
reportbug gcin

您可以在 ~/.reportbugrc 中�O定您的名字及 E-mail �ぬ�:

realname "Tetralet"
email "[email protected]"
一般而言,您�必�同�r�O定您的 SMTP Server。以 GMAIL �槔�:
smtphost smtp.gmail.com:587
smtpuser [email protected]
smtppasswd XXX
smtptls
另外,像是 Debian Package 的翻�g�n也都可以利用 BTS �硖峤弧��人�J�椋�Debian 的�e�`回�笙到y正是 Debian 如此�c�不同的主因之一,它的�_有助於提�N Debian 套件的品�|。

不�^,相反的,因�橛辛� BTS �@套�e�`回�笙到y,Debian 的 Package Maintainer 常常���榱诵拚�某些比�^罕�的���}而打上一些未��^完整�y�的修正�n,�@有�r��� Debian 的套件和其它 Linux �l行版比起�硎沁^於激�M了,有�r候甚至��造成不小的���},像之前的 SSH 事件便是一例。

以上所列出的�H是敝人常用的 DPKG/APT 指令,至於其它的指令及��嫡��㈤�各指令的�f明文件,在此卓���o法一一列出。

Debian 提供了很��大的套件管理�C制,��於一般的使用者而言,只要熟����指令�K按照 Debian 的��t走,它是很方便很容易上手的;��於熟�於 Debian 套件管理�C制的人,有�r要�D�Q到其它系�y去����m��不良呢!

但相�Φ模���於已熟�於其它系�y的�M�A使用者或是套件�S�o者而言,Debian 的套件管理��t就�@得�^於�}�s且�D��,也�y怪有人在抱怨某些 Debian 套件包得��在不怎�N�� - 因�� Debian 的��t��在多到�人很�y消化。不�^,只要熟悉以上操作,基本上 Debian 的套件系�y是很��大很�定的;就算套件若真有什�N���},透�^ Debian 的 BTS 系�y大部份���都能有效解�Q;再加上 Debian 的使用者�多,只要有任何���}大多都��在短期�g被�l掘出�恚�也因此 Debian 系�y的品�|一直是在水�手�上的。��人�J�椋�不管��於初�W者或�M�A使用者而言,Debian �^�κ且��很不�e的�x�瘛�

咦?aptitude 呢?��人在使用上,�l�F apt 除了在要 hold 套件�r�]有比�^直�X的指令外,其它的地方都比 aptitude 好用多了。(也�S是我不熟悉 aptitude 啦!);反正系�y中只需一�M套件管理程式就�蛄耍�所以,我安�b好系�y的第一件事,就是把 aptutide �o purge 掉:
apt-get purge aptitude tasksel tasksel-data
嗯,�是�渭�的命令列比�^好用呀! XD

你可能感兴趣的:(#debian)