LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 8020|回复: 23

archlinux强化篇之debian

[复制链接]
发表于 2008-5-2 14:17:38 | 显示全部楼层 |阅读模式
1、前言

之所以在archlinux上提及debian强化,主要在于debian充沛的镜像资源、庞大的软件库和大多数包的打包质量优良,在arch上装上debian的包管理就可方便的从附近的debian镜像获取软件源码和非常有价值的patch及少量可以使用的二进制包,而且占地不多对系统本身没啥影响,只要你只是apt-get update和apt-get source来用,除非你apt-get dist-upgrade,那样的话,arch就gone away了,只剩下纯粹的debian了

2、实干

aur上曾有过dpkg和apt的包,不过现在搜不找不到了,可能是上传的老兄亦或被别人删了,下面贴下对应的pkgbuild,具体的(email联系)我会放到附件里。
简单步骤:

  1. cd dpkg
  2. makepkg
  3. sudo pacman -U dpkg-1.14.18-2-i686.pkg.tar.gz
  4. cd ../apt
  5. makepkg
  6. sudo pacman -U apt-0.7.12-2-i686.pkg.tar.gz
复制代码

dpkg

  1. pkgname=dpkg
  2. pkgver=1.14.18
  3. pkgrel=2
  4. pkgdesc="Debian Package Manager"
  5. arch=(i686 x86_64)
  6. url="http://www.debian.org"
  7. license="GPL"
  8. depends=('bzip2' 'zlib')
  9. source=(http://ftp.debian.org/debian/pool/main/d/dpkg/dpkg_${pkgver}.tar.gz)
  10. #md5sums=('')

  11. build() {
  12.   cd ${startdir}/src/${pkgname}-${pkgver}
  13.   ./configure PERL_LIBDIR=/usr/lib/perl5/vendor_perl \
  14.       --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib \
  15.       --with-zlib=static --with-bz2=static \
  16.       --without-dselect --without-start-stop-daemon

  17.   make DESTDIR=${startdir}/pkg install

  18.   mv ${startdir}/pkg/usr/share/perl5 ${startdir}/pkg/usr/lib

  19. }
复制代码

apt

  1. pkgname=apt
  2. pkgver=0.7.12
  3. pkgrel=2
  4. pkgdesc="Advanced front-end for dpkg"
  5. arch=(i686 x86_64)
  6. url="http://packages.debian.org/sid/apt"
  7. license="GPL"
  8. depends=('bzip2' 'zlib' 'dpkg')
  9. source=(http://ftp.debian.org/debian/pool/main/a/apt/apt_${pkgver}.tar.gz)
  10. #md5sums=('')

  11. build() {
  12.   cd ${startdir}/src/${pkgname}-${pkgver}
  13.   cp ${startdir}/makefile-doc doc/makefile
  14.   install -d build/doc/doxygen
  15.   ./configure --prefix=/usr --sysconfdir=/etc --localedir=/var

  16.   make || return 1
  17.   
  18.   install -d ${startdir}/pkg/{etc/{apt/apt.conf.d,logrotate.d/apt},usr/{bin,lib/apt/methods,share/{apt,bug/apt/script,man/man{1,5,8}}}}
  19.   install -d ${startdir}/pkg/usr/lib/dpkg/methods/apt
  20.   install -d ${startdir}/pkg/var/{lib/apt/lists/partial,cache/apt/archives/partial}

  21.   cp bin/apt-* ${startdir}/pkg/usr/bin/
  22.   
  23.   find bin/ -type f -name "libapt-pkg*.so.*" \
  24.    -exec cp -a "{}" ${startdir}/pkg/usr/lib/ \;
  25.   find bin/ -type l -name "libapt-pkg*.so.*" \
  26.    -exec cp -a "{}" ${startdir}/pkg/usr/lib/ \;
  27.   
  28.   cp bin/methods/* ${startdir}/pkg/usr/lib/apt/methods/
  29.   
  30.   cp scripts/dselect/* ${startdir}/pkg/usr/lib/dpkg/methods/apt/
  31.   cp -r locale ${startdir}/pkg/usr/share/
  32.   
  33.   cp debian/bugscript ${startdir}/pkg/usr/share/bug/apt/script
  34.   cp debian/apt.logrotate ${startdir}/pkg/etc/logrotate.d/apt
  35.   
  36.   cp share/debian-archive.gpg ${startdir}/pkg/usr/share/apt
  37.   cp debian/apt.conf.autoremove ${startdir}/pkg/etc/apt/apt.conf.d/01autoremove
  38.   
  39.   cp doc/*.1 ${startdir}/pkg/usr/share/man/man1
  40.   cp doc/*.5 ${startdir}/pkg/usr/share/man/man5
  41.   cp doc/*.8 ${startdir}/pkg/usr/share/man/man8

  42. }
复制代码

makefile-doc,放到apt目录下

  1. # -*- make -*-
  2. BASE=..
  3. SUBDIR=doc

  4. # Bring in the default rules
  5. include ../buildlib/defaults.mak

  6. # Debian Doc SGML Documents
  7. SOURCE = dpkg-tech.sgml design.sgml files.sgml guide.sgml guide.it.sgml \
  8.          cache.sgml method.sgml offline.sgml
  9. include $(DEBIANDOC_H)

  10. # XML man pages
  11. SOURCE = apt-cache.8 apt-get.8 apt-cdrom.8 apt.conf.5 sources.list.5 \
  12.          apt-config.8 apt_preferences.5  \
  13.          apt-sortpkgs.1 apt-ftparchive.1 apt-extracttemplates.1 \
  14.          apt-key.8 apt-secure.8 apt-mark.8
  15. INCLUDES = apt.ent         
  16. include $(XML_MANPAGE_H)

  17. # Examples
  18. SOURCE = examples/apt.conf examples/sources.list examples/configure-index
  19. TO = $(DOC)
  20. TARGET = binary
  21. include $(COPY_H)

  22. #.PHONY: headers library clean veryclean all binary program doc
  23. doc:

  24. ifdef DOXYGEN
  25. DOXYGEN_SOURCES = $(shell find $(BASE)/apt-pkg -not -name .\\\#* -and \( -name \*.cc -or -name \*.h \) )

  26. clean: doxygen-clean

  27. doxygen-clean:
  28.         rm -fr $(BUILD)/doc/doxygen
  29.         rm -f $(BUILD)/doc/doxygen-stamp

  30. $(BUILD)/doc/Doxyfile: Doxyfile.in
  31.         (cd $(BUILD) && ./config.status doc/Doxyfile)

  32. $(BUILD)/doc/doxygen-stamp: $(DOXYGEN_SOURCES) $(BUILD)/doc/Doxyfile
  33.         rm -fr $(BUILD)/doc/doxygen
  34.         $(DOXYGEN) $(BUILD)/doc/Doxyfile
  35.         touch $(BUILD)/doc/doxygen-stamp

  36. doc: $(BUILD)/doc/doxygen-stamp

  37. endif
复制代码


3、扫尾

安装完dpkg、apt后,基本工作就做完了,下面来解决apt的gpg验证等
首先编辑一个附近debian镜像用的sources.list
sudo vi /etc/apt/sources.list
[PHP]
deb http://ftp.sjtu.edu.cn/debian sid main non-free contrib
deb-src http://ftp.sjtu.edu.cn/debian sid main non-free contrib
[/PHP]
其次,touch下apt要用的lock文件
[PHP]
sudo touch /var/lib/apt/lists/lock /var/cache/apt/archives/lock
[/PHP]
最后来解决下gpg验证,为了保险起见,下载debian-archive-keyring中的gpg文件到/usr/share/keyrings下面:
[PHP]
wget -c http://ftp.de.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2008.04.16+nmu1.tar.gz
tar xvf debian-archive-keyring_2008.04.16+nmu1.tar.gz
su
mkdir -p /usr/share/keyrings
mv debian-archive-keyring-2008.04.16+nmu1/keyrings/*.gpg /usr/share/keyrings/
[/PHP]
导入gpg,附带导入你选择镜像站点的gpg,apt-get update时会提示的,我选的这个是A70DAF536070D3A1
[PHP]
su
gpg --import /usr/share/keyrings/debian-keyring.gpg
gpg --import /usr/share/apt/debian-archive.gpg
gpg --armor --export A70DAF536070D3A1 |apt-key add -
[/PHP]
如此,所需工作都已完成,可以利用apt-get来更新及下载源代码了,比如
[PHP]
apt-get update
apt-get source nano
[/PHP]

[PHP]
$ sudo apt-get update
密码:
命中 http://ftp.sjtu.edu.cn sid Release.gpg      
忽略 http://ftp.sjtu.edu.cn sid/main Translation-zh_CN
忽略 http://ftp.sjtu.edu.cn sid/non-free Translation-zh_CN
忽略 http://ftp.sjtu.edu.cn sid/contrib Translation-zh_CN
命中 http://ftp.sjtu.edu.cn sid Release
命中 http://ftp.sjtu.edu.cn sid/main Packages/DiffIndex
命中 http://ftp.sjtu.edu.cn sid/non-free Packages/DiffIndex
命中 http://ftp.sjtu.edu.cn sid/contrib Packages/DiffIndex
命中 http://ftp.sjtu.edu.cn sid/main Sources/DiffIndex
命中 http://ftp.sjtu.edu.cn sid/non-free Sources/DiffIndex
命中 http://ftp.sjtu.edu.cn sid/contrib Sources/DiffIndex
正在读取软件包列表... 完成

$ apt-get source nano
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
需要下载 1389kB 的源代码包。
获取:1 http://ftp.sjtu.edu.cn sid/main nano 2.0.7-1 (dsc) [731B]
获取:2 http://ftp.sjtu.edu.cn sid/main nano 2.0.7-1 (tar) [1364kB]
获取:3 http://ftp.sjtu.edu.cn sid/main nano 2.0.7-1 (diff) [24.7kB]               
下载 1389kB,耗时 56s (24.5kB/s)                                                   
gpg: 于 2007年12月24日 星期一 22时45分15秒 CST 创建的签名,使用 DSA,钥匙号 917A225E
gpg: 无法检查签名:找不到公钥
dpkg-source: extracting nano in nano-2.0.7
dpkg-source: info: unpacking nano_2.0.7.orig.tar.gz
dpkg-source: info: applying nano_2.0.7-1.diff.gz
[/PHP]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2008-5-2 15:25:33 | 显示全部楼层
sigh, 我就是因为受不了debian/ubuntu 复杂无比的dependency才逃来Archlinux的 ...

偶尔需要的话,直接拿source+patch过来也能用
回复 支持 反对

使用道具 举报

发表于 2008-5-2 16:54:31 | 显示全部楼层
服你了LZ,我肯定不会这么用的。
回复 支持 反对

使用道具 举报

发表于 2008-5-3 00:03:27 | 显示全部楼层
不得不说lz 强悍, 但想问一下, 为什么不将gentoo的 ebuild 移植过来, 那对源码的使用更方便了, 大家说呢。
顺便还是赞一下apt的经典。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-3 00:47:13 | 显示全部楼层
gentoo的portage解开后太占地方,因为不是所有的源码都是需要的,从debian的镜像获取源码+patch,多数速度还是令人满意的,portage的pkgbuild倒是很容易写,可以参照下
http://linuxsir.cn/bbs/thread328022.html

里面提及的arch下实现因为没提及pkgbuild基本和上面的差不多

以后有时间想把fedora的yum搞过来,rpm则早就装上了
回复 支持 反对

使用道具 举报

发表于 2008-5-3 00:55:03 | 显示全部楼层
支持楼主,找个时间试试看
回复 支持 反对

使用道具 举报

发表于 2008-5-11 19:58:02 | 显示全部楼层
试了下,不过离实用还有待完善, apt-get install foo
楼主再写细点   也许是我弄的哪个步骤没对,找时间继续再试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-11 20:33:27 | 显示全部楼层
apt-get install foo 会附带把相关依赖搭上,多数情况下加--ignore-missing并不能使其只下载想要的二进制包,这时直接获取包的位置使用wget等来下载就行了,前面加上镜像的地址加上apt获取的即可

[PHP]
$wget -c http://ftp.sjtu.edu.cn/debian/`apt-cache show nano | grep pool | awk '{print $2}'`
--2008-05-11 20:24:07--  http://ftp.sjtu.edu.cn/debian/pool/main/n/nano/nano_2.0.7-1_i386.deb
正在解析主机 ftp.sjtu.edu.cn... 202.38.97.230
Connecting to ftp.sjtu.edu.cn|202.38.97.230|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:584268 (571K) [application/x-debian-package]
Saving to: `nano_2.0.7-1_i386.deb'
...
[/PHP]
回复 支持 反对

使用道具 举报

发表于 2008-5-12 09:19:47 | 显示全部楼层
严重支持楼主,debian的包管理机制和分类要比阿rchlinux强
回复 支持 反对

使用道具 举报

发表于 2008-5-17 09:08:22 | 显示全部楼层
apt-get install aptitude
  1. 正在读取软件包列表...
  2. 正在分析软件包的依赖关系树...
  3. 将会安装下列额外的软件包:
  4.   apt apt-utils aptitude-doc-en base-passwd debconf debconf-i18n
  5.   debian-archive-keyring gcc-4.1-base gnupg gpgv libbz2-1.0 libc6
  6.   libclass-accessor-perl libdb4.2 libdb4.4 libgcc1 libgcrypt11 libgdbm3
  7.   libgnutls13 libgpg-error0 libgpmg1 libhtml-parser-perl libhtml-tagset-perl
  8.   libhtml-template-perl libio-string-perl libldap2 liblocale-gettext-perl
  9.   liblzo1 libncurses5 libncursesw5 libopencdk8 libparse-debianchangelog-perl
  10.   libreadline5 libsasl2-2 libsasl2-modules libsigc++-2.0-0c2a libssl0.9.8
  11.   libstdc++6 libtasn1-3 libtasn1-3-bin libtext-charwidth-perl
  12.   libtext-iconv-perl libtext-wrapi18n-perl libtimedate-perl liburi-perl
  13.   libusb-0.1-4 libxml-libxml-common-perl libxml-libxml-perl
  14.   libxml-namespacesupport-perl libxml-sax-perl libxml-simple-perl libxml2
  15.   makedev perl perl-base perl-doc perl-modules readline-common sgml-base
  16.   tzdata xml-core zlib1g
  17. 建议安装的软件包:
  18.   dpkg-dev apt-doc bzip2 tasksel debtags debconf-doc debconf-utils whiptail
  19.   dialog gnome-utils libterm-readline-gnu-perl libgnome2-perl libqt-perl
  20.   libnet-ldap-perl gnupg-doc xloadimage locales glibc-doc rng-tools gnutls-bin
  21.   gpm libipc-sharedcache-perl libsasl2-modules-otp libsasl2-modules-ldap
  22.   libsasl2-modules-sql libsasl2-modules-gssapi-mit libwww-perl man-browser
  23.   groff sgml-base-doc debhelper
  24. 下列【新】软件包将被安装:
  25.   apt apt-utils aptitude aptitude-doc-en base-passwd debconf debconf-i18n
  26.   debian-archive-keyring gcc-4.1-base gnupg gpgv libbz2-1.0 libc6
  27.   libclass-accessor-perl libdb4.2 libdb4.4 libgcc1 libgcrypt11 libgdbm3
  28.   libgnutls13 libgpg-error0 libgpmg1 libhtml-parser-perl libhtml-tagset-perl
  29.   libhtml-template-perl libio-string-perl libldap2 liblocale-gettext-perl
  30.   liblzo1 libncurses5 libncursesw5 libopencdk8 libparse-debianchangelog-perl
  31.   libreadline5 libsasl2-2 libsasl2-modules libsigc++-2.0-0c2a libssl0.9.8
  32.   libstdc++6 libtasn1-3 libtasn1-3-bin libtext-charwidth-perl
  33.   libtext-iconv-perl libtext-wrapi18n-perl libtimedate-perl liburi-perl
  34.   libusb-0.1-4 libxml-libxml-common-perl libxml-libxml-perl
  35.   libxml-namespacesupport-perl libxml-sax-perl libxml-simple-perl libxml2
  36.   makedev perl perl-base perl-doc perl-modules readline-common sgml-base
  37.   tzdata xml-core zlib1g
  38. 共升级了 0 个软件包,新安装了 63 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
  39. 需要下载 0B/34.2MB 的软件包。
  40. 解压缩后会消耗掉 97.7MB 的额外空间。
  41. 您希望继续执行吗?[Y/n]dpkg:在 PATH 中找不到“update-rc.d”。
  42. dpkg: 共有 1 个程序没在 PATH 中找到。
  43. 提示:root 的 PATH 环境变量通常应当包含 /usr/local/sbin、/usr/sbin 和 /sbin
复制代码

  1. # wget -c http://debian.cn99.com/debian/`apt-cache show aptitude | grep pool | awk '{print $2}'`
  2. # dpkg -i aptitude_0.4.4-4_i386.deb
  3. dpkg:在 PATH 中找不到“update-rc.d”。
  4. dpkg: 共有 1 个程序没在 PATH 中找到。
  5. 提示:root 的 PATH 环境变量通常应当包含 /usr/local/sbin、/usr/sbin 和 /sbin
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表